파이썬 2와 파이썬 3 모두에서 작동하는 모듈을 가지고 있습니다. 파이썬에서 < 3.2 특정 패키지를 의존성으로 설치하고 싶습니다. 파이썬> = 3.2. 같은python 버전을 기반으로 install_requires
뭔가 :
install_requires=[
"threadpool >= 1.2.7 if python_version < 3.2.0",
],
이 어떻게 그렇게 할 수 있습니까?
파이썬 2와 파이썬 3 모두에서 작동하는 모듈을 가지고 있습니다. 파이썬에서 < 3.2 특정 패키지를 의존성으로 설치하고 싶습니다. 파이썬> = 3.2. 같은python 버전을 기반으로 install_requires
뭔가 :
install_requires=[
"threadpool >= 1.2.7 if python_version < 3.2.0",
],
이 어떻게 그렇게 할 수 있습니까?
setuptools
은 environment markers을 사용하여이를 지원합니다.
install_requires=[
'enum34;python_version<"3.4"',
'pywin32 >= 1.0;platform_system=="Windows"'
]
이 내용은 official documentation에 자세히 설명되어 있습니다. change log을 기반으로 v20.5에 추가되었지만 구현은 v20.8.1 (15 일 간격 만) 때까지 안정적이지 않았습니다.
(여전히 유효하지만, 미래에 사용되지 수 있습니다) 원래 대답 :
setuptools
는
extras_require
인수 내에서 사용이 지원합니다.
extras_require={
':python_version=="2.7"': ["mock"],
},
그것은 다른 비교 연산자를 지원합니다 :
형식은 다음과 같다.
슬프게도, documentation에는 언급되어 있지 않습니다. 답변을 찾는 동안 PEP-426에서 "환경 마커"에 대해 이야기했습니다. 그 문구로 나는 다음과 같은 덧글을 가지고 setuptools ticket을 찾을 수있었습니다 :
나는 선택적이고 선언적으로 의존성을 요구하는 마커 기능을 성공적으로 사용했습니다. 예를 들어 backports.unittest_mock을 참조하십시오. '엑스트라'를 통해 mock이 필요하지만 Python 2에서만 가능합니다. Setuptools 17.1에 의존 할 수 있으면 해당 의존성을
python_version < "3.3"
으로 변경할 수 있습니다. 의
이 내용은 here으로, 을 사용하여 setup.py
내부의 Python 버전을 테스트하는 것이 좋습니다.
import sys
if sys.version_info >= (3,2):
install_requires = ["threadpool >= 1.2.7"]
else:
install_requires = ["threadpool >= 1.2.3"]
setup(..., install_requires=install_requires)
이 솔루션은'pip'와'wheel' 패키지의 많은 조합으로 취약합니다. pip가 wheel을 대신하여 빌드 할 때, 계산 된 install_requires리스트는 휠 메타 데이터에 쓰여지고 캐시 된 휠은 다른 Python 버전에서 사용될 수 있습니다. –
가능한 중복 https://stackoverflow.com/questions/6080646/install-requires-in-setup-py-depending-on- ([설치 파이썬 버전에 따라 setup.py에서 \ _requires 설치] installed-python-version) – ederag