为什么我的Python包的分类器没有出现在测试PyPI上?

Jim*_*ngo 4 python packaging pypi

我正在学习如何按照Python Packaging用户指南中的建议发布Python包.我setup.py根据setuptools文档的Basic Use部分中的示例创建了一个简单的:

from setuptools import setup, find_packages

setup(
    name="HelloWorld",
    version="0.1",
    packages=find_packages(),

    # metadata for upload to PyPI
    author="Me",
    author_email="me@example.com",
    description="This is an Example Package",
    url = "http://example.com/HelloWorld/",
    classifiers = [
        'Development Status :: 3 - Alpha',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: Python Software Foundation License',
        'Operating System :: OS Independent',
        'Programming Language :: Python :: 2',
    ],
)
Run Code Online (Sandbox Code Playgroud)

我构建了源代码分发,在Test PyPI站点注册了HelloWorld包,并使用twine将包的tarball上传到Test PyPI站点.但是,分类器不会出现在Test PyPI的包页面上.此外,它们不在发行版的PKG-INFO中:

# https://testpypi.python.org/pypi?name=HelloWorld&version=0.1&:action=display_pkginfo

Metadata-Version: 1.1
Name: HelloWorld
Version: 0.1
Author: Me
Author-email: me at example com
Home-page: http://example.com/HelloWorld/
Summary: This is an Example Package
Platform: UNKNOWN
Run Code Online (Sandbox Code Playgroud)

Jim*_*ngo 6

我确认分类器确实出现在我运行时创建的PKG-INFO文件中setup.py sdist:

$ cat HelloWorld.egg-info/PKG-INFO

Metadata-Version: 1.0
Name: HelloWorld
Version: 0.1
Summary: This is an Example Package
Home-page: http://example.com/HelloWorld/
Author: Me
Author-email: me@example.com
License: UNKNOWN
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Python Software Foundation License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2
Run Code Online (Sandbox Code Playgroud)

但第一行显示元数据版本为1.0(PEP 241),但在元数据版本1.1(PEP 314)中添加了分类器.即使我使用的是最新版本的setuptools(6.0.2),也未正确检测到元数据版本.

问题的原因是我的系统Python.我正在使用Python 2.7.2附带的OS X 10.8(Mountain Lion),如本SO答案所述.此版本存在元数据版本检测错误,已在2.7.3修复.通过检查漏洞补丁,我想出了一个解决方法是通过这些关键字之一- ,,provides -对功能.例如,通过此次调用添加:requiresobsoletessetupsetup

setup(
    name="HelloWorld",
    version="0.2",
    # ...
    provides=['hours.of.debugging.fun'],
)
Run Code Online (Sandbox Code Playgroud)

生成的本地PKG-INFO文件现在具有元数据版本1.1,分类器现在出现在Test PyPI站点上.