🗂

pipで古いパッケージを確認し、安全に更新する

に公開

まず結論

pip 管理の環境を更新するときは、仮想環境で古いパッケージを確認し、変更内容を見てから対象を指定して更新します。

python -m pip list --outdated
python -m pip install --upgrade requests
python -m pip check

アプリケーションでは、全パッケージの一括更新を日常操作にしません。依存関係ファイルを変更し、テストを通してから反映します。

使う場面

  • 開発用の仮想環境で古い依存を調べる
  • セキュリティ修正や不具合修正を取り込む
  • Python 本体の更新前に依存の互換性を確認する

共有サーバーや OS 付属 Python へ直接実行せず、venv などで環境を分けます。

構文と設定項目

コマンド 用途
python -m pip list --outdated 更新候補を一覧する
python -m pip show PACKAGE 現在の情報を確認する
python -m pip install --upgrade PACKAGE 指定したパッケージを更新する
python -m pip check インストール済み依存の矛盾を確認する
python -m pip freeze 現在の環境を要件形式で出力する

python -m pip と書くと、どの Python 環境の pip を使うかが明確になります。

実装例

python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip list --outdated

更新対象を決めたら、依存関係を管理しているファイルを変更します。requirements.txt を手で管理する例なら、バージョン範囲を更新して新しい環境へ再インストールします。

たとえば、更新前後の差分をレビューできるように、対象行だけを変更します。次は書き方の例です。

- requests>=2.31,<3
+ requests>=2.32,<3

変更後は、同じ仮想環境へ再インストールし、依存関係とプロジェクトのテストを確認します。

python -m pip install -r requirements.txt
python -m pip check
pytest

pip check が成功しても、アプリケーションの互換性までは確認できません。pytest の結果と requirements.txt の差分をレビューし、失敗した場合は依存の変更を戻すか、対象パッケージの互換性を調べてから再度更新します。

依存解決とロックを再現可能にしたい場合は、pip-tools、Poetry、uv など、プロジェクトで採用した管理方法に寄せます。

つまずきやすい点

pip freeze の出力をそのまま一括更新する

直接依存と推移的依存を区別できず、意図しないメジャー更新を取り込みます。変更差分とリリースノートを確認します。

xargs でパッケージ名を雑に渡す

表形式の出力は機械処理用の安定した契約とは限りません。JSON 形式を使う場合でも、更新対象を表示してから実行します。

pip-review --auto を本番環境で使う

pip-review は更新候補の確認や一括更新を補助しますが、互換性を保証しません。試すなら破棄できる環境で使い、依存ファイルとテスト結果を成果物にします。

関連する機能

まとめ

更新の目的は最新版にそろえることではなく、必要な修正を再現可能な形で取り込むことです。仮想環境、明示的な対象指定、依存チェック、テストを一連の流れにします。

Discussion