venvでPythonの仮想環境を試してみる

Pythonの仮想環境を作れるvenvについて、実際にvenvの使いながら説明しています。venvを使用すれば、pipでインストールするパッケージを、Pythonの仮想環境毎に管理する事ができます。

目的と動作環境

最終更新日:2021/5/4

ここでは、Pythonのvenvとは何か?また、実際にvenvの使い方について説明していきます。

■動作環境やバージョン情報です。
OS:macOS Big Sur(バージョン11.2.3)
シェル:bash

$ python -V
Python 3.9.0

$ pip -V
pip 21.1.1

PCにPythonとpipがインストールされている事が前提で、話をすすめていきます。
venvはPython3.3以降のバージョンであればデフォルトで入っているので使えるはずです。

pyenv + Pythonの最新バージョンの環境作成については別ページで説明していますので、pyenvを試してみたい方はそちらも参考にしてみてください。
(macOS)pyenvとPython3.9をインストールする
(Ubuntu)Python3.9.1とpyenvをインストールする(Vagrant)

このページではmacPCでやった事を書いていますが、Ubuntu20.04でも同じようにvenvを使えた事を確認しています。

venvとは何か?何のためにvenvを使用するのか?

まずvenvとは何かですが、venvはPythonの仮想化実行環境を導入するための機能です。
Pythonの一時的な実行環境を作りたい場合や、開発プロジェクトや開発ツール単位で、venvによる仮想環境を作成して使う事ができます。

Pythonでは様々なパッケージ(ライブラリ)を使用するために、pipというパッケージ管理ツールを使いますが、pipを使ってあるパッケージをインストールする場合、そのパッケージのバージョンが固定されてしまうと、各パッケージのバージョンの依存関係が問題になる事があります。

例えば、venvを使わずにpipで"A"というパッケージのバージョン1.0をインストールして使っていました。
けどその後に別の開発で、"A"というパッケージのバージョン1.1を使わないといけない場面が出てきて、パッケージ"A"のバージョンを1.1に上げたら、元々パッケージ"A"のバージョン1.0を使っていた機能が動作しなくなってしまったという面倒な事になります。

venvを使用すれば、ケース毎に実行の仮想環境を作ってパッケージ管理ができるので、こういった問題を解決できます。

実際にvenvを使ってみる

実際にvenvを使っていきます。まずはpipで現状のパッケージ一覧の確認です。

$ pip list
Package    Version
---------- -------
pip        21.1.1
setuptools 49.2.1
私の環境では、pipとsetuptoolsしか入っていない状況です。

適当なディレクトリで、以下の”python -m venv (仮想環境のディレクトリ)”コマンドを実行して、Pythonの仮想環境を作ります。

$ python -m venv testProject
作成されたtestProjectディレクトリの一覧です。
$ ls testProject/
bin        include    lib        pyvenv.cfg

次に作成した仮想環境を起動します。起動するには、sourceコマンドでbinディレクトリのactivateを実行します。

$ source testProject/bin/activate
(testProject) $ 
仮想環境が起動されると、プロンプトの前に"(仮想環境のディレクトリ名)"が表示されます。

仮想環境が起動したので、pipで何か適当なパッケージをインストールします。
ここでは、試しにnumpyをインストールしてみます。

(testProject) $ pip install numpy
〜
Installing collected packages: numpy
Successfully installed numpy-1.20.2

(testProject) $ pip list
Package    Version
---------- -------
numpy      1.20.2
pip        21.1.1
setuptools 49.2.1
numpyをインストールした後に、"pip list"でパッケージ一覧を確認したら、ちゃんとnumpyが追加されていました。

ここで仮想環境を終了します。終了するには、deactivateコマンドを実行します。

(testProject) $ deactivate
$ 
仮想環境が終了したため、プロンプトの前の"(仮想環境のディレクトリ名)"の表示も消えました。
元の状態に戻ったので、再度"pip list"でパッケージ一覧を確認します。
$ pip list
Package    Version
---------- -------
pip        21.1.1
setuptools 49.2.1
仮想環境上でインストールしたnumpyは存在しません。これは仮想環境毎にパッケージ管理が独立しているからです。

以上簡単でしたが、vnevの使い方について説明しました。venvを使えば仮想環境毎にpipでパッケージ管理ができる事がわかって頂けたと思います。