如何使用 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.7brew 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 中的 brewpython2
在 /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 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 要求的版本”