如何在 PyPI 中配置包以仅使用 pip3 安装

How to configure a package in PyPI to install only with pip3

我在 PyPI 上发布了用 Python 3 编写的包。 pip2pip3 都可以安装它。如何将包配置为仅在 Python 3 中可用;即只安装 pip3?

我已经在 setup.py 文件中添加了这些分类器:

classifiers=[
    ...
    # Supported Python versions.
    'Programming Language :: Python :: 3',
    'Programming Language :: Python :: 3.4',
    'Programming Language :: Python :: 3.5',
    ...
]

但是pip2还是可以安装的。

我不确定是否存在这样的选项。你可以做的是通过检查安装它的 python 版本是否大于你想要指示的版本来手动强制执行它:

from sys import version_info

class NotSupportedException(BaseException): pass

if version_info.major < 3:
    raise NotSupportedException("Only Python 3.x Supported")  

虽然这不会阻止从 pip2 访问它,但它应该会阻止任何试图使用旧版本 Python

的用户

pip 9.0.0setuptools 24.2.0 开始,您可以在 setup.py 中添加 python_requires 关键字作为 setup() 参数。这应该可以完全满足您的需求。

以下是一些有关其工作原理的示例(摘自 the docs): 如果您的包裹仅适用于 Python 3+,请写:

python_requires='>=3',

如果您的软件包适用于 Python 3.3 及更高版本,但您还不愿意承诺 Python 4 支持,请写:

python_requires='~=3.3',

如果您的软件包适用于 Python 2.6、2.7 和所有版本的 Python 3,从 3.3 开始,写:

python_requires='>=2.6, !=3.0.*, !=3.1.*, !=3.2.*, <4',