第12章 仮想環境とパッケージ(40問中1問)
Python3基礎試験:venvとpipの使い方
第12章は、仮想環境を作る python -m venv と、パッケージを管理する pip のコマンドが中心です。このページでは、公式チュートリアルの記載と、作ったばかりの仮想環境で Python 3.9.6 を実行した結果を並べて確かめます。覚えるのは、venv で環境を分ける、activate で切り替える、pip freeze の結果を requirements.txt に保存して install -r で再現する、の3つです。
このページは試験の学習用の整理です。公式の問題は転載せず、コマンドは公式チュートリアルの例をもとにしています。
この記事の目次
公式情報の確認
試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。 当サイトの一次情報確認日: 2026-09-18。
試験の出題範囲・実施要項は変動するため、受験前に公式情報を確認してください。
結論
- 仮想環境は、特定のバージョンの Python といくつかの追加パッケージを含む、自己完結したディレクトリ構造。アプリケーションごとに分けると、パッケージの版の衝突を避けられる
- 作成は python -m venv ディレクトリ名。ディレクトリ名には .venv がよく使われる
- 有効化は Unix・macOS が source tutorial-env/bin/activate、Windows が tutorial-env\Scripts\activate。終了は deactivate
- pip は install・uninstall・show・list・freeze を使い分ける。版の指定は パッケージ名==版番号、更新は --upgrade
- pip freeze の出力を requirements.txt に保存し、別の環境で python -m pip install -r requirements.txt を実行すると同じ版をそろえられる
仮想環境が必要になる理由
公式チュートリアルによると、Python のアプリケーションは標準ライブラリに含まれないパッケージやモジュールをよく使い、特定のバージョンのライブラリが必要になることがあります。そのため、1つの Python 環境ですべてのアプリケーションの要求を満たせるとは限りません。
たとえばアプリケーション A があるモジュールの版 1.0 を、アプリケーション B が版 2.0 を必要とすると、どちらを入れても片方は動きません。公式チュートリアルは、A 専用の仮想環境に版 1.0、B 用の仮想環境に版 2.0 を入れれば衝突を解決でき、B のために版 3.0 へ更新しても A の環境には影響しないと説明しています。仮想環境は、アプリケーションごとにパッケージの版を閉じ込める仕組みです。
作成・有効化・無効化
仮想環境の作成と管理には venv モジュールを使います。公式チュートリアルによると、venv はコマンドを実行した Python のバージョンをインストールします。バージョンは --version オプションで確認でき、python3.12 でコマンドを実行すれば版 3.12 が入ります。
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
(.venv) $ python -m pip list
(.venv) $ deactivatePython 3.9.6 で python -m venv .venv を実行すると、.venv の中に bin・include・lib の3つのディレクトリと pyvenv.cfg ができました。bin には activate・activate.csh・activate.fish・python・pip などが入っていました。pyvenv.cfg には、元の Python の場所(home)、version = 3.9.6、include-system-site-packages = false が書かれていました。
仮想環境の中の Python で sys.prefix と sys.base_prefix を表示すると、sys.prefix は .venv のパス、sys.base_prefix は元の Python のパスでした。sys.prefix != sys.base_prefix は True になり、sys.path に含まれる site-packages も .venv の中の lib/python3.9/site-packages だけでした。パッケージは仮想環境の中に入ります。仮想環境の Python は、元の Python とは別の場所のパッケージを見ます。
公式チュートリアルによると、仮想環境のディレクトリには .venv という名前がよく使われます。用途が分かり、通常はシェルで非表示になるため邪魔にならず、一部のツールが使う環境変数定義ファイル .env との名前の衝突も避けられるためです。有効化するスクリプトは bash 用で、csh や fish では activate.csh や activate.fish を使います。有効化するとシェルのプロンプトに使用中の仮想環境が表示され、python を実行するとその仮想環境の Python が起動します。
有効化しても PYTHONPATH 変数は一切変更されません。仮想環境の Python バージョンと互換性のないコードへのパスが含まれると予期しない結果になるため、bash では unset PYTHONPATH を実行して設定を解除することが勧められています。
pipのコマンド一覧
公式チュートリアルによると、pip はパッケージのインストール、アップグレード、削除に使うプログラムです。デフォルトでは Python Package Index からパッケージをインストールします。試験では、コマンドと働きの組み合わせが問われやすいため、次の表で対応を確認します。
| コマンド | 働き | ひとこと |
|---|---|---|
python -m venv tutorial-env | 仮想環境を作る | tutorial-env ディレクトリがなければ作られ、中に Python インタープリターのコピーや補助ファイルが置かれる |
source tutorial-env/bin/activate | 有効化する(Unix・macOS) | Windows では tutorial-env\Scripts\activate。csh・fish は activate.csh・activate.fish |
deactivate | 無効化する | 仮想環境の利用を終えるときに使う |
python -m pip install novas | 最新版を入れる | 名前だけを指定すると最新版。デフォルトの取得元は Python Package Index |
python -m pip install requests==2.6.0 | 版を指定して入れる | パッケージ名の後ろに == と版番号を付ける |
python -m pip install --upgrade requests | 最新版に更新する | 同じ install を再実行しても、入っている版なら何もしない |
python -m pip uninstall requests | 削除する | 後ろに1つ以上のパッケージ名を指定する |
python -m pip show requests | 1つのパッケージの情報を見る | 名前・版・概要などを表示する |
python -m pip list | 入っている全パッケージを一覧する | 仮想環境にインストールされているものを表示する |
python -m pip freeze | install が読める形式で一覧する | パッケージ名==版 の形で出力。通常は requirements.txt に保存する |
python -m pip install -r requirements.txt | ファイルからまとめて入れる | 他の環境で同じ版をそろえるときに使う |
公式チュートリアルによると、パッケージ名を指定すると最新版が入り、パッケージ名の後に == と版番号を付けると特定の版が入ります。同じコマンドを再実行しても、pip は指定された版がインストール済みであることを確認して何もしません。別の版番号を指定すればその版が入り、--upgrade を付ければ最新版に更新されます。同じ版を指定した install の再実行は、何も起きません。
Python 3.9.6 の仮想環境で、存在しないパッケージ名を install すると、No matching distribution found のエラーで終了しました。入っていないパッケージの uninstall は、エラーではなく「not installed」の警告で飛ばされました。
freezeとrequirements.txt
公式チュートリアルによると、python -m pip list は仮想環境にインストールされているすべてのパッケージを表示します。python -m pip freeze もインストール済みのパッケージ一覧を出力しますが、こちらは python -m pip install が受け付ける形式で出力します。この一覧は通常、requirements.txt というファイルに保存します。
(.venv) $ python -m pip freeze > requirements.txt
(.venv) $ cat requirements.txt
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0requirements.txt はバージョン管理システムにコミットし、アプリケーションの一部として配布できます。ユーザーは python -m pip install -r requirements.txt で必要なパッケージをすべてインストールできます。上の出力例は、公式チュートリアルの例です。
作ったばかりの仮想環境で試すと、pip list は pip 21.2.4 と setuptools 58.0.4 の2行を表示しましたが、pip freeze は何も出力しませんでした。pip show pip は、Name・Version・Summary・Location などを表示しました。freeze は、パッケージ名==版 の形式で、requirements.txt にそのまま保存できる一覧を出すコマンドです。list は一覧の表示、freeze は install が読める形式の一覧です。
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
よくある質問
第12章の仮想環境とパッケージは、何問出ますか?
このサイトが整理した公式の章別出題数では、40問中1問(2.5%)です。出題数は少ない章なので、python -m venv の形と、freeze と list の違い、requirements.txt の使い方を優先して確認します。
仮想環境は、何のために作りますか?
アプリケーションごとに必要なパッケージの版が違うとき、要求の衝突を避けるためです。公式チュートリアルは、アプリケーション A が版 1.0、B が版 2.0 を必要とする例を挙げ、それぞれ専用の仮想環境に入れれば衝突を解決できると説明しています。
pip list と pip freeze は、何が違いますか?
出力の形式が違います。公式チュートリアルによると、freeze はインストール済みのパッケージ一覧を python -m pip install が受け付ける形式で出力し、通常は requirements.txt に保存します。list は一覧を表示するコマンドです。作ったばかりの仮想環境で試すと、list は pip と setuptools を表示し、freeze は何も表示しませんでした。
仮想環境を有効化すると、PYTHONPATH は変わりますか?
変わりません。公式チュートリアルは、有効化しても PYTHONPATH 変数は一切変更されないと注意しています。仮想環境の Python バージョンと互換性のないコードへのパスが含まれると予期しない結果になるため、bash では unset PYTHONPATH で設定を解除するよう勧めています。
