2014-10-09 37 views
4

我正在学习如何发布Python包,方法是遵循Python Packaging User Guide中的建议。我创建了一个简单setup.py基于setuptools的文档的Basic Use部分的示例:为什么我的Python包的分类器没有出现在测试PyPI上?

from setuptools import setup, find_packages 

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

    # metadata for upload to PyPI 
    author="Me", 
    author_email="[email protected]", 
    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包,并使用上传包的压缩包到测试的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 

回答

6

我证实,分类会出现在,当我跑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: [email protected] 
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,我想出一个解决方法是将这些关键字之一 - providesrequires,obsoletes - 传递给setup函数。例如,与此除了setup电话:

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

生成的本地PKG-INFO文件现在有元数据1.1版,而现在的分类出现在测试现场的PyPI。

相关问题