Такое случается: вы начинаете использовать модуль в своем проекте, и он работает, и вы не осознаете, что он включается в вашу виртуальную среду только потому, что он зависит от используемого вами пакета. pip-missing-reqs находит эти модули, и вы можете включить их в файл требований.txt проекта.
Альтернативно, у вас есть давно работающий проект, в файле require.txt которого есть пакеты, которые больше не используются активно в базе кода. Инструмент pip-extra-reqs найдет эти модули, и вы сможете их удалить.
Предполагая, что ваш проект соответствует макету, подобному предлагаемому образцу проекта:
setup.py setup.cfg требования.txt образец/__init__.py образец/sample.py образец/тесты/test_sample.py
Основное использование, работающее в каталоге вашего проекта:
<активировать virtualenv для вашего проекта> pip-missing-reqs --ignore-file=sample/tests/* образец
Это позволит найти весь импорт в коде в «образце» и проверить, что пакеты, которым принадлежат эти модули, находятся в файле require.txt.
Дополнительно можно проверить, что в файле require.txt нет зависимостей, которые потом не используются в проекте:
<активировать virtualenv для вашего проекта> pip-extra-reqs --ignore-file=sample/tests/* образец
Это позволит найти все, что указано в файле require.txt, но не импортировано по образцу.
Чтобы облегчить себе жизнь, скопируйте в свой tox.ini что-то вроде этого:
[testenv:pip-check-reqs] deps=-rrequirements.txt команды= pip-missing-reqs --ignore-file=sample/tests/* образец pip-extra-reqs --ignore-file=sample/tests/* образец
Ваши тестовые файлы иногда будут находиться в том же каталоге, что и исходный код вашего приложения («образец» в приведенных выше примерах). Требования для этих тестов обычно не должны содержаться в файле require.txt, и вы не хотите, чтобы этот инструмент генерировал для них ложные попадания.
Вы можете исключить эти тестовые файлы из проверки, используя опцию --ignore-file (сокращение -f). Допускается использование нескольких экземпляров опции.
Если в вашем проекте есть модули, которые импортируются условно, или требования, которые включены условно, вы можете исключить определенные модули из проверки по имени (или шаблону glob), используя --ignore-module (сокращение -m):
# игнорировать спам модуля pip-missing-reqs --ignore-module=образец спама # игнорировать весь спам в пакете pip-missing-reqs --ignore-module=spam --ignore-module=spam.* образец
Если ваш проект использует pyproject.toml
, существует несколько способов использовать с ним pip-check-reqs
.
Один из способов — использовать внешний инструмент для преобразования pyproject.toml
в requirements.txt
:
# требуется `pip install pdm` экспорт pdm --pyproject > требования.txt # или, если вы предпочитаете uv, `pip install uv` uv pip compile --no-deps pyproject.toml > требования.txt
Затем вы можете использовать pip-missing-reqs
и pip-extra-reqs
как обычно.
Другой способ — использовать файл requirements.txt
в файле pyproject.toml
, например, с помощью бэкэнда сборки setuptools:
[ build-system ]
build-backend = " setuptools.build_meta "
requires = [
" setuptools " ,
]
[ project ]
...
dynamic = [ " dependencies " ]
[ tool . setuptools . dynamic ]
dependencies = { file = " requirements.txt " }
Джош Хескет, который провел рефакторинг кода и предоставил инструмент pip-extra-reqs.
Уил Кули — он руководил удалениемnormalize_name и исправлял некоторые ошибки.