プロジェクトでモジュールを使い始めて、それが機能するのに、それが使用しているパッケージの依存関係であるため、virtualenv に含まれているだけであることに気づかない、ということが起こります。 pip-missing-reqs はそれらのモジュールを見つけて、プロジェクトのrequirements.txtに含めることができます。
あるいは、長期実行プロジェクトがあり、requirements.txt には、コードベースでアクティブに使用されなくなったいくつかのパッケージが含まれています。 pip-extra-reqs ツールはそれらのモジュールを見つけて削除できるようにします。
プロジェクトが、推奨されているサンプル プロジェクトのようなレイアウトに従っていると仮定します。
setup.py セットアップ.cfg 要件.txt サンプル/__init__.py サンプル/サンプル.py サンプル/テスト/test_sample.py
基本的な使用法 (プロジェクト ディレクトリで実行):
<プロジェクトの virtualenv をアクティブ化> pip-missing-reqs --ignore-file=sample/tests/* サンプル
これにより、「sample」内のコード内のすべてのインポートが検索され、それらのモジュールが属するパッケージがrequirements.txtファイル内に存在するかどうかが確認されます。
さらに、requirements.txt にプロジェクトで使用されていない依存関係がないことを確認することもできます。
<プロジェクトの virtualenv をアクティブ化> pip-extra-reqs --ignore-file=sample/tests/* サンプル
これにより、requirements.txt にリストされているものの、サンプルによってインポートされていないものがすべて検索されます。
作業を楽にするために、次のような内容を tox.ini にコピーします。
[testenv:pip-check-reqs] deps=-requirements.txt コマンド= pip-missing-reqs --ignore-file=sample/tests/* サンプル pip-extra-reqs --ignore-file=sample/tests/* サンプル
テスト ファイルは、アプリケーション ソースと同じディレクトリに存在する場合があります (上記の例では「サンプル」)。これらのテストの要件は通常、requirements.txt ファイルに含めるべきではないため、このツールでそれらの要件に対して誤ったヒットが生成されることは望ましくありません。
--ignore-file オプション (短縮形は -f) を使用して、これらのテスト ファイルをチェックから除外できます。オプションの複数のインスタンスが許可されます。
プロジェクトに条件付きでインポートされるモジュール、または条件付きで含まれる要件がある場合、 --ignore-module (短縮形は -m) を使用して、名前 (または glob パターン) によるチェックから特定のモジュールを除外できます。
# モジュールスパムを無視する pip-missing-reqs --ignore-module=スパムサンプル # パッケージ全体のスパムも無視します pip-missing-reqs --ignore-module=spam --ignore-module=spam.* サンプル
プロジェクトでpyproject.toml
使用する場合、 pip-check-reqs
一緒に使用する方法は複数あります。
1 つの方法は、外部ツールを使用してpyproject.toml
requirements.txt
に変換することです。
# `pip install pdm` が必要です pdm エクスポート --pyproject > 要件.txt # または、UV を好む場合は、`pip install uv` uv pip コンパイル --no-deps pyproject.toml >requirements.txt
その後、通常どおりpip-missing-reqs
とpip-extra-reqs
を使用できます。
もう 1 つの方法は、たとえば setuptools ビルド バックエンドを使用して、 pyproject.toml
ファイル内でrequirements.txt
ファイルを使用することです。
[ build-system ]
build-backend = " setuptools.build_meta "
requires = [
" setuptools " ,
]
[ project ]
...
dynamic = [ " dependencies " ]
[ tool . setuptools . dynamic ]
dependencies = { file = " requirements.txt " }
Josh Hesketh -- コードをリファクタリングし、pip-extra-reqs ツールに貢献しました。
Wil Cooley --normalize_name の削除を担当し、いくつかのバグを修正しました。