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

Pythonのvenvとは何か?venvのメリットや便利さについて、実際にvenvを試しながら説明しています。venvで仮想環境を活用する事により、仮想環境毎にpipでインストールするパッケージを管理する事ができます。venvを試したい方は参考にしてみてください。

※ 本ページはプロモーションが含まれています。

動作環境

最終更新日:2022/10/3

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

$ python -V
Python 3.9.0

$ pip -V
pip 22.2.2

PCにPythonとpipがインストールされている事を前提に話をすすめていきます。
venvはPython3.3以降のバージョンであればデフォルトで入っているので使えるはずです。
また、このページではmacPC環境で試した事を書いていますが、LinuxのUbuntu20.04でも同じ事ができた事を確認しています。

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

venvとは何か?何のためにvenvを使用するのか?vnev仮想環境を使用するメリット

まずvenvとは何かですが、venvはPythonの仮想化実行環境を導入するための機能です。
Pythonの一時的な実行環境(pipのあるライブラリ・パッケージを試したい時など)を作りたい場合や、開発プロジェクトや開発ツール単位の環境を作りたい場合に、venvによる仮想環境を作成する事ができます。

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

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

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

実際にvenvでPython仮想環境を試す

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

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

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

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

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

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

仮想環境が起動した状態で、再度pipでパッケージ一覧を確認します。

(testVenv) $ pip list
Package    Version
---------- -------
pip        20.2.3
setuptools 49.2.1
WARNING: You are using pip version 20.2.3; however, version 22.2.2 is available.
You should consider upgrading via the '/Users/hogeuser/tmp/tmp/testVenv/bin/python -m pip install --upgrade pip' command.
インストールされているパッケージ一覧は同じです。

インストールされているパッケージ一覧は同じですが、pipのバージョンが古いという警告メッセージが出るようになったので、メッセージのコマンドを実行してpipをアップグレードしておきます。

(testVenv) $ /Users/hogeuser/tmp/tmp/testVenv/bin/python -m pip install --upgrade pip
〜
Successfully installed pip-22.2.2

(testVenv) $ pip list
Package    Version
---------- -------
pip        22.2.2
setuptools 49.2.1
pipが最新版にアップグレードされました!

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

(testVenv) $ pip install numpy
〜
Installing collected packages: numpy
Successfully installed numpy-1.23.3

(testVenv) $ pip list
Package    Version
---------- -------
numpy      1.23.3
pip        22.2.2
setuptools 49.2.1
numpyをインストールした後にパッケージ一覧を確認したら、numpyが追加されています。

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

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

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