前回はどのPythonを使うべきか書いた。
今日はPythonの仮想環境について。
Pythonの仮想環境について
単に「仮想環境」といった場合、たとえば古くはVMWareやVirtualBox、あるいはQEMU、最近だとDockerのように、ホストOSの上にゲストOSを載せ、まるで独立した環境であるかのように見せる技術のことをいうことが多い。
ただ、Pythonの仮想環境といった場合、上記とは少し違ってくる。
Pythonの仮想環境では、仮想環境ごとに独立したPythonの実行環境を用意できて、仮想環境を切り替えることで、Pythonのバージョンやインストールされたライブラリ、そのバージョンを切り替えることができる。 たとえば、仮想環境1ではPython3.6を使ってTensorFlowの1系を使用し、仮想環境2では同じPython3.6を使うけどTensorFlowを2系を使用、仮想環境3ではPython3.9を使ってTensorFlowの2系を使用するといったことができる。
なんでそんなことをするかというと、まず大前提として、Pythonは仮想環境なしだと同名のライブラリは1つのバージョンしか入れられないから。なので、あるプロジェクトではこのバージョン、別のプロジェクトでは別のバージョンといった使い分けができない。 さらに、ライブラリ間には依存関係があって、場合によっては特定のバージョンの組み合わせでしか動作しないということもある。 そこで、仮想環境を用意して、仮想環境ごとにライブラリをインストールするようにすれば、仮想環境を切り替えることで使うライブラリのバージョンを変えることができるし、依存関係の問題も最小限に抑えることができる。
まぁ、RubyのBundlerを知ってる身からすると、なんて頭が悪いデザインで無駄なディスクの使い方するんだろうというのが正直なところだけど・・・シンプルな仕組みで実現できているという意味ではいいのかもしれない。
何はともあれ、何かと厄介なライブラリ周りの問題を避けるためにも、仮想環境を使った方がいい。
どの仮想環境ライブラリを使うべきか?
さて、そこで問題になるのが、「どの仮想環境ライブラリを使うべきか?」という問題。 どのPythonを使うべきかという問題に続き「またか」ってウンザリすると思うんだけど、仕方ない。
実際、関連するライブラリがいろいろあって、pyenvとかvirtualenv、pipenvとか、Anacondaのconda、そしてそれらをどう組み合わせて使うのとか、もうカオスだった。
ただ、それも昔の話で、今はvenv一択。
- 公式のライブラリ
- 最初から入ってるのでインストール不要
- Pythonのバージョンの切り替えもインストールされたライブラリの切り替えもできる
- 扱いが簡単
venvの使い方
venvで仮想環境を作るには、使いたいバージョンのPythonでモジュールにvenv
を指定し、引数として仮想環境名を与えて実行すればいい。
たとえばPython3.9でpy39
という名前の仮想環境を作りたい場合、以下のようにする:
$ python3.9 -m venv py39
こうすると、py39
というディレクトリが作られ、その中に仮想環境に必要なファイルが置かれる。
(インストールしたライブラリなどもこの中に置かれる)
仮想環境を作っただけだとまだこの仮想環境は使われなくて、有効化(アクティベーション)することでこの仮想環境が使われるようになる。
有効化するには作った仮想環境の下にあるbin/activate
を現在のシェルで実行する。
たとえば上記の仮想環境を有効にするには、以下のようにする:
$ source py39/bin/activate
こうするとプロンプトの前に(py39)
という仮想環境名がつき、python
コマンドでPython3.9が起動するようになって、この仮想環境にインストールされたライブラリが使用されるようになる:
(py39) $ python --version Python 3.9.4
有効になっている仮想環境を無効化(デアクティベート)するには、deactivate
コマンドを実行すればいい:
(py39) $ deactivate
ちなみに、いらなくなった仮想環境はディレクトリごと削除すればいい。
仮想環境は何個用意すべき?
あとは仮想環境を何個用意すべきかという問題。 できるだけ分かれていた方が問題は起こりにくいけど、かといって何個も作ってしまうとディスク容量も食うし、散らばってしまうと厄介。
これについては、汎用的な仮想環境を1つ、そしてプロジェクトごとに専用の仮想環境を1つずつ用意するといい。
汎用的な仮想環境は、開発環境として使うJupyterLabを動かすのや、簡単なスクリプトを動かすのに使う。
一方、プロジェクトごとの仮想環境はプロジェクトのディレクトリの下に作り、そのプロジェクト専用で使う。
こうすることで、普段は気楽に使いつつ、それぞれのプロジェクトでは独立した環境で作業できるので問題が起きにくくなる。
今日の内容をまとめると、以下:
- Pythonの仮想環境を使うようにする
- 公式のvenvを使う
- 使い方は以下:
- 仮想環境を作るには
$ <使いたいバージョンのPython> -m venv <仮想環境名>
- 仮想環境を有効化するには
$ source <仮想環境のディレクトリ>/bin/activate
- 仮想環境を無効化するには
$ deactivate
- 仮想環境を作るには
- 汎用的な仮想環境を1つ、プロジェクトごとに仮想環境を1つずつ、用意するといい
今日はここまで!