Following system colour scheme Selected dark colour scheme Selected light colour scheme

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 提出两种不同但未必冲突的解决方案

  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

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