Edited at

MacでのPython環境構築

More than 3 years have passed since last update.

Macのクリーンインストールを行ったので、ついでにPythonの開発環境構築について書き記しておく、


pyenvとvirtualenvのインストール

Homebrewを使用してインストールした。

$ brew install pyenv-virtualenv

インストール完了後、homebrewの指示に従って、使っているシェルの設定ファイルに以下の行を追加する(bashの場合は~/.bashrc, zshの場合は~/.zshrc)。

$ export PYENV_ROOT=/usr/local/var/pyenv

$ if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
$ if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi

保存したら設定ファイルを読み込んでおく。

$ source ~/.bashrc  # bashの場合

$ source ~/.zshrc # zshの場合


Python3のインストール

pyenv install --list とすると、インストール可能なPythonのバージョンが見れる。

今回は現時点での最新の3.5.1をインストールする。

$ pyenv install 3.5.1

しかしここでビルド失敗した。

調べてみると、Xcode command line toolsをインストールするといいみたい。というわけで下記コマンドでインストール。

$ xcode-select --install

もう一度pyenvでインストールすると、ちゃんとインストールできた。

下記のように表示されればインストール完了。

Downloading Python-3.5.1.tgz...

-> https://www.python.org/ftp/python/3.5.1/ Python-3.5.1.tgz
Installing Python-3.5.1...
Installed Python-3.5.1 to /usr/local/var/pyenv/ versions/3.5.1

念のためインストールできているか確認。

$ pyenv versions

以下の様な出力が得られて、ちゃんとインストールできたみたい。

* system (set by /usr/local/var/pyenv/version)

3.5.1

3系をメインで使いたいので、その設定もしておく。

$ pyenv global 3.5.1

$ pyenv versions
system
* 3.5.1 (set by /usr/local/var/pyenv/version)

これで変更された。左側に*が付いていれば設定完了。

(追記)

pyenv globalで3.5.1に設定したのにもかかわらず、何故かpython --versionでバージョンを見るとMac標準で付いているPythonになってしまっている。

$ python --version

Python 2.7.5

シェルの設定ファイルを再度読み込むとpyenvで設定したバージョンになる。

$ source ~/.zshrc

$ python --version
Python 3.5.1

おそらく私の環境のせいなのでしょうが、原因究明中です。

~/.zshrcに記述したif which pyenv > /dev/null; then eval "$(pyenv init -)"; fiをコメントアウトするとsource ~/.zshrcしてもPythonのバージョンが変わらないので、おそらくこの辺が怪しいのではと思っています。

(さらに追記)

解決しました。

~/.zshrcに記述した行の順番が入れ替わっていただけでした...

こんな単純なことに時間を取られてしまってショック。

こうなっていた($PYENV_ROOTの設定がeval "$(pyenv init -)"のあとに来ていた)。

$ if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

$ export PYENV_ROOT=/usr/local/var/pyenv
$ if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi

これの1行目と2行目を入れ替えて解決。

$ export PYENV_ROOT=/usr/local/var/pyenv

$ if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
$ if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi

こんなミスする人はめったにいないと思いますが、もしいた時のために書き記しておきました。


virtualenvによる仮想環境の作成

pyenv virtualenv [version] [name]とすることでPythonのバージョンがversionnameという名前の仮想環境ができる。

$ pyenv virtualenv 3.5.1 test_351

これでtest_351という名前の仮想環境が作成された。

pyenv versionsで確認できる。

$ pyenv versions

system
* 3.5.1 (set by /usr/local/var/pyenv/version)
3.5.1/envs/test_351
test_351

あとは開発に使うフォルダに行って、先ほど作成した仮想環境をセットすれば良い。

$ cd dev

$ pyenv local test_351

こうすることで、これからはdevフォルダに行くと自動的にtest_351の環境になる。

仮想環境を削除したいときは下記で。

$ pyenv uninstall [name]


最後に

wheelっていうのを使えばもっと便利になるみたいだけど、それはまた今度にします。