将不同版本(python 2.7 vs 3.5)上传到 PyPI
Uploading different versions (python 2.7 vs 3.5) to PyPI
我有一个要上传到 PyPI 的包,其中包含两个不同版本的代码:一个用于 Python 2.7,一个用于 Python 3.5。
上传到 PyPI 的标准是什么?我是否使用两个单独的 setup.py
文件?
当用户运行pip install mypackage
会自动下载正确的版本吗?
TL;DR:在 setup.py
上添加 python_requires
。使用 twine 将包上传到 PyPI。
和 IPython 一样,它的 6.0.0+ 仅支持 Python 3.3+ 而 5.x 仍然支持 Python 2.x。如果您使用 pip
>= 9.0.1 安装它,pip install ipython
将 select 最新的 5.x for Python 2 和最新的 6.x for Python 3.
修改setup.py
首先,您需要在 setup.py
中设置 Requires-Python (PEP 440) 元数据,方法是将 python_requires
参数放在 setup()
函数上。
例如下面是Python 2.7版本的setup.py
:
setup(
name='some-package',
version='2.3.3',
...,
python_requires='==2.7.*'
)
对于Python 3.5+,只需将其更改为python_requires='>=3.5'
。
当然,两个包必须有不同的版本号。否则 PyPI 将拒绝一个。
您可以使用两个单独的 setup.py
文件来执行此操作,
或者只使用一个文件并动态设置 python_requires
参数。
上传到 PyPI
python setup.py sdist upload
似乎没有将包元数据(包含 Requires-Python)上传到 PyPI。
我发现最简单的正确方法是使用 twine.
Create some distributions in the normal way:
$ python setup.py sdist bdist_wheel
Register your project (if necessary)
Upload with twine
$ twine upload dist/*
对 Python 2 和 3 版本重复步骤 1 和 3。
我有一个要上传到 PyPI 的包,其中包含两个不同版本的代码:一个用于 Python 2.7,一个用于 Python 3.5。
上传到 PyPI 的标准是什么?我是否使用两个单独的 setup.py
文件?
当用户运行pip install mypackage
会自动下载正确的版本吗?
TL;DR:在 setup.py
上添加 python_requires
。使用 twine 将包上传到 PyPI。
和 IPython 一样,它的 6.0.0+ 仅支持 Python 3.3+ 而 5.x 仍然支持 Python 2.x。如果您使用 pip
>= 9.0.1 安装它,pip install ipython
将 select 最新的 5.x for Python 2 和最新的 6.x for Python 3.
修改setup.py
首先,您需要在 setup.py
中设置 Requires-Python (PEP 440) 元数据,方法是将 python_requires
参数放在 setup()
函数上。
例如下面是Python 2.7版本的setup.py
:
setup(
name='some-package',
version='2.3.3',
...,
python_requires='==2.7.*'
)
对于Python 3.5+,只需将其更改为python_requires='>=3.5'
。
当然,两个包必须有不同的版本号。否则 PyPI 将拒绝一个。
您可以使用两个单独的 setup.py
文件来执行此操作,
或者只使用一个文件并动态设置 python_requires
参数。
上传到 PyPI
python setup.py sdist upload
似乎没有将包元数据(包含 Requires-Python)上传到 PyPI。
我发现最简单的正确方法是使用 twine.
Create some distributions in the normal way:
$ python setup.py sdist bdist_wheel
Register your project (if necessary)
Upload with twine
$ twine upload dist/*
对 Python 2 和 3 版本重复步骤 1 和 3。