分发需要最小Python版本的Python包的最佳方法是什么

mar*_*r10 11 python setuptools pypi

我有一个需要Python 2.4或更高版本的Python 2项目('foo 0.1.7').

现在我将它移植到Python 3('foo 0.2.0'),它仍然与Python 2兼容,但现在要求已经提升到Python 2.6或更高版本.

  • 我知道有一个--target-version=2.6setup.py 的选项,可以使用upload,但这似乎不是'2.6或更高'
  • setup命令有一个install_requires选项,但这是针对所需的包,而不是Python解释器.

我可以在'foo 0.2.0'的setup.py中做类似的事情:

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

但我希望easy_install foo能以某种方式解决这个问题.

那么,我应该如何在PyPI上部署它呢?

Eli*_*ins 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、等。这个新库结合了现有 distutils 增强库的功能以及许多其他改进。它计划包含在 Python 3.3 中,然后作为.setuptoolspackagingdistutils2

与您的问题特别相关的是,它包含对设置元数据的许多增强;包括一个“requires_python”选项,它似乎是量身定制的,可以准确地指示您想要的信息。但是,我不确定他们计划如何利用这些信息,以及它是否会导致新的安装系统表现得像您想要的那样。

我建议发帖到包装联谊会,即致力于开发新系统的谷歌小组,他们将能够提供有关如何requires_python工作的详细信息......并可能获得您想要的安装行为新系统的底层(如果它看起来可行的话)(并且尚未存在)。