如何使用 brew 安装的 Python 作为默认 Python?

Posted

技术标签:

【中文标题】如何使用 brew 安装的 Python 作为默认 Python?【英文标题】:How do I use brew installed Python as the default Python? 【发布时间】:2011-07-06 16:09:26 【问题描述】:

我尝试在 Mac OS X 10.6.2 上切换到 Homebrew(在使用 fink 和 macport 之后)。我已经用

安装了 python 2.7
brew install python 

问题是,与Macport相反,好像没有python_select实用程序,而我的默认mac python总是默认的

which python

给我

/usr/bin/python

/usr/bin/python 不是符号链接

如何让 python brew flavor 成为我的默认 python?

【问题讨论】:

Homebew 不再影响 python 的系统安装。你可以这样做:export PATH="/usr/local/opt/python/libexec/bin:$PATH" 来源:discourse.brew.sh/t/… 我尝试了所有提到的答案,/usr/local/bin 在我的 $PATH 中位于 /usr/bin 之前。我尝试了 brew link 和 unlink,brew doctor 没有报告 /usr/bin 在 /usr/local/bin 之前存在问题。仍然当我执行 which python 时,我得到 /usr/bin/python 而不是使用 brew 安装的那个。 试试...哪个python2 【参考方案1】:

当您使用 Homebrew 时,以下命令可以提供更好的图片:

brew doctor

输出:

==> /usr/bin 出现在 /usr/local/bin 之前 这意味着将使用系统提供的程序而不是由 自制。如果您例如,这是一个问题。 brew 安装了 Python。

考虑编辑您的 .bash_profile 以将:/usr/local/bin 放在前面 /usr/bin 在你的 $PATH 中。

【讨论】:

确保路径中没有 /user/local/bin TWICE。由于某种原因,在我的 PATH 中它出现在 /usr/bin 之前和之后,这让我发疯了。 许多程序在标头中使用 /usr/bin/python,这使得这不是一个可行的解决方案。 仅适用于 High Sierra 中的 brew python2 在 /usr/local/bin 中,仅适用于 python;在~/.bash_profile中设置export PATH="/usr/local/opt/python/libexec/bin:$PATH"【参考方案2】:

按照自制程序安装程序本身的建议,请务必将其添加到您的 .bashrc.zshrc

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

【讨论】:

这是 High Sierra 上的正确方法。投票! MacOS 默认使用 zsh 终端,所以很可能是 .zshrc 文件而不是 .bashrc 文件需要更改。 除此之外,没有其他答案对我有用!在此处运行 macOS Catalina。谢谢! 似乎为大苏尔工作。注意:需要这个来识别 OBS 的 python 位置,因为 OBS 似乎需要 python 3.7。 Brew 安装 3.9。 在 OBS 中获取 python 脚本实际上是一回事。把这个留在这里,以防有人在路上发生:obsproject.com/forum/threads/…。【参考方案3】:

见:How to symlink python in Homebrew?

$ brew link --overwrite python
Linking /usr/local/Cellar/python/2.7.3... 28 symlinks created
$ which python
/usr/local/bin/python

【讨论】:

为什么我在 brew install python 时不会出现这种情况? @BenWest 因为python3,现在你得到的是python2而不是python。 我没有启用它。 在我的情况下,我需要在运行此命令后重新启动终端(如 Martijn Courteaux's answer 所述) 这个链接 python@2 为我【参考方案4】:

快速修复:

    打开/etc/paths 更改行的顺序(最高优先级在上)

在我的情况下,/etc/paths 看起来像:

/usr/local/bin
/usr/local/sbin
/usr/bin
/bin
/usr/sbin
/sbin

如果您想了解更多有关 OSX 中路径的信息,我发现这篇文章非常有用:

http://muttsnutts.github.com/blog/2011/09/12/manage-path-on-mac-os-x-lion/

【讨论】:

谢谢,以上所有答案都解决了我的问题,但你做到了!非常感谢! 问题在于它会为所有用户改变它:/,IMO最好改变一些更具体的东西。 @RandallHunt 喜欢什么以及怎么样?【参考方案5】:

我为 OSX High Sierra 做了“brew install python”。 $PATH 在任何其他路径之前有 /usr/local/bin,但 which python 仍然指向系统的 python。

当我深入研究时,我发现/usr/local/bin 没有 python 可执行文件。可执行文件名为python2。要解决此问题,请创建一个指向 python2 的符号链接 python

/usr/local/bin $: ln -s python2 python

【讨论】:

确认这解决了 High Sierra 上的问题 你是我的英雄。不敢相信我没有意识到这个解决方案! 申请也需要重启终端 $ cd /usr/local/bin $ ln -s python3 python 我想还将 pip 符号链接到 pip3(或 pip2)?【参考方案6】:

python 公式现在使用python3(目前为 v3.6.5),brew 将链接 目录

/usr/local/opt/python -> ../Cellar/python/3.6.5

它还会链接二进制文件

/usr/local/bin/python3 -> ../Cellar/python/3.6.5/bin/python3

如果还需要使用python2.x,请使用:

brew install python@2

要使用 homebrew 的 python,只需将其目录放在 PATH 中,用于 bash:

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

鱼:

set -x PATH /usr/local/opt/python/libexec/bin $PATH

注意:

    这样做会影响python的系统默认版本 homebrew 用于在旧版本中将 python 链接到 /usr/local/share/python

【讨论】:

这对我来说是个窍门。默认情况下,brew 在您的路径中安装 python3 - 不是 一个名为 python.. 的执行程序。特别是在我的路径中的其他目录之前引用 /usr/local/opt/python/libeexec/bin【参考方案7】:

Homebrew 不会替换“/usr/bin”中的内容。您只需在路径中将“/usr/local/bin”放在“/usr/bin”之前,然后“which python”将为您提供“/usr/local/bin/python”。

非常不推荐替换 /usr/bin/python(或 /usr/bin/ruby)。

【讨论】:

但它没有!【参考方案8】:

修改您的 $PATH,将其添加到您的 bashrc 或 bash_profile 中:

export PATH=/usr/local/bin:/usr/local/sbin:~/bin:$PATH

更多点击这里: Issue #89791

【讨论】:

我的编辑器“PyCharm”正在使用 ~/.bashrc,在这个小宝石之前我无法让 brew 的 python 工作。谢谢@Aben【参考方案9】:

我做了brew install python,我的$PATH 很好,但是,which python 给了我安装的系统。重新启动终端修复它。

【讨论】:

这就是我需要做的。不过,我不确定何时执行此操作。听起来就像只执行brew install python 然后,重新启动终端,没有别的?不需要brew unlink & brew link 在使用 brew 安装 python 之后,“which python”给了我正确的本地 python 路径,但是“python”命令表明它是系统安装的一个调用。重启终端修复它。 不需要重启终端,试试hash -r JFC,直到我读到这篇文章,我才恍然大悟。我已经做了几次brew unlink & brew link。只需要重启终端【参考方案10】:

您需要编辑 PATH 环境变量以确保在 /usr/bin 之前搜索自制 python 所在的位置。您还可以在 shell 配置中进行设置,将 PYTHON 之类的变量设置为所需的 python 版本,并从命令行调用 $PYTHON 而不是 python

另外,正如另一张海报所说(尤其是在 mac 上),不要弄乱 /usr/bin 中的 python 以将其指向另一个 python 安装。如果你这样做,你只是在自找麻烦。

【讨论】:

【参考方案11】:

python 现在指向python3,如果你需要python 2 然后做: brew install python@2 然后在您的 .zshrc 或 .bashrc 文件中 export PATH="/usr/local/opt/python@2/libexec/bin:$PATH" 现在,pyhon --version = Python 2.7.14 和 python3 --version = Python 3.6.4。 这是我习惯在终端中看到的行为。

【讨论】:

【参考方案12】:

我相信有办法让 homebrew python 默认,但在我看来,解决问题的正确方法是不要弄乱系统 python 路径:最好创建一个 virtualenv ,其中 homebrew python 是默认的(通过使用 virtualenv --python 选项)。使用像 python_select 这样的工具几乎总是一个坏主意。

【讨论】:

【参考方案13】:

使用 pyenv 来安装和切换 Python 版本。多年来我一直在使用 rbenv,它做同样的事情,但对于 Ruby。在此之前,管理版本简直就是地狱。

请咨询pyenv's github page 以获取安装说明。基本上它是这样的: - 使用自制软件安装 pyenv。 brew install pyenv - 在你的 shell 启动脚本的末尾添加一个函数,这样 pyenv 就可以发挥它的魔力。 echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

使用 pyenv 安装您需要的许多不同版本的 Python。 pyenv install 3.7.7。 将默认(全局)版本设置为您刚刚安装的现代版本。 pyenv global 3.7.7。 如果您的项目需要使用不同版本的 python,请查看pyevn local。这会在您的项目文件夹中创建一个指定 python 版本的文件。 Pyenv 看起来会用该文件中的版本覆盖全局 python 版本。

【讨论】:

【参考方案14】:

/usr/local/opt/python/libexec/bin 明确添加到您的.bash_profile

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

之后,它应该可以正常工作了。

【讨论】:

【参考方案15】:

对于 Apple Silicon 机器,路径略有不同。运行 brew install python 后,您必须确保您的 ~/.zshrc 使用正确的 Homebrew 路径:

# Homebrew
eval "$(/opt/homebrew/bin/brew shellenv)"

# Homebrew: Python
export PATH="/opt/homebrew/opt/python/libexec/bin:$PATH"

结果:

% which python
/opt/homebrew/opt/python/libexec/bin/python

% python --version
Python 3.9.9

% which pip
/opt/homebrew/opt/python/libexec/bin/pip

% pip -V
pip 21.3.1 from /opt/homebrew/lib/python3.9/site-packages/pip (python 3.9)

【讨论】:

【参考方案16】:

只要做:

brew install python
brew link python

完成后,将其添加到您的 bashrc 或 bash_profile:

alias python='/usr/local/bin/python2'

享受吧!

【讨论】:

听起来你遇到了和我一样的问题。 brew 创建的所有链接,即使在此处的答案中使用 link 命令,在 /usr/local/bin 中也是针对 python2 而不是 python。使用别名来解决这个问题似乎是个坏主意,但我还没有找到更好的方法。 我只是复制了cp /usr/local/bin/python2 /usr/local/bin/python而不是别名,它似乎运行良好。这是一个更丑陋的解决方法吗?【参考方案17】:

您可以编辑 /etc/paths.这是我的:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

然后为 python 版本添加符号链接。就我而言

$ cd /usr/local/bin
$ ln -s python3 python

瞧!

【讨论】:

【参考方案18】:

如果你是鱼壳

echo 'set -g fish_user_paths "/usr/local/opt/python/libexec/bin" $fish_user_paths' >> ~/.config/fish/config.fish

【讨论】:

【参考方案19】:

由于High Sierra,您需要使用:

sudo chown -R $(whoami) $(brew --prefix)/*

这是因为/usr/local 不能再被改写

【讨论】:

【参考方案20】:
brew link python

您必须为 python 创建/添加别名并将其放入您的 .zprofile(如果您按 Shift+command+,则位于用户/用户名文件夹中。

这必须指向你的 homebrew python 安装位置。

alias python ='opt/homebrew/bin/python3'

【讨论】:

【参考方案21】:

不知道默认 Python 是什么意思。我认为用不同版本替换系统 Python 解释器是不好的做法。系统功能可能在某种程度上取决于系统 Python 和特定模块或特定 Python 版本。而是将您的自定义 Python 安装安装在一个安全的不同位置,并根据需要调整您的 $PATH,以便通过路径查找调用 Python,而不是寻找默认的 Python。

【讨论】:

在 os x 中,在路径中让 homebrew 的 python 出现在系统的 python 之前是没有风险的。这很常见。 另外,使用非 Apple Python 的需求是真实存在的。我一直在尝试让 matplotlib、NumPy 和 SciPy 启动并使用“默认”(又名 Apple)Python 运行。这是关于它对 32/64 位的处理,这只是将扩展分开。非常,非常,非常高兴有一个不错的 Brew 代替。默认情况下('brew install python')Brew 完全符合您的意思 - 它将第二个 Python 安装到一个单独的结构中,而不是覆盖路径(这正是出现这个 SO 问题的原因)。

以上是关于如何使用 brew 安装的 Python 作为默认 Python?的主要内容,如果未能解决你的问题,请参考以下文章

OSX Brew Python“找不到满足 pyopencv 要求的版本”

如何在最新的OS X上安装多个版本的Python并同时使用它们?

homerbrew source 设置

Macbook Pro上如何修改brew源

Macbook Pro上如何修改brew源

Macbook Pro上如何修改brew源