Python ไม่ทำงานในบรรทัดคำสั่งของ git bash


236

Python จะไม่ทำงานใน git bash (Windows) เมื่อฉันพิมพ์หลามในบรรทัดคำสั่งมันจะพาฉันไปที่บรรทัดว่างโดยไม่บอกว่ามันได้ป้อนไพ ธ อน 2.7.10 เช่นเดียวกับที่ทำใน Powershell มันไม่ได้ให้ข้อความข้อผิดพลาดแก่ฉัน แต่ python ก็ไม่ได้ทำงาน

ฉันได้ตรวจสอบแล้วว่าตัวแปรสภาพแวดล้อมใน PATH รวมอยู่c:\python27ด้วย ฉันจะตรวจสอบอะไรอีก


เซสชันที่ปัญหานี้เกิดขึ้นมีลักษณะดังนี้:

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

user@hostname MINGW64 ~
$ python

... นั่งอยู่ตรงนั้นโดยไม่กลับไปที่พรอมต์


2
"ไม่มีอะไรเกิดขึ้น"? คุณไม่ได้รับข้อผิดพลาดเลยเหรอ? (ซึ่งจะกล่าวว่า: หากคุณได้รับข้อความแสดงข้อผิดพลาดนั่นควรเป็นส่วนหนึ่งของคำถามของคุณ)
Charles Duffy

@ recursive ทุบตีไม่เคารพ PATH แน่นอน (มีตัวแปรของรุ่นนั้นเอง)
Charles Duffy

11
ฉันไม่ได้รับข้อความแสดงข้อผิดพลาดเมื่อฉันพิมพ์เป็นภาษาไพ ธ อน มันพาฉันไปที่บรรทัดว่าง แต่ไม่แสดงว่าไพ ธ อนทำงานจริง
Caroline Morris

4
@CharlesDuff เธอทำให้ชัดเจน Charles ไม่มีข้อความแสดงข้อผิดพลาด ทุบตีเพียงแค่หยุด การแช่แข็งเทอร์มินัลเป็นข้อความข้อผิดพลาด
Green

1
@ กรีนอย่างที่ควรจะเห็นได้ชัดในคำตอบของฉันนั่นไม่ใช่ประเด็นที่ขาดความชัดเจนอีกต่อไป - และยังไม่เคยมีส่วนที่ดีกว่าของปี ยิ่งไปกว่านั้นคำถามยังไม่ชัดเจนในจุดนี้เหมือนตอนนี้จนกว่าฉันจะแก้ไขเพื่อให้ชัดเจนในประเด็นตามความคิดเห็นของ OP ก่อนหน้าในหัวข้อนี้ ตรวจสอบประวัติ
Charles Duffy

คำตอบ:


361

เพียงแค่ป้อนสิ่งนี้ในเชลล์ git ของคุณบน windows -> alias python='winpty python.exe'นั่นคือทั้งหมดและคุณจะต้องมีนามแฝงในการปฏิบัติการของหลาม สนุก

ป.ล. สำหรับการเพิ่มชื่อแทนถาวรดูด้านล่าง

cd ~
touch .bashrc

จากนั้นเปิด. bashrc เพิ่มคำสั่งของคุณจากด้านบนและบันทึกไฟล์ คุณต้องสร้างไฟล์ผ่านคอนโซลหรือคุณไม่สามารถบันทึกด้วยชื่อที่เหมาะสม คุณต้องรีสตาร์ทเชลล์เพื่อใช้การเปลี่ยนแปลง


17
ทำงานเหมือนจับใจ
Green

4
หมายเหตุ: คุณจะต้องใช้ฟังก์ชั่น Python quit()เพื่อหลบหนีจากล่าม
anishpatel

5
คุณยังสามารถใช้ (มาตรฐาน windows) ^Z(ctrl-Z) + returnเพื่อออก
Emil Styrke

6
นอกจากนี้หากคุณต้องการตั้งค่านามแฝงเป็นงูหลาม 'แตกต่าง' จากหน้าต่างคุณสามารถตั้งค่าเส้นทางแบบเต็มโดยใช้ไวยากรณ์ต่อไปนี้alias python='winpty /c/Python27/python.exe'
ScottMcC

10
นี่อาจเป็นสิ่งที่ดีที่สุดที่ฉันเคยพบในอินเทอร์เน็ต
mdw7326

79

ฉันไม่เห็นตัวเลือกถัดไปในรายการคำตอบ แต่ฉันสามารถรับพรอมต์แบบโต้ตอบด้วยปุ่ม "-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 อาร์กิวเมนต์: เมื่อสคริปต์ถูกส่งเป็นอาร์กิวเมนต์แรกหรือใช้ตัวเลือก -c ให้เข้าสู่โหมดโต้ตอบหลังจากรันสคริปต์หรือคำสั่งแม้ว่า sys.stdin จะไม่ปรากฏว่าเป็นเทอร์มินัล ไฟล์ PYTHONSTARTUP ไม่ได้ถูกอ่าน docs.python.org/3/using/cmdline.html#cmdoption-i
Mercury

นี่แพงกว่าalias python = 'winpty python.exe'ไหม
PYK

1
นี่คือตัวเลือกที่มีความพยายามกำหนดค่าเป็นศูนย์ที่ทำงานบนคอมพิวเตอร์เครื่องใดก็ได้
vav

58

นี่เป็นข้อผิดพลาดที่รู้จักใน MSys2 ซึ่งมีเทอร์มินัลที่ใช้โดย Git Bash คุณสามารถแก้ไขได้ด้วยการรัน Python build โดยไม่มีการสนับสนุน ncurses หรือโดยใช้WinPTYใช้ดังนี้:

ในการรันโปรแกรมคอนโซล Windows ใน mintty หรือ Cygwin sshd ให้เพิ่ม console.exe ใน command-line:

$ 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()

ไบนารีที่สร้างไว้ล่วงหน้าสำหรับ MSYSมีแนวโน้มที่จะทำงานร่วมกับ Git Bash (ตรวจสอบว่ามีเวอร์ชันที่ใหม่กว่าหรือไม่ถ้าผ่านช่วงเวลาสำคัญไปแล้วนับตั้งแต่คำตอบนี้โพสต์!)


ในฐานะของ Git สำหรับ Windows 2.7.1 ให้ลองใช้winpty c:Python27/python.exeเช่นกัน WinPTY อาจรวมอยู่ในกล่อง


2
คุณกรุณาอธิบายbuild/console.exe c:/Python27/python.exe- นี่ควรจะทำงานในคอนโซล GitMsys หรือวิธีอื่นใด
0leg

@ h3d0 ใช่ภายในเทอร์มินัล แน่นอนนี่ถือว่าbuildเป็นไดเรกทอรีที่console.exeอยู่ในนั้น อัพเดตพา ธ อย่างเหมาะสมทั้งนี้ขึ้นอยู่กับตำแหน่ง / วิธีที่คุณติดตั้งจริง
Charles Duffy

1
@ h3d0 ใช่มันเป็นซอฟต์แวร์เพิ่มเติม คำตอบของฉันมีลิงค์
Charles Duffy

7
ฉันคิดว่าคุณสามารถใช้มันได้winpty c:/Python27/python.exeโดยไม่ต้องทำอะไรเพิ่มเติม โปรแกรมอรรถประโยชน์ winpty.exe สามารถพบได้ที่ Git \ usr \ bin ฉันใช้ Git สำหรับ Windows v2.7.1
Xun Yang

1
@XunYang, ... winpty ถูกรวมไว้ในตอนนี้หรือไม่? ดี! แก้ไขอย่างเหมาะสม
Charles Duffy

47

ฉันเป็นผู้ใช้ windows 10 และฉันได้ติดตั้งGITในระบบของฉันโดยเพียงแค่ยอมรับค่าเริ่มต้น

หลังจากที่ได้อ่านคำตอบข้างต้นผมได้ 2 โซลูชั่นสำหรับของตัวเองและแก้ไขปัญหาเหล่านี้ได้อย่างสมบูรณ์แบบ 2 ทำงานบนGITทุบตีและอำนวยความสะดวกให้ฉันไปดำเนินการงบหลามบนGITทุบตี

ฉันกำลังแนบรูป 3 รูปของเทอร์มินัล bash ของGIT ที่ 1 มีปัญหาและ 2 หลังเป็นวิธีแก้ปัญหา

ปัญหา - เคอร์เซอร์กำลังรอหลังจากกดปุ่มpythonคำสั่ง

ป้อนคำอธิบายรูปภาพที่นี่

แนวทางแก้ไข 1

ดำเนินการwinpty <path-to-python-installation-dir>/python.exeบนเทอร์มินัลทุบตีGIT

หมายเหตุ:ไม่ได้ใช้C:\Users\Adminชอบสไตล์เส้นทางในGIT/C/Users/Adminทุบตีใช้แทน

ในกรณีของฉันฉันดำเนินการwinpty /C/Users/SJV/Anaconda2/python.exeคำสั่งในทุบตีGIT

หรือหากคุณไม่ทราบชื่อผู้ใช้ของคุณก็ให้ดำเนินการwinpty /C/Users/$USERNAME/Anaconda2/python.exe

ป้อนคำอธิบายรูปภาพที่นี่

แนวทางแก้ไข 2

เพียงพิมพ์python -iและนั่นคือมัน

ป้อนคำอธิบายรูปภาพที่นี่

ขอบคุณ


2
ฉันพบว่ามันwinptyจะทำงานร่วมกับตัวเปิด Python ของ Windows ดังนั้นสิ่งที่คุณต้องการคือเช่นalias py='winpty py'ใน. bashrc ของคุณจากนั้นกลับสู่ปกติ
Karl Knechtel

ใช่นั่นขึ้นอยู่กับคุณคุณจะจัดการสิ่งต่าง ๆ เพื่อทำให้ชีวิตของคุณดีขึ้นได้อย่างไร
hygull


8

นอกจากคำตอบของ @ Charles-Duffy คุณสามารถใช้ winpty ได้โดยตรงโดยไม่ต้องติดตั้ง / ดาวน์โหลดอะไรเพิ่มเติม winpty c:/Python27/python.exeวิ่งเพียง โปรแกรมอรรถประโยชน์ winpty.exe สามารถพบได้ที่ Git \ usr \ bin ฉันใช้ Git สำหรับ Windows v2.7.1

ไบนารีที่สร้างไว้ล่วงหน้าจาก @ Charles-Duffy เป็นรุ่น 0.1.1 (ตามชื่อไฟล์) ในขณะที่หนึ่งที่รวมอยู่คือ 0.2.2


8

Git Bash วิธีแก้ปัญหา - เปิด Python 2 และ Python 3 พร้อมนามแฝง

สวัสดีค่ะ นี่คือ (สำหรับฉัน) ทางออกที่ดีที่สุดในการรันทั้ง Python (Python 2.7 และ Python 3.x) โดยตรงจาก Git Bash บน Win 10 => การเพิ่มนามแฝงลงในไฟล์นามแฝงที่ Git Bash ใช้

ไฟล์ Git Bash นามแฝงเป็นaliases.sh มันตั้งอยู่ใน:

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

1) เปิด (ด้วยโปรแกรมแก้ไขข้อความเช่น Atom หรืออื่น ๆ ) aliases.sh

สำหรับอดีต: ในกรณีของฉันไฟล์อยู่ใน C:\Software\Develop\Git\etc\profile.d\aliases.sh

2) เพิ่มชื่อแทนของคุณสำหรับ Python

ในกรณีของฉันpython.exeติดตั้งอยู่ใน:

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

ดังนั้นคุณต้องสร้างนามแฝง 2 ตัวชื่อหนึ่งสำหรับ Python 2 ( ฉันชื่อpython2 ) และอีกชื่อสำหรับ Python 3 ( ฉันชื่อpython เท่านั้น ) Git Bash ใช้โครงสร้างไฟล์ linux ดังนั้นคุณต้องเปลี่ยน"\"แทน"/" และถ้าคุณ มีเส้นทางเหมือนตัวอย่างเครือข่ายอัตโนมัติที่คุณใส่ไว้ใน""

"เครือข่ายการทำงานอัตโนมัติ" , อดีต

winpty เป็นคำสั่งเวทมนต์ที่จะเรียกใช้ไฟล์เอ็กซีคิ้วท์ได้

ดังนั้นเพิ่มบรรทัดเหล่านี้ที่จุดเริ่มต้นของaliases.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) เพิ่มหรือแก้ไขนามแฝงอื่น ๆ (ถ้าคุณต้องการ)

ฉันยังมีการปรับเปลี่ยนLLนามแฝงที่จะแสดงไฟล์ทั้งหมดและในรายการอ่านของมนุษย์:

alias ll='ls -lah'

4) บันทึกไฟล์ aliases.sh


5) ตกลง !!! ปิดและเปิดใช้ Git Bash อีกครั้ง

ตอนนี้อย่างถาวรคุณสามารถเปิด Python ทั้งสองโดยตรงจาก Git shell เพียงแค่เขียน

$ python -> เปิดตัว Python 3

$ python2 -> เปิดตัว Python 2

$ ll -> ป้อน ls -lah เพื่อแสดงรายการไฟล์โดยละเอียดของคุณ

ไชโยแฮร์รี่


5

คุณสามารถเปลี่ยนเป้าหมายสำหรับช็อตคัต Git Bash ได้จาก:

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

ถึง

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

นี่เป็นวิธีที่ ConEmu ใช้ในการเริ่ม git bash (รุ่น 16) เวอร์ชันล่าสุดเริ่มต้นตามปกติและเป็นวิธีที่ฉันไปถึงที่นั่น ...


สิ่งนี้ใช้ได้สำหรับฉัน👍 น่าสังเกตว่าข้อโต้แย้ง bash.exe ทำอะไร man pageพูดว่า-l: ทำการ bash ทำราวกับว่ามันถูกเรียกใช้เป็นเชลล์ล็อกอิน, -i: ถ้ามีตัวเลือก -i อยู่, เชลล์นั้นเป็นแบบโต้ตอบ
วันที่

ฉันเคยมี ConEmu ทำงานได้ดีโดยไม่ต้อง winpty นานมาแล้วและฉันลืมสิ่งที่ฉันทำ ขอบคุณสิ่งนี้ทำงานได้อย่างที่เคยเป็นมาก่อน!
chaz

5

ประเภท: 'winpty python' และจะใช้งานได้

gitbash มีปัญหาบางอย่างเมื่อเรียกใช้คำสั่งใด ๆ ที่เริ่มต้นด้วย python สิ่งนี้มีไว้สำหรับคำสั่ง python Manage.py เช่นกัน เริ่มต้นด้วย 'winpty python Manage.py' อย่างน้อยนี่เป็นสิ่งที่ใช้ได้ผลสำหรับฉัน ใช้ Windows 10


2

นอกจากคำตอบ @Vitaliy Terziev

ลองtouch .bash_profileแล้วเพิ่มนามแฝงลงในไฟล์


1
ฉันใช้. bashrc แต่เมื่อฉันเปิด Git Bash ฉันได้รับข้อความเตือนว่า bashrc มีอยู่ w / oa .bash_profile ฉันเปลี่ยนชื่อ. bashrc เป็น. bash_profile และตอนนี้คำเตือนก็หายไป ขอบคุณ
JustinDanielson

2

2 วิธีแก้ปัญหาแทนที่จะเป็นวิธีแก้ปัญหา: ใน Git Bash ของฉันคำสั่งต่อไปนี้จะหยุดทำงานและฉันไม่ได้รับพรอมต์กลับมา:

% python

ดังนั้นฉันแค่ใช้:

% winpty python

ตามที่บางคนกล่าวไว้ข้างต้นคุณสามารถใช้:

% python -i

.


1

ฉันใช้ MINGW64 ผ่านรหัส Visual Studio บน Windows 10 และพยายามติดตั้งnode-sass(ซึ่งจำเป็นpython2) ฉันติดตามfelixrieseberg / windows-build-tools # 56บน Github ซึ่งแก้ไขปัญหาของฉันได้

นี่เป็นกรณีพิเศษ แต่ฉันโพสต์ในกรณีที่บางคนมีปัญหาเดียวกัน:

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

%USERPROFILE%\.windows-build-tools\python27นี้จะติดตั้งหลามและเครื่องมือที่จำเป็นในการสร้าง


1

สำหรับ python เวอร์ชัน 3.7.3 ใน vscode ที่มี gitbash เป็นเทอร์มินัลเริ่มต้นฉันต้องจัดการกับสิ่งนี้ชั่วขณะหนึ่งจากนั้นทำตามคำแนะนำ @Vitaliy Terziev ในการเพิ่ม alias ไปยัง. bashrc แต่มีข้อกำหนดต่อไปนี้:

alias python = '“ / c / ผู้ใช้ / ชื่อผู้ใช้ของฉัน / AppData / Local / โปรแกรม / Python / Python37 / python.exe”'

สังเกตการรวมกันของคำพูดเดี่ยวและคู่เนื่องจากช่องว่าง“ ชื่อผู้ใช้ของฉัน”

สำหรับฉัน "winpty" ไม่สามารถแก้ไข python path ใน vscode ได้


0

อีกตัวอย่างของปัญหานี้คือการใช้อินเตอร์เฟสบรรทัดคำสั่ง AWS Elastic Beanstalk (awsebcli, eb cli) จาก git bash (MINGW64, Mintty) ใน windows (โดยใช้ git เวอร์ชั่น 2.19.0.windows.1)

ฉันเพิ่งโพสต์สิ่งนี้เพราะมันใช้เวลาสักครู่ก่อนที่จะจบลงที่นี่ค้นหาeb-cliปัญหาที่เฉพาะเจาะจง

คำสั่งเช่นeb initหรือeb config saveซึ่งต้องการให้ผู้ใช้ป้อนข้อมูลดูเหมือนจะทำให้เกิดการค้าง / หยุด ในความเป็นจริงฉันเดาว่าคอนโซลไม่ได้รับการปรับปรุงด้วยข้อความที่ขอให้ผู้ใช้ป้อนเข้า ยิ่งกว่านั้นeb deployอัปเดตข้อความคอนโซลหลังจากคำสั่งเสร็จสิ้นดังนั้นฉันจะไม่เห็นการอัปเดตความคืบหน้าจนกว่าจะเสร็จ

ดังที่กล่าวไว้ในคอมไพล์สำหรับบันทึกย่อประจำรุ่นของ windows (สำหรับ v2.19.0) และเช่นในคำตอบของ Xun Yangวิธีแก้ปัญหาคือการเรียกใช้

winpty eb <command>(แทนที่จะเป็นเพียงeb <command>)

ทางเลือกตามที่แนะนำในปัญหานี้สำหรับ git windowsอาจใช้คอนโซลเนทีฟ windows แทน mintty (ตัวเลือกระหว่างการติดตั้ง git)


0

หนึ่งที่ทำงานให้ฉันเป็นที่กล่าวถึงก่อนหน้านี้ในคำตอบที่ดีเหล่านี้ข้างต้นเป็นนามแฝงดังนี้: (ฉันใช้อนาคอนดาดังนั้นก่อนอื่นหาที่เป็นเส้นทางหลามแล้วเพิ่มลงในนามแฝงในทุบตี Git) 1. ในเทอร์มินัลอนาคอนดาที่ฉันเรียกใช้: where python 2. บนคอมไพล์ bash ที่ฉันรัน: alias python='winpty "C:\ProgramData\Anaconda3\envs\your_env_name\python.exe"' 3. เสร็จสิ้น Python ถูกกำหนดไว้ใน git Bash โดยใช้นามแฝง

ขอบคุณ (Vitaliy Terziev และ hygull) สำหรับคำตอบที่เป็นประโยชน์มาก


0
  1. python.exe -iทำงานได้ แต่มีปัญหาในการออกจากโหมดโต้ตอบโดยส่ง "^ Z" (CTRL + Z) ดังนั้นดูเหมือนจะดีกว่าที่จะใช้winpty python.exeใน Git Bash สำหรับ Windows

  2. ใช้~/binไดเรกทอรีเพื่อสร้างไฟล์ wrap / reference (เช่น~/bin/python) ซึ่งจะสามารถเข้าถึงได้ทุกที่ (คุณอาจใช้การอ้างอิงเวอร์ชันต่าง ๆ เช่น~/bin/python37)
    รหัสภายในไฟล์:

#!/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 ${@}

ฉันไม่ชอบนามแฝง "เวทมนต์" เหล่านี้ซึ่งคุณมักลืมว่ามันมาจากไหนและบางครั้งก็นำไปสู่ปัญหาในบางกรณี

  1. ใช้~/bin/pythonไฟล์และ-iพารามิเตอร์:
#!/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)- ตัวอย่างการตอบสนองหลังจากการส่ง^Zด้วยโหมดโต้ตอบที่ดำเนินการโดยpython.exe -i
Kirby


-2

ดูคำตอบนี้:

Git Bash จะไม่เรียกใช้ไฟล์หลามของฉันเหรอ?

ควรกำหนดเส้นทางใน Git Bash ดังนี้:

PATH=$PATH:/c/Python27/

2
จริงๆแล้ว ... ไม่! ฉันสามารถสร้างปัญหาของ OP และพบ python ใน PATH โดยไม่มีปัญหา ดูsourceforge.net/p/msys2/tickets/32
Charles Duffy

โพสต์ของ OP ชี้ให้เห็นว่า PATH ไม่ใช่ปัญหา
Hilton Shumway
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.