8

关于 MacOSX Yosemite 上Homebrewpyenv共存的几个新手问题。这些是我在将我的 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 包)?似乎 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 的 python 进行 brew 是一个坏主意,那么我是否还应该安装 python 和 python3 的 brewed 版本,或者这种冲突会以某种方式导致问题?我的选择似乎是使用安装在我的 Mac 上的系统 python,或者使用 brew 自己的 python 来满足我所有的酿造需求。在第一种情况下,我可以确保在任何 brewing 之前调用“pyenv shell system”,或者按照其他人的建议设置一些别名来自动执行此操作(alias brew="env PATH=${PATH//$(pyenv root) /shims:/} 冲泡”)。但是,这意味着我必须使用相当过时的系统 python。相反,如果我也使用 brew 来安装 python2 和 python3,这是否会与使用 pyenv 安装的版本发生冲突,或者 brew 的 python 是否会与 pyenv 完全分开(我认为这是真的,但我想在尝试之前仔细检查)?这会给我一个设置,其中我所有的酿造都使用了 brew 的 python 或 python3(我假设我仍然需要一个像上面这样的别名来确保在我的 PATH 中首先找不到 pyenv 的版本),并且 brew 之外的所有其他内容都将使用 pyenv蟒蛇?出于某种原因,这是一个坏主意吗?

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 的场景。这是否需要酿造的 python3 版本,它随后是否适用于 python 3.x 的不同 pyenv 版本?如果我只安装了 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

???关于 brew 的符号链接指向 pyenv python 的意见?另一篇文章建议对 pyenv 的 python 进行符号链接,以便 brew 可以找到它们。除了 brew 现在依赖于它自己无法管理的 python 的明显警告之外,这个想法有什么可怕的错误吗?

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

2 回答 2

4

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

1使用's Python而不是's时会brew“皱眉”吗?pyenvbrew

简而言之,是的。他们在这里列出了整个故事,简而言之,您可以自己处理出现的问题。

2 brewPython和pyenvPython会冲突吗?

不,正如蒂姆史密斯在另一个答案中所说,“如果你这样做,就不应该发生任何坏事”。使用您的 PATH 来管理您(或应用程序)看到的 Python(这就是这样pyenv做的)。

3 个具有 Python 依赖项的包,由brewPython 与“oustide”Python 一起使用pyenv

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

4 使用符号链接以便我们只使用pyenvPython?

我认为您指的是这篇文章,这是一个有趣的想法,但可能对维护很危险。Fwiw,我现在正在这样做。我在这里列出了如何做到这一点

于 2020-10-15T03:03:04.540 回答
1

澄清: Homebrew 使用系统 Python,只要它不完全改变它使用的 Python 2.7(这很常见)。如果你构建了一些东西--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 找到它们。

于 2015-08-15T04:29:40.177 回答