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

时间:2015-01-14 21:16:12

标签: python homebrew

将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仅搜索的地方?)那是什么implied in the documentation。它在哪里设置,我怎么能(或应该)改变它?

或者,这是Brewed Python的工作方式吗?它是否设计为防止重复包并假设系统site-packages中的任何包都要留在那里,除非明确卸载然后安装(到Brew);除了 重复的pipsetuptools之外(并且首先放入Brewed Python的路径中)。

1 个答案:

答案 0 :(得分:10)

这是预期的行为。它背后的基本原理是你可以继续使用旧的已安装模块,尽管你现在正在使用一个新的自制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。