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

oro*_*ome 9 python homebrew

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

/Library/Python/2.7/site-packages
/usr/local/lib/python2.7/site-package
Run Code Online (Sandbox Code Playgroud)

这与我期望的顺序相反.不应该先搜索Homebrew的软件包吗?(事实上​​,它不应该唯一搜索到的地方吗?)这就是文档中隐含的内容.它在哪里设置,我怎么能(或应该)改变它?

或者,这是Brewed Python的工作方式吗?它是否旨在防止重复的包并假设系统中的任何包site-packages都要保留在那里,除非明确卸载然后安装(进入Brew); 有例外pipsetuptools复制(在酿造Python的路径放在第一).

ely*_*ase 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不会选择它的优点.它是目前推荐的方法.你可以用:

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

设置PYTHONPATH:

这是前提sys.path,它的缺点是所有python版本都是全局的,所以如果你打算使用不同的python版本,不建议这样做.你可以通过添加到你的.bash_profile:

export PYTHONPATH=`brew --prefix`/lib/python2.7/site-packages:$PYTHONPATH
Run Code Online (Sandbox Code Playgroud)

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