2011-10-03 20 views
11

我有一個Python 2項目(「富0.1.7」),需要的Python 2.4或更高版本的Python包的最佳方式。什麼是分發,需要一個最小的Python版本

現在我的方式,它仍然是與Python 2兼容它移植到Python 3(「富0.2.0」),但現在要求提升到Python 2.6或更高版本。

  • 我知道,有對setup.py一個--target-version=2.6選項,可以與upload使用,但似乎不被意味着作爲「2.6或更高版本」
  • setup命令有一個install_requires選項,但是這是用於所需的包,而不是Python解釋器。

我可以做這樣的事情在「富0.2.0」的setup.py:

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

但我寧願如果easy_install foo會解決這個以某種方式。

那麼,應該怎麼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"或類似的東西。

這就是說,有一個專門的小組目前正在更換distutilssetuptools等與名爲packaging更新庫。這個新庫結合了現有的distutils增強庫的功能,以及其他一系列改進。它將被包含在Python 3.3中,然後被定位爲distutils2

特殊意義,以你的問題,它包含了許多增強功能設置的元數據;其中包括一個"requires_python"選項,該選項似乎專門用於指示您想要的信息。但是,我不確定他們計劃如何使用這些信息,以及它是否會導致新的設置系統像您想要的那樣運行。

我建議發佈到the fellowship of the packaging,專門用於開發新系統的谷歌組,他們將能夠詳細說明requires_python應該如何工作......並且可能會獲得您想要的安裝行爲在新系統的底層,如果它似乎是可行的(並且已經不存在)。

4

我知道有一個--target版本=爲setup.py 2.6選項,可與上傳使用 ,但似乎不被意味着作爲「2.6或更高版本」

它實際上是bdist_wininst或bdist_msi一個選項,的確不包括「以上」。

的設置命令有一個install_requires選項,但這是所需 包,。不是Python解釋器。

也許把 '的Python> = 2.6' 在install_requires可以工作:Python 2.5的高達3.2創建一個Python-blahblah-pyXY.egg信息文件,所以如果你是幸運的easy_install可能會發現要求滿意。如果沒有它可能會嘗試從PyPI中下載,所以呃...

我可以做這樣的事情在「富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/packaging已經支持它。 distutils2包含一個名爲pysetup的基本安裝程序,該安裝程序應該遵守Requires-Python字段(如果不是,請報告給bugs.python.org)。現在

,現在來解決你的問題,你可以做這些事情之一: - 聲明,您的項目只支持2.6+ - 文檔2.4用戶需要固定該版本的下載(如PIP安裝「富時== 0.1.7「)

+0

+1對於這個詳細的答案,謝謝! – mar10

相關問題