标准库模块的importlib_resources
Python <3.7版的backportimportlib.resources
在setup.cfg文件中具有以下部分:
[options]
python_requires = >=2.7,!=3.0,!=3.1,!=3.2,!=3.3
setup_requires =
setuptools
wheel
install_requires =
pathlib2; python_version < '3'
typing; python_version < '3.5'
packages = find:
为什么要setup_requires
包含setuptools
?由于以下原因,这似乎没有意义:
setup.py文件的第一行将导入setuptools
,因此在setup
调用该函数并读取指示安装的setup.cfg文件时,setuptools
已经太晚了安装setuptools
:
from setuptools import setup
setup()
setuptools
已在任何全新的Python安装中安装(好,仅在Windows 10和带有Python 3.8.0的MacOS 10.15中进行了测试):
$ python -V
Python 3.8.0
$ pip list
Package Version
---------- -------
pip 19.2.3
setuptools 41.2.0
WARNING: You are using pip version 19.2.3, however version 19.3.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
不,根据PEP 518(粗体字强调),setuptools
不应该将其包括在内:setup_requires
Setuptools尝试使用
setup_requires
其setup()
函数的参数来解决此问题[3]。该解决方案存在许多问题,例如:
- 如果没有执行
setup.py
,没有工具(setuptools本身除外)无法访问此信息,但是setup.py
如果没有安装这些项目就无法执行。- 虽然setuptools的本身将安装在此列出的任何东西,他们将不会安装,直到期间的执行
setup()
功能,这意味着在这里添加实际使用任何的唯一方式是通过日益复杂的阴谋是延缓这些模块的进口和使用直到稍后执行该setup()
功能。- 它不能包含
setuptools
自身,也不能包含的替代品setuptools
,这意味着诸如此类的项目numpy.distutils
在很大程度上无法使用它,并且项目不能利用较新的setuptools功能,直到他们的用户自然将setuptools版本升级到较新的版本为止。setup_requires
每当您执行时,都会隐式安装中列出的项目,setup.py
但是执行的一种常见方式setup.py
是通过另一个工具(例如pip
已在管理依赖关系的工具)执行。这意味着类似的命令pip install spam
最终可能会同时使pip和setuptools都下载并安装软件包,并且最终用户需要配置这两种工具(并且setuptools
在不受控制的情况下)以更改设置(例如从哪个存储库安装)。这也意味着用户需要了解这两种工具的发现规则,因为它们可能支持不同的程序包格式或以不同方式确定最新版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句