Python在git bash的命令行中不起作用


236

Python无法在git bash(Windows)中运行。当我在命令行中键入python时,它带我进入空白行,而无需说它像在Powershell中一样已经输入了python 2.7.10。它不会给我错误消息,但是python不会运行。

我已经确定PATH中的环境变量包括在内c:\python27。我还能检查什么?


发生此问题的会话如下所示:

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

user@hostname MINGW64 ~
$ python

...坐在那里而不返回提示。


2
“没发生什么事”?您甚至都不会出错?(这就是说:如果收到错误消息,那应该是问题的一部分)。
查尔斯·达菲

@ recursive,bash确实尊重PATH。(不过,它具有该变量的自己的版本)。
Charles Duffy 2015年

11
当我输入python时,我没有收到错误消息。它只是将我带到一个空白行,但没有显示python正在实际运行
Caroline Morris

4
@CharlesDuff,她说得很清楚,Charles,没有任何错误消息。重击只是冻结。冻结终端是错误消息。
格林

1
@Green,我的回答应该很明显,这不再是缺乏明确性的地方了-而且一年来的大部分时间都没有。此外,在这一点上,这个问题现在还不那么清楚,直到我对其进行编辑以使它在本主题前面的OP评论之后才变得明确。检查历史记录。
查尔斯·达菲

Answers:


361

只需在Windows的git shell中输入- alias python='winpty python.exe',就可以了,您将拥有python可执行文件的别名。请享用

PS有关永久别名的添加,请参见下文,

cd ~
touch .bashrc

然后打开.bashrc,从上方添加命令并保存文件。您需要通过控制台创建文件,否则无法使用适当的名称保存文件。您还需要重新启动外壳以应用更改。


17
奇迹般有效。
格林

4
注意:您必须使用Python函数quit()才能转出解释器。
anishpatel

5
您也可以使用(Windows标准)^Z(ctrl-Z)+ return退出。
埃米尔·斯特尔克

6
另外,如果您想将别名设置为与Windows不同的python,则可以使用以下语法alias python='winpty /c/Python27/python.exe'
为其

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
水星

这比别名python ='winpty python.exe'更昂贵吗?
PYK

1
这是在任何计算机上均可使用的零配置工作选项。
vav

58

这是MSys2中的一个已知错误,该错误提供了Git Bash使用的终端。您可以通过运行不支持ncurses的Python构建或使用WinPTY解决该问题,方法如下:

要在mintty或Cygwin sshd中运行Windows控制台程序,请在命令行之前添加console.exe:

$ 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一起使用。(如果发布此答案以来已经过了很长时间,请检查是否有较新的版本!)。


从Windows 2.7.1的Git开始,也尝试使用winpty c:Python27/python.exe;。WinPTY可能是现成的。


2
您能解释一下build/console.exe c:/Python27/python.exe-这应该在GitMsys控制台中运行还是以其他方式运行?
0leg

@ h3d0,是的,在终端内部。当然,这是假定build该目录console.exe位于其中。根据实际安装位​​置/方式适当地更新路径。
查尔斯·达菲

1
@ h3d0是的,它是附加软件;我的答案包括一个链接。
查尔斯·达菲

7
我认为您可以将其用作winpty c:/Python27/python.exe,而无需执行其他任何操作。可以在Git \ usr \ bin中找到实用程序winpty.exe。我正在使用适用于Windows v2.7.1的Git
Xun Yang

1
@XunYang,... winpty现在捆绑了吗?真好!编辑适当。
查尔斯·达菲

47

我是Windows 10用户,我只接受默认值就已在系统中安装了GIT

阅读以上答案后,我得到了2个解决方案,并且这2个解决方案可完美地在GIT bash上运行,并帮助我在GIT bash 上执行Python语句。

我要附加3张我的GIT图像 bash终端的。第一个有问题,第二个有解决方案。

问题 -光标在按下python命令后才等待

在此处输入图片说明

解决方案1

winpty <path-to-python-installation-dir>/python.exeGIT bash终端上执行。

注意:请勿C:\Users\AdminGIT bash中使用类似路径样式,而应使用/C/Users/Admin

就我而言,我winpty /C/Users/SJV/Anaconda2/python.exeGIT bash 上执行了命令

或者,如果您不知道用户名,请执行winpty /C/Users/$USERNAME/Anaconda2/python.exe

在此处输入图片说明

解决方案2

只需输入即可python -i

在此处输入图片说明

谢谢。


2
我发现它winpty也可以与Windows Python Launcher一起使用,因此您所需要的只是alias py='winpty py'在.bashrc中,然后恢复正常。
Karl Knechtel

是的,这取决于您,如何管理事物以改善生活。
hygull19年


8

除了@ Charles-Duffy的答案外,您还可以直接使用winpty,而无需安装/下载任何其他内容。赶紧跑winpty c:/Python27/python.exe。可以在Git \ usr \ bin中找到实用程序winpty.exe。我正在为Windows v2.7.1使用Git

@ Charles-Duffy的预编译二进制文件的版本为0.1.1(根据文件名),而随附的二进制文件的版本为0.2.2。


8

Git Bash解决方法-使用别名启动Python 2和Python 3

。(对我来说)这是在Win 10上直接从Git Bash直接运行Python(Python 2.7和Python 3.x)的最佳解决方案=>将别名添加到Git Bash用于的别名文件中。

Git Bash别名文件aliass.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我命名只是蟒蛇)的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

现在,您可以永久地从Git shell直接启动两个Python,只需编写

$ 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参数做什么?手册页-l:使bash就像被作为登录shell一样被调用,-i:如果存在-i选项,则该shell是交互式的
Day

以前,我曾经让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

我正在Windows 10上通过Visual Studio Code使用MINGW64,并尝试安装node-sass(需要python2)。我在Github上跟随了felixrieseberg / windows-build-tools#56,它解决了我的问题。

这是一个特例,但如果有人遇到相同的问题,我将在此发布:

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

这会将python和其他必需的构建工具安装到%USERPROFILE%\.windows-build-tools\python27


1

对于以gitbash作为默认终端的vscode中的python版本3.7.3,我处理了一段时间,然后遵循@Vitaliy Terziev建议将别名添加到.bashrc中,但具有以下规范:

别名python =“'/ c / Users /我的用户名/AppData/Local/Programs/Python/Python37/python.exe”'

注意单引号和双引号的组合,因为“我的用户名”空格。

对我来说,“ winpty”无法解析vscode中的python路径。


0

此问题的另一个示例是在Windows中使用git bash(MINGW64,Mintty)中的AWS Elastic Beanstalk命令行界面(awsebcli,eb cli)(使用git版本2.19.0.windows.1)。

我之所以发布此帖子,是因为我花了一段时间才能找到此处的eb-cli具体问题。

需要用户输入的命令(例如eb init或)似乎导致冻结/挂起。实际上,我想控制台未使用请求用户输入的文本进行更新。此外,eb config saveeb deploy仅在命令完成后才更新控制台文本,因此直到完成后我才能看到进度更新。

如在git for Windows发行说明(针对v2.19.0)和Xun Yang的答案中所述,一种解决方法是运行

winpty eb <command>(而不是eb <command>

正如本git Windows发行版中所建议的那样,替代方法可能是使用Windows本机控制台而不是mintty(在git安装过程中选择)。


0

如前所述,上面为我工作的一个别名是以下别名:(我正在使用anaconda,因此首先找到python路径在哪里,然后将其添加到git bash上的别名中)。1.在anaconda终端上,我运行:where python 2.在git 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在Windows的Git Bash中使用似乎更好。

  2. 使用~/bin目录制作环绕/引用文件(如~/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

0

键入命令PY而不是Python。调用解释器(python.org)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.