pypi UserWarning:未知的分发选项:'install_requires'

Tyl*_*ong 97 python distutils pypi

执行python setup.py installPyPI包时是否有人遇到此警告?

install_requires定义包所需的内容.很多PyPI包都有这个选项.它怎么可能是一个"未知的分发选项"?

Seb*_*ask 83

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

另一种方法是从setup.py中的setuptools导入安装程序,但这不是标准的,并且每个想要使用你的软件包的人都必须安装setuptools.

  • 警告不会阻止您打包代码,因此您可以运行`python setup.py sdist`并使用`pip install resul_package.tar.gz`进行安装.您也可以使用`pip install -e`直接从源代码安装,但我总是首选从软件包或直接从存储库安装. (11认同)
  • 假设我想使用`pip`,那么如果我只想在就地构建扩展,我该如何运行`setup.py`文件? (3认同)

小智 24

这是我谷歌搜索的第一个结果,但没有答案.我发现升级setuptools解决了我的问题(和pip for good measure)

pip install --upgrade pip
pip install --upgrade setuptools
Run Code Online (Sandbox Code Playgroud)

希望这有助于下一个人找到这个链接!


PAS*_*LoD 16

注意!注意!前面的答案不完整.要获得有关Python世界中包装状态的"最新备忘录",请阅读这篇相当详细的文章.

我在尝试构建/安装ansible时遇到了这个问题.问题似乎是distutils确实不支持 install_requires.Setuptools 应该动态地修补distutils,但事实并非如此,可能是因为setuptools的最后一个版本是2009年的0.6c11,而distutils是一个核心的Python项目.

因此,即使在手动安装setuptools-0.6c11-py2.7.egg之后,运行setup.py也只能选择distutils dist.py,而不是来自site-packages/setuptools /的那个.

setuptools文档还提示使用ez_setup而不是distutils.

但是,setuptools本身是由分发提供的,而setup()的味道支持install_requires.


Ala*_*nSE 11

我在Mac上使用python 2.7.11.我一直在努力创建非常简单和直接的项目,我唯一的要求是我可以运行python setup.py install,并且setup.py使用setup命令,理想情况下来自distutils.除了setup()我在这里注意到的之外,除了kwargs之外几乎没有其他的进口或代码.

我的setup.py文件导入时出现错误:

from distutils.core import setup
Run Code Online (Sandbox Code Playgroud)

当我使用它时,我会收到诸如此类的警告

/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267:UserWarning:Unknown distribution options:'entry_points'warnings.warn( MSG)

如果我将导入(以及其他任何内容)更改为以下内容:

from distutils.core import setup
import setuptools  # noqa
Run Code Online (Sandbox Code Playgroud)

警告消失了.

请注意,我没有使用setuptools,只是导入它会更改行为,使其不再发出警告.对我来说,这是一个真正莫名其妙的差异的原因,我正在使用的一些项目给出了这些警告,而另一些则没有.

很明显,正在进行某种形式的猴子修补,并且它是否受到导入的影响.这可能不是每个人研究这个问题的情况,但对于我正在工作的狭窄环境,这是我正在寻找的答案.


这与其他(社区)评论一致,该评论说distutils应该monkeypatch setuptools,并且他们在安装Ansible时遇到了问题.Ansible似乎试图在过去没有安装工具的情况下允许安装,然后重新开始.

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

很多东西都在空中......但如果你正在为一个简单的项目寻找一个简单的答案,你应该只需要导入setuptools.


Fre*_*ård 8

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

  • setuptools已安装.还有警告. (30认同)
  • 我在python 2.7.3中遇到了这个问题 (4认同)
  • 这样做对我来说:wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python (2认同)

Pri*_*han 8

sudo apt-get install python-dev  # for python2.x installs
sudo apt-get install python3-dev  # for python3.x installs
Run Code Online (Sandbox Code Playgroud)

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


Kar*_*ten 7

总之

distutils不支持install_requiresentry_points,支持setuptools

变化from distutils.core import setupsetup.pyfrom setuptools import setup或重构你的setup.py只使用distutils功能。

我来到这里是因为我没有意识到entry_points这只是一个setuptools功能。

如果你在这里想转换setuptoolsdistutils像我这样的:

  1. install_requiressetup.py 中删除,只需将requirements.txtpip
  2. 更改entry_pointsscripts( doc ) 并重构依赖于entry_points具有 shebangs 和入口点的完整脚本的任何模块。