【问题标题】:brew-installed Python not overriding system pythonbrew 安装的 Python 没有覆盖系统 python
【发布时间】:2018-08-30 23:54:38
【问题描述】:

我刚刚使用 brew 在 OS X 上安装 Python 3。python3 命令现在使用 brew Python 3.6 启动解释器,但 python 仍然使用默认系统 Python 2.7 打开解释器。

我的理解是,默认情况下,brew Python 现在应该覆盖系统 Python。 (即,参见Order of /usr/bin and /usr/local/bin and more in $PATH)。在我的 PATH 中,/usr/local/bin 位于 /usr/bin 之前,因此它不应该是 PATH 问题。我试过重启终端,没有效果。

如果相关,这是我的完整路径。

/Users/**/.rvm/gems/ruby-1.9.3-p362/bin:/Users/**/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/**/.rvm/rubies/ruby-1.9.3-p362/bin:/Users/**/.rvm/bin:/Users/**/.rvm/bin:/Users/**/Python/PmagPy/programs/conversion_scripts2/:/Users/**/Python/PmagPy/programs/conversion_scripts/:/Users/**/Python/PmagPy/programs:/usr/local/heroku/bin:./bin:/usr/local/sbin:/usr/local/bin:/usr/local/share/npm/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/opt/X11/bin

为什么没有 brew Python 优先?我该如何解决(或解决)这个问题?如果找不到其他选项,我可以创建一个别名,但我更愿意了解正在发生的事情并找到问题的根源。

更新:

我检查了“可能重复”的问题,但我的问题似乎不是链接问题:

 ~ brew link --overwrite --dry-run python
Warning: Already linked: /usr/local/Cellar/python/3.6.4_4
To relink: brew unlink python && brew link python
 ~ 

【问题讨论】:

标签: python macos path homebrew


【解决方案1】:

我尝试了How to link home brew python version and set it as default 中提出的一些解决方案,但都没有奏效。最终我通过符号链接 python3 --> python:

解决了这个问题
ln -s /usr/local/bin/python3 /usr/local/bin/python

【讨论】:

    【解决方案2】:

    TL;DR 将以下内容添加到您的 .bash_profile(或等效项):

    export PATH="/usr/local/opt/python/libexec/bin:$PATH"

    说明

    现在似乎通​​过自制程序处理 python 的方式有所不同(请参阅https://docs.brew.sh/Homebrew-and-Python)。

    • python3 指向 Homebrew 的 Python 3.x(如果已安装)
    • python2 指向 Homebrew 的 Python 2.7.x(如果已安装)
    • python 指向 Homebrew 的 Python 2.7.x(如果已安装),否则指向 macOS 系统 Python。如果您想添加,请查看brew info python Homebrew 的 3.x python 到你的 PATH。

    查看brew info python 提示您需要做什么:

    未版本化的符号链接pythonpython-configpip 等指向 python3python3-configpip3等,分别被 安装到 /usr/local/opt/python/libexec/bin

    提示您因此必须在路径中的/usr/bin 之前添加/usr/local/opt/python/libexec/bin(而不是某些来源中所述的/usr/local/bin,例如https://docs.python-guide.org/starting/install3/osx/

    另见https://github.com/Homebrew/homebrew-core/issues/15746

    【讨论】:

    • 折腾了一个小时,终于搞定了!谢谢!!!
    • 我知道你不应该在 macOS 上覆盖/usr/bin/python 的 python 系统安装,那么为什么会有不同呢?我知道它实际上并没有覆盖,但我认为这与使依赖 python 的程序在尝试使用 python 2 时使用 python3 具有相同的效果。
    • 你是对的,但除非脚本与 python 2.x 和 3.x 兼容,否则我认为明确说明版本是否将由系统运行是一个好习惯某种方式,例如与#!/usr/bin/env python3。见stackoverflow.com/a/19305076/1265167
    • 我担心的不是我自己的脚本,而是需要python2的系统脚本。不过,一夜之间我意识到,这些脚本可能不受影响,因为它们可能通过使用 #!/usr/bin/env python2 之类的东西明确声明他们需要 python 2,我认为这就是你所说的。感谢您的帮助!
    【解决方案3】:

    让自制 python 工作的单线:

    zsh

    echo -n 'export PATH="/usr/local/opt/python/libexec/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc
    

    狂欢

    echo -n 'export PATH="/usr/local/opt/python/libexec/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
    

    说明:
    >> filename 追加在文件末尾
    source filename 重新加载文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 2020-08-29
      • 2015-05-13
      • 2018-01-15
      • 2010-09-23
      • 2021-02-25
      • 2016-04-26
      相关资源
      最近更新 更多