2014-10-09 83 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。

相關問題