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 を使用している場合、brew のパッケージは brew 以外の何かに依存してビルドされるため、これは眉をひそめていると思います (たとえば、pyenv を使用して python バージョンをアンインストールすると、brew されたパッケージが壊れる可能性があります)。brew は、PATH で最初に来る python を使用しているようです (現在、私にとっては pyenv のバージョン)。ただし、以下の各ケースでは、シムは「python3」ではなく「python」用です (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 の pythons を使用して醸造するのが悪い考えである場合、醸造されたバージョンの python と python3 もインストールする必要がありますか、それともこれが競合して何らかの問題を引き起こすのでしょうか?私のオプションは、私の Mac にインストールされたシステム python を使用するか、醸造のすべてのニーズに合わせてbrew 独自の python を使用するかのいずれかです。最初のケースでは、醸造の前に必ず「pyenv shell system」を呼び出すか、他の人が提案したようにこれを自動化するためにいくつかのエイリアスを設定することができました (alias brew="env PATH=${PATH//$(pyenv root) /shims:/} brew")。ただし、これはかなり時代遅れのシステム python を使用する必要があることを意味します。代わりに、brew を使用して python2 と python3 をインストールする場合、pyenv を使用してインストールされたバージョンと競合するか、brew の python は pyenv とは完全に分離されて幸せに暮らします (これは本当だと思います。試す前に再確認したいのですが)?これにより、すべての醸造で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

??? たとえば、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

??? pyenv pythonを指すbrewのシンボリックリンクに関する意見はありますか? 別の投稿では、brew がそれらを見つけられるように、pyenv の python をシンボリック リンクすることを提案しました。brew は現在、それ自体が管理していない python に依存しているという明らかな警告に加えて、この考えに何かひどく間違っていることはありますか?

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

2 に答える 2

1

明確化: Homebrew は、使用する Python 2.7 に違いがない場合はいつでもシステム Python を使用します (これはかなり一般的です)。何かをビルドすると、その Python が Python 2.7の場合--with-python、PATH の最初の Python が使用されます。それ以外の場合、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 に答える