2017-02-15 5 views
7

setup.py 파일에 핏이 수집되지 않도록하고 지원되지 않는 Python 버전을 사용할 때 패키지를 설치하지 못하게하려면 어떻게해야합니까? 예를 magicstack를 들어이전 Python 버전에 패키지가 설치되지 않도록 방지

는 관은 분류와 함께 나열하는 프로젝트입니다 :

그래서 pip --version 경우 다음과 같은 동작이 2.7 파이썬 연결되어 기대하는
Programming Language :: Python :: 3 :: Only 

:

$ pip install magicstack 
Collecting magicstack 
    Could not find a version that satisfies the requirement magicstack (from versions:) 
No matching distribution found for magicstack 

을하지만 실제 행동이다 pip는 릴리스를 수집하고, 다운로드하고, 설치하려고 시도하며 실패합니다. 예를 들어 curio과 같은 다른 Python3 전용 릴리스가 있습니다. setup.py은 Python 3 특정 기능을 사용하지 않았기 때문에 실제로 제대로 설치됩니다. 일부 Python 3 구문 만 사용되는 경우 가져 오기에는 실패합니다. 그리고 OK, import OK를 인스톨하는 꾸러미가 있고, 단지 런타임에만 실패 할 것이라고 확신합니다!

pip가 존중하는 방식으로 지원되는 Python 버전을 지정하는 올바른 방법은 무엇입니까? 휠 파일 만 업로드하고 .tar.gz 배포본 업로드를 거부하는 등의 임시 해결 방법을 발견했지만 올바른 수정 방법을 알고 싶습니다.


편집 : 어떻게 핍을 을 알지 않는 파이썬/OS/아키텍처가 일치하지 않는 경우 륜 분배를 다운로드? 그냥 .whl filename convention을 사용합니까, 아니면 그 뒤에서 일어나는 것보다 더 정교한 것이 있습니까? .tar.gz 업로드를 통해 pip가 올바른 작업을 수행 할 수 있도록 메타 데이터를 소스 배포본에 제공 할 수 있습니까?

+0

나는 이것이 _right_ 대답이라는 것을 모른다. 그러나'magicstack'은 python2.x에서'setup.py'가 실패했기 때문에 python3 만 쓰면이 작업을 할 수있는 한 가지 방법처럼 보입니다. 당신의'setup.py'가 부적절한 파이썬 버전에서 실패하도록 강요하십시오 ... – mgilson

+0

Hacky. pip가 지원되지 않는 파이썬 인터프리터에 묶여 있다면, 나는'setup.py'을 실행하여 설치를 시도하는 것뿐만 아니라 패키지를 수집하거나 전혀 다운로드하지 않기를 바란다. – wim

+0

Google은 [previous] (http://stackoverflow.com/questions/13924931/setup-py-restrict-the-allowable-version-of-the-python-interpreter) [questions] (http : // stackoverflow .com/questions/13385337/distribute-distutils-specify-python-version)'setup.py'가 파이썬 버전을 검사하도록하는 해답이 있습니다. – user2357112

답변

3

올바른 방법이 있지만 불행히도 pip는 버전 9.0.0 (2016-11-02 릴리스)에서 지원하기 시작 했으므로 이전 버전의 pip를 사용하는 사용자는 계속해서 패키지를 계속 다운로드 할 것입니다. 파이썬 버전에 상관없이. 당신의 setup.py 파일에서

, setup()에게 PEP 440version specifier 같은 패키지의 지원 파이썬 버전을 나열하는 python_requires 인수를 전달합니다. 예를 들어, 패키지가 Python 3 이상에만 해당하는 경우 다음을 작성하십시오.

setup(
    ... 
    python_requires='>=3', 
    ... 
) 

패키지가 Python 3 용인 경우.패키지는 파이썬 2.6, 2.7 인 경우

setup(
    ... 
    python_requires='~=3.3', 
    ... 
) 

을, 파이썬 3의 모든 버전이 3.3로 시작, 쓰기 : 3 최대하지만 4 지원 아직 파이썬 저지 기꺼이 아니에요, 쓰기

setup(
    ... 
    python_requires='>=2.6, !=3.0.*, !=3.1.*, !=3.2.*, <4', 
    ... 
) 

등등.

일단 완료하면 python_requires 인수를 처리하려면 setuptools 버전을 24.2.0 이상으로 업그레이드해야합니다. 이전 버전에서는 경고로 무시합니다. 나중에 빌드 된 모든 프로젝트의 sdists와 wheel에는 PyPI에 Python 버전을 알려주는 관련 메타 데이터가 포함됩니다.

+0

안녕하세요, 업데이트 주셔서 감사합니다. 귀하의 솔루션을 시도했지만 예상대로 작동하지 않습니다. 나는 setuptools를 v34.3.2로 업데이트했고,'python_requires' kwarg를 사용하여 새로운 배포판을 업로드했습니다. Python 3.6의 pip 버전 9.0.1에서는 ** correct ** (pip는 배포판을 다운로드/실행하지 않고 python 버전을 인쇄합니다.) 그러나 Python 2.7에서 pip 버전 9.0.1을 사용하면 배포본이 다운로드되고'setup.py'가 실행됩니다. 관련 메타 데이터가있는 것 같습니다 (pip3에서 작동하기 때문에)하지만 pip2에서는 무시됩니다. 내가 놓친 게 있니? – wim

+0

@wim :'python_requires'에 어떤 버전 지정자를 사용 했습니까? – jwodder

+0

필자는'python_requires> = '3.6.1'을 사용하여 메타 데이터에 대한 제한을 적용한 다음 3.6.0 및 2.7.5의 가상 환경을 사용하여 pip 9.0.1을 테스트했습니다. – wim

1

pypi의 magicstack 배포가 중단되었습니다. 원본 배포본의 setup.py에도 불구하고 원본 배포본에 magicstack 패키지가 포함되어 있지 않으므로 실패합니다.

는만큼 pypi이 소스 배포판 (예를 들어 .tar.gz, .zip)를 포함으로, 핍 다운로드 것이다 그것은 파이썬/OS/아키텍처 버전에 일치하는 바이너리 배포판 (예를 들어 .egg, .whl를) 찾을 수없는 경우.

바이너리 전용 파이피 패키지가 허용되는지 여부는 모르지만 선택 사항은 바이너리 배포본을 pypi (바람직하게는 wheels)로 업로드하는 것입니다. 다른 옵션은 setup.py에 호환되는 버전이 있는지 sys.version 확인하고 그렇지 않은 경우 예외가 발생합니다.

+0

바이너리 배포본 만 업로드 할 수 있습니다. 현재이 문제를 현재 해결 방법으로 언급했습니다. pip3과 함께 설치되지만 pip2에서는 보이지 않는 패키지의 예는 [toga-curses] (https://pypi.python.org/pypi/toga-curses/)를 참조하십시오. – wim