python と venv

モチベーション

仮想環境を立てないで python を使っていると嫌なことになります。 以前anacondaをつかって pip pip pip という感じで使っているのですが、 Heroku を使う段になって pip freeze と打ったときの衝撃はわすれられません。 様々なチュートリアルを経てきたマシンは、pipという簡単なライブラリー追加手段によって汚染されています。 とくに、自分のような初学者には毒でもあり薬でも、という具合でした。 これの何が問題かというと、デフォルトの Python 以外で動いているコードの、 どこがデフォルト以外なのか、つまりどのライブラリーを import しないと このコードが動かないのか、というのが分かりづらい点だと思います。 他の人と共有するとき、必要なライブラリーを一発で取得するためにも、 仮想環境を立てて明示的にライブラリーを管理すべきです。

導入

まず読むべきドキュメントは、仮に 3.5 を使っているならここ です。 なお venv は 3.3 で追加されたので、比較的新しい特徴になります。 また、3.5を使っていても3.6のドキュメントを一度は読むべきです。 3.5のページでは最初から pyvenvが使われていますが、3.6のページでは以下のような記述があります。

仮想環境の作成には、 venv の使用をお勧めします。

巷には Python の仮想環境の立て方が溢れかえっていますが、 多くは今後 deprecated する pyvenv です。 しかし、今後は venv が主流になること、 また 2系を特に使う予定がないことから venv を使います。 (もしかしたら apt-get install python3-venv とか必要だったかも)

venv

環境はCreating Virtual Environmentsを参考にします。

まず、仮想環境の名前を考えましょう。 例えば、今回僕はthreadingの勉強をするのでthreading-pracという名前のディレクトリで練習します。 threading-pracという名前のディレクトリで仮想環境をつくるので、 venv-threading-pracとかでしょうか。 仮想環境の名前が決まったら、開発を行うディレクトリにいって、以下のコマンドを実行します。 ./ 以下に先ほど決めた名前があることが分かると思います。 venv 以下は、「venv 以下のディレクトリの名前で仮想環境たてますよー」という指定部です。

python3 -m venv ./venv-threading-prac/

gitを使っている場合は、忘れないうちにignoreしちゃいましょう。 (これしないとgithubとかのホスティングへの嫌がらせになるかも…?)

echo /venv-threading-prac/* >> .gitignore

ここまで来たら、もう後は仮想環境を起こしたり寝かしたりするだけです。 起こし方と寝かし方は、それぞれ以下のとおりです。

source venv-threading-prac/bin/activate
deactivate venv-threading-prac

上のコマンドを実行すると、 ターミナルのプロンプト部分の左側にカッコで仮想環境の名前が出たり隠れたりします。

(venv-threading-prac)hogehoge:~/imhere$
hogehoge:~/imhere$

以上で仮想環境の立て方は終わりです。 変に立ててしまった場合は rm -rf で消してます。 これで pip を存分に明示的に使えます。

テキストからの読み込み方(pip freeze かなんかから): Requirements Files