Mar*_*Ohm 5 python homebrew boost-python python-3.x pyenv
有关MacOSX Yosemite上Homebrew和pyenv共存的几个新手问题。在将我的google-fu水平应用于该主题之后,我仍然感到困惑。抱歉,长度不够,但我想尽可能清楚。
首先,一些背景。我用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
Run Code Online (Sandbox Code Playgroud)
??? 问题(或澄清)。如果brew使用的是pyenv安装的python,我认为这会被皱眉,因为brew软件包将依赖于brew之外的东西来构建(例如,使用pyenv卸载python版本可能会破坏brew软件包)?看来brew使用PATH中第一个出现的python(对我来说是pyenv的版本)?但是,在以下每种情况下,填充都是针对“ python”而不是“ python3”的(甚至对于pyenv 3.4.3)。我是否假设设置“ pyenv shell 3.4.3”将使brew 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
Run Code Online (Sandbox Code Playgroud)
??? 题。如果使用pyenv的python进行酿造不是一个好主意,那么我是否也应该安装python和python3的酿造版本,否则会发生冲突并以某种方式引起问题吗?我的选择似乎是使用在我的Mac上安装的系统python,还是使用brew自己的pythons满足我的所有酿造需求。在第一种情况下,我可以确保在任何酝酿之前调用“ pyenv shell系统”,或者设置别名以按照其他人的建议使它自动化(alias brew =“ env PATH = $ {PATH // $(pyenv root) / shims:/}酿造”)。但是,这意味着我必须使用过时的系统python。相反,如果我还使用brew安装python2和python3,这是否会与以pyenv安装的版本发生冲突,或者brew的python与pyenv完全独立地生活(我认为这是事实,但我想在尝试之前仔细检查)?这是否为我提供了一个设置,其中我所有的brew都使用brew的python或python3(我想我仍然需要上面的别名,以确保pyenv的版本没有首先在我的PATH中找到),并且brew之外的所有其他东西都将使用pyenv的蟒蛇?这是个坏主意吗?
pyenv global system
*Add to profile:*
alias brew="env PATH=${PATH//$(pyenv root)\/shims:/} brew"
brew install python
brew install python3
Run Code Online (Sandbox Code Playgroud)
??? 例如,考虑以下情况:我想使用brew安装带有python3绑定的boost-python。这是否需要酿造的python3版本,并且随后可用于其他pyenv版本的python 3.x吗?如果我只安装了pyenv的版本,在这种情况下--with-python3标志是否还能工作?另一方面,如果除了pyenv之外还安装了brew的python3,我假定--with-python3将链接到brew的python3(具有上述别名)。如果是这样,当从运行pyenv版本的python会话中进行调用时,boost-python甚至可以使用(不确定是否更适合作为boost-python本身的问题),或者这完全可以吗?
brew install boost
brew install boost-python --with-python3
Run Code Online (Sandbox Code Playgroud)
??? 关于brew的符号链接的观点指向pyenv python的?另一篇文章建议符号链接pyenv的python,以便brew可以找到它们。除了明显的警告,即brew现在依赖于它本身无法管理的python之外,这个想法有什么可怕的错误吗?
ln -s $(brew --cellar) ~/.pyenv/versions
Run Code Online (Sandbox Code Playgroud)
我会尽力回答你的每一个问题。
brew
使用pyenv
's Python 而不是brew
's 会“皱眉”吗?简而言之,是的。他们在这里列出了整个故事,简而言之,您需要自己处理出现的问题。
brew
Python和pyenv
Python会冲突吗?不。正如蒂姆·史密斯在另一个答案中所说,“如果你这样做,应该不会发生什么坏事”。使用您的 PATH 来管理您(或应用程序)看到的 Python(这就是所做的pyenv
)。
brew
Python 与“oustide”Python 一起使用而满足pyenv
正如蒂姆所说,这应该不是问题。
pyenv
Python?我认为您指的是这篇文章,这是一个有趣的想法,但对于维护来说可能很危险。Fwiw,我现在正在这样做。我在这里列出了如何做。
澄清一下:只要 Homebrew 使用的是 Python 2.7(这很常见)并没有什么区别,它就会使用系统 Python。如果您构建某些东西--with-python
,它将使用 PATH 中的第一个 Python(如果该 Python 是 Python 2.7)。否则,Homebrew 将安装并使用 Homebrew python。
我不认为您会发现有必要安装 Homebrew 的 python 和 python3,但如果您这样做,应该不会发生什么不好的事情。请注意,如果您使用 pip 或 easy_install 安装一个安装脚本的包(例如ipython
),那么这些脚本的编写方式将始终使用安装它的 python 来调用该包。(你总是可以通过运行像这样的包来解决这个问题python -m ipython
。)否则,你可以通过设置 $PATH 来控制你正在使用哪个 python。
针对任何 python 3.4 构建 boost-python 都可以与任何其他 python 3.4 一起使用。它可能不适用于 python 3.5。(这曾经更复杂,但现在不再了!)
将 pyenv python 符号链接到 /usr/local 应该不会有什么坏处,但除了将它们放入 $PATH 之外不会做任何事情;否则它不会帮助 Homebrew 找到它们。