ChatGPT解决这个技术问题 Extra ChatGPT

Python 不能在 git bash 的命令行中工作

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

...坐在那里没有返回提示。

“什么都没发生”?你连错误都没有? (也就是说:如果您收到错误消息,那应该是您问题的一部分)。
@recursive,bash 确实尊重 PATH。 (不过,它有自己的变量版本)。
当我输入 python 时,我没有收到错误消息。它只是把我带到一个空白行,但没有显示 python 正在实际运行
@CharlesDuff,她说得很清楚,查尔斯,没有任何错误消息。 Bash 只是冻结了。冻结终端是错误消息。
这里有类似的问题:stackoverflow.com/questions/13588454/… 使用 python -i 解决了它。

A
Aryan Beezadhur

临时解决方案

只需在 Windows 上的 git shell 中输入 - > alias python='winpty python.exe',就是这样,您将拥有 python 可执行文件的别名。此别名将在 shell 会话期间有效。

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

永久解决方案

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

使用命令行

这可以通过 git bash 来完成,如下所示:

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

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

使用文本编辑器

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

cd ~
touch .bashrc

此时,您可以在首选文本编辑器中打开 .bashrc 并将其添加到那里。

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


注意:您必须使用 Python 函数 quit() 才能退出解释器。
您也可以使用(Windows 标准)^Z (ctrl-Z) + return 退出。
此外,如果您想将别名设置为与 Windows 中的“不同”python,您可以使用以下语法设置完全限定的路径 alias python='winpty /c/Python27/python.exe'
您也可以运行 source .bashrc 而不是重新启动 shell。
我有同样的问题,这个解决方案对我有用。但是,为什么它确实是必要的?引擎盖下发生了什么?
v
vav

我在答案列表中看不到下一个选项,但我可以使用“-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
这比 alias python='winpty python.exe' 更昂贵吗?
这是适用于任何计算机的零配置工作选项。
实际上并不能使终端正常运行。例如,键盘向上/向下不起作用。除非先运行 winpty
C
Charles Duffy

This is a known bug in MSys2, which provides the terminal used by Git Bash. 您可以通过运行不支持 ncurses 的 Python 构建或使用 WinPTY 来解决此问题,使用如下:

要在 mintty 或 Cygwin sshd 中运行 Windows 控制台程序,请将 console.exe 添加到命令行: $ build/console.exe c:/Python27/python.exe Python 2.7.2(默认,2011 年 6 月 12 日,15:08 :59) [MSC v.1500 32 位 (Intel)] 在 win32 上键入“帮助”、“版权”、“信用”或“许可证”以获取更多信息。 >>> 10 + 20 30 >>> 退出()

prebuilt binaries for msys 可能与 Git Bash 一起使用。 (如果自发布此答案以来已经过了很长时间,请检查是否有更新的版本!)。

从 Git for Windows 2.7.1 开始,也可以尝试使用 winpty c:Python27/python.exe; WinPTY 可以开箱即用。


您能否解释一下build/console.exe c:/Python27/python.exe - 这应该在 GitMsys 控制台中运行还是以任何其他方式运行?
@h3d0,是的,在终端内。当然,这假设 buildconsole.exe 所在的目录;根据您实际安装它的位置/方式适当地更新路径。
在整个系统中搜索 console.exe - 没有出现。这是要额外安装的东西吗?
@h3d0 是的,是附加软件;我的回答包括一个链接。
我认为您可以将其用作 winpty c:/Python27/python.exe,而无需执行任何其他操作。实用程序 winpty.exe 可以在 Git\usr\bin 中找到。我正在使用适用于 Windows v2.7.1 的 Git
h
hygull

我是 Windows 10 用户,我通过接受默认设置在我的系统中安装了 GIT。

阅读上述答案后,我得到了 2 个自己的解决方案,这 2 个解决方案在 GIT bash 上完美运行,并方便我在 GIT bash 上执行 Python 语句。

我附上了我的 GIT bash 终端的 3 张图像。第一个有问题,后两个作为解决方案。

问题 - 光标在点击 python 命令后正在等待

https://i.stack.imgur.com/CbxRl.png

解决方案 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

https://i.stack.imgur.com/IzvlA.png

解决方案 2

只需输入 python -i 即可。

https://i.stack.imgur.com/3mwby.png

谢谢。


J
James

试试 python -i 而不是 python,这是一个光标。


H
Harry

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

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

Git Bash 别名文件是 aliases.sh。它位于:安装 Git\etc\profile.d\aliases.sh 的 C:\path

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

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

$ python ->启动 Python 3

$ python2 ->启动 Python 2

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

干杯,哈利


X
Xun Yang

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

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


u
urxter

2个变通方法,而不是解决方案:在我的 Git Bash 中,以下命令挂起并且我没有得到提示:

% python

所以我只是使用:

% winpty python

正如上面某些人所指出的,您还可以使用:

% python -i

https://i.stack.imgur.com/XQMZJ.png

https://i.stack.imgur.com/4BpfI.jpg


B
Bryce Regan LeFevre

类型:'winpty python',它会工作

gitbash 在运行任何以 python 开头的命令时都会出现一些问题。这也适用于任何 python manage.py 命令。总是从'winpty python manage.py'开始至少这对我有用。运行 Windows 10。


I
Igonato

您可以从以下位置更改 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 就像作为登录 shell 被调用一样,-i:如果存在 -i 选项,则 shell 是交互式的
不久前,我曾经让 ConEmu 在没有 winpty 的情况下正常工作,但我完全忘记了我做了什么。谢谢这就像以前一样工作!
h
henjiFire

除了@Vitaliy Terziev 回答

尝试 touch .bash_profile,然后将别名添加到文件中。


我使用了 .bashrc,但是当我打开 Git Bash 时,我收到一条警告消息,指出 bashrc 存在 w/oa .bash_profile。我将 .bashrc 重命名为 .bash_profile ,现在警告消失了。谢谢。
B
Blaskovicz

我在 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


C
Charlyboy

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

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

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

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


P
Presi

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


d
djvg

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

我只是发布此内容,因为我花了一段时间才来到这里,搜索 eb-cli 个特定问题。

eb initeb config save 等需要用户输入的命令出现会导致冻结/挂起。实际上,我猜控制台没有更新请求用户输入的文本。此外,eb deploy 仅在命令完成后更新控制台文本,因此在完成之前我看不到进度更新。

git for windows release notes(针对 v2.19.0)和 Xun Yang's answer 中所述,解决方法是运行

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

正如此 git for windows issue 中所建议的,另一种方法是使用 Windows 本机控制台而不是 mintty(git 安装期间的选项)。


H
HassanSh__3571619

对我有用的一个是前面这些很好的答案中提到的别名如下:(我使用的是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) 提供了非常有帮助的答案。


K
Kirby

python.exe -i 有效,但通过发送“^Z”(CTRL+Z)退出交互模式时出现问题。因此,在适用于 Windows 的 Git Bash 中使用 winpty python.exe 似乎更好。使用 ~/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

19480756 [sig] bash 2740! sigpacket::process: Suppressing signal 18 to win32 process (pid 14820) — 发送 ^Z 后以 python.exe -i 运行的交互模式的响应示例
G
Gharbad The Weak

我知道这是一篇旧文章,但我刚刚在运行 Python 3.8.5 和 Git 2.28.0.windows.1 的 Windows 10 上遇到了这个问题

不知何故,我还安装了几个不同的 2.7x 版本的 Python。我删除了 Python 的每个版本(3x 和 2x),下载了官方安装程序 here,全新安装了 3.8.5(仅使用默认值),在此位置安装了 Python 3.8.5:

C:\Users\(我的用户名)\AppData\Local\Programs\Python\Python38

然后,为了让命令 python 在我的 git bash shell 中工作,我必须按照列出的说明 here 手动将 Python38 的路径添加到我的路径变量中。这一点很重要,因为在出现的第一个模式底部的 python 安装程序中,它会询问您是否要将 python 路径添加到 PATH 环境变量。我点击了旁边的复选框,但它实际上并没有添加路径,因此需要手动将路径添加到我的 PATH 环境变量。

现在使用我的 gitbash shell,我可以浏览到一个包含 python 脚本的目录,然后输入 python theScriptName.py,它运行没有问题。

我想发布这个,因为这是我必须做的所有事情才能让我的 gitbash shell 允许我运行 python 脚本。我认为可能有一些更新,所以我不需要执行此处列出的任何其他解决方案。无论如何,如果您在 Windows 10 机器上的 gitbash shell 中运行 python 脚本时遇到问题,这是另一回事。

享受。


尝试在 REPL 模式下不指定脚本的情况下运行 python。
S
Shaqil Ismail

如果您运行 Windows PowerShell 命令并发生错误,则错误记录将附加到名为 $error 的“自动变量”中。

您可以在同一个 PowerShell 会话中使用 $error 变量来查找错误。

$Error 变量包含信息集合,这就是使用 $Error[0] 可以获取错误消息对象的原因。此外,$Error[0] 变量将保存遇到的最后一条错误消息,直到 PowerShell 会话结束。


你能扩大你的答案吗?或者添加一个例子?
C
Community

看看这个答案:

Git Bash won't run my python files?

Git Bash 中的路径应该这样设置:

PATH=$PATH:/c/Python27/

其实……不!我可以重现 OP 的问题,并且在 PATH 中找到 python 没有问题。请参阅sourceforge.net/p/msys2/tickets/32
OP 的帖子表明 PATH 不是问题。