python 버전에 따라 requirements.txt


89

6을 사용하여 python2 패키지를 python3 (내 소유가 아님)로 이식하여 두 패키지 모두와 호환되도록 시도하고 있습니다. 그러나 requirements.txt에 나열된 패키지 중 하나는 이제 python3 stdlib에 포함되어 있으며 pypi 버전은 python3에서 작동하지 않으므로 조건부로 제외하고 싶습니다. setup.py에서이 작업을 수행하는 것은 쉽습니다. 다음과 같이 할 수 있습니다.

if sys.version_info[0] == 2:
    requirements += py2_requirements
else:
    requirements += py3_requirements

하지만 requirements.txt가 올바른 목록을 반영하도록하고 싶습니다. pip 문서에서 이것에 대해 아무것도 찾을 수 없습니다. 그렇게하는 방법을 아는 사람이 있습니까? 아니면 가능하다면?


1
수락 된 응답을 stackoverflow.com/a/33451105/99834로 변경하십시오. 이는 의심 할 여지없이이를 구현하는 올바른 방법입니다.
sorin 2016 년

답변:


133

당신이 사용할 수있는 환경 마커를 이를 달성하기 위해 requirements.txt이후 pip 6.0:

SomeProject==5.4; python_version < '2.7'
SomeProject; sys_platform == 'win32'

다음에서 추가 요구 사항을 선언하여 setuptools에서도 지원됩니다 setup.py.

setup(
    ...
    install_requires=[
        'six',
        'humanize',
    ],
    extras_require={
        ':python_version == "2.7"': [
            'ipaddress',
        ],
    },
)

요구 사항 지정자를 참조하십시오 . 그리고 문자열 파이썬 명령을 해당의 문자열 버전.


좋은! 어떻게 똑같이 할 수 sys.platform == "win32"있습니까? 을 사용해 보았지만 함수 :sys.platform == "win32"에서 "Invalid environment marker"오류가 발생했습니다setup()
André Caron

3
업데이트 : PEP 496 - 환경 마커가 로 대체되었습니다 파이썬 소프트웨어 패키지에 대한 종속성 사양 - PEP 508 완전히 포함 종속성 선언 구문 지정, 환경 표지에 대한 구문을 .
jkdev

10

여러 요구 사항 파일을 생성하고 이러한 공통 패키지를 공통 파일에 넣고 다음을 사용하여 다른 pip 요구 사항 파일에 포함 할 수 있습니다. -r file_path

requirements/
  base.txt
  python2.txt
  python3.txt

python2.txt :

-r base.txt
Django==1.4 #python2 only packages

python3.txt :

-r base.txt
Django==1.5 #python3 only packages

pip install -r 요구 사항 /python2.txt

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.