setuptools是否应该在Python中的setup.cfg文件的setup_requires条目中?

马吉格罗

标准库模块的importlib_resourcesPython <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_requiressetup()函数参数来解决此问题[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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否应该在Python的setup_requires中包含setuptools?

我是否应该在包中包含非Python文件?

是否应该在PWA中缓存ServiceWorker文件?

用Cython进行setup_requires吗?

条件setup_requires setup.py中的依赖项

是否应该在.h文件中定义静态和内联函数?

System 是否应该在 Xamarin.Android 类文件中显式导入?

是否应该在config.xml文件中声明phonegap插件?

C ++库中的文件打开接口是否应该在Windows上使用UTF-8?

网页的每个 Javascript 函数是否都应该在自己单独的 .js 文件中定义?

您是否应该在头文件中对 IAsyncAction/IAsyncOperation 协程(函数)进行原型设计?

Tkinter 应该在一个单独的 python 文件中还是可以在相同的代码中?

setup_requires似乎没有安装依赖项

我应该在每个python文件中添加shebang行吗?

Python OOP - def main() 应该在 .py 文件中的任何类之外吗?

证书和fastlane文件是否应该在XCode项目中提交给git?

hadoop用户应该在sudoers文件中吗?

.gitignore 文件应该在 IntelliJ 中的什么位置?

无法打开应该在基本路径中的文件

我应该在Go中关闭日志文件吗?

我现在是否应该在我的 [InstallDelete] 部分中包含这些文件,因为它们不再需要?

Python - 不同的日志应该在不同的文件中,但出现在同一个文件中

我应该在项目中的每个文件中添加__future__语句吗?

C ++是否应该在删除文件之前检查文件是否存在?

C ++是否应该在删除文件之前检查文件是否存在?

我是否应该在一个文件锁,当我想删除它?

Gzip是否应该在解压缩期间遵循原始文件名?

是否应该在每个组件或根组件(Webpack入口文件)中放置全局CSS?

如果使用Webpack,是否应该在tsconfig.json中指定根文件?