Twine无法上传到pypi.org

时间:2017-08-18 20:52:50

标签: python pypi twine

我在python.pypi.org上有一个python包(xyz)。我正在尝试发布新版本,我正在使用twine上传。我修复了〜/ .pypirc文件中的所有内容,如教程中所述。当我运行以下命令时:

twine upload dist/*

我得到了以下输出:

  

将分发上传到https://upload.pypi.org/legacy/

     

上传xyz-1.9.1.tar.gz

     

HTTPError:400客户端错误:提供:无效要求:'xyz(1.9.1)'   对于网址:https://upload.pypi.org/legacy/

我不确定为什么会这样,但我猜它可能是我的setup.py文件,但这里是我的setup()部分中的块。

setup(
name='xyz',
version=__version__,
author='xyz',
author_email='xyz',
description='xyz package for xyz',
long_description=long_description,
url='xyz',
packages=PACKAGES,
package_dir=PACKAGE_DIR,
package_data=PACKAGE_DATA,
ext_modules=EXTENSIONS,
license='MIT License',
keywords=('xyz'),
classifiers=[
             'Development Status :: 5 - Production/Stable',
             'Intended Audience :: Education',
             'Intended Audience :: Science/Research',
             'License :: OSI Approved :: MIT License',
             'Operating System :: MacOS',
             'Operating System :: Microsoft :: Windows',
             'Operating System :: POSIX',
             'Programming Language :: Python',
             'Programming Language :: Python :: 2',
             'Programming Language :: Python :: 3',
             'Topic :: Scientific/Engineering :: xyz',
             'Topic :: Scientific/Engineering :: xyz',
            ],
scripts=SCRIPTS,
requires=['NumPy (>=1.7)', ],
provides=['xyz'.format(__version__)]

有人可以帮我这个吗?感谢。

注意:“xyz”是包的替换名称。没有重复的包裹。

1 个答案:

答案 0 :(得分:1)

(我假设provides=['xyz'.format(__version__)]中的setup.py行实际上是provides=['xyz ({})'.format(__version__)],否则这没有任何意义。)

首先,provides的{​​{1}}和requires参数已被弃用,据我所知,从未真正用于任何事情。 setup()现在应拼写为requiresinstall_requires没有替代品,因为试图赋予该字段任何正式含义会导致问题超过此类字段可能带来的微不足道的好处。但是,如果您坚持使用provides,则由于某种原因,PyPI似乎要求字段的值为有效的需求字符串,provides不是;有效的要求看起来像“"xyz (1.9.1)"”或xyz == 1.9.1,但如前所述,这些都不是真正意义上的任何内容。

PS:我建议您阅读"Packaging and Distributing Projects"中的Python Packaging User Guide,了解现代推荐的Python包装实践。

相关问题