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

Python 增强提案

PEP 11 – CPython 平台支持

作者:
Martin von Löwis <martin at v.loewis.de>, Brett Cannon <brett at python.org>
状态:
活跃
类型:
流程
创建日期:
2002年7月7日
发布历史:
2007年8月18日, 2014年5月14日, 2015年2月20日, 2022年3月10日

目录

摘要

本 PEP 记录了操作系统(平台)如何在 CPython 中获得支持,目前支持哪些平台,并记录了过去的支持情况。

基本原理

随着时间的推移,CPython 源代码收集了各种平台特定的代码片段,这些代码在某个时间点被认为是CPython 在特定平台上运行所必需的。由于无法访问这些平台,因此无法确定这些代码是否仍然需要。因此,这些代码可能在 CPython 演进过程中失效,或者随着平台的演进而变得不必要。

允许这些代码片段增长会带来难以维护的风险:如果没有大量平台的专家,就无法确定 CPython 源代码的某个特定更改是否适用于所有受支持的平台。

为了降低这种风险,本 PEP 规定了平台获得 CPython 支持所需的条件,并提供了一个程序来删除用户较少或没有用户的平台的代码。

本 PEP 还列出了 CPython 解释器当前支持的平台。这让人们知道哪些平台直接受到 CPython 开发团队的支持。

支持层级

平台支持分为多个**层级**。每个层级都有不同的要求,从而对支持做出不同的承诺。

要晋升到某个层级,需要指导委员会的支持,并且预计将由团队共识推动。降级到较低层级的情况是,在发布经理或指导委员会的判断下,某个平台在较长时间内不再满足当前层级的要求。对于在新功能发布 b1 版本时不再满足任何层级要求的平台,将发布公告警告社区即将取消对该平台的支持(例如在 b1 公告中)。如果到第一个发布候选版本时,该平台仍未达到至少一个层级的要求,则将在本 PEP 中将其列为不受支持。

第一层

  • 状态
  • CI 失败会阻碍发布。
  • 不允许合并会导致 main 分支中断的更改;任何中断都应立即修复或回滚。
  • 所有核心开发者都有责任确保 main 以及这些平台正常运行。
  • 这些平台上的故障**会阻止发布**。
目标三元组 备注
aarch64-apple-darwin clang
aarch64-unknown-linux-gnu glibc, gcc
i686-pc-windows-msvc
x86_64-pc-windows-msvc
x86_64-unknown-linux-gnu glibc, gcc

第二层

  • 状态
  • 必须有一个可靠的 buildbot。
  • 至少有**两名**核心开发者签署支持该平台。
  • 任何导致这些平台中断的更改都必须在**24小时内修复或回滚**。
  • 这些平台上的故障**会阻止发布**。
目标三元组 备注 联系人
aarch64-unknown-linux-gnu glibc, clang Victor Stinner, Gregory P. Smith
wasm32-unknown-wasip1 WASI SDK, Wasmtime Brett Cannon, Michael Droettboom
x86_64-apple-darwin macOS, clang Sam Gross, Barry Warsaw, Ronald Oussoren
x86_64-unknown-linux-gnu glibc, clang Victor Stinner, Gregory P. Smith

第三层

  • 状态
  • 必须有一个可靠的 buildbot。
  • 至少有**一名**核心开发者签署支持该平台。
  • 对故障没有响应服务水平协议(SLA)。
  • 这些平台上的故障**不会阻止发布**。
目标三元组 备注 联系人
aarch64-linux-android Russell Keith-Magee, Petr Viktorin
aarch64-pc-windows-msvc Steve Dower
arm64-apple-ios 设备上的 iOS Russell Keith-Magee, Ned Deily
arm64-apple-ios-simulator M1 macOS 模拟器上的 iOS Russell Keith-Magee, Ned Deily
armv7l-unknown-linux-gnueabihf 32位树莓派操作系统, gcc Gregory P. Smith
aarch64-unknown-linux-gnu 64位树莓派操作系统, gcc Savannah Ostrowski
powerpc64le-unknown-linux-gnu glibc, clang

glibc, gcc

Victor Stinner

Victor Stinner

s390x-unknown-linux-gnu glibc, gcc Victor Stinner
wasm32-unknown-emscripten emcc Russell Keith-Magee
x86_64-linux-android Russell Keith-Magee, Petr Viktorin
x86_64-unknown-freebsd BSD libc, clang Victor Stinner

所有其他平台

对某个平台的支持可能在代码库中是部分的,例如由于围绕平台支持的积极开发或偶然。如果未列入上述层级的平台的代码更改导致维护负担或阻碍总体改进,则可能在不经过废弃流程的情况下被拒绝或从代码库中删除。

未在此处列出的平台可能以某种方式受到更广泛的 Python 社区的支持。如果您所需的平台未在上面列出,请在线搜索,查看是否有人已经以某种形式提供支持。

备注

Microsoft Windows

Windows 10 之前的 Windows 版本遵循微软的固定生命周期策略,主流支持阶段为发布后5年,在此期间产品通常商业可用,另有5年的扩展支持阶段,在此期间仍可获得付费支持并发布某些错误修复。扩展安全更新(ESU)是一项付费计划,可供大批量企业客户作为“最后手段”选项,在扩展支持结束后接收某些安全更新。ESU 被视为一个在扩展支持期满后独立的阶段。

Windows 10 及更高版本遵循微软的现代生命周期策略,该策略因产品、版本、版本和渠道而异。通常,功能更新(1709、22H2)每6-12个月发布一次,支持18-36个月;服务器和物联网版本以及 LTSC 渠道版本支持5-10年,主要版本(Windows 10、Windows 11)的最新功能版本通常在发布后至少10年内接收新更新。微软的Windows 生命周期常见问题有更具体和最新的指导。

CPython 的 Windows 支持目前遵循微软的生命周期。一个新的功能发布 X.Y.0 将支持所有其**扩展支持**阶段尚未到期的 Windows 版本。随后的错误修复发布将支持与原始功能发布相同的 Windows 版本,即使微软不再支持。在 CPython 处于维护模式期间发布的 Windows 新版本可能会由核心团队和发布经理酌情决定是否支持。

截至2024年,我们目前对微软生命周期的解读是,用于物联网和嵌入式系统的 Windows 不在新 CPython 发布的范围内,因为这些系统的目的是避免功能更新。Windows Server 通常将是仍在接收免费安全修复的最旧版本,这将决定最早支持的具有等效 API 版本的客户端发布(通常会超过其生命周期结束)。

每个功能发布都由特定版本的 Microsoft Visual Studio 构建。该版本在发布时应处于主流支持状态。扩展模块的开发者通常需要使用相同的 Visual Studio 版本;他们关注的是所需版本的可用性,以及保持版本种类较少。CPython 源代码树将保留未维护的旧 Visual Studio 版本的构建文件,这些文件的补丁将被接受。此类构建文件将在编译器扩展支持结束后3年从源代码树中删除(但仍可在版本控制中找到)。

传统C语言环境

从 CPython 3.7.0 开始,*nix 平台预期至少提供 C.UTF-8(完整区域设置)、C.utf8(完整区域设置)或 UTF-8(仅 LC_CTYPE 区域设置)作为传统 C 区域设置的替代方案。

任何仅在传统 C 区域设置中发生且无法在适当配置的非 ASCII 区域设置中重现的 Unicode 相关集成问题,将以“不修复”结案。

不再支持的平台

如果一个平台失去了分级支持,则必须在本 PEP 中发布一条说明,表明该平台不再受到积极支持。该说明必须包括

  • 系统名称,
  • 不再支持该平台的第一个发布版本号,以及
  • 积极删除历史支持代码的第一个发布版本。

在某些情况下,无法识别使用某些代码的特定系统列表(例如,当 autoconf 测试缺少某个被认为在所有受支持系统上都存在的功能时)。在这种情况下,名称将给出将不再受支持的精确条件(通常是预处理器符号)。

同时,CPython 构建必须更改为,如果有人尝试在该平台上安装 CPython,则会发出警告。在使用 autoconf 的平台上,configure 也应发出关于不支持平台的警告。

这让该平台的潜在用户有机会站出来提供维护。我们不会比从未支持的平台更糟糕地对待失去第3层支持的平台。

已停止支持的平台

  • 名称:MS-DOS, MS-Windows 3.x
    不支持于:Python 2.0
    代码移除于:Python 2.1
  • 名称:SunOS 4
    不支持于:Python 2.3
    代码移除于:Python 2.4
  • 名称:DYNIX
    不支持于:Python 2.3
    代码移除于:Python 2.4
  • 名称:dgux
    不支持于:Python 2.3
    代码移除于:Python 2.4
  • 名称:Minix
    不支持于:Python 2.3
    代码移除于:Python 2.4
  • 名称:Irix 4 和 –with-sgi-dl
    不支持于:Python 2.3
    代码移除于:Python 2.4
  • 名称:Linux 1
    不支持于:Python 2.3
    代码移除于:Python 2.4
  • 名称:定义 __d6_pthread_create 的系统 (configure.in)
    不支持于:Python 2.3
    代码移除于:Python 2.4
  • 名称:在 thread_pthread.h 中定义 PY_PTHREAD_D4, PY_PTHREAD_D6, 或 PY_PTHREAD_D7 的系统
    不支持于:Python 2.3
    代码移除于:Python 2.4
  • 名称:使用 –with-dl-dld 的系统
    不支持于:Python 2.3
    代码移除于:Python 2.4
  • 名称:使用 –without-universal-newlines 的系统,
    不支持于:Python 2.3
    代码移除于:Python 2.4
  • 名称:MacOS 9
    不支持于:Python 2.4
    代码移除于:Python 2.4
  • 名称:使用 –with-wctype-functions 的系统
    不支持于:Python 2.6
    代码移除于:Python 2.6
  • 名称:Win9x, WinME, NT4
    不支持于:Python 2.6 (2.5 安装程序中警告)
    代码移除于:Python 2.6
  • 名称:AtheOS
    不支持于:Python 2.6 (AtheOS 改为 Syllable)
    构建中断于:Python 2.7 (编辑 configure 重新启用)
    代码移除于:Python 3.0
  • 名称:BeOS
    不支持于:Python 2.6 (configure 中警告)
    构建中断于:Python 2.7 (编辑 configure 重新启用)
    代码移除于:Python 3.0
  • 名称:使用 Mach C 线程的系统
    不支持于:Python 3.2
    代码移除于:Python 3.3
  • 名称:SunOS 轻量级进程 (LWP)
    不支持于:Python 3.2
    代码移除于:Python 3.3
  • 名称:使用 –with-pth (GNU pth 线程) 的系统
    不支持于:Python 3.2
    代码移除于:Python 3.3
  • 名称:使用 Irix 线程的系统
    不支持于:Python 3.2
    代码移除于:Python 3.3
  • 名称:OSF* 系统 (问题 8606)
    不支持于:Python 3.2
    代码移除于:Python 3.3
  • 名称:OS/2 (问题 16135)
    不支持于:Python 3.3
    代码移除于:Python 3.4
  • 名称:VMS (问题 16136)
    不支持于:Python 3.3
    代码移除于:Python 3.4
  • 名称:Windows 2000
    不支持于:Python 3.3
    代码移除于:Python 3.4
  • 名称:COMSPEC 指向 command.com 的 Windows 系统
    不支持于:Python 3.3
    代码移除于:Python 3.4
  • 名称:RISC OS
    不支持于:Python 3.0 (部分代码已移除)
    代码移除于:Python 3.4
  • 名称:IRIX
    不支持于:Python 3.7
    代码移除于:Python 3.7
  • 名称:不支持多线程的系统
    不支持于:Python 3.7
    代码移除于:Python 3.7

讨论


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

最后修改:2025-10-09 17:15:34 GMT