第4回:仮想環境 & パッケージ管理 ― 45〜60 分で「再現できる環境」を作ろう

この記事のゴール

  • 仮想環境(venv) を自分で作成・切替・削除できる
  • pip install / requirements.txt により 他メンバーが 1 コマンドで同じ環境を再現 できる
  • 次のステップとして Poetry / pyproject.toml の基本的な位置づけを理解する

なぜ仮想環境が必要?(5 分)

問題: 1 台の PC に複数プロジェクトが増えるほど、ライブラリのバージョン衝突(例: A では Django 4, B では Django 3)が起こり “昨日まで動いたコードが壊れる”。
解決: プロジェクトごとに独立した 仮想環境 を作り、インストール先(site-packages)を分離する。これによりアップデートが他プロジェクトへ伝播しない。

追加メリット:

  • ライブラリ削除を気軽に試せる(失敗したら環境を作り直せば良い)
  • CI / 本番サーバでも requirements.txt を使って 再現性 を確保できる

venv の基本(復習 + 応用)(10 分)

# プロジェクト作成
mkdir myapp && cd myapp

# 仮想環境作成 (.venv フォルダ名は自由)
python -m venv .venv

# 有効化
# Windows (PowerShell)
.venv\Scripts\Activate.ps1
# macOS / Linux (bash/zsh)
source .venv/bin/activate

# 確認
which python        # or where python (Windows)
python -V           # バージョン表示

# 無効化
deactivate

`

ヒント: プロンプトに (.venv) と表示されていれば有効。
Git 運用: .venv/ は巨大なのでコミットしない。.gitignore.venv/ を追加。必要なのは後述の requirements.txt のみ。

.gitignore 例:

.venv/
__pycache__/
*.pyc

pip でパッケージを入れる(7 分)

まずは最新版へアップデートしておくとトラブルが減る:

python -m pip install --upgrade pip

インストール / 情報表示:

pip install requests
pip show requests      # インストール情報表示
pip list               # 現在入っているパッケージ一覧

Python コード使用例:

import requests
r = requests.get("https://httpbin.org/json", timeout=5)
print(r.status_code, r.headers.get("Content-Type"))
data = r.json()

ポイント: pip コマンドは「有効化した仮想環境」内の Python に紐づく。混乱したら which pip でパスを確認。


requirements.txt で再現性を確保(10 分)

現在の依存を書き出す

pip freeze > requirements.txt

requirements.txt 例:

requests==2.32.3
urllib3==2.2.2

別の開発者 / サーバで再現

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

ポイント

  • pip freeze は直接インストールしたもの + 間接依存を すべて 固定する。必要最低限だけ記録したい場合は手動で編集しても良い。
  • 依存を更新したら 必ず再度 freeze して PR。更新 PR に差分が出るのでレビューしやすい。

パッケージの更新・削除(5 分)

pip list --outdated             # 更新可能な一覧
pip install -U requests         # アップデート(--upgrade と同義)
pip uninstall requests          # 削除

複数一括更新は慎重に。更新後はアプリが動くかテストし、OK なら pip freeze > requirements.txt


もう一歩進んだ管理:Poetry 概要(8 分)

Poetry とは? 依存管理 + 仮想環境作成 + パッケージ公開を一元化するツール。
pyproject.toml に「直接依存のみ」を書き、poetry.lock で厳密なバージョンを固定する。

最小操作:

pip install poetry
poetry init        # 対話形式で pyproject.toml 作成
poetry add requests
poetry install     # lock ファイルに基づいて環境作成
poetry run python script.py

pyproject.toml 例(抜粋):

[tool.poetry]
name = "myapp"
version = "0.1.0"

[tool.poetry.dependencies]

python = "^3.12" requests = "^2.32.3"

いつ導入する? チーム人数が増え “依存の最小表現” と “自動公開” が欲しくなったら。まずは venv + requirements で慣れてからで十分。


よくあるトラブルシューティング(7 分)

症状 / エラー原因 / 対処
ModuleNotFoundError仮想環境未有効化 / インストール忘れ → activate 後に pip install
pip: command not foundPython 未インストール or PATH 問題 → 再インストール
バージョン衝突 (X requires Y<2.0, but Y 2.1.0 is installed)依存競合 → 古い方/新しい方へ統一し再インストール (pip install Y==1.9.*)
SSL error で失敗社内プロキシ / 証明書 → 環境変数 HTTP_PROXY 設定 or 証明書をシステムに追加
PermissionErrorグローバル環境に誤ってインストール → 仮想環境を使う(pip install --user で逃げることも可)

練習チャレンジ(10 分)

お題: “天気 API から JSON を取得して保存” スクリプトを作成。

  1. 仮想環境を作る (python -m venv .venv → 有効化)
  2. requests をインストール
  3. fetch_weather.py を書き、レスポンス JSON を weather.json に保存
  4. pip freeze > requirements.txt
  5. 別 PC で同じ手順を再現できるかテスト
    ⇒ 同僚レビューで “README の手順通り動いた” と言われたら成功!

次に覚える 3 キーワード 🔑

  1. try / except ― 失敗しても落ちないコード
  2. logging ― どこで何が起きたか記録
  3. with open() ― ファイルを安全に扱う

参考リンク


まとめ

  • 仮想環境 + requirements.txt で “誰でも同じ状態” を瞬時に再現でき、障害調査が楽になる。
  • 慣れてきたら Poetry など高度なツールへステップアップし、より安全で自動化された運用へ。
  • 次回(第 5 回)は 例外処理 & ロギング で “落ちても原因を追えるコード” を書こう!

コメント

タイトルとURLをコピーしました