virtualenvの導入

複数のPythonの環境で開発するために、Pythonではvirtualenvというパッケージが用意されています。


ただ、このvirtualenv、ちょこっと調べた程度では私には今一理解できなかったので、環境を導入するのと同時に、今まで私がやっていた原始的なPythonのバージョンの使い分けとの違いをもう一度整理してみたところ、私自身の大きな勘違いに気が付きました。


virtualenvはPythonのヴァージョン使い分け環境ではない。


これまでずっとvirtualenvを必要と感じなかったのも、こんな勘違いからでした。
python2.6を使いたければ、pythonとたたけばいいし、python2.5ならpython2.5、python2.7ならpython2.7、python3.2ならpython3.2、で別に問題ない、と。


virtualenv環境を使うともう少しだけ広い使い方ができます。
(正直、導入して実際に色々検証してみるまで理解できなかった情弱です。。。)


virtualenvを使うことで、こんな使い方を一つのOS上で切り替えて使うことができます。
通常通り、pipやaptで入れたパッケージ全てが動くグローバル環境
python2.6 + Django1.1だけが動く仮想環境
python2.6 + Django0.9 + mysql-pythonだけが動く仮想環境
python2.5 + Django1.1だけが動く仮想環境
python2.5 + Django0.9 + mysql-pythonだけが動く仮想環境
などなど。。。



◎つまり、
virtualenvを使わず、複数のPythonのヴァージョンが入っている状態がこんな感じで、

virtualenvを使うと、さらにそれぞれのPythonのヴァージョンで、(オプション指定によって)virtualenvを使わないグローバル環境で導入済みのパッケージを使ったり、全く使わずvirtualenv環境の中でのみ別にパッケージが導入してグローバル環境に依存しないPythonを導入した状態で開発ができるようになります。


なかなか言葉にする説明しづらくて、自分でも導入から仮想環境の構築をして始めて理解できたので、そのうちハンズオンなどで説明したいと思います。



Ubuntu10.04の時の注意点
Ubuntu10.04ではPython標準でないパッケージをdist-packagesにインストールしてしまいますが、virtualenv環境内ではsite-packagesにパッケージがインストールされます。virtualevn環境で--no-site-packagesなしで起動したのにグローバル環境にあるパッケージが使えない時は無理やり(?)シンボリックリンクでも貼ってdist-packages内を見に行けるようにしないといけません。