Python3エンジニア認定基礎試験 第12章 仮想環境とパッケージ 予想問題と解説
Python3エンジニア認定基礎試験「第12章 仮想環境とパッケージ」の予想問題を10問収録しています。各問を解説つきで掲載し、全問は演習画面で解けます。出題は公式シラバスの範囲内です。
この章の要点
仮想環境の作成と役割、pipによるパッケージのインストール、pipによるパッケージの更新・削除、インストール済みパッケージの一覧とrequirements.txt、仮想環境ディレクトリの慣習と無効化、仮想環境の定義と競合の解決などを扱う分野です。全10問(基礎6問・標準3問・応用1問)を収録しています。
- 仮想環境の作成と役割
- pipによるパッケージのインストール
- pipによるパッケージの更新・削除
- インストール済みパッケージの一覧とrequirements.txt
- 仮想環境ディレクトリの慣習と無効化
- 仮想環境の定義と競合の解決
- venvが作るPythonのバージョン
- 仮想環境の有効化
- PYTHONPATHとの関係
- 同じinstallコマンドの再実行
情報源と編集区分
公式範囲を確認し、問題数・難易度・確認点は当サイトが集計・編集。
試験概要(公式)確認しておきたいポイント
当サイトの作問時に観察した、取り違えやすい論点です(公式の統計ではありません)。
- ソースファイルの保存場所を分けるだけで依存パッケージも分離できると思うこと。同じパッケージの異なるバージョンが必要なら、venvでアプリケーションごとに別の仮想環境を作る。
よくある質問
Q第12章 仮想環境とパッケージは何問収録されていますか?
現在10問を収録しています。内訳は基礎6問・標準3問・応用1問です。
Q第12章 仮想環境とパッケージの頻出論点は何ですか?
仮想環境の作成と役割、pipによるパッケージのインストール、pipによるパッケージの更新・削除、インストール済みパッケージの一覧とrequirements.txt、仮想環境ディレクトリの慣習と無効化、仮想環境の定義と競合の解決などが出題対象です(当サイト収録問題に基づく編集部集計)。
Q間違えた問題はどう復習すればいいですか?
誤答した選択肢のどこがずれていたかを解説で確認し、関連用語がある場合は用語集で定義に戻ってから再演習することをおすすめします。
同じPC上のアプリAはあるパッケージのバージョン1を、アプリBは互換性のないバージョン2を必要としている。公式チュートリアルに沿う解決方法はどれか。
答えと解説を見る
正解は「アプリごとに別の仮想環境を作り、それぞれが必要なバージョンをインストールする」である。公式チュートリアルは、アプリケーションごとに別々の仮想環境を作ることで、同じパッケージの異なるバージョンを必要とする競合を解決できると説明している。仮想環境はpython -m venv tutorial-envのようにvenvモジュールで作成でき、有効化した後にpythonを実行するとその環境のPythonインタプリタが使われる。システム全体のパッケージを毎回入れ替える方法は、別のアプリケーションへ影響し、依存関係を分離できない。1つの環境で同じパッケージ名の互換性のない複数バージョンを通常の形で同時利用するという解決でもない。ソースファイルの保存場所だけを分けても、共有するパッケージ環境のバージョン競合は解消しない。
https://docs.python.org/ja/3/tutorial/venv.html (Python公式チュートリアル 第12章 仮想環境とパッケージ)
仮想環境へrequestsパッケージのバージョン2.6.0だけをピンポイントで指定してインストールしたい。公式チュートリアルのpipの説明に合うコマンドはどれか。
答えと解説を見る
正解は「python -m pip install requests==2.6.0」である。公式チュートリアルは、pipと呼ばれるプログラムでパッケージをインストール・アップグレード・削除でき、デフォルトではPython Package Index (PyPI) からパッケージをインストールすると説明している。そのうえで、パッケージ名の後ろに==とバージョン番号を付けることで、特定のバージョンのパッケージをインストールできると説明している。バージョン指定の構文は==という決まった記号を使う形式であり、--versionオプションや括弧で囲む形式は公式チュートリアルに示されていない。
https://docs.python.org/ja/3/tutorial/venv.html (Python公式チュートリアル 第12章 仮想環境とパッケージ)
現在インストール済みのrequestsパッケージを、公開されている最新バージョンへ更新したい。公式チュートリアルのpipの説明に合うコマンドはどれか。
答えと解説を見る
正解は「python -m pip install --upgrade requests」である。公式チュートリアルは、pipと呼ばれるプログラムでパッケージをインストール・アップグレード・削除できると説明したうえで、この形式でパッケージを最新バージョンへアップグレードできると説明している。python -m pip showは指定されたパッケージの情報を表示するだけで更新は行わない。python -m pip uninstallはパッケージを削除するコマンドであり、python -m pip listはインストール済みパッケージの一覧を表示するコマンドで、いずれも最新版への更新そのものを行う操作ではない。
https://docs.python.org/ja/3/tutorial/venv.html (Python公式チュートリアル 第12章 仮想環境とパッケージ)
ある仮想環境にインストールされているパッケージの一覧を、別の環境でも同じバージョンで再現できる形式のファイルとして書き出したい。公式チュートリアルのpipの説明に合う方法はどれか。
答えと解説を見る
正解は「python -m pip freeze > requirements.txtを実行し、そのファイルをpython -m pip install -r requirements.txtで読み込む」である。公式チュートリアルは、python -m pip freezeがインストールされたパッケージ一覧をpython -m pip installが解釈するフォーマットで生成し、一般的な慣習としてこのリストをrequirements.txtというファイルに保存すると説明している。また、python -m pip install -r requirements.txtの形式で、必要なパッケージをファイルからまとめてインストールできると説明している。
https://docs.python.org/ja/3/tutorial/venv.html (Python公式チュートリアル 第12章 仮想環境とパッケージ)
仮想環境用のディレクトリ名を、シェルの一覧表示で邪魔にならないよう選び、作業を終えたら仮想環境から抜けたい。公式チュートリアルの説明に合う組み合わせはどれか。
答えと解説を見る
正解は「ディレクトリ名に.venvを使い、抜けるときはdeactivateを実行する」である。公式チュートリアルは、仮想環境の一般的なディレクトリの場所は.venvであり、この名前は通常シェルで隠されているため邪魔にならないと説明している。また、仮想環境の利用を終えるにはdeactivateコマンドを使うと説明している。活性化(activate)と非活性化(deactivate)は対になる操作であり、抜けるときに再びactivateを実行しても仮想環境からは抜けられない。
https://docs.python.org/ja/3/tutorial/venv.html (Python公式チュートリアル 第12章 仮想環境とパッケージ)
公式チュートリアルが説明する「仮想環境」の定義として合うものはどれか。
答えと解説を見る
正解は「特定のバージョンのPythonと幾つかの追加パッケージを含んだPythonインストールを構成するディレクトリ」である。公式チュートリアル12.1は、1つのインストールされたPythonが全てのアプリケーションの要求に対応することはできないため、解決策として仮想環境を作ると説明し、仮想環境を特定のバージョンのPythonと幾つかの追加パッケージを含んだPythonインストールを構成するディレクトリと定義している。アプリケーションAとBが別々の仮想環境を持てば、Bがライブラリのバージョンを更新してもAには影響しない。ソースファイルを隠すだけのディレクトリではなく、Pythonとパッケージの組を分離する単位である。仮想マシンやOS全体のパッケージ管理とは別の仕組みで、標準ライブラリの自動同期コピーでもない。
https://docs.python.org/ja/3/tutorial/venv.html (Python公式チュートリアル 12.1 はじめに)
python3.12 -m venv tutorial-env を実行して仮想環境を作ったとき、その仮想環境にインストールされるPythonのバージョンについて、公式チュートリアルの説明に合うものはどれか。
答えと解説を見る
正解は「コマンドを実行したPythonのバージョンである3.12がインストールされる」である。公式チュートリアル12.2は、venvがコマンドを実行したPythonのバージョン(--versionオプションで表示されるもの)をインストールすると説明し、例としてpython3.12でコマンドを実行するとバージョン3.12がインストールされると述べている。つまり、どのPythonでvenvを起動するかが仮想環境のPythonのバージョンを決める。システムの最新版が自動で選ばれるわけではなく、venvの初版時点のバージョンに固定されることもない。有効化の時点で決まるのでもなく、作成時に使ったインタプリタで決まる。
https://docs.python.org/ja/3/tutorial/venv.html (Python公式チュートリアル 12.2 仮想環境の作成)
UnixやMac OSで、tutorial-envという名前で作った仮想環境を有効化するときの記述として、公式チュートリアルに合うものはどれか。
答えと解説を見る
正解は「source tutorial-env/bin/activate」である。公式チュートリアル12.2は、仮想環境を作ったら有効化する必要があるとし、Unix・Mac OSではsource tutorial-env/bin/activate、Windowsではtutorial-env\Scripts\activateを実行すると示している。このスクリプトはbash shellで書かれており、cshやfishを使う場合はactivate.cshとactivate.fishを使える。有効化するとシェルのプロンプトに仮想環境名が表示され、pythonを実行するとその仮想環境のPythonが起動する。tutorial-env\Scripts\activateはWindows用で、python ... installやpip activateという形の有効化コマンドは示されていない。
https://docs.python.org/ja/3/tutorial/venv.html (Python公式チュートリアル 12.2 仮想環境の作成)
仮想環境を有効化してもPYTHONPATH変数は変更されない。この点について、公式チュートリアルが述べているベストプラクティスとして合うものはどれか。
答えと解説を見る
正解は「PYTHONPATHに仮想環境のPythonと互換性のないコードへの参照が含まれると予期しない結果になり得るため、bashなどでPYTHONPATHを未設定にするのが最善である」である。公式チュートリアル12.2は、有効化した仮想環境がPYTHONPATH変数をいかなる形でも変更しないと注意し、パスに仮想環境が使うPythonのバージョンと互換性のないコードへの参照があると予期しない結果になる可能性があると述べている。最善の方法は、bashではPYTHONPATHを未設定にする(使っているシェルに相当する操作を行う)ことである。有効化がPYTHONPATHを書き換えるという理解は誤りで、外部の場所を必ず登録するという推奨もない。環境変数が使えなくなるわけでもない。
https://docs.python.org/ja/3/tutorial/venv.html (Python公式チュートリアル 12.2 仮想環境の作成)
仮想環境で python -m pip install requests==2.6.0 を実行して成功した後、同じコマンドをもう一度実行した。公式チュートリアルの説明に合う結果はどれか。
答えと解説を見る
正解は「要求されたバージョンはインストール済みだと表示し、何もしない」である。公式チュートリアル12.3は、同じコマンドを再び実行した場合、pipは要求されたバージョンがインストール済みだと表示して何もしないと説明している。別のバージョン番号を指定すればそのバージョンをインストールし、python -m pip install --upgradeを実行すればそのパッケージを最新版に更新する。つまり、同じバージョンの再実行で上書きや入れ直しは起きない。重複エラーで終了するという説明や、--forceが必須になるという説明もない。更新したいときは別のバージョン指定か--upgradeを使う。
https://docs.python.org/ja/3/tutorial/venv.html (Python公式チュートリアル 12.3 pip を使ったパッケージ管理)