ずっとPython2.7を愛用してきたが,人からもらった言語処理系のスクリプトがPython3を使用していたので,これを機に3.X系に乗り変えようとした.
乗り換える前に2.X系と3.X系の違いを調べてみると,どうも思っていたのと違う.
結局どっち使い続けるのがいいのだろ?と思い,いろいろと漁ってみると公式サイトに,「どのバージョンを使うかは,何をしたいかにほぼ依存する」といった記述があった笑.
そこで,ぼくも食わず嫌いしていたpyenvを使ってみることにした.
そんなこんなで,先駆者達の知恵を拝借し,自分の環境にpyenv-virtualenvを導入した時のメモを残しておく.
pyenvとvirtualenv
- pyenv
- Pythonのバージョン切り替えに使用
- 基本的にPythonのバージョンごとに管理
- 同一バージョンで複数のPython環境を管理不可能(パッケージが混在する)
- 数値計算用のpython2.7.10と自然言語処理用のpython2.7.10にはならずpython2.7.10として数値計算ようのパッケージと自然言語処理用のパッケージが混在
- virtualenv
- 仮想環境の構築に使用
- 基本的にディレクトリ単位でpythonのバージョン,パッケージを管理
- 数値計算用のpython2.7.10と自然言語処理用のpython2.7.10分けて使用可能
環境
- Mac Yosemite OS X 10.10.5
- Homebrew 0.9.5 (git revision 2134d3; last commit 2015-11-26)
インストール
Homebrewを使ってpyenvとpyenv-virtualenvをインストールする.
Homebrewのインストールはこちらから.
# pyenvのインストール
$ brew install pyenv
# pyenv-virtualenvのインストール
$ brew install pyenv-virtualenv
インストールが終わったら.bash_profileに下記を追加する.
$ vim ~/.bash_profile
## Set path for pyenv
export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
export PATH=${PYENV_ROOT}/bin:$PATH
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
fi
設定を反映させるためにターミナルを再起動させるか,下記コマンドを打つ.
$ source ~/.bash_profile
pyenvによるpython3のインストール
まずは現行のpythonのバージョンを確認
$ python -V
Python 2.7.10
冒頭でも述べたが,目的に合わせてインストールするのが良いそう.
今回は,参考資料と同様に3.4.3をインストールしてみる.
# 適当にフォルダを作って移動
$ mkdir ~/work/pyenv_test
$ cd ~/work/pyenv_test
# python3.4.3のインストール
pyenv_test $ pyenv install 3.4.3
Downloading Python-3.4.3.tgz...
-> https://yyuu.github.io/pythons/4281ff86778db65892c05151d5de738d
Installing Python-3.4.3...
Installed Python-3.4.3 to /Users/XXXX/.pyenv/versions/3.4.3
# python3.4.3が導入されたか確認
pyenv_test $ pyenv versions
* system (set by /Users/XXXX/.pyenv/version)
3.4.3
pyenv_test $ ls ~/.pyenv/versions
3.4.3
pyenvによるpythonのversion設定
このままだと,元から入っているpythonのバージョンが反映されている
$ pwd
/Users/XXXX/work/pyenv_test
$ python -V
Python 2.7.10
そこで,pyenv local NAME
を使ってpyenvにダウンロードしたpythonのバージョンを反映する.
$ pwd
/Users/XXXX/work/pyenv_test
$ pyenv local 3.4.3
$ pyenv versions
system
* 3.4.3 (set by /Users/XXXX/work/pyenv_test/.python-version)
これでpyenv_testディレクトリにpyenvでインストールしたpython3.4.3が反映できた.
pyenv-virtualenvによる仮想環境構築
pyenv-virtualenvでは,インストールするパッケージを隔離する環境を作る.
pyenv_test $ pwd
/Users/XXXX/work/pyenv_test
# 上記のような環境を構築したいディレクトリ下で下記コマンドを実行
pyenv_test $ pyenv virtualenv 3.4.3 test
pyenv_test $ pyenv local test
pyenv-virtualenv: activate test
(test)$ # <- 設定したpyenv-virtualenvが()内に表示される
(test)$ pyenv versions
system
3.4.3
* test (set by /Users/XXXX/work/pyenv_test/.python-version)
これで,このディレクトリに移ってくるたびに,構築したtest環境が自動的に使用される.
パッケージのインストール
pipを使ってパッケージを管理する.
pipはpyenv install NAME
した時に同時にインストールされている.
今は何もしていないので,wheelだけが入っている.
(test) pyenv_test $ pip freeze
wheel==0.26.0
個人的によく使うパッケージをインストールする.
pip install numpy
pip install scipy
pip install pandas
pip install scikit-learn
pip install nltk
pip install matplotlib
pip install seaborn
pip install ipython
pip install jupyter
人によっては,matplotlibやjupyterなどでエラーが出るみたいだが,特にエラーもなくインストールが完了.
インストールしたパッケージの保存
インストールしたパッケージはリストで保存しておける.
別プロジェクトに同じパッケージをインストールするときに楽できるのでメモ.
# インストールしてあるパッケージをリストにするコマンド
$ pip freeze > mypckg.list
# リストにしたパッケージをインストールするコマンド
$ pip install -r mypckg.list
構築した環境の削除
構築した環境はpyenv uninstall NAME
で削除可能.
この削除方法は,local指定した際に生成される環境名が書かれた.python-versionというファイルは削除されない.
(test) pyenv_test $ pyenv versions
system
3.4.3
* test (set by /Users/XXXX/work/pyenv_test/.python-version)
(test) pyenv_test $ pyenv uninstall 3.4.3
(test) pyenv_test $ pyenv uninstall test
pyenv: remove /Users/XXXX/.pyenv/versions/test? [[yを入力]]
pyenv-virtualenv: deactivate test
pyenv: version `test' is not installed (set by /Users/XXXX/work/pyenv_test/.python-version)
pyenv_test $ # <- ()がなくなる
pyenv_test $ pyenv versions
system
まとめ
次回以降に環境を構築する場合,下記流れに沿って構築を行う.
# pythonのインストール
$ pyenv install 3.4.3
# 環境構築
$ pyenv virtualenv 3.4.3 NAME
# 環境選択
$ pyenv local NAME
(NAME)$ pyenv versions
system
3.4.3
* NAME (set by /Users/XXXX/work/pyenv_test/.python-version)
# パッケージのインストール
(NAME)$ pip install -r mypckg.list
# 構築した環境を削除する場合
(NAME)$ pyenv uninstall NAME