我正在学习如何按照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
答案 0 :(得分: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: 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,我发现一种解决方法是将其中一个关键字 - provides
,requires
,obsoletes
传递给setup
函数。例如,添加setup
调用:
setup(
name="HelloWorld",
version="0.2",
# ...
provides=['hours.of.debugging.fun'],
)
生成的本地PKG-INFO文件现在具有元数据版本1.1,分类器现在出现在Test PyPI站点上。