이런 일이 발생합니다: 프로젝트에서 모듈을 사용하기 시작하면 작동하지만 해당 모듈이 사용 중인 패키지의 종속성이므로 virtualenv에만 포함된다는 사실을 깨닫지 못합니다. pip-missing-reqs는 해당 모듈을 찾아 프로젝트의 요구사항.txt에 포함할 수 있습니다.
또는 코드베이스에서 더 이상 적극적으로 사용되지 않는 요구사항.txt에 일부 패키지가 있는 장기 실행 프로젝트가 있습니다. pip-extra-reqs 도구는 해당 모듈을 찾아서 제거할 수 있습니다.
프로젝트가 제안된 샘플 프로젝트와 같은 레이아웃을 따른다고 가정합니다.
setup.py setup.cfg 요구사항.txt 샘플/__init__.py 샘플/sample.py 샘플/테스트/test_sample.py
프로젝트 디렉터리에서 실행되는 기본 사용법:
<프로젝트에 virtualenv 활성화> pip-missing-reqs --ignore-file=sample/tests/* 샘플
그러면 "sample"의 코드에서 모든 가져오기를 찾고 해당 모듈이 속한 패키지가 요구사항.txt 파일에 있는지 확인합니다.
또한 프로젝트에서 사용되지 않는 요구사항.txt에 종속성이 없는지 확인할 수도 있습니다.
<프로젝트에 virtualenv 활성화> pip-extra-reqs --ignore-file=sample/tests/* 샘플
이렇게 하면 요구사항.txt에 나열되어 있지만 샘플로 가져오지 않은 모든 항목을 찾을 수 있습니다.
인생을 더 쉽게 만들려면 다음과 같은 내용을 tox.ini에 복사하세요.
[testenv:pip-check-reqs] deps=-rrequirements.txt 명령= pip-missing-reqs --ignore-file=sample/tests/* 샘플 pip-extra-reqs --ignore-file=sample/tests/* 샘플
테스트 파일이 애플리케이션 소스와 동일한 디렉터리에 있는 경우가 있습니다(위 예에서는 "샘플"). 이러한 테스트에 대한 요구 사항은 일반적으로 요구 사항.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
사용하는 방법에는 여러 가지가 있습니다.
한 가지 방법은 외부 도구를 사용하여 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
사용할 수 있습니다.
또 다른 방법은 pyproject.toml
파일 내에서 requirements.txt
파일을 사용하는 것입니다(예: setuptools 빌드 백엔드 사용).
[ 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 제거를 처리하고 일부 버그를 수정했습니다.