将不同版本(python 2.7 vs 3.5)上传到PyPI

Sal*_*Sal 8 python pip pypi

我有一个包我正在使用两个不同版本的代码上传到PyPI:一个用于Python 2.7,另一个用于Python 3.5.

将此上传到PyPI的标准是什么?我是否使用两个单独的setup.py文件?

用户运行时pip install mypackage会自动下载正确的版本吗?

小智 9

TL; DR:添加python_requiressetup.py.使用twine将包上传到PyPI.

与IPython一样,它的6.0.0+仅支持Python 3.3+,而5.x仍然支持Python 2.x. 如果使用pip> = 9.0.1 安装它,pip install ipython将为Python 2选择最新的5.x,为Python 3选择最新的6.x.

修改 setup.py

首先,您需要通过将参数放在函数上来设置Requires-Python(PEP 440)元数据.setup.pypython_requiressetup()

例如,以下是setup.pyPython 2.7版本:

setup(
    name='some-package',
    version='2.3.3',
    ...,
    python_requires='==2.7.*'
)
Run Code Online (Sandbox Code Playgroud)

对于Python 3.5+,只需将其更改为python_requires='>=3.5'.

当然,两个包必须具有不同的版本号.否则PyPI将拒绝一个.

您可以使用两个单独的setup.py文件来执行此操作,或者只使用一个文件并python_requires动态设置参数.

上传到PyPI

python setup.py sdist upload似乎没有将包元数据(包含Requires-Python)上传到PyPI.

我发现最简单的方法是使用麻线.

  1. 以正常方式创建一些分布:

    $ python setup.py sdist bdist_wheel
    
    Run Code Online (Sandbox Code Playgroud)
  2. 注册您的项目(如有必要)

  3. 用麻线上传

    $ twine upload dist/*
    
    Run Code Online (Sandbox Code Playgroud)

对Python 2和3版本重复步骤1和3.