検索
連載

[解決!Python]venvモジュールで作成した仮想環境のPythonをバージョンアップするには解決!Python

venvモジュールの--upgradeオプションと--clearオプションを使って、既存の仮想環境で使用するPythonのバージョンをアップグレードする方法を紹介する。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「解決!Python」のインデックス

連載目次

コマンド 説明
python -m venv --upgrade 仮想環境ディレクトリ 既存の環境を維持したままPythonをアップグレードする
python -m venv --clear 仮想環境ディレクトリ 既存の環境を削除してからPythonを入れ替える
仮想環境で使用するPythonをアップグレードする

--upgradeオプション

 venvモジュールには--upgradeオプションがある。既存の仮想環境ディレクトリ(ここではvenvとする)に対して、「python -m venv --upgrade venv」のようにこのオプションを指定すると、「その仮想環境で使われるPythonのバージョン」を「venvモジュールを実行しているPythonのバージョン」へとアップグレードできる。

 例えば、以下はPython 3.10で仮想環境を作成した後に、その環境のPython処理系をバージョン3.11にアップグレードする例だ(Windows/PowerShell環境なのでpyコマンドに使用するPythonバージョンを指定している点に注意。他の環境の方は適宜読み替えていただきたい)。

仮想環境のアップグレード
仮想環境のアップグレード

 最初に「py -3.10 -m venv venv」コマンドを実行してPython 3.10の仮想環境(venv)を構築している。次にこの環境を有効化して、「python --version」コマンドでPythonのバージョンを確認する。そして、urllib3パッケージをインストールした後に(後述)、仮想環境を無効化している。続いて、「py -3.11 -m venv --upgrade venv」コマンドを実行して、この仮想環境のPythonバージョンを3.11へとアップグレードし、実際にvenv仮想環境のアップグレードができているかを確認している。

 --upgradeオプションはインプレースでPythonのバージョンをアップグレードする。つまり、その環境にインストールされているパッケージはそのまま維持される(パッケージがそのバージョンのPythonをサポートしているかの問題が発生するかもしれない)。

 そのため、アップグレード後のvenv仮想環境で「pip list」コマンドを実行すると、先ほどインストールしたurllib3パッケージがそのまま残っていることが確認できる。

--upgradeオプションではインストールしたパッケージは維持される
--upgradeオプションではインストールしたパッケージは維持される

 また、筆者が試したところではmacOS環境ではアップグレード時にシンボリックリンクの置き換えが行われず、アップグレード後の環境でもpythonコマンドで以前の処理系が起動してしまう状況になった。これが筆者の環境に固有の問題かはハッキリとしないが、環境によってはシンボリックリンクを適切に置き換える必要があるかもしれない。

アップグレードしたのに以前のバージョンのPythonが起動された
アップグレードしたのに以前のバージョンのPythonが起動された
2つ目の「python --version」コマンドに注目すると、起動されたPythonのバージョンが3.10であることが分かる。その下のlsコマンドの実行結果を見ると、pythonコマンドがpython3.10にリンクされていることが確認できる。

 上の画像を見ると、pythonとpython3の2つがどちらもpython3.10へのシンボリックリンクになっていることが分かる。このため、単にpythonやpython3とすると、Python 3.10の処理系が起動されていた。

 シンボリックリンクを置き換えるには、仮想環境のbinディレクトリにあるpythonとpython3の2つのファイルを削除した上で「ln -s python3.11 python」「ln -s python3.11 python3」などとすればよい。

--clearオプション

 venvの--clearオプションは指定したディレクトリの中で既に仮想環境が構築されている場合、それをクリア(削除)してから仮想環境を構築するものだ。

 以下に例を示す。ここでも最初の例と同様に、Python 3.10環境を構築、有効化とバージョン確認、urllib3パッケージをインストール、環境の無効化、Python 3.11環境を--clearオプション付きで実行したものだ(Windows/PowerShell環境)。

--clearオプション付きでPythonバージョンを入れ替え
--clearオプション付きでPythonバージョンを入れ替え

 既に述べた通り、--clearオプションでは既存の環境はクリアされる。そのため、以前にインストールしたパッケージなども仮想環境ディレクトリから削除されてしまう。上の画像ではurllib3パッケージをインストールしているが、--clearオプション付きで同じディレクトリに仮想環境を作成し、「pip list」コマンドを実行した結果が以下だ。

先ほどインストールしたurllib3パッケージがなくなっている
先ほどインストールしたurllib3パッケージがなくなっている

 このため、--clearオプション付きで仮想環境を入れ替えるときには、その前に「pip freeze」コマンドなどを実行して、インストールされているパッケージを一覧するファイル(requirements.txtなど)を作成しておくのがよいだろう。

「解決!Python」のインデックス

解決!Python

Copyright© Digital Advantage Corp. All Rights Reserved.

[an error occurred while processing this directive]
ページトップに戻る