Python 安装 Homebrew Python 后包在错误的位置?

Python packages in wrong location after installing Homebrew Python?

将 Homebrew 的 Python 安装到已建立 Apple Python 的系统上后,sys.path 使用 Homebrew 的 Python 列出的最后条目是

/Library/Python/2.7/site-packages
/usr/local/lib/python2.7/site-package

这与我预期的顺序相反。不应该先搜索 Homebrew 的包吗? (事实上​​ ,shouldn't it be the only place searched?) That's what's implied in the documentation。它在哪里设置,我该如何(或应该)更改它?

或者这就是 Brewed Python 应该工作的方式吗?它是否旨在 防止重复包 并假设系统 site-packages 中的任何包都应该保留在那里,除非明确卸载然后随后安装(进入 Brew's); pipsetuptools 除外,它们 重复的(并且放在 Brewed Python 路径的第一位)。

这是预期的行为。其背后的基本原理是,尽管您现在使用的是新的自制模块,但您可以继续使用旧安装的模块 Python。

现在这有一些缺点,例如一些库,如 numpy,不能跨不同的 Python 版本工作,所以如果你安装了 numpy,它将从旧系统的 site-packages 导入并且不会工作。

至少有两种方法可以改变sys.path:

使用 .pth 文件:

Python 将从一些内置位置中选择它(例如:~/Library/Python/2.7/lib/python/site-packages/homebrew.pth)。这附加到 sys.path,这并不理想,但具有不会被 Python 选择的优点 3. 目前是 recommended method。您可以通过以下方式实现:

echo "$(brew --prefix)/lib/python2.7/site-packages" > ~/Library/Python/2.7/lib/python/site-packages/homebrew.pth

设置PYTHONPATH:

它被添加到 sys.path 之前,它的缺点是对所有 python 版本都是通用的,因此如果您要使用不同的 python 版本,则不推荐这样做。您可以通过添加到 .bash_profile:

export PYTHONPATH=`brew --prefix`/lib/python2.7/site-packages:$PYTHONPATH

我个人使用选项 2 和 homebrew-python(我现在使用并推荐 Anaconda)。我的理由是当时我并不关心系统的 Python 或 Python 3。