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

Python 增强提案

PEP 297 – 支持系统升级

作者:
Marc-André Lemburg <mal at lemburg.com>
状态:
已拒绝
类型:
标准跟踪
创建日期:
2001 年 7 月 19 日
Python 版本:
2.6
发布历史:


目录

拒绝通知

由于未能引起显著兴趣,此 PEP 被拒绝。

摘要

此 PEP 提出了一种策略,允许对 Python 标准库进行部分升级,而无需重新安装整个发行版或等待新的补丁版本发布。

问题

默认情况下,Python 当前不允许覆盖标准库中的模块或包。尽管通过定义 `PYTHONPATH` 环境变量(此变量中定义的路径会添加到 Python 标准库路径之前)可以实现这一点,但没有标准方法可以在不更改配置的情况下实现此目的。

由于 Python 的标准库开始包含一些可单独提供的包,例如 distutils、email 和 PyXML 包,它们也可以独立于 Python 发行版进行安装,因此希望有一种选项可以升级这些包,而无需等待 Python 解释器的新补丁版本发布来引入更改。

在某些情况下,也可能希望在不经过整个 Python 发布周期的情况下更新标准库的模块,例如,以修复安全问题。

提议的解决方案

此 PEP 提出了两种不同的但并非necessarily冲突的解决方案

  1. 向 `sys.path` 添加新的标准搜索路径:`$stdlibpath/system-packages`,位于 `$stdlibpath` 条目之前。这补充了现有的站点附加项条目 `$stdlibpath/site-packages`,该条目在解释器启动时添加到 `sys.path`。

    为了利用这个新的标准位置,distutils 需要增加对将某些包安装到 `$stdlibpath/system-packages` 的支持,而不是安装到第三方包的标准位置 `$stdlibpath/site-packages`。

  2. 调整 distutils 以直接安装到 `$stdlibpath` 以进行系统升级,而不是安装到 `$stdlibpath/site-packages`。

第一个解决方案比第二个解决方案有几个优点

  • 升级易于识别(只需查看 `$stdlibpath/system-packages`)
  • 升级可以轻松卸载,而不会影响解释器安装的其余部分
  • 模块可以从包中“虚拟删除”;这是因为 Python 导入包的方式:一旦找到顶级包目录,它就会在该目录中进行后续的包子模块导入
  • 该方法比在现有安装之上进行 hackish 安装的设计总体上要干净得多

第二种方法的唯一优点是 Python 解释器无需更改,并且它适用于旧版本的 Python。

两种解决方案都需要对 distutils 进行更改。这些更改也可以由包作者实现,但最好定义一种切换到所提出行为的标准方法。

范围

解决方案 1:Python 2.6 及更高版本

解决方案 2:distutils 支持的所有 Python 版本

致谢

参考资料


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

最后修改:2025-02-01 08:55:40 GMT