【发布时间】:2017-07-03 11:17:56
【问题描述】:
当使用不受支持的 Python 版本时,我们可以在 setup.py 文件中添加什么来防止 pip 收集和尝试安装包?
例如magicstack 是一个使用 trove 分类器列出的项目:
Programming Language :: Python :: 3 :: Only
因此,如果 pip --version 与 python 2.7 相关联,我预计会出现以下行为:
$ pip install magicstack
Collecting magicstack
Could not find a version that satisfies the requirement magicstack (from versions: )
No matching distribution found for magicstack
但实际行为是 pip 收集一个版本,下载它,尝试安装它,然后失败。还有其他仅限 Python3 的版本,例如 curio,它们实际上安装得很好 - 因为 setup.py 没有使用任何 Python 3 特定的东西 - 只有在使用某些 Python 3 语法时才会在导入时失败。而且我确定有些软件包可以安装,导入正常,并且可能只会在运行时失败!
以 pip 尊重的方式指定支持的 Python 版本的正确方法是什么?我找到了一种解决方法,包括只上传一个 wheel 文件,并拒绝上传 .tar .gz 发行版,但我很想知道正确的修复方法。
编辑: 如果 Python/os/architecture 不匹配,pip 如何知道 不 下载轮子分发?它只是使用.whl filename convention 还是有比幕后发生的更复杂的事情?我们能否以某种方式将元数据提供给源分发,以使 pip 对 .tar.gz 上传做正确的事情?
【问题讨论】:
-
我不知道这是 正确的 答案...但是如果
magicstack是 python3 只是因为setup.py在 python2.x 上失败,那么它似乎像使这项工作的一种可能方法是强制您的setup.py在不适当的 python 版本上失败... -
哈奇。如果 pip 绑定到不受支持的 Python 解释器,我根本不希望收集或下载包,更不用说通过执行
setup.py尝试安装了。 -
相关:packaging.python.org/guides/…,其中提到“虽然分类器列表通常用于声明项目支持的 Python 版本,但此信息仅用于在 PyPI 上搜索和浏览项目,不适用于安装项目。要实际限制可以安装项目的 Python 版本,请使用 python_requires 参数。"
标签: python pip setuptools pypi python-packaging