Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

PEP 229 – 使用 Distutils 构建 Python

作者:
A.M. Kuchling <amk at amk.ca>
状态:
最终
类型:
标准跟踪
创建:
2000年11月16日
Python 版本:
2.1
发布历史:


目录

简介

Modules/Setup 机制存在一些缺陷

  • 人们必须记住取消 Modules/Setup 中某些部分的注释才能获得所有可能的模块。
  • Setup 迁移到 Python 的新版本很繁琐;添加了新模块,因此您不能只复制旧版本,而必须协调这两个版本。
  • 用户必须弄清楚所需的库(例如 zlib)安装在哪里。

提案

使用 Distutils 构建随 Python 附带的模块。

这些更改可以分解成几个部分

  1. Distutils 需要一些 Python 模块才能构建模块。目前我相信最少列表是 posix_srestring

    这些模块必须在可以使用 Distutils 之前构建,因此它们将简单地硬编码到 Modules/Makefile 中并自动构建。

  2. 将编写一个顶级 setup.py 脚本,该脚本检查系统上安装的库并编译尽可能多的模块。
  3. Modules/Setup 将被保留,其中的设置将覆盖 setup.py 的常规行为,因此您可以禁用已知存在错误的模块,或指定特定的编译或链接器标志。但是,在 setup.py 正确工作的常见情况下,Setup 中的所有内容都将保持注释状态。其他 Setup.* 变得不必要,因为没有任何东西会自动生成 Setup

该补丁已在 Python 2.1 中签入,并且随后进行了修改。

实现

SourceForge 上的补丁 #102588 包含提议的补丁。目前,该补丁试图保持谨慎并尽可能少地更改文件,以便简化撤消补丁的过程。例如,没有尝试删除现有的构建机制。此类简化可以在测试版周期后期等待,届时我们确定补丁将保留在内,或者可以等待 Python 2.2。

该补丁进行以下更改

  • 对 distutils/sysconfig 进行了一些必要的更改(这些更改将单独签入)
  • 在顶级 Makefile.in 中,“sharedmods”目标仅运行 "./python setup.py build",“sharedinstall”运行 "./python setup.py install"。“clobber”目标还会删除 Distutils 将其输出放置在其中的 build/ 子目录。
  • Modules/Setup.config.in 仅包含 gcthread 模块的条目;readlinecursesdb 模块已删除,因为现在由 setup.py 负责处理它们。
  • Modules/Setup.dist 现在仅包含 3 个模块的条目——_sreposixstrop
  • configure 脚本从 setup.cfg.in 构建 setup.cfg。这有两个原因:使在子目录中构建工作,以及获取配置的安装前缀。
  • setup.py 添加到源代码树的顶级目录。 setup.py 是拼图中最大的一块,尽管不是最复杂的一块。 setup.py 包含 BuildExt 类的子类,并使用 detect_modules() 方法扩展它,该方法负责确定何时可以编译模块并将它们添加到“exts”列表中。

未解决的问题

我们需要使能够禁用 3 个硬编码模块而无需手动修改 Makefile 吗?[答案:否。]

Distutils 始终将模块编译为共享库。我们如何支持将它们静态编译到生成的 Python 二进制文件中?

[答案:使用 Distutils 构建 Python 二进制文件应该是可行的,尽管还没有人实现它。这应该在将来某个时候完成,但这不是一个紧迫的优先事项,因为修改顶级 Makefile.pre.in 就足够了。]


来源:https://github.com/python/peps/blob/main/peps/pep-0229.rst

上次修改:2023-09-09 17:39:29 GMT