python – MacOSX Yosemite上Homebrew和pyenv的共存

关于Homebrew和pyenv在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包)?似乎brew使用了PATH中最先出现的python(目前pyenv的版本对我来说)?但是,在下面的每一种情况下,垫片都是“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’s pythons来酿造是一个坏主意,那么我是否还要安装自己的python和python3的版本,或者这会发生冲突并以某种方式引起问题?我的选择似乎是使用我的Mac上安装的系统python,或者使用brew自己的pythons来满足我所有的酿造需求.在第一种情况下,我可以确保在任何酿造之前调用“pyenv shell system”,或者设置一些别名来自动执行此操作,如其他人所建议的那样(别名brew =“env PATH = ${PATH // $(pyenv root) / shims:/} brew“).但是,这意味着我必须使用相当过时的系统python.如果相反我也使用brew来安装python2和python3,这会与使用pyenv以任何方式安装的版本冲突,或者brew的pythons幸福地与pyenv完全分开(我认为这是真的,但是我想在之前仔细检查我试试吧)?这会给我一个设置,我所有的酿造使用brew的python或python3(我假设我仍然需要一个如上所述的别名,以确保在我的PATH中找不到pyenv的版本),而brew之外的其他所有内容都将使用pyenv’sPython?出于任何原因,这是一个坏主意吗?

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将链接brew的python3(带有上面的别名).如果是这样,当从运行pyenv版本的python会话调用时,boost-python甚至可以使用(不确定这是否更适合作为关于boost-python本身的问题),还是这样完全没问题?

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

???关于brew的符号链接指向pyenv python的观点?另一篇文章建议对pyenv’s pythons进行符号化,以便brew能够找到它们.除了明显的警告,现在酿造依赖于它本身不能管理的python,这个想法有什么可怕的错误吗?

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

解决方法:

澄清: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 pythons符号化到/usr/local应该不会受到伤害,但除了把它们放在$PATH中之外什么都不做;它不会帮助Homebrew找到它们.

上一篇:python – Pyenv没有自动激活


下一篇:python 虚拟环境 pyenv