Homebrew 和 pyenv 在 MacOSX 上的共存 Yosemite

Coexistence of Homebrew and pyenv on MacOSX Yosemite

关于 Homebrewpyenv 在 MacOSX 上共存的几个新手问题Yosemite。这些是我在将我的 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

???问题(或澄清)。如果 brew 使用由 pyenv 安装的 python,我认为这是不受欢迎的,因为 brewed 包将依赖于 brew 之外的东西构建(例如,使用 pyenv 卸载 python 版本可能会中断brewed packages)? 看来 brew 使用 PATH 中第一个 python 的那个(目前 pyenv 的版本对我来说)?但是,在以下每种情况下,垫片都是针对“python”而不是“python3”(即使是 pyenv 3.4.3)。那么我是否正确地假设设置“pyenv shell 3.4.3”将使 brew link 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 的 pythons 来 brew 是个坏主意,那么我是否也应该安装 python 和 python3 的 brewed 版本,或者这种冲突会以某种方式引起问题吗? 我的选择似乎是要么使用安装在我的 Mac 上的系统 python,要么使用 brew 自己的 python 来满足我所有的酿造需求。在第一种情况下,我可以确保在任何酿造之前调用“pyenv shell 系统”,或者像其他人建议的那样设置一些别名来自动执行此操作(别名 brew="env PATH=${PATH//$(pyenv root)/shims:/} brew")。然而,这意味着我必须使用相当过时的系统 python。相反,如果我也使用 brew 来安装 python2 和 python3,这会不会与以任何方式使用 pyenv 安装的版本发生冲突,或者 brew 的 python 是否会与 pyenv 的(我认为这是真的,但我想在尝试之前仔细检查)?这会给我一个设置,我所有的酿造都使用 brew 的 python 或 python3 (我假设我仍然需要一个像上面那样的别名来确保在我的 PATH 中没有首先找到 pyenv 的版本),并且brew 之外的所有其他东西都会使用 pyenv 的 pythons?出于任何原因这是一个坏主意吗?

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 的场景。这是否需要一个 brewed python3 版本,它随后是否适用于 python 3.x 的不同 pyenv 版本? 如果我只安装了 pyenv 的版本,- -with-python3 标志在这种情况下是否有效?另一方面,如果除了 pyenv 之外我还安装了 brew 的 python3,我假设 --with-python3 将 link 对抗 brew 的 python3(具有上述别名)。如果是这样,从 python 会话 运行 pyenv 的版本调用时,boost-python 甚至可以使用(不确定这是否更适合作为关于 boost-python 的问题本身),还是完全没问题?

brew install boost
brew install boost-python --with-python3

???关于指向 pyenv python 的 brew 的 symlinks 的意见? 另一个 post 建议 symlinking pyenv 的 pythons 所以brew 可以找到它们。除了明显的警告,brew 现在依赖于 python 而它本身并不管理,这个想法有什么可怕的错误吗?

ln -s $(brew --cellar) ~/.pyenv/versions

澄清:Homebrew 使用系统 Python,只要它没有确切区分它使用的 Python 2.7(这很常见)。如果你构建一些东西 --with-python,那将使用 PATH 中的第一个 Python,if 那 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 pythons 符号链接到 /usr/local 应该不会有什么坏处,但除了将它们放在 $PATH 中之外不会做任何事情;否则它不会帮助 Homebrew 找到它们。

我会尽量回答你的每一个问题。

1 brew 是否对使用 pyenv 的 Python 而不是 brew 表示“不满意”?

简而言之,是的。他们列出了 the whole story here,简而言之,您需要自己解决出现的问题。

2brewPython和pyenvPython会不会冲突?

没有。正如 Tim Smith 在另一个答案中所说,“如果你这样做,应该不会发生什么坏事”。使用您的 PATH 来管理您(或应用程序)看到的 Python(这就是 pyenv 所做的)。

3 个具有 Python 依赖性的软件包 brew Python 使用来自 pyenv

的“oustide”Python

正如蒂姆所说,这应该不是问题。

4 使用符号链接,以便我们只使用 pyenv Python?

我认为您指的是 ,这是一个有趣的想法,但可能不利于维护。 Fwiw,我现在正在做这个。 我布局how to do it here.