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”列表的工作。

未解决的问题

我们是否需要能够在不手动修改 Makefile 的情况下禁用 3 个硬编码模块?[回答:不需要。]

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

[回答:使用 Distutils 构建 Python 二进制文件应该是可行的,尽管还没有人实现它。这应该有一天完成,但并不是当务之急,因为修改顶级 Makefile.pre.in 已经足够了。]


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

最后修改:2025-02-01 08:59:27 GMT