Pythonの固有環境を作成するvirtualenvの機能を簡単に使えるようにするVirtualenvwrapperの紹介と, Mac OS Xでの基本的な使い方について。
Virtualenvwrapperのインストールと設定
Virtualenvwrapperのメリット
Virtualenvだけでも十分に簡単に使用できますが, wrapperを導入することで
- 各環境の管理, 切り替えが簡単になる
- 各環境に切り替えた時など特定のポイントで実行したい処理をフックとして記述できる
といったメリットがあるので, 入れる価値があると思います。Python3.x系にも対応。
インストール
pipから落とせる。各環境を管理するツールなので, wrapperそのものはグローバルにインストールする。
$ sudo pip install virtualenvwrapper
設定
インストールしただけではまだ使える状態になっていない。
ログインシェル(※1)に以下の設定を追記する。
### Virtualenvwrapper
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
fi
これは見たままで,
/usr/local/bin/virtualenvwrapper.sh があれば(=virtualenvwrapperがインストールされていれば), WORKON_HOMEを設定してvirtualenvwrapper.shを実行するようにしている。
virtualenvwrapper.shのPATHは環境にもよるので
$ which virtualenvwrapper.sh
で確認しておく。WORKON_HOMEはvirtualenvで作成した各環境が格納されているフォルダを指定する。まだ1つも作成済の環境が無い場合は上記の設定のままでよい。
(※1) .bashrc とか.bash_profile とか .profile とか。自分の場合はzshを使っているので .zshrc です。
使い方
環境の一覧を確認
もう作成済の環境がある場合はworkonコマンドで一覧を見ることができる。
$ workon
sandbox2
sandbox3
環境を作成
mkvirtualenv [環境名]で作れる。
$ mkvirtualenv --python=/usr/local/bin/python3 testdayo
Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/usr/local/Cellar/python3/3.3.2/Frameworks/ Python.framework/Versions/3.3'
New python executable in testdayo/bin/python3.3
Also creating executable in testdayo/bin/python
Installing Setuptools...done.
Installing Pip...done.
$(testdayo)
virtualenv単体で使った時と同じく, --pythonのオプションで使用するpythonを指定できる。
実行後はtestdayoという固有環境が作られて自動的にグローバルからその固有環境へ切り替えが行われる。
上記WORKON_HOMEで指定したディレクトリ内に, 仮想環境が作成されていることを確認しよう。
環境の切り替え
workon [環境名]で作成済の固有環境に切り替えることができる。また一度入った固有環境からシステム(グローバル)に抜けたい場合はdeactivateコマンドを打つ。
現状↑で作成したtestdayo環境に入っていたので, deactivateで抜けてみよう。
$(testdayo) deactivate
$
再度testdayoに切り替えてみる。
$ workon testdayo
$(testdayo)
固有環境に入っている場合はカッコで環境名が明示されるので, 分かりやすい。
環境を削除
作った仮想環境を削除するときは, いったんグローバルに抜けてrmvirtualenv [環境名]を打てば良い。
$ rmvirtualenv testdayo
Removing testdayo...
$
フック
virtualenvwrapperを使うもう1つの利点が, 上で書いたような環境の作成, 切り替え, 削除といったタイミングで特定の処理を行うような記述ができること。特定の処理を実施させるフックポイントにはpreactivate, predeactivate, postdeactivateといった様々なものがある。詳細はドキュメントを参照されたし↓
Extending Virtualenvwrapper - virtualenvwrapper
これらのフックポイントに対応したファイルが
[virtualenvwrapperのWORKON_HOMEのPATH]/[環境名]/bin/
配下にあるので, そこに実行したいシェルスクリプトを記述すると良い。たとえばある環境に切り替えた際にtest.shを実行したい, ということであれば対応するフックポイントはpostactivateであるため,
[virtualenvwrapperのWORKON_HOMEのPATH]/[環境名]/bin/postactivate
に
#!/usr/local/bin/zsh
# This hook is run after this virtualenv is activated.
source test.sh
と記述してやれば良い。1行目は自身のシェルの実行環境に合わせる( #!/bin/bash とか)こと。