【问题标题】:Why are the classifiers for my Python package not appearing on test PyPI?为什么我的 Python 包的分类器没有出现在测试 PyPI 上?
【发布时间】:2014-12-04 17:58:34
【问题描述】:

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

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',
    ],
)

我构建了源代码分发,在 Test PyPI site 注册了 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

【问题讨论】:

    标签: python packaging pypi


    【解决方案1】:

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

    $ 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
    

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

    问题的原因是我的系统 Python。我正在使用 Python 2.7.2 附带的 OS X 10.8 (Mountain Lion),如 this SO answer 中所述。这个版本有a bug in metadata version detection,也就是fixed in 2.7.3 。通过检查bug patch,我发现一种解决方法是将这些关键字之一——providesrequiresobsoletes——传递给setup 函数。例如,在 setup 调用中添加此内容:

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 2018-01-12
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多