2011-11-28 70 views
68

在执行PyPI包的python setup.py install时是否有人遇到此警告?pypi UserWarning:未知分发选项:'install_requires'

install_requires定义了软件包的要求。很多PyPI包都有这个选项。它怎么可能是一个“未知分配选项”?

+0

[在制作python包时向setup.py添加'install \ _requires']可能有重复(https://stackoverflow.com/questions/9810603/adding-install-requires-to-setup- py-when-making-a-python-package) – tripleee

+0

@tripleee也许,但是这个问题早于那个问题。 –

+0

[问题年龄是次要问题](https://meta.stackoverflow.com/questions/251938/should-i-flag-a-question-as-duplicate-if-it-has-received-better-answers)但我没有强烈的意见。如果您希望重复提名的方式相反,可能会为可见性创建一个[meta]问题。就我个人而言,另一个问题的接受答案对我更有帮助,因为它更直接和专注。你似乎没有接受任何这些答案,所以这是你实际上可以改变的一个因素。 – tripleee

回答

8

这是来自distutils的警告,并且表示您没有安装setuptools。 从http://pypi.python.org/pypi/setuptools安装它将删除警告。

+26

setuptools已安装。仍然有警告。 –

+0

你说得很对,即使安装了setuptools或者distribution,我也会在Python 2.6.6中得到这个错误。如果我尝试使用2.7.2,它已经消失了。 –

+3

我在python 2.7.3中有这个问题 –

14

注意注意事项!前面的回答不完美。要获得关于Python世界中包装状态的“最新备忘录”,请阅读this fairly detailed essay

我试图构建/安装ansible时遇到了这个问题。问题似乎是distutils确实doesn't support install_requires。 setuptools should monkey-patch distutils在运行中,但它不,可能是因为从2009年开始setuptools的最新版本是0.6c11,而distutils是一个核心Python项目。

所以即使在手动安装setuptools-0.6c11-py2.7.egg之后,运行setup.py也只会启动distutils dist.py,而不会从site-packages/setuptools /启动distutils。

此外,setuptools文档提示使用ez_setup而不是distutils。

但是,现在setuptools本身是由distribute提供的,setup()支持install_requires。

+1

Downvoted,因为这个答案包含了一些关于什么是不同的东西的虚假和混淆。例如,ez_setup.py是setuptools的引导安装程序,并不是人们使用的“替代”distutils。大多数PyPI软件包不是“完全错误”的。 – Iguananaut

+1

@Iguananaut,感谢您审查答案;我编辑过它。 – PAStheLoD

+0

哦,很酷,谢谢。在这种情况下,我会重新投票赞成。)尼克·科格伦的文章与我的同事分享过,试图让他们围绕这些东西进行思考。 – Iguananaut

60

python setup.py使用不支持install_requires的distutils。 setuptools也会分发(其后继者)和pip(使用其中之一)。但你实际上必须使用它们。即通过easy_install命令或pip install调用setuptools。

另一种方法是从您的setup.py中的setuptools导入设置,但这不是标准的,并且使所有想要使用您的软件包的人都必须安装setuptools。

+3

假设我想使用'pip',那么如果我只想在原地创建扩展名,那么如何运行'setup.py'文件? –

+8

这个警告并不妨碍你打包你的代码,所以你可以运行'python setup.py sdist'并用'pip installresolve_package.tar.gz'安装它。你也可以使用'pip install -e'直接从源代码安装,但我总是喜欢直接从软件包或从版本库安装。 –

+0

这有点搞砸了。你总是可以尝试从setuptools首先导入设置,否则使用distutils并获取警告。然而,如果它在pypy中,由于setuptools没有正确关闭描述符(甚至在Debian上,默认ulimit -n为1024),最终可能会出现“太多打开的文件”:https://bugs.pypy.org/问题878 – fiorix

2

据我所知,这是在setuptools的地方不是在标准库中调用基类之前除去setuptools的特定选项的错误:https://bitbucket.org/pypa/setuptools/issue/29/avoid-userwarnings-emitted-when-calling

如果你有一个无条件import setuptools在你的setup.py(你应该如果使用setuptools特定的选项),那么脚本没有失败的事实ImportError表明setuptools已正确安装。

可以关闭该警告如下:

python -W ignore::UserWarning:distutils.dist setup.py <any-other-args> 

只有如果使用无条件进口,如果setuptools的没有安装:)

将完全失败(我这样做从合并后的setuptools回购中看到这种相同的行为,这就是为什么我相信这是一个setuptools错误而不是系统配置问题。我希望预合并分发会有同样的问题)

1
sudo apt-get install python-dev # for python2.x installs 
sudo apt-get install python3-dev # for python3.x installs 

它会安装任何缺少的标题。它解决了我的问题

相关问题