pypi 用户警告:未知的分发选项:'install_requires

135 投票
10 回答
173198 浏览
提问于 2025-04-17 07:13

有没有人遇到过在执行 python setup.py install 安装 PyPI 包时出现这个警告?

install_requires 是用来定义这个包需要哪些依赖的。很多 PyPI 包都有这个选项。那为什么会出现“未知的分发选项”呢?

10 个回答

20

我在用Mac,Python版本是2.7.11。我一直在尝试创建一些非常简单直接的项目,我唯一的要求就是能运行 python setup.py install,并且希望 setup.py 能使用设置命令,最好是通过distutils来实现。除了我在这里提到的内容,实际上没有其他的导入或代码。

当我的 setup.py 文件的导入是这样的时,我会遇到错误:

from distutils.core import setup

使用这个时,我会收到一些警告,比如:

/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: 用户警告: 未知的分发选项: 'entry_points' warnings.warn(msg)

如果我把导入改成(什么都不改)下面这样:

from distutils.core import setup
import setuptools  # noqa

警告就消失了。

需要注意的是,我并没有使用 setuptools,只是 导入 它就改变了行为,使得不再出现警告。对我来说,这造成了一个非常困惑的差异,有些项目会出现这些警告,而其他一些则不会。

显然,这里发生了一种“猴子补丁”的情况,是否导入会影响到这一点。这可能不是每个人在研究这个问题时都会遇到的情况,但在我工作的这个特定环境中,这就是我想要的答案。


这和其他(社区)评论一致,评论说distutils应该对setuptools进行猴子补丁,他们在安装Ansible时遇到了这个问题。Ansible似乎曾经尝试允许在没有setuptools的情况下安装,但后来又改变了主意。

https://github.com/ansible/ansible/blob/devel/setup.py

很多事情都不确定……但如果你在寻找一个简单项目的简单答案,可能只需要导入setuptools就可以了。

70

这是我在谷歌搜索时找到的第一个结果,但里面没有答案。

我发现升级setuptools解决了我的问题(顺便也升级了pip)。

pip install --upgrade pip
pip install --upgrade setuptools

希望这能帮助下一个找到这个链接的人!

102

python setup.py 这个命令使用的是 distutils,但它不支持 install_requires 这个功能。setuptools 是支持这个功能的,distribute(setuptools 的后续版本)和 pip(可以使用这两者)也支持。不过,你实际上需要使用它们。也就是说,你得通过 easy_install 命令或者 pip install 来调用 setuptools。

还有一种方法是在你的 setup.py 文件中从 setuptools 导入 setup,但这不是标准做法,会导致想要使用你这个包的人必须先安装 setuptools。

撰写回答