2011-10-03 2 views
11

Python 2.4 이상이 필요한 Python 2 프로젝트 ('foo 0.1.7')가 있습니다.최소한의 Python 버전을 필요로하는 Python 패키지를 배포하는 가장 좋은 방법은 무엇입니까

이제 파이썬 3 ('foo 0.2.0')에 파이썬 2와 호환되는 방식으로 이식했지만 요구 사항은 이제 파이썬 2.6 이상으로 옮겨졌습니다.

  • 내가 upload 사용할 수 있습니다 setup.py에 대한 --target-version=2.6 옵션이 있다는 것을 알고 있지만, 그 '2.6 이상'
  • setup 명령은 install_requires 옵션이 같은 의미되지 않는 것 같습니다, 그러나 이것은 파이썬 인터프리터가 아니라 필수 패키지를위한 것이다.

    if sys.hexversion < 0x02060000: 
        raise RuntimeError('This package requires Python 2.6 or later, try foo 0.1.7') 
    

    을하지만 easy_install foo 어떤 방법으로이 문제를 해결한다면 내가 선호하는 것 :

나는 'foo는 0.2.0'의 setup.py에서 같은 것을 할 수 있습니다.

그럼 어떻게 이것을 PyPI에 배포해야합니까?

답변

2

프로그램의 버전 0.1.7과 0.2.0을 모두 업로드하고 easy_install-2.5가 자동으로 0.1.7을 사용하는 반면 easy_install-2.6은 0.2를 사용합니다. 0.

그럴 경우 현재 시스템으로 수행 할 수 있는지 확실하지 않습니다 ... raise RuntimeError() 수표가 현재 사용 가능한 최상의 옵션 일 수 있습니다. 프로젝트를 설치하는 사람들은 수동으로 easy_install-2.5 -U "proj<0.2" 또는 그와 비슷한 것을 수동으로해야합니다.

즉, distutils, setuptools 등을 대체하는 전용 그룹이 있으며, 업데이트 된 라이브러리는 packaging입니다. 이 새로운 라이브러리는 기존의 distutils 향상 라이브러리의 기능과 다른 많은 개선 사항을 결합합니다. Python 3.3에 포함될 예정이며 distutils2으로 백 포트 될 예정입니다.

질문과 관련하여 설치 메타 데이터에 대한 많은 개선 사항이 포함되어 있습니다. "requires_python" 옵션을 포함하여 원하는 정보를 정확히 나타내도록 맞춤 설정되어있는 것으로 보입니다. 그러나 나는이 정보를 어떻게 활용할 계획인지, 새로운 설정 시스템이 원하는대로 작동하게 할 것인지 확신하지 못합니다.

the fellowship of the packaging에 게시하는 것이 좋습니다. 새로운 시스템 개발에 전념하는 Google 그룹은 requires_python이 어떻게 작동하는지에 대한 세부 정보를 제공 할 수 있으며 원하는 설치 동작을 얻을 수 있습니다. 새 시스템의 1 층에 실현 가능성이있는 경우 (이미 존재하지 않는 경우)

4

나는 업로드와 함께 사용할 수있는 --target 버전 = setup.py 2.6 옵션이 있다는 것을 알고 있지만, 그 '2.6 이상'

으로 의미되지 않는 것 같다

실제로 이것은 bdist_wininst 또는 bdist_msi의 옵션이며 실제로 "이상"을 포함하지 않습니다.

setup 명령에는 install_requires 옵션이 있지만 이는 필수 패키지 용이며. 파이썬 인터프리터는 필요하지 않습니다.파이썬 2.5 당신이 운이 좋다면 easy_install을 찾을 수 있도록, 파이썬 - blahblah-pyXY.egg-정보 파일을 만듭니다 3.2에 대한 요구 사항입니다 :

은 어쩌면 '파이썬> = 2.6'일할 수있는 install_requires에서 퍼팅 만족. 아마 어 ... 그래서, PyPI에서 다운로드를 시도합니다하지 않으면

내가 'foo는 0.2.0'의 setup.py에서 이런 일을 할 수있는 : 경우 sys.hexversion < 0x02060000 : 인상 RuntimeError ('이 패키지에는 Python 2.6 이상이 필요합니다. foo 0.1.7을 시도하십시오.)

이것은 실제로 현재 일반적인 관용구입니다. 또한, "Programming Language :: Python :: X.Y"분류기를 사용하면 인간에 대한 정보를 얻을 수 있습니다 (필자는이 정보를 사용하는 도구에 대해 알지 못합니다).

단기간에 희망이 있습니다. Python 배포판 메타 데이터에 대한 사양이 업데이트되었으며 최신 버전에 특정 Python 버전이 필요한 필드가 포함되어 있습니다. http://www.python.org/dev/peps/pep-0345/#requires-python

도구 지원 관련 : distutils는 고정되어 있으며 지원하지 않습니다. setuptools는 추가하거나 추가하지 않을 수 있습니다 지원, 그것의 포크 배부는 아마 지원을 얻을 것이다, distutils2/포장은 이미 그것을 지원한다. distutils2는 pysetup이라는 기본 설치 프로그램을 포함하고 있는데, Requires-Python 필드를 존중해야합니다 (그렇지 않은 경우 bugs.python.org에보고하십시오).

자, 지금 당신의 문제를 해결하기 위해, 당신은 이런 것들 중 하나를 수행 할 수 을 - (예를 들어, PIP 설치 "foo는 다운로드 할 때 2.4 사용자가 버전을 고정 할 필요가 문서화하는 것이 - 프로젝트 만 2.6+ 지원 선언 == 0.1.7 ")

+0

+1 자세한 답변을 원하시면, 감사합니다! – mar10

관련 문제