Python在git bash命令行中无法运行。

366

在git bash(Windows)中无法运行Python。当我在命令行中输入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
“什么都没发生”?你甚至没有收到错误提示吗?(也就是说:如果你收到了错误提示,那应该成为你提问的一部分)。 - Charles Duffy
@recursive,Bash确实尊重PATH。(不过它有自己的版本变量)。 - Charles Duffy
17
当我在Python中输入命令时,屏幕上没有出现错误信息,但也没有显示Python正在运行,只有一个空白行。 - Caroline Morris
8
她明确表示了,Charles,没有任何错误信息。Bash只是冻结了。冻结终端就是错误信息。 - Green
6
类似的问题在这里:https://dev59.com/6GYr5IYBdhLWcg3wi6zd,使用`python -i`命令可以解决该问题。 - nngeek
显示剩余2条评论
21个回答

531

临时解决方案

只需在Windows的git shell中输入以下内容 - > alias python='winpty python.exe',这样你就会有一个指向python可执行文件的别名。该别名将在shell会话期间有效。

winpty是一个Windows软件包,提供了类似于Unix pty-master的接口,用于与Windows控制台程序通信。

永久解决方案

将命令添加到用户主目录下的.bashrc文件中。您可以使用CLI或文本编辑器:

使用CLI

可以在git bash中执行以下操作:

echo "alias python='winpty python.exe'" >> ~/.bashrc

如果文件不存在,它将在当前用户的主目录中创建.bashrc文件;如果文件已存在,则将别名追加到.bashrc文件的末尾。

使用文本编辑器

或者,您可以首先创建一个.bashrc文件。根据您的文件管理器,您可以在git bash中更容易地完成此操作,如下所示:

cd ~
touch .bashrc

此时您可以在首选的文本编辑器中打开.bashrc并在其中添加。

要应用更改,请使用命令source .bashrc或重新启动shell。

更新

新版本的Git不再使用.bashrc,而是使用.bash_profile。Conda在初始化时也使用此配置文件,因此请确保不要覆盖或删除初始化块。更多信息请参见:Git for Windows doesn't execute my .bashrc file


10
иҜ·дҪҝз”ЁPythonеҮҪж•°quit()д»ҘйҖҖеҮәи§ЈйҮҠеҷЁгҖӮжіЁж„ҸдёҚиҰҒж”№еҸҳеҺҹж„ҸпјҢж¶ҰиүІеҶ…容并дҪҝе…¶жӣҙжҳ“жҮӮгҖӮ - anishpatel
10
你也可以使用(Windows标准的)^Z(Ctrl-Z) + 回车键来退出。 - Emil Styrke
8
如果您想将别名设置为与Windows不同的Python,则可以使用以下语法设置完全限定路径:alias python='winpty /c/Python27/python.exe' - ScottMcC
3
你也可以运行 source .bashrc 而不是重新启动终端。 - Jonathan Sudiaman
2
Git bash 应该更好地解释安装 Minty 控制台的影响。甚至可以链接到这个答案 :) - DoubleOZ
显示剩余13条评论

126

我在答案列表中没有看到下一个选项,但是我可以使用“-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文件不会被读取。https://docs.python.org/3/using/cmdline.html#cmdoption-i - Mercury
1
这比 alias python='winpty python.exe' 更昂贵吗? - PYK
10
这个选项不需要配置,可以在任何计算机上使用。 - vav
6
无法使终端正常工作。例如,键盘上/下键无法使用。除非先运行winpty。 - Erik Aronesty

71

这是MSys2中已知的一个bug,它提供了Git Bash使用的终端。你可以通过运行不支持ncurses的Python构建或使用WinPTY来解决它,如下所示:

To run a Windows console program in mintty or Cygwin sshd, prepend console.exe to the 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 for Windows 2.7.1版本开始,也可以尝试使用winpty c:Python27/python.exe;WinPTY可能已经预装。


2
请问,能否解释一下 build/console.exe c:/Python27/python.exe 这个命令?它应该在 GitMsys 控制台中运行还是其他方式? - 0leg
@h3d0,是的,在终端内。当然,这假设 buildconsole.exe 所在的目录;根据您实际安装的位置/方式适当更新路径。 - Charles Duffy
搜索整个系统找不到 console.exe - 没有任何出现。这是需要额外安装的东西吗? - 0leg
1
@h3d0 是的,这是额外的软件;我的回答包含一个链接。 - Charles Duffy
9
我认为你可以直接使用“winpty c:/Python27/python.exe”,无需进行任何额外的操作。实用程序“winpty.exe”可以在Git\usr\bin中找到。我正在使用Git for Windows v2.7.1。 - Xun Yang
Python现在已经开始了,但是出于某种原因,我无法输入括号([])。它在Python外的git bash中可以正常工作,在cmd中运行Python时也没有问题。 - Godsmith

62

我是Windows 10用户,仅接受默认选项在系统中安装了GIT

阅读以上答案后,我得到了两个解决方案,这两个解决方案完美地在GIT Bash上运行,并使我能够在GIT Bash上执行Python语句。

我附上了我的GIT Bash终端的3张图片。第一张是问题截图,而后面两张则是解决方案。

问题:按下python命令后光标只是等待。

enter image description here

解决方案1:

GIT Bash终端上执行winpty <path-to-python-installation-dir>/python.exe命令。

注:不要在GIT Bash中使用C:\Users\Admin的路径样式,而要使用/C/Users/Admin

在我的情况下,我在GIT Bash中执行了winpty /C/Users/SJV/Anaconda2/python.exe命令。

或者,如果您不知道自己的用户名,则执行winpty /C/Users/$USERNAME/Anaconda2/python.exe命令。

enter image description here

解决方案2:

只需输入python -i即可。

enter image description here

谢谢。


18

尝试使用python -i而不是python,这是一个光标的问题。


14

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

,这是(对我来说)在 Win 10 上直接从 Git Bash 运行 Python(Python 2.7 和 Python 3.x)的最佳解决方案=>将别名添加到 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

因此,您必须创建两个别名,一个用于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

现在,你可以永久地通过Git shell直接启动Python,只需输入

$ python -> 启动Python 3

$ python2 -> 启动Python 2

$ ll -> 输入ls -lah以快速显示您的详细文件列表

干杯,Harry


11

这是两种解决方法,而不是完美的解决方案:在我的 Git Bash 中,执行以下命令会卡住,我无法获得提示符:

2个变通方法,而不是一个解决方案:在我的Git Bash中,执行以下命令会卡住,我无法获得提示符:

% python

所以我只是使用:

% winpty python

正如一些人之前所指出的,您也可以使用:

% python -i

2020年7月14日: Git 2.27.0已经添加了对伪终端(pseudo consoles)的可选实验性支持,这使得可以从命令行运行Python: 在此输入图片描述

请见附加会话。在此输入图片描述


10

除了 @Charles-Duffy 的回答之外,您还可以直接使用 winpty 而无需安装/下载任何额外的内容。只需运行 winpty c:/Python27/python.exe。实用程序 winpty.exe 可在 Git\usr\bin 中找到。我正在使用 Git for Windows v2.7.1。

@Charles-Duffy 提供的预构建二进制文件版本是0.1.1(根据文件名),而包含的版本是0.2.2。


6

输入"type: 'winpty python'"即可运行。

在运行任何以python开头的命令时,gitbash会遇到一些问题,这也适用于任何python manage.py命令。始终从'winpty python manage.py'开始。至少对我来说是这样的。我正在运行Windows 10。


5

您可以更改Git Bash快捷方式的目标:

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

to

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

这是ConEmu启动git bash的方式(版本16)。最近的版本会正常启动,这就是我到达那里的方式...


这对我有用。值得注意的是bash.exe参数的作用?man页面说:-l:使bash表现得像已被调用为登录shell,-i:如果存在-i选项,则shell是交互式的。 - Day
我以前曾经成功地使用ConEmu而不需要winpty,但是我完全忘记了我做了什么。谢谢,这个方法就像以前一样有效! - chaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接