説明
pip install connexion のような命令では、パッケージリポジトリの変更によって別のバージョンを取得する場合があります。シェル形式と JSON exec 形式のどちらの pip・pip3 install でも、実際のパッケージ引数のバージョンを固定してください。
Python パッケージには間接的な依存関係が多く、小さな更新でも動作に影響します。--index-url や --trusted-host などのオプションの値や URL はパッケージ名ではありません。これらのオプションを使う場合も、対象パッケージは package==version で指定してください。
想定される影響
- ビルドごとに異なる Python パッケージがインストールされる場合があります。
- 依存関係の変更で実行時エラーが発生する可能性があります。
- テストと本番でライブラリ構成が異なる場合があります。
対処方法
pip install connexion==3.1.0のようにバージョンを指定してください。- 間接依存も含めて確認済みの requirements ファイルと固定バージョンを管理してください。
- バージョンを更新する前にアプリケーションをテストしてください。
例
以下のバージョンは固定構文の例であり、現在のセキュリティ上の推奨値ではありません。ベースイメージと間接依存も管理し、セキュリティ更新を継続してください。
変更前
dockerfile
FROM python:3.12-slim
RUN pip install connexion
RUN pip3 install requests
変更後
dockerfile
FROM python:3.12-slim
RUN pip install --upgrade pip==24.2 connexion==3.1.0
RUN pip3 install --no-cache-dir requests==2.32.3
説明:
- 変更前: バージョンが指定されていないため、リポジトリの変更がイメージに反映される場合があります。
- 変更後:
==で直接インストールするバージョンを指定します。この命令だけでは、すべての間接依存は固定されません。