Pythonでプログラムを書こうと思ったときにお世話になるpyenv
。
巷にはいろいろとインストール方法が溢れているが、High Sierra (だからかどうかわからないが)に導入しようとしたところ少し躓いたのでメモ。
まずはHomebrewでインストール
なんだかんだ便利なので、Homebrewを利用してサクッとインストール。
$ brew install pyenv
pyenvのパスを通す
pyenv
コマンドを使えるようにする。
.bash_profile
, .bashrc
, .zshrc
なんでもいいけど、使用しているシェルの設定ファイルに以下を記述。
$ export PYENV_ROOT=$HOME/.pyenv
もしくは、
$ export PYENV_ROOT=/usr/local/var/pyenv
pyenvでインストールされる様々なバージョンのpythonが保存される場所です。まぁ、お好きな方で。
これでpyenv
コマンドが認識されるようになります。
$ pyenv -v
pyenv 1.2.7
いちおうやっとこうrehash
pyenvのhelpに書いてあるし、いちおうやっとく。
$ pyenv --help
Some useful pyenv commands are:
...
rehash Rehash pyenv shims (run this after installing executables)
$ pyenv rehash
好きなPythonバージョンをインストール
いよいよPythonのインストール。
はやる気持ちを抑えて、インストール可能なバージョンを確認してみる。
$ pyenv install --list
...
3.6.6
3.7.0
3.7-dev
3.8-dev
...
上記はごく一部です。
今回は3.7.0をインストールしてみる。
$ pyenv install 3.7.0
自前でビルドも行うため、少し待ちます。
以下でインストール済バージョンを確認。
$ pyenv versions
* system
2.7.15
3.7.0 (set by /usr/local/var/pyenv/version)
上記の意味するところは、
- このPCにインストールされているのは、system
(macに元から入ってるやつ),3.6.6
,3.7.0
- (2.7.15は比較のために入れときました)
- 今はsystem
が選択されてるよ
ちなみに、現在選択中のバージョンだけを表示するには、
$ pyenv version
system (set by /usr/local/var/pyenv/version)
利用するPythonバージョンを指定
2つの指定の仕方があります。
global
デフォルト指定。基本的にこのバージョンが使われる。
$ pyenv global 3.7.0
local
特定のディレクトリ内のみこのバージョンで!という時に使う。
$ pyenv local 2.7.15
このコマンドを実行したディレクトリでは2.7.15
が利用される。
Pythonを動かしてみよう
わくわく。
$ python --version
Python 2.7.10
あれ?
local指定外のディレクトリでコマンドを実行したため、3.7.0
でないとおかしい。
2.7.0
ってなんや?そんなのインストールしてない!
実は、system
が2.7.0
です。
いやでも、何にせよ3.7.0
じゃないと。。
答えはshimsにあり
先にPYENV_ROOT
で指定したインストール済Python置き場を見てみると、shims
というディレクトリがあります。
ここには、pyenv global
などで切り替えたバージョンの各種python
実行ファイルたちが用意されています。
$ $PYENV_ROOT/shims/python --version
Python 2.7.10
$ pyenv global 3.7.0
$ $PYENV_ROOT/shims/python --version
Python 3.7.0
$ pyenv global 2.7.15
$ $PYENV_ROOT/shims/python --version
Python 2.7.15
shimsをパスに通してあげる
ということで、shimsディレクトリのパスを通してあげることで、pythonがうまいこと動くようになりました。
export PYTHON_PATH=$PYENV_ROOT/shims
export PATH=$PYTHON_PATH:$PATH
$ pyenv global system
$ python --version
Python 2.7.10
$ pyenv global 3.7.0
$ python --version
Python 3.7.0
$ pyenv global 2.7.15
$ python --version
Python 2.7.15