【问题标题】:Python not working in the command line of git bashPython 不能在 git bash 的命令行中工作
【发布时间】:2015-12-12 08:49:34
【问题描述】:

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,她说得很清楚,查尔斯,没有任何错误消息。巴什只是冻结。冻结终端是错误消息。
  • 类似的问题在这里:stackoverflow.com/questions/13588454/… 使用 python -i 解决它。

标签: python windows git command-line git-bash


【解决方案1】:

临时解决方案

只需在 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。
  • 我遇到了同样的问题,这个解决方案对我有用。但是,为什么它确实是必要的?引擎盖下发生了什么?
【解决方案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.
>>> 

【讨论】:

  • -i 参数:当脚本作为第一个参数传递或使用 -c 选项时,在执行脚本或命令后进入交互模式,即使 sys.stdin 看起来不是终端。未读取 PYTHONSTARTUP 文件。 docs.python.org/3/using/cmdline.html#cmdoption-i
  • 这是否比 alias python='winpty python.exe' 更昂贵?
  • 这是一个零配置工作的选项,适用于任何计算机。
【解决方案3】:

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

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所在的目录;根据您实际安装它的位置/方式适当地更新路径。
  • @h3d0 是的,是附加软件;我的回答包括一个链接。
  • 我认为您可以将其用作winpty c:/Python27/python.exe,而无需执行任何其他操作。实用程序 winpty.exe 可以在 Git\usr\bin 中找到。我正在使用 Git for Windows v2.7.1
  • @XunYang, ...winpty 现在捆绑了吗?好的!编辑得当。
【解决方案4】:

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

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

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

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

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

解决方案 2

只需输入python -i 即可。

谢谢。

【讨论】:

  • 我发现winpty 也可以与 Windows Python 启动器一起使用,所以你只需要例如alias py='winpty py' 在您的 .bashrc 中,然后恢复正常。
  • 是的,这取决于你,你如何管理事情以使你的生活更美好。
【解决方案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 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 文件结构,因此您需要将 "\" 更改为 "/" 如果您有像我的示例 Network Automation 这样的路径,则将其与 " "

    “网络自动化”例如

    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 快速显示你的详细文件列表

    干杯,哈利

    【讨论】:

      【解决方案7】:

      除了@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

      【讨论】:

        【解决方案8】:

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

        % python
        

        所以我只使用:

        % winpty python
        

        正如上面一些人所说,你也可以使用:

        % python -i
        

        2020-07-14:Git 2.27.0 增加了对伪控制台的可选实验性支持,允许从命令行运行 Python:

        见附件。

        【讨论】:

          【解决方案9】:

          type: 'winpty python' 就可以了

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

          【讨论】:

            【解决方案10】:

            您可以从以下位置更改 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 是交互式的
            • 不久前我曾经在没有 winpty 的情况下让 ConEmu 工作正常,但我完全忘记了我做了什么。谢谢这就像以前一样工作!
            【解决方案11】:

            除了@Vitaliy Terziev 的回答

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

            【讨论】:

            • 我使用了 .bashrc,但是当我打开 Git Bash 时,我收到一条警告消息,指出 bashrc 存在而没有 .bash_profile。我将 .bashrc 重命名为 .bash_profile ,现在警告消失了。谢谢。
            【解决方案12】:

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

            【讨论】:

              【解决方案13】:

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

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

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

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

              【讨论】:

                【解决方案14】:

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

                【讨论】:

                  【解决方案15】:

                  此问题的另一个示例是使用 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 期间的选项)。

                  【讨论】:

                    【解决方案16】:

                    如前所述,对我有用的是上面这些出色答案中的别名,如下所示: (我使用的是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) 非常有帮助的回答。

                    【讨论】:

                      【解决方案17】:
                      1. python.exe -i 有效,但在通过发送“^Z”(CTRL+Z) 退出交互模式时出现问题。因此,在 Windows 版 Git Bash 中使用 winpty python.exe 似乎更好。

                      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) — 以python.exe -i 运行的交互模式发送^Z 后的响应示例
                      【解决方案18】:

                      我知道这是一篇旧帖子,但我只是在运行 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。
                      【解决方案19】:

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

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

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

                      【讨论】:

                      • 你能扩展你的答案吗?或者添加一个例子?
                      【解决方案20】:

                      看看这个答案:

                      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 不是问题。
                      猜你喜欢
                      • 2016-09-09
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2022-01-02
                      相关资源
                      最近更新 更多