2011-10-03 71 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

相关问题