有几个初学者关于 Homebrew 和 pyenv 在MacOSX Yosemite上共存的问题。在这个主题上,我经过了一定程度的谷歌翻译之后仍然感到困惑。很抱歉内容有些长,但我希望尽可能清晰明了。
首先,一些背景信息。 我使用brew来安装pyenv,然后使用pyenv来安装python2和python3。
brew install pyenv
brew install pyenv-virtualenv
*I also added the necessary hooks into my profiles.*
pyenv install 2.7.10
pyenv install 3.4.3
pyenv rehash
pyenv global 2.7.10
如果brew使用由pyenv安装的Python,我认为这是不被赞同的,因为brew的软件包将使用在brew之外的依赖项进行构建(例如使用pyenv卸载Python版本可能会破坏brew的软件包)。看起来brew使用PATH中出现的第一个Python(对于我来说是pyenv的版本)?然而,在以下每种情况下,shims都是用于“python”而不是“python3”(即使是对于pyenv 3.4.3)。那么,我是否正确地认为设置“pyenv shell 3.4.3”将使brew链接Python命令(假设它们是针对python2.x的)到pyenv的Python 3.4.3,这可能会导致混乱?
pyenv shell 2.7.10
brew --config
Python: /Users/anonymous/.pyenv/shims/python => /Users/anonymous/.pyenv/versions/2.7.10/bin/python2.7
pyenv shell 3.4.3
brew --config
Python: /Users/anonymous/.pyenv/shims/python => /Users/anonymous/.pyenv/versions/3.4.3/bin/python3.4
pyenv shell system
brew --config
Python: /Users/anonymous/.pyenv/shims/python => /usr/bin/python
问题. 如果使用pyenv的python版本进行brew操作是一个不好的主意,那么我是否应该安装brew版本的python和python3呢?这样做会有冲突并导致问题吗? 我的选择似乎要么使用Mac上默认安装的系统python,要么对于所有的brew操作都使用brew自己的python。在第一种情况下,我可以确保在任何brew操作之前调用“pyenv shell system”,或者像别人建议的那样设置一些别名来自动化(alias brew="env PATH=${PATH//$(pyenv root)/shims:/} brew")。然而,这意味着我必须使用相当过时的系统python。如果我使用brew来安装python2和python3,这会与使用pyenv安装的版本产生冲突吗?还是brew的python和pyenv的完全分开的(我认为是这样,但在尝试之前我想再次确认)?这样做是否能够让我使用brew的python或python3完成所有的brew操作(我假设我仍然需要一个别名像上面那样,以确保在PATH中不首先找到pyenv的版本),而其他所有内容则使用pyenv的python版本?这样做有何不好的地方吗?
pyenv global system
*Add to profile:*
alias brew="env PATH=${PATH//$(pyenv root)\/shims:/} brew"
brew install python
brew install python3
例如,考虑这样一种情况:我想使用brew安装带有python3绑定的boost-python。这是否需要一个brew版的python3版本,并且是否会在不同的pyenv版本的python3.x上工作?如果我只安装了pyenv的版本,那么在这种情况下,--with-python3标志是否起作用?另一方面,如果我除了pyenv的版本外还安装了brew的python3,我假设--with-python3将链接到brew的python3(使用上述别名)。如果是这样,当从运行pyenv版本而不是brew版本的python会话中调用时,boost-python是否可用(不确定这是否更适合作为有关boost-python本身的问题),或者这完全没有问题?
brew install boost
brew install boost-python --with-python3
针对指向pyenv python的symlink关于brew的看法? 另一篇帖子建议将pyenv的python创建symlink以便让brew找到它们。除了明显的警告,即brew现在依赖于它自己没有管理的python,这个想法还有什么严重的问题吗?
ln -s $(brew --cellar) ~/.pyenv/versions