機械学習アルゴリズムの研究をする際に複数バージョンのPythonを切り替えたり、動かすプログラムによってパッケージバージョンを変更したりと管理する手間が結構かかります。理由としては以下のような事が挙げられると思います。
- Pythonはバージョン2とバージョン3で互換性が無い
- ライブラリのバージョンアップが頻繁
- ライブラリ相互の依存関係がある
- ドライバ等の実行環境に依存するライブラリが存在する
Pythonにはこれらの問題を解決するための便利なツールも用意されています。今回pyenvとpipenvでかなり使いやすい環境が構築できたので記事にまとめておきたいと思います。
実験環境
ubuntu 18.04 LTS
(ディフォルトでpython2とpipがインストールされている事を想定)
手順
- pyenvインストール
- pipenvインストール
- 仮想環境作成とパッケージインストール
- 仮想環境への切り替え
pyenvインストール
$ git clone https://github.com/yyuu/pyenv.git $HOME/.pyenv
これによってpyenvの必要環境がユーザーフォームの直下に”.pyenv”というディレクトリ名で作成されます。この中に必要な実行コマンドのファイルがあるのですが、それを実行するために環境変数を変更する必要があります。
個人的には $HOME/.pyenvrcというファイルを作成して、以下を記述しています。
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
その上で、.bashrcや.zshrcなどで以下のように記述して読み込んでいます。
# for pyenv
source $HOME/.pyenvrc
pipenvインストール
$ python -m pip install pipenv
この手順ではpyenvでインストールされるpythonではなく、もともとのpython2環境にpipenvをインストールしています。複数環境の切り替えを行うようになると、どの環境にどのパッケージがインストールされているか見失いがちです。混乱しないようにするためにも、pipenvは初期インストールされているpython環境にインストールするようにしています。
仮想環境作成とパッケージインストール
プログラムを実行する場所でこの操作を行う事で、PipfileとPipfile.lockができます。これらをプログラムと一緒にバージョン管理する事で、グループワークでも環境の共有化が簡単に行えます。
$ python -m pipenv --python バージョン('3.7'など)
$ python -m pipenv install ライブラリ名 ←これを繰り返す
パッケージインストールの時にtensorflowのような大きなパッケージだとLocking…という表示が長時間続くことがありますが、ネットワークトラブルなどがなければ待っていれば終わるはず…です。ただ、結構トラブルに会う人が多いようで、トラブルシュートの記事も多く見られますね。
ちなみにpipenvでインストールすると中々見た目に可愛い感じのアニメーションがされて良いですね。

仮想環境への切り替え
$ python -m pipenv shell
シェルのプロンプト先頭に識別名が追加されて、仮想環境に切り替わった事がわかります。試しに python -V などとするとpyenvでインストールされたバージョンが起動する事が分かります。また pip list とすると、pipenvで構築したパッケージ郡が表示されるはずです。
既に作成されたPipfile、Pipfile.lockがある場合
すでにリポジトリにコミットされているPipfileやPipfile.lockを用いて環境を再構築する場合は、pipenvインストールまでを行ったあとPipfileとPipfile.lockがあるディレクトリ以下を実行するだけで良いです。
$ python -m pipenv install
その後は仮想環境への切り替えを行う事で、環境再現できます。グループワークには非常に便利ですね〜。