执行python setup.py install
PyPI包时,有人会遇到此警告吗?
install_requires
定义软件包的要求。许多PyPI软件包都有此选项。怎么可能是“未知分发选项”?
执行python setup.py install
PyPI包时,有人会遇到此警告吗?
install_requires
定义软件包的要求。许多PyPI软件包都有此选项。怎么可能是“未知分发选项”?
Answers:
python setup.py
使用不支持install_requires的distutils。setuptools这样做,还分发(它的后继),而pip(使用这两者之一)这样做。但是实际上您必须使用它们。即通过easy_install
命令或调用setuptools pip install
。
另一种方法是从setup.py中的setuptools导入安装程序,但这不是标准方法,这使得每个想要使用您的软件包的人都必须安装setuptools。
pip
,那么setup.py
如果我只想就地构建扩展程序,该如何运行文件?
python setup.py sdist
和安装代码pip install resulting_package.tar.gz
。您还可以使用pip install -e
直接从源代码安装,但我总是选择软件包或仓库直接安装..
pip install pendulum==1.4.4
。运行pip install setuptools --upgrade
清除错误。
这是我的Google搜索的第一个结果,但没有答案。我发现升级setuptools可以为我解决问题(并且可以通过点子获得很好的效果)
pip install --upgrade pip
pip install --upgrade setuptools
希望这有助于下一个人找到此链接!
pip3 install neovim-remote
。)
注意!注意!前面的答案不完善。要获取有关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。
setuptools
和distribute
项目正在合并在一起,但是合并尚未完成(我将尽快更新此文章改变)。” 有人知道截至2019年的情况吗?随着Python 2.7生命周期终止日期的临近,许多python软件包将处于更新和重新打包的过程中。
我在使用python 2.7.11的Mac上。我一直在创建极其简单明了的项目,我唯一的要求就是我可以运行python setup.py install
,并且setup.py
使用了distutils的setup命令。除了setup()
我在这里提到的内容以外,除了kwargs之外,实际上没有其他导入或代码。
当我的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(味精)
如果我将导入(以及其他内容)更改为以下内容:
from distutils.core import setup
import setuptools # noqa
警告消失。
请注意,我没有使用setuptools
,只是导入它会更改行为,以使其不再发出警告。对我来说,这是造成真正莫名其妙的差异的原因,其中我正在使用的某些项目发出这些警告,而另一些则没有。
显然,某种形式的猴子修补正在进行中,并且受导入是否完成的影响。这可能不是每个研究此问题的人的情况,但是对于我正在工作的狭窄环境,这就是我一直在寻找的答案。
这与其他(社区)评论一致,该评论说distutils应该monkeypatch setuptools,并且在安装Ansible时遇到问题。Ansible过去似乎曾尝试允许不使用setuptools进行安装,然后再进行讨论。
https://github.com/ansible/ansible/blob/devel/setup.py
很多东西都悬而未决...但是,如果您正在寻找一个简单项目的简单答案,则可能应该只导入setuptools。
import setuptools
python上的ubuntu 16.04上,添加奇迹般地为我解决了这个问题。
这是distutils发出的警告,表示您没有安装setuptools。从http://pypi.python.org/pypi/setuptools安装它会删除警告。
sudo apt-get install python-dev # for python2.x installs
sudo apt-get install python3-dev # for python3.x installs
它将安装所有缺少的标题。它解决了我的问题
结论:
distutils
不支持install_requires
或entry_points
,setuptools
不。
变化from distutils.core import setup
在setup.py到from setuptools import setup
或重构你的setup.py只使用distutils
功能。
我来这里是因为我没有意识到entry_points
只是一个setuptools
功能。
如果你在这里想转换setuptools
到distutils
像我这样的:
install_requires
从setup.py中删除,然后仅将requirements.txt与pip
entry_points
为scripts
(doc)并重构所有依赖于entry_points
带有shebang和入口点的完整脚本的模块。据我所知,这是setuptools中的一个错误,在调用标准库中的基类之前,它没有删除setuptools的特定选项:https ://bitbucket.org/pypa/setuptools/issue/29 /避免在调用时发出用户警告
如果你有一个无条件的import setuptools
在你setup.py
(你应该如果使用setuptools的特定选项),那么实际上脚本没有与失败ImportError
表明,setuptools的安装是否正确。
您可以按以下方式使警告静音:
python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>
只要当您使用无条件导入执行此操作,如果未安装setuptools,导入将完全失败:)
(我在合并后setuptools存储库的签出中看到了相同的行为,这就是为什么我确信这是setuptools错误而不是系统配置问题的原因。我希望合并前分发也会有同样的问题)