Python 在 git bash 命令行中不起作用
- 2025-01-10 08:47:00
- admin 原创
- 152
问题描述:
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
...坐在那里,没有返回提示。
解决方案 1:
临时解决方案
只需在 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 在初始化时也会使用此配置文件,因此请确保不要覆盖或删除初始化块。更多信息请参见:Windows 版 Git 无法执行我的 .bashrc 文件。
解决方案 2:
我没有在答案列表中看到下一个选项,但我可以使用“-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.
>>>
解决方案 3:
这是 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 可能已包含在内。
解决方案 4:
我是 Windows 10 用户,我通过接受默认设置在我的系统中安装了GIT 。
阅读完以上答案后,我得到了 2 个自己的解决方案,这 2 个解决方案在GIT bash 上完美运行,并方便我在GIT bash上执行 Python 语句。
我附加了我的GIT bash 终端的 3 张图片。第一张表示问题,后两张表示解决方案。
问题python
- 光标在输入命令后处于等待状态
解决方案 1
在GITwinpty <path-to-python-installation-dir>/python.exe
bash 终端上执行。
注意:在GIT bash 中不要使用C:UsersAdmin
类似路径样式,而是使用。/C/Users/Admin
就我而言,我在GIT bashwinpty /C/Users/SJV/Anaconda2/python.exe
上执行了命令
或者如果你不知道你的用户名那么执行winpty /C/Users/$USERNAME/Anaconda2/python.exe
解决方案 2
只需输入python -i
即可。
谢谢。
解决方案 5:
尝试一下,python -i
而不是python
,这是一个光标的事情。
解决方案 6:
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 Gitetcprofile.daliases.sh
1)使用 Atom 或其他文本编辑器打开 aliases.sh
例如:就我而言,文件位于 C:SoftwareDevelopGitetcprofile.daliases.sh
2)添加 Python 别名
就我而言,python.exe安装在:
C:NetworkingNetwork AutomationPython 2.7python.exe
C:NetworkingNetwork AutomationPython 3.7python.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)OK!关闭并重新启动 Git Bash
现在,你可以直接从 Git shell 启动这两个 Python 了,只需输入
$ python
-> 启动 Python 3
$ python2
-> 启动 Python 2
$ ll
-> 输入 ls -lah 快速显示详细文件列表
干杯,哈利
解决方案 7:
2 个解决方法,而不是解决方案:在我的 Git Bash 中,以下命令挂起并且我没有收到提示:
% python
所以我只使用:
% winpty python
正如上面一些人所指出的,您还可以使用:
% python -i
2020-07-14:Git 2.27.0 增加了对伪控制台的可选实验性支持,允许从命令行运行 Python:
参见附件会话。
解决方案 8:
除了 @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
解决方案 9:
更新:几秒钟前我刚刚安装了最新的 Windows 版 Git,现在他们有一个复选框可以勾选以修复winpty
Git Bash 中的 Python 问题!请参见此处:
不过,我仍然建议执行以下步骤:
原始的,可能更可靠的答案:
这还包括在 Windows 中配置 Git Bash 以允许以python3
(像在 Linux 中一样) 方式运行 Python,以及以 (像在 Linux 中一样) 方式运行 Python 脚本./myProgram.py
,同时使用 Linux 风格的哈希符号(例如在 Windows和#!/usr/bin/env python3
Linux Python 脚本的顶部)。
Python 无法在 Git Bash 中运行(它会一直挂起或冻结);如何让 Linux hash-bang 在 Windows 中运行
请注意,当我尝试运行 Python 时 Git Bash 冻结,我无法使用Ctrl
+C
或Ctrl
+将其终止D
。我必须关闭 Git Bash 终端才能将其终止。:(
对于那些从 Linux 转到 Windows 的人来说,您可能还习惯于python3
在命令行中调用,并在 Python 文件顶部使用井号,如下所示:
#!/usr/bin/env python3
...这样您就可以使用 使文件可执行chmod +x my_script.py
,然后直接以 方式运行它./my_script.py
,而不必使用python3 my_script.py
。
因此,让我们解决上述所有问题。
快速摘要:
将这两个别名和此 PATH 修复添加到文件底部,
~/.bashrc
以便您可以在 Git Bash 中运行python
或交互:python3
alias python='winpty python'
alias python3='winpty python'
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
添加此
~/bin/python3
可执行包装器,以便您可以#!/usr/bin/env python3
在 Python 脚本中使用哈希爆炸:
#!/usr/bin/env bash
winpty python "$@"
关闭并重新打开所有 Git Bash 终端,或
. ~/.bashrc
在每个终端内调用。然后:
# ensure your aliases exist
alias python # expected output: `alias python='winpty python'`
alias python3 # expected output: `alias python3='winpty python'`
# ensure your `python3` executable exists
which python3 # expected output: `/c/Users/myusername/bin/python3`
测试:
# Both of these open Python 3 interactively
# - then type `exit()` to exit
python
python3
对于此hello_world.py
脚本:
#!/usr/bin/env python3
print("Hello world.")
以下都运行它:
# all 3 of these run `hello_world.py` in Python 3
# 1. Windows style
python hello_world.py
# 2. Linux style
python3 hello_world.py
# 3. Hash-bang Linux style
./hello_world.py
如果您理解了这些,并且您已完成所有操作,那么您就大功告成了。否则,请继续阅读以了解更多详细信息和信息,包括故障排除。
细节
步骤 1:在 Git Bash 终端中以交互方式创建python
并可用python3
首先,为了在 Git Bash 终端中python
以交互方式工作且不会永远挂起或冻结,请运行以下命令:python3
# Add interactive `python` and `python3` aliases.
# - NB: it is *not* a mistake that both aliases point to `python`. That is how
# it is supposed to be!
echo -e "
" >> ~/.bashrc
echo "alias python='winpty python'" >> ~/.bashrc
echo "alias python3='winpty python'" >> ~/.bashrc
这相当于创建一个~/.bashrc
文件并在其底部添加这些别名:
alias python='winpty python'
alias python3='winpty python'
现在关闭并重新打开你的 Git Bash 终端以引入这些更改。
现在,您可以在 Git Bash 终端中以交互方式运行python
或。 太棒了! 有关为什么需要通过 进行调用,请参阅@VonC 的回答:python3
`python`winpty
Winpty 是一个兼容层,允许您从 Linux 终端运行 Windows 控制台应用程序。
当您从 Linux 交叉编译 Windows 程序时,生成的二进制文件将是一个 Windows 控制台应用程序,可以直接从 Linux 终端运行,而无需
winpty
。但是,如果您在 Windows 上本地构建程序,则生成的二进制文件将是无法从 Linux 终端运行的 Windows GUI 应用程序。
为了从 Linux 终端运行 Windows GUI 应用程序,您需要使用
winpty
。
第 2 步:让#!/usr/bin/env python3
hash-bang 也能发挥作用
为了使其正常工作,我们需要~/bin/python3
在 PATH 中添加自定义的可执行 Bash 包装器。
打开您的~/.bashrc
文件并将其添加到其底部,~/bin
如果该目录存在则自动添加到我们的路径中:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
创建~/bin
目录:
mkdir -p ~/bin
重新获取~/.bashrc
文件,或者关闭并重新打开所有 Git Bash 终端。如果您不知道“source”是什么意思,请阅读我的回答:source 和 export 有什么区别?。
. ~/.bashrc
现在在路径处创建一个文件~/bin/python3
,并将其粘贴到其中。完成后保存并关闭文件。
#!/usr/bin/env bash
winpty python "$@"
确保它是可执行的:
chmod +x ~/bin/python3
现在,创建一个测试文件。创建一个名为的文件hello_world.py
,并将以下内容粘贴到其中:
#!/usr/bin/env python3
print("Hello world.")
使文件可执行,并直接运行它:
# make it executable
chmod +x hello_world.py
# run it
./hello_world.py
你会看到:
你好世界。
完成!您现在有 3 种方法可以运行此脚本!:
# 1. Windows style
python hello_world.py
# 2. Linux style
python3 hello_world.py
# 3. Hash-bang Linux style
./hello_world.py
这一切是如何运作的?
这一切究竟如何运作有点棘手。
首先,当您手动运行python
或python3
独自运行以获取交互式会话或python hello_world.py
运行python3 hello_world.py
文件时,它会访问~/.bashrc
文件中定义的 Bash 别名并运行winpty python
。这是在 Git Bash 中调用正常工作所必需的,原因已在此处 @VonC 的回答中解释。
Bash 别名仅当用户(例如您自己)直接在 Git Bash 终端中运行别名时才可用。它们不适用于系统或系统启动的任何其他进程。因此,当您运行 时./hello_world.py
,#!/usr/bin/env python3
hash-bang不会查找并运行您的python3
别名。相反,它会查找并运行您的~/bin/python3
可执行 Bash 包装器,该包装器还会根据需要通过 执行 Python 调用winpty
。
故障排除:如果未正确执行上述操作,您可能会看到各种错误
问题:在 Git Bash 终端中运行
python
或永远挂起python3
解决方案:您忘记添加调用 的两个别名winpty python
。请添加它们。
问题:运行
python3
会打开 Microsoft Store 并尝试安装 Python。
解决方案:您忘记创建alias python3='winpty python'
别名。
问题:Hash-bang 不起作用。Running
./hello_world.py
说:
未找到 Python;无需参数运行即可从 Microsoft Store 安装,或者从“设置”>“管理应用执行别名”禁用此快捷方式。
解决方案:您忘记创建~/bin/python
包装器可执行文件。如果您已创建它,请确保它是可执行文件。如果这两件事都已完成,请确保~/bin
它在您的 PATH 中。请参阅上文以添加代码块来~/.bashrc
执行此操作。
问题:Hash-bang 不起作用。Running
./hello_worl.py
说:
/usr/bin/env:‘python3’:没有这样的文件或目录
您已关闭您的python.exe
和python3.exe
Windows“应用程序执行别名”,如此处所述,但您尚未创建~/bin/python
包装器可执行文件。
解决方案:您忘记创建~/bin/python
包装器可执行文件。如果您已创建它,请确保它是可执行文件。如果这两件事都已完成,请确保~/bin
它在您的 PATH 中。请参阅上文以添加代码块来~/.bashrc
执行此操作。
问题:你得到这个:
`winpty:错误:无法启动““C:/Program Files/WindowsApps/Microsoft.DesktopAppInstaller_1.20.1881.0_x64__8wekyb3d8bbwe/AppInstallerPythonRedirector.exe””:访问被拒绝。(错误 0x5)
解决方案:
老实说,我现在不记得我是怎么得到这个错误的,但这是我偶然发现的众多错误之一,直到我找到上面的答案中解释的解决方案。
其他参考
我从@Vitaliy Terziev 的回答
alias python='winpty python.exe'
中了解了别名。winpty
也是 MSYS2(Git Bash 使用的底层系统的制造商)推荐的,位于此页面底部:https: //www.msys2.org/wiki/Terminals/
参见
我的回答:更改Windows 安装的 Git Bash 目录的位置
~
解决方案 10:
您可以从以下位置更改 Git Bash 快捷方式的目标:
"C:Program FilesGitgit-bash.exe" --cd-to-home
到
"C:Program FilesGitgit-cmd.exe" --no-cd --command=usr/bin/bash.exe -l -i
这是 ConEmu 启动 git bash(版本 16)的方式。最新版本可以正常启动,我就是这样做到的...
解决方案 11:
输入:'winpty python' 它就会起作用
gitbash 在运行以 python 开头的任何命令时都会出现一些问题。这也适用于任何 python manage.py 命令。始终以“winpty python manage.py”开头,至少这对我有用。运行 Windows 10。
解决方案 12:
除了@Vitaliy Terziev 的回答
尝试touch .bash_profile
然后将别名添加到文件中。
解决方案 13:
我在 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-toolspython27
。
解决方案 14:
对于 vscode 中以 gitbash 作为默认终端的 python 版本 3.7.3,我处理了这个问题一段时间,然后按照@Vitaliy Terziev 的建议将别名添加到 .bashrc,但遵循以下规范:
alias python='“/c/Users/我的用户名/AppData/Local/Programs/Python/Python37/python.exe”'
由于“我的用户名”空格,请注意单引号和双引号的组合。
对我来说,“winpty”无法解析 vscode 中的 python 路径。
解决方案 15:
键入命令 PY 而不是 Python。调用解释器 (python.org)。
解决方案 16:
我知道这是一篇老帖子,但我刚刚在运行 Python 3.8.5 和 Git 2.28.0.windows.1 的 Windows 10 上遇到了这个问题
不知何故,我也安装了几个不同的 2.7x 版本的 Python。我删除了每个版本的 Python(3x 和 2x),从此处下载了官方安装程序,安装了全新的 3.8.5(仅使用默认值),它将 Python 3.8.5 安装在以下位置:
C:\Users\(我的用户名)\AppData\Local\Programs\Python\Python38
然后,为了让命令python
在我的 git bash shell 中工作,我必须按照此处Python38
列出的说明手动将路径添加到我的路径变量中。这一点很重要,因为在出现的第一个模式底部的 python 安装程序上,它会询问您是否要将 python 路径添加到您的环境变量中。我单击了旁边的复选框,但它实际上并没有添加路径,因此需要手动将路径添加到我的环境变量中。PATH
`PATH`
现在使用我的 gitbash shell,我可以浏览到其中包含 python 脚本的目录,只需输入即可python theScriptName.py
运行,没有问题。
我想发布这篇文章,因为这就是我让 gitbash shell 允许我运行 python 脚本所要做的全部工作。我认为可能有一些更新,所以我不需要执行此处列出的任何其他解决方案。无论如何,如果您在 Windows 10 计算机上的 gitbash shell 中运行 python 脚本时遇到问题,这是另一个值得尝试的方法。
享受。
解决方案 17:
此问题的另一个示例是使用 Windows 中 git bash(MINGW64、Mintty)中的 AWS Elastic Beanstalk 命令行界面(awsebcli、eb cli)(使用 git 版本 2.19.0.windows.1)。
我发布这个只是因为我花了一段时间才来到这里搜索eb-cli
具体的问题。
eb init
或等eb config save
需要用户输入的命令似乎会导致冻结/挂起。实际上,我猜控制台没有使用请求用户输入的文本进行更新。此外,eb deploy
仅在命令完成后才更新控制台文本,因此在完成之前我看不到进度更新。
正如git for windows 发行说明(针对 v2.19.0)中提到的那样,以及在Xun Yang 的回答中,一种解决方法是运行
winpty eb <command>
(而不仅仅是eb <command>
)
正如这个git for windows 问题中所建议的,另一种选择是使用 windows 原生控制台而不是 mintty(git 安装期间的选项)。
解决方案 18:
对我有用的方法就像上面这些很棒的答案中提到的那样,别名如下:(我正在使用 anaconda,所以首先找到 python 路径在哪里,然后将其添加到 git bash 上的别名中)。1. 在 anaconda 终端上运行:where python
在 git bash 上运行:
alias python='winpty "C:ProgramDataAnaconda3envsyour_env_namepython.exe"'
完成。使用别名在 git Bash 内部定义 Python。
感谢(Vitaliy Terziev 和 hygull)提供的非常有用的答案。
解决方案 19:
python.exe -i
可以工作,但发送“^Z”(CTRL+Z)退出交互模式时出现问题。因此,似乎更适合winpty python.exe
在 Windows 版 Git Bash 中使用。使用
~/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 ${@}
我只是不喜欢这些“神奇的”别名,你总是忘记它来自哪里,有时在某些情况下会导致问题。
使用
~/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
解决方案 20:
如果运行 Windows PowerShell 命令并且发生错误,则错误记录将附加到名为的“自动变量”中$error
。
您可以在同一个 PowerShell 会话中使用该$error
变量来查找错误。
该$Error
变量保存了一组信息,这就是为什么使用$Error[0]
可以获取错误消息对象的原因。此外,该$Error[0]
变量将保存遇到的最后一条错误消息,直到 PowerShell 会话结束。
解决方案 21:
如果您使用uv来管理 Python,则应该采用winpty
其他答案中建议的解决方案。
要运行 Python shell,请使用:winpty
uv run which python``
为了更轻松地运行它,您可以创建一个别名(我建议将此行添加到您的.bash_profile
文件中),例如,如果您想运行uvp
以使用 uv 管理的 Python 版本打开 Python shell,请使用:alias uvp='winpty
uv run which python'
解决方案 22:
我将其放在python脚本中:
#!winpty /c/Program Files/Python312/python
现在我可以通过输入从 bash(从 GIT)运行脚本<name of script>.py
。
解决方案 23:
看看这个答案:
Git Bash 无法运行我的 python 文件?
Git Bash 中的路径应该这样设置:
PATH=$PATH:/c/Python27/