我注意到,PyPI上发布的大多数项目在他们的项目页面中都包含一个“Py Version”元数据,但它们的值会有所不同。
如果包不是通用包或不是纯python包,它们的值可以理解地不同,以表示它们的目标平台,例如这个nose page和这个simplejson page。
但是其他一些普遍的纯粹(据我所知)Python包仍然包含略有不同的内容。例如:
所以我的问题是,它们是由作者用来构建发布包的不同工具链引起的吗?我尝试运行python2 setup.py sdist bdist_wheel --universal upload
给了我一个“2.7”Py版本值。下次我会尝试python3 ...
然后twine ...
看看我会得到什么。
更重要的是,做所有这些事情吗?我上面提到的命令行仍然构建了一个适合在Python 2和Python 3环境中被其他人使用的通用包,不是吗?
在你看到2.7
或3.5
或其他Python版本的任何地方,该列都是基于当前用于构建的Python版本设置的by the bdist_wheel
command,但这是错误的值。这是车轮项目问题跟踪器中的bug 102。
这也是PyPI项目中的reported as a bug。它真的应该说py2.py3
所有这些项目。幸运的是,用于安装轮子的工具并不重要,该列说,你仍然有一个万向轮,它将用于Python 2或Python 3上的安装。
这不是PyPI的错误,但该字段由进行上载的工具设置。 file_upload()
XML-RPC handler从上传器获取值不变,并将其插入数据库以供以后显示。当使用setuptools upload
时,该值最终来自构建分发文件的代码,因此在这种情况下为bdist_wheel
。
如果你非常关心你自己的项目列出正确的信息,那么我建议你改用twine
uploader;这个包extracts the pyversion
field from the wheel filename。任何在Py Version列中设置了py2.py3
的项目,都使用该工具进行上传。 Twine还有许多其他优点,尤其是您可以使用它通过HTTPS安全上传文件。
至于any
值,可以通过在PyPI界面中手动上传文件来设置,也可以是我不了解的其他工具或以前版本的twine
或setuptools bdist_wheel
。
自从提出这个问题以来,PyPI设计已从项目页面中删除了“Py Version”; Py版本似乎与轮标签或用于上传软件包的Python版本有关,并且不会影响哪些版本的Python可以下载源软件包。
PyPI确实具有Requires-Python元数据Requires: Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
(如果可用)。此标记独立于包格式,并且是pip中的一个相对较新的功能,它控制安装程序是否将尝试在目标Python版本中安装特定项目。