Python tidak bekerja di baris perintah git bash


236

Python tidak akan berjalan di git bash (Windows). Ketika saya mengetikkan python di baris perintah, itu akan membawa saya ke baris kosong tanpa mengatakan bahwa ia telah memasukkan python 2.7.10 seperti yang dilakukannya di Powershell. Itu tidak memberi saya pesan kesalahan, tetapi python tidak berjalan.

Saya sudah memastikan variabel lingkungan dalam PATH disertakan c:\python27. Apa lagi yang bisa saya periksa?


Sesi di mana masalah ini terjadi tampak seperti berikut:

user@hostname MINGW64 ~
$ type python
python is /c/Python27/python

user@hostname MINGW64 ~
$ python

... duduk di sana tanpa kembali ke prompt.


2
"Tidak ada yang terjadi"? Anda bahkan tidak mendapatkan kesalahan? (Artinya: Jika Anda mendapatkan pesan kesalahan, itu harus menjadi bagian dari pertanyaan Anda).
Charles Duffy

@recursive, bash memang menghormati PATH. (Namun, ia memiliki versi variabel itu sendiri).
Charles Duffy

11
Saya tidak mendapatkan pesan kesalahan saat saya mengetikkan python. Itu hanya membawa saya ke baris kosong, tetapi tidak menunjukkan bahwa python benar-benar berjalan
Caroline Morris

4
@CharlesDuff, dia menjelaskan, Charles, tidak ada pesan kesalahan. Bash membeku. Membekukan terminal adalah pesan kesalahan.
Hijau

1
@ Hijau, seperti yang seharusnya jelas dengan jawaban saya, itu bukan lagi poin yang kurang jelas - dan belum pernah menjadi bagian yang lebih baik dari setahun. Selain itu, pertanyaannya tidak begitu jelas pada titik ini seperti sekarang sampai saya mengeditnya untuk membuatnya tidak ambigu pada titik mengikuti komentar OP sebelumnya di utas ini; periksa sejarahnya.
Charles Duffy

Jawaban:


361

Cukup masukkan ini di git shell Anda di windows -> alias python='winpty python.exe', itu saja dan Anda akan memiliki alias ke python executable. Nikmati

PS Untuk penambahan alias permanen lihat di bawah,

cd ~
touch .bashrc

kemudian buka .bashrc, tambahkan perintah Anda dari atas dan simpan file. Anda perlu membuat file melalui konsol atau Anda tidak dapat menyimpannya dengan nama yang tepat. Anda juga harus memulai ulang shell untuk menerapkan perubahan.


17
Bekerja seperti pesona.
Green

4
Catatan: Anda harus menggunakan fungsi Python quit()untuk melarikan diri dari penerjemah.
anishpatel

5
Anda juga dapat menggunakan (standar windows) ^Z(ctrl-Z) + returnuntuk keluar.
Emil Styrke

6
Juga jika Anda ingin mengatur alias ke python 'berbeda' dari itu dari windows Anda dapat mengatur jalur yang memenuhi syarat untuk itu menggunakan sintaks berikutalias python='winpty /c/Python27/python.exe'
ScottMcC

10
Ini mungkin hal terbaik yang pernah saya temukan di internet.
mdw7326

79

Saya tidak melihat opsi berikutnya dalam daftar jawaban, tetapi saya bisa mendapatkan prompt interaktif dengan kunci "-i":

$ python -i
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55)
Type "help", "copyright", "credits" or "license" for more information.
>>> 

-i argumen: Ketika skrip dilewatkan sebagai argumen pertama atau opsi -c digunakan, masuk ke mode interaktif setelah mengeksekusi skrip atau perintah, bahkan ketika sys.stdin tampaknya bukan terminal. File PYTHONSTARTUP tidak dibaca. docs.python.org/3/using/cmdline.html#cmdoption-i
Mercury

Apakah ini lebih mahal daripada alias python = 'winpty python.exe' ?
PYK

1
ini adalah opsi tanpa upaya konfigurasi yang berfungsi di komputer mana pun.
vav

58

Ini adalah bug yang dikenal di MSys2, yang menyediakan terminal yang digunakan oleh Git Bash. Anda dapat mengatasinya dengan menjalankan Python build tanpa dukungan ncurses, atau dengan menggunakan WinPTY , digunakan sebagai berikut:

Untuk menjalankan program konsol Windows di mintty atau Cygwin sshd, prepend console.exe ke baris perintah:

$ build/console.exe c:/Python27/python.exe
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 10 + 20
30
>>> exit()

The binari prebuilt untuk msys cenderung bekerja dengan Git Bash. (Periksa apakah ada versi yang lebih baru jika waktu yang signifikan telah berlalu sejak jawaban ini diposting!).


Pada Git untuk Windows 2.7.1, coba juga menggunakan winpty c:Python27/python.exe; WinPTY dapat dimasukkan di luar kotak.


2
Bisakah Anda jelaskan build/console.exe c:/Python27/python.exe- apakah ini harus dijalankan di konsol GitMsys atau cara lain?
0leg

@ h3d0, ya, di dalam terminal. Tentu saja, ini mengasumsikan bahwa itu buildadalah direktori yang console.exeada di; perbarui jalur dengan tepat tergantung di mana / bagaimana Anda menginstalnya.
Charles Duffy

1
@ h3d0 Ya, ini adalah perangkat lunak tambahan; jawaban saya termasuk tautan.
Charles Duffy

7
Saya pikir Anda dapat menggunakannya sebagai winpty c:/Python27/python.exe, tanpa melakukan tambahan apa pun. Utilitas winpty.exe dapat ditemukan di Git \ usr \ bin. Saya menggunakan Git untuk Windows v2.7.1
Xun Yang

1
@XunYang, ... winpty dibundel sekarang? Bagus! Diedit dengan tepat.
Charles Duffy

47

Saya pengguna windows 10 dan saya telah menginstal GIT di sistem saya dengan hanya menerima default.

Setelah membaca jawaban di atas, saya mendapatkan 2 solusi untuk saya sendiri dan 2 solusi ini bekerja dengan baik pada GIT bash dan memfasilitasi saya untuk mengeksekusi pernyataan Python pada GIT bash.

Saya melampirkan 3 gambar terminal bash GIT saya . 1 dengan masalah dan 2 sebagai solusi.

MASALAH - Kursor hanya menunggu setelah menekan pythonperintah

masukkan deskripsi gambar di sini

SOLUSI 1

Jalankan winpty <path-to-python-installation-dir>/python.exedi terminal bash GIT .

Catatan: Jangan gunakan C:\Users\Admingaya jalur suka di GIT bash, sebaliknya gunakan /C/Users/Admin.

Dalam kasus saya, saya menjalankan winpty /C/Users/SJV/Anaconda2/python.exeperintah pada GIT bash

Atau jika Anda tidak tahu nama pengguna Anda kemudian jalankanwinpty /C/Users/$USERNAME/Anaconda2/python.exe

masukkan deskripsi gambar di sini

SOLUSI 2

Cukup ketik python -idan hanya itu.

masukkan deskripsi gambar di sini

Terima kasih.


2
Saya menemukan bahwa winptyitu juga akan bekerja dengan Windows Python Launcher, jadi yang Anda butuhkan adalah mis. alias py='winpty py'Di .bashrc Anda dan kemudian kembali normal.
Karl Knechtel

Ya, itu terserah Anda, bagaimana Anda mengatur hal-hal untuk membuat hidup Anda lebih baik.
hygull

9

Coba python -ialih-alih python, ini adalah masalah kursor.


8

Selain jawaban @ Charles-Duffy, Anda dapat menggunakan winpty secara langsung tanpa menginstal / mengunduh apa pun tambahan. Lari saja winpty c:/Python27/python.exe. Utilitas winpty.exe dapat ditemukan di Git \ usr \ bin. Saya menggunakan Git untuk Windows v2.7.1

Binari prebuilt dari @ Charles-Duffy adalah versi 0.1.1 (sesuai dengan nama file), sedangkan yang disertakan adalah 0.2.2


8

Solusi Git Bash - Luncurkan Python 2 & Python 3 dengan alias

HI . Ini (bagi saya) solusi terbaik untuk menjalankan kedua Python (Python 2.7 dan Python 3.x) langsung dari Git Bash pada Win 10 => menambahkan alias ke file alias yang digunakan Git Bash.

File alias Git Bash adalah aliases.sh . Terletak di:

C:\path where you installed Git\etc\profile.d\aliases.sh

1) Buka (dengan editor teks seperti Atom atau lainnya) aliases.sh

sebagai contoh: dalam kasus saya file tersebut dalam C:\Software\Develop\Git\etc\profile.d\aliases.sh

2) Tambahkan alias Anda untuk Python

Dalam kasus saya , python.exe diinstal di:

C:\Networking\Network Automation\Python 2.7\python.exe
C:\Networking\Network Automation\Python 3.7\python.exe

Jadi Anda harus membuat 2 alias, satu untuk Python 2 ( saya beri nama python2 ) dan yang lain untuk Python 3 ( saya beri nama hanya python ) Git Bash menggunakan struktur file linux sehingga Anda perlu mengubah "\" untuk "/" dan jika Anda memiliki jalur seperti contoh Otomasi Jaringan Anda, Anda meletakkannya dengan ""

"Otomasi Jaringan" , misalnya.

winpty adalah perintah ajaib yang akan memanggil executable.

Jadi tambahkan baris ini di awal alias .sh

alias python2='winpty C/Networking/"Network Automation"/"Python 2.7"/python.exe'
alias python='winpty C/Networking/"Network Automation"/"Python 3.7"/python.exe'

3) Tambahkan atau Ubah alias lain (jika Anda mau)

Saya juga memodifikasi ll alias untuk menampilkan semua file dan dalam daftar yang dapat dibaca manusia:

alias ll='ls -lah'

4) Simpan file aliases.sh


5) OKE !!! tutup dan luncurkan kembali Git Bash Anda

Sekarang, secara permanen Anda bisa meluncurkan kedua Python langsung dari Git shell yang baru saja ditulis

$ python -> luncurkan Python 3

$ python2 -> luncurkan Python 2

$ ll -> memasuki ls -lah untuk dengan cepat menampilkan daftar file detail Anda

Salam, Harry


5

Anda dapat mengubah target untuk pintasan Git Bash dari:

"C:\Program Files\Git\git-bash.exe" --cd-to-home 

untuk

"C:\Program Files\Git\git-cmd.exe" --no-cd --command=usr/bin/bash.exe -l -i

Ini adalah cara yang digunakan ConEmu untuk memulai git bash (versi 16). Versi terbaru memulainya secara normal dan begitulah saya sampai di sana ...


Ini bekerja untuk saya 👍. Patut dicatat apa yang dilakukan argumen bash.exe? halaman manual mengatakan -l: Buat bash bertindak seolah-olah itu telah dipanggil sebagai shell login,: -iJika opsi -i ada, shell bersifat interaktif
Hari

Dulu ConEmu bekerja dengan baik tanpa winpty beberapa waktu lalu dan aku benar-benar lupa apa yang aku lakukan. Terima kasih ini bekerja seperti sebelumnya!
chaz

5

ketik: 'winpty python' dan itu akan berhasil

gitbash memiliki beberapa masalah saat menjalankan perintah yang dimulai dengan python. ini berlaku untuk perintah python manage.py juga. Selalu mulai dengan 'winpty python manage.py' Setidaknya ini yang bekerja untuk saya. Menjalankan Windows 10.


2

Selain jawaban Teriviev @Vitaliy

coba touch .bash_profilekemudian tambahkan alias ke file.


1
Saya menggunakan .bashrc, tetapi ketika saya membuka Git Bash, saya mendapat pesan peringatan bahwa bashrc ada w / oa .bash_profile. Saya mengganti nama .bashrc menjadi .bash_profile dan sekarang peringatan itu hilang. Terima kasih.
JustinDanielson

2

2 solusi, bukan solusi: Di ​​Git Bash saya, perintah berikut hang dan saya tidak mendapatkan prompt kembali:

% python

Jadi saya hanya menggunakan:

% winpty python

Seperti yang dicatat beberapa orang di atas, Anda juga dapat menggunakan:

% python -i

.


1

Saya menggunakan MINGW64 melalui Visual Studio Code pada Windows 10 dan mencoba untuk menginstal node-sass(yang memerlukan python2). Saya mengikuti felixrieseberg / windows-build-tools # 56 di Github yang memecahkan masalah saya.

Ini adalah kasus khusus, tetapi saya memposting jika seseorang memiliki masalah yang sama:

npm --add-python-to-path='true' --debug install --global windows-build-tools

Ini menginstal python dan alat membangun lain yang diperlukan untuk %USERPROFILE%\.windows-build-tools\python27.


1

Untuk python versi 3.7.3 dalam vscode dengan gitbash sebagai terminal default saya berurusan dengan ini untuk sementara waktu dan kemudian mengikuti saran @Vitaliy Terziev untuk menambahkan alias ke .bashrc tetapi dengan spesifikasi sebagai berikut:

alias python = '“/ c / Pengguna / nama pengguna saya / AppData / Lokal / Program / Python / Python37 / python.exe”'

Perhatikan kombinasi tanda kutip tunggal dan ganda karena spasi "nama pengguna saya".

Bagi saya, "winpty" tidak dapat menyelesaikan jalur python di vscode.


0

Contoh lain dari masalah ini adalah menggunakan antarmuka baris perintah AWS Elastic Beanstalk (awsebcli, eb cli) dari git bash (MINGW64, Mintty) di windows (menggunakan git versi 2.19.0.windows.1).

Saya hanya memposting ini karena butuh beberapa saat untuk berakhir di sini, mencari eb-climasalah tertentu.

Perintah seperti eb initatau eb config save, yang membutuhkan input pengguna, tampaknya menyebabkan pembekuan / hang. Pada kenyataannya, saya kira konsol tidak diperbarui dengan teks yang meminta input pengguna. Selain itu, eb deployhanya memperbarui teks konsol setelah perintah selesai, jadi saya tidak bisa melihat pembaruan kemajuan sampai selesai.

Seperti disebutkan dalam catatan rilis git untuk windows (untuk v2.19.0) dan misalnya dalam jawaban Xun Yang , solusinya adalah menjalankan

winpty eb <command>(bukannya adil eb <command>)

Alternatif, seperti yang disarankan dalam masalah git untuk windows ini , bisa menggunakan konsol asli windows alih-alih mintty (opsi saat instalasi git).


0

Yang bekerja untuk saya adalah seperti yang disebutkan sebelumnya dalam jawaban-jawaban yang bagus di atas adalah alias sebagai berikut: (Saya menggunakan anaconda, jadi pertama temukan di mana jalur python, kemudian tambahkan ke alias pada git bash). 1. pada terminal anaconda saya jalankan: where python 2. pada git bash saya jalankan: alias python='winpty "C:\ProgramData\Anaconda3\envs\your_env_name\python.exe"' 3. Selesai. Python didefinisikan di dalam git Bash menggunakan alias.

Terima kasih kepada (Vitaliy Terziev & hygull) untuk jawaban mereka yang sangat membantu.


0
  1. python.exe -iberfungsi tetapi mendapat masalah saat keluar dari mode interaktif dengan mengirim "^ Z" (CTRL + Z). Jadi, sepertinya lebih baik digunakan winpty python.exedi Git Bash untuk Windows.

  2. Gunakan ~/bindirektori untuk membuat file wrap / referensi (seperti ~/bin/python) yang dapat diakses di mana saja (Anda dapat menggunakan referensi versi yang berbeda seperti ~/bin/python37).
    Kode di dalam file:

#!/usr/bin/env bash
# maybe declare env vars here like
# export PYTHONHOME=/c/Users/%USERNAME%/.python/Python36
# export PATH="${PATH}:/c/Users/%USERNAME%/.python/Python36"

# replace %USERNAME%,
# or use "~" instead of "/c/Users/%USERNAME%" if it works
winpty /c/Users/%USERNAME%/.python/Python36/python.exe ${@}

Saya hanya tidak suka alias "ajaib" ini yang selalu Anda lupa dari mana asalnya, dan kadang-kadang menyebabkan masalah dalam beberapa kasus.

  1. Gunakan ~/bin/pythonfile dan -iparameter:
#!/usr/bin/env bash
if [ -z "${@}" ]; then
    # empty args, use interactive mode
    /c/Users/%USERNAME%/.python/Python36/python.exe -i
else
    /c/Users/%USERNAME%/.python/Python36/python.exe ${@}
fi

19480756 [sig] bash 2740! sigpacket::process: Suppressing signal 18 to win32 process (pid 14820)- Contoh respons setelah mengirim ^Zdengan mode interaktif yang dijalankan olehpython.exe -i
Kirby

0

Ketik perintah PY alih-alih Python. Meminta Penerjemah (python.org).


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.