Python: pyenv に乗り換えた
これまで複数バージョンの Python を管理するのには pythonz を使っていたんだけど、プロキシ環境で上手く動かないってのもあって pyenv に乗り換えた。 その際の手順などをメモっておく。 OS X なら Homebrew を使ってインストールできる。
$ brew install pyenv $ pyenv --version pyenv 20150601
インストールしたら pyenv の使うディレクトリにパスを通すための設定をシェルに入れる。 .zlogin になっているところは使っているシェルの設定ファイルにする。
$ echo 'if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi' >> ~/.zlogin $ source ~/.zlogin
pyenv を使ってインストールできるバージョンは install サブコマンドに --list オプションを渡すと見られる。
$ pyenv install --list
試しにバージョン 3.3.6 を入れてみる。
$ pyenv install 3.3.6 $ which python3.3 /Users/amedama/.pyenv/shims/python3.3
それじゃ早速インタプリタを起動してみますかー、と思ったらエラー。
$ python3.3 pyenv: python3.3: command not found The `python3.3' command exists in these Python versions: 3.3.6
どうやらマイナーバージョンの入った名前で起動するには pyenv global コマンドで使うバージョンを指定してやる必要があるらしい。
$ pyenv global 3.3.6 $ python3.3 --version Python 3.3.6
よしよし、と思いきやこれだけではデフォルトの python コマンドが使うバージョンがさっき指定したそれに書き換わってしまう。
$ python --version Python 3.3.6
この場合、pyenv global コマンドで複数のバージョンを並べる必要があるみたいだ。 system はシステムにインストールされている (つまり pyenv で管理されていない) Python という意味になる。
$ pyenv global system 3.3.6
これで python ではシステムのバージョンが使われつつ python3.3 と打てば先ほどインストールされたバージョンが使われるようになった。
$ python --version Python 2.7.6 $ python3.3 --version Python 3.3.6
ちなみに、この pyenv global の設定は ~/.pyenv/version というファイルに書かれているようだ。
$ pyenv version system (set by /Users/amedama/.pyenv/version) 3.3.6 (set by /Users/amedama/.pyenv/version)
表示してみると先ほど打ち込んだ内容がそのまま入っているだけっぽい。
$ cat ~/.pyenv/version system 3.3.6
ってことは、毎回インストールした後に pyenv global コマンドを叩かなくても設定ファイルに直接書き出してやるだけで良いってこと? 実際に試してみよう。
$ pyenv install 3.4.3 $ echo 3.4.3 >> ~/.pyenv/version
上手くいった。
$ python3.4 --version Python 3.4.3
ただ、これだとメジャーバージョンを指定してインタプリタを起動する際の優先順位が、ファイルの中で先に見つかったものになるようだ。
$ python3 --version Python 3.3.6
つまり、優先してほしいものについては先に書いてあるように並び替えが必要になる。
$ cat << EOF > ~/.pyenv/version system 3.4.3 3.3.6 EOF
ばっちり。
$ python3 --version Python 3.4.3
あとはインストールされたインタプリタを使って仮想環境を作ったり好きにすればいい。
$ mkvirtualenv sample -p `which python3.4` (sample) $ python --version Python 3.4.3
pyenv には他にも色々とプラグインがあるみたいだけど、とりあえず必要としていた機能は標準で揃っていそう。 めでたしめでたし。 2015/06/16 追記: Homebrew で pyenv を入れてインストールした Python にパスを通すと、そのままでは brew doctor コマンドで以下のように怒られるっぽい。
$ brew doctor Please note that these warnings are just used to help the Homebrew maintainers with debugging if you file an issue. If everything you use Homebrew for is working fine: please don't worry and just ignore them. Thanks! Warning: "config" scripts exist outside your system or Homebrew directories. `./configure` scripts often look for *-config scripts to determine if software packages are installed, and what additional flags to use when compiling and linking. Having additional scripts in your path can confuse software installed via Homebrew if the config script overrides a system or Homebrew provided script of the same name. We found the following "config" scripts: /Users/amedama/.pyenv/shims/python-config /Users/amedama/.pyenv/shims/python2.6-config /Users/amedama/.pyenv/shims/python3-config /Users/amedama/.pyenv/shims/python3.3-config /Users/amedama/.pyenv/shims/python3.3m-config /Users/amedama/.pyenv/shims/python3.4-config /Users/amedama/.pyenv/shims/python3.4m-config
この問題を回避するには次のようにして brew コマンドの実行時だけパスから pyenv のディレクトリを抜くと良いみたい。
$ echo 'alias brew="env PATH=${PATH/${HOME}\/\.pyenv\/shims:/} brew"' >> ~/.zlogin
この問題は rbenv とか phpenv でも出てるみたいでぐぐったら上記の解法が見つかった。 ありがたい。













