更新日志

Python 下一版

发布日期: XXXX-XX-XX

macOS

  • gh-137450: macOS 安装程序 shell 路径管理的改进:拆分安装程序的 Shell profile updater 安装后脚本与 Update Shell Profile.command 以启用更健壮的错误处理。

  • gh-137134: 更新 macOS 安装程序以附带 SQLite 3.50.4 版。

Windows

  • gh-138314: Add winreg.DeleteTree().

  • gh-137136: Suppress build warnings when build on Windows with --experimental-jit-interpreter.

  • gh-137134: 更新 Windows 安装程序以附带 SQLite 3.50.4。

  • gh-135099: 修复了在 Windows 上当后台线程等待 PyMutex 而主线程正在关闭解释器时可能发生的崩溃。

  • gh-130727: 修复了对 WMI 的内部调用中一个竞争问题,它可能在高负载情况下导致 "invalid handle(无效句柄)" 异常。 由 Chris Eibl 提供补丁。

  • gh-76023: 使 os.path.realpath() 在非严格模式下忽略Windows错误1005。

  • gh-133779: 撤销了根据编译器设置生成不同的 pyconfig.h 文件的更改,因为它经常导致扩展构建失败。特别是,当为实验性自由线程运行时编译时,Py_GIL_DISABLED 预处理器变量现在必须始终明确定义。sysconfig.get_config_var() 函数可用于确定当前运行时是否是用该标志编译的。

  • gh-133626: 确保包不会意外捆绑到传统安装程序中。

  • gh-133580: Fix sys.getwindowsversion() failing without setting an exception when called on some WinAPI partitions.

  • gh-133572: Avoid LsaNtStatus to WinError conversion on unsupported WinAPI partitions.

  • gh-133568: Fix compile error when using a WinAPI partition that doesn't support the RPC runtime library.

  • gh-133562: Disable handling of security descriptors by os.mkdir() with mode 0o700 on WinAPI partitions that do not support it. This only affects custom builds for specialized targets.

  • gh-133537: Avoid using console I/O in WinAPI partitions that don’t support it

  • gh-131942: Use the Python-specific Py_DEBUG macro rather than _DEBUG in Windows-related C code. Patch by Xuehai Pan.

工具/示例

  • gh-137873:iOS 测试运行器已简化,解决了在 GitHub Actions 和 Azure Pipelines 测试环境中使用该运行器时观察到的一些问题。

  • gh-137484: Have Tools/wasm/wasi put the build Python into a directory named after the build triple instead of "build".

  • gh-137248: Add a --logdir option to Tools/wasm/wasi for specifying where to write log files.

  • gh-137243: Have Tools/wasm/wasi detect a WASI SDK install in /opt when it was directly extracted from a release tarball.

  • gh-136251:针对 Tools/wasm/emscripten/web_example 的修复与可用性改进

  • gh-135968: 现在,strip 工具的存根文件已作为 iOS 安装包的一部分提供。

  • gh-135379: The cases generator no longer accepts type annotations on stack items. Conversions to non-default types are now done explicitly in bytecodes.c and optimizer_bytecodes.c. This will simplify code generation for top-of-stack caching and other future features.

  • gh-134215: REPL 导入自动补全仅在明确指定时才建议私有模块。

测试

  • gh-135966: iOS测试平台现在将 app_packages 文件夹作为站点目录处理。

  • gh-135494: 修复regrtest以支持从 --pgo 测试中排除测试。由Victor Stinner提供补丁。

  • gh-132815: 修复 test__opcode 测试:在特化统计中添加 JUMP_BACKWARD 指令。

  • gh-135489: 在使用 --enable-optimizations 时,为 PGO 分析步骤中失败的测试显示详细输出。

  • gh-135401: Add a new GitHub CI job to test the ssl module with AWS-LC as the backing cryptography and TLS library.

  • gh-135120: 添加 test.support.subTests()

  • gh-134567: Expose log formatter to users in TestCase.assertLogs. unittest.TestCase.assertLogs() will now optionally accept a formatter that will be used to format the strings in output if provided.

  • gh-133744: 修复多进程中断测试。添加一个事件来同步父进程与子进程:等待直到子进程开始睡眠。由Victor Stinner提供补丁。

  • gh-133682: 修复了测试用例 test.test_annotationlib.TestStringFormat.test_displays,确保在字符串注释中正确处理复杂数据结构(列表、集合、字典和元组)。

  • gh-133639: 修复 TestPyReplAutoindent.test_auto_indent_default() 不运行 ``input_code``的问题。

安全性

  • gh-136053: marshal: 修复在反序列化 slice 对象时可能出现的崩溃。

  • gh-135661: 根据HTML5标准修复 html.parser.HTMLParser 中开始和结束标签的解析。

    • 不再接受在 </ 和标签名之间的空格。例如,</ script> 不会结束脚本部分。

    • 垂直制表符(\v)和非ASCII空格不再被识别为空白符。空白符只有 \t\n\r\f 和空格。

    • 空字符(U+0000)不再结束标签名。

    • 现在会忽略结束标签中标签名后的属性和斜杠,而不再在带引号的属性值中的第一个 > 处终止解析。例如:</script/foo=">"/>

    • 现在在开始和结束标签中忽略最后一个属性和闭合 > 之间的多个斜杠和空白符。例如,<a foo=bar/ //>

    • 属性名与属性值之间多个连续的 = 符号将不再被合并处理。例如:<a foo==bar> 会生成属性名为 "foo"、属性值为 "=bar" 的标签。

  • gh-135661: Fix CDATA section parsing in html.parser.HTMLParser according to the HTML5 standard: ] ]> and ]] > no longer end the CDATA section. Add private method _set_support_cdata() which can be used to specify how to parse <[CDATA[ --- as a CDATA section in foreign content (SVG or MathML) or as a bogus comment in the HTML namespace.

  • gh-102555: 根据HTML5标准修复 html.parser.HTMLParser 中的注释解析。--!> 现在结束注释。-- > 不再结束注释。支持异常结束的空注释 <--><--->

  • gh-135462: 修复 html.parser.HTMLParser 在处理特制输入时的二次方复杂度问题。现根据HTML5规范处理文件结束错误——自动闭合注释和声明,忽略标签。

  • gh-118350:修复 html.parser.HTMLParser 对可转义原始文本模式("textarea" 和 "title" 元素)的支持问题。

  • gh-135034: 修复了多个问题,这些问题允许使用精心构造的符号链接和硬链接绕过 tarfile 提取过滤器(filter="data"filter="tar")。

    解决了 CVE 2024-12718CVE 2025-4138CVE 2025-4330CVE 2025-4517

  • gh-133767: 修复在非"严格"错误处理程序中使用"unicode-escape"解码器时的释放后使用问题。

  • gh-133623: Indicate through ssl.HAS_PSK_TLS13 whether the ssl module supports "External PSKs" in TLSv1.3, as described in RFC 9258. Patch by Will Childs-Klein.

  • gh-128840: 在 ipaddress 中早期短路处理长IPv6地址,以防止过多的内存消耗和轻微的拒绝服务。

文档

  • gh-136155:我们现已在持续集成(CI)流程中增加了对EPUB构建过程中致命错误的检查。

  • gh-135171: 文档说明生成器表达式中最左边的 for 子句的 迭代器 是立即创建的。

  • bpo-45210: 文档说明错误指示器可能在tp_dealloc中设置,以及如何避免覆盖它。

核心与内置函数

  • gh-138192: Fix contextvars initialization so that all subinterpreters are assigned the MISSING value.

  • gh-138431: Fix a bug in the JIT optimizer when round-tripping strings and tuples.

  • gh-138372: Fix SyntaxWarning emitted for erroneous subscript expressions involving template string literals. Patch by Brian Schubert.

  • gh-138302: BINARY_OP now specializes to BINARY_OP_ADD_INT, BINARY_OP_SUBTRACT_INT or BINARY_OP_MULTIPLY_INT if operands are compact ints.

  • gh-61206: zipimport now supports zstandard compressed zip file entries.

  • gh-137384:修复了在程序关闭时,在终结器(finalizer)中使用 warnings 模块导致的崩溃问题。由 Kumar Aditya 提供补丁。

  • gh-138004: On Solaris/Illumos platforms, thread names are now encoded as ASCII to avoid errors on systems (e.g. OpenIndiana) that don't support non-ASCII names.

  • gh-137967: Show error suggestions on nested attribute access. Patch by Pablo Galindo

  • gh-137959: Replace the shim code added to every piece of jitted code with a single trampoline function.

  • gh-137883:修复了在调用带有关键字参数的函数时出现的无限递归问题。

  • gh-137079: 修复了在解析文件时的关键字拼写错误识别问题。 由 Pablo Galindo 编写补丁。

  • gh-137728:修复了即时编译器(JIT)处理大量局部变量时的问题。此前这种情况会导致段错误(segfault)。

  • gh-137716: Fix double period in AttributeError message for invalid mock assertions

  • gh-137576: 修复的当给出 PYTHONSTARTUP 时在来自 Basic REPL 的回溯中显示不正确的源代码问题。 由 Adam Hartz 编写补丁。

  • gh-137400:修复了在 自由线程 构建模式下,当使用 PyEval_SetProfileAllThreads()PyEval_SetTraceAllThreads() 函数(或其 Python 等效函数 threading.settrace_all_threads()threading.setprofile_all_threads())禁用所有线程的分析(profiling)或跟踪(tracing)功能时出现的崩溃问题。

  • gh-137400:修复了在 自由线程 构建模式下,当使用 PyEval_SetProfileAllThreads()PyEval_SetTraceAllThreads() 函数(或其 Python 等效函数 threading.settrace_all_threads()threading.setprofile_all_threads())禁用所有线程的分析(profiling)或跟踪(tracing)功能时出现的崩溃问题。

  • gh-120037: Disable user site packages directory when a ._pth file is used, even if it contains import site.

  • gh-58124: Fix name of the Python encoding in Unicode errors of the code page codec: use "cp65000" and "cp65001" instead of "CP_UTF7" and "CP_UTF8" which are not valid Python code names. Patch by Victor Stinner.

  • gh-136966: The object.__dict__ and __weakref__ descriptors now use a single descriptor instance per interpreter, shared across all types that need them. This speeds up class creation, and helps avoid reference cycles.

  • gh-137314:修复了一个回归问题,该问题导致原始 f-字符串 错误地解释了格式说明中的转义序列。现在,原始 f-字符串 能够正确保留格式规范中的字面反斜杠,与 Python 3.11 的行为保持一致。例如,rf"{obj:\xFF}" 现在会正确生成 '\\xFF' 而不是 'ÿ'。由 Pablo Galindo 提供补丁。

  • gh-137308:节点体中的独立文档字符串会被优化为 pass 语句,以确保节点体永远不会为空。否则,在调用 compile() 函数时会产生 ValueError 异常。

  • gh-137288:修复了一个布尔表达式字节码指令与正确异常处理器关联异常的漏洞。该问题导致部分布尔表达式的字节码指令未能正确关联到对应的异常处理逻辑。

  • gh-137291: The perf profiler can now be used if a previous frame evaluation API has been provided.

  • gh-134291:从即时编译器(JIT)中移除了部分较新的macOS API使用,以恢复对旧版macOS 10.15部署目标的支持兼容性。

  • gh-131338:在非 glibc 的 Linux 平台上禁用计算栈限制检查,以修复深度递归导致的崩溃问题。

  • gh-136870: 修正了在线程并发运行的代码对象的字节码进行去工具化时的数据竞争问题。

  • gh-132732: Optimize constant comparison for _COMPARE_OP_INT, _COMPARE_OP_FLOAT and _COMPARE_OP_STR in JIT builds

  • gh-127598: Improve ModuleNotFoundError by adding flavour text to the exception when the -S option is passed. Patch by Andrea Mattei.

  • gh-136801:修复 PyREPL 在多行 case 语句后对 match case 进行语法高亮显示的问题。由 Olga Matoula 贡献。

  • gh-74185: The __repr__() of ImportError and ModuleNotFoundError now shows "name" and "path" as name=<name> and path=<path> if they were given as keyword arguments at construction time. Patch by Serhiy Storchaka, Oleg Iarygin, and Yoav Nir

  • gh-116738: Make functions in syslog thread-safe on the free threaded build.

  • gh-116738: Make functions in pwd thread-safe on the free threaded build.

  • gh-136599: Improve performance of int hash calculations.

  • gh-136421:修复在并发初始化 datetime 时的崩溃问题。

  • gh-136541: 修复了x86-64和aarch64架构下性能跳转(perf trampolines)的相关问题。这些跳转代码在某些情况下未能正确生成,可能导致性能分析集成(perf integration)无法正常工作。由Pablo Galindo 提供补丁。

  • gh-107545: Improve the error messages that may be raised by setsockopt().

  • gh-136517: 修复了一个拼写错误,该错误会导致在设置 gc.DEBUG_UNCOLLECTABLE 模式时无法打印不可回收对象。

  • gh-136525:修复新创建线程的每线程字节码未被插桩的问题。

  • gh-132657: Improve performance of frozenset by removing locks in the free-threading build.

  • gh-136459: Add support for perf trampoline on macOS, to allow profilers wit JIT map support to read Python calls. While profiling, PYTHONPERFSUPPORT=1 can be appended to enable the trampoline.

  • gh-132661: Interpolation.expression 属性现在有了默认值——空字符串。

  • gh-132661:反映最近的 PEP 750 变更。

    禁止将 string.templatelib.Template 对象与 str 类型字符串进行拼接,同时禁止 t-字符串 字面量与字符串或 f-字符串 字面量进行隐式拼接。

  • gh-91636: While performing garbage collection, clear weakrefs to unreachable objects that are created during running of finalizers. If those weakrefs were are not cleared, they could reveal unreachable objects.

  • gh-109700: 修复了 PyDict_SetDefault() 函数中的内存错误处理问题。

  • gh-135552: Fix a bug caused by the garbage collector clearing weakrefs too early. The weakrefs in the tp_subclasses dictionary are needed in order to correctly invalidate type caches (for example, by calling PyType_Modified()). Clearing weakrefs before calling finalizers causes the caches to not be correctly invalidated. That can cause crashes since the caches can refer to invalid objects. Defer the clearing of weakrefs without callbacks until after finalizers are executed.

  • gh-136203: Improve TypeError error message, when richcomparing two types.MappingProxyType objects.

  • gh-78465: 修复 cls.__new__(cls, ...) 的错误消息,其中 cls 是不可实例化的内置或扩展类型(tp_new 设置为 NULL)。

  • gh-135904: Perform more aggressive control-flow optimizations on the machine code templates emitted by the experimental JIT compiler.

  • gh-129958: 在单引号插值字符串的格式说明符中换行时,需区分t-字符串和f-字符串的语法错误。

  • gh-135871: 在 自由线程 构建版本中,非阻塞互斥锁尝试在锁被占用时会立即返回,而不再进行短暂的忙等待。

  • gh-134584: Specialize POP_TOP in the JIT compiler by specializing for reference lifetime and type. This will also enable easier top of stack caching in the JIT compiler.

  • gh-135106: 将垃圾回收箱(trashcan)机制限制为仅作用于垃圾回收(GC)管理的对象,并在进入垃圾回收箱时取消对这些对象的跟踪,以防止垃圾回收机制与垃圾回收箱机制之间发生冲突。

  • gh-135379: Changes specialization of BINARY_OP for ints to only specialize for "compact" ints. This streamlines the fast path at the cost of fewer specializations when very large integers are used.

  • gh-135607: 修复 自由线程 构建版本中,对象析构函数可能存在的 weakref 竞态条件问题。

  • gh-135608: 修复涉及模块属性的 JIT 崩溃问题。

  • gh-82088: Improve performance of PyLongObject conversion functions PyLong_AsLongAndOverflow(), PyLong_AsSsize_t(), PyLong_AsUnsignedLong(), PyLong_AsSize_t(), PyLong_AsUnsignedLongMask(), PyLong_AsUnsignedLongLongMask(), PyLong_AsLongLongAndOverflow() for integers larger than 2**30 up to 30%.

  • gh-135551: Sorting randomly ordered lists will often run a bit faster, thanks to a new scheme for picking minimum run lengths from Stefan Pochmann, which arranges for the merge tree to be as evenly balanced as is possible.

  • gh-135543: 当调用 sys.remote_exec() 时发出 sys.remote_exec 审计事件,并将 remote_debugger_script 迁移到 cpython.remote_debugger_script

  • gh-135496: 修复f-string转换类型错误中的拼写错误("exclamanation" -> "exclamation")。

  • gh-135474: Specialize integer operations only on compact integers. This is a CPython internal change.

  • gh-135371: 修正 asyncio 调试工具以正确显示内部协程调用栈和外部任务依赖关系。python -m asyncio ps``和 ``python -m asyncio pstree 命令现在显示完整的执行上下文。由Pablo Galindo提供补丁。

  • gh-135422: Fix regression in SyntaxError messages after gh-134036.

  • gh-116738: 使 grp 中的函数在 自由线程 构建上线程安全。

  • gh-127319: 将XMLRPC、日志记录和HTTP服务器上的 allow_reuse_port 类变量设置为``False``。这匹配了之前Python版本的行为,即不允许端口重用。

  • gh-130077: 当遇到包含软关键字前缀名称的错误语法时,正确引发自定义语法错误。由Pablo Galindo提供补丁。

  • gh-131798: Optimize _CALL_LEN in the JIT when the length is known. Patch by Tomas Roun

  • gh-131798: Optimize _UNARY_NEGATIVE in JIT-compiled code.

  • gh-135148:修复了一个 bug,该 bug 会导致 f-字符串 调试表达式(使用 “=” 语法)错误地去除包含转义引号和 # 字符的字符串部分。由 Pablo Galindo 提供补丁。

  • gh-131798: Optimize _UNARY_INVERT in JIT-compiled code.

  • gh-131798: Optimize away _CALL_TYPE_1 in the JIT when the return type is known. Patch by Tomas Roun

  • gh-133136: 限制 自由线程 构建版本在多线程同时访问和调整大型字典或列表大小时的内存超额使用。

  • gh-131798: Optimize _CHECK_METHOD_VERSION into _CHECK_FUNCTION_VERSION_INLINE in JIT-compiled code.

  • gh-116738: 使 heapq 中的方法在 自由线程 构建上线程安全。

  • gh-134280: 禁用对布尔参数使用按位取反运算符 ~ 时的常量折叠优化。此举将弃用警告的触发时机从编译时调整至运行时。

  • gh-134876: 为未配置CONFIG_CROSS_MEMORY_ATTACH的Linux内核添加对 PEP 768 远程调试的支持。

  • gh-134889: 修复在优化 LOAD_FAST 时处理几个在栈上留下操作数的操作码的问题。

  • gh-134908: 修复在 自由线程 构建上迭代文本文件行时崩溃的问题。

  • gh-117852: Fix argument checking of athrow().

  • gh-132617: 修复 dict.update() 修改检查,当修改一个恰好共享相同底层键对象的不同字典时,可能错误地引发“更新期间字典被修改”错误的问题。

  • gh-131798: Allow the JIT to remove unnecessary _ITER_CHECK_TUPLE ops.

  • gh-134679: 修复 自由线程 构建的QSBR代码在更改对象的 __dict__ 属性时可能发生的崩溃。

  • gh-133912: 修复C API函数 PyObject_GenericSetDict 以处理具有内联值的扩展类。

  • gh-131798: Make the JIT optimizer understand that slicing a string/list/tuple returns the same type.

  • gh-134584: Add a reference count elimination pass to the JIT compiler. Patch by Ken Jin.

  • gh-131798: Optimize _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW.

  • gh-134381: 修复在调用 os.fork() 后使用未启动的 threading.Thread 时引发的 RuntimeError

  • gh-127960: PyREPL 交互式 shell 不再以设置为 _pyrepl 包内部的 __package____file__ 全局名称启动。由 Yuichiro Tachibana 贡献。

  • gh-130397: 移除 WASI 的 C 栈深度限制的特殊处理。由于 WebAssembly 内置的栈保护,这不构成安全问题。

  • gh-131798: JIT: replace _LOAD_SMALL_INT with _LOAD_CONST_INLINE_BORROW

  • gh-131798: Improve the JIT's ability to optimize away cached class attribute and method loads.

  • gh-128066: 修复了一个边缘情况,当 Python 在只读文件系统上被调用并尝试写入历史文件条目时,PyREPL 错误地抛出错误。

  • gh-131798: Improve the JIT's ability to narrow unknown classes to constant values.

  • gh-134268: Add _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW and use it to further optimize CALL_ISINSTANCE.

  • gh-131798: Split CALL_LIST_APPEND into several uops. Patch by Diego Russo.

  • gh-69605: 在 REPL 中自动补全导入时,现在如果没有找到候选,将不会发出建议,而不是从当前命名空间提出建议。

  • gh-134170: Add colorization to sys.unraisablehook() by default.

  • gh-91153:修复在并发修改 bytearray 对象时,因项赋值操作导致程序崩溃的问题。

  • gh-134158: 修复 REPL 中 f-字符串和 t-字符串双大括号的着色问题。

  • gh-134119: 修复在耗尽的模板字符串迭代器上调用 next() 时的崩溃问题。由 Jelle Zijlstra 提供补丁。

  • gh-134100: 修复了一个在导入的模块在初始导入后不在 sys.modules 中时出现的释放后使用错误。由 Nico-Posada 提供补丁。

  • gh-134036: Improve SyntaxError message when using invalid raise statements.

  • gh-133999: 修复 gh-123440except 解析中的 SyntaxError 回归。

  • gh-133886: 修复 sys.remote_exec() 对于非 UTF-8 区域设置中的非 ASCII 路径和 UTF-8 区域设置中的非 UTF-8 路径的问题。

  • gh-133703: 修复字典中的哈希表在某些情况下可能比预期大的问题。

  • gh-133778: 修复在 from __future__ import annotations 下定义的类的 __annotations__ 属性赋值无效的错误。

  • gh-133711: Implement PEP 686: Enable Python UTF-8 Mode by default. Patch by Adam Turner.

  • gh-132762: fromkeys() 在向一个大基础字典添加一小部分键时不再无限循环。补丁由 Angela Liss 提供。

  • gh-133541: 当语法高亮激活时,用户输入中的不一致缩进导致的新 REPL 崩溃现已修复。

  • gh-133516: 当常量 TrueFalseNone 在 NFKC 规范化后被用作标识符时,引发 ValueError

  • gh-131798: Allow the JIT to remove int guards after _GET_LEN by setting the return type to int.

  • gh-131798: Split CALL_ISINSTANCE into several uops, allowing the JIT to remove some of them.

  • gh-132554: Change iteration to use "virtual iterators" for sequences. Instead of creating an iterator, a tagged integer representing the next index is pushed to the stack above the iterable. For non-sequence iterators, NULL is pushed.

  • gh-130821: Enhance wrong type error messages and make them more consistent. Patch by Semyon Moroz.

  • gh-131798: Narrow the return type and constant-evaluate CALL_ISINSTANCE for a subset of known values in the JIT. Patch by Tomas Roun

  • gh-132542: 在 fork(2) 后更新 Thread.native_id 以确保准确性。由 Noam Cohen 提供补丁。

  • gh-132732: Automatically constant evaluate bytecode operations marked as pure in the JIT optimizer.

  • gh-127971:修复字符串搜索时越界读取字符串末尾外一个字符的问题。

  • gh-133379: Correct usage of arguments in error messages.

  • gh-127266: In the free-threaded build, avoid data races caused by updating type slots or type flags after the type was initially created. For those (typically rare) cases, use the stop-the-world mechanism. Remove the use of atomics when reading or writing type flags. The use of atomics is not sufficient to avoid races (since flags are sometimes read without a lock and without atomics) and are no longer required.

  • gh-130425: Add "Did you mean: 'attr'?" suggestion when using del obj.attr if attr does not exist.

  • gh-116738: Make the module json safe to use under the free-threading build.

C API

构建

  • gh-138061: Ensure reproducible builds by making JIT stencil header generation deterministic.

  • gh-128042: ./configure now warns when --enable-optimizations and CFLAGS=-O0 are both set, suggesting removing -O0 from CFLAGS for optimal performance. Patch by Taegyun Kim.

  • gh-132339: 添加对 OpenSSL 3.5 的支持。

  • gh-135621:PyREPL 不再依赖 Python 标准库中的 curses 模块。由 Łukasz Langa 贡献。

  • gh-135927: Fix building with MSVC when passing option /std:clatest.

  • gh-119132: 从CPython的自由线程构建中移除“实验性”标签。

  • gh-135497: 修复 configure.ac 脚本中 MAXLOGNAME 的检测。

  • gh-134923: 启用了基于配置文件的优化的Windows构建现在使用 /GENPROFILE/USEPROFILE 替代已弃用的 /LTCG: 选项。

  • gh-134632: 修复 build-details.json 生成以使用 INCLUDEPY,以便引用包含目录的 pythonX.Y 子目录,如 PEP 739 所要求,而不是顶级包含目录。

  • gh-134486: The ctypes module now performs a more portable test for the definition of alloca(3), fixing a compilation failure on NetBSD.

  • gh-134455: 修复了 build-details.json 生成,以使用 PEP 739 中定义的正确的 c_api.headers,而不是 c_api.include

  • gh-134273: 通过 CFLAGS_JIT 添加对 JIT 编译器标志配置的支持

  • gh-115119: Removed implicit fallback to the bundled copy of the libmpdec library. Now this should be explicitly enabled via --with-system-libmpdec set to no or --without-system-libmpdec. Patch by Sergey B Kirpichev.

  • gh-131769: 修复了在交叉构建中检测构建的 Python 是否为 pydebug 构建的问题。

  • gh-117088: AIX 链接器不支持 -h 选项,因此通过平台检查避免使用它

  • gh-123681: Check the strftime() behavior at runtime instead of at the compile time to support cross-compiling. Remove the internal macro _Py_NORMALIZE_CENTURY.

  • gh-127545: Fix crash when building on Linux/m68k.

Python 3.14.0 beta 1

发布日期: 2025-05-06

Windows

工具/示例

  • gh-130453: 允许在 pygettext 中传递具有相同函数名称的多个关键字参数。

  • gh-130195: 当调用 pygettext 未实现的 -a/--extract-all 选项时,添加警告消息。

测试

  • gh-133131: 当未显式指定设备时 iOS testbed 现在将选择最近发布的 "SE-class" 设备用于测试。

  • gh-91048: 添加了外部检查所有待处理的 asyncio 任务的能力,即使当前事件循环中没有任务被输入。

  • gh-109981: 对打开的文件描述符进行计数的 test helper 现在会在所有 Apple 平台上使用已优化的 /dev/fd 方式,而不是仅在 macOS 上。 这将避免由受保护的文件描述符导致的程序崩溃。

  • gh-132678: 向 -m test 添加 --prioritize。此选项允许用户指定哪些选定的测试应该首先执行,即使顺序是随机化的。这对于运行时间最长的测试特别有用。

  • gh-131290: Lib/test 中的测试现在可以正确地作为独立脚本执行。

安全性

  • gh-115322: readlinesubprocessctypes 背后的底层扩展模块现在会在之前未覆盖的代码路径上引发审计事件,这些路径可能导致与 C 函数调用和外部二进制执行相关的文件系统访问。ctypes.call_function 审计钩子也已修复,以使用无符号值作为其 function pointer

IDLE

  • gh-112936: 修复 IDLE:在单进程模式下没有 Shell 菜单项。

文档

  • gh-107006: 将 threading.local 的文档和示例代码从其文档字符串移至官方文档。

  • gh-125142: 作为内置帮助介绍文本的一部分,展示新的非基本 REPL 的键盘快捷键(F1、F2 和 F3)。

核心与内置函数

  • gh-133336: -J 不再保留供 Jython 使用。由 Adam Turner 提供补丁。

  • gh-133261: 修复一个错误,其中循环 GC 可能会因为对象看起来是不朽的而在垃圾箱中取消跟踪对象。当对象被添加到垃圾箱时,我们注意确保它们保持一个凡人引用计数。

  • gh-133346: 向 _colorize 模块添加了实验性的颜色主题支持。

  • gh-132917: 对于自由线程构建,在触发完整的自动垃圾回收之前检查进程内存使用量的增加。如果自上次回收以来使用的内存没有增加 10%,则推迟回收。

  • gh-91048: 添加一个新的 python -m asyncio ps PID 命令行接口,用于检查运行中的Python进程内的asyncio任务。显示一个扁平化的等待关系表。一个显示树状视图的变体也可用,命令为 python -m asyncio pstree PID。这两个命令对于调试异步代码非常有用。由Pablo Galindo、Łukasz Langa、Yury Selivanov和Marta Gomez Macias提供补丁。

  • gh-133304: 在RISC-V上为 PyFloat_Pack4()PyFloat_Unpack4() 修复NaN的"规范化"问题。

  • gh-133197: 为不兼容的字符串/字节前缀改进 SyntaxError 错误消息。

  • gh-133231: 添加观察JIT编译的新工具 : sys._jit.is_available()sys._jit.is_enabled()sys._jit.is_active()

  • gh-133194: ast.parse() 将不再解析新的 PEP 758 语法,如果传入旧的*feature_version*。

  • gh-131798: 将`CALL_LEN`拆分为几个uops,允许JIT在优化时移除它们。由Diego Russo提供补丁。

  • gh-131798: 对于_BUILD_STRING、_BUILD_SET使用 sym_new_type 而非 sym_new_not_null

  • gh-132942: 修复类型查找缓存中的两个竞争条件。这影响了自由线程构建并可能导致崩溃(显然很难触发)。

  • gh-131798: 在JIT中传播 _BINARY_OP_SUBSCR_TUPLE_INT 的返回类型。由Tomas Roun提供补丁

  • gh-132952: 通过导入私有`_io`模块而非 io,加速使用`-S` 参数的启动。这修复了Python 3.14开发早期引入的性能回归,并将性能恢复到Python 3.13的水平。

  • gh-131798: 允许JIT通过将返回类型设置为int来移除 _CALL_LEN 后的int守卫。由Diego Russo提供补丁

  • gh-131798:将 CALL_TUPLE_1 拆分为多个微操作单元(uops),使即时编译器(JIT)能够移除其中部分操作。由 Tomas Roun 提供补丁

  • gh-131798: 将 CALL_STR_1 拆分为多个微操作单元(uops),使即时编译器(JIT)能够移除其中部分操作。由 Tomas Roun 提供补丁

  • gh-132825: 增强对于不可哈希键/元素的错误消息,涉及 dictset。由Victor Stinner提交补丁。

  • gh-131591: 在 os.fork() 调用后,重置任何 PEP 768 远程调试的挂起调用。

  • gh-132713: 修复 repr(list) 的竞态条件:在调用 repr(item) 时保持对项的强引用。由Victor Stinner提交补丁。

  • gh-132661: 实现 PEP 750 (模板字符串) 。为t-strings添加新语法并实现新的内部 string.templatelib.Templatestring.templatelib.Interpolation 类型。

  • gh-132479: 修复在特定情况下编译器崩溃的问题,这些情况包括多个模块级注释包含推导式和其他嵌套作用域。

  • gh-132747: 修复当以 None 作为第二个参数调用 method__get__() 方法时发生的崩溃。

  • gh-132744: 现在某些调用会检查失控递归并尊重系统递归限制。

  • gh-132449: 看起来像是Python关键字拼写错误的语法错误现在会为拼写错误提供有用的修复建议。由Pablo Galindo Salgado贡献。

  • gh-132737: 支持分析需要 __main__ 的代码,例如 pickle

  • gh-132639: 在有限的C API中添加了 PyLong_AsNativeBytes(), PyLong_FromNativeBytes()PyLong_FromUnsignedNativeBytes()

  • gh-100239: 为 BINARY_OP/SUBSCR 在列表和切片上添加特化。

  • gh-132508: 在重新引发异常时,使用标记的整数在评估栈上表示指令偏移量。这避免了在低内存条件下需要装箱整数的情况。

  • gh-124476: 修复在C.UTF-8语言环境中从区域编码解码的问题。

  • gh-131927: 来自同一模块和行号的编译器警告现在只发出一次,匹配从用户代码发出的警告行为。这也可以通过 warnings 过滤器进行配置。

  • gh-132457: 使 staticmethod()classmethod() 泛型化。

  • gh-131798: 对于 _BUILD_LIST、_BUILD_SET、_BUILD_MAP,使用 sym_new_type 代替 sym_new_not_null

  • gh-131798: 将 CALL_TYPE_1 拆分为多个 uops,允许 JIT 移除其中的一些。

  • gh-132386: 修复了将字典子类作为 globals 参数传递给 exec() 时崩溃的问题。

  • gh-127682: 在创建和执行生成器表达式时不再调用两次 __iter__。从不可迭代对象创建生成器表达式时,只有在生成器表达式执行时才会引发异常。这使得生成器表达式的行为与其他生成器保持一致。

  • gh-132261: 类上注释和注释函数的内部存储现在在类字典中使用不同的键。这消除了访问 __annotate____annotations__ 属性时行为不可预测的各种边缘情况。

  • gh-132284: 如果未被覆盖,不要在类创建时包装基础的 PyCFunction 槽。

  • gh-130415: 提高了 JIT 移除未使用的常量和局部变量加载的能力,并修复了解除分配未使用值可能导致 JIT 代码崩溃或行为不正确的问题。

  • gh-126703: 修复了方法的定义与其 self 具有相同生命周期时可能出现的释放后使用问题。

  • gh-132286: 修复了删除 type.__annotations__ 时未删除 type.__annotate__ 的问题。

  • gh-131798: 通过将返回类型设置为 bool,允许 JIT 移除 _CONTAINS_OP_DICT 之后的额外 _TO_BOOL_BOOL 指令。

  • gh-124715: 防止调用 Py_DECREF() 时栈溢出。第三方扩展对象不再需要使用“垃圾桶”机制,因为 Py_DECREF() 宏中现在内置了保护。

  • gh-131798: 允许 JIT 编译器移除对列表、元组、字典和集合操作的一些类型检查。

  • gh-128398: 改进错误消息,当对象支持同步(或异步)上下文管理器协议时,使用 async with`(或 :keyword:`with)而不是 with (或 async with) 进入时。由Bénédikt Tran提供补丁。

  • gh-131798: 通过将返回类型设置为字符串,允许JIT在 _BINARY_OP_SUBSCR_STR_INT 之后移除unicode守卫。

  • gh-131878: 在新的REPL中处理主输入循环中未捕获的异常。

  • gh-131878: 在新的REPL中修复Windows上支持两个或更多码点的unicode字符。

  • gh-126835: 将常量折叠移动到窥孔优化器。重命名AST优化相关文件(Python/ast_opt.c -> Python/ast_preprocess.c),结构体(_PyASTOptimizeState -> _PyASTPreprocessState)和函数(_PyAST_Optimize -> _PyAST_Preprocess, _PyCompile_AstOptimize -> _PyCompile_AstPreprocess)。

  • gh-114809: 添加对启用JIT的macOS多架构构建的支持

  • gh-131507: PyREPL现在支持语法高亮。由Łukasz Langa贡献。

  • gh-130907: 如果在模块执行时访问模块对象的 __annotations__,则返回到目前为止定义的注释,而不缓存它们。

  • gh-130104: 三参数 pow() 现在会在必要时尝试调用 __rpow__()。之前它只在两参数 pow() 和二元幂运算符中被调用。

  • gh-130070: 修复了 exec() 传递字符串 source 和非 None closure 时的断言错误。由Bartosz Sławecki提供补丁。

  • gh-129958: 修复了一个错误,该错误允许在单引号 f-字符串 的格式说明符中不一致地使用换行符。由Pablo Galindo提供补丁。

  • gh-129858: 跟随 else 块的 elif 语句现在有特定的错误消息。

  • gh-69605: 向PyREPL添加模块自动完成功能。

  • gh-128555: 添加 sys.flags.thread_inherit_context 标志。

  • gh-123539: 改进了使用 import ... asfrom ... import ... as 时如果不是名称的 SyntaxError 消息。

  • gh-102567: -X importtime 现在接受值 2,表示如果导入的模块已经加载,也应打印 importtime 条目。由Noah Kim和Adam Turner提供补丁。

  • gh-116436: 改进了在 dict.update() 期间发生 TypeError 时的错误消息

  • gh-103997: 传递给"-c"的字符串参数现在会自动去除缩进,就像通过 textwrap.dedent() 处理一样。这使得"python -c"调用可以在shell脚本中缩进而不会导致缩进错误。(由Jon Crall和Steven Sun提供补丁)

  • gh-89562: 从 PySSLContext 结构中移除了 hostflags 成员。

C API

构建

  • gh-113464: 使用 cpython-bin-deps "externals" 仓库进行 Windows LLVM 依赖管理。Windows JIT 构建不再需要手动安装 LLVM。

  • gh-133183: iOS 编译器垫片现在在目标三元组中包含 IPHONEOS_DEPLOYMENT_TARGET,确保遵守 SDK 版本最低要求。

  • gh-133167: 修复了使用 --enable-optimizations--without-docstrings 的编译过程。

  • gh-133171: 由于自由线程构建不支持实验性 JIT 编译器,防止这些配置被结合使用。

  • gh-132758: 修复了使用尾调用解释器和 pystats 的构建问题。

  • gh-132649: PClayout 脚本现在允许在 Windows ARM64 上传递 --include-tcltk

  • gh-132257: 更改 GCC 上的默认 LTO 标志,不再传递 -flto-partition=none,并允许 LTO 的并行化。对于较新的 GNU make 和 GCC,这在 LTO 构建时间上有倍数级的加速,且性能无明显损失。

  • gh-132026: 修复了在 MIPS Linux 平台上平台三元组检测中未定义标识符的使用。

Python 3.14.0 alpha 7

发布日期: 2025-04-08

macOS

  • gh-124111: 更新 macOS 安装程序以使用 Tcl/Tk 8.6.16。

  • gh-131423: 更新 macOS 安装程序以使用 OpenSSL 3.0.16.。 由 Bénédikt Tran 提供补丁。

  • gh-131025: 更新 macOS 安装程序以使用 SQLite 3.49.1。

Windows

  • gh-131423: 更新捆绑的 OpenSSL 版本至 3.0.16。新构建还禁用了 uplink 支持,这可能与嵌入者相关,但对正常使用无影响。

  • gh-131453: 一些 SND_*MB_* 常量被添加到 winsound 中。

  • gh-91349: 将我们的 zlib 副本替换为 zlib-ng,以提高 zlib 的性能。

  • gh-131025: 更新 Windows 安装程序,附带 SQLite 3.49.1。

工具/示例

  • gh-132121: 在 pygettext 中始终转义不可打印的 Unicode 字符。

  • gh-131852: msgfmt 将不再向生成的 .mo 文件添加 POT-Creation-Date 以与 GNU msgfmt 保持一致。

测试

  • gh-131277: 允许通过 EnvironmentVarGuard.unset() 方法一次性取消设置一个或多个环境变量。由 Bénédikt Tran 提供补丁。

  • gh-131050: 如果底层的 TLS 库不支持有限域短暂 Diffie-Hellman,则跳过 test_ssl.test_dh_params

安全性

  • gh-131809: 将捆绑的 libexpat 更新至 2.7.1

  • gh-131261: 更新至 libexpat 2.7.0

  • gh-121284: 修复了在使用现代电子邮件策略扁平化电子邮件消息时,rfc2047 编码词的折叠错误。以前,当一个编码词对于一行来说太长时,它会被解码、跨行分割并重新编码。但是原始文本中的逗号和其他特殊字符可能会被保留未编码和未引用。如果生成的渲染电子邮件被传输或重新解析,理论上可以利用精心构造的编码词来欺骗标题行。

文档

核心与内置函数

  • gh-131798: 通过将返回类型设置为 bool,允许 JIT 在 _CONTAINS_OP_SET 后移除一个额外的 _TO_BOOL_BOOL 指令。

  • gh-132011: 修复了将 list.append() 作为未绑定方法调用时的崩溃问题。

  • gh-131998: 修复了在函数中使用未绑定方法 descriptor 对象时的崩溃问题,该函数中使用了绑定方法描述符。

  • gh-131591: 实现 PEP 768 (CPython的安全外部调试器接口)。在 sys 模块中添加一个新的 sys.remote_exec() 函数。此函数安排在一个单独的进程中执行一个Python文件。由Pablo Galindo、Matt Wozniski和Ivona Stojanovic提供补丁。

  • gh-131798: 当字符串类型已知时,允许JIT在真值测试中省略字符串守卫。

  • gh-131833: 根据 PEP 758,添加支持在使用多个异常类型时可选地删除分组括号。由Pablo Galindo提供补丁

  • gh-130924: 在函数作用域注解中使用一个名称不再触发为该变量创建单元格。这修复了Python 3.14早期alpha版本中的一个回归问题。

  • gh-131800: 提高实验性JIT为某些下标操作移除类型检查的能力。

  • gh-131738: 编译器为内置的any/all/tuple调用生成优化代码,这些调用针对生成器表达式。

  • gh-131719: 修复 free-threaded 构建中 _PyMem_FreeDelayed 缺少NULL检查的问题。

  • gh-131670: 修复 anext() 在同步 __anext__() 抛出异常时失败的问题。

  • gh-131666: 修复 anext_awaitable.close 对象的签名。由Bénédikt Tran提供补丁。

  • gh-130415: 在JIT构建中优化两个常量的比较

  • gh-129149: 在 PyLong_FromInt32(), PyLong_FromUInt32(), PyLong_FromInt64()PyLong_FromUInt64() 中添加对小和中型整数的快速路径。由Chris Eibl提供补丁。

  • gh-130887: 优化JIT的AArch64代码生成。由Diego Russo提供补丁

  • gh-130956: 优化JIT的AArch64代码生成。由Diego Russo提供补丁

  • gh-130928: 修复使用 'i' 标志格式化字节时的错误消息。由Maxim Ageev提供补丁。

  • gh-130935: 现在,只有在执行它们所在的块时,条件定义的类和模块级别的注解才会反映在 __annotations__ 中。由Jelle Zijlstra提供补丁。

  • gh-130775: 在 ast 位置中不因负的 columnend_column 崩溃。

  • gh-130704: 优化 LOAD_FAST 及其超级指令形式以减少引用计数开销。当我们可以证明帧中的引用比加载到堆栈上的引用更持久时,这些指令被替换为更快的变体,将借用引用加载到操作数堆栈上。

  • gh-88887: 修复多处理资源跟踪器进程泄漏问题,通常在作为PID 1运行Python时观察到。

  • gh-130115: 修复在某些平台上线程标识符被符号扩展的问题。

  • gh-99108: 添加基于HACL*的HMAC (RFC 2104)内置实现支持。由Bénédikt Tran提供补丁。

  • gh-130080: 实现PEP 765:禁止使用return/break/continue退出finally块。

  • gh-129900: 修复 SystemExit 内部的返回码未由REPL返回的问题。

  • gh-128632: 禁止将 __classdict__ 作为类型参数的名称。在某些情况下,使用此名称之前会使解释器崩溃。

  • gh-126703: 通过使用自由列表提高内置方法的性能。

  • gh-126703: 通过使用自由列表提高 range 的性能。

C API

  • gh-131740: 更新PyUnstable_GC_VisitObjects以遍历永久代。

  • gh-131525: PyTupleObject现在在新字段ob_hash中缓存计算出的哈希值。

构建

  • gh-131865: 当在Linux上使用SystemTap时,DTrace构建现在正确地将 CCCFLAGS 变量传递给 dtrace 命令。

  • gh-131675: 修复32位ARM目标的mimalloc库构建。

  • gh-131691: Windows上的clang-cl需要选项 /EHa 以正确支持SEH(结构化异常处理)。由Chris Eibl修复。

  • gh-131278: 为Windows构建添加优化标志 WITH_COMPUTED_GOTOS,以便在使用支持它的编译器(当前为clang-cl)时使用。由Chris Eibl提供补丁。

  • gh-130213: 更新捆绑的HACL*库以修复与旧版clang编译器的构建问题。

  • gh-130673: 修复在 JIT 构建过程中处理对象部分时潜在的 KeyError

Python 3.14.0 alpha 6

发布日期: 2025-03-14

macOS

Windows

  • gh-131020: pylauncher 在搜索 shebang 行时能正确检测 BOM。 由 Chris Eibl 修复。

工具/示例

  • gh-130453: 使得在 pygettext 中覆盖默认关键词成为可能。

  • gh-85012: 在编译 msgfmt 中的消息时能正确地重置 msgctxt

  • gh-130453: 扩展支持在 pygettext 中指定自定义关键词。

  • gh-130195: 当调用 pygettext 未实现的 -a/--extract-all 选项时添加警告信息。

  • gh-130057: 在 pygettext.py 中添加对翻译者注释的支持。

  • gh-130025: 现在 iOS testbed 可正确地处理被用作 Python 框架引用的符号链接。

  • gh-129911: 修复 pygettext 帮助输出中的关键词条目。

测试

  • gh-129200: 多个 iOS testbed 运行器现在可以同时启动而不会导致模拟器所有权的歧义。

  • gh-130292: 现在 iOS testbed 将能在之前未运行过 Xcode 测试(如 CI 配置)的机器上成功运行。

  • gh-130293: 终端彩色测试对于测试环境中的 TERM 变量将不再敏感。

  • gh-129401: 修复 test_repr_rlock 中检查 multiprocessing.RLock 表示的脆弱测试。

  • gh-126332: 增加了针对 pyrepl 的单元测试。

安全性

  • gh-127371: 避免了对 tempfile.SpooledTemporaryFile.writelines() 的无限缓冲。 在之前版本中,磁盘溢出仅并在行迭代器已耗尽之后才会被检查。 现在在每行写入之后都会进行。

文档

核心与内置函数

  • gh-131141: 修复在注册回调时 sys.monitoring 插桩中的数据竞争问题。

  • gh-130804: 修复新REPL中在Windows上对Unicode字符的支持问题。

  • gh-130932: 修复 _PyModule_IsPossiblyShadowing 中错误的异常处理

  • gh-122029: sys.setprofile()sys.settrace() 不会为 INSTRUMENTED_CALL_FUNCTION_EX 生成 c_call 事件,如果可调用对象是一个包装了C函数的方法,因为在这种情况下我们不会生成 c_return 事件。

  • gh-129964: 修复Windows on Arm上的JIT崩溃问题。由Diego Russo和Brandt Bucher提供补丁。

  • gh-130851: 修复在 自由线程 构建中,当构造一个包含非字节码编译器生成类型实例的 co_constscode 对象时的崩溃问题。

  • gh-128534: 确保 async for 循环的左右分支具有相同的源。将这些分支添加到 co_branches() 迭代器中。

  • gh-130794: 修复在 自由线程 构建中,当从多个短生命周期线程调整共享列表或字典大小时的内存泄漏问题。

  • gh-130415: 提高JIT对布尔上下文中整数的理解能力。

  • gh-130382: 修复从 Python/ceval.c Py_DECREF() 中未发送 PyRefTracer_DESTROY 的问题。

  • gh-130574: 将 RESUME 的编号从149更改为128。

  • gh-124878: 修复运行时结束期间可能导致访问已释放内存的竞争条件。

  • gh-130415: 提高实验性JIT基于真值测试结果缩小布尔值范围的能力。

  • gh-130618: 修复一个在使用带有非ASCII字符的 lambda 表达式的f-字符串时引发 UnicodeDecodeErrorSystemError 的bug。由Pablo Galindo提供补丁

  • gh-123044: 确保 match 情况中分支目标的位置在主体中,而不是在模式中。

  • gh-128534: 为 async for 循环添加分支监控(BRANCH_LEFTBRANCH_RIGHT 事件)。

  • gh-130163: 修复与并发更改和使用 sys 模块属性相关的可能崩溃问题。

  • gh-122029: INSTRUMENTED_CALL_KW 将在监控之前扩展方法,以更准确地反映实际行为。

  • gh-130415: 提高JIT在布尔上下文中优化字符串的能力。

  • gh-130396: 在确定C栈保护的限制时,对于linux和其他定义了 _GNU_SOURCE 的系统,使用实际的栈限制(来自 pthread_getattr_np(3))。

  • gh-128396: 修复在内联理解中调用 locals() 时发生的崩溃,该内联理解使用了与外部框架作用域相同的局部变量,其中变量是自由或单元变量。

  • gh-129107: 为 自由线程 修复两个更多的 bytearray 函数。

  • gh-127705: 为默认构建以及自由线程构建使用标记引用(_PyStackRef)。这在短期内会对性能有小的负面影响,但将来会实现更大的速度提升,并通过允许将来标记引用的单一实现显著降低维护成本。

  • gh-130094: 修复涉及并发导入的两个竞态条件,这些条件可能导致与 ModuleNotFoundError 相关的虚假失败。

  • gh-129107: 使 bytearray 迭代器在 自由线程 下安全。

  • gh-115802: 在支持的平台上,为JIT编译的代码使用更高效的“中等”代码模型。

  • gh-107956: 现在在平台无关的标准库目录中安装了一个 build-details.json 文件(PEP 739 实现)。

  • gh-116042: 修复标记器中无效转义的SyntaxErrors的位置。由Pablo Galindo提供补丁

  • gh-91079: 更改C栈溢出保护以考虑栈消耗量,而不是计数器。这在许多情况下允许更深的递归,但仍然保持安全。

  • gh-129715: 改进实验性JIT对返回到未知调用者的处理。

  • gh-129983: 修复 sre.c 中compile_template的数据竞争。

  • gh-129967: 修复了在 自由线程`构建中,当`repr(set) 与`set.clear()` 并发调用时出现的竞态条件。

  • gh-129953: 现在每当执行从解释器或JIT编译代码中逃逸时,内部(评估)栈会被溢出到内存。这在Python或内置扩展中不应有可观察的影响,但将为未来各种重要的优化创造条件。

  • gh-129515: 澄清了在条件表达式中,当在 if 之前或 else 关键字之后指定语句时的语法错误消息。

  • gh-129349: bytes.fromhex()bytearray.fromhex() 现在接受ASCII bytes字节类对象

  • gh-129149: 在 PyLong_FromSsize_t() 中添加了对中等大小整数的快速路径。由Chris Eibl提供补丁。

  • gh-129107: 使 bytearray自由线程 下安全。

  • gh-128974: 修复了当自定义属性通过带有副作用的 __str__() 实现时,在 UnicodeError.__str__ 中发生的崩溃。由Bénédikt Tran提供补丁。

  • gh-126085: typing.TypeAliasType 现在支持星号解包。

  • gh-125331: from __future__ import barry_as_FLUFL 现在在更多上下文中工作,包括在文件中使用、使用 -c 标志以及在REPL中同一行有多个语句时。以前,它仅在REPL的后续行中工作,并且在适当的标志直接传递给 compile() 时。由Pablo Galindo提供补丁。

  • gh-121464: 使同一 enumerate() 迭代器的并发迭代在自由线程下安全。参见` 自由线程中的迭代器策略 <https://github.com/python/cpython/issues/124397>`_。

  • gh-87790: 在新式字符串格式化的浮点数表示类型中(使用 format()f-字符串),支持下划线和逗号作为千位分隔符。由Sergey B Kirpichev提供补丁。

  • gh-124445: 修复对 typing.ParamSpec 泛型且用嵌套类型变量特化的泛型别名的特化。

  • gh-120608: 为自由线程构建适配 reversed()reversed() 在并发迭代可能看到同一对象的意义上仍非线程安全,但不会破坏解释器状态。

  • gh-100388: 当 __DATE__ 在构建时未定义时,通过将默认构建时间日期字符串改为UNIX纪元来修复 platform._sys_version() 方法。

  • bpo-44369: 改进错误关闭字符串的语法错误。由Pablo Galindo提供补丁。

C API

构建

  • gh-131035: 在Windows上使用clang-cl时,使用 -flto=thin 以加快构建时间。由Chris Eibl提供补丁。

  • gh-130740: 确保 Python.h``在 ``stdbool.h 之前被包含,除非 pyconfig.h 在此之前被包含或在某些特定平台上下文中。

  • gh-130090: 在Windows上使用 PlatformToolset=ClangCL 构建时,现在支持PGO(性能引导优化)。由Chris Eibl提供补丁,得到Steve Dover的宝贵支持。

  • gh-129819: 允许使用尾调用解释器构建JIT。

  • gh-129989: 修复一个bug,其中当向配置脚本提供 --without-tail-call-interp 时,尾调用解释器被启用。

  • gh-129838: 当使用最近的GCC版本和启用未定义消毒器编译时,不重新定义``_Py_NO_SANITIZE_UNDEFINED``。

  • gh-82909: 现在可以通过 Py_NO_LINK_LIB 关闭基于 #pragma 的与 python3*.lib 的链接。由 Jean-Christophe Fillion-Robin 提供补丁。

Python 3.14.0 alpha 5

发布日期:2025-02-11

macOS

  • gh-91132: 更新 macOS 安装程序以使用 ncurses 6.5。

工具/示例

  • gh-129248: iOS 测试运行器现在会从测试套件的每行输出中去除日志记录前缀。

  • gh-104400: 通过切换到 pygettext 中的 AST 解析器来修复提取过程中的几个错误。

测试

  • gh-129386: 添加 test.support.reset_code,可用于重置函数的各种字节码级优化和本地检测。

  • gh-128474: 禁用 test_embed 测试用例,这些用例在 BOLT 检测二进制文件上会导致段错误。这些测试仅在启用 BOLT 时被禁用。

  • gh-128003: 为回归测试运行器添加一个选项 --parallel-threads=N,该选项可以在多个线程中并行运行单个测试,以发现并发错误。请注意,大部分测试套件尚未进行线程安全审查或在必要时标注 @thread_unsafe

安全性

  • gh-105704: 当使用 urllib.parse.urlsplit()urllib.parse.urlparse() 时主机解析将不会拒绝包含方括号 ([]) 的主机名。 根据 RFC 3986 第 3.2.2 节 方括号仅适用于 IPv6 和 IPvFuture 主机。

  • gh-126108: 修正了 PySys_AddWarnOptionUnicode() 中的一个可能的 NULL 指针解引用。

  • gh-80222: 修复在使用现代电子邮件策略扁平化电子邮件消息时引用字符串折叠的错误。之前,当一个引用字符串被折叠以至于跨越多行时,周围的引号和内部转义将被省略。理论上,如果生成的渲染电子邮件被传输或重新解析,这可能会被用来使用精心构造的引用字符串欺骗标题行。

  • gh-119511: 修复 imaplib 模块中潜在的拒绝服务问题。当连接到恶意服务器时,可能导致分配任意数量的内存。在许多系统上,这是无害的,因为未使用的虚拟内存只是一个映射,但如果这达到了虚拟地址大小限制,可能会导致 MemoryError 或其他进程崩溃。在不寻常的系统或构建中,所有分配的内存都被触及并由实际 RAM 或存储支持,这可能会消耗资源,直到类似崩溃。

IDLE

  • gh-129873: 通过仅将idle.html的文本部分复制到idlelib/help.html来简化IDLE文档的显示。补丁由Stan Ulbrych提供。

文档

核心与内置函数

  • gh-100239: 用带有oparg NB_SUBSCR的BINARY_OP替换操作码BINARY_SUBSCR及其家族。

  • gh-129732: 修复自由线程构建版 _Py_qsbr_reserve 中的竞争问题。

  • gh-129763: 移除了内部的 LLTRACE 宏(改用 Py_DEBUG)。

  • gh-129715: 提高了生成器的JIT性能。

  • gh-129643: 修复自由线程构建版中 PyList_Insert() 的线程安全问题。

  • gh-129668: 修复自由线程构建版中当引发 MemoryError 时的竞争条件问题。

  • gh-129643: 修复自由线程构建版中 PyList_SetItem() 的线程安全问题。 由 Kumar Aditya 提供补丁。

  • gh-128563: 修复了一个问题,其中"lltrace"调试功能可能被错误地启用于某些帧。

  • gh-129393: 在FreeBSD上,sys.platform 不再包含主版本号。它总是 'freebsd',而不是 'freebsd13''freebsd14'

  • gh-129345: 修复当审计钩子引发异常时 syslog.openlog() 中的空指针解引用问题。

  • gh-129231: 优化 JIT 跟踪的内存布局。由 Diego Russo 提供补丁

  • gh-129149: 在 PyLong_FromUnsignedLong()PyLong_FromUnsignedLongLong()PyLong_FromSize_t() 中添加对中等大小整数的快速路径。

  • gh-129201: 自由线程版本的循环垃圾回收器已优化,条件性地在回收过程中使用 CPU 预取指令。这通过增加数据在需要时位于 CPU 缓存中的可能性,可以减少回收时间。如果长寿命对象(在完整回收后存活的对象)数量超过阈值,则启用预取指令。

  • gh-129093: 修复像 f'{expr=}' 这样的 f-字符串在表达式包含 != 时有时不显示完整表达式的问题。

  • gh-124363: 将 f-string 中的调试表达式视为原始字符串。由 Pablo Galindo 提供补丁

  • gh-128714: 修复函数对象的 get/set 魔术方法 __annotations____annotate____type_params__ 中的潜在竞争条件,并添加相关测试。

  • gh-128799: 当 except* 包装裸异常时,将其框架添加到回溯中。

  • gh-128842: 使用 pystats 收集 JIT 内存统计信息。由 Diego Russo 提供补丁。

  • gh-100239: 为紧凑整数的位逻辑操作专门化 BINARY_OP

  • gh-128910: 移除未文档化且未使用的私有 C-API 函数 _PyTrash_begin_PyTrash_end

  • gh-128807: 向自由线程 GC 添加标记阶段。这与 gh-126491 中所做的类似。由于自由线程 GC 没有分代且不是增量的,标记阶段会查找从已知根可达的所有对象。根是已知不是垃圾的对象,比如 sys 的模块字典。对于大多数程序,这个标记阶段应该使 GC 稍微快一些,因为通常每个对象做的工作更少。

  • gh-100239: 添加操作码 BINARY_OP_EXTEND,该操作码执行从内联缓存中访问的一对函数(守卫函数和特化函数)。

  • gh-128563: CPython 中添加了一种新型的解释器。该解释器对其指令处理程序使用尾调用。初步基准测试结果表明,在 pyperformance 上几何平均速度提高了7-11%(取决于平台),在Python密集型工作负载上速度提高了30%。该解释器目前仅适用于较新的编译器,如 clang-19。其他编译器将继续使用旧解释器。由 Ken Jin 提供补丁,Mark Shannon、Garret Gu、Haoran Xu 和 Josh Haberman 提供了在 CPython 中实现的想法。

  • gh-126703: 通过为迭代器对象使用自由列表,提高了迭代列表和元组的性能。

  • gh-127953: 在 sys.monitoring(和 sys.settrace)中处理 LINE 事件的时间现在与代码对象中的行数无关。

  • gh-128330: 在 REPL 退出时恢复终端控制字符。

  • gh-128016: 改进了无效转义序列的 SyntaxWarning 消息,以明确这些序列在未来的 Python 版本中会引发 SyntaxError。新消息还建议了可能的修复方法,即 Did you mean "\\e"?

  • gh-126004: 修复了 codecs.replace_errors() 错误处理程序中 UnicodeError.startUnicodeError.end 值的处理。由 Bénédikt Tran 提供补丁。

  • gh-126004: 修复了 codecs.backslashreplace_errors() 错误处理程序中 UnicodeError.startUnicodeError.end 值的处理。由 Bénédikt Tran 提供补丁。

  • gh-126004: 修复了 codecs.xmlcharrefreplace_errors() 错误处理程序中 UnicodeError.startUnicodeError.end 值的处理。由 Bénédikt Tran 提供补丁。

  • gh-127119: 稍微优化了 int 的析构器。

  • gh-127349: 修复了在 Python REPL 中调整终端大小时的错误。由 Semyon Moroz 提供补丁。

  • gh-125723: 修复当生成器帧比其生成器生命周期更长时 gi_frame.f_locals 导致的崩溃问题。由 Mikhail Efimov 提供补丁。

  • gh-126349: 添加 turtle.fill()turtle.poly()turtle.no_animation() 上下文管理器。由 Marie Roald 和 Yngve Mardal Moe 提供补丁。

  • gh-115911: 如果由于权限问题无法确定当前工作目录,则导入操作将不再引发 PermissionError。由 Alex Willmer 提供补丁。

  • gh-112713: 在 http.cookies 中添加了对 Partitioned cookie 标志的支持。

C API

构建

  • gh-129660: 从 PGO 训练中丢弃 test_embed,它在近期版本中的贡献被认为是可忽略的。

  • gh-128902: 修复由于缺乏 __attribute__((fallthrough)) 支持而在Clang 9及更早版本中出现的编译错误。

Python 3.14.0 alpha 4

发布日期: 2025-01-14

macOS

  • gh-127592: 当最小 macOS 版本早于 10.12 时禁用统一 Apple System Log API。

工具/示例

  • gh-128152: 修正了 Argument Clinic 的 C 预处理器解析器试图解析 C 注释里的预处理器指令的程序错误。 由 Erlend Aasland 提供补丁。

测试

  • gh-128690: 在PGO配置文件构建中暂时不使用test_embed,直到在某些配置中test_init_pyvenv_cfg失败的问题得到解决。

核心与内置函数

  • gh-128078: 修正了当附带默认的元组值使用 anext() 时导致的 SystemError。 由 Bénédikt Tran 提供补丁。

  • gh-128717: 修复了在 自由线程 构建版上其他线程激活的情况下设置递归上限时的崩溃问题。

  • gh-124483: 在生成操作码和 uop 元数据时,将 Py_DECREF 及其变体视为逃逸。这防止了 __del__ 方法导致 JIT 行为不正确的可能性。

  • gh-126703: 通过使用 freelist 提高了类方法的性能。

  • gh-128137: 更新 PyASCIIObject 布局以使用原子操作处理 interned 字段。由 Donghee Na 提供补丁。

  • gh-128192: 通过支持 RFC 7616 中指定的 SHA-256 摘要认证,升级了 urllib.request 的 HTTP 摘要认证算法。

  • gh-126868: 增加 int 分配中 freelist 的使用。

  • gh-114203: 为简单的递归调用优化 Py_BEGIN_CRITICAL_SECTION

  • gh-127705: 当设置 Py_STACKREF_DEBUG 时,添加 stackref 调试。查找所有双重关闭和泄漏,记录来源和最后的借用。

    受HPy调试模式的启发。https://docs.hpyproject.org/en/latest/debug-mode.html

  • gh-128079: 修复了一个由于 except* 不能正确地检查 ExceptionGroupsplit() 函数的返回值,导致在某些情况下发生崩溃的程序错误。 现在当 split() 返回无效对象时,except* 将引发一个 TypeError 并原来所引发的 ExceptionGroup 对象与其进行串连。

  • gh-128030: 避免当从非模块对象导入不存在的符号时由于在非模块对象上调用 PyModule_GetFilenameObject 所导致的错误。

  • gh-128035: 通过 ssl.HAS_PHA 表示 ssl 模块是否支持TLSv1.3握手后客户端认证(PHA)。由Will Childs-Klein提交补丁。

  • gh-127274: 向 co_flags 添加一个新标志 CO_METHOD,用于表示代码对象是否属于在类作用域中定义的函数。

  • gh-66409: 在 path initialization 期间,我们现在在退回搜索Python解释器目录之前检查 base_exec_prefix 是否与 base_prefix 相同。

  • gh-127970: 我们现在使用当前进程中使用的 libpython 运行时库的位置来确定在所有实现了由UNIX标准定义的 dladdr 函数的平台上的 sys.base_prefix —— 这包括Linux、Android、macOS、iOS、FreeBSD等。在Windows和macOS框架构建中已经是这种情况。

  • gh-127773: 对于具有不兼容 MRO 的类型,不使用类型属性缓存。

  • gh-127903: Objects/unicodeobject.c: 修复了在DEBUG构建中当没有内容可复制时 _copy_characters 的崩溃问题。

  • gh-127809: 修复了一个问题,在该问题中,实验性JIT可能为幂运算(****=)推断出错误的结果类型,从而导致错误或崩溃。

  • gh-126862: 修复了一个类继承自极其多的超类时可能出现的溢出问题。由Valery Fedorenko报告。由Bénédikt Tran提交补丁。

C API

构建

  • gh-128627: 对于 Emscripten 构建,函数指针转换调用 trampoline 现在使用 wasm-gc 的 ref.test 指令(如果可用),而不是 Wasm JS 类型反射。

  • gh-128472: 跳过使用计算跳转的函数的 BOLT 优化,修复了使用 LLVM 19 构建时的错误。

  • gh-115765: 现在需要 GNU Autoconf 2.72 来生成 configure。由 Erlend Aasland 提供补丁。

  • gh-123925: 修复在没有 libncursesw 但有 libncurses 的平台上构建 curses 模块的问题。

  • gh-90905: 添加对在 aarch64/arm64 macOS 上交叉编译到 x86_64 的支持。

  • gh-128321: 在检查 sqlite3 库函数是否可用时设置 LIBS 而不是 LDFLAGS。这修复了链接库的顺序问题,该问题在使用静态链接的 libsqlite3 时是不正确的。

  • gh-100384: 在 macOS 构建中对 unguarded-availability 报错,防止在旧版本的操作系统中使用不可用的符号。

  • gh-128104: 移除 Py_STRFTIME_C99_SUPPORT 条件,改为要求在构建时支持 C99 strftime(3) 说明符。当交叉编译时,没有构建时检查,假设支持。

  • gh-127951: 为 Windows 构建添加 --pystats 选项以启用性能统计收集。

Python 3.14.0 alpha 3

发布日期:2024-12-17

Windows

  • gh-127353: 允许在 Windows 上使用环境变量强制设置颜色输出。 由 Andrey Efremov 提供补丁。

  • gh-125729: 使 turtle 模块的存在依赖于 Tcl/Tk 安装程序选项。之前,模块总是安装,但没有 Tcl/Tk 时将无法使用。

工具/示例

测试

  • gh-127906: 在 test_cppext 中测试受限 C API。 由 Victor Stinner 提供补丁。

  • gh-127637: 增加针对 dis 命令行界面的测试。 由 Bénédikt Tran 提供补丁。

  • gh-126925: 现在 iOS 测试结果在测试执行期间流式输出,且已弃用的 xcresulttool 不再被使用。

  • gh-127076: 当设置了 LD_PRELOAD 时,禁用基于 strace 的系统调用测试。

  • gh-127076: 在使用 strace 测试 io 行为时,从与文件相关的调用中过滤掉与内存相关的 mmapmunmapmprotect 调用。

安全性

文档

核心与内置函数

  • gh-127740: 当给定奇数位数时,修复 bytes.fromhex() 中的错误消息,正确指示需要偶数位十六进制数字。

  • gh-127058: PySequence_Tuple 现在原子性地创建结果元组,防止垃圾收集器或通过 gc.get_referrers() 看到部分创建的元组。

  • gh-127599: 修复对象引用计数增加的统计(特别是当引用计数在单个操作中增加了超过1时)。

  • gh-127651: 当为 from 导入中缺失的符号引发 ImportError 时,如果 __spec__.origin 不是一个位置,则在错误消息中使用 __file__

  • gh-127582: 在自由线程构建中调用终结器和监视器回调时,修复非线程安全的对象复活。

  • gh-127434: iOS 编译器垫片现在可以接受带有空格的参数。

  • gh-127536: 在自由线程构建中,为一些列表分配操作添加缺失的锁。

  • gh-127085: 在 free-threaded 构建中,从 memoryview 对象导出缓冲区时修复竞态条件。

  • gh-127238: 更正 sys.set_int_max_str_digits() 的错误消息。

  • gh-113841: 修复 complex_Py_c_pow() 中可能未定义行为的除以零错误。

  • gh-127133: 现在,在参数组上调用 argparse.ArgumentParser.add_argument_group(),以及在互斥组上调用 argparse.ArgumentParser.add_argument_group()argparse.ArgumentParser.add_mutually_exclusive_group() 会抛出异常。这种嵌套从未被支持,经常无法正确工作,并且是通过继承无意中暴露的。此功能自Python 3.11起已被弃用。

  • gh-126491: 向GC添加一个标记阶段。所有可以从内置模块或堆栈中转引用的对象在循环检测之前被标记为可达。这将GC的工作量大约减少了一半。

  • gh-127020: 修复了在自由线程构建中,当 PyCode_GetCode()PyCode_GetVarnames()PyCode_GetCellvars()PyCode_GetFreevars() 被多个线程同时调用时发生的崩溃。

  • gh-127010: 简化了对字典的GC跟踪。所有字典在创建时即被跟踪,而不是在向它们添加可跟踪对象时延迟跟踪。这极大地简化了代码并带来了轻微的速度提升。

  • gh-126980: 修复了当 READWRITE 作为标志传递时,bytearray__buffer__() 崩溃的问题。

  • gh-126937: 修复了当 ctypes.Structure 的字段大小不适合无符号16位整数时引发的 TypeError。现在,最大位数是 sys.maxsize

  • gh-126868: 通过为紧凑整数添加自由列表,提高了 int 的性能。

  • gh-126881: 修复了dtoa状态在最终化时的崩溃。由Kumar Aditya提供补丁。

  • gh-126892: 要求冷代码或无效代码在被再次JIT编译之前“预热”。

  • gh-126091: 确保当抛出到以自定义生成器结束的生成器链中时,堆栈跟踪是完整的。

  • gh-126024: 优化包含非ASCII字符的短UTF-8序列的解码,大约提升15%。

  • gh-125420: 向 memoryview 对象添加 memoryview.index()。由 Bénédikt Tran 提供补丁。

  • gh-125420: 向 memoryview 对象添加 memoryview.count()。由 Bénédikt Tran 提供补丁。

  • gh-124470: 修复在自由线程构建中,当在另一个线程上读取属性时替换对象字典导致的崩溃。

  • gh-69639: 实现混合模式算术规则,结合实数和复数,符合自C99以来的C标准。由 Sergey B Kirpichev 提供补丁。

  • gh-120010: 修正无效的角落案例,这些案例在复数乘法中导致 (nan+nanj) 输出,例如 (1e300+1j)*(nan+infj)。由 Sergey B Kirpichev 提供补丁。

  • gh-109746: 如果 _thread.start_new_thread() 未能启动新线程,它会从解释器中删除其状态,从而避免在最终化时重复清理。

C API

构建

  • gh-127865: 修复了在没有线程本地支持的系统上的构建失败。

  • gh-127629: Emscripten 构建现在包括 ctypes 支持。

  • gh-127111: 更新了 Emscripten web 示例以使用 ES6 模块,并构建到一个独立的 web_example 子文件夹中。

  • gh-115869: 使 jit_stencils.h (在 JIT 构建期间生成) 可重现。

  • gh-126898: Python 的 Emscripten 构建现在基于 ES6 模块。

Python 3.14.0 alpha 2

发布日期:2024-11-19

Windows

  • gh-126911: 更新了 credits 命令输出。

  • gh-118973: 确保实验性的自由线程安装包含 _tkinter 模块。为了使模块工作,还必须安装可选的 Tcl/Tk 组件。

  • gh-126497: 修复了由于实验性自由线程安装中缺少重定向器可执行文件而导致的 venv 失败。

  • gh-126074: 从 Windows 可嵌入包中移除了不必要的 DLL。

  • gh-125315: 避免在某些 Windows 机器上由于 WMI 调用缓慢而在 platform 中崩溃。

  • gh-126084: 修复 venvwlauncher 以启动 pythonw 而非 python,从而避免创建额外的控制台窗口。

  • gh-125842: 修复当在 Windows 上调用 sys.exit() 并传入 0xffffffff 时引发的 SystemError

  • gh-125550: 开启 Python 安装管理器 对来自 Windows Store 的 Python 3.14 安装版的检测。

  • gh-123803: 现在 Windows 上的所有代码页都支持作为 "cpXXX" 编解码器。

工具/示例

  • gh-126807: 修复 pygettext.py 中因将函数定义误认为函数调用而导致的提取警告。

  • gh-126167: 修改了 iOS 测试床,使其可以被第三方项目用于测试目的。

测试

  • gh-126909: 修复 test_os 扩展属性测试,使其能在 xattr 大小限制为 1 KiB 的文件系统上工作。

  • gh-125730: 更改 make test 默认不运行 GUI 测试。使用 make ci 来运行包含 GUI 测试的测试。

  • gh-124295: 向 argparse 模块添加翻译测试。

安全性

  • gh-126623: 将 libexpat 升级到 2.6.4 版本

文档

  • gh-126622: 为已移除的模块添加存根页面,解释它们的移除、在哪里可以找到替代品,并链接到支持它们的最后一个 Python 版本。由 Ned Batchelder 贡献。

  • gh-125277: 构建 Python 文档需要 Sphinx 7.2.6 或更高版本。由 Adam Turner 提供补丁。

  • gh-60712: 在记录的类型列表中包括 object 类型。由 Furkan Onder 和 Martin Panter 更改。

核心与内置函数

  • gh-126795: 提高 JIT 代码热身的阈值。根据平台和工作负载,这可以带来 1-9% 的性能提升和 3-5% 的内存节省。

  • gh-126341: 现在当尝试迭代已释放的 memoryview 对象时,会引发 ValueError 而不是 SystemError

  • gh-126688: 修复了在包括 SerenityOS 在内的某些操作系统上调用 os.fork() 时发生的崩溃。

  • gh-126066: 修复 importlib 不会在 ulimit 或其他操作系统机制阻止写入完全通过时写入不完整的 .pyc 文件。

  • gh-126222: 不将“peek”项的计数包含在 _PyUop_num_popped 中。这确保了当微操作以错误退出时,从堆栈中弹出的项目数量是正确的。

  • gh-126366: 修复了在 __iter__ 中引发异常的对象上使用 yield from 时的崩溃。

  • gh-126209: 修复了 skip_file_prefixes 参数的问题,该问题导致 warnings.warn() 的 C 和 Python 实现之间的行为不一致。由 Daehee Kim 提供补丁。

  • gh-126312: 修复了在自由线程构建上由 gc.freeze() 冻结的对象进行垃圾回收时的崩溃。

  • gh-103951: 放宽优化要求,允许快速访问模块子类的属性。

  • gh-126072: 根据 gh-126101,对于像 lambda、注解和类型别名这样的 代码对象,我们不再向其 co_consts 添加 None

  • gh-126195: 通过使用平台特定的内存保护 API,在 macOS Apple Silicon 上提高 JIT 性能 1.4%。由 Diego Russo 提供补丁。

  • gh-126139: 当尝试使用带有未知未来特性的 future 语句 时,提供更好的错误位置。

  • gh-126072: 在 co_flags 中添加一个新属性,用于指示 co_consts 中的第一项是否为文档字符串。如果一个代码对象没有文档字符串,None不会 被插入。

  • gh-126076: 重新定位的对象,如 tuplebytesstr 对象,现在被 tracemalloc 及其相关钩子正确跟踪。由 Pablo Galindo 提供补丁。

  • gh-90370: 在使用 Argument Clinic 生成的代码中传递参数时,避免为可变参数创建临时元组(如果参数是可变参数或仅位置参数)。

  • gh-126018: 修复了在调试模式下编译的 Python 中,当传递非字符串作为第一个参数时 sys.audit() 崩溃的问题。

  • gh-126012: memoryview 类型现在支持订阅,使其成为 generic type

  • gh-125837: 添加了 LOAD_SMALL_INTLOAD_CONST_IMMORTAL 指令。LOAD_SMALL_INT 将一个等于 oparg 的小整数推送到堆栈上。LOAD_CONST_IMMORTAL 的作用与 LOAD_CONST 相同,但对不朽对象更高效。移除了 RETURN_CONST 指令。

  • gh-125942: 在 Android 上,sys.stdouterrors 设置从 surrogateescape 更改为 backslashreplace

  • gh-125859: 修复了在自由线程构建中,当在垃圾回收过程中调用 gc.get_objects()gc.get_referrers() 时崩溃的问题。

  • gh-125868: 在 3.14.0a1 中,只有在非常特定的情况下,属性查找可能会给出错误的值。这是由于在这些情况下进行了错误的专门化。这在 3.14.0a2 中已修复。

  • gh-125498: JIT 已更新以利用 Clang 19 的新 preserve_none 属性,该属性支持更多平台,并且比 LLVM 现有的 ghccc 调用约定更有用。这也消除了手动修补 LLVM IR 中调用约定的需要,简化了 JIT 编译过程。

  • gh-125703: 在专门的 Py_DECREF 路径中正确遵循 tracemalloc 钩子。Patch by Pablo Galindo

  • gh-125593: 使用颜色高亮异常组回溯中的错误位置

  • gh-125017: 修复在某些访问 staticmethodclassmethod 对象的 __annotations__ 时的崩溃问题。

  • gh-125588: Python PEG 生成器现在可以在语法动作中使用 f-strings。Patch by Pablo Galindo

  • gh-125444: 修复旧版 Arm 架构的非法指令问题。Patch by Diego Russo, testing by Ross Burton.

  • gh-118423: 在案例生成器中添加一个新的 INSTRUCTION_SIZE 宏,返回当前指令大小。

  • gh-125038: 修复在直接更改 gi_frame.f_locals 后迭代生成器表达式时的崩溃问题。Patch by Mikhail Efimov.

  • gh-124855: 不允许 JIT 和 perf 支持同时激活。Patch by Pablo Galindo

  • gh-123714: 更新 JIT 编译以使用 LLVM 19

  • gh-123930: 当脚本遮蔽标准库中的模块导致在“from”导入期间引发 ImportError 时,改进错误消息。类似地,当脚本遮蔽第三方模块并尝试在初始化期间“from”导入该第三方模块的属性时,改进错误消息。

  • gh-119793: map() 内置函数现在有一个可选的仅关键字参数 strict,类似于 zip(),用于检查所有可迭代对象是否长度相等。Patch by Wannes Boeykens.

  • gh-118950: 修复 SSLProtocol.connection_lost 在向套接字写入时抛出 OSError 时未被调用的错误。

  • gh-113570: 修复 reprlib.repr 中的一个错误,其中它错误地调用了被遮蔽的 Python 内置类型的 repr 方法。

C API

构建

  • gh-126691: 移除了 --with-emscripten-target 配置标志。我们统一了 nodebrowser 选项,现在可以使用相同的构建,不受目标运行时的影响。

  • gh-123877: 使用 wasm32-wasip1 作为 WASI 的目标三元组,而不是 wasm32-wasi。后者最终将被 WASI 1.0 收回,而 CPython 目前仅支持 WASI preview1。

  • gh-126458: 在 WASI 下禁用 HACL 的 SIMD 支持。

  • gh-89640: 在 WASM 上将浮点数字序硬编码为小端序。

  • gh-126206: make clinic 现在使用 --force 选项运行 Argument Clinic,从而强制重新生成生成的代码。

  • gh-126187: 引入了 Tools/wasm/emscripten.py 以简化 Emscripten 构建。

  • gh-124932: 对于交叉构建,现在支持安装 prefixgetpath.py 使用的 host_prefix 不同。对于 Emscripten,默认设置为 /,在其他平台上默认行为与之前相同。

  • gh-125946: 现在支持的最低 Android 版本是 7.0(API 级别 24)。

  • gh-125940: Android 构建现在支持 16 KB 页面大小

  • gh-89640: 当启用链接时优化时,改进 Linux 上浮点数字序的检测。

  • gh-124928: Emscripten 构建现在需要 node >= 18。

  • gh-115382: 修复当主机和目标 SOABIs 匹配时的交叉编译失败问题。

Python 3.14.0 alpha 1

发布日期:2024-10-15

macOS

  • gh-124448: 更新 macOS 安装程序中的捆绑 Tcl/Tk 至 8.6.15。

  • gh-123797: 检查 macOS 上 ptsname_r 函数的运行时可用性。

  • gh-123418: 更新 macOS 安装程序构建以使用 OpenSSL 3.0.15。

Windows

  • gh-124487: 将 Windows 所需操作系统和 API 级别提高到 Windows 10。

  • gh-124609: 修复使用 MinGW 的 Windows 构建中的 _Py_ThreadId。补丁由 Tony Roberts 提供。

  • gh-124448: 将捆绑的 Tcl/Tk 更新至 8.6.15。

  • gh-124254: 确保在更新时实验性的自由线程二进制文件保持安装。

  • gh-123915: 确保 Tools\msi\buildrelease.bat 对 AMD64 和 ARM64 构建使用不同的目录。

  • gh-123418: 更新 Windows 构建以使用 OpenSSL 3.0.15。

  • gh-123476: 在 Windows 平台上添加对 socket.TCP_QUICKACK 的支持。

  • gh-122573: CPython 的 Windows 构建现在需要 3.10 或更新版本。

  • gh-100256: mimetypes 在遇到不可访问的注册表键时不再失败。

  • gh-119679: 确保 Windows 安装中包含正确的导入库。

  • gh-119690: 为 _winapi.CreateNamedPipe 添加 Unicode 支持并修复审计事件。

  • gh-111201: 在 Windows 上添加对新 pyrepl 的支持

  • gh-119070: 修复 py.exe 对 shebangs 如 /usr/bin/env python3.12 的处理,这些 shebangs 之前被解释为 python3.exe 而不是 python3.12.exe

  • gh-117505: 修复 Windows 安装程序未在完全隔离的环境中运行 ensurepip 的问题。这可能导致与用户 site-packages 的意外交互。

  • gh-118209: 在 Windows 上,当映射的内存由于文件系统错误或访问违规而不可访问时,避免在 mmap 中崩溃。

  • gh-79846: 使 ssl.create_default_context() 忽略 Windows 证书存储中的无效证书

工具/示例

  • gh-123418: 更新 GitHub CI 工作流以使用 OpenSSL 3.0.15 和 multissltests 以使用 3.0.15、3.1.7 和 3.2.3。

测试

  • gh-125041: 在s390x架构上重新启用对 zlib 的跳过测试:仅跳过压缩字节的检查,这些在zlib的软件实现和硬件加速实现之间可能不同。

  • gh-124378: 更新 test_ttk 以通过Tcl/Tk 8.6.15的测试。

  • gh-124213: 检测测试套件是否在带有 --suppress-sync=true 选项的systemd-nspawn容器内运行,并跳过在此场景下失败的 test_ostest_mmap 测试。

  • gh-124190: 添加在检查警告CI工具中忽略整个文件或目录的能力。

  • gh-121921: 更新 Lib/test/crashers/bogus_code_obj.py 以便它再次正确崩溃。

  • gh-112301: 添加检查编译器警告变化的工具。由Nate Ohlson提供补丁。

  • gh-59022: 为 pkgutil.extend_path() 添加测试。由Andreas Stocker提供补丁。

  • gh-99242: 在某些条件下(如chroot)运行回归测试时,os.getloadavg() 可能会抛出 OSError。现在捕获并忽略此错误,因为报告负载平均值是可选的。

  • gh-121084: 修复test_typing随机泄漏。在运行反射泄漏测试(-R``选项)时清除键入ABC缓存:在键入抽象类及其子类上调用 ``_abc_caches_clear()。由Victor Stinner提供补丁。

  • gh-121160: 为 readline.set_history_length() 添加测试。请注意,此测试可能在readline库上失败。

  • gh-121200: 修复 test_posixpathtest_expanduser_pwd2()。调用 getpwnam() 获取``pw_dir``,因为它可能与 getpwall()pw_dir 不同。由Victor Stinner提供补丁。

  • gh-121188: 当创建JUnit XML文件时,regrtest现在转义XML中无效的字符,如用于ANSI转义序列的chr(27)控制字符。由Victor Stinner提供补丁。

  • gh-120801: 清理了importlib.metadata测试的fixtures,并与'test.support.os_helper'统一行为。

  • gh-119727: 为Python测试运行器(regrtest)添加 --single-process 命令行选项。由Victor Stinner提供补丁。

  • gh-119273: Python测试运行器不再使用TTY(例如:test_ioctl)在进程组中运行测试(使用 setsid())。之前,使用TTY的测试会被跳过。由Victor Stinner提供补丁。

  • gh-119050: regrtest测试运行器:为反射泄露检查器(-R选项)添加XML支持。由Victor Stinner提供补丁。

  • gh-101525: 如果二进制文件被BOLT重定位,则跳过 test_gdb。由Donghee Na提供补丁。

  • gh-107562: 测试证书已更新,将在很远的未来过期。这允许将系统时间设置为该时间之后来测试Y2038,以便暴露实际的Y2038问题,而不是被过期的证书错误所掩盖。

安全性

  • gh-125140: 在使用PyREPL时,从 sys.path 中移除当前目录。

  • gh-123678: 将libexpat升级到2.6.3版本

  • gh-112301: 启用编译器选项,警告潜在的安全漏洞。

  • gh-122792: 修改了IPv4映射的 ipaddress.IPv6Address,使其一致使用映射的IPv4地址值来决定属性。行为被修复的属性包括 is_multicastis_reservedis_link_localis_globalis_unspecified

  • gh-112301: 在警告检查工具中添加按文件忽略警告的能力,并带有警告计数。由Nate Ohlson提供补丁。

  • gh-112301: 为警告检查工具添加macOS警告跟踪。由Nate Ohlson提供补丁。

  • gh-122133: 在 AF_UNIX 不可用的平台(如Windows)上,为 socket.socketpair() 后备方案验证套接字连接。

    由Gregory P. Smith <greg@krypto.org> 和 Seth Larson <seth@python.org>提供补丁。由Ellie <el@horse64.org>报告。

  • gh-121957: 修复了Python交互式使用中缺失的审计事件,现在也能正确触发 python -i 以及 python -m asyncio。相关事件为 cpython.run_stdincpython.run_startup

  • gh-112301: 为除 Windows 外的所有平台启用 glibc 的运行时保护,当遇到不安全行为时中止执行。

  • gh-121285: 在 tarfile 头解析中移除对 hdrcharset、PAX 和 GNU 稀疏头的回溯。

  • gh-112301: 添加默认编译器选项以提高安全性。启用 -Wimplicit-fallthrough、-fstack-protector-strong、-Wtrampolines。

  • gh-118773: 修复 Windows 上 os.mkdir() 创建 ACL 在非英语机器上工作不正确的问题。

  • gh-118486: Windows 上的 os.mkdir() 现在接受 0o700mode 参数,将新目录限制为当前用户。这修复了 CVE 2024-4030,影响 tempfile.mkdtemp() 在基础临时目录比默认更宽松的情况下的问题。

IDLE

  • gh-122392: 在高分辨率显示器上增加了 IDLE 浏览器(路径、模块和堆栈)当前不足的垂直间距。

  • gh-112938: 修复了 Shell 在快速连续输出时不可中断的挂起问题。

  • gh-122482: 更改 About IDLE,将用户引导至 discuss.python.org,而不是现在未使用的 idle-dev 电子邮件和邮件列表。

  • gh-78889: 通过阻止用户访问非方法 sys.stdout.shell 属性(这些属性都是私有的)来停止 Shell 冻结。

  • gh-120083: 为最近的 macOS 添加了明确的黑色 IDLE Hovertip 前景色。修复了 Sonoma 显示不可读的白色在淡黄色上的问题。由 John Riggles 提供补丁。

  • gh-120104: 修复IDLE中配置和搜索对话框窗口的填充问题。

文档

  • gh-124872: 添加了 上下文当前上下文 和 上下文管理协议` 的定义,更新了相关定义以保持一致,并扩展了 contextvars.Context 的文档。

  • gh-125018: importlib.metadata 文档现在包括重要文档API的语义交叉引用目标。这意味着像 importlib.metadata.version() 这样的intersphinx引用现在将按预期工作。

  • gh-124720: 更新"Python设置和使用"文档中的"在Mac上使用Python"部分,并包含安装自由线程支持的信息。

  • gh-124457: 从CPython仓库中移除coverity扫描。自2020年以来未使用,目前无人维护。

  • gh-116622: 添加Android平台指南,并标记在Android上不可用的模块。

  • gh-123976: 刷新关于自定义提供者的文档。

  • gh-70870: 澄清了术语"自由变量"的双重用途(既指正式意义上对外部作用域定义的任何名称引用,也指在 co_freevars 中命名的非局部变量的狭义实用意义)。

  • gh-121277: CPython文档的作者现在可以使用 next 作为 versionchangedversionadded``deprecated``指令的版本。

  • gh-117765: 改进了 unittest.mock.patch.dict() 的文档。

  • gh-121749: 修复 PyModule_AddObjectRef() 的文档。

  • gh-120012: 澄清了 multiprocessing.Queue.empty()multiprocessing.SimpleQueue.empty() 在关闭队列上的行为。由Bénédikt Tran提供补丁。

  • gh-119574: 添加了一些缺失的环境变量到 --help-env 的输出中。

  • bpo-34008: Py_Main() 文档从"非常高层次的API"部分移动到"初始化和终结"部分。

    同时明确指出,我们期望通常调用 Py_Main 而非 Py_Initialize 之后调用它(因为 Py_Main``会自行调用 ``Py_Initialize)。文档说明同时调用两者是支持的,但具体哪个设置会正确应用取决于版本。

核心与内置函数

  • gh-124375: 修复了在自由线程构建中,当垃圾回收与新线程启动同时进行时发生的崩溃。

  • gh-125221: 修复了在自由线程构建中首次调用 __reduce_ex__() 时可能出现的竞争条件。

  • gh-125174: 使对不朽对象引用计数的处理更加健壮。引用计数与原始引用计数偏差高达十亿(32位构建中为五亿)的不朽对象仍被视为不朽。

  • gh-125039: 在生成器情况下使 this_instrprev_instr 为常量。

  • gh-125008: 修复 tokenize.untokenize() 在特定转义字符前的双大括号产生无效语法的问题。

  • gh-124871: 修复了在某些3.13版本中,可达性分析期间断言失败的编译器错误。

  • gh-123378: 修复了当 UnicodeError.startUnicodeError.end 值无效或超出范围时,UnicodeError 对象的 __str__() 方法崩溃的问题。补丁由Bénédikt Tran提供。

  • gh-118093: 提高了实验性JIT编译器在遇到高度偏置分支时保持"在轨迹上"的能力。

  • gh-124642: 修复了在多线程场景中从字典无锁读取的自由线程构建中的可扩展性问题。

  • gh-116510: 修复了由于不朽的内部字符串在使用基本单阶段初始化的子解释器之间共享而导致的崩溃。在这种情况下,字符串可以被创建和内部化它的解释器之外的另一个解释器使用。对于共享obmalloc状态的解释器,也与主解释器共享内部字典。

  • gh-116510: 修复了一个当子解释器使用“基本”单阶段扩展模块时可能导致崩溃的bug。共享对象可能引用已被作为解释器清理一部分释放的PyGC_Head节点。

  • gh-119180: __main__ 模块不再总是在其全局命名空间中包含一个 __annotations__ 字典。

  • gh-124547: 当解除分配一个内联值对象且其 __dict__ 仍然存活时:如果内联值的内存分配失败,清除字典。防止解释器崩溃。

  • gh-124513: 修复FrameLocalsProxy构造函数中的一个崩溃:检查参数数量。由Victor Stinner提供补丁。

  • gh-124442: 通过排序 __static_attributes__ 的值来修复编译中的非确定性。补丁由kp2pml30提供。

  • gh-124285: 修复了在复合布尔表达式求值期间 bool(a) 可能被多次调用的bug。

  • gh-123856: 修复在使用历史搜索后触发键盘中断时PyREPL失败的问题。

  • gh-65961: 弃用设置和使用 __package____cached__

  • gh-119726: JIT现在为对C函数的调用生成更高效的代码,在AArch64上可实现高达0.8%的内存节省和1.5%的速度提升。由Diego Russo提供补丁。

  • gh-122878: 使用 pager 二进制文件(如果可用,例如在Debian及其衍生系统上)来显示REPL help()

  • gh-124188: 修复了在编译器中引发语法错误时,从使用非UTF-8编码的源文件中读取和解码一行的问题。

  • gh-124027: 当 $TERM 设置为 vt100 时,在Python REPL中支持 <page up><page down><delete> 键。

  • gh-124022: 修复了在交互模式下从类中移除文档字符串的bug。

  • gh-123958: 现在在优化级别2中从优化的AST中移除文档字符串。

  • gh-123923: 内部 _PyInterpreterFrame 结构体中的 f_executable 字段现在使用了标记指针。使用此字段的性能分析器和调试器应清除最低有效位以恢复 PyObject* 指针。

  • gh-77894: 修复了垃圾回收器在尝试断开包含 memoryview 对象的引用循环时可能发生的崩溃。现在,只有在没有缓冲区引用 memoryview 对象时才能清除它。

  • gh-120221: asyncio REPL 现在再次能够正确识别 KeyboardInterrupts。修复了在次要线程中引发的异常的显示问题。

  • gh-119310: 允许新的交互式 shell 读取使用 editline 库编写的、使用 unicode 转义条目的历史文件。由 aorcajo 和 Łukasz Langa 提供补丁。

  • gh-123572: 修复了新 REPL 在 Windows 上各种 F 键的键映射问题。由 devdanzin 提供补丁。

  • gh-123614: 添加 turtle.save() 以轻松将 Turtle 绘图保存为 PostScript 文件。由 Marie Roald 和 Yngve Mardal Moe 提供补丁。

  • gh-123339: 现在,为类设置 __module__ 属性会从类型的字典中移除 __firstlineno__ 项,因此它们不再不一致。

  • gh-119034: 将 Python REPL 的 <page up><page down> 键更改为向前/向后搜索历史记录。由 Victor Stinner 提供补丁。

  • gh-123562: 对于使用 case ... as ... 但不是名称的情况,改进了 SyntaxError 消息。

  • gh-123545: 在实验性 JIT 构建中罕见情况下修复了双重递减引用。

  • gh-123484: 修复 _Py_DebugOffsets 对于长对象,使其相对于对象的开始而不是子对象的开始。

  • gh-123446: 当内置魔术方法在没有必需参数的情况下使用时,修复了 TypeError 中空函数名的问题。

  • gh-123440: 对于使用 except as 但不是名称的情况,改进了 SyntaxError 消息。

  • gh-116017: 通过定期释放不常执行代码占用的内存,改进了JIT内存消耗。这一改变尤其可能改善长时间运行程序的内存占用。

  • gh-123344: 为类型参数默认值添加AST优化。

  • gh-123321: 防止在多线程使用时Parser/myreadline竞争条件导致段错误。由Bar Harel和Amit Wienner提供补丁。

  • gh-123177: 修复了一个导致新REPL中在换行的中间出现杂散提示符的bug。

  • gh-122982: 将布尔反演(~)的弃用期延长两年。

  • gh-123271: 使对同一个 zip() 迭代器的并发迭代在自由线程下安全。

  • gh-123275: 在非自由线程构建上支持 -X gil=1PYTHON_GIL=1

  • gh-123177: 通过ANSI转义代码在Apple终端中停用行换行。由Pablo Galindo提供补丁。

  • gh-123229: 通过在分词器中初始化f-string缓冲区为0来修复valgrind警告。由Pablo Galindo提供补丁。

  • gh-122298: 恢复当调用 gc.set_debug(gc.DEBUG_STATS) 时GC统计信息的打印输出。这一特性在实现增量GC时被意外移除。

  • gh-121804: 在基本REPL中引发 SyntaxError 时正确显示错误位置。由Sergey B Kirpichev提供补丁。

  • gh-115776: 在任何实例大小固定的类上启用内联值(Python的隐藏类等价物)。

  • gh-123142: 修复来自理解中损坏的可迭代对象的异常跟踪中过宽的源位置。

  • gh-123048: 修复一个bug,其中模式匹配代码可能发出没有源位置的 JUMP_FORWARD

  • gh-118093: 将 CALL_ALLOC_AND_ENTER_INIT 分解为微操作并放宽对精确参数的要求,以增加tier 2支持的代码量。

  • gh-123123: 修复显示覆盖多行的 SyntaxError 异常。由Pablo Galindo提供补丁。

  • gh-123083: 修复 STORE_ATTR_WITH_HINT 中潜在的释放后使用问题。

  • gh-123022: 修复在非主线程中调用 Py_Initialize() 时自由线程构建中的崩溃问题。

  • gh-118093: 为 CALL_KW 添加三个特化版本:

    • CALL_KW_PY 用于调用 Python 函数

    • CALL_KW_BOUND_METHOD 用于调用绑定方法

    • CALL_KW_NON_PY 用于所有其他调用

  • gh-122821: 确保 while 语句中的分支对于 sys.monitoring 有一致的偏移量。现在 while 语句在主体末尾使用简单跳转编译,而不是重复测试。

  • gh-122907: 使用 HAVE_DYNAMIC_LOADING 构建现在的工作效果与 3.12 版本相同。现有的不足将单独处理。(参见 https://github.com/python/cpython/issues/122950。)

  • gh-122888: 修复在错误类型的参数位置调用 str() 时导致的崩溃。由 Jelle Zijlstra 提供补丁。

  • gh-118093: 改进实验性 JIT 对多态代码的处理。

  • gh-122697: 修复了自由线程构建中解释器关闭时的内存泄漏,以及通过 -X showrefcount 报告的内存块泄漏问题。

  • gh-116622: 修复 Android 标准输出和标准错误消息被截断或丢失的问题。

  • gh-122527: 修复当 PyStructSequence 在其类型的字典被 GC 清除后被释放时发生的崩溃。该类型的 tp_basicsize 现在计算了不包括在序列的 Py_SIZE 中的非序列字段。

  • gh-122445: 仅将通过 self.* 修改的字段添加到 __static_attributes__

  • gh-122417: 在自由线程构建中,堆类型对象的引用计数现在部分以分布式方式存储在每个线程的数组中。这减少了在多个线程同时创建或销毁相同类型的实例时对堆类型引用计数字段的争用。

  • gh-116090: 修复了在JIT构建中阻止某些 for 循环正确触发 RAISE 监控事件的问题。

  • gh-122300: 保留f-string中单元素格式说明符的AST节点。由Pablo Galindo提供补丁。

  • gh-120906: frame.f_locals 现在支持任意可哈希对象作为键。

  • gh-122239: 当解包的元素过多的 listtupledict 时,错误消息中会显示实际长度。

  • gh-122245: 将对 __debug__ 的写入检测从编译器的代码生成阶段移到了符号表。这意味着现在即使在代码生成之前被优化的代码中(如使用 -O 命令行选项的断言),也能检测到这些错误。

  • gh-122234: 在 sum() 中,对于浮点和复数输入的和的特殊化现在总是使用补偿求和。此外,对于上述特殊化中的整数项,使用 PyLong_AsDouble() 而不是 PyLong_AsLongAndOverflow()。由Sergey B Kirpichev提供补丁。

  • gh-122208: 字典观察器现在仅在插入处于已知良好状态以成功时传递PyDict_EVENT_ADDED事件。

  • gh-122160: 移除 BUILD_CONST_KEY_MAP 操作码。改用 BUILD_MAP

  • gh-122029: 在 sys.setprofile() 中,当调用指向 PyCFunctionPyMethodObject``时,发出 ``c_call 事件。

  • gh-122026: 修复了一个导致分词器在某些情况下不能正确识别f-string中不匹配括号的错误。补丁由Pablo Galindo提供。

  • gh-99108: Python的hashlib现在无条件地使用vendored HACL*库进行Blake2。Python不再接受libb2作为Blake2的可选依赖。

    我们更新了HACL*至最新版本,现在vendored HACL*的128位和256位宽向量实现用于Blake2,这些实现在x86/x64工具链中,当运行时所需的CPU特性可用时使用。

    HACL* 的 Blake2 128位宽向量实现也可以在 ARM NEON 和 Power8 上运行,但由于缺乏性能提升的证据,这些功能尚未启用。

  • gh-121999: tarfile 模块的默认提取过滤器现在设置为 'data'

  • gh-121860: 修复了在删除后重新实例化托管字典时崩溃的问题。

  • gh-121795: 提高了当参数为集合时,集合成员测试、set.remove()set.discard() 的性能。

  • gh-121814: 修复了当 PyEval_SetTrace() 在堆栈上没有 Python 帧时使用时导致的段错误。

  • gh-121295: 修复了 PyREPL 控制台在中断长粘贴后进入阻塞状态的问题。

  • gh-121794: 修复了在自由线程 Python 中,复活对象可能导致引用计数断言失败的错误。

  • gh-121657: 如果用户试图在函数外部使用 yield from,改进了 SyntaxError 的错误消息。

  • gh-121609: 修复了新 REPL 中包含 Unicode 字符连接符的字符粘贴问题。由 Marta Gomez Macias 提供补丁。

  • gh-121297: 以前,Python 编译器不会标记由 -O 选项移除的代码中 await 或异步推导的错误使用。现在,此类代码会引发 SyntaxError。由 Jelle Zijlstra 提供补丁。

  • gh-117482: 在子解释器中不再为内置静态类型创建意外的槽包装器。

  • gh-121562: 通过用查找表替换 switch-case 优化了 hex_from_char 的性能。

  • gh-121499: 修复了一个影响新 REPL 在与新屏幕缓存交互后如何渲染多行历史的错误。由 Pablo Galindo 提供补丁。

  • gh-121497: 修复了一个阻止 REPL 在设置了输入钩子时正确尊重历史的错误。由 Pablo Galindo 提供补丁。

  • gh-121012: Tier 2 执行现在确保列表迭代器一旦耗尽就保持耗尽状态。

  • gh-121439: 允许 freelist 中长度为 20 的元组被重用。

  • gh-121288: ValueError 消息中的 list.index()range.index()deque.index()deque.remove()ShareableList.index() 不再包含搜索值的 repr(可能非常大),并且与其他 index()remove() 方法的错误消息一致。

  • gh-121368: 修复了自由线程构建中由于缺少内存屏障导致的 _PyType_Lookup 中的竞争条件。这可能导致 _PyType_Lookup 在 arm64 上返回不正确的结果。

  • gh-121149: 增加了复数求和的专门处理,这也提高了内置函数 sum() 对此类输入的准确性。由 Sergey B Kirpichev 提供补丁。

  • gh-121130: 修复了格式说明符中使用调试表达式的 f-strings。由 Pablo Galindo 提供补丁。

  • gh-121381: 移除了 subprocess._USE_VFORK 的应急代码和文档。它只是为了以防万一添加的,并没有任何已知需要使用的情况。

  • gh-119726: 优化了 AArch64 上从 JIT 调用 C 函数的代码布局。由 Diego Russo 提供补丁。

  • gh-121115: PyLong_AsNativeBytes() 默认不再使用 __index__() 方法。添加了 Py_ASNATIVEBYTES_ALLOW_INDEX 标志以允许其使用。

  • gh-120838: Py_Finalize()Py_FinalizeEx() 现在总是在主解释器激活状态下运行。

  • gh-113433: 子解释器现在在运行时终止期间自动清理。

  • gh-119726: 提高了 AArch64 上从 JIT 代码调用 C 函数的速度和内存使用效率。由 Diego Russo 提供补丁。

  • gh-116017: 简化了 JIT 代码中用于“侧退出”的预热机制,从而在大多数平台上实现了稍微更好的性能和稍微更低的内存使用。

  • gh-98442: 修复了 with 语句的清理指令的源代码位置过宽的问题。

  • gh-120754: 减少读取整个文件时调用的系统调用次数(例如 open('a.txt').read())。对于一个读取 cpython 仓库 Doc 文件夹中400多个 .rst 文件内容的示例程序,系统调用次数减少了超过10%。

  • gh-119462: 确保类型版本化的不变性得到维护: * 超类总是先于子类分配其版本号 * 如果标签无效,版本标签始终为零。 * 如果标签有效,版本标签始终为非零。

  • gh-120437: 修复在 gh-118322 中引入的 _CHECK_STACK_SPACE 优化问题。

  • gh-120722: 正确设置 lambda 中返回指令的字节码位置。由 Jelle Zijlstra 提供补丁。

  • gh-120367: 修复编译器在伪操作替换期间创建冗余跳转的 bug。只有在具有合成 AST 的情况下才会发生,该 AST 在异常处理程序之后的指令的同一行上有 try。

  • gh-120507: 移除 BEFORE_WITHBEFORE_ASYNC_WITH 指令。添加新的 LOAD_SPECIAL 指令。使用新指令为 withasync with 语句生成代码。

  • gh-113993: 根据文档,使用 sys.intern() 内联的字符串在不再使用时再次被垃圾回收。使用 C 函数 PyUnicode_InternInPlace() 内联的字符串仍然是不朽的。字符串内联机制的内部已经改变。这可能会影响 str 对象的性能和身份。

  • gh-120485: 在继承 socketserver.TCPServer 的类上添加 allow_reuse_port 的重写,其中 allow_reuse_address 也被重写。

  • gh-120384: 修复 list_ass_subscript 中的数组越界崩溃,这可能是通过一些特别定制的输入调用的:包括对列表对象的并发修改,其中一个线程分配一个切片,另一个线程清除它。

  • gh-120367: 修复编译器在对包含冗余NOP和JUMP的代码(这些代码在异常处理程序移动到代码末尾后出现)时的崩溃问题。

  • gh-120380: 修复使用协议版本5时,pickle.Picklerbytesbytearray 对象的Python实现。由Bénédikt Tran提供补丁。

  • gh-120397: 对于 str.count(), bytes.count()bytearray.count() 方法在计数单个字符时的吞吐量提高了最多两倍。

  • gh-120221: 在新的REPL中,对Ctrl-C和Ctrl-Z传递真实的信号。由Pablo Galindo提供补丁。

  • gh-120346: 在交互式检查模式下运行(python -i)时,尊重 PYTHON_BASIC_REPL。由Pablo Galindo提供补丁。

  • gh-93691: 修复为for语句的迭代器生成的指令的源代码位置。

  • gh-120198: 修复多个线程同时读写同一对象的 __class__ 时发生的崩溃问题。

  • gh-120298: 修复在通过某些特别设计的恶意输入调用时,``list_richcompare_impl``中的使用后释放问题。

  • gh-119666: 修复在类作用域中两个推导式都引用 __class__ 的情况下编译器崩溃的问题。

  • gh-119726: JIT: 在AArch64上创建模具时重复使用跳板。由Diego Russo提供补丁。

  • gh-120225: 修复在异常处理程序末尾的空块上编译器崩溃的问题。

  • gh-93691: 修复为with语句生成的指令的源代码位置。

  • gh-120097: FrameLocalsProxy 现在继承自 collections.abc.Mapping,并且可以在 match 语句中作为映射进行匹配。

  • gh-120080: 直接调用 int.__round__() 现在接受 None 作为有效参数。

  • gh-119933: 改善了类型参数边界、类型参数约束元组或默认类型参数中无效表达式的 SyntaxError 消息。由Bénédikt Tran提供补丁。

  • gh-119724: 撤销了对`elif`/else`语句不匹配任何有效语句的错误消息的改进,这些改进使得在这些`elif/`else`块中定位语法错误变得困难。

  • gh-119879: 字符串搜索在某些情况下现在稍微快了一些。现在它利用最后字符间隙(好后缀规则)来处理双向周期针。

  • gh-119842: 在新的REPL中尊重 PyOS_InputHook()。由Pablo Galindo提供补丁

  • gh-119180: classmethod()staticmethod() 现在懒加载地包装它们底层可调用对象的 __annotations____annotate__ 属性。参见 PEP 649。由Jelle Zijlstra提供补丁。

  • gh-119821: 修复了当`globals`设置为非字典时在类内部执行 annotation scopes 的问题。由Jelle Zijlstra提供补丁。

  • gh-118934: 使 PyEval_GetLocals 返回借用引用

  • gh-119740: 移除了之前弃用的 int()__trunc__() 的委托。

  • gh-119689: 为来自bytecodes.c的伪指令生成堆栈效果元数据。

  • gh-109218: complex() 现在仅接受字符串作为位置参数。传递复数作为"real"或"imag"参数已被弃用;它应该仅作为单个位置参数传递。

  • gh-119548: 向REPL添加了一个 clear 命令。由Pablo Galindo提供补丁

  • gh-111999: 修复了 str.format_map() 的签名。

  • gh-119560: 移除了beta 1中的一个无效断言。如果在扩展模块的init函数中,在模块定义初始化之前使用 PyState_FindModule(),该断言会失败。

  • gh-119369: 修复了在自由线程构建中线程删除期间的死锁问题,该问题可能在运行时启用GIL时发生。

  • gh-119525: 修复了在自由线程构建中,当GIL在运行时动态启用时,涉及 _PyType_Lookup() 缓存的死锁问题。

  • gh-119258: 在第二层解释器中消除了类型版本守卫。

    请注意,手动设置 tp_version_tag (从未被支持过) 可能会导致崩溃。

  • gh-119311: 修复了泛型类基类中名称意外被篡改的错误。

  • gh-119395: 修复了泛型类后出现的名称被篡改为泛型类中的名称的错误。

  • gh-119372: 更正了复数除法中的无效极端情况(导致 (nan+nanj) 输出),例如 1/complex('(inf+infj)')。由 Sergey B Kirpichev 提交的补丁。

  • gh-119180: 现在推迟了注解的评估。详情参见 PEP 649

  • gh-119180: 用 LOAD_COMMON_CONSTANT 替换 LOAD_ASSERTION_ERROR 操作码,并添加对 NotImplementedError 的支持。

  • gh-119213: 如果在主解释器之前用于子解释器中,使用参数诊所构建的非内置模块会崩溃。已修复因对象在不同解释器之间不小心泄露而导致的问题。

  • gh-119011: 修复 type.__type_params__ 返回空元组而非描述符的问题。

  • gh-118692: 为避免监控创建不必要的 StopIteration 实例。

  • gh-119180: 作为 PEP 649 的一部分,向函数、类和模块添加 __annotate__ 属性。由 Jelle Zijlstra 提交的补丁。

  • gh-119049: 如果 warnings 模块尚未导入,修复由 C API 创建的警告的源代码行显示。

  • gh-119057: 改进 ZeroDivisionError 错误消息。现在,所有错误消息都统一:所有 ///% 操作只使用“除以零”消息。而 0 ** -1 操作使用“零的负幂”。

  • gh-118844: 修复同时配置 --disable-gil--enable-experimental-jit 时的构建失败。

  • gh-118921: 为 FrameLocalsProxy 添加 copy() 方法,该方法返回局部变量的快照 dict

  • gh-117657: 修复在自由线程构建中发生的指向解释器主线程的指针字段上的数据竞争。

  • gh-118750: 如果 decimal 模块的 C 版本可用,int(str) 现在使用它来提供渐近更快的转换。然而,这仅适用于字符串包含超过约200万位数字的情况。

  • gh-118767: 在布尔上下文中使用 NotImplemented 现在会引发 TypeError。由 Jelle Zijlstra 贡献。

  • gh-118561: 修复了在自由线程构建中的竞争条件,其中 list.extend() 可能会将未初始化的内存暴露给并发读取器。

  • gh-117139: 将 Python 评估栈转换为使用内部栈引用。目的是支持标记指针。在 PEP 703 中,这将允许其形式的延迟引用计数。对于默认和自由线程构建,这为未来未装箱整数设置了基础设施。

  • gh-115801: 当向 difflib.unified_diff()difflib.context_diff() 传递字符串时,引发 TypeError

  • gh-117558: 当期望长度为1的字符串、字节或字节数组对象时,改进错误消息。

  • gh-117195: 在调试构建中调用 object.__sizeof__(1) 时避免断言失败。

  • gh-116022: 改进 AST 节点的 __repr__() 输出。

  • gh-114091: 将无法等待的对象的错误消息从“对象 <type> 不能用于等待表达式”更改为“‘<type>’对象不能等待”。

  • gh-113190: Py_Finalize() 现在删除所有内部字符串。

  • gh-84978: 添加类方法 float.from_number()complex.from_number()

  • gh-95144: 当 b 不是容器时,改进 a in b 的错误消息以提及“容器”一词。

  • bpo-24766: 修复对 property 子类的 doc 参数的处理。

C API

构建

  • gh-125269: 修复在使用配置脚本交叉编译 CPython 时是否需要 -latomic 的检测。

  • gh-123990: 移除 WITH_FREELISTS 宏和 --without-freelists 构建配置。

  • gh-124102: 更新 PCbuild 下的内部文档,现在正确说明 Windows 需要 VS2017 或更高版本以及 Python 3.10 或更高版本。

  • gh-124043: 当 GIL 被禁用时,(暂时)禁止使用 --with-trace-refs 构建。

  • gh-123418: 更新 Android 构建以使用 OpenSSL 3.0.15。

  • gh-123297: 在 sysconfig 中将 LDFLAGS 的值传播到 LDCXXSHARED。由 Pablo Galindo 提供补丁。

  • gh-121634: 允许为WASI指定目标编译三倍体。

  • gh-122578: 使用WASI SDK 24进行测试。

  • gh-116622: 将构建变量 MODULE_LDFLAGS 重命名为 LIBPYTHON,因为它被包构建系统(如Meson)使用。

  • gh-118943: 修复了一个问题,其中实验性JIT可能被 make regen-all 目标多次构建,导致在高度并行化构建中可能出现竞争条件。

  • gh-121996: 引入 ./configure --disable-safety 和 --enable-slower-safety 选项。由Donghee Na提供的补丁。

  • gh-120522: 添加了一个 --with-app-store-compliance 选项,以修补已知的macOS/iOS应用商店审查流程问题。

  • gh-120371: 通过明确跳过在wasi-libc中仅为存根的函数来支持WASI SDK 22。

  • gh-121731: 修复GNU/Hurd上的mimalloc编译错误

  • gh-121487: 修复mimalloc中ATOMIC_VAR_INIT的弃用警告。

  • gh-121467: 修复一个Makefile错误,该错误阻止了mimalloc头文件的安装。

  • gh-121103: 在POSIX系统上,不包括macOS框架安装,自由线程构建的lib目录现在包含一个"t"后缀,以避免与同位置的默认构建安装冲突。

  • gh-120831: 默认的最低iOS版本已增加到13.0。

  • gh-121082: 修复开发者在配置命令中使用 --enable-pystats 参数后由#118450引起的构建失败。

  • gh-120671: 修复由于在附加到CFLAGS时缺少空格而导致的配置测试失败。

  • gh-120602: 在使用 --enable-experimental-jit 构建时,正确处理带有 LLVM_VERSION_SUFFIX 的LLVM安装。

  • gh-120688: 在WASI的调试模式下,Python现在使用编译器标志 -O3 而不是 -Og 构建,以支持更多的递归调用。由Victor Stinner提供的补丁。

  • gh-118943: 修复可能影响使用 --enable-experimental-jit 配置的并行构建的竞争条件,其中 FileNotFoundError 可能由另一个进程已经将 jit_stencils.h.new 移动到 jit_stencils.h 引起。

  • gh-120326: 在 Windows 上,修复当 --disable-gil--experimental-jit 选项结合使用时出现的构建错误。

  • gh-120291: 使 python-config shell 脚本兼容非 bash shell。

  • gh-113565: 在 configure 中改进 cursescurses.panel 的依赖检查。

  • gh-119729: 在 POSIX 系统上,pkg-config (pc) 文件名现在包括 ABI 标志,可能包括调试("d")和自由线程("t")。例如:* python-3.14.pc (默认,非调试构建) * python-3.14d.pc (默认,调试构建) * python-3.14t.pc (自由线程构建)

  • gh-119400: make_ssl_certs,用于为测试套件准备证书数据的脚本,现在允许指定过期日期。

  • gh-115119: 如果找不到系统版本,回退到捆绑的 libmpdec。

  • gh-119132: 更新 sys.version 以标识构建是默认构建还是自由线程构建。由 Donghee Na 提供补丁。

  • gh-118836: 修复当使用 --enable-experimental-jit 构建且编译器发出 SHT_NOTE 部分时出现的 AssertionError

  • gh-118943: 修复可能影响使用 --enable-experimental-jit 配置的并行构建的竞争条件,其中编译错误可能由不完全生成的头文件引起。

Python 3.13.0 beta 1

发布日期:2024-05-08

安全性

  • gh-116741: 更新捆绑的 libexpat 到 2.6.2

  • gh-117233: 在构建时检测 OpenSSL-ish libcrypto 库中的 BLAKE2、SHA3、Shake 和截断 SHA512 支持。这允许 hashlib 用于不支持上游 OpenSSL 所有算法的库。

核心与内置函数

  • gh-118414: 为 YIELD_VALUE 断言添加检测操作码以追踪情况。

  • gh-117953: 当内置或扩展模块首次被导入时,如果此时有一个子解释器处于活动状态,模块的初始化函数现在会首先在主解释器中运行,然后导入过程才会在子解释器中继续。因此,单阶段初始化的模块现在会在隔离的子解释器中失败,而不会在该解释器下运行初始化函数,而在此之前,它会在子解释器中运行 然后 失败,可能会留下全局状态和回调,或者以其他方式使模块处于不一致的状态。

  • gh-117549: 在内部头文件的内联函数中不要使用指定的初始化器语法。它们会对尚未使用最新C++标准(C++20)的C++或MSVC用户造成问题。虽然pycore_backoff.h是内部的,但它通过pycore_code.h间接被一些关键第三方软件包含,这些软件为了速度会这样做。

  • gh-95382: 在使用参数 indent 时,提高了 json.dumps()json.dump() 的性能。根据数据的不同,使用 json.dumps()indent 的编码速度可以快2到3倍。

  • gh-116322: 在 --disable-gil 构建中,GIL会在加载C扩展模块时启用。如果模块表明它支持在没有GIL的情况下运行,加载完成后GIL将被禁用。否则,GIL将在解释器的剩余生命周期内保持启用。如果GIL已通过 PYTHON_GIL-Xgil 明确启用或禁用,则不适用此行为。

  • gh-118513: 修复了当同一函数中的两个推导式都引用同一个名称,而在一个推导式中该名称被绑定而在另一个中是隐式全局时,错误的 UnboundLocalError

  • gh-118518: 允许Linux性能支持在没有帧指针的情况下使用perf的高级JIT支持工作。该功能在使用``PYTHON_PERF_JIT_SUPPORT``环境变量或使用 -Xperf_jit 运行Python时激活。由Pablo Galindo提供补丁。

  • gh-117514: 添加 sys._is_gil_enabled() 函数,用于返回当前GIL是否启用。在默认构建中,由于GIL始终启用,该函数总是返回 True。在自由线程构建中,它可能返回 TrueFalse

  • gh-118164: 打破 decimal 模块的Python实现与整数到字符串转换的Python代码之间的循环。同时优化9_000到135_000位十进制数字范围内的整数到字符串转换。

  • gh-118473: 修复 sys.set_asyncgen_hooks() 在引发 TypeError 时部分设置的问题。

  • gh-118465: 编译器在类上填充新的 __firstlineno__ 字段,该字段包含类定义的第一行的行号。

  • gh-118492: 修复类型缓存可能暴露在运行终结器时先前访问的属性问题。

  • gh-117714: 更新 async_generator.athrow().close()async_generator.asend().close() 以关闭它们底层异步生成器的部分。

  • gh-111201: 交互式 解释器现在在Python中实现,允许许多新功能,如颜色、多行输入、历史记录查看和粘贴模式。由Pablo Galindo、Łukasz Langa和Lysandros Nikolaou基于PyPy项目的代码贡献。

  • gh-74929: 实现PEP 667:转换 FrameType.f_localsPyFrame_GetLocals(),当帧引用函数或推导式时返回一个直写代理对象。

  • gh-116767: 修复编译器在'async with'具有许多上下文管理器时崩溃的问题。

  • gh-118335: 改变如何使用第2层解释器。现在通过配置 --enable-experimental-jit=interpreter 在构建时做出此选择,而不是通过运行Python时使用 -X uops 或设置环境变量 PYTHON_UOPS=1

    注意! 这将用于启用或禁用微操作的环境变量更改为 PYTHON_JIT。旧的 PYTHON_UOPS 不再使用。

  • gh-118306: 更新JIT编译以使用LLVM 18

  • gh-118160: 类内的 Annotation scopes 现在可以包含推导式。不过,这样的推导式在运行时不会内联到其父作用域中。由Jelle Zijlstra提交的补丁。

  • gh-118272: 修复了 generator.close 不释放生成器帧局部变量的bug。

  • gh-118216: 不考虑模块名前带点的 __future__ 导入。

  • gh-118074: 确保COLD_EXITS数组中的Executor对象不会被假定为可GC的(这会访问对象之外的字节)。

  • gh-107674: 延迟加载帧行号以提高追踪性能

  • gh-118082: 改进了对于没有名称的导入(如 from x importimport 情况)的 SyntaxError 消息。现在它会向用户指出 import 期望其后至少有一个名称。

  • gh-118090: 改进了对于空类型参数括号的 SyntaxError 消息。

  • gh-117958: 添加了一个 get_jit_code() 方法,当实验性JIT启用时,用于从UOp Executor访问JIT编译的机器代码。由Anthony Shaw提交的补丁。

  • gh-117901: 为编译器的代码生成添加了一个选项,用于保存嵌套指令序列以供内省。

  • gh-116622: 当嵌入到Android应用中时,将stdout和stderr重定向到系统日志。

  • gh-109118: 类作用域内的 annotation scope 现在可以包含lambda表达式。

  • gh-117894: 防止 agen.aclose() 对象在 .throw() 后被重用。

  • gh-117881: 防止通过athrow().throw()或asend().throw()并发访问异步生成器

  • gh-117536: 修复了调用 agen.aclose().throw(Exception) 时的 RuntimeWarning

  • gh-117755: 修复了s390x上对于巨大内存分配(约8,589,934,592 GiB)的mimalloc分配器。由Victor Stinner提交的补丁。

  • gh-117750: 修复了在清除对象字典时,对象字典与对象内部值不同步的问题。obj.__dict__.clear() 现在会清除内部值,但保留字典与对象的关联。

  • gh-117431: 通过将以下 bytesbytearray 方法适配到 METH_FASTCALL 调用约定,提高了它们的性能:

    • count()

    • find()

    • index()

    • rfind()

    • rindex()

  • gh-117709: 通过使用 PEP 590 vectorcall 调用约定,加快了带有位置唯一参数的 str() 调用速度。由 Erlend Aasland 提供补丁。

  • gh-117680: 为 _PyInstructionSequence 提供了一个 Python 接口,并在测试中使用它。

  • gh-115776: 静态分配的对象根据定义是不朽的,因此无论它们是否在扩展模块中,都必须被标记为不朽。

  • gh-117385: 从 sys.settrace() 中移除了未处理的 PY_MONITORING_EVENT_BRANCHPY_MONITORING_EVENT_EXCEPTION_HANDLED 事件。

  • gh-116322: 扩展模块可以向运行时表明它们可以在没有 GIL 的情况下运行。多阶段初始化模块通过为 Py_mod_gil 槽提供 Py_MOD_GIL_NOT_USED 来做到这一点,而单阶段初始化模块则在其初始化函数中调用 PyUnstable_Module_SetGIL(mod, Py_MOD_GIL_NOT_USED)

  • gh-116129: 实现了 PEP 696,增加了对类型参数默认值的支持。补丁由 Jelle Zijlstra 提供。

  • gh-93502: 向 C-API 添加了两个新函数 PyRefTracer_SetTracer()PyRefTracer_GetTracer(),它们允许以与 tracemalloc 模块相同的方式跟踪对象的创建和销毁。由 Pablo Galindo 提供补丁。

  • gh-107674: 显著提高了 sys.settrace() 的性能。

  • gh-95754: 当脚本遮蔽标准库中的模块导致引发 AttributeError 时,改进错误信息。同样地,当脚本遮蔽第三方模块并试图在初始化过程中访问该第三方模块的属性时,也改进错误信息。

  • gh-99180: 在 return 和简单的 assignment 语句中省略无信息的回溯指示器。由Pablo Galindo提供的补丁。

  • gh-105879: 允许将 globalslocals 参数作为关键字传递给 exec()eval()

  • gh-118418: 现在,如果你没有为 typing._eval_type()typing.ForwardRef._evaluate() 的新 type_params 参数传递值,将发出 DeprecationWarning。(首先,不鼓励使用这些私有且未文档化的函数,但如果没有为 type_params 参数传递值,可能会导致在 Python 3.12 或更新版本中出现错误行为。)

  • gh-118660: 为 typing.ContextManagertyping.AsyncContextManager 添加一个可选的第二个类型参数,分别表示 __exit__()__aexit__() 的返回类型。此参数默认为 bool | None

  • gh-118650: enum 模块允许在 Enum 类型上定义名为 _repr_* 的方法。

  • gh-118648: 为 typing.Generatortyping.AsyncGenerator 添加类型参数默认值。

  • gh-101137: mimetypes 现在支持 MIME 类型 text/x-rst

  • gh-118164: 如果上下文精度设置为非常高的值,decimal 模块的 Python 实现可能在相对较小的幂情况下(如 2**117)看起来挂起。现在使用了一种不同的方法来检查完全可表示的结果,该方法不依赖于计算 10**precision (这可能因为太大而无法有效计算) 。

  • gh-111744: breakpoint()pdb.set_trace() 现在在调用后立即进入调试器,而不是在执行下一行之前。

  • gh-118500: 为 zipapps 添加 pdb 支持

  • gh-118406: 为 sqlite3.Connection 对象添加签名。

  • gh-101732: 在可用时使用兼容 Y2038 的 openssl 时间函数。

  • gh-118404: 修复 inspect.signature() 对于不可比较的可调用对象的问题。

  • gh-118402: 修复 inspect.signature() 对于 functools.cmp_to_key() 调用结果的问题。

  • gh-116622: 在 Android 上,sysconfig.get_platform 现在返回 PEP 738 指定的格式。

  • gh-118285: 允许通过 __text_signature__ 属性指定扩展类型的自定义可调用实例的签名。指定 operator.attrgetteroperator.itemgetteroperator.methodcaller 实例的签名。

  • gh-118314: 修复 binascii.a2b_base64() 严格模式下的一个边缘情况,其中在不必要填充时未检测到过多的填充。

  • gh-118271: 为 PhotoImage 添加 read() 方法以从文件读取图像,以及 data() 方法以获取图像数据。为 PhotoImagewrite() 方法添加 backgroundgrayscale 参数。

  • gh-118225: 为 PhotoImage 添加 copy_replace() 方法以将一个图像的区域复制到另一个图像,可能带有像素缩放和/或子采样。为 PhotoImagecopy()zoom()subsample() 方法添加 from_coords 参数。为 PhotoImagecopy() 方法添加 zoomsubsample 参数。

  • gh-118221: 修复了一个错误,其中如果使用了自定义的 row factorysqlite3.Connection.iterdump() 可能会失败。由 Erlend Aasland 提供补丁。

  • gh-118013: 修复了在 gh-103193 中引入的回归问题,该问题意味着在实例上调用 inspect.getattr_static() 会导致对该实例类的强引用在 inspect 模块的内部缓存中持续存在。如果类是动态创建的,类持有占用大量内存的其他对象的强引用,并且缓存包含对类的唯一强引用,这会导致意外的内存消耗。对该回归问题的修复导致 getattr_static() 的速度变慢,但该函数仍应比 Python 3.11 中的速度快得多。由 Alex Waygood 提供补丁。

  • gh-118218: 在常见情况下,将 itertools.pairwise() 的速度提高了多达 1.8 倍。

  • gh-117486: 改进了 ast.AST 的用户定义子类的行为。现在,这些类在通常情况下不需要任何更改即可符合 Python 3.13 中 ast 模块的行为变化。由 Jelle Zijlstra 提供补丁。

  • gh-90848: 修复了 unittest.mock.create_autospec(),使其能够使用关键字参数配置父模拟。

  • gh-118168: 修复了当 typing.Unpack 与内置的 tuple 一起使用时的不正确参数替换。现在,当 typing.Unpack 与某些无效类型一起使用时,会引发 TypeError。由 Jelle Zijlstra 提供补丁。

  • gh-118131: 为 random 模块添加了命令行界面。由 Hugo van Kemenade 提供补丁。

  • gh-118107: 修复了 zipimport 对 ZIP64 文件的读取,这些文件的条目太大或偏移太远。

  • gh-102511: 修复了 Windows 上 UNC 路径的 os.path.normpath()。通过原生实现加速 os.path.splitroot()

  • gh-117535: 将 warnings 的未知文件名从 sys 更改为 <sys>,以澄清它不是真实的文件名。

  • gh-114053: 修复了在文件顶部有 from __future__ import annotations 的模块中,对使用了 PEP 695 类型参数的类调用 typing.get_type_hints() 时出现的错误 NameError。由 Alex Waygood 提供补丁。

  • gh-116931: 为 tarfile.TarFile.addfile() 添加了 fileobj 参数检查。

  • gh-117995: 当使用 sequence 参数绑定索引化的无名占位符时,不再引发 DeprecationWarning。另见 gh-100668

  • gh-80361: 修复了当字符集为 RFC 2231 编码时,email.message.Message.get_payload() 中的 TypeError。

  • gh-86650: 修复了解析一些带有无效 Message-ID(包括由 Microsoft Outlook 生成的一次性地址)的邮件时出现的 IndexError。

  • gh-117691: 改进了由 tarfile 发出的与 PEP 706 相关的弃用警告的错误信息。如果未向 extract()extractall 提供 filter 参数,弃用警告现在会指向用户代码中调用相关函数的那一行。由 Alex Waygood 提供补丁。

  • gh-115874: 修复了在垃圾回收 _asyncio.FutureIter 对象时可能出现的段错误。由 Savannah Ostrowski 提供补丁。

  • gh-115060: 通过省略初始的 is_dir() 调用,加速了 pathlib.Path.glob()。由于这一变化,glob() 不再能引发 OSError

  • gh-77102: site 模块现在首先使用 UTF-8 解析 .pth 文件,如果发生 UnicodeDecodeError 则使用 locale encoding。之前仅支持 locale encoding。

  • gh-76785: 我们为了 PEP 734 的 PyPI 实现,暴露了底层的 _interpreters 模块。它有时可作为 _xxsubinterpreters 模块可用,以前仅用于测试。在大多数情况下,它应被视为内部模块,如 _thread_imp。参见 https://discuss.python.org/t/pep-734-multiple-interpreters-in-the-stdlib/41147/26

  • gh:115060: 通过不对非通配符模式段扫描目录来加速 pathlib.Path.glob()

  • gh:117727: 通过内部使用 os.scandir() 来加速 pathlib.Path.iterdir()

  • gh:117586: 通过内部使用字符串来加速 pathlib.Path.walk()

  • gh:117722: 将 asyncio.StreamReader.readuntil() 中的新多分隔符支持更改为仅接受分隔符元组而不是任意可迭代对象。

  • gh:117692: 修复了当 doctest.DocTestFinder 在包装的 builtin_function_or_method 上失败时的错误。

  • gh:117348: 通过避免使用数据类,大幅恢复了 configparser 的导入时间性能。

  • gh:117641: 在 Unix 上加速 os.path.commonpath()

  • gh:117663: 修复 _simple_enum 以在存在多个参数但仅一个是成员值时检测别名。

  • gh:117636: 加速 os.path.join()

  • gh:117618: 支持 package.module 作为 filename 用于 pdbbreak 命令。

  • gh:102247: http.HTTPStatus 中的状态码枚举常量已更新,以包含来自 RFC9110 的名称。该 RFC 包括一些以前仅用于 WEBDAV 的 HTTP 状态,并为它们分配了更通用的名称。

    旧常量被保留以向后兼容。

  • gh:117607: 加速 os.path.relpath()

  • gh:117586: 通过内部使用字符串来加速 pathlib.Path.glob()

  • gh:117225: 为 doctest 输出添加颜色。由 Hugo van Kemenade 提供补丁。

  • gh:117566: ipaddress.IPv6Address.is_loopback() 现在将对于 IPv4 映射的环回地址返回 True,即 ::ffff:127.0.0.0/104 地址空间中的地址。

  • gh:117546: 修复了 os.path.realpath() 在 POSIX 上遇到符号链接循环后停止解析符号链接的问题。

  • gh-116720: 改进了 asyncio.TaskGroup 在外部取消与内部取消冲突时的行为。例如,当两个任务组嵌套并且同时在子任务中遇到异常时,外部任务组可能会行为不当,因为它的内部取消被内部任务组吞没了。

    在任务组被外部取消并且必须引发 ExceptionGroup 的情况下,现在会调用父任务的 cancel() 方法。这确保在下一个 await 时会引发 asyncio.CancelledError,因此取消不会被丢失。

    这些更改的一个附加好处是现在任务组会保留取消操作计数 (asyncio.Task.cancelling())。

    为了处理某些边界情况,现在 asyncio.Task.uncancel() 可以在取消操作计数达到零时重置未写入文档的 _must_cancel 旗标。

  • gh-117516: 添加 typing.TypeIs,实现 PEP 742。由 Jelle Zijlstra 提供补丁。

  • gh-117503: 修复了在 Posix 系统上 os.path.expanduser() 中非 ASCII 用户名的字节路径支持。

  • gh-117394: 如果用户有权限,os.path.ismount() 现在快 2-3 倍。

  • gh-117313: 在重新折叠 email 消息时,仅将 '\n''\r''\r\n' 视为行分隔符。保留控制字符 '\v''\f''\x1c''\x1d''\x1e' 以及 Unicode 行分隔符 '\x85''\u2028''\u2029' 不变。

  • gh-117142: 将 _ctypes 转换为多阶段初始化 (PEP 489)。

  • gh-66543: 添加了 mimetypes.guess_file_type() 函数,该函数适用于文件路径。在 guess_type() 中传递文件路径而非 URL 是 软弃用`。

  • gh-68583: webbrowser CLI:用 argparse 替换 getopt,添加长选项。由 Hugo van Kemenade 提供补丁。

  • gh-116871: AttributeErrorImportError 的名称建议现在仅在原始名称有下划线时才包括带下划线的名称。

  • gh-116023: 默认情况下不在 ast.dump() 中显示空字段(值为 None[])。添加 show_empty=False 参数以可选地显示它们。

  • gh-115961: 在模块 bz2lzmatarfilezipfile 中为压缩和归档文件类对象添加了 namemode 属性。gzip.GzipFilemode 属性值从整数(12)更改为字符串('rb''wb')。由 zipfile.ZipFile.open() 返回的可读文件类对象的 mode 属性值从 'r' 更改为 'rb'

  • gh-82062: 修复 inspect.signature(),以正确处理使用模块命名空间中定义名称的扩展模块中方法的参数默认值。

  • gh-83856: 为所有 multiprocessing 启动方法启用 atexit

  • gh-113081: 在 pdb 中打印彩色异常,就像内置的 traceback 一样。

  • gh-112855: 加速 pathlib.PurePath 对象的 pickle 操作。由 Barney Gale 提供补丁。

  • gh-111744: 在 bdb 中支持操作码事件。

  • gh-109617: ncurses: 修复了在 macOS 13 或更早版本上,当 Python 使用 Apple Xcode 15 的 SDK 构建时可能发生的崩溃问题。

  • gh-83151: 在 pdb shell 中启用任意语句和评估,以访问当前帧的局部变量,这使得生成器或嵌套函数等多作用域代码可以工作。

  • gh-110209: 为类型提示目的,向 types.GeneratorTypetypes.CoroutineType 添加 __class_getitem__()。由 James Hilton-Balfe 提供补丁。

  • gh-108191: types.SimpleNamespace 现在接受一个可选的定位参数,该参数指定属性的初始值作为一个字典或键值对的可迭代对象。

  • gh-62090: 通过简化使用格式,修复了由 argparse 中元变量或 SUPPRESS-ed 组中的空白引起的断言错误。由 Ali Hamdan 提供补丁。

  • gh-102402: 调整 logging.LogRecord 使用 time.time_ns() 并修复与浮点数学相关的小错误。

  • gh-100242: 通过不仅仅总是检查 partial 的第一个参数是否存在 'func' 属性,使纯Python实现的 functools.partial.__new__ 更符合C实现。相反,Python版本和C版本都在 partial 的第一个参数上执行 isinstance(func, partial) 检查。

  • gh-99730: 在urllib中,HEAD请求不再在重定向时升级为GET请求。

  • gh-66410: 在创建 Tk 对象或调用 Tk 对象的 wantobjects() 方法之前,将 tkinter 模块全局变量 wantobjects 设置为 2,现在使得在 tkinter 模块中注册的回调参数根据其在Tcl中的内部表示作为各种Python对象(intfloatbytestuple)传递,而不仅仅是 strtkinter.wantobjects 现在默认设置为 2

  • bpo-40943: 修复了在解析带有截断的Message-ID、地址、路由等的电子邮件时出现的几个IndexError,例如 example@

  • bpo-39324: 添加 .md 文件扩展名与 text/markdown MIME 类型的映射关系。

  • bpo-18108: shutil.chown() 现在支持*dir_fd* 和 follow_symlinks 关键字参数。

  • bpo-30988: 修复了解析带有无效地址头(开头或结尾有句点)的电子邮件的问题。由tsufeki提供补丁。

  • bpo-32839: 为Tkinter小部件添加 after_info() 方法。

文档

  • gh-117928: 文档所需的最低Sphinx版本现在是6.2.1。

构建

  • gh-118734: 修复了在直接调用(不是通过 build.bat 脚本)且没有为 UseTIER2 指定值时Windows构建的问题。

  • gh-115119: configure 选项 --with-system-libmpdec 现在默认值为 yes。捆绑的 libmpdecimal 副本将在Python 3.15中移除。

  • gh-117845: 通过在 configure 中检测readline钩子签名,修复了针对最新libedit版本的构建问题。

  • gh-116622: 添加了一个测试平台项目以在Android上运行测试套件。

  • gh-117645: 将WASI的堆栈大小从512 KiB增加到8 MiB,初始内存从10 MiB增加到20 MiB。由Victor Stinner提交的补丁。

  • gh-115119: configure 现在使用 pkg-config 来检测 decimal 依赖,如果给出了 --with-system-libmpdec 选项。

Windows

  • gh-115119: 更新Windows安装程序以使用libmpdecimal 4.0.0。

  • gh-118486: os.mkdir() 现在接受 mode0o700 以限制新目录仅对当前用户开放。

  • gh-118347: 修复了启动器更新未被安装的问题。

  • gh-118293: multiprocessing 模块现在在生成进程时传递 STARTF_FORCEOFFFEEDBACK 标志,告诉Windows不要改变鼠标光标。

  • gh-115009: 更新Windows安装程序以使用SQLite 3.45.3。

  • gh-90329: 当请求的路径和创建的路径仅通过短(8.3风格)名称不同时,抑制在虚拟环境创建时显示的警告。如果路径中的连接或符号链接导致venv在不同于最初请求的位置创建,将继续显示警告。

  • gh-117786: 修复了从Store安装创建时虚拟环境未正确启动的问题。

macOS

  • gh-115119: 更新macOS安装程序以使用libmpdecimal 4.0.0。

  • gh-114099: 使iOS预处理器符号的使用与较旧的macOS SDK兼容。

  • gh-115009: 更新macOS安装程序以使用SQLite 3.45.3。

  • gh-91629: 当为Fish shell安装时,使用 ~/.config/fish/conf.d 配置和 fish_add_path 来设置 PATH

IDLE

  • bpo-34774: 使用用户选择的颜色主题为Help => IDLE Doc。

C API

Python 3.13.0 alpha 6

发布日期: 2024-04-09

核心与内置函数

  • gh-117494: 将指令序列数据结构从compile.c重构到instruction_sequence.c中。

  • gh-116968: 引入一个统一的16位回退计数器类型(_Py_BackoffCounter),在Tier 1自适应特化器和Tier 2优化器之间共享。用于自适应特化计数器的API已更改,但行为(应该)是相同的。

    Tier 2计数器的行为已更改:

    • 不再有动态阈值(我们从未改变这些)。

    • 所有计数器现在使用相同的指数回退。

    • ``JUMP_BACKWARD``的计数器从16开始倒数。

    • 侧面退出的 temperature 从64开始倒数。

  • gh-117431: 通过将以下 bytesbytearray 方法适配到 METH_FASTCALL 调用约定,提高了它们的性能:

    • endswith()

    • startswith()

  • gh-117431: 通过使以下 str 方法适应 METH_FASTCALL 调用约定,提高其性能:

  • gh-117411: 将 PyFutureFeatures 移动到内部头文件并使其私有化。

  • gh-109120: 添加了对不正确星号表达式的处理,例如 f(3, *)。补丁由Grigoryev Semyon提供。

  • gh-117266: 修复了某些用户创建的 ast.AST 子类的崩溃问题。现在期望这些类设置``_field_types``属性。

  • gh-99108: 更新了 hashlib 内置的 HACL* project C 代码,这是我们用于许多实现的上游代码,当它们在给定构建中未通过 OpenSSL 提供时。这也避免了 C 符号名称一个定义规则链接问题的罕见可能性。

  • gh-117108: 将年轻代中对象的旧空间位从 0 更改为 gcstate->visited,这样在 GC 期间创建的任何对象如果被移动到老年代,其旧位将被正确设置。

  • gh-117108: 循环 GC 现在基于堆的总大小而不是对象创建速率来选择增量的大小。这确保了它能够跟上堆的增长。

  • gh-116735: 对于 INSTRUMENTED_CALL_FUNCTION_EX,将 arg0 设置为 sys.monitoring.MISSING 而不是 None,用于 CALL 事件。

  • gh-113964: 现在只有在所有非守护线程退出后才阻止通过 os.fork() 创建新线程和进程。

  • gh-116626: 确保 INSTRUMENTED_CALL_FUNCTION_EX 总是发出 CALL

  • gh-116554: list.sort() 现在利用了更多部分排序的情况,特别是那些具有长下降序列和相等值的子序列的情况。这些现在被识别为单个序列(以前,每个重复值的块都会导致新序列的创建)。

  • gh-114099: 添加了一个加载器,可以在 iOS 风格的 Frameworks 文件夹中发现扩展模块。

  • gh-115775: 编译器用类体中任何函数通过 self.X 访问的该类的属性名称填充类上的新 __static_attributes__ 字段。

  • gh-115776: 值数组 PyDictValues 结构现在在分配时嵌入到对象中。这在常见情况下提供了更好的性能,并且在对象的 __dict__ 具体化时性能下降不多。

  • gh-108362: 实现了一个增量循环垃圾收集器。通过增量收集老年代,无需进行完整的堆扫描。这可以极大减少拥有大堆的程序的最高暂停时间。

    将代数从三代减少到两代。老年代被分成两个空间,“已访问”和“待处理”。

    收集分两步进行:: * 从年轻代和待处理空间的一小部分形成一个增量。 * 扫描这个增量,并将幸存者移动到已访问空间的末尾。

    当收集空间变空时,两个空间会交换。

  • gh-109870: 数据类现在每个数据类调用一次 exec(),而不是每个添加的方法调用一次。这可以将数据类的创建速度提高高达20%。

  • gh-97901: mimetypes 现在支持MIME类型 text/rtf

  • bpo-24612: 改进了当'not'出现在操作符后时发生的 SyntaxError。由Pablo Galindo提供补丁

  • gh-117648: 提高了 os.path.join()os.path.expanduser() 的性能。

  • gh-117584: 对 posixpath.relpath() 中的非路径参数引发 TypeError

  • gh-117467: 在 mailbox.mbox.flush() 中重写时保留邮箱所有权。由Tony Mountifield提供补丁。

  • gh-114848: 当 getcwd() 返回'(不可达)'时引发 FileNotFoundError,这在Linux >= 2.6.36且glibc < 2.27时可能发生。

  • gh-117459: asyncio.asyncio.run_coroutine_threadsafe() 现在保留在协程中引发的 :CancelledError`、TimeoutErrorInvalidStateError 的追踪信息。

  • gh-117381: 修复了 ntpath.commonpath() 的错误信息。

  • gh-117337: 弃用未记录的 glob.glob0()glob.glob1() 函数。使用 glob.glob() 并将其目录传递给它的 root_dir 参数代替。

  • gh-117349: 优化了 os.path 中的几个函数。

  • gh-117348: 重构了 configparser.RawConfigParser._read() 方法以减少圈复杂度并提高可理解性。

  • gh-117335: 对于非序列类型,ntpath.commonpath() 现在会抛出 TypeError。

  • gh-66449: 如果配置允许,configparser.ConfigParser 现在可以接受在命名节之前的未命名节。

  • gh-88014: 在 gzip 模块的 gzip.GzipFile 文档中,解释了可选构造函数参数 mtime 的数据类型,并建议使用 mtime = 0 来生成确定性流。

  • gh-117310: 修复了在创建新的 _ssl._SSLContext 时,如果 CPython 被不合理地构建导致默认密码列表为空,或链接的 SSL 库报告其 C SSL_CTX_set_cipher_list() API 失败时,可能触发的早期及额外的 Py_DECREF 崩溃问题。

  • gh-117294: 如果 doctest 中的所有示例都被跳过,DocTestCase 现在会报告为跳过。

  • gh-98966: 在 subprocess 中,当 stdout=STDOUT 时,会引发一个更信息化的消息。

  • gh-117225: doctest:只有当非零时才打印“and X failed”,不要将“1 items”复数化。由 Hugo van Kemenade 提供补丁。

  • gh-117205: 通过增加 chunksize,在使用多处理时,compileall.compile_dir() 的速度提高了 20%。

  • gh-117178: 修复了在 gh-114781 中引入的自引用模块的懒加载回归问题。

  • gh-112383: 修复 dis 模块对 ENTER_EXECUTOR 指令的处理。

  • gh-117182: 修改自身 __class__ 的模块的懒加载不再将 __class__ 恢复为 types.ModuleType

  • gh-117084: 修复了 Windows 上 zipfile 提取包含反斜杠名称的目录条目时的问题。

  • gh-117114: 使 os.path.isdevdrive() 在所有平台上可用。对于不提供 Dev Drives 的平台,它将始终返回 False

  • gh-117110: 修复了一个阻止 typing.Any 的子类用参数实例化的错误。由 Chris Fu 提供补丁。

  • gh-109653: 在 importlib.metadata 和 importlib.resources 中延迟选择导入,速度提升14%。

  • gh-70647: 开始弃用当前 datetime.datetime.strptime()time.strptime() 的行为,当年份 指定且日期恰好是2月29日时,如 strptime("02-29", "%m-%d"),总是解析失败并抛出 ValueError。这应有助于避免用户每四年因对API的自然错误假设而在解析部分日期值时发现新错误。

  • gh-116987: 修复了 inspect.findsource() 对类代码对象的处理。

  • gh-114099: 修改标准库以适应iOS平台的差异。

  • gh-90872: 在Windows上,subprocess.Popen.wait() 不再用负超时调用 WaitForSingleObject():如果超时为负,则传递 0 毫秒。由Victor Stinner提供补丁。

  • gh-116957: configparser: 在早期读取引发 DuplicateSectionError 或 DuplicateOptionError 后,不再将 ConfigParser 值保留在无效状态(存储为列表而不是字符串)。

  • gh-115538: _io.WindowsConsoleIO 现在会在传递布尔值作为文件描述符参数时发出警告。

  • gh-90095: 忽略 .pdbrc 中的空行和注释。

  • gh-106531: 从 zipp 3.18 更新了 zipfile._path,为PyPy提供了更好的兼容性,为深度嵌套的zip文件提供了更好的glob性能,并为其他测试(如 importlib.resources)提供了对 CompleteDirs.inject 的内部访问。

  • gh-63207: 在Windows上,time.time() 现在使用 GetSystemTimePreciseAsFileTime() 时钟,分辨率优于1微秒,而不是分辨率为15.6毫秒的 GetSystemTimeAsFileTime() 时钟。由Victor Stinner提供补丁。

  • gh-116764: 恢复在 urllib.parse 函数 parse_qs()parse_qsl() 中对 None 和其他假值的支持。此外,现在它们会对非零整数和非空序列抛出 TypeError。

  • gh-116811: 在 PathFinder.invalidate_caches 中,委托给 MetadataPathFinder.invalidate_caches

  • gh-116647: 修复数据类中的递归子类问题

  • gh-113171: 修复了以下属性判断中的各类误报(false positives)和漏报(false negatives)问题

    同样适用于相应的 ipaddress.IPv4Networkipaddress.IPv6Network 属性。

  • gh-63283: 在 encodings.idna 中,现在接受任何大小写的 ACE 前缀(xn--)。由 Pepijn de Vos 和 Zackery Spytz 提供补丁。

  • gh-71042: 添加 platform.android_ver(),提供 Android 上的设备和操作系统信息。

  • gh-73468: 新增 math.fma() 函数,封装 C99 的 fma() 操作:融合乘加函数。由 Mark Dickinson 和 Victor Stinner 提供补丁。

  • gh-116608: importlib.resources 函数 is_resource()open_binary()open_text()path()read_binary()read_text() 不再被弃用,并且通过多个位置参数支持子目录。contents() 函数也允许子目录,但仍被弃用。

  • gh-116484: 修改自动生成的 tkinter.Checkbutton 控件名称,以避免在同一父容器内与自动生成的 tkinter.ttk.Checkbutton 控件名称发生冲突。

  • gh-114314: 在 ctypes 中,ctype 数据现在直接存储在类型对象中,而不是存储在字典子类中。这是一个内部更改,不应影响使用。

  • gh-116401: 修复了 os.fwalk()shutil.rmtree() 在打开命名管道时的阻塞问题。

  • gh-71052: 在 Android 上实现了 ctypes.util.find_library()

  • gh-90535: 修复了在 logging.TimedRotatingFileHandler 中对于 when='MIDNIGHT'when='Wx'interval 值 > 1 的支持。

  • gh-113308: 从 uuid 中移除了一些内部保护部分:_has_uuid_generate_time_safe_netbios_getnode_ipconfig_getnode_load_system_functions。它们未被使用。

  • gh-115627: 修复了 ssl 模块在连接被对端终止时的错误处理。现在它会抛出一个带有适当错误代码的 OSError,而不是 EOFError。

  • gh-114847: 在非 Windows 平台上加速了 os.path.realpath()

  • gh-114271: 修复了 threading.Thread.join() 中的一个竞争条件。

    threading._MainThread 现在总是表示主解释器的主线程。

    PyThreadState.on_deletePyThreadState.on_delete_data 已被移除。

  • gh-113538: 添加了 asyncio.Server.close_clients()asyncio.Server.abort_clients() 方法,允许更强制性地关闭一个 asyncio 服务器。

  • gh-85287: 更改 Unicode 编解码器以返回 UnicodeEncodeError 或 UnicodeDecodeError,而不仅仅是 UnicodeError。

  • gh-113548: pdb 现在允许 CLI 参数传递给 pdb -m

  • gh-112948: 使 pdb 的补全类似于 Python REPL。

  • gh-105866: 修复了 _get_slots 的 bug,该 bug 在定义带有 slots 和 weakref_slot 的数据类时会导致错误。

  • gh-96471: 添加了 asyncio.Queue 的终止功能,通过 shutdown() 方法。

  • gh-89739: zipimport 模块现在可以读取 ZIP64 文件。

  • bpo-33533: asyncio.as_completed() 现在返回一个既是异步迭代器又是普通迭代器的对象。新的异步迭代模式使得在先前任务和它们完成的结果之间更容易建立关联。这与 concurrent.futures.as_completed() 的迭代模式更加匹配。由 Justin Arthur 提供补丁。

  • bpo-27578: inspect.getsource() (及相关函数) 现在可以处理空模块文件,返回 '\n' (或合理等效内容) 而不是引发 OSError。由 Kernc 提供补丁。

  • bpo-37141: 在 asyncio.StreamReader.readuntil() 中接受一个分隔符的可迭代对象,当遇到其中之一时停止。

  • gh-66543: 使 mimetypes.guess_type() 能够正确解析仅包含主机名的URL、包含片段或查询的URL以及Windows上仅包含UNC共享点的文件名。基于 Dong-hee Na 的补丁。

  • bpo-15010: unittest.TestLoader.discover() 现在保存 unittest.TestLoader._top_level_dir 的原始值,并在调用结束时恢复它。

文档

  • gh-115977: 移除对 Emscripten 的兼容性引用。

  • gh-114099: 添加iOS平台指南,并标记在iOS上不可用的模块。

  • gh-91565: 更改文档文件和配置输出,以反映报告错误的新位置 - 即GitHub而非bugs.python.org。

测试

  • gh-83434: 在regrtest中搜索引用泄漏(-R``选项)时禁用JUnit XML输出(--junit-xml=FILE``命令行选项)。由 Victor Stinner 提供补丁。

  • gh-117187: 修复对 vanilla Expat <2.6.0 的XML测试。

  • gh-116333: 更新了TLS相关事物的测试(错误代码等),以对在OpenSSL的BoringSSL和AWS-LC分支中看到的特定错误消息字符串和行为更加宽容。

  • gh-117089: 将 importlib.metadata 的测试整合到它们自己的 metadata 包中。

  • gh-115979: 更新 test_importlib,使其在 WASI SDK 21 下通过。

  • gh-112536: 在合理的执行时间内运行TSAN测试,为test.regrtest添加--tsan选项。由Donghee Na提供补丁。

  • gh-116307: 添加了导入助手 isolated_modules,因为 CleanImport 不会移除上下文期间导入的模块。在importlib.resources测试中使用它,避免留下 mod 影响importlib.metadata测试。

构建

  • gh-114736: 让WASI构建使用WASI SDK 21。

  • gh-115983: 跳过必须作为共享库在WASI下构建的测试模块。

  • gh-71052: 添加Android构建脚本和说明。

Windows

  • gh-117267: 在 st_ctime 的弃用期内,确保 DirEntry.stat().st_ctimeos.stat() 行为一致,包含与 st_birthtime 相同的值。弃用期过后,st_ctime 将是元数据更改时间(或通过 DirEntry 不可用),只有 st_birthtime 将包含创建时间。

  • gh-116195: 通过在有可用时使用替代系统API,提高 os.getppid() 的性能。由vxiiduu贡献。

  • gh-88494: 在Windows上,time.monotonic() 现在使用 QueryPerformanceCounter() 时钟以获得优于1 us的分辨率,而不是具有15.6 ms分辨率的 GetTickCount64() 时钟。由Victor Stinner提供补丁。

  • gh-116773: 修复``<_overlapped.Overlapped object at 0xXXX> still has pending operation at deallocation, the process may crash``的实例。

  • gh-91227: 修复asyncio ProactorEventLoop实现,以便向未监听的地址发送数据报不会阻止接收更多数据报。

  • gh-115119: 在构建 _decimal 模块时,从供应商的 libmpdecimal 代码切换到``cpython-source-deps``仓库中单独托管的外部包。

C API

  • gh-117642: 为 %#T%#N 修复 PEP 737 的实现。

  • gh-87193: _PyBytes_Resize() 现在可以对引用计数 > 1 的 bytes 对象调用,包括 1 字节的 bytes 对象。如果引用计数 > 1,它会创建一个新的 bytes 对象并销毁旧的对象。

  • gh-117021: 修复非 Windows 64 位平台上 PyLong_AsPid() 中的整数溢出问题。

  • gh-115756: PyCode_GetFirstFree() 现在是一个不稳定 API,并已重命名为 PyUnstable_Code_GetFirstFree()。(由 Bogdan Romanyuk 在 gh-115781 中贡献)

  • gh-116869: 添加 test_cext 测试:构建一个 C 扩展来检查 Python C API 是否会发出 C 编译器警告。由 Victor Stinner 提供补丁。

  • gh-116869: 使 C API 再次兼容 -Werror=declaration-after-statement 编译器标志。补丁由 Victor Stinner 提供。

  • gh-116936: 将 PyType_GetModuleByDef() 添加到有限的 C API 中。由 Victor Stinner 提供补丁。

  • gh-116809: 恢复被移除的私有 _PyErr_ChainExceptions1() 函数。由 Victor Stinner 提供补丁。

  • gh-115754: 在有限的 C API 版本 3.13 中,获取 Py_NonePy_FalsePy_TruePy_EllipsisPy_NotImplemented 单例现在在稳定的 ABI 级别实现为函数调用以隐藏实现细节。获取这些常量仍然返回借用的引用。由 Victor Stinner 提供补丁。

  • gh-115754: 添加 Py_GetConstant()Py_GetConstantBorrowed() 函数来获取常量。例如,Py_GetConstant(Py_CONSTANT_ZERO) 返回对常量零的 强引用。由 Victor Stinner 提供补丁。

  • gh-111696: 为 PyUnicode_FromFormat() 添加对 %T%T#%N%N# 格式的支持:格式化对象类型和类型的完全限定名称:调用 PyType_GetModuleName()。更多信息请参见 PEP 737。由 Victor Stinner 提供补丁。

  • gh-111696: 添加 PyType_GetModuleName() 函数以获取类型的模块名称。相当于获取 type.__module__ 属性。由 Eric Snow 和 Victor Stinner 提供补丁。

  • gh-111696: 添加 PyType_GetFullyQualifiedName() 函数以获取类型的完全限定名。等价于 f"{type.__module__}.{type.__qualname__}",或者如果 type.__module__ 不是字符串或等于 "builtins" 时,等价于 type.__qualname__。由 Victor Stinner 提供补丁。

  • gh-85283: fcntlgrppwdtermios_statistics_testconsole C 扩展现在使用 limited C API 构建。由 Victor Stinner 提供补丁。

  • gh-111140: 向 PyLong_AsNativeBytes()PyLong_FromNativeBytes() 添加额外的标志,允许调用者决定如何处理填充整个缓冲区的值的边缘情况。

  • gh-113024: 添加 PyObject_GenericHash() 函数。

Python 3.13.0 alpha 5

发布日期:2024-03-12

安全性

核心与内置函数

  • gh-116604: 在通过 PyErr_CheckSignals() 和评估中断器进行间接调用时,尊重垃圾收集器的状态。由 Pablo Galindo 提供补丁。

  • gh-112087: list 现在与 PEP 703 的实现兼容。

  • gh-116381: 为 CONTAINS_OP 添加特化。

  • gh-116296: 修复 object.__reduce__() 内部错误处理中可能的内存泄漏。

  • gh-115823: 在由于无效字节序列引发 SyntaxError 异常时,正确计算解析器中的错误范围。由 Pablo Galindo 提供补丁。

  • gh-115778: 在解释器 DSL 中为指令定义添加 tierN 注解。

  • gh-115733: 修复在耗尽列表迭代器上调用 next() 时的崩溃问题。

  • gh-115700: regen-cases 构建阶段现在可以在 Windows 上工作。

  • gh-115347: 修复当 Python 以 -OO 运行时,文档字符串被冗余的 NOP 替换的 bug。

  • gh-115323: 当 bytearray.extend()str 对象调用时,使错误信息更有意义。

  • gh-112175: 每个 PyThreadState 现在都有自己的 eval_breaker,允许特定线程被中断。

  • gh-115154: 修复导致 tokenize.untokenize() 函数错误处理 Unicode 命名字面量的 bug。由 Pablo Galindo 提供补丁。

  • gh-112433: 通过类上的新 _align_ 属性,增加强制对齐 ctypes.Structure 的能力。

  • gh-104090: 如果检测到资源泄漏,多进程资源跟踪器现在以非零状态码退出。否则仍以状态码 0 退出。

  • gh-105858: 改进 ast 节点的构造函数。列表类型的参数如果省略,现在默认为空列表,可选字段默认为 None。AST 节点现在有一个 __annotations__ 属性,包含其属性的预期类型。向 AST 节点传递未识别的额外参数已被弃用,将在 Python 3.15 中成为错误。省略 AST 节点的必需参数已被弃用,将在 Python 3.15 中成为错误。由 Jelle Zijlstra 提供补丁。

  • gh-101860: 暴露 property 上的 __name__ 属性。

  • gh-96497: 修复在理解中使用的赋值表达式中混淆的类变量的错误解析。

  • gh-116600: 修复全局 Flag 成员的 repr()

  • gh-116349: platform.java_ver() 已被弃用,将在 3.15 中移除。它大部分未经测试,API 令人困惑,仅对 Jython 支持有用。

  • gh-116143: 修复 pydoc _start_server 中的竞争条件,消除 _start_server 返回一个 "serving" 但没有设置 docserver 的线程的窗口。

  • gh-116127: typing: 实现 PEP 705,增加了 typing.TypedDicttyping.ReadOnly 的支持。

  • gh-116325: typing: 对前向引用为空字符串的情况,抛出 SyntaxError 而非 AttributeError

  • gh-115957: 当在不活跃的 asyncio.TaskGroup 上调用 asyncio.TaskGroup.create_task 时,给定的协程将被关闭(这样可以防止 RuntimeWarning)。

  • gh-115978: 在 WASI 上禁用 preadv()、readv()、pwritev() 和 writev()。

    在 WASI 0.2 的 wasmtime 下,这些函数未能通过 test_posix 测试 (https://github.com/bytecodealliance/wasmtime/issues/7830)。

  • gh-88352: 修复 logging.TimedRotatingFileHandler 处理程序中下一次滚动时间的计算。computeRollover() 现在总是返回一个大于指定时间的时间戳,并且在 DST 变更时也能正确工作。doRollover() 不再覆盖已经滚动过的文件,从而避免了在午夜或 DST 变更时重复运行导致的数据丢失。

  • gh-87115: 在使用 pdb 运行脚本时,将 __main__.__spec__ 设置为 None

  • gh-76511: 修复 email.Message.as_string() 中的 UnicodeEncodeError,该错误发生在消息声称使用 ascii 字符集但实际上包含非 ascii 字符时。现在,非 ascii 字符会被替换为 U+FFFD 替换字符,类似于 replace 错误处理器的行为。

  • gh-89547: 增加对嵌套类型特殊形式如 Final[ClassVar[int]] 的支持。

  • gh-65824: 改进 pydoc 中的 less 提示。

  • gh-116040: [Enum] 修复当第二个值为假值时按值调用的问题;例如 Cardinal(1, 0)

  • gh-115821: [Enum] 改进在自定义 __new__ 中调用 super().__new__() 时的错误消息。

  • gh-85644: 在 webbrowser 中使用 XDG_CURRENT_DESKTOP 环境变量来检查桌面环境。对于 GNOME 检测,优先使用它而非已弃用的 GNOME_DESKTOP_SESSION_ID

  • gh-75988: 修复 unittest.mock.create_autospec() 以通过调用传递给包装对象来返回真实结果。

  • gh-115881: 修复了当传递 feature_version=(3, 8) 时,ast.parse() 会错误地将条件上下文管理器(如 with (x() if y else z()): ...)标记为无效语法的问题。这撤销了作为 gh-94949 一部分对语法所做的更改。

  • gh-115886: 修复了 multiprocessing.shared_memory.SharedMemory 中嵌入空字符的名称被静默截断的问题。

  • gh-115532: 向统计模块添加了核密度估计。

  • gh-115714: 在 WASI 上,time 模块不再使用 times()CLOCK_PROCESS_CPUTIME_ID 获取进程时间,因为这些系统 API 不可靠,并可能从 WASI 中移除。受影响的时钟函数回退到调用 clock()

  • gh-115809: 改进了 logging.TimedRotatingFileHandler 中计算要删除哪些滚动日志文件的算法。现在对于没有 namer 和具有任意确定性 namer (不修改文件名中的日期时间部分) 的处理程序来说是可靠的。

  • gh-74668: urllib.parse 函数 parse_qs()parse_qsl() 现在支持包含原始和百分比编码非 ASCII 数据的字节参数。

  • gh-67044: csv.writer() 现在总是引用或转义 '\r''\n',不管 lineterminator 的值如何。

  • gh-115712: 恢复了 csvskipinitialspace=True 时对空格分隔符的支持。csv.writer() 现在如果分隔符是空格且 skipinitialspace 为真,则引用空字段,并在无法引用时引发异常。

  • gh-112364: 修复了 ast.unparse() 处理包含 "'\\ 的 format_spec 的问题。由 Frank Hoffmann 提供补丁。

  • gh-112997: 除非调试模式处于活动状态,否则停止记录 asyncio 中可能敏感的回调参数。

  • gh-114914: 修复了废弃的 StreamWriter 不会被垃圾回收的问题。

  • gh-111358: 修复 asyncio.BaseEventLoop.shutdown_default_executor() 中的一个 bug,确保传递给协程的超时行为符合预期。

  • gh-115618: 修复 property 方法 getter()setter()deleter() 中对 None 参数引用计数不当减少的问题。

  • gh-112720: 重构 dis.ArgResolver,使其可以子类化并改变跳转参数的解析方式。

  • gh-112006: 修复 inspect.unwrap() 对于带有 __wrapper__ 数据描述符的类型的问题。修复 inspect.Signature.from_callable() 对于内置函数 classmethod()staticmethod() 的问题。

  • gh-101293: 在 inspect.Signature.from_callable() 中支持带有 __call__() 方法的可调用对象,以及将 __new__()__init__() 方法设置为类方法、静态方法、绑定方法、部分函数以及其他类型的方法和描述符的类型。

  • gh-103092: 隔离 _lsprof (应用 PEP 687) 。

  • gh-113942: pydoc 不再跳过作为内置方法实现的全局函数,例如 MethodDescriptorTypeWrapperDescriptorType

  • gh-115256: 当访问 TarInfo 对象的 tarfile 属性时添加 DeprecationWarning。该属性在内部从未使用,并且仅在 tarfile 以写入模式打开时附加到 TarInfos,而不是读取模式。该属性创建了一个不必要的引用循环,如果在写入 tarfile 后不关闭句柄,可能会导致损坏。

  • gh-115197: urllib.request 在 macOS 和 Windows 上不再在检查系统代理绕过列表之前解析主机名。

  • gh-113812: DatagramTransport.sendto() 现在如果调用时使用空的 bytes 对象,将发送零长度的数据报。传输流控制在计算缓冲区大小时现在也会考虑数据报头。

  • gh-114763: 保护使用 importlib.util.LazyLoader 加载的模块,防止在加载完成前多个线程尝试访问属性时出现竞争条件。

  • gh-114709: posixpath.commonpath() 现在在传递空的可迭代对象时引发 ValueError 异常。之前是引发 IndexError

    posixpath.commonpath() 现在在传递 None 时引发 TypeError 异常。之前是引发 ValueError

  • gh-114610: 修复了 pathlib.PurePath.with_stem() 在给定空的 stem 参数时将非空路径后缀转换为 stem 的 bug。现在它会引发 ValueError,就像 pathlib.PurePath.with_suffix() 在路径有空的 stem 且给定非空的 suffix 参数时做的那样。

  • gh-107361: 将 ssl.VERIFY_X509_PARTIAL_CHAINVERIFY_X509_STRICT 添加到通过 ssl.create_default_context() 创建的默认 SSL 上下文中。

  • gh-112281: 允许为 typing.Annotated 创建 类型的联合,即使元数据不可哈希。

  • gh-111775: 修复了 importlib.resources.simple.ResourceHandle.open() 在文本模式下的问题,添加了遗漏的 stream 参数。

  • gh-90095: 使 .pdbrc 和 -c 可以与任何有效的 pdb 命令一起工作。

  • gh-107625: 如果键没有对应的值并且继续(即后面跟着缩进行),则从 configparser.ConfigParserread()read_file() 方法中引发 configparser.ParsingError

  • gh-107155: 修复了 help(x) 的错误输出,其中 x 是一个 lambda 函数,该函数有一个带有 "return" 键的 __annotations__ 字典属性。

  • gh-57141: 为 filecmp.dircmp 添加了 非浅层 比较选项,类似于 filecmp.cmp()。原始由 Steven Ward 提供补丁。由 Tobias Rautenkranz 增强。

  • gh-69990: Profile.print_stats() 已改进为接受多个排序参数。由 Chiu-Hsiang Hsu 和 Furkan Onder 提供补丁。

  • gh-104061: 添加 socket.SO_BINDTOIFINDEX 常量。

  • gh-60346: 修复 ArgumentParser 与 parse_known_args 不一致的问题。

  • gh-102389: 将 windows_31j 添加到 cp932 编码的别名中。

  • gh-72249: Always include the module name in the repr() of functools.partial() objects. Patch by Furkan Onder and Anilyka Barry.

  • gh-100985: 更新 HTTPSConnection 以在使用代理时一致地包装 IPv6 地址。

  • gh-100884: email: 修复在多行地址列表中结合 Unicode 编码时逗号的错误折叠问题。

  • gh-95782: 修复 io.BufferedReader.tell(), io.BufferedReader.seek(), _pyio.BufferedReader.tell(), io.BufferedRandom.tell(), io.BufferedRandom.seek()_pyio.BufferedRandom.tell() 可能返回负偏移量的问题。

  • gh-96310: 修复 argparse 中当互斥组中的所有选项被抑制时出现的回溯问题。

  • gh-93205: 修复 logging.handlers.TimedRotatingFileHandler 中的一个错误,其中指向具有相同名称但不同扩展名的文件的多个旋转处理程序实例会冲突并且不会删除正确的文件。

  • bpo-31116: 将 Z85 编码添加到 base64 中。

  • bpo-44865: 在 argparse 中添加对本地化函数的缺失调用。

  • bpo-43952: 修复 multiprocessing.connection.Listener.accept() 以接受空字节作为 authkey。不接受空字节作为密钥会导致其无限期挂起。

  • bpo-42125: linecache: 如果可用,从 __spec__ 获取模块名称。这允许在使用自定义加载器时获取 __main__ 模块的源代码。

  • bpo-41122: 未能正确传递参数给 functools.singledispatchmethod() 现在会抛出 TypeError,而不是内部遇到索引越界。

  • bpo-40818: asyncio REPL 现在在启动时运行 sys.__interactivehook__sys.__interactivehook__ 的默认实现为 asyncio REPL 提供了自动完成功能。补丁由 Rémi Lapeyre 贡献。

  • bpo-33775: 在 argparse 中为本地化添加了 'default' 和 'version' 帮助文本。

文档

测试

  • gh-71052: 添加测试排除项以支持在 Android 上运行测试套件。

  • gh-71052: 在支持线程但不支持多处理的平台上启用 test_concurrent_futures

  • gh-115796: 使 '_testinternalcapi.assemble_code_object' 为代码对象构造异常表。

  • gh-115720: 泄漏测试(-R, --huntrleaks)现在显示每次迭代中发现泄漏数量的摘要。

  • gh-115122: 为 regrtest 测试运行器添加 --bisect 选项:使用 test.bisect_cmd 运行失败的测试以识别失败的测试。由 Victor Stinner 提供补丁。

  • gh-115596: 修复 test_os 中的 ProgramPriorityTests 永久改变进程优先级的问题。

  • gh-115556: 在 Windows 上,传递给 Tools\buildbot\test.batPCbuild\\rt.bat 的参数中的逗号现在被正确处理。

  • gh-115420: 修复 _testinternalcapi.optimize_cfg 对异常处理目标的翻译。

  • gh-115376: 修复 _testinternalcapi.compiler_codegen 在错误输入上的段错误。

构建

  • gh-116313: 使 WASI 构建在 wasmtime 18 下使用 WASI 0.2/preview2 原语工作。

  • gh-71052: 将 Android 的 sys.platform"linux" 改为 "android"

  • gh-116117: 回退 libb2 的 PR #42 以修复在 32 位 Windows 上用 clang-cl 编译 CPython 的问题。

  • gh-71052: 修复多个 Android 构建问题

  • gh-114099: 添加了一个测试床项目以在 iOS 上运行测试套件。

  • gh-115350: 修复在定义了 -DWIN32_LEAN_AND_MEAN 的情况下构建 ctypes 模块的问题

  • gh-111225: 在 Android 上将扩展模块链接到 libpython。

  • gh-115737: 现在为非框架 macOS 构建正确设置了 libPython 的安装名称。

  • gh-114099: 添加了 Makefile 目标以支持编译兼容 iOS 的框架构建。

Windows

  • gh-116012: 确保在 GIL 操作期间保留 GetLastError() 的值。

  • gh-115582: 现在,当使用常规安装时,为 CPython 的自由线程构建构建扩展需要手动使用 /DPy_GIL_DISABLED 进行编译。预计在未来的版本中会有所变化。

  • gh-115554: 安装程序现在对于更新 Python 安装管理器 有更严格的规则。一般来说,大多数用户只安装了一个启动器,不会看到任何区别。当安装了多个启动器时,安装启动器的选项将被禁用,直到只剩下一个。降级启动器(从未允许)现在被更明显地阻止。

  • gh-115543: Python 安装管理器 现在可以检测从 Microsoft Store 安装的 Python 3.13,并且在设置 PYLAUNCHER_ALLOW_INSTALL 时默认安装 Python 3.12。

macOS

  • gh-116145: 将 macOS 安装程序更新到 Tcl/Tk 8.6.14。

IDLE

  • gh-88516: 在 macOS 上,在编辑器窗口的标题栏中显示代理图标以匹配平台行为。

工具/示例

  • gh-100176: 移除过时的 Tools/{io,cc,string}bench

  • bpo-45101: 在两个版本的 python-config 之间添加使用消息 IO 的一致性。

C API

  • gh-114626: 再次添加 _PyCFunctionFastWithKeywords 名称,该名称在 Python 3.13 alpha 4 中被错误移除。保留旧的私有 _PyCFunctionFastWithKeywords 名称(Python 3.7)作为新公共名称 PyCFunctionFastWithKeywords (Python 3.13a4) 的别名。由 Victor Stinner 提供补丁。

  • gh-111418: 添加 PyHASH_MODULUSPyHASH_BITSPyHASH_INFPyHASH_IMAG C 宏。由 Sergey B Kirpichev 提供补丁。

Python 3.13.0 alpha 4

发布日期: 2024-02-15

安全性

核心与内置函数

  • gh-112087: 对于列表的空反向迭代器将简化为 reversed()。由 Donghee Na 提供补丁。

  • gh-114570: 添加 PythonFinalizationError 异常。此异常派生自 RuntimeError,在 Python 终结 期间阻止操作时引发。由 Victor Stinner 提供补丁。

  • gh-114695: 添加 sys._clear_internal_caches(),清除所有内部性能相关缓存(并弃用不太通用的 sys._clear_type_cache() 函数)。

  • gh-114828: 修复在类体中的推导式内使用 super() 的不常见代码示例中的编译崩溃问题。

  • gh-112069: 使 setfrozenset 方法适应 Argument Clinic。

  • gh-115011: 现在,对于具有 __index__() 方法的对象,无符号整数类型成员的设置器支持与 int 相同的有效值范围。

  • gh-114887: 更改 create_datagram_endpoint() 中的套接字类型验证,以接受所有非流套接字。这修复了与原始套接字兼容性的回归问题。

  • gh-114944: 修复 PyParkingLot_Park_PyParkingLot_UnparkAll 之间的竞争条件。

  • gh-113462: 限制单个类可以使用的版本数量。防止一些偏离的类用完所有版本号。

  • gh-76763: chr() 内置函数现在总是对超出有效范围的值引发 ValueError。以前对于非常大或非常小的值会引发 OverflowError

  • gh-114806: 如果这些类有元类,则不再专门化对类的调用。修复了元类的 __call__ 方法未被调用的错误。

  • gh-107944: 通过 getargs 改进对带有错误关键字参数的函数调用的错误消息。

  • gh-112529: 自由线程构建不再在为支持循环垃圾回收的对象中为 PyGC_Head 结构分配空间。使用了许多其他字段和数据结构作为替代,包括 ob_gc_bitsob_tid 和 mimalloc 内部数据结构。

  • gh-114456: 在 WASI 的调试构建下降低递归限制。

  • gh-114083: 编译器在其他优化之前,在一个单独的阶段应用与后续指令的 LOAD_CONST 折叠。这在一定情况下启用了跳转线程。

  • gh-114388: 修复了当将不是 int 实例的类似整数值分配给对应于 type T_UINT 和 T_ULONG 的 C 结构成员的属性时发出的 RuntimeWarning。修复了当将负整数值分配给对应于类型 T_UINT 的 C 结构成员的属性时发出的双重 RuntimeWarning

  • gh-114265: 编译器在优化前传播行号,从而带来更多优化机会并消除了对 guarantee_lineno_for_exits 技巧的需求。

  • gh-112529: 自由线程构建现在拥有自己的线程安全 GC 实现,该实现使用 mimalloc 来找到 GC 跟踪的对象。与现有的 GC 实现不同,它是非分代的。

  • gh-114050: 修复了当向 int 传递超过两个参数时,由于 TypeError 异常中的格式字符串不正确而导致的分段错误。

  • gh-112354: END_FOR 指令现在只弹出一个值。这是为了更好地支持循环中的侧退出。

  • gh-113884: 当 GIL 被禁用时,使 queue.SimpleQueue 线程安全。

  • gh-114058: 实现 Tier 2 冗余消除器的基础。

  • gh-113939: frame.clear(): 同时清除 frame.f_locals,而不仅仅是快速局部变量。这在 frame.f_locals 被访问后相关,它将包含对所有局部变量的引用。

  • gh-112050: 将 collections.deque 转换为使用 Argument Clinic。

  • gh-112050: 在GIL被禁用时,使 collections.deque 上的方法线程安全。

  • gh-113464: 添加一个选项(对于基于`configure`的构建是`--enable-experimental-jit`,对于基于`PCbuild`的构建是`--experimental-jit`)来构建一个 实验性 的即时编译器,基于`copy-and-patch <https://fredrikbk.com/publications/copy-and-patch.pdf>`_。

  • gh-113055: 使interp->obmalloc成为一个指针。对于与主解释器共享状态的解释器,这指向同一个静态内存结构。对于拥有自己obmalloc状态的解释器,它是堆分配的。添加free_obmalloc_arenas(),它将为拥有自己obmalloc状态的解释器释放obmalloc区域和基数树结构。

  • gh-55664: 当使用非字符串键的名称空间字典创建 type 时添加警告。由Daniel Urban和Furkan Onder提供补丁。

  • gh-104530: 使用原生的Win32条件变量。

  • gh-115392: 修复 doctest 中的一个错误,该错误会导致装饰函数的行号报告不正确。

  • gh-114563: 修复使用 Decimal 的C实现时的几个 format() 错误:* 在某些罕见情况下使用`z`格式选项(强制负0)时的内存泄漏 * 将`z`格式选项应用于`F`类型(固定点与大写`NAN` / INF)时的错误输出 * 应用`#` 格式选项(交替形式)时的错误输出。

  • gh-102840: 修复在 :fractions.Fraction`和 complex 实例之间进行地板除、模或除模操作时混淆的追溯。

  • gh-115165: 现在在尝试为调用 typing 泛型别名(包括使用 typing.Annotated 创建的泛型别名)返回的对象设置`__orig_class__` 属性时,大多数异常会被忽略。之前只有 AttributeError 被忽略。由Dave Shawley提供补丁。

  • gh-112903: 修复在某些泛型别名多重继承情况下出现的 "issubclass() arg 1 must be a class" 错误(3.13 alpha早期版本的回归问题)。

  • gh-115133: 修复与Expat 2.6.0兼容的 XMLPullParser 测试。

  • gh-115059: io.BufferedRandom.read1() 现在会刷新底层写入缓冲区。

  • gh-79382: 在递归 glob() 中,尾随的 ** 不再允许匹配文件和不存在的路径。

  • gh-67837: 在 tarfilezipfile 的并发解压过程中避免目录创建的竞态条件。

  • gh-115060: 通过移除冗余的正则表达式匹配来加速 pathlib.Path.glob()

  • gh-97928: 部分恢复 tkinter.Text.count() 的行为。默认情况下,它保留了旧版Python的行为,除了设置 wantobjects 为0不再有效。新增了一个形参 return_ints:指定 return_ints=True 会使 Text.count() 总是返回单个计数的整数,而不是1元组或 None

  • gh-114628: 在处理TypeError时引发csv.Error时,不再打印TypeError的回溯信息。

  • gh-85984: 将C语言 <unistd.h> 中的 _POSIX_VDISABLE 添加到 termios

  • gh-114965: 更新捆绑的pip到24.0版本。

  • gh-114959: tarfile 在尝试在文件上提取目录时不再忽略错误。

  • gh-114894: 添加 array.array.clear()

  • gh-114071: 支持使用auto()为枚举成员值的元组子类。

  • gh-109475: 修复 argparse 中对明确选项值"--"的支持(例如 --option=--)。

  • gh-49766: 修复 date-datetime 比较。现在,如果比较的一方是 date 而另一方是 datetime,特殊比较方法如 __eq____lt__ 将返回 NotImplemented,而不是忽略时间部分和时区或强制返回“不相等”或引发 TypeError。这使得 datedatetime 子类的比较更加对称,并允许通过在子类中重写特殊比较方法来改变默认行为。

  • gh-110190: 通过在 stgdict 中将 MAX_STRUCT_SIZE 设置为 32,修复 Windows ARM64 平台上带数组的 ctypes 结构体。由 Diego Russo 提供补丁。

  • gh-114678: 确保在 Decimal 格式中,对于格式说明符中其他位置出现 'N' 的情况,不会引发 'N' 说明符的弃用警告。基于 Stefan Krah 的补丁。

  • gh-70303: 如果模式以 "**" 结尾,pathlib.Path.glob() 现在会返回文件和目录。之前只返回目录。

  • gh-109653: 提高 importlib.metadataemail.utils 的导入时间。

  • gh-113280: 修复在 ssl.SSLSocket 创建过程中发生错误时,在罕见情况下出现的开放套接字泄漏问题。

  • gh-77749: email.policy.EmailPolicy.fold() 现在如果 utf8 为 false,总是编码头部的非 ASCII 字符。

  • gh-83383: 如果在打开或上次同步后没有修改,dbm.dumb 数据库的同步现在是无操作的。新创建的空的 dbm.dumb 数据库的目录文件现在在打开后立即创建,而不是推迟到同步或关闭时。

  • gh-91602: 向 sqlite3.Connection.iterdump() 添加 filter 仅关键字参数,用于过滤要转储的数据库对象。由 Mariusz Felisiak 提供补丁。

  • gh-112451: 禁止对纯Python的 datetime.timezone 进行子类化。这与C扩展实现一致。由Mariusz Felisiak提供补丁。

  • gh-69893: 为 xml.etree.ElementTree.iterparse() 返回的迭代器添加 close() 方法。

  • gh-109653: 通过Daniel Hollas的补丁,将 threading 模块的导入时间减少约50%。

  • gh-114492: 使 termios.tcgetattr() 在Alpine Linux上的结果可重现。之前它可能会在某些字段留下随机垃圾。

  • gh-114315: 使 threading.Lock 成为一个真正的类,而不是工厂函数。向 _thread.lock 类型添加 __new__

  • gh-100414: 添加 dbm.sqlite3 作为 dbm 的后端,并使其成为新的默认 dbm 后端。由Raymond Hettinger和Erlend E. Aasland提供补丁。

  • gh-113267: 撤销 gh-106584 中的更改,这些更改使得 TestResult 方法的 startTest()stopTest() 调用不平衡。

  • gh-75128: 在 asyncio.BaseEventLoop.create_server() 中忽略 OSError,当IPv6可用但接口实际上不支持它时。

  • gh-114423: threading._active 中的 _DummyThread 条目现在会在相关线程死亡时自动移除。

  • gh-114257: 在 ctypes.util.find_library() 中忽略 FileNotFound 错误,在Linux上直接返回 None

  • gh-114321: 在Linux、macOS、FreeBSD和NetBSD上,向 fcntl 模块公开更多平台特定常量。

  • gh-114328: tty.setcbreak() 和新的 tty.cfmakecbreak() 不再清除终端输入ICRLF标志。这修复了3.12中引入的一个回归问题,该问题不再匹配操作系统在其 stty(1) 手册页中定义的cbreak模式。

  • gh-114281: 从 Lib/asyncio/staggered.py 中移除类型提示。应改用 typeshed 项目中的注解。

  • gh-101438: 避免在ElementTree.iterparse中出现引用循环。由 ElementTree.iterparse 返回的迭代器可能会持有一个文件描述符。如果返回的迭代器未被耗尽,引用循环会阻止文件描述符的及时清理。

  • gh-114198: dataclasses 中的 __replace__ 方法的签名现在将第一个参数命名为``self``,而不是 obj

  • gh-104522: 运行子进程时引发的 OSError 现在仅在错误是由于尝试更改当前目录失败时,才会将 filename 属性设置为*cwd*。

  • gh-114149: Enum: 在自定义的 __new__ 中正确处理元组子类。

  • gh-83648: 支持在 argparse 中弃用选项、位置参数和子命令。

  • gh-114087: 将 dataclasses.asdict 的速度提高至1.35倍。

  • gh-109534: 修复了 asyncio.selector_events.BaseSelectorEventLoop 中SSL握手失败时的引用泄漏问题。由Jamie Phan提供补丁。

  • gh-79634: 在 pathlib.Path.glob()rglob() 中接受 路径类对象 作为模式。

  • gh-112202: 确保如果被唤醒的 Task 同时被取消或遇到任何其他错误,asyncio.Condition.notify() 调用不会丢失。

  • gh-113951: 修复了 tkinter.Texttkinter.Canvas 类的 tag_unbind() 方法在三参数情况下的行为。以前,widget.tag_unbind(tag, sequence, funcid) 会销毁 sequence 的当前绑定,使 sequence 变为未绑定状态,并删除 funcid 命令。现在它仅从 sequence 的绑定中移除 funcid,保留其他命令,并删除 funcid 命令。只有当 funcid 是最后一个绑定的命令时,才会使 sequence 变为未绑定状态。

  • gh-97959: 修复 pydoc 中类方法、绑定方法、方法及函数别名的渲染问题。类方法不再显示“builtins.type实例的方法”注释。现在为类和未绑定方法添加了相应的注释。方法和函数别名现在如果原始定义与当前不同,会引用到定义原始内容的模块或类。绑定方法现在列在静态方法部分。内置类的方法现在和Python类的方法一样得到支持。

  • gh-113796: 在 csv.Dialect 构造函数中添加更多验证检查。如果同一个字符被用于不同的角色,现在会抛出 ValueError

  • gh-113732: 修复 csv.reader() 中对 QUOTE_NOTNULLQUOTE_STRINGS 的支持。

  • gh-113225: 尽可能使用 os.DirEntry.path 来加速 pathlib.Path.walk()

  • gh-89039: 当在datetime、date或time的子类上调用replace()方法时,正确调用派生构造函数。之前仅调用基类的构造函数。

    同时,确保在各种方法中创建子类时传递非零的fold值。之前,fold值被静默忽略。

  • gh-112919: 加速 datetime.datetime.replace()datetime.date.replace()datetime.time.replace()

  • gh-59013: 当用户使用 pdb 执行 break func 时,在函数的第一行可执行代码上设置断点,而不是函数定义的行。

  • gh-112343: 改进pdb便利变量的处理,避免替换字符串内容。

  • gh-112240: 向calendar模块CLI添加选项,以指定每周开始的星期几。由Steven Ward提供补丁。

  • gh-111741: 在 mimetypes 模块中识别 image/webp 为标准格式。

  • gh-43457: 修复了 tkinter 部件方法 wm_attributes()。现在它接受不带减号前缀的属性名来获取窗口属性,并允许将属性和值指定为关键字参数。新增了可选关键字参数 return_python_dict:调用 w.wm_attributes(return_python_dict=True) 会返回一个字典而非元组。调用 w.wm_attributes() 现在返回一个元组而非字符串,如果 wantobjects 被设置为0。

  • gh-82626: 许多函数现在会在布尔值作为文件描述符参数传递时发出警告。

  • gh-111051: 添加了使用 pdb 调试期间检查文件修改的功能。

  • gh-110345: 在 tkinter._test() 中显示 Tcl/Tk 补丁级别(而非版本)。

  • gh-38807: 修复了 trace 中的竞态条件。不再检查目录是否存在并创建它,而是直接调用 os.makedirs() 并传递 exist_ok=True 关键字参数。

  • gh-75705: 在 mailbox.mboxmailbox.MMDF 中设置 unixfrom 信封。

  • gh-106233: 修复了在导入 zoneinfo 模块期间 InvalidTZPathWarning 的堆栈级别。

  • gh-105102: 允许 ctypes.Union 嵌套在 ctypes.Structure 中,当系统字节序与类的字节序相反时。

  • gh-104282: 修复了由于对具有零长度属性的 BCJ 过滤器处理不当导致的 lzma._decode_filter_properties() 中的空指针解引用。补丁由 Radislav Chugunov 提供。

  • gh-96471: 添加了通过 shutdown() 终止 queue.Queue 的功能。

  • gh-101599: 更改了 argparse 标志选项的格式以去除冗余。

  • gh-85984: 添加了 POSIX 伪终端函数 os.posix_openpt()os.grantpt()os.unlockpt()os.ptsname()

  • gh-102512: 当从外部线程(即 _DummyThread)调用 os.fork() 时,子进程中的线程类型更改为 _MainThread。还更改了其名称和守护状态,现在可以加入了。

  • gh-88569: 添加 os.path.isreserved(),用于识别保留的路径名,如 "NUL"、"AUX" 和 "CON"。此功能仅在 Windows 上可用。

    Deprecate pathlib.PurePath.is_reserved().

  • bpo-38364: inspect 函数 isgeneratorfunctioniscoroutinefunctionisasyncgenfunction 现在支持 functools.partialmethod 包装的函数,就像它们支持 functools.partial 一样。

文档

  • gh-115233: 修复 Logging Cookbook 中 LoggerAdapter 的一个例子。

  • gh-114123: 将 csv 模块的文档字符串移动到 csv 模块,而不是从内部的 _csv 模块重新导出,并从 csv.__all__ 中移除 __doc__

    csv.__version__ 移动到 csv 模块,而不是从内部的 _csv 模块重新导出,并从 csv.__all__ 中移除 __version__

测试

  • gh-114099: 添加了在 iOS 上运行测试套件所需的测试排除项。

  • gh-105089: 在 AIX 上修复 test.test_zipfile.test_core.TestWithDirectory.test_create_directory_with_write 测试,通过对模式进行 0xFFFF 的按位与操作,使其与 zinfo.external_attr 同步。

构建

  • gh-115167: 使用 Visual Studio 2022 版本 17.8 构建时避免提供 vcruntime140_threads.dll

  • gh-113632: 在 configure.ac 中将 WASI 提升为第二层平台,并将 Emscripten 从第三层平台中移除。

  • gh-114099: 重构了 configure 和 Makefile,以适应除 macOS 之外的 Apple 平台上的框架构建。

  • gh-114875: 添加 getgrent() 作为构建 grp 模块的先决条件。

Windows

  • gh-115049: 修复 py.exe 启动器在没有用户配置文件的用户下运行时失败的问题。

  • gh-115009: 更新 Windows 安装程序以使用 SQLite 3.45.1。

  • gh-109991: 更新 Windows 构建以使用 OpenSSL 3.0.13。

  • gh-111239: 更新 Windows 构建以使用 zlib v1.3.1。

  • gh-100107: py.exe 启动器在启动包含 /usr/bin/env shebang 的脚本时,将不再尝试运行 Microsoft Store 重定向器。

  • gh-112984: 将自由线程二进制文件作为可选组件添加到Windows安装程序中。

  • gh-89240: 允许 multiprocessing 创建超过62个进程的池。

macOS

  • gh-115009: 更新macOS安装程序以使用SQLite 3.45.1。

  • gh-109991: 更新macOS安装程序以使用OpenSSL 3.0.13。

  • gh-114490: 为 platform.architecture() 添加Mach-O链接支持。

  • gh-87804: 在macOS上,os.statvfs``和 ``os.fstatvfs 的结果现在能正确报告非常大的磁盘的大小,在之前的版本中,对于至少有2**32个块的磁盘,报告的块数是错误的。

IDLE

  • gh-96905: 在idlelib代码中,停止重新定义内置的'dict'和'object'。

  • gh-103820: 修改IDLE绑定,使得在非X11窗口系统(即Win32和Aqua)上来自鼠标按钮4/5的事件不会被误认为是滚动。

工具/示例

  • gh-113516: 在构建WASI时不要设置 LDSHARED

  • gh-109991: 更新GitHub CI工作流以使用OpenSSL 3.0.13,并更新multissltests以使用1.1.1w、3.0.13、3.1.5和3.2.1。

  • gh-115015: 修复Argument Clinic中的一个bug,该bug会为没有参数但使用 METH_METHOD | METH_FASTCALL | METH_KEYWORDS 调用约定的方法生成错误的代码。之前只检查了位置参数的数量;任何传递的关键字参数都会被静默接受。

C API

Python 3.13.0 alpha 3

发布日期:2024-01-17

安全性

  • gh-113659: 跳过名称以点开头或具有隐藏文件属性的 .pth 文件。

  • gh-112302: 创建了一个软件物料清单文档和工具,用于跟踪依赖关系。

核心与内置函数

  • gh-107901: 编译器复制具有评估中断检查、无行号和多个前驱的基本块。

  • gh-107901: 离开异常处理程序跳转回正常代码不再检查评估中断。

  • gh-113655: 在 Windows 上将 C 递归限制设置为 4000,在 Linux/OSX 上设置为 10000。这似乎是在保持安全性和不损害向后兼容性之间的最佳点。

  • gh-113710: 向解释器 DSL 添加类型化堆栈效果,以及各种指令注释。

  • gh-77046: 在 Windows 上,默认情况下,包装 Windows 句柄的文件描述符现在创建为不可继承(PEP 446)。由 Zackery Spytz 和 Victor Stinner 提供补丁。

  • gh-113853: 保证所有执行器都取得进展。这进而保证了第 2 层执行总是取得进展。

  • gh-113753: 修复了如果 PyAsyncGenASend 对象是从自由列表分配的,其终结器可能不会被调用的问题。

  • gh-107901: 编译器更改,使得不在循环结束位置的合成跳转不再检查 eval breaker。

  • gh-113703: 修复了 codeop 模块中的一个回归问题,该问题导致它错误地识别不完整的 f-strings。由 Pablo Galindo 提供补丁

  • gh-89811: 在执行依赖于此值可用的字节码特殊化之前,检查有效的 tp_version_tag

  • gh-111488: 更改了列表推导式中 'for' 后没有 'in' 关键字时的错误消息。

  • gh-113657: 修复了一个导致重要指令指针更新在二级跟踪中被优化掉的问题。

  • gh-113603: 修复了一个在调试模式下导致编译器断言失败的冗余 NOP 未被移除的错误。

  • gh-113602: 修复了一个导致解析器尝试覆盖现有错误并在过程中崩溃的错误。由 Pablo Galindo 提供补丁

  • gh-113486: 不再为优化后的类调用发出虚假的 PY_UNWIND 事件。

  • gh-113297: 修复了编译器在使用 19 个上下文管理器的 with 语句时出现的段错误。

  • gh-113212: 改进了 super 的错误消息。

  • gh-111375: 仅在异常堆栈中使用 NULL 来表示异常已被处理。由 Carey Metcalfe 提供补丁。

  • gh-112215: 对于非调试构建,将 C 递归限制增加了 3 倍,但 webassembly 和 s390 平台保持不变。这缓解了 3.12 中混合内置(C)和 Python 代码的深度递归的一些回归问题。

  • gh-113054: 修复了一个在调试模式下导致编译器断言失败的冗余 NOP 未被移除的错误。

  • gh-106905: 使用每个 AST 解析器状态而非全局状态来跟踪 AST 解析器内的递归深度,以防止由于同时解析而导致的潜在竞争条件。

    该问题主要在3.11版本中由 ast.parse() 的多线程用户发现。在3.12版本中,对垃圾回收触发时机的更改防止了竞态条件的发生。

  • gh-108866: 更改 _PyExecutorObject 的API和契约,使其返回next_instr指针而非帧,并确保至少执行一条指令。

  • gh-90350: 优化内置函数 min()max()

  • gh-112943: 在 tokenize 模块中正确计算多行令牌的结束列偏移。补丁由Pablo Galindo提供。

  • gh-112125: 修复 None.__ne__(None)``返回 ``NotImplemented 而非 False 的问题。

  • gh-74616: 当提示包含嵌入的null字符时,input() 现在会在终端输出时引发ValueError,而不是静默截断。

  • gh-112716: 修复当 __builtins__ 不是字典时,import 语句和内置类型的 ``__reduce__()``方法中的SystemError。

  • gh-112730: 使用颜色高亮tracebacks中的错误位置。由Pablo Galindo提供补丁。

  • gh-112625: 修复在 bytearray.join() 方法中迭代参数时可能会清除bytearray对象,导致读取已释放内存的bug。

  • gh-112660: 在格式化模块的ImportError和AttributeError错误消息时,不清除意外错误。

  • gh-105967: 解决Apple的macOS平台zlib库中的一个bug,其中 zlib.crc32()binascii.crc32() 在多GB输入上可能产生不正确的结果。包括在使用 zipfile 处理包含大数据的zip文件时。

  • gh-95754: 在访问部分初始化模块上的无效属性时提供更好的错误消息。现在消息中包含了被访问模块的来源,以帮助解决模块遮蔽其他模块的常见问题。

  • gh-112217: 添加对 raise from T``中调用类型 ``T 返回的 __cause__ 类型的检查。

  • gh-111058: 修改 coro.cr_frame/gen.gi_frame 在协程/生成器关闭后返回 None。这修复了 getcoroutinestate()getgeneratorstate() 对于已关闭协程/生成器返回错误状态的 bug。

  • gh-112388: 修复导致解析器尝试覆盖 tokenizer 错误的错误。由 Pablo Galindo 提供补丁。

  • gh-112387: 修复解码字符串中反向 tokenize 错误的错误位置。由 Pablo Galindo 提供补丁。

  • gh-99606: 使空 f-string 生成的代码与空普通字符串的代码相同。

  • gh-112367: 通过不释放代码区域直到关闭,避免使用 perf trampolines 时的未定义行为。补丁由 Pablo Galindo 提供。

  • gh-112320: Tier 2 翻译器现在基于分支“计数器”中设置的位数跟踪保持“在跟踪上”(即不退回到 Tier 1 解释器)的置信水平。当置信度低于 1/3 时,跟踪翻译结束。

  • gh-109598: PyComplex_RealAsDouble()/PyComplex_ImagAsDouble() 现在尝试使用对象的 __complex__() 方法将其转换为 complex 实例,然后再回退到 __float__() 方法。由 Sergey B Kirpichev 提供补丁。

  • gh-94606: 修复当 email.message.get_payload() 读取含有 Unicode 代理字符且消息内容不适合 surrogateescape 编码的消息时的 UnicodeEncodeError。由 Sidney Markowitz 提供补丁。

  • bpo-21861: 在 _io.FileIO.__repr__(), _io._WindowsConsoleIO()_io.TextIOWrapper.__repr__() 中使用对象的实际类名,使这些方法对子类友好。

  • bpo-45369: 根据 PEP 644 移除 LibreSSL 的变通方法。

  • bpo-34392: 添加 sys._is_interned()

  • gh-114077: 修复在 32 位平台上传递大于 2 GiB 的 countsocket.socket.sendfile() 中可能出现的 OverflowError

  • gh-111803: plistlib 现在支持以二进制格式加载更深层次的嵌套列表。

  • gh-114014: 修复了 fractions.Fraction 中的一个 bug,该 bug 在使用 d 作为小数部分的无效字符串时,会生成与其他无效字母/字符不同的错误。由 Jeremiah Gabriel Pascual 提供补丁。

  • gh-108364: sqlite3.Connection.iterdump() 现在确保在转储数据库模式之前禁用外键支持,如果有任何外键违规。由 Erlend E. Aasland 和 Mariusz Felisiak 提供补丁。

  • gh-113971: zipfile.ZipInfo 之前受保护的 ._compresslevel 属性现在公开为 .compress_level,旧的 _compresslevel 名称仍作为属性保留以保持兼容性。

  • gh-113877: 修复 64 位 Windows 上的 tkinter 方法 winfo_pathname()

  • gh-113868: 添加了 mmap.MAP_NORESERVE, mmap.MAP_NOEXTEND, mmap.MAP_HASSEMAPHORE, mmap.MAP_NOCACHE, mmap.MAP_JIT, mmap.MAP_RESILIENT_CODESIGN, mmap.MAP_RESILIENT_MEDIA, mmap.MAP_32BIT, mmap.MAP_TRANSLATED_ALLOW_EXECUTE, mmap.MAP_UNIX03mmap.MAP_TPRO。这些都是 macOS 上的 mmap(2) 标志。

  • gh-113848: asyncio.TaskGroup()asyncio.timeout() 上下文管理器现在也处理 CancelledError 子类以及确切的 CancelledError

  • gh-113661: unittest 运行器:如果测试被跳过,不要退出 5。退出 5 的意图是检测测试套件根本没有被发现的问题。如果我们跳过了测试,那么它已经被正确发现了。

  • gh-96037: 在退出过期的 asyncio.timeout() 块期间引发的异常的上下文中插入 TimeoutError

  • gh-113781: 在 Python 结束期间发出警告时,静默不可引发的 AttributeError。

  • gh-113238: 向 importlib.resources 添加 Anchor (为了使代码符合文档) 。

  • gh-111693: asyncio.Condition.wait() 现在会重新抛出可能导致其被中断的同一个 CancelledError 实例。修复了在 asyncio.Semaphore.acquire()CancelledError 中断时的竞态条件。

  • gh-113791: 在 macOS 上向 time 添加 CLOCK_MONOTONIC_RAW_APPROXCLOCK_UPTIME_RAW_APPROX。这些时钟在 macOS 10.12 或更高版本上可用。

  • gh-112932: 恢复 zipfile 从含有 "/" 目录条目的 zip 文件中 extractall 的能力,这是某些 wiki 或 bug 跟踪器数据导出器常见添加到 zip 文件中的情况。

  • gh-113568: 从 pathlib.PurePath 而不是其私有基类 PurePathBase 中引发弃用警告。

  • gh-113594: 修复 email 中当重新折叠包含 unknown-8bit 编码部分后跟非 unknown-8bit 编码部分的行时引发的 UnicodeEncodeError

  • gh-113538: 在 asyncio.StreamReaderProtocol.connection_made() 中,有一个回调函数,如果包装“连接回调”的任务失败,则会记录错误。如果任务被取消,这个回调本身会失败。通过首先检查任务是否被取消来防止这种情况。如果是,关闭传输但不记录错误。

  • gh-113626: 在 marshal 模块中添加对 allow_code 参数的支持。传递 allow_code=False 可以防止代码对象的序列化和反序列化,这在 Python 版本之间是不兼容的。

  • gh-85567: 修复 picklepickletools 命令行界面中未关闭文件的资源警告。

  • gh-113537: 在 plistlib.loads() 中支持加载 str

  • gh-89850: 在 C 实现中添加 pickle.Pickler.persistent_id()pickle.Unpickler.persistent_load() 方法的默认实现。在 pickle.Picklerpickle.Unpickler 类的 C 实现的子类中调用 super().persistent_id()super().persistent_load() 不再导致无限递归。

  • gh-113569: 在 unittest 的 assert_has_calls() 失败时,如果实际上没有调用,进行指示。

  • gh-101225: 增加由 multiprocessing.managermultiprocessing.resource_sharer 创建的 multiprocessing.connection.Listener 对象的积压,以显著降低在创建到它们的 multiprocessing.connection.Connection 时遇到连接拒绝错误的风险。

  • gh-113568: 从 pathlib.Path 而不是其私有基类 PathBase 引发审计事件。

  • gh-113543: 确保 webbrowser.MacOSXOSAScript 发送 webbrowser.open 审计事件。

  • gh-113028: 当字符串的第二个引用出现在 pickle 的输入中,并且使用 Python 实现时,我们保证只有一个副本被 pickle,并且在重新加载时共享一个对象。以前,在协议 0 中,当字符串包含某些字符(如换行符)时,会导致对象重复。

  • gh-113421: 修复多进程日志记录器对于 %(filename)s 的问题。

  • gh-111784: 修复 _elementtree 模块中的段错误。通过在模块状态中为胶囊生命周期保持对 pyexpat 模块的强引用,修复在 _elementtree.XMLParser 实例的释放过程中第一次出现的段错误。通过在 XMLParser 结构中为 _elementtree 模块生命周期保持对 _elementtree 模块的强引用,修复在同一释放过程中第二次出现的段错误。

  • gh-113407: 修复当 CPython 构建时没有文档字符串时导入 unittest.mock 的问题。

  • gh-113320: 修复 Python 3.12 中的一个回归问题,其中未标记为 runtime-checkableProtocol 类会被不必要地内省,如果协议有问题的成员,可能会导致异常被引发。由 Alex Waygood 提供补丁。

  • gh-53502: 在 plistlib 中添加一个新选项 aware_datetime 以加载或转储感知日期时间。

  • gh-113358: 修复了当异常具有损坏的 __getattr__ 时渲染回溯的问题。

  • gh-113214: 修复了在 SSL-over-SSL 场景中 asyncio SSL 协议中止时出现的 AttributeError

  • gh-113246: 更新捆绑的 pip 到 23.3.2 版本。

  • gh-87264: 修复了 tarfile list() 方法以显示文件类型。

  • gh-112182: asyncio.futures.Future.set_exception() 现在将 StopIteration 转换为 RuntimeError,而不是挂起或其他异常行为。由 Jamie Phan 提供补丁。

  • gh-113225: 通过尽可能使用 os.DirEntry.path 来加速 pathlib.Path.glob()

  • gh-113149: 当 JSON 数组或对象包含尾随逗号时,改进了错误消息。补丁由 Carson Radtke 提供。

  • gh-113117: subprocess 模块现在可以在支持 posix_spawn_file_actions_addclosefrom_np 的平台上使用 os.posix_spawn() 函数和 close_fds=True。由 Jakub Kulik 提供补丁。

  • gh-113199: 使得 http.client.HTTPResponse.read1http.client.HTTPResponse.readline 在知道内容长度时读取所有数据后关闭 IO。由 Illia Volochii 提供补丁。

  • gh-113191: 在 Windows 上添加对 os.fchmod() 和文件描述符在 os.chmod() 中的支持。

  • gh-113188: 修复了 Windows 上的 shutil.copymode()shutil.copystat()。之前,如果 dst 是一个符号链接,它们的行为会有所不同:如果 follow_symlinks 为真或 src 不是符号链接,它们会修改 dst 本身的权限位而不是它指向的文件;如果 follow_symlinks 为假且 src 是符号链接,则不会修改权限位。

  • gh-113119: os.posix_spawn() 现在接受 env=None,这使得新生成的进程使用当前进程环境。由 Jakub Kulik 提供补丁。

  • gh-113202: 在 itertools 模块中的 batched() 添加了一个 strict 选项。

  • gh-61648: 检测 doctests 中属性的行号。

  • gh-113175: 与 importlib_metadata 7.0 同步,包括改进的类型注释,修复了 package_distributions 中符号链接包的问题,添加了 EntryPoints.__repr__,引入了 diagnose 脚本,添加了 Distribution.origin 属性,并移除了通过数字索引(元组行为)访问已弃用的 EntryPoint

  • gh-59616: 在 Windows 上添加了对 os.lchmod()os.chmod()follow_symlinks 参数的支持。注意,在 Windows 上 os.lchmod()follow_symlinks 默认值为 False

  • gh-112559: signal.signal()signal.getsignal() 不再对可调用的处理器调用 reprasyncio.run()asyncio.Runner.run() 不再对任务结果调用 repr。由 Yilei Yang 提供补丁。

  • gh-112962: dis 模块函数将缓存信息添加到 Instruction 实例中,而不是创建假的 Instruction 实例来表示缓存条目。

  • gh-112989: 减少了使用 asyncio SelectorEventLoop 连接套接字的开销。

  • gh-112970: 在 Linux 上可用时(如 glibc-2.34)使用 closefrom(),而不仅限于 FreeBSD。

  • gh-110190: 通过在 stgdict 中将 MAX_STRUCT_SIZE 设置为 64,修复了 PPC64LE 平台上带有数组的 ctypes 结构体。由 Diego Russo 提供补丁。

  • gh-112540: statistics.geometric_mean() 函数现在对包含零的数据集返回零。以前,它会引发异常。

  • gh-87286: 向 syslog 模块添加了 LOG_FTPLOG_NETINFOLOG_REMOTEAUTHLOG_INSTALLLOG_RASLOG_LAUNCHD,它们都是在 macOS 上使用的常量。

  • gh-112800: 修复 asyncio SubprocessTransport.close() 在使用 setuid 可执行文件时不抛出 PermissionError 的问题。

  • gh-51944: 向 termios 模块添加以下常量。这些值存在于 macOS 系统头文件中:ALTWERASEB14400B28800B7200B76800CCAR_OFLOWCCTS_OFLOWCDSR_OFLOWCDTR_IFLOWCIGNORECRTS_IFLOWEXTPROCIUTF8MDMBUFNL2NL3NOKERNINFOONOEOTOXTABSVDSUSPVSTATUS

  • gh-79325: 修复了 Windows 上 tempfile.TemporaryDirectory() 清理过程中的无限递归错误。

  • gh-94692: shutil.rmtree() 现在仅捕获 OSError 异常。之前,当提供无效参数时,shutil.rmtree() 的符号链接攻击抵抗版本可能会忽略或将任意异常传递给错误处理器。

  • gh-112736: 重构了 subprocess 中 del-safe 符号的使用,以允许在跨平台构建环境中使用。

  • gh-112727: 加速 pathlib.Path.absolute()。由 Barney Gale 提供补丁。

  • gh-74690: 通过约 6% 加速 issubclass() 对简单 runtime-checkable protocols 的检查。由 Alex Waygood 提供补丁。

  • gh-74690: 对于仅有一个可调用成员的 runtime-checkable protocols,将 isinstance() 检查速度提高约 20%。对于这些协议,将 issubclass() 检查速度提高约 10%。由 Alex Waygood 提供补丁。

  • gh-112645: 移除了向 shutil.rmtree() 传递 onerror 时的弃用错误。

  • gh-112640: 向 types.FunctionType 添加 kwdefaults 参数以设置默认关键字参数值。

  • gh-112622: 确保在 asyncio.create_task() 中将 name 参数传递给事件循环。

  • gh-112618: 修复了与 typing.Annotated 相关的缓存错误。Annotated[str, True] 不再与 Annotated[str, 1] 相同。

  • gh-112334: 修复了3.12版本中Linux下 subprocess 模块的性能回归问题,该问题由于逻辑错误导致在能够使用快速路径 vfork() 系统调用时未能使用,转而回退到安全但较慢的 fork()

    同时还修复了3.12.0版本中的第二个潜在安全漏洞。如果向 subprocess.Popen 或相关API传递了``extra_groups=[]``值,子进程在 exec() 之前不会调用底层的 setgroups(0, NULL) 系统调用来清除组列表。

    这是在修复第一个漏洞的过程中通过代码审查发现的。

  • gh-110190: 通过在stgdict中将 MAX_STRUCT_SIZE 设置为32,修复了Arm平台上带有数组的ctypes结构体问题。由Diego Russo提供补丁。

  • gh-81194: 修复了 socket.if_indextoname() 在特定值(UINT_MAX)下的崩溃问题。修复了64位非Windows平台上 socket.if_indextoname() 的整数溢出问题。

  • gh-112578: 修复了执行 zipfile 模块时出现的虚假 RuntimeWarning

  • gh-112516: 将捆绑的pip版本更新至23.3.1。

  • gh-112510: 为readline使用的后端(editline``或 ``readline)添加了 readline.backend

  • gh-112328: [枚举] 将 EnumDictEnumDict.member_namesEnumType._add_alias_ 和``EnumType._add_value_alias_``公开。

  • gh-112509: 修复了可能导致键同时出现在 typing.TypedDict__required_keys__ 和``__optional_keys__``属性中的边缘情况。由Jelle Zijlstra提供补丁。

  • gh-101336: 为 AbstractEventLoop.create_server()BaseEventLoop.create_server() 添加了 keep_alive 关键字参数。

  • gh-63284: 为 ssl 模块添加了对TLS-PSK(预共享密钥)模式的支持。

  • gh-112414: 修复了Python 3.12中的一个回归问题,该问题导致在使用自定义 loader 导入的模块上调用 repr() 时可能因 AttributeError 而失败。由Alex Waygood提供补丁。

  • gh-112358: 恢复对 struct.Struct 初始化的更改,该更改破坏了某些子类化的情况。

  • gh-112405: 优化 pathlib.PurePath.relative_to()。由 Alex Waygood 提供补丁。

  • gh-94722: 修复了一个错误,即当其中一个实例的 lineno 为 None 时,DocTest 实例之间的比较会失败。

  • gh-112361: 通过移除一些临时对象,加速了一小部分 pathlib 方法。

  • gh-112345: 当尝试对具有非方法成员的 typing.Protocol 调用 issubclass() 时,改进错误信息。由 Randolf Scholz 提供补丁。

  • gh-112137: 更改 dis 输出,将无行号显示为 "--" 而不是 "None"。

  • gh-112332: 弃用 traceback.TracebackExceptionexc_type 字段。添加 exc_type_str 以替代它。

  • gh-81620: 为 random.binomialvariate() 添加额外测试。

  • gh-112292: 修复了从子解释器导入时 readline 的崩溃问题。由 Anthony Shaw 提供补丁。

  • gh-77621: 通过延迟一些导入,略微提高了 pathlib 模块的导入时间。由 Barney Gale 提供补丁。

  • gh-112137: 更改 dis 输出,为跳转目标显示逻辑标签而不是偏移量。

  • gh-112139: 添加 Signature.format() 以将签名格式化为带有额外选项的字符串。并在 pydoc 中使用它来渲染更易读的签名,这些签名在参数之间有新行。

  • gh-112105: 使 readline.set_completer_delims() 与 libedit 一起工作。

  • gh-106922: 当错误跨越多行时,用 traceback 显示多行。

  • gh-111874: 在创建 typing.NamedTuple 类时,确保对定义 __set_name__ 并存在于 NamedTuple 类的类字典值中的所有对象调用 __set_name__()。由 Alex Waygood 提供补丁。

  • gh-68166: 在 tkinter.ttk.Style.element_create() 中添加对 "vsapi" 元素类型的支持。

  • gh-110275: 命名元组的方法 _replace()__replace__() 现在对于无效的关键字参数会抛出 TypeError 而不是 ValueError。

  • gh-99367: 如果设置了 safe_path,不要在 pdb 中混淆 sys.path[0]

  • gh-111615: 修复了由 gh-93162 的修复引起的回归问题,该问题导致无法在不指定 handlers 的情况下配置 QueueHandler

  • gh-75666: 修复了 tkinter 小部件的 unbind() 方法在两个参数下的行为。之前,widget.unbind(sequence, funcid) 会销毁 sequence 的当前绑定,使 sequence 无绑定,并删除 funcid 命令。现在它只从 sequence 的绑定中移除 funcid,保留其他命令,并删除 funcid 命令。只有当 funcid 是最后一个绑定命令时,才会使 sequence 无绑定。

  • gh-67790: 为 fractions.Fraction 实现了基本格式化支持(最小宽度、对齐、填充)。

  • gh-111049: 修复了 io.BytesIO 缓冲对象在垃圾回收过程中的崩溃问题。

  • gh-102980: 将 pdbinteract 命令的输出重定向到与调试器相同的通道。添加测试并改进文档。

  • gh-102988: email.utils.getaddresses()email.utils.parseaddr() 现在在遇到无效电子邮件地址的更多情况下返回 ('', '') 2元组,而不是可能不准确的值。为这两个函数添加可选的 strict 参数:使用 strict=False 以获取旧行为,接受格式错误的输入。可以使用 getattr(email.utils, 'supports_strict_parsing', False) 来检查 strict 参数是否可用。Thomas Dwyer 和 Victor Stinner 的补丁改进了 CVE 2023-27043 的修复。

  • gh-52161: cmd.Cmd.do_help() 现在在写入文档字符串之前使用 inspect.cleandoc() 清理它们。Filip Łapkiewicz 的补丁。

  • gh-82300: 向 multiprocessing.shared_memory.SharedMemory 添加 track 参数,允许使用共享内存块而无需注册到 POSIX 资源跟踪器,该跟踪器会在进程退出时自动释放它们。

  • gh-110109: 添加私有 pathlib._PurePathBase 类:作为 pathlib.PurePath 的基类,省略了一些魔术方法。未来可能会公开(连同 _PathBase)。

  • gh-109858: 保护 zipfile 免受“引用覆盖”zip炸弹攻击。现在在尝试读取与其他条目或中央目录重叠的条目时会引发 BadZipFile。

  • gh-109786: 修复了重新进入 itertools.pairwise__next__() 方法时可能出现的引用泄漏和崩溃问题。

  • gh-91539: urllib.request.getproxies_environment() 的小幅(10 - 20%)且简单的性能提升,通常在有许多环境变量需要遍历时有用。

  • gh-103363: 向 pathlib.Path.owner()group() 添加仅关键字参数 follow_symlinks,默认为 True

  • gh-102130: 在 cmd 中支持 editline 的标签补全。

  • gh-99437: runpy.run_path() 现在解码路径类对象,确保被运行模块的 __file__ 和 sys.argv[0] 始终是字符串。

  • gh-104003: 添加 warnings.deprecated(),一个装饰器,用于向静态类型检查器标记已弃用的函数,并在使用已弃用的类和函数时发出警告。参见 PEP 702。由 Jelle Zijlstra 提供补丁。

  • gh-103708: 将硬编码的 python 名称改为可配置参数,以便不同的 python 实现可以覆盖它,而不必在 sysconfig.py 中做出大量更改。

  • gh-66515: mailbox.MH 现在支持不包含 .mh_sequences 文件的文件夹(例如 Claws Mail IMAP-cache 文件夹)。由 Serhiy Storchaka 提供补丁。

  • gh-83162: 为了清晰起见,将 re.error 重命名为 PatternError,并保留 re.error 以向后兼容。由 Matthias Bussonnier 和 Adam Chhina 提供补丁。

  • gh-91133: 修复了 tempfile.TemporaryDirectory 清理中的一个错误,现在在解决文件系统权限错误时不再解引用符号链接。

  • bpo-43153: 在 Windows 上,tempfile.TemporaryDirectory 之前在目录清理过程中将 PermissionError 掩盖为 NotADirectoryError。现在如果错误未被忽略,它会正确地引发 PermissionError。由 Andrei Kulakov 和 Ken Jin 提供补丁。

  • bpo-32731: getpass.getuser() 现在对于所有失败情况都会引发 OSError,而不是在缺乏 pwd 模块的系统上引发 ImportError,或者在密码数据库为空时引发 KeyError

  • bpo-34321: mmap.mmap 现在在 Unix 上有一个 trackfd 参数;如果它是 False,则 fileno 指定的文件描述符不会被复制。

  • bpo-35332: shutil.rmtree() 函数现在在 ignore_errorsTrue 时忽略调用 os.close() 时的错误,并且 os.close() 在出错后不再重试。

  • bpo-35928: io.TextIOWrapper 现在正确处理 read()write() 后的解码缓冲区。

  • bpo-26791: shutil.move() 现在当一个目录是符号链接的目标时,将符号链接移动到该目录中。这提供了与 mv shell 命令相同的行为。之前的行为会引发异常。由 Jeffrey Kintscher 提供补丁。

  • bpo-41422: 修复了 pickle.Picklerpickle.Unpickler 通过内部备忘录映射涉及循环引用的内存泄漏。

  • bpo-19821: pydoc.ispackage() 函数已被弃用。

  • bpo-40262: ssl.SSLSocket.recv_into() 方法不再要求 buffer 参数实现 __len__,并且支持具有任意项目大小的缓冲区。

  • bpo-39912: warnings.filterwarnings()warnings.simplefilter() 现在会引发适当的异常,而不是 AssertionError。补丁由 Rémi Lapeyre 贡献。

  • bpo-37260: 修复了 shutil.rmtree() 中的一个竞态条件,即在 shutil.rmtree() 运行时,另一个进程或线程删除的目录条目可能导致其引发 FileNotFoundError。由 Jeffrey Kintscher 提供补丁。

  • bpo-36959: 修复了 strptime() 中一些无效 ISO 格式字符串组合的错误消息,这些消息引用了格式字符串中不包含的指令。由 Gordon P. Hemsley 提供补丁。

  • bpo-18060: 修复了一个类继承问题,当从 Structure 或 Union 的基类派生两个或更多级别的子类时,可能导致段错误。

  • bpo-29779: 添加了一个新的 PYTHON_HISTORY 环境变量,用于设置 .python_history 文件的位置。

  • bpo-21360: mailbox.Maildir 现在忽略以点开头的文件。

文档

  • gh-111699: 在 Python 3.12 文档的“新变化”中,将 smtpd 的弃用通知从其自己的部分移至 locale 下。

  • gh-110746: 改进了 ttk.treeview.column 和 ttk.treeview.heading 方法以及布局的有效选项/值的标记。

  • gh-95649: 文档说明 asyncio 模块包含从 uvloop 项目的 v0.16.0 中获取的代码,以及所需的 MIT 许可信息。

测试

  • gh-111798: 在 WASI 的 pydebug 构建下禁用 test_call 中的 test_super_deep();堆栈深度太小,无法使测试有用。

  • gh-111801: 在 test_isinstance 中为 test_infinitely_many_bases() 降低递归限制。这防止了在 WASI 的 pydebug 构建中出现堆栈溢出。

  • gh-111802: 为 test.pickletester 中的 test_bad_getattr() 指定一个低的递归深度,以避免在 WASI 的 pydebug 构建下耗尽堆栈。

  • gh-44626: 修复 os.path.isabs() 在给定以正好一个(反)斜杠开头的路径时在 Windows 上错误返回 True 的问题。

    修复 pathlib.PureWindowsPath.is_absolute() 对于某些以两个(反)斜杠开头的路径错误返回 False 的问题。

  • gh-113633: 为 _testcapi 扩展模块使用模块状态。

  • gh-109980: 在 macOS 上修复 test_shutil 中的 test_tarfile_vs_tar,其中系统 tar 可以在归档中包含比 shutil.make_archive 更多的信息。

  • gh-112769: 现在,当 zlib.ZLIB_RUNTIME_VERSION 包含非整数后缀时,测试正确比较 zlib 版本。例如,zlib-ng 将版本定义为 1.3.0.zlib-ng

  • gh-112334: 添加回归测试以验证在启用了 vfork 的 POSIX 系统(如 Linux)上,subprocess 在预期时会使用 vfork()

  • gh-108927: 修复了在同一进程中运行测试时的顺序依赖问题,当一个具有子模块的测试(如 test_importlib)跟随一个导入其子模块的测试(如 test_importlib.util)并先于一个使用该子模块的测试(如 test_unittest 或 test_compileall)时。

  • bpo-40648: 测试 Windows 上文件可以通过 chmod() 获取的模式。

构建

  • gh-114013: 修复 Tools/wasm/wasi.py,不将 python.wasm 的路径作为 HOSTRUNNER 的一部分。环境变量仅用于指定如何运行 WASI 主机,将 python.wasm 和相关标志附加到 HOSTRUNNER。这修复了 make test 的工作。

  • gh-113258: 更改 Windows 构建,将生成的冻结模块写入构建树而非源树。

  • gh-112305: 修复了在树外构建上执行的 check-clean-src 步骤,以检测错误的 $(srcdir)/Python/frozen_modules/*.h 文件,并建议适当的源树清理步骤以重新获得可工作的构建。

  • gh-112536: 添加对线程消毒剂(TSAN)的支持。

  • gh-112867: 修复了当设置 WITH_PYMALLOC_RADIX_TREE=0 时的构建。

  • gh-103065: 引入 Tools/wasm/wasi.py 以简化 WASI 构建。

  • bpo-11102: os.major()os.makedev()os.minor() 函数现在在 HP-UX v3 上可用。

  • bpo-36351: 交叉编译时不设置 ipv6type。

Windows

  • gh-114096: 为创建目录连接激活的进程权限现在会在之后恢复,避免程序中其他部分的行为变化。

  • gh-111877: os.stat() 调用对于无法直接访问的文件返回了错误的时间值。

  • gh-111973: 更新 Windows 安装程序以使用 SQLite 3.44.2。

  • gh-113009: multiprocessing: 在 Windows 上,修复了 Process.terminate() 中的一个竞态条件:不再将 returncode 属性设置为总是在 Process.wait() 中调用 WaitForSingleObject()。之前,有时候即使 GetExitCodeProcess() 不是 STILL_ACTIVE,进程在 TerminateProcess() 后仍在运行。由 Victor Stinner 提供补丁。

  • gh-86179: 修复了通过符号链接在 Windows 上启动 Python 时的路径计算问题。

  • gh-71383: 更新 Windows 安装程序中的 Tcl/Tk 到 8.6.13,并应用了一个补丁以抑制不正确的 ThemeChanged 警告。

  • gh-111650: 确保在 pyconfig.h 中定义了 Py_GIL_DISABLED 预处理器变量,以便用 C 编写的扩展模块能够使用它。

  • gh-112278: 如果当前用户没有 WMI 的权限,减少 Windows 上 platform 中某些函数的时间成本。

  • gh-73427: 弃用 sys._enablelegacywindowsfsencoding()。改用 PYTHONLEGACYWINDOWSFSENCODING。由 Inada Naoki 提供补丁。

  • gh-87868: 在 _winapi.CreateProcess() 中正确排序并移除重复的环境变量。

  • bpo-37308: 修复在 Windows 上使用非 ASCII tagname 参数时 mmap.mmap 中的乱码问题。

macOS

  • gh-113666: 向模块 stat 添加以下常量:UF_SETTABLEUF_TRACKEDUF_DATAVAULTSF_SUPPORTEDSF_SETTABLESF_SYNTHETICSF_RESTRICTEDSF_FIRMLINKSF_DATALESS。值 UF_SETTABLESF_SUPPORTEDSF_SETTABLESF_SYNTHETIC 仅在 macOS 上可用。

  • gh-113536: os.waitid() 现在在 macOS 上可用。

  • gh-110459: 在 macOS 上运行 configure ... --with-openssl-rpath=X/Y/Z 不再无法检测到 OpenSSL。

  • gh-74573: 文档说明 dbm.ndbm 在更新时超过未记录的平台限制时可能会静默损坏 DBM 文件,并且在读取此类损坏文件时可能会崩溃(段错误)。(FB8919203)

  • gh-65701: freeze 工具不适用于 Python 的框架构建。文档说明这一点,并在使用此类构建运行工具时早期退出。

  • gh-87277: webbrowser: 不要在 macOS 上寻找 X11 浏览器。这些通常不被使用,探测它们可能会导致启动 XQuartz,即使它不被其他方式使用。

  • gh-111973: 更新 macOS 安装程序以使用 SQLite 3.44.2。

  • gh-108269: 在 macOS 上的框架、嵌入式 Python.app 和 IDLE.app 的 Info.plist 中设置 CFBundleAllowMixedLocalizations 为 true。这允许应用程序在用户的首选区域设置与英语不同时,选择用户的区域设置。

  • gh-102362: 确保 sysconfig.get_plaform() 的结果至少包括主版本和次版本,即使在构建过程中 MACOSX_DEPLOYMENT_TARGET 仅设置为一个主版本以匹配 pip 预期的格式。

  • gh-110017: 由于 macOS 中的一个错误 (FB13453490),在 macOS 上禁用信号处理压力测试。

  • gh-110820: 确保 ALIGNOF_MAX_ALIGN_TSIZEOF_LONG_DOUBLEHAVE_GCC_ASM_FOR_X64 的预处理器定义对于 macOS 上的 Universal 2 构建是正确的。

  • gh-109981: 在 macOS 上使用 /dev/fd 来确定 test.support.os_helper.fd_count 中打开的文件数量,以避免在探测打开的文件时因“受保护”的文件描述符而崩溃。

IDLE

  • gh-72284: 改进 IDLE 文档中的功能列表、编辑器键绑定和 shell 键绑定。

  • gh-113903: 修复 test.test_idle 在 test_configdialog 中的罕见失败。

  • gh-113729: 修复 3.11.7 和 3.12.1 中的“帮助 -> IDLE 文档”菜单错误。

  • gh-113269: 修复 test_editor 在 macOS Catalina 上的挂起问题。

  • gh-112898: 修复在macOS上退出IDLE时处理未保存文件的问题。

  • bpo-13586: 打开“替换”对话框时输入选中的文本。

C API

Python 3.13.0 alpha 2

发布日期: 2023-11-22

核心与内置函数

  • gh-112243: 不要在f-string调试表达式中包含注释。由Pablo Galindo提供补丁

  • gh-112287: 通过仅在需要时加载 opargoperand 来轻微优化Tier 2(uop)解释器。同时再次将跟踪大小限制翻倍,这次是512。

  • gh-112266: 更改 __dict____weakref__ 的文档字符串。

  • gh-111807: 在WASI调试构建下将最大解析器堆栈深度降低到1000。

  • gh-111798: 当Python以调试模式构建时,将C递归限制设置为500而不是1500。调试构建很可能以低优化级别构建,这意味着比发布构建更高的堆栈内存使用。由Victor Stinner提供补丁。

  • gh-106529: 启用将未特化的 FOR_ITER 翻译到Tier 2。

  • gh-111916: 使hashlib相关模块在没有GIL的情况下线程安全

  • gh-81137: 当新代码对象类型不匹配时(例如,从生成器到普通函数),弃用对函数 ``__code__``字段的赋值。

  • gh-79932: 如果 :suspension:`frame.clear` 在暂停的帧上调用,则引发异常。

  • gh-81925: 为GNU KFreeBSD实现原生线程id。

  • gh-111843: 使用指数退避来减少Tier 2优化尝试失败的次数超过99%。

  • gh-110829: 加入线程现在确保底层操作系统线程已退出。这是多线程进程中更安全fork()所必需的。

  • gh-109369: 如果代码被插桩,确保二级追踪被去优化

  • gh-111772: 为_Py_T_OBJECT以及Py_T_OBJECT_EX专门化槽加载和存储

  • gh-111666: 通过改变它们解析传递参数的方式,加速 BaseExceptionGroup.derive()BaseExceptionGroup.subgroup()BaseExceptionGroup.split()

  • gh-111654: 修复操作码 LOAD_FROM_DICT_OR_DEREF 中发生某些错误时的运行时崩溃。

  • gh-111623: 使用跨解释器API添加支持在解释器之间共享元组。由Anthony Shaw提供补丁。

  • gh-111354: 如果指令是yield-from或await的一部分,则 YIELD_VALUE 的操作数现在为``1``,否则为 0

    SUSPENDED帧状态现在分为 SUSPENDEDSUSPENDED_YIELD_FROM。这简化了 _PyGen_yf 中的代码。

  • gh-111520: 将Tier 1(字节码)和Tier 2(微操作)解释器合并在一起,将Tier 2解释器循环和开关移动到 Python/ceval.c 中的 _PyEval_EvalFrameDefault()Python/executor.c 文件已移除。此外,TIER_ONE``和 ``TIER_TWO 宏现在由代码生成器处理。

    **注意!**这将环境变量更改为 PYTHON_UOPSPYTHON_LLTRACE 以启用微操作及其调试。

  • gh-109181: 通过懒惰计算行号加速 Traceback 对象创建。由Pablo Galindo提供补丁

  • gh-111420: 允许在括号化的 with 语句中使用类型注释

  • gh-111438: 使用跨解释器API添加支持在解释器之间共享浮点数。由Anthony Shaw提供补丁。

  • gh-111435: 使用跨解释器API添加支持在解释器之间共享 TrueFalse。由Anthony Shaw提供补丁。

  • gh-102388: 修复 iso2022_jp_3iso2022_jp_2004 编解码器读取越界的错误

  • gh-111366: 修复了 codeop 中的一个问题,该问题导致在存在无效语法时引发的 SyntaxError 异常不包含精确的错误信息。由Pablo Galindo提供补丁。

  • gh-111380: 修复了一个错误,该错误导致在解析时如果遇到无效语法,SyntaxWarning 会显示两次。由Pablo Galindo提供补丁。

  • gh-111374: 添加了一个新的环境变量 PYTHON_FROZEN_MODULES。它决定了导入机制是否忽略冻结模块,等同于命令行选项 -X frozen_modules

  • gh-111354: 从 YIELD_VALUE 中移除 oparg。将 RESUMEoparg 更改为包含关于except深度的信息。这些更改使得简化生成器关闭中的代码成为可能。

  • gh-94438: 修复了一个回归问题,该问题在调试时阻止了跨 is Noneis not None 的跳转。由Savannah Ostrowski提供补丁。

  • gh-67224: 在使用 -c 选项运行Python时,在回溯中显示源代码行。由Pablo Galindo提供补丁。

  • gh-111123: 修复了一个错误,该错误导致在 except 块中的 global 声明在全局变量在 else 块中使用时被拒绝。

  • gh-110938: 修复了带有函数和带有泛型类型参数的类的缩进块的错误消息。由Pablo Galindo提供补丁。

  • gh-109214: 在从帧返回之前移除不必要的指令指针更新。

  • gh-110912: 使用 traceback 模块正确显示 MemoryError 异常的回溯。由Pablo Galindo提供补丁。

  • gh-109894: 修复了由于子解释器中静态 MemoryError 未正确初始化而导致的崩溃。

  • gh-110892: 对于由异常引起的 PyTrace_RETURN 事件返回 NULL

  • gh-110864: 通过 _PyArg_UnpackKeywordsWithVararg 修复了为定义位置或关键字、可变参数和仅关键字参数的函数的参数解析。

  • gh-109094: 将解释器帧上的 prev_instr 替换为 instr_ptr,后者指向当前正在执行(或一旦帧恢复后将执行)的指令的开头。

  • gh-110805: 允许 repl 显示源代码和完整的回溯。由 Pablo Galindo 提交的补丁。

  • gh-110722: 添加 PYTHON_PRESITE=package.module 以在 site.py 执行之前在解释器生命周期的早期导入模块。Python 需要 built in debug mode 才能使此选项存在。

  • gh-110481: 在 --disable-gil 构建中实现偏置引用计数。

  • gh-110543: 修复 Python 3.12 中的回归问题,即 types.CodeType.replace() 在包含理解的模块或类代码对象上调用时将产生损坏的代码对象。由 Jelle Zijlstra 提交的补丁。

  • gh-89519: 移除了链式 classmethod 描述符(在 bpo-19072 中引入)。这不能再用于包装其他描述符,如 property。此特性的核心设计存在缺陷并导致了一系列下游问题。要“传递”一个 classmethod,考虑使用 Python 3.10 中添加的 __wrapped__ 属性。

  • gh-103615: 使用本地事件进行操作码追踪

  • bpo-46657: 添加 mimalloc 内存分配器支持。

  • gh-106718: 当 PyConfig.stdlib_dir 被显式设置时,现在会被尊重且不会被 PyConfig.home 覆盖。

  • gh-106905: 修复关于 AST 构造器递归深度不匹配的错误 SystemError。

  • gh-100445: 改进带有转义的未终止字符串的错误消息。

  • bpo-45759: 改进了 elif/else 语句不匹配任何有效语句时的错误消息。由 Jeremiah Vivian 提交的补丁。

测试

  • gh-111808: 使 test.support.infinite_recursion() 的默认值基于编译解释器时是否使用了优化条件。这有助于像WASI这样的平台,在调试构建中其堆栈大小受到极大限制。

  • gh-110722: 在回归测试套件中收集标准库的行覆盖率现在是精确的,而且快得多。由Łukasz Langa提供补丁。

  • gh-110367: 使regrtest的 --verbose3 选项与 --huntrleaks -jN 选项兼容。``./python -m test -j1 -R 3:3 --verbose3``命令现在按预期工作。由Victor Stinner提供补丁。

  • gh-111165: 从 test.support 模块中移除不再使用的函数 run_unittest() 和``run_doctest()``。

  • gh-110932: 如果定义了 SOURCE_DATE_EPOCH 环境变量,修复regrtest:使用变量值作为随机种子。由Victor Stinner提供补丁。

  • gh-110995: test_gdb: 修复对未构建Python脚本支持的gdb的检测。由Victor Stinner提交的补丁。

  • gh-110918: 现在按照指定的顺序测试由选项 --match--ignore--matchfile 和``--ignorefile``指定的测试用例匹配模式,最后一个匹配决定测试用例是否运行或被忽略。

  • gh-108747: 为 site 中的 usercustomizesitecustomize 钩子添加单元测试。

构建

  • gh-96954: 使 make regen-unicodedata 适用于CPython的树外构建。

  • gh-112088: 添加 Tools/build/regen-configure.sh 脚本以使用Ubuntu容器镜像重新生成``configure``。不再使用 quay.io/tiran/cpython_autoconf:271 容器镜像(tiran/cpython_autoconf)。由Victor Stinner提交的补丁。

  • gh-111046: 对于wasi-threads,现在导出内存以修复与某些wasm运行时的兼容性问题。

  • gh-110828: AIX 32位需要 -latomic 来构建 _testcapi 扩展模块。

  • gh-85283: 现在使用 limited C API 构建 errnomd5resourcewinsound_ctypes_test_multiprocessing.posixshmem_scproxy_stat_testimportmultiple``和 ``_uuid C扩展。由Victor Stinner提交的补丁。

Windows

  • gh-111856: 修复在不支持文件ID请求的文件系统上的 fstat()。这包括FAT32和exFAT。

  • gh-111293: 修复 os.DirEntry.inode 在Windows上某些文件系统中丢弃文件ID的高64位的问题。

  • gh-110913: WindowsConsoleIO现在正确地分块大缓冲区而不拆分UTF-8序列。

macOS

  • gh-59703: 对于macOS框架构建,在 getpath.c 中使用系统 dladdr 函数来查找共享库的路径,而不是依赖于已弃用的macOS API。

  • gh-110950: 更新 macOS 安装程序,包含上游 Tcl/Tk 的修复,解决在 macOS 14 Sonoma 上 Tkinter 中遇到的 Secure coding is not enabled for restorable state! 警告问题。

  • gh-111015: 确保在 macOS 构建中,IDLE.app 和 Python Launcher.app 以适当的权限安装。

  • gh-71383: 更新 macOS 安装程序,包含上游 Tcl/Tk 的修复,解决在 Tkinter 中遇到的 ttk::ThemeChanged 错误。

  • gh-92603: 更新 macOS 安装程序,包含上游 Tcl/Tk 接受的修复,解决在第一个 tkinter.Tk() 实例被销毁后遇到的崩溃问题。

IDLE

  • bpo-35668: 为 IDLE 调试器模块添加文档字符串。修复两个错误:初始化 Idb.botframe (应在 Bdb 中) ;在 Idb.in_rpc_code 中,尝试使用 prev_frame 前检查其是否为 None。大幅扩展 test_debugger。

工具/示例

  • gh-111903: Argument Clinic 现在支持 @critical_section 指令,该指令指示 Argument Clinic 在函数调用周围生成一个临界区,在 --disable-gil 构建中锁定 self 对象。补丁由 Sam Gross 提供。

C API

  • gh-112026: 再次添加私有函数 _PyThreadState_UncheckedGet() 作为新公共函数 PyThreadState_GetUnchecked() 的别名。由 Victor Stinner 提供补丁。

  • gh-112026: 恢复被移除的 _PyDict_GetItemStringWithError() 函数。numpy 使用此函数。补丁由 Victor Stinner 提供。

  • gh-112026: 恢复被移除的私有 C API 函数、宏和结构,这些目前没有简单的替代方案:

    • _PyDict_GetItem_KnownHash()

    • _PyDict_NewPresized()

    • _PyHASH_BITS

    • _PyHASH_IMAG

    • _PyHASH_INF

    • _PyHASH_MODULUS

    • _PyHASH_MULTIPLIER

    • _PyLong_Copy()

    • _PyLong_FromDigits()

    • _PyLong_New()

    • _PyLong_Sign()

    • _PyObject_CallMethodId()

    • _PyObject_CallMethodNoArgs()

    • _PyObject_CallMethodOneArg()

    • _PyObject_CallOneArg()

    • _PyObject_EXTRA_INIT

    • _PyObject_FastCallDict()

    • _PyObject_GetAttrId()

    • _PyObject_Vectorcall()

    • _PyObject_VectorcallMethod()

    • _PyStack_AsDict()

    • _PyThread_CurrentFrames()

    • _PyUnicodeWriter 结构体

    • _PyUnicodeWriter_Dealloc()

    • _PyUnicodeWriter_Finish()

    • _PyUnicodeWriter_Init()

    • _PyUnicodeWriter_Prepare()

    • _PyUnicodeWriter_PrepareKind()

    • _PyUnicodeWriter_WriteASCIIString()

    • _PyUnicodeWriter_WriteChar()

    • _PyUnicodeWriter_WriteLatin1String()

    • _PyUnicodeWriter_WriteStr()

    • _PyUnicodeWriter_WriteSubstring()

    • _PyUnicode_AsString()

    • _PyUnicode_FromId()

    • _PyVectorcall_Function()

    • _Py_IDENTIFIER()

    • _Py_c_abs()

    • _Py_c_diff()

    • _Py_c_neg()

    • _Py_c_pow()

    • _Py_c_prod()

    • _Py_c_quot()

    • _Py_c_sum()

    • _Py_static_string()

    • _Py_static_string_init()

    由Victor Stinner提供补丁。

  • gh-112026: 再次在 Python.h``中包含 ``<ctype.h><unistd.h> 头文件,但在有限C API版本3.13及更新版本中不包含它们。由Victor Stinner提供的补丁。

  • gh-111956: 添加仅供内部使用的一次性初始化API:_PyOnceFlag``和``_PyOnceFlag_CallOnce

  • gh-111262: 添加 PyDict_Pop()PyDict_PopString() 函数:从字典中移除一个键并可选地返回被移除的值。这类似于 dict.pop(),但没有默认值,如果键不存在也不会引发 KeyError。由Stefan Behnel和Victor Stinner提供的补丁。

  • gh-111863: 将 Py_NOGIL 重命名为 Py_GIL_DISABLED。由Hugo van Kemenade提供的补丁。

  • gh-111138: 添加 PyList_Extend()PyList_Clear() 函数:类似于Python的``list.extend()`` 和 list.clear() 方法。由Victor Stinner提供的补丁。

  • gh-108765: 在Windows上,Python.h``不再包含 ``<stddef.h> 标准头文件。如果需要,现在应该显式包含它。由Victor Stinner提供的补丁。

  • gh-111569: 实现来自 PEP 703 的"Python临界区"。这些宏帮助在CPython的 ``--disable-gil``构建中用每对象锁替换GIL。在默认构建中,这些宏是无操作的。

  • gh-111506: 在有限C API版本3.13中,Py_SET_REFCNT() 函数现在被实现为一个不透明的函数调用。由Victor Stinner提供的补丁。

  • gh-108082: 添加 PyErr_FormatUnraisable() 函数。

  • gh-110964: 将未记录的私有 _PyArg 函数和 _PyArg_Parser 结构移至内部 C API(pycore_modsupport.h)。由 Victor Stinner 提供补丁。

  • gh-110815: 在 PyArg_ParseTupleAndKeywords() 中支持非 ASCII 关键字名称。

  • gh-109587: 引入了 PyUnstable_PerfTrampoline_CompileCode()PyUnstable_PerfTrampoline_SetPersistAfterFork()PyUnstable_CopyPerfMapFile()。这些函数允许扩展模块在应用程序“预热”后急切地初始化蹦床。这使得性能蹦床可以以始终启用的方式运行。

  • gh-85283: 将 PySys_Audit() 函数添加到有限的 C API 中。补丁由 Victor Stinner 提供。

  • gh-85283: 将 PyMem_RawMalloc()PyMem_RawCalloc()PyMem_RawRealloc()PyMem_RawFree() 添加到有限的 C API 中。由 Victor Stinner 提供补丁。

  • gh-106672: 函数 PyDict_GetItem()PyDict_GetItemString()PyMapping_HasKey()PyMapping_HasKeyString()PyObject_HasAttr()PyObject_HasAttrString()PySys_GetObject(),在调用函数期间清除所有发生的错误,现在使用 sys.unraisablehook() 报告它们。

  • gh-67565: 移除 getargs.cbinasciissl 和 Argument Clinic 中多余的 C-连续性检查。由 Stefan Krah 和 Furkan Onder 提供补丁。

Python 3.13.0 alpha 1

发布日期:2023-10-13

安全性

  • gh-108310: 修复了一个问题,其中 ssl.SSLSocket 的实例容易绕过 TLS 握手和包括的保护措施(如证书验证),并将发送的未加密数据视为握手后的 TLS 加密数据。安全问题的报告为 CVE 2023-40217,由 Aapo Oksman 报告。由 Gregory P. Smith 提供补丁。

  • gh-107774: PEP 669 指定 sys.monitoring.register_callback 将生成审计事件。Python 3.12 的预发布版本未生成审计事件。现在已修复。

  • gh-102988: 撤销了在3.12beta4版本中发布的 email.utils 安全改进变更,该变更无意中导致 email.utils.getaddresses 无法解析引用名字字段中包含逗号的电子邮件地址。参见 gh-106669

  • gh-99108: 从上游刷新我们新的HACL*内置 hashlib 代码。内置的SHA2应该会更快,并且修复了32位平台上SHA3的一个问题。

  • gh-102509: 在创建 PyLongObject 对象时开始初始化 ob_digit。由Illia Volochii提供补丁。

核心与内置函数

  • gh-110782: 修复了当 typing.TypeVar 用关键字参数构造时发生的崩溃。由Jelle Zijlstra提供补丁。

  • gh-110752: 在 interpreter_clear() 中重置 ceval.eval_breaker

  • gh-110721: 使用 traceback 实现作为默认的 PyErr_Display() 功能。由Pablo Galindo提供补丁

  • gh-110696: 修复了无效参数解包的错误消息。由Pablo Galindo提供补丁

  • gh-104169: 将tokenizer分成两个独立的目录:- 一部分包含实际的词素生成逻辑,位于``Parser/lexer``。- 第二部分根据我们拥有的不同tokenization模式(字符串,utf-8,文件,交互式,readline)包装lexer,位于 Parser/tokenizer

  • gh-110688: 从 set 中移除未文档化的 test_c_api 方法,该方法仅在 Py_DEBUG 下定义用于测试目的。现在我们有了适当的CAPI测试。

  • gh-104584: 修复了在启用 PYTHONUOPS-X uops 时运行时的引用泄漏。

  • gh-110514: 向 sys.setprofile() 事件添加 PY_THROW

  • gh-110489: 当输入恰好是一个浮点数时优化 math.ceil(),大约有10%的性能提升。

  • gh-110455: Guard assert(tstate->thread_id > 0) with #ifndef HAVE_PTHREAD_STUBS. This allows for pydebug builds to work under WASI which (currently) lacks thread support.

  • gh-110309: 移除f-string规格的ast中不必要的空常量节点。

  • gh-110259: 正确识别f-字符串中的格式说明符(使用单引号或三引号),这些f-字符串在表达式部分有多行,并包含格式说明。由Pablo Galindo提供补丁。

  • gh-110237: 修复在 _PyEval_MatchClass 中对 PyList_Append 调用缺少错误检查的问题。

  • gh-110164: regrtest: 如果定义了 SOURCE_DATE_EPOCH 环境变量,regrtest现在会禁用测试随机化。由Victor Stinner提供补丁。

  • gh-109889: 修复编译器的冗余NOP检测算法,使其在查找下一个指令的行号时跳过没有行号的NOP。

  • gh-109853: sys.path[0] 现在为子解释器正确设置。

  • gh-109923: 在 RETURN_GENERATOR 之后的 POP_TOP 上设置行号。

  • gh-105716: 子解释器现在能正确处理后台有线程运行的情况。在此之前,这些线程会干扰清理和销毁操作,并阻止运行另一个脚本。

  • gh-109369: 内部的eval_breaker和支持标志,以及监控版本已合并为一个原子整数,以加快检查速度。

  • gh-109823: 修复编译器在移除作为跳转目标的空基本块时不调整标签的bug。

  • gh-109793: 主线程不再在运行时终结期间清理子解释器时过早退出。这个bug尤其成问题,因为一旦触发,Python进程总是会以0退出码返回,即使它失败了。

  • gh-109719: 修复编译器在重新排序冷/热块时缺少跳转目标标签的问题。

  • gh-109595: 添加 -X cpu_count 命令行选项,以覆盖 os.cpu_count()os.process_cpu_count() 的返回结果。这个选项对于需要限制容器系统CPU资源但不需要修改容器(应用程序代码)的用户非常有用。由Donghee Na提供补丁。

  • gh-109627: 修复编译器未为重复的小退出块分配新跳转目标标签的错误。

  • gh-109596: 修复语法中一些被错误标记为软关键字的令牌。同时修复一些重复的规则名称,并确保不允许重复规则。由Pablo Galindo提供补丁。

  • gh-109496: 在Python的调试模式下,Py_DECREF()`现在如果对象是指向已释放内存的悬挂指针(内存由内存分配器的调试钩子填充为`0xDD() "dead byte"),则会调用``_Py_NegativeRefcount()``。修复方法是在检查 ``_Py_IsImmortal()``*之前*检查引用计数。由Victor Stinner提供补丁。

  • gh-107265: 当需要基础操作码时,由执行器隐藏的Deopt操作码

  • gh-109371: 正确地为工具初始化Deopt指令,并在仪表化中修改了错误的断言,当之前的工具已经设置了INSTRUCTION事件时。

  • gh-105658: 修复以条件表达式结尾的except块的行跟踪包含条件表达式行的多余事件的错误。

  • gh-109219: 修复编译类型参数作用域时使用在内部作用域中也是自由名称的名称的错误。

  • gh-109351: 修复编译涉及命名(海象)表达式的无效AST时崩溃的错误。

  • gh-109341: 修复编译涉及 ast.TypeAlias 的无效AST时崩溃的错误。

  • gh-109195: 修复加载 super 全局(或遮蔽变量)的 LOAD_* 指令前面的源位置,使其仅包含名称 super 而不包括后面的括号。

  • gh-109256: 专用操作码的操作码ID在其自己的范围内分配,以提高'真实'操作码ID的稳定性。

  • gh-109216: 修复 BUILD_MAP 中可能的内存泄漏。

  • gh-109207: 修复符号表条目对象的 __repr__ 中的SystemError。

  • gh-109179: 修复C回溯显示中从 SyntaxError 中删除注释的错误。

  • gh-109118: 禁止在嵌套于类中的PEP 695注解作用域内使用嵌套作用域(lambda、生成器表达式和推导式)。

  • gh-109156: 添加测试,用于在保留行的检测的同时去除指令的检测。

  • gh-109114: 放宽对f-字符串内无效lambda的错误消息检测,不再搜索任意替换字段以避免误报。由Pablo Galindo提供补丁。

  • gh-105848: 添加一个新的 CALL_KW 操作码,用于包含关键字参数的调用。同时,修复在调试器中跳过方法调用时可能发生的崩溃。

  • gh-109052: 在比较代码对象时使用基础操作码,以避免检测的干扰。

  • gh-109118: 修复当在泛型类的类型参数中引发NameError时解释器崩溃的问题。

  • gh-88943: 改进跟随数字文字的非ASCII字符的语法错误。现在它指向无效的非ASCII字符,而不是有效的数字文字。

  • gh-108976: 修复在监控回调中去除代码对象的检测后发生的崩溃。

  • gh-108732: 使模块和类作用域的推导式的迭代变量再次对使用 frame.f_locals 的pdb和其他工具可见。

  • gh-108959: 修复涉及非语义括号和空格的下标和二元操作的错误位置的光标放置。由Pablo Galindo提供补丁。

  • gh-104584: 修复在启用 PYTHONUOPS-X uops 且优化过程中发生错误时的崩溃。

  • gh-108727: 为 CounterOptimizer_Type 定义 tp_dealloc。这修复了在释放时的段错误。

  • gh-108520: 修复 multiprocessing.synchronize.SemLock.__setstate__() 以正确初始化 multiprocessing.synchronize.SemLock._is_fork_ctx。这修复了在嵌套进程间传递SemLock时的回归问题。

    multiprocessing.synchronize.SemLock.is_fork_ctx 重命名为 multiprocessing.synchronize.SemLock._is_fork_ctx,以避免将其暴露为公共API。

  • gh-108654:如果内联推导式引发异常,则恢复被内联推导式遮蔽的局部变量。

  • gh-108488:更改内联缓存条目的初始化方式,使得 JUMP_BACKWARD 的缓存条目初始化为零,而不是用于所有其他指令的 adaptive_counter_warmup() 值。这个计数器在指令中是唯一的,从零开始计数。

  • gh-108716:关闭代码对象的深度冻结。模块仍然被冻结,因此不需要对常见模块进行文件系统搜索。

  • gh-108614:添加 RESUME_CHECK 指令,以避免在第2层执行引擎中处理插装、信号和上下文切换。

  • gh-108487:移动一个断言,该断言在一个应仅触发去优化的狡猾情况下会导致虚假崩溃。

  • gh-106176:使用 WeakValueDictionary 来跟踪包含每个线程当前正在导入的模块的列表。这有助于避免因为列表保留时间过长而导致引用泄漏。使用弱引用是因为垃圾回收无法中断清理过程。

  • gh-105481:移除了regen-opcode构建阶段,其工作现在在regen-cases中完成。

  • gh-107901:修复在for循环末尾的 JUMP_BACKWARD 缺少行号的问题。

  • gh-108113:内置的 compile() 现在可以接受一个新标志 ast.PyCF_OPTIMIZED_AST,它与 ast.PyCF_ONLY_AST 类似,但返回的 AST 会根据 optimize 参数的值进行优化。

    ast.parse() 现在接受一个可选参数 optimize,该参数会传递给内置的 compile()。这使得获取优化的 AST 成为可能。

  • gh-107971:操作码ID现在从bytecodes.c生成,而不是在opcode.py中硬编码。

  • gh-107944: 改进带有错误关键字参数的函数调用的错误消息。由Pablo Galindo提供补丁。

  • gh-108390: 在`sys.monitoring.set_local_events`中设置非本地事件(RAISE`EXCEPTION_HANDLED`等)时引发异常。

    修复在递归调用Python类时追踪导致的崩溃。

  • gh-108035: 移除`_PyCFrame`结构体,将指向当前解释器帧的指针移回线程状态,如同3.10及更早版本。`_PyCFrame`作为追踪的性能优化存在。由于PEP 669已实现,此优化不再适用。

  • gh-91051: 在默认情况下`char`为有符号的平台中,修复使用全部八个类型观察器槽时的中止/段错误。

  • gh-106581: 当启用 PYTHONUOPS-X uops 时,修复可能的断言失败和缺失的仪表事件。

  • gh-107526: 将`vars`、dirnext`getattr`和`iter`恢复为不使用参数诊所。

  • gh-84805: 为 METH_NOARGSMETH_O 扩展函数自动生成签名。

  • gh-107758: 通过确保`dump_stack()`例程从不调用Python实现的`__repr__`方法,使`lltrace`特性(低级解释器调试)使用的`dump_stack()`例程对递归具有鲁棒性。同时,为了使Tier-2 uops的类似输出与ceval.c中的`lltrace`代码匹配,使其出现在`stdout`上(而非`stderr`)。

  • gh-107659: 为 ctypes.pointer()ctypes.POINTER() 添加文档字符串。

  • gh-105848: 修改字节码,使得 CALL 的实际可调用对象在堆栈上的位置一致(无论是否激活绑定方法调用优化)。

  • gh-107674: 修复`sys.settrace`中的性能回归。

  • gh-107724: 在3.12的预发布版本中,直到rc1,`sys.monitoring`回调函数对于`PY_THROW`事件缺少第三个异常参数。现已修复。

  • gh-84436: 跳过对许多已知不朽对象的引用计数修改。

  • gh-107596: 通过 int 索引专门化 str 对象的下标操作。

  • gh-107080: 跟踪引用构建(--with-trace-refs)在与隔离的子解释器一起使用时崩溃。问题全局状态已被隔离到每个解释器。除了修复崩溃,此更改不影响用户。

  • gh-107557: 为CPython中的优化通道生成裸机第2层抽象解释器所需的案例。

  • gh-106608: 使 _PyUOpExecutorObject 可变长度。

  • gh-100964: 在 return 后清除生成器的异常状态以打破引用循环。

  • gh-107455: 在将不兼容类型转换为 ctypes.c_char_pctypes.c_wchar_pctypes.c_void_p 时改进错误消息。

  • gh-107263: 将主解释器以外的函数的C递归限制从800增加到1500。这应该允许像 list.__repr__json.dumps 这样的函数处理所有它们在3.12之前可以处理的输入。

  • gh-104584: 修复了一个问题,该问题在启用 PYTHONUOPS-X uops 时导致读取了不正确的内联缓存。

  • gh-104432: 修复了在 grpsocket 模块中涉及返回 char * 指针序列的C API中潜在的非对齐内存访问。这些是在ARM macOS上使用 -fsaniziter=alignment 构建时发现的。由Christopher Chavez提供补丁。

  • gh-106078: 隔离 _decimal (应用 PEP 687) 。由Charlie Zhao提供补丁。

  • gh-106898: 将异常作为第三个参数添加到 sys.monitoring 中的 PY_UNIND 回调。这使得 PY_UNWIND 回调与其他异常处理回调一致。

  • gh-106895: 当监控回调函数为不能本地禁用的事件返回 DISABLE 时,引发 ValueError

  • gh-106897: 向 sys.monitoring 添加一个 RERAISE 事件,该事件在异常被重新抛出时发生,无论是通过简单的 raise``语句显式抛出,还是在 ``exceptfinally 块中隐式抛出。

  • gh-77377: 确保在fork上下文中创建的多进程同步对象不会被发送到在spawn上下文中创建的不同进程。这将在父进程中将段错误更改为可操作的RuntimeError。

  • gh-106931: 静态分配的字符串对象现在全局内联,而不是每个解释器内联。这修复了此类字符串仅在单个解释器中内联的情况。普通字符串对象不受影响。

  • gh-104621: 现在,不支持的模块总是无法导入。

  • gh-107122: 向 dbm.ndbm 添加 dbm.ndbm.ndbm.clear()。由Donghee Na提供补丁。

  • gh-107122: 向 dbm.gnu 添加 dbm.gnu.gdbm.clear()。由Donghee Na提供补丁。

  • gh-107015: 从语法中删除了ASYNC和AWAIT令牌,这消除了在使用 ast.parse() 中的``feature_version<7``时使 asyncawait 成为软关键字的可能性。

  • gh-106917: 修复了类方法风格的 super() 方法调用(即,当 super() 的第二个参数,或者在零参数super情况下从 self/cls 中提取的隐含第二个参数是类型时),当调用的目标不是类方法时。

  • gh-105699: Python不再因为初始化每个解释器内联字符串时的不频繁竞争而崩溃。当解释器被最终化时,崩溃会显现。

  • gh-105699: Python不再因为设置 Py_FileSystemDefaultEncoding 和``Py_FileSystemDefaultEncodeErrors`` (两者都已弃用) 时的不频繁竞争而崩溃,当同时初始化两个隔离的子解释器时。现在它们仅在运行时初始化期间设置。

  • gh-106908: 修复了在启用 PYTHONUOPS-X uops 时运行时的各种挂起、引用泄漏、测试失败和跟踪/内省错误。

  • gh-106092: 修复了在垃圾回收延迟释放 PyFrameObject 时,由于 use-after-free 错误导致的段错误。

  • gh-106485: 通过尽可能地对实例字典进行去物质化,减少物质化实例字典的数量。

  • gh-106719: 不再在类型和模块类型的 __annotations__ getter 和 setter 中抑制任意错误。

  • gh-106723: 将 frozen_modules 传播到多进程生成的进程解释器中。

  • gh-104909: 将 LOAD_ATTR_INSTANCE_VALUE 拆分为微操作。

  • gh-104909: 将 LOAD_GLOBAL 特化拆分为微操作。

  • gh-106597: 在 _PyRuntimeState 中添加了一个新的调试结构偏移量,这将帮助进程外调试器和分析器以一种与 Python 编译方式无关且不需要复制头文件的方式获取到相关解释器结构的偏移量。由 Pablo Galindo 提供补丁。

  • gh-106487: 允许 str.replace()count 参数作为关键字。由 Hugo van Kemenade 提供补丁。

  • gh-96844: 改进 list.remove() 的错误信息。由 Donghee Na 提供补丁。

  • gh-81283: 编译器现在从文档字符串中去除缩进。当模块有大量文档时,这会减少 pyc 文件大小 5%。这一变化影响到 __doc__,因此像 doctest 这样的工具会受到影响。

  • gh-106396: 当 f-string 表达式的格式规范为空时,解析器现在会为其生成一个空的 ast.JoinedStr 节点,而不是一个包含空字符串 ast.Constant 的单元素 ast.JoinedStr

  • gh-100288: 为类上的非描述符特化 LOAD_ATTR。添加了 LOAD_ATTR_NONDESCRIPTOR_WITH_VALUESLOAD_ATTR_NONDESCRIPTOR_NO_DICT

  • gh-106008: 修复了在字节码编译器中优化与 None 的比较失败时可能出现的引用泄漏问题。

  • gh-106145: 使 end_linenoend_col_offsettype_param ast 节点上成为必需项。

  • gh-106213: 更改了Emscripten调用蹦床的工作方式,以提高与Wasm/JS Promise集成的兼容性。

  • gh-106182: sys.getfilesystemencoding()sys.getfilesystemencodeerrors 现在返回interned Unicode对象。

  • gh-106210: 移除了Emscripten导入蹦床,因为它对Pyodide不再必要。

  • gh-104584: 新增了一个实验性的追踪优化器和解释器(又称“第2层”)。目前这会降低性能,因此暂时不要使用——这是为了让我们可以实验优化传递的基础设施。要启用它,传递 -Xuops 或设置 PYTHONUOPS=1。要获取调试输出,设置 PYTHONUOPSDEBUG=N,其中 N 是调试级别(0-4,0表示无调试输出,4表示极其详细)。

  • gh-105775: LOAD_CLOSURE 现在是一个伪操作。

  • gh-105730: 允许任何可调用对象(除类型对象外)作为 BaseExceptionGroup.split()BaseExceptionGroup.subgroup() 中的条件谓词。

  • gh-105979: 修复了 _imp.get_frozen_object() 中由于异常处理不当导致的崩溃。

  • gh-106003: 新增了一个 TO_BOOL 指令,它为 POP_JUMP_IF_TRUEPOP_JUMP_IF_FALSEUNARY_NOT (这些现在都期望精确的 bool 值) 执行布尔转换。同时,修改 COMPARE_OP 的oparg以包含一个可选的“布尔转换”标志。

  • gh-98931: 确保在具有多个目标的无效导入中引发自定义的 SyntaxError 错误消息。由Pablo Galindo提供补丁。

  • gh-105724: 通过提供精确的错误范围改进了 assert 错误消息。

  • gh-105908: 修复了 gh-99111 在Python REPL中破坏未来导入 barry_as_FLUFL 的bug。

  • gh-105840: 修复了在专门化函数调用时 __defaults__ 过多可能导致崩溃的问题。

  • gh-105831: 修复了一个f-string的bug,其中使用调试表达式(= 符号)出现在文件的最后一行时,导致保存表达式文本的调试缓冲区太小一个字符。

  • gh-105800: 在f-字符串中使用无效序列时正确发出 SyntaxWarning。由Pablo Galindo提供补丁。

  • gh-105340: 在模块或类作用域的推导式中,将推导式的迭代变量包含在 locals() 中。

  • gh-105331: 如果 asyncio.sleep()delay 参数是NaN,则引发 ValueError (与 time.sleep() 一致) 。

  • gh-105587: 运行时无法保证扩展不会修改不朽对象。因此,这修改了_PyStaticObject_CheckRefcnt以警告而不是断言。

  • gh-105564: 不在 tokenize 模块的API中的标记的 line 属性中包含人为的换行符。由Pablo Galindo提供补丁。

  • gh-105549: 分别对不模糊的 NUMBERNAME 标记进行标记化。由Pablo Galindo提供补丁。

  • gh-105588: 修复了一个在编译格式错误的 ast 节点时可能导致崩溃的问题。

  • gh-100987: 允许除代码对象外的其他对象作为内部帧中的“可执行文件”。长期来看,这可以帮助像Cython和PySpy这样的工具更有效地交互。在短期内,它允许我们更简单地进行一些优化。

  • gh-105375: 修复了 builtins 模块中的错误,其中异常可能被覆盖。

  • gh-105375: 修复了编译器中的一个错误,其中异常可能被覆盖。

  • gh-105375: 改进了 PyUnicode_BuildEncodingMap() 中的错误处理,其中异常可能被覆盖。

  • gh-105486: 更改了 types.GenericAliasParamSpec 参数列表的repr。

  • gh-105678: 将 MAKE_FUNCTION 指令分成两部分,MAKE_FUNCTION 用于创建函数,SET_FUNCTION_ATTRIBUTE``用于设置函数的属性。这使得 ``MAKE_FUNCTION 的堆栈效果规范化,以简化优化和代码生成。

  • gh-105435: 修复了如果文件以没有换行的注释结尾时的虚假换行字符。补丁由Pablo Galindo提供。

  • gh-105390: 对于如不完整输入之类的标记化错误,正确引发 tokenize.TokenError 异常而非 SyntaxError。由 Pablo Galindo 提供补丁。

  • gh-105259: 在 tokenize 模块中,不包含为尾随 NEWLINE 标记发出的换行符。补丁由 Pablo Galindo 提供。

  • gh-104635: 在编译器中消除冗余的 STORE_FAST 指令。由 Donghee Na 和 Carl Meyer 提供补丁。

  • gh-105324: 修复 tokenize 模块的主函数在从 sys.stdin 读取时的行为。由 Pablo Galindo 提供补丁。

  • gh-33092: 简化并加速 f-strings 的解释器。移除 FORMAT_VALUE 操作码。添加 CONVERT_VALUEFORMAT_SIMPLEFORMAT_WITH_SPEC 操作码。编译器为每个格式表达式生成更高效的序列。

  • gh-105229: 移除剩余的双代码单元超级指令。所有剩余的超级指令仅占用单个代码单元,简化了检测和加速过程。

  • gh-105235: 防止在 mmap.find() 调用期间发生越界内存访问。

  • gh-98963: 通过忽略在此类类上设置文档字符串的失败,恢复 property 子类定义 __slots__ 或以其他方式无字典的能力。此行为在 3.12beta1 中出现了倒退。在之前没有的情况下出现的 AttributeError 对现有代码造成了干扰。

  • gh-104812: "挂起调用"机制现在适用于所有解释器,而不仅仅是主解释器,并且在所有线程中运行,而不仅限于主线程。某些调用仍然仅在主线程中进行,因此仅在主解释器中。此更改不影响信号处理,也不影响现有的公共C-API(Py_AddPendingCall()),这两者仍然仅针对主线程。新功能目前严格限于内部使用,因为除了某些非常受限的情况外,其使用的后果尚不明确。这一变化使得该功能与几年前状态变为每个解释器时的意图一致。

  • gh-105194: 不要对f-string格式说明符使用反斜杠转义。由Pablo Galindo提供补丁。

  • gh-105229: 用单指令等效替换一些动态超级指令。

  • gh-105162: 修复了generator.close()/throw()中的一个错误,当外部迭代器被检测时,内部迭代器会被忽略。

  • gh-105164: 确保如果一个块中唯一的注解位于 match 块内,则正确设置注解。由Jelle Zijlstra提供补丁。

  • gh-105148: 使 _PyASTOptimizeState 内部于ast_opt.c。使 _PyAST_Optimize 接受两个整数而不是指向此结构的指针。这避免了在ast_opt.c中包含pycore_compile.h的需要。

  • gh-104799: ast 节点的属性如果是列表,现在如果省略则默认为空列表。这意味着一些以前在使用AST节点时会引发 TypeError 的代码现在将使用空列表继续执行。由Jelle Zijlstra提供补丁。

  • gh-105111: 移除旧的垃圾回收宏 Py_TRASHCAN_SAFE_BEGINPy_TRASHCAN_SAFE_END。它们应该被新的宏 Py_TRASHCAN_BEGINPy_TRASHCAN_END 替换。

  • gh-105035: 修复了在具有自定义 tp_getattro 实现(例如元类型)的类型上的 super() 调用。

  • gh-105017: 在NL和NEWLINE标记中显示tokenize字符串属性中的CRLF行。由Marta Gómez提交的补丁。

  • gh-105013: 修复 inspect.getsource() 中多行括号lambda的处理。由Pablo Galindo提交的补丁。

  • gh-105017: 解析具有CRLF行的文件时,不包含额外的最终 NL 标记。由Marta Gómez提交的补丁。

  • gh-104976: 确保 tokenize 模块发出的尾随 DEDENT tokenize.TokenInfo 对象如Python 3.11中报告的那样。由Pablo Galindo提交的补丁。

  • gh-104972: 确保 tokenize 模块中 tokenize.TokenInfo 对象的 line 属性始终正确。由Pablo Galindo提交的补丁。

  • gh-104955: 修复新的 __release_buffer__() 槽的签名。由Jelle Zijlstra提交的补丁。

  • gh-104690: 在解释器关闭期间(例如从 atexit 处理程序中)启动新线程和通过 os.fork() 创建进程不再受支持。这可能导致主Python运行时线程释放线程状态与内部 threading 例程尝试分配和使用刚创建线程的状态之间的竞争条件。或者fork的子进程尝试在子进程中使用关闭中的运行时和线程状态。

  • gh-104879: 修复访问在模块外定义的类型别名的 __module__ 属性时的崩溃。由Jelle Zijlstra提交的补丁。

  • gh-104825: tokenize 模块发出的标记不再在 line 属性中包含隐式的 \n 字符。由Pablo Galindo提交的补丁。

  • gh-104770: 如果生成器在关闭时返回一个值,该值现在由 generator.close() 返回。

  • gh-89091: 对于未等待的异步生成器方法如 asend()athrow()aclose(),引发 RuntimeWarning。由Kumar Aditya提交的补丁。

  • gh-96663: 当在没有 __dict__ 且没有该属性的槽成员的类上设置属性时,添加一个更好、更可内省的错误消息。

  • gh-93627: 更新Python pickle模块实现以匹配C实现的pickle模块。对于将缩减方法如 __reduce_ex__()__reduce__() 设置为 None 的对象,pickle操作将导致 TypeError

  • gh-101006: 改进读取 marshal 数据时的错误处理。

  • gh-91095: 专门化对大多数Python类的调用。具体来说,任何继承自 object 或其他Python类且未覆盖 __new__ 的类。

    专门化指令执行以下操作:

    1. 创建对象(通过调用 object.__new__

    2. 将一个垫片帧推送到帧堆栈(以在 __init__ 之后清理)

    3. __init__ 的帧推送到帧堆栈

    加速大多数Python类的实例化。

  • gh-110786: sysconfig 的命令行界面现在忽略 BrokenPipeError,如果其输出被管道传输且管道关闭,则正常退出。

  • gh-103480: sysconfig 模块现在是一个包,而不是单文件模块。

  • gh-110733: 微优化:避免在 BaseEventLoop._run_once() 中调用 min(), max()

  • gh-94597: 添加了 asyncio.EventLoop 用于 asyncio.run()loop_factory 关键字参数,以避免调用asyncio策略系统。

  • gh-110682: 运行时可检查协议 过去如果在协议上存在``__match_args__``,则在 __instancecheck__ 中将其视为协议成员。现在,如果存在此属性,则忽略它。

  • gh-110488: 修复 pathlib.PurePath.with_name() 中的几个问题:单个点被错误地认为是有效名称,而在 PureWindowsPath 中,具有NTFS替代数据流的名称,如 a:b,被错误地认为是无效的。

  • gh-110590: 修复 _sre.compile() 中的一个bug,当 code 参数是非整数列表时,TypeError 会被 OverflowError 覆盖。

  • gh-65052: 防止 pdb 在尝试显示不可显示对象时崩溃。

  • gh-110519: 关于 gettext 中非整数数字的弃用警告现在总是引用用户代码中使用 gettext 函数或方法的行。之前它可能引用 gettext 代码中的一行。

  • gh-89902: 弃用 decimal.Decimal 的非标准格式说明符 "N"。它未被记录且仅在 C 实现中支持。

  • gh-110378: contextmanager()asynccontextmanager() 上下文管理器现在会关闭一个产生多个值的无效底层生成器对象。

  • gh-106670: 在 pdb 中,为事后调试设置便利变量 $_exception

  • gh-110365: 修复 termios.tcsetattr() 在从 term 列表解析整数时覆盖现有错误的 bug。

  • gh-109653: 通过在这些模块中延迟导入 warnings,略微提高几个标准库模块的导入时间。由 Alex Waygood 提供补丁。

  • gh-110273: 如果为声明为 init=False 的字段指定关键字参数或为必需的 InitVar 字段缺少关键字参数,dataclasses.replace() 现在会引发 TypeError 而不是 ValueError。

  • gh-110249: 向 dis 命令行添加 --inline-caches 标志。

  • gh-109653: 修复 random 在 Python 3.12 导入时间的回归。由 Alex Waygood 提供补丁。

  • gh-110222: 在 copy.replace() 中添加对结构序列对象的支持。由 Xuehai Pan 提供补丁。

  • gh-109649: multiprocessingconcurrent.futurescompileall: 用 os.process_cpu_count() 替换 os.cpu_count() 来选择默认的工作线程和进程数。如果支持,获取 CPU 亲和力。由 Victor Stinner 提供补丁。

  • gh-110150: 修复 statistics.quantiles 中的基本情况处理。现在允许单个数据点。

  • gh-110036: 在 Windows 上,multiprocessing Popen.terminate() 现在捕获 PermissionError 并获取进程退出代码。如果进程仍在运行,则再次抛出 PermissionError。否则,进程按预期终止:存储其退出代码。由 Victor Stinner 提交的补丁。

  • gh-110038: 修复了一个问题,该问题导致 KqueueSelector.select() 在某些情况下当文件描述符被同时注册为读和写时,不返回所有就绪的事件。

  • gh-110045: 更新 symtable 模块以支持由 PEP 695 引入的新作用域。

  • gh-88402: 在 Windows 上为 sysconfig.get_config_vars() 添加新变量:LIBRARY, LDLIBRARY, LIBDIR, SOABI, 和 Py_NOGIL

  • gh-109631: 现在可以中断执行短重复匹配的 re 函数,如 re.findall(), re.split(), re.search()re.sub()

  • gh-109653: 将 email.utils 的导入时间减少约 43%。这使得 email.message 的导入时间下降约 18%,进而使 importlib.metadata 的导入时间减少约 6%。由 Alex Waygood 提交的补丁。

  • gh-109818: 修复 reprlib.recursive_repr() 不复制装饰函数的 __type_params__ 的问题。

  • gh-109047: concurrent.futures: executor manager thread 现在在向 call queue 添加项时捕获异常。在 Python 终止期间,创建新线程现在可能抛出 RuntimeError。在这种情况下捕获异常并调用 terminate_broken()。由 Victor Stinner 提交的补丁。

  • gh-109782: 确保 os.path.isdir() 的签名在所有平台上相同。由 Amin Alaee 提交的补丁。

  • gh-109653: 将 functools 的导入时间提高约 13%。由 Alex Waygood 提交的补丁。

  • gh-109590: 在win32上,如果给定的模式包含 os.X_OKshutil.which() 将优先选择``PATHEXT``中有扩展名的文件。如果没有找到 PATHEXT 匹配项,可以返回一个没有 PATHEXT 扩展名的文件。这一变化将使 shutil.which() 的行为更类似于Python 3.11中的先前行为。

  • gh-109653: 通过Alex Waygood的补丁,将 enum 的导入时间减少了50%以上。

  • gh-109593: 避免在多进程资源跟踪器的重入调用上死锁。虽然不太可能,但如果GC传递调用了如SemLock这样的多进程对象的终结器,就可能发生这种重入调用。

  • gh-109653: 通过Alex Waygood的补丁,将 typing 的导入时间减少了大约三分之一。

  • gh-109649: 添加 os.process_cpu_count() 函数,以获取当前进程调用线程可用的逻辑CPU数量。由Victor Stinner提供补丁。

  • gh-74481: 在Python调试构建中,msvcrt``模块中添加了与 ``set_error_mode 相关的常量。

  • gh-109613: 修复 os.stat()os.DirEntry.stat():检查异常。以前,在Python调试模式下构建时,当函数成功但设置了异常时,这些函数可能会触发致命的Python错误(并中止进程)。由Victor Stinner提供补丁。

  • gh-109599: 将PyCapsule对象的类型公开为 types.CapsuleType

  • gh-109109: 您现在可以通过 ssl.SSLSocket.get_verified_chain()ssl.SSLSocket.get_unverified_chain() 方法从 TLS 连接获取原始 TLS 证书链。

    由 Mateusz Nowak 贡献。

  • gh-109559: 将 unicodedata 数据库更新到Unicode 15.1.0。

  • gh-109543: 在 typing.TypedDict 创建期间移除不必要的 hasattr() 检查。

  • gh-109495: 在 datetime 的纯Python实现中移除不必要的额外 __slots__ 以减少内存大小,因为它们已在超类中定义。由James Hilton-Balfe提供补丁。

  • gh-109461: logging:使用上下文管理器进行锁获取。

  • gh-109096: http.server.CGIHTTPRequestHandler has been deprecated for removal in 3.15. Its design is old and the web world has long since moved beyond CGI.

  • gh-109409: 修复了当一个冻结的数据类可能从多个父类继承时,其中一些父类可能未被冻结的错误。

  • gh-109375: pdbalias 命令现在阻止注册没有参数的别名。

  • gh-109319: 弃用 dis.HAVE_ARGUMENT 字段,推荐使用 dis.hasarg

  • gh-107219: 修复了 concurrent.futures 中的竞争条件。当进程池中的进程被突然终止时(而 future 正在运行或挂起),关闭连接的写入端。如果调用队列在发送字节到工作进程时被阻塞,关闭连接的写入端会中断发送,因此队列可以被关闭。由 Victor Stinner 提供补丁。

  • gh-66143: codecs.CodecInfo 对象现在可以被复制和 pickle。由 Robert Lehmann 和 Furkan Onder 提供补丁。

  • gh-109187: pathlib.Path.resolve() 现在将符号链接循环视为其他错误:在严格模式下,会引发 OSError,在非严格模式下,不会引发异常。

  • gh-50644: 现在尝试 pickle 或创建 codecs 流的浅拷贝或深拷贝会引发 TypeError。之前,复制会因 RecursionError 失败,而 pickle 会产生错误的结果,最终导致解 pickle 时因 RecursionError 失败。

  • gh-109174: 在 copy.replace() 中添加了对 types.SimpleNamespace 的支持。

  • gh-109164: pdb: 用 argparse 替换 getopt 来解析命令行参数。

  • gh-109151: 在 sqlite3 命令行界面 (python -m sqlite3) 中启用 readline 编辑功能。

  • gh-108987: 修复 _thread.start_new_thread() 的竞争条件。如果在 Python 终止过程中创建了一个线程,新生成的线程现在会立即退出,而不是尝试访问已释放的内存并导致崩溃。由 Victor Stinner 提供补丁。

  • gh-108682: Enum: 使用函数式语法创建空枚举时,要求 names=()type=...

  • gh-109033: os.utime 内置函数引发的异常现在包含相关文件名

  • gh-108843: 修复 ast.unparse() 在反解析包含多种引号类型的 f-字符串时的问题。

  • gh-108469: ast.unparse() 现在支持 Python 3.12 引入的新 f-string 语法。请注意,为了简化新语法,f-string 引号被重新选择。(由 Steven Sun 提交的补丁)

  • gh-108751: 添加 copy.replace() 函数,允许创建对象的修改副本。它支持命名元组、数据类和许多其他对象。

  • gh-108682: 枚举:如果从自定义 __new__ 调用 super().__new__(),则引发 TypeError

  • gh-108278: 弃用以下 sqlite3.Connection API 通过关键字传递回调可调用对象:

    受影响的形参将在 Python 3.15 中成为仅限位置形参。

    由 Erlend E. Aasland 提交的补丁。

  • gh-105829: 修复 concurrent.futures.ProcessPoolExecutor 死锁

  • gh-108295: 修复与在 typing.TypeVar 上使用弱引用相关的崩溃。

  • gh-108463: 使表达式/语句在 pdb 中按预期工作

  • gh-108277: 添加 os.timerfd_create()os.timerfd_settime()os.timerfd_gettime()os.timerfd_settime_ns()os.timerfd_gettime_ns(),为 Linux 的定时器通知文件描述符提供低级接口。

  • gh-107811: tarfile: 提取具有过大 UID 或 GID 的成员(例如,在具有 32 位 id_t 的操作系统上)现在以与设置 ID 失败相同的方式失败。

  • gh-64662: 修复 sqlite3.Connection.iterdump() 中对虚拟表的支持。由 Aviv Palivoda 提交的补丁。

  • gh-108111: 修复 gh-101251 为 3.12 引入的回归,导致 gzip.GzipFile.seek() 中偏移量计算不正确。

  • gh-108294: time.sleep() 现在引发一个审计事件。

  • gh-108278: 弃用以下 sqlite3.Connection API 将名称、参数数量和可调用对象作为关键字参数传递:

    受影响的形参将在 Python 3.15 中成为仅限位置形参。

    由 Erlend E. Aasland 提交的补丁。

  • gh-108322: 通过使用逆CDF方法而非调用random.gauss()来加速NormalDist.samples()。

  • gh-83417: 为venv添加创建 .gitignore 文件的能力,该文件使得创建的环境被Git忽略。当通过CLI调用venv时,默认开启此功能。

  • gh-105736: 将纯Python版本的 OrderedDict 与C版本进行了协调。现在,两个版本都在 __new__ 中设置其内部状态。以前,纯Python版本是在 __init__ 中进行设置的。

  • gh-108083: 修复了 sqlite3.Connection 构造器和 sqlite3.Connection.close() 中的bug,这些bug可能导致异常泄露。修补由Erlend E. Aasland提供。

  • gh-107932: 修复 dis 模块,使其能正确报告和显示没有源代码行的字节码。

  • gh-105539: 现在,如果 sqlite3.Connection 对象没有被显式地 closedsqlite3 会发出一个 ResourceWarning。修补由Erlend E. Aasland提供。

  • gh-107995: functools.cached_property 实例的 __module__ 属性现在被设置为定义cached_property的模块的名称,而不是"functools"。这意味着 cached_property 文档字符串中的doctest现在可以被 doctest 模块正确收集。修补由Tyler Smart提供。

  • gh-107963: 修复 multiprocessing.set_forkserver_preload() 以检查给定的模块名称列表。修补由Donghee Na提供。

  • gh-106242: 修复 os.path.normpath() 以处理嵌入的空字符而不截断路径。

  • gh-81555: xml.dom.minidom 现在只在属性中引用 "

  • gh-50002: xml.dom.minidom 现在保留属性中的空白字符。

  • gh-93057: 向 sqlite3.connect()sqlite3.Connection 构造器传递多于一个位置参数的做法已被弃用。剩余参数将在Python 3.15中变为仅关键字参数。修补由Erlend E. Aasland提供。

  • gh-76913: 向 logging.LoggerAdapter 添加 merge_extra 参数/功能

  • gh-107913: 修复在创建异常对象之前如果清理代码清除或修改了 errnowinerror 值,OSError 异常中可能丢失这些值的问题。

  • gh-107845: tarfile.data_filter() 现在在确定符号链接的目标时会考虑其位置,因此不再会因 LinkOutsideDestinationError 拒绝一些有效的 tarball。

  • gh-107812: 将套接字的 netlink 支持扩展到 FreeBSD 平台。

  • gh-107805: 修复 turtle 中模块级生成函数的签名。

  • gh-107782: pydoc 现在能够显示无法在 Python 中表示的签名,例如 getattrdict.pop 的签名。

  • gh-56166: 弃用在模块级函数 re.split()re.sub()re.subn() 中以位置参数传递可选参数 maxsplitcountflags 的做法。这些参数应仅作为关键字参数传递。

  • gh-107710: 加速 logging.getHandlerNames()

  • gh-107715: 修复在类名包含特殊字符时 doctest.DocTestFinder.find() 的行为。由 Gertjan van Zwieten 提供补丁。

  • gh-100814: 现在,将可调用对象作为选项值传递给 Tkinter 图像时会引发预期的 TclError,而不是 AttributeError。

  • gh-72684: 向 tkinter 添加小部件方法:tk_busy_hold()tk_busy_configure()tk_busy_cget()tk_busy_forget()tk_busy_current()tk_busy_status()

  • gh-106684: 当 asyncio.StreamWriter 未关闭导致内存泄漏时,引发 ResourceWarning。由 Kumar Aditya 提供补丁。

  • gh-107465: 添加 pathlib.Path.from_uri() 类方法。

  • gh-107077: 在某些情况下,当证书验证失败时,OpenSSL会返回 SSL_ERROR_SYSCALL 而非``SSL_ERROR_SSL``,但错误参数仍将包含 ERR_LIB_SSL 和``SSL_R_CERTIFICATE_VERIFY_FAILED``。我们现在能够检测到这种情况并抛出适当的``ssl.SSLCertVerificationError``。由Pablo Galindo提供补丁。

  • gh-107576: 修复 types.get_original_bases(),使其仅在 cls 直接包含 __orig_bases__ 时返回该属性。由James Hilton-Balfe提供补丁。

  • gh-105481: 移除 opcode.is_pseudoopcode.MIN_PSEUDO_OPCODE 和``opcode.MAX_PSEUDO_OPCODE``,这些在3.12版本中添加的代码从未被文档化,也不打算供外部使用。

  • gh-105481: opcode.ENABLE_SPECIALIZATION (在3.12版本中添加但从未文档化或供外部使用) 被移动到 _opcode.ENABLE_SPECIALIZATION,测试可以访问它。

  • gh-107396: tarfiles; 修复了gzip解压中self.exception的赋值前使用问题。

  • gh-107409: 在 reprlib.recursive_repr() 中设置 __wrapped__ 属性。

  • gh-107406: 为 struct.Struct 实现新的 __repr__() 方法。现在它返回``Struct(<格式repr>)``。

  • gh-107369: 优化 textwrap.indent()。对于大输入,速度提升了约30%。由Inada Naoki提供补丁。

  • gh-78722: 修复 pathlib.Path.iterdir() 直到迭代时才抛出 OSError 的问题。

  • gh-105578: 弃用 typing.AnyStr,推荐使用新的类型参数语法。参见PEP 695。

  • gh-62519: 使 gettext.pgettext() 在找不到翻译时搜索复数定义。

  • gh-107089: 使用 shelve.open() 打开的shelves现在有一个更快的 clear() 方法。补丁由James Cave提供。

  • gh-82500: 修复32位系统上 asyncioos.sendfile() 实现的溢出问题。

  • gh-83006: 文档化 shutil.disk_usage() 在Unix上非挂载文件系统的行为。

  • gh-65495: 在 smptlib.SMTP 中使用小写的 mail fromrcpt to

  • gh-106186: 当使用 email.parser.Parser 类解析 headersonly=True 的邮件时,不报告 MultipartInvariantViolationDefect 缺陷。

  • gh-105002: 修复了当尝试在 other 中行走 ".." 段且 walk_up 启用时,PurePath.relative_to() 方法返回无效结果的问题。现在在这种情况下会引发 ValueError 异常。

  • gh-106739: 将 rtype_cache 添加到警告消息中(作为已包含在消息中的泄漏对象类型和泄漏对象数量的补充),以便在 multiprocessing 资源跟踪器进程在关闭时发现泄漏对象时使调试泄漏对象更容易。这有助于更快地识别泄漏的内容和/或为什么泄漏的对象没有被正确清理。

  • gh-106751: 优化 SelectSelector.select() 以处理多次迭代的情况。由 Donghee Na 提供补丁。

  • gh-106751: 优化 _PollLikeSelector.select() 以处理多次迭代的情况。

  • gh-106751: 优化 KqueueSelector.select() 以处理多次迭代的情况。由 Donghee Na 提供补丁。

  • gh-106831: 修复了 _ssl.cd2i_SSL_SESSION 结果可能缺少 NULL 检查的问题。

  • gh-105481: dis 模块中的各种操作码列表现在是从 bytecodes.c 生成的,而不是在 opcode.py 中明确构建的。

  • gh-106727: 使 inspect.getsource() 对于同名定义的类更智能。

  • gh-106789: 从 sysconfig 中移除对 pprint 的导入。

  • gh-105726: 向 contextlib.AbstractContextManagercontextlib.AbstractAsyncContextManager 添加了 __slots__,以便子类可以使用 __slots__

  • gh-106774: 更新捆绑的 pip 到版本 23.2.1。

  • gh-106751: selectors: 通过将一些代码移出循环来优化 EpollSelector.select() 代码。

  • gh-106752: 修复了zipfile.Path中的几个bug,包括:在 zipfile.Path.match() 中,不再支持Windows分隔符(且从未有意支持);当没有文件名且Path不在zipfile的根目录时,修复了``name``/suffix/suffixes/``stem``操作;为了提高性能和更正确的匹配行为,重新设计了glob。

  • gh-105293: 在 ssl 模块中客户端上下文创建期间,移除对``SSL_CTX_set_session_id_context``的调用。

  • gh-106734: 在 pdb 的多行模式下禁用制表符补全。

  • gh-105481: 通过 _opcode 公开操作码元数据。

  • gh-106670: 向Pdb调试器添加新的 exceptions 命令。它使得在使用事后调试时可以在链式异常之间移动。

  • gh-106602: 在 enum 中添加__copy__和__deepcopy__。

  • gh-106664: selectors: 添加 _SelectorMapping.get() 方法并优化``_SelectorMapping.__getitem__()``。

  • gh-106628: 通过不为每封电子邮件编译新的正则表达式,加快电子邮件解析速度约20%。

  • gh-89427: 在 venv 激活时设置环境变量 VIRTUAL_ENV_PROMPT,即使``VIRTUAL_ENV_DISABLE_PROMPT``已设置。

  • gh-106530: 撤销了对 colorsys.rgb_to_hls() 的更改,该更改导致对某些几乎白色的输入进行除零操作。由Terry Jan Reedy提供补丁。

  • gh-106584: 如果所有测试都被跳过,修复 unittest 的退出代码。由Egor Eliseev提供补丁。

  • gh-106566: 优化正则表达式中的 (?!) (总是失败的模式) 。

  • gh-106554: selectors: 通过使用 dict.get() 查找文件描述符来减少Selector的开销。

  • gh-106558: 通过在 finally 块中删除作用域中的 result,移除 convert_to_error() 调用者中的引用循环。

  • gh-100502: 添加 pathlib.PurePath.pathmod 类属性,该属性存储用于低级路径操作的 os.path 实现:posixpathntpath

  • gh-106527: 减少添加和移除 asyncio 读写器的开销。

  • gh-106524: 修复 _sre.template() 在模板包含无效组索引时的崩溃问题。

  • gh-106531: 从 importlib.resources 中移除了 _legacy 及其提供的名称:Resourcecontentsis_resourceopen_binaryopen_textpathread_binaryread_text

  • gh-106052: re 模块:在子模式包含回溯的情况下修复贪婪量词的匹配问题。

  • gh-106510: 改进正则表达式中原子组的调试输出。

  • gh-106503: 通过移除 close 中的 _write_ready 来修复 asyncio._SelectorSocketTransport 中的引用循环。

  • gh-105497: 修复存在未命名标志时的标志掩码反转问题。

  • gh-90876: 防止 multiprocessing.spawnsys.executableNone 的环境中 导入 失败。这个问题在3.11版本中随着对多处理中路径类对象的支持而出现倒退。

  • gh-106403: typing.TypeVartyping.ParamSpectyping.ParamSpecArgstyping.ParamSpecKwargstyping.TypeVarTuple 的实例再次支持弱引用,修复了Python 3.12.0 beta 1中引入的倒退。由Jelle Zijlstra提供的补丁。

  • gh-89812: 添加私有的 pathlib._PathBase 类,该类提供了对虚拟文件系统的实验性支持,并可能在未来的Python版本中公开。

  • gh-106292: 在 functools.cached_property()__get__() 方法中检查实例字典缓存值。这更好地匹配了3.12之前的行为,并提高了用户子类化 functools.cached_property() 并添加 __set__() 方法的兼容性。

  • gh-106350: 检测 _tkinter 模块使用的 libtommath 函数 mp_init() 中可能的内存分配失败。

  • gh-106330: 修复了在 pathlib.PurePath.match() 中空路径的错误匹配问题。这个 bug 是在 Python 3.12.0 beta 1 中引入的。

  • gh-106309: 弃用 typing.no_type_check_decorator()。没有任何主要类型检查器曾经添加对这个装饰器的支持。由 Alex Waygood 提供补丁。

  • gh-102541: 当输出流不为 None 时,使 pydoc.doc() 捕获错误的模块 ImportError

  • gh-106263: 修复了在调用 repr 时手动构造的 SignalDict 对象导致的崩溃。由 Charlie Zhao 提供补丁。

  • gh-106236: 在 threading 中用 raise RuntimeError 替换 assert 语句,这样即使使用 -OO 也无法加入 _DummyThread

  • gh-106238: 修复了日志包在获取锁时的罕见并发错误。

  • gh-106152: 为 cProfile 添加了 PY_THROW 事件钩子用于生成器。

  • gh-106075: 将 asyncio.taskgroups.__all__ 添加到 asyncio.__all__ 以便在星号导入中导出。

  • gh-104527: Zipapp 现在将跳过向自己追加存档的操作。

  • gh-106046: 改进了 os.fspath() 的错误消息,当调用对象的 __fspath__ 设置为 None 时。由 Alex Waygood 提供补丁。

  • gh-105987: 修复了由于 asyncio 急切任务工厂内部例程中引用计数不当导致的崩溃。

  • gh-105974: 修复了一个 bug,其中具有一个或多个不可调用成员的 typing.Protocol 类在调用 issubclass() 时会引发 TypeError,即使它定义了一个自定义的 __subclasshook__ 方法。Python 3.11 及更低版本中的行为——现在已恢复——是在这些情况下如果定义了自定义 __subclasshook__ 方法则不引发 TypeError。补丁由 Alex Waygood 提供。

  • gh-96145: 撤回了 json.AttrDict 的添加。

  • gh-89812: 添加了 pathlib.UnsupportedOperation,当路径操作不被支持时,会抛出此异常而不是 NotImplementedError

  • gh-105808: 修复了在 gh-101251 中引入的 3.12 版本中的回归问题,该问题导致 gzip.GzipFile.flush() 不刷新压缩器(也不传递 zip_mode 参数)。

  • gh-105481: stack_effect() 不再会为不使用的 opargopcode 提供 oparg 或为使用它的 opcode 不提供 oparg 时引发异常。在后一种情况下,返回 oparg=0 的堆栈效果。

  • gh-104799: 使 ast.unparse() 能够反解析没有来自 PEP 695 的新 type_params 字段创建的函数和类定义。由 Jelle Zijlstra 提供补丁。

  • gh-105793: 向 pathlib.Path.is_dir()is_file() 添加了仅关键字参数 follow_symlinks,默认为 True

  • gh-105570: 弃用使用功能语法创建具有 0 个字段的 typing.TypedDict 类的两种方法:TD = TypedDict("TD")TD = TypedDict("TD", None)。这两种方法都将在 Python 3.15 中被禁止。要创建具有 0 个字段的 TypedDict 类,请使用 class TD(TypedDict): passTD = TypedDict("TD", {})

  • gh-105745: 修复 webbrowser.Konqueror.open 方法。

  • gh-105733: ctypes: 弃用未记录的 ctypes.SetPointerType()ctypes.ARRAY() 函数。由 Victor Stinner 提供补丁。

  • gh-105687: 移除已弃用的 re.templatere.Tre.TEMPLATEsre_constans.SRE_FLAG_TEMPLATE

  • gh-105684: 现在对第三方任务实现支持 asyncio.Task.set_name() 是强制性的。未记录的 _set_task_name() 函数(自 3.8 起已弃用)已被移除。由 Kumar Aditya 提供补丁。

  • gh-105375: 修复 _Unpickler_SetInputStream() 中的一个 bug,该 bug 在失败时可能导致异常被覆盖。

  • gh-105626: 将 http.client.HTTPConnection.get_proxy_response_headers() 的默认返回值更改为 None 而不是 {}

  • gh-105375: 修复 sys 模块中由于延迟错误处理可能导致异常被覆盖的错误。

  • gh-105605: 在模块初始化期间加强 pyexpat 的错误处理,以防止异常可能被覆盖,以及对象被两次解引用。

  • gh-105375: 修复 decimal 模块中可能导致异常被覆盖的错误。

  • gh-105375: 修复 _datetime 模块中在模块初始化失败时异常可能被覆盖的错误。

  • gh-105375: 修复 _ssl 初始化过程中可能导致引用泄漏和异常被覆盖的错误。

  • gh-105375: 修复 array.array 类中可能导致异常被覆盖的错误。

  • gh-105375: 修复 _ctypes 模块中可能导致异常被覆盖的错误。

  • gh-105375: 修复 posix 模块中可能导致异常被覆盖的错误。

  • gh-105375: 修复 _elementtree 模块中可能导致异常被覆盖的错误。

  • gh-105375: 修复 zoneinfo 模块中可能导致异常被覆盖的错误。

  • gh-105375: 修复 errno 模块中可能导致异常被覆盖的错误。

  • gh-105566: 弃用使用关键字参数表示字段来创建 typing.NamedTuple 类(NT = NamedTuple("NT", x=int, y=str))。在 Python 3.15 中将不再允许此操作。请使用基于类的语法或功能性语法代替。

    使用功能性语法创建带有 0 个字段的 NamedTuple 类的两种方法也被弃用,并将在 Python 3.15 中不再允许:NT = NamedTuple("NT")NT = NamedTuple("NT", None)。要创建带有 0 个字段的 NamedTuple 类,请使用 class NT(NamedTuple): passNT = NamedTuple("NT", [])

  • gh-105545: 移除在 3.11 中弃用的 webbrowser.MacOSXOSAScript._name 属性。

  • gh-105497: 修复存在别名/掩码成员时的标志反转问题。

  • gh-105509: typing.Annotated 现在作为 typing._SpecialForm 的实例实现,而不是一个类。这对于使用 typing 模块公共 API 的用户应该没有影响。

  • gh-105375: 修复 pickle 中异常可能被覆盖的错误。

  • gh-70303: 如果给定的模式以 "**" 结尾,从 pathlib.Path.glob()rglob() 发出 FutureWarning。在未来的 Python 版本中,以此结尾的模式将同时匹配文件和目录。添加尾部斜杠以仅匹配目录。

  • gh-105375: 修复 sqlite3 中的一个错误,其中异常可能在 collation 回调中被覆盖。

  • gh-105382: 移除 urllib.request.urlopen() 函数中自 Python 3.6 起已弃用的 cafilecapathcadefault 参数。由 Victor Stinner 提供补丁。

  • gh-105376: logging: 移除未文档化和未经测试的 Logger.warn()LoggerAdapter.warn() 方法以及 logging.warn() 函数。自 Python 3.3 起已弃用,它们是 logging.Logger.warning() 方法、logging.LoggerAdapter.warning() 方法和 logging.warning() 函数的别名。由 Victor Stinner 提供补丁。

  • gh-105332: 将 pickling 方法从按名称恢复为按值。

  • gh-104554: 在 urllib.parse 中添加 RTSPS 方案支持。

  • gh-105292: 为 traceback.format_exception_only() 添加选项,以递归进入 BaseExceptionGroup 的嵌套异常。

  • gh-105280: 修复了如果在错误时间发生垃圾回收,isinstance([], collections.abc.Mapping) 可能评估为 True 的错误。该错误是由 Python 3.12 中 typing.Protocol 实现的更改引起的。

  • gh-80480: array: 添加代表 Py_UCS4'w' 类型码。

  • gh-105239: 修复了一个长期存在的错误,即在某些边缘情况下 issubclass(object, typing.Protocol) 会评估为 True。由 Alex Waygood 提供补丁。

  • gh-104310: 在 beta 1 版本中,我们为扩展模块作者添加了一个实用函数,用于在多个解释器或每个解释器GIL下测试其模块的支持情况。该函数的名称已从 allowing_all_extensions 更改为 _incompatible_extension_module_restrictions。"disable_check" 参数的默认值已从 True 更改为 False,以更好地匹配新函数名称。

  • gh-105080: 修复了 inspect.signature() 在派生类上的不一致签名问题

  • gh-105144: 修复了 typing 模块中最近的回归问题。这个回归问题意味着,当执行 class Foo(X, typing.Protocol),其中 X 是一个以 abc.ABCMeta 作为其元类的类时,会导致随后的 isinstance(1, X) 调用错误地引发 TypeError。由 Alex Waygood 提供补丁。

  • gh-62948: io.IOBase 的终结器现在使用 sys.unraisablehook 记录 close() 方法的错误。之前,错误默认是被静默忽略的,只在 Python 开发模式Python 的调试构建 中记录。由 Victor Stinner 提供补丁。

  • gh-105096: wave: 弃用 wave.Wave_readwave.Wave_write 类的 getmark()setmark()getmarkers() 方法。它们将在 Python 3.15 中移除。补丁由 Victor Stinner 提供。

  • gh-104992: 移除了未测试且未文档化的 unittest.TestProgram.usageExit() 方法,该方法在 Python 3.11 中已被弃用。由 Hugo van Kemenade 提供补丁。

  • gh-104996: 通过延迟在给出多个参数时路径的连接,提高了 pathlib.PurePath 初始化的性能。

  • gh-101588: 弃用了对 itertools 的未文档化的 copy/deepcopy/pickle 支持。

  • gh-103631: 修复了 pathlib.PurePosixPath(pathlib.PureWindowsPath(...)) 不转换路径分隔符的问题,以恢复与 3.11 兼容的行为。

  • gh-104947: 使 pathlib.PureWindowsPath 对象在 Windows 和 Posix 之间的比较保持一致,以匹配 3.11 的行为。

  • gh-104773: PEP 594: 移除 audioop 模块,该模块在 Python 3.11 中已被弃用。补丁由 Victor Stinner 提供。

  • gh-104773: PEP 594: 移除 aifc 模块,该模块在 Python 3.11 中已被弃用。由 Victor Stinner 提供补丁。

  • gh-104773: PEP 594: 移除 uu 模块,该模块在 Python 3.11 中已被弃用。由 Victor Stinner 提供补丁。

  • gh-104935: 修复由 PEP 695 实现引入的 typing.runtime_checkable()typing.Generic 之间交互的 bug。由 Jelle Zijlstra 提供补丁。

  • gh-104773: PEP 594: 移除 crypt 模块及其私有 _crypt 扩展,这些在 Python 3.11 中已被弃用。由 Victor Stinner 提供补丁。

  • gh-104773: PEP 594: 移除 nis 模块,该模块在 Python 3.11 中已被弃用。由 Victor Stinner 提供补丁。

  • gh-104898: 向 os.PathLike 添加缺失的 __slots__

  • gh-104773: PEP 594: 移除 xdrlib 模块,该模块在 Python 3.11 中已被弃用。补丁由 Victor Stinner 提供。

  • gh-104773: PEP 594: 移除 nntplib 模块,该模块在 Python 3.11 中已被弃用。补丁由 Victor Stinner 提供。

  • gh-104886: 移除未文档化的 configparser.LegacyInterpolation 类,该类自 Python 3.2 起在文档字符串中被弃用,自 Python 3.11 起发出弃用警告。由 Hugo van Kemenade 提供补丁。

  • gh-104786: 移除基于 kwargs 的 typing.TypedDict 创建

  • gh-104876: 移除 turtle.RawTurtle.settiltangle() 方法,该方法自 Python 3.1 起在文档中被弃用,自 Python 3.11 起发出弃用警告。由 Hugo van Kemenade 提供补丁。

  • gh-104773: PEP 594: 移除 msilib 包,该包在 Python 3.11 中已被弃用。

  • gh-104773: PEP 594: 移除 spwd 模块,该模块在 Python 3.11 中已被弃用:可以使用 python-pam 项目作为替代。由 Victor Stinner 提供补丁。

  • gh-75552: 移除了自 Python 3.6 起已弃用的 tkinter.tix 模块。

  • gh-104773: PEP 594: 移除了 Python 3.11 中已弃用的 chunk 模块。由 Victor Stinner 提供补丁。

  • gh-104773: PEP 594: 移除了 Python 3.11 中已弃用的 mailcap 模块。由 Victor Stinner 提供补丁。

  • gh-104773: PEP 594: 移除了 Python 3.11 中已弃用的 sunau 模块。由 Victor Stinner 提供补丁。

  • gh-104780: PEP 594: 移除了 Python 3.11 中已弃用的 ossaudiodev 模块。由 Victor Stinner 提供补丁。

  • gh-104773: PEP 594: 移除了 Python 3.11 中已弃用的 pipes 模块。由 Victor Stinner 提供补丁。

  • gh-104873: 添加了 typing.get_protocol_members() 以返回定义 typing.Protocol 的成员集合。添加了 typing.is_protocol() 以检查一个类是否为 typing.Protocol。由 Jelle Zijlstra 提供补丁。

  • gh-104874: 记录了 typing.NewType__name____supertype__ 属性。补丁由 Jelle Zijlstra 提供。

  • gh-104835: 移除了 Python 3.11 中已弃用的以下 unittest 函数:

    • unittest.findTestCases()

    • unittest.makeSuite()

    • unittest.getTestCaseNames()

    请改用 TestLoader 方法:

    由 Hugo van Kemenade 提供补丁。

  • gh-104804: 移除了未经测试且未记录的 webbrowser MacOSX 类,该类在 Python 3.11 中已弃用。由 Hugo van Kemenade 提供补丁。

  • gh-83863: 移除了将 pathlib.Path 对象用作上下文管理器的支持。在 Python 3.9 之前,退出上下文管理器会将路径标记为“关闭”,这导致某些(但不是全部!)方法在被调用时引发异常。自 Python 3.9 起,将路径用作上下文管理器不执行任何操作。

  • gh-104799: 调整了 ast.ClassDefast.AsyncFunctionDefast.FunctionDef 上(参见 PEP 695)的 type_params 字段的位置,以更好地保持向后兼容性。由 Jelle Zijlstra 提供补丁。

  • gh-104797: 允许 typing.Protocol 类继承自 collections.abc.Buffer。补丁由 Jelle Zijlstra 提供。

  • gh-104783: 移除在Python 3.11中已被弃用的 locale.resetlocale() 函数。由Victor Stinner提供补丁。

  • gh-104780: 移除在Python 3.11中已被弃用的 2to3 程序和 lib2to3 模块。由Victor Stinner提供补丁。

  • gh-104773: PEP 594: 移除在Python 3.11中已被弃用的 telnetlib 模块。由Victor Stinner提供补丁。

  • gh-104773: PEP 594: 移除在Python 3.11中已被弃用的 imghdr 模块。由Victor Stinner提供补丁。

  • gh-104773: PEP 594: 移除在Python 3.11中已被弃用的 cgicgitb 模块。由Victor Stinner提供补丁。

  • gh-104773: PEP 594: 移除在Python 3.11中已被弃用的 sndhdr 模块。由Victor Stinner提供补丁。

  • gh-104372: 在Linux上,subprocess 可以使用 vfork() 系统调用来更快地生成子进程,通过在其等待vfork的子进程 exec() 结果时释放GIL,防止父进程阻塞其他线程。这可以防止从慢速文件系统生成二进制文件时阻塞应用程序的其余部分。

  • gh-99108: 我们现在对于SHA家族和MD5哈希函数的合理大小的内置 hashlib 计算释放GIL,这匹配了我们OpenSSL支持的哈希计算已经做的。

  • gh-102613: 通过用正则表达式过滤遍历的路径,而不是在每个目录上多次调用 os.scandir(),提高了当扩展带有非终端"**"组件的模式时 pathlib.Path.glob() 的性能。

  • gh-104399: 准备 _tkinter 模块以通过必要时替换弃用的函数 mp_to_unsigned_bin_n()mp_unsigned_bin_size() 来构建与Tcl 9.0和未来的libtommath。

  • gh-102676: 向 dis.Instruction 添加字段 start_offsetcache_offsetend_offsetbaseopnamebaseopcodejump_target``和 ``oparg

  • gh-103558: 修复了 argparseparent 参数验证机制。提高了测试覆盖率。

  • gh-103464: 在解析错误的 pdb 命令时提供有用的使用信息。

  • gh-103384: 将正则表达式模式 BaseConfigurator.INDEX_PATTERN 泛化,以允许键中包含空格和非字母数字字符。

  • gh-103124: 为 pdb 添加了多行语句支持。

  • gh-101162: 禁止将 builtins.issubclass()types.GenericAlias 作为第一个参数一起使用。

  • gh-103200: 修复了 zipimport.invalidate_caches() 的缓存重新填充语义。现在,缓存是在检索具有无效缓存的文件时重新填充的,而不是在缓存无效时。

  • gh-100061: 修复了一个导致带有占有限定符的正则表达式错误匹配的错误。

  • gh-77609: 向 pathlib.Path.glob()rglob() 添加了 follow_symlinks 参数,默认为 false。

  • gh-102541: 在导入失败时,在 help() 提示中隐藏回溯。

  • gh-102120: 向 tarfile 添加了一种流模式,允许在不缓存内部文件信息的情况下读取存档。

  • gh-102029: 弃用向 threading.RLock() 传递任何参数。

  • gh-88233: 重构了 zipfile._strip_extra,使用更高级的抽象来处理额外内容,而不是使用重状态循环。

  • gh-102024: 减少在 concurrent.futures.thread._worker() 中调用 _idle_semaphore.release() 的次数。

  • gh-73435: 在 pathlib.PurePath.match() 中添加了对递归通配符的支持。

  • gh-84867: unittest.TestLoader 不再从确切的 unittest.TestCaseunittest.FunctionTestCase 类加载测试用例。

  • gh-99203: 恢复 CPython <= 3.10.5 的 shutil.make_archive() 行为:如果 root_dir 不是目录,则不创建空存档,并且在这种情况下,无论 format 选择如何,都会引发 FileNotFoundErrorNotADirectoryError。除了恢复的行为外,该函数现在也可能在 dry_run 模式下引发这些异常。

  • gh-80480: 为 array'u' 类型代码发出 DeprecationWarning,自 Python 3.3 起在文档中已弃用。

  • gh-94924: unittest.mock.create_autospec() 现在正确返回与 inspect.iscoroutinefunction() 兼容的协程函数。

  • gh-94777: 修复 multiprocessing ProcessPoolExecutor 在子进程崩溃且数据正被写入调用队列时的挂起问题。

  • gh-92871: 移除自 Python 3.8 起已弃用的 typing.iotyping.re 命名空间。所有项目仍可从主 typing 模块中获得。

  • bpo-43633: 改进 ipaddress 中 IPv4 映射的 IPv6 地址 (RFC 4291 第 2.2, 2.5.5.2 节) 的文本表示。由 Oleksandr Pavliuk 提交补丁。

  • bpo-44850: 使用 PEP 590 vectorcall 约定改进 operator.methodcaller() 的性能。由 Anthony Lee 和 Pieter Eendebak 提交补丁。

  • bpo-44185: unittest.mock.mock_open() 将在退出上下文管理器时调用文件句柄模拟的 close() 方法。由 Samet Yaslan 提交补丁。

  • bpo-40988: 通过缓存生成的调度包装器改进 functools.singledispatchmethod 的性能。优化由 frederico 建议。由 @mental32、Alex Waygood 和 Pieter Eendebak 提交补丁。

  • bpo-41768: unittest.mock 的 speccing 不再调用类属性。由 Melanie Witt 提交补丁。

  • bpo-18319: 确保 gettext(msg) 即使存在复数形式也能检索翻译。换句话说:gettext(msg) == ngettext(msg, '', 1)

  • bpo-17013: 向 unittest.mock 添加 ThreadingMock,可用于创建可以等待直到被调用的 Mock 对象。由 Karthikeyan Singaravelan 和 Mario Corchero 提交补丁。

文档

测试

  • gh-110647: 修复 test_signal 的 test_stress_modifying_handlers()。由Victor Stinner提供补丁。

  • gh-103053: 在FreeBSD上修复 test_tools.test_freeze:在复制的源代码目录中运行"make distclean"而不是"make clean"以同时删除"python"程序。由Victor Stinner提供补丁。

  • gh-110167: 修复 test_socket 中的死锁问题,当服务器因超时失败但客户端仍在自己的线程中运行时。不要在 doCleanups() 中持有锁调用清理函数。其中一个清理函数会等待客户端完成,而如果客户端在这种情况下调用 addCleanup(),可能会导致死锁。由 Victor Stinner 提供补丁。

  • gh-110388: 为 tty 添加测试。

  • gh-81002: 为 termios 添加测试。

  • gh-110367: regrtest: 当使用工作进程 (-jN) 和 --verbose3 选项时,regrtest 现在可以显示工作进程的输出,即使工作进程崩溃。之前,sys.stdout 和 sys.stderr 被替换,因此在崩溃时工作进程的输出会丢失。由 Victor Stinner 提供补丁。

  • gh-110267: 添加对 PyStructSequence 对象的 pickle 和 copy 操作的测试。由 Xuehai Pan 提供补丁。

  • gh-110171: libregrtest 现在总是设置并显示 random.seed,使测试更具可重复性。使用 --randseed 标志为测试传递明确的随机种子。

  • gh-110152: 移除 Tools/scripts/run_tests.pymake hostrunnertest。只需运行 ./python -m test --slow-cimake buildbottestmake test 替代。Python 测试运行器 (regrtest) 现在处理交叉编译和 HOSTRUNNER。当使用 --fast-ci--slow-ci 选项时,它还向 Python 添加了如 -u -E -W default -bb 这样的快速选项。由 Victor Stinner 提供补丁。

  • gh-110031: 如果 Python 是用地址消毒剂 (ASAN) 构建的,跳过使用 thread+fork 的 test_threading 测试。由 Victor Stinner 提供补丁。

  • gh-110088: 修复 test_asyncio 超时:不测量最大持续时间,测试不应测量 CI 性能。仅在有任务有超时或延迟时测量最小持续时间。向 test_asyncio.utils 添加 CLOCK_RES。由 Victor Stinner 提供补丁。

  • gh-109974: 修复 test_threading 锁测试中的竞态条件。等待条件满足,而不是使用带有硬编码秒数的 time.sleep()。由 Victor Stinner 提供补丁。

  • gh-110033: 修复 test_signaltest_interprocess_signal()。确保在信号处理程序中引发异常之前删除 subprocess.Popen 对象。否则,Popen.__del__() 可能会获取到被记录为 Exception ignored in: ... 的异常,导致测试失败。由 Victor Stinner 提供补丁。

  • gh-109594: 修复 test_concurrent_futures.test_wait 的 test_timeout()。移除可能根据是否超过超时而完成的 future。保留在 wait() 超时前未完成的第二个 future。补丁由 Victor Stinner 提供。

  • gh-109972: 将 test_gdb.py 文件拆分为由多个测试组成的 test_gdb 包,现在可以并行运行测试。由 Victor Stinner 提供补丁。

  • gh-109566: regrtest: 当使用 --fast-ci--slow-ci 选项时,regrtest 现在会替换当前进程为一个新进程,以添加 -u -W default -bb -E 选项到 Python。由 Victor Stinner 提供补丁。

  • gh-109748: 修复 test_venv 的 test_zippath_from_non_installed_posix():不复制 __pycache__/ 子目录,因为它们可能被并行运行的其他 Python 测试修改。由 Victor Stinner 提供补丁。

  • gh-109739: regrtest: 修复 Windows 上的引用泄漏检查。在引用泄漏检查模式(-R 选项)下禁用 Windows 上的加载跟踪器。由 Victor Stinner 提供补丁。

  • gh-109276: regrtest: 当测试因“环境更改”而失败且使用了 --rerun 选项时,现在会在新进程中以详细模式重新运行测试。由 Victor Stinner 提供补丁。

  • gh-103053: 如果 Python 是用 ./configure --enable-optimizations 构建的(意味着启用了 Profile Guided Optimization (PGO)),则跳过 test_tools.test_freeze 的 test_freeze_simple_script():这只会使测试变得太慢。冻结工具由许多其他 CI 使用其他(更快的)编译器标志进行测试。由 Victor Stinner 提供补丁。

  • gh-109580: 如果 Python 是用 ASAN、MSAN 或 UBSAN 消毒剂构建的,则跳过 test_perf_profiler。在这种构建上,Python 在这个测试中会随机崩溃。由 Victor Stinner 提供补丁。

  • gh-109566: regrtest: 添加 --fast-ci--slow-ci 选项。--fast-ci 使用 10 分钟的默认超时和 -u all,-cpu (跳过最慢的测试) 。--slow-ci 使用 20 分钟的默认超时和 -u all (运行所有测试) 。由 Victor Stinner 提供补丁。

  • gh-109425: libregrtest 现在用 "backslashreplace" 错误处理程序解码测试工作进程的 stdout,以记录损坏的 stdout,而不是因错误而失败并不记录 stdout。补丁由 Victor Stinner 提供。

  • gh-109396: 修复 FIPS 模式下的 test_socket.test_hmac_sha1()。使用更长的密钥:FIPS 模式要求至少 112 位。之前的密钥只有 32 位。由 Victor Stinner 提供补丁。

  • gh-104736: 修复在 Linux ppc64le 上用 LLVM clang 16 构建的 Python 上的 test_gdb(例如 Fedora 38)。在 gdb "bt" 命令输出中搜索模式以检测 gdb 是否未能检索到回溯。例如,如果找到 Backtrace stopped: frame did not save the PC 则跳过测试。补丁由 Victor Stinner 提供。

  • gh-109276: 当使用 -r/--randomize 命令行选项时,libregrtest 现在在运行每个测试文件之前调用 random.seed()。此外,它也在工作进程中调用。这应该有助于使测试更加确定性。以前,它仅在运行所有测试文件之前在主要进程中调用一次,并且不在工作进程中调用。由 Victor Stinner 提供补丁。

  • gh-109276: libregrtest 现在使用单独的文件描述符以 JSON 格式写入测试结果。以前,如果测试在 JSON 周围写入了调试消息,主要测试进程将无法解析 JSON。由 Victor Stinner 提供补丁。

  • gh-108996: 修复并启用 test_msvcrt

  • gh-109237: 修复当工作目录包含至少一个非ASCII字符时的 test_site.test_underpth_basic():将 ._pth 文件编码为UTF-8,并启用UTF-8模式以在子进程的标准输出中使用UTF-8。由Victor Stinner提供补丁。

  • gh-109230: 修复 test_pyexpat.test_exception():现在可以从不同于Python源代码目录的目录运行。在此之前,测试在这种情况下会失败。如果Modules/pyexpat.c源不可用,则跳过测试。也在非CPython的Python实现上跳过测试。由Victor Stinner提供补丁。

  • gh-108996: 为 msvcrt 添加测试。

  • gh-109015: 如果启用了TCP黑洞(sysctl net.inet.tcp.blackhole),在FreeBSD上修复test_asyncio、test_imaplib和test_socket测试。跳过在这种非标准配置下失败的少数测试,这些测试会返回 ETIMEDOUT。目前,FreeBSD GCP镜像启用了TCP和UDP黑洞 <https://reviews.freebsd.org/D41751>`_(``sysctl net.inet.tcp.blackhole=2`sysctl net.inet.udp.blackhole=1)。由Victor Stinner提供补丁。

  • gh-91960: 如果gdb无法检索Python帧对象(如果一个帧是 <optimized out>),则跳过 test_gdb。当Python是用"clang -Og"构建的时,gdb可能无法检索 _PyEval_EvalFrameDefault()frame 参数。在这种情况下,像 py_bt() 这样的测试很可能会失败。如果无法访问Python帧,python-gdb.py 在检索Python回溯时基本上是无能为力的。此外,如果Python是用Clang构建的,test_gdb 不再在macOS上跳过。由Victor Stinner提供补丁。

  • gh-108962: 如果 chflags() 失败并提示"OSError: [Errno 45] Operation not supported"(例如在FreeBSD 13上),则跳过 test_tempfile.test_flags()。由Victor Stinner提供补丁。

  • gh-91960: 现在由Cirrus-CI(一个支持Linux、macOS、Windows和FreeBSD的托管CI服务)为拉取请求提供FreeBSD 13.2 CI覆盖。

  • gh-89392: 移除了测试中对 test_main() 函数的支持。现在它们总是使用正常的 unittest 测试运行器。

  • gh-108851: 修复 WASI 构建机器上 test_tomllib 的递归测试:减少递归限制并根据当前可用的递归限制计算最大嵌套数组/字典。由 Victor Stinner 提供补丁。

  • gh-108851: 在 test.support 模块中添加 get_recursion_available()get_recursion_depth() 函数。由 Victor Stinner 提供补丁。

  • gh-108834: 向 regrtest 添加 --fail-rerun option 选项:如果测试在详细模式下重新运行时失败然后通过,则以退出码 2(错误)退出进程,而不是退出码 0(成功)。由 Victor Stinner 提供补丁。

  • gh-108834: 将 regrtest 的 --verbose2 选项(-w)重命名为 --rerun。保留 --verbose2 作为已弃用的别名。由 Victor Stinner 提供补丁。

  • gh-108834: 当 regrtest 在详细模式下重新运行失败的测试时(./python -m test --rerun),现在测试会在新的工作进程中重新运行,而不是在主进程中执行。如果测试崩溃或被超时终止,主进程可以检测并处理被终止的工作进程。如果使用 -jN 选项并行运行测试,测试也会并行重新运行。由 Victor Stinner 提供补丁。

  • gh-108822: regrtest 现在计算所有测试的统计信息:成功、失败和跳过。test_netrctest_pep646_syntaxtest_xml_etree 现在在其 test_main() 函数中返回结果。补丁由 Victor Stinner 和 Alex Waygood 提供。

  • gh-108794: doctest.DocTestRunner.run() 方法现在计算跳过的测试数量。添加 doctest.DocTestRunner.skipsdoctest.TestResults.skipped 属性。补丁由 Victor Stinner 提供。

  • gh-108388: 将 test_concurrent_futures 转换为包含 7 个子测试的包。由 Victor Stinner 提供补丁。

  • gh-108388: 将test_multiprocessing_fork、test_multiprocessing_forkserver和test_multiprocessing_spawn拆分为测试包。每个包由4个子测试组成:processes、threads、manager和misc。这样可以并行运行更多测试,从而减少总测试时间。由Victor Stinner提供补丁。

  • gh-105776: 修复当C编译器命令带有 -std=c11 选项时的test_cppext:从编译器命令中移除``-std=``选项。由Victor Stinner提供补丁。

  • gh-107652: 设置CIFuzz在GitHub Actions中运行模糊目标。由Illia Volochii提供补丁。

  • gh-107237: test_logging:通过将超时从100毫秒增加到5分钟(LONG_TIMEOUT)来修复``test_udp_reconnection()``。由Victor Stinner提供补丁。

  • gh-107178: 为Mapping Protocol中的函数、Sequence Protocol中的函数以及Object Protocol中的一些函数添加C API测试。

  • gh-106714: test_capi:通过使用test.support.SuppressCrashReport修复test_no_FatalError_infinite_loop(),不再写入核心转储。由Victor Stinner提供补丁。

  • gh-104090: 避免在 collectedDurations() 中创建对测试对象的引用。

  • gh-106752: 将 zipfile.Path 的测试移至 Lib/test/test_zipfile/_path。使``zipfile._path``成为一个包。

  • gh-106690: 在cpython仓库中添加.coveragerc以供coverage包使用。

  • gh-101634: 当使用 -jN 选项运行Python测试套件时,如果工作进程的stdout无法从区域编码解码,则报告测试失败,因此退出码为非零。由Victor Stinner提供补丁。

  • gh-105084: 当Python构建配置为 --with-wheel-pkg-dir 时,需要 setuptoolswheel``轮子的测试将在 ``WHEEL_PKG_DIR 中搜索轮子。

  • gh-81005: 修改字符串测试以反映在Python 3中 strunicode 合并的情况。由Daniel Fortunov提供补丁。

  • gh-103186: 在test_sys_settrace.py中抑制并断言预期的RuntimeWarnings

  • gh-69714: 向 calendar 添加额外测试以实现完整的测试覆盖。

构建

  • gh-103053: "make check-clean-src" 现在也会检查源目录中是否找到 "python" 程序:如果确实存在则失败并报错。由 Victor Stinner 提供补丁。

  • gh-109191: 修复在使用最新版本 libedit 构建时的编译错误。

  • gh-110276: 不再默默忽略 PROFILE_TASK 失败:由 Profile Guided Optimization (PGO) 使用的命令。由 Victor Stinner 提供补丁。

  • gh-109566: 移除 make testall 目标:改用 make buildbottest。由 Victor Stinner 提供补丁。

  • gh-109740: 实验性的 --disable-gil 配置标志现在在扩展 ABI 标签中包含 "t"(代表 "threaded")。

  • gh-109054: 修复在 Linux AArch64 上构建 _testcapi 扩展时的问题,当使用 <cpython/pyatomic.h> 时需要链接到 libatomic:_Py_atomic_or_uint64() 函数在此平台上需要 libatomic 的 __atomic_fetch_or_8()。配置脚本现在检查是否需要链接到 libatomic 并生成一个新的 LIBATOMIC 变量用于构建 _testcapi 扩展。由 Victor Stinner 提供补丁。

  • gh-63760: 修复 Solaris 构建:不再重新定义 gethostname() 函数。Solaris 自 2005 年起定义了该函数。由 Victor Stinner 提供,原始补丁由 Jakub Kulík 提供补丁。

  • gh-108740: 修复 make regen-all 中的竞态条件。deepfreeze.c 源文件和由 Argument Clinic 生成的文件现在在生成 "全局对象" 之前生成或更新。之前,某些标识符可能会根据这些文件的生成顺序而丢失。由 Victor Stinner 提供补丁。

  • gh-108634: 使用 configure --with-trace-refs (跟踪引用) 构建的 Python 现在与 Python 发布构建和 debug build ABI 兼容。由 Victor Stinner 提供补丁。

  • gh-85283: _stat C 扩展现在使用 limited C API 构建。由 Victor Stinner 提供补丁。

  • gh-108447: 修复 x86_64 GNU/Hurd 构建

  • gh-107814: 当使用 -q 参数调用 find_python.bat 时,未能正确静默 nuget 的输出。此问题现已修复。

  • gh-105481: 移除 make 目标 regen-opcode-targets,将其工作合并到 regen-opcode 中,后者重复了大部分计算。这简化了构建代码并减少了代码重复。

  • gh-106881: 在 Modules/posixmodule.c 中包含 linux/limits.h 之前先检查其是否存在。

  • gh-95855: 重构平台三元组检测代码,并添加对 MIPS 软浮点和 musl libc 的检测。

  • gh-106962: 在 configure 中检测 MPI 编译器。

  • gh-106118: 修复在没有 O_CLOEXEC 的平台上的编译问题。此问题由 Python 3.12b1 中的 gh-103295 引入。由 Erlend Aasland 提供补丁。

  • gh-105875: 构建 sqlite3 扩展模块需要 SQLite 3.15.2 或更高版本。由 Erlend Aasland 提供补丁。

  • gh-90005: 修复 configure 中的一个回归问题,该问题可能导致无意中与 libbsd 链接。

  • gh-102404: 记录如何在 Linux 上执行 WASI 构建。同时添加 Tools/wasm/build_wasi.sh 作为文档的参考实现。

  • gh-89886: 现在需要 Autoconf 2.71 和 aclocal 1.16.4 来重新生成 configure

  • gh-104692: 将 commoninstall 作为 bininstall 的先决条件包含在内

    这确保了在使用并行构建(make -j install)时,commoninstall 会在 bininstall 开始之前完成,因此 python3 符号链接只会在所有标准库模块安装完成后才被安装。

  • gh-101538: 添加实验性的 wasi-threads 支持。由 Takashi Yamamoto 提供补丁。

Windows

  • gh-110437: 允许覆盖 VC 可再发行组件的来源,以确保在更新之间永远不会降级。

  • gh-109286: 更新 Windows 安装程序以使用 SQLite 3.43.1。

  • gh-82367: os.path.realpath() 现在即使文件不可访问也能解析 MS-DOS 风格的文件名。补丁由 Moonsik Park 提供。

  • gh-109991: 更新 Windows 构建以使用 OpenSSL 3.0.11。

  • gh-106242: 修复了在Windows上传递包含嵌入空字符的路径时 realpath() 的行为,使其表现一致。在严格模式下,现在会抛出 OSError 而不是意外的 ValueError,在非严格模式下会使路径变为绝对路径。

  • gh-83180: 更改了 Python 安装管理器,当启动的脚本使用Unix风格的虚拟命令的shebang行时,优先选择活动的虚拟环境,即使命令请求特定版本的Python。

  • gh-106844: 修复了 _winapi.LCMapStringEx() 中的整数溢出和空字符截断问题,这影响了 ntpath.normcase()

  • gh-105436: 确保空环境块以两个空字符终止,这是Windows所要求的。

  • gh-105146: 更新了安装程序末尾的链接,指向Discourse而不是邮件列表。

  • gh-103646: 当从Microsoft Store安装时,pip``不再默认为每个用户安装。然而,由于安装目录不可写,它应该自动决定进行每个用户安装。这应该解决了当 ``pip 被传递一个与 --user 冲突的选项时的问题。

  • gh-88745: 通过使用操作系统的 CopyFile2 函数提高 shutil.copy2() 的性能。这可能会导致一些文件复制的元数据发生微妙的变化,使它们与正常的操作系统行为一致。

  • gh-104820: 修复了在不支持文件ID请求的文件系统(包括FAT32和exFAT)上的 stat() 及相关函数。

  • gh-104803: 添加 os.path.isdevdrive() 以检测路径是否在Windows Dev Drive上。在不支持Dev Drive的平台上返回 False,在非Windows平台上不存在。

macOS

  • gh-109286: 更新macOS安装程序以使用SQLite 3.43.1。

  • gh-109991: 更新macOS安装程序以使用OpenSSL 3.0.11。

  • gh-99079: 更新macOS安装程序以使用OpenSSL 3.0.9。

IDLE

  • gh-104719: 移除IDLE对tokenize.tabsize的修改,并测试tokenize数据和方法在其他用途中的应用。

工具/示例

  • gh-109991: 更新GitHub CI工作流以使用OpenSSL 3.0.11,并使multissltests使用1.1.1w、3.0.11和3.1.3版本。

  • gh-108494: Argument Clinic 现在部分支持 Limited API: 请参阅 Python开发者指南中的文档 由Victor Stinner提供补丁。

  • gh-107704: 现在可以通过Argument Clinic使用新的 / [from X.Y] 语法来废弃为关键字或位置参数传递关键字参数。(读作*"从Python版本X.Y起仅限位置参数"*。)更多信息请参阅 Python开发者指南中的文档

  • gh-107880: Argument Clinic现在可以克隆 __init__()__new__() 方法。

  • gh-104683: 向Argument Clinic CLI添加 --exclude 选项。

  • gh-95065: Argument Clinic现在支持通过使用指令 @text_signature 覆盖自动生成的签名。请参阅 Python开发者指南中的文档

  • gh-107609: 修复Argument Clinic中的重复模块检查。之前,重复定义会被错误地静默接受。补丁由Erlend E. Aasland提供。

  • gh-107467: Argument Clinic命令行工具现在在失败时向stderr而非stdout打印信息。

  • gh-106970: 修复Argument Clinic中 destination <name> clear 命令的bug;目的地缓冲区永远不会被清除,且 destination 指令解析器在处理命令后会直接继续到错误处理器。由Erlend E. Aasland提供补丁。

  • gh-106706: 更改字节码语法以移除家族中冗余的名称匹配伪语法。

  • gh-106359: Argument Clinic 现在明确禁止在用作注解的函数调用中使用 "kwarg splats"。

  • gh-103186: freeze 现在从原始 CPython 实例获取 CONFIG_ARGS,Makefile 使用该实例调用实用脚本。由 Ijtaba Hussain 提供补丁。

  • gh-95065: 现在可以使用 Argument Clinic 弃用以位置方式传递参数,使用新的 * [from X.Y] 语法。(解读为 "从 Python 版本 X.Y 开始仅限关键字"。)更多信息请参阅 Python 开发者指南中的文档。由 Erlend E. Aasland 提供补丁,Alex Waygood、Nikita Sobolev 和 Serhiy Storchaka 协助。

C API

  • gh-85283: 如果定义了 Py_LIMITED_API 宏,<Python.h> 现在会取消定义 Py_BUILD_COREPy_BUILD_CORE_BUILTINPy_BUILD_CORE_MODULE 宏。由 Victor Stinner 提供补丁。

  • gh-110289: 添加 PyUnicode_EqualToUTF8AndSize()PyUnicode_EqualToUTF8() 函数。

  • gh-110235: 在 PyStructSequence 构造函数中对重复/未知字段抛出 TypeError。补丁由 Xuehai Pan 提供。

  • gh-110014: 从未记录的有限 C API 中移除 PY_TIMEOUT_MAX 常量。由 Victor Stinner 提供补丁。

  • gh-109521: PyImport_GetImporter() 现在在无法获取 sys.path_hookssys.path_importer_cache,或者它们不是对应的列表和字典时设置 RuntimeError。以前在模糊的情况下可能返回 NULL 而不设置错误,如果这些属性类型错误,可能崩溃或抛出 SystemError。

  • gh-108724: 添加 PyMutex 仅供内部使用的轻量级锁定 API。

  • gh-85283: 添加 PySys_AuditTuple() 函数:类似于 PySys_Audit(),但将事件参数作为 Python tuple 对象传递。由 Victor Stinner 提供补丁。

  • gh-108867: 添加 PyThreadState_GetUnchecked() 函数:类似于 PyThreadState_Get(),但如果它为 NULL 不会以致命错误终止进程。调用者需负责检查结果是否为 NULL。此前,该函数为私有函数,称为 _PyThreadState_UncheckedGet()。由 Victor Stinner 提供补丁。

  • gh-108765: Python.h 不再包含 <ctype.h> 标准头文件。如果需要,现在应明确包含它。例如,它提供了 isalpha()tolower() 函数,这些函数依赖于区域设置。Python 提供了不依赖于区域设置的函数,如 Py_ISALPHA()Py_TOLOWER()。由 Victor Stinner 提供补丁。

  • gh-108765: Python.h 不再包含 <unistd.h> 标准头文件。如果需要,现在应明确包含它。例如,它提供了函数:close()getpagesize()getpid()sysconf()。补丁由 Victor Stinner 提供。

  • gh-108765: Python.h 不再包含 <ieeefp.h> 标准头文件。它之前被包含用于 finite() 函数,现在该函数由 <math.h> 头文件提供。如果需要,现在应明确包含它。同时移除 HAVE_IEEEFP_H 宏。由 Victor Stinner 提供补丁。

  • gh-108765: Python.h 不再包含这些标准头文件:<time.h><sys/select.h><sys/time.h>。如果需要,现在应明确包含它们。例如,<time.h> 提供了 clock()gmtime() 函数,<sys/select.h> 提供了 select() 函数,<sys/time.h> 提供了 futimes()gettimeofday()setitimer() 函数。由 Victor Stinner 提供补丁。

  • gh-108511: 添加函数 PyObject_HasAttrWithError()PyObject_HasAttrStringWithError()PyMapping_HasKeyWithError()PyMapping_HasKeyStringWithError()

  • gh-107073: 添加 PyObject_VisitManagedDict()PyObject_ClearManagedDict() 函数,这些函数必须由使用 Py_TPFLAGS_MANAGED_DICT 标志的类型的遍历和清除函数调用。由 Victor Stinner 提供补丁。

  • gh-108634: 使用 configure --with-trace-refs (跟踪引用) 构建的 Python 现在支持 Limited API。由 Victor Stinner 提供补丁。

  • gh-108014: 添加 PyLong_AsInt() 函数:类似于 PyLong_AsLong(),但将结果存储在 C 的 int 而不是 C 的 long 中。以前,它被称为私有函数 _PyLong_AsInt() (带有下划线前缀) 。由 Victor Stinner 提供补丁。

  • gh-108314: 添加 PyDict_ContainsString() 函数:与 PyDict_Contains() 相同,但 key 指定为 const char* UTF-8 编码的字节字符串,而不是 PyObject*。由 Victor Stinner 提供补丁。

  • gh-108337: 在 pyatomic.h 中添加对额外数据类型的原子操作。

  • gh-108014: 添加 Py_IsFinalizing() 函数:检查主 Python 解释器是否正在 关闭。由 Victor Stinner 提供补丁。

  • gh-107916: C API 函数 PyErr_SetFromErrnoWithFilename(), PyErr_SetExcFromWindowsErrWithFilename()PyErr_SetFromWindowsErrWithFilename() 现在在调用 PyUnicode_DecodeFSDefault() 之前保存错误代码。

  • gh-107915: 诸如 PyErr_SetString(), PyErr_Format(), PyErr_SetFromErrnoWithFilename() 等 C API 函数,如果格式化错误消息或解码文件名失败,将不再崩溃或忽略错误。相反,它们会保留相应的错误。

  • gh-107810: 改进 DeprecationWarning 对于与具有自定义 tp_new 的元类一起使用的 PyType_Spec 的使用。

  • gh-107249: 为 Windows MSVC 编译器实现 Py_UNUSED 宏。补丁由 Victor Stinner 提供。

  • gh-107226: PyModule_AddObjectRef() 现在仅在有限 API 版本 3.10 或更高版本中可用。

  • gh-106320: 移除了私有 _PyUnicode_AsString() 别名,该别名指向 PyUnicode_AsUTF8()。保留该别名是为了向后兼容 Python 3.0 - 3.2。PyUnicode_AsUTF8() 自 Python 3.3 起可用。PyUnicode_AsUTF8String() 函数可用于保持与 Python 3.2 及更早版本的兼容性。由 Victor Stinner 提供补丁。

  • gh-106572: 将 PyObject_DelAttr()PyObject_DelAttrString() 宏转换为函数。由 Victor Stinner 提供补丁。

  • gh-106307: 添加 PyMapping_GetOptionalItem() 函数。

  • gh-106521: 添加 PyObject_GetOptionalAttr()PyObject_GetOptionalAttrString() 函数。

  • gh-106320: 移除了 _PyInterpreterState_Get() 别名,该别名指向 PyInterpreterState_Get(),保留该别名是为了向后兼容 Python 3.8。由 Victor Stinner 提供补丁。

  • gh-106316: 移除了 cpython/pytime.h 头文件:该文件仅包含私有函数。由 Victor Stinner 提供补丁。

  • gh-106023: 移除了私有 _PyObject_FastCall() 函数:使用 PyObject_Vectorcall(),该函数自 Python 3.8 起可用 (PEP 590)。由 Victor Stinner 提供补丁。

  • gh-106168: 如果 Python 是在 debug modewith assertions 模式下构建的,PyTuple_SET_ITEM()PyList_SET_ITEM() 现在会通过断言检查索引参数。如果断言失败,确保在此之前设置了大小。由 Victor Stinner 提供补丁。

  • gh-106084: 移除了旧别名,这些别名指向调用函数的函数,保留这些别名是为了向后兼容 Python 3.8 临时 API:

    • _PyObject_CallMethodNoArgs(): 使用 PyObject_CallMethodNoArgs()

    • _PyObject_CallMethodOneArg(): 使用 PyObject_CallMethodOneArg()

    • _PyObject_CallOneArg(): 使用 PyObject_CallOneArg()

    • _PyObject_FastCallDict(): 使用 PyObject_VectorcallDict()

    • _PyObject_Vectorcall(): 使用 PyObject_Vectorcall()

    • _PyObject_VectorcallMethod(): 使用 PyObject_VectorcallMethod()

    • _PyVectorcall_Function(): 使用 PyVectorcall_Function()

    只需移除下划线前缀即可更新您的代码。由Victor Stinner提交的补丁。

  • gh-106004: 添加 PyDict_GetItemRef()PyDict_GetItemStringRef() 函数:类似于 PyDict_GetItemWithError(),但返回一个 强引用 而不是 借用引用`。由Victor Stinner提交的补丁。

  • gh-105927: 弃用 PyWeakref_GetObject()PyWeakref_GET_OBJECT() 函数:改用新的 PyWeakref_GetRef() 函数。由Victor Stinner提交的补丁。

  • gh-105927: 添加 PyWeakref_GetRef() 函数:类似于 PyWeakref_GetObject(),但返回一个 强引用,或者如果引用对象不再存活则返回 NULL。由Victor Stinner提交的补丁。

  • gh-105922: 添加 PyImport_AddModuleRef():类似于 PyImport_AddModule(),但返回一个 强引用 而不是 借用引用`。由Victor Stinner提交的补丁。

  • gh-105227: 新的 PyType_GetDict() 提供了给定类型对象的字典,通常由 cls.__dict__ 暴露。通常使用 tp_dict 就足够了,但对于静态内置类型,tp_dict 现在总是 NULLPyType_GetDict() 提供了正确的字典对象。

  • gh-105375: 修复 PyErr_WarnExplicit() 中的一个错误,其中如果API内部失败,异常可能会被覆盖。

  • gh-105603: 我们已经将新(在3.12中)的 PyInterpreterConfig.own_gil 重命名为 PyInterpreterConfig.gil,并将值的含义从“布尔”更改为整数,支持的值为 PyInterpreterConfig_DEFAULT_GILPyInterpreterConfig_SHARED_GILPyInterpreterConfig_OWN_GIL。默认值为“共享”。

  • gh-105387: 在有限 C API 版本 3.12 中,Py_INCREF()Py_DECREF() 函数现在被实现为不透明的函数调用以隐藏实现细节。由 Victor Stinner 提供补丁。

  • gh-105396: Deprecate the PyImport_ImportModuleNoBlock() function which is just an alias to PyImport_ImportModule() since Python 3.3. Patch by Victor Stinner.

  • gh-103968: PyType_FromMetaclass() 现在允许 tp_new 设置为 NULL 的元类。

  • gh-105268: 移除旧的私有、未文档化和未测试的 _PyGC_FINALIZED() 宏,该宏是为了与 Python 3.8 及更早版本保持向后兼容性而保留的。由 Victor Stinner 提供补丁。

  • gh-105182: 移除在 Python 3.2 中弃用的 PyEval_AcquireLock()PyEval_ReleaseLock() 函数。由 Victor Stinner 提供补丁。

  • gh-105182: 移除在 Python 3.9 中弃用的 PyEval_InitThreads()PyEval_ThreadsInitialized() 函数。由 Victor Stinner 提供补丁。

  • gh-105145: 弃用旧的 Python 初始化函数:

    • PySys_ResetWarnOptions()

    • Py_GetExecPrefix()

    • Py_GetPath()

    • Py_GetPrefix()

    • Py_GetProgramFullPath()

    • Py_GetProgramName()

    • Py_GetPythonHome()

    由Victor Stinner提供补丁。

  • gh-85275: PyObject_AsCharBuffer()PyObject_AsReadBuffer()PyObject_CheckReadBuffer()PyObject_AsWriteBuffer() 已被移除。请迁移到新的缓冲区协议;PyObject_GetBuffer()PyBuffer_Release()

  • gh-105156: 弃用旧的 Py_UNICODEPY_UNICODE_TYPE 类型:直接使用 wchar_t 类型代替。自 Python 3.3 起,Py_UNICODEPY_UNICODE_TYPE 仅为 wchar_t 的别名。由 Victor Stinner 提供补丁。

  • gh-105145: 移除以下在 Python 3.11 中弃用的用于配置 Python 初始化的旧函数:

    • PySys_AddWarnOptionUnicode()

    • PySys_AddWarnOption()

    • PySys_AddXOption()

    • PySys_HasWarnOptions()

    • PySys_SetArgvEx()

    • PySys_SetArgv()

    • PySys_SetPath()

    • Py_SetPath()

    • Py_SetProgramName()

    • Py_SetPythonHome()

    • Py_SetStandardStreamEncoding()

    • _Py_SetProgramFullPath()

    由Victor Stinner提供补丁。

  • gh-105107: 移除在Python 3.9中弃用的函数。

    由Victor Stinner提供补丁。

  • gh-105115: 内置静态类型的 PyTypeObject.tp_bases``(和 ``tp_mro)现在被所有解释器共享,而在3.12-beta1版本中它们存储在 PyInterpreterState 上。另外请注意,现在这些元组是不可变对象。

  • gh-105071: 向不稳定的C API添加 PyUnstable_Exc_PrepReraiseStar,以暴露 except* 的实现。

  • gh-104922: 在如 PyArg_ParseTuple()Py_BuildValue() 的API中使用 '#' 格式时不再需要 PY_SSIZE_T_CLEAN。无论 PY_SSIZE_T_CLEAN 如何,它们都为 '#' 使用 Py_ssize_t

  • gh-104584: 为钩入优化器添加一个不稳定的C API。这主要是内部的,但标记为“不稳定”以允许第三方实验。

  • gh-104668: 不在子解释器中调用 PyOS_InputHookPyOS_ReadlineFunctionPointer,因为在它们的注册回调中通常难以避免使用全局状态。这也避免了扩展可能在不支持的子解释器中运行(或尚未加载)的情况。

  • bpo-42327: 添加 PyModule_Add() 函数:类似于 PyModule_AddObjectRef()PyModule_AddObject(),但总是窃取对值的引用。

  • bpo-40309: 在 Py_BuildValue() 格式字符串中正确处理闭括号前的尾随空格。

Python 3.12.0 beta 1

发布日期: 2023-05-22

安全性

  • gh-99889: 修复了 uu.decode() 中的一个安全漏洞,该漏洞在没有指定 out_file 的情况下,可能允许基于输入的目录遍历。

  • gh-104049: 在 http.client.SimpleHTTPRequestHandler 生成的目录索引中不暴露本地的磁盘位置。

  • gh-99108: 升级内置的 hashlib SHA3实现到来自 HACL* 项目的已验证实现。在OpenSSL不存在或缺少SHA3时使用。

  • gh-102153: urllib.parse.urlsplit() 现在根据WHATWG定义的URL规范,去除前导C0控制和空格字符,以响应 CVE 2023-24329。由Illia Volochii提供补丁。

核心与内置函数

  • gh-102856: 在 tokenize 模块中实现PEP 701的更改。由Marta Gómez Macías和Pablo Galindo Salgado提供补丁。

  • gh-104615: 修复了类似 a, a = x, y 代码中的赋值顺序错误。由Carl Meyer贡献。

  • gh-104572: 在 PEP 695 上下文中和当 from __future__ import annotations 激活时,改进无效构造的语法错误消息。

  • gh-104482: 修复了ast.c中验证模式匹配语句时的三个错误处理bug。

  • gh-102818: 不在 sys.setprofilesys.settrace 的蹦床函数中添加帧到回溯中。这确保了如果回调函数中引发异常,帧不会被重复,并且确保如果使用C回调且该回调不添加帧时,帧不会被省略。

  • gh-104405: 修复了一个问题,其中一些 bytecode 指令在“内联”调用时可能忽略 PEP 523

  • gh-103082: 更改 sys.monitoring.events.LINE 事件在 sys.monitoring 中的行为:行事件现在在动态到达新行时发生,而不是像以前那样使用静态近似。这使得行为与 sys.settrace 中的“行”事件非常相似。这应该有助于工具从3.11移植到3.12。

  • gh-104263: 修复 float("nan") 在平台(如MIPS)上生成静默NaN的问题,这些平台上信号/静默位的含义与其通常含义相反。同时引入一个新宏 Py_INFINITY 以匹配C99的 INFINITY,并重构内部代码以依赖C99的 NANINFINITY 宏,而不是硬编码无穷大和NaN的位模式。感谢Sebastian Berg。

  • gh-99113: 多阶段初始化扩展模块现在可以表明它们支持在拥有自己GIL的子解释器中运行。这是通过使用 Py_MOD_PER_INTERPRETER_GIL_SUPPORTED 作为 Py_mod_multiple_interpreters 模块定义槽的值来实现的。否则,默认情况下,模块不能在这样的子解释器中导入。(这不影响主解释器或不拥有自己GIL的子解释器。)除了多阶段初始化通常已经要求的隔离外,支持每个解释器的GIL还涉及一个额外的约束:线程安全。如果模块有外部(链接)依赖,并且这些库有任何不是线程安全的状态,那么模块必须做额外的工作来增加线程安全。这应该是一个不常见的情况。

  • gh-99113: GIL现在(可选)是每个解释器一个。这是PEP 684的根本变化。这一切之所以成为可能,是因为进程中每个解释器的隔离状态。主解释器的行为保持不变。同样,使用 Py_NewInterpreter() 创建的解释器不受影响。要获得拥有自己GIL的解释器,请调用 Py_NewInterpreterFromConfig()

  • gh-104108: 多阶段初始化扩展模块现在可以表明它们是否实际支持多解释器。默认情况下,这类模块被期望支持在多解释器中使用。在不常见的情况下,如果不支持,可以使用新的 Py_mod_multiple_interpreters 模块定义槽。值为 0 表示模块不支持多解释器。1 表示支持。默认值为 1

  • gh-104142: 修复了一个问题,其中 listtuple 的重复可能未能遵守 PEP 683

  • gh-104078: 提高了 PyObject_HasAttrString() 的性能。

  • gh-104066: 提高了对于缺少属性的模块对象 hasattr() 的性能。

  • gh-104028: 在从垃圾回收调用回调函数时减少对象创建。由 Donghee Na 提交的补丁。

  • gh-104018: 在字节对象的 %-格式化中禁止使用 "z" 格式说明符。

  • gh-102213: 修复了在访问定义了 __getattr__ 的对象属性时的性能损失。

  • gh-103895: 改进了在显示 Exception.__notes__ 时对边缘情况的处理。确保消息总是以换行符结束,并且字符串/字节不会在多行上展开。由 Carey Metcalfe 提交的补丁。

  • gh-103907: 在主解释器循环中不修改已知不朽对象(TrueFalseNone)的引用计数。

  • gh-103899: 当意外调用具有相同名称的可调用属性的 module 对象(如 dis.dis()datetime.datetime)时,在 TypeError 消息中提供有用的提示。

  • gh-103845: 在添加新的监控工具之前移除行和指令的监控工具,以避免新添加的监控工具被立即移除。

  • gh-103763: 实现了 PEP 695,为泛型类、泛型函数和类型别名添加了语法支持。

    新增了用于类型别名的 type X = ... 语法,该语法在运行时解析为新类 typing.TypeAliasType``的实例。该值是延迟计算的,可以通过 ``.__value__ 属性访问。这是作为一个新的AST节点``ast.TypeAlias``实现的。

    新增了用于定义泛型函数和类的新语法(class X[T]: ..., def func[T](): ...)。这是通过在类和函数的AST节点上新增 type_params 属性实现的。该节点持有新AST类 ast.TypeVarast.ParamSpec``和 ``ast.TypeVarTuple 的实例。

    typing.TypeVartyping.ParamSpectyping.ParamSpecArgstyping.ParamSpecKwargstyping.TypeVarTuple``和 ``typing.Generic 现在是用C而非Python实现的。

    新增了字节码指令 LOAD_LOCALSLOAD_CLASSDICT_OR_GLOBAL``LOAD_CLASSDICT_OR_DEREF``以支持类命名空间中名称的正确解析。

    由Eric Traut、Larry Hastings和Jelle Zijlstra贡献的补丁。

  • gh-103801: 为wasm模块添加了三个由ruff捕获的小型lint修复。

  • gh-103793: 通过将昂贵的字符串格式化(任务名称生成)从任务创建推迟到第一次调用``get_name``时,优化了asyncio任务的创建。这使得asyncio基准测试速度提高了5%。

  • gh-102310: 更改了无效字节文字的错误范围。

  • gh-103590: 不要将 try-except* 构造中抛出的单个异常包装在 ExceptionGroup 中。

  • gh-103650: 更改性能映射格式,移除地址中的'0x'前缀。

  • gh-102856: 实现了PEP 701所需的C标记器更改。由Pablo Galindo Salgado、Lysandros Nikolaou、Batuhan Taskaya、Marta Gómez Macías和sunmy2019贡献的补丁。

  • gh-100530: 澄清了当类模式的调用部分实际上不是一个类时引发的错误消息。

  • gh-101517: 修复了为 except* 发出的指令的行号中的错误。

  • gh-103492: 通过明确指出哪个字面值有问题来澄清 SyntaxWarning 与字面值 is 比较的情况,因为使用 is 与例如 None 和布尔字面值的比较是惯用的。

  • gh-87729: 添加 LOAD_SUPER_ATTR (以及 super().method() 的专门化) 以加速 super().method()super().attr。这使得 super().method() 大约快了2.3倍,并将其性能提升至简单方法调用的20%以内。Vladimir Matveev 和 Carl Meyer 的补丁。

  • gh-103488: 更改区分 yield 和 return 目标地址的内部偏移量,以便指令指针对于异常处理和其他堆栈展开是正确的。

  • gh-82012: 布尔值的按位取反运算符(~)已被弃用。它返回底层 int 表示的按位取反,例如 bool(~True) == True,这可能会造成混淆。使用 not 进行布尔值的逻辑否定。在极少数情况下,如果您确实需要底层 int 的按位取反,请显式转换为 int ~int(x)

  • gh-77757: 类型对象的 __set_name__ 方法中引发的异常不再被 RuntimeError 包装。上下文信息以 PEP 678 注释的形式添加到异常中。

  • gh-103333: AttributeError 现在在序列化和反序列化时保留 name 属性。

  • gh-103242: 迁移 set_ecdh_curve() 方法以不使用已弃用的 OpenSSL API。Donghee Na 的补丁。

  • gh-103323: 我们已经将 _PyRuntime.tstate_current 的使用替换为线程局部变量。这是一个相当低级的实现细节,行为应该没有变化。

  • gh-84436: PEP-683 的实现,通过使用跳过引用计数的固定引用计数来添加不朽对象,使对象真正不可变。

  • gh-102700: 允许内置模块成为子模块。这允许子模块静态链接到 CPython 二进制文件中。

  • gh-103082: 为CPython实现 PEP 669 低影响监控。

  • gh-88691: 减少 CALLCACHE 内联条目数量。

  • gh-102500: 使用新的 __buffer____release_buffer__ 魔术方法,使缓冲区协议在Python代码中可访问。详情见 PEP 688。由Jelle Zijlstra提供补丁。

  • gh-97933: PEP 709: 内联列表、字典和集合推导式,以提高性能并减少字节码大小。

  • gh-99184: 在 weakref.refrepr 中绕过 __name__ 的实例属性访问。

  • gh-98003: 现在复杂的函数调用更快,且不占用C栈空间。

  • bpo-39610: 对于0维的 memoryview 对象(如 memoryview(ctypes.c_uint8(42))),len() 现在会引发 TypeError。之前这会返回 1,这与 mem_0d[0] 引发 IndexError 不一致。

  • bpo-31821: 修复 pause_reading() 在被 asyncio 中的 connection_made() 调用时工作的问题。

  • gh-104600: functools.update_wrapper() 现在设置 __type_params__ 属性(由 PEP 695 添加)。

  • gh-104340: 当 asyncio 管道协议由于错误失去连接,并且调用者没有在相应的 StreamWriter 上等待 wait_closed() 时,不要记录关于未检索到的异常的警告。毕竟,根据 StreamWriter.close() 文档,wait_closed() 调用是可选的(“非强制性”)。

  • gh-104555: 修复了一个问题,即在进行 issubclass() 检查,将一个类 X 与具有不可调用成员的 运行时检查协议 Y 进行比较时,如果之前已经进行了将 X 的实例与 Y 进行比较的 isinstance() 调用,则不会引发 TypeError。这个问题在Python 3.11的边缘情况下存在,但在3.12中由于对运行时检查协议进行的一些无关更改变得更加突出。由Alex Waygood提供补丁。

  • gh-104372: 重构了 _posixsubprocess 的内部实现,以避免在标记 pass_fds= 文件描述符为可继承时在 fork 和 exec 之间使用 Python C API。

  • gh-104484: 为 pathlib.PurePath.match() 添加了 case_sensitive 参数。

  • gh-75367: 修复了 inspect.getattr_static() 中的数据描述符检测问题。

  • gh-104536: 修复了内部 multiprocessing.process 清理逻辑中的一个竞态条件,该条件可能在调用 process.close() 时表现为意外的 AttributeError

  • gh-103857: 更新了 datetime 弃用警告的堆栈跟踪,使其指向调用行。

  • gh-101520: 将 tracemalloc 模块的核心功能移至 Python/ 文件夹,仅在 Modules/ 中保留模块包装器。

  • gh-104392: 从 typing 中的某些类中移除了未文档化且未使用的 _paramspec_tvars 属性。

  • gh-102613: 修复了 pathlib.Path.glob() 在遍历深层目录树时引发 RecursionError 的问题。

  • gh-103000: 提高了 dataclasses.asdict()dict_factorydict 时的常见情况下的性能。由 David C Ellis 提供补丁。

  • gh-104301: 允许在 pdb 的消歧语句中使用前导空格。

  • gh-104139: 教导 urllib.parse.unsplit() 在组装 itms-services://?action=generate-bugs 风格的 Apple Platform Deployment URLs 时保留 "//"

  • gh-104307: socket.getnameinfo() 现在在联系 DNS 服务器时会释放 GIL。

  • gh-104310: 用户现在可以使用 importlib.util.allowing_all_extensions() (一个上下文管理器) 来临时禁用子解释器中导入扩展模块时的严格兼容性检查。

  • gh-87695: 修复了 pathlib.Path.glob() 在遇到指向过长路径的符号链接时引发 OSError 的问题。

  • gh-104265: 通过禁止实例化 _csv.Reader_csv.Writer 类型来防止可能的崩溃。这个回归是在3.10.0a4版本中由PR 23224引入的 (bpo-14935)。由Radislav Chugunov提供补丁。

  • gh-102613: 通过仅在必要时合并相邻的通配符并去重结果,提高了 pathlib.Path.glob() 在展开递归通配符("**")时的性能。

  • gh-65772: 移除了turtle.py中不必要的注释和代码。

  • gh-90208: 修复了 pathlib.Path.glob() 在遇到 PermissionError 时返回不完整结果的问题。现在,此方法会抑制所有 OSError 异常,除了那些在顶级路径上调用 is_dir() 时引发的异常。

  • gh-104144: 当使用 asyncio.eager_task_factory() 时,优化了 asyncio.TaskGroup。如果TaskGroup任务急切完成,跳过调度完成回调。

  • gh-104144: 当使用 asyncio.eager_task_factory() 时,优化了 asyncio.gather() 以在所有未来急切完成时也急切完成。避免为急切完成的未来调度完成回调。

  • gh-104114: 修复了 pathlib.Path.glob() 返回的路径使用非通配符段的对应路径段的大小写,而不是实际文件系统大小写的问题。

  • gh-104104: 通过使用 re.IGNORECASE 实现不区分大小写的匹配,提高了 pathlib.Path.glob() 的性能。

  • gh-104102: 在评估包含 '../' 段的模式时,提高了 pathlib.Path.glob() 的性能。

  • gh-103822: 将 weekday 的返回类型更新为新添加的Day属性。

  • gh-103629: 根据 PEP 692 更新了 typing.Unpackrepr

  • gh-103963: 使 dis 显示 CALL_INTRINSIC_* 的参数名称。

  • gh-104035: 不忽略用户定义的 __getstate____setstate__ 方法对于有槽的冻结数据类。

  • gh-103987: 在 mmap 中修复了几个可能导致在内存映射文件失效后仍访问它们的错误。

  • gh-103977: 优化了 platform 模块的导入时间。

  • gh-88773: 在 turtle 模块中添加了 turtle.teleport() 功能,用于将海龟移动到一个新点而不绘制线条,无论是否可见。由 Liam Gersten 提供补丁。

  • gh-103935: 对要执行的文件使用 io.open_code() 而不是原始的 open()

  • gh-68968: 修复了当输入缺少最终换行符时 assertEqual() 输出乱码的问题。

  • gh-100370: 修复了在32位构建中 sqlite3.Connection.blobopen() 可能引发的 OverflowError。由 Erlend E. Aasland 提供补丁。

  • gh-102628: 在 Windows 上运行时,将 sqlite3 CLI 横幅中的 CTRL-D 替换为 CTRL-Z。

  • gh-103636: 从 calendar 中弃用了模块级属性 JanuaryFebruary

  • gh-103583: 隔离了 _multibytecodec 和编解码器扩展模块。由 Erlend E. Aasland 提供补丁。

  • gh-103848: 添加检查以确保 urllib.parse.urlsplit() 找到的 [ 括号 ] 主机是 IPv6 或 IPvFuture 格式。

  • gh-103872: 将捆绑的 pip 更新至版本 23.1.2。

  • gh-99944: 使 dis 显示 KW_NAMES 的 oparg 值。

  • gh-74940: C.UTF-8 区域设置不再转换为 en_US.UTF-8,从而在没有安装区域设置的系统上启用 UTF-8 编码。

  • gh-103861: 修复了 zipfile.Zipfile 在使用 force_zip64 向其中添加文件时创建无效 zip 文件的问题。由 Carey Metcalfe 提供补丁。

  • gh-103857: 弃用了 datetime.datetime.utcnow()datetime.datetime.utcfromtimestamp()。(由 Paul Ganssle 提供补丁)

  • gh-103839: 避免在针对使用捆绑的 libtommath 构建的 Tcl 8.7 构建 Tkinter 时由于找不到 tommath.h 而导致的编译错误。

  • gh-103791: contextlib.suppress 现在支持抑制作为 ExceptionGroup 一部分引发的异常。如果组中存在其他异常,它们将会在不包含被抑制异常的组中重新引发。

  • gh-90750: 在 datetime.datetime.strptime() 的实现中使用 datetime.datetime.fromisocalendar(),现在应该只接受有效的 ISO 日期。(由 Paul Ganssle 提供补丁)

  • gh-103685: 为 Tk 8.7 准备 tkinter.Menu.index(),使其在应该返回 None 时不会引发 TclError: expected integer but got ""

  • gh-81403: urllib.request.CacheFTPHandler 不再在重用缓存的 FTP 实例时引发 URLError。ftplib 的 endtransfer 方法调用 voidresp 来排空连接,以正确处理 FTP 实例的重用。

  • gh-103699: 向非泛型 TypedDicts、基于调用的 TypedDicts 和基于调用的 NamedTuples 添加 __orig_bases__。其他 TypedDicts 和 NamedTuples 已有该属性。

  • gh-103693: 向 pdb 添加便利变量功能

  • gh-92248: 弃用 argparse.BooleanOptionalActiontypechoicesmetavar 参数。

  • gh-89415: 为特定源的多播添加 socket 常量。由 Reese Hyde 提供补丁。

  • gh-103673: socketserver 新增 ForkingUnixStreamServerForkingUnixDatagramServer 类。由 Jay Berry 提供补丁。

  • gh-103636: 在 calendar 模块中添加了月份的枚举和日期。

  • gh-84976: 创建一个新的 Lib/_pydatetime.py 文件,定义 datetime 模块的 Python 版本,并使 datetime 仅在 C 实现不可用时才导入新库的内容。目前,如果 C 实现不可用,会定义完整的 Python 实现然后删除,这无谓地减慢了 import datetime 的速度。

  • gh-103596: 属性/方法不再被同名的枚举成员遮蔽,尽管它们可能被 enum.property 遮蔽。

  • gh-103584: 更新了 importlib.metadata,包含了从 importlib_metadata 5.2 到 6.5.0 的更改,包括:当 installed-files.txt 存在时,支持 Distribution.filesPackageMetadata 现在规定了一个额外的 get 方法,允许轻松查询可能不存在的元数据键。packages_distributions 现在支持包和模块的 Python 模块不是 .py 源文件(例如 .pyc.so)。扩展了 PackageMetadata.get_all 的协议,以匹配 python/typeshed#9620 中 email.message.Message.get_all 的上游实现。弃用了未定义抽象方法使用 Distribution。弃用了 PackageMetadata.__getitem__ 对于缺失键返回 None 的期望。将来,它将引发 KeyError

  • gh-103578: 修复了一个错误,其中 pdb 在读取具有不同编码的源文件时会崩溃,通过用 io.open_code() 替换 io.open()。新方法也会调用由 PyFile_SetOpenCodeHook() 设置的钩子。

  • gh-103556: 现在创建 inspect.Signature 对象时,带有默认值的位置参数后面跟着没有默认值的位置或关键字参数是不可能的。

  • gh-103559: 将捆绑的 pip 更新到版本 23.1.1。

  • gh-103548: 通过仅在必要时连接路径,提高了 pathlib.Path.absolute()cwd() 的性能。同时通过在 Posix 上跳过路径解析和规范化,提高了 pathlib.PurePath.is_absolute() 的性能。

  • gh-103538: 移除了由 TK_AQUA 宏定义保护的 _tkinter 模块代码,该宏仅对 Tk 8.4.7 或更早版本需要,并且从未被任何构建系统定义或为手动使用记录。

  • gh-103533: 更新 cProfile 以使用 PEP 669 API

  • gh-103525: 修复了当向 pathlib.PurePathPath 提供混合 strbytes 参数时的误导性异常消息。

  • gh-103489: 向 Connection 添加 getconfig()setconfig(),以便对数据库连接进行配置更改。由 Erlend E. Aasland 提供补丁。

  • gh-103365: 将默认的 Flag 边界设置为 STRICT 并修复位操作。

  • gh-103472: 通过显式关闭代理/隧道的 CONNECT 响应,避免 http.client.HTTPConnection 中潜在的 ResourceWarning

  • gh-103462: 修复了在使用 asyncio 中的 writelines() 发送非常大的负载时的问题,这些负载超过了一次调用 socket.socket.send()socket.socket.sendmsg() 所能写入的数据量,导致剩余的缓冲区未被写入。

  • gh-103449: 修复了 dataclasses.dataclass() 中文档字符串生成的一个错误。

  • gh-103092: 隔离 _collections (应用 PEP 687) 。补丁由 Erlend E. Aasland 提供。

  • gh-103357: 向 logging.config.dictConfig()logging.config.fileConfig() 添加了对 logging.Formatter defaults 参数的支持。由 Bar Harel 提供补丁。

  • gh-103092: 使 winreg 扩展模块适应 PEP 687

  • gh-74690: 对于只有少数成员的协议,针对 runtime-checkable protocolsisinstance() 检查性能得到了显著提升。为了实现这一改进,typing 模块的几个内部实现细节已被重构,包括 typing._ProtocolMeta.__instancecheck__typing._is_callable_members_onlytyping._get_protocol_attrs。由 Alex Waygood 提供补丁。

  • gh-74690: 运行时可检查协议的成员现在在类创建后即被视为“冻结”。更多详情请参阅 "Python 3.12 新特性"

  • gh-103256: 修复了一个导致 hmac 在请求的哈希算法在OpenSSL中不可用(尽管在``hashlib``本身中作为单独部分可用)时引发异常的bug。现在它正确地回退到内置算法。这种情况可能发生在,例如,您的OpenSSL不包含SHA3支持而您想计算 ``hmac.digest(b'K', b'M', 'sha3_256')``时。

  • gh-102778: 在 idlelib 中支持 sys.last_exc

  • gh-103285: 提高 ast.get_source_segment() 的性能。

  • gh-103225: 修复 pdb 在显示模块级源代码行号时的一个bug。

  • gh-103092: 使 msvcrt 扩展模块适应 PEP 687

  • gh-103092: 使 winsound 扩展模块适应 PEP 687

  • gh-93910: 移除对枚举 member.member 访问的弃用。

  • gh-102978: 修复当以 autospec=True 调用时,unittest.mock.patch() 不强制执行用``@classmethod``或 @staticmethod 装饰的方法的函数签名的问题。

  • gh-103092: 隔离 _socket (应用 PEP 687) 。由Erlend E. Aasland提交的补丁。

  • gh-100479: 添加 pathlib.PurePath.with_segments(),该方法从参数创建一个路径对象。此方法在创建派生路径时被调用,例如从 pathlib.PurePath.parent。子类可以覆盖此方法以在路径对象之间共享信息。

  • gh-103220: 修复当连接到Windows上带有尾部斜杠的不完整UNC驱动器时,os.path.join() 添加斜杠的问题。

  • gh-103204: 修复 http.server 接受HTTP版本号前带有'+'或'-',或带有数字分隔'_'字符的HTTP请求的问题。版本号的长度也受到限制。

  • gh-75586: 修复 shutil.which 的各种Windows特定问题。

  • gh-103193: 提高 inspect.getattr_static() 的性能。由Alex Waygood提交的补丁。

  • gh-103176: sys._current_exceptions() 现在返回一个从线程ID到异常实例的映射,而不是一个 (typ, exc, tb) 元组。

  • gh-103143: 对 pdb 的帮助信息和文档字符串进行了润色。

  • gh-103015: 向 sqlite3.Connection.load_extension() 添加了仅关键字参数 entrypoint,用于覆盖SQLite扩展的入口点。由Erlend E. Aasland提供补丁。

  • gh-103000: 提高了 dataclasses.astuple()dataclasses.asdict() 在内容为常见Python类型时的性能。

  • gh-102953: tarfile 中的提取方法,以及 shutil.unpack_archive(),新增了一个 filter 参数,允许限制可能令人惊讶或危险的tar特性,例如在目标目录之外创建文件。详情请见 解压缩过滤器

  • gh-97696: 在asyncio中实现了一个急切的任务工厂。当用作事件循环上的任务工厂时,它执行协程的急切执行。能够同步完成的协程(例如,在不阻塞的情况下返回或引发)立即作为已完成的任务返回,并且任务永远不会被调度到事件循环。如果协程阻塞,则(待定的)任务被调度并返回。

  • gh-81079: 向 pathlib.Path.glob()rglob() 添加了仅关键字参数 case_sensitive

  • gh-101819: 通过应用 PEP 687 隔离了 io 扩展模块。由Kumar Aditya、Victor Stinner和Erlend E. Aasland提供补丁。

  • gh-91896: 弃用 collections.abc.ByteString

  • gh-101362: 通过从内部路径部分列表中省略路径锚点,加快了 pathlib.Path 的构建速度。

  • gh-102114: dis 模块中接受源代码字符串作为参数的函数现在在字符串包含语法或缩进错误时打印更简洁的回溯信息。

  • gh-62432: 现在,如果未运行任何测试,unittest 运行器将以状态码5退出。测试运行器配置错误导致找不到任何测试是常见情况,这应该被视为错误。

  • gh-78079: 修复了在 pathlib.PurePath 中对 UNC 设备路径根和部分 UNC 共享路径根的错误标准化问题。Pathlib 不再为此类路径添加尾部斜杠。

  • gh-85984: 在 tty 中添加了 tty.cfmakeraw()tty.cfmakecbreak() 函数,并现代化了 tty.setraw()tty.setcbreak() 的行为,默认使用 POSIX.1-2017 第11章“通用终端接口”的标志掩码。

  • gh-101688: 实现了 types.get_original_bases() 以提供对类型的进一步内省。

  • gh-101640: argparse.ArgumentParser 现在会在写入消息时捕获错误,例如当 sys.stderrNone 时。由 Oleg Iarygin 提供的补丁。

  • gh-83861: 修复了当在一个表示本地时间落入时区转换间隙的原始 datetime 实例上调用 datetime.astimezone 方法时的返回值问题。PEP 495 要求在这种情况下,fold=1 的实例产生的时间早于 fold=0 的实例。

  • gh-89550: 通过添加更合适的缓冲,将某些 gzip 文件写入的执行时间减少了15%。

  • gh-95299: 从 ensurepip 中移除捆绑的 setuptools wheel,并停止在由 venv 创建的环境中安装 setuptools。

  • gh-99353: 在 urllib.request.AbstractHTTPHandler 中,当其构造参数 debuglevel 未设置时,尊重 http.client.HTTPConnection.debuglevel 标志。并对 *HTTPS* 执行相同的操作。

  • gh-98040: 移除了长期弃用的 imp 模块。

  • gh-97850: 弃用 pkgutil.find_loader()pkgutil.get_loader(),推荐使用 importlib.util.find_spec()

  • gh-94473: 在 tkinter.Canvas.coords() 中展平参数。现在它不仅接受 x1, y1, x2, y2, ...[x1, y1, x2, y2, ...],还接受 (x1, y1), (x2, y2), ...[(x1, y1), (x2, y2), ...]

  • gh-98040: 移除更多已弃用的 importlib API:find_loader()find_module()importlib.abc.Finderpkgutil.ImpImporterpkgutil.ImpLoader

  • gh-96522: 修复 pty.spawn() 中潜在的僵局问题。

  • gh-96534: 支持 FreeBSD 14 中添加的 divert(4)。

  • gh-87474: 修复 subprocess.Popen 中潜在的文件描述符泄露问题。

  • gh-94906: 在 math.nextafter() 中支持多步操作。由 Shantanu Jain 和 Matthias Gorgens 提供补丁。

  • gh-51574: 使 tempfile.mkdtemp() 在其 dir 参数为相对路径时返回绝对路径。

  • gh-94518: 将私有的 _posixsubprocess.fork_exec() 转换为使用 Argument Clinic。

  • gh-92184: 使用 zipfile 创建 zip 文件时,os.altsep 如果不为 None,即使它不是 /,也将始终被视为路径分隔符。由 Carey Metcalfe 提供补丁。

  • bpo-46797: 现在为 ast.Numast.Bytesast.Strast.NameConstantast.Ellipsis 发出弃用警告。这些自 Python 3.8 起已被记录为弃用,并将在 Python 3.14 中移除。

  • bpo-44844: 使 webbrowser 能够检测并启动 Microsoft Edge 浏览器。

  • bpo-45606: 修复了 pathlib.Path.glob() 中的 bug —— 之前当模式完全匹配时,此方法不会找到悬空符号链接,但当模式包含通配符或递归通配符(**)时会找到。通过此更改,悬空符号链接在这两种情况下都将被找到。

  • bpo-23041: 在 csv 模块的引用风格套件中添加 QUOTE_STRINGSQUOTE_NOTNULL

  • bpo-24964: 添加了 http.client.HTTPConnection.get_proxy_response_headers(),提供了对代理服务器响应 CONNECT 请求的HTTP头信息的访问。

  • bpo-17258: multiprocessing 现在支持更强的HMAC算法用于进程间连接认证,而不仅仅是HMAC-MD5。

  • bpo-39744: 使得 asyncio.subprocess.Process.communicate() 即使在调用时``input=None``也会关闭子进程的stdin。

  • bpo-22708: http.client CONNECT 方法隧道改进:使用HTTP 1.1协议;如果没有提供,发送一个匹配的Host:头部与CONNECT;将IDN域名转换为Punycode。由Michael Handler提供补丁。

文档

  • gh-67056: 文档说明从已注册的清理函数内部注册或注销一个 atexit 清理函数的效果是未定义的。

  • gh-103629: 提到在 PEP 692 中引入的使用 UnpackTypedDict 键入 **kwargs 的新方法。

  • gh-48241: 澄清关于urllib.request.urlopen和urllib.request.Request的url参数需要正确编码的文档。

  • gh-86094: 在ZipFile中添加对Unicode路径额外字段的支持。由Yeojin Kim和Andrea Giudiceandrea提供补丁。

  • gh-99202: 修复文档中关于在C++20模式下编译的扩展类型。

测试

  • gh-104494: 更新 test_pack_configure_intest_place_configure_in 以适应Tk 8.7中错误消息格式的变化。

  • gh-104461: 仅在X11上运行test_configure_screen,因为 DISPLAY 环境变量和toplevels的``-screen``选项在Win32或Aqua的Tk上没有用。

  • gh-86275: 向 zoneinfo 测试中添加了基于属性的测试,以及 hypothesis 接口的存根。(由Paul Ganssle提供补丁)

  • gh-103329: 添加了对 unittest.mock.PropertyMock 行为的回归测试。

  • gh-102795: 修复了test_epoll的test_control_and_wait中对poll的使用。

  • gh-75729: 修复了当工作目录或解释器路径包含空格时,Windows 上 os.spawn* 测试失败的问题。

构建

  • gh-101282: 如果构建共享库,现在会对 libpython 共享库应用 BOLT 优化。现在可以通过 BOLT_INSTRUMENT_FLAGSBOLT_APPLY_FLAGS 配置变量来影响 BOLT 仪器化和应用设置。

  • gh-99017: PYTHON_FOR_REGEN 现在需要 Python 3.10 或更新版本。

  • gh-104490: 一致且正确定义 .PHONY / 虚拟 make 目标。

  • gh-104106: 为 macOS 添加 mkfifoat/mknodat 的 gcc 回退。由 Donghee Na 提供补丁。

  • gh-103532: _tkinter 模块中不再定义或使用 TKINTER_PROTECT_LOADTK 宏。之前仅在针对 Tk 8.4.13 及更早版本构建时定义,但自 gh-91152 以来,早于 8.5.12 的 Tk 已不受支持。

  • gh-99069: 扩展了当 libc 头文件中缺少 static_assert 时的解决方法,适用于所有 clang 和 gcc 构建。特别是,这修复了在 macOS <= 10.10 上的构建问题。

  • gh-100220: 将 SHELL Makefile 变量的默认值从 /bin/sh 更改为 /bin/sh -e,以确保复杂示例代码在出错后正确失败。以前,make install 可能会安装失败一些文件但仍返回成功结果。

  • gh-90656: 为 64 位龙芯架构添加平台三元组:

    • loongarch64-linux-gnusf

    • loongarch64-linux-gnuf32

    • loongarch64-linux-gnu

    由张纳提供补丁。

Windows

  • gh-104623: 更新 Windows 安装程序以使用 SQLite 3.42.0。

  • gh-82814: 通过在内置实现中将 errno.EACCES 添加到忽略错误列表中,修复了在 Windows Subsystem for Linux (WSL) 挂载的文件系统上使用 shutil.copystat() 时可能出现的 [Errno 13] Permission denied 错误。

  • gh-103088: 修复了 Cygwin 中虚拟环境 activate 脚本的行尾不正确的问题。

  • gh-103088: 修复了 Windows 上不同磁盘间 bash 中 venvs 无法工作的问题

  • gh-102997: 更新 Windows 安装程序以使用 SQLite 3.41.2。

  • gh-88013: 修复了在某些情况下调用 ntpath.realpath() 时传入 bytes 参数会引发 TypeError 的 bug。

macOS

  • gh-99834: 将 macOS 安装程序更新至 Tcl/Tk 8.6.13。

  • gh-104623: 将 macOS 安装程序更新至 SQLite 3.42.0。

  • gh-103545: 添加 os.PRIO_DARWIN_THREADos.PRIO_DARWIN_PROCESSos.PRIO_DARWIN_BGos.PRIO_DARWIN_NONUI。这些可以与 os.setpriority 一起使用,以较低优先级运行进程并利用 Apple Silicon 系统的效率核心。

  • gh-104180: 支持从 macOS 系统配置中读取 SOCKS 代理配置。由 Sam Schott 提供补丁。

  • gh-60436: 更新 curses textbox 以额外处理使用 curses.ascii.DEL 按键的回退。

  • gh-102997: 将 macOS 安装程序更新至 SQLite 3.41.2。

IDLE

  • gh-104499: 修复 Tk Aqua 8.7 的补全功能(当前为空白)。

  • gh-104496: About 现在会打印 tcl 和 tk 的版本(如果不同)(预期某天会实现)。

  • gh-88496: 修复 macOS 上的 IDLE 测试挂起问题。

工具/示例

  • gh-104389: Argument Clinic C 转换器现在接受 unused 关键字,用于用 Py_UNUSED 包装参数。由 Erlend E. Aasland 提供补丁。

C API

Python 3.12.0 alpha 7

发布日期:2023-04-04

核心与内置函数

  • gh-102192: 弃用 _PyErr_ChainExceptions,推荐使用 _PyErr_ChainExceptions1

  • gh-89987: 减少 BINARY_SUBSCR 的内联 CACHE 条目数量。

  • gh-102859: 移除了 JUMP_IF_FALSE_OR_POPJUMP_IF_TRUE_OR_POP 指令。

  • gh-101975: 修复了跟踪条目上的 stacktop 值,以避免垃圾收集时的损坏。

  • gh-102778: 添加 sys.last_exc 并弃用 sys.last_typesys.last_valuesys.last_traceback,这些以旧形式保存相同的信息。

  • gh-100982: 将所有 COMPARE_AND_BRANCH 出现替换为 COMPARE_OP

  • gh-102701: 修复创建非常大的字典时的溢出问题。

  • gh-102755: 添加 PyErr_DisplayException(),它仅接受一个异常实例,以替代接受 (typ, exc, tb) 三元组的旧版 PyErr_Display()

  • gh-102594: 在 PyErr_SetObject 中当规范化失败时添加引发异常的注释。

  • gh-90997: 缩小 LOAD_GLOBAL 使用的内联 CACHE 条目数量。

  • gh-102491: 通过移除 IronPython 版本解析提高 platform 的导入时间。IronPython 版本解析功能无效(参见 https://github.com/IronLanguages/ironpython3/issues/1667)。

  • gh-101291: 重新排列 PyLongObject 第一个字段(头部之后)的位。* 位 0 和 1:1 - 符号。即 0 表示正数,1 表示零,2 表示负数。* 位 2 保留(可能用于 immortal 位)* 位 3+ 无符号大小。

    这使得一些操作稍微更高效,并且将在未来为大多数整数启用更紧凑和更快的 2s 补码表示。

  • gh-102397: 修复垃圾收集过程中信号处理竞争条件导致的段错误。由 Kumar Aditya 提供补丁。

  • gh-102406: codecs 编码/解码错误现在将上下文信息(哪个操作和哪个编解码器)作为 PEP 678 注释附加,而不是通过链接一个新的异常实例。

  • gh-102281: 修复fileutils中潜在的nullptr解引用和未初始化内存使用问题。由Max Bachmann提交补丁。

  • gh-102300: 在BINARY_OP的浮点特化中重用引用计数为1的操作数。

  • gh-102213: 修复了在访问定义了 __getattr__ 的对象属性时的性能损失。

  • gh-102255: 改进对Xbox的构建支持。由Max Bachmann提交补丁。

  • gh-102027: 修复 _blake2 内部模块中的SSE2和SSE3检测。由Max Bachmann提交补丁。

  • gh-101865: 弃用代码对象中的 co_lnotab,计划在Python 3.14中移除。

  • bpo-1635741: 使 _pickle 适应 PEP 687。由Mohamed Koubaa和Erlend Aasland提交补丁。

文档

测试

  • gh-102980: 提高了 pdb 的测试覆盖率。

  • gh-102537: 调整了 test_zoneinfo.TzPathTest.python_tzpath_context 中的错误处理策略。由 Paul Ganssle 提供补丁。

  • gh-101377: 改进了 calendar 的 test_locale_calendar_formatweekday。

构建

  • gh-102973: 添加一个开发容器(连同附带的Dockerfile)用于开发目的。

  • gh-102711: 修复 -Wstrict-prototypes 编译器警告。

Windows

  • gh-102690: 更新 webbrowser 以回退到 Microsoft Edge 而不是 Internet Explorer。

  • gh-99726: 提高 Windows 上统计结果的正确性,并在可用时使用更快的 API。

工具/示例

C API

  • gh-102013: 添加一个新的(不稳定的)C-API 函数,用于使用回调遍历可 GC 对象:PyUnstable_VisitObjects

Python 3.12.0 alpha 6

发布日期: 2023-03-07

安全性

  • gh-99108: 用来自 HACL* 项目的已验证实现替换内置的 MD5 和 SHA1 哈希库实现。

  • gh-101727: 将 Windows 和 macOS 二进制发布构建中使用的 OpenSSL 版本更新至 1.1.1t,以解决 CVE 2023-0286CVE 2022-4303CVE 2022-4303,根据 OpenSSL 2023-02-07 安全公告

  • gh-99108: 用来自 HACL* 项目的正式验证、抗侧信道攻击的代码替换内置的 hashlib 中原本来自 LibTomCrypt 的 SHA2-384 和 SHA2-512 实现。内置实现仅在 OpenSSL 不提供时才作为后备使用。

  • gh-101283: subprocess.Popen 现在使用更安全的方法在 shell=True 启动时查找 cmd.exe。由 Eryk Sun 基于 Oleg Iarygin 的补丁提供补丁。

核心与内置函数

  • gh-102493: 修复 PyErr_SetObject 中标准化语义的回归。

  • gh-102416: 不记忆解析器中自动生成的错误循环规则。由 Pablo Galindo 提供补丁。

  • gh-102356: 修复了一个在释放深度嵌套的过滤器对象时导致崩溃的 bug。由 Marta Gómez Macías 提供补丁。

  • gh-102336: 清理 Windows 7 特定的特殊处理。由 Max Bachmann 提供补丁。

  • gh-102250: 修复了当解释器调用引发异常的 __bool__ 方法时发生的段错误。

  • gh-102126: 修复在关闭时清除线程状态时如果任何终结器尝试获取运行时头锁导致的死锁。由Kumar Aditya提供补丁。

  • gh-102027: 在Windows上 getpid 不可用时使用 GetCurrentProcessId。由Max Bachmann提供补丁。

  • gh-102056: 修复解释器异常打印代码中的错误处理漏洞,该漏洞可能在无限递归时导致崩溃。

  • gh-100982: 限制 FOR_ITER_RANGE 指令的范围到原始 FOR_ITER 指令的范围,以允许插桩。

  • gh-101967: 修复在 positional_only_passed_as_keyword 函数中创建新列表时可能发生的段错误。

  • gh-101952: 修复在 BUILD_SET 操作码创建新集合时可能发生的段错误。

  • gh-74895: socket.getaddrinfo 不再为超出C long范围的 int **port**值抛出 OverflowError。超出范围的值将由底层的基于字符串的C库API报告。可能会出现 socket.gaierror SAI_SERVICE,或者根本没有错误,因为并非所有平台的C库都会生成错误。

  • gh-101799: 添加 CALL_INTRINSIC_2 并用其替代 PREP_RERAISE_STAR

  • gh-101857: 通过将检查范围扩大到linux而不仅仅是glibc来修复Linux系统上的xattr支持检测。这修复了对musl的支持。

  • gh-84783: 使切片对象可哈希。由Will Bradshaw和Furkan Onder提供补丁。

  • gh-87849: 更改 SEND 指令以将接收者留在堆栈上。这允许 SEND 的特殊形式跳过C调用链并直接跳转到生成器或协程中的 RESUME

  • gh-101765: 修复在迭代 __reduce__ 中当 builtins.__dict__ 键的内部访问改变迭代对象时的SystemError / 段错误。

  • gh-101430: 更新 tracemalloc 以正确处理对象的预大小。由Donghee Na提供补丁。

  • gh-101696: 在 _PyStaticType_Dealloc 中使静态类型的类型版本标签无效,避免因虚假缓存命中导致解释器崩溃的错误。由 Kumar Aditya 提供补丁。

  • gh-101632: 添加一个新的 RETURN_CONST 指令。

  • gh-100719: 从生成器(以及协程和异步生成器)对象中移除 gi_code 字段,因为它是多余的。框架已经包含了对代码对象的引用。

  • gh-98627: 当解释器配置为检查时(且仅在那时),导入扩展模块现在会在扩展不支持多解释器(即未实现 PEP 489 多阶段初始化)时失败。这不适用于主解释器,也不适用于使用 Py_NewInterpreter() 创建的子解释器。

文档

测试

  • gh-102019: 修复如果 test_current_{exception,frames} 失败时在关闭时的死锁。由Jacob Bower提供补丁。

  • gh-85984: 在pty测试中利用termios的新“winsize”函数。

  • gh-89792: test_tools 现在在 freeze 测试期间通过忽略git元数据和其他工件,将源数据复制到临时目录的数量减少了10倍。它还基于os.cpu_count而不是硬编码为8核心来限制其Python构建并行性。

构建

  • gh-99942: 在Android上,静态构建中,embed模式的python-config不再错误地报告要链接的库。

  • gh-99942: 在Android上,python.pc现在正确地报告要链接的库,与python-config.sh相同。

  • gh-100221: 修复如果安装目录在 DESTDIR 之外已经存在时,make sharedinstall 创建安装目录的问题。

  • gh-96821: 明确标记需要定义有符号整数溢出的C扩展模块,并添加一个配置选项 --with-strict-overflow。由Matthias Görgens和Shantanu Jain提供补丁。

Windows

  • gh-102344: 使用 QueryValueEx``实现 ``winreg.QueryValue 和使用 SetValueEx 实现``winreg.SetValue``。由Max Bachmann提供补丁。

  • gh-101881: 在Windows上正确处理非阻塞管道的读写操作。

  • gh-101881: 在Windows上添加对os.get_blocking()和os.set_blocking()函数的支持。

  • gh-101849: 确保安装程序能够正确升级现有的 py.exe 启动器安装。

  • gh-101763: 更新Windows安装包中捆绑的libffi版本至3.4.4。

  • gh-101759: 更新Windows安装程序中的SQLite至3.40.1版本。

  • gh-101614: 正确处理引用 python3_d.dll 的调试二进制文件构建的扩展。

  • gh-101196: 通过减少Win32 API调用,Windows上的函数 os.path.isdiros.path.isfileos.path.islink``和 ``os.path.exists 现在快了13%到28%。

macOS

  • gh-101759: 更新macOS安装程序中的SQLite至3.40.1版本。

C API

Python 3.12.0 alpha 5

发布日期:2023-02-07

安全性

  • gh-99108: 将内置的 hashlib 中最初来自LibTomCrypt的SHA2-224和SHA2-256实现替换为来自`HACL* <https://github.com/hacl-star/hacl-star/>`_项目的经过正式验证、抗侧信道攻击的代码。内置实现仅在OpenSSL不提供这些功能时作为备用方案使用。

核心与内置函数

  • gh-92173: 修复 PyEval_EvalCodeEx() 中的 defskwdefs 参数以及该函数中的引用泄漏问题。

  • gh-59956: GILState API 现在部分兼容子解释器。之前,PyThreadState_GET()PyGILState_GetThisThreadState() 会不同步,导致不一致的行为和崩溃。

  • gh-101400: 修复不在循环中的 continuebreak 异常消息中的错误行号。由 Donghee Na 提供补丁。

  • gh-101372: 修复 is_normalized() 以正确处理 UCD 3.2.0 的情况。由 Donghee Na 提供补丁。

  • gh-101266: 修复 sys.getsizeof()int 子类的报告。

  • gh-101291: 将 PyLongObject 结构重构为一个普通的 Python 对象头和一个 PyLongValue 结构。

  • gh-101046: 修复解析器在引发 MemoryError 时可能的内存泄漏。由 Pablo Galindo 提供补丁。

  • gh-101037: 修复值为零的 int 子类实例可能的内存分配不足问题。

  • gh-100762: 在 YIELD_VALUE 的 oparg 中记录(虚拟)异常块深度。使用这一点来避免在关闭可以轻松关闭的生成器(和协程)时昂贵的 throw()

  • gh-100982: 添加了一个新的 COMPARE_AND_BRANCH 指令。在执行比较紧接着分支时效率更高,恢复了 PEP 659 的设计意图,即特化限于单个指令。

  • gh-100942: 修复了当属性子类覆盖 __new__ 方法以返回非属性实例时,在 property.getter/setter/deleter 中发生的段错误。

  • gh-100923: 移除 COMPARE_OP 指令的 mask 缓存条目,并将掩码嵌入到 oparg 中。

  • gh-100892: 修复在清除 threading.local 时迭代线程状态的竞争。由 Kumar Aditya 提供补丁。

  • gh-91351: 修复了一个案例,其中可重入的导入可能会破坏导入死锁检测代码,并导致从 importlib/_bootstrap 中抛出 KeyError。除了直接的情况外,当垃圾收集导致发出警告时也可能发生这种情况——就像它收集一个打开的套接字或文件时发生的那样。

  • gh-100726: 优化中等大小整数的 range 对象构造。

  • gh-100712: 添加了通过设置 opcode 中的 ENABLE_SPECIALIZATION=False,然后执行 make regen-all 来禁用专业化构建 cpython 的选项。

  • bpo-32780: 现在将从 ctypes.Structure 对象获得的 PEP3118 格式字符串中插入字段间填充,反映它们在内存中的真实表示。

  • gh-101541: [Enum] - 修复伪标志创建。

  • gh-101570: 升级与 ensurepip 捆绑的 pip wheel(pip 23.0)。

  • gh-101323: 修复了一个错误,其中如果在解压缩过程中遇到错误,zlib._ZlibDecompressor 不会抛出错误。

  • gh-101317: 为 asyncio.StreamWriter.start_tls() 添加了 ssl_shutdown_timeout 参数。

  • gh-101326: 修复了在将 None 作为第二个或第三个参数传递给 FutureIter.throw 时的回归问题。

  • gh-92123: 使 _elementtree 扩展模块适应多阶段初始化 (PEP 489)。由 Erlend E. Aasland 提供补丁。

  • gh-100795: Avoid potential unexpected freeaddrinfo call (double free) in socket when a libc getaddrinfo() implementation leaves garbage in an output pointer when returning an error. Original patch by Sergey G. Brester.

  • gh-101143: 在 asyncio.base_events.BaseEventLoop._add_callback 中移除对 TimerHandle 的未使用引用。

  • gh-101144: 使 zipfile.Path.open()zipfile.Path.read_text() 也接受 encoding 作为位置参数。这是 Python 3.9 及更早版本的行为。3.10 引入了回归,将其作为位置参数提供会导致 TypeError

  • gh-94518: _posixsubprocess 模块中与组相关的变量被重命名,以强调补充组亲和性是被添加到 fork 中,而不是替换继承的组。由 Oleg Iarygin 提供补丁。

  • gh-101015: 修复 typing.get_type_hints()'*tuple[...]'*tuple[...] 上的问题。它不应该丢弃 Unpack 部分。

  • gh-101000: 添加 os.path.splitroot(),它将路径分割成一个 3 元组 (drive, root, tail)。这个新函数被 pathlib 用于将路径构建的性能提高多达三分之一。

  • gh-100573: 修复 Windows 上 asyncio 的一个关于命名管道的 bug,其中客户端对管道执行 os.stat() 会导致服务器中禁用未来请求服务的错误。

  • gh-39615: warnings.warn() 现在能够基于代码文件名前缀跳过堆栈帧,而不仅仅是通过新的 skip_file_prefixes 关键字参数跳过数字 stacklevel

  • gh-100750: 在平台中将 encoding 关键字参数传递给子进程

  • gh-100160: 如果没有设置当前事件循环并且决定创建一个,则在 asyncio.DefaultEventLoopPolicy.get_event_loop() 中发出弃用警告。

  • gh-96290: 修复 ntpath.splitdrive() 中部分和无效 UNC 驱动器的处理,以及在非 Windows 系统上的 ntpath.normpath()。现在 splitdrive() 认为诸如 '\server' 和 '\' 的路径仅包含驱动器,因此在非 Windows 系统上不会被 normpath() 修改。Windows 系统上 normpath() 的行为不受影响,因为使用的是原生 OS API。由 Eryk Sun 提供补丁,Barney Gale 有贡献。

  • gh-99952: 修复 ctypes.Structurefrom_param() 结果大于 C 指针时的引用计数不足问题。

  • gh-67790: 为 fractions.Fraction 实例添加浮点样式格式化支持。

  • gh-99266: 在 ctypes 中保留更详细的错误消息。

  • gh-86682: 使用新增的(内部)函数 sys._getframemodulename() 确保运行时创建的集合具有正确的模块名称。

  • gh-88597: uuid 现在有了命令行界面。尝试 python -m uuid -h

  • gh-60580: ctypes.wintypes.BYTE 的定义从 c_byte 改为 c_ubyte 以匹配 Windows SDK。由 Anatoly Techtonik 和 Oleg Iarygin 提供补丁。

  • gh-94518: _posixsubprocess 现在使用保留的 -1 值初始化所有 UID 和 GID 变量,而不是使用单独的标志。由 Oleg Iarygin 提供补丁。

  • bpo-38941: xml.etree.ElementTree 模块现在在测试 xml.etree.ElementTree.Element 的真值时发出 DeprecationWarning。之前,Python 实现发出 FutureWarning,而 C 实现没有发出任何警告。

  • bpo-40077: 将 elementtree 类型转换为堆类型。由 Erlend E. Aasland 提供补丁。

  • bpo-29847: 修复了 pathlib.Path 接受并忽略关键字参数的 bug。由 Yurii Karabas 提供补丁。

  • gh-77772: ctypes.CDLLctypes.OleDLLctypes.WinDLLctypes.PyDLL 现在接受 路径类对象 作为它们的 name 参数。由 Robert Hoelzl 提供补丁。

文档

  • gh-88324: 重写 subprocess 以强调 stdinstdoutstderr 参数的默认行为。移除关于子进程文件句柄继承的不准确陈述。

测试

  • gh-101334: test_tarfile 已更新,以便在高 UID 下运行时通过。

构建

  • gh-101282: 更新 BOLT 配置,不再使用已弃用的 --split functions 用法。由 Donghee Na 提供补丁。

  • gh-101522: 允许使用 MSBuild 属性覆盖 Windows 依赖项的版本和路径。

  • gh-77532: 小修小补以允许在 Windows 上使用 PlatformToolset=ClangCL 构建。

  • gh-101152: 根据 PEP 699PyDictObject 中的 ma_version_tag 字段对扩展模块已弃用。访问此字段将在编译时生成编译器警告。此字段将在 Python 3.14 中移除。

  • gh-100340: 允许 wasm-sdk 17 及更高版本使用 -Wno-int-conversion,从而能够针对最新 sdk 构建 WASI 构建。

  • gh-101060: 在配置中有条件地添加 -fno-reorder-blocks-and-partition。有效修复了使用 Clang 时的 --enable-bolt,因为这似乎是一个仅 GCC 的标志。

  • gh-98705: AIX 系统头文件中定义了 __bool__,这会破坏 AIX 中的构建,因此取消定义它。

  • gh-98636: 修复了为 _gdbm 模块构建检测 gdbm_compat 库时的回归。

  • gh-96305: _aix_support 现在使用简单的代码来获取平台详情,而不是在引导过程中使用现在不存在的 _bootsubprocess

Windows

  • gh-101543: 确保注册表中的安装路径仅在标准库尚未通过任何其他方式定位时使用。

  • gh-101467: py.exe 启动器现在在仅安装单个运行时正确过滤。它还正确处理标签上的前缀匹配,以便 -3.1 不匹配 3.11,但仍然匹配 3.1-32

  • gh-99834: 更新捆绑的 Tcl/Tk 到 8.6.13.0

  • gh-101135: 恢复从 py.exe 启动器启动旧版 32 位版本的能力,当同一版本的 32 位和 64 位安装都可用时。

  • gh-82052: 修复了向控制台屏幕一次性写入超过 32K Unicode 输出可能导致乱码的问题。

  • gh-100320: 确保在从依赖现有安装提供其模块和标准库副本的不同 Python 副本启动时,使用安装中的 PythonPath 注册表键。

  • gh-100247: 恢复对 py.exe 启动器在其配置文件中使用完整命令名查找 shebang 命令的支持。

Python 3.12.0 alpha 4

发布日期:2023-01-10

核心与内置函数

  • gh-100776: 修正了 input()__text_signature__ 中误导性的默认值。

  • gh-99005: 移除 UNARY_POSITIVEASYNC_GEN_WRAPLIST_TO_TUPLE,用内建函数替代它们。

  • gh-99005: 新增 CALL_INTRINSIC_1 指令。移除 IMPORT_STARPRINT_EXPRSTOPITERATION_ERROR,用 CALL_INTRINSIC_1 指令替代它们。

  • gh-100288: 移除LOAD_ATTR_METHOD_WITH_DICT专用指令。统计显示它没有用处。

  • gh-100720: 添加了 _PyFrame_NumSlotsForCodeObject,它返回一个给定代码对象在帧中所需的槽位数量。

  • gh-100719: 从代码对象中移除了co_nplaincellvars字段,因为它是冗余的。

  • gh-100637: 修正 int.__sizeof__() 的计算,以包括 0False 的1元素 ``ob_digit``数组。

  • gh-100649: 在fork后更新PyThreadState的native_thread_id字段。

  • gh-100126: 修复了一个问题,即在其他帧被销毁时,“不完整”帧可能会短暂地对C代码可见,可能导致解释器在运行终结器时损坏或硬崩溃。

  • gh-87447: 修复了在理解重新绑定检查中,对实际上未重新定义的名称抛出 SyntaxError 的问题。

    现在在 [(b := 1) for a, b.prop in some_iter] 中重新分配 b 是被允许的。根据 PEP 572,重新分配 a 仍然不被允许。

  • gh-100268: 添加 int.is_integer() 以提高 intfloat 之间的鸭子类型兼容性。

  • gh-100425: 通过补偿求和提高了 sum() 的准确性。

  • gh-100374: 修正了 socket.getfqdn() 的错误结果和延迟。由Dominic Socular提供的补丁。

  • gh-100357: 将 varsdirnextgetattriter 转换为参数诊所。

  • gh-100117: 通过为每个行范围只发出一个条目来改进 codeobject.co_lines() 的输出。

  • gh-90043: 在专门为 float 值设计 COMPARE_OP 时处理 NaNs。

  • gh-100222: 将 _Py_CODEUNIT 类型定义重新定义为联合体,以描述其布局给 C 编译器,避免类型双关并提高清晰度。

  • gh-99955: 内部编译器函数(在 compile.c 中)现在一致地在错误时返回 -1,成功时返回 0。

  • gh-100188: BINARY_SUBSCR_LIST_INTBINARY_SUBSCR_TUPLE_INT 指令不再用于负整数,因为这些指令在遇到负整数时总是失败。

  • gh-99110: 在 frameobject.c 中初始化 frame->previous,以修复访问由 PyFrame_New() 创建的帧时的段错误。

  • gh-94155: 改进了代码对象的哈希算法,缓解了一些哈希冲突。

  • gh-99540: None 现在哈希为一个常数值。这不是需求变更。

  • gh-100143: 当使用 --enable-pystats 构建时,统计收集现在默认关闭。要在启动时早期启用它,请传递 -Xpystats 标志。即使关闭,统计信息现在也会被转储。

  • gh-100146: 改进 BUILD_LIST 操作码,使其工作方式类似于 BUILD_TUPLE 操作码,通过从堆栈中窃取引用而不是重复使用堆栈操作来设置列表元素。实现细节在一个新的私有 API _PyList_FromArraySteal() 中。

  • gh-100110: 为元组专门设计 FOR_ITER

  • gh-100050: 在标记器中搜索不匹配的括号时,尊重现有的错误。由 Pablo Galindo 提供补丁

  • gh-92216: 提高 hasattr() 对于缺少属性的类型对象的性能。

  • gh-99582: 将 zipimport 模块冻结到 _bootstrap_python 中。

  • gh-99554: 在字节码编译期间更高效地打包调试位置表。

  • gh-98522: 向代码对象添加内部版本号,以便更好地对内部函数和推导式进行版本控制,从而更好地特化这些函数。这一变化对Python和C扩展都是不可见的。

  • gh-94603: 提高小列表的 list.pop 性能。

  • gh-89051: 添加 ssl.OP_LEGACY_SERVER_CONNECT

  • bpo-32782: 从 ctypes 长度为0的数组构建 memoryview 时,现在会报告正确的itemsize,而不是总是给出0的值。

文档

测试

  • gh-100454: 开始使用 OpenSSL 3.1.0-beta1 运行 SSL 测试。

  • gh-100086: Python 测试运行器 (libregrtest) 现在会记录 Python 构建信息,如“debug”与“release”构建,或 LTO 和 PGO 优化。由 Victor Stinner 提供补丁。

  • gh-93018: 对应用了回溯安全修复的主机系统 libexpat 进行两项测试的宽容处理。

构建

  • gh-100540: 移除了 configure 选项 --with-system-ffi;现在在所有非 Windows 平台上,libffi 必须始终由系统提供。该选项在非 Darwin 平台上多个版本以来已无效果,而在 3.11 版本中仅有一个不明显的作用,即调用 pkg-config 来查找 libffi 且从未设置 -DUSING_APPLE_OS_LIBFFI。现在在 Darwin 平台上,configure 将首先检查操作系统 libffi,如果未找到,则回退到与其他平台相同的处理方式。

  • gh-88267: 当核心作为静态构建时,避免在链接的 Windows 应用程序中导出 Python 符号。

  • bpo-41916: 允许覆盖 ac_cv_cxx_thread,以便交叉编译的 Python 可以为 CXX 设置 -pthread。

Windows

  • gh-100180: 将 Windows 安装程序更新至 OpenSSL 1.1.1s。

  • gh-99191: 在 PC/_wmimodule.cpp 中使用 _MSVC_LANG >= 202002L 而不是不太精确的 _MSC_VER >=1929 来更准确地测试 C++20 支持。

  • gh-79218: 为 Mingw-w64 64bit 定义 MS_WIN64,修复 cython 编译失败。

  • gh-99941: 确保 asyncio.Protocol.data_received() 接收一个不可变的 bytes 对象(如文档所述),而不是 bytearray

  • bpo-43984: 现在,winreg.SetValueEx() 在转换错误的情况下会保持目标值不变。此前,此类错误会写入 -1

  • bpo-34816: 现在,hasattr(ctypes.windll, 'nonexistant') 返回 False 而不是抛出 OSError

macOS

  • gh-100180: 将 macOS 安装程序更新至 OpenSSL 1.1.1s

  • gh-100540: 从 _ctypes 扩展模块中移除了自 Mac OS X 10.2 起就不再必要的过时 dlfcn.h 垫片。

工具/示例

  • bpo-45256: 修复了一个在 python-gdb.py 中当 py-locals 在没有帧的情况下使用时会导致抛出 AttributeError 的 bug。

  • gh-100342: 在 Argument Clinic 的 *args 解析中添加了对可能分配失败的缺失 NULL 检查。

C API

  • gh-99947: 现在,导入时引发的 SystemError 的原因会被设置为原始的意外异常。

  • gh-99240: 在参数解析中,释放新分配的内存后,将其指针重置为 NULL。

  • gh-98724: 现在,Py_CLEARPy_SETREFPy_XSETREF 宏只对它们的参数求值一次。如果参数有副作用,这些副作用不再被重复。由 Victor Stinner 提供补丁。

Python 3.12.0 alpha 3

发布日期:2022-12-06

安全性

  • gh-100001: python -m http.server 不再允许垃圾请求中发送的终端控制字符被打印到 stderr 服务器日志中。

    这是通过更改 http.server BaseHTTPRequestHandler.log_message 方法实现的,该方法在打印之前将控制字符替换为 \xHH 十六进制转义。

  • gh-87604: 避免通过 gc 模块发布每个解释器的活动审计钩子列表

核心与内置函数

  • gh-99891: 修复了分词器中的一个 bug,该 bug 在显示源代码第一行发生的语法警告时可能导致无限递归。由 Pablo Galindo 提供补丁。

  • gh-91054: 添加 PyCode_AddWatcher()PyCode_ClearWatcher() API,用于注册回调以接收代码对象创建和销毁的通知。

  • gh-99729: 修复一个问题,该问题可能导致帧在销毁时对 Python 代码可见,可能引发内存损坏或解释器硬崩溃。

  • gh-99708: 修复编译器在遇到空体块的 if 表达式时崩溃的 bug。

  • gh-99578: 修复 _imp.create_builtin() 在第一个子解释器为模块 builtinssys 创建后的引用 bug。由 Victor Stinner 提供补丁。

  • gh-99581: 修复了一个 bug,该 bug 会在标记器从文件中复制缺少换行符且长度与可用标记器缓冲区相同的行时导致缓冲区溢出。由 Pablo Galindo 提供补丁。

  • gh-99553: 修复 ExceptionGroup 子类可以包装 BaseException 的 bug。

  • gh-99547: 在 os.path 中添加一个函数来检查路径是否为连接点:isjunction。在 pathlib.Path 中添加类似功能作为 is_junction。

  • gh-99370: 为从非安装的 python 在 POSIX 平台上创建的 venv 修复 zip 路径。

  • gh-99377: 为线程创建和清除操作添加审计事件。

  • gh-98686: 移除 BINARY_OP_GENERICCOMPARE_OP_GENERIC 的“特化”。

  • gh-99298: 移除属性特化的剩余错误路径,并拒绝在尚未调用 PyType_Ready() 的类型上进行属性访问特化。

  • gh-99127: 允许 syslog 的某些功能仅对主解释器可用。由 Donghee Na 提供补丁。

  • gh-91053: 优化解释器和 JIT 编译器可能需要在函数被修改时使内部元数据无效。此更改增加了提供回调的能力,该回调将在每次函数创建、修改或销毁时被调用。

  • gh-90994: 改进调用参数语法错误时的错误信息。以下三种情况被覆盖:- 未给命名参数赋值,例如 foo(a=)。- 给星号参数赋值,例如 foo(*args=[0])。- 给双星号关键字参数赋值,例如 foo(**kwarg={'a': 0})

  • bpo-45026: 优化 range 对象迭代器。现在对包含大数的范围进行迭代更小、更快。更小的 pickle,更快的 unpickling。

  • bpo-31718: 当调用未初始化的 io.IncrementalNewlineDecoder 对象的方法时,抛出 ValueError 而不是 SystemError。由 Oren Milman 提供补丁。

  • bpo-38031: 修复 io.FileIO 中当开启器返回无效文件描述符时可能出现的断言失败。

  • gh-100001: 在 http.server BaseHTTPRequestHandler.log_message 中也对 s 进行转义,以便技术上可以解析该行并重构原始数据是什么。没有这个,xHH 对于我们放入的十六进制替换或原始请求行中的字符 r"x" 来说是模糊的。

  • gh-99957: 向 typing.dataclass_transform() 添加 frozen_default 参数。

  • gh-79033: 修复 asyncio.Server.wait_closed() 以实际执行文档承诺的操作——在关闭服务器后等待所有现有连接完成。

  • gh-51524: 修复在调用 trace.CoverageResults 时使用有效的 infile 时的错误。

  • gh-99645: 修复 unittest.TestCase 中处理类清理时的错误。现在 addClassCleanup() 为不同的 TestCase 子类使用单独的列表,而 doClassCleanups() 只清理特定的类。

  • gh-99508: 修复在调用 _imp.source_hash()Lib/importlib/_bootstrap_external.py 中的 TypeError

  • gh-66285: 修复 asyncio 不在分叉进程中共享事件循环和信号 wakeupfd。由 Kumar Aditya 提供补丁。

  • gh-97001: 在调用 termios API 时释放 GIL 以避免阻塞线程。

  • gh-92647: 使用枚举的最终状态来确定功能API的查找或创建分支。

  • gh-99388: 向 asyncio.run() 添加 loop_factory 参数,允许指定自定义事件循环工厂。由 Kumar Aditya 提供补丁。

  • gh-99341: 修复 ast.increment_lineno(),使其在更改行号时也能覆盖 ast.TypeIgnore

  • gh-99382: 在包含 TypeVarTuple 和一个或多个 TypeVar 的用户泛型中检查替换中的参数数量。

  • gh-99379: 修复泛型别名中 ParamSpec 后跟 TypeVarTuple 的替换问题。

  • gh-99344: 修复用户泛型中 TypeVarTupleParamSpec 一起替换的问题。

  • gh-99284: 从 ctypes 中移除 _use_broken_old_ctypes_structure_semantics_ 这个未经测试且未文档化的旧hack。

  • gh-99201: 如果在 Windows 上没有设置 HAVE_DYNAMIC_LOADING,初始化配置变量时修复 IndexError

  • gh-99240: 通过将内存清理提取到新的 post_parsing 部分来修复 Argument Clinic 的 str_converter 中的双重释放错误。

  • gh-64490: 修复 Argument Clinic 中参数被打包到元组时的引用计数错误。

  • gh-99029: pathlib.PurePath.relative_to() 现在将裸的 Windows 驱动器路径视为相对路径。这使其行为与 pathlib 的其他部分保持一致。

  • gh-98253: typing 模块的实现现在对二进制扩展模块中的引用泄漏更加健壮。

    以前,基于类型化 C API 的扩展模块中的引用泄漏可能会泄漏 typing 模块的内部,这反过来又可能在几乎所有其他具有类型化函数签名的包中引入泄漏。虽然 typing 包不是问题的原始来源,但这种非局部依赖性加剧了大型项目的调试难度,因此实现进行了更改,通过提供更好的隔离来减少危害。

  • gh-98458: 修复 unittest 中当引发自引用链式异常时的无限循环问题

  • gh-93453: asyncio.get_event_loop() 和其他许多 asyncio 函数,如 asyncio.ensure_future()asyncio.shield()asyncio.gather(),以及 asyncio.BaseDefaultEventLoopPolicyget_event_loop() 方法,现在在没有运行的事件循环且当前事件循环未设置时调用会引发 RuntimeError。以前它们会隐式创建并设置一个新的当前事件循环。如果当前事件循环已设置但没有运行的事件循环,则不再发出 DeprecationWarning

  • gh-97966: 在 uname_result 上,恢复了 _fields_asdict 包括所有六个属性(包括 processor)的期望。

  • gh-98248: 在 struct.pack() 中,当其整数参数不在范围内时,提供信息性错误消息。

  • gh-98108: 如果其初始化参数是可pickle的(例如文件系统路径),则 zipfile.Path 现在可pickle。

  • gh-98098: 从 zipfile 和 test_zipfile 模块创建包,分离 zipfile.Path 功能。

  • gh-82836: 修复 ipaddress 模块中的 is_private 属性。以前非私有网络(0.0.0.0/0)会从此方法返回 True;现在它们正确地返回 False

  • gh-96828: 添加一个 OP_ENABLE_KTLS 选项,用于启用内核 TLS (kTLS)。由 Illia Volochii 提供补丁。

  • gh-88863: 为了避免 asyncio.open_connection() 引发时出现明显的内存泄漏,打破由局部异常和 future 实例(其成员变量为异常实例)生成的引用循环。由 Dong Uk, Kang 提供补丁。

  • gh-91078: TarFile.next() 现在在调用空的 tarfile 时返回 None

  • bpo-47220: 文档化 WeakMethod 的可选 callback 参数。由 Géry Ogam 提供补丁。

  • bpo-44817: 在使用 ntpath.realpath() 时忽略 WinError 53 (ERROR_BAD_NETPATH)、65 (ERROR_NETWORK_ACCESS_DENIED) 和 161 (ERROR_BAD_PATHNAME)。

  • bpo-41260: 将 datetime.date.strftime() 纯 Python 实现中的 fmt 参数重命名为 format

  • bpo-15999: 现在所有内置函数接受任何类型的参数,而不仅仅是 boolint 用于布尔参数。

文档

测试

  • gh-99892: 如果无法从 pythontest.net 下载 NormalizationTest.txt 文件,则跳过 test_unicodedata 的 test_normalization()。由 Victor Stinner 提供补丁。

  • gh-99934: 在(32 位)x86 上修正 test_marsh:test_deterministic sets 失败。

  • gh-99741: 我们已经为内部(用于测试)的 _xxsubinterpreters 模块实现了多阶段初始化(PEP 489/630/687)。

  • gh-99659: test_sqlite3 中的可选大内存测试现在在传递过大的字符串和/或 blob 时捕获正确的 sqlite.DataError 异常类型。

  • gh-99593: 为 Unicode C API 添加测试。

  • gh-96002: 为 Argument Clinic 添加功能测试。

构建

  • gh-99086: 修复 configure 检查中的 -Wimplicit-int-Wstrict-prototypes-Wimplicit-function-declaration 编译器警告。

  • gh-99337: 修复在 macOS 上使用 GCC 12 时的编译问题。

  • gh-99289: 在Makefile中添加 COMPILEALL_OPTS 变量以覆盖 make install 中的 compileall 选项(默认:-j0)。同时将 compileall 命令合并为一个命令,一次性为所有优化级别(0、1、2)构建.pyc文件。由Victor Stinner提供补丁。

  • gh-98872: 修复了Python 3.11中 Programs/_freeze_module.c 可能存在的文件描述符泄漏问题。

  • gh-88226: 在 Python/ceval.c 中始终定义 TARGET_* 标签,即使 USE_COMPUTED_GOTOS 被禁用。这样可以在(例如)``gdb`` 中在这些标签处设置断点。

Windows

macOS

  • gh-87235: 在macOS上 python3 /dev/fd/9 9</path/to/script.py 对于任何超过几个字节的脚本都会失败。

  • gh-98940: 修复 Mac/Extras.install.py 文件过滤器错误。

工具/示例

  • gh-64490: Argument Clinic varargs 错误修复

    • 修复 _PyArg_UnpackKeywordsWithVararg() 中的越界错误。

    • 修复了允许在clinic.py中有多个varargs的错误检查。

    • 修复生成代码中 noptargs 的错误计算。

    • 当存在vararg参数但没有可选参数时,不生成 noptargs

C API

  • gh-98680: PyBUF_* 常量被标记为Python 3.11+的有限API的一部分。这些在3.11.0版本中可用,定义了 Py_LIMITED_API 为3.11,并且是使用缓冲区API所必需的。

  • gh-99612: 修复 PyUnicode_DecodeUTF8Stateful() 对于仅ASCII数据的问题:*consumed 未被设置。

  • gh-47146: structmember.h 头文件已被弃用。其未弃用的内容现在只需包含 Python.h 即可使用,如果缺少 Py_ 前缀则会添加。(已弃用的内容包括 T_OBJECT, T_NONE, 和无操作标志。)由 Petr Viktorin 提供补丁,基于 Alexander Belopolsky 和 Matthias Braun 的早期工作。

Python 3.12.0 alpha 2

发布日期:2022-11-14

安全性

  • gh-98433: 用于 socketasyncio 相关名称解析函数的 DNS 主机名的 IDNA 编解码器解码器不再涉及二次算法。这防止了如果解码涉及双向字符的超长主机名时可能导致的 CPU 拒绝服务。某些协议,如 urllib http 3xx 重定向,可能允许攻击者提供这样的名称。

    IDNA 编码的 DNS 名称中的单个标签现在在 IDNA 解码期间如果超过 1024 个 Unicode 字符会早期引发错误,因为每个解码的 DNS 标签必须为 63 或更少的字符,并且整个解码的 DNS 名称限制为 255。只有呈现主要由 RFC 3454 第 3.1 节 "无"字符组成的主机名或标签的应用程序才会遇到这个新限制。另请参见 RFC 5894 第 6 节和 RFC 3491

  • gh-98739: 更新捆绑的 libexpat 到 2.5.0

核心与内置函数

  • gh-81057: 文档明确指出 PyImport_Inittab, PyImport_AppendInittab(), 和 PyImport_ExtendInittab() 不应在 Py_Initialize() 被调用后使用。我们现在对这两个函数强制执行这一点。此外,运行时现在使用 PyImport_Inittab 的内部副本,以防止修改。

  • gh-99298: 修复可能导致某些字节码指令错误处理的问题。

  • gh-99254: 编译器现在会从代码对象中移除所有未使用的常量(除了第一个可能是文档字符串的常量)。

  • gh-99205: 修复了阻止 PyThreadStatePyInterpreterState 内存被正确释放的问题。

  • gh-81057: 持有分配器状态的18个全局C变量已被移动到 _PyRuntimeState。这是一个严格内部更改,行为无变化。

  • gh-99181: 修复 except* 中不可哈希异常导致的失败。

  • gh-99204: 修复当在POSIX虚拟环境中使用python二进制副本且基础安装未提供venv使用的可执行名称时,sys._base_executable 的计算问题。计算将回退到替代名称("python<MAJOR>", "python<MAJOR>.<MINOR>")。

  • gh-96055: 更新 faulthandler 以发出包含正确意外信号号的错误消息。由Donghee Na提供补丁。

  • gh-99153: 修复同时包含 exceptexcept*try 块的 SyntaxError 位置。

  • gh-98686: 将自适应操作码逻辑合并到每个指令的非快速化变体中,并将 EXTENDED_ARG_QUICK 中的逻辑合并到 EXTENDED_ARG。通过这些更改,代码对象创建时发生的快速化现在仅负责初始化预热计数器和插入超级指令。

  • gh-99103: 修复当源代码行包含Unicode字符时,专用回溯锚点的错误报告位置。

  • gh-99139: 改进对实例的 NameError 异常的错误建议。现在,如果在方法中引发 NameError 且实例具有与异常中名称完全相等的属性,建议将包括 self.<NAME> 而不是方法范围内最接近的匹配。由Pablo Galindo提供补丁。

  • gh-98401: 在Python 3.11中已弃用的八进制转义值大于 0o377 (例如 "\477") ,现在会产生 SyntaxWarning,而不是 DeprecationWarning。在未来的Python版本中,这些最终将成为 SyntaxError。由Victor Stinner提供补丁。

  • gh-98401: 不是有效转义序列的反斜杠字符对现在会生成 SyntaxWarning,而不是 DeprecationWarning。例如,re.compile("\d+\.\d+") 现在会发出 SyntaxWarning ("\d" 是无效的转义序列) ,使用原始字符串进行正则表达式:re.compile(r"\d+\.\d+")。在未来的Python版本中,最终将引发 SyntaxError,而不是 SyntaxWarning。由Victor Stinner提供补丁。

  • gh-96793: 在字节码中处理生成器或协程中引发的StopIteration和StopAsyncIteration,而不是在包装的C代码中处理。

  • gh-98931: 当用户键入 import x from y 而不是 from y import x 时,改进 SyntaxError 错误消息。由Pablo Galindo提供补丁

  • gh-98852: 修复包含裸泛型类型或类似 TypeVar 类型的类型别名的订阅:例如``tuple[A, T][int]``和 tuple[TypeVar, T][int],其中 A 是泛型类型,T 是类型变量。

  • gh-98925: 降低WASI上marshal的递归深度以支持(开发中的)wasmtime 2.0。

  • gh-98783: 修复在调试模式下使用 str 子类而不是 str 本身时的多次崩溃。

  • gh-98811: 使用完整的源位置来简化检测不在文件开头的 __future__ 导入。同时修正了一种情况下引发的异常中的偏移量,该偏移量偏差一个并阻碍了高亮。

  • gh-96793: 为生成器添加 FOR_ITER 的特殊化。保存从调用者中的 FOR_ITER 指令到生成器中的 RESUME 的多层调度和检查。

  • gh-98762: 修复 match 子模式源位置的问题。

  • gh-98586: 将方法 PyObject_Vectorcall()PyObject_VectorcallMethod() 以及辅助宏常量 PY_VECTORCALL_ARGUMENTS_OFFSET 添加到 Limited API 中。

    这些函数的可用性使得二进制扩展模块能够进行更高效的 PEP 590 向量调用,避免了参数装箱/拆箱的开销。

  • gh-99257: 修复了一个问题,即当通过无效类型的实例访问时,成员描述符(如 __slots__ 的描述符)可能会行为不正确或崩溃,而不是引发 TypeError

  • gh-93143: 解释器现在不会更改 co_code,而是会显示 RuntimeWarning 并将 None 赋给在跟踪执行跳转或 del 语句后未绑定的任何快速局部变量。

  • gh-96421: 当通过 PyEval_EvalFrameEx() 或相关的 C-API 函数从 C 代码调用 Python 代码时,会在调用堆栈中插入一个垫片帧。这发生在 _PyEval_EvalFrameDefault() 函数中。额外的帧对所有 Python 和大多数 C 扩展应该是不可见的,但进程外分析器和调试器需要知道它。这些垫片帧可以通过检查 frame->owner == FRAME_OWNED_BY_CSTACK 来检测。

    使用 PEP 523 实现自己的解释器的扩展需要了解这个垫片帧以及对 RETURN_VALUEYIELD_VALUERETURN_GENERATOR 语义的更改,这些操作现在会清除帧。

  • gh-98415: 修复了在某些操作系统上对 uuid 的 MAC 地址检测。补丁由 Chaim Sanders 提供

  • gh-98686: 加速所有代码对象,并更积极地专门化自适应字节码指令。

  • gh-92119: 在从 ctypes 调用引发错误时,打印异常类名而不是其字符串表示。

  • gh-91058: 当 from <module> import <name> 失败时,引发的 ImportError 现在会根据 <module> 中可用的名称提供 <name> 的建议值。由 Pablo Galindo 提供补丁。

  • gh-96793: FOR_ITER 现在在循环终止时将迭代器留在堆栈上。这是为了辅助生成器的循环专门化。

  • gh-90716: 添加 _pylong.py 模块。它包括可用于对多位数整数进行操作的渐近更快算法。longobject.c 使用它来加速一些操作。

  • gh-95389: 在 socket 中公开 ETH_P_ALL 和一些 ETHERTYPE_* 常量。由 Noam Cohen 提供补丁。

  • gh-93696: 允许 pdb 定位标准库中冻结模块的源代码。

  • gh-99418: 修复 urllib.parse.urlparse() 中的错误,该错误会导致以数字、加号或减号开头的 URL 方案被错误解析。

  • gh-94597: 弃用 asyncio.AbstractChildWatcher,将在 Python 3.14 中移除。由 Kumar Aditya 提供补丁。

  • gh-99305: 提高 secrets.token_hex() 的性能。

  • gh-74044: 修复了 inspect.signature() 报告装饰方法参数不正确的问题。

  • gh-99275: 修复 ctypes 中的 SystemError,当 __initsubclass__ 期间未设置异常时。

  • gh-99277: 移除 asyncio.sslproto 中旧版本的 _SSLProtocolTransport.get_write_buffer_limits

  • gh-99248: 修复 verify() 中负数失败的问题。

  • gh-99155: 修复 statistics.NormalDist 使用 01 协议时的 pickle 问题。

  • gh-93464: enum.auto() 现在与其他赋值值结合使用时能正确激活。例如,ONE = auto(), 'some text' 现在会评估为 (1, 'some text')

  • gh-99134: 将捆绑的 pip 更新到版本 22.3.1。

  • gh-92584: 移除 distutils 包。它在 Python 3.10 中通过 PEP 632 "弃用 distutils 模块" 被弃用。对于仍在使用 distutils 且无法更新到其他工具的项目,可以安装 setuptools 项目:它仍然提供 distutils。由 Victor Stinner 提供补丁。

  • gh-98999: 现在 _pyio_io 一致,在关闭的缓冲区上执行方法时会引发 ValueError

  • gh-83004: 清理 _zoneinfo 中模块初始化失败时的引用泄漏。

  • gh-83004: 清理 _pickle 中模块初始化失败时的引用泄漏。

  • gh-83004: 清理 _io 中模块初始化失败时的引用泄漏。

  • gh-98897: 修复当两个点不具有相同维度时 math.dist() 中的内存泄漏。由 Kumar Aditya 提供补丁。

  • gh-98878: 在 traceback 中提供名称建议时使用框架绑定的内置函数,以防止当 __builtins__ 不是字典时崩溃。

  • gh-98139: 在 importlib._bootstrap 中,增强命名空间包的 repr 为 <module 'x' (namespace) from ['path']>

  • gh-90352: 修复 _SelectorDatagramTransport 以继承 DatagramTransportasyncio 中。由 Kumar Aditya 提供补丁。

  • gh-98793: 修复 _overlapped.WSAConnect()_overlapped.Overlapped.WSASendTo() 函数中的参数类型检查。

  • gh-98744: 防止在 traceback 中检索包含某些特定 Unicode 字符的某些源文件的字节偏移时崩溃。

  • gh-98740: 修复 re 模块中的内部错误,该错误在极少数情况下阻止编译包含 条件表达式 而没有 "else" 分支的正则表达式。

  • gh-98703: 修复 asyncio.StreamWriter.drain() 以在 Windows 上仅调用 protocol.connection_lost 回调一次。

  • gh-98624: 向 unittest.mock.NonCallableMock 添加互斥锁以保护对模拟属性的并发访问。

  • gh-98658: array.array 类现在支持下标操作,使其成为 泛型类型`。

  • gh-98284: 改进了 abc.ABC 实例未定义抽象方法的 TypeError 消息。缺失方法的名称用单引号包围以突出显示。

  • gh-96151: 允许 BUILTINS 作为冻结数据类的有效字段名。

  • gh-98086: 确保 patch.dict() 可以应用于异步函数。

  • gh-72719: 移除模块 asyncoreasynchat,这些模块已被 PEP 594 弃用。

  • gh-96192: 修复 os.ismount()bytes 路径类对象 的处理。

  • gh-94172: ftplib: 移除了 FTP_TLS.ssl_version 类属性:改用 context 形参。补丁由 Victor Stinner 提供

  • gh-94172: 从 ftplibimaplibpoplibsmtplib 模块中移除了 keyfilecertfile 参数,以及从 http.client 模块中移除了 key_filecert_filecheck_hostname 参数,这些参数自 Python 3.6 起已被弃用。改用 context 参数(在 imaplib 中为 ssl_context)。由 Victor Stinner 提供补丁。

  • gh-83638: 向 sqlite3.Connection 添加了 autocommit 属性,并向 sqlite3.connect() 添加了 autocommit 参数,以控制符合 PEP 249transaction handling。补丁由 Erlend E. Aasland 提供。

  • gh-92452: 修复了一个可能导致 sysconfig.get_config_var() 在多线程程序中错误返回 None 的竞态条件。

  • gh-91803: 修复了在使用 unittest.mock.create_autospec() 创建的对象的方法后,再用 unittest.mock.seal() 函数密封时出现的错误。

  • bpo-38523: shutil.copytree() 现在递归应用 ignore_dangling_symlinks 参数。

  • bpo-40358: 在 pathlib.PurePath.relative_to() 中添加了 walk_up 参数。

  • bpo-36267: 修复了当 store_true 动作被赋予显式参数时,在 argparse.ArgumentParser 中出现的 IndexError。

文档

  • gh-98832: 修改了 pathlib.Path.iterdir() 文档字符串的措辞。

  • gh-97966: 更新了 uname 文档,以澄清 platform 属性的特殊性质,并指出其何时成为晚期绑定。

测试

  • gh-98903: Python 测试套件现在如果没有运行任何测试,将以退出码 4 失败。这应有助于检测测试名称和测试方法中的拼写错误。

  • gh-98713: 修复了 typing 测试中的一个错误,该错误中一个依赖 CPython 特定实现细节的测试未被装饰为 @cpython_only,也未在其他实现上跳过。

  • gh-87390: 为 PEP 646 添加了星号解包测试,以及其他一些杂项 PEP 646 测试。

  • gh-96853: 将 Py_Initialize (以及 Py_InitializeEx) 的显式覆盖添加回嵌入测试(Python 3.11 中所有其他嵌入测试已迁移到 Py_InitializeFromConfig)。

  • bpo-34272: 一些 C API 测试被移到了新的 Lib/test/test_capi/ 目录。

构建

  • gh-99086: 修复了在 configure 检查 PTHREAD_SCOPE_SYSTEM 时的 -Wimplicit-int 编译器警告。

  • gh-99016: 修复了使用 PYTHON_FOR_REGEN=python3.8 时的构建问题。

  • gh-97731: 为 make docclean 指定了源位置的完整路径(跨构建所需)。

  • gh-98949: 删除了未使用的 readelf 构建依赖。

  • gh-98989: 如果可用,使用 python3.11 进行再生和冻结。

  • gh-98831: 在 Tools/cases_generator 中添加新工具,用于从操作码定义列表生成解释器切换语句。这仅影响添加、修改或删除指令定义。指令定义现在以`自定义DSL(开发中)<https://github.com/faster-cpython/ideas/blob/main/3.12/interpreter_definition.md>`__的形式存在于``Python/bytecodes.c``中。该工具读取此文件并写入 Python/generated_cases.c.h,然后由``Python/ceval.c``包含以提供主解释器切换的大多数情况。

  • gh-98817: 删除PCbuild/lib.pyproj:它不被用于任何用途,仅对Visual Studio用户(他们大多数人可能甚至不知道它的存在)提供微小的便利,并且需要大量维护工作来保持更新。

  • gh-98776: 为树外构建修复 make regen-test-levenshtein

  • gh-98707: 如果 --with-system-libmpdec 传递给 configure,则不使用供应商提供的 libmpdec 头文件。如果 --with-system-expat 传递给 configure,则不使用供应商提供的 libexpat 头文件。

Windows

  • gh-98689: 将Windows构建更新至zlib v1.2.13。v1.2.12有 CVE 2022-37434,但Python未使用易受攻击的 inflateGetHeader API。

  • gh-98790: 假设缺失的 DLLs 目录意味着标准扩展模块位于可执行文件的目录中。

  • gh-98745: 更新 py.exe 启动器,默认安装3.11,按请求安装3.12。

  • gh-98692: 修复 Python 安装管理器 忽略无法识别的shebang行而不是将它们视为本地路径的问题。

  • gh-94328: 更新Windows安装程序以使用SQLite 3.39.4。

macOS

  • gh-94328: 更新macOS安装程序至SQLite 3.39.4。

C API

  • gh-98724: Py_CLEARPy_SETREFPy_XSETREF 宏现在只评估它们的参数一次。如果参数有副作用,这些副作用不再重复。由Victor Stinner提供补丁。

  • gh-98978: 修复在 Py_SetPythonHome(NULL)Py_SetProgramName(NULL) 和``_Py_SetProgramFullPath(NULL)``函数调用中的释放后使用问题。问题由Benedikt Reinartz报告,由Victor Stinner提供补丁。

  • gh-98410: 将 getbufferprocreleasebufferproc 添加到稳定API中。

  • gh-98610: 子解释器的一些可配置能力已经改变。它们现在总是允许子进程(subprocess),而之前子进程可以被子解释器选择性地禁止。现在可以禁止 os.exec()。禁止守护线程现在被支持。禁止所有线程仍然被允许,但默认情况下从不这样做。请注意,可选限制仅通过``_Py_NewInterpreterFromConfig()`` 可用,这不是公共API。它们不影响主解释器,也不影响 Py_NewInterpreter()

  • gh-98608: 添加了 _PyInterpreterConfig 并将 _Py_NewInterpreter() 重命名为``_Py_NewInterpreterFromConfig()``。"isolated_subinterpreters"参数现在是一个捕获之前行为的细粒度配置。请注意,这些都是"私有"API。

  • gh-96853: Py_InitializeEx 现在在初始化解释器后正确调用 PyConfig_Clear (遗漏没有导致内存泄漏只是因为包装函数没有填充任何动态分配的配置字段)

  • gh-91248: 添加 PyFrame_GetVar()PyFrame_GetVarString() 函数以通过名称获取框架变量。由Victor Stinner提供补丁。

Python 3.12.0 alpha 1

发布日期: 2022-10-25

安全性

  • gh-97616: 修复列表乘以整数(list *= int)的问题:当新分配的长度接近最大大小时检测整数溢出。问题由Jordan Limor报告,由Victor Stinner提供补丁。

  • gh-97514: 在Linux系统上,multiprocessing 模块恢复使用基于文件系统的Unix域套接字与 forkserver 进程通信,而不是使用Linux抽象套接字命名空间。只有选择使用 "forkserver"启动方法 的代码会受到影响。

    抽象套接字没有权限设置,可能允许同一`网络命名空间 <https://man7.org/linux/man-pages/man7/network_namespaces.7.html>`_(通常是整个系统)内的任何用户向multiprocessing的 forkserver 进程注入代码。这是一个潜在的特权提升风险。基于文件系统的套接字权限将这一行为限制为 forkserver 进程的用户,这是Python 3.8及更早版本的默认行为。

    这修复了Linux的 CVE 2022-42919 漏洞。

  • gh-87389: http.server: 修复了HTTP服务器中当URI路径以 // 开头时的开放重定向漏洞。漏洞由Hamza Avvan发现并提出了初步修复方案。

  • gh-79096: LWPCookieJar和MozillaCookieJar创建的文件模式改为600而非644(Microsoft Windows不受影响)

  • gh-92888: 修复了在某些情况下访问底层缓冲区时的 memoryview 释放后使用问题。

  • gh-68966: 已弃用的mailcap模块现在拒绝将不安全的文本(文件名、MIME类型、参数)注入到shell命令中。它将发出警告并视为未找到匹配(或对于测试命令,视为测试失败),而不是使用此类文本。

核心与内置函数

  • gh-98374: 抑制help()命令无效查询时的ImportError。由Donghee Na提供补丁。

  • gh-98461: 修复了列表、集合和字典推导式以及生成器表达式在字节码中的源位置。

  • gh-98354: 为传递给 _imp.create_builtin() 函数的 spec 参数的 name 属性添加了Unicode检查。

  • gh-98398: 修复了'assert'字节码的源位置。

  • gh-98390: 通过将布尔表达式的子表达式范围缩小到子表达式本身的范围,修复了布尔表达式的子表达式位置问题。

  • gh-98254: 当解释器将 NameError 提升到顶层时,标准库中的模块现在可能作为错误信息的一部分被建议。由 Pablo Galindo 提供补丁。

  • gh-97997: 向分词器状态添加运行列偏移,以避免使用指针算术计算 AST 列信息。

  • gh-97973: 修改分词器以返回解析器所需的所有必要信息,以便解析器无需通过指针算术计算这些信息来设置 AST 节点中的位置信息。

  • gh-96078: os.sched_yield() 现在在调用 sched_yield(2) 时释放 GIL。由 Donghee Na 提供补丁。

  • gh-97955: 将 zoneinfo 迁移到 Argument Clinic。

  • gh-97912: 编译器现在在确定哪些指令应使用 LOAD_FAST_CHECK 操作码时避免了二次行为。

  • gh-97002: 修复了一个问题,其中多个帧对象可能由同一个解释器帧支持,可能导致内存损坏和解释器的硬崩溃。

  • gh-97943: 错误修复:PyFunction_GetAnnotations() 应该返回一个借用引用。它之前返回了一个新的引用。

  • gh-97922: 垃圾收集器现在只在 Python 字节码评估循环的 eval breaker 机制上运行,而不是在对象分配上。GC 也可以在调用 PyErr_CheckSignals() 时运行,因此需要在长时间内不执行任何 Python 代码的 C 扩展也有机会定期执行 GC。

  • gh-65961: 当 __package____spec__.parent 不同时,发出 DeprecationWarning 而不是 ImportWarning

    同时移除计划中被移除的 importlib.util.set_package()

  • gh-97850: 长期弃用的 module_repr() 现在应该完全被淘汰。

  • gh-86298: 在 warnings.warn_explicit() 咨询模块的加载器的情况下,当 m.__loader__m.__spec__.loader 不同时,发出 DeprecationWarning

  • gh-97779: 确保所有Python框架对象都由“完整”框架支持。

  • gh-91052: 添加API以订阅选定字典的修改事件。

  • gh-97752: 修复访问新创建的生成器或协程框架的 f_back 成员时可能出现的数据损坏或崩溃问题。

  • gh-97591: 修复了 Exception.__setstate__() 中缺少的incref/decref对。补丁由Ofey Chan提供。

  • gh-97670: 移除 sys.getdxp() 函数和 Tools/scripts/analyze_dxp.py 脚本。DXP代表“动态执行对”。它们与 DYNAMIC_EXECUTION_PROFILEDXPAIRS 宏相关,这些宏已在Python 3.11中移除。现在可以通过 ./configure --enable-pystats 构建Python以收集Python操作码的统计数据。由Victor Stinner提供补丁。

  • gh-94526: 修复用于初始化Python启动时 sys.path 的Python路径配置。路径不再编码为UTF-8/strict以避免如果包含代理字符时出现编码错误(字节路径使用surrogateescape错误处理程序解码)。由Victor Stinner提供补丁。

  • gh-96670: 解析器现在在解析包含空字节的源代码时引发 SyntaxError。由Pablo Galindo提供补丁。

  • gh-96975: 修复当调用 PyEval_GetFrame() 时最顶层的Python框架处于部分初始化状态时发生的崩溃。

  • gh-96848: 修复命令行解析:当 PYTHONINTMAXSTRDIGITS 环境变量设置为有效限制时,拒绝没有值的 -X int_max_str_digits 选项(无效)。由Victor Stinner提供补丁。

  • gh-95921: 修复用作分支条件的链式比较的过于宽泛的源位置信息。

  • gh-96821: 修复 audioop.c 中的未定义行为。

  • gh-96821: 修复 _testcapimodule.c 中的未定义行为。

  • gh-95778: 当整数超过限制时引发 ValueError 时,在错误消息中提到 sys.set_int_max_str_digits() 函数。由 Victor Stinner 提供补丁。

  • gh-96387: 在 Python 退出时,有时持有 GIL 的线程会永远等待一个(通常是守护线程)请求放弃 GIL 的线程,而该线程已经退出。为了修复这个竞态条件,请求放弃 GIL 的线程现在在退出前重置其请求。问题由 Mingliang ZHAO 发现并分析。由 Victor Stinner 提供补丁。

  • gh-96864: 修复当操作码跟踪启用时,行跟踪事件引发异常可能导致断言失败、致命错误或 SystemError 的问题。

  • gh-95778: PyLong_FromString 函数被重构,以使其更易于维护和扩展。

  • gh-96678: 修复 C 代码中的空指针算术未定义行为。

  • gh-96754: 确保所有创建的帧对象都是从有效的解释器帧创建的。防止回溯和信号处理程序中出现无效帧的可能性。

  • gh-90997: 提高在某些平台上读写内联字节码缓存的性能。

  • gh-96751: 从 CALL_FUNCTION_EX 操作码中移除死代码。

  • gh-90751: memoryview 现在支持半精度浮点数。由 Donghee Na 和 Antoine Pitrou 提供补丁。

  • gh-96678: 修复 ceval.c 中的未定义行为情况。

  • gh-64373: 将 _functools 转换为参数诊所。

  • gh-96641: 不要在 _functools 中暴露 KeyWrapper

  • gh-96636: 确保跟踪 sys.setrace() 立即开启。在 3.11 的预发布版本中,当在 __del__ 方法或中断中开启跟踪时,可能会丢失一些跟踪事件。

  • gh-96572: 修复跟踪引用构建模式中的释放后使用问题。由 Kumar Aditya 提供补丁。

  • gh-96611: 当在多行字符串中加载包含无效 UTF-8 的文件时,会发出正确的 SyntaxError。

  • gh-96612: 确保不完整的帧不会出现在 tracemalloc 跟踪中。

  • gh-90230: 修复在使用 --enable-pystats 构建时的编译器警告和测试失败问题。

  • gh-96587: 在 Python 3.11 之前的版本中,正确地针对异常组 (PEP 654) 抛出 SyntaxError

  • gh-96569: 通过添加 NULL 检查,移除两种未定义行为的情况。

  • gh-96582: 修复 _PyThread_CurrentFrames 中可能的 NULL 指针解引用问题。由 Kumar Aditya 提供补丁。

  • gh-91079: 将 Python 递归检查与 C 递归检查分开,减少 C 栈溢出的可能性,并允许安全地增加递归限制。

  • gh-93911: 修复一个可能阻止 LOAD_ATTR 在访问属性时正确专门化的问题。

  • gh-96348: 当调用 throw()throw()athrow() 时,如果参数超过一个,发出 DeprecationWarning。

  • gh-95196: 禁用对 C 实现的类方法描述符的错误 pickling。

  • gh-96364: 修复 list.__getitem__dict.__getitem__ 的文本签名。

  • gh-96352: 修复 AttributeErrorobject.__getattribute__() 中缺少 nameobj 属性的问题。由 Philip Georgi 提供补丁。

  • gh-93554: 修改跳转操作码,使所有条件跳转都是向前跳转。向后跳转由汇编器转换为条件向前跳转,其目标是 fallthrough 块(且条件反转),后跟无条件向后跳转。例如:

    POP_JUMP_IF_TRUE BACKWARD_TARGET 变为 POP_JUMP_IF_FALSE NEXT_BLOCK; JUMP BACKWARD_TARGET

    所有有向条件跳转操作码已被移除:POP_JUMP_FORWARD_IF_TRUEPOP_JUMP_BACKWARD_IF_TRUEPOP_JUMP_FORWARD_IF_FALSEPOP_JUMP_BACKWARD_IF_FALSEPOP_JUMP_FORWARD_IF_NONEPOP_JUMP_BACKWARD_IF_NONEPOP_JUMP_FORWARD_IF_NOT_NONEPOP_JUMP_BACKWARD_IF_NOT_NONE

    对应的无方向操作码不再是伪指令,它们实现了向前条件跳转。

  • gh-96268: 加载包含无效 UTF-8 编码的文件现在会在正确的位置报告损坏的字符。

  • gh-96237: 内部字段 _PyInterpreterFrame.f_func 更名为 _PyInterpreterFrame.f_funcobj 并且可以是任何对象。f_globalsf_builtin 字段可能包含垃圾值。

    最安全的做法是将 _PyInterpreterFrame 结构视为不透明的。

  • gh-96187: 修复了一个导致 _PyCode_GetExtra 对于负索引返回垃圾值的 bug。由 Pablo Galindo 提供补丁

  • gh-96143: 添加了一个新的 -X perf Python 命令行选项以及 sys.activate_stack_trampoline()sys.deactivate_stack_trampoline() 函数在 sys 模块中,允许以 Linux perf 分析器可以检测 Python 调用的方式设置/取消设置解释器。新的 sys.is_stack_trampoline_active() 函数允许查询 perf 蹦床的状态。设计由 Pablo Galindo 完成。由 Pablo Galindo 和 Christian Heimes 提供补丁,贡献来自 Gregory P. Smith [Google] 和 Mark Shannon。

  • gh-96071: 修复了在分配新线程状态时 PyGILState_Ensure() 中的死锁问题。由 Kumar Aditya 提供补丁。

  • gh-96046: PyType_Ready() 现在初始化 ht_cached_keys 并执行额外检查以确保类型对象正确配置。这避免了不使用常规 API 创建新类型的第三方包中的崩溃。

  • gh-96005: 在 WASI 上,ENOTCAPABLE 现在被映射到 PermissionErrorerrno 模块暴露了新的错误号。getpath.py 现在在无法打开标记文件 pybuilddir.txtpyenv.cfg 时忽略 PermissionError

  • gh-93678: 添加了编译器优化阶段直接单元测试的测试工具。_testinternalcapi.optimize_cfg() 函数在一系列指令上运行优化器。test.support 中的 CfgOptimizationTestCase 类提供了调用优化器和检查输出的实用工具。

  • gh-95245: 通过将弱引用列表指针直接移动到对象字典/值指针前的预头部,将"简单"Python对象的大小从8个词减少到6个词。

  • gh-90997: 编译虚拟 try/except 块,以处理在 :susp:`~generator.close`:susp:`~generator.throw` 调用通过挂起帧时引发的异常。

  • gh-95977: 使用vectorcall优化调用 :susp:`~object.__get__`。由Kumar Aditya提供补丁。

  • gh-91210: 改进当没有默认值的参数跟在有默认值的参数后面时的错误消息,并显示相同的消息,即使非默认/默认序列前面有仅位置参数。

  • gh-95922: 修复了编译器 eliminate_empty_basic_blocks 函数忽略代码单元最后一个块的bug。

  • gh-95818: 在 PyThreadState_GetFrame() 中跳过不完整的帧。

  • gh-95876: 修复 _PyPegen_raise_error_known_location 中的格式字符串,该字符串在某些64位系统上可能导致内存损坏。该函数在为Py_ssize_t参数构建元组时使用了 i (int) 而不是 n (Py_ssize_t) 。

  • gh-95605: 修复将全空白字符串转换为 float 时错误消息内容误导性的问题。

  • gh-95150: 更新代码对象的哈希和相等性考虑,以考虑所有调试和异常处理表。这修复了在编译过程中某些非相同代码对象可能被"去重"的问题。

  • gh-91146: 减少由 :susp:`str.split`:susp:`str.rsplit` 生成的 list 的分配大小。补丁由Donghee Na和Inada Naoki提供。

  • gh-87092: 在编译器中创建一个'跳转目标标签'抽象,使编译器的代码生成阶段不直接与基本块一起工作。这为底层CFG生成机制的更改准备了代码。

  • gh-95355: _PyPegen_Parser_New 现在能正确检测令牌内存分配错误。补丁由Honglin Zhu提供。

  • gh-90081: 在追踪器/分析器函数中以全速运行Python代码。修复了早期3.11版本中的速度下降问题。

  • gh-95324: 在调试模式下,如果对象在释放前未调用 PyObject_GC_UnTrack(),则发出警告。由Pablo Galindo提供补丁。

  • gh-95245: 将管理的字典和值指针合并为一个带标签的指针,以在预头部节省一个字。

  • gh-93678: 添加cfg_builder结构并重构相关代码,以便可以在没有编译器结构实例的情况下构建cfg。

  • gh-95185: 防止在编译一些极长表达式如 "+0"*1000000 时AST构造器崩溃。现在会改为抛出 RecursionError。由Pablo Galindo提供补丁。

  • gh-93351: 现在,当向 compile() 和其他相关函数提供 ast.AST 节点位置时,会验证这些位置。如果检测到无效位置,将抛出 ValueError

  • gh-94438: 修复了一个问题,该问题导致在计算对帧对象的 f_lineno 属性赋值的有效跳转目标时,忽略扩展操作码参数和一些条件弹出。在某些情况下,这可能导致内部状态不一致,导致解释器硬崩溃。

  • gh-95060: 未记录的 PyCode_Addr2Location 函数现在在 addrq 参数小于零时正确返回。

  • gh-95113: 在非快速化代码中,将所有 EXTENDED_ARG_QUICK 指令替换为基本的 EXTENDED_ARG 指令。非自适应字节码的使用者应该能够以与CPython 3.10及更早版本相同的方式处理扩展参数。

  • gh-91409: 修复由字节码编译器中的某些优化引起的错误源代码位置信息。

  • gh-95023: 为Linux实现 os.setns()os.unshare()。由Noam Cohen提供补丁。

  • gh-94036: 修复一些多行属性访问和方法调用的错误源代码位置信息。

  • gh-94938: 修复当关键字参数名称是重载了 __eq____hash__ 的 str 子类实例时,某些内置函数中的错误检测。之前这可能导致 SystemError 或其他不希望的行为。

  • gh-94996: ast.parse() 在传递的 feature_version 小于 (3, 8) 时,将不再解析带有位置唯一参数(positional-only params)的函数定义。由 Shantanu Jain 提供补丁。

  • gh-94739: 允许在调试器中跳入、跳出以及跨异常处理器跳转。

  • gh-94949: ast.parse() 在传递的 feature_version 小于 (3, 9) 时,将不再解析带括号的上下文管理器。由 Shantanu Jain 提供补丁。

  • gh-94947: ast.parse() 在传递的 feature_version 小于 (3, 8) 时,将不再解析赋值表达式。由 Shantanu Jain 提供补丁。

  • gh-91256: 确保解释器启动期间帮助文本的程序名称是已知的。

  • gh-94869: 修复多行 f-字符串 ast 节点中某些表达式的列偏移。由 Pablo Galindo 提供补丁。

  • gh-94893: 修复一个帧对象操作可能损坏内联字节码缓存的问题。

  • gh-94822: 修复当类本身也存在同名属性时,元类描述符的查找可能被忽略的问题。

  • gh-91153: 修复 bytearray 项赋值在通过新值的 __index__() 方法调整大小时可能崩溃的问题。

  • gh-90699: 修复 bool.__repr__() 中的引用计数错误。由 Kumar Aditya 提供补丁。

  • gh-94694: 修复可能导致具有多行方法查找的代码具有误导性或错误的列偏移信息的问题。在某些情况下(当编译手动构建的 AST 时),这可能导致解释器硬崩溃。

  • gh-93252: 修复导致内部帧在失败的 Python 函数调用后仍然存活的问题,可能导致内存泄漏或解释器硬崩溃。

  • gh-94215: 修复了一个问题,即由行追踪事件引发的异常会导致帧处于无效状态,可能导致解释器硬崩溃。

  • gh-92228: 对于与源代码行相关联的退出块,禁用编译器的内联小退出块优化。这修复了一个bug,即调试器无法区分异常处理器的结束和后续代码块的开始。

  • gh-94485: 根据 PEP 626 的规定,模块的 RESUME 指令的行号被设置为0。

  • gh-94438: 在设置帧中的行号时,考虑可以推NULL到堆栈的指令。防止一些(不太可能的)崩溃。

  • gh-91719: 在解释器主循环中引发 unknown opcode error 时重新加载 opcode,以便C编译器独立生成调度代码。

  • gh-94329: 编译并运行具有极大序列(1000多个元素)解包的代码。此类代码之前无法编译。现在可以正确编译并运行。

  • gh-94360: 修复了当从 stdin 读取带有语法错误的非utf-8编码文本文件时,分词器崩溃的问题。由Pablo Galindo提供补丁。

  • gh-88116: 修复了当从代码对象读取行号时,如果编码的行号接近 INT_MIN 时的问题。由Pablo Galindo提供补丁。

  • gh-94262: 不为不完整的帧创建帧对象。防止Python和C扩展可以观察到生成器和闭包的创建,恢复了3.10及更早版本的行为。

  • gh-94192: 修复了字典字面量中值表达式无效时的错误。

  • gh-87995: types.MappingProxyType 实例现在如果底层映射是可哈希的,则也是可哈希的。

  • gh-93883: 修订了回溯增强错误位置的显示策略。指示器仅在位置不跨越整行时显示。

  • gh-94163: 添加 BINARY_SLICESTORE_SLICE 指令,以更高效地处理和更好地专门化切片操作,其中切片在源代码中是显式的。

  • gh-94021: 修复 Python/specialize.c 中不可达代码的警告。

  • gh-93911: 为具有自定义 __getattribute__ 的对象专门化 LOAD_ATTR

  • gh-93955: 提高具有自定义 __getattribute____getattr__ 对象的属性查找性能。补丁由 Ken Jin 提供。

  • gh-93911: 为 property() 属性专门化 LOAD_ATTR

  • gh-93678: 重构编译器优化代码,使其不再需要传递 struct assemblerstruct compiler。相反,每个函数都采用它实际需要的 CFG 和其他数据。这将使得直接测试这段代码成为可能。

  • gh-93841: 当使用 -enable-pystats 构建时,添加了 sys._stats_on()sys._stats_off()sys._stats_clear()sys._stats_dump() 函数,以启用对程序部分的统计收集。

  • gh-93516: 在代码对象中存储第一个可跟踪指令的偏移量,以避免在跟踪时对每个指令重新计算。

  • gh-93516: 延迟创建将字节码偏移量映射到行号的表,以加快跟踪时行号的计算速度。

  • gh-89828: types.GenericAlias 不再中继 __class__ 属性。例如,isinstance(list[int], type) 不再返回 True

  • gh-93678: 重构编译器以减少样板和重复。

  • gh-93671: 修复在匹配语句中深度嵌套序列模式时发生的一些指数回溯情况。由 Pablo Galindo 提供补丁。

  • gh-93662: 确保在多行方法调用中结束列偏移是正确的。以前,结束列可能会在列偏移之前。

  • gh-93461: importlib.invalidate_caches() 现在会从 sys.path_importer_cache 中删除以相对路径为名称的条目。这解决了进程改变其当前工作目录时的缓存问题。

    FileFinder 不再在路径中插入点,例如 /egg/./spam 现在是 /egg/spam

  • gh-93621: 改变 withasync with 发出的字节码指令顺序,以减少异常表中的条目数量。

  • gh-93533: 将 LOAD_METHOD 的内联缓存大小减少 2 字节。

  • gh-93444: 从编译器的基础块结构中移除了冗余字段:b_nofallthroughb_exitb_return。它们可以从块的最后一条指令的操作码中轻松计算出来。

  • gh-93429: LOAD_METHOD 指令已被移除。它被合并回 LOAD_ATTR

  • gh-93418: 修复了一个断言错误,其中 f-string 在表达式后有一个等号 '=',但没有尾随的大括号。例如,f"{i="。

  • gh-93382: 缓存 PyCode_GetCode() 函数的结果,以恢复 co_code 属性的 O(1) 查找。

  • gh-93359: 确保没有明确结束位置的自定义 ast 节点可以被编译。由 Pablo Galindo 提供补丁。

  • gh-93356: 异常处理器的代码在代码单元的字节码末尾发出。这在没有引发异常时避免了一次跳转。

  • gh-93354: 在解释器中对专门化计数器使用指数退避。可以显著减少失败专门化的数量,并避免对程序中不适合专门化的部分造成减速。

  • gh-93283: 改进了 f-string 表达式中无效转换字符语法错误的消息。

  • gh-93345: 修复了在 TypeVarTuple 之后嵌套泛型别名中替换 TypeVar 时的崩溃问题。

  • gh-93223: 当一个字节码指令跳转到一个无条件跳转指令时,第一条指令通常可以优化为直接跳转到无条件跳转的目标。出于追踪原因,以前只有在两条指令具有相同行号时才会发生这种情况。现在,如果无条件跳转是人工的,即没有关联的行号,也会发生这种情况。

  • gh-84694: 配置选项 --experimental-isolated-subinterpreters 和宏 EXPERIMENTAL_ISOLATED_SUBINTERPRETERS 已被移除。

  • gh-91924: 修复了当标准输出编码不是 UTF-8 时的 __lltrace__ 调试功能。由 Victor Stinner 提供补丁。

  • gh-93040: 在 Objects/obmalloc.c 中用 Py_UNUSED 包裹未使用的参数。

  • gh-93143: 通过在编译时确定哪些变量必须初始化,避免对未初始化的局部变量进行 NULL 检查。

  • gh-93061: async for 循环后的向后跳转不再赋予可疑的行号。

  • gh-93065: 修复了 contextvars HAMT 实现以处理对深树的迭代。

    该错误由 Eli Libman 发现并修复。更多详情请见 MagicStack/immutables#84

  • gh-93012: 添加了新函数 PyType_FromMetaclass(),该函数通过额外的元类参数泛化了现有的 PyType_FromModuleAndSpec()。这对于语言绑定工具非常有用,可以通过指定具有自定义槽的元类来拦截类型相关的操作,如子类化或静态属性访问。

    重要的是,PyType_FromMetaclass() 可在有限 API 中使用,这为将更多绑定工具迁移到稳定 ABI 上提供了途径。

  • gh-93021: 修复了在 C 中实现的 __get__() 方法的 __text_signature__。补丁由 Jelle Zijlstra 提供。

  • gh-89914: YIELD_VALUE 指令的操作数被设置为堆栈深度。这样做是为了帮助在 yield 时的帧处理,并可能协助调试器。

  • gh-92955: 修复代码对象的行和位置迭代器中的内存泄漏,因为它们未在退出时完成。由 Kumar Aditya 提供补丁。

  • gh-92930: 修复了在 __reduce__persistent_id 期间修改集合导致的 _pickle.c 崩溃。

  • gh-90690: PRECALL 指令已被移除。它对特殊化仅提供小优势且在绝大多数情况下不需要。

  • gh-92914: 总是将列表的分配大小向上舍入到最近的偶数。

  • gh-92858: 改进在 ':' 之前有语法错误的某些套件的错误消息。

  • gh-90473: 在 WASI 上降低默认递归限制以解决有限的调用栈大小问题。

  • gh-92804: 修复 memoryview 迭代器中的内存泄漏,因为它未在退出时完成。由 Kumar Aditya 提供补丁。

  • gh-92777: 为具有懒字典的对象专门化 LOAD_METHOD。由 Ken Jin 提供补丁。

  • gh-92658: 增加对 Windows Hyper-V 主机和客机上 Hyper-V 套接字的连接和绑定支持。

  • gh-92236: 移除在启动生成器或协程时可见的虚假 "LINE" 事件,这些事件在 C 中实现的追踪函数中可见。

  • gh-91102: _warnings.warn_explicit() 已移植到 Argument Clinic。

  • gh-92619: 使编译器仅在退出块中的指令都没有行号时才复制退出块(之前仅检查块中的第一条指令,导致不必要的块复制)。

  • gh-88750: 弃用的仅调试构建 PYTHONTHREADDEBUG 环境变量不再有任何作用。

  • gh-92261: 修复尝试迭代 typing.Union 时的挂起问题。

  • gh-91432: 使用 PEP 659 机制专门化 FOR_ITER 操作码

  • gh-91399: 移除了 'Objects/unicodetype_db.h' 中重复的 '{0, 0, 0, 0, 0, 0}' 条目。

  • gh-91578: 更新了抽象类的错误消息。

  • bpo-47091: 通过使用 memcpy 复制数据并在一步中执行引用增量来提高 listtuple 重复的性能。

  • bpo-46142: 通过将一些信息移至新的命令行选项 --help-env--help-xoptions,使 --help 输出更简短。同时添加 --help-all 选项以打印完整用法。

  • bpo-42316: 记录一些需要括号的赋值表达式的地方。

  • gh-89237: 修复了在 Windows 上使用 ProactorEventLoop 时,asynciosubprocess.wait_closed() 的挂起问题。由 Kumar Aditya 提供补丁。

  • gh-97928: tkinter.Text.count() 现在会对以 "-" 开头的选项抛出异常,而不是静默忽略它们。

  • gh-98393: os 模块不再接受类似 bytearraymemoryview 类型的字节类路径:只有确切的 bytes 类型被接受用于字节字符串。由 Victor Stinner 提供补丁。

  • gh-98363: 添加了 itertools.batched() 以将数据分批成给定长度的列表,最后一个列表可能比其他列表短。

  • gh-98331: 将捆绑的 pip 和 setuptools 的副本分别更新到 22.3 和 65.5.0 版本。

  • gh-98307: 向 SysLogHandler 添加了一个 createSocket() 方法。

  • gh-96035: 修复了 urllib.parse.urlparse() 中的一个错误,该错误导致某些包含空格、下划线、加号和减号或非ASCII数字的端口号被错误地接受。

  • gh-98257: 使 sys.setprofile()sys.settrace() 函数可重入。它们不再会失败并显示:RuntimeError("Cannot install a trace function while another trace function is being installed")。由 Victor Stinner 提供补丁。

  • gh-98251: 允许 venv 在不影响路径解析的情况下,将 PYTHON* 变量传递给 ensurepippip

  • gh-94597: 弃用了 asyncio.AbstractEventLoopPolicy.get_child_watcher()asyncio.AbstractEventLoopPolicy.set_child_watcher() 方法,将在 Python 3.14 中移除。由 Kumar Aditya 提供补丁。

  • gh-98178: 在 macOS 上,修复 syslog.syslog() 在多线程应用程序中的崩溃问题。在 macOS 上,libc syslog() 函数不是线程安全的,因此 syslog.syslog() 不再释放 GIL 来调用它。由 Victor Stinner 提供补丁。

  • gh-44098: 在 Unix 上创建 mmap.mmap 对象时释放 GIL。

  • gh-87730: 在 urllib FTP 支持中一致地包装网络错误,因此当网络可用但无法访问公共互联网时,测试套件不会失败。

  • gh-94597: 子监视器类 MultiLoopChildWatcherFastChildWatcherSafeChildWatcher 已被弃用,将在 Python 3.14 中移除。由 Kumar Aditya 提供补丁。

  • gh-98023: 在支持它的 Linux 系统上,将默认的子监视器更改为 PidfdChildWatcher。由 Kumar Aditya 提供补丁。

  • gh-90985: 在 3.11 早期版本中,我们弃用了 asyncio.Task.cancel("message")。我们意识到我们过于严厉,因此取消了弃用。

  • gh-65961: 不要仅仅依赖模块上的 __cached__;代码还将支持 __spec__.cached

  • gh-97646: 在 mimetypes 中,将已弃用的 application/javascript 替换为 text/javascript。参见 RFC 9239。由 Noam Cohen 提供补丁。

  • gh-97930: 应用 importlib_resources 5.8 和 5.9 的更改:Traversable.joinpath 提供了具体的实现。as_file 现在支持资源目录。

  • gh-97850: 从 importlib.util 中移除已弃用的 importlib.util.set_loader()importlib.util.module_for_loader()

  • gh-97837: 更改 unittest 中的弃用警告消息,从

    返回一个值!=None 已被弃用

    to

    从测试用例返回一个非 None 的值已被弃用

  • gh-97825: 修复了当 subprocess.check_output() 与参数 input=None 以及 encodingerrors 参数一起使用时引发的 AttributeError

  • gh-97008: 自 gh-82711 起提供的 NameErrorAttributeError 拼写建议现在也由纯 Python 的 traceback 模块发出。针对这些建议的测试现在会测试两种实现,以确保它们是等效的。由 Carl Friedrich Bolz-Tereick 和 Łukasz Langa 提供补丁。

  • gh-97799: dataclass 现在使用 inspect.get_annotations() 来检查类对象的注解。

  • gh-97781: 移除了 importlib.metadata 中已弃用的接口(作为字典访问的入口点,隐式字典构造 EntryPoint 对象序列,EntryPoints 结果的可变性,通过索引访问入口点)。entry_points 现在有一个更简单、更直接的 API(返回 EntryPoints)。

  • gh-96827: 当默认执行器清理被延迟到事件循环关闭之后(例如,由于键盘中断的结果)时,避免来自 asyncio 的虚假回溯。

  • gh-95534: gzip.GzipFile.read() 读取速度快了 10%。

  • gh-97592: 当传递恶意参数时,避免 C 版本的 asyncio.Future.remove_done_callback() 崩溃。

  • gh-97639: 从 tabnanny 中移除 tokenize.NL 检查。

  • gh-97545: 使 Semaphore 运行得更快。

  • gh-73588: 修复 tkinter.Checkbutton 的默认名称生成。以前,如果未指定参数 "name" 和 "variable",不同父部件中的复选框可以有相同的短名称并共享相同的状态。现在它们是全局唯一的。

  • gh-96865: 修复 Flag 以使用边界 CONFORM

    这恢复了 Flag 以前的行为,即允许组合具有非顺序值的标志;例如。

    class Skip(Flag): TWO = 2 EIGHT = 8

    Skip.TWO | Skip.EIGHT -> <Skip.TWO|EIGHT: 10>

  • gh-97005: 将捆绑的 libexpat 更新到 2.4.9

  • gh-85760: 修复 asyncio 中的竞争条件,其中 process_exited()pipe_data_received() 之前被调用,导致输出不一致。补丁由 Kumar Aditya 提供。

  • gh-96704: 当 asyncio 异常处理器代表任务或回调句柄被调用时,传递正确的 contextvars.Context。这新增了一个 Task 方法 get_context,以及一个同名的 Handle 方法。如果在任务对象上找不到此方法(可能是因为它是一个尚未提供此方法的第三方库),则使用调用异常处理器时占主导地位的上下文。

  • gh-96819: 修复 multiprocessing.resource_tracker 中的检查,确保写入管道的长度不大于 PIPE_BUF

  • gh-95865: 减少 urllib.parse.quote_from_bytes() 在大值上的内存使用。

    由 Dennis Sweeney 贡献。

  • gh-96741: 修正了数据类属性 pstats.FunctionProfile.ncalls 的类型注解为 str

  • gh-96734: 更新 unicodedata 数据库至 Unicode 15.0.0。

  • gh-96735: 修复 struct.unpack() 中的未定义行为。

  • gh-46412: 提高大型 ndb/gdb 数据库的 bool(db) 性能。此前这会调用 len(db),后者会遍历所有键——答案(空或非空)在第一个键后即可知道。

  • gh-96652: 如果 sigaction() 函数不可用,则修复 faulthandler.register(signal, chain=True) 的 faulthandler 实现:如果之前的信号处理器为 NULL,则不调用它。由 Victor Stinner 提供补丁。

  • gh-68163: 修正 numbers.Rationalfloat 的转换。

  • gh-96538: 通过利用类型稳定性加速 bisect.bisect() 函数。

  • gh-96465: 分数哈希现在被缓存。

  • gh-96079: 在 typing 中,修复 _AnnotatedAlias 中缺失的 name 字段和不正确的 __module__

  • gh-96415: 从模块命名空间中移除 types._cell_factory

  • gh-95987: 修复 Any 子类的 repr

  • gh-96388: 解决 socket__repr__ 中缺少的套接字函数问题。

  • gh-96385: 修复 TypeVarTuple.__typing_prepare_subst__。在使用多个 TypeVarTuple 时,如类型别名替换中的 [*T, *V],未引发 TypeError

  • gh-96142: 将 match_argskw_onlyslotsweakref_slot 添加到 _DataclassParams 中。

  • gh-96073: 在 inspect 中,修复格式化注解中过度替换 "typing." 的问题。

  • gh-89258: 向 logging.Logger 添加了一个 getChildren() 方法,用于获取日志记录器的直接子日志记录器。

  • gh-96346: 对编译的正则表达式模式使用双重缓存。

  • gh-96349: 修复了 threading.Event.__init__() 中的一个轻微性能回归问题。

  • gh-90467: 修复 asyncio.streams.StreamReaderProtocol 以保持对创建的任务的强引用,从而避免被垃圾回收。

  • gh-96172: 修复 unicodedata 中的一个错误:east_asian_width 过去对未分配字符返回错误值;对于尚未分配但保留的字符也是如此。

  • gh-96159: 修复日志 TimedRotatingFileHandler 中的性能回归问题。仅在滚动时间过去时检查特殊文件。

  • gh-96175: 修复 xml.dom.minidomAttr 类未使用的 localName 参数。

  • gh-96145: 向 JSON 模块添加 AttrDict 以与 object_hook 一起使用。

  • gh-96052: 在 codeop.compile_command() 中检查不完整输入时修复处理编译器警告(SyntaxWarning 和 DeprecationWarning)的问题。以前它会发出警告并引发 SyntaxError。现在对于不完整输入,它总是返回 None,而不发出任何警告。

  • gh-96125: 修复导致 sys.thread_info.name 在 pthread 平台上错误的错误条件。

  • gh-96019: 修复 makeunicodedata.py 脚本中的一个错误,该错误导致 unicodedata 模块节省了约 13 KiB 的空间,特别是字符分解数据。

  • gh-95463: 移除来自 bpo-28080 的不兼容更改,该更改导致了一个回归问题,即忽略了 ZipInfo.flag_bits 中的 utf8。由 Pablo Galindo 提供补丁。

  • gh-69142: 添加 %:z strftime 格式代码(生成以冒号作为分隔符的 tzoffset),参见 strftime() 和 strptime() 的行为

  • gh-95899: 修复 asyncio.Runner 使其只调用 asyncio.set_event_loop() 一次,以避免在子监视器上多次调用 attach_loop()。由 Kumar Aditya 提供补丁。

  • gh-95736: 修复 unittest.IsolatedAsyncioTestCase 在调用设置函数之前设置事件循环。由 Kumar Aditya 提供补丁。

  • gh-95865: 通过用 map() 替换列表推导式来加速 urllib.parse.quote_from_bytes()

  • gh-95861: 为现有的 statistics.correlation() 函数添加支持计算 Spearman 的相关系数。

  • gh-95804: 修复 logging 关闭处理程序,使其尊重 MemoryHandler.flushOnClose

  • gh-95704: 当一个任务捕获 asyncio.CancelledError 并引发其他错误时,其他错误通常不应被静默抑制。

  • gh-95149: HTTPStatus 枚举提供了几个属性来指示 HTTP 状态类别,例如 HTTPStatus.OK.is_success

  • gh-95609: 更新捆绑的 pip 到 22.2.2 版本。

  • gh-95289: 修复 asyncio.TaskGroup 以在 asyncio.CancelledError 被上下文管理器替换为另一个异常时传播异常。由 Kumar Aditya 和 Guido van Rossum 提供补丁。

  • gh-94909: 修复 pathlib.PurePath 初始化器中相对 Windows 路径与驱动器的错误连接。

  • gh-95385: 在不请求键排序时(默认情况下)更快的 json.dumps()

  • gh-83901: 改进 Signature.bind 的错误消息,当缺少仅关键字参数时。

  • gh-95339: 更新捆绑的 pip 到 22.2.1。

  • gh-95045: 通过在调用任何回调之前取消跟踪,修复在释放 _lsprof.Profiler 时的 GC 崩溃。由 Kumar Aditya 提供补丁。

  • gh-95231: 当加载 crypt 方法时,如果引发 EPERMENOSYS,优雅地失败。这可能在尝试在启用 FIPS 的 Linux 内核上加载 MD5 时发生。

  • gh-95097: 为没有 uncancel() 方法的 asyncio.Task 实现修复 asyncio.run()。由 Kumar Aditya 提供补丁。

  • gh-95087: 修复 email 模块中解析无效日期时的 IndexError。

  • gh-95199: 更新捆绑的 setuptools 到 63.2.0。

  • gh-95194: 更新捆绑的 pip 到 22.2。

  • gh-93899: 修复在旧内核版本上检查 os.EFD_CLOEXECos.EFD_NONBLOCKos.EFD_SEMAPHORE 标志存在性的问题,这些版本中这些标志不存在。由 Kumar Aditya 提供补丁。

  • gh-95166: 修复 concurrent.futures.Executor.map(),使其在错误(例如 TimeoutError 或 KeyboardInterrupt)时取消当前等待的 future。

  • gh-95132: 修复 sqlite3 回归问题,其中 *args**kwdsconnect() 错误地传递到 Connection 工厂。这个回归是在 3.11a1 版本中由 PR 24421 (gh-85128) 引入的。由 Erlend E. Aasland 提供补丁。

  • gh-93157: 修复 fileinput 模块在 inplace 为 true 时不支持 errors 选项的问题。

  • gh-91212: 修复当追踪器关闭时 turtle 窗口的闪烁问题。由 Shin-myoung-serp 提供补丁。

  • gh-95077: 为枚举 member.member 访问(例如 Color.RED.BLUE)添加弃用警告。移除 EnumMeta.__getattr__

  • gh-95109: 确保已过期的时间调度(使用 asyncio.Timeout)能够被及时传递。

  • gh-95105: wsgiref.types.InputStream.__iter__() 应返回 Iterator[bytes],而不是 Iterable[bytes]。由 Shantanu Jain 提供补丁。

  • gh-95066: 在 ast.parse() 中,当 feature_version 的主版本无效时,用异常替换了断言。由 Shantanu Jain 提供补丁。

  • gh-77617: 为 sqlite3 添加 命令行界面。由 Erlend Aasland 提供补丁。

  • gh-95005: 在 JSON 编码器和 StringIO 中用 _PyUnicodeWriter 替换 _PyAccu,并移除 _PyAccu 的实现。

  • gh-90085: 移除 timeit-c/--clock-t/--time 命令行选项。这些选项自 Python 3.3 起已被弃用,功能在 Python 3.7 中被移除。由 Shantanu Jain 提供补丁。

  • gh-94857: 修复 _io.TextIOWrapper.reconfigure 中的内存泄漏。补丁由 Kumar Aditya 提供。

  • gh-94821: 修复 Linux 上 Unix 套接字绑定到空地址时使用抽象命名空间中的可用地址,而不是 "0"。

  • gh-94736: 修复在释放 _multiprocessing.SemLock 子类实例时的崩溃问题。由 Kumar Aditya 提供补丁。

  • gh-81620: 添加 random.binomialvariate()。

  • gh-74116: 允许 asyncio.StreamWriter.drain() 被多个任务并发等待。由 Kumar Aditya 提供补丁。

  • gh-87822: 当以 capture_locals=True 调用时,traceback 模块函数会吞掉在帧的局部变量上调用 repr() 时引发的异常。这是为了优先考虑原始异常而非渲染错误。失败指示会代替缺失的值被打印出来。(由 Simon-Martin Schroeder 提供补丁)。

  • gh-88050: 修复 asyncio 子进程传输,以便在进程被阻塞时干净地杀死进程,并避免在循环关闭时出现 RuntimeError。由 Kumar Aditya 提供补丁。

  • gh-94637: SSLContext.set_default_verify_paths() 现在在 SSL_CTX_set_default_verify_paths 调用周围释放 GIL。该函数调用执行 I/O 和 CPU 密集型工作。

  • gh-94309: 弃用别名 typing.Hashabletyping.Sized

  • gh-92546: 一个未记录的 python -m pprint 基准测试被移动到 pyperformance 的 pprint 套件中。由 Oleg Iarygin 提供补丁。

  • gh-94607: 修复在 typing 中使用类型变量子类化复杂泛型的问题。之前会显示错误消息 Some type variables ... are not listed in Generic[...]typing 不再用 Python 类的 __parameters__ 填充 __parameters__

  • gh-94619: 从 importlib 中移除长期弃用的 module_repr()

  • gh-93910: 恢复了访问枚举上其他值的能力(例如 Color.RED.BLUE),以修复性能回归问题。

  • gh-93896: 修复 asyncio.run()unittest.IsolatedAsyncioTestCase 以始终设置事件循环,如同在 Python 3.10 及更早版本中所做的那样。由 Kumar Aditya 提供补丁。

  • gh-94343: 允许在对象初始化期间设置 reprlib.Repr 的属性

  • gh-94382: 将 _multiprocessing 模块的静态类型移植到堆类型。补丁由 Kumar Aditya 提供。

  • gh-78724: 通过在 __new__() 中初始化 struct.Struct 来修复当其未被完全初始化时的崩溃问题。由 Kumar Aditya 提供补丁。

  • gh-94510: 对 sys.setprofile()sys.settrace() 的重新进入调用现在会引发 RuntimeError。由 Pablo Galindo 提供补丁。

  • gh-92336: 修复了 linecache.getline() 在坏文件上因 UnicodeDecodeErrorSyntaxError 而失败的错误。根据文档,现在它返回一个空字符串。

  • gh-94398: 一旦 asyncio.TaskGroup 开始关闭(即,至少一个任务失败并且任务组开始取消剩余任务),就不应再向任务组添加新任务。

  • gh-94383: xml.etree: 移除纯 Python 实现中的 ElementTree.Element.copy() 方法,该方法已在 Python 3.10 中弃用,改用 copy.copy() 函数。xml.etree 的 C 实现没有 copy() 方法,只有 __copy__() 方法。由 Victor Stinner 提供补丁。

  • gh-94379: zipimport: 移除 find_loader()find_module() 方法,这些方法已在 Python 3.10 中弃用:改用 find_spec() 方法。理由请见 PEP 451。由 Victor Stinner 提供补丁。

  • gh-94352: shlex.split(): 现在为 s 参数传递 None 会引发异常,而不是读取 sys.stdin。该功能已在 Python 3.9 中弃用。由 Victor Stinner 提供补丁。

  • gh-94318: 在 pydoc 文本输出中去掉尾随空格。

  • gh-89988: 修复 pickle.Pickler 在查找 dispatch_table 时的内存泄漏。补丁由 Kumar Aditya 提供。

  • gh-90016: 弃用 sqlite3 默认适配器和转换器。由 Erlend E. Aasland 提供补丁。

  • gh-94254: 修正 struct 模块的类型为不可变。由 Kumar Aditya 提供补丁。

  • gh-93259: 现在当 None 或空字符串传递给 Distribution.from_name (及其他调用者) 时会引发 ValueError

  • gh-74696: shutil.make_archive() 现在将 root_dir 参数传递给支持它的自定义归档器。

  • gh-94216: dis 模块现在包含了伪指令的操作码(这些操作码在代码生成期间被编译器使用,但在最终字节码发出前被移除或替换为真实操作码)。

  • gh-93096: 移除了未文档化的 python -m codecs。改用 python -m unittest test.test_codecs.EncodedFileTest

  • gh-94207: 使 _struct.Struct 被 GC 跟踪以修复 _struct 模块中的引用泄漏。

  • gh-93096: 移除了 python -m base64 的未文档化 -t 参数。改用 python -m unittest test.test_base64.LegacyBase64TestCase.test_encodebytes

  • gh-94226: 移除 locale.format() 函数,该函数在 Python 3.7 中已弃用:改用 locale.format_string()。由 Victor Stinner 提交的补丁。

  • gh-94199: 移除 ssl.match_hostname() 函数。ssl.match_hostname() 在 Python 3.7 中已弃用。自 Python 3.7 起,OpenSSL 执行主机名匹配,Python 不再使用 ssl.match_hostname() 函数。由 Victor Stinner 提交的补丁。

  • gh-94214: 文档化 venv.EnvBuilder 类中使用的 context 对象,并将新环境的库路径添加至其中。

  • gh-94199: 移除 ssl.wrap_socket() 函数,该函数在 Python 3.7 中已弃用:改为创建一个 ssl.SSLContext 对象并调用其 ssl.SSLContext.wrap_socket 方法。任何仍使用 ssl.wrap_socket() 的包都是破损且不安全的。该函数既不发送 SNI TLS 扩展也不验证服务器主机名。代码易受 CWE 295 不正确的证书验证影响。由 Victor Stinner 提交的补丁。

  • gh-94199: 移除 ssl.RAND_pseudo_bytes() 函数,该函数在 Python 3.6 中已弃用:改用 os.urandom()ssl.RAND_bytes()。由 Victor Stinner 提交的补丁。

  • gh-94199: hashlib: 移除 hashlib.pbkdf2_hmac() 的纯 Python 实现,该实现在 Python 3.10 中已弃用。Python 3.10 及更高版本需要 OpenSSL 1.1.1 (PEP 644):此 OpenSSL 版本提供了 pbkdf2_hmac() 的 C 实现,速度更快。由 Victor Stinner 提交的补丁。

  • gh-94196: gzip: 移除 gzip.GzipFilefilename 属性,该属性自 Python 2.6 起已弃用,改用 name 属性。在写入模式下,filename 属性会在文件扩展名不存在时添加 '.gz'。由 Victor Stinner 提交的补丁。

  • gh-94182: 在运行循环上运行 asyncio.PidfdChildWatcher,这允许事件循环在主线程上没有默认事件循环运行时运行子进程。

  • gh-94169: 移除 io.OpenWrapper_pyio.OpenWrapper,这两个在 Python 3.10 中已被弃用:只需使用 open() 替代。open() (io.open()) 函数是一个内置函数。自 Python 3.10 起,_pyio.open() 也是一个静态方法。由 Victor Stinner 提供补丁。

  • gh-91742: 修复 pdb 因空指针解引用导致的跳转后崩溃问题。补丁由 Kumar Aditya 提供。

  • gh-94101: 不再允许手动实例化 ssl.SSLSession 对象,因为这会导致配置错误的实例,在访问其属性时解释器崩溃。

  • gh-84753: inspect.iscoroutinefunction()inspect.isgeneratorfunction()inspect.isasyncgenfunction() 现在能正确地为鸭子类型的函数式对象(如 unittest.mock.AsyncMock 的实例)返回 True

    这使得 inspect.iscoroutinefunction() 的行为与 asyncio.iscoroutinefunction() 保持一致。由 Mehdi ABAAKOUK 提供补丁。

  • gh-94028: 修复 sqlite3 中的一个回归问题,其中语句对象在游标迭代器使用后未被正确清除和重置。该回归问题由 Python 3.11a1 中的 PR 27884 引入。由 Erlend E. Aasland 提供补丁。

  • gh-93973: 向 asyncio.create_connection 添加关键字参数 all_errors,以便多个连接错误可以作为 ExceptionGroup 抛出。

  • gh-93963: 正式弃用从 importlib.abc 迁移到 importlib.resources.abc 的类。

  • gh-93858: 防止在嵌套的 fish 实例中激活 venv 时出错。

  • gh-93820: 通过名称 Pickle enum.Flag

  • gh-93847: 修复泛型别名枚举的 repr。

  • gh-91404: 恢复 re 在匹配被信号或内存分配失败终止时的内存泄漏,因为已实现的修复导致了严重的性能回归。

  • gh-83499: 修复 tempfile 中文件描述符的双重关闭问题。

  • gh-93820: 修复了一个回归问题,当 copy.copy()-ing 带有多个标志成员的 enum.Flag 时。

  • gh-79512: 修复了 weakref 模块中 ReferenceTypeProxyTypeCallableProxyType 类的名称和 __module__ 值,使它们可以被 pickle。

  • gh-91389: 修复了一个问题,其中 dis 工具在存在 CACHE 条目时可能会报告缺失或不正确的位置信息。

  • gh-93626: 将 __future__.annotationsNone mandatoryRelease 设置为表示当前为“待定”。

  • gh-90473: Emscripten 和 WASI 没有主目录,无法提供 PEP 370 用户站点目录。

  • gh-90494: 如果 __reduce__() 返回长度为6的元组,copy.copy()copy.deepcopy() 现在总是会引发 TypeError,而不是静默忽略第6项或产生不正确的结果。

  • gh-90549: 修复了一个多进程错误,其中在创建子进程(与 fork 相对)时,全局命名资源(如信号量)可能会泄漏。

  • gh-93521: 修复了一个情况,其中数据类会尝试将 __weakref__ 添加到已经在其基类中定义了 weakref_slot=True 的数据类的 __slots__ 中。这会导致在创建新类时引发 TypeError

  • gh-79579: sqlite3 现在能正确检测带有前导注释的 DML 查询。由 Erlend E. Aasland 提供补丁。

  • gh-93421: 当 DML 语句运行完成时更新 sqlite3.Cursor.rowcount。这修复了像 UPDATE ... RETURNING 这样的 SQL 查询的行计数。由 Erlend E. Aasland 提供补丁。

  • gh-93475: 在 fcntl 中公开 FICLONEFICLONERANGE 常量。由 Illia Volochii 提供补丁。

  • gh-93370: 弃用 versionversion_info

  • gh-91810: 在使用 encoding='unicode'xml_declaration=NoneElementTree.write() 中,抑制在打开的文件中写入 XML 声明。

  • gh-91162: 支持在 TypeVarTypeVarTuple 参数上解包任意长度的元组拆分。例如:

    • A[T, *Ts][*tuple[int, ...]] -> A[int, *tuple[int, ...]]

    • A[*Ts, T][*tuple[int, ...]] -> A[*tuple[int, ...], int]

  • gh-93353: 修复 importlib.resources.as_file() 上下文管理器,在Python最终化过程中如果被延迟销毁则删除临时文件:保留对 os.remove() 函数的本地引用。由 Victor Stinner 提供补丁。

  • gh-83658: 如果 maxtasksperchild 不是 None 或正整数,则使 multiprocessing.Pool 抛出异常。

  • gh-93312: 添加 os.PIDFD_NONBLOCK 标志,用于以非阻塞模式通过 os.pidfd_open() 打开进程的文件描述符。由 Kumar Aditya 提供补丁。

  • gh-88123: 实现 Enum.__contains__,返回 TrueFalse,以取代有时会引发 TypeError 的废弃行为。

  • gh-93297: 使 asyncio 任务组阻止子任务被垃圾回收。

  • gh-85308: 更改 argparse.ArgumentParser 使用 filesystem encoding and error handler 而非默认文本编码从文件读取参数(例如 fromfile_prefix_chars 选项)。此更改影响 Windows;参数文件应使用 UTF-8 而非 ANSI 代码页编码。

  • gh-93156: 使用负索引值访问绝对路径的 pathlib.PurePath.parents 序列会产生不正确的结果。

  • gh-93162: 为 logging.config.dictConfig() 添加能力,以有效配置 QueueHandlerQueueListener 作为一对,并添加 logging.getHandlerByName()logging.getHandlerNames() API 以允许按名称访问处理器。

  • gh-93243: 根据 PEP 594 中的计划移除了 smtpd 模块。

  • gh-92886: 在 BaseHandler 中用 raise AssertionError() 替换 assert 语句,以便在使用优化 (-O) 运行时维护测试行为。

  • gh-90155: 修复当获取被取消时损坏的 asyncio.Semaphore

  • gh-90817: locale.resetlocale() 函数已被弃用,并将在 Python 3.13 中移除。请改用 locale.setlocale(locale.LC_ALL, "")。由 Victor Stinner 提交补丁。

  • gh-91513: 在 logging 模块中为与 asyncio 任务一起使用添加了 taskName 属性。

  • gh-74696: shutil.make_archive() 在创建标准 .zip 或 tar 归档文件时不再临时更改当前工作目录。

  • gh-92728: re.template() 函数及对应的 re.TEMPLATEre.T 标志在 3.11.0b1 中被移除后已恢复,但它们现在已被弃用,因此可能会在 Python 3.13 中移除。

  • gh-93033: 在某些字符串中的搜索(平台相关,如 Windows 上的 [U+0xFFFF, U+0x0100] 或 Linux 64 位上的 [U+0xFFFFFFFF, U+0x00010000])现在快了 10 倍。

  • gh-89973: 修复了如果在模式中包含上限低于下限的字符范围(例如 [c-a])时 fnmatch 中引发的 re.error。现在这样的范围被解释为空范围。

  • gh-93044: 不再在将数据库参数传递给工厂之前将其转换为字节。

  • gh-93010: 在一种非常特殊的情况下,email 包尝试将不存在的 InvalidHeaderError 添加到缺陷列表中。应该是 InvalidHeaderDefect

  • gh-92986: 修复当 ImportFrom.levelNone 时的 ast.unparse()

  • gh-92932: 现在 dis()get_instructions() 处理以 EXTENDED_ARG_QUICK 为前缀的指令的操作数值。补丁由 Sam Gross 和 Donghee Na 提交。

  • gh-92675: 修复 venv.ensure_directories() 以接受 pathlib.Path 参数以及 str 路径。补丁由 David Foster 提交。

  • gh-87901: 从 os.popen() 中移除了在 3.11b1 中添加的 encoding 参数。

  • gh-91922: 修复了在非UTF-8语言环境下 sqlite.connect() 函数和 sqlite.Connection 构造函数的问题。此外,它们现在支持无法用当前文件系统编码解码的字节路径。

  • gh-92869: 在 ctypes 中添加了 c_time_t,其大小与C中的 time_t 类型相同。

  • gh-92839: 修复了当调用 bisect.insort() 或 bisect.insort_left() 时,key 参数不等于 None 导致的崩溃问题。

  • gh-90473: subprocess 现在在Emscripten和WASI平台上早期失败,以解决WASI上缺少 os.pipe() 的问题。

  • gh-89325: 移除了许多旧的已弃用的 unittest 特性:TestCase 方法别名、未记录且损坏的 TestCase 方法 assertDictContainsSubset、未记录的 TestLoader.loadTestsFromModule 参数 use_load_tests,以及 TextTestResult 类的一个下划线别名。

  • gh-92734: 允许 reprlib 发出的多元素 repr 使用可配置的缩进进行漂亮打印。

  • gh-92671: 修复了在赋值目标上下文中 ast.unparse() 对于空元组的问题。

  • gh-91581: utcfromtimestamp() 在纯Python实现中不再尝试解析 fold,因为在UTC中fold永远不会是1。除了在常见情况下稍微快一些之外,这还防止了当时间戳接近 datetime.min 时的一些错误。由Paul Ganssle提供补丁。

  • gh-86388: 移除了自Python 3.10以来已弃用的randrange()功能。以前,randrange(10.0)无损转换为randrange(10)。现在,它会引发TypeError。此外,对于非整数值如randrange(10.5)或randrange('10')引发的异常已从ValueError更改为TypeError。

  • gh-90385: 添加 pathlib.Path.walk() 作为 os.walk() 的替代方案。

  • gh-92550: 修复了 pathlib.Path.rglob() 对于空模式的问题。

  • gh-92591: 允许 logging 过滤器返回一个 logging.LogRecord 实例,以便附加到 logging.Handler的过滤器可以在不影响其他处理程序的情况下丰富记录。

  • gh-92445: 修复了 argparse 中的一个错误,其中 nargs="*" 在提供0个参数时会引发错误而不是返回空列表,如果 parser.add_argument 中也定义了选择。

  • gh-92547: 移除了在 Python 3.10 中弃用的未文档化 sqlite3 功能:

    • sqlite3.enable_shared_cache()

    • sqlite3.OptimizedUnicode

    由 Erlend E. Aasland 提交的补丁。

  • gh-92530: 修复了在中断 threading.Condition.notify() 后出现的问题。

  • gh-92531: statistics.median_grouped() 函数现在总是返回一个浮点数。以前,对于长度为1的序列,它不会转换输入类型。

  • gh-84131: pathlib.Path 弃用的方法 link_to 已被移除。使用 3.10 的 hardlink_to() 方法代替,因为其语义与 symlink_to() 一致。

  • gh-89336: 移除了 configparser 模块的 API:SafeConfigParser 类别别名、ParsingError.filename 属性和参数,以及 ConfigParser.readfp 方法,所有这些自 Python 3.2 起已被弃用。

  • gh-92391: 向 csv.DictReadercsv.DictWriter 添加了 __class_getitem__(),允许它们在运行时被参数化。由 Marc Mueller 提供补丁。

  • gh-91968: 向 socket 添加了 SO_RTABLESO_USER_COOKIE 常量。

  • gh-91810: ElementTree 方法 write() 和函数 tostring() 现在在指定 encoding="unicode" 时使用文本文件的编码(如果不可用则为 "UTF-8")而不是 XML 声明中的区域设置编码。

  • gh-81790: os.path.splitdrive() 现在理解带有 UNC 链接的 DOS 设备路径(以 \\?\UNC\ 开头)。由 Barney Gale 贡献。

  • gh-91760: 对正则表达式中的数字组引用和组名应用更严格的规则。现在仅接受ASCII数字序列作为数字引用。字节模式和替换字符串中的组名现在只能包含ASCII字母、数字和下划线。

  • gh-90622: 当多进程上下文启动方法为 ``"fork"``时,concurrent.futures.ProcessPoolExecutor 的工作进程不再按需生成(这是3.9版本中添加的特性),因为这可能会导致子进程中的死锁,因为在线程运行时发生了fork。

  • gh-91577: 将 SharedMemory 方法中的导入移动到模块级别,以便它们可以在Python终止的后期执行。

  • gh-91581: 移除了在调用没有时区的 datetime.fromtimestamp 的C实现中未处理的错误情况(即从epoch时间戳获取本地时间)。这除了在调用落在本地时间10000-01-01的时间戳时可能给出更准确的错误消息外,应该不会对用户产生影响。由Paul Ganssle提供补丁。

  • gh-91539: 当有许多环境变量时,提高 urllib.request.getproxies_environment 的性能。

  • gh-91524: 对于包含组引用的替换字符串,通过2--3倍的速度提高了正则表达式替换(函数 re.sub()re.subn() 以及相应的 re.Pattern 方法)的性能。

  • gh-91447: 修复xml模块中的findtext,仅在文本属性设置为 None 时给出空字符串。

  • gh-91456: 弃用当前的默认auto()行为:在3.13版本中,auto()的默认行为将始终返回最大成员值加1,并在使用不兼容的值类型时引发错误。

  • bpo-47231: 修复了tarfile长名字目录中不一致的尾部斜杠问题。

  • bpo-39064: zipfile.ZipFile 现在在读取损坏的 zip 文件时,如果中央目录偏移为负,会引发 zipfile.BadZipFile 而不是 ValueError

  • bpo-41287: 修复了 property() 子类中 doc 参数的处理。

  • gh-90005: ctypes 依赖项 libffi 现在通过 pkg-config 检测。

  • bpo-32547: DictWriterDictReader 的构造函数现在将 fieldnames 参数强制转换为 list,如果它是一个迭代器的话。

  • bpo-35540: 修复了当 collections.defaultdict 出现在属性中时 dataclasses.asdict() 崩溃的问题。

  • bpo-47063: 添加了一个 index_pages 参数以支持使用非默认的索引页面名称。

  • bpo-47025: 取消了对 sys.pathbytes 的支持。

  • bpo-46951: 对 zipapp 归档的内容进行排序,以使构建更具可重现性。

  • bpo-42777: 为 Windows 路径实现了 pathlib.Path.is_mount()

  • bpo-46755: 在 QueueHandler 中,清除 LogRecord 中的 stack_info 以防止堆栈跟踪被写入两次。

  • bpo-45393: 在使用 help() 系统时,修复了操作符优先级表中 await xnot x 的格式化。

  • bpo-46642: 当尝试子类化 typing.TypeVartyping.ParamSpectyping.TypeVarTuple 等的实例时,改进了错误消息。基于 Gregory Beauregard 的补丁。

  • bpo-46364: 限制使用套接字而不是管道作为 asyncio 创建的子进程的标准输入,仅限于 AIX 平台。

  • bpo-28249: 当对象没有 __doc__ 时,将 doctest.DocTest.lineno 设置为 None

  • bpo-46197: 修复了 ensurepip 对运行 pip 的子进程的环境隔离。

  • bpo-45924: 修复了 asyncio 在多次引发 future 的异常时的错误回溯。由 Kumar Aditya 提供补丁。

  • bpo-45046: 在 unittest 中添加对上下文管理器的支持:类 TestCase 的方法 enterContext()enterClassContext(),类 IsolatedAsyncioTestCase 的方法 enterAsyncContext() 以及函数 unittest.enterModuleContext()

  • bpo-44173: 启用对未压缩未加密的 zipfile.ZipExtFile 的快速寻址。

  • bpo-42627: 修复了 Windows 注册表代理设置的错误解析。

  • bpo-42047: 为 DragonFly BSD 添加 threading.get_native_id() 支持。由 David Carlier 提供补丁。

  • bpo-14243: tempfile.NamedTemporaryFile 函数新增了一个可选形参 delete_on_close

  • bpo-41246: 为 IocpProactor 内部的 recv, recv_into, recvfrom, sendto, sendsendfile 函数提供了相同的回调函数,当重叠操作完成时调用。

  • bpo-39264: 修复了 collections.UserDict.get() 在值未找到时不调用 __missing__() 的问题。这与 dict 的行为一致。由 Bar Harel 提供补丁。

  • bpo-38693: importlib 现在内部使用 f-strings 而非 str.format

  • bpo-38267: 为 asyncio.loop.shutdown_default_executor() 添加了 timeout 参数。默认值为 None,意味着执行器将被给予无限的时间。当从 asyncio.Runnerasyncio.run() 调用时,默认超时为 5 分钟。

  • bpo-34828: sqlite3.Connection.iterdump() 现在可以处理在一个或多个表中使用 AUTOINCREMENT 的数据库。

  • bpo-32990: 支持在 wave 模块中读取使用 WAVE_FORMAT_EXTENSIBLE 格式的 wave 文件。

  • bpo-26253: 允许在 tarfile.open() 中为 tarfile 流调整压缩级别。

文档

  • gh-85525: 移除额外的行

  • gh-86404: 已移除弃用的工具 make suspiciousrstlint.py。它们已被 sphinx-lint 替代。

  • gh-97741: 通过 conf.py 补丁修复了 c 域引用目标语法中的 !,使其按预期禁用引用目标解析。

  • gh-96432: 分数字面量现在支持正斜杠周围的空格,Fraction('2 / 3')

  • gh-96098: 通过从较低级别的 threading 和 multiprocessing 模块提供更清晰的链接,提高了较高层次 concurrent.futures 模块的可发现性。

  • gh-95957: What's New 3.11 现在提供了关于如何在 RHEL 7 和 CentOS 7 上为 Tcl/Tk 和 OpenSSL 提供编译器和链接器标志的说明。

  • gh-95588: 澄清了 ast 文档中关于 ast.literal_eval() 对不可信输入“安全”使用的冲突建议,同时警告它可能会崩溃进程。后一种说法是正确的,并且被认为在不适合 bugfix 的大量工作下无法修复。因此我们保留警告,不再声称 literal_eval 是安全的。

  • gh-91207: 修复了 Windows CHM htmlhelp 文档中样式表不起作用的问题,并添加了它们已被弃用的警告。由 C.A.M. Gerlach 贡献。

  • gh-95454: 替换了文档中错误书写的真/假值。由 Robert O'Shea 提供补丁。

  • gh-95451: 更新了库文档,添加了关于 WebAssembly 平台 wasm32-emscriptenwasm32-wasiavailability information

  • gh-95415: 对平台可用性使用一致的语法。该指令现在支持内容体,并在遇到未知平台时发出警告。

  • gh-94321: 文档化 PEP 246 风格的协议类型 sqlite3.PrepareProtocol

  • gh-86128: 文档化 ThreadPoolExecutor 中的一个限制,即其退出处理程序在任何 atexit 处理程序之前执行。

  • gh-61162: 澄清 sqlite3如何使用连接上下文管理器 时的行为。

  • gh-87260: 将 sqlite3 的参数规范与实际实现对齐。

  • gh-86986: 构建文档所需的最低 Sphinx 版本现在是 3.2。

  • gh-88831: 增加了 asyncio.create_task() 的文档。明确了需要保持对任务的强引用,并添加了一个代码片段详细说明如何做到这一点。

  • gh-86438: 澄清了在 warnings 中,-WPYTHONWARNINGS 是字面匹配且不区分大小写的,而不是作为正则表达式匹配。

  • gh-93031: 更新教程介绍输出,以使用 3.10+ 的 SyntaxError 无效范围。

  • gh-92240: 为 "Python 3.X 中的新特性" 添加了 3.0、3.1、3.2、3.8 和 3.10 版本的发布日期。

  • bpo-47161: 文档说明 pathlib.PurePath 不会合并开头的双斜杠,因为它们表示 UNC 路径。

  • bpo-40838: 文档说明 inspect.getdoc()inspect.getmodule()inspect.getsourcefile() 可能会返回 None

  • bpo-43689: Differ 文档现在还提到了其他空白字符,这些字符使得理解差异输出更加困难。

  • bpo-38056: 全面修改了 codecs 中的 错误处理方案 文档。

  • bpo-13553: 文档说明 tkinter.Tk 的参数。

测试

  • gh-95027: 在 Windows 上,当 Python 测试套件使用 -jN 选项运行时,现在将 ANSI 代码页用作 stdout 临时文件的编码,而不是使用可能导致解码错误的 UTF-8。补丁由 Victor Stinner 提供。

  • gh-96624: 修复了 test.test_unittest 重复运行失败的问题,该问题是由 test_dotted_but_module_not_loaded 中的副作用引起的。

  • gh-95243: 通过在失败前尝试多次找到未使用的端口,缓解了在 testSockName() 中使用 find_unused_port() 固有的竞态条件。由 Ross Burton 提供补丁。

  • gh-95573: Lib/test/test_asyncio/test_ssl.py 暴露了 macOS 内核中的一个 bug,其中非阻塞套接字上的高强度并发负载偶尔会导致 errno.ENOBUFS (“无缓冲区空间可用”) 被发出。已向 Apple 提交 FB11063974,同时作为一种临时解决方案,减少在 macOS 上测试中使用的缓冲区大小以避免间歇性失败。由 Fantix King 提供补丁。

  • gh-95280: 修复了在需要完美前向保密(PFS)密码的系统上 test_ssl test_get_ciphers 的问题。

  • gh-95212: 使多进程测试用例 test_shared_memory_recreate 并行安全。

  • gh-95218: 将 importlib.resources 的测试移动到 test_importlib.resources。

  • gh-93963: 更新测试以使用 importlib.resources ABCs 的首选位置。

  • gh-94675: 为 re 在使用 rjsmin 时的指数级减速添加了一个回归测试。

  • gh-91330: 为 dataclasses 添加了更多测试,以覆盖基于数据描述符的字段的行为。

  • gh-94208: test_ssl 现在在更多测试中检查支持的 TLS 版本和协议。

  • gh-94315: 测试现在检查 DAC 覆盖能力,而不是依赖于 os.geteuid()

  • gh-54781: 将 test_tk 重命名为 test_tkinter,并将 test_ttk_guionly 重命名为 test_ttk。补丁由 Victor Stinner 提供。

  • gh-93839: 将 Lib/ctypes/test/ 移动到 Lib/test/test_ctypes/。由 Victor Stinner 提供补丁。

  • gh-93951: 在 test_bdb.StateTestCase.test_skip 中,避免包括辅助导入器。

  • gh-93957: 在 test_venv.EnsurePipTest.test_with_pip 中提供来自子进程的更友好的错误报告。

  • gh-93884: 为 PyNumber_ToBase() 添加测试用例,这些用例将大数字或非整数对象作为参数。

  • gh-93852: test_asyncio, test_logging, test_socket 和 test_socketserver 现在在当前目录中创建 AF_UNIX 域,以避免如果临时目录(TMPDIR 环境变量)太长时因 OSError("AF_UNIX 路径太长") 而失败。由 Victor Stinner 提供补丁。

  • gh-93353: regrtest 现在在运行 -jN 选项时会检查测试是否泄漏临时文件或目录。由 Victor Stinner 提供补丁。

  • gh-84461: run_tests.py 现在正确处理交叉编译环境变量,并将 HOSTRUNNER 传递给回归测试。

  • gh-93616: test_modulefinder 现在在 ModuleFinderTest.setUp() 中创建临时目录,而不是在模块范围内。

  • gh-93575: 修复 test_unicode test_raiseMemError 的问题。测试用例现在使用 test.support.calcobjsize 来计算 PyUnicode 结构的大小。sys.getsizeof() 在字符串具有 UTF-8 内存时可能返回不同的大小。

  • gh-90473: WASI 没有 chmod(2) 系统调用。os.chmod() 现在在 WASI 上是一个虚拟函数。跳过所有依赖于 os.chmod() 正常工作的测试。

  • gh-90473: 在 WASI 上跳过需要绝对路径符号链接的测试。

  • gh-57539: 增加 calendar.LocaleTextCalendar.formatweekday() 的日历测试覆盖率。

  • gh-90473: 在 WASI 上跳过符号链接测试。wasmtime 使用 openat2(2)RESOLVE_BENEATH 标志,这阻止了具有绝对路径的符号链接。

  • gh-89858: 为树外构建修复 test_embed。由 Kumar Aditya 提供补丁。

  • gh-92886: 修复在 test_imaplib.py 中使用优化 (-O) 运行时失败的测试。

  • gh-92886: 修复在 test_zipimport.py 中使用优化 (-O) 运行时失败的测试。

  • gh-92886: 修复在 test_py_compile.py 中使用优化 (-O) 运行时失败的测试。

  • gh-92886: 修复在 test_sys_settrace.py 中使用优化 (-O) 运行时失败的测试。

  • gh-92886: 修复在 _test_multiprocessing.py 中使用优化 (-O) 运行时失败的测试。

  • gh-92670: 在 AIX 上跳过 test_shutil.TestCopy.test_copyfile_nonexistent_dir 测试,因为测试使用尾部斜杠强制操作系统将路径视为目录,但在 AIX 上尾部斜杠没有效果,被视为文件。

  • gh-92514: 移除未使用的 test.support.BasicTestRunner。由 Jelle Zijlstra 提供补丁。

  • bpo-47016: 创建一个 GitHub Actions 工作流用于验证捆绑的 pip 和 setuptools。由 Illia Volochii 和 Adam Turner 提供补丁。

构建

  • gh-96761: 修复 _bootstrap_python 的 clang 编译器构建过程,如果应用了 LTO 优化。由 Matthias Görgens 和 Donghee Na 提供补丁。

  • gh-96883: 浏览器的 wasm32-emscripten 构建现在包括 concurrent.futures 用于 asynciounittest.mock

  • gh-85936: CPython 现在使用 ThinLTO 选项作为默认策略,如果 Clang 编译器接受该标志。补丁由 Donghee Na 提供。

  • gh-96729: 确保使用 Tools\msi\buildrelease.bat 构建的 Windows 版本可以升级到官方 Python 版本,也可以从官方 Python 版本升级。

  • gh-96269: 共享模块目标现在依赖于新的 MODULE_DEPS 变量,该变量包括 EXPORTSYMS。这修复了不受支持的 AIX 平台上的构建顺序问题。

  • gh-84461: wasm32-emscripten 平台不再构建 resource 模块,getresuid()getresgid(),以及它们的设置器。这些 API 是存根且不可用。

  • gh-95973: 添加一个新的 --with-dsymutil 配置选项以在 macOS 中链接调试信息。由 Pablo Galindo 提供补丁。

  • gh-90536: 使用 BOLT 后链接优化器来提高性能,特别是在中型到大型应用程序上。

  • gh-93744: 移除 configure --with-cxx-main 构建选项:它已经多年不工作。从 configureMakefile 中移除 MAINCC 变量。由 Victor Stinner 提供补丁。

  • gh-94801: 修复 configure 脚本中的一个回归,该回归导致某些头文件检查忽略自定义的 CPPFLAGS。该回归在 gh-94802 中引入。

  • gh-95145: wasm32-wasi 构建不再依赖 WASIX 的 pthread 存根。Python 现在有自己的存根 pthread API。

  • gh-95174: Python 现在检测 WASI 中缺失的 dup 函数,并解决一些缺失的 errnoselect,和 socket 常量。

  • gh-95174: Python 现在在 WASI 上跳过缺失的 socket 函数和方法。WASI 只能从现有的 fd 创建套接字 / accept 并且没有 netdb。

  • gh-95085: 平台 wasm32-unknown-emscriptenwasm32-unknown-wasi 已被提升为 PEP 11 第3层平台支持。

  • gh-94847: 修复了在 GCC 使用 LTO 和 pydebug 编译时 _decimal 模块的构建问题。调试构建不再强制内联函数。

  • gh-94841: 修复了使用 MSVC 版本 1932 编译的 PyObject_Free() 可能的性能回归。

  • gh-94801: configure 现在在搜索头文件和库时使用自定义标志如 ZLIB_CFLAGSZLIB_LIBS

  • gh-94773: deepfreeze.py 现在支持包含不兼容、不可排序类型的 frozensets 的代码对象。

  • gh-94682: 使用 OpenSSL 1.1.1q 进行构建和测试

  • gh-90005: readlinecurses 模块的依赖现在在 configure 脚本中通过 pkg-config 检测。只有 ncurses / ncursesw 被自动检测。旧的 curses 库不再自动配置。对于缺失 termcaptinfo 库的变通方法已被移除。

  • gh-90005: 修复了在没有 pkg-config 的情况下构建 _ctypes 扩展的问题。

  • gh-90005: _dbm 模块的依赖现在由 configure 检测。

  • gh-94404: makesetup 现在解决了 macOS 上 sed 的问题,并为最终出现在共享扩展中的对象文件使用了正确的 CFLAGS。模块 CFLAGS 在 PY_STDMODULE_CFLAGS 之前使用,以避免与系统头文件冲突。

  • gh-93939: C 扩展模块现在由 configuremake 构建,而不是 distutilssetup.py

  • gh-93939: 2to3idlepydoc 脚本现在由 Makefile 生成和安装,而不是 setup.py

  • gh-94280: 在Windows上更新了pegen重新生成脚本,以查找并使用Python 3.9或更高版本。在此之前,pegen重新生成已经要求3.9或更高版本,但脚本可能使用了较低版本的Python。

  • gh-93584: 解决了在安装PGO构建时 Makefile``中的竞争条件。所有 ``testinstall 目标现在都依赖于 all 目标。

  • gh-93491: configure 现在检测并报告 PEP 11 支持层级。

  • gh-69093: 修复了 Modules/Setup.stdlib.in_sqlite3 扩展的规则。

  • gh-93207: 现在构建Python需要带有两个参数的 va_start(),如``va_start(args, format),``。``va_start()``不再使用单个参数调用。由Kumar Aditya提供补丁。

  • gh-93202: Python现在总是使用 %zu%zd printf格式来格式化 size_t 或``Py_ssize_t``数字。构建Python 3.12需要一个C11编译器,因此现在总是支持这些printf格式。补丁由Victor Stinner提供。

  • gh-90473: 在 wasm32-wasi 上禁用pymalloc并增加堆栈大小。

  • bpo-34449: 为HP-UX上的HP aCC移除无效的编译器开关 -fPIC。由Michael Osipov提供补丁。

Windows

  • gh-98360: 修复了 multiprocessing 在Windows上从虚拟环境生成子进程的问题,以确保同样使用 multiprocessing 生成更多子进程的子进程能够识别它们处于虚拟环境中。

  • gh-98414: 修复了 py.exe 启动器对 -V:<company>/ 选项的处理,当默认首选项已在环境变量或配置文件中设置时。

  • gh-97728: 修复了在Windows上 os.system() 和Windows特定模块(如 winreg)中传递无效参数时使用未初始化变量可能导致的崩溃。

  • gh-90989: 默认情况下使 Python 安装管理器 按用户安装(除非已经存在所有用户安装),并澄清安装程序中的一些文本。

  • gh-97649: Tools 目录不再安装在Windows上。

  • gh-96965: 将libffi更新至3.4.3。

  • gh-96577: 修复了 msilib 中潜在的缓冲区溢出问题。

  • gh-96559: 修复了当没有向命令传递标签时,Windows启动器不使用配置文件中找到的默认标签的兼容性解释的问题。

  • gh-94781: 修复 pcbuild.proj 以清理 Windows 上 Python\deepfreezePython\frozen_modules 目录中输出文件的先前实例。由 Charlie Zhao 提供补丁。

  • gh-89545: 更新 platform 代码,获取 Windows 版本以使用本机 Windows Management Instrumentation (WMI) 查询来确定操作系统版本、类型和架构。

  • gh-95733: 使 Windows Store 包的某些要求成为可选,以允许在 Windows 的早期更新上安装。

  • gh-95656: 启用 enable_load_extension() sqlite3 API。

  • gh-95587: 修复了 Windows 安装程序在升级时错误检测现有安装的某些功能的问题。

  • gh-94399: 恢复了 Python 安装管理器 对于 /usr/bin/env shebang 行的行为,现在将在 PATH 中搜索与给定命令匹配的可执行文件。如果没有找到,则使用通常的搜索过程。

  • gh-95445: 修复了在使用 Windows msi 卸载时未能成功删除 HTML 文档目录的问题。

  • gh-95359: 修复 Python 安装管理器py.ini 命令的处理(它错误地期望键上有 py_ 前缀)以及在读取每用户配置文件时的崩溃问题。

  • gh-95285: 修复 Python 安装管理器 处理仅传递短可执行名称的命令行的问题。

  • gh-90844: 允许虚拟环境在路径中有空格时正确启动。

  • gh-94772: 修复 py.exe 启动器中 shebang 行的错误处理

  • gh-94018: zipfile 现在将在 Windows 上提取文件时从路径组件中删除尾随空格。

  • gh-93824: 对于 Windows ARM64,已启用将文件拖放到 Windows 资源管理器中的 Python 文件上。

  • gh-43414: os.get_terminal_size() 现在尝试从任何提供的句柄读取大小,而不仅支持文件描述符 0、1 和 2。

  • gh-92817: 确保 py.exe 将优先选择活动的虚拟环境,而不是通过环境变量或 py.ini 文件指定的默认标签。

  • gh-92984: 明确为非调试构建禁用增量链接

  • gh-92841: asyncio 在异步套接字活动后解释器退出时不再抛出 RuntimeError: Event loop is closed。由 Oleg Iarygin 提供补丁。

  • bpo-46907: 更新 Windows 安装程序以使用 SQLite 3.38.4。

  • gh-91061: 接受 os.PathLike 作为 winsound.PlaySound 的参数

  • bpo-42658: 通过使用 LCMapStringEx 而不是 str.lower()ntpath.normcase() 中支持原生的 Windows 大小写不敏感路径比较。将 LCMapStringEx 添加到 _winapi 模块。

  • bpo-38704: 阻止在不支持的 Windows 版本上安装。

macOS

  • gh-97897: macOS 13 SDK 包含对 mkfifoatmknodat 系统调用的支持。如果在使用 macOS 13 SDK 构建的 cpython 但在较早版本的 macOS 上运行时,使用 dir_fd 选项与 os.mkfifo()os.mknod() 可能导致段错误。通过添加对这些系统调用的运行时支持检测(“弱链接”)来防止这种情况,就像在 macOS 上对其他更新的系统调用所做的那样。

IDLE

  • gh-97527: 修复了之前的一个 bug,该 bug 导致在运行 3.10.8、3.12.0a1 和至少 Microsoft Python 3.10.2288.0 且未安装 Lib/test 包时,IDLE 无法启动。3.11.0 从未受到影响。

  • gh-65802: 记录在另存为对话框中处理扩展名的方法。

  • gh-95191: 保存 Shell(交互式输入和输出)时包括提示。

  • gh-95511: 修复 Shell 上下文菜单复制带提示的 bug,即当选择整行时会复制额外的行。

  • gh-95471: 在编辑菜单中,移动 Select All 并添加一个新的分隔符。

  • gh-95411: 启用IDLE的模块浏览器以支持.pyw文件。

  • gh-89610: 在macOS上为IDLE添加.pyi作为已识别的扩展名。这允许通过双击Finder中的存根文件来打开它们。

工具/示例

  • gh-68686: 移除ptags和eptags脚本。

  • gh-97681: 移除包含旧演示脚本的 Tools/demo/ 目录。副本可以在`old-demos项目 <https://github.com/gvanrossum/old-demos>`_中找到。由Victor Stinner提供补丁。

  • gh-97669: 移除 Tools/scripts/ 目录中过时的示例脚本。副本可以在`old-demos项目 <https://github.com/gvanrossum/old-demos>`_中找到。由Victor Stinner提供补丁。

  • gh-95853: wasm_build.py 脚本现在预构建Emscripten端口,检查损坏的EMSDK版本,并警告关于pkg-config环境变量。

  • gh-95853: 新工具 Tools/wasm/wasm_builder.py 自动化了在WebAssembly平台上构建CPython的配置、编译和测试步骤。

  • gh-95731: 修复 Tools/i18n/pygettext.py 中模块文档字符串的处理。

  • gh-93939: 添加脚本 Tools/scripts/check_modules.py 来检查和验证内置和共享扩展模块。该脚本还处理 Modules/Setup,并将最终取代 setup.py

  • gh-94538: 修复Argument Clinic输出到自定义文件目的地的问题。补丁由Erlend E. Aasland提供。

  • gh-94430: 允许在Argument Clinic中使用名为 moduleself 的参数,并带有自定义C名称。由Erlend E. Aasland提供补丁。

  • gh-86087: 用于解析HTML4实体的 Tools/scripts/parseentities.py 脚本已被移除。

C API

Python 3.11.0 beta 1

发布日期:2022-05-06

安全性

  • gh-57684: 添加 -P 命令行选项和 PYTHONSAFEPATH 环境变量,以避免将可能不安全的路径前置到 sys.path。由 Victor Stinner 提供补丁。

核心与内置函数

  • gh-89519: 链式 classmethod 描述符(在 bpo-19072 中引入)已被弃用。它不能再用于包装其他描述符,如 property()。此功能的核心设计存在缺陷,并导致了一系列下游问题。

  • gh-92345: pymain_run_python() 现在在 sys.path 被扩展以包括交互式解释器的当前工作目录之前导入 readlinerlcompleter。非交互式解释器不受影响。

  • bpo-43857: 当删除一个缺失的属性时,改进 AttributeError 消息。由 Géry Ogam 提供补丁。

  • gh-92245: 确保在所有情况下都遵循 PEP 523。在 3.11a7 中,专业化可能阻止了 Python 到 Python 的调用遵循 PEP 523。

  • gh-92203: 向 exec() 添加一个仅限关键字的参数 closure。它只能在 exec 一个使用自由变量的代码对象时指定。指定时,它必须是一个元组,且恰好与代码对象引用的单元格变量数量相同。closure 的默认值为 None,如果代码对象不引用任何自由变量,则必须为 None

  • gh-91173: 在调试构建中禁用冻结模块。由 Kumar Aditya 提供补丁。

  • gh-92114: 当使用设置为 None__class_getitem__ 下标类型时,改进错误消息。

  • gh-92112: 修复由元类上的恶意自定义 mro() 触发的崩溃。

  • gh-92063: PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 指令现在确保方法仅在正确类型的对象上调用。

  • gh-92031: 在 Py_FINALIZE() 期间静态分配的代码对象进行去优化,以便未来的 _PyCode_Quicken 调用总是从未优化的代码开始。

  • gh-92036: 修复了与垃圾收集器相关的子解释器崩溃问题。当删除子解释器时,取消跟踪其垃圾收集器跟踪的所有对象。为了防止在期望对象被垃圾收集器跟踪的析构函数中崩溃,有意泄露这些对象的强引用,这样它们就永远不会被删除,它们的析构函数也不会被调用。由Victor Stinner提供补丁。

  • gh-92032: 解释器现在可以自动完成软关键字,截至目前包括来自 PEP 634matchcase_ (通配符模式) 。

  • gh-87999: Python解析器对于紧跟在关键字后的数字字面量发出的警告已从弃用警告更改为语法警告。

  • gh-91869: 修复了一个问题,即带有扩展参数的专业操作码可能产生不正确的跟踪输出或导致断言失败。

  • gh-91603: 加速 types.UnionType 的实例化。基于Yurii Karabas提供的补丁。

  • gh-89373: 如果Python在调试模式下构建,Python现在确保析构函数不会改变当前异常。由Victor Stinner提供补丁。

  • gh-91632: 修复了一个退出时的轻微内存泄漏:释放 generic_alias_iterator 类型的内存。由Donghee Na提供补丁。

  • gh-81548: 值大于 0o377 的八进制转义现在会产生 DeprecationWarning。在未来的Python版本中,它们将变为 SyntaxWarning,最终变为 SyntaxError

  • bpo-43950: 使用单个紧凑表来表示行的开始、结束和列偏移。将位置信息的内存消耗减少了一半。

  • gh-91102: 对 EncodingMap 使用Argument Clinic。由Oleg Iarygin提供补丁。

  • gh-91636: 修复了垃圾回收边缘情况下的崩溃问题,其中 PyFunction_Type.tp_clear 函数可能让Python函数对象处于不一致状态。

  • gh-91603: 加速 isinstance()issubclass()types.UnionType 的检查。由Yurii Karabas提供补丁。

  • gh-91625: 修复了一个在自适应操作码特化失败时忽略任何前置 EXTENDED_ARG 的错误。

  • gh-78607: LLTRACE特殊构建现在查找模块全局中定义的名称 __lltrace__,而不是之前因拼写错误引入的名称 __ltrace__

  • gh-91576: 通过Kumar Aditya的补丁,将ASCII字符串的迭代速度提高了50%。

  • gh-89279: 通过内联几个特定的宏来提高Windows上解释器的性能。

  • gh-91502: 添加一个新的 _PyFrame_IsEntryFrame() API函数,用于检查 PyFrameObject 是否为入口帧。由Pablo Galindo提供补丁。

  • gh-91266: 重构 bytearray 的去除方法 striplstriprstrip,以使用共同的实现。

  • gh-91479: 将 BaseException__note__ 字段(在3.11的早期版本中添加)替换为 PEP 678 的最终设计。即 BaseException 获得一个 add_note() 方法,其 __notes__ 字段在必要时创建。

  • gh-46055: 通过移除不必要的临时创建,加速负整数的右移操作。原始由Xinhang Xu提供补丁,由Mark Dickinson重新设计。

  • gh-91462: 通过显示操作码名称(而不仅仅是数字)和每个操作码前的堆栈内容,使解释器的低级跟踪(lltrace)功能输出更易读。

  • gh-89455: 修复了由初始的 bpo-45292 异常组工作引入的跟踪打印代码路径中未初始化的布尔值。

  • gh-91421: 修复了 _Py_DecodeUTF8Ex 中潜在的整数溢出问题。

  • gh-91428: 在调试版本的 opcode.h 中添加 static const char *const _PyOpcode_OpName[256] = {...};,以帮助调试Python解释器。现在,通过包含操作码名称而不仅仅是相应的十进制数字,使得各种形式的调试输出更便于人类阅读变得更加方便。

  • bpo-47120: 使 POP_JUMP_IF_TRUEPOP_JUMP_IF_FALSEPOP_JUMP_IF_NONEPOP_JUMP_IF_NOT_NONE 虚拟化,映射到新的相对跳转操作码。

  • bpo-45317: 添加内部文档,解释新的(针对3.11版本)帧栈的设计。

  • bpo-47197: ctypes 过去错误处理 void 返回类型,例如,像 ctypes.CFUNCTYPE(None, ctypes.c_int) 这样声明的函数会以 int f(int) 的签名被调用,而不是 void f(int)。Wasm 目标要求以正确的签名调用函数指针,因此这导致了崩溃。现在这个问题已经修复。

  • bpo-47120: 使操作码 JUMP_IF_TRUE_OR_POPJUMP_IF_FALSE_OR_POP 相对而不是绝对。

  • bpo-47177: 将内部 _PyInterpreterFrame 结构的 f_lasti 成员替换为 prev_instr 指针,这减少了主解释器循环的开销。为了向后兼容,Python层框架对象的 f_lasti 属性被保留。

  • bpo-46961: 整数模/余数操作,包括 pow() 的三参数形式,现在在适用时一致地从全局小整数缓存返回整数。

  • bpo-46962: 类和函数不再无视 --without-doc-strings 编译标志无条件声明它们的文档字符串。

    受影响的类有 ctypes.UnionTypepickle.PickleBuffertestcapi.RecursingInfinitelyErrortypes.GenericAlias

    受影响的函数是 ctypes 中的24个方法。

    由 Oleg Iarygin 提供补丁。

  • bpo-46942: 使用 Argument Clinic 为 types.MethodType 构造函数。由 Oleg Iarygin 提供补丁。

  • bpo-46764: 修复使用 @classmethod 包装绑定方法的问题。

  • bpo-43464: 为非集合参数优化 set.intersection()

  • bpo-46721: 为非集合参数优化 set.issuperset()

  • bpo-46509: 添加 Py_DECREF() 的类型特化版本,并为 floatintstrboolNone 使用它们,以避免在运行时类型已知的情况下进行指针追踪。

  • bpo-46045: 在 NetBSD 上不使用 POSIX 信号量。

  • bpo-36819: 修复内置编码器中错误处理程序返回的位置小于或等于不可编码字符起始位置时的崩溃问题。

  • bpo-34093: marshal.dumps() 对所有内部字符串使用 FLAG_REF。这使得输出更加确定性,有助于可重现的构建。

  • bpo-26579: 添加了 object.__getstate__,提供了 __getstate__() 方法的默认实现。

    现在复制和腌制内置类型 bytearray、set、frozenset、collections.OrderedDict、collections.deque、weakref.WeakSet 和 datetime.tzinfo 的子类实例时,会复制和腌制作为槽实现的实例属性。

  • gh-87901: 向 os.popen() 添加 encoding 参数。

  • gh-90997: 修复 dis 工具可能将填充的内联缓存条目解释为有效指令的问题。

  • gh-92332: 弃用 typing.Text (目前未计划移除该类) 。由 Alex Waygood 提供补丁。

  • gh-78157: 弃用枚举定义中成为成员的嵌套类——在 3.13 中它们将成为普通类;添加 membernonmember 函数以允许现在控制结果。

  • gh-92356: 修复了 ctypes 函数调用中的性能回归问题。

  • gh-90997: 当向 dis 工具传递 show_caches=True 时,显示存储在内联缓存中的实际命名值。

  • gh-92301: 在 subprocess 模块中,优先使用 close_range() 而非遍历procfs来关闭文件描述符,以获得更好的性能。

  • gh-67248: 在Cmd.do_help()中对杂项主题进行排序。

  • gh-92210: 将 socket.__init__ 移植到Argument Clinic。由Cinder提供补丁。

  • gh-80010: 为 datetime.datetime.fromisoformat()datetime.date.fromisoformat()datetime.time.fromisoformat() 添加对广义ISO 8601解析的支持。由Paul Ganssle提供补丁。

  • gh-92118: 修复了 contextmanager() 在3.11版本中的一个回归问题,该问题导致异常传播时跟踪信息不正确。

  • gh-90887: 为macOs上的 os.fcopyfile() 添加 COPYFILE_STATCOPYFILE_ACL 和``COPYFILE_XATTR``常量。

  • gh-91215: 对于 @dataclass,添加 weakref_slot 参数。新参数默认为 False。如果为true,并且 slots=True,则添加一个名为 "__weakref__" 的槽,这将允许实例被弱引用。由Eric V. Smith贡献

  • gh-85984: 为Unix新增函数os.login_tty()。

  • gh-92128: 向 logging.LoggerAdapterlogging.StreamHandler 添加 __class_getitem__() 方法,允许它们在运行时被参数化。由Alex Waygood提供补丁。

  • gh-92049: 禁止pickling常量 re._constants.SUCCESS 等。之前,pickling不会失败,但结果无法被unpickle。

  • gh-92062: 如果 name 是一个关键字,除了现有的检查它是标识符外,inspect.Parameter 现在会引发 ValueError

  • gh-87390: 向 types.GenericAlias 添加一个 __unpacked__ 属性。由Jelle Zijlstra提供补丁。

  • gh-88089: 添加对泛型 typing.NamedTuple 的支持。

  • gh-91996: 新增http.HTTPMethod枚举,以方便的方式表示所有可用的HTTP请求方法

  • gh-91984: 修改test_argparse.py中的测试字符串,使其在行尾不包含尾随空格。

  • gh-91952: 向 TextIOWrapper.reconfigure() 添加 encoding="locale" 支持。

  • gh-91954: 向 subprocess.getoutput()subprocess.getstatusoutput() 添加 encodingerrors 参数。

  • bpo-47029: 在向管道的写入端最后一次写入缓冲数据*之后*,始终关闭 multiprocessing.Queue 使用的管道的读取端,以避免在垃圾回收和调用 multiprocessing.Queue.close() 时出现 BrokenPipeError。补丁由 Géry Ogam 提供。

  • gh-91928: 为 datetime.timezone.utc 添加 datetime.UTC 别名。

    由 Kabir Kwatra 提供补丁。

  • gh-68966: mailcap 模块现在已被弃用,并将在 Python 3.13 中移除。有关理由请参阅 PEP 594,替代方案请参阅 mimetypes 模块。由 Victor Stinner 提供补丁。

  • gh-91401: 提供一种方法来禁用 subprocess 使用 vfork(),以防万一需要,并记录 posix_spawn() 的现有机制。

  • gh-64783: 修复 FreeBSD 上的 signal.NSIG 值,以接受大于 32 的信号编号,如 signal.SIGRTMINsignal.SIGRTMAX。由 Victor Stinner 提供补丁。

  • gh-91910: 在 multiprocessingasyncio 模块的错误消息中,为 f-字符串添加缺失的 f 前缀。

  • gh-91860: 添加 typing.dataclass_transform(),实现 PEP 681。由 Jelle Zijlstra 提供补丁。

  • gh-91832: 在 argparse.Action 的 repr 输出中添加 required 属性。

  • gh-91827: 在 tkinter 模块中添加方法 info_patchlevel(),该方法返回 Tcl 库的确切版本,作为一个类似于 sys.version_info 的命名元组。

  • gh-84461: 添加 --enable-wasm-pthreads 以启用 WASM 构建的 pthreads 支持。Emscripten/node 不再默认启用线程。包括额外的文件系统。

  • gh-91821: 修复 test_decimal.py 中不稳定的 test_from_tuple 测试。

  • gh-91217: 弃用 xdrlib 模块。

  • gh-91217: 弃用 uu 模块。

  • gh-91760: 在正则表达式中,对数值组引用和组名将应用更严格的规则。目前,对于未来Python版本中将变为错误的组引用和组名,会发出弃用警告。

  • gh-84461: 添加临时的 sys._emscripten_info 命名元组,包含有关Emscripten平台的构建时和运行时信息。

  • gh-90623: signal.raise_signal()os.kill() 现在会立即检查挂起的信号。由Victor Stinner提交的补丁。

  • gh-91734: 修复Solaris上的OSS音频支持。

  • gh-90633: 在由 typing.assert_never() 抛出的异常中包含传递的值。由Jelle Zijlstra提交的补丁。

  • gh-91700: 现在,包含条件表达式 (?(group)...) 的正则表达式的编译,如果组号引用未定义的组,将引发适当的 re.error。之前会引发内部RuntimeError。

  • gh-91231: 向 multiprocessing.BaseManager 构造函数添加一个可选的关键字参数 shutdown_timeout。如果terminate()操作超过超时时间,则终止进程。由Victor Stinner提交的补丁。

  • gh-91621: 修复 typing.get_type_hints()collections.abc.Callable 的支持。由Shantanu Jain提交的补丁。

  • gh-90568: 在 regular expression 中解析Unicode命名字符序列的 \N 转义现在会引发 re.error 而不是 TypeError

  • gh-91670: 移除 sysconfig 中已弃用的 SO 配置变量。

  • gh-91217: 弃用telnetlib模块。

  • gh-91217: 弃用sunau模块。

  • gh-91217: 弃用spwd模块。

  • gh-91217: 弃用sndhdr模块,以及为 email.mime.MIMEAudio 内联所需的功能。

  • gh-91616: re 模块,修复使用原子分组或占有量词时的 fullmatch() 不匹配问题。

  • gh-91217: 弃用'pipes'模块。

  • gh-91217: 弃用ossaudiodev模块。

  • bpo-47256: re 模块,在64位构建中将最大捕获组限制为1,073,741,823,这增加了回溯的深度。

  • gh-91217: 弃用 nis 模块。

  • gh-91595: 修复 Tools.gdb.libpython.write_repr() 中字符和整数的比较。由 Yu Liu 提交的补丁。

  • gh-74166: 添加选项以在 create_connection() 无法建立连接时将所有错误以 ExceptionGroup 的形式抛出。默认行为仍然是仅抛出尝试多个地址时发生的最后一个错误。

  • gh-91487: 优化 asyncio UDP 速度,传输大文件时速度提升超过100倍。

  • gh-91575: 将 re 模块中的大小写不敏感匹配更新至最新的 Unicode 版本。

  • gh-90622: 在 concurrent.futures.process.ProcessPoolExecutor 中,当使用新的 max_tasks_per_child 特性时,禁止使用 "fork" 多进程启动方法,因为线程+fork 的混合会导致子进程挂起。在这种情况下,如果没有提供 mp_context,默认使用安全的 "spawn" 启动方法。

  • gh-89022: 在 sqlite3 中,SQLITE_MISUSE 结果代码现在映射到 InterfaceError 而不是 ProgrammingError。此外,当绑定参数失败时,会抛出更准确的异常。由 Erlend E. Aasland 提交的补丁。

  • gh-91526: 停止在 TextIOWrapper 中调用 os.device_encoding(file.fileno())。它复杂,从未被文档化,并且在大多数情况下不起作用。(由 Inada Naoki 提交的补丁。)

  • gh-88116: 将 inspect 模块中与帧相关的函数更改为返回一个常规对象(与旧的类似元组的接口向后兼容),该对象包括扩展的 PEP 657 位置信息(结束行号、列和结束列)。受影响的函数有:inspect.getframeinfo()inspect.getouterframes()inspect.getinnerframes()inspect.stack()inspect.trace()。由 Pablo Galindo 提交的补丁。

  • gh-69093: 为 sqlite3.Blob 添加索引和切片支持。由 Aviv Palivoda 和 Erlend E. Aasland 提交补丁。

  • gh-69093: 为 sqlite3.Blob 添加 上下文管理器` 支持。由 Aviv Palivoda 和 Erlend E. Aasland 提交补丁。

  • gh-91217: 废弃 nntplib。

  • gh-91217: 废弃 msilib。

  • gh-91404: 通过在支持的平台上使用计算跳转(或“线程代码”)并移除昂贵的指针间接寻址,提高 re 匹配的性能。

  • gh-91217: 废弃 imghdr 模块。

  • gh-91217: 废弃 crypt 模块。

  • gh-91276: 在 dis 输出中为更长的操作码腾出空间。

  • bpo-47000: 当指定 encoding="locale" 时,即使处于 UTF-8 模式,TextIOWrapper 也使用区域编码。

  • gh-91230: warnings.catch_warnings() 现在接受 warnings.simplefilter() 的参数,提供了一种更简洁的方式来本地忽略警告或将它们转换为错误。

  • gh-91217: 废弃 chunk 模块。

  • gh-91498: 在 socket 中添加 TCP_CONNECTION_INFO 选项(在 macOS 上可用)。

  • bpo-47260: 修复 os.closerange() 在 Linux seccomp 沙箱中可能不执行任何操作的问题。

  • bpo-47087: 实现 typing.Requiredtyping.NotRequired (PEP 655)。由 David Foster 和 Jelle Zijlstra 提交补丁。

  • bpo-47061: 废弃 cgi 和 cgitb。

  • bpo-47061: 废弃 audioop。

  • bpo-47000: 添加 locale.getencoding() 以获取当前区域编码。它类似于 locale.getpreferredencoding(False),但忽略 Python UTF-8 模式

  • bpo-42012: 添加 wsgiref.types,包含用于静态类型检查的 WSGI 特定类型。

  • bpo-47227: 对更多 re 解析错误抑制表达式链。

  • bpo-47211: 移除未文档化且从未工作的函数 re.template() 和标志 re.TEMPLATE。这在 3.11.0b2 中被撤销并改为废弃。

  • bpo-47135: decimal.localcontext() 现在通过关键字参数接受上下文属性。

  • bpo-43323: 修复 email 模块中如果字符集本身包含不可解码/不可编码字符时的错误。

  • bpo-46841: 快速代码的反汇编。

  • bpo-46681: 将 gzip.compress() 的 compresslevel 参数传递给 zlib。

  • bpo-45100: 添加 typing.get_overloads()typing.clear_overloads()。由 Jelle Zijlstra 提供补丁。

  • bpo-44807: typing.Protocol 不再静默替换子类上定义的 __init__() 方法。由 Adrian Garcia Badaracco 提供补丁。

  • bpo-46787: 修复 concurrent.futures.ProcessPoolExecutor 异常内存泄漏

  • bpo-46720: 为 Windows 添加对路径类对象的支持到 multiprocessing.set_executable(),以与类 Unix 系统保持一致。由 Géry Ogam 提供补丁。

  • bpo-46696: 添加 SO_INCOMING_CPU 常量到 socket

  • bpo-46053: 修复 NetBSD 上的 OSS 音频支持。

  • bpo-45639: 添加 image/avifimage/webpmimetypes

  • bpo-46285: 为模块 http.server 添加命令行选项 -p/--protocol,指定服务器符合的 HTTP 版本(HTTP/1.1 兼容的服务器现在可以从模块 http.server 的命令行界面运行)。由 Géry Ogam 提供补丁。

  • bpo-44791: 接受省略号作为 typing.Concatenate 的最后一个参数。

  • bpo-46547: 移除泄漏到 pydoc.Helper 类命名空间的变量。

  • bpo-46415: 修复 ipaddress.ip_{address,interface,network} 在给定无效元组作为地址参数时抛出 TypeError 而不是 ValueError 的问题。

  • bpo-46075: 带有 DefaultCookiePolicyCookieJar 现在可以处理来自 localhost 的 cookie,这些 cookie 在 Set-Cookie 头中明确指定了 domain=localhost。

  • bpo-45995: 在字符串格式化规范中添加 "z" 选项,该选项在四舍五入到格式精度后,将负零浮点值强制转换为正零。由 John Belmonte 贡献。

  • bpo-26175: 为 tempfile.SpooledTemporaryFile 对象完全实现 io.BufferedIOBaseio.TextIOBase 接口。这使得它们能与更高层次的模块(如压缩模块)正确协作。由 Carey Metcalfe 提供补丁。

  • bpo-45138: 修复 sqlite3 跟踪回调中的一处回归问题,其中绑定参数未在传递的语句字符串中展开。此回归问题由 Python 3.10 中的 bpo-40318 引入。补丁由 Erlend E. Aasland 提供。

  • bpo-44863: 允许 TypedDict 子类在基于类的语法中也包含 Generic 作为基类。从而允许用户定义一个泛型 TypedDict,就像用户定义的泛型一样,但具有 TypedDict 语义。

  • bpo-44587: 修复 BooleanOptionalAction 不自动添加默认字符串的问题。如果需要默认字符串,使用格式化程序添加。

  • bpo-43827: ABCMeta.__new__ 的所有位置或关键字参数现在都是仅位置的,以避免与要传递给 __init_subclass__() 的关键字参数冲突。

  • bpo-43218: 防止创建路径包含 PATH 分隔符的 venv。这可能会影响激活脚本的使用。由 Dustin Rodrigues 提供补丁。

  • bpo-38435: 向 subprocess.Popen 添加一个 process_group 参数,以帮助将更多内容从不安全的 preexec_fn 参数中移出。

  • bpo-42066: 修复 CookieJar.__iter__() 中对 cookie 进行排序的问题,这是一个额外的行为,且在 RFC 2965 或 Netscape cookie 协议中未提及。现在 CookieJar 中的 cookie 遵循 Set-Cookie 头的顺序。由 Iman Kermani 提供补丁。

  • bpo-40617: 向 sqlite3.Connection 添加 create_window_function() 用于创建聚合窗口函数。由 Erlend E. Aasland 提供补丁。

  • bpo-40676: 将 csv 模块的 csv.field_size_limit()csv.get_dialect()csv.unregister_dialect()csv.list_dialects() 转换为使用 Argument Clinic。

  • bpo-39716: 当相同的子解析器名称被两次添加到 argparse.ArgumentParser 时,引发一个 ArgumentError。这与当相同的选项字符串被两次添加到 ArgumentParser 时的(默认)行为一致。

  • bpo-36073: 在 sqlite3 转换器中递归使用游标时,引发 ProgrammingError 而不是段错误。由 Sergey Fedoseev 提供补丁。

  • bpo-34975: 向 StreamWriter 添加了一个 start_tls() 方法,该方法使用给定的 SSLContext 升级连接为 TLS。

  • bpo-22276: Path 的方法 glob()rglob() 如果 pattern 以路径名组件分隔符(/sep)结尾,则仅返回目录。由 Eisuke Kawashima 提供补丁。

  • bpo-24905: 向 sqlite3.Connection 添加了 blobopen()sqlite3.Blob 允许对 blob 进行增量 I/O 操作。由 Aviv Palivoda 和 Erlend E. Aasland 提供补丁。

文档

测试

  • gh-92169: 在测试中统一使用 warnings_helper.import_deprecated() 来导入已弃用的模块。补丁由Hugo van Kemenade提供。

  • gh-84461: 当启用多进程时,libregrtest现在可以通过 --python 标志使用除 sys.executable 之外的Python可执行文件。

  • gh-91904: 修复 PYTHONREGRTEST_UNICODE_GUARD 的初始化,该问题阻止了在非UTF-8语言环境下运行回归测试。

  • gh-91752: 在test.test_tools.test_freeze.TestFreeze中添加了@requires_zlib。

  • gh-91607: 修复 test_concurrent_futures,在测试逻辑混淆的情况下测试正确的多进程启动方法上下文。

  • bpo-40280: 现在在没有pthread支持的WASM目标上跳过线程测试。

  • bpo-47109: 将 ctypes.macholib.dyldctypes.macholib.dylibctypes.macholib.framework 的测试从手动的前 unittest 时代带到 ctypes.test 的位置和结构。由Oleg Iarygin提供补丁。

  • bpo-29890: 为 ipaddress.IPv4Interfaceipaddress.IPv6Interface 添加了使用元组参数构造的测试。原始补丁和测试由louisom提供。

构建

  • gh-89452: 如果系统中同时存在gdbm-compat和ndbm,现在优先选择gdbm-compat。这样可以避免在macOS上使用有问题的ndbm.h。

  • gh-91731: Python 现在使用 -std=c11 编译器选项构建,而不是 -std=c99。由 Victor Stinner 提供补丁。

  • bpo-47152: 添加用于生成 sre_constants.h 的脚本和 make 目标。

  • bpo-47103: Windows PGInstrument 构建现在会将一个必需的 DLL 复制到输出目录,使得运行 PGO 构建的分析阶段更加容易。

Windows

  • bpo-46907: 更新 Windows 安装程序以使用 SQLite 3.38.3。

  • bpo-47239: 修复了在活动虚拟环境中使用 Python 安装管理器 时的 --list 和 --list-paths 输出。

  • bpo-46907: 更新 Windows 安装程序以使用 SQLite 3.38.2。

  • bpo-46785: 通过适当在 win32_xstat_impl 中使用 FindFirstFileW() 返回的错误代码,修复了 Windows 上 os.stat() 和取消链接文件之间的竞态条件。

  • bpo-40859: 更新 Windows 构建以使用 xz-5.2.5。

macOS

  • bpo-46907: 更新 macOS 安装程序以使用 SQLite 3.38.4。

工具/示例

  • gh-91583: 修复了 Argument Clinic 为带有 defining_class 参数的函数生成的代码中的回归问题。

  • gh-91575: 添加脚本 Tools/scripts/generate_re_casefix.py 和 make 目标 regen-re,用于根据当前 Unicode 版本生成用于大小写不敏感匹配的额外数据。

  • gh-91551: 移除了古老的 Pynche 颜色编辑器。它已经迁移到 https://gitlab.com/warsaw/pynche

C API

  • gh-88279: 弃用以下 C 函数:PySys_SetArgv(), PySys_SetArgvEx(), PySys_SetPath()。由 Victor Stinner 提供补丁。

  • gh-92154: 添加了 PyCode_GetCode() 函数。此函数执行等同于 Python 代码 getattr(code_object, 'co_code') 的操作。

  • gh-92173: 修复了 PyEval_EvalCodeEx()closure 参数。

  • gh-91320: 修复了关于 Python C API 中“旧式转换”(g++ -Wold-style-cast)的 C++ 编译器警告。在 C++ 中使用 Python C API 时,使用 C++ 的 reinterpret_cast<>static_cast<> 转换。由 Victor Stinner 提供补丁。

  • gh-80527: 通过 PEP 623 将以下函数标记为弃用 : PyUnicode_AS_DATA(), PyUnicode_AS_UNICODE(), PyUnicode_GET_DATA_SIZE(), PyUnicode_GET_SIZE()。由 Victor Stinner 提供补丁。

  • gh-91768: Py_REFCNT(), Py_TYPE(), Py_SIZE()Py_IS_TYPE() 函数的参数类型现在为 PyObject* 而不是 const PyObject*。补丁由 Victor Stinner 提供。

  • gh-91020: 添加 PyBytes_Type.tp_alloc 来为 bytes 子类初始化 PyBytesObject.ob_shash

  • bpo-40421: 添加 PyFrame_GetLasti C-API 函数以安全地从 C 代码访问帧对象的 f_lasti 属性。

  • bpo-35134: 移除 Include/code.h 头文件。C 扩展应仅包含主 <Python.h> 头文件。补丁由 Victor Stinner 提供。

  • bpo-47169: PyOS_CheckStack() 现在在 Windows 上的稳定 ABI 中导出。

  • bpo-47169: PyThread_get_thread_native_id() 在不存在的平台(如 Solaris)上被排除在稳定 ABI 之外。

  • bpo-46343: 添加 PyErr_GetHandledException()PyErr_SetHandledException() 作为 PyErr_GetExcInfo()PyErr_SetExcInfo() 的更简单替代。

    它们被包含在稳定 ABI 中。

Python 3.11.0 alpha 7

发布日期: 2022-04-05

核心与内置函数

  • bpo-47212: 对于没有后续缩进的裸 except,抛出 IndentationError 而不是 SyntaxError。对于用作参数的无括号生成器,改进 SyntaxError 的位置。由 Matthieu Dartiailh 提供补丁。

  • bpo-47186: 用 CHECK_EG_MATCH + 跳转替换 JUMP_IF_NOT_EG_MATCH

  • bpo-47176: 由于平台限制,Emscripten 构建不能以通常的方式处理信号。Python 现在可以处理信号。要使用,设置 Module.Py_EmscriptenSignalBuffer 为单个字节的 SharedArrayBuffer 并设置 Py_EMSCRIPTEN_SIGNAL_HANDLING 为 1。向 SharedArrayBuffer 写入一个数字将导致相应的信号被提升到 Python 线程中。

  • bpo-47186: 用 CHECK_EXC_MATCH + jump 替换 JUMP_IF_NOT_EXC_MATCH

  • bpo-47120: 用相对的 JUMP_BACKWARD_NO_INTERRUPT 替换绝对跳转操作码 JUMP_NO_INTERRUPT

  • bpo-46841: 比较代码对象时避免不必要的分配。

  • bpo-47182: 修复在主解释器第二次初始化后使用命名Unicode字符如 "\N{digit nine}" 时崩溃的问题。

  • bpo-47162: WebAssembly 无法处理错误的函数指针转换(参数数量或类型不同)。Python 现在可以使用调用蹦床来缓解这个问题。定义 PY_CALL_TRAMPOLINE 来启用调用蹦床。

  • bpo-46775: 现在一些Windows系统错误代码(>= 10000)被正确映射到errno,并可能引发 OSError 的子类。由Donghee Na提供补丁。

  • bpo-47129: 改进关于空表达式的f-string语法错误消息。

  • bpo-47117: 修复在交互模式下如果分词器缓冲区未初始化时解码字符失败导致的崩溃。由Pablo Galindo提供补丁。

  • bpo-47127: 通过特殊化,将带有关键字参数的c函数调用速度提高25%。由Kumar Aditya提供补丁。

  • bpo-47120: 用相对跳转 JUMP_BACKWARD 替换 JUMP_ABSOLUTE

  • bpo-42197: PyFrame_FastToLocalsWithError()PyFrame_LocalsToFast() 在性能分析或跟踪期间不再被调用。C代码可以通过调用 PyFrame_GetLocals() 来访问 PyFrameObjectf_locals 属性。

  • bpo-47070: 通过减少 memcpy 的调用次数来提高 array_inplace_repeat 的性能。重构 array, bytes, bytearrayunicodeobjectrepeat 和原地 repeat 方法以使用共同的 _PyBytes_Repeat

  • bpo-47053: 减少专业化的 BINARY_OP_INPLACE_ADD_UNICODE 操作码中的去优化。

  • bpo-47045: 从 _PyInterpreterFrame 结构中移除 f_state 字段。向 _PyInterpreterFrame 结构添加 owner 字段,以明确所有权,简化帧和生成器的清理和释放。

  • bpo-46968: 在 faulthandler 中检查 "sys/auxv.h" 头文件的存在,以避免在不存在此头文件的系统中出现编译问题。由 Pablo Galindo 提供补丁。

  • bpo-46329: 使用 LOAD_GLOBAL 的低位来指示是否在全局变量之前推送一个 NULL。有助于稍微简化调用序列。

  • bpo-46841: 通过将快速字节码存储为相应的 PyCodeObject 的一部分,原地快速化字节码。

  • bpo-47012: 通过 Kumar Aditya 的补丁,将 bytesbytearray 的迭代速度提高了 30%。

  • bpo-47009: 通过优化常见情况(无需调整大小的情况),提高了 list.append() 和列表推导式的性能。由 Dennis Sweeney 提供补丁。

  • bpo-47005: 通过减少 memcpy 的调用次数,提高了 bytearray_repeatbytearray_irepeat 的性能。

  • bpo-46829: 弃用在 asyncio.Future.cancel()asyncio.Task.cancel() 中传递消息的做法。

  • bpo-46993: 通过 Kumar Aditya 的补丁,将 bytearraylisttuple 创建的速度提高了 40%。

  • bpo-39829: 移除了初始化列表时的 __len__() 调用,并将初始化移至 list_extend。由 Jeremiah Pascual 提供补丁。

  • bpo-46944: 通过 METH_FASTCALL 调用约定,加快了在生成器中抛出异常的速度。补丁由 Kumar Aditya 提供。

  • bpo-46841: 修改 STORE_SUBSCR 以使用内联缓存条目(而非其操作数)作为自适应计数器。

  • bpo-46841: 为 PRECALLCALL 使用内联缓存,并移除用于管理(现在未使用的)非内联缓存的内部机制。

  • bpo-46881: 静态分配并初始化 latin1 字符。

  • bpo-46838: 改进不正确函数定义的语法错误。由Pablo Galindo提供补丁。

  • bpo-43721: 修复 getter, setter, 和 deleter 的文档字符串,以明确它们创建属性的新副本。

  • bpo-43224: 为PEP 646做出所需的语法更改。

  • bpo-47208: 允许供应商覆盖 CTYPES_MAX_ARGCOUNT

  • bpo-23689: re 模块: 修复当匹配因信号或内存分配失败而终止时的内存泄漏。由Ma Lin提供补丁。

  • bpo-47167: 允许在 asyncio.Task 中覆盖未来的合规性检查。

  • bpo-47151: 当子进程尝试使用vfork时,如果vfork返回错误,现在会回退到fork。这允许在操作系统内核不允许vfork的情况下使用。

  • bpo-47152: 将 re 模块转换为包。弃用模块 sre_compile, sre_constantssre_parse

  • bpo-4833: 添加 ZipFile.mkdir()

  • bpo-27929: 修复 asyncio.loop.sock_connect() 仅解析 socket.AF_INETsocket.AF_INET6 家族的名称。对于其他家族,如 socket.AF_BLUETOOTHsocket.AF_UNIX,解析可能没有意义。

  • bpo-14265: 将完全限定的测试名称添加到unittest输出中

  • bpo-47061: 弃用aifc模块。

  • bpo-39622: 在asyncio程序中处理Ctrl+C以中断主任务。

  • bpo-47101: hashlib.algorithms_available 现在仅列出由OpenSSL 3.0上激活的加密提供者提供的算法。除非将遗留提供者加载到默认的OSSL上下文中,否则不会列出遗留算法。

  • bpo-47099: urllib.request.URLopener 中引发的所有 URLError 异常消息现在在 ftp error 和消息的其余部分之间包含冒号。之前,open_ftp() 缺少冒号。由Oleg Iarygin提供补丁。

  • bpo-47099: 异常链的机制从 Exception.with_traceback()/sys.exc_info() 更改为 PEP 3134。由 Oleg Iarygin 提供补丁。

  • bpo-47095: hashlib 的内部 _blake2 模块现在优先使用来自 https://www.blake2.net/libb2 而不是 Python 自带的 blake2 副本。

  • bpo-47098: hashlib 内部 _sha3 模块的 Keccak 代码包已被替换为 tiny_sha3。该模块在 Python 构建时不带 OpenSSL 时作为回退使用。

  • bpo-47088: 实现了 typing.LiteralString,这是 PEP 675 的一部分。由 Jelle Zijlstra 提供补丁。

  • bpo-42885: 对以 \A^ 开始的正则表达式优化了 re.search()re.split()re.findall()re.finditer()re.sub()

  • bpo-23691: 保护 re.finditer() 迭代器不被重新进入。

  • bpo-47067: 通过使用 PEP 590 vectorcall 并用 PyObject_SetAttr 替换 PyObject_SetAttrString,优化了对 GenericAlias 对象的调用。

  • bpo-28080: 在 zipfile.ZipFile 构造函数中添加了 metadata_encoding 参数,并在 zipfile CLI 中添加了 --metadata-encoding 选项,以允许使用非标准编解码器读取压缩包中的文件名。

  • bpo-47000: 当启用 UTF-8 模式时,使 io.text_encoding() 返回 "utf-8"。

  • bpo-42369: 修复 zipfile._SharedFile.tell() 的线程安全性,以避免在多线程读取 ZipFile 时出现 "zipfile.BadZipFile: Bad CRC-32 for file" 异常。

  • bpo-38256: 修复了当编译使用 zlib 的 crc32 时的 binascii.crc32(),使其正确处理长度超过 4GiB 的输入而不是返回错误结果。在此之前的解决方法是始终以小于 4GiB 的增量向函数提供数据,或直接调用 zlib 模块函数。

    我们还让 binascii.crc32() 在处理较大输入时释放 GIL,就像 zlib.crc32()hashlib 所做的那样。

    这也提升了Windows上的性能,因为现在 binascii.crc32() 使用了zlib crc32实现,速度提升了2-3倍。

    标准库在两个模块中都有crc32 API是一个已知的历史遗留问题。这使我们更接近于它们背后的单一实现。

  • bpo-47066: 全局内联标志(例如 (?i))现在只能在正则表达式的开头使用。从Python 3.6开始,不在表达式开头使用它们已被弃用。

  • bpo-39394: 关于不在正则表达式开头的内联标志的警告现在包含标志的位置。

  • bpo-433030: 在 正则表达式 中添加了对原子分组((?>...))和占有量词(*+, ++, ?+, {m,n}+)的支持。

  • bpo-47062: 实现 asyncio.Runner 上下文管理器。

  • bpo-46382: dataclass() slots=True 现在正确地省略了基类中已经定义的槽。由Arie Bovenberg提供补丁。

  • bpo-47057: 对 FutureIter.throw() 使用FASTCALL约定。

  • bpo-47061: 弃用 PEP 594 中列出的各种模块:

    aifc, asynchat, asyncore, audioop, cgi, cgitb, chunk, crypt, imghdr, msilib, nntplib, nis, ossaudiodev, pipes, smtpd, sndhdr, spwd, sunau, telnetlib, uu, xdrlib

  • bpo-34790: 移除将协程对象传递给 asyncio.wait()

  • bpo-47039: 标准化asyncio future和task对象的 repr()

  • bpo-2604: 修复了使用全局变量的doctests在多次运行时失败的bug。

  • bpo-45150: 添加 hashlib.file_digest() 辅助函数,用于高效哈希文件对象。

  • bpo-34861: 使cumtime成为cProfile的默认排序键。

  • bpo-45997: 修复 asyncio.Semaphore 重新获取FIFO顺序的问题。

  • bpo-47022: asynchat, asyncoresmtpd 模块至少从Python 3.6开始已被弃用。它们的文档和弃用警告现在已更新,指出它们将在Python 3.12中移除(PEP 594)。

  • bpo-43253: 修复在Proactor事件循环中关闭传输时底层套接字句柄已无效导致的崩溃问题。

  • bpo-40280: select.select() 现在对每个空的fdset传递 NULLselect

  • bpo-47004: 应用来自importlib_metadata 4.11.3的错误修复,包括修复EntryPoint.extras返回匹配对象而非额外字符串的问题。

  • bpo-46998: 允许对 typing.Any 进行子类化。由Shantanu Jain提供补丁。

  • bpo-46995: 弃用第三方任务实现中缺失的 asyncio.Task.set_name(),计划在Python 3.13中使其成为强制要求。

  • bpo-46994: 在 asyncio.create_task()asyncio.loop.create_task() 中接受显式的contextvars.Context。

  • bpo-46981: typing.get_args(typing.Tuple[()]) 现在返回 () 而不是 ((),)

  • bpo-46968: 添加 os.sysconf_names['SC_MINSIGSTKSZ']

  • bpo-46985: 升级与ensurepip捆绑的pip wheel(pip 22.0.4)。

  • bpo-46968: faulthandler: 在Linux 5.14及更新版本上,动态确定CPython使用 getauxval(AT_MINSIGSTKSZ) 分配的信号处理程序堆栈大小。这一变化允许Python扩展请求Linux内核在Sapphire Rapids Xeon处理器上使用AMX_TILE指令集成功,解除了该ISA在框架中使用的阻碍。

  • bpo-46917: math.nan 值现在总是可用。由Victor Stinner提供补丁。

  • bpo-46955: 将 asyncio.base_events.Server 作为 asyncio.Server 公开。由Stefan Zabka提供补丁。

  • bpo-23325: signal 模块不再假设 SIG_IGNSIG_DFL 是小的int单例。

  • bpo-46932: 更新捆绑的libexpat到2.4.7版本。

  • bpo-46933: pwd 模块现在是可选的。当 pwd 模块不可用时,os.path.expanduser() 返回路径。

  • bpo-40059: PEP 680tomllib 模块。增加了对解析TOML的支持。

  • bpo-464471: 添加了 asyncio.timeout()asyncio.timeout_at() 上下文管理器。由Tin Tvrtković和Andrew Svetlov提交的补丁。

  • bpo-46805: 为asyncio添加了原始数据报套接字函数:sock_sendto()sock_recvfrom()sock_recvfrom_into()

  • bpo-46644: 不再要求有效的类型形式必须是可调用的。这允许 typing.Annotated 包装 typing.ParamSpecArgsdataclasses.InitVar。由Gregory Beauregard提交的补丁。

  • bpo-46581: 使 GenericAliasParamSpec 传播与 Concatenate (及其他) 保持一致。

  • bpo-45413: 定义了 posix_venvnt_venv sysconfig安装方案,用于引导新的虚拟环境。添加了 venv sysconfig安装方案以获取上述适当的方案。这些方案与预先存在的 posix_prefixnt 安装方案相同。venv 模块现在使用 venv 方案来创建新的虚拟环境,而不是仅根据平台硬编码路径。鼓励以与虚拟环境中使用的安装方案不兼容的方式定制 posix_prefixnt 安装方案的下游Python分发者不要定制 venv 方案。当Python本身在虚拟环境中运行时,sysconfig.get_default_scheme()sysconfig.get_preferred_scheme()key="prefix" 返回*venv*。

  • bpo-43224: 在typing.py中实现了对PEP 646的支持。

  • bpo-43224: 允许解包types.GenericAlias对象,例如 *tuple[int, str]

  • bpo-46557: 现在,由logging模块捕获的警告将不带有格式字符串记录,以防止通过msg参数分组日志的系统将捕获的警告分组在一起。

  • bpo-41370: typing.get_type_hints() 现在支持在 PEP 585 泛型别名 中将字符串作为前向引用进行评估。

  • bpo-46607: 在 LegacyInterpolation 中添加 DeprecationWarning,自 Python 3.2 起已在文档字符串中弃用。将在 Python 3.13 中移除。请改用 BasicInterpolationExtendedInterpolation

  • bpo-26120: pydoc 现在从模块的数据项中排除 __future__ 导入。

  • bpo-46480: 添加 typing.assert_type()。由 Jelle Zijlstra 提供补丁。

  • bpo-46421: 修复了一个 unittest 问题,即如果命令以 python -m unittest 形式调用且文件名以点(.)开头,会返回 ValueError

  • bpo-46245: 在 shutil.rmtree() 中添加可选参数 dir_fd

  • bpo-22859: unittest.TestProgram.usageExit() 被标记为弃用,将在 Python 3.13 中移除。

  • bpo-46170: 当你尝试子类化一个 typing.NewType 的实例时,改进了错误信息。

  • bpo-40296: 修复 pydoc 中支持泛型别名的问题。

  • bpo-20392: 修复 MimeTypes.guess_type() 中大写文件扩展名的不一致问题。由 Kumar Aditya 提供补丁。

  • bpo-46030: 将 LOCAL_CREDSLOCAL_CREDS_PERSISTENTSCM_CREDS2 FreeBSD 常量添加到 socket 模块中。

  • bpo-44439: 修复 ZipFile 中成员文件的 .write() 方法,当输入数据是支持缓冲协议的对象时,文件长度可能错误的问题。

  • bpo-45171: 修复 logging 模块中处理 stacklevel 参数的问题,使其在所有日志记录函数中一致,并且如广告中所说,类似于 warn() 中使用的 stacklevel 参数。

  • bpo-24959: 修复 unittest 中有时会从测试中引发的异常的追溯中丢弃帧的错误。

  • bpo-44859: 在 sqlite3 中引发更准确且符合 PEP 249 的异常。

  • bpo-44493: 在 sockaddr_un 的长度中添加缺失的终止 NUL。

    当使用非抽象的 AF_UNIX 数据报套接字与用另一种编程语言编写的进程通信时,这个问题可能被观察到。

  • bpo-41930: 向 sqlite3 添加 serialize()deserialize() 支持。由 Erlend E. Aasland 提供补丁。

  • bpo-33178: 添加了 ctypes.BigEndianUnionctypes.LittleEndianUnion 类,这些类最初在库文档中有所记载但尚未实现。

  • bpo-43352: 在 asyncio 库的同步原语中添加 Barrier 对象,以保持与 threadingmultiprocessing 库中的 Barrier 一致。

  • bpo-35859: re 模块,修复了几个关于捕获组的 bug。在极少数情况下,捕获组会得到一个不正确的字符串。由马林提供补丁。

文档

测试

构建

  • bpo-40280: 添加配置选项 --enable-wasm-dynamic-linking 以在 wasm32-emscripten 上启用 dlopen 和 MAIN_MODULE / SIDE_MODULE。

  • bpo-46023: makesetup 现在可以检测并跳过所有重复的模块定义。第一个条目胜出。

  • bpo-40280: 为 Emscripten 添加 SOABI wasm32-emscripten,为 WASI 在 32bit WASM 上添加 wasm32-wasi,以及 wasm64 对应物。

  • bpo-47032: 确保当构建的一部分失败时,Windows 安装构建能够正确地以非零退出码失败。

  • bpo-47024: 为 macOS 安装程序和所有 Windows 构建更新 OpenSSL 到 1.1.1n。

  • bpo-46996: tkinter 包现在需要 Tcl/Tk 版本 8.5.12 或更高。

  • bpo-46973: 添加 regen-configure make 目标以使用 Christian 的容器镜像 quay.io/tiran/cpython_autoconf:269 重新生成配置脚本。

  • bpo-46917: 构建 Python 现在需要支持 IEEE 754 浮点数。由 Victor Stinner 提供补丁。

  • bpo-45774: configure 现在验证所有 sqlite3 扩展模块所需的 SQLite C API 是否都已找到。

Windows

  • bpo-47194: 更新 zlib 到 v1.2.12 以解决 CVE 2018-25032

  • bpo-47171: 支持在 Windows ARM64 上安装 py.exe 启动器。

  • bpo-46566: 升级 Python 安装管理器 以支持新的 -V:company/tag 参数,实现完整的 PEP 514 支持,并检测 ARM64 安装。参数中的 -64 后缀已被弃用,但仍会选择任何非 32 位的安装。设置 PYLAUNCHER_ALLOW_INSTALL 并指定未安装的版本将尝试从 Microsoft Store 安装请求的版本。

  • bpo-47086: Windows 安装程序现在包含的文档是松散的 HTML 文件,而不是一个单一的编译 .chm 文件。

  • bpo-46907: 更新 Windows 安装程序,使用 SQLite 3.38.1。

  • bpo-44549: 在 Windows 构建中更新 bzip2 到 1.0.8,以缓解 CVE 2016-3189CVE 2019-12900

  • bpo-46948: 通过确保 Windows 安装程序中的“添加到 PATH”选项在修复时使用正确的路径,防止 CVE 2022-26488

macOS

  • bpo-46890: 修复了框架构建中 sys._base_executable 设置的回归问题,从而修复了此类构建中 venv 虚拟环境的回归问题。

  • bpo-46907: 更新 macOS 安装程序到 SQLite 3.38.1。

工具/示例

  • bpo-40280: 用 Katie Bell 的 python-wasm 项目中的 browser-ui REPL 替换 Emscripten 的有限 shell。

C API

  • bpo-40421: 添加 PyFrame_GetBuiltinsPyFrame_GetGeneratorPyFrame_GetGlobals C-API 函数,以便从 C 代码安全地访问帧对象属性。

  • bpo-46850: 将私有的 _PyFrameEvalFunction 类型,以及私有的 _PyInterpreterState_GetEvalFrameFunc()_PyInterpreterState_SetEvalFrameFunc() 函数移至内部 C API。_PyFrameEvalFunction 回调函数类型现在使用属于内部 C API 的 _PyInterpreterFrame 类型。由 Victor Stinner 提供补丁。

  • bpo-46850: 将未公开的私有函数 _PyEval_EvalFrameDefault() 移至内部 C API。该函数现在使用属于内部 C API 的 _PyInterpreterFrame 类型。由 Victor Stinner 提供补丁。

  • bpo-46850: 从 C API 中移除未公开的私有函数 _PyEval_CallTracing()。改为调用公开的 sys.call_tracing() 函数。由 Victor Stinner 提供补丁。

  • bpo-46850: 从 C API 中移除未公开的私有函数 _PyEval_GetCoroutineOriginTrackingDepth()。改为调用公开的 sys.get_coroutine_origin_tracking_depth() 函数。由 Victor Stinner 提供补丁。

  • bpo-46850: 从 C API 中移除以下未公开的私有函数:

    • _PyEval_GetAsyncGenFirstiter()

    • _PyEval_GetAsyncGenFinalizer()

    • _PyEval_SetAsyncGenFirstiter()

    • _PyEval_SetAsyncGenFinalizer()

    改为调用公开的 sys.get_asyncgen_hooks()sys.set_asyncgen_hooks() 函数。补丁由 Victor Stinner 提供。

  • bpo-46987: 移除私有函数 _PySys_GetObjectId()_PySys_SetObjectId()。由 Donghee Na 提供补丁。

  • bpo-46906: 添加新的函数来打包和解包 C 双精度(序列化和反序列化):PyFloat_Pack2(), PyFloat_Pack4(), PyFloat_Pack8(), PyFloat_Unpack2(), PyFloat_Unpack4()PyFloat_Unpack8()。由 Victor Stinner 提供补丁。

Python 3.11.0 alpha 6

发布日期:2022-03-07

核心与内置函数

  • bpo-46940: 避免覆盖嵌套属性访问调用的 AttributeError 元数据信息。由 Pablo Galindo 提供补丁。

  • bpo-46927: 在非泛型类型下标错误消息中包含类型的名称。

  • bpo-46921: 支持 super() 的 vectorcall。由 Ken Jin 提供补丁。

  • bpo-46841: 修复在特化 BINARY_OP 时内联缓存条目的不正确处理。

  • bpo-46841: 使用 oparg 来简化 GET_AWAITABLE 中有用错误消息的构造。

  • bpo-46903: 确保 str 子类可以作为具有虚拟字典的实例的属性名。修复了 3.11alpha 中的回归问题。

  • bpo-46841: 为 COMPARE_OP 后跟 EXTENDED_ARG 添加更详细的专门化失败统计信息。

  • bpo-46891: 修复了 3.11alpha 中引入的 bug,其中带有 __slots__types.ModuleType 子类未正确初始化,导致解释器崩溃。

  • bpo-46841: 对 LOAD_ATTRLOAD_METHODSTORE_ATTR 使用内联缓存。

  • bpo-46841: 对 BINARY_SUBSCR 使用内联缓存。

  • bpo-46841: 对 COMPARE_OP 使用内联缓存。

  • bpo-46864: 弃用 PyBytesObject.ob_shash。它将在 Python 3.13 中被移除。

  • bpo-46841: 对 UNPACK_SEQUENCE 使用内联缓存。

  • bpo-46845: 当所有插入的键都是 Unicode 时,通过从哈希表中移除哈希值来减小字典大小。例如,在 64 位平台上,sys.getsizeof(dict.fromkeys("abcdefg")) 从 352 字节变为 272 字节。

  • bpo-46841: 对 LOAD_GLOBAL 使用内联缓存。

  • bpo-46852: 将私有的未文档化的 float.__set_format__() 方法重命名为 float.__setformat__(),以修复 Python 3.7 中引入的拼写错误。该方法仅由 test_float 使用。由 Victor Stinner 提供补丁。

  • bpo-46852: 移除未文档化的私有 float.__set_format__() 方法,该方法在 Python 3.7 中曾被称为 float.__setformat__()。其文档字符串说明:"您可能不想使用此函数。它主要存在于 Python 的测试套件中使用。" 由 Victor Stinner 提供补丁。

  • bpo-40116: 修复了当 other 是键共享字典时,dict.update(other) 可能不尊重 other 的迭代顺序的回归问题。

  • bpo-46712: 在深度冻结模块中共享全局字符串标识符。

  • bpo-46430: 修复深度冻结模块中内部字符串的内存泄漏问题。

  • bpo-46841: 使用新的 CACHE 指令将 BINARY_OP 缓存内联存储。

  • bpo-45107: 为具有字典的实例专门化 LOAD_METHOD

  • bpo-44337: 减少专门化的 LOAD_ATTRSTORE_ATTR 指令的内存使用。

  • bpo-46729: 在 BaseException.__str__() 中添加子异常的数量。

  • bpo-45885: 在收集专门化统计信息时不要取消适配 COMPARE_OP

  • bpo-46329: 修复 PRECALL 指令的专门化统计信息收集。

  • bpo-46794: 将 libexpat 版本提升至 2.4.6。

  • bpo-46823: 实现一个专门的组合操作码 LOAD_FAST__LOAD_ATTR_INSTANCE_VALUE。由 Dennis Sweeney 提供补丁。

  • bpo-46820: 修复在数字字面量后紧跟着(无空格)"not in" 关键字时的解析问题,例如 1not in x。现在解析器仅发出警告,而非语法错误。

  • bpo-46329: 在调用序列中将 KW_NAMES 移动到 PRECALL 指令之前。更改 CALLoperand 以匹配 PRECALL,便于专门化。

  • bpo-46808: 从 compile.c 中移除 NEXT_BLOCK 宏,并使编译器在需要时自动生成隐式块。

  • bpo-46329: 添加 PUSH_NULL 指令。这在评估可调用对象时用作前缀,以便堆栈对于方法和其他调用具有相同的形状。PRECALL_FUNCTIONPRECALL_METHOD 被合并为单一的 PRECALL 指令。

    语义上没有变化。

  • bpo-46762: 修复在调试版本中,当 '<'、'>' 或 '=' 是 f 字符串中缺失右大括号的最后一个字符时的断言失败。

  • bpo-46730: 由于获取、设置或删除没有相应函数的属性而导致的 AttributeError 消息现在会提到该属性实际上是一个属性,并且还指定了它所属的类的类型。

  • bpo-46724: 确保所有向后跳转都使用 JUMP_ABSOLUTE 指令,而不是使用参数为 (2**32)+offsetJUMP_FORWARD

  • bpo-46732: 更正 __bool__() 方法的文档字符串。补丁由 Jelle Zijlstra 提供。

  • bpo-46072: 为 BINARY_OP 添加更详细的特化失败统计信息。

  • bpo-46707: 避免在产生涉及大量括号的某些语法错误时可能出现的指数级回溯。由 Pablo Galindo 提供补丁。

  • bpo-46323: ctypes 现在在调用 Python 回调函数时在栈上而非堆上分配内存以传递参数。由 Donghee Na 提供补丁。

  • bpo-45923: 添加一种跳过快速检查的 RESUME 快速形式。

  • bpo-46702: 为 tuplelist 解包特化 UNPACK_SEQUENCE

  • bpo-46072: 现在使用 --enable-pystats 收集操作码对统计信息。定义 DYNAMIC_EXECUTION_PROFILEDXPAIRS 不再有任何效果。

  • bpo-46675: 允许拆分字典在合并前包含超过 16 个项目。现在限制为 254 个。

  • bpo-40479: 在 Modules/_hashopenssl.c 中添加一个遗漏的 va_end() 调用。

  • bpo-46323: 调用 ctypes 回调函数时使用 PyObject_Vectorcall()。由 Donghee Na 提供补丁。

  • bpo-46615: 在 setobject.c 中内部迭代集合时,对集合中的结果项获取强引用。这防止了在各种集合操作的边角情况下集合被修改导致的崩溃。

  • bpo-45828: 字节码编译器现在尝试在编译时应用运行时栈操作(只要这样做是可行的)。

  • bpo-30496: 修复了 PyLong_FromLong() 实现中的一个小的可移植性问题,并为 PyLong_FromLongLong() 添加了单数字整数的快速路径。

文档

  • bpo-42238: Doc/tools/rstlint.py 已移至其自己的仓库,现在在 PyPI 上打包为 sphinx-lint

测试

  • bpo-46913: 如果 Python 是用未定义行为消毒剂 (UBSAN) 构建的,修复 test_faulthandler.test_sigfpe():在 faulthandler_sigfpe() 函数上禁用 UBSAN。由 Victor Stinner 提供补丁。

  • bpo-46760: 从 test.test_dis 模块中的期望值中移除字节码偏移。减少修改虚拟机或编译器的障碍。

  • bpo-46708: 防止 test_asyncio 执行后默认 asyncio 事件循环策略修改警告。

  • bpo-46678: Lib/test/support/import_helper.py 中的函数 make_legacy_pyc 不再在 PYTHONPYCACHEPREFIX 设置为与存储临时文件不同的设备上的目录时失败。

  • bpo-46623: 在s390x上跳过test_zlib的test_pair()和test_speech128()测试,因为如果zlib使用s390x硬件加速器,这些测试会失败。由Victor Stinner提供补丁。

构建

  • bpo-46860: 在大小写不敏感的文件系统上构建时,尊重 --with-suffix 选项。

  • bpo-46656: 现在构建Python需要一个C11编译器。不需要可选C11功能。补丁由Victor Stinner提供。

  • bpo-46656: 现在构建Python需要支持浮点数Not-a-Number (NaN):移除 Py_NO_NAN 宏。补丁由Victor Stinner提供。

  • bpo-46640: 现在构建Python需要一个提供 NAN 常量的C99 <math.h> 头文件,或者``__builtin_nan()``内置函数。由Victor Stinner提供补丁。

  • bpo-46608: 如果深度冻结,排除已封装的冻结数据以节省300 KB磁盘空间。这包括向 _frozen 添加一个新的 is_package 字段。由Kumar Aditya提供补丁。

  • bpo-40280: 修复wasm32-emscripten测试失败和平台问题。- 禁用不支持或不起作用的系统调用,例如wait、getrusage、prlimit、mkfifo、mknod、setres[gu]id、setgroups。- 使用fd_count计算打开的文件描述符。- 为子进程和fork添加更多检查。- 为缺少_multiprocessing和失败的socket.accept()添加解决方法。- 启用bzip2。- 禁用大文件支持。- 禁用signal.alarm。

  • bpo-46430: 在深度冻结的模块中内部化字符串。由Kumar Aditya提供补丁。

Windows

  • bpo-46744: ARM64的默认所有用户安装目录现在位于原生的 Program Files 文件夹下,而不是用于ARM(32位)文件的 Program Files (Arm)

  • bpo-46567: 为Windows ARM64添加Tcl和Tk支持。这也将IDLE添加到安装中。

  • bpo-46638: 确保注册表虚拟化一致禁用。对于3.10及更早版本,它保持启用(某些注册表写入受到保护),而对于3.11及更高版本,它被禁用(注册表修改影响所有应用程序)。

IDLE

  • bpo-46630: 使 Windows 上的查询对话框开始时光标在输入框中。

  • bpo-45447: 将 IDLE 语法高亮应用到 .pyi 文件。由 Alex Waygood 和 Terry Jan Reedy 提供补丁。

C API

  • bpo-46748: Python 的公共头文件不再导入 <stdbool.h>,使得嵌入/扩展 Python 的代码可以自由定义 booltruefalse

  • bpo-46836: 将 PyFrameObject 类型定义(struct _frame)移动到内部 C API pycore_frame.h 头文件中。由 Victor Stinner 提供补丁。

  • bpo-45459: 将 Include/buffer.h 头文件重命名为 Include/pybuffer.h 以避免与已有 buffer.h 头文件的项目冲突。由 Victor Stinner 提供补丁。

  • bpo-45412: 移除 HAVE_PY_SET_53BIT_PRECISION 宏(已移至内部 C API)。由 Victor Stinner 提供补丁。

  • bpo-46613: 添加了函数 PyType_GetModuleByDef(),允许在方法的定义类不可用时访问模块状态。

Python 3.11.0 第 5 个 alpha 版本

发布日期:2022-02-03

核心与内置函数

  • bpo-45773: 从字节码编译器中移除两个无效的 "peephole" 优化。

  • bpo-46564: 创建 super 对象时不创建帧对象。由 Kumar Aditya 提供补丁。

  • bpo-45885: 关于 COMPARE_OP 字节码,添加了更细粒度的特化失败统计。

  • bpo-44977: int() 委托给 __trunc__() 的做法现在已被弃用。当 type(a) 实现了 __trunc__() 但没有实现 __int__()__index__() 时,调用 int(a) 现在会引发 DeprecationWarning

  • bpo-46458: 重新排序编译器为 try-except 块生成的代码,使得 else 块的代码紧随 try 体之后(无需跳转)。这对快乐路径更优。

  • bpo-46527: 再次允许将 iterable 作为关键字参数传递给 enumerate()。由 Jelle Zijlstra 提供补丁。

  • bpo-46528: 用新的 COPYSWAP 指令替换多个堆栈操作指令(DUP_TOPDUP_TOP_TWOROT_TWOROT_THREEROT_FOURROT_N)。

  • bpo-46329: 使用两个或三个字节码来实现大多数调用。

    没有命名参数的调用作为两个指令的序列实现:PRECALL; CALL。有命名参数的调用作为三个指令的序列实现:PRECALL; KW_NAMES; CALL。有两种不同的 PRECALL 指令:PRECALL_FUNTIONPRECALL_METHOD。后者与 LOAD_METHOD 配对使用。

    这种将调用分为预调用和调用的分区允许更好的专门化,从而最终获得更好的性能。

    语义上没有变化。

  • bpo-46503: 修复在解析 f-strings 中一些无效的 N 转义序列时的断言。

  • bpo-46431: 改进对无效调用 BaseExceptionGroup.__new__() 时的错误消息。

  • bpo-46476: 修复由 deepfreeze 生成的代码对象中的内存泄漏。由 Kumar Aditya 提供补丁。

  • bpo-46481: 通过使用 PEP 590 vectorcall 调用约定加速对 weakref.ref.__call__() 的调用。由 Donghee Na 提供补丁。

  • bpo-46417: 修复设置类型 __bases__ 属性时的竞争条件:内部函数 add_subclass() 现在在调用 PyWeakref_NewRef() 后获取 PyTypeObject.tp_subclasses 成员,这可以触发垃圾回收,间接修改 PyTypeObject.tp_subclasses。由 Victor Stinner 提供补丁。

  • bpo-46417: python -X showrefcount 现在在清除并销毁主 Python 解释器后显示总引用计数。之前是在之前显示的。由 Victor Stinner 提供补丁。

  • bpo-43683: 添加 ASYNC_GEN_WRAP 操作码来包装异步生成器中要产生的值。移除了在 YIELD_VALUE 指令中特殊处理异步生成器的需要。

  • bpo-46407: 优化 Objects/longobject.c 中的一些模运算。补丁由 Jeremiah Vivian 提供。

  • bpo-46409: 添加新的 RETURN_GENERATOR 字节码以生成器。简化了在虚拟机中调用Python函数的过程,因为它们不再需要特别处理生成器函数。

    同时添加 JUMP_NO_INTERRUPT 字节码,其行为类似于 JUMP_ABSOLUTE,但不检查中断。

  • bpo-46406: 整数除法 // 的实现已优化,以便编译器更好地理解其约束。在amd64平台上,当除以小于 2**30 的值时,速度可以提高20%。

  • bpo-46383: 修复 _zoneinfomodule_free 函数的无效签名,以解决wasm32-emscripten平台上的崩溃问题。

  • bpo-46361: 确保通过 int.from_bytes()decimal.Decimal 创建的“小”整数被正确缓存。

  • bpo-46161: 修复当参数为常量且使用 CALL_FUNCTION_EX 时的类构建错误。

  • bpo-46028: 修复在虚拟环境中使用与基础环境提供的不同二进制名称的符号链接时 sys._base_executable 的计算。

  • bpo-46091: 正确计算以行继续字符结尾的带有空白字符的行的缩进级别。由Pablo Galindo提供补丁。

  • bpo-30512: 为NetBSD添加CAN Socket支持。

  • bpo-46045: 在 NetBSD 上不使用 POSIX 信号量。

  • bpo-44024: 改进内置函数 getattr()hasattr() 传递非字符串第二个参数时的 TypeError 消息。由Géry Ogam提供补丁。

文档

  • bpo-46463: 修复了构建 CHM 文档文件时使用的 escape4chm.py 脚本。

测试

  • bpo-43478: Mock 不能再作为其他 Mock 的规范提供。因此,已经 mock 的对象不能传递给 mock.Mock()。这可以揭示测试中的错误,因为这些 Mock 派生的 Mock 总是会通过某些测试(例如 isinstance),并且内置的断言函数(例如 assert_called_once_with)将无条件通过。

  • bpo-46616: 确保 test_importlib.test_windows 在完成后清理注册表键。

  • bpo-44359: test_ftplib 现在默默地忽略套接字错误,以防止记录未处理的线程异常。由 Victor Stinner 提供补丁。

  • bpo-46600: 修复了使用 clang -Og 构建的 Python 的 test_gdb.test_pycfunction()。在 gdb 回溯中容忍内联函数。由 Victor Stinner 提供补丁。

  • bpo-46542: 修复了在使用调试模式构建的 Python 中 test_lib2to3 的 Python 崩溃:限制递归限制。由 Victor Stinner 提供补丁。

  • bpo-46576: test_peg_generator 现在在测试其自己的 C 扩展的编译时禁用编译器优化,以显著加快在 CPython 的非调试构建上的测试速度。

  • bpo-46542: 修复 test_json 测试中对 RecursionError 的检查:修改这些测试以使用 support.infinite_recursion()。由 Victor Stinner 提供补丁。

  • bpo-13886: 如果加载了 readline 模块,则在非 ASCII 字符上跳过 test_builtin PTY 测试。readline 模块会改变 input() 的行为,但 test_builtin 并不旨在测试 readline 模块。由 Victor Stinner 提供补丁。

  • bpo-40280: 添加 test.support.requires_fork() 装饰器以标记需要 os.fork() 正常工作的测试。

  • bpo-40280: 添加 test.support.requires_subprocess() 装饰器以标记需要 subprocess 模块或 os.spawn* 正常工作的测试。wasm32-emscripten 平台不支持进程。

  • bpo-46126: 在内部运行测试时禁用 'descriptions'。

构建

  • bpo-46602: 整理 configure.ac 使得 conftest.c 被截断而非追加。这在 'rm' conftest.c 在测试之间未能发生时有所帮助。可能导致诸如 SOABI 被破坏的下游问题。

  • bpo-46600: 修复 ./configure 脚本中检查 C 编译器是否支持 -Og 选项的测试,以同样在支持 -Og 的 clang 上使用该选项。由 Victor Stinner 提供补丁。

  • bpo-38472: 修复交叉编译时 setup.py 中的 GCC 检测。现在 C 编译器以 LC_ALL=C 运行。之前,检测在德语环境下会失败。

  • bpo-46513: configure 不再使用 AC_C_CHAR_UNSIGNED 宏,且 pyconfig.h 不再定义保留符号 __CHAR_UNSIGNED__

  • bpo-46471: 在 deepfreeze 中使用全局单例作为单字节 bytes 对象。

  • bpo-46443: Deepfreeze 现在使用缓存的小整数,因为它为常见的小整数节省了一些空间。

  • bpo-46429: 将所有深度冻结文件合并为一个以节省空间。由 Kumar Aditya 提供补丁。

  • bpo-45569: Python 整数的构建现在默认使用 30 位数字。之前会根据平台选择 15 位或 30 位数字。仍然可以通过在 configure 脚本中使用 --enable-big-digits=15 选项,或在 pyconfig.h 中定义 PYLONG_BITS_IN_DIGIT 来选择 15 位数字。

  • bpo-45925: 更新 Windows 安装程序以使用 SQLite 3.37.2。

  • bpo-43112: 检测 musl libc 作为一个单独的 SOABI(标记为 linux-musl)。

Windows

  • bpo-33125: 传统的基于 EXE/MSI 的 Windows 安装程序现在可用于 ARM64。

  • bpo-46362: os.path.abspath("C:CON") 现在修正为返回 "\.CON",而不是相同的路径。这个回归问题存在于所有遗留的 DOS 设备如 COM1、LPT1 或 NUL。

  • bpo-44934: 安装程序现在提供了一个仅限命令行的选项,将安装目录添加到 PATH 的末尾而不是开头。

macOS

  • bpo-45925: 更新 macOS 安装程序到 SQLite 3.37.2。

IDLE

  • bpo-45296: 在 IDLE 中明确了关闭、退出和退出的区别。在文件菜单中,'关闭' 和 '退出' 现在是 '关闭窗口'(当前窗口)和 '退出 IDLE'(通过关闭所有窗口)。在 Shell 中,'quit()' 和 'exit()' 意思是 '关闭 Shell'。如果没有其他窗口,这也将退出 IDLE。

C API

  • bpo-40170: 移除了 PyHeapType_GET_MEMBERS() 宏。它被错误地暴露在公共 C API 中,必须仅由 Python 内部使用。使用 PyTypeObject.tp_members 成员代替。由 Victor Stinner 提供的补丁。

  • bpo-40170: 将 _Py_GetAllocatedBlocks() 和 _PyObject_DebugMallocStats() 私有函数移动到内部 C API。由 Victor Stinner 提供的补丁。

  • bpo-46433: 内部函数 _PyType_GetModuleByDef 现在正确处理涉及静态类型的继承模式。

  • bpo-45459: Py_buffer 和各种 Py_buffer 相关函数现在是有限 API 和稳定 ABI 的一部分。

  • bpo-14916: 修复了 tokenizer 中的一个错误,该错误阻止了 PyRun_InteractiveOne 从提供的 FD 解析。

Python 3.11.0 alpha 4

发布日期: 2022-01-13

核心与内置函数

  • bpo-46070: Py_EndInterpreter() 现在明确地取消跟踪当前由GC跟踪的所有对象。之前,如果一个对象后来被另一个解释器使用,调用 PyObject_GC_UnTrack() 在该对象上如果 PyGC_Head 结构的前一个或下一个对象成为悬挂指针时会崩溃。由Victor Stinner提供补丁。

  • bpo-46347: 修复PyEval_EvalCodeEx中的内存泄漏。

  • bpo-46339: 修复解析器在检索多行f-strings表达式的错误文本时崩溃的问题,这些表达式不在字符串的第一行开始。由Pablo Galindo提供补丁。

  • bpo-46331: 不要设置存储文档字符串的指令的行号。修复了在3.11 alpha中引入的回归问题。

  • bpo-46314: 移除在创建lambda函数时意外引入的虚假“call”事件,该事件是在3.11a4中意外引入的。

  • bpo-46289: FormattedValue 的ASDL声明已更改,以反映 conversion 字段不是可选的。

  • bpo-46297: 修复了在启动时在Windows注册表中设置多个PythonPaths时解释器崩溃的问题。补丁由Derzsi Dániel提供。

  • bpo-46237: 修复f-strings内部标记器错误的行号。由Pablo Galindo提供补丁。

  • bpo-46263: 我们现在总是期望“use_frozen_modules”配置被设置,因为getpath.c已经在纯Python中重写并且逻辑得到了改进。

  • bpo-46006: 修复当类型方法如 __init__() 在子解释器中被修改时的回归问题。修复 _PyUnicode_EqualToASCIIId() 和类型 update_slot() 中的回归问题。恢复使Unicode内部字符串字典与子解释器兼容的更改:内部内部字符串字典再次由所有解释器共享。由Victor Stinner提供补丁。

  • bpo-45923: 添加RESUME操作码。这是一个逻辑上的无操作。它由编译器在可以进入Python函数的任何地方发出。它被解释器用于执行跟踪和优化器检查。

  • bpo-46208: 修复 os.path.normpath("A/../../B") 未返回预期的 "../B" 而是返回 "B" 的回归问题。

  • bpo-46240: 当错误报告时,如果标记器未到达源代码的末尾,则修正未闭合括号的错误消息。补丁由 Pablo Galindo 提供。

  • bpo-46009: 移除 GEN_START 操作码。

  • bpo-46235: 由于引用计数优化,现在某些序列乘法操作如 [0] * 1_000 更快了。由 Dennis Sweeney 提供补丁。

  • bpo-46221: PREP_RERAISE_STAR 不再将 lasti 推送到堆栈。

  • bpo-46202: 移除 POP_EXCEPT_AND_RERAISE 并用其他操作码的等价序列替代。

  • bpo-46085: 修复 OrderedDict 的迭代器缓存机制。

  • bpo-46055: 加速涉及小于 PyLong_BASE 的整数的移位操作。补丁由 Xinhang Xu 提供。

  • bpo-46110: 向 PEG 解析器添加最大递归检查以避免堆栈溢出。由 Pablo Galindo 提供补丁。

  • bpo-46107: 修复 ExceptionGroup.split()ExceptionGroup.subgroup() 未将异常组的 __note__ 字段复制到部分的错误。

  • bpo-45711: 解释器状态的处理异常表示(又称 exc_info 或 _PyErr_StackItem)现在只有 exc_value 字段,exc_typeexc_traceback 已被移除,因为它们的值可以从 exc_value 派生。

  • bpo-44525: 用一个预调用指令和两个调用指令替换四个调用字节码指令。

    移除 CALL_FUNCTION, CALL_FUNCTION_KW, CALL_METHODCALL_METHOD_KW

    添加 CALL_NO_KWCALL_KW 调用指令,以及 PRECALL_METHOD 前缀与 LOAD_METHOD 配对。

  • bpo-46039: 移除 YIELD_FROM 指令并用执行相同操作但不带循环的 SEND 指令替代。

  • bpo-45635: 从 _PyErr_Display() 调用的代码被重构以改进错误处理。现在在遇到不可恢复的错误时立即退出。

  • bpo-46054: 修复解析源文件中非utf8字符时的解析器错误。由Pablo Galindo提供补丁。

  • bpo-46042: 改进符号表发出的 SyntaxError 异常中插入符号的位置。由Pablo Galindo提供补丁。

  • bpo-46049: 确保 ._pth 文件在非Windows平台上按预期工作。

  • bpo-46048: 修复启动时 ._pth 文件的解析,以便正确读取单字符路径。

  • bpo-37971: 修复一个错误,该错误导致装饰器应用引发异常时,回溯中给出的行号错误。

  • bpo-46031: 添加 POP_JUMP_IF_NOT_NONEPOP_JUMP_IF_NONE 操作码以加速条件跳转。

  • bpo-45654: 深度冻结 runpy,由Kumar Aditya提供补丁。

  • bpo-46025: 修复 atexit 模块中的一个崩溃问题,涉及在引发异常前自行注销的函数。由Pablo Galindo提供补丁。

  • bpo-46000: 提高 curses 模块与NetBSD curses的兼容性。

  • bpo-44525: 为调用带单一参数的内置类型专门化CALL_FUNCTION指令。加速 range(x), list(x),特别是 type(obj)

  • bpo-42918: 修复内置 compile() 函数在'single'模式下传递多个语句时并不总是引发 SyntaxError 的错误。由Weipeng Hong提供补丁。

  • bpo-45953: _PyRuntimeState.interpreters中的主解释器现在是静态分配的(作为_PyRuntime的一部分)。每个解释器的初始线程状态也是如此。这意味着运行时初始化期间分配更少,以及这些关键状态对象更好的内存局部性。

  • bpo-45292: 完成 PEP 654 实现:添加 except*

  • bpo-43413: 恢复 set.__init__ 中的更改。set 的子类如果定义了带有额外关键字参数的 __new__() 方法,那么它需要定义一个 __init__() 方法。

  • bpo-43931: 添加了 Py_Version 常量,其值与 PY_VERSION_HEX 相同。由 Gabriele N. Tornetta 提供补丁。

  • bpo-46342: @typing.final 装饰器现在会在被装饰的对象上设置 __final__ 属性,以允许运行时内省。由 Jelle Zijlstra 提供补丁。

  • bpo-46328: 添加了 sys.exception() 方法,该方法返回活动的异常实例。

  • bpo-46307: 添加 string.Template.is_valid()string.Template.get_identifiers() 方法。

  • bpo-46306: 在 doctest 中假设 types.CodeType 总是有 types.CodeType.co_firstlineno

  • bpo-40479: 修复 hashlib usedforsecurity 选项,使其在 FIPS 模式下与 OpenSSL 3.0.0 正确工作。

  • bpo-46070: 修复了从不同的子解释器并行导入 asyncio 模块时可能出现的段错误。补丁由 Erlend E. Aasland 提供。

  • bpo-46244: 从 typing.ParamSpectyping.TypeVar 中移除了 __slots__。它们没有任何作用。由 Arie Bovenberg 提供补丁。

  • bpo-46278: 在 AbstractEventLoop.call_*() 方法中反映 context 参数。循环实现已经支持它。

  • bpo-46269: 在 enum.Enum.__dir__() 中移除了对 __new__ 的特殊处理。

  • bpo-46266: 改进 calendar 中的日常量。

    现在所有常量(MONDAY ... SUNDAY)都已文档化、测试并添加到 __all__ 中。

  • bpo-46257: 优化了 statistics 模块中的 mean、variance 和 stdev 函数。如果输入是一个迭代器,它将在单次遍历中被消耗,而不是通过转换为列表来消耗内存。单次遍历算法比之前的两遍代码快大约两倍。

  • bpo-41011: 在由 venv 模块生成的 pyvenv.cfg 中新增了两个变量:executable 用于可执行文件,command 用于创建环境时使用的命令行。

  • bpo-46239: 在非 Windows 系统上导入 asyncio.windows_events 时改进了错误消息。

  • bpo-46238: 在 asyncio.windows_events 中重用 _winapi 常量。

  • bpo-46222: 为 posixmodule 添加 FreeBSD 的 SF_NOCACHE sendfile 常量。

  • bpo-37295: 为 math.comb() 添加 0 <= k <= n <= 67 的快速路径。

  • bpo-46176: 为 mmap 模块添加 MAP_STACK 常量。

  • bpo-43424: 弃用 webbrowser.MacOSXOSAScript._name,改用 name

  • bpo-45321: 向模块 xml.parsers.expat.errors 添加了缺失的错误代码。

  • bpo-46125: 重构测试以直接测试可遍历 API。包括来自 importlib 5.4.0 的更改。

  • bpo-46118: 将 importlib.resources 及其相关功能移动到一个包中。

  • bpo-37578: 向 glob()iglob() 添加 include_hidden 参数,以在使用特殊字符如 *, **, ?[] 时匹配隐藏文件和目录。

  • bpo-20369: 当给定重复的 Futures 时,concurrent.futures.wait() 不再永远阻塞。由 Kumar Aditya 提供补丁。

  • bpo-46105: 在使用 URL 和 extras 生成需求规范时遵循规范(importlib_metadata 4.8.3)。

  • bpo-44893: EntryPoint 对象不再是元组。推荐的访问方式是通过属性('.name', '.group')或访问器('.load()')。通过索引访问已弃用,并将引发弃用警告。

  • bpo-22815: 在 unittest.TextTestResult 的摘要中打印未预期的成功与失败和错误。

  • bpo-22047: 弃用在参数组上调用 add_argument_group()。弃用在互斥组上调用 add_argument_group()add_mutually_exclusive_group()

    这些功能从未被支持,且并不总是能正确工作。这些函数通过继承偶然存在于API中,将在未来被移除。

  • bpo-26952: argparse 在尝试为一个空的互斥组渲染用法时,会抛出一个带有清晰消息的 ValueError。之前它抛出一个难以理解的 IndexError

  • bpo-45615: 当异常参数不是 BaseException 类型时,traceback 模块中的函数会抛出 TypeError 而不是 AttributeError

  • bpo-16594: 在 socketserver 中添加 allow_reuse_port 标志。

  • bpo-27718: 修复 signal 模块的帮助文档。一些函数(例如 signal()getsignal())被遗漏了。

  • bpo-46032: functools.singledispatch() 函数的 registry() 方法现在会检查第一个参数或第一个参数注解,并在不支持时抛出 TypeError。之前不支持的“类型”被忽略(例如 typing.List[int])或在调用时引发错误(例如 list[int])。

  • bpo-46014: 添加使用 typing.Uniontypes.UnionType 作为 functools.singledispatch 的调度参数的能力。由 Yurii Karabas 提供补丁。

  • bpo-27062: 向 inspect 添加 __all__,由 Kumar Aditya 提供补丁。

  • bpo-46018: 确保 math.expm1() 在下溢时不抛出异常。

  • bpo-46016: 将来自 FreeBSD 的 F_DUP2FDF_DUP2FD_CLOEXEC 常量添加到 fcntl 模块中。

  • bpo-45755: 现在,当传递给 dir() 时,typing 泛型别名会显示原始泛型类的类属性。这是 Python 3.6 之前的行为,但在 3.7-3.9 中有所改变。

  • bpo-45874: 现在,urllib.parse.parse_qsl 正确处理了不包含任何查询参数的空查询字符串。这在之前启用严格解析时会引发问题。

  • bpo-44674: 修改数据类如何禁止可变默认值的方式。过去是使用一系列已知类型(列表、字典、集合)。现在则禁止不可哈希的对象作为默认值。这是用不可哈希性作为可变性的代理。由Eric V. Smith提供补丁,想法来自Raymond Hettinger。

  • bpo-23882: 从unittest发现中移除命名空间包(PEP 420)的支持。这一功能在Python 3.4中引入,但自Python 3.7以来已经损坏。

  • bpo-25066: 为 multiprocessing.Event 对象添加了 __repr__() 方法,由Kumar Aditya提供补丁。

  • bpo-45643: 在定义了这个信号的平台上添加了 signal.SIGSTKFLT

  • bpo-44092: 跨回滚的获取不再引发 InterfaceError。相反,我们让SQLite库来处理这些情况。由Erlend E. Aasland提供补丁。

  • bpo-42413: 用内置的 TimeoutError 替换 concurrent.futures.TimeoutError 和``asyncio.TimeoutError``,保留这些名称作为已弃用的别名。

文档

测试

  • bpo-46296: 为 enum 添加一个测试用例,条件是 _use_args_ == True 和``_member_type_ == object``。

  • bpo-46205: 修复由于竞态条件导致的runtest_mp中的挂起问题。

  • bpo-46263: 在FreeBSD 14-dev上修复test_capi:指示jemalloc不要用垃圾字节填充释放的内存。

  • bpo-46262: 在 enum.Flag._missing_() 的测试中覆盖 ValueError 路径。

  • bpo-46150: 现在检查 test_pathlib.PosixPathTest.test_expanduser 中的 fakename 是否不存在。

  • bpo-46129: 使用 unittest.IsolatedAsyncioTestCase 重写 asyncio.locks 测试。

  • bpo-23819: 修复了python优化模式下的 asyncio 测试。由Kumar Aditya提供补丁。

  • bpo-46114: 修复针对 OpenSSL 3.0.1 版本的测试用例。OpenSSL 3.0 使用 0xMNN00PP0L

构建

  • bpo-44133: 当 Python 配置了 --without-static-libpython 时,不再构建 Python 静态库(libpython.a)。由 Victor Stinner 提供补丁。

  • bpo-44133: 当 Python 构建时未使用 --enable-sharedpython 程序现在链接到对象文件,而不是 Python 静态库(libpython.a),以确保所有符号都被导出。之前,链接器省略了一些符号,如 Py_FrozenMain() 函数。由 Victor Stinner 提供补丁。

  • bpo-40280: configure 脚本新增了一个选项 --with-emscripten-target,用于选择浏览器或 node 作为 Emscripten 构建目标。

  • bpo-46315: 添加并修复了 #ifdef HAVE_FEATURE 检查,针对 WASI 平台上不可用的功能。

  • bpo-45723: 修复了 configureselect.epoll() 检查的回归问题。

  • bpo-46263: configure 不再在 FreeBSD 平台上设置 MULTIARCH

  • bpo-46106: 在 Windows 构建、macOS 安装包构建和 CI 中更新 OpenSSL 到 1.1.1m。由 Kumar Aditya 提供补丁。

  • bpo-46088: 从 Visual Studio 构建时自动检测或安装引导 Python 运行时。

  • bpo-46072: 添加一个 --with-pystats 配置选项,用于开启内部统计收集。

  • bpo-40280: 新增一个目录 Tools/wasm,包含 WebAssembly 相关的辅助工具,如针对 wasm32-emscripten 的 config.site 覆盖、用于打包标准库的 wasm 资源生成器,以及一个 README。

  • bpo-46023: makesetup 不再构建标记为 disabled 的扩展。这允许用户在 Modules/Setup.local 中禁用模块。

  • bpo-45949: 对除 importlib 引导文件外的所有文件使用纯 Python freeze_module。交叉构建不再需要 --with-freeze-module configure 选项。

Windows

  • bpo-46217: 移除了在Windows 8.1和早期Windows 10上不受支持且可能导致构建或运行时失败的参数。

macOS

  • bpo-40477: macOS的Python启动器应用程序现在能正确启动脚本,并在必要时在最近的macOS版本上运行终端应用程序。

C API

Python 3.11.0 alpha 3

发布日期: 2021-12-08

核心与内置函数

  • bpo-46009: 恢复3.9及更早版本中向新启动的生成器发送非None时的行为。在3.9中,这不影响生成器的状态。在3.10.0和3.10.1中,gen_func().send(0)``等同于``gen_func().throw(TypeError(...),这会耗尽生成器。在3.10.2及以后版本中,行为已恢复到3.9的状态。

  • bpo-46004: 修复了涉及带有无效目标的for循环的 SyntaxError 位置错误。由Pablo Galindo提供补丁。

  • bpo-45711: _PyErr_ChainStackItem() 不再规范化 exc_info (包括在异常实例上设置回溯) ,因为 exc_info 总是被规范化的。

  • bpo-45607: 向 BaseException 添加了 __note__ 字段。默认情况下为 None,但可以设置为字符串,该字符串将添加到异常的跟踪信息中。

  • bpo-45947: 将指向字典和值的指针立即放置在GC头之前。这将访问字典或值时的依赖内存加载次数从3次减少到1次。

  • bpo-45915: 在Linux、macOS和Windows上,is_valid_fd 现在使用更快的 fcntl(fd, F_GETFD)

  • bpo-44530: 恢复了对 code.__new__ audit event 的早期预发布版本的更改。

  • bpo-42268: 如果所选编译器不支持内存清理器,则配置步骤失败。由Pablo Galindo提供补丁

  • bpo-45711: exc_info 的三个值现在总是相互一致。特别是,typetraceback 字段现在是从异常实例派生的。这会影响 sys.exc_info()PyErr_GetExcInfo() 的返回值,如果在处理异常时修改了异常实例,以及 PyErr_SetExcInfo(),现在它会忽略提供给它的 typetraceback 参数。

  • bpo-45727: 改进了自定义语法错误,只有当表达式在括号或方括号之间被检测到时,才触发可能缺少逗号的建议。由Pablo Galindo提供补丁

  • bpo-45885: 使用PEP 659机制专门化了 COMPARE_OP 操作码。

  • bpo-45786: 在帧对象中为解释器帧分配空间,以避免当帧对象比帧激活更持久时进行额外的分配。

  • bpo-45614: 修复了 traceback 对于模块名称无效的异常的显示。

  • bpo-45813: 修复了在协程被释放后调用 coro.cr_frame.clear() 时的崩溃问题。

  • bpo-45811: 改进解析器在遇到不可见控制字符时的分词器错误。由Pablo Galindo提供补丁

  • bpo-45848: 允许解析器直接从编码文件中获取错误行。由Pablo Galindo提供补丁

  • bpo-45709: 恢复3.10版本中追踪在with语句内引发的异常时的行为。

  • bpo-44525: 新增 COPY_FREE_VARS 操作码,使从函数到框架的自由变量复制变得明确。有助于优化Python函数的调用。

  • bpo-45829: 为类中实现 __getitem__ 方法的 BINARY_SUBSCR 操作码进行特化

  • bpo-45826: 修复了在 NameError 上调用 .with_traceback(None) 时发生的崩溃。这内部发生在 unittest.TestCase.assertRaises() 中。

  • bpo-45822: 修复了解析器中的一个错误,该错误导致在没有提供标志时不尊重 PEP 263 编码声明。由Pablo Galindo提供补丁

  • bpo-45820: 修复了当解析器在未读取任何输入时失败时的段错误。由Pablo Galindo提供补丁

  • bpo-45636: 通过索引到函数指针数组(而不是根据oparg切换)来简化 BINARY_OP 的实现。

  • bpo-42540: 修复了在调用 os.fork() 时存在活跃的非默认内存分配器时的崩溃。

  • bpo-45738: 修复解析器中无效连续字符错误位置的计算。由Pablo Galindo提供补丁。

  • bpo-45636: 移除旧式字符串格式化的现有“快速路径”,因为它不再有任何可测量的影响。

  • bpo-45753: 通过跟踪溢出前的调用次数,使递归检查更加高效。

  • bpo-45773: 修复尝试优化某些跳转模式时的编译器挂起问题。

  • bpo-45764: 现在,当在 def 语句后省略开括号 ( 时,解析器会给出更好的错误信息:

    >>> def f:
      File "<stdin>", line 1
        def f:
             ^
    SyntaxError: expected '('
    
  • bpo-45609: 使用PEP 659机制专门化了 STORE_SUBSCR 操作码。

  • bpo-45636: 将所有数字型的 BINARY_*INPLACE_* 指令替换为单一的 BINARY_OP 实现。

  • bpo-45582: 路径计算(称为 getpath)已被重新实现为一个冻结的Python模块。这应该不会有可见的影响,但可能会影响 syssysconfig 中引用的所有路径的计算。

  • bpo-45450: 为带括号的参数改进了语法错误消息。由Pablo Galindo提供补丁。

  • bpo-27946: 修复了在替换 attrib 字典的同时获取 xml.etree.ElementTree.Element 属性时可能发生的崩溃。

  • bpo-45711: 让 asyncio 在通过 PyErr_Fetch() 捕获异常后立即规范化异常,并在它们被存储为exc_info三元组之前。这使得 asyncio 与代码库的其余部分保持一致,其中exc_info三元组总是被规范化的。

  • bpo-23819: 在asyncio中用异常替换了断言,由Kumar Aditya提供补丁。

  • bpo-13236: unittest.TextTestResultunittest.TextTestRunner 现在更频繁地刷新输出流。

  • bpo-45917: 添加了 math.exp2(),它返回2的x次幂。

  • bpo-37658: 修复了在某些条件下 asyncio.wait_for() 可能允许协程成功完成,但未能返回结果,可能导致内存泄漏或其他问题的问题。

  • bpo-45876: 提高了statistics模块中stdev()和pstdev()的准确性。当输入是浮点数或分数时,输出是一个正确舍入的浮点数

  • bpo-44649: 处理了dataclass(slots=True)与一个字段有默认值,但init=False的情况。

  • bpo-45803: 向dataclasses.make_dataclass()添加了缺失的kw_only参数。

  • bpo-45837: turtle.RawTurtle.settiltangle() 自Python 3.1起已被弃用,现在会发出弃用警告,并将在Python 3.13中移除。

    请使用 turtle.RawTurtle.tiltangle() 代替。

    turtle.RawTurtle.tiltangle() 之前被错误地标记为弃用,其文档字符串已被更正。

    由 Hugo van Kemenade 提供补丁。

  • bpo-45831: faulthandler 现在可以在转储回溯时,通过一次 write() 系统调用写入仅包含 ASCII 的字符串(如文件名和函数名)。这减少了当两个线程或两个进程同时向同一文件(如 stderr)转储回溯时,产生不可读转储的风险。由 Victor Stinner 提供补丁。

  • bpo-45828: sqlite 的 C 回调现在在启用回调回溯时使用不可引发异常。由 Erlend E. Aasland 提供补丁。

  • bpo-41735: 在 PyObject_GetBuffer 之前修复了 zlib.Decompress.flush() 方法中的线程锁。

  • bpo-45235: 恢复了 argparse 的一个错误修复,该修复导致了处理子解析器默认参数时的回归。这防止了叶级参数优先于根级参数。

  • bpo-45754: 修复了 Python 3.11a1 和 3.11a2 中的一个回归问题,其中 sqlite3 在检查 SQL 语句长度时会错误地使用 SQLITE_LIMIT_LENGTH。现在使用 SQLITE_LIMIT_SQL_LENGTH。由 Erlend E. Aasland 提供补丁。

  • bpo-45766: 向 statistics.linear_regression() 添加了 proportional 选项。

  • bpo-45765: 在 importlib.metadata 中,修复了对于空路径的发行版发现。

  • bpo-45757: 修复了一个 bug,其中 disEXTENDED_ARG 后跟一个不使用其参数的操作码时会产生错误的 oparg。

  • bpo-45644: 使用 python3 -m json.tool infile infile 进行原地 JSON 文件格式化现在可以正常工作,之前会导致文件为空。由 Chris Wesseling 提供补丁。

  • bpo-45703: 当在程序运行时,一个命名空间包在另一个来自同一命名空间的模块被创建/安装在不同的 sys.path 位置之前被导入时,调用 importlib.invalidate_caches() 函数现在也能保证新模块被注意到。

  • bpo-45535: 改进 dir() 对枚举的输出。

  • bpo-45664: 修复 types.resolve_bases()types.new_class() 对于作为基类的 types.GenericAlias 实例的处理。

  • bpo-45663: 修复 dataclasses.is_dataclass() 对于是 types.GenericAlias 子类的数据类的处理。

  • bpo-45662: 修复 dataclasses.InitVar 与内置类类型别名的 repr,例如 InitVar[list[int]]

  • bpo-43137: 通过 gio 工具而非过时的 gvfs-open 启动 GNOME 网页浏览器。

  • bpo-45429: 在 Windows 上,time.sleep() 现在使用支持高分辨率计时器的可等待计时器。由 Donghee Na 和 Eryk Sun 提供补丁。

  • bpo-37295: 优化 math.comb()math.perm()

  • bpo-45514: 弃用 importlib.resources 中的旧函数。

  • bpo-45507: 为 gzip.decompress 实现添加截断/缺失尾部的测试。

  • bpo-45359: 为 graphlib.TopologicalSorter 实现 PEP 585

  • bpo-44733: 向 concurrent.futures.ProcessPoolExecutor 添加 max_tasks_per_child。这允许用户指定单个进程在执行前需要重启之前应执行的最大任务数。

  • bpo-28806: 改进 netrc 库。netrc 文件不再需要包含所有令牌。如果登录名是匿名的,不再需要安全检查。

  • bpo-43498: 避免在调整 ProcessPoolExecutor 的进程计数时可能出现的*“RuntimeError: dictionary changed size during iteration”*

  • bpo-42158: 向 mimetypes 添加 N-quads、N-triples、Notation3 和 TriG 的 MIME 类型。

  • bpo-30533: 添加 inspect.getmembers_static(),它返回所有成员而不通过描述符协议触发动态查找。由 Weipeng Hong 提供补丁。

文档

  • bpo-42238: make -C Doc suspicious 将很快被 make -C Doc check 取代,标记为已弃用。

  • bpo-45840: 改进数据模型文档中的交叉引用。

  • bpo-45640: 文档中正确标记的语法标记现在可点击,并带你到给定语法部分的定义。由Arthur Milchior提供补丁。

  • bpo-45788: 将sys.prefix的文档链接到sysconfig文档的安装路径部分。

  • bpo-45772: socket.socket 的文档被从函数更正为类。

  • bpo-45392: 更新内置 type 的文档字符串,移除冗余行并提及构造器的关键字参数。

  • bpo-45250: 更新文档以说明CPython不总是要求迭代器定义 __iter__

  • bpo-25381: 在扩展文档的扩展章节中,更新了一段关于包含异常信息的全局变量的段落。

  • bpo-43905: 扩展了 astuple()asdict() 的文档,警告应用了deepcopy并提供了解决方法。

测试

  • bpo-45695: 现在CI测试了使用只读源目录的树外构建。

  • bpo-19460: 为 Lib/email/mime/nonmultipart.py::MIMENonMultipart 添加新测试。

  • bpo-45835: 修复了test_queue测试中多个“feeder”线程的竞态条件。

  • bpo-45783: 冻结工具的测试现在处理文件的移动和删除。

  • bpo-45745: 移除了regrtest的 --findleaks 命令行选项:改用 --fail-env-changed 选项。自Python 3.7起,它已被弃用作为 --fail-env-changed 选项的别名。

  • bpo-45701: 在 test_functools 中添加了使用 functools.lru_cache()tuple 类型的测试。

构建

  • bpo-44035: CI现在验证autoconf文件是否已使用当前且未打补丁的autoconf包重新生成。

  • bpo-45950: 构建系统现在再次使用 _bootstrap_python 解释器进行冻结和深度冻结。为了加快构建过程,构建工具 _bootstrap_python_freeze_module 不再使用LTO构建。

  • bpo-45881: configure 脚本现在接受 --with-build-python--with-freeze-module 选项,使交叉编译更容易。

  • bpo-40280: Emscripten 平台现在默认使用 .wasm 后缀。

  • bpo-40280: 在 WASM/Emscripten 目标上禁用不可用的核心扩展模块。

  • bpo-40280: configure 现在检查 socket shutdown 函数。该检查使得可以在 CONFIG_SITE 中用 ac_cv_func_shutdown=no 禁用 SYS_shutdown

  • bpo-40280: configure 现在检查函数 fork1, getegid, geteuid, getgid, getppid, getuid, opendir, pipe, system, wait, ttyname

  • bpo-33393: 更新 config.guess 至 2021-06-03 和 config.sub 至 2021-08-14。Makefile 现在有一个 update-config 目标,使更新更加方便。

  • bpo-45866: make regen-all 现在在源树之外的目录运行时产生相同的输出:当在源树之外构建 Python 时。pegen 现在去除 "generated by pygen from <FILENAME>" 头部的目录。由 Victor Stinner 提供的补丁。

  • bpo-40280: configure 现在接受机器 wasm32wasm64 和操作系统 wasiemscripten 以进行交叉构建,例如 wasm32-unknown-emscriptenwasm32-wasiwasm32-unknown-wasi

  • bpo-41498: Python 现在可以在没有 sigset_t 的平台上编译。当 sigset_t 缺失时,signal 中的几个函数不可用。

    基于 Roman Yurchak 为 pyodide 提供的补丁。

  • bpo-45881: setup.py 现在首先使用环境中的 CC 来发现多架构和交叉编译路径。

  • bpo-45886: _freeze_module 程序的路径现在可以在命令行中覆盖,例如 make FREEZE_MODULE=../x86_64/Program/_freeze_module

  • bpo-45873: 去除 _bootstrap_python 构建步骤。deepfreeze.py 脚本现在使用 $(PYTHON_FOR_REGEN) 运行,可以是 Python 3.7 或更新版本(在 Windows 上,3.8 或更新版本)。

  • bpo-45847: 将内置的 hashlib 扩展移植到 PY_STDLIB_MOD 宏和 addext()

  • bpo-45723: 为保存和恢复环境变量添加 autoconf 助手:

    • SAVE_ENV: 保存 $CFLAGS$LDFLAGS$LIBS$CPPFLAGS

    • RESTORE_ENV: 恢复 $CFLAGS$LDFLAGS$LIBS$CPPFLAGS

    • WITH_SAVE_ENV([SCRIPT]): 使用 SAVE_ENVRESTORE_ENV 包装运行 SCRIPT

    由 Erlend E. Aasland 提交的补丁。

  • bpo-45573: 启动 Python 所需的强制核心模块现在位于 Modules/Setup.bootstrap 中。

  • bpo-45573: configure 现在创建 Modules/Setup.stdlib,其中包含有条件启用/禁用的扩展模块行。该文件尚未使用。

  • bpo-45573: configure 现在使用统一的格式来设置 Makefile 中的状态、编译器标志和链接器标志。新的宏 PY_STDLIB_MOD 设置了三个变量,由 Modules/Setupsetup.py 使用。

  • bpo-45816: Python 现在支持使用 Visual Studio 2022 (MSVC v143, VS 版本 17.0) 构建。补丁由 Jeremiah Vivian 提供。

  • bpo-45800: pyexpat C 扩展的设置现在由 configure 检测。捆绑的 expat 库在 Makefile 中构建。

  • bpo-45798: decimal 内部 C 扩展的设置现在由 configure 检测。捆绑的 libmpdec 库在 Makefile 中构建。

  • bpo-45723: configure 有一个新选项 --with-pkg-config 来禁用或要求 pkg-config。

  • bpo-45774: sqlite3 的构建依赖现在由 configurepkg-config 检测。补丁由 Erlend E. Aasland 提供。

  • bpo-45763: zlibbz2lzma 的构建依赖现在由 configure 检测。

  • bpo-45747: gdbm 和 dbm 的构建依赖现在由 configure 检测。

  • bpo-45743: 在 macOS 上,构建系统不再向链接器传递 search_paths_first。自 Xcode 4 / macOS 10.6 以来,该标志已成为默认设置。

  • bpo-45723: configure.ac 现在兼容 autoconf 2.71。已移除过时的检查 STDC_HEADERSAC_HEADER_TIME

  • bpo-45723: configure 现在会在 pkg-config 缺失时打印警告。

  • bpo-45731: configure --enable-loadable-sqlite-extensions 现在由新的 PY_SQLITE_ENABLE_LOAD_EXTENSION 宏处理,而非 setup.py 中的逻辑。

  • bpo-45723: configure.ac 现在使用自定义辅助宏和 AC_CACHE_CHECK 来简化和加速 configure 运行。

  • bpo-45696: 通过生成产生一组即用型代码对象的 C 代码,跳过冻结模块的 marshal 步骤。这使启动时间再加快 10% 或更多。

  • bpo-45561: 从 $(srcdir) 运行 smelly.py 工具。

Windows

  • bpo-46105: 修复了 Windows 上 venv 中 sys.path 的计算。

  • bpo-45901: 当通过 Microsoft Store 安装并设置为 *.py 文件的默认应用时,现在在调用脚本时无需显式启动 Python(即 script.py args 而非 python script.py args)即可将命令行参数传递给 Python。

  • bpo-45616: 修复了 Python Launcher 在明确请求时区分版本 3.1 和 3.10 的能力。之前,如果请求了 3.10 但未安装,会使用 3.1;如果请求了 3.1 但安装了 3.10,会使用 3.10。

  • bpo-45850: 实现在 Windows 上构建带有深度冻结模块的更改。注意,我们现在需要 Python 3.10 作为“引导”或“主机”Python。

  • bpo-45732: 更新捆绑的 Tcl/Tk 至 8.6.12。

  • bpo-45720: 移除了对 shlwapi.dll 的内部引用以帮助提高启动时间。此 DLL 将不再在每个 Python 进程启动时加载。

macOS

  • bpo-45732: 更新 python.org macOS 安装程序以使用 Tcl/Tk 8.6.12。

C API

  • bpo-39026: 修复 Python.h 以使用 Xcode 构建 C 扩展:从 Include/cpython/pystate.h 中移除一个相对包含。

Python 3.11.0 alpha 2

发布日期: 2021-11-05

核心与内置函数

  • bpo-45716: 改进在函数调用中使用 TrueNoneFalse 作为关键字时的 SyntaxError 消息。由Pablo Galindo提供补丁。

  • bpo-45688: sys.stdlib_module_names 现在包含了macOS特定的模块 _scproxy

  • bpo-45379: 澄清当我们尝试显式导入一个冻结模块但冻结模块被禁用时的 ImportError 消息。

  • bpo-44525: 专门化对Python函数的简单调用(无星号参数、关键字字典或闭包)。

  • bpo-45530: 在某些情况下,使用元组作为键的排序现在可能显著更快。由Tim Peters提供补丁。

    如果元组元素没有定义一个全序(关于全序的信息见 值比较),结果顺序可能与早期版本不同。一般来说,在没有对列表元素进行全序的情况下,排序的结果是不明确的。

  • bpo-45526: 在obmalloc中,设置ADDRESS_BITS不忽略任何位(之前忽略16位)。在内核给用户空间虚拟地址跨越大于48位的范围的情况下,这更安全。

  • bpo-30570: 修复了在搜索病态的 __bases__ 元组时 issubclass() 因无限递归而崩溃的问题。

  • bpo-45521: 修复obmalloc基数树代码中的一个错误。在64位机器上,该错误导致树持有46位的虚拟地址,而不是预期的48位。

  • bpo-45494: 修复报告涉及无效延续字符错误时的解析器崩溃。由Pablo Galindo提供补丁。

  • bpo-45445: 如果Python在命令行中发现无效的 -X 选项,现在将初始化失败。由Pablo Galindo提供补丁。

  • bpo-45340: 对象属性现在保存在数组中而不是字典中。对象的字典是懒加载的,只有在需要时才创建。减少了典型Python对象的内存消耗约30%。由Mark Shannon提供补丁。

  • bpo-45408: 修复解析器在报告与未闭合括号同时发生的分词器错误时崩溃的问题。由Pablo Galindo提供补丁。

  • bpo-29410: 添加SipHash13作为字符串哈希算法并默认使用。

  • bpo-45385: 修复来自descr_check的引用泄漏。由Donghee Na提供补丁。

  • bpo-45367: 使用PEP 659机制将 BINARY_MULTIPLY 操作码专门化为 BINARY_MULTIPLY_INT``和 ``BINARY_MULTIPLY_FLOAT

  • bpo-21736: 冻结的标准库模块现在将 __file__ 设置为它们原本会从中加载的.py文件,如果可能的话。对于包,__path__``现在有了正确的条目,而不是空列表,这允许导入未冻结的子模块。这些仅在运行时初始化时知道标准库目录的情况下设置。注意,``__file__``处的文件不保证存在。这些都不影响非标准库的冻结模块,目前也不影响使用 ``PyImport_ImportFrozenModule() 导入的冻结模块。另外,目前模块的 co_filename 没有更新。

  • bpo-45020: 对于冻结的标准库模块,将原始模块名称记录为``module.__spec__.loader_state.origname``。如果该值与 module.__spec__.name 不同,则该模块在Tools/scripts/freeze_modules.py中被定义为别名。如果它是 None,则该模块来自标准库之外的源文件。

  • bpo-45324: 在FrozenImporter.find_spec()中,我们现在保留了在exec_module()中加载模块所需的信息。这一变化主要影响内部细节,而不是改变导入器的行为。

  • bpo-45292: 实现 PEP 654。添加 ExceptionGroupBaseExceptionGroup。更新回溯显示代码。

  • bpo-40116: 修改拆分字典的实现。实例在确切属性集或属性设置顺序上不同的类仍可共享键。这对Python或C-API的用户应无可见影响。由Mark Shannon提供补丁。

  • bpo-44050: 通过设置 m_size 为-1来表明使用全局状态的扩展可以再次在多个解释器中使用。这恢复到Python 3.8的行为。

  • bpo-44525: 为 CALL_FUNCTION 操作码设置初始专业化基础设施。实现了C函数调用的初始专业化:

    • CALL_FUNCTION_BUILTIN_O``对应 ``METH_O 标志。

    • CALL_FUNCTION_BUILTIN_FAST``对应不包含关键字的 ``METH_FASTCALL 标志。

    • CALL_FUNCTION_LEN``对应 ``len(o)

    • CALL_FUNCTION_ISINSTANCE``对应 ``isinstance(o, t)

  • bpo-44511: 改进类和映射模式生成的字节码。

  • bpo-43706: 通过使用 PEP 590 vectorcall 调用约定加速 enumerate() 的调用。由Donghee Na提供补丁。

  • bpo-45679: 修复多值 typing.Literal 的缓存问题。Literal[True, 2] 不再等于``Literal[1, 2]``。

  • bpo-42064: 将 sqlite3 转换为多阶段初始化(PEP 489)。由Erlend E. Aasland提供补丁。

  • bpo-45438: 修复泛型内置类型的typing.Signature字符串表示。

  • bpo-45613: sqlite3 现在根据底层SQLite库编译时的默认线程模式设置 sqlite3.threadsafety。由Erlend E. Aasland提供补丁。

  • bpo-45574: 修复关于 print_escape 未使用的警告。

  • bpo-45581: sqlite3.connect() 现在在底层SQLite API发出内存错误信号时正确引发 MemoryError。由Erlend E. Aasland提供补丁。

  • bpo-45557: pprint.pprint() 现在正确处理*underscore_numbers*。之前总是将其设置为``False``。

  • bpo-44019: 将 operator.call() 添加到 operator.__all__ 中。由 Kreusada 提供补丁。

  • bpo-42174: 现在如果列数或行数为 0,shutil.get_terminal_size() 会回退到合理的值。

  • bpo-35673: 改进了对命名空间包的 __loader__ 属性的内省能力。importlib.machinery.NamespaceLoader 现在是公开的,并且实现了 importlib.abc.InspectLoader 接口。_NamespaceLoader 保留以向后兼容。

  • bpo-45515: 在 datetime 文档中添加了对 zoneinfo 的引用,主要替换了对 dateutil.tz 的过时引用。由 Paul Ganssle 更改。

  • bpo-45475: 撤回了对 gzip.GzipFilebz2.BZ2Filelzma.LZMAFile 迭代的优化(参见 bpo-43787),因为在用户迭代它们时没有保持它们的引用导致回归。由 Inada Naoki 提供补丁。

  • bpo-45489: 更新 ForwardRef 以支持 | 操作符。补丁由 Donghee Na 提供。

  • bpo-42222: 移除了在 randrange() 中对浮点数参数的弃用支持。

  • bpo-45428: 修复了在从标准输入读取文件名时 py_compile 中的回归问题。

  • bpo-45467: 修复了 "raw-unicode-escape" 编解码器中的增量解码器和流读取器。之前如果转义序列被分割,它们会失败。

  • bpo-45461: 修复了 "unicode-escape" 编解码器中的增量解码器和流读取器。之前如果转义序列被分割,它们会失败。

  • bpo-45239: 修复了 email.utils.parsedate_tz() 在某些无效输入上崩溃并抛出 UnboundLocalError 而不是返回 None 的问题。由 Ben Hoyt 提供补丁。

  • bpo-45417: 修复了 enum 模块中的二次行为:创建具有大量条目的枚举类是二次的。

  • bpo-45249: 修复了当异常中的 end_offset 设置为 0 时,traceback.print_exc() 在显示插入符号时的行为。由 Pablo Galindo 提供补丁。

  • bpo-45416: 修复了与显式 asyncio.Lock 对象一起使用 asyncio.Condition 的问题,这是由于移除了显式循环参数导致的回归。由 Joongi Kim 提供补丁。

  • bpo-20028: 初始化 csv.Dialect 时不允许空的 escapechar/quotechar。由 Vajrasky Kok 和 Donghee Na 提供补丁。

  • bpo-44904: 修复了 doctest 模块中的一个错误,该错误会在文档字符串包含一个带有 classmethod property 的示例时导致失败。由 Alex Waygood 提供补丁。

  • bpo-45406: 使 inspect.getmodule() 捕获由 inspect.getabsfile() 引发的 FileNotFoundError,并返回 None 表示无法确定模块。

  • bpo-45411: 在 mimetypes.py 模块中添加了包含字幕的文件扩展名 - .srt 和 .vtt。

  • bpo-10716: 将 pydoc 迁移到 HTML5(不改变其外观)。副作用是更新了 xmlrpc 的 ServerHTMLDoc,现在也使用了 CSS。cgitb 现在较少依赖 pydoc(因为它不能使用 CSS 文件)。

  • bpo-27580: 在 csv 中添加了对空字符的支持。

  • bpo-45262: 防止 asyncio 中的 use-after-free。确保缓存的运行循环持有人在释放时被清除,以防止在 get_running_loop 中出现 use-after-free。

  • bpo-45386: 使 xmlrpc.client 对 C 运行时更加健壮,其中底层的 C strftime 函数在测试年份格式化选项时会导致 ValueError

  • bpo-20028: 改进 csv.Dialect 初始化时的错误消息。由 Vajrasky Kok 和 Donghee Na 提供补丁。

  • bpo-45343: 将捆绑的 pip 更新到 21.2.4,setuptools 更新到 58.1.0。

  • bpo-45328: 修复了 http.client.HTTPConnection 在不支持 TCP_NODELAY 套接字选项的操作系统中正常工作的问题。

  • bpo-45243: 向 sqlite3.Connection 添加了 setlimit()getlimit() 方法,用于基于连接设置和获取 SQLite 限制。由 Erlend E. Aasland 提供补丁。

  • bpo-45320: 从 inspect 模块中移除:

    由 Hugo van Kemenade 提供补丁。

  • bpo-45192: 修复 tempfile._infer_return_type 函数,使得 tempfile 函数的 dir 参数接受实现 os.PathLike 协议的对象。

    由 Kyungmin Lee 提供补丁。

  • bpo-45160: 当追踪被 ttk OptionMenu 使用的 tkinter 变量时,回调不再被调用两次。

  • bpo-25625: 添加了非并行安全的 chdir() 上下文管理器,用于改变当前工作目录并在退出时恢复。chdir() 的简单包装。

  • bpo-24139: 在 sqlite3.Error 中添加对 SQLite 扩展结果代码的支持。由 Erlend E. Aasland 提供补丁。

  • bpo-24444: 修复了 argparse 帮助显示中当选项的帮助设置为 1+ 个空格或当 choices 参数为空容器时引发的错误。

  • bpo-44547: 实现 Fraction.__int__,使得 fractions.Fraction 实例 f 通过 isinstance(f, typing.SupportsInt) 检查。

  • bpo-40321: 在 urllib 中添加对 HTTP 308 重定向的支持。详情见 RFC 7538。由 Jochem Schulenklopper 提供补丁。

  • bpo-41374: 确保在 Cygwin 3.1.6 及更高版本中暴露 socket.TCP_* 常量。

  • bpo-35970: 向 base64 模块的命令行界面添加帮助标志。由 Robert Kuska 提供的补丁。

文档

测试

  • bpo-45678: 添加测试场景,其中 functools.singledispatchmethod 堆叠在已经被两个其他装饰器包装的方法上。由Alex Waygood提供补丁。

  • bpo-45578: 为 dis.distb() 添加测试。

  • bpo-45678: 添加测试以确保 functools.singledispatchmethod 正确包装目标函数的属性。

  • bpo-45668: 现在,当Python在没有测试扩展模块的情况下构建时,PGO测试通过。

  • bpo-45577: 在 test_zoneinfo 中为所有 pickle 协议添加子测试。

  • bpo-45566: 修复 test_frozen_pickle``在 ``test_dataclasses 中检查所有 pickle 版本的问题。

  • bpo-43592: test.libregrtest 现在会在默认值对我们的测试套件来说太低时(如经常在macOS上的情况)提高文件描述符的最大数量的软资源限制。

  • bpo-39679: 为与 @classmethod@staticmethod 结合使用的``@functools.singledispatchmethod``添加更多测试用例。

  • bpo-45410: 当libregrtest生成工作进程时,现在将stderr写入stdout以保持消息顺序。使用单一管道处理stdout和stderr,而非两个管道。此前,消息顺序错乱,增加了分析buildbot日志的难度。由Victor Stinner提交的补丁。

  • bpo-45402: 修复当Python在树外构建时test_tools.test_sundry()的问题:修正freeze_modules.py工具如何定位_freeze_module程序。由Victor Stinner提交的补丁。

  • bpo-45403: 修复当Python在源代码树外构建时test_sys.test_stdlib_dir()的问题:比较规范化路径。由Victor Stinner提交的补丁。

  • bpo-45400: 如果目录名包含"a1"(如"Python-3.11.0a1"),修复test_exceptions中的test_name_error_suggestions_do_not_trigger_for_too_many_locals():使用更严格的正则表达式。由Victor Stinner提交的补丁。

  • bpo-10572: 将 sqlite3 测试从 test_sqlite 重命名为 test_sqlite3,并将其重新定位到 Lib/test/test_sqlite3。由Erlend E. Aasland提交的补丁。

构建

  • bpo-43158: setup.py 现在使用来自配置脚本的值来构建 _uuid 扩展模块。配置现在也能检测util-linux的 libuuid

  • bpo-45666: 修复 _testembed.c``中 ``swprintf%s 使用的警告

  • bpo-45548: Modules/Setup``和 ``Modules/makesetup 已得到改进。Setup 文件现在包含所有扩展的工作规则。过时的评论已被移除。由 makesetup 定义的规则正确跟踪依赖关系。

  • bpo-45548: mathcmath 的实现现在需要C99兼容的 libm,并且不再提供针对缺少acosh、asinh、atanh、expm1和log1p函数的变通方案。

  • bpo-45595: setup.pymakesetup 现在跟踪所有Python头文件和模块特定头文件的构建依赖。

  • bpo-45571: Modules/Setup 现在使用 PY_CFLAGS_NODIST 而不是 PY_CFLAGS 来编译共享模块。

  • bpo-45570: pyexpat_elementtree 不再定义过时的宏 HAVE_EXPAT_CONFIG_HUSE_PYEXPAT_CAPIXML_POOR_ENTROPY 现在在 expat_config.h 中定义。

  • bpo-43974: setup.py 不再定义 Py_BUILD_CORE_MODULE。相反,每个使用内部 API 的模块都会定义这个宏。

  • bpo-45548: 填充 Modules/Setup 中缺失的条目。

  • bpo-45532: 更新 sys.version 使用 main 作为后备信息。由 Jeong YunWon 提供补丁。

  • bpo-45536: configure 脚本现在检查 OpenSSL 头文件和库是否提供所需的 API。大多数常见的 API 都经过验证。此检查能检测到过时或缺失的 OpenSSL。失败不会停止 configure。

  • bpo-45221: 修复了处理 LDFLAGSCPPFLAGS 选项时的回归问题,其中 argparse.parse_known_args() 可能会将选项解释为内置命令行参数之一,例如 -h 寻求帮助。

  • bpo-45440: 构建 Python 现在需要一个提供以下函数的 C99 <math.h> 头文件:copysign(), hypot(), isfinite(), isinf(), isnan(), round()。补丁由 Victor Stinner 提供。

  • bpo-45405: 防止在使用非 Apple clang 的近期版本运行 configure 时出现 internal configure error。由 David Bohman 提供补丁。

  • bpo-45433: 避免将 libpython 与 libcrypt 链接。

Windows

  • bpo-43652: 这次真的更新 Tcl/Tk 到 8.6.11。之前的更新错误地包含了 8.6.10。

  • bpo-45337: venv 现在会在创建的环境可能需要通过不同的路径访问时发出警告,由于重定向、链接或连接点。现在它还能在需要替代路径时正确安装或升级组件。

  • bpo-43851: 在 Windows 上构建 SQLite SQLITE_OMIT_AUTOINIT。由 Erlend E. Aasland 提供补丁。

macOS

  • bpo-44828: 避免在使用python.org macOS安装程序提供的Tk 8.6.11时,在macOS 12 Monterey上出现tkinter文件对话框失败的问题。由Tk项目的Marc Culler提供补丁。

IDLE

  • bpo-45495: 将上下文关键词'case'和'match'添加到补全列表中。

C API

  • bpo-29103: PyType_FromSpec* 现在将类名从规范复制到类拥有的缓冲区中,因此原始类名可以被安全地释放。由Petr Viktorin提供补丁。

  • bpo-45522: 现在可以禁用帧、浮点数、列表、字典、异步生成器和上下文对象的内部自由列表。

  • bpo-35134: 从有限C API中排除 PyWeakref_GET_OBJECT()。由于 PyWeakReference 结构在有限C API中是不透明的,它从未工作过。

  • bpo-35081: 将 interpreteridobject.h 头文件从 Include/ 移动到``Include/internal/``。它仅提供私有函数。由Victor Stinner提供补丁。

  • bpo-35134: 非有限API文件 cellobject.hclassobject.hcontext.hfuncobject.hgenobject.h``和 ``longintrepr.h 已被移动到 Include/cpython 目录。此外,eval.h``头文件已被移除。这些文件不应直接包含,因为它们已经被包含在 ``Python.h``中:参见 :ref:`包含文件 <api-includes>`。如果它们已被直接包含,考虑改为包含 ``Python.h。由Victor Stinner提供补丁。

  • bpo-45474: 当定义 Py_LIMITED_API 时,以下项目不再可用:

    这些不是 limited API 的组成部分。

    由Victor Stinner提供补丁。

  • bpo-45434: 移除 pystrhex.h 头文件。它仅包含私有函数。C扩展应仅包含主要的``<Python.h>``头文件。由Victor Stinner提供补丁。

  • bpo-45440: 移除 Py_FORCE_DOUBLE() 宏。它被 Py_IS_INFINITY() 宏使用。由Victor Stinner提供补丁。

  • bpo-45434: 当 Py_LIMITED_API 宏设置为 0x030b0000``(Python 3.11)或更高时,``<Python.h> 不再包含头文件 <stdlib.h><stdio.h><errno.h><string.h>。C扩展应在 #include <Python.h> 之后显式包含这些头文件。由 Victor Stinner 提供补丁。

  • bpo-41123: 移除自 Python 3.3 起已弃用的 Py_UNICODE_COPY()Py_UNICODE_FILL() 宏。改用 PyUnicode_CopyCharacters()memcpy() (wchar_t* 字符串) ,以及 PyUnicode_Fill() 函数。由 Victor Stinner 提供补丁。

  • bpo-45412: 移除以下使用 errno 变量的数学宏:

    • Py_ADJUST_ERANGE1()

    • Py_ADJUST_ERANGE2()

    • Py_OVERFLOWED()

    • Py_SET_ERANGE_IF_OVERFLOW()

    • Py_SET_ERRNO_ON_MATH_ERROR()

    由Victor Stinner提供补丁。

  • bpo-45395: 自定义冻结模块(设置为 PyImport_FrozenModules 的数组)现在被视为添加项,而不是替换所有默认的冻结模块。通过将自定义数组条目的“code”字段设置为 NULL,仍可以禁用冻结的标准库模块。

  • bpo-43760: 在有限的 C API 中添加新的 PyThreadState_EnterTracing()PyThreadState_LeaveTracing() 函数,以暂停和恢复跟踪和性能分析。由 Victor Stinner 提供补丁。

  • bpo-44220: PyStructSequence_UnnamedField 被添加到稳定 ABI 中。

Python 3.11.0 alpha 1

发布日期:2021-10-05

安全性

  • bpo-42278: 将 tempfile.mktemp() 的使用替换为 TemporaryDirectory,以避免潜在的竞态条件。

  • bpo-44600: 修复在 match 语句中跟踪某些失败模式时的错误行号。由 Charles Burkland 提供补丁。

  • bpo-41180: 向 marshal 模块添加审计事件,并停止为每个解组的代码对象引发 code.__init__ 事件。直接实例化的代码对象将继续引发事件,审计事件处理程序应检查或收集原始 marshal 数据。这减少了从 .pyc 文件加载时的显著性能开销。

  • bpo-44394: 将打包的libexpat库从2.2.8更新至2.4.1版本,以修复 CVE 2013-0340 "Billion Laughs"漏洞。此版本主要用于Windows和macOS系统。

  • bpo-43124: 在 smtplib 中的内部函数 putcmd 现在会对输入进行 \r\n 字符的清理,以避免(不太可能的)命令注入。

  • bpo-44022: http.client 现在在服务器返回 100 Continue 状态响应后,避免无限读取潜在的HTTP头部信息。

核心与内置函数

  • bpo-43760: 通过为追踪添加特殊指令,将每个指令分发的硬件分支数量从两个减少到一个。补丁由Mark Shannon提供。

  • bpo-45061: 为布尔类型添加了一个析构器,用于检测C扩展中错误调用Py_DECREF(Py_True)或Py_DECREF(Py_False)时的引用计数错误。同时检测当空元组单例或Unicode空字符串单例被错误销毁时的引用计数错误。由Victor Stinner提供补丁。

  • bpo-24076: sum()函数在求和单数字整数时进一步优化。

  • bpo-45190: 更新Unicode数据库至Unicode 14.0.0版本。

  • bpo-45167: 修复了 types.GenericAlias 对象的深拷贝问题。

  • bpo-45155: int.to_bytes()int.from_bytes() 现在为 byteorder 参数提供了一个默认值 "big"int.to_bytes() 还为 length 参数提供了一个默认值 1

  • bpo-44219: 在执行任意文件描述符的 isatty 系统调用时释放GIL。这特别影响了 os.isatty()os.device_encoding()io.TextIOWrapper。间接地,文本模式下的 io.open() 也受到影响。此更改解决了 os.isatty() 中的一个死锁问题。由Vincent Michel在 bpo-44219 中提供补丁。

  • bpo-44959: 在HP-UX系统上添加了对'.sl'后缀扩展模块的回退支持。

  • bpo-45121: 修复了当直接调用或通过 super() 调用时,Protocol.__init__ 会引发``RecursionError``的问题。由Yurii Karabas提供补丁。

  • bpo-44348: BaseException 类型的析构函数现在使用trashcan机制来防止栈溢出。例如,当一个 RecursionError 实例被引发时,它可以通过 __context__ 属性或 ``__traceback__``属性链接到另一个RecursionError,然后创建一系列异常。当链被销毁时,如果链相对于可用栈内存来说太长,嵌套的析构函数调用可能会因栈溢出而崩溃。由Victor Stinner提供补丁。

  • bpo-45123: 修复PyAiter_Check仅检查__anext__的存在(不检查__aiter__)。将PyAiter_Check重命名为PyAIter_Check,PyObject_GetAiter -> PyObject_GetAIter。

  • bpo-1514420: 解释器在格式化异常时不再尝试打开带有尖括号中名称的文件(如"<string>"或"<stdin>")。

  • bpo-41031: 匹配C和Python代码中不可打印异常和 __main__ 模块中异常的格式化。

  • bpo-37330: open()io.open()codecs.open()fileinput.FileInput 不再接受文件模式中的 'U' ("通用换行") 。此标志自Python 3.3起已被弃用。由Victor Stinner提供补丁。

  • bpo-45083: 当解释器渲染异常时,其名称现在具有完整的限定名。以前只有类名被连接到模块名,这有时会导致显示的全名不正确。

    (此问题仅影响C代码异常渲染,traceback 模块已经使用了限定名)。

  • bpo-34561: 列表排序现在使用来自Munro和Wild的 powersort() 的合并排序策略。与之前的策略不同,这在运行长度分布的熵方面被证明是接近最优的。大多数使用 list.sort() 的情况可能不会看到显著的时间差异,但在之前策略表现特别差的情况下可能会看到显著的改进。然而,由于这些都是对一个本质上最好情况下是二次时间解决的问题的快速线性时间近似,也有可能构造出之前策略表现更好的案例。

  • bpo-45056: 编译器现在会从co_consts中移除未使用的尾随常量。

  • bpo-45020: 添加一个新的命令行选项"-X frozen_modules=[on|off]"来选择不使用(或使用)可选的冻结模块。这默认为"on"(或者如果它从源树运行则为"off")。

  • bpo-45012: 在 posix 中,在 os.DirEntry.stat() 进行的 stat()lstat()fstatat() 系统调用期间释放GIL。由Stanisław Skonieczny提供补丁。

  • bpo-45018: 修复了迭代超过 2**32 次的范围迭代器的pickling问题。

  • bpo-45000: 当尝试删除 __debug__ 时,现在会引发 SyntaxError。由Donghee Na提供补丁。

  • bpo-44963: 为 anext_awaitable``对象实现 ``send()throw() 方法。由Pablo Galindo提供补丁。

  • bpo-44962: 修复了WeakKeyDictionary、WeakValueDictionary和WeakSet中当两个线程尝试提交最后一个待处理的移除时的竞争条件。这修复了asyncio.create_task并修复了asyncio.run中shutdown_asyncgens未运行导致的数据丢失问题。

  • bpo-24234: 在 bytes 类型上实现 __bytes__() 特殊方法,因此一个bytes对象``b`` 能通过 isinstance(b, typing.SupportsBytes) 检查。

  • bpo-24234: 在 complex 类型上实现 __complex__() 特殊方法,因此一个复数 z 能通过 isinstance(z, typing.SupportsComplex) 检查。

  • bpo-44954: 修复了一个边界情况下的bug,即 float.fromhex('0x.8p-1074') 的结果错误地四舍五入。

  • bpo-44947: 改进了导入语句中尾随逗号的语法错误提示。由Pablo Galindo提供补丁。

  • bpo-44945: 使用PEP 659机制专门化BINARY_ADD指令。新增了五个新指令:

    • BINARY_ADD_ADAPTIVE

    • BINARY_ADD_FLOAT

    • BINARY_ADD_INT

    • BINARY_ADD_UNICODE

    • BINARY_ADD_UNICODE_INPLACE_FAST

  • bpo-44929: 修复了 enum.Flag 在REPL中字符串表示的一些边界情况。补丁由Pablo Galindo提供。

  • bpo-44914: 类版本标签不再被回收利用。

    这意味着版本标签作为类状态的唯一标识符。我们依靠这一点来有效专门化LOAD_ATTR和其他指令。

  • bpo-44698: 恢复了类型为 floatcomplex 的整数值指数的复数幂运算行为。

  • bpo-44895: 添加了一个调试变量 PYTHONDUMPREFSFILE,用于创建一个由 --with-trace-refs 生成的转储文件。由Donghee Na提供补丁。

  • bpo-44900: 为PEP 659快速化添加了五个超级指令:

    • LOAD_FAST LOAD_FAST

    • STORE_FAST LOAD_FAST

    • LOAD_FAST LOAD_CONST

    • LOAD_CONST LOAD_FAST

    • STORE_FAST STORE_FAST

  • bpo-44889: 初步实现了 LOAD_METHOD 的自适应专门化。添加了以下专门化形式:

    • LOAD_METHOD_CACHED

    • LOAD_METHOD_MODULE

    • LOAD_METHOD_CLASS

  • bpo-44890: 在调试构建中总是收集专门化统计信息。

  • bpo-44885: 修正了带有格式规范和重复表达式的f字符串的ast位置。补丁由Pablo Galindo提供。

  • bpo-44878: 从字节码解释器中移除了循环。所有指令都以DISPATCH宏结束,因此循环现在是多余的。

  • bpo-44878: 当使用计算gotos时,移除解释器循环的switch语句。这确保了我们只在解释器中有一个分发表。

  • bpo-44874: 弃用旧的 trashcan 宏(Py_TRASHCAN_SAFE_BEGIN/Py_TRASHCAN_SAFE_END)。它们应被新的宏 Py_TRASHCAN_BEGINPy_TRASHCAN_END 替换。

  • bpo-44872: 在 frameobject.c 中使用新的 trashcan 宏(Py_TRASHCAN_BEGIN/END)代替旧的宏(Py_TRASHCAN_SAFE_BEGIN/END)。

  • bpo-33930: 修复了在清理方法对象时因深度递归导致的段错误。由 Augusto Goulart 和 Pablo Galindo 提供补丁。

  • bpo-25782: 修复了当当前异常的上下文链中存在循环时,PyErr_SetObject 挂起的错误。

  • bpo-44856: 修复了 update_bases()__build_class__ 错误路径中的引用泄漏问题。由 Pablo Galindo 提供补丁。

  • bpo-44826: STORE_ATTR 的自适应特化的初始实现

    增加了 STORE_ATTR 的三种特化形式:

    • STORE_ATTR_SLOT

    • STORE_ATTR_SPLIT_KEYS

    • STORE_ATTR_WITH_HINT

  • bpo-44838: 修复了一个导致解析器为无效的 'if' 表达式引发不正确自定义 SyntaxError 的错误。由 Pablo Galindo 提供补丁。

  • bpo-44821: 提前创建实例字典(__dict__),以改善对象布局的规则性并辅助特化。

  • bpo-44792: 为 if 表达式改进语法错误。由 Miguel Brito 提供补丁

  • bpo-34013: 将无效的旧版语句自定义错误消息(如调用 "print" 时未加括号生成的消息)泛化,以包含更通用的表达式。由 Pablo Galindo 提供补丁

  • bpo-44732: 将 types.Union 重命名为 types.UnionType

  • bpo-44725: 通过 _opcode.get_specialization_stats() 在 python 中公开特化统计信息。

  • bpo-44717: 改进子模块循环导入时的 AttributeError。

  • bpo-44698: 修复复杂对象求幂中的未定义行为。

  • bpo-44653: 在联合类型中的参数替换中支持 typing 类型。

  • bpo-44676: 增加序列化 types.Union 对象的能力。由 Yurii Karabas 提供补丁。

  • bpo-44633: 现在,联合类型参数替换为错误类型时会引发 TypeError,而不是返回 NotImplemented

  • bpo-44661: 更新 property_descr_set 以尽可能使用 vectorcall。由 Donghee Na 提供补丁。

  • bpo-44662: 向 types.Union 添加 __module__。这也修复了 types.Uniontyping.Annotated 的问题。由 Yurii Karabas 提供补丁。

  • bpo-44655: 在未设置的 __slots__ 属性错误中包括类型名称。由 Pablo Galindo 提供补丁。

  • bpo-44655: 当为缺失属性提供建议时,不包括与失败属性同名的缺失属性。由 Pablo Galindo 提供补丁。

  • bpo-44646: 修复联合类型的哈希值:它不再依赖于参数的顺序。

  • bpo-44636: 合并相同类型的联合。例如,int | int 的结果现在是 int。修复与非可哈希对象的联合类型比较。例如,int | str == {} 不再引发 TypeError。

  • bpo-44611: 在 Windows 上,os.urandom(): 使用 BCryptGenRandom API 而不是已被 Microsoft Windows API 弃用的 CryptGenRandom API。由 Donghee Na 提供补丁。

  • bpo-44635: 在联合类型构造函数中将 None 转换为 type(None)

  • bpo-26280: 为 BINARY_SUBSCR 实现自适应专门化。

    添加了 BINARY_SUBSCR 的三种专门化形式:

    • BINARY_SUBSCR_LIST_INT

    • BINARY_SUBSCR_TUPLE_INT

    • BINARY_SUBSCR_DICT

  • bpo-44589: match 语句中具有两个或更多相等字面键的映射模式现在会在编译时引发 SyntaxError

  • bpo-44606: 修复联合类型的 __instancecheck____subclasscheck__

  • bpo-42073: @classmethod 装饰器现在可以包装其他类似 classmethod 的描述符。

  • bpo-41972: 调整了 fastsearch.h 的字符串搜索算法,使其在大多数情况下具有更短的内循环。

  • bpo-44590: 现在,执行Python函数所需的所有数据(局部变量、栈等)都保存在每线程栈中。帧对象是按需延迟分配的。这使得标准基准测试套件的性能提高了约7%。自省和调试不受影响,因为帧对象在需要时总是可用的。由Mark Shannon提供补丁。

  • bpo-44584: Python 3.10中已弃用线程调试(PYTHONTHREADDEBUG 环境变量),并将在Python 3.12中移除。此功能需要Python的调试版本。由Victor Stinner提供补丁。

  • bpo-43895: 1995年添加的一个过时的共享对象文件句柄内部缓存已被从dynload_shlib.c中移除。该缓存尝试(但未保证)不会对同一.so文件执行两次dlopen,以解决1990年代中期posix类操作系统的缺陷。

  • bpo-44490: typing 现在会在 types.Union 对象中搜索类型参数。get_type_hints``也将正确解析带有嵌套 ``types.Union 对象的注解。由Yurii Karabas提供补丁。

  • bpo-43950: 代码对象现在可以在可用时提供指令的列信息。这在回溯打印过程中被利用,以显示导致错误的表达式。

    由Pablo Galindo、Batuhan Taskaya和Ammar Askar作为 PEP 657 的一部分贡献。

  • bpo-44562: 在初始化 types.GenericAlias 时,错误路径中移除 PyObject_GC_Del() 的使用。

  • bpo-41486: 修复了早期3.10 beta版本中,如果有人在输入数据扩展超过4GiB时使用大于4GiB的输出缓冲区与zlib.decompress一起使用时出现的内存消耗和复制性能回归。

  • bpo-43908: 带有 Py_TPFLAGS_IMMUTABLETYPE 标志的堆类型现在可以继承 PEP 590 向量调用协议。以前,该特性仅支持 static types 。由Erlend E. Aasland提供补丁。

  • bpo-44553: 为 types.Union 实现 GC 方法以打破引用循环并防止内存泄漏。

  • bpo-44490: 向 types.Union 添加 __parameters__ 属性和 __getitem__ 操作符。由 Yurii Karabas 提供补丁。

  • bpo-44523: 移除 hash()weakref.proxy 对象的透传,以防止当原始引用对象死亡而代理是可哈希对象的一部分时产生意外后果。由 Pablo Galindo 提供补丁。

  • bpo-44483: 修复在创建具有不良 __module__ 字段的对象的联合时 types.Union 对象的崩溃问题。

  • bpo-44486: 模块即使是通过 types.ModuleType.__new__() 创建的也将始终拥有一个字典。

  • bpo-44472: 修复当异常被抛出时的 ltrace 功能。由 Pablo Galindo 提供补丁。

  • bpo-12022: 对于不支持 上下文管理器 或 异步上下文管理器` 协议的对象,在 withasync with 语句中现在会抛出 TypeError 而不是 AttributeError

  • bpo-44297: 确保在进入理解作用域时设置行号。这确保了包括生成器表达式在内的回溯显示正确的行号。

  • bpo-44456: 改进当混合位置和关键字模式时的语法错误。由 Pablo Galindo 提供补丁。

  • bpo-44409: 修复在初始化分词器时抛出的分词器错误的位置信息。补丁由 Pablo Galindo 提供。

  • bpo-44396: 修复分词器在抛出未闭合字符串的语法错误时可能崩溃的问题。由 Pablo Galindo 提供补丁。

  • bpo-44376: 对于小指数的精确整数指数运算(如 i**2pow(i, 2)),由于减少了此类情况下的开销,运算速度大大提高。

  • bpo-44313: 直接导入的对象和模块(通过 import 和 from import 语句)不会为它们命名空间上直接访问的对象生成 LOAD_METHOD/CALL_METHOD。现在它们使用常规的 LOAD_ATTR/CALL_FUNCTION

  • bpo-44338: 为 LOAD_GLOBAL 实现自适应专业化

    增加了两种 LOAD_GLOBAL 的专业化形式:

    • LOAD_GLOBAL_MODULE

    • LOAD_GLOBAL_BUILTIN

  • bpo-44368: 改进无效 "as" 目标的语法错误。由 Pablo Galindo 提供补丁

  • bpo-44349: 修复在显示编码文件中的文本时语法错误的一个边缘情况。由 Pablo Galindo 提供补丁。

  • bpo-44337: LOAD_ATTR 的自适应专业化的初步实现

    增加了四种 LOAD_ATTR 的专业化形式:

    • LOAD_ATTR_SLOT

    • LOAD_ATTR_SPLIT_KEYS

    • LOAD_ATTR_WITH_HINT

    • LOAD_ATTR_MODULE

  • bpo-44335: 修复识别语法错误中不正确字符时的回归问题。由 Pablo Galindo 提供补丁

  • bpo-43693: 单元格变量的偏移量计算在编译器中完成,而不是在运行时。这减少了处理单元格和自由变量的开销,特别是在变量既是参数又是单元格变量的情况下。

  • bpo-44317: 使用改进的位置信息改进分词器错误。由 Pablo Galindo 提供补丁。

  • bpo-44304: 修复 sqlite3 模块中垃圾回收器清除 sqlite.Statement 对象时发生的崩溃。由 Pablo Galindo 提供补丁

  • bpo-44305: 为没有 exceptfinally 块的 try 块改进错误消息。由 Pablo Galindo 提供补丁。

  • bpo-43413: 一些内置类(如 tuple, list, frozenset)的子类的构造函数不再接受任意关键字参数。[在 3.11a4 中恢复] set 的子类现在可以定义一个带有额外关键字参数的 __new__() 方法,而无需同时覆盖 __init__()

  • bpo-43667: 在 Oracle Solaris 上的非 UTF 语言环境中改进 Unicode 支持。此问题不影响其他 Solaris 系统。

  • bpo-43693: 新增了一个操作码 MAKE_CELL,该操作码有效地将函数入口处完成的部分工作转移到编译器和评估循环中。除了创建所需的单元对象外,新操作码还在函数入口处将相关参数(及其他局部变量)转换为单元变量。

  • bpo-44232: 修复了当元类引发异常时 type() 的回归问题。C 函数 type_new() 必须在元类构造函数引发异常且获胜类不是元类时正确报告异常。由 Victor Stinner 提供补丁。

  • bpo-44201: 避免在 REPL 中检查特殊语法错误时的副作用,这些副作用导致在检测到语法错误后要求额外的标记。由 Pablo Galindo 提供补丁。

  • bpo-43693: PyCodeObject 增加了 co_fastlocalnamesco_fastlocalkinds 作为快速局部变量信息的权威来源。序列化的代码对象也相应发生了变化。

  • bpo-44184: 修复了当解构函数移除堆类型最后一个强引用时 Python 退出的崩溃问题。由 Victor Stinner 提供补丁。

  • bpo-44187: 在解释器中实现了快速化。目前这没有任何优势,但为未来的优化奠定了基础。完整解释请参见 PEP 659。

  • bpo-44180: 解析器不再报告在首次到达位置更远处发生的通用语法错误。由 Pablo Galindo 提供补丁。

  • bpo-44168: 修复了解析器中涉及带有无效表达式的关键字参数的错误消息。由 Pablo Galindo 提供补丁。

  • bpo-44156: compile.c 中的字符串缓存现在与子解释器兼容。

  • bpo-44143: 修复了当存在现有异常时引发标记化错误时出现的解析器崩溃问题。由 Pablo Galindo 提供补丁。

  • bpo-44032: 将 'fast' 局部变量和其他变量从帧对象移动到每线程的数据栈。

  • bpo-44114: 修复 C 代码中错误的 dictkeys_reversed 和 dictitems_reversed 函数签名,这破坏了 webassembly 构建。

  • bpo-44110: 改进 str.__getitem__() 的错误信息

  • bpo-26110: 添加 CALL_METHOD_KW 操作码以加速带有关键字参数的方法调用。想法源自 PyPy。一个副作用是在评估循环中执行 CALL_METHOD 现在是无分支的。

  • bpo-28307: 编译器现在通过将简单的 C 风格格式化转换为 f-string 表达式来优化仅包含格式代码 %s、%r 和 %a 的文字格式。

  • bpo-43149: 更正关于多种异常类型的语法错误消息,不再提及“异常组”。由 Pablo Galindo 提供补丁

  • bpo-43822: 当引发异常时,解析器将优先考虑分词器错误而非自定义语法错误。由 Pablo Galindo 提供补丁。

  • bpo-40222: “零成本”异常处理。

    • 使用查找表来确定如何处理异常。

    • 移除 SETUP_FINALLY 和 POP_TOP 块指令,消除了 try 语句的运行时开销。

    • 将帧对象的大小减少了约 60%。

    由 Mark Shannon 提供补丁

  • bpo-43918: 在新的 anext 内置函数的文档字符串中记录签名和 default 参数。

  • bpo-43833: 如果数字字面量紧跟着关键字之一:and、else、for、if、in、is、or,则发出弃用警告。如果紧跟着其他关键字或标识符,则引发带有更丰富信息的语法错误。

  • bpo-43879: 向 PyThreadState 添加 native_thread_id。由 Gabriele N. Tornetta 提供补丁。

  • bpo-43693: 在编译器中计算相对于局部变量的单元格偏移量。允许解释器将局部变量和单元格视为单个数组,这稍微提高了效率。同时使 LOAD_CLOSURE 操作码成为 LOAD_FAST 的别名。保留 LOAD_CLOSURE 有助于使字节码更具可读性。

  • bpo-17792: 为未绑定的局部变量或自由变量的访问提供更准确的错误消息。

  • bpo-28146: 修复 str.format() 中一个令人困惑的错误信息。

  • bpo-11105: 当通过 compile() 编译带有递归引用的 ast.AST 对象时,解释器不再崩溃,而是引发 RecursionError

  • bpo-39091: 修复向生成器的 throw() 方法传递非异常对象时导致的崩溃。由 Noah Oxer 提供补丁。

  • bpo-33346: 现在允许在异步函数的推导式中使用异步推导式。外部推导式隐式变为异步。

  • bpo-45371: 修复 distutils 中的 clang rpath 问题。UnixCCompiler 现在使用正确的 clang 选项向共享库添加运行时库目录 (rpath)。

  • bpo-45329: 修复当使用已安装的 expat 库 <= 2.2.0 构建 pyexpat.xmlparser 时访问已释放内存的问题。

  • bpo-41710: 在 Unix 上,如果 C 库(glibc 2.30 及更新版本)中可用 sem_clockwait() 函数,threading.Lock.acquire() 方法现在使用单调时钟 (time.CLOCK_MONOTONIC) 来处理超时,而不是使用系统时钟 (time.CLOCK_REALTIME),以避免受系统时钟变化影响。由 Victor Stinner 提供补丁。

  • bpo-1596321: 修复当 threading 模块首次从非主线程导入时 threading._shutdown() 函数的问题:在 Python 退出时不再记录错误。

  • bpo-45274: 修复 threading 模块中 Thread.join() 方法的竞态条件。如果函数被信号中断并且信号处理程序引发异常,确保线程保持在一个一致的状态以防止死锁。由 Victor Stinner 提供补丁。

  • bpo-21302: 在 Unix 操作系统中,如果 clock_nanosleep() 不可用但 nanosleep() 可用,time.sleep() 现在使用 nanosleep() 函数。nanosleep() 允许以纳秒精度睡眠。

  • bpo-21302: 在Windows上,time.sleep() 现在使用了一个可等待的计时器,其分辨率为100纳秒(10-7 秒)。之前,它的分辨率为1毫秒(10-3 秒)。由Benjamin Szőke和Victor Stinner提供补丁。

  • bpo-45238: 修复 unittest.IsolatedAsyncioTestCase.debug():现在可以运行异步方法和回调。

  • bpo-36674: unittest.TestCase.debug() 现在如果类或测试方法被跳过装饰器装饰,会引发 unittest.SkipTest

  • bpo-45235: 修复了一个问题,即当使用带有默认值的子解析器时,argparse不会保留提供的命名空间中的值。

  • bpo-45183: 让 zipimport.zipimporter.find_spec() 在底层的zip文件已被删除且内部缓存已通过 invalidate_cache() 重置时不抛出异常。

  • bpo-45234: 修复了 copyfile(), copy(), copy2() 中的一个回归问题,当源是目录时不应抛出 FileNotFoundError 而应抛出 IsADirectoryError

  • bpo-45228: 修复解析J1939网络地址时的栈缓冲区溢出问题。

  • bpo-45225: 在capwords中使用map函数代替genexpr。

  • bpo-42135: 修复拼写错误:importlib.find_loader 实际上计划在Python 3.12中移除,而不是3.10,与PR 25169中的其他内容一样。

    由 Hugo van Kemenade 提供补丁。

  • bpo-20524: 改进了 .format() 操作对于 str, float, int, 和 complex 的错误消息。新的格式现在显示有问题的模式和对象类型。

  • bpo-45168: 更改 dis.dis() 输出,以省略由于没有提供 co_consts, co_names 等而无法解析的操作参数值。之前操作参数本身会在值字段中重复,这不仅没有用而且可能会造成混淆。

  • bpo-21302: 在Unix操作系统中,time.sleep() 现在使用 clock_nanosleep() 函数(如果可用),该函数允许以纳秒精度指定的间隔睡眠。

  • bpo-45173: 从 configparser 模块中移除:SafeConfigParser 类、ParsingError 类的 filename 属性、ConfigParser 类的 readfp() 方法,这些自 Python 3.2 起已被弃用。

    由 Hugo van Kemenade 提供补丁。

  • bpo-44987: 纯 ASCII 字符串现在通过 unicodedata.normalize() 在常数时间内完成规范化。由 Donghee Na 提供补丁。

  • bpo-35474: 使用 strict=False 调用 mimetypes.guess_all_extensions() 不再影响后续使用 strict=True 调用的结果。同时,修改返回的列表不再影响全局状态。

  • bpo-45166: typing.get_type_hints() 现在可以与 Final 包裹在 ForwardRef 中的情况一起工作。

  • bpo-45162: 移除许多旧的已弃用的 unittest 功能:

    • TestCase 方法的 "fail*" 和 "assert*" 别名。

    • 从一开始就损坏的 TestCase 方法 assertDictContainsSubset()

    • 被忽略的 <unittest.TestLoader.loadTestsFromModule> TestLoader.loadTestsFromModule() 参数 use_load_tests

    • TextTestResult 的旧别名 _TextTestResult

  • bpo-38371: 移除已弃用的 _tkinter.TkappTypesplit() 方法。由 Erlend E. Aasland 提供补丁。

  • bpo-20499: 提高 statistics.pvariance() 的速度和准确性。

  • bpo-45132: 移除 xml.dom.pulldom.DOMEventStreamwsgiref.util.FileWrapperfileinput.FileInput__getitem__() 方法,这些自 Python 3.9 起已被弃用。

    由 Hugo van Kemenade 提供补丁。

  • bpo-45129: 由于重大的安全隐患,asyncio.loop.create_datagram_endpoint()reuse_address 参数在 Python 3.9 中被禁用,现在已被完全移除。这是因为 UDP 中 socket 选项 SO_REUSEADDR 的行为。

    由 Hugo van Kemenade 提供补丁。

  • bpo-45124: 在 Python 3.9 中弃用的 bdist_msi 命令现已被移除。

    请改用 bdist_wheel (wheel 包) 。

    由 Hugo van Kemenade 提供补丁。

  • bpo-30856: unittest.TestResult 的方法 addFailure(), addError(), addSkip()addSubTest() 现在会在测试中引发异常或完成子测试后立即调用。之前它们仅在完成测试清理后被调用。

  • bpo-45034: 修改了 struct.pack'H''h' 模式下对于过大/过小数字的错误格式化方式。现在它会显示实际的数字限制,而之前显示的是算术表达式。

  • bpo-25894: unittest 现在总是单独报告跳过的和失败的子测试:默认模式下为单独的字符,详细模式下为单独的行。同时,现在在测试方法、类和模块清理的错误中也会输出测试描述。

  • bpo-45081: 修复了继承自 typing.Protocol 子类的数据类具有错误 __init__ 的问题。由 Yurii Karabas 提供补丁。

  • bpo-45085: 在 Python 3.9 中已弃用的 binhex 模块现已被移除。以下在 Python 3.9 中已弃用的 binascii 函数现在也被移除了:

    • a2b_hqx(), b2a_hqx();

    • rlecode_hqx(), rledecode_hqx().

    binascii.crc_hqx() 函数仍然可用。

    由Victor Stinner提供补丁。

  • bpo-40360: lib2to3 包现在已被弃用,可能无法解析 Python 3.10 或更新版本。参见 PEP 617 (CPython 的新 PEG 解析器) 。由 Victor Stinner 提供补丁。

  • bpo-45075: 将 traceback.StackSummary.format_frame() 重命名为 traceback.StackSummary.format_frame_summary()。此方法是为 3.11 添加的,因此尚未发布。

    更新了代码和文档以更好地区分 frame 和 FrameSummary。

  • bpo-31299: 添加了通过从 format_frame() 覆盖返回 None 来完全从回溯中删除帧的选项。

  • bpo-41620: run() 现在总是返回一个 TestResult 实例。之前如果测试类或方法使用了跳过装饰器,它会返回 None

  • bpo-45021: 修复了在使用 concurrent.futures 模块时,fork 的子进程在关闭时可能出现的死锁问题。

  • bpo-43913: 修复了在 unittest 中清理类和模块时的错误:

    • 使用 addModuleCleanup() 注册的函数不会被调用,除非用户在测试模块中定义了 tearDownModule()

    • 如果 tearDownClass 设置为 None,使用 addClassCleanup() 注册的函数不会被调用。

    • TestResult 中的缓冲功能对使用 addClassCleanup()addModuleCleanup() 注册的函数无效。

    • 在缓冲和调试模式下,使用 addClassCleanup()addModuleCleanup() 注册的函数中的错误未被正确处理。

    • setUpModule() 和使用 addModuleCleanup() 注册的函数中的错误以错误的顺序报告。

    • 以及几个较小的错误。

  • bpo-45030: 修复了在序列化和复制 range 迭代器时的整数溢出问题。

  • bpo-45001: 使电子邮件日期解析对格式错误的输入更加健壮,特别是针对仅包含空白的 Date: 头。由 Wouter Bolsterlee 提供补丁。

  • bpo-45010: 移除了 unittest.mock 中对特殊方法 __div__ 的支持。它在 Python 3 中未使用。

  • bpo-39218: 通过使用 x*x 而非 x**2 来提高方差计算的准确性。

  • bpo-43613: 通过一次性在内存中压缩和解压缩,而不是流式处理,提高了 gzip.compress()gzip.decompress() 的速度。

  • bpo-37596: 确保 setfrozenset 对象总是可以重复 marshalled

  • bpo-44019: 新增了一个函数 operator.call,使得 operator.call(obj, *args, **kwargs) == obj(*args, **kwargs)

  • bpo-42255: 类 webbrowser.MacOSX 已被弃用,并将在 Python 3.13 中移除。它未经测试、未记录,且未被 webbrowser 自身使用。由 Donghee Na 提供补丁。

  • bpo-44955: 对于 run() 中隐式创建的 TestResult 对象,方法 stopTestRun() 现在总是与方法 startTestRun() 成对调用。之前,对于使用跳过装饰器装饰的测试方法和类,它不会被调用。

  • bpo-39039: 当文件提取过程中发生 zlib 错误时,tarfile.open 会引发 ReadError

  • bpo-44935: Solaris 上的 subprocess 现在也使用 os.posix_spawn() 以提高性能。

  • bpo-44911: IsolatedAsyncioTestCase 在取消泄漏任务时将不再抛出异常。由 Bar Harel 提供补丁。

  • bpo-41322: 为返回值!=None 的测试和异步测试添加了 DeprecationWarning (因为这可能表明测试编写不当,例如将测试编写为生成器函数) 。

  • bpo-44524: 当从 typing 特殊形式别名子类化时,使异常消息更有用。由 Yurii Karabas 提供补丁。

  • bpo-38956: 当与 argparse.ArgumentDefaultsHelpFormatter 一起使用时,argparse.BooleanOptionalAction 的默认值不再打印两次。

  • bpo-44860: 修复 sysconfig 中的 posix_user 方案,使其不依赖于 sys.platlibdir

  • bpo-44859: 改进 sqlite3 中的错误处理,并引发更准确的异常。

    • Connection.__call__()Cursor.execute() 中,当内存不足以将语句编码为 UTF-8 时,现在会引发 MemoryError 而不是 sqlite3.Warning

    • Connection.__call__()Cursor.execute() 中,当语句包含代理字符时,现在会引发 UnicodEncodeError 而不是 sqlite3.Warning

    • Cursor.executescript() 中,对于非字符串脚本参数,现在会引发 TypeError 而不是 ValueError

    • Cursor.executescript() 中,对于包含空字符的脚本,现在会引发 ValueError 而不是截断它。

    • 正确处理获取进度处理器结果的布尔值时引发的异常。

    • 添加了许多测试,覆盖了不同的边缘情况。

  • bpo-44581: 将捆绑的 pip 升级到 21.2.3 和 setuptools 到 57.4.0。

  • bpo-44849: 修复 FreeBSD 14 上 os.set_inheritable() 函数对于以 O_PATH 标志打开的文件描述符的问题:忽略 ioctl() 上的 EBADF 错误,回退到 fcntl() 实现。由 Victor Stinner 提供补丁。

  • bpo-44605: @functools.total_ordering() 装饰器现在可以与元类一起工作。

  • bpo-44524: 修复了一个问题,其中订阅的特殊形式的 __name____qualname__ 属性可能是 None

  • bpo-44839: 在用户定义函数中引发的 MemoryError 现在会在 sqlite3 中产生一个 MemoryErrorOverflowError 现在会被转换为 DataError。以前在这些情况下会产生 OperationalError

  • bpo-44822: sqlite3 用户定义的函数和聚合器返回带有嵌入 NUL 字符的 strings 不再被截断。由 Erlend E. Aasland 提供补丁。

  • bpo-44801: 确保 Callable 中的 ParamSpec 变量只能被参数表达式(类型列表、省略号、ParamSpec 或 Concatenate)替换。

  • bpo-44806: typing.Protocol 的非协议子类现在会忽略从协议基类继承的 __init__ 方法。

  • bpo-27275: collections.OrderedDict.popitem()collections.OrderedDict.pop() 不再调用 OrderedDict 子类的 __getitem____delitem__ 方法。

  • bpo-44793: 修复在订阅带有 ParamSpec 参数的泛型类型时检查参数数量的问题。

  • bpo-44784: 在 importlib.metadata 测试中,覆盖在预期的 DeprecationWarnings 下的警告行为(importlib_metadata 4.6.3)。

  • bpo-44667: tokenize.tokenize() 不会在源代码不以换行符结束但最后一行是注释时错误地生成 NEWLINE 令牌,因为该函数已经生成了一个 NL 令牌。由 Pablo Galindo 提供补丁。

  • bpo-44771: 添加了 importlib.simple 模块,实现了从低级资源读取器接口到 TraversableResources 接口的适配器。旧版 API(pathcontents 等)现在完全由 .files() API 支持,并为不具备该功能的资源加载器提供了兼容性垫片。与 importlib_resources 5.2 功能对等。

  • bpo-44752: rcompleter 不在 property 对象上调用 getattr() 以避免评估相应方法的副作用。

  • bpo-44747: 重构 typing 模块中 sys._getframe 的使用。补丁由 Yurii Karabas 提供。

  • bpo-42378: 修复了当 logging.FileHandleratexit 中使用且 filemode 设置为 'w' 时日志文件被覆盖的问题。注意,如果日志流由于日志关闭已经关闭,这将导致 atexit 中的消息不被记录。

  • bpo-44720: weakref.proxy 对象引用非迭代器现在会引发 TypeError,而不是解引用空的 tp_iternext 槽并崩溃。

  • bpo-44704: collections.abc.Set._hash() 的实现现在与 frozenset.__hash__() 的实现匹配。

  • bpo-44666: 修复了当 sys.stdout 被重定向时 compileall.compile_file() 的问题。由 Stefan Hölzl 提供补丁。

  • bpo-44688: sqlite3.Connection.create_collation() 现在接受非 ASCII 排序名称。补丁由 Erlend E. Aasland 提供。

  • bpo-44690: 在 base64.b64decode 中采用 binacii.a2b_base64 的严格模式。

  • bpo-42854: 修复了 _ssl 模块中的一个bug,该bug在使用 _ssl._SSLSocket.write()_ssl._SSLSocket.read() 时,当 len 参数值较大时会抛出 OverflowError。由Pablo Galindo提供补丁。

  • bpo-44686: 使用 pkgutil.resolve_name 替换 unittest.mock._importer

  • bpo-44353: 通过在C中实现 NewType.__call__ 来提高其速度。由Yurii Karabas提供补丁。

  • bpo-44682: 修改 pdbcommands 指令,禁止为无效断点设置命令,并显示适当的错误。

  • bpo-44353: 将 typing.NewType 从函数重构为可调用类。由Yurii Karabas提供补丁。

  • bpo-44678: 在 binascii.a2b_base64 的严格模式下,为不连续的填充添加了单独的错误消息。

  • bpo-44524: 为 typing 模块类添加缺失的 __name____qualname__ 属性。补丁由Yurii Karabas提供。

  • bpo-40897: 在 inspect.signature() 中优先使用当前类的构造函数。由Weipeng Hong提供补丁。

  • bpo-44638: 添加对zipp项目的引用以及如何使用它的提示。

  • bpo-44648: 修复了 inspect.getsource() 在检查交互式会话中的类时抛出的错误。应该是带有适当错误消息的 OSError,而不是 TypeError

  • bpo-44608: 修复了 _tkinter._flatten() 如果被调用时传入的是序列或集合但不是列表或元组时的内存泄漏问题。

  • bpo-44594: 修复了 ExitStackAsyncExitStack 异常链的一个边缘情况。当异常在传播过程中 __context__ 被显式设置为 None 时,它们现在将匹配 with 块的行为。

  • bpo-42799: 在 fnmatch 中,编译的正则表达式模式的缓存大小(functools.lru_cache())从 256 增加到 32768,影响的函数包括:fnmatch.fnmatch()fnmatch.fnmatchcase()fnmatch.filter()

  • bpo-41928: 更新 shutil.copyfile(),当以 os.path.sep 结尾的路径不存在时,抛出 FileNotFoundError 而不是混淆的 IsADirectoryErrorshutil.copy()shutil.copy2() 也会受到影响。

  • bpo-44569: 在 traceback 中添加了 StackSummary.format_frame() 函数。这使得用户能够自定义回溯中单行的格式化方式,而无需重新实现处理递归回溯的逻辑。

  • bpo-44566: 处理由 @contextlib.contextmanager 生成器引发的 StopIteration 子类。

  • bpo-44558: 使 indexOf() 在 C 和 Python 版本中的实现保持一致。由 Donghee Na 提供补丁。

  • bpo-41249: 修正 TypedDict 以使其能与 typing.get_type_hints() 和跨模块的注解延迟求值一起工作。

  • bpo-44554: 重构 pdb.main() 中的参数处理,以简化输入加载错误的检测,并澄清模块或脚本调用时的行为。

  • bpo-34798: 拆分关于 pprint.PrettyPrinter 构造参数的段落,使其更易于阅读。

  • bpo-44539: 添加了对识别没有 JFIF 或 Exif 标记的 JPEG 文件的支持。

  • bpo-44461: 修复 pdb 处理由于包没有 __main__ 模块而导致的导入错误的 bug。

  • bpo-43625: 修复 csv.Sniffer.has_header() 检测 CSV 文件头时的 bug,并改进相关文档。

  • bpo-44516: 将捆绑的 pip 更新至 21.1.3 版本。

  • bpo-42892: 修复 email.message.EmailMessage 在解析格式错误的多部分邮件时抛出的异常。

  • bpo-44468: typing.get_type_hints() 现在可以在类和基类中查找带有意外 __module__ 的注解。之前,它会跳过这些MRO元素。

  • bpo-44491: 允许通过向 set_authorizer() 传递 None 来清除 sqlite3 授权器回调。由Erlend E. Aasland提供补丁。

  • bpo-43977: 对于在父类被注册为 collections.abc.Mappingcollections.abc.Sequence 之前创建的子类,设置正确的 Py_TPFLAGS_MAPPINGPy_TPFLAGS_SEQUENCE 标志。

  • bpo-44482: 修复在替代Python实现中 glob 极不可能发生的资源泄漏。

  • bpo-44466: faulthandler 模块现在能检测到在垃圾回收器收集期间是否发生致命错误。由Victor Stinner提供补丁。

  • bpo-44471: 在 contextlib.ExitStack.enter_context()contextlib.AsyncExitStack.enter_async_context() 中,对于不支持相应 context managerasynchronous context manager 协议的对象,现在会引发 TypeError 而不是 AttributeError

  • bpo-44404: tkinterafter() 方法现在支持没有 __name__ 属性的可调用对象。

  • bpo-41546: 使 pprint (像内置的 print 一样) 当 stdoutNone 时不尝试写入。

  • bpo-44458: BUFFER_BLOCK_SIZE 现在被声明为静态的,以避免在bz2、lmza或zlib被静态链接时发生链接冲突。

  • bpo-44464: 在弃用的importlib.metadata接口中移除对flake8的异常。与importlib_metadata 4.6同步。

  • bpo-44446: 在 traceback.FrameSummary 中考虑 lineno 可能为 None 的情况。

  • bpo-44439: 修复 bz2.BZ2File.write() / lzma.LZMAFile.write() 方法,当输入数据是支持缓冲协议的对象时,文件长度可能错误的问题。

  • bpo-44434: _thread.start_new_thread() 不再在线程退出时显式调用 PyThread_exit_thread(),该调用是多余的。在 Linux 上使用 glibc 时,如果 dlopen() 无法打开 libgcc_s.so 文件(例如:EMFILE 错误),pthread_exit() 会中止整个进程。由 Victor Stinner 提供补丁。

  • bpo-42972: _thread.RLock 类型现在完全实现了 GC 协议:添加了一个遍历函数和 Py_TPFLAGS_HAVE_GC 标志。由 Victor Stinner 提供补丁。

  • bpo-44422: threading.enumerate() 函数现在使用可重入锁以防止在可重入调用上挂起。由 Victor Stinner 提供补丁。

  • bpo-38291: 导入 typing.io 或 typing.re 现在会打印一个 DeprecationWarning

  • bpo-37880: 当未提供 const 关键字参数时,argparse 的 store_const 和 append_const 动作各自接收一个默认值 None。之前这会引发一个 TypeError

  • bpo-44389: 修复 ssl.OP_NO_TLSv1_3 的弃用问题

  • bpo-27827: pathlib.PureWindowsPath.is_reserved() now identifies a greater range of reserved filenames, including those with trailing spaces or colons.

  • bpo-44395: 修复 as_string() 以正确传递 unixfrom。补丁由 Donghee Na 提供。

  • bpo-34266: 处理解析 pdb 的 run/restart 命令参数时的异常。

  • bpo-44362: 改进 ssl 模块的弃用消息、错误报告和弃用文档。

  • bpo-44342: [Enum] 将 pickle 从按值改为按名称。

  • bpo-44356: [Enum] 如果所有数据类型混合都是相同的,则允许多个数据类型混合。

  • bpo-44351: 恢复 distutils.sysconfig 中的 parse_makefile(),因为它的行为与 sysconfig 中的类似实现不同。

  • bpo-35800: smtpd.MailmanProxy 现在已被移除,因为没有外部模块 mailman 它就无法使用。由 Donghee Na 提供补丁。

  • bpo-44357: 添加了一个返回给定数字的立方根的函数 math.cbrt()

  • bpo-44339: 将 math.pow(±0.0, -math.inf) 的返回值从抛出 ValueError 改为返回 inf。这使得 math.pow 的特殊情况处理符合 IEEE 754 标准。

  • bpo-44242: 从 Enum 创建中移除缺失标志检查,并将其移至 verify 装饰器中。

  • bpo-44246: 在 importlib.metadata 中,恢复 Distribution.entry_points (EntryPoints) 结果的兼容性,以符合旧实现的期望,并对以下情况发出弃用警告:A. EntryPoints 对象再次可变,允许 sort() 和其他基于列表的变异操作。通过转换为可变序列(例如 list(dist.entry_points).sort())避免弃用警告。B. EntryPoints 结果再次允许通过索引访问。为避免弃用警告,首先将结果转换为 Sequence(例如 tuple(dist.entry_points)[0])。

  • bpo-44246: 在 importlib.metadata.entry_points 中,去重分布不再需要为 PathDistribution 对象加载完整的元数据,将入口点加载性能提高了约10倍。

  • bpo-43858: 添加了一个返回日志级别字典副本的函数:logging.getLevelNamesMapping()

  • bpo-44260: random.Random 构造函数不再无谓地读取系统熵。

  • bpo-44254: 在 Mac 上,为 turtledemo 按钮文本提供一种在亮或暗背景下都能工作的颜色。程序员无法控制后者。

  • bpo-44258: 支持从字符串初始化 Fraction 的 PEP 515。

  • bpo-44235: 移除 gettext 中已弃用的函数。由 Donghee Na 提供补丁。

  • bpo-38693: 在 importlib.resources 中优先使用 f-strings 而非 .format

  • bpo-33693: Importlib.metadata 现在优先使用 f-strings 而非 .format。

  • bpo-44241: 从 importlib_metadata 4.1 中引入小调整:SimplePath 协议,支持 Metadata 2.2。

  • bpo-43216: 移除 @asyncio.coroutine decorator,该装饰器使得基于生成器的旧式协程能够与async/await代码兼容;移除 asyncio.coroutines.CoroWrapper,该包装器用于在调试模式下包装旧式协程对象。此装饰器自Python 3.8起已被弃用,原计划在Python 3.10中移除。由Illia Volochii提供补丁。

  • bpo-44210: 将importlib.metadata._meta.PackageMetadata公开。

  • bpo-43643: 根据规范,将readers.MultiplexedPath.name声明为属性。

  • bpo-27334: sqlite3 上下文管理器现在在提交失败时执行回滚(从而释放数据库锁)。补丁由Luca Citi和Erlend E. Aasland提供。

  • bpo-4928: 记录了POSIX上的现有行为:当创建进程被SIGKILL杀死时,NamedTemporaryFiles不会被删除。

  • bpo-44154: 优化 fractions.Fraction 对大型组件的pickling操作。

  • bpo-33433: 对于IPv4映射的IPv6地址(RFC 4291 第2.5.5.2节),ipaddress.IPv6Address.is_private 检查被推迟到映射的IPv4地址。这解决了一个bug,其中公共映射的IPv4地址被IPv6检查视为私有地址。

  • bpo-44150: 向statistics.fmean()添加了可选的 weights 参数。

  • bpo-44142: ast.unparse() 现在将在元组用作赋值目标时(例如在for循环中)删除冗余的括号。

  • bpo-44145: hmac 计算在调用OpenSSL HMAC_Update C API时(3.9中的新功能)没有释放GIL。这无意中阻止了并行计算,而其他 hashlib 算法支持并行计算。

  • bpo-44095: zipfile.Path 现在支持 zipfile.Path.stemzipfile.Path.suffixeszipfile.Path.suffix 属性。

  • bpo-44077: 现在可以通过 socket.IP_RECVTOS 接收服务类型(ToS),也称为区分服务(DS),或区分服务代码点(DSCP)和显式拥塞通知(ECN)IP头字段。

  • bpo-37788: 修复了一个当 Thread 对象从未被 join 时的引用泄漏问题。

  • bpo-38908: 只有数据变量声明的 typing.Protocol 子类现在在被 isinstance 检查时会抛出 TypeError,除非它们被 runtime_checkable() 装饰。之前,这些检查会静默通过。由 Yurii Karabas 提供补丁。

  • bpo-44098: typing.ParamSpec 将不再出现在大多数 typing 泛型的 __parameters__ 中,除非是在 PEP 612 指定的有效使用位置。这防止了像 typing.List[P][int] 这样的错误用法。这一变化意味着在 3.10 beta 1 及更早版本中可能静默通过的错误用法现在会报错。

  • bpo-44089: 在 3.10 中允许继承 ``csv.Error``(在 3.9 及更早版本中是被允许的,但在 3.10 的早期版本中被禁止)。

  • bpo-44081: ast.unparse() 现在如果 lambda 没有参数,不会使用多余的空格来分隔 lambda:

  • bpo-44061: 修复了之前版本中当使用 pathlib.Path 对象的列表调用 pkgutil.iter_modules() 时的回归问题。

  • bpo-44059: 在 webbrowser 模块中注册 SerenityOS 浏览器。

  • bpo-36515: 当为 ARM 平台编译时,hashlib 模块不再进行非对齐的内存访问。

  • bpo-40465: 移除了在 Python 3.9 中废弃的 random 模块特性。

  • bpo-44018: random.seed() 不再改变 bytearray 输入。

  • bpo-38352: 将 IO, BinaryIO, TextIO, Match, 和 Pattern 添加到 typing.__all__。由 Jelle Zijlstra 提供补丁。

  • bpo-44002: urllib.parse 现在使用 functool.lru_cache() 作为其内部 URL 分割和引用缓存,而不是像 90 年代那样自己实现。

    未公开的内部模块 urllib.parseQuoted 类 API 现已弃用,将在 3.14 版本中移除。

  • bpo-43972: 当 http.server.SimpleHTTPRequestHandler 为不以 / 结尾的目录路径发送 301 (Moved Permanently) 时,添加 Content-Length: 0 头部。这改善了某些客户端的行为。

  • bpo-28528: 修复 pdb 中的一个错误,其中 checkline() 如果在 reset() 之后调用会引发 AttributeError

  • bpo-43853: 改进了 sqlite3 用户定义函数和聚合函数的字符串处理:

    • 现在可以将含有嵌入空字符的字符串传递给 UDFs

    • 转换失败现在会正确引发 MemoryError

    由 Erlend E. Aasland 提交的补丁。

  • bpo-43666: AIX: Lib/_aix_support.get_platform() 在 AIX WPAR 中可能会失败。文件集 bos.rte 似乎在 LPAR 和 WPAR 中都有 builddate,因此查询此文件集而不是 bos.mp64。为了防止类似情况(ODM 中没有 builddate),提供了一个足够完成构建的值(9988)。由 M Felt 提供补丁。

  • bpo-43650: 修复 shutil.unpack_archive() 中的 MemoryError,该错误在 shutil._unpack_zipfile() 处理大文件时发生。由 Igor Bolshakov 提供补丁。

  • bpo-43612: zlib.compress() 现在接受一个 wbits 参数,允许用户在不带 zlib 头部和尾部的原始 deflate 块中一次性压缩数据。以前这需要实例化一个 zlib.compressobj。当 wbits=31 时,它还提供了一种比 gzip.compress 更快的替代方案。

  • bpo-43392: importlib._bootstrap._find_and_load() 现在实现了一个两步检查,以避免在模块已经导入并准备就绪时锁定。这提高了重复调用 importlib.import_module()importlib.__import__() 的性能。

  • bpo-43318: 修复了一个错误,其中 pdb 并不总是回显清除的断点。

  • bpo-43234: 在Python 3.8中弃用后,禁止将非 concurrent.futures.ThreadPoolExecutor 执行器传递给 loop.set_default_executor()。由Illia Volochii提供补丁。

  • bpo-43232: 禁止对 asyncio.trsock.TransportSocket 进行之前已弃用的可能破坏性操作。由Illia Volochii提供补丁。

  • bpo-30077: 添加了对苹果aifc/sowt伪压缩的支持

  • bpo-42971: 为定义了此常量(如macOS)的平台添加了 errno.EQFULL 的定义。

  • bpo-43086: 为 binascii.a2b_base64 添加了一个新的可选参数 strict_mode。当 scrict_mode 设置为 True 时,a2b_base64 函数将只接受有效的base64内容。关于什么是"有效的base64内容"的更多细节,可以在函数的文档中找到。

  • bpo-43024: 改进了 traceback.print_exception()traceback.format_exception()traceback.format_exception_only() 的帮助签名。

  • bpo-33809: 添加了 traceback.TracebackException.print() 方法,用于打印格式化的异常信息。

  • bpo-42862: sqlite3 现在利用 functools.lru_cache() 来实现连接语句缓存。作为一个小优化,默认的语句缓存大小从100增加到了128。由Erlend E. Aasland提供补丁。

  • bpo-41818: Soumendra Ganguly:添加了termios.tcgetwinsize()和termios.tcsetwinsize()。

  • bpo-40497: 当用户代码传递了无效的关键字参数 check 时,subprocess.check_output() 现在会引发 ValueError。之前这样的使用会在后期失败,并引发 TypeError。由Rémi Lapeyre提供补丁。

  • bpo-37449: ensurepip 现在使用 importlib.resources.files() 可遍历API

  • bpo-40956: 在 sqlite3 中使用Argument Clinic。由Erlend E. Aasland提供补丁。

  • bpo-41730: 当导入 tkinter.tix 时,现在会引发 DeprecationWarning,该模块自Python 3.6以来在文档中已被弃用。

  • bpo-20684: 从 inspect 模块中移除未使用的 _signature_get_bound_param 函数 - 由 Anthony Sottile 提交。

  • bpo-41402: 修复 email.message.EmailMessage.set_content() 当使用二进制数据和 7bit 内容传输编码调用时的问题。

  • bpo-32695: tarfile.open()compresslevelpreset 关键字参数现在都已记录并测试。

  • bpo-41137: 在读取 .pdbrc 文件时使用 utf-8 编码。由 Srinivas Reddy Thatiparthy 提供补丁。

  • bpo-24391: 改进了 threading 同步对象的 reprs:SemaphoreBoundedSemaphoreEventBarrier

  • bpo-5846: 弃用了以下 unittest 函数,计划在 Python 3.13 中移除:

    • findTestCases()

    • makeSuite()

    • getTestCaseNames()

    请改用 TestLoader 方法:

    由 Erlend E. Aasland 提交的补丁。

  • bpo-40563: 支持 dbm/shelve 上的 pathlike 对象。由 Hakan Çelik 和 Henry-Joseph Audéoud 提供补丁。

  • bpo-34990: 修复了 compileall 模块中的一个 Y2k38 错误,该错误会导致在 2038 年后修改的文件编译失败。

  • bpo-39549: 之前 reprlib.Repr 的代码使用了一个硬编码的字符串值 '...',这个 PR 更新为使用一个“fillvalue”属性,其值默认为 '...',并且可以在单个 reprlib.Repr 实例或其子类中重置。

  • bpo-37022: pdb 现在通过其 ppp 命令显示来自 repr() 的异常。

  • bpo-38840: 在没有共享内存实现的平台上修复 test___all__

  • bpo-39359: 添加了一个缺失的检查,确保密码是一个 bytes 对象,用于加密的 zipfile。

  • bpo-38741: configparser:在节标题中使用 ']' 将不再在 ']' 处截断节名称。

  • bpo-38415: 添加了 contextlib.asynccontextmanager() 缺失的行为以匹配 contextlib.contextmanager(),使得装饰的函数本身可以作为装饰器使用。

  • bpo-30256: 通过AutoProxy传递multiprocessing BaseProxy参数 manager_owned

  • bpo-27513: email.utils.getaddresses() 现在接受 email.header.Header 对象以及字符串值。由Zackery Spytz提供补丁。

  • bpo-16379: 将SQLite错误代码和名称添加到 sqlite3 异常中。由Aviv Palivoda、Daniel Shahaf和Erlend E. Aasland提供补丁。

  • bpo-26228: pty.spawn在FreeBSD、macOS和Solaris上不再挂起。

  • bpo-33349: lib2to3现在在任何地方都能识别异步生成器。

  • bpo-29298: 修复没有 dest 的必需子解析器未接收到参数时的 TypeError。由Anthony Sottile提供补丁。

文档

  • bpo-45216: 移除 difflib 中额外的方法文档列表。它在pydoc中渲染两次,并且在某些地方已经过时。

  • bpo-45024: collections.abc 文档已扩展,明确涵盖实例和子类检查的工作原理,添加了额外的doctest示例和一个详尽的ABC列表,这些ABC仅通过存在正确的 special methods来测试成员资格。由Raymond Hettinger提供补丁。

  • bpo-44957: 尽可能使用PEP 604联合语法来推广它。此外,在关于 Union 的部分更突出地提到``X | Y``,并在关于 Optional 的部分提到 X | None

  • bpo-16580: 为:int.to_bytes:和:int.from_bytes:方法添加了代码等价物,以及确保这些代码等价物有效的测试。

  • bpo-44903: 移除了 othergui.rst 文件、对其的任何引用以及FAQ中的GUI框架列表。取而代之的是,我添加了指向Python Wiki 页面上的GUI框架 的链接。

  • bpo-33479: Tkinter文档大幅扩展,新增了“架构”和“线程模型”部分。

  • bpo-36700: base64 RFC引用已更新指向 RFC 4648;新增了一个部分指向用户RFC的新“安全考虑”部分。

  • bpo-44740: 根据2016年修订的美联社样式手册,将大写的"Web"和"Internet"替换为小写版本。

  • bpo-44693: 通过替换混淆的词汇"伪模块"为更准确的描述,更新了术语表中__future__的定义。

  • bpo-35183: 向os.path.splitext文档添加典型示例

  • bpo-30511: 澄清由于依赖改变当前工作目录,shutil.make_archive() 不是线程安全的。

  • bpo-44561: 更新Doc/distributing/index.rst中三个过期的超链接:"项目结构"、"构建和打包项目"以及"将项目上传到Python包索引"。

  • bpo-44651: 删除Doc/glossary.rst中"强制"条目因其过时的定义。

  • bpo-42958: 更新了 filecmp.cmp() 的文档字符串和文档,使其更加准确且不易混淆,特别是关于 shallow 参数的部分。

  • bpo-44631: 重构了 _Environ (os模块) 的 repr() 代码。

  • bpo-44613: importlib.metadata不再处于临时状态。

  • bpo-44558: 使 countOf() 的文档字符串和Python实现与其C实现的行为相匹配。

  • bpo-44544: 列出 textwrap.wrap()textwrap.fill()textwrap.shorten() 的所有kwargs。现在,有导航链接指向 TextWrap 的属性,这使得在文档中导航更加容易,同时最小化了重复。

  • bpo-38062: 澄清atexit在内部使用相等比较。

  • bpo-40620: 将教程controlflow.rst第4.3节中的示例转换为解释器演示样式。

  • bpo-43066: 向 zipfile 文档添加警告:带有前导斜杠的文件名参数可能导致在Windows系统上无法打开存档。

  • bpo-39452: 重写了 Doc/library/__main__.rst。扩大了文档的范围,明确讨论并区分了包中的 __main__.py__name__ == '__main__' 表达式(及其周围的惯用法)。

  • bpo-13814: 在设计FAQ中,回答了“为什么生成器不支持with语句?”

  • bpo-27752: csv.Dialect的文档更加描述性。

  • bpo-44453: 修复了 sysconfig.get_path() 返回类型的文档。

  • bpo-44392: 在C API文档中新增了一个关于类型提示中使用的类型的部分。记录了``Py_GenericAlias``和 Py_GenericAliasType

  • bpo-38291: 在文档中标记 typing.iotyping.re 为自Python 3.8起弃用。它们从未得到类型检查器的适当支持。

  • bpo-44322: 记录了SyntaxError的参数有一个details元组,并且对于f-string字段替换表达式中的错误调整了details。

  • bpo-42392: 记录了 asyncio 中许多函数和类的 loop 参数的弃用和移除。

  • bpo-44195: 更正了文档中对 TraversableResources 的引用。没有 TraversableReader

  • bpo-41963: 记录了 ConfigParser 在读取配置文件时会去掉注释。

  • bpo-44072: 更正了在数字ABC层次结构中 ** 支持被添加的位置,即numbers.Complex,而非numbers.Integral。

  • bpo-43558: 在 dataclasses 的文档中添加了备注,说明任何基类的 __init__() 必须在 __post_init__() 中被调用,并附带了一个代码示例。

  • bpo-44025: 澄清了在match语句中,何时'_'是关键字,何时不是。

  • bpo-41706: 修正了关于如何调用像 __add__ 这样的方法来评估操作符表达式的文档。

  • bpo-41621: 记录了 collections.defaultdict 参数 default_factory 默认为``None``且为仅位置参数。

  • bpo-41576: 记录了BaseException优于裸except

  • bpo-21760: 修复了 __file__ 的描述。Furkan Onder 提供的补丁。

  • bpo-39498: 添加一个“安全考虑”索引,链接到有明确记录安全考虑的标准库模块。

  • bpo-33479: 移除了关于 tkinter 线程安全的未经证实的声明。这一说法已经多年不成立,可能从来就不是真的。关于什么是真的解释可能会在更多的讨论之后,甚至可能在修补 _tkinter.c 之后添加。

测试

  • bpo-40173: 修复 test.support.import_helper.import_fresh_module()

  • bpo-45280: 为空的 typing.NamedTuple 添加测试用例。

  • bpo-45269: 覆盖当向 c_make_encoder 提供无效 markers 类型的情况。

  • bpo-45128: 修复由于 test_loggingsys.modules 操作导致的 test_multiprocessing_fork 失败。

  • bpo-45209: 修复 _test_multiprocessing._TestSharedMemory.test_shared_memory_cleaned_after_process_termination 中的 UserWarning: resource_tracker 警告。

  • bpo-45185: 在 test_ssl 套件中启用 TestEnumerations 测试用例。

  • bpo-45195: 修复 test_readline.test_nonascii():有时,换行符不会在末尾写入,因此不要期望在输出中看到它。Victor Stinner 提供的补丁。

  • bpo-45156: 修复了由 create_autospec() 创建的模拟在 unittest.mock.seal() 上的无限循环问题。

  • bpo-45125: 改进了 SharedMemorySharableList 对象的序列化测试和文档。

  • bpo-44860: 为 posix_user 方案更新 test_sysconfig.test_user_similar()platlib 不使用 sys.platlibdir。Victor Stinner 提供的补丁。

  • bpo-45052: WithProcessesTestSharedMemory.test_shared_memory_basics 测试被忽略,因为 self.assertEqual(sms.size, sms2.size) 行失败。现在这一行被移除,测试不再跳过。

    从测试中移除这一行的主要动机是 SharedMemorysize 并不保证总是相同。它由平台决定。

  • bpo-44895: libregrtest 现在更晚清除类型缓存,以减少在检查引用泄漏时产生误报的风险。之前,类型缓存清除得太早,libregrtest 在非常特定的条件下会关于引用泄漏产生误报。由 Irit Katriel 和 Victor Stinner 提供补丁。

  • bpo-45042: 修复了使用 @hashlib_helper.requires_hashdigest 装饰的测试类总是被跳过的问题。

  • bpo-25130: 在测试中添加 gc.collect() 的调用以支持 PyPy。

  • bpo-45011: 使依赖 _asyncio C 扩展模块的测试变为可选,以允许在替代的 Python 实现上运行。由 Serhiy Storchaka 提供补丁。

  • bpo-44949: 修复 test_readline 的自动历史测试:有时,换行符不会在末尾写入,因此不要期望它在输出中出现。

  • bpo-44891: 添加了测试以澄清当在 strbytes 对象上使用 obj * 1id() 被保留。由 Nikita Sobolev 提供补丁。

  • bpo-44852: 添加了在运行回归测试套件时全面静默 DeprecationWarnings 的能力。

  • bpo-40928: 通知在 macOS 上运行 test_decimal 回归测试的用户,test_decimal 可能会输出无害的“malloc can't allocate region”消息。

  • bpo-44734: 修复了 turtle 测试中的浮点精度问题。

  • bpo-44708: 回归测试现在在使用 -w 运行时,仅重新运行受影响的测试方法,而不是重新运行整个测试文件。

  • bpo-42095: 添加了 Apple plists 的互操作性测试:用 Python plistlib 生成 plist 文件并用 Apple plutil 解析;反之亦然。

  • bpo-44647: 向回归测试添加了一个永久的 Unicode 值环境变量,以确保它们将来能处理这种用例。如果您的测试环境因此中断,请向我们报告错误,并在测试环境中临时设置 PYTHONREGRTEST_UNICODE_GUARD=0。

  • bpo-44515: 调整最近添加的contextlib测试,避免假设使用引用计数的垃圾回收。

  • bpo-44287: 通过使用更长的超时时间来修复asyncio的test_popen()测试_windows_utils。使用军用级经过实战检验的 test.support.SHORT_TIMEOUT 超时而不是硬编码的10秒超时:默认为30秒,但在慢速构建机器人上会更长。由Victor Stinner提供补丁。

  • bpo-44451: 在``test.test_importlib.test_metadata_api.APITests.test_entry_points_by_index``中重置``DeprecationWarning``过滤器,以避免如果 DeprecationWarnings 被忽略时出现``StopIteration``错误。

  • bpo-44363: 在test_capi中考虑地址消毒器。当运行GCC地址消毒器时,test_capi现在可以通过。

  • bpo-44364: 为 math.sqrt() 函数添加非整数测试。

  • bpo-43921: 修复test_ssl.test_wrong_cert_tls13():使用 suppress_ragged_eofs=False,因为在Windows上 read() 可能会引发 ssl.SSLEOFError。由Victor Stinner提供补丁。

  • bpo-43921: 修复test_ssl的test_pha_required_nocert():捕获另外两种EOF情况(当``recv()``方法返回一个空字符串时)。由Victor Stinner提供补丁。

  • bpo-44131: 在test_embed中添加test_frozenmain以测试 Py_FrozenMain() C函数。补丁由Victor Stinner提供。

  • bpo-31904: 在test_file_not_exists()中忽略错误字符串的大小写。

  • bpo-42083: 添加测试以检查 PyStructSequence_NewType 是否接受 doc 字段设置为``NULL``的 PyStructSequence_Desc

  • bpo-35753: 通过跳过那些函数来修复doctest在解析包含不可包装函数的模块时的崩溃。

  • bpo-30256: 添加嵌套队列的测试,当在 ListProxyDictProxy 中使用``multiprocessing``共享对象 AutoProxy[Queue] 时。

构建

  • bpo-45220: 避免自动使用Windows 11 SDK预览版构建。可以通过在构建前设置``DefaultWindowsSDKVersion``环境变量来覆盖此设置。

  • bpo-45020: 冻结在启动期间导入的标准库模块。这显著提高了启动性能。如有需要,可使用之前添加的"-X frozen_modules=off"命令行选项强制导入源代码模块。

  • bpo-45188: Windows构建现在将重新生成冻结模块作为构建的第一部分。之前重新生成是在构建的后期进行的,如果任何模块发生了变化,就需要重新开始构建。

  • bpo-45163: 修复Haiku平台构建。

  • bpo-45067: ncurses函数extended_color_content是在2017年引入的

    (https://invisible-island.net/ncurses/NEWS.html#index-t20170401)。

    CentOS 7中的ncurses-devel包有一个较旧版本的ncurses,导致编译错误。为了编译支持扩展颜色的ncurses,我们验证ncurses库的版本>=20170401。

  • bpo-45019: 为冻结模块在相关文件中生成行。直到现在,每个文件都必须手动编辑。这一变化使得添加和修改冻结模块变得更加容易。

  • bpo-44340: 添加支持通过--with-lto=thin/full使用clang thin lto构建。由Donghee Na和Brett Holman提供补丁。

  • bpo-44535: 支持在Windows上使用Visual Studio 2022安装进行构建。

  • bpo-43298: 改进了在没有安装Windows SDK时构建的错误消息。

  • bpo-44381: Windows构建现在接受 EnableControlFlowGuard 设置为 guard 以启用CFG。

  • bpo-41282: 修复了导致标准库扩展模块在cpython的安装阶段不必要且错误地重新构建的``make install``问题。

Windows

macOS

  • bpo-45007: 更新 macOS 安装程序构建以使用 OpenSSL 1.1.1l。

  • bpo-34602: 在 macOS 上使用 ./configure --with-undefined-behavior-sanitizer --with-pydebug 构建 CPython 时,现在将栈大小翻两番以允许整个测试套件通过。

  • bpo-44848: 更新 macOS 安装程序以使用 SQLite 3.36.0。

  • bpo-44689: ctypes.util.find_library() 现在在 macOS 11 Big Sur 上即使是在旧版 macOS 上构建的 Python 也能正确工作。之前,当在旧版 macOS 系统上构建时,由于系统库存储方式的改变,find_library 在 Big Sur 上运行时无法找到 macOS 系统库。

  • bpo-41972: 修改框架构建在 sysconfig 中的用户头文件路径,添加 'pythonX.Y' 组件以匹配 distutils 的行为。

  • bpo-43109: 允许 --with-lto 配置选项与 Apple 提供的 Xcode 或 Command Line Tools 一起工作。

  • bpo-34932: 为 macOS 添加 socket.TCP_KEEPALIVE 支持。由 Shane Harvey 提供补丁。

IDLE

  • bpo-45296: 在 Windows 上,将退出/退出的提示信息改为建议使用 Ctrl-D(这是有效的),而不是 <Ctrl-Z Return>(在 IDLE 中无效)。

  • bpo-45193: 使完成框在 Ubuntu 上再次出现。

  • bpo-40128: 主要修复在 macOS 上不使用 tcl/tk 8.6.11(如 3.9 版本)时的补全问题。添加的 update_idletask 调用应该是无害的,可能在其他情况下也有帮助。

  • bpo-33962: 将缩进空格设置从字体选项卡移至新的Windows选项卡。由Mark Roseman和Terry Jan Reedy提供补丁。

  • bpo-40468: 将设置对话框的常规选项卡拆分为Windows和Shell/ED选项卡。将扩展帮助菜单的帮助源移至扩展选项卡。为新选项腾出空间并缩短对话框。后者使对话框更好地适应小屏幕。

  • bpo-41611: 避免在 AutoCompleteWindow.winconfig_event() 中出现未捕获的异常。

  • bpo-41611: 修复在macOS上有时因标签补全导致IDLE冻结的问题。

  • bpo-44010: 高亮显示新的 match 语句的 soft keywordsmatchcase_。然而,这种高亮显示并不完美,在某些罕见情况下会不正确,包括一些 case 模式中的 _

  • bpo-44026: 在NameErrors和AttributeErrors的消息行中包含解释器的拼写修正建议。由E. Paine提供补丁。

工具/示例

  • bpo-44786: 修复c-analyzer脚本中正则表达式的警告。

  • bpo-44967: 当模块无法找到时,pydoc现在返回非零状态码。

  • bpo-44978: 允许Argument Clinic工具处理 __complex__ 特殊方法。

  • bpo-43425: 删除了'demo2to3'演示项目,该项目演示了在distutils包中使用lib2to3支持Python 2.x和Python 3.x的单一源。由Donghee Na提供补丁。

  • bpo-44074: 使patchcheck自动检测正确的基础分支名称(之前硬编码为'master')

  • bpo-20291: 在Argument Clinic中添加了对可变位置参数的支持。

C API

  • bpo-41710: PyThread_acquire_lock_timed()函数现在会在超时时间过长时进行钳制,而不是中止进程。由Victor Stinner提供补丁。

  • bpo-44687: BufferedReader.peek() 在文件已全部缓冲时不再引发 ValueError

  • bpo-45116: 添加 Py_ALWAYS_INLINE 宏以请求编译器始终内联一个静态内联函数。编译器可以忽略此请求并决定不内联该函数。由 Victor Stinner 提供补丁。

  • bpo-45094: 添加 Py_NO_INLINE 宏以禁用函数的内联。补丁由 Victor Stinner 提供。

  • bpo-45061: 为 bool 类型添加一个析构器,以检测 C 扩展中错误调用 Py_DECREF(Py_True);Py_DECREF(Py_False); 的引用计数错误。由 Victor Stinner 提供补丁。

  • bpo-42035: 添加一个新的 PyType_GetQualName() 函数以获取类型的限定名称。

  • bpo-41103: 恢复旧缓冲区协议的移除,因为它们是稳定 ABI 的一部分。

  • bpo-44751: 从公共 Python.h 头文件中移除 crypt.h 包含。

  • bpo-42747: Py_TPFLAGS_HAVE_VERSION_TAG 类型标志现在不做任何事情。Py_TPFLAGS_HAVE_AM_SEND 标志(在 3.10 中添加)被移除。这两者都是不必要的,因为不可能有相关字段缺失的类型对象。

  • bpo-44530: 向 PyCodeObject 结构添加 co_qualname,以将限定名称从编译器传播到代码对象。

    由 Gabriele N. Tornetta 提供补丁

  • bpo-44441: Py_RunMain() now resets PyImport_Inittab to its initial value at exit. It must be possible to call PyImport_AppendInittab() or PyImport_ExtendInittab() at each Python initialization. Patch by Victor Stinner.

  • bpo-39947: 移除 4 个私有的 trashcan C API 函数,这些函数仅为了保持与 Python 3.8 及更早版本的稳定 ABI 的向后兼容性而保留,因为在 Python 3.8 及更早版本中,trashcan API 无法与有限的 C API 一起使用。trashcan API 在 Python 3.9 中被排除在有限的 C API 之外。

    已移除的函数:

    • _PyTrash_deposit_object()

    • _PyTrash_destroy_chain()

    • _PyTrash_thread_deposit_object()

    • _PyTrash_thread_destroy_chain()

    垃圾回收C API从未能与有限的C API一起使用,因为旧的垃圾回收宏直接访问了 PyThreadState 成员如 _tstate->trash_delete_nesting,而 PyThreadState 结构在有限的C API中是不透明的。

    同时从C API中排除 PyTrash_UNWIND_LEVEL 常量。

    由Victor Stinner提供补丁。

  • bpo-40939: 移除了关于已移除的 PyParser_* C API的文档。

  • bpo-43795: 受限 API 的内容 中的列表现在显示公共名称 PyFrameObject 而非 _frame。列表中不再出现不存在的条目 _node

  • bpo-44378: Py_IS_TYPE() 不再使用 Py_TYPE() 以避免编译器警告:不再将``const PyObject*``强制转换为 PyObject*。由Victor Stinner提供补丁。

  • bpo-39573: 将 Py_TYPE()Py_SIZE() 宏转换为静态内联函数。现在必须使用 Py_SET_TYPE()Py_SET_SIZE() 函数来设置对象类型和大小。由Victor Stinner提供补丁。

  • bpo-44263: 如果类型定义时设置了 Py_TPFLAGS_HAVE_GC 标志但没有遍历函数(PyTypeObject.tp_traverse),PyType_Ready() 函数现在会引发错误。由Victor Stinner提供补丁。

  • bpo-43795: 未记录的函数 Py_FrozenMain() 已从有限API中移除。

  • bpo-44113: 弃用以下用于配置Python初始化的函数:

    • PySys_AddWarnOptionUnicode()

    • PySys_AddWarnOption()

    • PySys_AddXOption()

    • PySys_HasWarnOptions()

    • Py_SetPath()

    • Py_SetProgramName()

    • Py_SetPythonHome()

    • Py_SetStandardStreamEncoding()

    • _Py_SetProgramFullPath()

    请改用 Python 初始化配置 中新增的 PyConfig API(参见 PEP 587)。

  • bpo-44094: 移除 PyErr_SetFromErrnoWithUnicodeFilename()PyErr_SetFromWindowsErrWithUnicodeFilename()``和``PyErr_SetExcFromWindowsErrWithUnicodeFilename()。这些函数未被记录,并且自Python 3.3以来已被弃用。

  • bpo-43795: PyCodec_Unregister() 现在作为Windows稳定ABI DLL中的函数被正确导出。

  • bpo-44029: 移除已弃用的 Py_UNICODE API:PyUnicode_EncodePyUnicode_EncodeUTF7PyUnicode_EncodeUTF8PyUnicode_EncodeUTF16PyUnicode_EncodeUTF32PyUnicode_EncodeLatin1PyUnicode_EncodeMBCSPyUnicode_EncodeDecimalPyUnicode_EncodeRawUnicodeEscapePyUnicode_EncodeCharmapPyUnicode_EncodeUnicodeEscapePyUnicode_TransformDecimalToASCIIPyUnicode_TranslateCharmapPyUnicodeEncodeError_CreatePyUnicodeTranslateError_Create。参考 PEP 393PEP 624

  • bpo-42035: 新增 PyType_GetName() 函数以获取类型的短名称。

Python 3.10.0 beta 1

发布日期: 2021-05-03

安全性

  • bpo-43434: 现在创建 sqlite3.Connection 对象时也会产生 sqlite3.connectsqlite3.connect/handle auditing events。之前这些事件仅由 sqlite3.connect() 调用产生。由 Erlend E. Aasland 提供补丁。

  • bpo-43998: ssl 模块设置了更安全的密码套件默认值。默认禁用不具有前向保密性和使用 SHA-1 MAC 的密码。安全级别 2 禁止使用安全性低于 112 位的弱 RSA、DH 和 ECC 密钥。SSLContext 默认最低协议版本为 TLS 1.2。设置基于 Hynek Schlawack 的研究。

  • bpo-43882: URL 部分中存在的换行符或制表符可能允许某些形式的攻击。

    遵循 WHATWG 定义的 URL 控制规范,urllib.parse() 现在从 URL 中移除 ASCII 换行符和制表符,防止此类攻击。

  • bpo-43472: 确保解释器级审计钩子在通过 _xxsubinterpreters 模块调用时接收到 cpython.PyInterpreterState_New 事件。

  • bpo-43362: 修复 _sha3 模块中的无效释放。此问题在 3.10.0a1 中引入。Python 3.9 及更早版本不受影响。

  • bpo-43762: 为 sqlite3.connect/handle()sqlite3.Connection.enable_load_extension()sqlite3.Connection.load_extension() 添加审计事件。由 Erlend E. Aasland 提供补丁。

  • bpo-43756: 添加新的审计事件 glob.glob/2 以包含新增的 root_dirdir_fd 参数,这些参数已添加到 glob.glob()glob.iglob() 中。

  • bpo-36384: ipaddress 模块不再接受 IPv4 地址字符串中的任何前导零。前导零是模糊的,并被一些库解释为八进制表示法。例如,旧函数 socket.inet_aton() 将前导零视为八进制表示法。现代 inet_pton() 的 glibc 实现不接受任何前导零。ipaddress 模块曾一度接受模糊的前导零。

  • bpo-43075: 修复 urllib.request.AbstractBasicAuthHandler 中的正则表达式拒绝服务(ReDoS)漏洞。易受 ReDoS 攻击的正则表达式具有二次最坏情况复杂度,当识别精心制作的无效 RFC 时,它可能导致拒绝服务。此 ReDoS 问题位于客户端,需要远程攻击者控制 HTTP 服务器。

  • bpo-42800: 现在为 frame.f_code、traceback.tb_frame 和生成器代码/帧属性访问触发审计钩子。

  • bpo-37363: 向 http.client 模块添加审计事件。

核心与内置函数

  • bpo-43977: 防止类在模式匹配时同时是序列和映射。

  • bpo-43977: 在模式匹配时,使用 tp_flags 在类对象上确定主题是序列还是映射。避免在模式匹配时需要导入 collections.abc

  • bpo-43892: 在解析 match 块时,恢复对复杂字面值模式的正确验证。

  • bpo-43933: 在执行 __exit__ 调用时,将 frame.f_lineno 设置为 'with' 关键字的行号。

  • bpo-43933: 如果帧中的当前位置没有行号,则将 f_lineno 属性设置为 None,而不是 -1,以符合 PEP 626。这通常不应该发生,但在一些不寻常的情况下可能会出现。

  • bpo-43963: 在子解释器中导入 _signal 模块不再有副作用。

  • bpo-42739: 行号表的内部表示已更改为不使用哨兵,并且向进程外 API 函数 PyLineTable_InitAddressRange 添加了一个显式的长度参数。这使得在某些情况下处理行号表更加健壮。

  • bpo-43908: 使 re 类型不可变。由 Erlend E. Aasland 提供补丁。

  • bpo-43908: 使 array.array 类型不可变。由 Erlend E. Aasland 提供补丁。

  • bpo-43901: 更改类和模块对象以按需延迟创建空的注释字典。为了向后兼容,注释字典存储在对象的 __dict__ 中。

  • bpo-43892: 匹配模式现在使用新的专用 AST 节点(MatchValueMatchSingletonMatchSequenceMatchStarMatchMappingMatchClass),而不是重用表达式 AST 节点。MatchAsMatchOr 现在被定义为模式节点而不是表达式节点。由 Nick Coghlan 提供补丁。

  • bpo-42725: 当 PEP 563 被激活时,现在禁止在注释中使用 await/yield/yield from 和命名表达式。

  • bpo-43754: 在执行结构化模式匹配(PEP 634)时,捕获的名称现在在整个模式成功匹配之前保持未绑定状态。

  • bpo-42737: 对于复杂目标(除了简单名称之外的所有内容)的注释,在使用 from __future__ import annotations 时不再产生任何运行时效果。

  • bpo-43914: 解释器引发的 SyntaxError 异常现在会高亮显示构成语法错误的整个表达式范围,而不仅仅是问题被检测到的位置。由 Pablo Galindo 提供补丁。

  • bpo-38605: 撤销将 from __future__ import annotations 设为默认值。这一决定遵循了指导委员会的决定,将 PEP 563 的更改推迟到至少 Python 3.11。有关该决定的更多信息,请参阅原始邮件:https://mail.python.org/archives/list/python-dev@python.org/thread/CLVXXPQ2T2LQ5MP2Y53VVQFCXYWQJHKZ/。由 Pablo Galindo 提供补丁。

  • bpo-43475: NaN 值的哈希现在依赖于对象身份。以前,它们总是哈希为 0,即使 NaN 值彼此不相等。为不相等的值使用相同的哈希会导致哈希表中的堆积。

  • bpo-43859: 改进了 IndentationError 异常的错误消息。由 Pablo Galindo 提供补丁。

  • bpo-41323: 字节码优化器中的常量元组折叠现在重用常量表中的元组。

  • bpo-43846: 对于大型字面量和调用表达式,数据堆栈的使用大大减少。

  • bpo-38530: 当打印解释器引发的 NameError 时,PyErr_Display() 将提供函数中相似变量名的建议。由 Pablo Galindo 提供补丁。

  • bpo-43823: 改进了无效字典字面量的语法错误。由 Pablo Galindo 提供补丁。

  • bpo-43822: 改进了解析器中表达式间缺少逗号的语法错误。由 Pablo Galindo 提供补丁。

  • bpo-43798: ast.alias 节点现在包含源位置元数据属性,例如 lineno、col_offset。

  • bpo-43797: 改进了无效比较的 SyntaxError 错误消息。由 Pablo Galindo 提供补丁。

  • bpo-43760: 将检查是否启用跟踪的标志从堆移动到 C 堆栈。应该可以加速解释器中的调度。

  • bpo-43682: 静态方法 (@staticmethod) 和类方法 (@classmethod) 现在继承方法属性 (__module__, __name__, __qualname__, __doc__, __annotations__) 并有一个新的 __wrapped__ 属性。由 Victor Stinner 提交的补丁。

  • bpo-43751: 修复了 anext(ait, default) 错误返回 None 的 bug。

  • bpo-42128: __match_args__ 不再允许为列表。

  • bpo-43683: 添加 GEN_START 操作码。标记生成器的开始,包括异步或协程,并处理向新创建的生成器或协程发送值。

  • bpo-43105: Importlib 现在在从文件位置创建模块规范对象时解析相对路径。

  • bpo-43682: 静态方法 (@staticmethod) 现在可以像常规函数一样调用。由 Victor Stinner 提交的补丁。

  • bpo-42609: 防止在编译某些极端长的表达式如 "+0"*1000000 时 AST 验证器和优化器崩溃。现在会抛出 RecursionError

  • bpo-38530: 当打印 AttributeError 时,PyErr_Display() 将提供引发异常的对象的相似属性名称的建议。由 Pablo Galindo 提交的补丁

  • bpo-44015: 在 @dataclass() 中,如果多次指定 KW_ONLY,则抛出 TypeError。

  • bpo-25478: 为 collections.Counter() 添加了一个 total() 方法,用于计算计数的总和。

  • bpo-43733: 修改 netrc.netrc 在使用区域设置编码之前使用 UTF-8 编码。

  • bpo-43979: 从 urllib.parse.parse_qsl() 中移除了循环前不必要的列表推导。由 Christoph Zwerschke 和 Donghee Na 提交的补丁。

  • bpo-43993: 更新捆绑的 pip 到 21.1.1。

  • bpo-43957: [枚举] 弃用当非成员用于包含检查时抛出 TypeError 的行为;在 3.12 版本中,将返回 TrueFalse,如果该值是枚举的成员或其成员的值之一,则包含检查将返回 True

  • bpo-42904: 为了与之前次要版本的 Python 向后兼容,如果 typing.get_type_hints() 没有接收到命名空间字典参数,typing.get_type_hints() 将在评估类中字符串化的类型注释(字符串前向引用)时搜索全局然后局部命名空间。

  • bpo-43945: [枚举] 弃用非标准的混合格式()行为:在 3.12 版本中,将使用枚举成员而非成员的值进行 format() 调用。

  • bpo-41139: 弃用未记录的 cgi.log() API。

  • bpo-43937: 修复了 turtle 模块与非默认根窗口一起工作的问题。

  • bpo-43930: 更新捆绑的 pip 到 21.1 和 setuptools 到 56.0.0

  • bpo-43907: 修复了在使用协议 5 时纯 Python pickle 实现中的一个 bug,其中在 pickled 对象图中多次出现的 bytearray 实例会错误地 unpickle 为 bytearray 对象的重复副本。

  • bpo-43926: 在 importlib.metadata 中,为 Description 提供统一接口,允许任何字段编码为多行值,从多行值中移除续行,并添加 .json 属性以便轻松访问 PEP 566 JSON 兼容形式。与 importlib_metadata 4.0 同步。

  • bpo-43920: OpenSSL 3.0.0: 当 cadata 不包含有效证书时,load_verify_locations() 现在返回一致的错误消息。

  • bpo-43607: urllib 现在可以将带有 \\?\ 前缀的 Windows 路径转换为 URL 路径。

  • bpo-43817: 添加 inspect.get_annotations(),该函数安全地计算对象上定义的注解。它解决了从各类对象访问注解时的怪癖,并对传入的对象做出极少假设。inspect.get_annotations() 还能正确反字符串化字符串化的注解。

    inspect.signature()inspect.from_callable()inspect.from_function() 现在调用 inspect.get_annotations() 来检索注解。这意味着 inspect.signature()inspect.from_callable() 现在也能反字符串化字符串化的注解。

  • bpo-43284: platform.win32_ver 从 sys.getwindowsversion().platform_version 派生 Windows 版本,而后者又从 kernel32.dll 派生版本(可能与 Windows 本身的版本不同)。因此,更改 platform.win32_ver 以使用平台模块的 _syscmd_ver 私有函数来确定版本,以返回准确的版本。

  • bpo-42854: ssl 模块现在内部使用 SSL_read_exSSL_write_ex。这些函数支持读写大于 2 GB 的数据。写入零长度数据不再因协议违规错误而失败。

  • bpo-42333: 将 _ssl 扩展模块移植到多阶段初始化。

  • bpo-43880: ssl 现在对 OP_NO_SSL/TLS* 选项、旧 TLS 版本、旧协议以及自 Python 3.6、3.7 或 OpenSSL 1.1.0 以来已弃用的其他功能发出 DeprecationWarning。

  • bpo-41559: PEP 612 现在仅在 Python 中实现;内置的 types.GenericAlias 对象不再在 __parameters__ 中包含 typing.ParamSpec``(除了 ``collections.abc.CallableGenericAlias)。这意味着之前无效的 ParamSpec 使用(如 list[P])在 Python 3.10 alpha 早期版本中有效,现在在替换过程中会引发 TypeError

  • bpo-43867: multiprocessingServer 类现在明确捕获 SystemExit 并在这种情况下关闭客户端连接。当 Server.serve_client() 方法到达文件末尾 (EOF) 时会发生这种情况。

  • bpo-40443: 移除未使用的导入:pyclbr 不再使用 copy,typing 不再使用 ast。由 Victor Stinner 提供补丁。

  • bpo-43820: 移除了传递给 dataclasses.make_dataclass() 的命名空间的一个不需要的副本。

  • bpo-43787: 向 bz2.BZ2Filegzip.GzipFilelzma.LZMAFile 添加了 __iter__() 方法。这使得迭代它们快约 2 倍。由 Inada Naoki 提供补丁。

  • bpo-43680: 弃用 io.OpenWrapper 和 _pyio.OpenWrapper:改用 io.open 和 _pyio.open。在 Python 3.9 之前,_pyio.open 不是一个静态方法,而 builtins.open 被设置为 OpenWrapper,以避免在设置为类变量时成为绑定方法。_io.open 是一个内置函数,而 _pyio.open 是一个 Python 函数。在 Python 3.10 中,_pyio.open() 现在是一个静态方法,builtins.open() 现在是 io.open()。

  • bpo-43680: Python 的 _pyio.open() 函数成为一个静态方法,以表现得像 io.open() 内置函数:当存储为类变量时不会成为绑定方法。这成为可能,因为静态方法在 Python 3.10 中现在是可调用的。此外,_pyio.OpenWrapper() 变成了 _pyio.open() 的一个简单别名。由 Victor Stinner 提供补丁。

  • bpo-41515: 修复了由于不显示在 sys.modules 中的合成模块而在 typing.get_type_hints() 中引发的 KeyError

  • bpo-43776: 当 subprocess.Popen 的参数以字符串或 pathlib.Path 形式提供时,Popen 实例的 repr 现在显示正确的内容。

  • bpo-42248: [枚举] 确保在 _missing__ 中引发的异常被释放

  • bpo-43744: 修复了枚举成员名称与私有变量名称开头匹配的问题

  • bpo-43772: 修复了 TypeVar.__ror__ 的返回值。由 Jelle Zijlstra 提供补丁。

  • bpo-43764: 为@dataclass装饰器添加match_args参数以允许抑制__match_args__的生成。

  • bpo-43799: OpenSSL 3.0.0:定义 OPENSSL_API_COMPAT 为1.1.1以抑制弃用警告。Python需要OpenSSL 1.1.1的API。

  • bpo-43478: Mock对象不能再作为其他Mock对象的specs使用。因此,已经mock的对象不能使用``autospec=True``来mock一个属性,也不能成为 create_autospec(...) 调用的对象。这可能会在测试中暴露出bug,因为这些由Mock派生的Mock总是能通过某些测试(例如 isinstance()),并且内置的断言函数(例如assert_called_once_with)将无条件通过。

  • bpo-43794: 添加 ssl.OP_IGNORE_UNEXPECTED_EOF 常量(OpenSSL 3.0.0)

  • bpo-43785: 通过从BZ2File中移除RLock来提高 bz2.BZ2File 的性能。这使得BZ2File在面对多个同时进行的读取或写入操作时线程不安全,就像 gziplzma 中的等效类一直以来那样。由Inada Naoki提供补丁。

  • bpo-43789: OpenSSL 3.0.0:当第一次调用已经发出错误信号时,不再第二次调用密码回调函数。

  • bpo-43788: ssl 错误代码的头文件现在是特定于OpenSSL版本的。异常现在会显示正确的原因和库代码。``make_ssl_data.py``脚本已被重写,以使用OpenSSL带有错误代码的文本文件。

  • bpo-43766: 在 typing 模块中通过添加 TypeGuard 来实现 PEP 647

  • bpo-25264: os.path.realpath() 现在接受一个仅限关键词的 strict 参数。当设置为``True``时,如果路径不存在或遇到符号链接循环,将引发 OSError

  • bpo-43780: 在 importlib.metadata 中,整合了importlib_metadata 3.10的更改:在分发发现期间添加基于mtime的缓存。标记使用 entry_points() 返回的字典结果为已弃用。

  • gh-47383: typing.ParamSpecP.argsP.kwargs 属性现在是新类 typing.ParamSpecArgstyping.ParamSpecKwargs 的实例,这使得 repr() 更加有用。由 Jelle Zijlstra 提供补丁。

  • bpo-43731: 为 logging.fileConfig() 添加了一个 encoding 参数。

  • bpo-43712: 为 fileinput.input()fileinput.FileInput 添加了 encodingerrors 参数。

  • bpo-38659: 向 enum 模块添加了一个 simple_enum 装饰器,用于将普通类转换为 Enum。添加了 test_simple_enum 来测试简单枚举与相应的普通枚举。更新了标准库模块以使用 simple_enum

  • bpo-43764: 修复了某些 dataclasses__match_args__ 生成可能失败的问题。

  • bpo-43752: 修复了带有转换器的零大小 blob 的 sqlite3 回归问题,其中返回了 b"" 而不是 None。这个回归是由 PR 24723 引入的。由 Erlend E. Aasland 提供补丁。

  • bpo-43655: tkinter 对话框窗口现在被 macOS 和 X Window 上的窗口管理器识别为对话框。

  • bpo-43723: 以下 threading 方法现在已被弃用,应替换为:

    由 Jelle Zijlstra 提供补丁。

  • bpo-2135: 弃用了 importlib 和 zipimport 中的 find_module() 和 find_loader() 实现。

  • bpo-43534: turtle.textinput()turtle.numinput() 现在创建了一个代表画布窗口工作的瞬态窗口。

  • bpo-43532: 添加了为数据类指定仅关键字字段的功能。这些字段将成为生成的 __init__ 方法的仅关键字参数。

  • bpo-43522: 修复了 hostname_checks_common_name 的问题。OpenSSL 不会将主机标志从 struct SSL_CTX 复制到 struct SSL

  • bpo-8978: 当 lzma / bz2 不可用时,改进了 tarfile.open() 的错误消息。由 Anthony Sottile 提供补丁。

  • bpo-42967: 在解析 str 查询字符串时,允许 bytes separator 参数在 urllib.parse.parse_qsurllib.parse.parse_qsl 中使用。之前这会引发 TypeError

  • bpo-43296: 改进了 sqlite3 的错误处理:设置 SQLITE_NOMEMsqlite3_value_blob() 错误现在会引发 MemoryError。补丁由 Erlend E. Aasland 提供。

  • bpo-43312: 新增函数 sysconfig.get_preferred_scheme()sysconfig.get_default_scheme(),用于查询平台的首选“用户”、“家”和“前缀”(默认)方案名称。

  • bpo-43265: 改进了 sqlite3.Connection.backup() 的错误处理。现在对于不存在的目标数据库名称的错误消息是 unknown database <database name> 而不是 SQL logic error。补丁由 Erlend E. Aasland 提供。

  • bpo-41282: distutils.command.install 中的安装方案现在从 sysconfig 加载。

  • bpo-41282: distutils.sysconfig 已合并到 sysconfig

  • bpo-43176: 修复了继承自无字段冻结数据类的数据类的处理。现在能正确检测为错误。

  • bpo-43080: pprint 现在支持 dataclasses.dataclass。由 Lewis Gaul 提供补丁。

  • bpo-39950: 新增 pathlib.Path.hardlink_to() 方法,取代 link_to()。新方法的参数顺序与 symlink_to() 相同。

  • bpo-42904: typing.get_type_hints() 现在在评估类中的 PEP 563 注解时会检查该类的本地命名空间。

  • bpo-42269: 向 dataclasses.dataclass 装饰器添加 slots 参数以自动为类生成 __slots__。由 Yurii Karabas 提供补丁。

  • bpo-39529: 弃用在未运行事件循环的情况下使用 asyncio.get_event_loop()。对于 asyncio 模块中在没有运行事件循环且未传递显式 loop 参数时隐式创建 FutureTask 对象的函数发出弃用警告:ensure_future()wrap_future()gather()shield()as_completed() 以及 FutureTaskStreamReaderStreamReaderProtocol 的构造函数。

  • bpo-18369: 向 ssl 模块添加了 Certificate 和 PrivateKey 类。现在也可以从内存缓冲区加载证书和密钥。

  • bpo-41486: 为 bz2 / lzma / zlib 模块使用新的输出缓冲区管理代码,并向 _compression.DecompressReader 类添加 .readall() 函数。这些带来了一些性能改进。由 Ma Lin 提供补丁。

  • bpo-31870: ssl.get_server_certificate() 函数现在有一个 timeout 参数。

  • bpo-41735: 修复 zlib 模块中的线程锁在极少数情况下可能出错的问题。由 Ma Lin 提供补丁。

  • bpo-36470: 修复带有 InitVars 和 replace() 的数据类。由 Claudiu Popa 提供补丁。

  • bpo-40849: 公开 X509_V_FLAG_PARTIAL_CHAIN ssl 标志

  • bpo-35114: ssl.RAND_status() 现在返回一个布尔值(如文档所述)而不是 10

  • bpo-39906: pathlib.Path.stat()chmod() 现在接受一个仅关键字参数 follow_symlinks 以与 os 模块中的相应函数保持一致。

  • bpo-39899: os.path.expanduser() 现在拒绝猜测 Windows 主目录,如果当前用户主目录的基本名称与他们的用户名不匹配。

    pathlib.Path.expanduser()home() 现在在无法解析家目录时一致地抛出 RuntimeError 异常。之前在 Windows 上当 "USERNAME" 环境变量未设置时可能会抛出 KeyError 异常。

  • bpo-36076: 为 ssl.get_server_certificate() 添加了 SNI 支持。

  • bpo-38490: 向 statistics 模块添加了协方差、皮尔逊相关系数和简单线性回归功能。由 Tymoteusz Wołodźko 提供补丁。

  • bpo-33731: 提供了一个 locale.localize() 函数,用于将规范化的数字字符串转换为区域格式。

  • bpo-32745: 修复了处理 ctypes 的 ctypes.c_wchar_p 类型时的一个回归问题:嵌入的空字符会导致抛出 ValueError。由 Zackery Spytz 提供补丁。

文档

  • bpo-43987: 添加“注释最佳实践”文档作为新的 HOWTO。

  • bpo-43977: 记录了新的 Py_TPFLAGS_MAPPINGPy_TPFLAGS_SEQUENCE 类型标志。

  • bpo-43959: 澄清了关于 PyContextVar C-API 的文档。

  • bpo-43938: 更新 dataclasses 文档以表达 FrozenInstanceError 派生自 AttributeError。

  • bpo-43778: 修复 Sphinx glossary_search 扩展:如果 _static/ 子目录不存在则创建它。

  • bpo-43755: 更新文档以反映自 Python 3.9 起,无括号的 lambda 表达式不能再作为理解和生成器表达式中 if 子句的表达式部分。

  • bpo-43739: 修复 Doc/extending/extending.rst 中的示例代码,声明并初始化 pmodule 变量为正确的类型。

测试

  • bpo-43961: 在 Windows 上修复 test_logging.test_namer_rotator_inheritance():使用 os.replace() 而不是 os.rename()。由 Victor Stinner 提供补丁。

  • bpo-43842: 修复test_logging的SMTP测试中的竞态条件。不要在asyncore.loop()轮询文件描述符时,从另一个线程关闭文件描述符(套接字)。由Victor Stinner提供补丁。

  • bpo-43843: test.libregrtest 现在如果一个线程抛出异常但没有捕获它,则将测试标记为ENV_CHANGED(改变了执行环境)。它在 threading.excepthook() 上设置了一个钩子。使用``--fail-env-changed``选项将测试标记为失败。由Victor Stinner提供补丁。

  • bpo-43811: 在GitHub Actions上测试多个OpenSSL版本。使用ccache加速测试。

  • bpo-43791: OpenSSL 3.0.0:禁用对旧协议TLS 1.0和1.1的测试。测试因TLSV1_ALERT_INTERNAL_ERROR而失败。

构建

  • bpo-43567: 改进了Windows上生成的代码刷新(AST/tokens/opcodes/keywords)。

  • bpo-43669: 实现 PEP 644。Python现在需要OpenSSL 1.1.1或更新版本。

Windows

  • bpo-35306: 向 os.startfile() 函数添加额外的参数。

  • bpo-43538: 避免在传递无效文件名时从 pathlib.Path.exists() 引发错误。

  • bpo-38822: 修复了 os.stat() 在无法访问的目录(带有尾部斜杠)上失败的问题,而不是回退到父目录的元数据。这隐式影响了 os.path.exists()os.path.isdir()

  • bpo-26227: 修复了 socket.gethostbyaddr()socket.gethostbyname_ex() 中主机名的解码。

  • bpo-40432: 更新了Windows上的pegen再生脚本,以查找并使用Python 3.8或更高版本。在此之前,pegen再生已经需要3.8或更高版本,但脚本可能使用了较低版本的Python。

  • bpo-43745: 实际上将Windows版本更新到OpenSSL 1.1.1k。早期的版本被错误标记,实际上再次包含了1.1.1i。

  • bpo-43652: 在Windows安装程序中更新Tcl和Tk到8.6.11版本。

  • bpo-43492: 升级Windows安装程序以使用SQLite 3.35.5。

  • bpo-30555: 修复在存在文件描述符重定向时的 WindowsConsoleIO 错误。由Segev Finer提供补丁。

macOS

  • bpo-42119: 修复构建Python时对macOS SDK路径的检查。缩小搜索范围以匹配SDKs的内容,即仅包括 /System/Library/System/IOSSupport``和 ``/usr 中除 /usr/local 外的文件。之前,任何在 /System 下的内容都被假定为在SDK中,这在10.15+的新文件系统布局中会导致问题,因为用户文件系统可能看似挂载在 /System 下。/Library 中的路径也被错误地视为SDK位置。

  • bpo-43568: 放弃对MACOSX_DEPLOYMENT_TARGET < 10.3的支持

  • bpo-44009: 提供"python3.x-intel64"可执行文件,以便在Apple Silicon Mac上可靠地强制macOS universal2框架构建在Rosetta 2 Intel-64仿真下运行。这对于测试或当universal2 wheel尚不可用时非常有用。

  • bpo-43851: 在macOS上使用 SQLITE_OMIT_AUTOINIT 构建SQLite。由Erlend E. Aasland提供补丁。

  • bpo-43492: 更新macOS安装程序以使用SQLite 3.35.4。

  • bpo-42235: Mac/BuildScript/build-installer.py 现在在macOS 10.15或更高版本上构建时将使用"--enable-optimizations"和 --with-lto

IDLE

  • bpo-37903: 向shell侧边栏添加鼠标操作。左键点击和可选拖动选择一个或多个行,与编辑器行号侧边栏相同。选择后右键点击会弹出一个带有'copy with prompts'的上下文菜单。这将侧边栏的提示与所选文本的行压缩在一起。

  • bpo-43981: 修复test_sidebar和test_squeezer中的引用泄漏。由Terry Jan Reedy和Pablo Galindo提供补丁

  • bpo-37892: 使用空格而非制表符缩进IDLE Shell输入

  • bpo-43655: IDLE对话框窗口现在被macOS和X Window的窗口管理器识别为对话框。

  • bpo-37903: IDLE的shell现在在一个单独的侧边栏中显示提示。

C API

  • bpo-43916: 添加一个新的 Py_TPFLAGS_DISALLOW_INSTANTIATION 类型标志,以禁止创建类型实例。由Victor Stinner提供补丁。

  • bpo-43774: 移除现在未使用的 PYMALLOC_DEBUG 宏。如果Python是以调试模式构建的(如果定义了 Py_DEBUG 宏),现在默认安装内存分配器的调试钩子。此外,它们现在可以在发布模式的Python构建中使用(例如:使用 PYTHONMALLOC=debug 环境变量)。

  • bpo-43962: _PyInterpreterState_IDIncref() 现在调用 _PyInterpreterState_IDInitref() 并且总是增加 id_refcount。之前,调用 _xxsubinterpreters.get_current() 在 _xxsubinterpreters.InterpreterID 对象被释放时可能会创建一个 id_refcount 不一致。由Victor Stinner提供补丁。

  • bpo-28254: 添加新的C-API函数来控制垃圾收集器的状态:PyGC_Enable()PyGC_Disable()PyGC_IsEnabled(),对应于 gc 模块中的函数。

  • bpo-43908: 为不可变类型对象引入 Py_TPFLAGS_IMMUTABLETYPE 标志,并修改 PyType_Ready() 为静态类型设置它。由Erlend E. Aasland提供补丁。

  • bpo-43795: PyMem_Calloc() 现在在有限C API(Py_LIMITED_API)中可用。

  • bpo-43868: PyOS_ReadlineFunctionPointer() 不再由有限C API头文件和Windows上的 python3.dll 导出。像任何接受 FILE* 的函数一样,它不是稳定ABI的一部分。

  • bpo-43795: 稳定的ABI和有限API定义现在从一个中心清单生成(PEP 652)。

  • bpo-43753: 添加 Py_Is(x, y) 函数来测试 x 对象是否为 y 对象,等同于Python中的 x is y。还添加了 Py_IsNone()Py_IsTrue()Py_IsFalse() 函数来分别测试对象是否为 None 单例、True 单例或 False 单例。由Victor Stinner提供补丁。

Python 3.10.0 alpha 7

发布日期: 2021-04-05

安全性

  • bpo-42988: CVE 2021-3426: 移除 pydoc 模块的 getfile 功能,该功能可能被滥用来读取磁盘上的任意文件(目录遍历漏洞)。此外,即使是 Python 模块的源代码也可能包含敏感数据,如密码。漏洞由 David Schwörer 报告。

  • bpo-43285: ftplib 默认不再信任服务器响应 PASV 命令返回的 IP 地址值。这可以防止恶意 FTP 服务器利用响应探测客户端网络的 IPv4 地址和端口组合。

    需要之前易受攻击行为的代码可以在它们的 ftplib.FTP 实例上设置 trust_server_pasv_ipv4_address 属性为 True 以重新启用它。

  • bpo-43439: 为 gc.get_objects()gc.get_referrers()gc.get_referents() 添加审计钩子。由 Pablo Galindo 提供补丁。

核心与内置函数

  • bpo-27129: 更新 CPython 字节码魔法数字。

  • bpo-43672: 当调用 find_loader() 时,发出 ImportWarning。

  • bpo-43660: 修复在替换 sys.stderr 为一个可在打印异常时删除对象的可调用对象时发生的崩溃。由 Pablo Galindo 提供补丁。

  • bpo-27129: 字节码解释器内部使用指令偏移而非字节偏移。这减少了所需的 EXTENDED_ARG 指令数量并稍微简化了指令分发。

  • bpo-40645: 修复 _hashopenssl 扩展中的引用泄漏。由 Pablo Galindo 提供补丁。

  • bpo-42134: 导入系统对 find_module() 的调用现在会发出 ImportWarning。

  • bpo-41064: 改进了在 f-strings 中无效使用双星号元素('**')的语法错误提示。由 Pablo Galindo 提供补丁。

  • bpo-43575: 通过使用 PEP 590 vectorcall 调用约定,加速 map() 调用。由 Donghee Na 提供补丁。

  • bpo-42137: 导入系统现在更倾向于使用 __spec__ 而非 module_repr() 来进行 ModuleType.__repr__

  • bpo-43452: 对 _PyType_Lookup() 进行了微优化,以提高缓存命中的常见情况下的查找性能。

  • bpo-43555: 为无效的行继续字符报告 SyntaxError 的列偏移。由 Pablo Galindo 提供补丁。

  • bpo-43517: 修复了在使用 from pkg.mod import attr 时循环导入的错误检测,这导致了非平凡的多线程代码中的假阳性。

  • bpo-43497: 对带有元组常量的断言发出 SyntaxWarnings,这是在 python3.7 中引入的回归问题。

  • bpo-39316: 当属性位于对象的另一行时,跟踪现在具有正确的行号。改进了多行方法链的调试和分析。

  • bpo-35883: 如果命令行参数包含无效的 Unicode 字符,Python 不再在启动时以致命错误失败。Py_DecodeLocale() 函数现在会转义将被解码为 [U+0000; U+10ffff] 范围之外的 Unicode 字符的字节序列。

  • bpo-43410: 修复了一个在从标准输入读取输入时发出语法错误导致解析器崩溃的错误。由 Pablo Galindo 提供补丁。

  • bpo-43406: 修复了一个可能的竞态条件,其中 PyErr_CheckSignals 尝试执行非 Python 信号处理程序。

  • bpo-42128: 向 struct sequence objects 添加了 __match_args__。由 Pablo Galindo 提供补丁。

  • bpo-43390: CPython 现在在 PyOS_setsig 中为 VM 的默认信号处理程序设置了 SA_ONSTACK 标志。这对于扩展模块或嵌入使用可能引入的其他进程内代码(如 Golang 的 cgo)更为友好,其中小线程栈是常态,并且使用了 sigaltstack() 来为信号处理程序提供支持。对于绝大多数不使用 sigaltstack 的进程来说,这是一个无操作更改。

  • bpo-43287: 通过使用 PEP 590 vectorcall 调用约定,加快了对 filter() 的调用。由 Donghee Na 提供补丁。

  • bpo-37448:添加基于基数树的内存映射来跟踪使用中的obmalloc竞技场。用于替换旧的address_in_range()实现。基数树方法使得可以轻松将池大小增加到超过操作系统页面大小。增加池和竞技场大小使得obmalloc能够从其超快速路径处理显著更高比例的请求。

    它还有消除之前address_in_range()的内存不卫生行为的优势。旧的address_in_range()被标记为_Py_NO_SANITIZE_ADDRESS、_Py_NO_SANITIZE_THREAD和_Py_NO_SANITIZE_MEMORY注释。这些注释不再需要。

    要禁用基数树映射,设置如下预处理器标志:-DWITH_PYMALLOC_RADIX_TREE=0

    合著者:Tim Peters <tim.peters@gmail.com>

  • bpo-29988:仅在从调用返回或循环的后边缘时处理异步异常和请求放弃GIL。确保在with语句中总是调用 __exit__(),即使对于中断也是如此。

  • bpo-43720:记录imp、pkgutil和importlib.util中各种标准库的弃用,计划在Python 3.12中移除。

  • bpo-43433xmlrpc.client.ServerProxy 不再忽略服务器URL中的查询和片段。

  • bpo-31956array.arrayindex() 方法现在有可选的 start*和*stop 形参。

  • bpo-40066:Enum:调整 repr() 仅显示枚举和成员名称(不显示值,也不显示尖括号),``str()``仅显示成员名称。更新并改进文档以匹配。

  • bpo-42136:弃用importlib中找到的所有module_repr()方法,因为它们的使用将在Python 3.12中逐步淘汰。

  • bpo-35930:在“future”实例中引发的异常将创建引用循环。

  • bpo-41369:完成更新vendored libmpdec到版本2.5.1。由Stefan Krah提供补丁。

  • bpo-43422:恢复在问题编号`41324`中添加的_decimal C API。

  • bpo-43577: 修复了在使用 ssl.SSLContext 调试回调与 ssl.SSLContext.sni_callback() 时出现的死锁问题。

  • bpo-43571: 现在可以使用 IPPROTO_MPTCP 创建 MPTCP 套接字。

  • bpo-43542: image/heicimage/heif 已被添加到 mimetypes

  • bpo-40645: 当 digestmod 参数是哈希名称或内置哈希函数时,hmac 模块现在使用 OpenSSL 的 HMAC 实现。

  • bpo-43510: 实现了 PEP 597: 添加了 EncodingWarning 警告,-X warn_default_encoding 选项,PYTHONWARNDEFAULTENCODING 环境变量和 encoding="locale" 参数值。

  • bpo-43521: ast.unparse 现在可以渲染 NaNs 和空集。

  • bpo-42914: pprint.pprint() 新增了一个布尔型 underscore_numbers 可选参数,用于输出用下划线分隔千位的整数以提高可读性(例如 1_000_000 而不是 1000000)。

  • bpo-41361: 由于参数解析速度的提升,rotate() 调用现在稍微快一些。

  • bpo-43423: 在 Windows 上超时期间,当 stdout 或 stderr IO 缓冲区为空时,subprocess.communicate() 不再引发 IndexError。

  • bpo-27820: 修复了 smtplib.SMTP 的一个长期存在的 bug,即在 initial_response_ok=False 时进行 AUTH LOGIN 会失败。

    原因是 SMTP.auth_login _总是_ 在提供挑战字符串时返回密码,因此不符合 AUTH LOGIN 的标准。

    同时修复了 smtpd 的测试中的 bug。

  • bpo-43445: 将冻结模块添加到 sys.stdlib_module_names。例如,添加 "_frozen_importlib""_frozen_importlib_external" 名称。

  • bpo-43245: 向 ChainMap.new_child() 添加了关键字参数支持。

  • bpo-29982: 向 tempfile.TemporaryDirectory() 添加了可选参数 ignore_cleanup_errors,并允许多次 cleanup() 尝试。由 C.A.M. Gerlach 贡献。

  • bpo-43428: 包含来自 importlib_metadata 3.7 的更改:

    性能优化以改进发行版发现。

    entry_points 现在只返回唯一的发行版。

    引入了新的 EntryPoints 对象,用于包含一组入口点,并提供了便捷方法来按组或名称选择入口点。如果提供了选择参数,entry_points 现在会返回此对象,但为了兼容性,继续返回字典对象。鼓励用户依赖选择接口。字典对象的结果将来可能会被弃用。

    添加了 packages_distributions 函数,返回包到提供它们的发行版的映射。

  • bpo-43332: 通过 set_tunnel() 使用代理时,提高了 http.client 的网络效率。在连接设置过程中减少了小发送调用的次数。

  • bpo-43420: 提高 fractions.Fraction 对大组件的算术性能。由 Sergey B. Kirpichev 贡献。

  • bpo-43356: 允许传递信号编号给 _thread.interrupt_main()

  • bpo-43399: 修复 ElementTree.extend 在使用 Python 实现时不适用于迭代器的问题。

  • bpo-43369: 改进 sqlite3 错误处理:如果 sqlite3_column_text()sqlite3_column_blob() 设置 SQLITE_NOMEM,现在会引发 MemoryError。由 Erlend E. Aasland 提供补丁。

  • bpo-43368: 修复 PR 24562 引入的回归问题,其中在 sqlite3 中,空字节串被获取为 None 而不是 b''。由 Mariusz Felisiak 提供补丁。

  • bpo-41282: 修复了从 import distutils 发出的 DeprecationWarning 的堆栈级别。

  • bpo-42129: importlib.resources 现在尊重命名空间包,合并来自命名空间中每个位置的资源,如 importlib_resources 3.2 中引入的,包括通过 5.0.3 的附带更改。

  • bpo-43295: datetime.datetime.strptime() 现在在匹配 'z'%z 格式说明符时引发 ValueError 而不是 IndexError

  • bpo-43125: 如果 base64mime.body_encode 接收到空字节,返回空字符串。

  • bpo-43084: curses.window.enclose() 现在返回 TrueFalse (如文档所述) 而不是 10

  • bpo-42994: 为 opus、AAC、3gpp 和 3gpp2 添加 MIME 类型。

  • bpo-14678: 向 zipimport.zipimporter 类添加 invalidate_caches() 方法以支持 importlib.invalidate_caches()。由 Desmond Cheong 提供补丁。

  • bpo-42782: 在 shutil.move() 中快速失败,以避免在失败时创建目标目录。

  • bpo-40066: Enum 的 repr()str() 已更改:repr() 现在是 EnumClass.MemberName,而 str()MemberName。此外,标准库中 Enum 的内容可作为模块属性使用,例如 RegexFlag.IGNORECASE,其 repr()module.name,例如 re.IGNORECASE

  • bpo-26053: 修复了 pdb 交互式运行命令回显 shell 命令行参数的错误,即使这些参数已在 pdb 提示符下被覆盖。

  • bpo-24160: 修复了在 pdb 的交互模式下断点不跨多个调试会话持续的 bug。

  • bpo-40701: 当 tempfile.tempdir 全局变量设置为 bytes 类型的值时,现在会一致处理。以前在这种情况下,如果目录不存在,一些 tempfile API 可能会引发异常。同时确保 tempfile.gettempdir()tempfile.gettempdirb() 函数 总是 分别返回 strbytes

  • bpo-39342: 将 X509_V_FLAG_ALLOW_PROXY_CERTS 暴露为 VERIFY_ALLOW_PROXY_CERTS,以允许代理证书验证,如 https://docs.openssl.org/1.1.1/man7/proxy-certificates/ 所述。

  • bpo-31861: 添加 builtins.aiter 和 builtins.anext。由 Joshua Bronson (@jab)、Daniel Pope (@lordmauve) 和 Justin Wang (@justin39) 提供补丁。

文档

测试

  • bpo-37945: 修复 test_locale 的 test_getsetlocale_issue1813():如果 setlocale() 失败,跳过测试。由 Victor Stinner 提供补丁。

  • bpo-41561: 为 Ubuntu 自定义的 OpenSSL 安全级别策略添加变通方案。

构建

  • bpo-43179: 在优化字符串例程的对齐相关代码中引入并正确使用 ALIGNOF_X 代替 SIZEOF_X。补丁由 Jessica Clarke 提供。

  • bpo-43631: 将 macOS、Windows 和 CI 更新至 OpenSSL 1.1.1k。

  • bpo-43617: 改进 configure.ac:检查 autoconf-archive 包的存在并移除我们拷贝的 M4 宏。

  • bpo-43466: configure 脚本现在支持 --with-openssl-rpath 选项。

  • bpo-43372: 使用 _freeze_importlib__hello__ 模块生成代码。这种方法确保代码与解释器版本匹配。之前使用 PYTHON_FOR_REGEN 生成代码,可能是错误的。代码对象的 marshal 格式已随 bpo-42246,提交 877df851 更改。更新代码和 ctypes test_frozentable 中的预期代码大小。

Windows

  • bpo-43440: 构建启用了 R*Tree 模块的 sqlite3。补丁由 Erlend E. Aasland 提供。

IDLE

  • bpo-42225: 文档说明 IDLE 在 Unix 上可能因配置错误的 IP 伪装规则或无法显示复杂的彩色(非 ASCII)字符而失败。

C API

  • bpo-43688: 如果 Python 是以调试模式构建的(如果定义了 Py_DEBUG 宏),现在支持有限的 C API。在有限的 C API 中,如果 Python 是以调试模式构建的,并且 Py_LIMITED_API 宏的目标是 Python 3.10 或更新版本,Py_INCREF()Py_DECREF() 函数现在被实现为不透明的函数调用,而不是直接访问 PyObject.ob_refcnt 成员。之所以能够在调试模式下支持有限的 C API,是因为从 Python 3.8 开始,PyObject 结构在发布和调试模式下是相同的(见 bpo-36465)。

    --with-trace-refs 特殊构建(Py_TRACE_REFS 宏)中,仍然不支持有限的 C API。

    由Victor Stinner提供补丁。

  • bpo-43244: 移除 pyarena.h 头文件及其函数:

    • PyArena_New()

    • PyArena_Free()

    • PyArena_Malloc()

    • PyArena_AddPyObject()

    这些函数未被文档化,被排除在有限的 C API 之外,并且仅由编译器内部使用。由 Victor Stinner 提供补丁。

  • bpo-43244: 移除使用 struct _mod 类型的编译器和解析器函数,因为公共的 AST C API 已被移除:

    • PyAST_Compile()

    • PyAST_CompileEx()

    • PyAST_CompileObject()

    • PyFuture_FromAST()

    • PyFuture_FromASTObject()

    • PyParser_ASTFromFile()

    • PyParser_ASTFromFileObject()

    • PyParser_ASTFromFilename()

    • PyParser_ASTFromString()

    • PyParser_ASTFromStringObject()

    这些函数未被文档化,并且被排除在有限的 C API 之外。由 Victor Stinner 提供补丁。

  • bpo-43244: 移除 ast.hasdl.hPython-ast.h 头文件。这些函数未被文档化,并且被排除在有限的 C API 之外。这些头文件定义的大多数名称没有以 Py 为前缀,因此可能会造成名称冲突。例如,Python-ast.h 定义了一个 Yield 宏,与 Windows <winbase.h> 头文件中使用的 Yield 名称冲突。请使用 Python 的 ast 模块代替。由 Victor Stinner 提供补丁。

  • bpo-43541: 修复 PyEval_EvalCodeEx() 的回归问题:修正内置函数的引用计数。由 Victor Stinner 提供补丁。

  • bpo-43244: 移除 symtable.h 头文件及未文档化的函数:

    • PyST_GetScope()

    • PySymtable_Build()

    • PySymtable_BuildObject()

    • PySymtable_Free()

    • Py_SymtableString()

    • Py_SymtableStringObject()

    Py_SymtableString() 函数误为稳定版 ABI 却无法使用,因为 symtable.h 头文件不属于受限 C API。

    Python 的 symtable 模块仍然可用且未改变。

    由Victor Stinner提供补丁。

  • bpo-43244: 移除 PyAST_Validate() 函数。现在已无法通过公共C API构建AST对象(mod_ty 类型)。该函数已被排除在有限C API(PEP 384)之外。补丁由Victor Stinner提供。

Python 3.10.0 alpha 6

发布日期: 2021-03-01

安全性

  • bpo-42967: 通过默认将查询参数分隔符设置为 &,并允许用户选择自定义分隔符,修复了web缓存中毒漏洞。

核心与内置函数

  • bpo-43321: 修复了当 PyArg_Parse*()# 一起使用但未定义 PY_SSIZE_T_CLEAN 时引发的 SystemError

  • bpo-36346: 当使用 uZ 格式时,PyArg_Parse*() 函数现在会发出 DeprecationWarning。详情见 PEP 623

  • bpo-43277: 向C-API添加了一个新的 PySet_CheckExact() 函数,用于检查对象是否是 set 的实例而非子类型的实例。由Pablo Galindo提供补丁。

  • bpo-42990: 现在,如果 globals 字典中没有 "__builtins__" 键,types.FunctionType 构造函数会继承当前的builtins,而不是使用 {"None": None} 作为builtins:与 eval()exec() 函数的行为相同。在Python中使用 def function(...): ... 定义函数不受影响,无法通过此语法覆盖globals:它也会继承当前的builtins。由Victor Stinner提供补丁。

  • bpo-42990: 函数现在有一个新的 __builtins__ 属性,用于在执行函数时查找内置符号,而不是查找 __globals__['__builtins__']。由Mark Shannon和Victor Stinner提供补丁。

  • bpo-43149: 改进了解析器中对于没有括号的异常组的错误消息。由Pablo Galindo提供补丁。

  • bpo-43121: 修复了字面量中缺少逗号时的错误 SyntaxError 消息。由Pablo Galindo提供补丁。

  • 问题`42819`:在交互式解释器中明确禁用`readline`模块的括号粘贴功能,即使它在inputrc中被设置、默认启用(例如GNU Readline 8.1)或用户调用了 readline.read_init_file()。Python REPL尚未实现括号粘贴支持。此外,括号模式会将 "\x1b[?2004h" 转义序列写入stdout,导致不支持该功能的应用程序测试失败。用户仍可通过调用``readline.parse_and_bind("set enable-bracketed-paste on")``显式启用该功能。由Dustin Rodrigues提供补丁。

  • 问题`42808`:由于采用了 vectorcall 调用约定,现在对 type(object) 的简单调用更快了。补丁由Dennis Sweeney提供。

  • 问题`42217`:使编译器像已经对co_consts做的那样,合并模块中相同的co_code和co_linetable对象。

  • 问题`41972`:子字符串搜索函数如 str1 in str2str2.find(str1) 现在有时会使用"双向"字符串比较算法,以避免在长字符串上出现二次行为。

  • 问题`42128`:实现了PEP 634(结构化模式匹配)。由Brandt Bucher提供补丁。

  • 问题`40692`:在 concurrent.futures.ProcessPoolExecutor 中,验证 multiprocess.synchronize() 在给定平台上是否可用,并在 concurrent.futures 测试套件中依赖该检查,以便我们可以在这些平台上运行与 ProcessPoolExecutor 无关的测试。

  • 问题`38302`:如果 object.__ipow__() 返回 NotImplemented,操作符将如预期正确回退到 object.__pow__()object.__rpow__()

  • 问题`43316`:``python -m gzip``命令行应用程序现在在检测到不支持的扩展时会正确失败。它会以非零退出码退出,并向stderr打印错误消息。

  • 问题`43317`:将 gzip 模块主函数的块大小设置为io.DEFAULT_BUFFER_SIZE。这比之前使用的1024字节常量略快。

  • bpo-43146: 在 print_exception()format_exception() 的单参数版本中处理None。

  • bpo-43260: 修复在写入非常大的文本后,TextIOWrapper无法永远刷新内部缓冲区的问题。

  • bpo-43258: 防止在没有行匹配聚合查询时无谓地分配 sqlite3 聚合函数上下文。由Erlend E. Aasland提供补丁。

  • bpo-43251: 改进 sqlite3 错误处理:sqlite3_column_name() 失败现在会导致 MemoryError。由Erlend E. Aasland提供补丁。

  • bpo-40956: 修复在未提供参数时 sqlite3.Connection.backup() 中的段错误。该回归由PR 23838引入。由Erlend E. Aasland提供补丁。

  • bpo-43172: readline模块现在在直接针对libedit构建时通过其测试。基于libreadline与libedit使用的 readline.get_begidx()readline.get_endidx() 行为中现有的不可调和的API差异仍然存在。

  • bpo-43163: 修复 codeop 中的一个bug,该bug导致它在多行片段有未闭合的括号时不请求更多输入。由Pablo Galindo提供补丁。

  • bpo-43162: 弃用不支持的能力,即访问枚举成员作为其他枚举成员的属性。

  • bpo-43146: 修复 traceback 模块函数中None参数处理的最近回归。

  • bpo-43102: namedtuple __new__方法的__builtins__设置为None而不是实际的字典。这给内省工具带来了问题。

  • bpo-43106: 为macOS添加了 O_EVTONLYO_FSYNCO_SYMLINKO_NOFOLLOW_ANY。由Donghee Na提供补丁。

  • bpo-42960: 将FreeBSD的 resource.RLIMIT_KQUEUES 常量添加到 resource 模块。

  • bpo-42151: 使 xml.etree.ElementTree 的纯Python实现与C实现(_elementree)在默认属性值方面行为一致(通过不设置 specified_attributes=1)。

  • bpo-29753: 在ctypes中,现在正确计算了打包位字段,并且打包位字段的第一项现在正确地缩小了。

文档

  • bpo-27646: 澄清了'yield from <expr>'可以与任何可迭代对象一起使用,而不仅仅是迭代器。

  • bpo-36346: 更新了一些被标记为“将在4.0中移除”的不推荐使用的Unicode API,改为“3.12”。详见 PEP 623

测试

  • bpo-43288: 修复了test_importlib,如果文件系统不支持Unicode文件测试,则正确跳过。

构建

  • bpo-43174: Windows构建现在使用 /utf-8 编译器选项。

  • bpo-43103: 添加了一个新的配置选项 --without-static-libpython,用于不构建``libpythonMAJOR.MINOR.a``静态库且不安装 python.o 对象文件。

  • bpo-13501: 配置脚本现在可以使用命令行选项 --with-readline=editline 来使用 libedit 代替 readline

  • bpo-42603: 使配置脚本使用pkg-config来检测Tcl/Tk头文件和库的位置,用于构建tkinter。

    在macOS上,由pkg-config提供的Tcl/Tk配置将优先于安装在 /{System/,}Library/Frameworks 中的Tcl/Tk框架。如果两者都存在且后者优先,则需要明确设置适当的 --with-tcltk-* 配置选项。

  • bpo-39448: 添加了“regen-frozen”makefile目标,用于重新生成冻结的 __hello__ 模块的代码。

Windows

macOS

  • bpo-41837: 更新macOS安装程序构建以使用OpenSSL 1.1.1j。

IDLE

  • bpo-43283: 文档说明了为什么打印到IDLE的Shell通常比打印到系统终端慢,以及通过打印前预格式化单个字符串可以使其更快。

C API

Python 3.10.0 alpha 5

发布日期: 2021-02-02

安全性

核心与内置函数

  • bpo-42990: 重构 PyEval_ 系列函数。

    • 新增函数 _PyEval_Vector 以简化从C调用Python的过程。

    • ``_PyEval_EvalCodeWithName``已被移除

    • ``PyEval_EvalCodeEx``作为API的一部分被保留,但在内部未被使用

  • bpo-38631: 将编译器中的 Py_FatalError() 调用替换为常规的 SystemError 异常。由Victor Stinner提供补丁。

  • bpo-42997: 为块前缺少的":"改进错误信息。由Pablo Galindo提供补丁。

  • bpo-43017: 在解析器中使用未加括号的元组时改善了错误信息。由Pablo Galindo提供补丁。

  • bpo-42986: 修复了在报告包含换行符的f字符串中的语法错误时解析器崩溃的问题。由Pablo Galindo提供补丁。

  • bpo-40176: 现在,对于未终止的字符串字面量的语法错误会指向字符串的开始,而不是报告EOF/EOL。

  • bpo-42927: LOAD_ATTR 的内联缓存现在也优化了对通过 __slots__ 定义的属性的访问。这使得读取此类属性的速度提高了30%。

  • bpo-42864: 当括号未关闭时,改善了解析器中的错误信息。由Pablo Galindo提供补丁。

  • bpo-42924: 修复了 bytearray 重复错误地从缓冲区开始复制数据的问题,即使数据在缓冲区中偏移(例如,在将 bytearray 开始的切片重新分配给较短的字节字符串后)。

  • bpo-42882: 修复了 _PyUnicode_FromId() 函数(_Py_IDENTIFIER(var) API)在多次调用 Py_Initialize() / Py_Finalize() 时的问题:保留了``_PyRuntime.unicode_ids.next_index``值。

  • bpo-42827: 修复了在某些多行表达式中处理 SyntaxError 的错误行时崩溃的问题。

  • bpo-42823: 即使frame.f_trace被设置为True,frame.f_lineno也是正确的

  • bpo-37324: 从 collections 模块中移除了对 容器抽象基类 的废弃别名。

  • bpo-41994: 当 sys.modules``不是 ``dict 时,修复了 import 中可能的泄漏。

  • bpo-27772: 在字符串格式化中,在 width 字段前加 '0' 不再影响字符串的默认对齐方式。

  • bpo-43108: 修复了 curses 模块中的一个引用泄漏。由Pablo Galindo提供补丁

  • bpo-43077: 将捆绑的pip更新到21.0.1,setuptools更新到52.0.0。

  • bpo-41282: 在文档中弃用 distutils 并在导入时添加警告。

  • bpo-43014: 通过20-30%的性能提升改进了 tokenize。由Anthony Sottile提供补丁。

  • bpo-42323: 修复 AIX 上 math.nextafter() 对于 NaN 的处理。

  • bpo-42955: 添加 sys.stdlib_module_names,包含标准库模块名称的列表。由 Victor Stinner 提交补丁。

  • bpo-42944: 修复 random.Random.samplecounts 参数不为 None 时的问题。

  • bpo-42934: 在 TestResult 中使用 TracebackException 的新 compact 参数,以减少回溯格式化消耗的时间和内存。

  • bpo-42931: 将 randbytes() 添加到 random.__all__ 中。

  • bpo-38250: [Enum] 由单个位组成的标志现在被认为是规范的,并且将是唯一从 Flag 类或 Flag 成员的列表和迭代中返回的标志。多位标志被认为是别名;它们将从查找和操作中返回,这些操作导致了它们的值。Flag 和 Flag 成员的迭代都是按照定义顺序进行的。

  • bpo-42877: 向 traceback.TracebackException 的构造函数添加了 compact 参数,以减少仅需要调用 TracebackException.format()TracebackException.format_exception_only() 的使用情况下的时间和内存消耗。

  • bpo-42923: Py_FatalError() 函数和 faulthandler 模块现在会在致命错误时转储扩展模块列表。

  • bpo-42848: 从 TracebackException 中移除了递归,以允许其处理长的异常链。

  • bpo-42901: [Enum] 将成员创建从 EnumMeta.__new__ 移动到 _proto_member.__set_name__,允许成员在 __init_subclass__ 中被创建并可见。

  • bpo-42780: 修复 Linux 上 O_PATH 文件描述符的 os.set_inheritable()。

  • bpo-42866: 修复 CJK 编解码器的 getcodec() 函数中的一个引用泄漏。由 Victor Stinner 提交补丁。

  • bpo-42846: 将 6 个 CJK 编解码器扩展模块(_codecs_cn, _codecs_hk, _codecs_iso2022, _codecs_jp, _codecs_kr 和 _codecs_tw)转换为多阶段初始化 API (PEP 489)。由 Victor Stinner 提交补丁。

  • bpo-42851: 移除对枚举成员的 __init_subclass__ 支持

  • bpo-42834: 使 _json 模块的内部缓存与子解释器兼容

  • bpo-41748: 修复 HTMLParser 解析包含逗号和空格的元素属性的规则。补丁由 Karl Dubost 提供

  • bpo-40810: 要求 SQLite 3.7.15 或更新版本。由 Erlend E. Aasland 提供补丁

  • bpo-1635741: 将 _multibytecodec 扩展模块(CJK 编解码器)转换为多阶段初始化(PEP 489)。由 Erlend E. Aasland 提供补丁

  • bpo-42802: Python 3.8 中弃用的 distutils bdist_wininst 命令已被移除。现在推荐使用 distutils bdist_wheel 命令在 Windows 上分发二进制包

  • bpo-24464: 未记录的 built-in 函数 sqlite3.enable_shared_cache 现已弃用,计划在 Python 3.12 中移除。SQLite3 文档强烈反对使用该函数。由 Erlend E. Aasland 提供补丁

  • bpo-42384: 使 pdb 填充 sys.path[0] 的方式与常规 python 执行完全相同

  • bpo-42383: 修复 pdb:如果调试目标使用相对路径指定且当前目录发生变化,pdb 将无法重新启动调试目标的问题

  • bpo-42005: 修复 cProfileprofile 的 CLI 以捕获 BrokenPipeError

  • bpo-41604: 当 set_panel_userptr 失败时,不减少先前 user_ptr 的引用计数

  • bpo-41149: 允许执行传递给 Threading.thread 作为目标的可调用对象,即使其布尔值为 False。由 Barney Stratford 提供补丁

  • bpo-38307: 为 pyclbr 函数返回的树中出现的类和函数对象添加 'end_lineno' 属性。此属性与现有的 'lineno' 属性共同定义类和 def 语句的范围。由 Aviral Srivastava 提供补丁

  • bpo-39273: 现在如果可用,将 curses 模块中的 BUTTON5_* 常量暴露出来

  • bpo-33289: 修正对 tkinter.colorchooser 的调用,使其返回整型RGB三元组而非浮点数。由 Cheryl Sabella 提供补丁。

文档

  • bpo-40304: 修正 type(name, bases, dict) 的文档。由 Boris Verkhovskiy 和 Éric Araujo 提供补丁。

  • bpo-42811: 更新 importlib.util.resolve_name() 文档,使用 __spec__.parent 而非 __package__。(感谢 Yair Frid。)

测试

  • bpo-40823: 在 sqlite3 测试中使用 unittest.TestLoader().loadTestsFromTestCase() 而非 unittest.makeSuite()。补丁由 Erlend E. Aasland 提供。

  • bpo-40810: 在 sqlite3 中,为 SQLite 3.7.15 之前版本修复 CheckTraceCallbackContent

构建

  • bpo-43031: 将 --timeout=$(TESTTIMEOUT) 选项传递给默认配置文件任务 ./python -m test --pgo 命令。

  • bpo-36143: make regen-all 现在也会运行 regen-keyword。由 Victor Stinner 提供补丁。

  • bpo-42874: 在配置脚本的 tzpath 验证部分移除了 grep -q 和 -E 标志,以更好地适应某些平台(特别是 Solaris 10)的用户。

  • bpo-31904: 为 VxWorks 在 add_cross_compiling_paths() 中添加库搜索路径,由 wr-cc 提供。

  • bpo-42856: 向 ./configure 脚本添加 --with-wheel-pkg-dir=PATH 选项。如果指定,ensurepip 模块会在此目录中查找 setuptoolspip 轮包:如果两者都存在,则使用这些轮包而非 ensurepip 捆绑的轮包。

    某些 Linux 发行版的打包策略建议不要绑定依赖关系。比如 Fedora 在 /usr/share/python-wheels/ 目录下安装 wheel 包,而不安装 ensurepip._bundled 包。

Windows

  • bpo-41837: 更新 Windows 安装程序以包含 OpenSSL 1.1.1i。

  • bpo-42584: 升级 Windows 安装程序以使用 SQLite 3.34.0。

macOS

  • bpo-42504: 确保 sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') 的值始终为字符串,即使在值可解析为整数时也是如此。

IDLE

  • bpo-43008: 使 IDLE 在正常的双进程模式下调用 sys.excepthook()。由 Ken Hilton 提供补丁。

  • bpo-33065: 修复调试带有 __repr__ 方法的用户类时的问题。

  • bpo-23544: 当用户代码正在运行或调试器处于活动状态时,禁用 Debug=>Stack Viewer,以防止挂起或崩溃。由 Zackery Spytz 提供补丁。

  • bpo-32631: 完成zzdummy示例扩展模块:使菜单条目正常工作;添加文档字符串和覆盖率为100%的测试。

C API

  • bpo-42979: 当Python在调试模式下构建(带有C断言)时,调用类型槽如 sq_length``(Python中的 ``__len__())现在如果槽成功但设置了异常,或失败但未设置异常,会以致命错误失败。错误消息包含槽、类型名称和当前异常(如果设置了异常)。由Victor Stinner提供补丁。

  • bpo-43030: 修复了在带有符号 wchar_t 的平台上的 Py_UNICODE_ISSPACE() 中的编译器警告。

Python 3.10.0 alpha 4

发布日期: 2021-01-04

核心与内置函数

  • bpo-42814: 修复 Objects/genericaliasobject.c 中的未定义行为。

  • bpo-42806: 修复被括号包围的f-字符串 ast 节点和跨越多行节点的列偏移。由Pablo Galindo提供补丁。

  • bpo-40631: 修复回归,其中单个括号包围的星号表达式是有效的赋值目标。

  • bpo-27794: 改进对属性对象写入/删除失败的错误消息。在可能的情况下,现在会显示属性名称。由Yurii Karabas提供补丁。

  • bpo-42745: 使类型属性查找缓存为每个解释器。由Victor Stinner提供补丁。

  • bpo-42246: 当会破坏PEP 626时,不会消除跳转到跳转。

  • bpo-42246: 确保在引发或重新引发异常时,帧的 f_lastif_lineno 属性设置正确。PEP 626所需。

  • bpo-32381: 现在在传递给 -c 命令行选项的命令中忽略编码cookie(例如:# coding: latin1)。由Victor Stinner提供补丁。

  • bpo-30858: 改进包含赋值的表达式中的错误位置。由Pablo Galindo和Lysandros Nikolaou提供补丁。

  • bpo-42615: 删除由于删除不可达字节码块而变得冗余的跳转命令。

  • bpo-42639: 使 atexit 模块状态为每个解释器独立。现在可以安全地拥有多个 atexit 模块实例。由 Donghee Na 和 Victor Stinner 提供补丁。

  • bpo-32381: 修复在 Windows 上运行 .pyc 文件时的编码名称问题:PyRun_SimpleFileExFlags() 现在使用正确的编码来解码文件名。

  • bpo-42195: typing.Callablecollections.abc.Callable 的参数化泛型的 __args__ 现在保持一致。collections.abc.Callable__args__ 现在被扁平化,而 typing.Callable 的则保持不变。为了允许这一变化,types.GenericAlias 现在可以被继承,并且 collections.abc.Callable__class_getitem__ 现在会返回一个 types.GenericAlias 的子类。类型测试也被更新,不再继承像 Callable[..., T] 这样的东西,因为那不是有效的基类。最后,两个 Callable 都不再验证它们的 argtypes,在 Callable[[argtypes], resulttype] 中,为 PEP 612 做准备。由 Ken Jin 提供补丁。

  • bpo-40137: 将 functools 模块转换为使用 PyType_FromModuleAndSpec()

  • bpo-40077: 将 array 转换为使用堆类型,并为这些建立模块状态。

  • bpo-42008: 修复 _random.Random() 的种子设置。

  • bpo-1635741: 将 pyexpat 扩展模块移植到多阶段初始化(PEP 489)。

  • bpo-40521: 使内联字符串的 Unicode 字典与子解释器兼容。由 Victor Stinner 提供补丁。

  • bpo-39465: 使 _PyUnicode_FromId() 函数与子解释器兼容。每个解释器现在有一个标识符对象数组(从 UTF-8 解码的内联字符串)。由 Victor Stinner 提供补丁。

  • bpo-42257: 在 platform.libc_ver() 中处理变量可执行文件中的空字符串

  • bpo-42772: randrange() 现在在指定步长而没有停止参数时引发 TypeError。以前,它会默默地忽略步长参数。

  • bpo-42759: 修复了 tkinter.Variabletkinter.font.Font 的相等比较问题。现在,属于不同 Tcl 解释器的对象即使名称相同也会被视为不同。

  • bpo-42756: 当未明确提供超时时间时,配置 LMTP Unix 域套接字使用套接字全局默认超时。

  • bpo-23328: 允许在 _PROXY 环境变量的用户名和密码字段中使用 / 字符。

  • bpo-42740: typing.get_args()typing.get_origin() 现在支持 PEP 604 联合类型和 PEP 612Callable 的补充。

  • bpo-42655: subprocessextra_groups 现在正确地传递到 setgroups() 系统调用中。

  • bpo-42727: EnumMeta.__prepare__ 现在接受 **kwds 以正确支持 __init_subclass__

  • bpo-38308: 向 statistics.harmonic_mean() 添加了可选的 weights 参数。

  • bpo-42721: 当创建简单查询对话框 (tkinter.simpledialog)、消息框 (tkinter.messagebox) 或颜色选择对话框 (tkinter.colorchooser) 时,如果没有提供 masterparent 参数,且默认根窗口尚未创建,并且未调用 NoDefaultRoot(),将自动创建一个新的临时隐藏根窗口。它不会被设置为默认根窗口,并在对话框窗口关闭后立即销毁。这将有助于在不需要其他 GUI 的程序中使用这些简单对话框窗口。

  • bpo-25246: 优化了 collections.deque.remove()

  • bpo-35728: 向 tkinter.font.nametofont() 添加了一个 root 参数。

  • bpo-15303: tkinter 现在支持值为布尔 False 的小部件。

  • bpo-42681: 修复了 curses 中颜色和配对数字的范围检查。

  • bpo-42685: 改进了 Tkinter 中简单查询窗口(如 tkinter.simpledialog.askinteger())的放置位置。如果指定了父窗口并显示,则现在将窗口居中于父窗口的中心,否则居中于屏幕中心。

  • bpo-9694: Argparse 帮助不再使用令人困惑的短语“可选参数”,而是使用“选项”。

  • bpo-1635741: 将 _thread 扩展模块移植到多阶段初始化 API (PEP 489),并将其静态类型转换为堆类型。

  • bpo-37961: 修复 tracemalloc.Traceback.__repr__() 中的崩溃问题(在 Python 3.9 中回归)。

  • bpo-42630: 需要默认根窗口的 tkinter 函数和构造函数现在会引发带有描述性消息的 RuntimeError,而不是晦涩的 AttributeErrorNameError,如果它尚未创建或无法自动创建。

  • bpo-42639: atexit._run_exitfuncs() 现在使用 sys.unraisablehook 记录回调异常,而不是直接将它们记录到 sys.stderr 并引发最后一个异常。

  • bpo-42644: logging.disable 现在会验证其参数的类型和值。它还接受表示级别的字符串(如 logging.setLevel 所做的那样),而不仅仅是数值。

  • bpo-42639: 在 Python 退出时,如果使用 atexit.register() 注册的回调失败,现在会记录其异常。以前,只有一些异常被记录,最后一个异常总是被默默忽略。

  • bpo-36541: 修复了 lib2to3.pgen2 能够解析 PEP-570 仅位置参数语法的问题。

  • bpo-42382: 在 importlib.metadata 中: - EntryPoint 对象现在在从 Distribution 构造时公开一个 .dist 对象引用 Distribution。 - 添加了对包发现规则下的包发现的支持。 - 由 metadata() 返回的对象现在有一个正式定义的协议,称为 PackageMetadata,并声明支持 .get_all() 方法。 - 与 importlib_metadata 3.3 同步。

  • bpo-41877: 添加了对拼写错误的 autospect、auto_spec 和 set_spec 作为参数传递给 patch、patch.object 和 create_autospec 的检查。

  • bpo-39717: [tarfile] 更新嵌套异常抛出,使用 from Nonefrom e

  • bpo-41877: 对于模拟对象上疑似断言拼写错误的 AttributeError,现在会指出原因是拼写错误的断言,并说明如果拼写实际上是预期的属性名时应该怎么做。unittest.mock 文档也已更新,以反映当前识别出的拼写错误集合。

  • bpo-41559: 实现了 PEP 612:将 ParamSpecConcatenate 添加到 typing 模块。由 Ken Jin 提供补丁。

  • bpo-42385: StrEnum:修复 _generate_next_value_ 方法以返回字符串

  • bpo-31904: 为 VxWorks 定义 THREAD_STACK_SIZE。

  • bpo-34750: [Enum] 现在支持 _EnumDict.update() 方法。

  • bpo-42517: Enum:私有名称不会成为成员/不会生成错误——它们保持为普通属性

  • bpo-42678: Enum:在成员被添加后调用 __init_subclass__ 方法

  • bpo-28964: ast.literal_eval() 为格式错误的节点在错误消息中添加行号信息(如果可用)。

  • bpo-42470: random.sample() 不再对同时也是集合的序列发出警告。

  • bpo-31904: posixpath.expanduser() 如果用户主目录在 VxWorks 上为 None,则返回输入 path 不变。

  • bpo-42388: 修复 subprocess.check_output(..., input=None) 当 text=True 时的行为,使其与文档和 universal_newlines=True 的行为一致。

  • bpo-34463: 修复了 traceback 和解释器在格式化未设置 lineno 的 SyntaxError 时的不一致(traceback 被更改为匹配解释器)。

  • bpo-42393: 在 socket.ntohs()socket.htons() 中抛出 OverflowError 而不是静默截断。静默截断在 Python 3.7 中已被弃用。由 Erlend E. Aasland 提供补丁

  • bpo-42222: 统一 random.randrange() 的参数处理以匹配 range()

    • randrange() 中的整数测试和转换现在使用 operator.index()

    • randrange() 函数的非整数参数已被弃用。

    • ValueError 已被弃用,改为使用 TypeError

    • 现在它比以前运行得更快一些。

    (由 Raymond Hettinger 和 Serhiy Storchaka 贡献。)

  • bpo-42163: 恢复 uname_result 在 deepcopy 和 _replace 时的兼容性。

  • bpo-42090: zipfile.Path.joinpath 现在接受任意参数,与 pathlib.Path.joinpath 相同。

  • bpo-1635741: 将 _csv 模块移植到多阶段初始化 API (PEP 489)。

  • bpo-42059: 使用替代调用样式语法创建的 typing.TypedDict 类型现在在设置其 __required_keys____optional_keys__ 类属性时正确尊重 total 关键字参数。

  • bpo-41960: 向 inspect.signature()inspect.Signature.from_callable() 添加 globalnslocalns 参数。

  • bpo-41907: 修复 IntFlagformat() 行为

  • bpo-41891: 确保 asyncio.wait_for 等待任务完成

  • bpo-24792: 修复了 zipimporter 有时报告导入错误错误原因的 bug。

  • bpo-31904: 为没有主目录的 VxWorks RTOS 修复 site 和 sysconfig 模块。

  • bpo-41462: 为 VxWorks RTOS 添加 os.set_blocking() 支持。

  • bpo-40219: 降低 tkinter.ttk.LabeledScale 虚拟小部件以防止隐藏部分内容标签。

  • bpo-37193: 修复了 Python 3.7 中引入的 socketserver.ThreadingMixIn 内存泄漏。

  • bpo-39068: 修复 base64a85encode()b85encode() 的初始化竞争条件。由 Brandon Stansbury 提供补丁。

文档

测试

  • bpo-42794: 更新 test_nntplib 以使用 news.aioe.org 的官方组名进行测试。由 Donghee Na 提供补丁。

  • bpo-31904: 在 VxWorks 上跳过一些 asyncio 测试。

  • bpo-42641: 增强 test_select.test_select():现在只需500毫秒而非10秒。使用Python而非shell使测试更具可移植性。

  • bpo-31904: 在VxWorks上跳过 _test_all_chown_common() 中的一些测试。

  • bpo-42199: 修复字节码助手 assertNotInBytecode。

  • bpo-41443: 在 test_posix.py 中添加更多属性检查。

  • bpo-31904: 在VxWorks上禁用 os.popen 和受影响的测试。

  • bpo-41439: 将 test_ssl 和 test_uuid 移植到VxWorks RTOS。

构建

  • bpo-42692: 修复旧编译器上的 __builtin_available 检查。由Joshua Root提供补丁。

  • bpo-27640: 向 configure 脚本添加 --disable-test-modules 选项:不构建也不安装测试模块。由Xavier de Gaye、Thomas Petazzoni和Peixing Xin提供补丁。

  • bpo-42604: 现在所有平台都使用基于SOABI的"EXT_SUFFIX"构建变量值(例如在freeBSD中,"EXT_SUFFIX"现在是".cpython-310d.so"而非".so")。之前只有Linux、Mac和VxWorks使用的"EXT_SUFFIX"值包含"SOABI"。

  • bpo-42598: 修复configure中的隐式函数声明,这可能导致错误的配置检查。由Joshua Root提供补丁。

  • bpo-31904: 为VxWorks启用 libpython3.so。

  • bpo-29076: 向macOS安装程序添加fish shell支持。

macOS

  • bpo-42361: 更新macOS安装程序构建以使用Tcl/Tk 8.6.11(rc2,预计为最终版本)。

  • bpo-41837: 更新macOS安装程序构建以使用OpenSSL 1.1.1i。

  • bpo-42584: 更新macOS安装程序以使用SQLite 3.34.0。

工具/示例

  • bpo-42726: 修复了Python 3与gdb/libpython.py处理属性字典时的兼容性问题。

  • bpo-42613: 修复 freeze.py 工具以使用正确的配置和库目录。补丁由Victor Stinner提供。

C API

  • bpo-42591: 导出 Py_FrozenMain() 函数:修复Python 3.9.0的回归问题。Python 3.9使用 -fvisibility=hidden 并且该函数未被显式导出,因此未被导出。

  • bpo-32381: 移除不再需要的私有函数 _Py_fopen()。改用 _Py_wfopen()_Py_fopen_obj()。由 Victor Stinner 提交补丁。

  • bpo-1635741: 将 resource 扩展模块移植到模块状态

  • bpo-42111: 更新 xxlimited 模块,使其成为如何使用有限 C API 的更好示例。

  • bpo-40052: 修复函数 PyVectorcall_Function() 中的对齐构建警告/错误。补丁由 Andreas Schneider、Antoine Pitrou 和 Petr Viktorin 提交。

Python 3.10.0 alpha 3

发布日期: 2020-12-07

安全性

  • bpo-40791: 在 hmac.compare_digest 中为累加器变量添加 volatile,减少破坏恒定时间优化的可能性。

核心与内置函数

  • bpo-42576: types.GenericAlias 现在会在尝试使用关键字参数初始化时引发 TypeError。之前,如果解释器编译时包含调试符号,这将导致解释器崩溃。这不影响为发布编译的解释器。补丁由 Ken Jin 提交。

  • bpo-42536: 现在,几个内置和标准库类型确保它们的内部结果元组总是被 垃圾收集器 跟踪:

    之前,它们可能会被前一次垃圾回收取消追踪。 由 Brandt Bucher 提供补丁。

  • bpo-42500: 改进递归限制附近的异常处理。将一些致命错误转换为 RecursionErrors。

  • bpo-42246: PEP 626: 在返回后,帧的 f_lineno 属性总是最后执行的行。

  • bpo-42435: 当指定选项 -b 时,加快 bytes 对象与非 bytes 对象的比较速度。加快 bytearray 对象与非缓冲对象的比较速度。

  • bpo-1635741: 将 _warnings 扩展模块移植到多阶段初始化 API (PEP 489)。补丁由 Victor Stinner 提交。

  • bpo-41686: 在 Windows 上,即使 Python 配置为不安装信号处理程序(如果 PyConfig.install_signal_handlers 等于 0,或 Py_InitializeEx(0)),现在也会创建 SIGINT 事件 _PyOS_SigintEvent()

  • bpo-42381: 根据PEP 572,允许在集合字面量和集合推导式中使用赋值表达式。由Pablo Galindo提供补丁。

  • bpo-42202: 将函数参数注解的内部表示更改为字符串元组。由Yurii Karabas提供补丁。

  • bpo-42374: 修复了新解析器引入的一个回归问题,即在生成器表达式中不允许使用未加括号的海象运算符。

  • bpo-42316: 允许在下标索引中使用未加括号的海象运算符。

  • bpo-42349: 确保编译器前端产生格式良好的控制流图。在编译器后端更加积极,因为现在这样做是安全的。

  • bpo-42296: 在Windows上,修复了信号处理中的一个回归问题,该问题阻止了使用CTRL+C中断程序。信号处理程序可以在与Python线程不同的线程中运行,在这种情况下,判断线程是否可以处理信号的测试是错误的。

  • bpo-42332: types.GenericAlias 对象现在可以作为弱引用的目标。

  • bpo-42282: 优化作为命名表达式一部分出现的常量子表达式(之前AST优化器没有深入到命名表达式中)。由Nick Coghlan提供补丁。

  • bpo-42266: 修复了LOAD_ATTR操作码缓存的一个错误,该错误没有尊重将一个类级别属性猴子补丁为描述符。由Pablo Galindo提供补丁。

  • bpo-40077: 将 queue 转换为使用堆类型。

  • bpo-42246: 提高了行跟踪事件和Frame对象的f_lineno属性的准确性。详见PEP 626。

  • bpo-40077: 将 mmap 转换为使用堆类型。

  • bpo-42233: 允许 GenericAlias 对象使用 union type expressions。这使得像 list[int] | dict[float, str] 这样的表达式成为可能,而之前会抛出 TypeError。这也修复了联合类型表达式未去重 GenericAlias 对象的问题。(由Ken Jin在 bpo-42233 中贡献。)

  • bpo-26131: 当导入系统回退到使用 load_module() 时,会触发 ImportWarning

  • bpo-5054: CGIHTTPRequestHandler.run_cgi() 中 HTTP_ACCEPT 解析不当。用通用的 get_all 方法替换特殊用途的 getallmatchingheaders,并添加相关测试。

    原始由 Martin Panter 提供补丁,由 Senthil Kumaran 修改。

  • bpo-42562: 修复了当 dis 无法解析没有行号的函数时的问题。由 Yurii Karabas 提供补丁。

  • bpo-17735: inspect.findsource() 现在在代码对象的 co_lineno 大于文件长度时,会引发 OSError 而不是 IndexError。例如,当文件在导入后被编辑时可能会发生此情况。PR 由 Irit Katriel 提供。

  • bpo-42116: 修复了 inspect.getsource() 处理尾部注释的问题。

  • bpo-42532: 当向 Mock 传递 spec_arg 参数时,移除了对 __bool__ 的意外调用。

  • bpo-38200: 添加了 itertools.pairwise()

  • bpo-41818: 修复了 test_master_read(),使其在所有平台上都能成功,这些平台在从主设备读取时要么引发 OSError,要么返回 b""。

  • bpo-42487: ChainMap.__iter__ 不再调用底层映射的 __getitem__

  • bpo-42482: TracebackException 不再持有对异常回溯对象的引用。因此,对于等效但不相等的异常,TracebackException 的实例现在比较为相等。

  • bpo-41818: 使 test_openpty() 避免由于行数和/或列数 == 0 而导致的意外成功。

  • bpo-42392: 从 asyncio.subprocessasyncio.tasks 函数中移除 loop 参数。补丁由 Yurii Karabas 提供。

  • bpo-42392: 从 asyncio.open_connectionasyncio.start_server 函数中移除 loop 参数。由 Yurii Karabas 提供补丁。

  • bpo-28468: 添加了 platform.freedesktop_os_release() 函数以解析 freedesktop.org 的 os-release 文件。

  • bpo-42299: Removed the formatter module, which was deprecated in Python 3.4. It is somewhat obsolete, little used, and not tested. It was originally scheduled to be removed in Python 3.6, but such removals were delayed until after Python 2.7 EOL. Existing users should copy whatever classes they use into their code. Patch by Donghee Na and Terry J. Reedy.

  • bpo-26131: 弃用zipimport.zipimporter.load_module(),推荐使用exec_module()。

  • bpo-41818: 更新了pty库的测试。test_basic()已改为test_openpty();此外还检查了slave termios和slave winsize是否被pty.openpty()正确设置。为了增加对FreeBSD、NetBSD、OpenBSD和Darwin的支持,还增加了test_master_read(),演示了pty.spawn()不应依赖于OSError从其复制循环中退出。

  • bpo-42392: 从所有 asyncio.locks``和 ``asyncio.Queue 类的 __init__ 中移除loop参数。由Yurii Karabas提供补丁。

  • bpo-15450: 使 filecmp.dircmp 尊重子类化。现在 filecmp.dircmp.subdirs 在子类化dircmp时的行为符合预期。

  • bpo-42413: 异常 socket.timeout 现在是 TimeoutError 的别名。

  • bpo-31904: 在VxWorks上支持signal模块。

  • bpo-42406: 我们修复了 pickle.whichmodule 中的一个问题,其中导入 ``multiprocessing``可能会改变pickle如何识别对象属于哪个模块,潜在地破坏这些对象的unpickling。

  • bpo-42403: 简化 importlib 外部引导代码:importlib._bootstrap_external 现在使用常规导入来导入内置模块。当它被导入时,内置的 __import__() 函数已经完全可以工作,因此可以用来导入如 sys 这样的内置模块。由Victor Stinner提供补丁。

  • bpo-1635741: 将_sre模块类型转换为堆类型(PEP 384)。由Erlend E. Aasland提供补丁。

  • bpo-42375: subprocess 模块更新以支持 DragonFlyBSD。

  • bpo-41713: 将 _signal 扩展模块移植到多阶段初始化 API (PEP 489)。由 Victor Stinner 和 Mohamed Koubaa 提供补丁。

  • bpo-37205: time.time()time.perf_counter()time.monotonic() 函数不再因 Python 致命错误而失败,而是在失败时引发常规的 Python 异常。

  • bpo-42328: 修复了 tkinter.ttk.Style.map()。该函数现在接受默认状态的表示为空序列(由 Style.map() 返回)。结果的结构现在在所有平台上都是相同的,不依赖于 wantobjects 的值。

  • bpo-42345: 修复了 typing.Literal 参数处理中的各种问题(扁平化、去重、使用类型缓存键)。由 Yurii Karabas 提供补丁。

  • bpo-37205: Windows 上的 time.perf_counter() 和 macOS 上的 time.monotonic() 现在是系统范围的。以前,它们使用启动时计算的偏移量来减少由浮点类型引起的精度损失。使用 Python 3.7 中添加的 time.perf_counter_ns()time.monotonic_ns() 来避免这种精度损失。

  • bpo-42318: 在 macOS 上修复了 tkinter 中对非 BMP 字符的支持。

  • bpo-42350: 修复了 threading.Thread 类在 fork 时的问题:如果线程已经停止(例如:在 Python 退出时调用 fork),则不执行任何操作。以前,在子进程中会记录一个错误。

  • bpo-42333: 将 _ssl 扩展模块移植到堆类型。

  • bpo-42014: 现在,当 os.open 失败时,shutil.rmtreeonerror 回调会接收到正确的函数。

  • bpo-42237: 在 illumos 上修复了 os.sendfile()

  • bpo-42308: 添加 threading.__excepthook__ 以允许在 threading.excepthook() 被设置为损坏或不同的值时检索其原始值。由 Mario Corchero 提供补丁。

  • bpo-42131: 在 zipimport.zipimporter 上实现 PEP 451/规范方法:find_spec()、create_module() 和 exec_module()。

    这也允许了对find_loader()、find_module()和load_module()的文档化弃用。

  • bpo-41877:非不安全的Mock对象现在如果访问带有前缀asert、aseert或assrt的属性,将引发AttributeError,此外,对于前缀assert或assret,这种情况已经发生。

  • bpo-42264``sqlite3.OptimizedUnicode``自Python 3.3起已无文档且过时,当时它被设为 str 的别名。现在它已被弃用,计划在Python 3.12中移除。

  • bpo-42251:添加了 threading.gettrace()threading.getprofile() 以分别获取由 threading.settrace()threading.setprofile() 设置的函数。由Mario Corchero提供的补丁。

  • bpo-42249:修复了写入大于4 GiB的二进制Plist文件的问题。

  • bpo-42236:在Unix上,如果启用了 Python UTF-8模式os.device_encoding() 函数现在返回 'UTF-8' 而不是设备编码。

  • bpo-41754:webbrowser:调用 xdg-settings 时忽略*NotADirectoryError*。

  • bpo-42183:修复了asyncio任务或Future的repr()导致的堆栈溢出错误。

    在 Task 或 Future 递归返回自身的情形下会导致栈溢出。

  • bpo-42140:改进asyncio.wait函数,使其仅创建一次futures集合。

  • bpo-42133:更新标准库中的各个模块,以便在模块上未定义 __loader__ 时回退到``__spec__.loader``。

  • bpo-26131:现在在 importlib 中找到的 load_module() 方法会触发``DeprecationWarning``。

  • bpo-39825:Windows:将 sysconfig.get_config_var('EXT_SUFFIX') 更改为预期的完整``platform_tag.extension``格式。之前它被硬编码为 .pyd,现在它与 distutils.sysconfig``兼容,将产生类似 ``.cp38-win_amd64.pyd 的结果。这使Windows与其他平台一致。

  • bpo-26389: traceback.format_exception()traceback.format_exception_only()traceback.print_exception() 函数现在可以接受异常对象作为仅位置参数。

  • bpo-41889: Enum: 修复涉及继承多重继承枚举的回归问题

  • bpo-41861: 将 sqlite3 转换为使用堆类型(PEP 384)。由Erlend E. Aasland提供补丁。

  • bpo-40624: 在xml.etree中增加了对XPath != 操作符的支持

  • bpo-28850: 修复 pprint.PrettyPrinter.format() 对小容器内容的覆盖被忽略的问题。pprint._safe_repr() 函数已被移除。

  • bpo-41625: 将 splice() 作为 os.splice() 暴露在 os 模块中。由Pablo Galindo提供补丁。

  • bpo-34215: 当 expectedNone 时,澄清 asyncio.IncompleteReadError 的错误消息。

  • bpo-41543: 为contextlib.nullcontext添加异步上下文管理器支持。

  • bpo-21041: pathlib.PurePath.parents 现在支持负索引。补丁由Yaroslav Pankovych贡献。

  • bpo-41332: 向 asyncio.AbstractEventLoop 添加了缺失的connect_accepted_socket()方法。

  • bpo-12800: 从tarball中提取符号链接应该成功,并在符号链接已存在时覆盖它。修复方法是在提取前移除现有的文件或符号链接。基于Chris AtLee、Jeffrey Kintscher和Senthil Kumaran的补丁。

  • bpo-40968: urllib.requesthttp.client 现在在没有提供自定义上下文时,在TLS握手期间发送 http/1.1 ALPN扩展。

  • bpo-41001: 添加 os.eventfd() 以提供Linux事件通知文件描述符的低级接口。

  • bpo-40816: 向contextlib添加AsyncContextDecorator以支持异步上下文管理器作为装饰器。

  • bpo-40550: 修复subprocess.Popen.send_signal中的检查时间/动作时间问题。

  • bpo-39411: 向 pyclbrFunction 对象添加一个 is_async 标识符。由Batuhan Taskaya提供补丁。

  • bpo-35498: 为 pathlib.PurePath.parents 添加切片支持。

文档

  • bpo-42238: 尝试通过首先从CI和文档构建中移除 make suspicious 来弃用它,但仍保留供手动使用。

  • bpo-42153: 修复IMAP协议文档的URL。

  • bpo-41028: 语言和版本切换器之前由每个cpython分支维护,现在由docsbuild-script处理。

测试

  • bpo-41473: 在gdb 9.2及更新版本上重新启用test_gdb:https://bugzilla.redhat.com/show_bug.cgi?id=1866884 在gdb 10.1中修复。

  • bpo-42553: 修复 test_asyncio.test_call_later() 的竞争条件:不在 call_later() 单元测试中测量asyncio性能。测试在CI上随机失败。

  • bpo-31904: 在VxWorks上修复test_netrc:使用temp_cwd()创建临时目录。

  • bpo-31904: 在VxWorks上跳过test_getaddrinfo_ipv6_scopeid_symbolic和test_getnameinfo_ipv6_scopeid_symbolic。

  • bpo-31904: 在VxWorks上跳过test_test的test_mailcap。

  • bpo-31904: 为test_pipes添加shell要求。

  • bpo-31904: 在VxWorks上跳过一些与fifo相关的测试。

  • bpo-31904: 修复VxWorks的test_doctest.py失败。

  • bpo-40754: 在Windows安装程序中包含 _testinternalcapi 模块用于测试套件。

  • bpo-41561: test_ssl:当TLS 1.0不可用时跳过test_min_max_version_mismatch。

  • bpo-31904: 修复VxWorks RTOS的os模块失败。

  • bpo-31904: 修复VxWorks RTOS的fifo测试用例。

构建

  • bpo-31904: 为VxWorks的detect_socket()移除libnet依赖。

  • bpo-42398: 当使用make -jN选项并行运行作业时,修复"make regen-all"中的竞争条件。clinic.py脚本现在仅使用原子写入来写入文件。此外,如果内容未更改,则生成的文件现在保持不变,以不更改文件修改时间。

  • bpo-41617: 修复在旧版 clang(如 Mac OS X 10.7 上的 Xcode 4.6.3)没有 __builtin_bswap16() 时构建 pycore_bitutils.h 内部头文件的问题。由 Joshua Root 和 Victor Stinner 提供补丁。

  • bpo-38823: 现在没有 wchar_t 类型就无法构建 _ctypes 扩展模块:移除了 CTYPES_UNICODE 宏。无论如何,构建 Python 需要 wchar_t 类型。由 Victor Stinner 提供补丁。

  • bpo-42087: 移除了对 AIX 5.3 及以下版本的支持。参见 bpo-40680

  • bpo-40998: 解决了未定义行为消毒器(ubsan)发现的三个编译器警告。

Windows

  • bpo-42120: 移除了头文件中 copysign (到 _copysign) 的宏定义。

  • bpo-38506: Windows 启动器现在在列出已安装的 Python 版本时正确处理 Python 3.10。

macOS

  • bpo-42504: 修复了在 MACOSX_DEPLOYMENT_TARGET=11 时在 macOS Big Sur 上的构建问题。

  • bpo-41116: 确保 distutils.unixxcompiler.find_library_file 可以在 macOS 11 上找到系统提供的库。

  • bpo-41100: 添加了对 macOS 11 和 Apple Silicon 系统的支持。

    现在可以使用 "--enable-universalsdk --with-universal-archs=universal2" 构建 "Universal 2" 二进制文件。

    当使用正确的部署目标时,可以在较旧的 macOS 版本(测试到 macOS 10.9)上部署在较新的 macOS 版本上构建的二进制文件。这是使用 Xcode 11 及更高版本测试的。

  • bpo-42232: 向 mmap 模块添加了 Darwin 特定的 madvise 选项。

  • bpo-38443: 配置脚本的 --enable-universalsdk--with-universal-archs 选项现在检查指定的架构是否可以使用。

IDLE

  • bpo-42508: 保持 IDLE 在 macOS 上运行。移除在使用 macOS 11 上构建的新 universal2 安装程序时阻止使用快捷方式运行文件的过时解决方法。

  • bpo-42426: 修复了在搜索引擎中报告 RE 错误的偏移量。

  • bpo-42415: 通过使用 inspect.getdoc 更频繁地获取 IDLE 调用提示的文档字符串。

工具/示例

  • bpo-42212: smelly.py 脚本现在不仅检查 Python 静态库,还会检查 Python 动态库和扩展模块。同时使脚本输出更详细:解释其功能。

  • bpo-36310: 允许 Tools/i18n/pygettext.py 检测 f-strings 中对 gettext 的调用。

C API

Python 3.10.0 alpha 2

发布日期: 2020-11-03

安全性

  • bpo-42103: 防止了处理格式错误的二进制格式Apple属性列表文件时可能通过CPU和RAM耗尽导致的DoS攻击。

  • bpo-42051: plistlib 模块不再接受XML plist文件中的实体声明,以避免XML漏洞。这对用户应该没有影响,因为实体声明在常规的plist文件中并未使用。

核心与内置函数

  • bpo-42236: 如果 nl_langinfo(CODESET) 函数返回空字符串,Python现在使用UTF-8作为文件系统编码。由 Victor Stinner 提供补丁。

  • bpo-42218: 修复了PEG解析器中导致调试模式下崩溃的一个错误。现在在左递归规则中检查错误,以避免这些错误未能及时处理并在其他地方表现为长距离崩溃的情况。

  • bpo-42214: 修复了在 barry_as_flufl 规则中检查 '!=' 标记时PEG解析器可能崩溃的问题。由 Pablo Galindo 提供补丁。

  • bpo-42206: 在解析器中传播并引发由 PyAST_Validate() 引起的错误。

  • bpo-41796: ast 模块的内部状态现在是每个解释器独立的。补丁由 Victor Stinner 提供。

  • bpo-42143: 修复了在创建 PyFunctionObject 过程中错误处理的问题,该问题导致了对未初始化内存的操作。由 Yonatan Goldschmidt 提供补丁。

  • bpo-41659: 修复解析器中的一个错误,其中在 primary 后跟随一个大括号时未立即失败。这导致像 a {b} 这样的无效表达式抛出 SyntaxError 时带有错误的偏移量,或者像 a { 这样以大括号结尾的无效表达式在 REPL 中未立即失败。

  • bpo-42150: 修复新解析器在检查续行时可能出现的缓冲区溢出。由 Pablo Galindo 提供补丁。

  • bpo-42123: 运行解析器两次。第一次运行时,禁用所有仅生成更好错误消息的规则以提高性能。如果解析失败,则第二次运行时启用这些规则。

  • bpo-42093: LOAD_ATTR 指令现在使用新的“每个操作码缓存”机制,速度提高了约 36%。补丁由 Pablo Galindo 和 Yury Selivanov 提供。

  • bpo-42030: 移除了对旧版 AIX 特定共享库加载的支持。自 4.3 版本以来,所有 AIX 版本都支持并默认使用通用的 Unix 机制。

  • bpo-41984: 垃圾收集器现在跟踪所有用户定义的类。由 Brandt Bucher 提供补丁。

  • bpo-41993: 修复了在导入失败时从 sys.modules 中删除未完全初始化的模块可能引发的问题。

  • bpo-41979: PEG 解析器现在允许在 with 项目的目标中使用星号解包。

  • bpo-41974: 移除了 complex 类的特殊方法 __int__, __float__, __floordiv__, __mod__, __divmod__, __rfloordiv__, __rmod____rdivmod__。这些方法总是抛出 TypeError

  • bpo-41902: 在计算 rangesq_itemmp_subscript 时进行了微优化。由 Donghee Na 提供补丁。

  • bpo-41894: 在加载本地模块并且加载失败时,防止在不使用 UTF-8 语言环境运行时可能出现的 UnicodeDecodeError,通过使用当前语言环境的编码解码加载错误消息。

  • bpo-41902: 如果步长为1,对range.index进行微优化。由Donghee Na提供补丁。

  • bpo-41435: 添加 sys._current_exceptions() 函数,用于检索一个字典,该字典将每个线程的标识符映射到调用该函数时该线程中当前活动的顶层异常。

  • bpo-38605: 默认启用 from __future__ import annotations (PEP 563)。现在 __annotations__ 字典中的值是字符串,例如 {"x": "int"} 而不是``{"x": int}``。

  • bpo-35455: 在Solaris上,thread_time() 现在通过 gethrvtime() 实现,因为``clock_gettime(CLOCK_THREAD_CPUTIME_ID)``并不总是可用。由Jakub Kulik提供补丁。

  • bpo-42233:对于包含 Generic Alias Typestyping 类型,其 repr() 表示形式此前不会在 GenericAlias 中显示参数化类型。现在这一行为已调整为会显示参数化类型。

  • bpo-29566: binhex.binhex() 一致地写入macOS 9行结束符。

  • bpo-26789: logging.FileHandler 类现在保留对内置 open() 函数的引用,以便在Python终止期间能够打开或重新打开文件。修复如 NameError: name 'open' is not defined 的错误。由Victor Stinner提供补丁。

  • bpo-42157: 移除了 unicodedata.ucnhash_CAPI 属性,这是一个内部的PyCapsule对象。相关的私有 _PyUnicode_Name_CAPI 结构被移动到内部C API。由Victor Stinner提供补丁。

  • bpo-42157: 将 unicodedata 扩展模块转换为多阶段初始化API (PEP 489),并将``unicodedata.UCD``静态类型转换为堆类型。由Mohamed Koubaa和Victor Stinner提供补丁。

  • bpo-42146: 修复 subprocess.Popen()user``(``group, extra_groups)中指定的uid(gid)溢出 uid_t``(``gid_t)时的内存泄漏问题。

  • bpo-42103: InvalidFileExceptionRecursionError 现在是加载损坏的二进制 Plist 文件时仅会引发的错误(在之前的一些特定情况下可能会引发 ValueError 和 TypeError)。

  • bpo-41490: 在 importlib.resources 中,.path 方法更加积极地提前释放对 zipfile 对象的句柄,使得像 certifi 这样的用例可以在保持上下文打开的同时删除底层的 zip 文件。

  • bpo-41052: 现在,使用协议 0 和 1 对 C 中实现的堆类型进行 Pickle 操作会引发错误,而不是产生不正确的数据。

  • bpo-42089: 在 importlib.metadata.PackageNotFoundError 中,引用缺失的包元数据以改善用户体验。

  • bpo-41491: plistlib: 修复解析带有十六进制整数值的 XML plists 的问题

  • bpo-42065: 修复了当使用一个超出有效 Unicode 码点范围的映射值调用 _codecs.charmap_decode() 时错误格式化的问题。由 Max Bernstein 提交的 PR。

  • bpo-41966: 修复纯 Python datetime.time 子类的 Pickle 操作。由 Dean Inwood 提供的补丁。

  • bpo-19270: sched.scheduler.cancel() 现在会取消正确的事件,如果两个具有相同优先级的事件被安排在相同的时间。由 Bar Harel 提供的补丁。

  • bpo-28660: textwrap.wrap() 现在在 break_long_words=Truebreak_on_hyphens=True 时尝试在连字符后断开长单词。

  • bpo-35823: 在 Linux 上为 subprocess.Popen() 使用 vfork() 替代 fork(),以提高在认为安全的情况下的性能。

  • bpo-42043: 添加对 zipfile.Path 继承的支持。zipfile.Path.is_file() 现在对于不存在的名称返回 False。zipfile.Path 对象现在暴露一个 .filename 属性,并依赖该属性在 Path 对象位于 zipfile 根目录时解析 .name.parent

  • bpo-42021: 修复 sqlite3 模块初始化中可能的内存泄漏问题。

  • bpo-39101: 修复了使用 IsolatedAsyncioTestCase 的测试在遇到 BaseExceptions 时挂起的问题。

  • bpo-41976: 修复了一个导致 ctypes.util.find_library() 在尝试在 gcc>=9 可用但 ldconfig 不可用的环境中定位库时返回 None 的 bug。由 Pablo Galindo 提供补丁。

  • bpo-41943: 修复了 TestCase.assertLogs 不能正确按级别过滤消息的 bug。

  • bpo-41923: 实现了 PEP 613,引入了 typing.TypeAlias 注解。

  • bpo-41905: 在 abc 中添加了一个新函数 update_abstractmethods 以重新计算抽象类的抽象状态。此外,dataclass 已被修改为调用此函数。

  • bpo-23706: 为 pathlib.Path.write_text() 添加了 newline 参数。

  • bpo-41876: Tkinter 字体类的 repr 使用字体名称。

  • bpo-41831: tkinter.Event 对象的 type 属性的 str() 现在总是返回由 Tk 返回的数字代码,而不是事件类型的名称。

  • bpo-39337: encodings.normalize_encoding() 现在忽略非 ASCII 字符。

  • bpo-41747: 确保所有由 dataclasses.dataclass() 对象生成的方法现在都有正确的 __qualname__ 属性,引用它们所属的类。由 Batuhan Taskaya 提供补丁。

  • bpo-30681: 在使用 email "default" 策略时处理由不可解析的日期头引起的异常。由 Tim Bell 和 Georges Toth 提供补丁。

  • bpo-41586: 向 fcntl 模块添加 F_SETPIPE_SZ 和 F_GETPIPE_SZ。允许在 subprocess.Popen 上设置管道大小。

  • bpo-41229: 添加 contextlib.aclosing 用于异步生成器的确定性清理,类似于 contextlib.closing 对于非异步生成器的作用。由 Joongi Kim 和 John Belmonte 提供补丁。

  • bpo-16396: 允许在非 Windows 系统上导入 ctypes.wintypes

  • bpo-4356: 向 bisect 模块添加一个键函数。

  • bpo-40592: shutil.which() 现在忽略 PATHEXT 中的空条目,而不是将它们视为匹配项。

  • bpo-40492: 修复当被分析的程序更改工作目录时,cProfile / profile--outfile 不在原始目录中写入输出文件的问题。PR由Anthony Sottile提供。

  • bpo-34204: shelve 模块现在默认使用 pickle.DEFAULT_PROTOCOL 而不是 pickle 协议 3

  • bpo-27321: 修复了将电子邮件扁平化为字符串时尝试替换不存在的Content-Transfer-Encoding头时引发的KeyError异常。

  • bpo-38976: http.cookiejar 模块现在支持在所有平台上通过MozillaCookieJar解析CURL样式的cookiejar文件中的cookie。之前,加载包含此类条目的cookiejar时会静默忽略此类cookie条目。

    此外,HTTP Only属性在对象中持续存在,并且如果随后转储MozillaCookieJar对象,将正确写入文件。

文档

  • bpo-42061: 记录IP地址的__format__功能。

  • bpo-41910: 记录 object.__eq__ 的默认实现。

  • bpo-42010: 澄清订阅表达式对于标准库中的某些 也有效,并且如果提供了类方法 __class_getitem__(),则对于用户定义的类和类型也有效。

  • bpo-41805: 记录了 generic alias typetypes.GenericAlias。还在词汇表中添加了 泛型类型 的条目。

  • bpo-39693: 修复tarfile的extractfile文档

  • bpo-39416: 记录一些关于数字类默认字符串表示的限制。

测试

  • bpo-41739: 修复test_logging.test_race_between_set_target_and_flush():测试现在等待所有线程完成,以避免运行线程泄漏。

  • bpo-41970: 如果模块在测试执行时已经导入,避免在 test_lib2to3 中出现测试失败。由Pablo Galindo提供补丁。

  • bpo-41944: CJK编解码器的测试不再对通过HTTP接收的内容调用 eval()

  • bpo-41306: 修复了在执行使用Tk 8.6.10的测试时 test_tk.test_widgets.ScaleTest 中出现的失败。

构建

  • bpo-38980: 在使用 --enable-optimizations 构建时,将 ``-fno-semantic-interposition``添加到编译和链接行。由Victor Stinner和Pablo Galindo提供补丁。

Windows

  • bpo-38439: 更新了Windows商店包中IDLE的图标。

  • bpo-38252: 在64位Windows构建中使用8字节步长来检测ASCII序列。

  • bpo-39107: 在Windows安装程序中更新Tcl和Tk至8.6.10版本。

  • bpo-41557: 更新Windows安装程序以使用SQLite 3.33.0。

  • bpo-38324: 在Windows上访问某些区域设置数据时避免Unicode错误。

macOS

  • bpo-41471: 忽略系统代理排除中的无效前缀长度。

IDLE

  • bpo-33987: 主要完成了对编辑器、设置和搜索使用ttk小部件的工作。部分由Mark Roseman提供补丁。

  • bpo-40511: 在函数调用的括号内键入开闭括号将不再导致现有的调用提示不必要地“闪烁”开关,例如在字符串字面量中键入时。

  • bpo-38439: 向Windows .ico文件添加一个256×256像素的IDLE图标。由Andrew Clover创建。从.ico文件中移除低色彩gif变体。

C API

  • bpo-42157: PyCapsule API unicodedata.ucnhash_CAPI 的私有 _PyUnicode_Name_CAPI 结构已移至内部C API。由Victor Stinner提供补丁。

  • bpo-42015: 修复了在动态分配的 PyMethodDef 的生命周期通过 PyCFunctionself 参数管理时,释放方法对象时可能发生的崩溃。

  • bpo-40423: subprocess 模块和 os.closerange 现在将在可用时使用``close_range(low, high, flags)``系统调用来更高效地关闭描述符范围。

  • bpo-41845: PyObject_GenericGetDict() 在针对3.10或更高版本时再次在有限API中可用。

  • bpo-40422: 添加 _Py_closerange 函数以提供高效关闭一系列文件描述符的能力。

  • bpo-41986: Py_FileSystemDefaultEncodeErrorsPy_UTF8Mode 再次在有限 API 中可用。

  • bpo-41756: 添加 PyIter_Send 函数,允许向生成器/协程/迭代器发送值而不抛出 StopIteration 异常来信号返回。

  • bpo-41784: 将 PyUnicode_AsUTF8AndSize 添加到有限的 C API 中。

Python 3.10.0 alpha 1

发布日期: 2020-10-05

安全性

  • bpo-41304: 修复了在 Windows 上 python3x._pth 被忽略的问题,该问题由对 bpo-29778 的修复引起 (CVE 2020-15801)。

  • bpo-41162: 审计钩子现在在最终化过程的后期被清除,以避免错过事件。

  • bpo-29778: 确保当 Python 被嵌入时 python3.dll 从正确的位置加载 (CVE 2020-15523)。

  • bpo-41004: ipaddress.IPv4Interface 和 ipaddress.IPv6Interface 的 __hash__() 方法错误地生成了分别为 32 和 128 的常量哈希值。这导致了总是发生哈希冲突。修复使用 hash() 来为 (地址, 掩码长度, 网络地址) 的元组生成哈希值。

  • bpo-39603: 通过拒绝 http.client.putrequest(...) 中的控制字符来防止 http 头注入。

核心与内置函数

  • bpo-41909: 修复了在 issubclass()isinstance() 中当获取 __bases__ 属性导致无限递归时的堆栈溢出问题。

  • bpo-41922: 通过使用 PEP 590 vectorcall 调用约定来加速对 reversed() 的调用。由 Donghee Na 提供补丁。

  • bpo-41873: 由于 vectorcall 调用约定,对 float() 的调用现在更快。由 Dennis Sweeney 提供补丁。

  • bpo-41870: 通过使用 PEP 590 vectorcall 调用约定来加速对 bool() 的调用。补丁由 Donghee Na 提供。

  • bpo-1635741: 将 _bisect 模块移植到多阶段初始化 API (PEP 489)。

  • bpo-39934: 在编译器中正确计算 'except' 中的控制块。确保对于深层嵌套的命名异常处理程序产生语法错误而非致命错误。

  • bpo-41780: 修复 types.GenericAlias__dir__() 方法。由 Batuhan Taskaya 提供补丁。

  • bpo-1635741: 将 _lsprof 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-1635741: 将 cmath 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-1635741: 将 _scproxy 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-1635741: 将 termios 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-1635741: 将 _sha256 扩展模块类型转换为堆类型。

  • bpo-41690: 修复解析器在解析具有大量参数的函数和类时可能出现的栈溢出问题。由 Pablo Galindo 提供补丁。

  • bpo-1635741: 将 _overlapped 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-1635741: 将 _curses_panel 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-1635741: 将 _opcode 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-41681: 修复在 f-string 和 str.format() 中使用两个 , 时引发的错误描述错误的问题。

  • bpo-41675: signal.siginterrupt() 的实现现在使用 sigaction() (如果系统中可用) 而非已弃用的 siginterrupt()。由 Pablo Galindo 提供补丁。

  • bpo-41670: 防止在未编译 USE_COMPUTED_GOTOS 的平台上跳过行跟踪。修复了 Windows 上 try-except 块内某些行未被跟踪的问题。

  • bpo-41654: 修复销毁 MemoryError 子类时发生的崩溃问题。由 Pablo Galindo 提供补丁。

  • bpo-1635741: 将 zlib 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-41631: _ast 模块再次使用了全局状态。每个模块实例使用模块状态会导致一些微妙的实际问题。例如,Mercurial 项目替换了 __import__() 函数以实现延迟导入,而 Python 期望 import _ast 总是返回一个完全初始化的 _ast 模块。

  • bpo-40077: 将 _operator 转换为使用 PyType_FromSpec()

  • bpo-1653741: 将 _sha3 移植到多阶段初始化。将静态类型转换为堆类型。

  • bpo-1635741: 将 _blake2 扩展模块移植到多阶段初始化 API (PEP 489)。

  • bpo-41533: 如果 do_mkstack 失败且堆栈不是 small_stack,则释放 va_build_stack 中分配的堆栈。

  • bpo-41531: 修复了一个在编译包含超过 0xFFFF 个元素的字典字面量时会丢失键的错误。由 Pablo Galindo 提供补丁。

  • bpo-41525: python --help 的输出现在仅包含 ASCII 字符。

  • bpo-1635741: 将 _sha1_sha512_md5 扩展模块移植到多阶段初始化 API (PEP 489)。

  • bpo-41431: 为复制字典(例如 dict(d){}.update(d))优化 dict_merge()

  • bpo-41428: 实现 PEP 604。这支持使用 (int | str) 等替代 Union[str, int]。

  • bpo-41340: 移除了 strdup 的回退实现。

  • bpo-38156: 正确处理在 PyOS_StdioReadline 中 EOF 之后到来的中断。

  • bpo-41342: 现在使用整数参数的 round() 更快(9--60%)。

  • bpo-41334: 构造函数 str()bytes()bytearray() 现在更快(对于小对象大约快 30--40%)。

  • bpo-41295: 解决了 CPython 3.8.4 中的一个回归问题,即在多重继承设置中定义 "__setattr__" 并调用层次链时,如果基类型涉及内置/扩展类型,可能会失败。

  • bpo-41323: 字节码优化直接在控制流图上执行。这将在某些情况下使代码对象稍微更紧凑。

  • bpo-41247: 运行 asyncio.set_running_loop 时,始终缓存运行循环持有者。

  • bpo-41252: 修复 _ssl.c 中 _servername_callback() 的错误引用计数。

  • bpo-1635741: 将 multiprocessing 移植到多阶段初始化。

  • bpo-1635741: 将 winapi 移植到多阶段初始化。

  • bpo-41215: 在 PEG 解析器的关键字列表中使用非 NULL 默认值,以克服在使用 XLC 编译器时阻止 Python 正确编译的错误。由 Pablo Galindo 提供补丁。

  • bpo-41218: Python 3.8.3 有一个回归问题,即使用 ast.PyCF_ALLOW_TOP_LEVEL_AWAIT 编译时,会激进地将列表推导标记为 CO_COROUTINE。现在只有使用 async/await 的列表推导才会被这样标记。

  • bpo-1635741: 将 faulthandler 移植到多阶段初始化。

  • bpo-1635741: 将 sha256 移植到多阶段初始化。

  • bpo-41175: 防止 bytearray() + bytearray() 操作触发的 bytearrayobject 内的 NULL 指针解引用。

  • bpo-41100: 在 mpdecimal.h 中将 arm64 添加到允许的 Mac OS 架构中。

  • bpo-41094: 修复在非 UTF-8 语言环境下打开非 ASCII 名称文件时的解码错误。

  • bpo-39960: 防止通过调用超类方法绕过类型的 __setattr__() 的“hackcheck”被重写,以允许 C 实现的堆类型。

  • bpo-41084: 在解析抛出 SyntaxError 的 f-string 表达式时,在错误消息前加上 'f-string: '。

  • bpo-40521: 空的 frozensets 不再是单例。

  • bpo-41076: 预填充解析器时提供 f-string 表达式的位置,而不是 f-string 本身,这允许我们在解析完成后跳过 AST 节点位置的移动。

  • bpo-41056: 修复了在启动时通过 -c 提供代码时,涉及相对符号链接构造 sys.path 过程中引用已释放堆栈空间的问题。(通过 Coverity 发现)

  • bpo-41061: 修复了哈希表代码和测试中的错误表达式和断言。

  • bpo-41052: 为 _random.Random 选择退出序列化/反序列化。

  • bpo-40939: 将 PyPegen* 函数重命名为 PyParser*,以便我们可以移除使用旧解析器的那组 PyParser* 函数,但保持一切向后兼容。

  • bpo-35975: Stefan Behnel 报告称,即使 PyCF_ONLY_AST 未设置,也会使用 cf_feature_version。这与意图和文档行为相违背,因此已修复。

  • bpo-40939: 移除旧解析器和 symbol 模块的剩余文件。

  • bpo-40077: 将 _bz2 转换为使用 PyType_FromSpec()

  • bpo-41006: encodings.latin_1 模块不再在启动时导入。现在仅当它是文件系统编码或 stdio 编码时才导入。

  • bpo-40636: zip() 现在支持 PEP 618strict 参数,如果参数长度不同,则会引发 ValueError。由 Brandt Bucher 提供补丁。

  • bpo-1635741: 将 _gdbm 移植到多阶段初始化。

  • bpo-40985: 修复了一个导致文件以行继续字符(即反斜杠)结尾时,SyntaxError 文本为空的错误。错误文本应包含最后一行的文本。

  • bpo-40958: 修复了 PEG 解析器在收集信息以发出语法错误时可能存在的缓冲区溢出。由 Pablo Galindo 提供补丁。

  • bpo-1635741: 将 _dbm 移植到多阶段初始化。

  • bpo-40957: 修复 _Py_fopen_obj() 在 PySys_Audit() 失败时的反射泄漏

  • bpo-40950: 为 nis 模块添加状态 (PEP 3121) 并应用多阶段初始化。由 Donghee Na 提供补丁。

  • bpo-40947: Python 的 Path Configuration 现在考虑了 PyConfig.platlibdir

  • bpo-40939: 移除了旧解析器、parser 模块以及所有相关的支持代码、命令行选项和环境变量。由 Pablo Galindo 提供补丁。

  • bpo-40847: 修复了一个错误,即在分词器级别,仅包含行继续符的行不被视为空行。在这种情况下,会发出多个 NEWLINE 令牌。旧解析器绕过了这个问题,但新解析器因此对有效输入抛出了 SyntaxError。例如,行继续符后的空行被解释为 SyntaxError

  • bpo-40890: 现在每个字典视图都有一个 mapping 属性,该属性提供了一个包装原始字典的 types.MappingProxyType。补丁由 Dennis Sweeney 贡献。

  • bpo-40889: 改进了字典项视图上对称差异操作的性能。由 Dennis Sweeney 提供补丁。

  • bpo-40904: 修复了在解析包含无值 yield 语句的 f-string(如 f"{yield}")时,新的 PEG 解析器可能出现的段错误。由 Pablo Galindo 提供补丁。

  • bpo-40903: 修复了新的 PEG 解析器在为形式如 p=p= 的无效赋值生成错误消息时可能出现的段错误。由 Pablo Galindo 提供补丁。

  • bpo-40880: 修复了在检查字符串字面量中的换行符时,新解析器中的无效内存读取问题。补丁由 Pablo Galindo 提供。

  • bpo-40883: 修复了在新解析器中解析 f-strings 时的内存泄漏问题。补丁由 Pablo Galindo 提供。

  • bpo-40870: 在验证自定义 AST 时,如果常量 TrueFalseNoneast.Name 节点中使用,则抛出 ValueError

  • bpo-40854: 允许通过新的环境变量 PYTHONPLATLIBDIR 覆盖 sys.platlibdir

  • bpo-40826: 修复 PyOS_Readline() 中的GIL使用:锁定GIL以设置异常,并在检查是否有待处理信号时传递Python线程状态。

  • bpo-1635741: 将 fcntl 移植到多阶段初始化。

  • bpo-19468: 删除 importlib.reload() 中不必要的实例检查。由Furkan Önder提供补丁。

  • bpo-40824: 在 in 操作符和 operator 模块的函数 contains()indexOf()countOf() 中,调用 __iter__ 方法时不再因 TypeError 而掩盖意外错误。

  • bpo-40792: range 对象的属性 startstopstep 现在总是具有确切的 int 类型。之前,它们可能是 int 子类的实例。

  • bpo-40780: 修复了浮点数g风格字符串格式化未能移除尾部零的一个边缘情况。

  • bpo-38964: 当fstring的表达式部分出现 SyntaxError 时,SyntaxError 的filename属性现在被正确设置为fstring所在文件的名称。

  • bpo-40750: 在新的PEG解析器中支持 "-d" 调试标志。由Pablo Galindo提供补丁

  • bpo-40217: 使用 PyType_FromSpecWithBases() 创建的类型实例在垃圾收集器中遍历引用时将不再自动访问其类对象。用户需要手动访问对象的类。由Pablo Galindo提供补丁。

  • bpo-39573: Py_TYPE() 被改为内联静态函数。由Donghee Na提供补丁。

  • bpo-40696: 修复了由于异常上下文链中的循环而在 generator.throw() 后可能出现的挂起问题。

  • bpo-40521: 每个解释器现在都有自己的空闲列表、单例和缓存:

    • 空闲列表:float、tuple、list、dict、frame、context、异步生成器、MemoryError。

    • 单例:空元组、空字节字符串、空Unicode字符串、单字节字符、单个Unicode(latin1)字符。

    • 切片缓存。

    它们不再被所有解释器共享。

  • bpo-40679: 某些关于缺少或多余参数的 TypeError 消息现在包括函数的 qualified name。由 Dennis Sweeney 提供补丁。

  • bpo-29590: 在生成器上调用 generator.throw() 后,使堆栈跟踪正确,该生成器已经从 yield from 中产出。

  • bpo-4022: 通过不引发内部 StopIteration 来提高生成器的性能。

  • bpo-1635741: 将 mmap 移植到多阶段初始化。

  • bpo-1635741: 将 _lzma 移植到多阶段初始化。

  • bpo-37999: 接受整数参数的内置和扩展函数不再接受 Decimals、Fractions 和其他只能以损失方式转换为整数的对象(例如,具有 __int__() 方法但不具有 __index__() 方法的对象)。

  • bpo-29882: 添加 int.bit_count(),计算整数二进制表示中1的数量。由 Niklas Fiekas 提供补丁。

  • bpo-36982: 当可用时使用 ncurses 扩展颜色功能以支持具有256色的终端,并添加新函数 curses.has_extended_color_support() 以指示底层 ncurses 库是否提供扩展颜色支持。

  • bpo-19569: 添加私有宏 _Py_COMP_DIAG_PUSH_Py_COMP_DIAG_IGNORE_DEPR_DECLS_Py_COMP_DIAG_POP

  • bpo-26680: int 类型现在支持 x.is_integer() 方法以与 float 兼容。

  • bpo-41900: 在 xml.etree.ElementTree 中的 C14N 2.0 序列化在定义了默认命名空间时,对于未加前缀的属性失败。

  • bpo-41887: 在 ast.literal_eval() 上移除前导空格和制表符。同时记录 eval() 对空格和制表符的移除。

  • bpo-41773: 在文档中注明 random.choices() 不支持非有限权重,当给定非有限权重时引发 ValueError

  • bpo-41840: 修复 symtable 模块中的一个 bug,该 bug 导致模块作用域的全局变量未被同时报告为局部和全局。由 Pablo Galindo 提供补丁。

  • bpo-41842: 添加 codecs.unregister() 函数以注销编解码器搜索函数。

  • bpo-40564: 在 zipfile.Path 中,改变传递的 ZipFile 对象类型而不是制作副本。防止本地副本和调用者的副本尝试关闭同一个文件句柄时出现问题。

  • bpo-40670: 对 timeit.Timer 中的语句进行更可靠的验证。现在接受“空”语句(仅空白和注释)并拒绝缩进错误的语句。

  • bpo-41833: threading.Thread 构造函数现在在指定 target 参数但省略 name 参数时使用目标名称。

  • bpo-41817: 修复 tkinter.EventType 枚举,使所有成员都是字符串,没有元组。

  • bpo-41810: 重新引入了 types.EllipsisTypetypes.NotImplementedTypetypes.NoneType,提供了一组新的类型,静态类型检查器可以轻松解释。

  • bpo-41815: 修复 SQLite3 在备份已关闭数据库时的段错误。补丁由 Peter David McCormick 提供。

  • bpo-41816: 添加了 StrEnum:确保所有成员已经是字符串或字符串候选。

  • bpo-41517: 修复允许通过多重继承扩展枚举的 bug。

  • bpo-39587: 在构造枚举时使用正确的混合数据类型。

  • bpo-41792: 在 typing.py 中添加 is_typeddict 函数以检查类型是否为 TypedDict 类。

    以前没有不使用私有 API 的方法来检查这一点。参见 python/typing 中的相关问题

  • bpo-41789: 在 Enum 类创建中尊重 object 覆盖(特别是 __str____repr____format____reduce_ex__)。

  • bpo-32218: enum.Flagenum.IntFlag 成员现在是可迭代的。

  • bpo-39651: 修复了 asyncio.ProactorEventLoopcall_soon_threadsafe() 方法中的一个竞态条件:如果自管道套接字已关闭,则不执行任何操作。

  • bpo-1635741: 将 mashal 扩展模块移植到多阶段初始化API (PEP 489)。

  • bpo-1635741: 将 _string 扩展模块移植到多阶段初始化API (PEP 489)。

  • bpo-41732: 为 memoryview 添加了一个迭代器`。

  • bpo-41720: 修复了:turtle.Vec2D.__rmul__`对于非int或float参数的处理。

  • bpo-41696: 修复了在 asyncio.run() 中调试模式的处理。现在可以通过设置``PYTHONASYNCIODEBUG``或 -X dev 来在使用 asyncio.run() 时启用asyncio调试模式。

  • bpo-41687: 修复了sendfile的实现以兼容Solaris。

  • bpo-41662: 不再覆盖在 sqlite3 中参数序列的 __len__() 中引发的异常,而是使用 ProgrammingError

  • bpo-39010: 在Windows上重启 ProactorEventLoop 不再记录虚假的``ConnectionResetErrors``。

  • bpo-41638: 当参数以字典形式提供时,sqlite3 中对于缺少参数的 ProgrammingError 消息现在包含参数名称而不是其索引。

  • bpo-41662: 修复了在 sqlite3 中迭代期间突变参数列表时崩溃的问题。

  • bpo-41513: 提高了math.hypot()的准确性。内部每一步计算都使用额外的精度,因此结果现在几乎总是正确舍入。

  • bpo-41609: pdb的whatis命令现在正确地将实例方法报告为'Method'而不是'Function'。

  • bpo-39994: 修复了pprint对于重写__repr__的dict子类的处理。

  • bpo-32751: 当由于超时取消任务时,asyncio.wait_for() 现在也会在*timeout* <= 0的情况下等待取消完成,就像对正超时那样。

  • bpo-37658: asyncio.wait_for() 现在正确处理了自身取消与包装的可等待对象完成之间的竞争条件。

  • bpo-40782: 将方法 asyncio.AbstractEventLoop.run_in_executor 改为不是协程。

  • bpo-41520: 修复 codeop 回归问题,该问题阻止了将编译警告转为错误。

  • bpo-41528: turtle 使用数学模块函数来转换度与弧度,以及计算向量范数。

  • bpo-41513: 对 math.hypot() 和 math.dist() 进行了小的算法改进,略微提高了速度和准确性。

  • bpo-41503: 修复了 logging.handlers.MemoryHandler 中 setTarget 和 flush 之间的竞争条件。

  • bpo-41497: 修复 dis 模块中潜在的 UnicodeDecodeError。

  • bpo-41467: 在 Windows 上,修复 asyncio recv_into() 当套接字/管道关闭时的返回值 (BrokenPipeError): 返回 0 而不是空字节串 (b'')。

  • bpo-41425: 使 tkinter 文档示例可运行。

  • bpo-41421: 对 random.paretovariate() 进行了代数简化。现在它略微减少了舍入误差,速度也略有提升。之前导致 ZeroDivisionError 的输入现在会导致 OverflowError。

  • bpo-41440: 为 VxWorks RTOS 添加 os.cpu_count() 支持。

  • bpo-41316: 修复 tarfile 模块,使其仅将 TAR 文件的基本名写入 GZIP 压缩头。

  • bpo-41384: 当向 tkinter.OptionMenu 传递未知选项时,抛出 TclError 而不是 TypeError。

  • bpo-41317: 在 asyncio.loop.sock_accept() 中使用 add_done_callback() 以在取消时尽早取消订阅读取器。

  • bpo-41364: 减少 uuid 的导入开销。

  • bpo-35328: 在 venv 激活时设置环境变量 VIRTUAL_ENV_PROMPT

  • bpo-41341: 在 get_type_hints 中递归评估 typing.ForwardRef

  • bpo-41344: 防止创建 size=0shared_memory.SharedMemory 对象。

  • bpo-41333: collections.OrderedDict.pop() 现在速度提高了 2 倍。

  • bpo-41288: 使用C实现时,反序列化无效的NEWOBJ_EX操作码现在会引发UnpicklingError,而不是崩溃。

  • bpo-39017: 避免在使用tarfile模块读取特制的TAR文件时出现无限循环(CVE 2019-20907)。

  • bpo-41273: 通过调用 recv_into 而非 recv,加快使用 _ProactorReadPipeTransport``的任何传输速度,从而不在传输的读取循环中为每次 ``recv 调用创建新缓冲区。

  • bpo-41235: 修复了 ssl.SSLContext.load_dh_params() 中的错误处理。

  • bpo-41207: 在distutils.spawn中,恢复了当命令未找到时引发DistutilsExecError的预期行为。

  • bpo-29727: 将 array.array 注册为 MutableSequence。由Pablo Galindo提供补丁。

  • bpo-39168: 移除了 typing.Generic__new__ 方法。

  • bpo-41194: 修复了 _ast 模块中的崩溃问题:它现在不能被多次加载。它现在使用全局状态而非模块状态。

  • bpo-41195: 添加了只读的ssl.SSLContext.security_level属性,用于检索上下文的安全级别。

  • bpo-41193: readline completer的 write_history() atexit函数现在忽略任何 OSError,以在文件系统为只读时忽略错误,而不仅仅是忽略 FileNotFoundErrorPermissionError

  • bpo-41182: selector: 根据实现使用DefaultSelector

  • bpo-41161: decimal模块现在需要libmpdec-2.5.0。使用--with-system-libmpdec的用户应更新其系统库。

  • bpo-40874: decimal模块现在需要libmpdec-2.5.0。

  • bpo-41138: 修复了 trace 模块CLI对于非UTF-8编码的Python源文件的问题。

  • bpo-31082: 在 functools.reduce() 的文档字符串中使用术语“可迭代对象”。

  • bpo-40521: 从collections.deque()中移除freelist。

  • bpo-31938: 修复了 select 模块中几个函数的默认值签名 - 由Anthony Sottile提供。

  • bpo-41068: 修复了直接从ZIP存档中读取非ASCII名称文件后立即写入的问题。

  • bpo-41058: pdb.find_function() 现在能正确确定源文件的编码。

  • bpo-41056: 现在阻止将无效的文件描述符值传递给os.fpathconf。(由Coverity发现)

  • bpo-41056: 修复了ssl模块中在keylog回调中发生MemoryError时的NULL指针解引用问题。(由Coverity发现)

  • bpo-41056: 修复了zoneinfo模块中MemoryError可能未被报告或未在其源头报告的情况。(由Coverity发现)

  • bpo-41048: mimetypes.read_mime_types() 函数现在使用UTF-8编码而非本地编码读取规则文件。由Srinivas Reddy Thatiparthy提供补丁。

  • bpo-41043: 修复了stdlib中 glob() 的使用:路径的字面部分现在总是被正确转义。

  • bpo-41025: 修复了阻止 zoneinfo.ZoneInfo 的C实现被子类化的问题。

  • bpo-35018: 添加了其他SAX XML实现中存在的 xml.sax.handler.LexicalHandler 类。

  • bpo-41002: 提高了HTTPResponse.read在给定数量下的性能。由Bruce Merry提供补丁。

  • bpo-40448: ensurepip 现在在安装捆绑版本的 pipsetuptools 时禁用 pip 缓存。由Krzysztof Konopko提供补丁。

  • bpo-40967: 移除了 asyncio.Task.current_task()asyncio.Task.all_tasks()。补丁由Rémi Lapeyre贡献。

  • bpo-40924: 确保 importlib.resources.path 为SourceFileLoader的资源阅读器返回一个存在的路径。在制定长期解决方案的同时避免了在主分支中发现的回归。

  • bpo-40955: 修复了 subprocess 模块中在指定extra_groups时的一个小内存泄漏。

  • bpo-40855: statistics模块中的标准差和方差函数忽略了它们的mu和xbar参数。

  • bpo-40939: 在生成标准库 keyword 模块时使用新的PEG解析器。

  • bpo-23427: 添加 sys.orig_argv 属性:传递给Python可执行文件的原始命令行参数列表。

  • bpo-33689: 忽略.pth文件中的空行或仅包含空白的行。这与文档中描述的行为相匹配。在此之前,空行会导致site-packages目录在sys.path中多次出现。由Ido Michael贡献,贡献者包括Malcolm Smith和Tal Einat。

  • bpo-40884: 向 logging.Formatter 添加了一个 defaults 参数,允许为自定义字段指定默认值。由Asaf Alon和Bar Harel提供补丁。

  • bpo-40876: 澄清 csv 模块中的错误消息。

  • bpo-39791: 从importlib_metadata 1.6.1刷新importlib.metadata。

  • bpo-40807: 停止codeop._maybe_compile(由code.InteractiveInterpreter(和IDLE)使用)每次发出三次警告。

  • bpo-32604: 修复 select 模块在子解释器中导入时的引用泄漏问题。

  • bpo-39791: 内置加载器(SourceFileLoader和ZipImporter)现在为 ResourceReader 提供 TraversableResources 实现,并且移除了回退函数。

  • bpo-39314: rlcompleter.Completer 和标准Python shell现在为不带参数的函数闭合括号。由Rémi Lapeyre提供补丁。

  • bpo-17005: 最初在 functools 模块中引入的拓扑排序功能已被移动到一个新的 graphlib 模块,以更好地适应新工具并保持 functools 模块的原始范围。由Pablo Galindo提供补丁

  • bpo-40834: 修复在发送str对象时使用_xxsubinterpreters.channel_send的截断问题。

  • bpo-40755: 向collections.Counter()添加富比较方法。

  • bpo-26407: 在 csv.reader(), csv.writer.writerow()csv.writer.writerows() 中调用 __iter__ 方法时不再因 TypeError 掩盖意外错误。

  • bpo-39384: 修复了email.contentmanager,允许set_content()设置空字符串。

  • bpo-40744: sqlite3 模块使用了需要SQLite v3.7.3或更高版本的SQLite API函数。此补丁移除了对旧版本SQLite的支持,并在构建、编译和运行时明确要求SQLite 3.7.3。由Sergey Fedoseev和Erlend E. Aasland提供补丁。

  • bpo-40777: 在运行时初始化PyDateTime_IsoCalendarDateType.tp_base,以避免在某些编译器上出现错误。

  • bpo-38488: 更新ensurepip以安装pip 20.1.1和setuptools 47.1.0。

  • bpo-40792: operator.index() 的结果现在总是具有确切的 int 类型。以前,结果可能是 int 子类的实例。

  • bpo-40767: webbrowser 现在通过检查WAYLAND_DISPLAY环境变量,在纯Wayland系统中正确找到默认浏览器。补丁由Jérémy Attali贡献。

  • bpo-40791: 当OpenSSL可用时,hashlib.compare_digest() 使用OpenSSL的``CRYPTO_memcmp()``函数。

  • bpo-40795: ctypes 模块:如果ctypes未能转换回调的结果,或者如果ctypes回调函数引发异常,现在会调用带有异常设置的sys.unraisablehook。以前,错误由 PyErr_Print() 记录到stderr。

  • bpo-16995: 添加 base64.b32hexencode()base64.b32hexdecode() 以支持使用扩展十六进制字母表的Base32编码。

  • bpo-30008: 修复 ssl 代码以兼容使用 no-deprecated--api=1.1.0 构建的OpenSSL 1.1.x。

  • bpo-30064: 修复asyncio loop.sock_* 竞争条件问题

  • bpo-40759: 弃用 symbol 模块。

  • bpo-40756: LoggerAdapter.__init__ 的第二个参数(extra)现在默认为None。

  • bpo-37129: 为 os.pwritev() 添加一个新的 os.RWF_APPEND 标志。

  • bpo-40737: 修复 sqlite3 初始化时可能的引用泄漏。

  • bpo-40726: 处理在 ast.increment_lineno()end_linenoNone 的情况。

  • bpo-40698: distutils 上传创建了 SHA2-256 和 Blake2b-256 摘要。如果平台阻止 MD5,则跳过 MD5 摘要。

  • bpo-40695: hashlib 不再在 OpenSSL 提供哈希摘要且算法被安全策略阻止时回退到内置哈希实现。

  • bpo-9216: hashlib.new()usedforsecurity 传递给 OpenSSL EVP 构造函数 _hashlib.new()。test_hashlib 和 test_smtplib 更好地处理严格的安全策略。

  • bpo-40614: ast.parse() 在传递的 feature_version 小于 (3, 8) 时不会解析 f-strings 中的自文档化表达式。

  • bpo-40626: 根据 HDF Group 对 HDF5 格式化数据文件的建议,添加 h5 文件扩展名作为 MIME 类型 application/x-hdf5。补丁由 Mark Schwab 贡献。

  • bpo-25920: 在 macOS 上,当为 macOS 10.4 及更早版本构建 Python 时(这不是 python.org macOS 安装程序的情况),socket.getaddrinfo() 不再使用内部锁来防止在调用 getaddrinfo() 时出现竞争条件,因为自 macOS 10.5 起它就是线程安全的。Python 3.9 需要 macOS 10.6 或更新版本。当另一个线程调用 socket.getaddrinfo() 时,内部锁会导致 fork 时随机挂起。该锁也用于比 5.3 旧的 FreeBSD,比 201311 旧的 OpenBSD 和比 4 旧的 NetBSD。

  • bpo-40671: 为 PEP 489 准备 _hashlib 并使用 PyModule_AddType()

  • bpo-32309: 添加了一个新的 coroutine asyncio.to_thread()。它主要用于在单独的线程中运行 IO 密集型函数以避免阻塞事件循环,本质上是一个可以直接接受关键字参数的高级版本的 run_in_executor()

  • bpo-36543: 恢复了已弃用的 xml.etree.cElementTree 模块。

  • bpo-40611: MAP_POPULATE 常量已被添加到导出的 mmap 模块标志列表中。

  • bpo-39881: 在测试套件中使用PEP 554。(由Joannah Nanjekye提供补丁)

  • bpo-13097: ctypes 现在在回调函数被调用时传递超过1024个参数时会引发 ArgumentError

  • bpo-39385: 一个新的测试断言上下文管理器 unittest.assertNoLogs() 将确保给定的代码块不产生任何使用日志模块的日志消息。由Kit Yan Choi贡献。

  • bpo-23082: 更新了PurePath.relative_to()的错误信息和文档,以更好地反映函数行为。

  • bpo-40318: 如果可用,使用SQLite3跟踪v2 API。

  • bpo-40105: 在附加("a")模式下提供较短的注释时,ZipFile会截断文件以避免损坏。由Jan Mazur提供补丁。

  • bpo-40084: 修复了 Enum.__dir__: dir(Enum.member) 现在包括属性和方法。

  • bpo-31122: ssl.wrap_socket() 现在在TLS协商期间对等方关闭连接时引发ssl.SSLEOFError而不是OSError。

  • bpo-39728: 修复默认的 _missing_ 以便重复的 ValueError 不会被设置为原始 ValueError__context__

  • bpo-39244: 修复了 multiprocessing.context.get_all_start_methods,以在macOS上正确首先返回默认方法。

  • bpo-39040: 通过折叠裸引号字符串中编码字词之间的空白,修复了无效mime头参数的解析。

  • bpo-38731: 向 py_compile 的命令行界面添加了 --quiet 选项。由Gregory Schevchenko提供补丁。

  • bpo-35714: 如果 struct 格式字符串中有空字符,现在会引发 struct.error

  • bpo-38144: 在 glob.glob() 中添加了 root_dirdir_fd 参数。

  • bpo-26543: 修复了 IMAP4.noop() 在调试模式启用时(例如:imaplib.Debug = 3)的问题。

  • bpo-12178: csv.writer() 现在在输入包含 escapechar 时正确转义 escapechar。补丁由Catalin Iacob、Berker Peksag和Itay Elbirt提供。

  • bpo-36290: AST节点现在在关键字参数冲突时抛出 TypeError。补丁由Rémi Lapeyre提供。

  • bpo-33944: 在详细模式下增加了site.py对site-packages的追踪。

  • bpo-35078: 重构calendar模块中LocaleHTMLCalendar和LocaleTextCalendar类的formatweekday、formatmonthname方法,以调用基类方法。这使得LocaleHTMLCalendar的CSS类可定制。由Srinivas Reddy Thatiparthy提供补丁。

  • bpo-29620: assertWarns() 在访问模块的 __warningregistry__``导致新模块导入或另一线程中导入新模块时不再引发 ``RuntimeException。由Kernc提供补丁。

  • bpo-31844: 从私有的、未文档化的 _markupbase 模块中移除 ParserBase.error() 方法。html.parser.HTMLParserParserBase 的唯一子类,其 error() 实现在Python 3.4中被弃用,在Python 3.5中被移除。

  • bpo-34226: 修复 cgi.parse_multipart 在没有content_length时的问题。由Roger Duran提供补丁。

  • bpo-33660: 修复pathlib.PosixPath正确解析位于根目录的相对路径。

  • bpo-28557: 改进 rawio.readinto 行为异常时的错误信息。

  • bpo-26680: 为Decimal类型添加d.is_integer()方法,以与其他数字类型兼容。

  • bpo-26680: 将x.is_integer()方法纳入数字塔的抽象类型Real、Rational和Integral中,并提供适当的默认实现。

文档

  • bpo-41428: 为 PEP 604 (允许将联合类型写作 X | Y) 添加文档。

  • bpo-41774: 在编程FAQ的“序列(元组/列表)”部分添加“如何从列表中删除多个项目”。

  • bpo-35293: 修复构建文档时的RemovedInSphinx40Warning。由Donghee Na提供补丁。

  • bpo-37149: 将Shipman tkinter文档链接从archive.org更改为TkDocs。(该文档已从NMT服务器移除。)新链接响应更快,并包含简短说明。

  • bpo-41726: 更新 PyType_FromModuleAndSpec 的引用计数信息。

  • bpo-41624: 修正 typing.Coroutine 的签名。

  • bpo-40204: 启用Sphinx 3.2的 c_allow_pre_v3 选项并禁用 c_warn_on_allowed_pre_v3 选项,使文档兼容Sphinx 2和Sphinx 3。

  • bpo-41045: 添加f-strings调试功能的文档。

  • bpo-41314: 将 from __future__ import annotations 成为默认的发布版本从 4.0 改为``3.10`` (遵循PEP 563的变更) 。

  • bpo-40979: 重构typing.rst,将超过70个类、函数和装饰器安排到新的子章节中。

  • bpo-40552: 修正教程4.2节的代码片段,现在代码正确。

  • bpo-39883: 使Python文档中的代码、示例和配方除了现有的Python 2.0许可证外,还采用更宽松的BSD0许可证。

  • bpo-37703: 更新文档,全面阐述gather.cancel()的行为。

测试

  • bpo-41939: 修复test_site.test_license_exists_at_url():调用``urllib.request.urlcleanup()``以重置全局 urllib.request._opener。由Victor Stinner提供补丁。

  • bpo-41731: 使test_cmd_line_script在使用选项'-vv'时通过。

  • bpo-41602: 为runpy模块中的SIGINT处理添加测试。

  • bpo-41521: test.support: 将 check__all__()blacklist 参数重命名为 not_exported

  • bpo-41477: 在test_genericalias中使ctypes可选。

  • bpo-41085: 在64位Windows上修复 array.array.index() 方法对于大于 2**31 的索引的整数溢出问题。

  • bpo-41069: test.support.TESTFN 和通过 test.regrtest 运行测试时的当前目录现在尽可能包含非ASCII字符。

  • bpo-38377: 在Linux上,如果当前用户无法在 /dev/shm/ 目录中创建文件,则跳过使用多进程的测试。将 skip_if_broken_multiprocessing_synchronize() 函数添加到 test.support 模块中。

  • bpo-41009: 修复了将 support.require_{linux|mac|freebsd}_version() 装饰器用作类装饰器时的问题。

  • bpo-41003: 修复了当安装 numpy``时 ``test_copyreg 的问题:test.pickletester 现在在导入 numpy 时保存/恢复警告过滤器,以忽略由 numpy 安装的过滤器。

  • bpo-40964: 禁用远程 imaplib 测试,主机cyrus.andrew.cmu.edu正在阻止传入连接。

  • bpo-40927: 修复了test_binhex在运行两次时的问题:现在使用import_fresh_module()确保每次都引发DeprecationWarning。

  • bpo-17258: 当MD5哈希摘要被阻止时,跳过一些 multiprocessing 测试。

  • bpo-31904: 为VxWorks RTOS将LOOPBACK_TIMEOUT增加到10。

  • bpo-38169: 增加SharedMemory和ShareableList的代码覆盖率

  • bpo-34401: 使test_gdb在HP-UX上正确运行。由Michael Osipov提供补丁。

构建

  • bpo-38249: 更新 Py_UNREACHABLE 以使用__builtin_unreachable(),如果编译器能够使用它。由Donghee Na提供补丁。

  • bpo-41617: 修复 pycore_bitutils.h 头文件以支持旧版本的clang:``__builtin_bswap16()``在LLVM clang 3.0中不可用。

  • bpo-40204: 在 Doc/Makefile 中将Sphinx版本固定为2.3.1。

  • bpo-36020: 现在构建Python需要C99函数 snprintf()vsnprintf()

  • bpo-40684: make install 现在在使用 ./configure --with-platlibdir 时,为目标``lib-dynload/目录使用 ``PLATLIBDIR 变量。

  • bpo-40683: 修复了当使用 make 安装Python时,zoneinfo 模块及其测试未被包含的问题。

Windows

  • bpo-41744: 修复使用Nuget包时props文件的自动导入问题。

  • bpo-41627: 32位用户站点目录现在包含一个 -32 后缀,以区别于64位解释器的目录。

  • bpo-41526: 通过移除对Mark Hammond的特别感谢(获得他的许可),修复了安装程序最后一页的布局问题。

  • bpo-41492: 修复了出现在UAC提示中的描述。

  • bpo-40948: 改进安装后消息,引导人们使用"py"命令。

  • bpo-41412: 安装程序现在将无法在Windows 7和Windows 8上安装。此外,UCRT依赖现在总是按需下载。

  • bpo-40741: 更新Windows版本,包括SQLite 3.32.3。

  • bpo-41142: msilib 现在支持创建带有非ASCII文件路径的CAB文件,并向其中添加带有非ASCII文件路径的文件。

  • bpo-41074: 修复了在函数 msilib.OpenDatabase()msilib.init_database() 中对非ASCII名称的支持,以及在方法 msilib.Database.OpenView() 中对非ASCII SQL的支持。

  • bpo-41039: 稳定的ABI重定向DLL(python3.dll)现在使用 #pragma comment(linker) 进行重新导出。

  • bpo-40164: 将Windows上的OpenSSL更新至1.1.1g。

  • bpo-39631: 将Windows上 .py 文件的注册MIME类型更改为 text/x-python,而不是``text/plain``。

  • bpo-40677: 手动定义IO_REPARSE_TAG_APPEXECLINK,以防某些旧的Windows SDK没有它。

  • bpo-37556: 扩展py.exe帮助,提及通过venv、shebang、环境变量和ini文件进行的覆盖。

macOS

  • bpo-41557: 更新macOS安装程序,使用SQLite 3.33.0。

  • bpo-39580: 如果从命令行运行安装程序,避免打开Finder窗口。补丁由Rick Heil贡献。

  • bpo-41100: 修复在macOS 11上构建时的配置错误。请注意,当前的Python版本是在macOS 11(Big Sur)的第一个开发者预览版发布后不久发布的;在开发者预览版上构建和运行还有其他已知问题。预计在Python 3.8.x的未来错误修复版本和3.9.0中完全支持Big Sur。

  • bpo-40741: 更新 macOS 安装程序以使用 SQLite 3.32.3。

  • bpo-41005: 修复了 webbrowser.py 中不允许 macOS 打开浏览器的 XDG 设置问题。

  • bpo-40741: 更新 macOS 安装程序以使用 SQLite 3.32.2。

IDLE

  • bpo-41775: 使用 'IDLE Shell' 作为 shell 标题。

  • bpo-35764: 重写 Calltips 文档部分。

  • bpo-40181: 在 calltips 中,停止提醒 '/' 标记仅位置参数的结束。

  • bpo-41468: 改进 IDLE 运行崩溃错误消息(用户应该永远不会看到)。

  • bpo-41373: 通过将其行结束符设置为系统默认值,保存没有行结束符加载的文件,如空白或不同行结束符。修复 3.8.4 和 3.9.0b4 中的回归。

  • bpo-41300: 保存含有非 ASCII 字符的文件。修复 3.9.0b4 和 3.8.4 中发布的回归。

  • bpo-37765: 将关键字添加到模块名称完成列表。重写 IDLE 文档的 Completions 部分。

  • bpo-41152: IDLE 中 stdinstdoutstderr 的编码现在始终为 UTF-8。

  • bpo-41144: 使 Open Module 可以打开特殊模块如 os.path。

  • bpo-39885: 使上下文菜单中的剪切和复制在右击选择内容时再次工作。

  • bpo-40723: 使 test_idle 在导入后运行时通过。

C API

  • bpo-41936: 移除了未文档化的宏 Py_ALLOW_RECURSIONPy_END_ALLOW_RECURSION 以及 PyInterpreterState 结构的 recursion_critical 字段。

  • bpo-41692: PyUnicode_InternImmortal() 函数现在已被弃用,并将在 Python 3.12 中移除:改用 PyUnicode_InternInPlace()。由 Victor Stinner 提供补丁。

  • bpo-41842: 添加 PyCodec_Unregister() 函数以取消注册一个编解码器搜索函数。

  • bpo-41834: 移除 _Py_CheckRecursionLimit 变量:它已被 PyInterpreterState 结构的 ceval.recursion_limit 取代。由 Victor Stinner 提供补丁。

  • bpo-41689: 使用 PyType_FromSpec() 创建的类型现在可以从 __text_signature__ 访问其 tp_doc 槽中的任何签名。

  • bpo-41524: 修复 PyOS_mystrnicmp 和 PyOS_mystricmp 中增加指针超出字符串末尾的 bug。

  • bpo-41324: 添加一个最小的十进制胶囊 API。该 API 支持最多 38 位数字的 Decimal 与其作为 C 结构体的三元表示之间的快速转换。

  • bpo-30155: 添加 PyDateTime_DATE_GET_TZINFO()PyDateTime_TIME_GET_TZINFO() 宏,用于访问 datetime.datetimedatetime.time 对象的 tzinfo 属性。

  • bpo-40170: 回滚 PyType_HasFeature() 更改:当不使用有限的 C API 时,它再次直接读取 PyTypeObject.tp_flags 成员,而不是总是调用隐藏实现细节的 PyType_GetFlags()

  • bpo-41123: 移除 PyUnicode_AsUnicodeCopy

  • bpo-41123: 移除 PyLong_FromUnicode()

  • bpo-41123: 移除 PyUnicode_GetMax()

  • bpo-41123: 移除操作 Py_UNICODE* 字符串的 Py_UNICODE_str* 函数。

  • bpo-41103: 移除 PyObject_AsCharBuffer()PyObject_AsReadBuffer()PyObject_CheckReadBuffer()PyObject_AsWriteBuffer()。请迁移到新的缓冲区协议;PyObject_GetBuffer()PyBuffer_Release()

  • bpo-36346: 对于 PyUnicode_FromUnicode(NULL, size)PyUnicode_FromStringAndSize(NULL, size)size > 0 时引发 DeprecationWarning。

  • bpo-36346: 在 C 中标记 Py_UNICODE_COPYPy_UNICODE_FILLPyUnicode_WSTR_LENGTHPyUnicode_FromUnicodePyUnicode_AsUnicodePyUnicode_AsUnicodeAndSize 为弃用。移除自 Python 3.3 以来已被弃用且损坏的 Py_UNICODE_MATCH

  • bpo-40989: PyObject_INIT()PyObject_INIT_VAR() 宏分别成为 PyObject_Init()PyObject_InitVar() 函数的别名。

  • bpo-36020: 在 Windows 上,#include "pyerrors.h" 不再定义 snprintfvsnprintf 宏。

  • bpo-40943: 现在必须定义 PY_SSIZE_T_CLEAN 宏才能使用 PyArg_ParseTuple()Py_BuildValue() 格式,这些格式使用 #: es#et#s#u#y#z#U#Z#。参见 Parsing arguments and building valuesPEP 353

  • bpo-40910: 显式地将 Py_GetArgcArgv() 函数导出到 C API 并记录该函数。之前,它是隐式导出的,由于 Python 是用 -fvisibility=hidden 构建的,这种方式不再有效。

  • bpo-40724: 允许在类型规范中定义缓冲区槽。

  • bpo-40679: 修复了如果 qualname 参数为 NULL 时 _PyEval_EvalCode() 的崩溃问题。

  • bpo-40839: 由于历史原因,允许在不持有 GIL 的情况下调用 PyDict_GetItem()。现在不再允许这样做。

  • bpo-40826: 现在如果在 GIL 释放的情况下调用 PyOS_InterruptOccurred(),将会失败并产生致命错误。

  • bpo-40792: PyNumber_Index() 的结果现在总是具有确切的 int 类型。以前,结果可能是 int 的子类的实例。

  • bpo-39573: 将 Py_REFCNT()Py_SIZE() 宏转换为静态内联函数。它们不能再被用作左值:使用 Py_SET_REFCNT()Py_SET_SIZE() 来设置对象的引用计数和大小。这一变化是有意为之的不兼容更改,目的是为 C API 准备一个不透明的 PyObject 结构。

  • bpo-40703: PyType_FromSpec*() 函数不再覆盖类型的 "__module__" 属性,如果该属性是通过 "Py_tp_members" 或 "Py_tp_getset" 设置的。

  • bpo-39583: 从 Include/cpython/*.h 中删除了多余的 "extern C" 声明。

Python 3.9.0 beta 1

发布日期: 2020-05-19

安全性

核心与内置函数

  • bpo-40663: 正确生成省略了括号但需要的地方的注释(例如:Type[(str, int, *other))])。

  • bpo-40596: 修复了 Windows 上 str.isidentifier() 对于包含非 BMP 字符的非规范化字符串的处理。

  • bpo-40593: 改进了源代码中无效字符的语法错误提示。

  • bpo-40585: 修复了使用 codeop.compile_command() 时的一个 bug,该 bug 导致新解析器吞没了异常。由 Pablo Galindo 提供补丁。

  • bpo-40566: 将 PEP 573 应用到 abc

  • bpo-40502: 初始化 n->n_col_offset。(由 Joannah Nanjekye 提供补丁)

  • bpo-40527: 修复命令行参数解析:不再多次将错误写入 stderr。

  • bpo-1635741: 将 errno 移植到多阶段初始化 (PEP 489)。

  • bpo-40523: 为 weakref.proxy 对象添加 hash()reversed() 的透传。由 Pablo Galindo 提供补丁。

  • bpo-1635741: 将 syslog 移植到多阶段初始化 (PEP 489)。

  • bpo-40246: 由于向后兼容性的考虑,对于紧跟在保留关键字后且两者之间没有空格的字符串,撤销了在 bpo-40246 中引入的针对无效字符串前缀的专门错误消息报告。像 bg="#d00" if clear else"#fca" 这样的构造无法解析,这在如此短的通知时间内是不可接受的破坏。

  • bpo-40417: 修复了当调用 PyImport_ReloadModule 时 imp 模块的弃用警告。由 Robert Rouhani 提供补丁。

  • bpo-40408: 修复了在 GenericAlias 中嵌套类型变量(如 list[list[T]])的支持。

  • bpo-1635741: 将 _stat 模块移植到多阶段初始化 (PEP 489)。

  • bpo-29587: 在调用 generator.throw() 时启用隐式异常链。

  • bpo-40328: 为 CJKCodecs 添加生成映射头文件的工具。

  • bpo-40228: 现在设置 frame.f_lineno 对于源代码到字节码编译器的变化是健壮的。

  • bpo-38880: 在内置子解释器模块中添加了列出与通道端相关联的解释器的能力。

  • bpo-37986: 对于适合 long 的值,提高 PyLong_FromDouble() 的性能。

  • bpo-40662: 修复了 ast.get_source_segment() 对于具有不完整位置信息的 ast 节点的问题。由 Irit Katriel 提供补丁。

  • bpo-40665: 转换 bisect 以使用 Argument Clinic。

  • bpo-40536: 在 zoneinfo 模块中增加了 available_timezones() 函数。由 Paul Ganssle 提供补丁。

  • bpo-40645: hmac.HMAC 暴露了内部实现细节。属性 digest_consinnerouter 已被弃用,并将在未来移除。

  • bpo-40645: 内部模块 _hashlib 包装并暴露了 OpenSSL 的 HMAC API。新的代码将在 Python 3.10 中使用,在纯 Python HMAC 模块的内部实现细节不再作为公共 API 的一部分之后。

  • bpo-40637: 现在可以通过 configure --with-builtin-hashlib-hashes=sha3,blake1--without-builtin-hashlib-hashes 禁用或有选择地启用内置哈希模块。

  • bpo-37630: hashlib 模块现在可以在可用时使用 OpenSSL 的 SHA3 哈希和 SHAKE XOF。

  • bpo-40479: hashlib 现在可以与 OpenSSL 3.0.0-alpha2 一起编译。

  • bpo-40257: 恢复对 inspect.getdoc() 的更改。

  • bpo-40607: 当由于超时取消任务时,asyncio.wait_for() 现在会在取消过程中发生错误时传播异常。由 Roman Skurikhin 提供补丁。

  • bpo-40612: 修复了 SyntaxError 格式化中的边缘情况。如果偏移量 <= 0,则不打印插入符号。如果偏移量 > 行长度,则打印指向最后一个字符之后的插入符号。

  • bpo-40597: 如果文本内容行比 policy.max_line_length 长,则始终使用内容编码以确保它们被换行。

  • bpo-40571: 添加了 functools.cache() 作为访问 lru_cache(maxsize=None) 的无界缓存变体的更简单、更易发现的方式。

  • bpo-40503: PEP 615zoneinfo 模块。增加了对 IANA 时区数据库的支持。

  • bpo-40397: 从特殊泛型别名如 typing.List (未下标) 中移除了属性 __args____parameters__

  • bpo-40549: 将 posixmodule.c("posix" 或 "nt" 模块)转换为多阶段初始化(PEP 489)。

  • bpo-31033: 向 Future.cancel()Task.cancel() 添加了一个 msg 参数。

  • bpo-40541: 向 random.sample() 添加了一个可选的 counts 参数。

  • bpo-40515: sslhashlib 模块现在主动检查 OpenSSL 是否构建了线程支持。Python 3.7.0 使线程支持成为强制性要求,不再安全地工作于无线程构建。

  • bpo-31033: 当一个 asyncio.Task 被取消时,异常回溯现在一直链接回任务首次被中断的地方。

  • bpo-40504: functools.lru_cache() 对象现在可以是弱引用的目标。

  • bpo-40559: 修复了 asyncio.Task 的 C 实现中可能的内存泄漏。

  • bpo-40480: fnmatch.fnmatch() 在存在多个 * 模式字符时可能花费指数时间。通过生成更复杂的正则表达式来避免无用的回溯,修复了这一问题。

  • bpo-40495: compileall 现在能够使用硬链接来防止在不同优化级别的 .pyc 文件内容相同的情况下产生重复。

  • bpo-40457: ssl 模块现在支持不包含 TLS 1.0 和 1.1 方法的 OpenSSL 构建。

  • bpo-40355: 在存在格式错误的 ast.Dict 节点时,改进 ast.literal_eval() 的错误报告,而不是静默忽略任何不符合要求的元素。由 Curtis Bucher 提供补丁。

  • bpo-40465: 弃用了 random.shuffle() 的可选 random 参数。

  • bpo-40459: platform.win32_ver() 现在生成正确的 ptype 字符串而不是空字符串。

  • bpo-39435: pickle.loads() 的第一个参数现在是仅位置参数。

  • bpo-39305: 更新 nntplib 以合并 nntplib.NNTPnntplib._NNTPBase。由 Donghee Na 提供补丁。

  • bpo-32494: 更新 dbm.gnu 在调用 len() 时尽可能使用 gdbm_count。由 Donghee Na 提供补丁。

  • bpo-40453: 添加 isolated=True 关键字参数到 _xxsubinterpreters.create()。一个孤立的子解释器不能生成线程、生成子进程或调用 os.fork()

  • bpo-40286: 移除 _random.Random.randbytes()randbytes() 的 C 实现。为实现子类化,该方法现在直接在 Python 中实现:randbytes() 现在直接重用 getrandbits()

  • bpo-40394: 为 difflib.SequenceMatcher.find_longest_match() 添加了默认参数。

  • bpo-39995: 修复 concurrent.futures._ThreadWakeup 中的竞争条件:现在对 _ThreadWakeup 的访问受到关闭锁的保护。

  • bpo-30966: concurrent.futuresProcess.shutdown(wait=True) 现在显式关闭结果队列。

  • bpo-30966: 为 SimpleQueue 类添加一个新的 close() 方法以显式关闭队列。

  • bpo-39966: 撤销 bpo-25597。设置了 wraps 的 unittest.mock.MagicMock 对魔术方法使用默认返回值。

  • bpo-39791: 向 importlib.resources 添加了 files() 函数,支持包数据中的子目录,与 importlib_resources 1.5 中的回传匹配。

  • bpo-40375: 添加了 imaplib.IMAP4.unselect()。由 Donghee Na 提供补丁。

  • bpo-40389: repr() 现在当被调用于 typing.Union 两个类型之一为 NoneType 时返回 typing.Optional[T]

  • bpo-40291: 添加对 CAN_J1939 套接字的支持(Linux 5.4+ 可用)

  • bpo-40273: types.MappingProxyType 现在是可逆的。

  • bpo-39075: types.SimpleNamespace 的 repr 现在是插入顺序而非字母顺序。

  • bpo-40192: 在AIX上,thread_time() 现在通过具有纳秒级分辨率的``thread_cputime()``实现,而非之前具有10毫秒分辨率的``clock_gettime(CLOCK_THREAD_CPUTIME_ID)``。由Batuhan Taskaya提供补丁。

  • bpo-40025: 当_generate_next_value_在成员之后定义时,抛出TypeError。由Ethan Onstott提供补丁。

  • bpo-39058: 在argparse模块中,Namespace()和其他参数持有者的repr现在按照属性添加的顺序显示。以前,尽管模块的用户可见部分保留了参数顺序,但它是按字母顺序显示的。

  • bpo-24416: datetime.datedatetime.datetimeisocalendar() 方法现在返回一个 named tuple 而不是 tuple

文档

  • bpo-34790: 在 asyncio.wait() 的文档中添加了显式传递coros的移除版本说明。

  • bpo-40561: 为webbrowser的open函数提供文档字符串。

  • bpo-40499: 提到 asyncio.wait() 需要一个非空的awaitables集合。

  • bpo-39705: 在循环技术部分,为sorted()的教程示例提供了更好的解释。还包括一个新示例来解释sorted()的基本行为。

  • bpo-39435: 修正了文档中 pickle.loads() 的错误签名。

测试

  • bpo-40055: distutils.tests现在保存/恢复警告过滤器,使其保持不变。导入测试会导入docutils,后者导入pkg_resources,这会添加一个警告过滤器。

  • bpo-40436: test_gdb和test.pythoninfo现在检查gdb命令的退出代码。

构建

  • bpo-40653: 将_dirnameW移出HAVE_SYMLINK以修复潜在的编译问题。

  • bpo-40514: 向 configure 添加 --with-experimental-isolated-subinterpreters 构建选项:更好地隔离子解释器,实验性构建模式。

Windows

  • bpo-40650: 在pytime.c中包含winsock2.h以获取timeval。

  • bpo-40458: 增加保留堆栈空间以防止Windows上的溢出崩溃。

  • bpo-39148: 为ProactorEventLoop中的 asyncio 数据报端点添加IPv6支持。将未知地址族引发的异常更改为ValueError,因为它不是来自Windows API。

macOS

  • bpo-34956: 当在macOS上从源代码构建Python时,_tkinter``现在链接到非系统的Tcl和Tk框架,如果它们安装在 ``/Library/Frameworks 中,就像旧版macOS上的情况一样。如果通过使用``--enable-universalsdk=``或 -isysroot 明确配置了macOS SDK,则仅搜索SDK本身。默认行为仍然可以通过 --with-tcltk-includes--with-tcltk-libs 覆盖。

  • bpo-35569: 公开RFC 3542 IPv6套接字选项。

工具/示例

  • bpo-40479: 更新multissltest助手以测试最新的OpenSSL 1.0.2、1.1.0、1.1.1和3.0.0-alpha。

  • bpo-40431: 修复 turtledemo 中的一个语法错误,现在会引发 SyntaxError

  • bpo-40163: 修复multissltest工具。OpenSSL已更改旧版本的下载URL。multissltest工具现在尝试从当前和旧的下载URL下载。

C API

  • bpo-39465: 从C API中移除 _PyUnicode_ClearStaticStrings() 函数。

  • bpo-38787: 添加PyCFunction_CheckExact()宏用于精确类型检查,现在我们允许PyCFunction的子类型,以及PyCMethod_CheckExact()和PyCMethod_Check()用于新的PyCMethod子类型。

  • bpo-40545: 使用 PyAPI_FUNC() 声明 _PyErr_GetTopmostException() 以在C API中正确导出函数。该函数保持私有(``_Py``前缀)。

  • bpo-40412: 在最终化期间将inittab_copy置空,防止在嵌入式情况下未来的解释器初始化崩溃。由Gregory Szorc提供补丁。

  • bpo-40429: PyThreadState_GetFrame() 函数现在返回一个对帧的强引用。

  • bpo-40428: 从C API中移除以下函数。显式调用 PyGC_Collect() 以释放所有自由列表。

    • PyAsyncGen_ClearFreeLists()

    • PyContext_ClearFreeList()

    • PyDict_ClearFreeList()

    • PyFloat_ClearFreeList()

    • PyFrame_ClearFreeList()

    • PyList_ClearFreeList()

    • PySet_ClearFreeList()

    • PyTuple_ClearFreeList()

  • bpo-40421: 新增 PyFrame_GetBack() 函数:获取外层框架的下一个框架。

  • bpo-40421: 新增 PyFrame_GetCode() 函数:返回框架代码的一个借用引用。

  • bpo-40217: 确保使用 PyType_FromSpecWithBases() 创建的类型实例在垃圾收集器中遍历引用时会访问其类对象(作为提供的 tp_traverse 的扩展实现)。由 Pablo Galindo 提供补丁。

  • bpo-38787: 现在可以从C定义的堆类型方法访问模块C状态(PEP 573)。由 Marcel Plch 和 Petr Viktorin 提供补丁。

Python 3.9.0 alpha 6

发布日期: 2020-04-27

安全性

  • bpo-40121: 修复了在创建新套接字时引发的审计事件。

  • bpo-39073: 禁止在 email.headerregistry.Address 参数中使用 CR 或 LF,以防止头部注入攻击。

  • bpo-39503: CVE 2020-8492: urllib.request 模块的 AbstractBasicAuthHandler 类使用了一个低效的正则表达式,攻击者可以利用此漏洞导致拒绝服务。修复正则表达式以防止灾难性回溯。漏洞由 Ben Caller 和 Matt Schwager 报告。

核心与内置函数

  • bpo-40313: 提高 bytes.hex() 的性能。

  • bpo-40334: 切换到基于 PEG 的新解析器。更多详情见 PEP 617。要暂时切换回旧解析器,使用 -X oldparserPYTHONOLDPARSER=1。在 Python 3.10 中,我们将完全移除旧解析器,包括 parser 模块(已弃用)以及依赖于它的任何内容。

  • bpo-40267: 修复了分词器以显示正确的错误消息,当最后一个输入字符上有 SyntaxError 且没有换行符时。过去显示的是 unexpected EOF while parsing,而应该是 invalid syntax

  • bpo-39522: 当激活注释的延迟评估时,正确反解析字符串的显式 u 前缀。由 Batuhan Taskaya 提供补丁。

  • bpo-40246: 当标记器遇到带有无效前缀的字符串时,报告专门的错误消息“无效字符串前缀”。

  • bpo-40082: 修复信号处理程序:现在总是使用主解释器,而不是尝试获取当前的Python线程状态。

  • bpo-37388: str.encode()和str.decode()在开发模式或Python终止期间的调试模式下不再检查编码和错误。编解码器机制在非常晚调用str.encode()和str.decode()时不再工作。

  • bpo-40077: 修复 _json 中可能的反射泄漏,应遍历PyScannerObject的备忘录。

  • bpo-37207: 通过使用 PEP 590 的“vectorcall”调用约定,加速对“dict()”的调用。

  • bpo-40141: 向“ast.keyword”节点添加列和行信息。由Pablo Galindo提供补丁。

  • bpo-1635741: 将 resource 移植到多阶段初始化(PEP 489)。

  • bpo-1635741: 将 math 移植到多阶段初始化(PEP 489)。

  • bpo-1635741: 将_uuid模块移植到多阶段初始化(PEP 489)。

  • bpo-40077: 将json模块转换为使用 PyType_FromSpec()

  • bpo-40067: 改进赋值中多个星号表达式的错误消息。由Furkan Onder提供补丁。

  • bpo-1635741: 将_functools模块移植到多阶段初始化(PEP 489)。由Paulo Henrique Silva提供补丁。

  • bpo-1635741: 将operator模块移植到多阶段初始化(PEP 489)。由Paulo Henrique Silva提供补丁。

  • bpo-20526: 修复 PyThreadState_Clear()。“PyThreadState.frame”是一个借用引用,不是强引用:“PyThreadState_Clear()”不能调用“Py_CLEAR(tstate->frame)”。

  • bpo-1635741: 将time模块移植到多阶段初始化(PEP 489)。由Paulo Henrique Silva提供补丁。

  • bpo-1635741: 将_weakref扩展模块移植到多阶段初始化(PEP 489)。

  • bpo-40020: 修复parsetok.c中由于在罕见代码路径上错误使用realloc导致的泄漏和随后的崩溃。

  • bpo-39939: 添加了str.removeprefix和str.removesuffix方法以及相应的bytes、bytearray和collections.UserString方法,用于移除字符串中可能存在的前缀和后缀。完整描述请参见 PEP 616。由Dennis Sweeney提供补丁。

  • bpo-39481: 实现了PEP 585。这支持了list[int]、tuple[str, ...]等类型注解。

  • bpo-32894: 支持在延迟注解中解析无穷大数。由Batuhan Taşkaya提供补丁。

  • bpo-37207: 通过使用 PEP 590 vectorcall 调用约定,加快了对 list() 的调用速度。由Mark Shannon提供补丁。

  • bpo-40398: typing.get_args() 现在对于特殊的通用别名总是返回一个空元组。

  • bpo-40396: 函数 typing.get_origin()typing.get_args()typing.get_type_hints() 现在支持如 list[int] 这样的通用别名。

  • bpo-38061: 在FreeBSD上使用 closefrom() 优化了 subprocess 模块。单个 close(fd) 系统调用是廉价的,但当 sysconf(_SC_OPEN_MAX) 很高时,循环调用 close(fd) 在每个文件描述符上可能会花费几毫秒。

    在FreeBSD上提高性能的解决方法是加载并挂载fdescfs内核模块,但默认情况下未启用此功能。

    初始由Ed Maste (emaste)、Conrad Meyer (cem)、Kyle Evans (kevans) 和 Kubilay Kocak (koobs) 提供补丁:https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274

  • bpo-38061: 在FreeBSD上,os.closerange(fd_low, fd_high) 现在如果 fd_high 大于或等于 sysconf(_SC_OPEN_MAX) 则调用 closefrom(fd_low)

    初始由Ed Maste (emaste)、Conrad Meyer (cem)、Kyle Evans (kevans) 和 Kubilay Kocak (koobs) 提供补丁:https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274

  • bpo-40360: 由于 PEP 617lib2to3 模块即将被弃用。

  • bpo-40138: 修复了 os.waitpid() 在Windows上对于退出码大于 INT_MAX >> 8 的实现。退出状态现在被解释为一个无符号数。

  • bpo-39942: 当 typing.TypeVar 中缺少 "__name__" 时,将 "__main__" 设置为默认模块名。由Weipeng Hong提供补丁。

  • bpo-40275: 现在,logging 包在 unittest 中仅当使用 assertLogs() 断言时才会被延迟导入。

  • bpo-40275: 现在,asyncio 包在 unittest 中仅当使用 IsolatedAsyncioTestCase 类时才会被延迟导入。

  • bpo-40330: 在 ShareableList.__setitem__() 中,检查新字符串项的大小是在将其编码为 utf-8 之后,而不是之前。

  • bpo-40148: 新增了 pathlib.Path.with_stem() 方法来创建一个新路径,其中 stem 被替换。

  • bpo-40325: 弃用了在 random.sample() 中对集合对象的支持。

  • bpo-40257: 改进了 typing 模块的帮助信息。现在所有特殊形式和特殊泛型别名(如 UnionList)的文档字符串都会被显示。使用 help() 查看像 List[int] 这样的泛型别名时,会显示相应具体类型(在这个例子中是 list)的帮助信息。

  • bpo-40257: inspect.getdoc() 不再返回从对象类型或父类继承的文档字符串,如果这些文档字符串不是在对象本身定义的。在 pydoc 中,现在不仅对类、函数、方法等显示文档字符串,对任何拥有自己的 __doc__ 属性的对象也会显示。

  • bpo-40287: 修复了 SpooledTemporaryFile.seek() 返回位置的问题。

  • bpo-40290: 在 statistics.NormalDist() 中添加了 zscore() 方法。

  • bpo-40282: 允许 random.getrandbits(0) 成功执行并返回 0。

  • bpo-40286: 新增了 random.randbytes() 函数和 random.Random.randbytes() 方法来生成随机字节。

  • bpo-40277: collections.namedtuple() 现在为其字段访问器提供了一个人类可读的 repr。

  • bpo-40270: 现在 Windows 上包含的 sqlite3 编译时带有 json 扩展。这使得可以使用诸如 json_object 这样的函数。

  • bpo-29255: 在 KqueueSelector.select 中,当没有注册的 fds 时等待。

  • bpo-40260: 确保 modulefinder 使用 io.open_code() 并遵守编码注释。

  • bpo-40234: 再次允许在子解释器中生成守护线程(撤销之前禁止它们的更改)。

  • bpo-39207: 现在 ProcessPoolExecutor 中的工作器是按需生成的,只有在没有可用的空闲工作器可以重用时才会生成。这优化了启动开销并减少了因空闲工作器而损失的CPU时间。由Kyle Stanley提供补丁。

  • bpo-40091: 修复了日志模块中的fork挂起问题:现在使用新的私有方法 _at_fork_reinit() 在子进程中fork时重新初始化锁。

  • bpo-40149: 在 _abc._abc_data 类型中实现了遍历和清除槽。

  • bpo-40208: 移除了已弃用的 symtable.SymbolTable.has_exec()

  • bpo-40196: 修复了 symtable 模块中的一个错误,该错误导致错误地将全局变量报告为局部变量。由Pablo Galindo提供补丁。

  • bpo-40190: 向 posix.sysconf() 添加了对 _SC_AIX_REALMEM 的支持。

  • bpo-40182: 移除了 typing.NamedTuple 类的 _field_types 属性。

  • bpo-36517: 现在使用 typing.NamedTuple 进行多重继承时会引发错误,而不是静默忽略其他类型。

  • bpo-40126: 修复了在unittest.mock中还原多个补丁的问题。如果补丁的 __enter__() 失败,其 __exit__() 现在永远不会被调用。现在从 __exit__() 返回true会静默异常。

  • bpo-40094: http.server的CGIHTTPRequestHandler现在记录CGI脚本的退出代码,而不是os.waitpid()的CGI脚本退出状态。例如,如果脚本被信号11杀死,现在会记录:“CGI脚本退出代码 -11。”

  • bpo-40108: 当尝试使用 runpy 导入模块并在模块名称末尾错误地使用“.py”扩展名时,改进了错误消息。由Pablo Galindo提供补丁。

  • bpo-40094: 添加了 os.waitstatus_to_exitcode() 函数:将等待状态转换为退出代码。

  • bpo-40089: 修复 threading._after_fork(): 如果 fork 不是由 threading.Thread 生成的线程调用的,threading._after_fork() 现在会为 _main_thread 创建一个 _MainThread 实例,而不是 _DummyThread 实例。

  • bpo-40089: 为 _thread.Lock_thread.RLockthreading.RLockthreading.Condition 类添加一个私有的 _at_fork_reinit() 方法:在子进程的 fork 时重新初始化锁,将锁重置为未锁定状态。同时将 threading.Event 的私有方法 _reset_internal_locks() 重命名为 _at_fork_reinit()

  • bpo-25780: 在 socket 模块中公开 CAN_RAW_JOIN_FILTERS

  • bpo-39503: urllib.requestAbstractBasicAuthHandler 现在解析所有 WWW-Authenticate HTTP 头部,并接受每个头部多个挑战:使用第一个 Basic 挑战的领域。

  • bpo-39812: 通过添加一个内部的 threading._register_atexit(),从 concurrent.futures 中移除了守护线程,该函数在加入所有非守护线程之前调用注册的函数。这允许与不支持守护线程的子解释器兼容。

  • bpo-40050: 修复 importlib._bootstrap_external: 如果 winreg 内置模块已经在 sys.modules 中可用,避免创建新的 winreg 内置模块,并移除冗余导入。

  • bpo-40014: 修复 os.getgrouplist(): 如果 getgrouplist() 函数因为组列表太小而失败,尝试使用更大的组列表。在失败时,glibc 实现的 getgrouplist()ngroups 设置为组的总数。对于其他实现,将组列表大小加倍。

  • bpo-40017: 如果操作系统支持,添加 time.CLOCK_TAI 常量。

  • bpo-40016: 在 re 文档字符串中,阐明内联和参数编译标志之间的关系。

  • bpo-39953: 更新 ssl 模块中 OpenSSL 错误代码的内部表。

  • bpo-36144: 在 weakref.WeakValueDictionary 中添加了 PEP 584 运算符。

  • bpo-36144: 在 weakref.WeakKeyDictionary 中添加了 PEP 584 运算符。

  • bpo-38891: 修复了 multiprocessing.shared_memory.ShareableList__getitem____setitem__ 方法的线性运行时行为。这避免了在迭代 ShareableList 时的二次性能问题。由 Thomas Krennwallner 提供补丁。

  • bpo-39682: 移除了通过上下文管理器*关闭* pathlib.Path 对象的未文档化支持。上下文管理器的魔术方法仍然保留,但它们现在是无操作的,使得 Path 对象不可变。

  • bpo-36144: 在 collections.ChainMap 中添加了 PEP 584 运算符(||=)。

  • bpo-39011: 移除了 ElementTree 属性中的行尾规范化,因为被实体编号替换的行尾应保留其原始形式。

  • bpo-38410: 在 sys.set_asyncgen_hooks() 中正确处理 sys.audit() 失败。

  • bpo-36541: lib2to3 现在可以识别命名赋值表达式(海象运算符,:=)。

  • bpo-35967: 在平台中,延迟调用 'uname -p' 直到请求处理器属性。

  • bpo-35113: inspect.getsource() 现在为与模块级别类同名的内部类返回正确的源代码。装饰器也作为类源代码的一部分返回。由 Karthikeyan Singaravelan 提供补丁。

  • bpo-33262: 弃用将 None 作为 shlex.split()s 参数传递。由 Zackery Spytz 提供补丁。

  • bpo-31758: 防止使用未初始化的 _elementtree.XMLParser 对象时崩溃。由 Oren Milman 提供补丁。

文档

  • bpo-27635: pickle 文档错误地声称在反序列化时默认不调用 __new__

  • bpo-39879: 更新了 数据模型 文档,包括 dict() 插入顺序的保留。由 Furkan Onder 和 Samy Lahfa 提供补丁。

  • bpo-38387: 在 C-API 参考中记录了 PyDoc_STRVAR 宏。

  • bpo-13743: xml.dom.minidom.Element 类中的一些方法现在有了更好的文档记录。

测试

  • bpo-31904: 在 test_c_locale_coercion.py 中为 VxWorks RTOS 设置预期的默认编码。

  • bpo-40162: 更新 Travis CI 配置至 OpenSSL 1.1.1f。

  • bpo-40146: 在 Azure Pipelines 中更新 OpenSSL 至 1.1.1f。

  • bpo-40094: 添加 test.support.wait_process() 函数。

  • bpo-40003: test.bisect_cmd 现在会复制 Python 命令行选项如 -O-W。此外,如果 test.bisect_cmd-w/--verbose2 选项一起使用,会发出警告。

  • bpo-39380: 将编码作为仅关键字参数添加至 ftplib.FTPftplib.FTP_TLS 的构造函数中,并将默认编码从 latin-1 更改为 utf-8 以遵循 RFC 2640

  • bpo-39793: 在测试 make_msgid 时使用相同的域。由 Batuhan Taskaya 提供补丁。

  • bpo-1812: 修复了在从具有 get_data 方法的包加载时,doctest.testfile 中的新行处理。由 Peter Donis 提供补丁。

构建

  • bpo-38360: 支持 macOS -isysroot 标志的单参数形式。

  • bpo-40158: 修复 NuGet 包中的 CPython MSBuild 属性(build/native/python.props)。

  • bpo-38527: 修复 Solaris 上对“浮点字序”的配置检查:有时未使用正确的“grep”命令。由 Arnon Yaari 提供补丁。

Windows

  • bpo-40164: 将 Windows 更新至 OpenSSL 1.1.1f。

  • bpo-8901: 当使用 -E 选项时,忽略 Windows 注册表。

macOS

  • bpo-38329: python.org 的 macOS 安装程序现在会为 3.9 安装更新 /Library/Frameworks/Python.framework/Versions 的当前版本符号链接。以前,Current 仅针对 Python 2.x 安装进行更新。这应该使得在其他 macOS 应用程序中嵌入 Python 3 更加容易。

  • bpo-40164: 更新 macOS 安装程序构建以使用 OpenSSL 1.1.1g。

IDLE

  • bpo-38439: 添加一个 256×256 像素的 IDLE 图标以支持更多现代环境。由 Andrew Clover 创建。删除未使用的 macOS idle.icns 图标文件。

  • bpo-38689: 当获取调用提示时inspect.signature失败时,IDLE将不再冻结。

工具/示例

C API

Python 3.9.0 alpha 5

发布日期: 2020-03-23

安全性

  • bpo-38576: 在 http.client 中禁止主机名中的控制字符,解决 CVE 2019-18348。此类潜在的恶意头部注入 URL 现在会引发 InvalidURL。

核心与内置函数

  • bpo-40010: 优化多线程应用中的待处理调用。如果非主线程调度了一个待处理调用(Py_AddPendingCall()),字节码评估循环不再在每条字节码指令处中断以检查无法执行的待处理调用。只有主线程可以执行待处理调用。

    此前,字节码评估循环在每条指令处中断,直到主线程执行待处理调用。

  • bpo-1635741: 将_weakref扩展模块移植到多阶段初始化(PEP 489)。

  • bpo-1635741: 将 _collections 模块移植到多阶段初始化(PEP 489)。

  • bpo-40010: 优化多线程应用中的信号处理。如果非主线程接收到信号,字节码评估循环不再在每条字节码指令处中断以检查无法处理的待处理信号。只有主解释器的主线程可以处理信号。

    此前,字节码评估循环在每条指令处中断,直到主线程处理信号。

  • bpo-39984: 如果在子解释器中调用 Py_AddPendingCall(),现在该函数将被安排从子解释器调用,而不是从主解释器调用。每个子解释器现在都有自己预定的调用列表。

  • bpo-1635741: 将 _heapq 模块移植到多阶段初始化。

  • bpo-1635741: 将 itertools 模块移植到多阶段初始化(PEP 489)。

  • bpo-37207: 通过使用 PEP 590 vectorcall 调用约定,加速对 frozenset() 的调用。由 Donghee Na 提供补丁。

  • bpo-39984: 子解释器:将 _PyRuntimeState.ceval.tracing_possible 移动到 PyInterpreterState.ceval.tracing_possible:每个解释器现在拥有自己的变量。

  • bpo-37207: 通过使用 PEP 590 vectorcall 调用约定,加速对 set() 的调用。补丁由 Donghee Na 提供。

  • bpo-1635741: 将 _statistics 模块移植到多阶段初始化 (PEP 489)。

  • bpo-39968: 使用内联函数替换扩展模块的 get_module_state 宏。

  • bpo-39965: 如果在非异步函数内部使用 await 并且设置了 PyCF_ALLOW_TOP_LEVEL_AWAIT``(如在 asyncio REPL 中),则正确引发 ``SyntaxError。由 Pablo Galindo 提供补丁。

  • bpo-39562: 当给定 PyCF_ALLOW_TOP_LEVEL_AWAIT 标志时,允许在顶层执行异步推导式。补丁由 Batuhan Taskaya 提供。

  • bpo-37207: 通过使用 PEP 590 vectorcall 调用约定,加速对 tuple() 的调用。补丁由 Donghee Na 提供。

  • bpo-38373: 更改了列表的超额分配策略。如果新大小更接近超额分配的大小而不是旧大小,并且添加了填充,则不再进行超额分配。

  • bpo-39926: 将 Unicode 数据库更新到 Unicode 版本 13.0.0。

  • bpo-19466: 在 Python 关闭期间更早地清除守护线程的帧以调用对象析构函数。因此,现在可以更可靠地为守护线程发出“未关闭文件”资源警告。

  • bpo-38894: 修复了一个错误,该错误在存在指向用户没有读取权限的文件的符号链接时,调用 pathlib.Path.glob 会导致结果不完整。由 Pablo Galindo 和 Matt Wozniski 提供补丁。

  • bpo-39877: 修复 PyEval_RestoreThread() 在退出时由于守护线程导致的随机崩溃问题。现在直接访问 _PyRuntime 变量,而不是使用 tstate->interp->runtime,因为在调用 Py_Finalize()tstate 可能成为悬垂指针。此外,守护线程现在在尝试获取 GIL 之前退出。

  • bpo-39871: 修复 math.{atan2,copysign,remainder}() 中当第一个参数无法转换为 float 时可能出现的 SystemError。由 Zackery Spytz 提供补丁。

  • bpo-39776: 修复由 PyGILState_Ensure() 创建的线程可能获得重复 ID 的竞态条件。

    这影响了像 contextvar 缓存机制这样的 tstate->id 的消费者,在高线程负载下(在嵌入场景中观察到)可能返回无效的缓存对象。

  • bpo-39778: 修复了由于 collections.OrderedDict 类中弱引用处理不当导致的崩溃。补丁由 Pablo Galindo 提供。

  • bpo-1635741: 将 audioop 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-39702: 放宽 decorator 语法限制,允许任何有效的表达式 (PEP 614)。

  • bpo-38091: 调整导入死锁检测代码以避免自身死锁。

  • bpo-1635741: 将 _locale 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-39087: 在需要创建内部 UTF-8 缓存时,轻微优化 PyUnicode_AsUTF8()PyUnicode_AsUTF8AndSize()

  • bpo-39520: 修复无项的外部切片(foo[:,])的反解析问题。补丁由 Batuhan Taskaya 提供。

  • bpo-39220: 如果使用了 'from __future__ import annotations',则不优化注释。由 Pablo Galindo 提供补丁。

  • bpo-35712: 在布尔上下文中使用 NotImplemented 已被弃用。补丁由 Josh Rosenberg 贡献。

  • bpo-22490: 在 macOS 上,不将环境变量 __PYVENV_LAUNCHER__ 泄漏到解释器会话中。

  • bpo-39830: 在 zipfile 模块的 __all__ 中添加 zipfile.Path

  • bpo-40000: 改进了对 ast.Constant 节点验证的错误消息。由 Batuhan Taskaya 提供补丁。

  • bpo-39999: AST 节点类的 __module__ 现在设置为 "ast" 而不是 "_ast"。为虚拟 AST 节点类和弃用的属性添加了文档字符串。

  • bpo-39991: uuid.getnode() 现在跳过与 MAC 地址相同字符串长度(17个字符)的 IPv6 地址:仅使用 MAC 地址。

  • bpo-39988: 弃用了 ast.AugLoadast.AugStore 节点类,因为它们不再被使用。

  • bpo-39656: 确保在 POSIX 平台的虚拟环境中始终存在 bin/python3.# - 由 Anthony Sottile 提供。

  • bpo-39969: 弃用了 ast.Param 节点类,因为它不再被使用。由 Batuhan Taskaya 提供补丁。

  • bpo-39360: 确保所有工作线程在通过多处理模块的最终化处理程序隐式完成 multiprocessing.Pool 时退出。这修复了当 Pool 没有通过上下文管理器或调用 multiprocessing.Pool.terminate 正确完成时可能遇到的死锁情况。由 Batuhan Taskaya 和 Pablo Galindo 提供补丁。

  • bpo-35370: sys.settrace()、sys.setprofile() 和 _lsprof.Profiler.enable() 现在如果 "sys.setprofile" 或 "sys.settrace" 审计事件被拒绝,会正确报告 PySys_Audit() 错误。

  • bpo-39936: AIX:在从头构建 Python 时,修复了当子进程不可用时的 _aix_support 模块。现在它使用新的私有 _bootsubprocess 模块,而不是根据子进程是否可用有两个实现。因此,_aix_support.aix_platform() 的结果现在在子进程是否可用时是相同的。

  • bpo-36144: collections.OrderedDict 现在实现了 ||= (PEP 584)。

  • bpo-39652: 在 sqlite3.Cursor.description 中找到的列名现在仅在设置了 PARSE_COLNAMES 选项时在第一个 '[' 处截断。

  • bpo-39915: 确保 unittest.mock.AsyncMock.await_args_list 中的调用对象按照等待参数的顺序排列,而不是使用 unittest.mock.Mock.call_args,后者具有调用的最后一个值。由 Karthikeyan Singaravelan 提供补丁。

  • bpo-36144: 更新了 os.environos.environb 以支持 PEP 584 的合并(|)和更新(|=)操作符。

  • bpo-38662: ensurepip 模块现在通过 runpy 模块调用 pip。因此,它不再与捆绑的 pip 版本的内部 API 紧密耦合,使得内部和分发者都更容易更新到新版本的 pip

  • bpo-38075: 修复了当 bool 作为种子传递时 random.Random.seed() 方法的问题。

  • bpo-39916: 在 Path.glob() 中更可靠地使用 os.scandir()。当被中断时,它不再发出 ResourceWarning。

  • bpo-39850: multiprocessing 现在支持抽象套接字地址(如果运行的平台支持抽象套接字)。在创建任意地址时(如默认构造 multiprocessing.connection.Listener 对象时),优先选择抽象套接字以避免临时文件生成的地址对于 AF_UNIX 套接字地址来说过大的情况。由 Pablo Galindo 提供补丁。

  • bpo-36287: ast.dump() 不再输出具有默认值的可选字段和属性。AST 节点的可选字段和属性的默认值现在设置为类属性(例如,Constant.kind 设置为 None)。

  • bpo-39889: 修复了 ast.unparse() 对于包含单个元素的扩展切片(例如 a[i:j,])的问题。当使用元组索引时(例如 a[i, j]),移除冗余的元组。

  • bpo-39828: 修复 json.tool 以捕获 BrokenPipeError。由 Donghee Na 提供补丁。

  • bpo-13487: 避免了当 inspect.getmodule() 尝试遍历 sys.modules 时可能出现的 "RuntimeError: dictionary changed size during iteration"

  • bpo-39674: 恢复 "bpo-37330: open() 不再接受文件模式中的 'U'"。为了便于从 Python 2.7 过渡,Python 3.9 中保留了 open() 的 "U" 模式,但将在 Python 3.10 中移除。

  • bpo-28577: 32位前缀长度的 IPv4Networks 和 128位前缀的 IPv6Networks 的 hosts 方法现在返回包含单个 Address 的列表,而不是空列表。

  • bpo-39826: 向 logging HTTPHandler 添加 getConnection 方法,以启用自定义连接。

  • bpo-39763: 使用 subprocess 模块重新实现 distutils.spawn.spawn 函数。

  • bpo-39794: 添加 --without-decimal-contextvar 构建选项。这启用了线程本地而非协程本地的上下文。

  • bpo-36144: collections.defaultdict 现在实现了 | 操作符 (PEP 584)。

  • bpo-39517: 修复 runpy.run_path() 在使用路径类对象时的问题。

  • bpo-39775: 将 inspect.Signature.parameters 改回 collections.OrderedDict。在 Python 3.9.0a4 中,这被改为 dict

  • bpo-39678: 重构 concurrent.futures.ProcessPoolExecutor 中的 queue_manager,使其更易于维护。

  • bpo-39764: 修复在 PyAsyncGenObject Task 上调用 get_stack 时的 AttributeError。

  • bpo-39769: compileall.compile_dir() 函数的 ddir 参数和 compileall 命令行标志 -d 不再为正在编译的目录树根下的子模块生成错误的路径名到 pyc 文件中。这修复了自 Python 3.5 引入的回归问题。

  • bpo-36144: types.MappingProxyType 对象现在支持来自 PEP 584 的合并 (|) 操作符。

  • bpo-38691: 当使用 -E-I 命令行选项时,importlib 模块现在忽略 PYTHONCASEOK 环境变量。

  • bpo-39719: 移除 tempfile.SpooledTemporaryFile.softspace(),因为文件在 Python 3 中不再有 softspace 属性。由 Shantanu 提供补丁。

  • bpo-39667: 提升zipfile.Path与pathlib.Path的兼容性,并修复zipp 3.0中发现的性能下降问题。

  • bpo-39638: 保留 AST 节点文档字符串中的ASDL签名。由Batuhan Taskaya提供补丁。

  • bpo-39639: 弃用 ast.Suite 节点类,因为它不再被使用。由Batuhan Taskaya提供补丁。

  • bpo-39609: 向默认的asyncio执行器添加thread_name_prefix。

  • bpo-39548: 修复 urllib.request.AbstractDigestAuthHandler 中当可选参数 qop 不存在时的头部处理问题。

  • bpo-39509: HTTP状态码 103 EARLY_HINTS425 TOO_EARLY 被添加到 http.HTTPStatus 中。由Donghee Na提供补丁。

  • bpo-39507: 向http库的HTTPStatus添加HTTP状态418 "I'm a Teapot"。由Ross Rhodes提供补丁。

  • bpo-39495: 为保持Python和C实现之间的一致性,移除 xml.etree.ElementTree.TreeBuilder.start()attrs 参数的默认值。

  • bpo-38971: BPO中的开放问题表明希望使codecs.open()的实现与io.open()保持一致,后者实现了try/except以确保在引发异常之前关闭文件流。

  • bpo-38641: 向 lib2to3``添加了对 ``returnyield 语句中星号表达式的支持。由Vlad Emelianov提供补丁。

  • bpo-37534: 使用minidom模块生成XML文档时,增加了添加独立文档声明的能力。所有更改均旨在生成符合可扩展标记语言(XML)1.0(第五版)W3C推荐标准的文档(参见:https://www.w3.org/TR/xml/#sec-prolog-dtd)。

  • bpo-34788: 为 ipaddress 添加对范围限定IPv6地址的支持。由Oleksandr Pavliuk提供补丁。

  • bpo-34822: 简化了订阅的AST。简单索引现在由其值表示,扩展切片表示为元组。astIndexExtSlice 被认为已弃用,将在未来的Python版本中移除。在此期间,Index(value) 现在返回 value 本身,ExtSlice(slices) 返回 Tuple(slices, Load())

文档

  • bpo-39868: 更新了语言参考以符合 PEP 572

  • bpo-13790: 在格式文档中将'string'改为'specification'。

  • bpo-17422: 语言参考不再将默认类命名空间限制为仅字典。

  • bpo-39530: 修正了关于混合类型数值比较的误导性文档。

  • bpo-39718: 更新 token 文档以反映Python 3.8中的新增内容。

  • bpo-39677: 将模块 disMAKE_FUNCTION 的操作数名称从 argc 改为 flags

测试

  • bpo-40019: 如果检测到gdb因Python二进制文件被优化而未能读取调试信息,test_gdb现在会跳过测试。

  • bpo-27807: 如果 sys.path 的路径包含 .pth 文件,test_site.test_startup_imports() 现在会跳过。

  • bpo-26067: 在无法将用户的uid或gid解析为名称时,不使test_shutil test_chown测试失败。

  • bpo-39855: test_subprocess.test_user() 现在在用户名不存在时跳过测试。例如,在Linux上如果用户"nobody"不存在,则跳过测试。

构建

  • bpo-39761: 修复了在没有额外DFLAGS的情况下使用DTrace构建的问题。

  • bpo-39763: 如果 subprocess 模块不可用,setup.py 现在使用 subprocess 模块的基本实现:在构建所需的C扩展模块之前。

  • bpo-1294959: 在配置脚本中添加 --with-platlibdir 选项:平台特定的库目录名称,存储在新的 sys.platlibdir 属性中。它用于构建平台特定的扩展模块路径和标准库路径。在大多数平台上,它等于 "lib"。在 Fedora 和 SuSE 上,64位平台上它等于 "lib64"。补丁由 Jan Matějek、Matěj Cepl、Charalampos Stratakis 和 Victor Stinner 提供。

Windows

  • bpo-39930: 确保安装包中包含所需的 vcruntime140.dll

  • bpo-39847: 避免在计算机休眠时等待互斥锁(用于来自 threading 的锁相关对象)时挂起,大约49天的运行时间。

  • bpo-38597: 当不可再发行的版本不可用时,distutils 将不再静态链接 vcruntime140.dll。CPython 的所有未来版本都将包含此 DLL 的副本,以确保分发的扩展可以继续加载。

  • bpo-38380: 更新 Windows 构建以使用 SQLite 3.31.1。

  • bpo-39789: 更新 Windows 发布构建机器到 Visual Studio 2019 (MSVC 14.2)。

  • bpo-34803: 现在为 nuget.org 提供的包包括存储库引用和捆绑的图标图像。

macOS

  • bpo-38380: 更新 macOS 构建以使用 SQLite 3.31.1。

IDLE

  • bpo-27115: 对于 '转到行',使用具有 IDLE 标准行为和改进错误检查的查询框子类。

  • bpo-39885: 由于点击获取 IDLE 上下文菜单会移动光标,任何文本选择都应被清除,现在确实如此。

  • bpo-39852: 编辑 "转到行" 现在会清除任何选择,防止意外删除。它还会更新状态栏上的 Ln 和 Col。

  • bpo-39781: 选择代码上下文行不再导致跳转。

工具/示例

  • bpo-36184: 将 python-gdb.py 移植到 FreeBSD。python-gdb.py 现在检查 "take_gil" 函数名来检查帧是否尝试获取 GIL,而不是检查特定于 Linux 的 "pthread_cond_timedwait",这可能是与 GIL 不同的条件。

  • bpo-38080: 在 lib2to3.fixes.fix_urllib 模块中添加了对修复 getproxies 的支持。由 José Roberto Meza Cabrera 提供补丁。

C API

Python 3.9.0 alpha 4

发布日期: 2020-02-25

安全性

  • bpo-39184: 向 fcntlmsvcrtosresourceshutilsignalsyslog 中的函数添加审计事件。

  • bpo-39401: 避免在 Windows 7 及更早版本上启动时不安全的 DLL 加载。

  • bpo-39184: 向 os 和 pty 模块中的命令执行函数添加审计事件。

核心与内置函数

  • bpo-39382: 修复了 issubclass() 单继承路径中的一个释放后使用问题,当对象的 __bases__ 有一个单一引用时,其第一个项目也是如此。由 Yonatan Goldschmidt 提供补丁。

  • bpo-39573: 更新 clinic 工具以使用 Py_IS_TYPE()。由 Donghee Na 提供补丁。

  • bpo-39619: 在 HP-UX 系统上启用 os.chroot() 的使用。

  • bpo-39573: 添加 Py_IS_TYPE() 静态内联函数,用于检查对象 o 的类型是否为 type

  • bpo-39606: 修复由 bpo-39386 的修复引起的回归问题,该问题阻止了对已经关闭或耗尽的异步生成器调用 aclose

  • bpo-39579: 更改 ast_for_dotted_name 中构造的 Attribute 节点的结束列偏移量,使其指向当前节点的末尾,而不是最后一个 NAME 节点的末尾。

  • bpo-1635741: 将 _crypt 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-1635741: 将 _contextvars 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-39510: 修复在已关闭的 BufferedReader 上的 readinto() 方法中的段错误。

  • bpo-39502: 修复 64 位 AIX 上的 time.localtime(),以支持 1902 年之前和 2038 年之后的年份。由 M Felt 提供补丁。

  • bpo-39492: 修复 C Pickler 中的一个引用循环,该循环阻止了被删除、腌制的对象的垃圾回收。

  • bpo-39453: 修复了 list.__contains__() 中在比较项目时列表被更改可能导致的崩溃。由 Donghee Na 提供补丁。

  • bpo-39434: floor division 浮点运算现在有更好的性能。同时,更新了此操作的 ZeroDivisionError 消息。由 Donghee Na 提供补丁。

  • bpo-1635741: 将 _codecs 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-1635741: 将 _bz2 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-1635741: 将 _abc 扩展模块移植到多阶段初始化 (PEP 489)。

  • bpo-39320: 用两个更简单的字节码替换构建字典的两个复杂字节码。添加了新的字节码 DICT_MERGEDICT_UPDATE,移除了旧的字节码 BUILD_MAP_UNPACKBUILD_MAP_UNPACK_WITH_CALL

  • bpo-39219: 分词器中引发的语法错误现在总是设置正确的 "text" 和 "offset" 属性。

  • bpo-36051: 在大型 bytes.join 操作期间释放 GIL。由 Bruce Merry 提供补丁。

  • bpo-38960: 修复 FreeBSD 上的 DTrace 构建问题。由 David Carlier 提供补丁。

  • bpo-37207: 通过使用 PEP 590 的 vectorcall 调用约定,将 range() 的调用速度提高约 30%。由 Mark Shannon 提供补丁。

  • bpo-36144: dict (和 collections.UserDict) 对象现在支持 PEP 584 的合并(|)和更新(|=)操作符。由 Brandt Bucher 提供补丁。

  • bpo-32856: 优化了在推导式中赋值临时变量的惯用法。现在在推导式中使用 for y in [expr] 与简单赋值 y = expr 一样快。

  • bpo-30566: 修复尝试使用 punycode 编解码器解码无效字符串时的 IndexError

  • bpo-39649: 移除 bdb.Bdb.format_stack_entry 中对 __args__ 的过时检查。

  • bpo-39648: 扩展 math.gcd()math.lcm() 以处理多个参数。

  • bpo-39681: 修复一个回归问题,即 C pickle 模块不允许从没有暴露 readinto() 方法的类文件对象中反序列化。

  • bpo-35950: 在只读的 io.BufferedReader 实例上调用 io.BufferedReader.truncate() 时抛出 io.UnsupportedOperation

  • bpo-39479: 添加 math.lcm() 函数:最小公倍数。

  • bpo-39674: 撤销“不在 collections 模块中暴露抽象集合类”的更改(bpo-25988)。像 collections.Mapping 这样的 ABC 别名在 Python 3.9 中保留以方便从 Python 2.7 过渡,但将在 Python 3.10 中移除。

  • bpo-39104: 修复当任务序列化失败时 shutdown(wait=False) 上的 ProcessPoolExecutor 挂起问题。

  • bpo-39627: 修复了 TypedDict 对继承键的总体验证。

  • bpo-39474: 修复了像 (a)(b)(a)[b](a).b 这类表达式的 AST 起始位置。

  • bpo-21016: pydoctrace 模块现在使用 sysconfig 模块来获取 Python 标准库的路径,以支持像 Fedora 上的 /usr/lib64/python3.9/ 这样的不常见安装路径。由 Jan Matějek 提供补丁。

  • bpo-39590: Collections.deque 现在在 deque.__contains__ 和 deque.count 期间保持强引用,修复了崩溃问题。

  • bpo-39586: Python 3.9 中已弃用 distutils 的 bdist_msi 命令,改用 bdist_wheel (wheel 包) 。

  • bpo-39595: 提高了 zipfile.Path 对于包含大量条目的文件的性能。同时提高了性能并修复了与 importlib_metadata 1.5 发布的小问题。

  • bpo-39350: 修复了 fractions.Fraction 如果分子和/或分母是 int 子类时的回归问题。现在使用 math.gcd() 函数来规范化 分子分母math.gcd() 总是返回 int 类型。以前,GCD 类型依赖于 分子分母

  • bpo-39567: 为 os.walk()os.fwalk()pathlib.Path.glob()pathlib.Path.rglob() 添加了审计。

  • bpo-39559: 从 uuid.getnode() 中移除了未使用的、未记录的参数 getters

  • bpo-38149: 现在每次调用 glob.glob()glob.iglob() 时,sys.audit() 只被调用一次。

  • bpo-39546: 修复了 ArgumentParser 中的一个回归问题,其中 allow_abbrev=False 对于使用除 "-" 之外的前缀字符的长选项被忽略。

  • bpo-39450: 在从 unittest.case.shortDescription() 返回之前,去除了文档字符串中的空白。

  • bpo-12915: 在 pkgutil 模块中添加了一个新函数 resolve_name。该函数将形如 'a.b.c.d''a.b:c.d' 的字符串解析为一个对象。在示例中,a.b 是一个包/模块,而 c.d 是通过递归属性访问到达的该包/模块内的一个对象。

  • bpo-39353: binascii.crc_hqx() 函数不再被弃用。

  • bpo-39493: 将 typing.IO.closed 标记为属性

  • bpo-39491: 添加 typing.Annotatedinclude_extras 参数到 typing.get_type_hints() 作为 PEP 593 的一部分。由 Till Varoquaux 提供补丁,文档由 Till Varoquaux 和 Konstantin Kashin 编写。

  • bpo-39485: 修复 unittest.mock.create_autospec() 中的一个错误,该错误会抱怨在扩展模块中定义的自定义描述符返回函数时的参数数量不正确。

  • bpo-38932: Mock 在 reset_mock() 时完全重置子对象。由 Vegard Stikbakke 提供补丁

  • bpo-39082: 允许 AsyncMock 正确修补静态/类方法

  • bpo-39432: 在 distutils 中实现了 PEP-489 算法,用于非 ASCII "PyInit_..." 符号名称,以确保在 Windows 上也导出正确的初始化符号。

  • bpo-18819: 在 tarfile 存档中为非设备文件省略 devmajordevminor 字段,实现与 GNU tar(1) 的比特级兼容。

  • bpo-39349: 向 concurrent.futures.Executor.shutdown() 添加了一个新的 cancel_futures 参数,该参数会取消所有尚未开始运行的待处理期货,而不是在关闭执行器之前等待它们完成。

  • bpo-39274: bool(fraction.Fraction) 现在即使 (numerator != 0) 不返回布尔值(例如 numpy 数字),也会返回一个布尔值。

  • bpo-34793: 移除了对 with (await asyncio.lock):with (yield from asyncio.lock): 的支持。对于 asyncio.Conditionasyncio.Semaphore 同样适用。

  • bpo-25597: 确保在向 unittest.mock.MagicMock 提供 wraps 时,它被用于计算魔术方法的返回值,而不是使用默认返回值。由Karthikeyan Singaravelan提供的补丁。

  • bpo-36350: inspect.Signature.parametersinspect.BoundArguments.arguments 现在是字典而不是有序字典。由Rémi Lapeyre贡献的补丁。

  • bpo-35727: 修复了在multiprocessing.Process中使用sys.exit()和sys.exit(None)时的退出代码传播问题。

  • bpo-32173: * 将 lazycache``函数添加到 ``__all__ 中。 * 使用 dict.clear 来清除缓存。 * 重构 getline 函数和 checkcache 函数。

文档

  • bpo-17422: 语言参考现在指定了对类命名空间的限制。基于Ethan Furman的补丁改编。

  • bpo-39572: 更新了 TypedDicttotal 标志的文档。

  • bpo-39654: 在pyclbr文档中,将'class'更新为'module'并在适当的地方添加readmodule注释。由Hakan Çelik提供的补丁。

  • bpo-39153: 澄清了以下函数的引用计数语义:- PyObject_SetItem - PyMapping_SetItemString - PyDict_SetItem - PyDict_SetItemString

  • bpo-39392: 解释在使用turtle填充时,重叠区域可能不会被填充。

  • bpo-39369: 更新mmap readline方法的描述。readline方法确实会更新文件位置,这一点不应被忽视,因为这可能会给程序员留下它不更新的印象。

  • bpo-9056: 在文档的PDF版本中为子章节添加目录。

测试

构建

  • bpo-39489: 移除 COUNT_ALLOCS 特殊构建。

Windows

  • bpo-39553: 删除与SxS清单相关的未使用代码。

  • bpo-39439: 在Windows上激活virtualenv时,尊重Python路径。

  • bpo-39393: 改进尝试加载具有未解决依赖项的DLL时的错误消息。

  • bpo-38883: home()expanduser() 在Windows上现在更倾向于使用 USERPROFILE,不再使用 HOME,因为普通用户账户通常不设置后者。这使得它们再次表现得像 os.path.expanduser(),后者在3.8版本中被改为忽略 HOME,参见 bpo-36264

  • bpo-39185: build.bat脚本新增了非常安静的输出选项(-q)和非常详细的输出选项(-vv)。

IDLE

  • bpo-39663: 为pyparse的find_good_parse_start()添加测试。

  • bpo-39600: 在字体配置窗口中,移除重复的字体名称。

  • bpo-30780: 为按钮、高亮和键标签页添加剩余的配置对话框测试。

  • bpo-39388: IDLE设置的取消按钮现在会取消待处理的更改。

  • bpo-38792: 如果发生 KeyboardInterrupt 或shell重启,关闭IDLE shell的调用提示。由Zackery Spytz提供补丁。

C API

  • bpo-35081: 将 bytes_methods.h 头文件移动到内部C API中,更名为 pycore_bytes_methods.h:它仅包含私有符号(前缀为 _Py),除了 PyDoc_STRVAR_shared() 宏。

  • bpo-35081: 将 dtoa.h 头文件移动到内部C API中,更名为 pycore_dtoa.h:它仅包含私有函数(前缀为 _Py)。现在编译 mathcmath 模块时必须定义 Py_BUILD_CORE 宏。

  • bpo-39573: 添加 Py_SET_SIZE() 函数以设置对象的大小。

  • bpo-39500: PyUnicode_IsIdentifier() 不再在字符串未准备好时调用 Py_FatalError()

  • bpo-39573: 添加 Py_SET_TYPE() 函数以设置对象的类型。

  • bpo-39573: 添加 Py_SET_REFCNT() 函数以设置对象的引用计数器。

  • bpo-39542: 将 PyType_HasFeature()PyType_Check()PyType_CheckExact() 宏转换为静态内联函数。

  • bpo-39542: 在受限 C API 中,PyObject_INIT()PyObject_INIT_VAR() 现在被定义为 PyObject_Init()PyObject_InitVar() 的别名,以使它们的实现变得不透明。这避免了在受限 C API 中泄露实现细节。将以下函数从受限 C API 中排除:_Py_NewReference()_Py_ForgetReference()_PyTraceMalloc_NewReference()_Py_GetRefTotal()

  • bpo-39542: 将垃圾回收机制从受限 C API 中排除:它需要访问 PyTypeObject 和 PyThreadState 结构体字段,而这些结构在受限 C API 中是不透明的。

  • bpo-39511: PyThreadState_Clear() 函数现在会调用 PyThreadState.on_delete 回调。在此之前,这是在 PyThreadState_Delete() 中进行的。

  • bpo-38076: 修复了仅在清除模块全局变量后清除解释器状态的问题,以保证在运行时销毁期间从 C 扩展访问模块状态。

  • bpo-39245: Vectorcall API (PEP 590) 被公开,增加了函数 PyObject_VectorcallPyObject_VectorcallMethodPyVectorcall_FunctionPyObject_CallOneArgPyObject_CallMethodNoArgsPyObject_CallMethodOneArgPyObject_FastCallDict,以及标志 Py_TPFLAGS_HAVE_VECTORCALL

Python 3.9.0 alpha 3

发布日期: 2020-01-24

核心与内置函数

  • bpo-39427: 在命令行帮助部分记录了 -X 选项的所有可能性。由 Pablo Galindo 提供补丁。

  • bpo-39421: 修复了在使用 heapq 模块中的函数和自定义比较运算符时可能出现的崩溃问题。

  • bpo-39386: 防止异步迭代器的双重等待。

  • bpo-17005: 向 functools 模块添加 functools.TopologicalSorter,以提供执行图拓扑排序的功能。由 Pablo Galindo、Tim Peters 和 Larry Hastings 提供补丁。

  • bpo-39320: 用三个更简单的字节码替换四个用于构建序列的复杂字节码。

    以下四个字节码已被移除:

    • BUILD_LIST_UNPACK

    • BUILD_TUPLE_UNPACK

    • BUILD_SET_UNPACK

    • BUILD_TUPLE_UNPACK_WITH_CALL

    新增了以下三个字节码:

    • LIST_TO_TUPLE

    • LIST_EXTEND

    • SET_UPDATE

  • bpo-39336: 发布不可变模块对象的导入加载器现在除了可以发布单个模块外,还可以发布不可变包。

  • bpo-39322: 新增了一个函数 gc.is_finalized() 用于检查对象是否已被垃圾收集器终结。由Pablo Galindo提供补丁。

  • bpo-39048: 通过查找 __aenter__() 特殊方法在 __aexit__() 特殊方法之前进入异步上下文管理器时,改进了当传递错误类型给 async with 语句时显示的错误消息。由Géry Ogam提供补丁。

  • bpo-39235: 修复了函数调用中单独生成器表达式的AST结束位置,例如 f(i for i in a)。

  • bpo-39209: 正确处理交互模式下的多行令牌。由Pablo Galindo提供补丁。

  • bpo-1635741: 将_json扩展模块移植到多阶段初始化(PEP 489)。

  • bpo-39216: 修复了仅位置参数的常量折叠优化 - 由Anthony Sottile提供。

  • bpo-39215: 修复了当嵌套函数在仅位置参数上有注释时引发的 SystemError - 由Anthony Sottile提供。

  • bpo-39200: 修正了在没有参数的情况下调用 min()max() 时的错误消息。补丁由Donghee Na提供。

  • bpo-39200: 修正了尝试在没有参数的情况下构造 range 对象时的错误消息。由Pablo Galindo提供补丁。

  • bpo-39166: 修复了在跟踪异步for循环的最后一次迭代时,跟踪函数中错误的行执行报告。补丁由Pablo Galindo提供。

  • bpo-39114: 修复了在跟踪带有名称绑定的异常处理程序时,跟踪函数中错误的行执行报告。补丁由Pablo Galindo提供。

  • bpo-39156: 将COMPARE_OP字节码指令拆分成四个不同的指令。

    • 用于富比较的COMPARE_OP

    • 用于'is'和'is not'测试的IS_OP

    • 用于'in'和'is not'测试的CONTAINS_OP

    • JUMP_IF_NOT_EXC_MATCH 用于在 'try-except' 语句中检查异常。

    这提高了解释器的清晰度,并应提供适度的加速。

  • bpo-38588: 修复了在调用 PyObject_RichCompareBool() 时 dict 和 list 可能崩溃的问题。

  • bpo-13601: 默认情况下,sys.stderr 现在是行缓冲的,即使 stderr 被重定向到文件。你仍然可以通过传递 -u 命令行选项或设置 PYTHONUNBUFFERED 环境变量来使 sys.stderr 无缓冲。

    (由 Jendrik Seipp 在 bpo-13601 中贡献。)

  • bpo-38610: 通过在调用 PyObject_RichCompareBool() 时保持对列表元素的强引用,修复了几个列表方法可能崩溃的问题。

  • bpo-32021: 在 mimetypes encodings_map 中包括 brotli .br 编码。

  • bpo-39430: 修复了 tarfile 中懒加载导入的竞态条件。

  • bpo-39413: os.unsetenv() 函数现在在 Windows 上也可用。

  • bpo-39390: 修复了 shutil.copytree()ignore 回调的一个回归问题。参数类型现在再次为 strList[str]

  • bpo-39395: os.putenv()os.unsetenv() 函数现在总是可用。

  • bpo-39406: 如果 setenv() C 函数可用,os.putenv() 现在用 setenv() 而不是 putenv() 实现,因此 Python 不必处理环境变量内存。

  • bpo-39396: 在 AIX 7.1 上修复 math.nextafter(-0.0, +0.0)

  • bpo-29435: 允许 tarfile.is_tarfile() 与文件和类文件对象一起使用,就像 zipfile.is_zipfile() 一样。由 William Woodruff 提供补丁。

  • bpo-39377: 从 json.loads() 中移除了 encoding 选项。自 Python 3.1 起已被弃用。

  • bpo-39389: 在 gzip 存档中写入准确的压缩级别元数据,而不是总是信号最大压缩。

  • bpo-39366: 之前弃用的 nntplib.NNTPxpath()xgtitle() 方法已被移除。

  • bpo-39357: 移除 bz2.BZ2Filebuffering 参数。自 Python 3.0 起,该参数被忽略,使用它会发出 DeprecationWarning。传递一个已打开的文件对象以控制文件的打开方式。compresslevel 参数变为仅关键字参数。

  • bpo-39353: 弃用 binhex4 和 hexbin4 标准。弃用 binhex 模块以及以下 binascii 函数:b2a_hqx()a2b_hqx()rlecode_hqx()rledecode_hqx()crc_hqx()

  • bpo-39351: 移除 base64.encodestring()base64.decodestring(),这两个别名自 Python 3.1 起已被弃用:改用 base64.encodebytes()base64.decodebytes()

  • bpo-39350: 移除 fractions.gcd() 函数,该函数自 Python 3.5 起已被弃用 (bpo-22486):改用 math.gcd()

  • bpo-39329: LMTP 构造函数现在有一个可选的 timeout 参数。由 Donghee Na 提供补丁。

  • bpo-39313: 为 RefactoringTool 添加一个新的 exec_function 选项(CLI 中的 --exec-function)以使 exec 成为函数。由 Batuhan Taskaya 提供补丁。

  • bpo-39259: FTP_TLSFTP_TLS 现在如果构造函数的给定超时为零,则会引发 ValueError,以防止创建非阻塞套接字。由 Donghee Na 提供补丁。

  • bpo-39259: SMTPSMTP_SSL 现在如果构造函数的给定超时为零,则会引发 ValueError,以防止创建非阻塞套接字。由 Donghee Na 提供补丁。

  • bpo-39310: 添加 math.ulp():返回一个浮点数的最低有效位的值。

  • bpo-39297: 提高了 importlib.metadata 分发发现的性能以及对无法访问的 sys.path 条目的恢复能力(importlib_metadata v1.4.0)。

  • bpo-39259: 现在,如果给 NNTPNNTP_SSL 的构造函数的超时时间为零,它们会抛出一个 ValueError,以防止创建非阻塞套接字。由Donghee Na提供补丁。

  • bpo-38901: 当您指定prompt='.'或等效地使用python -m venv --prompt . ...时,当前目录的basename将被用来设置创建的venv在激活时的提示符。

  • bpo-39288: 添加 math.nextafter(): 返回 xy 方向的下一个浮点数值。

  • bpo-39259: 现在,如果给 POP3POP3_SSL 的构造函数的超时时间为零,它们会抛出一个 ValueError,以防止创建非阻塞套接字。补丁由Donghee Na提供。

  • bpo-39242: 更新了Gmane域名,从news.gmane.org改为news.gmane.io,用作 NNTP 新闻阅读器服务器和nntplib测试的示例。

  • bpo-35292: 将 SimpleHTTPRequestHandler.guess_type 代理到 mimetypes.guess_type,以便 mimetypes.init 被延迟调用,避免在导入 http.server 模块时产生不必要的开销。

  • bpo-39239: select.epoll.unregister() 方法不再忽略 EBADF 错误。

  • bpo-38907: 在http.server脚本中,恢复在Windows上绑定到IPv4。

  • bpo-39152: 修复ttk.Scale.configure([name])返回名称或所有选项的配置元组。Giovanni Lombardo贡献了部分补丁。

  • bpo-39198: 如果在 Logger.isEnabledFor 中抛出异常(例如,由于asyncio超时或stopit),logging``全局锁可能不会被适当释放,导致死锁。此更改用 ``try...finally 包装该代码块,以确保锁被释放。

  • bpo-39191: 在 loop.run_until_complete() 中开始新任务前检查是否有运行循环,以快速失败;它防止在引发异常之前新任务产生的副作用。

  • bpo-38871:在 :mod:!lib2to3` 中正确地为包含 lambda 表达式的基于过滤器的语句添加括号。由 Donghee Na 提供补丁。

  • bpo-39142:对 logging.config.dictConfig 进行了更改,以避免将具名元组的实例转换为 ConvertingTuple。假设命名元组过于专门化,不能像普通元组那样处理;如果具名元组的用户需要 ConvertingTuple 的功能,他们必须自己在具名元组类中实现。

  • bpo-39158:ast.literal_eval() 现在支持空集合。

  • bpo-39129:修复了 asyncio.TimeoutError 的导入路径。

  • bpo-39057urllib.request.proxy_bypass_environment() 现在忽略前导点,并且不再忽略尾随换行符。

  • bpo-39056:修复了在 -W 选项中处理无效警告类别的问题。如果不需要,不再导入 re 模块。

  • bpo-39055:当输入以单个 \n 结尾时,带有 validate=Truebase64.b64decode() 现在会引发 binascii.Error。

  • bpo-21600:修复 mock.patch.stopall() 以停止使用 mock.patch.dict() 创建的活跃补丁。

  • bpo-39019:为 tempfile.SpooledTemporaryFile 实现了虚拟的 __class_getitem__

  • bpo-39019:为 subprocess.Popen, subprocess.CompletedProcess 实现了虚拟的 __class_getitem__

  • bpo-38914:调整了 distutils 的 check 命令在提供 authormaintainer 字段但未找到相应电子邮件字段(author_emailmaintainer_email)时发出的警告的措辞。措辞现在反映了这些字段是建议的,但不是必需的。由 Juergen Gmach 提供补丁。

  • bpo-38878:修复了 os.PathLike 的 __subclasshook__ 以在继承时返回正确的结果。由 Bar Harel 提供补丁。

  • bpo-38615: IMAP4IMAP4_SSL 现在在其构造函数中有一个可选的 timeout 参数。此外,open() 方法现在也有一个可选的 timeout 参数。这一变更也应用到了 IMAP4_SSLIMAP4_stream 的重写方法上。由 Donghee Na 提供补丁。

  • bpo-35182: 修复了当子进程已经关闭了任何管道标准流但仍然继续运行时,Popen.communicate() 后续调用崩溃的问题。由 Andriy Maletsky 提供补丁。

  • bpo-38630: 在 Unix 上,subprocess.Popen.send_signal() 现在会轮询进程状态。轮询减少了在进程已完成但 subprocess.Popen.returncode 属性仍为 None 且 pid 已被重新分配(回收)给一个新的不同进程时向错误进程发送信号的风险。

  • bpo-38536: 移除了在使用 international=True 和符号跟随值的区域设置时格式化货币中的尾部空格。例如,locale.currency(12.34, international=True) 返回 '12,34 EUR ' 而不是 '12,34 EUR'

  • bpo-38473: 对通过 unittest.mock.attach_mock() 附加的自动指定方法使用内部模拟的签名。由 Karthikeyan Singaravelan 提供补丁。

  • bpo-38361: 修复了一个问题,即在没有参数调用 syslog.openlog() 时,ident 可能包含前导路径分隔符。

  • bpo-38293: 向 property() 对象添加 copy.copy()copy.deepcopy() 支持。

  • bpo-37958: 添加了 pstats.Stats.get_profile_dict() 方法,以 StatsProfile 实例的形式返回分析数据。

  • bpo-28367: 以下波特率的 Termios 魔法常量: - B500000 - B576000 - B921600 - B1000000 - B1152000 - B1500000 - B2000000 - B2500000 - B3000000 - B3500000 - B4000000 由 Andrey Smirnov 提供补丁。

文档

  • bpo-39381: 在文档中说明 asyncio.get_event_loop() 仅在主线程调用时隐式创建新的事件循环。

  • bpo-38918: 在 inspect 模块文档的 类型和成员 表格的"函数"和"方法"部分添加 __module__ 条目。

  • bpo-3530: 在 ast 模块文档中,修正一个误导性的 NodeTransformer 示例,并添加关于何时使用 fix_missing_locations 函数的建议。

构建

  • bpo-39395: 在非Windows平台上,setenv()unsetenv() 函数现在是构建Python所必需的。

  • bpo-39160: 更新了 ./configure --help 中的文档,以显示默认值,引用所需的文档,并在需要的地方添加额外解释。

  • bpo-39144: ctags 和 etags 的构建目标都包括 Modules/_ctypes 和 Python 标准库源文件。

IDLE

  • bpo-39050: 使IDLE设置对话框的帮助按钮重新工作。

  • bpo-34118: 在库手册内置函数列表中,将 memoryview、range 和 tuple 标记为类,与 list 等相同。

  • bpo-32989: 为编辑器 newline_and_indent_event 方法添加测试。从 pyparse find_good_parse_start 方法中删除死代码。

C API

  • bpo-39372: 清理定义了但未实现的接口的头文件。被移除的公共API符号有:_PyBytes_InsertThousandsGroupingLocale_PyBytes_InsertThousandsGrouping_Py_InitializeFromArgs_Py_InitializeFromWideArgs_PyFloat_Repr_PyFloat_Digits_PyFloat_DigitsInitPyFrame_ExtendStack_PyAIterWrapper_TypePyNullImporter_TypePyCmpWrapper_TypePySortWrapper_TypePyNoArgsFunction

  • bpo-39164: 添加一个私有的 _PyErr_GetExcInfo() 函数来检索指定Python线程状态的异常信息。

Python 3.9.0 alpha 2

发布日期: 2019-12-18

安全性

  • bpo-38945: 为了防止换行符溢出到编码文件的内容部分,在进行uu编码时已对换行符进行了转义。这可以防止在解码过程中数据被恶意或意外修改。

  • bpo-37228: 由于重大的安全问题,asyncio.loop.create_datagram_endpoint()reuse_address 参数不再被支持。这是因为UDP中 SO_REUSEADDR 的行为。更多详情,请参见 loop.create_datagram_endpoint() 的文档。(由Kyle Stanley、Antoine Pitrou和Yury Selivanov在 bpo-37228 中贡献。)

  • bpo-38804: 修复了 http.cookiejar 中的一个ReDoS漏洞。由Ben Caller提供补丁。

核心与内置函数

  • bpo-39028: 通过加强kwargs是interned字符串的假设,略微提高了在有许多kwargs时关键字参数解析的速度。

  • bpo-39080: 当Starred Expression AST节点位于Call AST节点的 args 属性中的元素之间时,修复了 end_col_offset 的值。

  • bpo-39031: 当解析一个"elif"节点时,节点的lineno和col_offset现在指向"elif"关键字而不是其条件,使其与"if"节点保持一致。由Lysandros Nikolaou提供补丁。

  • bpo-20443: 在Python 3.9.0a1中,如果在命令行中指定了文件名,sys.argv[0]会被设置为绝对路径。撤销这一更改,因为大多数用户期望sys.argv保持不变。

  • bpo-39008: PySys_Audit() 现在要求在格式字符串中使用 Py_ssize_t 作为大小参数,不管在包含时是否定义了 PY_SSIZE_T_CLEAN

  • bpo-38673: 在REPL模式下,如果行以注释或空白开始,不切换到PS2。基于Batuhan Taşkaya的工作。

  • bpo-38922: 现在在代码对象上调用 replace 会引发 code.__new__ 审计事件。

  • bpo-38920: 添加了当 sys.excepthook()sys.unraisablehook() 被调用时的审计钩子。

  • bpo-38892: 改进审计事件表格和函数的文档。

  • bpo-38852: 在安卓平台的调试版本中将线程堆栈大小设置为8 Mb。

  • bpo-38858: 每个Python子解释器现在都有自己的“小整数单例”:范围在[-5; 257]的数字。现在不再可能通过在构建时覆盖 NSMALLNEGINTSNSMALLPOSINTS 宏来更改小整数的数量:宏现在应该在 pycore_pystate.h 头文件中手动修改。

  • bpo-36854: 垃圾收集器状态变为每个解释器(PyInterpreterState.gc),而不是全局的(_PyRuntimeState.gc)。

  • bpo-38835: PyFPE_START_PROTECT()PyFPE_END_PROTECT() 宏为空:它们在过去一年中什么也没做,因此停止使用它们。

  • bpo-38328: 加速了常量 listset 显示的创建时间。由Brandt Bucher提供补丁。

  • bpo-38707: MainThread.native_id 现在在使用 multiprocessing.Process 生成的子进程中被正确重置,而不是保留父进程的值。

  • bpo-38629: 向float对象添加了 __floor____ceil__ 方法。由Batuhan Taşkaya提供补丁。

  • bpo-27145: int + int和int - int操作符现在可以返回小整数单例。由hongweipeng提供补丁。

  • bpo-38021: 为AIX提供一个足以用于PEP425二进制分发识别的平台标签。由Michael Felt提供补丁。

  • bpo-35409: 在向异步生成器的aclose协程抛出异常时忽略GeneratorExit异常。

  • bpo-33387: 移除了WITH_CLEANUP_START、WITH_CLEANUP_FINISH、BEGIN_FINALLY、END_FINALLY、CALL_FINALLY和POP_FINALLY字节码。替换为RERAISE和WITH_EXCEPT_START字节码。编译器现在为'with'和'try-except'语句的异常和非异常分支生成不同的代码。对于'try-finally'语句,'finally'块为'try'主体的每次退出复制。

  • bpo-39033: 修复 zipimport 中的 NameError。由Karthikeyan Singaravelan提供补丁。

  • bpo-39022: 更新importlib.metadata以包含来自importlib_metadata 1.3的改进,包括EntryPoints的更好的序列化和自定义查找器的改进文档。

  • bpo-39006: 修复当ssl模块缺失时的asyncio问题:仅在ssl模块可用时检查ssl.SSLSocket实例。

  • bpo-38708: 修复电子邮件解析器在解析空msg-id时可能出现的IndexError。

  • bpo-38698: 向电子邮件解析器添加一个新的 InvalidMessageID 标记,以表示无效的Message-ID头。此外,在解析头之后还有剩余值时添加缺陷。

  • bpo-38994: 为 os.PathLikepathlib.Path 实现 __class_getitem__

  • bpo-38979: 从 ContextVar.__class_getitem__ 返回类以简化子类化。

  • bpo-38978: 在asyncio对象(Future, Task, Queue)上实现 __class_getitem__。由Batuhan Taskaya提供补丁。

  • bpo-38916: array.array: 移除 tostring()fromstring() 方法。它们是``tobytes()``和 frombytes() 的别名,自Python 3.2起已弃用。

  • bpo-38986: 使C加速的TaskWakeupMethWrapper的repr与纯Python版本的相同。

  • bpo-38982: 修复asyncio PidfdChildWatcher:处理 waitpid() 错误。如果在其他地方调用 waitpid()waitpid() 调用会失败并抛出 ChildProcessError:在这种情况下使用返回码255,并记录一个警告。这确保了如果此错误发生,pidfd文件描述符会被关闭。

  • bpo-38529: 取消关于未显式调用 .close() 删除流的过于嘈杂的asyncio警告。

  • bpo-27413: 增加了在 json.tool 命令行界面中将 ensure_ascii 选项传递给json.dumps的能力。

  • bpo-38634: readline 模块现在在所有平台上运行时检测Python是否链接到libedit。以前,此检查仅在macOS上进行。

  • bpo-33684: 修复当区域编码不是UTF-8时,json.tool 无法读取包含非ASCII字符的JSON文件的问题。

  • bpo-38698: 防止在parse_message_id中出现UnboundLocalError。

    parse_message_id() 不适当地使用了在异常处理程序中定义的令牌,这会在解析无效值时引发 UnboundLocalError。由Claudiu Popa提供补丁。

  • bpo-38927: 在venv中使用 python -m pip 而不是 pip 来升级依赖。

  • bpo-26730: 修复 SpooledTemporaryFile.rollover() 在文本模式下可能会损坏文件的问题。由Serhiy Storchaka提供补丁。

  • bpo-38881: 当所有权重为零时,random.choices() 现在会引发 ValueError。

  • bpo-38876: 当从memo加载无效输入的项时,引发pickle.UnpicklingError。

    之前的代码在Python和C实现中都引发了 KeyError。这是由于指定的无效输入索引在memo结构中不存在,而pickle在此结构中存储了它所见过的对象。格式错误的输入会导致从memo中进行 BINGETLONG_BINGET 加载,由于确定的索引是伪造的,因此会引发 KeyError。由Claudiu Popa提供补丁。

  • bpo-38688: 调用函数 shutil.copytree 将目录树从一个目录复制到另一个子目录会导致无限循环和RecursionError。添加了一个修复,消耗迭代器并创建要复制的条目列表,避免对新创建的目录进行递归。由Bruno P. Kinoshita提供补丁。

  • bpo-38863: 改进 http.server 中的 is_cgi() 函数,使其能够处理cgi目录是除根目录外的另一个目录的子目录的情况。

  • bpo-37838: typing.get_type_hints() 正确处理了用 functools.wraps() 装饰的函数。

  • bpo-38870: 将 ast.unparse() 作为 ast 模块的一个函数公开,可用于反解析一个 ast.AST 对象,并生成一个字符串,该字符串在被解析时会生成一个等效的 ast.AST 对象。由 Pablo Galindo 和 Batuhan Taskaya 提供补丁。

  • bpo-38859: AsyncMock 现在在 side_effects 可迭代对象耗尽时返回 StopAsyncIteration。由于 PEP-479,从协程中引发 StopIteration 异常是不可能的。

  • bpo-38857: AsyncMock 修复了返回值为可等待类型的问题。这还包括了那些恰好是可等待的 side_effect 可迭代值,并包装了返回可等待类型的可调用对象。在此之前,这些可等待对象是被等待而不是原样返回。

  • bpo-38834: typing.TypedDict 子类现在使用 __required_keys____optional_keys__ 属性来跟踪哪些键是可选的,以便下游项目进行运行时验证。由 Zac Hatfield-Dodds 提供补丁。

  • bpo-38821: 修复了 argparse 在国际化错误消息时对于 nargs 设置为特殊(非整数)值的参数未处理的异常。由 Federico Bond 提供补丁。

  • bpo-38820: 使 Python 与 OpenSSL 3.0.0 兼容。ssl.SSLSocket.getpeercert() 不再返回带有尾随换行符的 IPv6 地址。

  • bpo-38811: 修复了 pathlibos.link() 缺失时的未处理异常。由 Toke Høiland-Jørgensen 提供补丁。

  • bpo-38686: 在 urllib.request.AbstractDigestAuthHandler 中添加了对多个 qop 值的支持。

  • bpo-38712: 添加了 Linux 特有的 signal.pidfd_send_signal() 函数,该函数允许向由文件描述符而非 pid 标识的进程发送信号。

  • bpo-38348: 向 ast 解析工具添加了 -i--indent (缩进级别) 以及 --no-type-comments (类型注释) 命令行选项。

  • bpo-37523: 修改 zipfile.ZipExtFile 在尝试访问已关闭的底层文件对象时抛出 ValueError。这一新行为与 Python 其他部分处理访问已关闭文件的方式保持一致。

  • bpo-38045: 提高 enumenum._decompose() 的性能。由 hongweipeng 提供补丁。

  • bpo-36820: 在 socket.py、codeop.py 和 dyld.py 中保存异常时生成的循环被打破,因为它们不仅通过 __traceback__ 属性保持异常活跃,还保持了用户对象。由 Mario Corchero 提供补丁。

  • bpo-36406: 在 doctest 中处理命名空间包。由 Karthikeyan Singaravelan 提供补丁。

  • bpo-34776: 修复数据类以支持类型注解中的前向引用。

  • bpo-20928: ElementTree 支持递归 XInclude 处理。由 Stefan Behnel 提供补丁。

  • bpo-29636: 为 json.tool CLI 添加格式化 JSON 的空格选项。现在支持以下互斥选项:--indent 用于设置空格缩进级别;--tab 用于使用制表符缩进;--no-indent 用于抑制换行;--compact 用于抑制所有空格。默认行为仍与 --indent=4 相同。

文档

测试

  • bpo-38546: 修复 test_concurrent_futures 的 test_ressources_gced_in_workers():显式停止管理器以防止测试完成后泄漏在后台运行的子进程。

  • bpo-38546: 多处理和 concurrent.futures 测试现在在测试完成时停止资源跟踪器进程。

  • bpo-38614: 在测试中用新的 test.support 常量替换硬编码的超时常量:LOOPBACK_TIMEOUTINTERNET_TIMEOUTSHORT_TIMEOUTLONG_TIMEOUT。这样更容易一次性为所有测试调整这四个超时常量,而不必调整每一个测试文件。

  • bpo-38547: 修复 test_pty:如果进程是会话领导者,关闭主文件描述符会引发 SIGHUP 信号:在运行测试时简单地忽略 SIGHUP。

  • bpo-38992: 修复一个因常数折叠而失败的 math.fsum() 测试。

  • bpo-38991: test.supportrun_python_until_end()assert_python_ok()assert_python_failure() 函数不再从 stderr 中去除空格。移除 test.support.strip_python_stderr() 函数。

  • bpo-38965: 在 GCC 10 上修复 test_faulthandler。在 faulthandler._stack_overflow() 中使用 "volatile" 关键字来防止在任何编译器上进行尾调用优化,而不是依赖于编译器特定的编译指示。

  • bpo-38875: test_capi:垃圾回收测试现在需要测试 "cpu" 资源。

  • bpo-38841: 在缺乏对命名 Unix 域套接字有功能 bind() 的平台上跳过 asyncio test_create_datagram_endpoint_existing_sock_unix。

  • bpo-38692: 如果 os.pidfd_open() 因为 PermissionError 失败,则跳过 test_posix.test_pidfd_open() 测试。这种情况可能发生在使用系统调用白名单但不允许 pidfd_open() 系统调用的 Linux 沙箱中。

  • bpo-38839: 修复测试中一些未使用的函数。由 Adam Johnson 提供补丁。

  • bpo-38669: 当用字符串传递目标时,unittest.mock.patch.object() 抛出 TypeError

  • bpo-37957: test.regrtest 现在可以接收一个要忽略的测试模式列表(使用 -i/--ignore 参数)或一个包含要忽略模式列表的文件(使用 --ignore-file 参数)。由 Pablo Galindo 提供补丁。

构建

  • bpo-37404: asyncio 现在在调用与 ssl.SSLSocket 套接字不兼容的方法时会引发 TypeError。由 Ido Michael 提供补丁。

  • bpo-36500: 在 Visual Studio 解决方案中添加了一个可选的 "regen" 项目,该项目将重新生成所有语法、标记和操作码。

Windows

  • bpo-39007: 向 winreg 中的函数添加审计事件。

  • bpo-33125: 添加对构建和发布 Windows ARM64 包的支持。

macOS

  • bpo-37931: 修复了 OSX 动态构建中的一个崩溃问题,该问题发生在 Py_Finalize 后重新初始化 posix 模块时,如果环境自上次 import posix 以来发生了变化。补丁由 Benoît Hudson 提供。

IDLE

  • bpo-38944: 现在按 Escape 键可以关闭 IDLE 的补全窗口。由 Johnny Najera 提供补丁。

  • bpo-38943: 修复了在某些系统上 IDLE 自动补全窗口不总是出现的问题。由 Johnny Najera 提供补丁。

  • bpo-38862: 格式菜单上的 '去除尾部空白' 现在会去除非 shell 文件末尾的额外换行符。

  • bpo-38636: 修复 IDLE 格式菜单的标签切换和文件缩进宽度。这些功能(默认快捷键 Alt-T 和 Alt-U)在 3.7.5 和 3.8.0 中被错误地禁用。

C API

  • bpo-38896: 移除 PyUnicode_ClearFreeList() 函数:Unicode 空闲列表已在 Python 3.3 中移除。

  • bpo-37340: 移除 PyMethod_ClearFreeList()PyCFunction_ClearFreeList() 函数:绑定方法对象的空闲列表已被移除。

  • bpo-38835: 从 Py_LIMITED_API (稳定 API) 中排除 pyfpe.hPyFPE_START_PROTECT()PyFPE_END_PROTECT() 宏。

Python 3.9.0 alpha 1

发布日期: 2019-11-19

安全性

核心与内置函数

  • bpo-38631: 在 float.__getformat__() 中将 Py_FatalError() 调用替换为常规的 RuntimeError 异常。

  • bpo-38639: 对 math.floor()math.ceil()math.trunc() 针对浮点数进行了优化。

  • bpo-38640: 修复了编译器中的一个bug,该bug在总是为假的while循环中存在break语句和continue语句时会引发错误。由Pablo Galindo提供补丁。

  • bpo-38613: 优化了 dict_keys 的一些集合操作(例如 |^、和 -)。d.keys() | other``之前比 ``set(d) | other 慢,但现在它们的性能几乎相同。

  • bpo-28029: "".replace("", s, n)``现在对于所有非零 ``n 返回 s 而不是空字符串。bytesbytearray 对象也有类似的更改。

  • bpo-38535: 修复了装饰器中无参数调用的AST节点的行号和列偏移。

  • bpo-38525: 修复了在使用空 dict 对象的反向迭代器时出现的段错误。由Donghee Na和Inada Naoki提供补丁。

  • bpo-38465: bytearrayarraymmap 对象现在允许一次导出超过 2**31 个缓冲区。

  • bpo-38469: 修复了一个bug,即在存在 global 关键字时,命名表达式的作用域未被正确解析。由Pablo Galindo提供补丁。

  • bpo-38437: 为解释器的调试版本(当设置 Py_DEBUG 时)激活 GC_DEBUG 宏。由Pablo Galindo提供补丁。

  • bpo-38379: 当垃圾回收器进行回收时,其中一些对象复活(在执行完终结器后可以从隔离的循环外部访问),不要阻止回收所有仍然无法访问的对象。由Pablo Galindo和Tim Peters提供补丁。

  • bpo-38379: 当循环垃圾回收(gc)运行终结器使无法访问的对象复活时,当前的gc运行结束,不收集任何循环垃圾。然而,collect()``和 ``get_stats() 报告的统计信息声称所有发现的循环垃圾都被回收了,并且复活的对象也被回收了。更改了统计信息以报告没有收集到任何对象。

  • bpo-38392: 在调试模式下,PyObject_GC_Track() 现在会调用对象类型的 tp_traverse() 以确保对象有效:测试被 tp_traverse() 访问的对象是否有效。

  • bpo-38210: 移除字典视图与空集之间不必要的交集和更新集操作。(由 Donghee Na 在 bpo-38210 中贡献。)

  • bpo-38402: 检查系统底层 cryptcrypt_r 的错误。

  • bpo-37474: 在 FreeBSD 上,Python 不再在启动时调用 fedisableexcept() 来控制浮点控制模式。自 FreeBSD 6 起,这个调用变得无用:它成为了默认模式。

  • bpo-38006: 修复了一个由于弱引用和循环垃圾收集器交互导致的错误。我们必须清除垃圾中的任何弱引用,以防止它们的回调执行并导致崩溃。

  • bpo-38317: 修复警告选项的优先级:PyConfig.warnoptions 拥有最高优先级,如 PEP 587 所述。

  • bpo-38310: 在主解释器循环中预测 BUILD_MAP_UNPACK_WITH_CALL -> CALL_FUNCTION_EX 操作码对。由 Brandt Bucher 提供补丁。

  • bpo-36871: 改进了对模拟的 assert_has_calls 和 assert_has_awaits 方法的错误处理。修复了一个错误,其中在将预期调用绑定到模拟的规范时遇到的任何错误都被静默吞噬,导致误导性的错误输出。

  • bpo-11410: 通过使用 gcc >= 4.0 中可用的可见性属性,在 POSIX 和 Windows 上以统一的方式提供了更好的符号可见性控制。POSIX 构建文件已更新,以使用 -fvisibility=hidden 编译,最小化导出的符号。

  • bpo-38219: 针对参数为字典的情况优化了 dict 构造函数和 update() 方法。

  • bpo-38236: 如果 Python 无法导入文件系统和标准 IO 编码的 Python 编解码器,现在会转储路径配置。

  • bpo-38013: 允许为未启动的异步生成器助手调用 async_generator_athrow().throw(...)。这修复了在 asyncio.run() 调用结束时出现的烦人警告。

  • bpo-38124: 修复了 PyState_AddModule 中的一个差一错误,该错误可能导致内存越界访问。

  • bpo-38116: select 模块现在符合 PEP-384 标准,不再有静态状态。

  • bpo-38113: ast 模块已更新至 PEP-384 标准,所有静态内容已被移除。

  • bpo-38076: struct 模块现在兼容 PEP-384。

  • bpo-38075: random 模块现在兼容 PEP-384。

  • bpo-38074: zlib 模块已兼容 PEP-384。

  • bpo-38073: 使 pwd 扩展模块兼容 PEP-384。

  • bpo-38072: grp 模块已兼容 PEP-384。

  • bpo-38069: 使 _posixsubprocess 兼容 PEP-384。

  • bpo-38071: 使 termios 扩展模块兼容 PEP-384。

  • bpo-38005: 修复了 InterpreterID 和 ChannelID 的比较和创建。

  • bpo-36946: 修复了处理切片时可能发生的有符号整数溢出。由 hongweipeng 提供补丁。

  • bpo-37994: 修复了在多个站点中如果属性查找失败时静默任意错误的问题。只有 AttributeError 应该被静默。

  • bpo-8425: 优化了当另一个集合远大于基础集合时的集合 difference_update 操作。(由 Evgeny Kapun 建议,Michele Orrù 贡献代码)。

  • bpo-37966: is_normalized() 的实现对于未规范化的字符串已经大大加速,这是通过实现 Unicode 标准中的完整规范化快速检查算法完成的。

  • bpo-37947: 正确调整了命名表达式符号表生成中的递归级别。由 Pablo Galindo 提供补丁。

  • bpo-37812: Object/longobject.c 中使用的 CHECK_SMALL_INT 宏已被替换为在每个调用站点显式的 return

  • bpo-37751: 修复 codecs.lookup() 以与 encodings.normalize_encoding() 相同的方式标准化编码名称,除了 codecs.lookup() 还将名称转换为小写。

  • bpo-37830: 修复了当相应的 try 块包含带有非常量值的 return 时,在 finally 块中编译 breakcontinue 的问题。

  • bpo-20490: 通过Anthony Sottile的贡献,改进了循环 from 导入时部分初始化模块的导入错误消息。

  • bpo-37840: 修复了 bytearraysq_item 中负索引的处理。由Sergey Fedoseev提供补丁。

  • bpo-37802: 略微提高了 PyLong_FromUnsignedLong()PyLong_FromUnsignedLongLong()PyLong_FromSize_t() 的性能。由Sergey Fedoseev提供补丁。

  • bpo-37409: 确保在交互式会话和没有父包的脚本中,显式相对导入总是引发ImportError,而不是将当前模块视为包。由Ben Lewis提供补丁。

  • bpo-32912: 回退了 bpo-32912:对于字符串和字节字面量中的无效转义序列,现在发出 SyntaxWarning 而不是 DeprecationWarning

  • bpo-37757: PEP 572: 如PEP所述,当赋值表达式与理解作用域的交互导致目标作用域不明确时,现在会引发 SyntaxError

    最初由PEP提出的 TargetScopeError 子类已被移除,改为仅对不允许的情况引发常规语法错误。

  • bpo-36279: 修复了 os.wait3() 中可能使用未初始化内存的问题。

  • bpo-36311: 解码大于2GiB的字节对象更快,并且当多字节字符跨越块边界时不再失败。

  • bpo-34880: 如果 AssertionError 异常被遮蔽,assert 语句现在可以正常工作。由Zackery Spytz提供补丁。

  • bpo-37340: 移除了绑定方法对象(free_list)的对象缓存。由于 LOAD_METHOD 操作码和 _PyObject_VectorcallMethod C API 的存在,临时绑定方法对象的使用比以前少。

  • bpo-37648: 修复了 list.__contains__()tuple.__contains__() 及其他几处的小不一致性。集合的项现在始终位于 == 的左侧,而针位于右侧。

  • bpo-37444: 更新了 builtins.__import__()importlib.__import__() 之间的异常差异。

  • bpo-37619: 当将包装描述符从一个类添加到另一个类时(例如,在 int 子类上设置 __add__ = str.__add__),调用操作符时会正确引发异常。

  • bpo-37593: 在 ast.parameters 节点的构造函数中交换了 posonlyargsargs 参数的位置。

  • bpo-37543: 为非 PGO 构建优化了 pymalloc。

  • bpo-37537: 在 _Py_GetAllocatedBlocks() 内部计算分配的 pymalloc 块。这减慢了 _Py_GetAllocatedBlocks() 的速度,但为 _PyObject_Malloc() 和 _PyObject_Free() 带来了小幅加速。

  • bpo-37467: 修复了 sys.excepthook()PyErr_Display(),如果文件名是字节字符串。例如,对于文件名属性是字节字符串的 SyntaxError 异常。

  • bpo-37433: 修复了 SyntaxError 指示器在多行字符串中打印过多空格的问题 - 由 Anthony Sottile 提供。

  • bpo-37417: bytearray.extend() 现在正确处理了迭代过程中出现的错误。由 Brandt Bucher 提供补丁。

  • bpo-37414: 未文档化的 sys.callstats() 函数已被移除。自 Python 3.7 起,它已被弃用,并总是返回 None。它需要一个特殊的构建选项 CALL_PROFILE,该选项已在 Python 3.7 中移除。

  • bpo-37392: 移除 sys.getcheckinterval()sys.setcheckinterval() 函数。这两个函数自 Python 3.2 起已被弃用。请改用 sys.getswitchinterval()sys.setswitchinterval()。同时移除 PyInterpreterState 结构中的 check_interval 字段。

  • bpo-37388: 在开发模式和调试构建中,现在会对字符串编码和解码操作的 encodingerrors 参数进行检查。例如:open()str.encode()bytes.decode()

    默认情况下,为了获得最佳性能,errors 参数仅在第一次编码/解码错误时检查,encoding 参数有时会为空字符串忽略。

  • bpo-37348: 优化了使用 UTF-8 和 ASCII 编解码器解码短 ASCII 字符串的性能。b"foo".decode() 大约快了 15%。由 Inada Naoki 提供补丁。

  • bpo-24214: 改进了 UTF-8 和 UTF-16 增量解码器中对 surrogatepass 错误处理程序的支持。

  • bpo-37330: open()io.open()codecs.open()fileinput.FileInput 不再接受文件模式中的 'U' ("通用换行") 。此标志自 Python 3.3 起已被弃用。

  • bpo-35224: 按照 PEP 572 的提议,反向评估字典推导式中 key: value 的求值顺序。即在 {k: v for ...} 中,k 将在 v 之前被评估。

  • bpo-37316: 修复了 mmap.mmap 中的 PySys_Audit() 调用。

  • bpo-37300: 移除了 classobject.c 中一个不必要的 Py_XINCREF。

  • bpo-37269: 修复了窥孔优化器中的一个错误,该错误未正确处理带有二元运算符的常量条件。补丁由 Pablo Galindo 提供。

  • bpo-20443: Python 现在获取命令行中指定的脚本文件名的绝对路径(例如:“python3 script.py”):__main__ 模块的 __file__ 属性和 sys.path[0] 现在变为绝对路径,而非相对路径。

  • bpo-37257: Python的小对象分配器(obmalloc.c)现在允许(不超过)一个空arena保持可用以便立即重用,而不将其返回给操作系统。这防止了在简单循环中可能每次迭代都创建和销毁一个新arena的颠簸现象。

  • bpo-37231: 类型槽到特殊方法的派发(例如在执行 x * y 时调用 __mul__)已经变得更快。

  • bpo-36974: 为内置函数和方法的所有调用约定实现了单独的vectorcall函数。这提高了调用的性能。

  • bpo-37213: 在窥孔优化器中正确处理负的行偏移。由Pablo Galindo提供补丁。

  • bpo-37219: 移除了空集差异的错误优化。

  • bpo-15913: 实现了 PyBuffer_SizeFromFormat() 函数(之前有文档记录但未实现):调用 struct.calcsize()。由Joannah Nanjekye提供补丁。

  • bpo-36922: 槽函数优化了任何带有 Py_TPFLAGS_METHOD_DESCRIPTOR 的可调用对象,而不仅仅是 function 的实例。

  • bpo-36974: 槽 tp_vectorcall_offset 被无条件继承以支持当基类使用vectorcall时的``super().__call__()``。

  • bpo-37160: threading.get_native_id() 现在也支持NetBSD。

  • bpo-37077: 为AIX添加了 threading.get_native_id() 支持。由M. Felt提供补丁

  • bpo-36781: sum() 已经为布尔值进行了优化。

  • bpo-34556: 向venv模块添加了 --upgrade-deps。由Cooper Ry Lees提供补丁

  • bpo-20523: pdb.Pdb 支持Windows 7中的~/.pdbrc。由Tim Hopper和Dan Lidral-Porter提供补丁。

  • bpo-35551: 更新了编码:- 移除了“tis260”编码,这是一个不存在的“tactis”编解码器的别名。- 添加了“mac_centeuro”作为mac_latin2编码的别名。

  • bpo-19072: classmethod 装饰器现在可以包装其他描述符,如property对象。根据Graham Dumpleton编写的补丁改编。

  • bpo-27575: 通过直接使用集合交集逻辑提高字典视图交集的速度。由David Su提供补丁。

  • bpo-30773: 禁止并行运行aclose() / asend() / athrow()。修复ag_running以反映AG的实际运行状态。

  • bpo-36589: 现在,curses.update_lines_cols() 函数在成功时返回 None 而不是``1``。

  • bpo-38807: 更新 TypeError 消息,为 os.path.join() 包括 os.PathLike 对象作为可接受的输入类型。

  • bpo-38724: 为 subprocess.Popen 对象添加repr。由Andrey Doroschenko提供补丁。

  • bpo-38786: pydoc现在可以识别并解析HTTPS URL。由python273提供补丁。

  • bpo-38785: 如果从 asyncio.Future 派生的对象的构造函数中没有调用父 __init__,则防止asyncio崩溃。

  • bpo-38723: pdb 现在使用 io.open_code() 来触发审计事件。

  • bpo-27805: 允许以追加模式打开管道和其他不可寻址的文件,使用 open()

  • bpo-38438: 简化 argparse 对于 nargs="*" 的使用信息。

  • bpo-38761: WeakSet现在被注册为collections.abc.MutableSet。

  • bpo-38716: logging: 将RotatingHandler的namer和rotator更改为类级别属性。这会阻止__init__在子类用同名方法定义它们的情况下将它们设置为None。

  • bpo-38713: 添加 os.P_PIDFD 常量,可以传递给 os.waitid() 以等待Linux进程文件描述符。

  • bpo-38692: 添加 asyncio.PidfdChildWatcher,一个特定于Linux的子监视器实现,它轮询进程文件描述符。

  • bpo-38692: 将Linux的 pidfd_open 系统调用暴露为 os.pidfd_open()

  • bpo-38602: 向 fcntl 模块添加常量 F_OFD_GETLKF_OFD_SETLKF_OFD_SETLKW。由Donghee Na提供补丁。

  • bpo-38334: 修复了在加密的 zipfile.ZipExtFile 上向后查找的问题。

  • bpo-38312: 添加 curses.get_escdelay()curses.set_escdelay()curses.get_tabsize()curses.set_tabsize() 函数 - 由 Anthony Sottile 提供。

  • bpo-38586: 现在 fileConfig() 正确设置了加载的处理程序的 .name。

  • bpo-38565: 为 functools.lru_cache() 添加新的 cache_parameters() 方法,以更好地支持 pickle。

  • bpo-34679: asynci.ProactorEventLoop.close() 现在只在主线程中调用 signal.set_wakeup_fd()。

  • bpo-31202: pathlib.WindowsPath.glob() 的结果现在匹配字面部分的大小写。

  • bpo-36321: 移除拼写错误的属性。3.8 的变更日志指出这将在 3.9 中移除。

  • bpo-38521: 修复了 statistics.NormalDist() 中的错误等式比较。

  • bpo-38493: 为 si_code 添加了 CLD_KILLEDCLD_STOPPED。由 Donghee Na 提供补丁。

  • bpo-38478: 修复了 inspect.signature.bind() 中的一个 bug,该 bug 导致处理与位置唯一参数同名的关键字参数时失败。由 Pablo Galindo 提供补丁。

  • bpo-33604: 修复了 hmac.newhmac.HMAC,当省略了 3.8 中现在必需的 digestmod 参数时,抛出 TypeError 而不是 ValueError。同时澄清了 hmac 模块的文档和文档字符串。

  • bpo-38378: os.sendfile() 的参数 outin 被重命名为 out_fdin_fd

  • bpo-38417: 在 POSIX 系统上为子进程添加了设置 umask 的支持到 subprocess 模块。

  • bpo-38449: 撤销 PR 15522,由于对文件名作为 url 的不正确处理,导致 mimetypes.guess_type() 中的回归。

  • bpo-38431: 修复 dataclasses.InitVar__repr__ 方法以支持类型对象,补丁由 Samuel Colvin 提供。

  • bpo-38109: 在 Python 的 stat 模块实现中添加缺失的 stat.S_IFDOOR, stat.S_IFPORT, stat.S_IFWHT, stat.S_ISDOOR(), stat.S_ISPORT(), 和 stat.S_ISWHT() 值。

  • bpo-38422: 澄清 pathlib 后缀(es) 的文档字符串。

  • bpo-38405: 现在 typing.NamedTuple 的嵌套子类可以被 pickle。

  • bpo-38332: 防止当 _encoded_words.decode() 给定一个内容类型编码无效的编码字时抛出的 KeyError 一直传播到 email.message.get()

  • bpo-38371: 弃用了 _tkinter.TkappType 中的 split() 方法,转而支持 splitlist() 方法,因为后者有更一致和可预测的行为。

  • bpo-38341: 将 smtplib.SMTPNotSupportedError 添加到 smtplib 的导出名称中。

  • bpo-38319: 在 socket 和 shutil 模块中使用的 sendfile() 在 32 位架构上对于 >= 2GiB 的文件会引发 OverflowError。(由 Giampaolo Rodola 提供补丁)

  • bpo-38242: 回滚新的 asyncio Streams API

  • bpo-13153: 现在使用操作系统原生编码在 Python 字符串和 Tcl 对象之间进行转换。这允许显示、复制和粘贴到剪贴板的 emoji 和其他非 BMP 字符。从现在开始,从 Tcl 到 Python 以及反向的字符串转换永远不会失败(除了 MemoryError)。

  • bpo-38019: 正确处理已关闭的 asyncio unix 管道的暂停/恢复读取。

  • bpo-38163: 子 mock 现在会检测它们的类型是同步还是异步的,异步子 mock 将是 AsyncMocks,同步子 mock 将是 MagicMock 或 Mock(取决于它们的父类型)。

  • bpo-38161: 从 AsyncMock 中移除 _AwaitEvent。

  • bpo-38216: 允许那些罕见的代码从 http.client 库发送无效的 http 请求。bpo-30458 的修复导致了一些项目在测试它们在面对错误请求时的行为时依赖此能力的项目出现问题。

  • bpo-28286: 弃用隐式打开 GzipFile 进行写入的操作。 写入时始终指定 mode 参数。

  • bpo-38108: 现在,AsyncMock 上的任何同步魔术方法都返回一个 MagicMock。MagicMock 上的任何异步魔术方法都返回一个 AsyncMock。

  • bpo-38265: 更新 os.pread()length 参数,接受 Py_ssize_t 而不是 int

  • bpo-38112: compileall 具有更高的默认递归限制和新的命令行参数,用于路径操作、符号链接处理和多级优化。

  • bpo-38248: asyncio: 修复了立即任务取消不一致的问题

  • bpo-38237: 内置 pow 函数的参数更具描述性。现在也可以通过关键字传递这些参数。

  • bpo-34002: 通过将 while-pop 改为 for 循环,使用 isdisjoint 而不是集合交集,提高了 email 包中部分的效率。

  • bpo-38191: NamedTupleTypedDict 类型的构造函数现在接受任意关键字参数名称,包括 "cls"、"self"、"typename"、"_typename"、"fields" 和 "_fields"。

  • bpo-38155: 向 datetime 添加 __all__。由 Tahia Khan 提供补丁。

  • bpo-38185: 修复了 sqlite3.Row 索引中不区分大小写的字符串比较。

  • bpo-38136: 将 AsyncMock 的调用计数和等待计数更改为两个不同的计数器。现在等待计数仅在协程被等待时计数,而不是在被调用时,反之亦然。更新了相关文档。

  • bpo-37828: 修复了 unittest.mock.Mock.assert_called() 异常中的默认模拟名称。补丁由 Abraham Toriz Cruz 提供。

  • bpo-38175: 修复了 sqlite3.Row 对象比较中的内存泄漏。

  • bpo-33936: _hashlib 不再调用 OpenSSL 1.1.0+ 中过时的 OpenSSL 初始化函数。

  • bpo-34706: 在 inspect.Signature.from_callable 中保留子类化。

  • bpo-38153: OpenSSL的哈希算法名称现在被规范化以遵循Python的命名约定。例如,OpenSSL使用sha3-512而不是sha3_512,或使用blake2b512而不是blake2b。

  • bpo-38115: 修复了dis.findlinestarts()中的一个错误,该错误会导致返回无效的字节码偏移量。记录了代码对象的co_lnotab可能包含无效字节码偏移量的情况。

  • bpo-38148: 向 asyncio 传输类添加插槽,可以减少内存使用。

  • bpo-38142: _hashlib OpenSSL包装器扩展模块现在符合PEP-384标准。

  • bpo-9216: hashlib构造函数现在支持usedforsecurity标志,以指示哈希算法不用于安全上下文。

  • bpo-36991: 修复了在某些不支持的输入错误情况下,ZipFile.extract()可能错误地抛出AttributeError异常的问题。

  • bpo-38134: 移除了过时的PBKDF2_HMAC_fast副本。所有支持的OpenSSL版本都包含快速实现。

  • bpo-38132: OpenSSL的hashlib包装器使用了更简单的实现。几个宏和无用的缓存已被移除。哈希名称现在来自OpenSSL的EVP。算法名称保持不变,除了现在总是小写。

  • bpo-38008: 修复了协议中的父类检查,以正确识别提供内置协议的模块,而不是假设它们都来自 collections.abc 模块。

  • bpo-34037: 对于 asyncio,添加了一个新的协程 loop.shutdown_default_executor()。这个新协程提供了一个API来安排执行器的关闭,等待线程池关闭完成。此外,asyncio.run() 已被更新以利用这个新协程。补丁由Kyle Stanley提供。

  • bpo-37405: 通过返回1元组而不是字符串,修复了非CAN_ISOTP AF_CAN地址族套接字的socket.getsockname()的回归错误。

  • bpo-38121: 更新了importlib.metadata中函数的参数名称,与importlib_metadata 0.22版本的更改相匹配。

  • bpo-38110: os.closewalk() 实现现在在可用平台上使用 libc fdwalk() API。

  • bpo-38093: 修复 AsyncMock,使其在使用 AsyncContextManagers 或 AsyncIterators 时不会崩溃。

  • bpo-37488: 向 datetime.utctimetuple(), datetime.utcnow()datetime.utcfromtimestamp() 添加警告。

  • bpo-35640: 允许将 path-like object 作为 directory 参数传递给 http.server.SimpleHTTPRequestHandler 类。由 Géry Ogam 提供的补丁。

  • bpo-38086: 使用来自 importlib_metadata 0.21 的更改更新 importlib.metadata。

  • bpo-37251: 移除 AsyncMock 中的 __code__ 检查,该检查错误地将函数规范评估为异步对象,但未能评估定义了 __await__ 但没有 __code__ 属性的类为异步对象。

  • bpo-38037: 修复 signal 模块中的引用计数器。

  • bpo-38066: 隐藏 asyncio.Stream 的内部方法:feed_eof(), feed_data(), set_exception() 和 set_transport()。

  • bpo-38059: inspect.py 现在使用 sys.exit() 而不是 exit()。

  • bpo-38049: 为 ast 模块添加了命令行界面。

  • bpo-37953: 在 typing 中,改进了 ForwardReferences__hash____eq__ 方法。

  • bpo-38026: 修复了 inspect.getattr_static() 在使用 isinstance 时应避免动态查找的问题。

  • bpo-35923: 更新 importlib.machinery.BuiltinImporter 以使用 loader._ORIGIN 而不是硬编码值。由 Donghee Na 提供的补丁。

  • bpo-38010: 在 importlib.metadata 中与 importlib_metadata 0.20 同步,澄清 files() 的行为并修复 requires()dist-info 包上只返回一个要求的问题。

  • bpo-38006: weakref.WeakValueDictionary 定义了一个局部 remove() 函数,用作弱引用的回调。这个函数是通过闭包创建的。修改实现以避免闭包。

  • bpo-37995: 向 ast.dump() 添加了 indent 选项,允许其产生多行缩进的输出。

  • bpo-34410: 修复了重新进入 tee() 迭代器时的崩溃问题。现在在这种情况下会抛出 RuntimeError。

  • bpo-37140: 修复了 Python 3.8 的一个 ctypes 回归问题。当 ctypes.Structure 通过拷贝传递给函数时,ctypes 内部创建了一个临时对象,这个临时对象的副作用是调用了结构体的终结器(__del__)两次。Python 语义要求终结器只被调用一次。修复 ctypes 内部不再两次调用终结器。

  • bpo-37587: 当 JSON 字符串中有许多反斜杠转义字符时,_json.scanstring 现在快了多达 3 倍。

  • bpo-37834: 防止在没有 fd 系统调用支持的非 Windows 系统(如旧版本的 macOS)上构建时 shutil.rmtree 抛出异常。

  • bpo-10978: 信号量和 BoundedSemaphores 现在可以一次释放多个等待的线程。

  • bpo-37972: unittest.mock.call 对象的下标现在接收与其他自定义属性相同的链式机制,因此以下用法不再引发 TypeError

    call().foo().__getitem__('bar')

    由 blhsing 提供补丁

  • bpo-37965: 修复由 distutils.ccompiler.CCompiler.has_function 引起的 C 编译器警告。

  • bpo-37964: 向 fcntl 添加 F_GETPATH 命令。

  • bpo-37960: 缓冲流和文本流的 repr() 现在在获取 "name" 和 "mode" 属性值时只静默预期的异常。

  • bpo-37961: 向 tracemalloc 模块收集的跟踪添加一个 total_nframe 字段。这个字段表示在被截断之前的原始帧数。

  • bpo-37951: subprocess模块的大部分功能现在在子解释器中再次可用。仅在子解释器中限制了*preexec_fn*。

  • bpo-36205: 修复time.process_time()的rusage实现,正确报告系统和用户CPU时间的总和。

  • bpo-37950: 修复 ast.dump() 在调用未完全初始化的节点时的行为。

  • bpo-34679: 恢复从非主线程实例化Windows IOCP事件循环的能力。

  • bpo-36917: 添加 ast.NodeVisitor.visit_Constant() 方法的默认实现,该方法发出弃用警告并调用相应的方法 visit_Num()visit_Str() 等。

  • bpo-37798: 更新test_statistics.py以验证statistics模块在C和Python实现中都能良好工作。由Donghee Na提供补丁。

  • bpo-26589: 向http模块添加了一个新的状态码:451 UNAVAILABLE_FOR_LEGAL_REASONS。

  • bpo-37915: 修复在比较 datetime.timezonedatetime.tzinfo 对象实例时出现的段错误。由Pablo Galindo提供补丁。

  • bpo-32554: 弃用在random.seed()中对任意类型调用hash的行为。

  • bpo-9938: 为 ArgumentParser 添加可选关键字参数 exit_on_error

  • bpo-37851: faulthandler 模块不再在Python启动时分配其替代堆栈。现在堆栈仅在首次使用faulthandler时分配。

  • bpo-32793: 修复当调用 smtplib.SMTP.connect() 时出现的重复调试消息。

  • bpo-37885: venv: 在deactivate时不生成未设置变量警告。

  • bpo-37868: 修复dataclasses.is_dataclass,当给定一个在__getattr__中从不引发AttributeError的实例时。也就是说,一个对象即使不是dataclass,也为__dataclass_fields__返回某些内容。

  • bpo-37811: 修复 socket 模块的 socket.connect(address) 函数在系统调用中断时无法建立连接的问题。此问题在所有 poll(2) 系统调用仅接受非负整数和-1作为超时值的操作系统上观察到。

  • bpo-37863: Tim Peters 提出的对 Fraction.__hash__ 的优化建议。

  • bpo-21131: 修复 faulthandler.register(chain=True) 堆栈。faulthandler 现在分配一个专用的 SIGSTKSZ*2 字节堆栈,而不是仅 SIGSTKSZ 字节。在某些平台上,调用 faulthandler 信号处理程序中的先前信号处理程序使用的堆栈内存超过 SIGSTKSZ 字节。

  • bpo-37798: 为 statistics.NormalDist.inv_cdf() 添加 C 快速路径。由 Donghee Na 提供补丁。

  • bpo-37804: 移除已弃用的方法 threading.Thread.isAlive()。由 Donghee Na 提供补丁。

  • bpo-37819: 添加 Fraction.as_integer_ratio() 以匹配 bool、int、float 和 decimal 中的相应方法。

  • bpo-14465: 为美化打印 XML 树添加 xml.etree.ElementTree.indent() 函数。由 Stefan Behnel 贡献。

  • bpo-37810: 修复 difflib 在处理制表符时 diff 输出中的 ? 提示。由 Anthony Sottile 提供补丁。

  • bpo-37772: 在 zipfile.Path 中,添加隐式目录时,确保添加祖先目录并排除重复项。

  • bpo-18578: 将 test.bytecode_helper 重命名为并记录为 test.support.bytecode_helper。由 Joannah Nanjekye 提供补丁。

  • bpo-37785: 修复 argparse 中的 xgettext 警告。

  • bpo-34488: io.BytesIOwritelines() 方法在传递许多小行时现在稍微快一些。由 Sergey Fedoseev 提供补丁。

  • bpo-37449: ensurepip 现在使用 importlib.resources.read_binary() 而不是 pkgutil.get_data() 来读取数据。由 Joannah Nanjekye 提供补丁。

  • bpo-28292: 将calendar.py中的辅助函数标记为私有。这遵循了PEP 8的指导原则,保持了模块中的风格约定,并解决了一个已知的用户困惑案例。

  • bpo-18049: 在Python/thread_pthread.h中为AIX添加THREAD_STACK_SIZE的定义。默认的线程堆栈大小导致了在默认递归限制下的崩溃。由M Felt提供补丁。

  • bpo-37742: logging.getLogger() API现在在传递名称'root'时返回根日志记录器,而之前它返回一个名为'root'的非根日志记录器。这可能会影响那些明确需要一个名为'root'的非根日志记录器,或者在某些名为'root.py'的顶级模块中使用logging.getLogger(__name__)实例化日志记录器的用户代码。

  • bpo-37738: 修复curses addch(str, color_pair) 的实现:将颜色对传递给``setcchar()``,而不是总是传递0作为颜色对。

  • bpo-37723: 修复了在解析包含巨大字符集的正则表达式时的性能回归。补丁由Yann Vaginay提供。

  • bpo-35943: 函数 PyImport_GetModule() 现在确保它返回的任何模块都已完全初始化。补丁由Joannah Nanjekye提供。

  • bpo-32178: 修复了 email 包中尝试解析以 : 开头的无效地址字段时的IndexError。

  • bpo-37268: parser 模块已被弃用,并将在Python的未来版本中移除。

  • bpo-11953: 在 socket 中完成WSA*错误代码。

  • bpo-37685: 修复了 datetime.timedeltadatetime.timezone 的比较。

  • bpo-37697: 将 importlib.metadata 与`importlib_metadata 0.19 <https://gitlab.com/python-devs/importlib_metadata/-/milestones/20>`_同步,改进了对EGG-INFO文件的处理,并修复了当入口点名称包含冒号时的崩溃问题。

  • bpo-37695: 更正 curses.unget_wch() 的错误信息。由Anthony Sottile提供补丁。

  • bpo-37689: 在 PurePath 中添加 is_relative_to() 方法,以确定一个路径是否相对于另一个路径。

  • bpo-29553: 修复了 argparse.ArgumentParser.format_usage() 对于互斥组的情况。补丁由 Andrew Nester 提供。

  • bpo-37691: 让 math.dist() 接受序列(或可迭代对象)而不仅仅是元组作为坐标。

  • bpo-37685: 修复了一些类中的 __eq__, __lt__ 等实现。对于不支持的其他操作数类型,现在返回 NotImplemented。这允许其他操作数发挥作用(例如与 ANY 的相等比较将返回 True)。

  • bpo-37354: 将 Activate.ps1 Powershell 脚本设为静态,以允许对其进行签名。

  • bpo-37664: 更新了与 ensurepip 捆绑的 wheels(pip 19.2.3 和 setuptools 41.2.0)。

  • bpo-37663: 通过始终使用 __VENV_PROMPT__ 来使 venv shell 激活脚本保持一致。

  • bpo-37642: 允许 datetime.timezone 的纯 Python 实现在接近最小和最大边界时表示亚分钟偏移,特别是在 (23:59, 24:00) 和 (-23:59, 24:00) 的范围内。补丁由 Ngalim Siregar 提供。

  • bpo-36161: 在 posix 中,使用 ttyname_r 代替 ttyname 以实现线程安全。

  • bpo-36324: 将 statistics.NormalDist() 的内部属性设为私有。

  • bpo-37555: 修复 NonCallableMock._call_matcherself._spec_signature 存在时返回元组而不是 _Call 对象的问题。由 Elizabeth Uselton 提供补丁。

  • bpo-29446: 使 from tkinter import * 仅导入预期的对象。

  • bpo-16970: 当传递无效值给 nargs 时添加一个值错误。由 Robert Leenders 提供补丁。

  • bpo-34443: enum 的异常现在在异常消息中使用枚举类的 __qualname__ 而不是 __name__

  • bpo-37491: 修复在解析具有意外结束的裸引用字符串值的电子邮件头时出现的 IndexError。由 Abhilash Raj 提供补丁。

  • bpo-37587: 使 json.loads 对长字符串的处理更快。(由 Marco Paolini 提供补丁)

  • bpo-18378: 将 "UTF-8" 识别为 locale._parse_localename 中 LC_CTYPE 的有效值。

  • bpo-37579: 在Python的 __eq__ 实现中,当比较的对象不是同一类型时,对于 timedeltatime 返回 NotImplemented,以匹配C实现。由Karthikeyan Singaravelan提供补丁。

  • bpo-21478: 当使用 unittest.mock.attach_mock() 将自动模拟对象附加到模拟时,记录对父级的调用。由Karthikeyan Singaravelan提供补丁。

  • bpo-37531: "python3 -m test -jN --timeout=TIMEOUT" 现在会在工作进程运行超过 TIMEOUT 秒时终止该进程。

  • bpo-37482: 修复了在发件人或收件人地址字段中同时包含编码字和特殊字符时显示名称的序列化问题。

  • bpo-36993: 改进了对带有坏zip64额外数据的损坏zip文件的错误报告。补丁由Daniel Hillier提供。

  • bpo-37502: 当buffers参数设置为None时,pickle.loads() 不再抛出TypeError。

  • bpo-37520: 修正了当路径对象标识子目录时zipfile.Path.parent的行为。

  • bpo-18374: 修复了在某些情况下,嵌套的 ast.BinOp 实例的 .col_offset 属性值过大的问题。

  • bpo-37424: 修复了在使用 subprocess.run() 进行超时设置并捕获输出时可能出现的挂起问题。如果子进程生成了自己的子进程或以其他方式将其stdout或stderr句柄与另一个进程连接,我们可能会在达到超时并杀死子进程后,在尝试从管道读取最终输出时挂起。

  • bpo-37421: 修复 multiprocessing.util.get_temp_dir() 的终结器:同时清除当前进程的'tempdir'配置,以便下次调用 get_temp_dir() 时将创建新的临时目录,而不是重用已删除的临时目录。

  • bpo-37481: Python 3.8中已弃用distutils的 bdist_wininst 命令,改用 bdist_wheel (wheel包) 。

  • bpo-37479: 当在派生类中重写 Enum.__str__ 时,无论是否存在混入类,Enum.__format__ 都将使用该重写。

  • bpo-37440: http.client 现在为默认上下文或如果向 HTTPSConnection 传递了 cert_file,则启用 TLS 1.3 握手后认证。

  • bpo-37437: 更新了供应商化的 expat 版本到 2.2.7。

  • bpo-37428: SSLContext.post_handshake_auth = True 不再为客户端连接设置 SSL_VERIFY_POST_HANDSHAKE 验证标志。虽然该选项被记录为对客户端忽略,但当该标志设置时,OpenSSL 隐式启用了证书链验证。

  • bpo-37420: os.sched_setaffinity() 现在正确处理了在其 mask 参数迭代过程中出现的错误。由 Brandt Bucher 提供补丁。

  • bpo-37412: os.getcwdb() 函数现在在 Windows 上使用 UTF-8 编码,而不是 ANSI 代码页:参见 PEP 529 的理由。该函数在 Windows 上不再被弃用。

  • bpo-37406: 如果操作参数类型不是 str,sqlite3 模块现在会抛出 TypeError,而不是 ValueError:execute()、executemany() 和调用连接时。

  • bpo-29412: 修复了在解析意外结束的头值时引发的 IndexError。由 Abhilash Raj 提供补丁。

  • bpo-36546: statistics.quantiles() 的 dist 参数现在仅为位置参数。当前名称没有反映该参数可以是数据集或分布。将参数标记为位置参数避免了混淆,并使得以后可以更改名称。

  • bpo-37394: 修复了一个导致 queue 模块在加速器模块不可用时失败的 bug。由 Pablo Galindo 提供补丁。

  • bpo-37376: pprint 现在支持 types.SimpleNamespace。由 Carl Bordum Hansen 提供补丁。

  • bpo-26967: 一个带有 allow_abbrev=FalseArgumentParser 不再禁用短标志的分组,例如 -vv,但仅禁用长标志的缩写,如文档所述。由 Zac Hatfield-Dodds 提交的补丁。

  • bpo-37212: unittest.mock.call() 现在保留关键字参数在 repr 输出中的顺序。由 Karthikeyan Singaravelan 提交的补丁。

  • bpo-37372: 修复从 Python 2 中解封秒数>=24 的 datetime.time 对象时的错误。由 Justin Blanchard 提交的补丁。

  • bpo-37345: 为 UDPLITE 套接字添加正式支持。之前已有支持,但现在更容易通过 hasattr(socket, 'IPPROTO_UDPLITE') 检测支持,并为每个需要的值定义了常量:socket.IPPROTO_UDPLITEUDPLITE_SEND_CSCOVUDPLITE_RECV_CSCOV。由 Gabe Appleton 提交的补丁。

  • bpo-37358: 通过使用 vectorcall 优化了 functools.partial

  • bpo-37347: 如果 sqlite3.Connection.create_aggregate()sqlite3.Connection.create_function()sqlite3.Connection.set_authorizer()sqlite3.Connection.set_progress_handler()sqlite3.Connection.set_trace_callback() 方法被用相同的对象但不是同一个对象调用两次,会导致段错误。现在回调的存储更加谨慎。由 Aleksandr Balezin 提交的补丁。

  • bpo-37163: dataclasses.replace()obj 参数现在是仅位置参数。

  • bpo-37085: 在 socket 模块中添加了可选的 Linux SocketCAN 广播管理器常量,用作配置 BCM 行为的标志。由 Karl Ding 提交的补丁。

  • bpo-37328: HTMLParser.unescape 已被移除。它自 Python 3.4 起未记录且被弃用。

  • bpo-37305: 将 .webmanifest -> application/manifest+json 添加到识别的文件类型和内容类型头列表中。

  • bpo-37320: aifc.openfp()aifc.open() 的别名、sunau.openfp()sunau.open() 的别名、以及 wave.openfp()wave.open() 的别名已被移除。它们自 Python 3.7 起被弃用。

  • bpo-37315: 弃用在 math.factorial() 中接受整数值的浮点数(如 5.0)。

  • bpo-37312: _dummy_threaddummy_threading 模块已被移除。这些模块自 Python 3.7 起已被弃用,因为 Python 3.7 需要线程支持。

  • bpo-33972: 对于设置为 multipart/* 但只有单一部分的电子邮件,不再引发 AttributeError。

  • bpo-37280: 在 sendfile 后备模式中,使用线程池从文件读取。

  • bpo-37279: 修复在 sendfile 后备模式中发送额外数据时的 asyncio sendfile 支持。

  • bpo-19865: ctypes.create_unicode_buffer() 现在也支持在 wchar_t 为 16 位的平台(例如 Windows 和 AIX)上使用非 BMP 字符。

  • bpo-37266: 在子解释器中,现在尝试生成守护线程会引发异常。子解释器从未支持守护线程。之前,如果守护线程仍在运行,子解释器终止时会因 Python 致命错误而崩溃。

  • bpo-37210: 允许 pickle 的纯 Python 实现在 C _pickle 模块不可用时也能工作。

  • bpo-21872: 修复 lzma 模块解压数据不完整的问题。当解压 FORMAT_ALONE 格式的文件且没有结束标记时,有时最后的一些字节无法输出。由马林提供补丁。

  • bpo-35922: 修复 RobotFileParser.crawl_delay()RobotFileParser.request_rate(),当 robots.txt 文件中没有定义相关规则时返回 None 而不是引发 AttributeError。由 Rémi Lapeyre 提供补丁。

  • bpo-35766: 将 feature_version 的格式更改为 (major, minor) 元组。

  • bpo-36607: 消除 asyncio.all_tasks() 在迭代期间如果内部任务的弱引用集被另一个线程更改时引发的 RuntimeError

  • bpo-18748: _pyio.IOBase 析构函数现在在获取 closed 属性失败时不执行任何操作,以更好地模拟 _io.IOBase 终结器。

  • bpo-36402: 修复 Python 关闭时等待线程的竞争条件。等待所有非守护线程的 Python 线程状态被删除(加入所有非守护线程),而不仅仅是等待非守护 Python 线程完成。

  • bpo-37206: 无法表示为 Python 对象的默认值不再在函数签名中错误地表示为 None

  • bpo-37111: 向 logging.basicConfig 添加了 encodingerrors 关键字参数。

  • bpo-12144: 确保在 CookieJar.make_cookies() 中处理带有 expires 属性的 cookies。

  • bpo-34886: 修复 subprocess.run() 在检查 inputstdincapture_outputstdoutstderr 参数冲突时,当它们被显式提供但值为 None 时无意中引发的 ValueError,这些值是通过传入的 **kwargs 字典而非直接通过名称传递的。由 Rémi Lapeyre 提供补丁。

  • bpo-37173: inspect.getfile() 的异常消息现在正确地报告传递的类而非 builtins 模块。

  • bpo-37178: 给 math.perm() 添加了一个单参数形式,其含义与 math.factorial() 相同。

  • bpo-37178: 对于 math.perm(n, k),让 k 默认为 n,给出与阶乘相同的结果。

  • bpo-37165: 将 _collections._count_elements 转换为使用 Argument Clinic。

  • bpo-34767: 不在 asyncio.Lock 中总是创建一个 collections.deque

  • bpo-37158: 通过从函数切换到生成器来加速 statistics.fmean()。

  • bpo-34282: 移除 Enum._convert 方法,已在 3.8 版本中弃用。

  • bpo-37150: argparse._ActionsContainer.add_argument 现在会在有人意外传递 FileType 类对象而非 FileType 实例作为 type 参数时抛出错误。

  • bpo-28724: socket 模块现在有 socket.send_fds()socket.recv.fds() 方法。由 Joannah Nanjekye、Shinya Okano 和 Victor Stinner 贡献。

  • bpo-35621: 支持在UNIX上线程中运行事件循环时执行asyncio子进程。

  • bpo-36520: 现在,带有UTF-8字符的长电子邮件头在折叠时能够正确编码。由Jeffrey Kintscher提供补丁。

  • bpo-30835: 修复了电子邮件解析中的一个错误,其中多部分消息中内容传输编码含有无效字节可能导致AttributeError。由Andrew Donnellan提供补丁。

  • bpo-31163: pathlib.Path实例的rename和replace方法现在返回新的Path实例。

  • bpo-25068: urllib.request.ProxyHandler 现在将传递的字典的键转换为小写。

  • bpo-26185: 修复空 ZipInfo 对象上的 repr()。由Mickaël Schoentgen提供补丁。

  • bpo-21315: 即使缺少空白,也会解析包含RFC2047编码词的电子邮件头,并记录一个缺陷。现在,编码词后缺少尾随空白也会被记录为缺陷。

  • bpo-31904: 将test_datetime移植到VxWorks:在VxWorks上跳过zoneinfo测试

  • bpo-35805: 添加Message-ID头的解析器并将其添加到默认HeaderRegistry中。这应该可以防止使用RFC 2048编码词折叠Message-ID。

  • bpo-36871: 确保在断言模拟对象对方法调用时使用方法签名而不是类的构造函数签名。由Karthikeyan Singaravelan提供补丁。

  • bpo-35070: 当用户属于NGROUPS_MAX补充组时,posix.getgrouplist()现在可以正常工作。补丁由Jeffrey Kintscher提供。

  • bpo-31783: 修复ThreadPoolExecutor中在解释器关闭期间创建工作线程时的竞争条件。

  • bpo-36582: 修复 UserString.encode()``以正确返回 ``bytes 而不是 UserString 实例。

  • bpo-32424: 弃用xml.etree.ElementTree.Element.copy(),推荐使用copy.copy()。

    由Gordon P. Hemsley提供补丁

  • 问题`36564`: 修复了当邮件策略的max_line_length不足以包含所需标记和消息中的任何值时触发的电子邮件头折叠逻辑中的无限循环。由Paul Ganssle提供补丁。

  • 问题`36543`: 移除了Element.getchildren()、Element.getiterator()和ElementTree.getiterator()方法以及xml.etree.cElementTree模块。

  • 问题`36409`: 移除了在Python 3.4中已弃用的旧plistlib API。

  • 问题`36302`: distutils对源文件列表进行排序,使得默认情况下Extension .so文件的构建更具可重复性。

  • 问题`36250`: 在非主线程中,忽略来自`signal`与`interaction`的`ValueError`。

  • 问题`36046`: 向subprocess.Popen构造函数添加了`user`、`group`和`extra_groups`参数。由Patrick McLean提供补丁。

  • 问题`32627`: 修复了当包含冲突的`_uuid`头时导致的编译错误。

  • 问题`35800`: 弃用`smtpd.MailmanProxy`,为将来移除做准备。

  • 问题`35168`: shlex.shlex.punctuation_chars 现在是一个只读属性。

  • 问题`8538`: 向argparse添加了对布尔动作的支持,如`--foo`和`--no-foo`。由Rémi Lapeyre提供补丁。

  • 问题`20504`: 修复了 cgi 模块中的一个bug,当multipart/form-data请求没有`Content-Length`头时。

  • 问题`25988`: collections.abc 中的抽象基类不再暴露在常规的 collections 模块中。

  • 问题`11122`: Distutils不会仅在指定的路径中检查rpmbuild。

  • 问题`34775`: 当传递的不是str或PurePath的实例时,PurePath的除法处理现在返回NotImplemented而不是引发TypeError。由Roger Aiudi提供补丁。

  • 问题`34749`: binascii.a2b_base64() 现在快了2倍。由Sergey Fedoseev提供补丁。

  • 问题`34519`: 为HP Roman 8添加了额外的别名。由Michael Osipov提供补丁。

  • bpo-28009: 修复在MAC地址分隔符为'.'的平台以及MAC地址值中省略前导0的MAC地址格式情况下uuid.getnode()的问题。目前,AIX是唯一已知具有这些设置的平台。由Michael Felt提供补丁。

  • bpo-30618: 添加 readlink()。由Girts Folkmanis提供补丁。

  • bpo-32498: 使 urllib.parse.unquote() 接受字节以及字符串。由Stein Karlsen提供补丁。

  • bpo-33348: lib2to3现在可以识别在 *** 之后的表达式,例如 f(*[] or [])

  • bpo-32689: 更新 shutil.move() 函数以允许使用Path对象作为源参数。由Emily Morehouse和Maxwell "5.13b" McKinnon提供补丁。

  • bpo-32820: 为IPv4和IPv6类添加了 __format__。总是输出一个完全零填充的字符串。支持b/x/n修饰符(bin/hex/native格式)。IPv4的本机格式是bin,IPv6的本机格式是hex。还支持'#'和'_'修饰符。

  • bpo-27657: 修复带有数字路径的urllib.parse.urlparse()。像"path:80"这样的字符串不再被解析为路径,而是被解析为方案("path")和路径("80")。

  • bpo-4963: 修复了与mimetypes扩展映射和模块重新初始化相关的非确定性行为。

文档

  • bpo-21767: 在functools.singledispatch中明确提及abc支持。

  • bpo-38816: 提供了关于 fork() 与CPython运行时之间交互的更多细节,仅关注C-API。这包括关于在何处应该和不应该调用 fork() 的警告。

  • bpo-38351: 将 email 示例从%-格式化更新为f-strings。

  • bpo-38778: 记录了如果在子解释器中调用 os.fork() 会引发 RuntimeError 的事实。

  • bpo-38592: 在Python文档网站的语言切换器中添加巴西葡萄牙语。

  • bpo-38294: 将不再转义的字符列表添加到re.escape文档中。

  • bpo-38053: 更新了plistlib文档。

  • bpo-26868: 修复 PyModule_AddObject() 的示例用法以正确处理错误。

  • bpo-36797: 修复 distutils API 参考中的死链接。

  • bpo-37977: 更强烈和明确地警告关于 pickle 的不安全性。

  • bpo-37979: 在 datetime.fromisoformat 文档中添加了到 dateutil.parser.isoparse 的链接。由 Paul Ganssle 提供补丁。

  • bpo-12707: 弃用 info()、geturl()、getcode() 方法,分别推荐使用 headers、url 和 status 属性,针对 HTTPResponse 和 addinfourl。同时弃用 addinfourl 的 code 属性,推荐使用 status 属性。由 Ashwin Ramaswami 提供补丁。

  • bpo-37937: 在 sys.settrace() 文档中提及 frame.f_trace

  • bpo-37878: 使 PyThreadState_DeleteCurrent() 内部化。

  • bpo-37759: 开始编辑 Whatsnew 3.8。

  • bpo-37726: 停止在教程中推荐使用 getopt 进行命令行参数解析,并推广 argparse。

  • bpo-32910: 移除关于 venv 的 Deactivate 如何工作的实现特定行为。

  • bpo-37256: 修正 urllib.requestRequest 的参数措辞。

  • bpo-37284: 添加简短说明,指出任何新的 sys.implementation 必需属性必须经过 PEP 流程。

  • bpo-30088: 文档说明 mailbox.Maildir 构造函数不尝试验证 maildir 文件夹布局的正确性。由 Sviatoslav Sydorenko 提供补丁。

  • bpo-37521: 修复 importlib 示例,通过 importlib.util.module_from_spec() 立即将新创建的模块插入 sys.modules,而不是在调用 loader.exec_module() 之后。

    感谢 Benjamin Mintz 发现这个错误。

  • bpo-37456: 斜杠 ('/') 现在成为语法的一部分。

  • bpo-37487: 修正 PyList_GetItem 索引描述以包含 0。

  • bpo-37149: 将死链接 Tkinter 8.5 参考(作者:John Shipman, New Mexico Tech)替换为 archive.org 的副本链接。

  • bpo-37478: 在 os.chdir() 的描述中添加了可能的异常。

  • bpo-34903: 记录了在 datetime.datetime.strptime() 中,某些两位数格式的前导零是可选的。由 Mike Gleen 提供补丁。

  • bpo-36260: 在 zipfile 模块文档中添加了解压缩的陷阱。

  • bpo-37004: 在 difflib 的文档中,添加了一个明确警告,指出 SequenceMatcher 的 ratio 方法的结果可能依赖于输入字符串的顺序。

  • bpo-36960: 重构了 datetime 文档,旨在使其更加用户友好并提高可读性。由 Brad Solomon 提供补丁。

  • bpo-36487: 在 C-API 文档中明确了“主”解释器的含义。

  • bpo-23460: 更新了使用 :g 说明符进行十进制字符串格式化的文档,以反映正确的指数表示法截止点。原始由 Tuomas Suutari 提供补丁。

  • bpo-35803: 记录并测试了 tempfile 函数可能接受一个 path-like object 作为 dir 参数。由 Anthony Sottile 提供补丁。

  • bpo-33944: 添加了关于 .pth 文件中代码预期用途的说明。

  • bpo-34293: 修复了 Doc/Makefile 关于 PAPER 环境变量和 PDF 构建的问题。

  • bpo-25237: 为 tkinter 模块添加文档。

测试

  • bpo-38614: 修复了 test_asyncio.test_subprocess 的 test_communicate():使用 support.LONG_TIMEOUT (5 分钟) 而不是仅 1 分钟。

  • bpo-38614: 向 test.support 添加超时常量:LOOPBACK_TIMEOUTINTERNET_TIMEOUTSHORT_TIMEOUTLONG_TIMEOUT

  • bpo-38502: 如果进程组可用(os.setsid()os.killpg() 函数可用),test.regrtest 现在在多进程模式(-jN 命令行选项)中使用进程组。

  • bpo-35998: 修复 test_asyncio.test_start_tls_server_1() 中的竞态条件。之前,测试 main() 函数替换协议和测试 ServerProto 协议在收到 HELLO 后发送 ANSWER 之间存在竞态条件。现在,只有测试 main() 函数负责发送数据,ServerProto 不再发送数据。

  • bpo-38470: 在没有长路径支持的 Windows 上修复 test_compileall.test_compile_dir_maxlevels():仅创建 3 个子目录,而不是创建 20 到 100 个子目录。

  • bpo-37531: 在超时时,regrtest 不再尝试再次调用 popen.communicate():它可能会挂起,直到所有使用 stdout 和 stderr 管道的子进程完成。杀死工作进程并忽略其输出。还将主进程的 faulthandler 超时从 1 分钟更改为 5 分钟,以适应 Python 最慢的构建机器人。

  • bpo-38239: 为链接时优化 (LTO) 构建修复 test_gdb。

  • bpo-38275: test_ssl 现在更好地处理禁用的 TLS/SSL 版本。识别 OpenSSL 的加密策略和运行时设置,并跳过禁用版本的测试。测试还接受更多的 TLS minimum_versions,以适应那些用严格设置覆盖 OpenSSL 默认值的平台。

  • bpo-38271: test_ssl 的私钥之前是用 3DES 加密的传统 PKCS#5 格式。一些严格的加密策略会阻止 3DES 和 PKCS#5 的摘要算法。现在改用 PKCS#8 格式并使用 AES256 加密。

  • bpo-38270: test.support 现在有一个辅助函数来检查哈希摘要函数的可用性。重构了几个测试以避免使用 MD5 并使用 SHA256 代替。其他测试被标记为使用 MD5,并在 MD5 被禁用时跳过。

  • bpo-37123: 多处理测试 test_mymanager() 现在也期望 -SIGTERM,不仅仅是退出码 0。如果管理器进程停止时间超过 1 秒,BaseManager._finalize_manager() 会向管理器进程发送 SIGTERM,这在慢速构建机器人上会发生。

  • bpo-38212: 多进程测试:将 test_queue_feeder_donot_stop_onexc() 的超时时间从 1 秒增加到 60 秒。

  • bpo-38117: 使用 OpenSSL 1.1.1d 进行测试

  • bpo-38018: 提高 multiprocessing.shared_memory 的代码覆盖率。

  • bpo-37805: 为 json.dump(..., skipkeys=True) 添加测试。由 Donghee Na 提供补丁。

  • bpo-37531: 增强 regrtest 多进程超时功能:在终止工作进程时写入消息,捕获 popen.kill() 和 popen.wait() 异常,对第二次调用 popen.communicate() 设置超时。

  • bpo-37876: 为 ROT-13 编解码器添加测试。

  • bpo-36833: 为 datetime 模块的 C API 中的 PyDateTime_xxx_GET_xxx() 宏添加测试。由 Joannah Nanjekye 提供补丁。

  • bpo-37558: 修复 test_shared_memory_cleaned_after_process_termination 名称处理

  • bpo-37526: 添加 test.support.catch_threading_exception():使用 threading.excepthook() 捕获 threading.Thread 异常的上下文管理器。

  • bpo-37421: test_concurrent_futures 现在如果 ForkServer 实例正在运行,则明确停止它。

  • bpo-37421: 多进程测试现在如果 ForkServer 实例正在运行,则停止它:关闭“alive”文件描述符以请求服务器停止,然后移除其 UNIX 地址。

  • bpo-37421: test_distutils.test_build_ext() 现在能够在 Windows 上移除临时目录:不在当前进程中导入新构建的 C 扩展(“xx”),而是在一个单独的进程中测试它。

  • bpo-37421: test_concurrent_futures 现在清理多进程以立即移除由 multiprocessing.util.get_temp_dir() 创建的临时目录。

  • bpo-37421: test_winconsoleio 不再泄漏临时文件:使用 tempfile.TemporaryFile() 在测试完成时移除它。

  • bpo-37421: 多进程测试现在明确调用 _run_finalizers() 以立即移除测试创建的临时目录。

  • bpo-37421: urllib.request 测试现在调用 urlcleanup() 来移除由 urlretrieve() 测试创建的临时文件,并清除由 urlopen() 和间接调用 urlopen() 的函数设置的 _opener 全局变量。

  • bpo-37472: 移除 Lib/test/outstanding_bugs.py

  • bpo-37199: 修复当 IPv6 不可用或禁用时的测试失败问题。

  • bpo-19696: 在 "test_pkg_import.py" 中用 "random.choice" 替换已弃用的方法 "random.choose"。

  • bpo-37335: 从 c 语言环境强制测试中移除不再必要的代码。

  • bpo-37421: 修复 test_shutil 以不再泄漏临时文件。

  • bpo-37411: 修复 test_wsgiref.testEnviron() 以不再依赖环境变量(如果设置了 "X" 变量也不会失败)。

  • bpo-37400: 修复 test_os.test_chown():使用 os.getgroups() 而不是 grp.getgrall() 来获取组。同时将测试重命名为 test_chown_gid()。

  • bpo-37359: 向 python3 -m test 添加 --cleanup 选项以移除之前失败作业的 test_python_* 目录。添加 "make cleantest" 以运行 python3 -m test --cleanup

  • bpo-37362: 如果 test_gdb 在 stderr 上接收到“意外”消息,它不再失败:现在它会忽略 stderr。test_gdb 的目的是测试 python-gdb.py 命令是否按预期工作,而不是测试 gdb。

  • bpo-35998: 在 test_asyncio: test_start_tls_server_1() 中避免 TimeoutError。

  • bpo-37278: 修复 test_asyncio ProactorLoopCtrlC:加入线程以防止泄漏运行中的线程和引用。

  • bpo-37261: 修复 test.support.catch_unraisable_exception():它的 __exit__() 方法现在忽略在清除其 unraisable 属性时引发的不可捕获异常。

  • bpo-37069: regrtest 现在使用 sys.unraisablehook() 来标记测试为“环境已更改”(ENV_CHANGED),如果它发出了“不可捕获的异常”。此外,regrtest 在这种情况下会记录一个警告。

    使用 python3 -m test --fail-env-changed 来捕获测试中的不可捕获异常。

  • bpo-37252: 修复devpoll测试中 test_closetest_events_mask_overflow 的断言。

  • bpo-37169: 重写 _PyObject_IsFreed() 单元测试。

  • bpo-37153: test_venv.test_multiprocessing() 现在显式调用 pool.terminate() 以等待池完成。

  • bpo-34001: 使test_ssl能够与LibreSSL一起通过。LibreSSL处理最小和最大TLS版本的方式与OpenSSL不同。

  • bpo-36919: 使 test_source_encoding.test_issue2301 实现独立。该测试现在适用于CPython和IronPython。

  • bpo-30202: 更新 test.test_importlib.test_abc 以测试 find_spec()

  • bpo-28009: 修改test_uuid逻辑,以测试当程序可用且可用于获取MACADDR作为UUID基础时的情况。由M. Felt提供补丁。

  • bpo-34596: 当 unittest.skip() 未被调用时,回退到默认原因。由Naitree Zhu提供补丁。

构建

  • bpo-38809: 在Windows上,构建脚本现在可以识别并使用活动虚拟环境中的python.exe。

  • bpo-38684: 当Blake2被禁用但OpenSSL支持它时,修复_hashlib构建。

  • bpo-38468: Misc/python-config.in现在对所有仍存在的 sysconfig.get_config_var() 调用使用 getvar()。由Joannah Nanjekye提供补丁。

  • bpo-37415: 修复ICC编译器的stdatomic.h头文件检查:ICC实现缺少Python所需的atomic_uintptr_t类型。

  • bpo-38301: 在Solaris系列中,我们必须确保使用 -D_REENTRANT。由Jesús Cea Avión提供补丁。

  • bpo-36002: 使用 AC_PATH_TOOL``而非 ``AC_PATH_TARGET_TOOL 定位 llvm-profdata 和``llvm-ar``二进制文件。

  • bpo-37936: .gitignore 文件系统地“根植”所有规则,规则末尾不带斜杠,这些规则旨在应用于仓库中特定位置的文件。以前,当要忽略的文件恰好在仓库的根目录时,我们经常会意外地忽略树中任何地方同名的文件和目录。

  • bpo-37760: 用于将Unicode字符数据库中的信息转换为由 str 方法和 unicodedata 模块使用的生成代码和数据的脚本 Tools/unicode/makeunicodedata.py,现在将每个字符的数据作为一个具有命名属性的 dataclass 处理,而不是一个长度为18的不同字段列表。

  • bpo-37936: .gitignore 文件不再适用于实际上在Git仓库中被跟踪的任何文件。由Greg Price提供补丁。

  • bpo-37725: 更改“clean”makefile目标,以同时清除程序引导优化(PGO)数据。以前,您必须使用“make clean”和“make profile-removal”,或者“make clobber”。

  • bpo-37707: 标记一些单独的测试在使用--pgo时跳过。标记的测试显著增加PGO任务时间,并且可能无助于改进最终可执行文件的优化。

  • bpo-36044: 减少为PGO生成任务运行的单元测试数量。这使任务速度提高了约15倍。运行完整的单元测试套件很慢。这一变化可能导致构建稍微不那么优化,因为不会执行那么多代码分支。如果您愿意等待更慢的构建,可以使用'./configure [..] PROFILE_TASK="-m test --pgo-extended"'恢复旧行为。我们不保证哪个PGO任务集会产生更快的构建。关心的用户应该运行自己的相关基准测试,因为结果可能依赖于环境、工作负载和编译器工具链。

  • bpo-37468: make install 不再安装distutils bdist_wininst使用的 wininst-*.exe 文件:bdist_wininst仅在Windows上工作。

  • bpo-37189: 许多 PyRun_XXX() 函数如 PyRun_String() 不再错误地导出在``libpython38.dll`` 中。再次导出它们以修复ABI兼容性。

  • bpo-25361: 在Windows 32位构建中启用SSE2指令的使用。

  • bpo-36210: 更新AIX的可选扩展模块检测。osssaudiodev和spwd不适用于AIX,不再报告为缺失。第三方打包的ncurses(支持ASIS)与官方支持的AIX curses库冲突,因此配置AIX使用libcurses.a。但是,跳过尝试构建_curses_panel。

    由M Felt提供补丁

Windows

  • bpo-38589: 修复当Windows未安装在C盘时的HTML帮助快捷方式

  • bpo-38453: 确保ntpath.realpath()正确解析相对路径。

  • bpo-38519: 恢复nuget.org和Microsoft Store包中缺失的内部C头文件。

  • bpo-38492: 移除 pythonw.exe 对Microsoft C++运行时的依赖。

  • bpo-38344: 修复activate.bat中的错误消息

  • bpo-38359: 确保 pyw.exe 启动器读取正确的注册表键。

  • bpo-38355: 修复 ntpath.realpathsys.executable 上失败的问题。

  • bpo-38117: 更新捆绑的OpenSSL至1.1.1d

  • bpo-38092: 减少在Windows虚拟环境中使用多进程时的开销。

  • bpo-38133: 允许py.exe启动器定位来自Microsoft Store的安装,并改进活动虚拟环境的显示。

  • bpo-38114: pip.ini 不再包含在Nuget包中。

  • bpo-32592: 将Windows 8设置为API支持的最低要求版本

  • bpo-36634: os.cpu_count() 现在返回活动处理器而非最大处理器。

  • bpo-36634: 当现有变量包含双引号字符时,venv activate.bat现在可以工作。

  • bpo-38081: 防止在 'NUL' 上调用 os.path.realpath() 时出错。

  • bpo-38087: 修复test_pathlib和test_ntpath中的大小写敏感性。

  • bpo-38088: 修复仅安装v142工具集时,distutils找不到vcruntime140.dll的问题。

  • bpo-37283: 确保命令行和unattend.xml设置覆盖Windows安装程序中先前检测到的状态。

  • bpo-38030: 修复 os.stat() 在Windows上对块设备失败的问题。

  • bpo-38020: 修复在调用 os.readlink() (或间接通过 realpath()) 时,如果文件不是支持的链接可能导致崩溃的问题。

  • bpo-37705: 改进 winerror_to_errno() 的实现。

  • bpo-37549: os.dup() 在 Windows 7 上不再为标准流失败。

  • bpo-1311: Windows 上的 nul 文件现在从 exists() 返回 True,并从 os.stat() 返回一个有效结果,设置了 S_IFCHR

  • bpo-9949: 在 os.realpath() 中启用对符号链接的支持。

  • bpo-37834: 在 os.lstat() 中将 Windows 上的所有名称代理重解析点和其他重解析点在 os.stat() 中视为常规文件。

  • bpo-36266: 在 _PyImport_FindSharedFuncptrWindows() 中模块导入期间发生 DLL 加载失败时,在格式化的错误消息中添加模块名称。由 Srinivas Nyayapati 提供补丁。

  • bpo-25172: 尝试在 Windows 上导入 crypt 模块将导致 ImportError,并附带一条消息说明该模块在 Windows 上不受支持。在其他平台上,如果底层的 _crypt 模块不可用,ImportError 将包含一条解释问题的消息。

  • bpo-37778: 修复用于 Microsoft Store 包的文件关联的图标。

  • bpo-37734: 修复使用注册表值从 Microsoft Store 应用启动 Python 的问题。

  • bpo-37702: 修复在 Windows 上创建 SSLContext 对象或运行 urllib.request.urlopen('https://...') 时的内存泄漏。

  • bpo-37672: 将 Windows Store 包的 pip 切换到使用捆绑的 pip.ini 而不是 PIP_USER 变量。

  • bpo-10945: 正式放弃在非 Windows 系统上创建 bdist_wininst 安装程序的支持。

  • bpo-37445: 在 FormatMessageW() 调用中包含 FORMAT_MESSAGE_IGNORE_INSERTS 标志。

  • bpo-37369: 修复从 Microsoft Store 运行时 sys.executable 的路径。

  • bpo-37380: 在Windows上,不再通过 subprocess._active 收集未完成的进程以供后续清理。由Ruslan Kuprieiev提供补丁。

  • bpo-37351: 从标准的Windows发行版中移除libpython38.a。

  • bpo-35360: 更新Windows构建以使用SQLite 3.28.0。

  • bpo-37267: 在Windows上,os.dup() 处理字符文件时不再创建可继承的文件描述符。

  • bpo-36779: 确保在活动代码页设置为CP_UTF7或CP_UTF8时,Windows上的 time.tzname 是正确的。

  • bpo-32587: 使 winreg.REG_MULTI_SZ 支持零长度字符串。

  • bpo-28269: 将 strcasecmp() 的使用替换为系统函数 _stricmp()。由Minmin Gong提供补丁。

  • bpo-36590: 向socket模块添加原生蓝牙RFCOMM支持。

macOS

  • bpo-38117: 在macOS安装程序中更新OpenSSL至1.1.1d。

  • bpo-38089: 将Azure Pipelines迁移至最新的VM版本,并使macOS测试变为可选。

  • bpo-18049: 在macOS上将线程的默认堆栈大小从5MB增加到16MB,以匹配主线程的堆栈大小。这避免了线程深度递归时的崩溃。

  • bpo-34602: 通过在运行时不再调用resource.setrlimit来增加进程堆栈大小限制,避免在macOS上的测试套件失败。由于解释器正在构建为更大的默认堆栈大小,运行时更改不再需要。

  • bpo-35360: 更新macOS安装程序以使用SQLite 3.28.0。

  • bpo-34631: 在macOS安装程序中更新OpenSSL至1.1.1c。

IDLE

  • bpo-26353: 停止在保存IDLE shell窗口时添加新行。

  • bpo-4630: 添加一个选项来切换IDLE的shell、编辑器和输出窗口的光标闪烁。参见设置、常规、窗口首选项、光标闪烁。由Zackery Spytz提供补丁。

  • bpo-38598: 不尝试编译IDLE shell或输出窗口

  • bpo-36698: IDLE在向stderr写入不可编码的字符时不再失败。现在它会像常规的Python解释器一样用反斜杠转义它们。添加了标准流的 errors 字段。

  • bpo-35379: 退出IDLE时,捕获任何AttributeError。当EditorWindow.close被调用两次时会发生一次。当IDLE从终端运行时,打印回溯是无用且烦人的。

  • bpo-38183: 为避免问题,test_idle忽略用户配置目录。它不再尝试创建或访问.idlerc或其中的任何文件。用户必须运行IDLE来发现保存设置时的问题。

  • bpo-38077: IDLE在初始化用户命名空间时不再添加'argv'。此错误仅影响3.7.4和3.8.0b2至3.8.0b4版本。

  • bpo-38041: Shell重启行现在填满窗口宽度,始终以'='开头,并避免不必要的换行。如果包含的文件名相对于宽度较长,行仍会换行。

  • bpo-35771: 为避免在较慢的机器上偶尔出现的虚假test_idle失败,增加test_tooltip中的``hover_delay``。

  • bpo-37824: 正确处理IDLE shell中的用户输入警告。停止将SyntaxWarnings转为SyntaxErrors。

  • bpo-37929: 当没有shell窗口时,IDLE设置对话框现在能正确关闭。

  • bpo-37902: 为IDLE模块、路径和堆栈浏览器添加鼠标滚轮滚动。由George Zhang提供补丁。

  • bpo-37849: 修复了补全列表在当前行上方显示时过高或过低的问题。

  • bpo-36419: 重构IDLE自动补全并改进测试。

  • bpo-37748: 重新排序运行菜单。将最常见的选择,运行模块,放在顶部。

  • bpo-37692: 通过示例shell交互和改进的shell元素标签来改善高亮配置示例。

  • bpo-37628: 设置对话框不再随字体大小扩展。

  • bpo-37627: 使用最近一次输入的命令行参数初始化自定义运行对话框。用户可以在提交前选择编辑。

  • bpo-33610: 修复首次切换时代码上下文未显示正确上下文的问题。

  • bpo-37530: 优化代码上下文以减少不必要的后台活动。字体和高亮更改现在与文本更改同时进行,而不是在随机延迟后。

  • bpo-27452: 通过内联 RemoveFile 和简化 CreateConfigHandlersfile 的处理来清理 config.py

  • bpo-37325: 修复帮助源和自定义运行对话框的标签焦点遍历顺序。

  • bpo-37321: 现在,两个子进程连接错误消息都指向IDLE文档的'启动失败'部分。

  • bpo-17535: 为IDLE编辑器窗口添加可选的行号。除非在配置对话框的常规标签中设置,否则窗口打开时不显示行号。

  • bpo-26806: 为了补偿由IDLE添加的堆栈帧并避免低递归限制可能带来的问题,用户代码执行过程中的限制增加了30。报告递归限制时减去30,使这一增加大部分透明。

  • bpo-37177: 正确地将搜索对话框'附加'到其主窗口,使其行为类似于其他对话框,并且不会隐藏在主窗口后面。

  • bpo-37039: 通过首次使用特定屏幕时暂时最大化窗口来调整“缩放高度”以适应单个屏幕。更改屏幕设置可能会使保存的高度无效。窗口最大化时,“缩放高度”无效。

  • bpo-35763: 通过仅在首行有空间时添加关于'/'仅表示位置的提示,使调用提示提醒不那么显眼。

  • bpo-5680: 在运行菜单中添加'运行...定制'以使用定制设置运行模块。输入的任何'命令行参数'都会添加到sys.argv。可以抑制正常的Shell主模块重启。

  • bpo-36390: 将格式菜单功能收集到format.py中。合并paragraph.py、rstrip.py和editor.py中的格式方法。

工具/示例

  • bpo-38118: 更新Valgrind抑制文件以忽略在使用GCC内置strcmp()时 PyUnicode_Decode() 中的误报。

  • bpo-38347: pathfix.py:递归工作时,假设所有以'.py'结尾的文件都是Python脚本。

  • bpo-37803: pdb的 --help--version 长选项现在可以工作了。

  • bpo-37942: 改进ArgumentClinic对浮点数的转换器。

  • bpo-37704: 移除 Tools/scripts/h2py.py:使用cffi在Python中访问C API。

  • bpo-37675: 2to3现在可以从压缩的标准库中运行。

  • bpo-37034: Argument Clinic现在在使用仅关键字参数的错误时使用参数名称而不是它们的位置。补丁由Rémi Lapeyre贡献。

  • bpo-37064: 向pathscript.py脚本添加选项-k:保留shebang标志。向pathscript.py脚本添加选项-a:添加标志。

C API

  • bpo-37633: 重新导出 pythonrun.h 中一些宏的函数兼容性包装器。

  • bpo-38644: 为有限API提供 Py_EnterRecursiveCall()Py_LeaveRecursiveCall() 作为常规函数。之前,它们被定义为宏,但这些宏无法与有限API一起工作,因为有限API无法访问 PyThreadState.recursion_depth 字段。从稳定ABI中移除``_Py_CheckRecursionLimit``。

  • bpo-38650: 全局变量 PyStructSequence_UnnamedField 现在是一个常量,并引用一个常量字符串。

  • bpo-38540: 修复了在未定义宏 PY_SSIZE_T_CLEAN 时,PyArg_Parse() 及类似函数对于格式单元 "es#""et#" 可能的内存泄漏。

  • bpo-38395: 修复了由于在调用可能删除代理引用的对象的最后一个引用的某些关联方法时,weakref.proxy 对象的生命周期管理不正确而导致的崩溃。由Pablo Galindo提供补丁。

  • bpo-36389: _PyObject_CheckConsistency() 函数现在在发布模式下也可用。例如,它可以用于调试GC中 visit_decref() 函数的崩溃。

  • bpo-38266: 恢复PyThreadState_DeleteCurrent()的移除,并附带文档。

  • bpo-38303: 更新audioop扩展模块以使用稳定的ABI(PEP-384)。由Tyler Kieft提供补丁。

  • bpo-38234: Py_SetPath() now sets sys.executable to the program full path (Py_GetProgramFullPath()) rather than to the program name (Py_GetProgramName()).

  • bpo-38234: Python忽略了传递给 Py_SetPath()Py_SetPythonHome()Py_SetProgramName() 的参数:修复Python初始化以使用指定的参数。

  • bpo-38205: Py_UNREACHABLE() 宏现在调用 Py_FatalError()

  • bpo-38140: 通过PyMemberDef传递偏移量,使dict和weakref的偏移量对于C堆类型变得不透明。

  • bpo-15088: C函数 PyGen_NeedsFinalizing 已被移除。它没有被记录、测试或在CPython中任何地方使用,在 PEP 442 的实现之后。由Joannah Nanjekye提供补丁。(由Joannah Nanjekye提供补丁)

  • bpo-36763: 由 PySys_AddXOption() 添加的选项现在与 PyConfig.xoptions 和命令行 -X 选项以相同的方式处理。

  • bpo-37926: 修复 PySys_SetArgvEx(0, NULL, 0) 中的崩溃。

  • bpo-37879: 修复subtype_dealloc以在基类型为C堆类型时抑制类型递减引用计数。

  • bpo-37645: 添加 _PyObject_FunctionStr() 以获取函数类对象的用户友好字符串表示。由Jeroen Demeyer提供补丁。

  • bpo-29548: 函数 PyEval_CallObjectPyEval_CallFunctionPyEval_CallMethodPyEval_CallObjectWithKeywords 已被弃用。请改用 PyObject_Call() 及其变体。

  • bpo-37151: PyCFunction_Call 现在是 PyObject_Call() 的弃用别名。

  • bpo-37540: vectorcall协议现在要求调用者仅将字符串作为关键字名称传递。

  • bpo-37207: vectorcall协议现在对 type 对象启用:将 tp_vectorcall 设置为一个vectorcall函数,用于在调用类本身时替代 tp_newtp_init

  • bpo-21120: 将Python-ast.h、ast.h和asdl.h排除在有限API之外。

  • bpo-37483: 新增函数 _PyObject_CallOneArg,用于调用带有一个位置参数的对象。

  • bpo-36763: 添加 PyConfig_SetWideStringList() 函数。

  • bpo-37337: 为方法调用添加快速函数:_PyObject_VectorcallMethod()_PyObject_CallMethodNoArgs()_PyObject_CallMethodOneArg()

  • bpo-28805: 已记录 METH_FASTCALL 调用约定。

  • bpo-37221: 新函数 PyCode_NewWithPosOnlyArgs() 允许像 PyCode_New() 一样创建代码对象,但带有一个额外的 posonlyargcount 参数,用于指示位置仅参数的数量。

  • bpo-37215: 修复由 bpo-36842 引入的dtrace问题。

  • bpo-37194: 向C API添加一个新的公共 PyObject_CallNoArgs() 函数:调用一个可调用的Python对象而不带任何参数。这是调用不带任何参数的回调函数的最有效方式。例如,在x86-64上,``PyObject_CallFunctionObjArgs(func, NULL)``每次调用在栈上分配960字节,而``PyObject_CallNoArgs(func)``每次调用仅分配624字节。

  • bpo-37170: 修复 PyLong_AsUnsignedLongLongMask() 中的错误转换。

  • bpo-35381: 将posixmodule.c中静态分配的类型 DirEntryTypeScandirIteratorType 转换为堆分配类型。

  • bpo-34331: 在实例化带有未覆盖抽象方法的抽象类时,在错误消息中使用单数/复数名词。

Python 3.8.0 beta 1

发布日期: 2019-06-04

安全性

  • bpo-35907: CVE 2019-9948: 通过禁止在 urllib.requestURLopener().open()``和 ``URLopener().retrieve() 中使用 local-file://local_file:// URL方案来避免文件读取。

  • bpo-33529: 防止在电子邮件头编码中使用的fold函数在头中有太多非ASCII字符时进入无限循环。

  • bpo-33164: 更新了blake2实现,使用平台提供的安全memset实现。

核心与内置函数

  • bpo-35814: 允许在带注释的赋值的右侧进行解包。特别是,现在允许``t: Tuple[int, ...] = x, y, *z``。

  • bpo-37126: 现在所有structseq对象都由垃圾收集器跟踪。由Pablo Galindo提交的补丁。

  • bpo-37122: 使代码对象的 co_argcount 属性表示位置参数的总数(包括仅限位置参数)。co_posonlyargcount 的值可用于区分哪些参数是仅限位置的,而差值(co_argcount - co_posonlyargcount)是位置或关键字参数的数量。由Pablo Galindo提交的补丁。

  • bpo-20092: intfloatcomplex 的构造函数现在将使用 __index__() 特殊方法,如果可用且相应的 __int__()__float__()__complex__() 方法不可用。

  • bpo-37087: 向OpenBSD添加原生线程ID(TID)支持。

  • bpo-26219: 实现了每操作码缓存机制,``LOAD_GLOBAL``指令使用它。``LOAD_GLOBAL``现在快了约40%。由Yury Selivanov和Inada Naoki贡献。

  • bpo-37072: 当flags为NULL时,修复PyAST_FromNodeObject()中的崩溃。

  • bpo-37029: 由于使用线性搜索来保持 obmalloc.c 的可用的arena列表按空闲内存池数量的顺序排序,释放大量小对象可能需要与arena数量的平方成正比的时间。现在无需搜索即可完成,使最坏情况下的时间与arena数量成线性关系。对于这一点非常明显的程序(通常同时有超过10万个小对象存活),这可以大大减少释放其内存所需的时间。

  • bpo-26423: 当 sizeof(long) < sizeof(Py_ssize_t) (例如,64位Windows) 时,修复``wrap_lenfunc()``中可能的溢出。

  • bpo-37050: 改进用于“调试”f字符串的AST,这些字符串使用'='来打印出正在评估的表达式的源代码。从FormattedValue节点中删除expr_text,转而使用一个Constant字符串节点(可能与f字符串内部的相邻常量表达式合并)。

  • bpo-22385: bytes.hexbytearray.hexmemoryview.hex 方法以及``binascii.hexlify``和 b2a_hex 函数现在能够在十六进制字节之间包含可选的分隔符。这一功能受到MicroPython的hexlify实现的启发。

  • bpo-26836: 添加 os.memfd_create()

  • bpo-37032: 向代码类型(types.CodeType)添加了新的 replace() 方法。

  • bpo-37007: 在Windows上实现 socket.if_nameindex()socket.if_nametoindex()socket.if_indextoname()

  • bpo-36829: PyErr_WriteUnraisable() 现在在没有当前回溯的情况下创建一个回溯对象。此外,调用 PyErr_NormalizeException()PyException_SetTraceback() 以规范化异常值。忽略任何错误。

  • bpo-36878: 仅当第一个字符是ASCII时才接受 # type: ignore 之后的文本。这是为了不允许像 # type: ignoreé 这样的东西。

  • bpo-36878: 将出现在 # type: ignore 注释之后的文本存储在AST中。例如,像``# type: ignore[E1000]``这样的类型忽略将在其AST节点中存储字符串 "[E1000]"

  • bpo-2180: 由Anthony Sottile处理的,将EOF处的行延续视为 SyntaxError

  • bpo-36907: 修复了在调用带有关键字字典(f(**kwargs))的C函数并在该函数运行时更改字典``kwargs``时崩溃的问题。

  • bpo-36946: 修复处理切片时可能出现的带符号整数溢出。

  • bpo-36826: 向ast_unparse.c添加NamedExpression种类支持。

  • bpo-1875: 如果将被优化掉的代码块(例如总是为假的if条件)包含语法错误,现在会引发 SyntaxError。由Pablo Galindo提供补丁。

  • bpo-36027: 允许通过三参数 pow 计算模逆:现在在第一个和第三个参数互质的情况下,允许第二个参数为负数。

  • bpo-36861: 更新Unicode数据库至版本12.1.0。

  • bpo-28866: 避免缓存类型定义了mro()的类的属性,以避免硬缓存无效问题。

  • bpo-36851: 如果执行以返回结束且堆栈不为空,现在会正确清理 FrameType 堆栈。

  • bpo-34616: compile() 内置函数现在支持 ast.PyCF_ALLOW_TOP_LEVEL_AWAIT 标志,该标志允许编译包含顶层 awaitasync withasync for 的源代码。这在已经异步的函数中评估异步代码时非常有用;例如在自定义REPL中。

  • bpo-36842: 实现PEP 578,添加sys.audit、io.open_code及相关API。

  • bpo-27639: 修正UserList切片操作的返回类型。由Michael Blahay、Erick Cervantes和vaultah提供补丁。

  • bpo-36737: 将PyRuntimeState.warnings移动到每个解释器状态(通过“模块状态”)。

  • bpo-36793: 从内置类型 boolintfloatcomplex 和标准库中的几个类中移除 __str__ 实现。它们现在从 object 继承 __str__()

  • bpo-36817: 为调试目的在f-字符串中添加 =``特性。这可以放在 ``!s!r!a 之前。它会生成表达式的文本,后跟等号,然后是表达式值的repr。因此,f'{3*9+15=}'``将等于字符串 ``'3*9+15=42'。如果指定了 =,则默认转换设置为 !r,除非给出了格式说明符,在这种情况下,格式化行为不变,将使用__format__。

  • bpo-24048: 在import.c的 remove_module() 期间保存实时异常。

  • bpo-27987: 在64位平台上,pymalloc返回的内存块对齐方式由8字节改为16字节,以符合x86-64 ABI。最近的编译器更频繁地假设这种对齐方式。由Inada Naoki提供补丁。

  • bpo-36601: 从Python内部的C信号处理器中移除了一个早已无意义的 ``getpid() == main_pid``检查。

  • bpo-36594: 修复了格式字符串中 %p 的错误使用。由Zackery Spytz提供补丁。

  • bpo-36045: builtins.help() 现在为异步函数前缀 async

  • bpo-36084: 向threading.Thread对象添加原生线程ID(TID)(支持的平台:Windows、FreeBSD、Linux、macOS)

  • bpo-36035: 添加了针对与pathlib组合使用的损坏符号链接的修复。

  • bpo-35983: 添加了新的trashcan宏来处理当子类的 tp_dealloc 调用基类的 tp_dealloc 且该基类使用trashcan机制时可能发生的双重释放问题。由Jeroen Demeyer提供补丁。

  • bpo-20602: 在关闭期间不清除 sys.flagssys.float_info。由Zackery Spytz提供补丁。

  • bpo-26826: 将 copy_file_range() 作为低级API暴露在 os 模块中。

  • bpo-32388: 移除tp_flags中的跨版本二进制兼容性要求。

  • bpo-31862: 将binascii移植到PEP 489多阶段初始化。由Marcel Plch提供补丁。

  • bpo-37128: 添加了 math.perm()

  • bpo-37120: 添加SSLContext.num_tickets以控制TLSv1.3会话票证的数量。

  • bpo-12202: 修复了 msilib.SummaryInformation.GetProperty() 中的错误处理。由 Zackery Spytz 提供补丁。

  • bpo-26835: fcntl 模块现在包含了用于 memfd 密封的文件密封常量。

  • bpo-29262: 向 typing 模块添加了 get_origin()get_args() 内省辅助函数。

  • bpo-12639: msilib.Directory.start_component() 现在在 keyfile 不为 None 时不再失败。

  • bpo-36999: 添加了 asyncio.Task.get_coro() 方法,以公开暴露任务的协程对象。

  • bpo-35246: 使 asyncio.create_subprocess_exec() 接受路径类参数。

  • bpo-35279: 将 ThreadPoolExecutor 的默认 max_workerscpu_count() * 5 改为 min(32, cpu_count() + 4)。之前的值在多核机器上不合理地大。

  • bpo-37076: _thread.start_new_thread() 现在使用 sys.unraisablehook() 而非 sys.excepthook() 记录函数抛出的未捕获异常,以便钩子能够访问抛出异常的函数。

  • bpo-33725: 在 macOS 上,multiprocessing 模块现在默认使用 spawn 启动方法。

  • bpo-37054: 修复了 _pyio.BytesIO_pyio.TextIOWrapper 的析构函数:尽可能早地在类体中初始化它们的 _buffer 属性,因为它被 __del__() 调用 close() 时使用。

  • bpo-37058: PEP 544:向 typing 模块添加了 Protocol@runtime_checkable

  • bpo-36933: 已在 3.8 版本中弃用并标记为移除的函数 sys.set_coroutine_wrappersys.get_coroutine_wrapper 已被移除。

  • bpo-37047: 在 unittest.mock.AsyncMock 设置中处理延迟绑定和属性访问以进行自动规范。记录在 unittest.mock.MagicMock 中新实现的异步方法。

  • bpo-37049: PEP 589:向 typing 模块添加了 TypedDict

  • bpo-37046: PEP 586:向 typing 模块添加了 Literal

  • bpo-37045: PEP 591: 向 typing 模块添加 Final 限定符和 @final 装饰器。

  • bpo-37035: 如果 asyncio 传输中发生致命错误,则不要记录基于 OSError 的异常。对端可以生成几乎任何 OSError,用户无法通过修复自己的代码来避免这些异常。错误仍然会传播到用户代码,只是记录它们没有意义,并且会污染 asyncio 日志。

  • bpo-37001: symtable.symtable() 现在接受与内置 compile() 函数相同的源代码输入类型。由 Dino Viehland 提供补丁。

  • bpo-37028: 实现 asyncio REPL

  • bpo-37027: 从 transport.get_extra_info('socket') 返回安全使用的代理套接字对象

  • bpo-32528: 使 asyncio.CancelledError 成为 BaseException。

    这将解决许多 asyncio 用户常犯的一个错误:一个“except Exception”子句破坏了任务的取消。

    除了这一变更,我们还将停止让 asyncio.TimeoutError 和 asyncio.InvalidStateError 继承自它们的 concurrent.futures.* 对应项。这些异常共享继承链没有意义。

  • bpo-1230540: 添加一个新的 threading.excepthook() 函数,用于处理未捕获的 threading.Thread.run() 异常。可以重写此函数以控制如何处理未捕获的 threading.Thread.run() 异常。

  • bpo-36996: 处理 unittest.mock.patch() 用作异步函数装饰器的情况。

  • bpo-37008: 添加支持对由 unittest.mock.mock_open() 产生的 mock 调用 next()

  • bpo-27737: 在 email.header 中允许仅包含空白的头编码 - 由 Batuhan Taskaya 提供

  • bpo-36969: PDB 命令 args 现在显示仅位置参数。由 Rémi Lapeyre 提供补丁。

  • bpo-36969: PDB 命令 args 现在显示仅关键字参数。由 Rémi Lapeyre 提供补丁。

  • bpo-36983: 向 typing.__all__ 添加缺失的名称:ChainMapForwardRefOrderedDict - 由 Anthony Sottile 提供。

  • bpo-36972: 向 typing 模块添加 SupportsIndex 协议,以允许类型检查检测可以传递给 hex()oct()bin() 的类。

  • bpo-32972: 实现 unittest.IsolatedAsyncioTestCase 以帮助测试基于 asyncio 的代码。

  • bpo-36952: fileinput.input()fileinput.FileInputbufsize 参数已被移除(自 Python 3.6 起已弃用并被忽略),因此 modeopenhook 参数已被设为仅关键字参数。

  • bpo-36952: 从 Python 3.3 开始,从 collections 导入 ABCs 已被弃用,应从 collections.abc 导入。仍然能够从 collections 导入的功能原计划在 3.8 中移除,但已推迟到 3.9;文档和 DeprecationWarning 已明确说明。

  • bpo-36949: 为 WeakSet 对象实现 __repr__。

  • bpo-36948: 修复 urllib.request.URLopener.retrieve() 中的 NameError。补丁由 Karthikeyan Singaravelan 提供。

  • bpo-33524: 当 max_line_length 为 0 或 None 且标题包含非 ASCII 字符时,修复电子邮件标题的折叠。由 Licht Takeuchi (@Licht-T) 贡献。

  • bpo-24564: shutil.copystat() 现在忽略 os.setxattr() 上的 errno.EINVAL,这可能在复制不支持扩展属性的文件系统上的文件时发生。

    原始由 Giampaolo Rodola 提供补丁,由 Ying Wang 更新。

  • bpo-36888: Python 子进程现在可以使用 multiprocessing.process.parent_process 访问其父进程的状态。

  • bpo-36921: 弃用 @coroutine 以支持 async def

  • bpo-25652: 修复 UserString__rmod__ 中的错误 - 由 Batuhan Taskaya 提供。

  • bpo-36916: 当 writer.write() 在没有 await 的情况下使用且 writer.drain() 因异常失败时,移除关于任务中未处理异常的消息。

  • bpo-36889: 引入 asyncio.Stream 类,合并了 asyncio.StreamReaderasyncio.StreamWriter 的功能。asyncio.Stream 可以在只读、只写和读写模式下工作。提供 asyncio.connect()asyncio.connect_unix()asyncio.connect_read_pipe()asyncio.connect_write_pipe() 工厂函数来打开 asyncio.Stream 连接。提供 asyncio.StreamServerUnixStreamServer 来使用 asyncio.Stream API 服务服务器。修改 asyncio.create_subprocess_shell()asyncio.create_subprocess_exec() 以使用 asyncio.Stream 替代已弃用的 StreamReaderStreamWriter。弃用 asyncio.StreamReaderasyncio.StreamWriter。弃用在 asyncio 包之外使用私有类,例如 asyncio.FlowControlMixingasyncio.StreamReaderProtocol

  • bpo-36845: 在 ipaddress 模块中增加了对 IP 网络和接口构造时的整数前缀的验证。

  • bpo-23378: 向 argparser 添加了一个扩展动作。

  • bpo-36867: 修复了一个错误,该错误使得 SharedMemoryManager 实例及其父进程使用两个独立的 resource_tracker 进程。

  • bpo-23896: 向 lib2to3.pygram 添加了一个语法,其中包含作为函数而非语句的 exec。

  • bpo-36895: 函数 time.clock() 在 3.3 版本中被弃用,推荐使用 time.perf_counter(),并在 3.8 版本中标记为移除,现已被移除。

  • bpo-35545: 修复 asyncio 在内部确保主机名解析时丢弃 IPv6 范围的问题。

  • bpo-36887: 添加新函数 math.isqrt() 来计算整数平方根。

  • bpo-34632: 引入 importlib.metadata 模块,提供(临时)支持从第三方包读取元数据。

  • bpo-36878: 当在 ast.parse 中使用 type_comments=True 时,将 # type: ignore 后跟非字母数字字符和任意文本的情况视为类型忽略,而不是仅允许空白或其他注释。这是为了允许像 # type: ignore[E1000] 这样的形式。

  • bpo-36778: cp65001 编码(Windows 代码页 65001)成为 utf_8 编码的别名。

  • bpo-36867: multiprocessing.resource_tracker 替换了 multiprocessing.semaphore_tracker 模块。除了信号量,resource_tracker 还跟踪 shared_memory 段。

  • bpo-30262: sqlite3 模块的 CacheStatement 对象不向用户公开。由 Aviv Palivoda 提供补丁。

  • bpo-24538: 在 shutil.copystat() 中,首先复制扩展文件属性,然后复制文件权限,因为扩展属性只能在目标仍然可写时设置。

  • bpo-36829: 新增 sys.unraisablehook() 函数,可被重写以控制如何处理“无法处理的异常”。当异常发生但 Python 无法处理时调用该函数。例如,当析构函数引发异常或垃圾回收期间(gc.collect())。

  • bpo-36832: 引入 zipfile.Path,一个兼容 pathlib 的包装器,用于遍历 zip 文件。

  • bpo-36814: 修复 os.posix_spawnp() 在 file_actions 为 None 时错误地引发 TypeError 的问题。

  • bpo-33110: 当 Future 已经完成时,正确处理由 concurrent.futures 的 add_done_callback 添加的函数引发的异常。

  • bpo-26903: 将 ProcessPoolExecutor 中的 max_workers 限制为 61,以绕过 WaitForMultipleObjects 的限制。

  • bpo-36813: 修复 QueueListener 在停止时调用 queue.task_done() 的问题。由 Bar Harel 提供补丁。

  • bpo-36806: 禁止在asyncio包之外创建像StreamReader、StreamWriter、Process这样的异步流对象及其协议。

  • bpo-36802: 为StreamWriter.write()和StreamWriter.close()提供同步和异步调用。

  • bpo-36801: 在asyncio StreamWriter.drain()调用中正确处理SSL连接的关闭。

  • bpo-36785: 实现PEP 574(带有带外缓冲区的pickle协议5)。

  • bpo-36772: functools.lru_cache()现在可以直接用作装饰器,除了它现有的作为返回装饰器的函数的用法。

  • bpo-6584: 在 gzip 模块中添加一个 BadGzipFile 异常。

  • bpo-36748: 在 TextIOWrapper 的C实现中优化了写缓冲。使用ascii、latin1或utf-8编码向``TextIOWrapper``写入ASCII字符串的速度提高了约20%。由Inada Naoki提供补丁。

  • bpo-8138: 不要将 wsgiref.simple_server.SimpleServer 标记为多线程,因为``wsgiref.simple_server.WSGIServer``是单线程的。

  • bpo-22640: py_compile.compile() 现在支持静默模式。由Joannah Nanjekye提供补丁。

  • bpo-29183: 通过仅在未引发异常时调用 close() 方法,修复了 wsgiref.handlers.BaseHandler 中的双重异常。

  • bpo-36548: 改进了正则表达式标志的repr。

  • bpo-36542: 现在可以通过指定 __text_signature__ 属性来覆盖Python函数的签名。

  • bpo-36533: 在fork的子进程中重新初始化logging.Handler锁,而不是尝试在父进程中获取所有锁,仅在子进程中释放。获取/释放模式导致在实现了任何形式的相互依赖的链式日志处理程序的代码中出现死锁,因为无法保证锁的获取顺序。

  • bpo-35252: 当使用singledispatch时,如果类型注释无效,抛出TypeError而不是AssertionError。

  • bpo-35900: 允许缩减方法返回一个6项元组,其中第6项指定一个自定义的状态设置方法,该方法将被调用以替代常规的 __setstate__ 方法。

  • bpo-35900: 在_pickle.c中为函数和类启用自定义缩减回调注册,使用新的Pickler属性``reducer_override``

  • bpo-36368: 修复在交互式会话中发送ctrl-c(KeyboardInterrupt)后导致SharedMemoryManager实例崩溃的错误

  • bpo-31904: 修复VxWorks的mmap失败问题

  • bpo-27497: csv.DictWriter.writeheader() 现在返回底层 csv.Writer.writerow() 方法的返回值。补丁由Ashish Nitin Patil贡献。

  • bpo-36239: 解析.mo文件时现在忽略以#-#-#-#-#开头和结尾的注释。

  • bpo-26707: 使plistlib能够读写作为KeyedArchive文件创建的二进制plist文件。具体来说,这允许plistlib处理0x80令牌作为UID对象。

  • bpo-31904: 为VxWorks添加posix模块支持。

  • bpo-35125: Asyncio: 在shield中移除外部取消时的内部回调

  • bpo-35721: 修复 asyncio.SelectorEventLoop.subprocess_exec()Popen 失败且以``stdin=subprocess.PIPE``调用时泄露文件描述符的问题。由Niklas Fiekas提供补丁。

  • bpo-31855: unittest.mock.mock_open() 结果现在尊重read([size])的参数。补丁由Rémi Lapeyre贡献。

  • bpo-35431: 实现 math.comb() 函数,返回二项式系数,计算从n个项目中无重复且无序地选择k个项目的方式数。由Yash Aggarwal和Keller Fuchs提供补丁。

  • bpo-26660: 修复 TemporaryDirectory 清理中的权限错误。之前当在临时目录中创建了不可写或不可搜索的文件或目录时,``TemporaryDirectory.cleanup()``会失败。

  • bpo-34271: 向ssl模块添加调试辅助功能。现在可以转储密钥材料并跟踪TLS协议。默认和stdlib上下文也支持SSLKEYLOGFILE环境变量。

  • bpo-26467: 添加了AsyncMock以支持使用unittest来模拟asyncio协程。由Lisa Roach提供补丁。

  • bpo-33569: dataclasses.InitVar: 暴露用于创建init变量的类型。

  • bpo-34424: 修复了当policy.linesep设置为多字符字符串时,包含编码字符串的消息的序列化问题。由Jens Troeger提供补丁。

  • bpo-34303: functools.reduce() 的性能略有提升。由Sergey Fedoseev提供补丁。

  • bpo-33361: 修复了 codecs.StreamRecoder 中的一个错误,其中搜索可能会在缓冲区中留下旧数据并破坏后续的读取调用。由Ammar Askar提供补丁。

  • bpo-22454: shlex 模块现在暴露了 shlex.join(),这是 shlex.split() 的反向操作。由Bo Bayles提供补丁。

  • bpo-31922: asyncio.AbstractEventLoop.create_datagram_endpoint(): 当允许广播时,不连接UDP套接字。这允许在UDP广播后接收回复。

  • bpo-24882: 更改ThreadPoolExecutor以在创建新线程之前使用现有的空闲线程。

  • bpo-31961: 在Windows上的 subprocess.Popen() 中添加了对bytes和path-like对象的支持。如果 shellFalseargs 参数现在接受一个 path-like object 和一个包含bytes和path-like对象的序列。executable 参数现在接受bytes和 path-like objectcwd 参数现在接受bytes对象。基于Anders Lorentsen的补丁。

  • bpo-33123: pathlib.Path.unlink 现在接受一个 missing_ok 参数以避免引发 FileNotFoundError。由Robert Buchholz提供补丁。

  • bpo-32941: 允许 mmap.mmap 对象访问madvise()系统调用(通过 mmap.mmap.madvise())。

  • bpo-22102: 添加了对磁盘设置为0的ZIP文件的支持。这类文件通常由Windows上的内置工具在使用ZIP64扩展时创建。由Francisco Facioni提供补丁。

  • bpo-32515: trace.py现在可以通过python3 -m trace -t --module module_name来运行模块。

  • bpo-32299: 修改了 unittest.mock.patch.dict(),使其作为上下文管理器使用时返回被修补的字典。由Vadim Tsander提供补丁。

  • bpo-27141: 为 collections.UserList``和 ``collections.UserDict 添加了 __copy__() 方法,以正确实现对象的浅拷贝。由Bar Harel提供补丁。

  • bpo-31829: 现在在协议0的Unicode字符串pickle中,\r\0``和 ``\x1a (Windows上的文件结束符) 会被转义。这使得可以从Python 2中以文本模式打开的文件中无损失地加载它们。

  • bpo-23395: _thread.interrupt_main() 现在在 SIGINT 信号被忽略或未被Python处理时避免设置Python错误状态。

文档

  • bpo-36896: 澄清了一些类型在Python版本间构造函数签名不稳定。

  • bpo-36686: 改进了 asyncio.subprocess_exec 函数stdin、stdout和stderr参数的文档,指定了哪些值受支持。同时提到不支持作为文本解码。

    添加了一些测试来验证传递给std*参数的各种值是否实际工作。

  • bpo-36984: 改进了 typing 模块中添加版本引用的说明 - 由Anthony Sottile提供。

  • bpo-36868: 新变化现在提到SSLContext.hostname_checks_common_name而不是SSLContext.host_flags。

  • bpo-35924: 在 curses.addstr() 文档中添加了一条说明,警告由于ncurses的bug,多行字符串可能导致段错误。

  • bpo-36783: 根据PEP 495,为Time_FromTimeAndFold和PyDateTime_FromDateAndTimeAndFold添加了C API文档。由Edison Abahurire提供补丁。

  • bpo-36797: 更多遗留的distutils文档已被删除,或者更明确地标记为仅在setuptools文档独立覆盖之前保留。

  • bpo-22865: 增加了关于 pty.spawn 函数的文档细节。

  • bpo-35397: 移除弃用并记录urllib.parse.unwrap()。由Rémi Lapeyre提供补丁。

  • bpo-32995: 在词汇表中添加了上下文变量。

  • bpo-33519: 澄清 copy() 不是 MutableSequence ABC的一部分。

  • bpo-33482: 使 codecs.StreamRecoder.writelines 接受字节列表。

  • bpo-25735: 为func factorial添加了文档,以表明返回整数值。

  • bpo-20285: 扩展object.__doc__(文档字符串)以使其更清晰。修改pydoc.py,以便help(object)列出对象方法(对于其他类,help省略了object基类的方法)。

测试

  • bpo-37069: 修改test_coroutines、test_cprofile、test_generators、test_raise、test_ssl和test_yield_from,使用 test.support.catch_unraisable_exception() 而非 test.support.captured_stderr()

  • bpo-37098: 修复旧版Linux内核上的test_memfd_create。

  • bpo-37081: 使用OpenSSL 1.1.1c进行测试。

  • bpo-36829: 添加 test.support.catch_unraisable_exception(): 使用 sys.unraisablehook() 捕获不可报告异常的上下文管理器。

  • bpo-36915: 主regrtest进程现在即使工作进程崩溃或在KeyboardInterrupt(CTRL+c)时被杀死,也会始终移除所有工作进程的临时目录。

  • bpo-36719: "python3 -m test -jN ..."现在在工作者进程崩溃(CHILD_ERROR状态)时继续执行下一个测试。以前,测试套件会立即停止。使用--failfast在第一个错误处停止。

  • bpo-36816: 更新Lib/test/selfsigned_pythontestdotnet.pem以匹配self-signed.pythontest.net的新TLS证书。

  • bpo-35925: 当现代操作系统或发行版默认的OpenSSL策略拒绝连接到证书较弱的服务器时,跳过httplib和nntplib的网络测试。

  • bpo-36782: 为 datetime 模块中的几个C API函数添加测试。补丁由Edison Abahurire提供。

  • bpo-36342: 如果平台缺少可正常工作的sem_open,则在test_venv中修复test_multiprocessing。

构建

  • bpo-36721: 要将Python嵌入到应用程序中,必须向 python3-config --libs --embed 传递一个新的 --embed 选项以获取 -lpython3.8 (将应用程序链接到libpython) 。为了同时支持3.8及更早版本,首先尝试 python3-config --libs --embed,如果前一个命令失败,则回退到``python3-config --libs`` (不带 --embed) 。

    增加一个 pkg-config python-3.8-embed 模块用来将 Python 嵌入到一个应用中: pkg-config python-3.8-embed --libs 包含 -lpython3.8。 要同时支持 3.8 和旧版本,请先尝试 pkg-config python-X.Y-embed --libs 并在此命令失败时回退到 pkg-config python-X.Y --libs (即不带 --embed) (请将 X.Y 替换为 Python 版本号)。

    另一方面,pkg-config python3.8 --libs``不再包含 ``-lpython3.8。C扩展不应该链接到libpython(除了在Android上,这种情况由脚本处理);这一变化是有意为之的向后不兼容。

  • bpo-36786: "make install"现在并行运行compileall。

Windows

  • bpo-36965: 包含STATUS_CONTROL_C_EXIT而不依赖于MSC编译器

  • bpo-35926: 为Windows更新到OpenSSL 1.1.1b。

  • bpo-29883: 为Proactor Event Loop添加对UDP传输的Windows支持。由Adam Meily提供补丁。

  • bpo-33407: 对MSVC实现了 Py_DEPRECATED() 宏。

macOS

  • bpo-36231: 支持在macOS上在没有安装/usr/include的情况下构建Python。从macOS 10.14开始,系统头文件仅通过Command Line Tools或Xcode应用程序提供的SDK可用。

IDLE

  • bpo-35610: 用.prompt_last_line替换现在冗余的.context_use_ps1。这完成了在 bpo-31858 中开始的更改。

  • bpo-37038: 使idlelib.run可运行;添加测试条款。

  • bpo-36958: 打印传递给SystemExit或sys.exit()的除None或int之外的任何参数。

  • bpo-36807: 保存文件时,调用os.fsync()以便将比特刷新到例如USB驱动器。

  • bpo-32411: 在browser.py中,移除按行号的多余排序,因为字典已经是按行号顺序创建的。

工具/示例

  • bpo-37053: 在Tools/parser/unparse.py中正确处理像u"bar"这样的字符串。由Chih-Hsuan Yen提供补丁。

C API

  • bpo-36763: 实现 PEP 587 "Python初始化配置"。

  • bpo-36379: 修复当在C中实现 __ipow__ 时尝试使用 modulo 参数导致的崩溃。

  • bpo-37107: 更新 PyObject_CallMethodObjArgs() 和``_PyObject_CallMethodIdObjArgs``以使用 _PyObject_GetMethod,避免在许多情况下创建绑定方法对象。由Michael J. Sullivan提供补丁。

  • bpo-36974: 实现 PEP 590: Vectorcall: CPython的快速调用协议。这是一个新的协议,用于优化自定义可调用对象的调用。

  • bpo-36763: Py_Main() 现在在调用 PyErr_Print() 时如果当前异常类型是 SystemExit``则返回退出码而不是调用 ``Py_Exit(exitcode)

  • bpo-36922: 为行为类似于未绑定方法的对象添加新的类型标志``Py_TPFLAGS_METHOD_DESCRIPTOR``。这些对象支持由 LOAD_METHOD/CALL_METHOD 操作码给出的优化。参见PEP 590。

  • bpo-36728: PyEval_ReInitThreads() 函数已从C API中移除。不应显式调用它:应改用 PyOS_AfterFork_Child()

Python 3.8.0 alpha 4

发布日期: 2019-05-06

安全性

  • bpo-36742: 修复urlsplit()中预规范化字符的处理错误。

  • bpo-30458: 通过不允许带有嵌入空格或控制字符的URL路径进入底层http客户端请求来解决 CVE 2019-9740。此类潜在的恶意头部注入URL现在会导致抛出http.client.InvalidURL异常。

  • bpo-35755: shutil.which() 现在如果可用且 PATH 环境变量未设置时,会使用 os.confstr("CS_PATH")。同时从 posixpath.defpath 中移除当前目录。在 Unix 上,如果 PATH 环境变量未设置,shutil.which()subprocess 模块不再在当前目录中搜索可执行文件。

核心与内置函数

  • bpo-36722: 在调试构建中,导入现在也会查找以发布模式编译的 C 扩展和以稳定 ABI 编译的 C 扩展。

  • bpo-32849: 修复 FreeBSD 上的 Python 初始化代码,以正确检测 stdin 文件描述符(fd 0)何时无效。

  • bpo-36623: 移除解析器头部和移除 pgen 后缺乏实现的函数声明。

  • bpo-20180: 由于 Argument Clinic 的贡献,dict.pop() 现在快了 33%。由 Inada Naoki 提供补丁。

  • bpo-36611: 调试内存分配器:默认从 Python 内存分配器的调试钩子中禁用 serialno 字段,以减少内存占用 5%。当记录致命内存错误时,启用 tracemalloc 以获取内存块分配的跟踪信息,以决定在哪里放置断点。编译 Python 时定义 PYMEM_DEBUG_SERIALNO 以恢复该字段。

  • bpo-36588: 在 AIX 上,sys.platform 不再包含主版本号。总是返回 'aix',而不是 'aix3' .. 'aix7'。由于旧的 Python 版本包含版本号,建议总是使用 sys.platform.startswith('aix')。由 M. Felt 贡献。

  • bpo-36549: 将 str.capitalize 改为对第一个字符使用标题大小写而不是大写。

  • bpo-36540: 实现 PEP 570 (Python 位置参数) 。由 Pablo Galindo 提供补丁。

  • bpo-36475: PyEval_AcquireLock()PyEval_AcquireThread() 现在如果解释器正在终止时被调用,将终止当前线程,使其与 PyEval_RestoreThread()Py_END_ALLOW_THREADS()PyGILState_Ensure() 保持一致。

  • bpo-36504: 修复了 _ctypes.c 中 PyCArrayType_new() 的有符号整数溢出问题。

  • bpo-20844: 修复了在 Windows 上运行带有编码 cookie 和 LF 行结尾的脚本可能失败的问题。

  • bpo-24214: 修复了 UTF-8 增量解码器中 surrogatpass 错误处理程序的支持。

  • bpo-36452: 在迭代字典自身、keys()values()items() 时更改 dict 键,现在在某些键被删除/添加的情况下会被检测到,因此键的数量没有改变。在 len(dict) 次迭代后将引发 RuntimeError。由 Thomas Perl 贡献。

  • bpo-36459: 修复了 tokenizer.c 的 tok_nextc() 可能导致的双重 PyMem_FREE() 问题。

  • bpo-36433: 修复了 classmethoddescr_call 中的 TypeError 消息。

  • bpo-36430: 修复了 itertools.count() 中可能存在的引用泄漏问题。

  • bpo-36440: 在 ParserError 消息中包含节点名称,而不是数字 ID。由 A. Skrobov 提供补丁。

  • bpo-36143: 使用 pgen 从 Grammar 和 Tokens 文件重新生成 keyword。由 Pablo Galindo 提供补丁。

  • bpo-18372: 在 pickle 模块中添加缺失的 PyObject_GC_Track() 调用。由 Zackery Spytz 提供补丁。

  • bpo-35952: 修复了当编译器缺失时的 pythoninfo。

  • bpo-28238: xml.etree.ElementTree 的 .find*() 方法现在可以搜索像 {*}tag{ns}* 这样的通配符,它们可以匹配任何命名空间中的标签或命名空间中的所有标签。由 Stefan Behnel 提供补丁。

  • bpo-26978: pathlib.path.link_to() 现在已实现。它创建一个指向路径的硬链接。

  • bpo-1613500: 当向构造函数传递 inplace=True 时,fileinput.FileInput 现在使用输入文件模式来正确设置输出文件模式(之前是硬编码为 'w')。

  • bpo-36734: 修复在 HP-UX 上编译 faulthandler.c 的问题。使用 memset()stack_t current_stack 初始化为零。

  • bpo-13611: xml.etree.ElementTree 包增加了对 C14N 2.0 序列化的支持。由 Stefan Behnel 提供补丁。

  • bpo-36669: 向 weakref.proxy 添加缺失的矩阵乘法运算符支持。

  • bpo-36676: 如果解析器目标定义了回调方法 "start_ns()" 和/或 "end_ns()",xml.etree.ElementTree 中的 XMLParser() 会向解析器目标提供命名空间前缀上下文。由 Stefan Behnel 提供补丁。

  • bpo-36673: xml.etree.ElementTree 中的 TreeBuilder 和 XMLPullParser 增加了对解析注释和处理指令的支持。由 Stefan Behnel 提供补丁。

  • bpo-36650: functools.lru_cache() 的 C 版本将带有空 **kwargs 字典的调用视为与完全没有关键字的调用不同。这不会导致错误的答案,但确实会触发意外的缓存未命中。

  • bpo-28552: 如果 sys.executableNone 或空字符串,修复 distutils.sysconfig:使用 os.getcwd() 来初始化 project_base。同时修复 distutils build 命令:如果 sys.executableNone 或空字符串,则不使用它。

  • bpo-35755: 如果 PATH 环境变量未设置,shutil.which()distutils.spawn.find_executable 现在使用 os.confstr("CS_PATH") (如果可用) 代替 os.defpath。此外,如果 PATH 环境变量设置为空字符串,则不使用 os.confstr("CS_PATH")os.defpath

  • bpo-25430: 提高 IPNetwork.__contains__() 的性能。

  • bpo-30485: xml.etree.ElementTree中的路径表达式现在可以通过传递一个空字符串前缀的默认命名空间,避免为标签使用显式的命名空间前缀(或“{命名空间}标签”符号)。

  • bpo-36613: 修复 asyncio wait()在异常情况下不删除回调的问题。

  • bpo-36598: 修复当代码在追踪下执行时,Mock对象与spec的 isinstance 检查。由Karthikeyan Singaravelan提供补丁。

  • bpo-18748: 在开发模式(-X dev)和调试版本中,io.IOBase 析构函数现在会记录 close() 异常。在发布模式下,这些异常默认是静默的。

  • bpo-36575: _lsprof 模块现在默认使用与 time.perf_counter() 相同的内部计时器。Unix上以前使用 gettimeofday(2)。新计时器在大多数Unix平台上具有更好的分辨率,并且由于``perf_counter()``是单调的,计时不再受系统时钟更新的影响。由Inada Naoki提供补丁。

  • bpo-33461: 当指定 encoding 选项时,json.loads 现在会发出 DeprecationWarning。由Matthias Bussonnier提供补丁。

  • bpo-36559: 为了优化导入时间,random模块现在在seed(version=2)时更倾向于使用精简的内部_sha512模块,而不是hashlib。

  • bpo-17561: 将backlog=None设置为socket.create_server的默认值。

  • bpo-34373: 修复 time.mktime() 在AIX上对1970年之前年份的错误处理。

  • bpo-36232: 当尝试打开实际上不存在的现有DBM数据库时,改进错误消息。由Marco Rougeth提供补丁。

  • bpo-36546: 添加statistics.quantiles()

  • bpo-36050: 优化 http.client.HTTPResponse.read() 以处理大响应。补丁由Inada Naoki提供。

  • bpo-36522: 如果在 http.clientdebuglevel 设置为>0,打印同一头部名称下多个值的所有值。由Matt Houglum提供补丁。

  • bpo-36492: 弃用在应接受任意关键字参数并将其传递给其他函数的函数中,将必需参数(如 func)作为关键字参数传递的做法。现在,如果必需参数作为位置参数传递,则可以向这些函数传递任意关键字参数(即使名称是"self"和"func")。

  • bpo-27181: 添加 statistics.geometric_mean()。

  • bpo-30427: os.path.normcase() 依赖 os.fspath() 来检查其参数的类型。其 posixpath.normcase()ntpath.normcase() 实现中的冗余检查已被移除。由 Wolfgang Maier 提供补丁。

  • bpo-36385: 停止因IPv4八位组可能为八进制而拒绝它们。前导零被忽略,不再假定为指定八进制八位组。八位组始终是十进制数字。八位组仍必须不超过三位数字,包括前导零。

  • bpo-36434: 写入ZIP文件时的错误不再阻止其正确关闭。

  • bpo-36407: 修复了xml.dom.minidom中CDATA部分写入时的错误缩进。由Vladimir Surjaninov提供补丁。

  • bpo-36326: inspect.getdoc()现在可以在__slots__是字典时为成员对象找到文档字符串。

  • bpo-36366: 在未启动或已停止的 unittest.mock.patch() 对象上调用 stop() 现在会返回 None 而不是引发 RuntimeError,使该方法幂等。补丁由Karthikeyan Singaravelan提供。

  • bpo-36348: imap.IMAP4.logout() 方法不再静默忽略任意异常。

  • bpo-31904: 为VxWorks添加时间模块支持并修复test_time失败。

  • bpo-36227: 在函数 ElementTree.tostring()ElementTree.tostringlist() 中添加了对关键字参数 default_namespacexml_declaration 的支持。

  • bpo-36004: 新增了替代构造函数 datetime.date.fromisocalendar()datetime.datetime.fromisocalendar(),这些函数可以从ISO年、周数和工作日构建日期对象;这些是每个类的 isocalendar 方法的逆操作。由Paul Ganssle提供补丁。

  • bpo-35936: modulefinder 不再依赖于已弃用的 imp 模块,并且 modulefinder.ModuleFinder 的初始化器现在具有不可变的默认参数。由Brandt Bucher提供补丁。

  • bpo-35376: modulefinder 正确处理了与错误包同名的模块。由Brandt Bucher提供补丁。

  • bpo-17396: modulefinder 在遇到跟随导入中的语法错误时不再崩溃。由Brandt Bucher提供补丁。

  • bpo-35934: 新增了 create_server()has_dualstack_ipv6() 便利函数,用于自动化创建服务器套接字时通常涉及的必要任务,包括在同一套接字上接受IPv4和IPv6连接。(由Giampaolo Rodola在 bpo-17561 中贡献。)

  • bpo-23078: 向 unittest.mock.create_autospec() 添加了对 classmethod()staticmethod() 的支持。初始由Felipe Ochoa提供补丁。

  • bpo-35416: 修复了distutils中潜在的资源警告。由Mickaël Schoentgen提供补丁。

  • bpo-25451: 向 tkinter.PhotoImage 添加了透明度方法。由Zackery Spytz提供补丁。

  • bpo-35082: 在调用 unittest.mock.Mock 上的dir时不再返回已删除的属性。

  • bpo-34547: wsgiref.handlers.BaseHandler 现在能够优雅地处理客户端连接的突然终止。由Petter Strandmark提供补丁。

  • bpo-31658: xml.sax.parse() 现在支持 路径类对象。由Mickaël Schoentgen提供补丁。

  • bpo-34139: 在绑定前移除旧的unix数据报套接字。

  • bpo-33530: 在 asyncio.create_connection() 中实现了Happy Eyeballs。新增了两个参数 happy_eyeballs_delay 和*interleave*,用于指定Happy Eyeballs的行为。

  • bpo-33291: 当在由任意可调用对象创建的方法上调用inspect函数isgeneratorfunction、iscoroutinefunction、isasyncgenfunction时,不再抛出AttributeError。而是返回False。

  • bpo-31310: 修复multiprocessing.semaphore_tracker,使其被子进程重用。

  • bpo-31292: 修复 setup.py check --restructuredtext 对于包含 include 指令的文件的支持。

文档

  • bpo-36625: 从fractions.Fraction的文档字符串中移除过时的注释。

  • bpo-30840: 文档化相对导入。

  • bpo-36523: 为io.IOBase.writelines()添加文档字符串。

  • bpo-36425: 新增文档翻译:简体中文

  • bpo-36345: 避免在 wsgiref 文档中使用 literalinclude 指令时从``Tools/scripts/serve.py`` 复制代码。由Stéphane Wirtel贡献。

  • bpo-36345: 在 wsgiref 文档中使用 Tools/scripts/serve.py 脚本的代码作为示例。由Stéphane Wirtel贡献。

  • bpo-36157: 为PyInterpreterState_Main()添加文档。

  • bpo-33043: 更新docs.python.org页面,在页面末尾(在'Reporting Bugs'和'About Documentation'之间)添加了一个'Contributing to Docs'链接。在'Found a Bug'页面的文档错误部分添加了额外的链接和信息。

  • bpo-35581: @typing.type_check_only现在允许类型存根标记在运行时不可用的函数和类。

  • bpo-33832: 在术语表中添加了'magic method'条目。

  • bpo-32913: 在正则表达式HOWTO中添加了re.Match.groupdict示例。

测试

  • bpo-36719: regrtest 现在总是检测不可回收的对象。之前,这个检查只在 --findleaks 启用时才进行。现在这个检查也能与 -jN/--multiprocess N 一起工作。--findleaks 成为 --fail-env-changed 的一个弃用别名。

  • bpo-36725: 当使用多进程模式 (-jN) 时,regrtest 现在能更好地报告工作进程失败的错误,并且在工作者线程失败或被中断时立即退出。

  • bpo-36454: 将 test_time.test_monotonic() 改为仅测试睡眠命令后经过时间的下限而非上限。这避免了在慢速构建机器人上不必要的测试失败。由 Victor Stinner 提供补丁。

  • bpo-32424: 提高 xml.etree.ElementTree 的测试覆盖率。由 Gordon P. Hemsley 提供补丁。

  • bpo-32424: 修复 xml.etree.ElementTree 中 test_cyclic_gc() 测试的拼写错误。由 Gordon P. Hemsley 提供补丁。

  • bpo-36635: 添加一个新的 _testinternalcapi 模块来测试内部 C API。

  • bpo-36629: 修复 test_imaplibtest_imap4_host_default_value():同时捕获 errno.ENETUNREACH 错误。

  • bpo-36611: 当 tracemalloc 启用时,修复 test_sys.test_getallocatedblocks()

  • bpo-36560: 修复 regrtest 中的引用泄漏检测:在热身期间也计算(引用计数、分配的内存块、文件描述符计数的)增量,以确保在开始检测引用泄漏前一切均已初始化。

  • bpo-36565: 当 Python 没有内置的 abc 模块时,修复引用检测(python3 -m test -R 3:3)。

  • bpo-31904: 将 test_resource 移植到 VxWorks:跳过设置 RLIMIT_FSIZE 和 RLIMIT_CPU 的测试用例。

  • bpo-31904: 修复 VxWorks 上的 test_tabnanny:调整 ENOENT 错误消息。

  • bpo-36436: 修复 _testcapi.pymem_buffer_overflow():处理内存分配失败。

  • bpo-31904: 修复 VxWorks 上的 test_utf8_mode:Python 在 VxWorks 上总是使用 UTF-8。

  • bpo-36341: 修复可能在调用 AF_UNIX 套接字的 bind() 时因 PermissionError 而失败的测试。

构建

  • bpo-36747: 移除陈旧的scriptsinstall Makefile目标。

  • bpo-21536: 在Unix上,除了Android和Cygwin,C扩展不再链接到libpython。

    通过共享库的 Python 构建的 C 扩展现在可以被静态链接的 Python 加载了。

    当Python被嵌入时,libpython 必须不被 RTLD_LOCAL 加载,而应使用 RTLD_GLOBAL。之前,使用 RTLD_LOCAL 时,已经无法加载未链接到 libpython 的C扩展,例如由 Modules/Setup*shared* 部分构建的标准库的C扩展。

    distutils,python-config 和 python-config.py 已被修改。

  • bpo-36707: ./configure --with-pymalloc 不再向SOABI(sys.implementation.cache_tag)添加 m 标志。启用或禁用pymalloc对ABI没有影响。

  • bpo-36635: 当定义 Py_BUILD_CORE_MODULE 时,更改 pyport.hPyAPI_FUNC(type)PyAPI_DATA(type)PyMODINIT_FUNC 宏。现在必须使用 Py_BUILD_CORE_MODULE 定义来构建作为动态库访问Python内部的C扩展:在Windows上的DLL导出中导出 PyInit_xxx() 函数。

  • bpo-31904: 不在VxWorks上构建 _crypt 扩展。

  • bpo-36618: 当检测到clang编译器时,向CFLAGS添加 -fmax-type-align=8。pymalloc内存分配器将内存对齐于8字节。在x86-64上,clang默认期望对齐于16字节,因此使用MOVAPS指令,这可能导致分段错误。指示clang Python限制对齐于8字节以使用MOVUPS指令代替:虽然较慢,但如果内存未对齐于16字节,则不会触发SIGSEGV。遗憾的是,该标志必须添加到 CFLAGS 而不仅仅是 CFLAGS_NODIST,因为第三方C扩展也可能有相同的问题。

  • bpo-36605: make tagsmake TAGS 现在也解析 Modules/_io/*.cModules/_io/*.h

  • bpo-36465: 发布版本和调试版本现在ABI兼容:定义 Py_DEBUG 宏不再隐含 Py_TRACE_REFS 宏,后者引入了唯一的ABI不兼容性。Py_TRACE_REFS 宏添加了 sys.getobjects() 函数和 PYTHONDUMPREFS 环境变量,可以通过新的 ./configure --with-trace-refs 构建选项设置。

  • bpo-36577: setup.py 现在再次正确报告缺少的OpenSSL头文件和库。

  • bpo-36544: 修复了在 bpo-36146 重构 setup.py 时引入的回归问题。

  • bpo-36508: python-config --ldflags 不再包含 LINKFORSHARED 变量的标志。LINKFORSHARED 变量必须仅用于构建可执行文件。

  • bpo-36503: 移除了对 "aix3" 和 "aix4" 的引用。由 M. Felt 提供补丁。

Windows

  • bpo-35920: 添加了 platform.win32_edition() 和 platform.win32_is_iot()。添加了对为 Windows ARM32 交叉编译包的支持。跳过在 Windows IoT Core ARM32 上预期不工作的测试。

  • bpo-36649: 通过商店安装时,移除注册表键的尾随空格。

  • bpo-34144: 修复了 activate.bat,当 chcp.com 在输出中返回点时正确更新代码页。由 Lorenz Mende 提供补丁。

  • bpo-36509: 为 Windows IoT ARM 容器添加了预设的 IoT 布局。此布局不包含 UI 组件如 tkinter 或 IDLE。也不包含支持在目标上构建的文件,因为在使用 MSVC 时 Windows ARM32 构建必须交叉编译。

  • bpo-35941: ssl模块的enum_certificates函数现在在查询中返回Windows内所有可用证书存储中的证书,而不仅仅是返回系统范围内的证书存储中的证书。这包括来自以下证书存储的证书:本地机器、本地机器企业、本地机器组策略、当前用户、当前用户组策略、服务、用户。ssl.enum_crls()函数以同样的方式更改,以返回Windows证书吊销列表存储中的所有证书吊销列表。

  • bpo-36441: 修复了安装调试二进制文件时创建venv的问题。

  • bpo-36085: 通过使用安全的DLL搜索路径和添加 os.add_dll_directory(),在Windows上启用更好的DLL解析。

  • bpo-36010: 将venv标准库模块添加到Windows的nuget分发中。

  • bpo-29515: 在Windows上添加以下socket模块常量:IPPROTO_AH IPPROTO_CBT IPPROTO_DSTOPTS IPPROTO_EGP IPPROTO_ESP IPPROTO_FRAGMENT IPPROTO_GGP IPPROTO_HOPOPTS IPPROTO_ICLFXBM IPPROTO_ICMPV6 IPPROTO_IDP IPPROTO_IGMP IPPROTO_IGP IPPROTO_IPV4 IPPROTO_IPV6 IPPROTO_L2TP IPPROTO_MAX IPPROTO_ND IPPROTO_NONE IPPROTO_PGM IPPROTO_PIM IPPROTO_PUP IPPROTO_RDP IPPROTO_ROUTING IPPROTO_SCTP IPPROTO_ST

  • bpo-35947: 将当前版本的libffi添加到cpython-source-deps。更改_ctypes以在Windows上使用当前版本的libffi。

  • bpo-34060: 在Windows上运行测试套件时报告系统负载。由Ammar Askar提供补丁。基于Jeremy Kloth的先前工作。

  • bpo-31512: 随着Windows 10 Creators Update的发布,非特权用户现在可以创建符号链接,只要计算机启用了开发者模式。

macOS

  • bpo-34602: 避免在macOS上使用resource.setrlimit设置堆栈资源限制时失败。这恢复了对 bpo-18075 的早期修复,该修复在macOS上构建解释器可执行文件时强制使用了非默认堆栈大小。

IDLE

  • bpo-36429: 修复启动IDLE时使用pyshell的问题。在顶部添加idlelib.pyshell别名;移除底部的pyshell别名。移除过时的__name__=='__main__'命令。

工具/示例

  • bpo-14546: 修复Tools/scripts/lll.py中的参数处理问题。

C API

  • bpo-36763: 修复 Py_SetStandardStreamEncoding() 中的内存泄漏:如果函数被调用两次,释放内存。

  • bpo-36641: PyDoc_VAR(name)PyDoc_STRVAR(name, str) 现在创建的是``static const char name[]``而非 static char name[]。由Inada Naoki提供的补丁。

  • bpo-36389: 更改Python内存分配器调试钩子(PyMem_SetupDebugHooks() 函数)中使用的内部常量 CLEANBYTEDEADDYTE``和 ``FORBIDDENBYTE 的值。字节模式 0xCB0xDB 和``0xFB``已被替换为 0xCD0xDD0xFD,以使用与Windows CRT调试 malloc() 和``free()``相同的值。

  • bpo-36443: 自Python 3.7.0起,如果在 LC_CTYPE 区域设置被强制转换和/或用户配置启用了UTF-8模式的情况下,在 Py_Initialize() 之前调用 Py_DecodeLocale() 会产生乱码。现在默认禁用LC_CTYPE强制转换和UTF-8模式以修复乱码问题。现在必须使用新的 _Py_PreInitialize() API与 _PyPreConfig 显式启用(选择加入)。

  • bpo-36025: 修复了datetime C API中的一个意外更改,其中 PyDate_FromTimestamp() 函数的参数被错误地解释为单个时间戳而非参数元组,这导致现有代码开始引发 TypeError。这一不向后兼容的更改仅出现在Python 3.8的alpha版本中。由Paul Ganssle提供的补丁。

  • bpo-35810: 修改 PyObject_Init 以正确增加堆分配类型对象的引用计数。同时修复那些要么手动执行此操作,要么未在tp_dealloc中减少类型引用计数的堆分配类型的引用计数。

Python 3.8.0 alpha 3

发布日期: 2019-03-25

安全性

  • bpo-36216: 修改 urlsplit(),当 URL 包含在 IDNA 编码(NFKC 规范化)下分解为影响 URL 解析方式的字符时抛出 ValueError。

  • bpo-35121: 在使用带有 http.cookiejar.DefaultCookiePolicy 策略的 cookiejar 时,不要将没有 Domain 属性的域 A 的 cookies 发送到域 B,当域 A 是域 B 的后缀匹配时。补丁由 Karthikeyan Singaravelan 提供。

核心与内置函数

  • bpo-36421: 修复 _ctypes.c 的 PyCArrayType_new() 中可能出现的双重递减引用。

  • bpo-36412: 修复创建新字典时可能发生的崩溃。

  • bpo-36398: 修复 structseq_repr() 中可能发生的崩溃。

  • bpo-36256: 修复 parsermodule 在解析 DFA 中具有两个或更多相同类型标签弧的状态时的错误。由 Pablo Galindo 提供补丁。

  • bpo-36365: repr(structseq) 不再限制为 512 字节。

  • bpo-36374: 修复 merge_consts_recursive() 中可能的空指针解引用。由 Zackery Spytz 提供补丁。

  • bpo-36236: 在 Python 初始化时,如果当前目录已被移除,则不再将其前置到 sys.path 中。

  • bpo-36352: 如果路径过长,Python 初始化现在会失败并报错,而不是静默截断路径。

  • bpo-36301: 如果启动时解码 pybuilddir.txt 配置文件失败,Python 初始化现在会失败。

  • bpo-36333: 修复 _PyRuntimeState_Fini 中的内存泄漏。由 Stéphane Wirtel 贡献。

  • bpo-36332: 内置的 compile() 现在可以处理包含赋值表达式的 AST 对象。由 Pablo Galindo 提供补丁。

  • bpo-36282: 改进了某些内置函数中位置参数过多的错误消息。

  • bpo-30040: 现在新创建的空字典使用更少的内存。过去它比通过 dict.clear() 创建的空字典使用更多内存。并且空字典的创建和删除速度大约快 2 倍。由 Inada Naoki 提供补丁。

  • bpo-36262: 修复了在由 float(str)complex(str)pickle.load()marshal.load() 等使用的函数 ``_Py_dg_strtod()``中从字符串到浮点数转换时不太可能出现的内存泄漏问题。

  • bpo-36252: 将Unicode数据库更新至12.0.0版本。

  • bpo-36218: 修复了在排序包含异构值的列表时出现的段错误。由Rémi Lapeyre和Elliot Gorokhovsky提供补丁。

  • bpo-36188: 清理了方法对象和文档中遗留的Python 2未绑定方法处理的痕迹。由Martijn Pieters提供补丁。

  • bpo-36124: 添加了一个新的解释器特定的字典,并通过C-API的PyInterpreterState_GetDict()公开。这与PyThreadState_GetDict()并行。不过,扩展模块应继续使用PyModule_GetState()来处理它们自己的内部每个解释器的状态。

  • bpo-35975: 向 ast.parse() (已文档化) 和 compile() (隐藏) 添加了一个``feature_version``标志,允许调整解析器以支持旧版本的语法。特别是,如果 feature_version``是5或6,则重新启用来自PEP 492的 ``asyncawait 关键字的hack。(对于7或更高版本,这些被无条件视为关键字,但它们仍然是特殊的标记,而不是解析器驱动程序识别的 NAME 标记。)

  • bpo-31904: 在VxWorks上使用UTF-8作为系统编码。

  • bpo-36048: __index__() 特殊方法将代替 __int__() 用于Python数字到C整数的隐式转换。在隐式转换中使用 __int__() 方法已被弃用。

  • bpo-35808: 退役pgen并使用修改版的pgen2来生成解析器。由Pablo Galindo提供补丁。

  • bpo-36401: 由pydoc创建的类文档现在有一个单独的部分用于只读属性。

  • bpo-36320: typing.NamedTuple() 类已弃用 _field_types 属性,转而使用携带相同信息的 __annotations__ 属性。同时,这两个属性都已从 OrderedDict 转换为常规 dict。

  • bpo-34745: 修复 asyncio ssl 因循环引用导致的内存问题

  • bpo-36324: 向 statistics.NormalDist 添加计算逆累积正态分布的方法。

  • bpo-36321: collections.namedtuple() 错误拼写了一个属性名。为了与 typing.NamedTuple 保持一致,属性名应为 "_field_defaults" 而非 "_fields_defaults"。为了向后兼容,现在两种拼写都会创建。错误的拼写未来可能会被移除。

  • :issue:`36297": "unicode_internal" 编解码器已被移除。自 Python 3.3 起已弃用。由 Inada Naoki 提供补丁。

  • bpo-36298: 在 pyclbr 中当模块无法找到时抛出 ModuleNotFoundError。感谢 'mental' 的 bug 报告。

  • bpo-36268: 将 tarfile 用于写入 tar 的默认格式从供应商特定的 GNU 切换到现代的 POSIX.1-2001 pax 标准。由 C.A.M. Gerlach 贡献。

  • bpo-36285: 修复 array 模块中的整数溢出问题。由 Stephan Hohe 提供补丁。

  • bpo-31904: 为 VxWorks 添加 _signal 模块支持。

  • bpo-36272: logging 不再静默忽略 RecursionError。补丁由 Rémi Lapeyre 贡献。

  • bpo-36280: 向 ast.Constant 添加一个 kind 字段。如果字面量有 'u' 前缀(即 Python 2 风格的 unicode 字面量),则为 'u',否则为 None。

  • bpo-35931: pdb debug 命令现在能够优雅地处理所有异常。

  • bpo-36251: 修复用于 stderrprinter 和 re.Match reprs 的格式字符串。由 Stephan Hohe 提供补丁。

  • bpo-36235: 修复 distutils.sysconfigcustomize_compiler() 中的 CFLAGS:当定义了 CFLAGS 环境变量时,不再用 OPT 变量覆盖 CFLAGS 变量。初始补丁由 David Malcolm 编写。

  • bpo-35807: 更新ensurepip以安装pip 19.0.3和setuptools 40.8.0。

  • bpo-36139: 在关闭 mmap 对象时释放GIL。

  • bpo-36179: 修复_hashopenssl中两个不太可能的引用泄漏。这些泄漏仅在内存不足的情况下发生。

  • bpo-36169: 向statistics.NormalDist添加overlap()方法。计算两个正态分布的重叠系数。

  • bpo-36103: 在非Windows平台上,``shutil.copyfileobj()``使用的默认缓冲区大小从16 KiB更改为64 KiB,以减少系统调用开销。由Inada Naoki贡献。

  • bpo-36130: 修复当步进到一个没有 __name__``全局变量的帧时,``pdbskip=... 的问题。由Anthony Sottile提供补丁。

  • bpo-35652: shutil.copytree(copy_function=...)错误地传递DirEntry而不是路径字符串。

  • bpo-35178: 确保自定义的 warnings.formatwarning() 函数可以接收 line 作为位置参数。基于Tashrif Billah的补丁。

  • bpo-36106: 解决与libm的sinpi()潜在的名称冲突。由Dmitrii Pasechnik提供补丁。

  • bpo-36091: 清理Lib/types中对异步生成器的引用。由Henry Chen提供补丁。

  • bpo-36043: FileCookieJar 支持 path-like object。由Stéphane Wirtel贡献。

  • bpo-35899: 修复Enum以正确处理空字符串和非拉丁字符(如'α'、'א')而不会崩溃。原始补丁由Maxwell贡献。由Stéphane Wirtel协助。

  • bpo-21269: 向模拟调用对象添加 argskwargs 属性。由Kumar Akshay贡献。

  • bpo-30670: 添加了 pprint.pp 以默认按插入顺序排序字典键的方式漂亮打印对象。向``pprint.pprint``、pprint.pformat``和 ``pprint.PrettyPrinter 添加了参数*sort_dicts*。由Rémi Lapeyre贡献。

  • bpo-35843: 为 _NamespacePath 实现 __getitem__。由Anthony Sottile提供补丁。

  • bpo-35802: 清理检查 os.stat / os.lstat / os.chmod 存在的代码,这些始终存在。由 Anthony Sottile 提供补丁。

  • bpo-35715: 在不再需要后释放 ProcessPoolExecutor _process_worker 的返回值以释放内存。

  • bpo-35493: 在 multiprocessing.Pool 中使用 multiprocessing.connection.wait() 而不是每 0.2 秒轮询一次工作更新。由 Pablo Galindo 提供补丁。

  • bpo-35661: 将 venv 提示存储在 pyvenv.cfg 中。

  • bpo-35121: 当请求路径是 cookie 路径属性的前缀匹配但不以 "/" 结尾时,不为请求设置 cookie。由 Karthikeyan Singaravelan 提供补丁。

  • bpo-21478: 对使用 unittest.mock.create_autospec() 创建的子函数的调用应传播到父函数。由 Karthikeyan Singaravelan 提供补丁。

  • bpo-35198: 修复 AIX 上的 C++ 扩展编译。

文档

  • bpo-36329: 在执行 make -C Doc/ serve 时,为 Tools/scripts/serve.py 的使用声明 Python 二进制文件的路径。由 Stéphane Wirtel 贡献

  • bpo-36138: 改进关于将 datetime.timedelta 转换为标量的文档。

  • bpo-21314: 在编程 FAQ 的核心语言部分添加了一个新条目,解释了函数签名中斜杠(/)的用法。由 Lysandros Nikolaou 提供补丁。

测试

  • bpo-36234: test_posix.PosixUidGidTests: 添加对无效 uid/gid 类型 (str) 的测试。初始补丁由 David Malcolm 编写。

  • bpo-29571: 修复 test_re.test_locale_flag(): 使用 locale.getpreferredencoding() 而不是 locale.getlocale() 来获取区域编码。对于某些区域设置,locale.getlocale() 返回错误的编码。

  • bpo-36123: 修复 test_socket 中的竞争条件。

构建

  • bpo-36356: 修复导致在配置地址消毒器时构建失败的泄漏问题。

  • bpo-36146: 向 setup.py 添加 TEST_EXTENSIONS 常量,以允许不构建像 _testcapi 这样的测试扩展。

  • bpo-36146: 修复 macOS 上的 setup.py:仅将 /usr/include/ffi 添加到 _ctypes 的包含目录中,而不是所有扩展。

  • bpo-31904: 使构建系统能够为 VxWorks RTOS 进行交叉构建。

Windows

  • bpo-36312: 修复了以下代码页的解码器:50220、50221、50222、50225、50227、50229、57002 至 57011、65000 和 42。

  • bpo-36264: 在 Windows 上的 os.path.expanduser 中不遵循 POSIX HOME。由 Anthony Sottile 提供补丁。

  • bpo-24643: 修复由于 PC/pyconfig.h 中的 #define timezone _timezone 导致的名称冲突。

IDLE

  • bpo-36405: 在 idlelib 中使用字典解包。

  • bpo-36396: 移除 idlelib.config.GetHighlight() 的 fgBg 参数。该参数仅使用了两次,并改变了返回类型。

  • bpo-36176: 修复 IDLE 自动完成和调用提示弹出窗口的颜色。防止与 Linux 深色主题冲突(并稍微调暗调用提示背景)。

  • bpo-23205: 对于 grep 模块,为 findfiles 添加测试,将 findfiles 重构为模块级函数,并重构 findfiles 以使用 os.walk。

  • bpo-23216: 为 IDLE 搜索模块添加文档字符串。

  • bpo-36152: 移除 colorizer.ColorDelegator.close_when_done 和 .close() 的相应参数。在 IDLE 中,自 2007 年以来,两者始终为 None 或 False。

  • bpo-32129: 避免在 macOS 上使用 Tk 8.6 时 IDLE 应用程序图标模糊。由 Kevin Walzer 提供补丁。

  • bpo-36096: 在 colorizer 中将类变量重构为实例变量。

  • bpo-30348: 将 idlelib.autocomplete 的测试覆盖率提高 30%。由 Louie Lu 提供补丁。

工具/示例

  • bpo-35132: 修复 python-gdb.py 在 gdb7 上的 py-list 和 py-bt 命令。

  • bpo-32217: 修复 Windows 上的冻结脚本。

C API

  • bpo-36381: 当在没有 PY_SSIZE_T_CLEAN 的情况下使用 '#' 格式构建或解析值时,引发 DeprecationWarning

  • bpo-36142: 整个 coreconfig.h 头文件现在被排除在 Py_LIMITED_API 之外。将函数定义移动到一个新的内部 pycore_coreconfig.h 头文件中。

Python 3.8.0 alpha 2

发布日期: 2019-02-25

核心与内置函数

  • bpo-36052: 当使用赋值运算符给 __debug__ 赋值时,抛出 SyntaxError。由 Stéphane Wirtel 和 Pablo Galindo 贡献。

  • bpo-36012: 类变量写入速度提高了一倍。当更新非双下划线属性时,减少了一次不必要的更新槽的调用。

  • bpo-35942: 改进了在允许传递 PathLike 对象的接口中,从 __fspath__ 返回无效类型时发出的错误信息,现在它会解释错误的来源。

  • bpo-36016: gc.get_objects 现在可以接收一个可选参数,指定从哪个代获取对象。由 Pablo Galindo 提供补丁。

  • bpo-1054041: 当主解释器由于未捕获的 KeyboardInterrupt 退出时,进程现在会以适当的方式退出,以便其父进程能够检测到是由于 SIGINT 或 ^C 终止的进程。这使得 shell 和批处理脚本能够理解用户要求它们停止。

  • bpo-35992: 修复了在具有自定义不可下标元类的类上不调用 __class_getitem__() 的问题。

  • bpo-35993: 修复了在使用子解释器时 fork 导致的崩溃。由 Stéphane Wirtel 贡献。

  • bpo-35991: 修复了 Modules/_randommodule.c 中的潜在双重释放问题。

  • bpo-35961: 修复了 slice_richcompare() 中的崩溃:对两个临时内部元组使用强引用而非偷取的引用。

  • bpo-35911: 通过添加 cell.__new__ 方法启用 cell 对象的创建,并在 Lib/types.py 中以 CellType 的名称公开 cell 类型。由 Pierre Glaser 提供补丁。

  • bpo-12822: 当 pthread_condattr_setclockCLOCK_MONOTONIC 可用时,使用单调时钟进行 pthread_cond_timedwait

  • bpo-15248: 编译器现在在可能遗漏逗号之前元组或列表的情况下发出语法警告。

  • bpo-35886: PyInterpreterState 的实现已移至内部头文件中(由 Py_BUILD_CORE 保护)。

  • bpo-31506: 澄清当 object.__new__object.__init__ 接收到多于一个参数时报告的错误。由 Sanyam Khurana 贡献。

  • bpo-35724: 现在保证信号处理相对于主解释器进行。

  • bpo-33608: 我们新增了一个内部的 _Py_AddPendingCall(),它相对于提供的解释器进行操作。这使得我们可以使用现有的实现来请求另一个解释器执行在当前解释器中无法完成的工作,比如减少另一个解释器拥有的对象的引用计数。现有的 Py_AddPendingCall() 仅相对于主解释器进行操作。

  • bpo-33989: 修复了在 list.sort() 中对 ob_type->tp_richcompare == NULL 的对象进行排序时可能发生的崩溃。由 Zackery Spytz 提供补丁。

  • bpo-35512: unittest.mock.patch.dict() 用作装饰器时,字符串目标在函数调用期间而非装饰器构建期间解析目标。由 Karthikeyan Singaravelan 提供补丁。

  • bpo-36018: 添加 statistics.NormalDist,一个用于创建和操作随机变量正态分布的工具。具有一个复合类,将测量数据的平均值和标准差视为单一实体。

  • bpo-35904: 添加 statistics.fmean() 作为现有 mean() 函数的更快、浮点变体。

  • bpo-35918: 从 multiprocessing.managers.SyncManager.dict 中移除了损坏的 has_key 方法。由 Rémi Lapeyre 贡献。

  • bpo-18283: 添加对 bytes 的支持到 shutil.which()

  • bpo-35960: 修复 dataclasses.field() 丢弃作为元数据传递的空映射对象的问题。

  • bpo-35500: 在 unittest.mock.Mock.assert_called_with() 断言错误中,将预期和实际的调用参数分别写在单独的行上。由 Susan Su 贡献。

  • bpo-35931: pdb debug 命令现在优雅地处理语法错误。

  • bpo-24209: 在http.server脚本中,依赖getaddrinfo根据bind参数绑定到首选地址。现在默认绑定或绑定到一个名称可能会绑定到IPv6或双栈,取决于环境。

  • bpo-35321: 设置 _frozen_importlib__spec__.origin 为frozen,以匹配``_frozen_importlib_external``的行为。由Nina Zakharenko提供补丁。

  • bpo-35378: 修复 multiprocessing.Pool 内部的一个引用问题,该问题导致如果池在没有显式关闭或终止的情况下被删除,池将保持活动状态。为池迭代器添加了一个新的强引用,将池的生命周期与其迭代器的生命周期联系起来,因此如果池迭代器仍然存活,池不会被销毁。

  • bpo-34294: re模块,在罕见情况下修复错误的捕获组。re.search()re.findall()re.sub() 和其他扫描字符串寻找匹配的函数,应在两次匹配尝试之间重置捕获组。由Ma Lin提供补丁。

  • bpo-35615: weakref: 修复在复制WeakKeyDictionary或WeakValueDictionary时由于某些键或值在迭代过程中消失而导致的RuntimeError。

  • bpo-35606: 实现 math.prod() 作为 sum() 的类似函数,返回'start'值(默认:1)乘以数字可迭代对象的乘积。由Pablo Galindo提供补丁。

  • bpo-32417: 在 datetime.datetime 子类和 datetime.timedelta 之间执行算术现在返回与 datetime.datetime 子类相同类型的对象。因此,datetime.datetime.astimezone() 和替代构造函数如 datetime.datetime.now() 和带``tz`` 参数调用的 datetime.fromtimestamp() 现在 保留它们的子类。

  • bpo-35153: 向 xmlrpc.client.ServerProxyxmlrpc.client.Transportxmlrpc.client.SafeTransport 添加 headers 可选仅关键字参数。补丁由Cédric Krier提供。

  • bpo-34572: 修复 pickle.loads 的 C 实现以使用 importlib 的锁定机制,从而避免使用部分加载的模块。由 Tim Burgess 提供补丁。

文档

  • bpo-36083: 修复手册页 Synopsis 中 --check-hash-based-pycs 选项的格式。

  • bpo-36007: 将最低 sphinx 版本提升至 1.8。由 Anthony Sottile 提供补丁。

  • bpo-22062: 更新 pathlib 的文档和文档字符串。原始由 Mike Short 提供补丁。

测试

  • bpo-27313: 避免 test_ttk_guionly ComboboxTest 在 macOS Cocoa Tk 上失败。

  • bpo-36019: 添加 test.support.TEST_HTTP_URL 并用此新常量替换对 http://www.example.com 的引用。由 Stéphane Wirtel 贡献。

  • bpo-36037: 为严格的 OpenSSL 配置(如 RHEL8 严格加密策略)修复 test_ssl。如果需要,为服务器 SSL 上下文的最低 TLS 版本使用较旧的 TLS 版本,以测试比默认最低 TLS 版本更旧的 TLS 版本。

  • bpo-35798: 添加了 test.support.check_syntax_warning()

  • bpo-35505: 使 test_imap4_host_default_value 不依赖于本地 IMAP 服务器是否运行。

  • bpo-35917: multiprocessing:为 SyncManager 和 SharedMemoryManager 类提供单元测试 + 所有应该由它们支持的共享类型。(由 Giampaolo Rodola 提供补丁)

  • bpo-35704: 跳过 test_shutil.test_unpack_archive_xztar 以防止在 32 位 AIX 上当 MAXDATA 设置小于 0x20000000 时发生 MemoryError。

    由 Michael Felt (aixtools) 提供补丁

  • bpo-34720: 断言 m_state != NULL 以模仿 GC 遍历函数,这些函数在模块状态尚未创建时不正确处理模块创建。

Windows

  • bpo-35976: 在 PCBuild 的 Windows 构建文件中添加 ARM 构建支持。

  • bpo-35692: pathlib 在检查未准备好驱动器上的文件和目录存在时不再引发异常

  • bpo-35872: 在虚拟环境中调用 venv 时使用基础 Python 可执行文件

  • bpo-35873: 防止 venv 路径被子进程继承

  • bpo-35299: 修复在PGO分析期间sysconfig对源目录的检测以及distutils对pyconfig.h的处理。

IDLE

  • bpo-24310: IDLE —— 文档设置对话框字体标签示例。

  • bpo-35833: 修订IDLE文档关于发送到Shell的控制码。添加一个代码示例块。

  • bpo-35689: 为colorizer.py添加文档字符串和单元测试。

Python 3.8.0 alpha 1

发布日期: 2019-02-03

安全性

  • bpo-35746: CVE 2019-5010: 修复ssl模块中的NULL指针解引用问题。证书解析器未能正确处理具有空DP或URI的CRL分发点。恶意或错误的证书可能导致段错误。漏洞(TALOS-2018-0758)由Cisco的Colin Read和Nicolas Edet报告。

  • bpo-34812: -I 命令行选项(在隔离模式下运行Python)现在在生成子进程时也被 multiprocessingdistutils 模块复制。以前,只有由 -I 启用的 -E-s 选项被复制。

  • bpo-34791: 当sys.flags.ignore_environment由-E或-I参数设置时,xml.sax和xml.dom.domreg不再使用环境变量来覆盖解析器实现。

  • bpo-17239: xml.sax和xml.dom.minidom解析器默认不再处理外部实体。外部DTD和ENTITY声明不再加载文件或创建网络连接。

  • bpo-34623: CVE 2018-14647: C加速的_elementtree模块现在从_Py_HashSecret初始化哈希随机化盐,而不是libexpat的默认CSPRNG。

  • bpo-34405: 更新Windows构建的OpenSSL至1.1.0i版本。

  • bpo-33871: 修复在macOS上 os.sendfile() 中发送文件部分的问题。使用 trailers 参数可能导致从输入文件发送的字节数多于指定数量。

  • bpo-32533: 修复_ssl中错误处理的线程安全性。

  • bpo-33136: 加固ssl模块以抵御LibreSSL的 CVE 2018-8970。调用X509_VERIFY_PARAM_set1_host()时使用明确的namelen。新增测试确保不允许NULL字节。

  • bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。

  • bpo-32981: difflib 和 poplib 中的正则表达式容易受到灾难性回溯的影响。这些正则表达式构成了潜在的 DOS 向量(REDOS)。它们已被重构。这解决了 CVE 2018-1060CVE 2018-1061。由 Jamie Davis 提供补丁。

  • bpo-28414: ssl 模块现在允许用户在使用 SNI 时执行自己的 IDN 编码/解码。

核心与内置函数

  • bpo-35877: 在 while 语句中使括号对于命名表达式可选。由 Karthikeyan Singaravelan 提供补丁。

  • bpo-35814: 允许注解赋值中的右侧表达式与普通赋值中的相同。特别是,x: Tuple[int, int] = 1, 2 (右侧不带括号) 现在是被允许的。

  • bpo-35766: 添加了在 ast 模块中解析 PEP 484 类型注释的选项。(默认关闭。)这是合并了其第三方分支 [typed_ast](https://github.com/python/typed_ast) 的关键功能。

  • bpo-35713: 重新组织 Python 初始化以更早地获得工作异常和 sys.stderr。

  • bpo-33416: 向 Python AST 节点添加结束行和结束列位置信息。这是一个 C 级别的向后不兼容的更改。

  • bpo-35720: 修复了 Modules/main.c 中 pymain_parse_cmdline_impl 函数的一个小内存泄漏。

  • bpo-35634: func(**kwargs) 现在会在 kwargs 是一个包含多个相同键的映射时引发错误。自 Python 3.6 起,当其他关键字参数在 **kwargs 之前传递时,已经会引发错误。

  • bpo-35623: 修复了排序非常长的列表时的一个崩溃。由 Stephan Hohe 提供补丁。

  • bpo-35214: 添加了 clang Memory Sanitizer 构建工具,以解决来自 posix、socket、time、test_io 和 test_faulthandler 的误报。

  • bpo-35560: 修复了调试构建中 format() 对于使用 "n" 格式、零填充和小宽度的浮点格式化的断言错误。发布构建不受影响。由 Karthikeyan Singaravelan 提供补丁。

  • bpo-35552: 在 PyUnicode_FromFormat() 中的格式字符 %s%V 以及 PyBytes_FromFormat() 中的 %s 不再读取超过 precision 指定限制的内存。

  • bpo-35504: 修复了删除某些属性时的段错误和 SystemErrors。由 Zackery Spytz 提供补丁。

  • bpo-35504: 修复了删除 OSError 的 characters_written 属性时出现的 SystemError。

  • bpo-35494: 改进了 f-string 中括号不匹配的语法错误消息。

  • bpo-35444: 修复了在无法查找内置 "getattr" 时,pickling 方法中的错误处理。加快了 pickling 迭代器的速度。

  • bpo-35436: 修复了内存分配错误处理中的多个问题。由 Zackery Spytz 提供补丁。

  • bpo-35423: 将 eval 循环中的信号处理触发器与 "pending calls" 机制分离。没有语义上的变化,性能差异也不显著。

  • bpo-35357: unittest.mock._Call 和 unittest.mock.MagicProxy 的内部属性名(name, parent & from_kall)现在以 _mock_ 为前缀,以防止与广泛使用的对象属性冲突。修复了测试函数名称中的小错字。

  • bpo-35372: 修复了对于长度超过 2 GiB 且包含不可解码字节的输入的代码页解码器。

  • bpo-35336: 修复 PYTHONCOERCECLOCALE=1 环境变量:仅当 LC_CTYPE 区域设置为 "C" 时才强制使用 C 区域设置。

  • bpo-31241: 列表推导式、生成器表达式和元组的 AST 节点的 linenocol_offset 属性现在指向开括号或方括号。对于没有括号的元组,它们指向第一个项目的位置。

  • bpo-33954: 对于 str.format()float.__format__()complex.__format__() 方法,当使用 "n" 格式化器时处理非 ASCII 小数点。

  • bpo-35269: 修复了涉及新创建的协程的可能段错误。由 Zackery Spytz 提供补丁。

  • bpo-35224: 实现了 PEP 572 (赋值表达式) 。由 Emily Morehouse 提供补丁。

  • bpo-32492: 通过为名称描述符使用C快速路径,将 namedtuple() 属性访问速度提高了1.6倍。由Pablo Galindo提供补丁。

  • bpo-35214: 修复了在解析字符串末尾被截断的Unicode转义序列(如 '\N')时超出边界的内存访问问题。它会读取超出内存分配末尾的一个字节。

  • bpo-35214: 解释器和扩展模块已添加注释,以便它们在clang的内存清理器下正常工作。新增了一个配置标志--with-memory-sanitizer,使得执行此类测试构建更加容易。

  • bpo-35193: 修复了字节码窥孔优化器中的一个偏差一个错误,该错误在移除不可达代码时可能会读取数组边界之外的字节。这个错误在Python 3.6和3.7的每个版本中都存在,直到现在。

  • bpo-35169: 改进了禁止赋值的错误消息。

  • bpo-34022: 修复了在 zipimport 中处理基于哈希的字节码文件的问题。由Elvis Pranskevichus提供补丁。

  • bpo-28401: 调试构建将不再尝试导入为ABI构建的扩展模块,因为它们从一开始就不兼容。补丁由Stefano Rivera提供。

  • bpo-29341: 在 os 方法的文档字符串中明确说明,路径样式的对象也被接受作为输入参数。

  • bpo-35050: socket: 修复了 AF_ALG 名称和类型长度检查中的一个偏差一个错误。

  • bpo-29743: 在 ctypes.Array 子类中,对于负的 _length_,现在会引发 ValueError 而不是 OverflowError。对于非整数的 _length_,也会引发 TypeError 而不是 AttributeError。原始由Oren Milman提供补丁。

  • bpo-16806: 修复了多行字符串标记的 linenocol_offset

  • bpo-35029: 在代码生成时作为异常引发的 SyntaxWarning 现在将被替换为 SyntaxError,以便更好地报告错误。

  • bpo-34983: 在 symtable 模块中公开 symtable.Symbol.is_nonlocal() 方法。由 Pablo Galindo 提供补丁。

  • bpo-34974: bytesbytearray 构造函数不再将意外异常(如 MemoryErrorKeyboardInterrupt)转换为 TypeError

  • bpo-34939: 允许在模块命名空间中使用在注解前声明为全局的注解名称。由 Pablo Galindo 提供补丁。

  • bpo-34973: 修复了在 bytes() 中当 list 参数在迭代时被修改导致的崩溃。

  • bpo-34876: AST 中装饰函数和类的 linenocol_offset 属性现在指向对应的 defasync defclass 的位置,而不是第一个装饰器的位置。这使得在跟踪时行号报告更加准确。这是唯一一种子 AST 节点的位置可能先于父 AST 节点位置的情况。

  • bpo-34879: 修复了 bytesobject.c 中可能的空指针解引用问题。由 Zackery Spytz 提供补丁。

  • bpo-34784: 修复了 PyStructSequence_NewType 的实现,以便创建堆分配的 StructSequences。

  • bpo-32912: 现在对于字符串和字节字面量中的无效转义序列,会发出 SyntaxWarning 而不是 DeprecationWarning

  • bpo-34854: 修复了在编译包含有关键字唯一参数但没有默认值的 lambda 的字符串注解时的崩溃问题。

  • bpo-34850: 当身份检查(isis not)与某些类型的字面量(例如字符串、整数)一起使用时,编译器现在会产生一个 SyntaxWarning。这些在 CPython 中可能偶然工作,但语言规范不保证。警告建议用户改用相等测试(==!=)。

  • bpo-34824: 修复了 Modules/_ssl.c 中可能的空指针解引用问题。补丁由 Zackery Spytz 提供。

  • bpo-30156: C函数 property_descr_get() 使用了一个"缓存"元组来优化函数调用。但这个元组在调试模式下可以通过 sys.getobjects() 发现。移除这一优化,它并不真正值得,并且在过去几年中导致了3次不同的崩溃。

  • bpo-34762: 修复contextvars C API以使用PyObject*指针类型。

  • bpo-34751: 元组的哈希函数现在基于xxHash,这在(以前的)病态情况下提供了更好的碰撞结果。此外,在64位系统上,它总体上改善了元组的哈希。由Jeroen Demeyer提供补丁,Tim Peters做出了重要贡献。

  • bpo-34735: 修复Modules/timemodule.c中的内存泄漏。由Zackery Spytz提供补丁。

  • bpo-34683: 修复了一个错误,其中一些SyntaxError错误指向了位置偏移一位的位置。

  • bpo-34651: 只允许主解释器进行fork。这避免了影响主解释器的可能性,这对运行时的操作至关重要。

  • bpo-34653: 移除未使用的函数PyParser_SimpleParseStringFilename。

  • bpo-32236: 警告如果以二进制模式和 buffering=1 调用 open(),则不支持行缓冲。

  • bpo-34641: 进一步限制函数调用中关键字参数左侧的语法。特别是,``f((keyword)=arg)``现在是不允许的。

  • bpo-34637: 使 sum()start 参数作为关键字参数可见。

  • bpo-1621: 在执行集合哈希表调整大小时,不假定有符号整数溢出行为(C未定义行为)。

  • bpo-34588: 修复回溯格式化中递归调用修剪特性的一个偏移一位的错误。

  • bpo-34485: 在Windows上,LC_CTYPE现在在启动时设置为用户首选区域设置。以前,LC_CTYPE区域设置在启动时为"C",但在调用setlocale(LC_CTYPE, "")或setlocale(LC_ALL, "")时会更改。

  • bpo-34485: 在POSIX区域设置(当C区域未被强制且UTF-8模式被禁用时),像sys.stdout这样的标准流现在使用"surrogateescape"错误处理程序,而不是"strict"。

  • bpo-34485: 修复像sys.stdout这样的标准流的错误处理程序:PYTHONIOENCODING=":"现在被忽略,而不是将错误处理程序设置为"strict"。

  • bpo-34485: Python现在使用C代码获取区域编码,以初始化像sys.stdout这样的标准流的编码。此外,编码现在初始化为Python编解码器名称,以获取规范化的编码名称并确保编解码器被加载。这一改变默认避免了在启动时导入_bootlocale和_locale模块。

  • bpo-34527: 在FreeBSD上,如果LC_CTYPE区域是"POSIX",Py_DecodeLocale()和Py_EncodeLocale()现在也会强制使用ASCII编码,而不仅仅是当LC_CTYPE区域是"C"时。

  • bpo-34527: UTF-8模式现在也由"POSIX"区域启用,而不仅仅是"C"区域。

  • bpo-34403: 在HP-UX上,如果使用C或POSIX区域设置,sys.getfilesystemencoding()现在返回"ascii"而不是"roman8"(当UTF-8模式被禁用且C区域未被强制时)。

  • bpo-34523: Python文件系统编码现在在Python初始化期间更早地读取。

  • bpo-12458: 回溯现在显示多行表达式中子表达式的正确行号。回溯现在显示多行表达式的第一行的行号,而不是最后一个子表达式的行号。

  • bpo-34408: 防止 PyInterpreterState_New() 中的空指针解引用和资源泄漏。

  • bpo-34400: 修复parsetok.c中的未定义行为。由Zackery Spytz提供补丁。

  • bpo-33073: 向ints添加了as_integer_ratio,以使它们更易于与floats互操作。

  • bpo-34377: 更新valgrind抑制列表,使用 _PyObject_Free/_PyObject_Realloc 代替``PyObject_Free``/PyObject_Realloc

  • bpo-34353: 在Python实现的 stat.filemode() 中添加了"socket"选项以匹配C实现。

  • bpo-34320: 修复了 dict(od) 未复制OrderedDict的迭代顺序的问题。

  • bpo-34113: 修复了在调试版本中,当操作码堆栈被调整为负数时崩溃的问题。由Constantin Petrisor提供补丁。

  • bpo-34100: 编译器现在递归合并元组和冻结集合中的常量。代码属性如 co_names 也被合并。

  • bpo-34151: 列表连接、重复和切片操作的性能略有提升。由Sergey Fedoseev提供补丁。

  • bpo-34170: -X dev: 现在即使启用了开发者模式,也可以使用PYTHONMALLOC覆盖内存分配器。

  • bpo-33237: 改进了部分初始化模块的 AttributeError 消息。

  • bpo-34149: 修复min和max函数在key为None时获取默认行为的问题。

  • bpo-34125: 当给出 **kwargs 时,现在可以对未绑定的内置方法进行性能分析。

  • bpo-34141: 优化了原子类型(None, bool, int, float, bytes, str)的pickling。

  • bpo-34126: 修复了在分析某些无效调用的未绑定方法时的崩溃问题。由Jeroen Demeyer提供补丁。

  • bpo-24618: 修复了在创建代码对象时,当varnames元组过小或参数计数过大时读取无效内存的问题。

  • bpo-34068: 在 io.IOBase.close() 中,确保在存在活动异常时不设置 closed 属性。由Zackery Spytz和Serhiy Storchaka提供补丁。

  • bpo-34087: 修复了将unicode转换为数值时的缓冲区溢出问题。

  • bpo-34080: 修复了编译器在词法分析过程中引发一些不常见错误时的内存泄漏问题。

  • bpo-34066: 在 with open() 中,禁止在调用 open() 和进入 with 块之间通过Ctrl-C中断。

  • bpo-34042: 修复dict.copy()以维持正确的总引用计数(如sys.gettotalrefcount()报告的那样)。

  • bpo-33418: 修复了函数对象在创建引用循环时潜在的内存泄漏问题。

  • bpo-33985: 实现 contextvars.ContextVar.name 属性。

  • bpo-33956: 将集成的 Expat 库更新至版本 2.2.5。

  • bpo-24596: 在调用 PyErr_Print() 之前,先在 PyRun_SimpleFileExFlags() 中减少模块对象的引用计数。由 Zackery Spytz 提供补丁。

  • bpo-33451: 在调用 PyEval_EvalCode() 之前关闭直接执行的 pyc 文件。

  • bpo-1617161: BuiltinMethodType 实例(内置类的方法)的哈希现在依赖于 __self__ 的身份哈希而非其值。ModuleTypeMethodWrapperType 实例(用户定义类的方法和一些内置类的方法如 str.__add__)的哈希和相等性现在依赖于 __self__ 的身份哈希和相等性而非其值。MethodWrapperType 实例不再支持排序。

  • bpo-33824: 修复 "LC_ALL=C python3.7 -V":在读取 Python 配置后编码更改时正确重置命令行解析器。

  • bpo-33803: 修复 hamt.c 中的一个崩溃问题,该问题是由于为一个对象启用 GC 跟踪时,其所有字段未设置为 NULL 引起的。

  • bpo-33738: 修复了七个与有限 API 不兼容的宏,并将宏 PyIter_Check()PyIndex_Check()PyExceptionClass_Name() 作为函数添加。添加了一个用于自动检查宏的脚本。

  • bpo-33786: 修复异步生成器以正确处理 athrow() 中的 GeneratorExit。

  • bpo-30167: PyRun_SimpleFileExFlags 除了移除模块中的 __file__ 外,还移除了 __cached__

  • bpo-33706: 修复解析命令行选项时 Python 初始化过程中的崩溃问题。感谢 Christoph Gohlke 的报告和修复!

  • bpo-33597: 将 PyGC_Head 的大小从 3 个字减少到 2 个字。

  • bpo-30654: 修复了即使之前设置了自定义处理程序,在解释器关闭时 SIGINT 处理程序重置为 SIG_DFL 的问题。由 Philipp Kerling 提供补丁。

  • bpo-33622: 修复了当垃圾收集器无法将带有 __del__ 方法或被其引用的对象添加到 gc.garbage 列表时的内存泄漏问题。现在可以在设置异常时调用 PyGC_Collect(),并保留异常。

  • bpo-33462: 使字典和字典视图可逆。由 Rémi Lapeyre 提供补丁。

  • bpo-23722: 当自定义元类没有在传递给 type.__new__ 的命名空间中提供 __classcell__ 条目时,现在会引发 RuntimeError。在 Python 3.6--3.7 中会发出 DeprecationWarning

  • bpo-33499: 添加了 PYTHONPYCACHEPREFIX 环境变量和 -X pycache_prefix 命令行选项,用于设置写入模块字节码缓存文件的备用根目录。

  • bpo-25711: zipimport 模块已用纯 Python 重写。

  • bpo-33509: 修复了 warnings.warn_explicit() 的 module_globals 参数:如果 module_globals 不是字典,不会崩溃。

  • bpo-31849: 修复了 pyhash.c 中的有符号/无符号比较警告。

  • bpo-33475: 修复了将注释转换为字符串时的杂项错误,并优化了字符串表示中的括号。

  • bpo-20104: 添加了对 posix_spawnsetpgroupresetidssetsigmasksetsigdefscheduler 参数的支持。由 Pablo Galindo 提供补丁。

  • bpo-33391: 修复了 set_symmetric_difference() 中的内存泄漏。

  • bpo-33363: 对于异步函数外的 async withasync for 语句,现在会引发 SyntaxError。

  • bpo-28055: 修复了 siphash24() 中的未对齐访问。由 Rolf Eike Beer 提供补丁。

  • bpo-33128: 修复了一个导致 PathFinder 在 sys.meta_path 上出现两次的 bug。由 Pablo Galindo Salgado 提供补丁。

  • bpo-33331: 现在在解释器关闭时,最后导入的模块会首先被清除。

  • bpo-33312: 通过调整内部结构 _dictkeysobject 共享键结构的声明方式,修复了 dictobject.c 中的 clang ubsan(未定义行为消毒剂)警告。

  • bpo-33305: 改进了无效数值字面量的语法错误提示信息。

  • bpo-33306: 改进了不平衡括号的语法错误提示信息。

  • bpo-33234: 当输入长度已知时,列表构造函数会预分配大小而不会过度分配。

  • bpo-33270: 为所有匿名代码对象内部化名称。由Zackery Spytz提供补丁。

  • bpo-30455: 现在,与令牌相关的C和Python代码以及文档都从一个单一源文件 Grammar/Tokens 生成。

  • bpo-33176: 向memoryviews添加了一个 toreadonly() 方法。

  • bpo-33231: 修复了 normalizestring() 中潜在的内存泄漏问题。

  • bpo-33205: 将字典增长函数从 round_up_to_power_2(used*2+hashtable_size/2) 更改为``round_up_to_power_2(used*3)``。以前,字典仅在 used == 0 时收缩。现在字典有更多机会被收缩。

  • bpo-29922: 改进了'async with'中当 __aenter__()__aexit__() 返回不可等待对象时的错误消息。

  • bpo-33199: 修复了在从键共享字典复制时,字典实现中的 ma_version_tag 未初始化的问题。

  • bpo-33053: 当使用-m开关时,sys.path[0]现在明确扩展为 起始 工作目录,而不是保留为空路径(允许在导入时从当前工作目录导入)。

  • bpo-33138: 更改了不可pickle和不可复制类型的标准错误消息。现在显示"cannot pickle"而不是"can't pickle"或"cannot serialize"。

  • bpo-33018: 提高了当 issubclass() 的第一个参数是非类而第二个参数是抽象基类时引发错误的一致性。由Josh Bronson提供补丁。

  • bpo-33083: math.factorial 不再接受非int-like的参数。由Pablo Galindo提供补丁。

  • bpo-33041: 添加了新操作码 END_ASYNC_FOR 并修复了以下问题:

    • 设置全局 StopAsyncIteration 不再破坏 async for 循环。

    • 跳入一个 async for 循环现在被禁止了。

    • 跳出一个 async for 循环不再会破坏堆栈了。

  • bpo-25750: 修复了由于描述符从类中删除自身时`type_getattro()`中的引用计数错误导致的Python罕见崩溃。由Jeroen Demeyer提供补丁。

  • bpo-33041: 修复了带有复杂目标的“async for”的字节码生成问题。现在,在赋值或解包时引发的StopAsyncIteration将被传播,而不是停止迭代。

  • bpo-33026: 通过设置f_lineno修复了跳出“with”块的问题。

  • bpo-33005: 修复了在使用自定义内存分配器(例如:使用PYTHONMALLOC环境变量)时fork导致的崩溃。_PyGILState_Reinit()和_PyInterpreterState_Enable()现在使用默认的RAW内存分配器在fork时分配新的解释器互斥锁。

  • bpo-32911: 由于在下游beta测试期间发现的意外兼容性问题,恢复了 bpo-29463。从Module、ClassDef、FunctionDef和AsyncFunctionDef ast节点中移除了在3.7a1中添加的`docstring` 字段。docstring表达式被恢复为其主体的第一条语句。基于Inada Naoki的补丁。

  • bpo-17288: 防止从'return'和'exception'跟踪事件跳转。

  • bpo-32946: 如果模块不是包,从已导入模块中使用“from ... import ...”导入名称现在快30%。

  • bpo-32932: 当`__all__`中有非str对象时,使错误消息更加揭示问题。

  • bpo-32925: 优化了对由非常量组成的字面列表的迭代和包含测试:x in [a, b]`和`for x in [a, b]。所有元素均为常量的情况已经被优化。

  • bpo-32889: 更新Valgrind抑制列表,以考虑`Py_ADDRESS_IN_RANG`重命名为`address_in_range`的情况。

  • bpo-32836: 在列表/字典/集合推导式的情况下不使用临时变量。

  • bpo-31356: 移除了在 bpo-31356 中添加的新API(gc.ensure_disabled()上下文管理器)。

  • bpo-32305: 对于命名空间包,确保`__file__`和`__spec__.origin`都被设置为None。

  • bpo-32303: 确保对于命名空间包,__spec__.loader__loader__ 相匹配。

  • bpo-32711: 修复 Python/ast_unparse.c 中的警告信息。由 Stéphane Wirtel 提供补丁。

  • bpo-32583: 修复在使用自定义解码错误处理程序时,内置 Unicode 解码器可能因越界写入错误而崩溃的问题。

  • bpo-32489: 现在允许在 finally 子句中使用 continue 语句。

  • bpo-17611: 通过将展开块栈的逻辑移至编译器,简化了解释器循环。编译器现在会为调整值栈和调用 breakcontinuereturn 的清理代码发出明确的指令。

    移除了操作码 BREAK_LOOPCONTINUE_LOOPSETUP_LOOPSETUP_EXCEPT。新增了操作码 ROT_FOURBEGIN_FINALLYCALL_FINALLYPOP_FINALLY。改变了 END_FINALLYWITH_CLEANUP_START 的行为。

  • bpo-32285: 新增函数 unicodedata.is_normalized,可用于检查字符串是否符合特定的正规形式。

  • bpo-10544: 现在禁止在推导式和生成器表达式中使用 yield 表达式,除了最外层可迭代对象的表达式。

  • bpo-32117: 现在允许在 yield 和 return 语句中不加括号进行可迭代对象的解包,例如 yield 1, 2, 3, *rest。感谢 David Cuthbert 的更改和 Jordan Chapman 增加的测试。

  • bpo-31902: 修复 ast 节点 ast.AsyncForast.AsyncFunctionDefast.AsyncWithcol_offset 属性。之前,col_offset 指向 async 后的关键字。

  • bpo-25862: 修复 io.TextIOWrappertell() 方法中的断言失败。由 Zackery Spytz 提供补丁。

  • bpo-21983: 修复当类型参数是 ctypes 结构化数据类型时,ctypes.cast() 中的崩溃问题。由 Eryk Sun 和 Oren Milman 提供补丁。

  • bpo-31577: 修复在`os.utime()`中当ns参数错误时导致的崩溃问题。由Oren Milman提供补丁。

  • bpo-29832: 从各种socket错误消息中移除对'getsockaddrarg'的引用。补丁由Oren Milman提供。

  • bpo-35845: 向memoryview.tobytes()添加'order'参数。

  • bpo-35864: collections.namedtuple的_asdict()方法现在返回一个常规的dict而不是OrderedDict。

  • bpo-35537: 现在subprocess.Popen内部使用ExitStack来清理管道文件句柄。在正常操作中没有行为变化。但如果关闭一个句柄时引发异常,其他句柄现在会被关闭而不是泄露。(由Giampaolo Rodola提供补丁)

  • bpo-35847: RISC-V需要CTYPES_PASS_BY_REF_HACK。修复了ctypes Structure的test_pass_by_value测试。

  • bpo-35813: 向multiprocessing添加了共享内存子模块,以避免进程间需要序列化。

  • bpo-35780: 修复在递归、可重入或多线程代码中出现的lru_cache()错误。这些错误可能导致孤儿链接和缓存被捕获在指定最大链接数更少的状态中。修复了负maxsize的处理,应该被当作零处理。修复了切换“满”状态标志时的错误。修复了遇到错误时链接的错误排序。同步了C代码和纯Python代码,针对具有单个位置参数的函数的空间节省路径。在这种常见情况下,lru缓存条目的空间开销减少了近一半。修复了缓存未命中的计数。在错误情况下,未命中计数与实际调用底层用户函数的次数不同步。

  • bpo-35537: os.posix_spawn()os.posix_spawnp() 现在有一个 setsid 参数。

  • bpo-23846: asyncio.ProactorEventLoop 现在捕获并记录当自管道满时的发送错误。

  • bpo-34323: asyncio: 增强 IocpProactor.close() 日志: 在第一次日志前等待1秒,然后每秒记录一次。同时记录自 close() 调用以来的秒数。

  • bpo-35674: 新增 os.posix_spawnp() 函数。由 Joannah Nanjekye 提供补丁。

  • bpo-35733: ast.Constant(boolean) 不再是 ast.Num 的实例。由 Anthony Sottile 提供补丁。

  • bpo-35726: QueueHandler.prepare() 现在在修改和入队之前复制记录,以避免影响链中的其他处理程序。

  • bpo-35719: 通过 1.3--2.5 倍加速了多参数 math 函数 atan2(), copysign(), remainder() 和 hypot()。

  • bpo-35717: 修复了在使用枚举和编译时引发的 KeyError 异常。由 Rémi Lapeyre 提供补丁。

  • bpo-35699: 修复了 distutils 中对 Visual Studio Build Tools 2017 的检测。

  • bpo-32710: 修复了 asyncio ProactorEventLoop 在重叠操作失败时的内存泄漏。

  • bpo-35702: 现在 macOS 10.12 可以使用 time.CLOCK_UPTIME_RAW 常量。

  • bpo-32710: 修复了 asyncio 中 ProactorEventLoop 在 ReadFile()WSASend() 重叠操作立即失败时的内存泄漏:释放内部缓冲区。

  • bpo-35682: 修复 asyncio.ProactorEventLoop.sendfile(): 如果内部 future 已经完成,不再尝试设置其结果。

  • bpo-35283: 为 threading.Thread.isAlive() 方法添加了弃用警告。由 Donghee Na 提供补丁。

  • bpo-35664: 通过优化参数处理和为元组中单个非负整数索引的常见情况添加快速路径(这是标准库中的典型用例),将 operator.itemgetter() 的性能提高了 33%。

  • bpo-35643: 修复了 Modules/_sha3/cleanup.py 中的 SyntaxWarning: 无效的转义序列。补丁由 Mickaël Schoentgen 提供。

  • bpo-35619: 改进了 help()pydoc 中对自定义数据描述符的支持。

  • bpo-28503: crypt 模块现在在可用时内部使用 crypt_r() 库函数而不是 crypt()

  • bpo-35614: 修复了 metaclasses 上的 help()。由 Sanyam Khurana 提供补丁。

  • bpo-35568: 将 raise(signum) 作为 raise_signal 公开

  • bpo-35588: fractions.Fraction 类型上的地板除法和模运算以及 divmod() 函数速度提高了 2--4 倍。由 Stefan Behnel 提供补丁。

  • bpo-35585: 通过值构建枚举的速度提升,例如 http.HTTPStatus(200)。

  • bpo-30561: random.gammavariate(1.0, beta) 现在计算的结果与 random.expovariate(1.0 / beta) 相同。这同步了两种算法并消除了旧实现中的一些特性。然而,它确实产生了与以前不同的随机变量流。

  • bpo-35537: subprocess 模块现在在某些情况下可以使用 os.posix_spawn() 函数以获得更好的性能。

  • bpo-35526: 将 barry_as_FLUFL.mandatory 的'笑话'延迟到 Python 4.0 版本

  • bpo-35523: 移除 ctypes 回调的变通方法:不再在启动时创建回调。避免在 import ctypesimport uuid 时触发 SELinux 警报。

  • bpo-31784: uuid.uuid1() 现在调用 time.time_ns() 而不是 int(time.time() * 1e9)

  • bpo-35513: unittest.runnerTextTestRunner 现在使用 time.perf_counter() 而不是 time.time() 来测量测试的执行时间:time.time() 可以倒退,而 time.perf_counter() 是单调的。

  • bpo-35502: 修复了 xml.etree.ElementTree.TreeBuilder 在树构建未完成时(特别是解析 XML 时引发错误的情况下)的引用泄漏问题。

  • bpo-35348: 使 platform.architecture() 解析 file 命令输出更加可靠:向 file 命令添加 -b 选项以省略文件名,强制使用 C 语言环境,并搜索“共享对象”模式。

  • bpo-35491: multiprocessing: 添加 Pool.__repr__() 并增强 BaseProcess.__repr__() (添加 pid 和父 pid) 以便于调试。Pool 的状态常量值现在是字符串而不是整数,例如 RUN 值变为 'RUN' 而不是 0

  • bpo-35477: multiprocessing.Pool.__enter__() 现在在池未运行时失败:如果多次使用 with pool: 会失败。

  • bpo-31446: 复制传递给 CreateProcessW 的命令行,因为此函数可以更改输入缓冲区的内容。

  • bpo-35471: Python 2.4 放弃了对 MacOS 9 的支持。macpath 模块在 Python 3.7 中被弃用。该模块现已被移除。

  • bpo-23057: 在 Windows 上接收到键盘中断时解除 Proactor 事件循环的阻塞。

  • bpo-35052: 修复了 xml.dom.minidom 在带有实体的文档上的 cloneNode():向实体的用户数据处理器传递正确的参数。

  • bpo-20239: 允许重复分配删除 unittest.mock.Mock 属性。由 Pablo Galindo 提供补丁。

  • bpo-17185: 在 mock 上设置 __signature__ 以便 inspect 获取签名。由 Karthikeyan Singaravelan 提供补丁。

  • bpo-35445: 创建 posix.environ 时的内存错误不再被忽略。

  • bpo-35415: 验证 socket.socket() 的 fileno= 参数。

  • bpo-35424: multiprocessing.Pool 析构函数现在在池仍在运行时发出 ResourceWarning

  • bpo-35330: 当 Mock 实例用于包装对象时,如果 side_effect 用于其方法的 mock 之一,则不调用原始实现并返回使用 side effect 的结果,与使用 return_value 的方式相同。

  • bpo-35346: 从 platform 模块中删除对 Mac OS 9 和 Rhapsody 的支持。Rhapsody 的最后一个版本发布于 2000 年。Mac OS 9 的最后一个版本发布于 2001 年。

  • bpo-10496: distutils.utils 模块中的 check_environ() 现在在调用 pwd.getpwuid() 时会捕获 KeyError:在这种情况下不创建 HOME 环境变量。

  • bpo-10496: posixpath.expanduser() 现在在 HOME 环境变量未设置且当前用户没有家目录(如果当前用户标识在密码数据库中不存在)时,返回输入的 path 不变。这一更改修复了 site 模块在当前用户在密码数据库中不存在(如果用户没有家目录)时的问题。

  • bpo-35389: platform.libc_ver() 现在在可用且未设置 executable 参数时使用 os.confstr('CS_GNU_LIBC_VERSION')

  • bpo-35394: 向 asyncio 抽象协议添加空槽。

  • bpo-35310: 修复 select.select() 中的一个错误,在某些情况下,文件描述符序列在信号中断后未修改返回,即使文件描述符可能尚未准备就绪。现在,如果发生超时,select.select() 将始终返回空列表。由 Oran Avraham 提供补丁。

  • bpo-35380: 为 proactor asyncio 事件循环在 Windows 上启用 TCP_NODELAY。

  • bpo-35341: 向 typing 模块添加 collections.OrderedDict 的通用版本。由 Ismo Toijala 提供补丁。

  • bpo-35371: 修复了在 Windows 上传递不正确参数时 os.utime() 可能崩溃的问题。

  • bpo-35346: platform.uname() 现在在运行外部程序(如 cmd /c ver)时将 stderr 重定向到 os.devnull

  • bpo-35066: 之前,在格式字符串中带有尾随 '%' 的 datetime 对象上调用 strftime() 方法会导致异常。然而,这仅在 datetime C 模块被使用时发生;Python 实现不匹配此行为。现在 datetime 符合 PEP-399,不会在尾随 '%' 上抛出异常。

  • bpo-35345: 函数 platform.popen 已被移除,自 Python 3.3 起已弃用:请改用 os.popen()

  • bpo-35344: 在 macOS 上,platform.platform() 现在使用 platform.mac_ver(),如果它返回一个非空的发布字符串,以获取 macOS 版本而非 darwin 版本。

  • bpo-35312: 使 lib2to3.pgen2.parse.ParseError 可往返 pickle。由 Anthony Sottile 提供补丁。

  • bpo-35308: 修复 webbrowser 中的回归问题,其中默认浏览器可能优先于 BROWSER 环境变量中的浏览器。

  • bpo-24746: 避免在 doctest 花式差异中去除尾部空格。原始由 R. David Murray 和 Jairo Trad 提供补丁。由 Sanyam Khurana 增强。

  • bpo-28604: locale.localeconv() 现在如果两个区域设置不同且货币字符串非 ASCII,会临时将 LC_CTYPE 区域设置改为 LC_MONETARY 区域设置。这一临时更改会影响其他线程。

  • bpo-35277: 更新 ensurepip 以安装 pip 18.1 和 setuptools 40.6.2。

  • bpo-24209: 直接调用 http.server 时增加 IPv6 支持。

  • bpo-35226: 在测试 unittest.mock.call 对象相等性时递归检查参数,并添加说明,在 mock_calls 中追踪用于创建模拟祖先的参数是不可能的。

  • bpo-29564: warnings 模块现在建议如果指定了源,tracemalloc 模块可用但 tracemalloc 未跟踪内存分配时启用 tracemalloc。

  • bpo-35189: 修改以下 fnctl 函数,在信号中断 (EINTR) 时重试:flock, lockf, fnctl

  • bpo-30064: 在 sock_* asyncio API 中使用 add_done_callback() 以在取消时早期取消订阅 reader/writer。

  • bpo-35186: 移除当 setup.py uploadbdist_rpmbdist_dumb 一起使用时添加的“built with”注释。

  • bpo-35152: 允许在非 Windows 系统上的多进程连接中一次发送超过 2 GB 的数据。

  • bpo-35062: 修复了对 io.IncrementalNewlineDecodertranslate 参数的错误解析。

  • bpo-35065: 移除了 StreamReaderProtocol._untrack_reader。当前对 _untrack_reader``的调用执行得过早,导致协议在 ``connection_lost 能够运行并将EOF传递给读取器之前就忘记了读取器。

  • bpo-34160: ElementTree和minidom现在保留了用户指定的属性顺序。

  • bpo-35079: 通过添加'non-overlapping'和将'!='改为'<'来改进difflib.SequenceManager.get_matching_blocks的文档。

  • bpo-33710: 弃用了 gettext 模块中的 l*gettext() 函数和方法。它们返回编码的字节而不是Unicode字符串,是Python 2时代的产物。同时也弃用了与设置 l*gettext() 函数和方法字符集相关的函数和方法。

  • bpo-35017: 现在,如果 :socketserver.BaseServer.serve_forever`的 shutdown() 方法在轮询新事件时被调用,它会立即退出。

  • bpo-35024: importlib 不再在 (created|could not create) <bytecode path> 已经被记录后冗余地记录 wrote <bytecode path>。由Quentin Agren提供的补丁。

  • bpo-35047: 现在,如果 assert_not_calledassert_called_once 或``assert_called_once_with``失败,``unittest.mock``会在异常消息中包含模拟调用。由Petter Strandmark提供的补丁。

  • bpo-31047: 修复了 ntpath.abspath 在Windows上未移除尾部分隔符的回归问题。由Tim Graham提供的补丁。

  • bpo-35053: tracemalloc现在尝试在对象从"自由列表"(用于更快创建对象的优化,例如内置列表类型使用)中重用时更新回溯。

  • bpo-31553: 向json.tool添加了--json-lines选项。由hongweipeng提供的补丁。

  • bpo-34794: 修复了在将Tcl_Obj的Python包装器传回Tcl/Tk时Tkinter中的泄漏问题。

  • bpo-34909: 枚举:修复当父类与具体数据类型混合时子类的子类化问题。

  • bpo-35022: unittest.mock.MagicMock 现在支持 __fspath__ 方法(来自 os.PathLike)。

  • bpo-35008: 修复了在 C 实现中调用已初始化元素的 xml.etree.ElementTree.Element__setstate__() 方法时的引用泄漏问题。

  • bpo-23420: 验证 cProfile CLI 的 '-s' 参数的值。由 Robert Kuska 提供补丁。

  • bpo-33947: 数据类现在可以处理递归 repr 而不会引发 RecursionError。

  • bpo-34890: 使 inspect.iscoroutinefunction()inspect.isgeneratorfunction()inspect.isasyncgenfunction()functools.partial() 一起工作。由 Pablo Galindo 提供补丁。

  • bpo-34521: 使用 socket.CMSG_SPACE() 而不是 socket.CMSG_LEN()multiprocessing.reduction.recvfds() 中计算辅助数据大小,因为 RFC 3542 要求便携式应用程序使用前者。

  • bpo-31522: mailbox.mbox.get_string 函数的 from_ 参数现在可以成功设置为非默认值。

  • bpo-34970: 在 asyncio.all_tasks() 中保护任务弱集操作。

  • bpo-34969: gzip:在 gzip CLI 上添加 --fast、--best 参数,这些参数将用于快速压缩方法(quick)或最佳压缩方法(较慢,但文件更小)。同时,将默认压缩级别更改为 6(折中)。

  • bpo-16965: 2to3 的 execfile 修复器现在以 'rb' 模式打开文件。由 Zackery Spytz 提供补丁。

  • bpo-34966: pydoc 现在不仅支持对最终类中定义的方法的别名,还支持对继承的方法的别名。文档字符串不会为别名重复。

  • bpo-34926: mimetypes.MimeTypes.guess_type() 现在除了接受 URL 字符串外,还接受 path-like object。由 Mayank Asthana 提供补丁。

  • bpo-23831: 向 tkinter.Canvas 小部件添加 moveto() 方法。由 Juliette Monsel 提供补丁。

  • bpo-34941: xml.etree.ElementTree 模块中 Element 类的 find()findtext()findall() 方法现在能够查找 Element 子类实例的子元素。

  • bpo-32680: 现在 smtplib.SMTP 对象始终有一个 sock 属性。

  • bpo-34769: 修复了当事件循环处于调试模式且垃圾收集器在另一个线程中运行时异步生成器未完成的问题。

  • bpo-34936: 修复 tkinter.Spinbox.selection_element() 中的 TclError。由 Juliette Monsel 提供补丁。

  • bpo-34829: 为了与 tkinter.Entry 组件保持一致,向 tkinter.Spinbox 添加了 selection_fromselection_rangeselection_presentselection_to 方法。由 Juliette Monsel 提供补丁。

  • bpo-34911: 向 http.cookiejar.DefaultCookiePolicy 添加了 secure_protocols 参数,以允许调整协议,并默认支持 *wss*(安全的 websocket 协议)。

  • bpo-34922: 修复了 hashlib 模块中 SHAKE 算法的 digest()hexdigest() 方法的整数溢出问题。

  • bpo-34925: bisect 模块中函数的参数解析速度提高了 25%。

  • bpo-34900: 修复了 unittest.TestCase.debug() 在调用带有子测试的测试方法时的问题。由 Bruno Oliveira 提供补丁。

  • bpo-34844: logging.Formatter 增强 - 确保 logging.Formatter 中的样式和 fmt 匹配 - 在每个格式样式类(StrFormatStyle、PercentStyle、StringTemplateStyle)中添加了 validate 方法。 - 此方法在 logging.Formatter 类的构造函数中调用 - 同时在每个样式类的 format 方法中重新引发 KeyError,以便更清楚地表明这是无效格式字段的错误。

  • bpo-34897: 调整 test.support.missing_compiler_executable 检查,以便忽略名义命令名为 "" 的情况。由 Michael Felt 提供补丁。

  • bpo-34871: 修复 inspect 模块在解析可调用对象的 __text_signature__ 时污染 sys.modules 的问题。

  • bpo-34898: 向 gzip.compress 添加 mtime 参数以实现可重现的输出。由 Guo Ci Teo 提交补丁。

  • bpo-28441: 在 Cygwin 和 MinGW 上,确保 sys.executable 始终包含路径中的完整文件名,包括 .exe 后缀(除非它是符号链接)。

  • bpo-34866: 向 cgi.FieldStorage 添加 max_num_fields,通过限制 FieldStorage 创建的 MiniFieldStorage 对象数量来增加 DOS 攻击的难度。

  • bpo-34711: http.server 确保当本地路径以 "/" 结尾且不是目录时报告 HTTPStatus.NOT_FOUND,即使底层操作系统(如 AIX)接受此类路径作为有效文件引用。由 Michael Felt 提交补丁。

  • bpo-34872: 修复 asyncio.Task 的 C 实现中的自我取消问题。

  • bpo-34849: 不在 asyncio 循环迭代中记录等待 selector.select。等待对于任何 asyncio 程序来说都是非常正常的,记录其时间只会给日志添加噪音而不提供任何有用信息。

  • bpo-34022: 环境变量 SOURCE_DATE_EPOCH 不再覆盖 py_compile.compile()invalidation_mode 参数的值,而是决定其默认值。

  • bpo-34819: 在 Executor.map()as_completed() 中使用单调时钟计算超时,以防止系统时钟调整时超时偏离。

  • bpo-34758: 将 .wasm -> application/wasm 添加到识别的文件类型和内容类型头列表中。

  • bpo-34789: xml.sax.make_parser() 现在接受任何可迭代对象作为其 parser_list 参数。由 Andrés Delfino 提交补丁。

  • bpo-34334: 在 QueueHandler 中,清除 LogRecord 中的 exc_text 以防止追踪信息被写入两次。

  • bpo-34687: 在 Windows 上,asyncio 现在默认使用 ProactorEventLoop,而不是 SelectorEventLoop。

  • bpo-5950: 支持在 zipimport 中读取带有归档注释的 zip 文件。

  • bpo-32892: 解析器现在将所有常量表示为 ast.Constant,而不是使用特定的常量 AST 类型(NumStrBytesNameConstantEllipsis)。这些类被视为已弃用,将在未来的 Python 版本中移除。

  • bpo-34728: 当在方法 asyncio.sleepasyncio.waitasyncio.wait_for 中使用 loop 时,添加弃用警告。

  • bpo-34738: 由 distutils 创建的 ZIP 文件现在将包含目录条目。

  • bpo-34659: 向 itertools.accumulate() 添加一个可选的 initial 参数。

  • bpo-29577: 支持在创建 Enums 时使用多个混合类。

  • bpo-34670: 为 TLS 1.3 的握手后认证功能添加 SSLContext.post_handshake_auth 和 SSLSocket.verify_client_post_handshake。

  • bpo-32718: venv 的 Activate.ps1 脚本现在可以与 PowerShell Core 6.1 一起使用,并且在所有操作系统下都可用。

  • bpo-31177: 修复了在使用 reset_mock 时,无法在删除属性的模拟实例上使用的问题。

  • bpo-34672: 添加一个变通方法,使得在某些情况下,musl C 库上的 'Z' time.strftime() 说明符可以工作。

  • bpo-34666: 实现 asyncio.StreamWriter.awriteasyncio.StreamWriter.aclose() 协程。这些方法是为了提供一致的流 API,默认情况下开启控制流。

  • bpo-6721: 在 fork() 过程中获取日志模块常用的内部锁,以避免子进程中的死锁。

  • bpo-34658: 修复了一个罕见的解释器未处理异常状态 SystemError,仅在以下情况下出现:使用 subprocess 与 preexec_fn 同时,os.register_at_fork 注册了 after_parent 处理程序,并且 fork 系统调用失败。

  • bpo-34652: 确保 os.lchmod() 永远不会在 Linux 上定义。

  • bpo-34638: 存储对流读取器的弱引用,以打破读取器和协议之间的强引用循环。这允许在流被删除(垃圾回收)而未调用 close() 时检测并关闭套接字。

  • bpo-34536: Enum._missing_: 如果返回None则抛出 ValueError,如果返回非成员则抛出``TypeError``。

  • bpo-34636: 加快对字节对象中s w和d的多次不匹配字符的重新扫描。(微优化)

  • bpo-24412: 向unittest添加 addModuleCleanup()addClassCleanup() 以支持 setUpModule()setUpClass() 的清理工作。由Lisa Roach提供补丁。

  • bpo-34630: 不在asyncio代码中记录SSL证书错误(连接错误记录已被跳过)。

  • bpo-32490: 防止在 subprocess 异常消息中文件名重复。由Zackery Spytz提供补丁。

  • bpo-34363: dataclasses.asdict()和.astuple()现在能正确处理命名元组。

  • bpo-34625: 更新供应商化的expat库版本至2.2.6。

  • bpo-32270: subprocess模块不再错误地关闭被重定向的文件描述符,即使它们在pass_fds中且不在默认的{0, 1, 2}集合内。

  • bpo-34622: 创建专用的 asyncio.CancelledErrorasyncio.InvalidStateError 和``asyncio.TimeoutError``异常类。使它们继承自 concurrent.futures 包中对应的异常。将``asyncio``异常提取到一个单独的文件中。

  • bpo-34610: 修复了 multiprocessing.managers.DictProxy 的迭代器。

  • bpo-34421: 修复distutils对非ASCII字符串的日志记录。这曾导致Windows上的安装问题。

  • bpo-34604: 修复了由于不可见字符或尾部空格导致的 pwd.getpwnamgrp.getgrnam 错误消息中可能的乱码问题,通过使用字符串表示。由William Grzybowski提供补丁。

  • bpo-30977: 使uuid.UUID使用 __slots__ 以减少其内存占用。基于Wouter Bolsterlee的原始补丁。

  • bpo-34574: OrderedDict迭代器在pickling时不再耗尽。由Sergey Fedoseev提供补丁。

  • bpo-8110: 重构 subprocess 以检查Windows特定模块,而非``sys.platform == 'win32'``

  • bpo-34530: distutils.spawn.find_executable() 现在在没有设置 PATH 环境变量时回退到 os.defpath

  • bpo-34563: 在Windows上,修复multiprocessing.Connection对于非常大的读取的修复:修复_winapi.PeekNamedPipe()和_winapi.ReadFile()对于大于INT_MAX(通常是 2**31-1)的读取。

  • bpo-34558: 修正Lib/ctypes/_aix.py中的拼写错误。

  • bpo-34282: 将 Enum._convert 移动到 EnumMeta._convert_ 并修复枚举成员被父属性遮蔽的问题。

  • bpo-22872: 当队列关闭时,multiprocessing.Queue.put()multiprocessing.Queue.get() 现在分别抛出 ValueError 而不是 AssertionErrorOSError。由Zackery Spytz提供补丁。

  • bpo-34515: 修复 lib2to3.pgen2.tokenize 中解析非ASCII标识符的问题(PEP 3131)。

  • bpo-13312: 避免时间模块的年处理代码在传递非常低的负年值时可能出现的整数下溢(未定义行为)。

  • bpo-34472: 提高 zipfile 中流式文件的兼容性。之前未写入可选签名,不支持某些ZIP应用程序。由Silas Sewell提供补丁。

  • bpo-34454: 修复datetime类型的.fromisoformat()方法在给定非UTF-8可编码的Unicode时崩溃的问题。具体来说,datetime.fromisoformat()现在接受用作分隔符的代理Unicode码点。报告和测试由Alexey Izbyshev提供,由Paul Ganssle提供补丁。

  • bpo-6700: 修复inspect.getsourcelines对于模块级别的帧/回溯的问题。由Vladimir Matveev提供补丁。

  • bpo-34171: 运行 trace 模块不再创建 trace.cover 文件。

  • bpo-34441: 修复当传递一个具有无效 __subclasses__ABC 派生类作为 issubclass() 的第二个参数时崩溃的问题。由 Alexey Izbyshev 提供补丁。

  • bpo-34427: 修复 MutableSequence 子类中 a.extend(a) 导致的无限循环问题。

  • bpo-34412: 使 signal.strsignal() 在 HP-UX 上工作。由 Michael Osipov 提供补丁。

  • bpo-20849: shutil.copytree 现在接受一个新的 dirs_exist_ok 关键字参数。由 Josh Bronson 提供补丁。

  • bpo-31715: 将 .mjs 文件扩展名与 application/javascript MIME 类型关联。

  • bpo-34384: os.readlink() 现在在 Windows 上接受 路径类bytes 对象。

  • bpo-22602: UTF-7 解码器现在对以 "+" 开头的不良序列(如 RFC 2152 中指定)引发 UnicodeDecodeError。由 Zackery Spytz 提供补丁。

  • bpo-2122: mmap.flush() 方法现在在成功时返回 None,在所有平台上的错误时引发异常。

  • bpo-34341: 使用 ZIP64 扩展附加到 ZIP 存档不再增加现有条目的额外字段的大小。

  • bpo-34333: 修复 pathlib.PurePath.with_suffix() 中格式化错误消息时的 %-格式化问题。

  • bpo-18540: imaplib.IMAP4imaplib.IMAP4_SSL 类现在在使用 host 参数的默认值('')时正确解析到本地主机 IP。

  • bpo-26502: 实现 traceback.FrameSummary.__len__() 方法以保持与旧元组 API 的兼容性。

  • bpo-34318: assertRaises(), assertRaisesRegex(), assertWarns()assertWarnsRegex() 如果传递的可调用对象为 None 则不再成功。它们在上下文管理器模式下不再忽略未知关键字参数。自 Python 3.5 以来,在这些情况下会引发 DeprecationWarning。

  • bpo-9372: 弃用 xml.dom.pulldom.DOMEventStreamwsgiref.util.FileWrapperfileinput.FileInput__getitem__() 方法。

  • bpo-33613: 修复 multiprocessing.semaphore_tracker 中的竞态条件,该条件发生在追踪器接收到 SIGINT 信号但尚未注册信号处理程序以忽略它之前。

  • bpo-34248: 当由于操作系统相关错误 dbm.gnu.open()dbm.ndbm.open() 无法打开数据库文件时,在引发的异常中报告文件名。由 Zsolt Cserna 提供补丁。

  • bpo-33089: 添加 math.dist() 以计算两点之间的欧几里得距离。

  • bpo-34246: smtplib.SMTP.send_message() 不再修改 mail_options 参数的内容。补丁由 Pablo S. Blum de Aguiar 提供。

  • bpo-31047: 修复 Windows 上无效路径的 ntpath.abspath。由 Franz Woellert 提供补丁。

  • bpo-32321: 为 functools.reduce 添加纯 Python 回退。由 Robert Wright 提供补丁。

  • bpo-34270: 默认的 asyncio 任务类现在始终有一个名称,可以使用两个新方法 (get_name()set_name()) 获取或设置,并且在 repr() 输出中可见。初始名称也可以使用 asyncio.create_task() 的新 name 关键字参数或事件循环的 create_task() 方法设置。如果未设置初始名称,默认的任务实现会使用单调计数器生成类似 Task-1 的名称。

  • bpo-34263: asyncio 的事件循环不会将超过一天的超时传递给 epoll/select 等。

  • bpo-34035: 修复 zipfile seek() 方法中的几个 AttributeError。由 Mickaël Schoentgen 提供补丁。

  • bpo-32215: 修复 sqlite3 中的性能回归,当 DML 语句出现在 SQL 查询的其余部分不同行时。

  • bpo-34075: 弃用将非 ThreadPoolExecutor 实例传递给 AbstractEventLoop.set_default_executor()

  • bpo-34251: 恢复 msilib.Win64 以保持向后兼容性,因为它已经被 distutilsbdist_msi 命令使用。

  • bpo-19891: 在交互式会话退出时写入历史记录时,忽略由于主目录缺失或不可写导致的错误。补丁由 Anthony Sottile 提供。

  • bpo-33089: 增强了 math.hypot() 以支持超过两个维度。

  • bpo-34228: tracemalloc: PYTHONTRACEMALLOC=0 环境变量和 -X tracemalloc=0 命令行选项现在可以用来在启动时显式禁用 tracemalloc。

  • bpo-13041: 使用 shutil.get_terminal_size()argparse.HelpFormatter 类中正确计算终端宽度。初始由 Zbyszek Jędrzejewski-Szmek 提供补丁。

  • bpo-34213: 允许冻结的数据类有一个名为“object”的字段。之前这与内部使用的“object”冲突。

  • bpo-34052: sqlite3.Connection.create_aggregate(), sqlite3.Connection.create_function(), sqlite3.Connection.set_authorizer(), sqlite3.Connection.set_progress_handler() 方法在传递不可哈希对象作为可调用对象时抛出 TypeError。这些方法现在不会将这样的对象传递给 SQLite API。之前的行为可能导致段错误。由 Sergey Fedoseev 提供补丁。

  • bpo-34197: csv 读取器的 dialect 属性的 skipinitialspace, doublequotestrict 属性现在是 bool 实例,而不是整数 0 或 1。

  • bpo-32788: 在 sqlite3 模块中的 __adapt__()__conform__() 方法中引发的除 TypeError 以外的错误现在会传播给用户。

  • bpo-21446: reload 修复器现在使用 importlib.reload() 而不是已弃用的 imp.reload()

  • bpo-940286: pydoc 的 Helper.showtopic() 方法现在正确打印主题的交叉引用。

  • bpo-34164: base64.b32decode() 可能会因错误的填充引发 UnboundLocalError 或 OverflowError。现在在这些情况下总是引发 base64.Error

  • bpo-33729: 修复了 hashlib 中参数解析的问题。

  • bpo-34097: ZipFile 现在可以通过新的 strict_timestamps 参数压缩早于 1980-01-01 和晚于 2107-12-31 的文件,代价是将时间戳设置为限制值。

  • bpo-34108: 在 2to3 重构中移除了多余的 CR。

  • bpo-34070: 确保在打开文件时 buffering=-1 的情况下,仅检查句柄是否为 tty。

  • bpo-27494: 恢复了 bpo-27494。2to3 现在拒绝在生成器表达式中使用尾随逗号。

  • bpo-33967: functools.singledispatch 现在在没有传递位置参数时抛出 TypeError 而不是 IndexError。

  • bpo-34041: 向 sqlite3.Connection.create_function() 方法添加了 deterministic 参数。由 Sergey Fedoseev 提供补丁。

  • bpo-34056: 确保由 imp.load_module 创建的加载器 shim 总是从其 get_data() 函数返回字节。这修复了 imp.load_module 与基于 PEP 552 哈希的 pycs 一起使用的问题。

  • bpo-34054: multiprocessing 模块现在使用单调时钟 time.monotonic() 而不是系统时钟 time.time() 来实现超时。

  • bpo-34043: 当使用 gzip 时,优化 tarfile 解压性能约 15%。

  • bpo-34044: subprocess.Popen 现在复制 startupinfo 参数以保持其不变:它将修改副本,因此同一个 STARTUPINFO 对象可以被多次使用。

  • bpo-34010: 修复了使用 tarfile 读取流时的性能回归。缓冲读取应使用列表,而不是追加到字节对象。

  • bpo-34019: webbrowser: 使用 webbrowser 模块打开新 URL 时,正确传递参数给 Opera 浏览器。由 Bumsik Kim 提供补丁。

  • bpo-34003: csv.DictReader 现在创建 dicts 而不是 OrderedDicts。补丁由 Michael Selik 提供。

  • bpo-33978: 在通过 fileConfig 和 dictConfig 重新配置之前关闭现有的日志处理程序。补丁由 Karthikeyan Singaravelan 提供。

  • bpo-14117: 对turtledemo进行小幅调整。'wikipedia'示例现更名为'rosette',以更准确描述其绘制内容。'penrose'的打印输出已减少。'tree'的'1024'输出已被移除。

  • bpo-33974: 修复了将包含特殊字符 ", \, {, }\n 的字符串列表或元组作为选项传递给 ttk 部件的问题。

  • bpo-27500: 修复getaddrinfo以正确解析IPv6地址。

  • bpo-24567: 改进random.choices()以处理偶尔会触发IndexError的次正规输入权重。

  • bpo-33871: 修复了 os.readv(), os.writev(), os.preadv()os.pwritev() 以及 os.sendfile() (在基于BSD的操作系统和macOS上,带有 headerstrailers 参数时) 中的整数溢出问题。

  • bpo-25007: 为zlib压缩器和解压缩器添加 copy.copy()copy.deepcopy() 支持。补丁由Zackery Spytz提供。

  • bpo-33929: 多进程处理:修复了multiprocessing.popen_spawn_win32中Popen的一个竞态条件。子进程现在复制管道的读取端而不是“窃取”它。之前,子进程会“窃取”管道的读取端,但如果子进程在从父进程窃取句柄之前被终止,则会泄漏一个句柄。

  • bpo-33899: Tokenize模块现在在提供的输入没有尾随换行符时隐式发出NEWLINE。此行为现在与C tokenizer内部的行为匹配。由Ammar Askar贡献。

  • bpo-33897: 向logging.basicConfig()添加了一个'force'关键字参数。

  • bpo-33695: shutil.copytree() 使用 os.scandir() 函数以及所有依赖于它的复制函数都使用了缓存的 os.stat() 值。在Linux上复制一个包含8000个文件的目录时,速度提升约+9%,在Windows上约+20%,在Windows SMB共享上约+30%。同时,os.stat() 系统调用的次数减少了38%,使得 shutil.copytree() 在网络文件系统上特别快。(由Giampaolo Rodola'在 bpo-33695 中贡献。)

  • bpo-33916: bz2和lzma:当Decompressor.__init__()被调用两次时,释放旧的锁以防止内存泄漏。

  • bpo-32568: 使select.epoll()及其文档在 sizehintflags 方面保持一致。

  • bpo-33833: 修复了asyncio中的一个bug,该bug导致ProactorSocketTransport在写操作期间强制关闭时会记录AssertionError。

  • bpo-33663: 在将内容长度放入头部之前,将其转换为字符串。

  • bpo-33721: os.path 函数如 exists(), lexists(), isdir(), isfile(), islink(), 和 ismount(),以及 pathlib.Path 方法如 exists(), is_dir(), is_file(), is_mount(), is_symlink(), is_block_device(), is_char_device(), is_fifo(), is_socket() 现在对于在操作系统级别无法表示的字符或字节的路径返回 False,而不是引发 ValueError 或其子类 UnicodeEncodeErrorUnicodeDecodeError

  • bpo-26544: 修正了 platform.libc_ver() 的实现。它几乎总是为glibc返回版本'2.9'。

  • bpo-33843: 移除了已弃用的 cgi.escape, cgi.parse_qscgi.parse_qsl

  • bpo-33842: 移除了自Python 3.3以来已弃用的 tarfile.filemode

  • bpo-30167: 如果设置了PYTHONSTARTUP,防止site.main()异常。由Steve Weber提供补丁。

  • bpo-33805: 当未指定InitVar时,改进dataclasses.replace()的错误消息

  • bpo-33687: 如果给定或解码了模式,修复 uu.decode()os.chmod() 的调用。由Timo Furrer提供补丁。

  • bpo-33812: 对于tzinfo非None但d.tzinfo.utcoffset(d)返回None的Datetime实例d,现在astimezone()方法将其视为naive。

  • bpo-32108: 在configparser中,当节被分配给自己时不清除它。

  • bpo-27397: 使email模块正确处理长度无效的base64字符串。

  • bpo-33578: 实现多字节编码器/解码器状态方法

  • bpo-30805: 避免调试日志记录中的竞态条件

  • bpo-33476: 当地址组缺少最后的';'时,修复_header_value_parser.py。由Enrique Perez-Terron贡献

  • bpo-33694: asyncio: 修复在使用ProactorEventLoop时,pause_reading()/resume_reading()导致数据丢失的竞态条件。

  • bpo-32493: 在 configure.ac 中更正对 uuid_enc_be 可用性的测试。由Michael Felt提供补丁。

  • bpo-33792: 添加asyncio.WindowsSelectorEventLoopPolicy和asyncio.WindowsProactorEventLoopPolicy。

  • bpo-33274: W3C DOM Level 1指定Element.removeAttributeNode()的返回值为"The Attr node that was removed." xml.dom.minidom现在符合这一要求。

  • bpo-33778: 更新 unicodedata 的数据库至Unicode版本11.0.0。

  • bpo-33165: 为日志记录调用添加了stacklevel参数,以允许使用包装器/辅助函数进行日志记录API的调用。

  • bpo-33770: 针对长度无效的编码输入,改进base64异常消息

  • bpo-33769: asyncio/start_tls: 修复错误消息;在未处理错误的情况下取消回调;如果SSLTransport被中止,则标记为已关闭。

  • bpo-33767: 在 mmap.mmap 对象上执行时,连接(+)和重复(*)序列操作现在会引发 TypeError 而不是 SystemError。由 Zackery Spytz 提供补丁。

  • bpo-33734: asyncio/ssl:修复 AttributeError,增加默认的握手超时时间

  • bpo-31014: 修复了当用户在 BROWSER 环境变量中指定条目路径时为 webbrowser 创建控制器的问题。基于 John Still 的补丁。

  • bpo-2504: 添加 gettext.pgettext() 及其变体。

  • bpo-33197: 为 _ParameterKind 添加描述属性

  • bpo-32751: 当由于超时取消任务时,asyncio.wait_for() 现在将等待直到取消完成。

  • bpo-32684: 修复 gather 即使在 return_exceptions 的情况下也能传播自身的取消。

  • bpo-33654: 在 SSLTransport.set_protocol() 中支持协议类型切换。

  • bpo-33674: 尽早暂停传输,以进一步降低在 connection_made() 之前调用 data_received() 的风险。

  • bpo-33671: shutil.copyfile()shutil.copy()shutil.copy2()shutil.copytree()shutil.move() 在 Linux 和 macOS 上使用平台特定的快速复制系统调用,以更高效地复制文件。在 Windows 上,shutil.copyfile() 使用更大的默认缓冲区大小(1 MiB 而不是 16 KiB),并且使用了基于 memoryview()shutil.copyfileobj() 变体。复制 512MiB 文件的速度在 Linux 上提高了约 +26%,在 macOS 上提高了 +50%,在 Windows 上提高了 +40%。同时,消耗的 CPU 周期大大减少。(由 Giampaolo Rodola' 在 bpo-25427 中贡献。)

  • bpo-33674: 修复 asyncio.sslproto 中 SSLProtocol.connection_made() 的竞态条件:立即开始握手而不是使用 call_soon()。之前,data_received() 可能在握手开始前被调用,导致握手挂起或失败。

  • bpo-31647: 修复了在 _SelectorSocketTransport 已经关闭后调用 write_eof() 会引发 AttributeError 的错误。

  • bpo-32610: 使 asyncio.all_tasks() 仅返回待处理的任务。

  • bpo-32410: 在 sendfile 回退代码中避免阻塞文件 IO。

  • bpo-33469: 修复了使用 run_in_executor 后关闭循环时引发的 RuntimeError。

  • bpo-33672: 修复 Task.__repr__ 与 Cython 的虚假协程一起使用时崩溃的问题。

  • bpo-33654: 修复 transport.set_protocol() 以支持在 asyncio.Protocol 和 asyncio.BufferedProtocol 之间切换。修复 loop.start_tls() 以支持 asyncio.BufferedProtocols。

  • bpo-33652: 类型变量和下标泛型的 pickle 现在具有未来兼容性,并与旧版 Python 兼容。

  • bpo-32493: 修复了 FreeBSD 上的 uuid.uuid1()

  • bpo-33238: 将 InvalidStateError 添加到 concurrent.futures。如果 futures 不是待处理或运行状态,Future.set_resultFuture.set_exception 现在会引发 InvalidStateError。由 Jason Haydaman 提供补丁。

  • bpo-33618: 完成并记录与 OpenSSL 1.1.1 的初步和实验性 TLS 1.3 支持。

  • bpo-33625: 如果这些函数的可重入变体可用,则在 grp.getgrnamgrp.getgrgidpwd.getpwnampwd.getpwuid 上释放 GIL。由 William Grzybowski 提供补丁。

  • bpo-33623: 修复在 __del__ 中创建 asyncio.Future 时可能出现的 SIGSGV。

  • bpo-11874: 当将用法分解为可包装部分时使用更好的正则表达式。避免来自自定义 metavar 字符串的错误断言错误。

  • bpo-30877: 修复了 JSON 解码器 Python 实现中的一个错误,该错误阻止了在完成解码后清除已解析字符串的缓存。基于 c-fos 的补丁。

  • bpo-33604: 移除标记为在 3.8 中移除的 HMAC 默认 md5(原计划在 3.6 中移除,PR 7062 中推迟到 3.8)。

  • bpo-33582: 为 inspect.formatargspec 发出弃用警告。

  • bpo-21145: 添加 functools.cached_property 装饰器,用于计算属性,这些属性在实例的生命周期内被缓存。

  • bpo-33570: 更改 TLS 1.3 密码套件设置,以兼容 OpenSSL 1.1.1-pre6 及更新版本。OpenSSL 1.1.1 将默认启用 TLS 1.3 密码。

  • bpo-28556: 不再简化 typing.Union 的参数。现在 Union[Manager, Employee] 在运行时不会简化为 Employee。之前的简化导致了一些错误,并限制了内省的可能性。

  • bpo-12486: tokenize.generate_tokens() 现在被记录为一个公共 API,用于对 Unicode 字符串进行分词。它之前存在但未被记录。

  • bpo-33540: 向 socketserverForkingMixInThreadingMixIn 类添加一个新的 block_on_close 类属性。

  • bpo-33548: tempfile._candidate_tempdir_list 应考虑常见的 TEMP 位置

  • bpo-33109: argparse 子解析器默认再次不需要,恢复了在 3.7.0a2 中由 bpo-26510 引入的行为变化。

  • bpo-33541: 移除未使用的私有方法 _strptime.LocaleTime.__pad``(又名 ``_LocaleTime__pad)。

  • bpo-33536: dataclasses.make_dataclass 现在检查无效的字段名和重复的字段。此外,添加了对无效字段规范的检查。

  • bpo-33542: 防止 uuid.get_node 在 Windows 上使用 DUID 而不是 MAC。由 Zvi Effron 提供补丁

  • bpo-26819: 修复 Windows proactor 事件循环中 ReadTransport.resume_reading 的竞争条件。

  • 修复当 ClassVar 作为字符串前向引用提供时 typing.get_type_hints() 的失败。

  • bpo-33516: unittest.mock.MagicMock 现在支持 __round__ 魔术方法。

  • bpo-28612: 向 urllib 的 RobotFileParser 添加了对站点地图的支持,作为 RobotFileParser.site_maps()。补丁由 Lady Red 提供,基于 Peter Wirtz 的补丁。

  • bpo-28167: 移除自3.5版起已弃用的platform.linux_distribution。

  • bpo-33504: 将 configparser 的默认字典实现从 collections.OrderedDict 切换为标准 dict 类型。

  • bpo-33505: 通过重新排序if检查优化asyncio.ensure_future():速度提升1.17倍。

  • bpo-33497: 向cgi.parse_multipart添加errors参数,并使FieldStorage中的编码使用给定的errors(Twisted所需)。由Amber Brown提供补丁。

  • bpo-29235: cProfile.Profile 类现在可用作上下文管理器。补丁由Scott Sanderson提供。

  • bpo-33495: 更改dataclasses.Fields的repr以使用其每个成员的repr,而非str。这使得每个字段实际代表的内容更加清晰。这对于'type'成员尤为明显。

  • bpo-26103: 修正 inspect.isdatadescriptor 以查找 __set____delete__。由Aaron Hall提供补丁。

  • bpo-29209: 移除了 XMLParser 构造函数的 doctype() 方法和 html 参数。子类中定义的 doctype() 方法将不再被调用。ElementTree 模块中已弃用的方法 getchildren()getiterator() 现在发出 DeprecationWarning 而非 PendingDeprecationWarning

  • bpo-33453: 修复dataclasses以在使用字面字符串类型注解或使用PEP 563“推迟的注解评估”时工作。仅为ClassVar("ClassVar"和"typing.ClassVar")和InitVar("InitVar"和"dataclasses.InitVar")检测特定的字符串前缀。

  • bpo-28556: typing模块中的小修复:向 NamedTuple.__new__ 添加注解,在``Generic.__new__``中传递 *args**kwds。原始PR由Paulius Šarka和Chad Dombrova提供。

  • bpo-33365: 如果在 http.client 中将 debuglevel 设置为>0,除了头键外还打印头值。补丁由Marco Strigl提供。

  • bpo-20087: 更新了支持glibc 2.27地区设置的别名映射。

  • bpo-33422: 修复在pydoc上查找字节/字符串字面量时尾随引号被删除的问题。由Andrés Delfino提供补丁。

  • bpo-28167: 函数 platform.linux_distributionplatform.dist 现在触发``DeprecationWarning``,并已被标记为在Python 3.8中移除。

  • bpo-33281: 修复macOS上ctypes.util.find_library的回归问题。

  • bpo-33311: 由cgitb生成的文本和html输出现在如果当前调用直接在模块中进行时不会显示括号。由Stéphane Blondon提供补丁。

  • bpo-27300: tempfile*中的文件类现在接受一个 *errors 参数,补充了已经存在的 encoding 参数。由Stephan Hohe提供补丁。

  • bpo-32933: unittest.mock.mock_open() 现在支持对文件内容进行迭代。由Tony Flury提供补丁。

  • bpo-33217: 当在Enum类和Enum成员中查找非Enum对象时,抛出 TypeError

  • bpo-33197: 更新构造无效inspect.Parameters时的错误信息。由Donghee Na提供补丁。

  • bpo-33383: 修复了当使用单个参数调用 dbm.ndbm 数据库对象的get()方法时崩溃的问题。

  • bpo-33375: warnings模块现在从代码对象而非帧的全局命名空间找到与警告相关联的Python文件。这与tracebacks和pdb如何查找文件名一致,应该能更好地处理动态执行的代码。

  • bpo-33336: imaplib``现在允许在 ``IMAP4.uid() 中使用 MOVE 命令(RFC 6851: IMAP MOVE扩展)并可能作为 IMAP4 对象支持的方法名称。

  • bpo-32455: 向 dis.stack_effect() 添加了 jump 参数。

  • bpo-27485: 重命名并弃用 urllib.parse() 中未文档化的函数。

  • bpo-33332: 添加 signal.valid_signals() 以暴露POSIX sigfillset()功能。

  • bpo-33251: 修复了 ConfigParser.items(),使其不再将通过 vars() 传递的键值对包含在结果输出中。

  • bpo-33329: 修复了在新版 glibc 上的多进程回归问题。

  • bpo-33334: dis.stack_effect() 现在支持所有定义的 opcode,包括 NOP 和 EXTENDED_ARG。

  • bpo-991266: 修复了 http.cookies.SimpleCookieComment 属性的引用问题。

  • bpo-33131: 将捆绑的 pip 版本升级至 10.0.1。

  • bpo-33308: 修复了 parser 模块在将 ST 对象转换为元组或列表树时,当 line_info=Falsecol_info=True 时的崩溃问题。

  • bpo-23403: lib2to3 现在对预计算的语法使用 pickle 协议 4。

  • bpo-33266: lib2to3 现在能识别 rf'...' 字符串。

  • bpo-11594: 确保在使用 lib2to3 时尊重行尾。

  • bpo-33254: 让 importlib.resources.contents()importlib.abc.ResourceReader.contents() 返回一个 iterable 而不是 iterator

  • bpo-33265: contextlib.ExitStackcontextlib.AsyncExitStack 现在使用方法而不是包装函数来处理退出回调。

  • bpo-33263: 修复了 _SelectorSocketTransport 中的文件描述符泄漏问题。由 Vlad Starostin 提供补丁。

  • bpo-33256: 修复了 cgitb.html() 生成的 html 中 <module> 调用的显示问题。补丁由 Stéphane Blondon 提供。

  • bpo-33144: 优化了 random.Random() 及其子类机制,仅在类/子类实例化时检查一次其 getrandbits() 方法是否可以被其他方法(包括 randrange())依赖,用于生成任意大的随机整数。由 Wolfgang Maier 提供补丁。

  • bpo-33185: 修复了使用 -m 开关运行 pydoc 时的回归问题。(此回归问题由解决 bpo-33053 在 3.7.0b3 版本引入)

    此修复还改变了 pydoc,使其在必要时将 os.getcwd() 添加到 sys.path 中,而不是添加 "."

  • bpo-29613: 在 http.cookies 模块中添加了对 SameSite cookie 标志的支持。

  • bpo-33169: 当调用 importlib.machinery.invalidate_caches() 时,删除 sys.path_importer_cache 中的 None 条目。

  • bpo-33203: random.Random.choice() 现在对于空序列会一致地引发 IndexError,即使是从没有 getrandbits() 实现的子类中调用也是如此。

  • bpo-33224: 为 PEP 479 更新 difflib.mdiff()。将生成器中未捕获的 StopIteration 转换为 return 语句。

  • bpo-33209: 在 pickle.Pickler.dump() 的 C 实现结束时结束帧。

  • bpo-32861: urllib.robotparser 的 __str__ 表示现在包括通配符条目和 "Crawl-delay" 和 "Request-rate" 字段。还移除了被附加到字符串末尾的额外换行符。由 Michael Lazar 提供补丁。

  • bpo-23403: pickle 中的 DEFAULT_PROTOCOL 被提升到 4。协议 4 在 PEP 3154 中有描述,自 Python 3.4 起可用。与 Python 3.0 中引入的协议 3 相比,它提供了更好的性能和更小的尺寸。

  • bpo-20104: 改进了 os.posix_spawn() 中的错误处理并修复了一个引用泄漏。

  • bpo-33106: 从只读 dbm 数据库中删除键会引发模块特定的错误,而不是 KeyError。

  • bpo-33175: 在数据类中,Field.__set_name__ 现在查找默认值的类上的 __set_name__ 特殊方法,而不是实例上的。

  • bpo-32380: 创建 functools.singledispatchmethod 以支持对描述符和方法的通用单分派。

  • bpo-33141: 如果 Field 对象有自己的 __set_name__,则让它们将 __set_name__ 传递给它们的默认值。

  • bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。

  • bpo-32873: 通过复制和pickle操作将类型变量和特殊类型形式视为不可变。这修复了几个小问题和不一致性,并提高了与Python 3.6的向后兼容性。

  • bpo-33134: 在计算数据类的__hash__时,使用查找表包含返回__hash__值的函数。这比查找字符串然后测试该字符串以决定做什么有所改进。

  • bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。

  • bpo-32505: 如果数据类的成员变量是Field类型但没有类型注解,则抛出TypeError。

  • bpo-33078: 修复了由于测试依赖sem_getvalue而在OSX上导致的失败。

  • bpo-33116: 将'Field'添加到dataclasses.__all__中。

  • bpo-32896: 修复了一个错误,即当子类化一个使用default_factory字段的数据类时会生成一个不正确的类。

  • bpo-33100: 数据类:如果一个字段有一个默认值是MemberDescriptorType,那么它是因为该字段在__slots__中,而不是一个实际的默认值。

  • bpo-32953: 如果一个非数据类继承自一个冻结的数据类,允许向派生类添加属性。只有来自冻结数据类的属性不能被赋值。要求层次结构中的所有数据类要么全部冻结,要么全部非冻结。

  • bpo-33097: 在解释器关闭期间调用 executor.submit 时抛出RuntimeError。

  • bpo-32968: 涉及Fraction和float的模和地板除法应返回float。

  • bpo-33061: 在typing.py的 __all__ 中添加缺失的 NoReturn

  • bpo-33078: 修复当发生pickling错误时multiprocessing.Queue中的大小处理。

  • bpo-33064: lib2to3现在正确支持函数签名中 *args**kwargs 后的尾随逗号。

  • bpo-33056: 修复concurrent.futures.ProcessPoolExecutor中泄漏的文件描述符未正确关闭的问题。

  • bpo-33021: 在fstat()调用期间释放GIL,避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。

  • bpo-31804: 避免在标准流在退出时被关闭或为None时,multiprocessing.Process失败。

  • bpo-33034: 当使用 urlparse()urlsplit() 将port属性转换为非整数值时,提供明确的错误消息。由Matt Eaton提供补丁。

  • bpo-30249: 改进struct.unpack_from()在缓冲区大小和偏移量问题上的异常消息。

  • bpo-33037: 在SSL传输关闭后跳过发送/接收数据。

  • bpo-27683: 修复 ipaddress 中的一个回归问题,当网络由包含整数掩码且仅剩1位地址的元组构造时,hosts() 的结果为空。

  • bpo-22674: 在signal模块中添加strsignal()函数,该函数返回给定信号的系统描述,如同strsignal(3)返回的那样。

  • bpo-32999: 修复 ABC.__subclasscheck__(cls, subclass) 的C实现,在 subclass 不是类型对象时崩溃的问题。

  • bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。

  • bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。

  • bpo-32056: 改进在模块 aifcwavesunau 中读取音频文件时,对于无效通道数和样本宽度引发的异常。

  • bpo-32970: 改进MAKE_FUNCTION指令的反汇编。

  • bpo-32844: 修复在subprocess中如果另一个低描述符被关闭时,将低描述符(0或1)错误重定向到stderr的问题。

  • bpo-32960: 对于数据类,禁止从非冻结类继承冻结类,也禁止从冻结类继承非冻结类。这一限制将在未来放宽。

  • bpo-32713: 修复tarfile.itn对超出界限的浮点值的处理。由Joffrey Fuhrer提供补丁。

  • bpo-32257: ssl模块现在包含OP_NO_RENEGOTIATION常量,适用于OpenSSL 1.1.0h或1.1.1版本。

  • bpo-32951: 现在禁止直接实例化SSLSocket和SSLObject对象。这些构造函数从未被记录、测试或设计为公共构造函数。用户应该使用ssl.wrap_socket()或SSLContext。

  • bpo-32929: 移除了三态参数"hash",并添加了布尔型"unsafe_hash"。如果unsafe_hash为True,添加一个__hash__函数,但如果__hash__已存在,则抛出TypeError。如果unsafe_hash为False,根据eq=和frozen=的值添加__hash__。unsafe_hash=False的行为与旧的hash=None行为相同。unsafe_hash=False是默认值,就像hash=None曾经是默认值一样。

  • bpo-32947: 添加OP_ENABLE_MIDDLEBOX_COMPAT和测试解决方法,以便未来与OpenSSL 1.1.1兼容的TLSv1.3。

  • bpo-32146: 记录了冻结可执行文件与multiprocessing中spawn和forkserver启动方法之间的交互。

  • bpo-30622: ssl模块现在能检测到LibreSSL中缺少的NPN支持。

  • bpo-32922: dbm.open()现在使用文件系统编码而不是默认编码对文件名进行编码。

  • bpo-32759: 在multiprocessing.heap中释放未使用的竞技场。

  • bpo-32859: 在 os.dup2 中,不再每次调用时检查 dup3 系统调用是否存在。

  • bpo-32556: nt._getfinalpathname、nt._getvolumepathname和nt._getdiskusage现在能正确地从字节转换。

  • bpo-21060: 将setup.py upload中令人困惑的消息从"No dist file created in earlier command"重写为更有帮助的"Must create and upload files in one command"。

  • bpo-32857: 在 tkinter 中,after_cancel(None) 现在会引发 ValueError 异常,而不是取消第一个预定的函数。由Cheryl Sabella提供补丁。

  • bpo-32852: 确保在运行trace时sys.argv保持为列表。

  • bpo-31333: 添加了 _abc 模块。这是一个加速模块,为 abc 中的各种函数和方法提供了C语言实现。创建ABC子类及调用 isinstanceissubclass 与ABC子类的速度提高了1.5倍。此外,这使得Python的启动速度提高了10%。

    注意,新实现隐藏了内部注册表和缓存,之前可以通过私有属性 _abc_registry_abc_cache_abc_negative_cache 访问。有三个调试辅助方法可以替代使用:_dump_registry_abc_registry_clear_abc_caches_clear

  • bpo-32841: 修复了 asyncio.Condition 问题,该问题在通知并取消条件锁后默默忽略了取消。由Bar Harel提供补丁。

  • bpo-32819: ssl.match_hostname() 已被简化,不再依赖 re 和 ipaddress 模块处理通配符和IP地址。对于无效通配符的错误报告已改进。

  • bpo-19675: 如果初始化失败,multiprocessing.Pool 不再泄漏进程。

  • bpo-32394: socket: 在旧版本Windows运行时移除TCP_FASTOPEN、TCP_KEEPCNT、TCP_KEEPIDLE、TCP_KEEPINTVL标志。

  • bpo-31787: 修复了多个模块中 __init__() 方法的内存泄漏问题。(由Oren Milman贡献)

  • bpo-30157: 修复了在只有最后一个字段被引用时,csv.Sniffer.sniff() 中猜测引用和分隔符的问题。由Jake Davis提供补丁。

  • bpo-30688: 在正则表达式中添加了对 \N{name} 转义的支持。基于Jonathan Eunice的补丁。

  • bpo-32792: collections.ChainMap() 保留了底层映射的顺序。

  • bpo-32775: fnmatch.translate() 不再生成包含集合操作的模式。以'['开头或包含'--'、'&&'、'~~'或'||'的集合在未来版本的正则表达式中将被不同解释。目前它们会发出警告。fnmatch.translate() 现在避免意外生成包含此类集合的模式。

  • bpo-32622: 为Windows proactor事件循环实现原生快速发送文件功能。

  • bpo-32777: 修复了在POSIX系统的子进程中,当标记文件描述符为可继承时,subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。

  • bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在,在支持dl的平台上,共享扩展已明确链接到libdl。

  • bpo-32749: 使用'r'标志打开的 dbm.dumb 数据库现在变为只读。使用'r'和'w'标志的 dbm.dumb.open() 如果数据库不存在,将不再创建数据库。

  • bpo-32741: 实现 asyncio.TimerHandle.when() 方法。

  • bpo-32691: 在使用pdb运行模块时使用mod_spec.parent。

  • bpo-32734: 修复了 asyncio.Lock() 的安全问题,该问题允许多次获取和锁定同一个锁,而锁并未释放。由Bar Harel提供补丁。

  • bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。

  • bpo-31453: 添加TLSVersion常量和SSLContext.maximum_version / minimum_version属性。新API封装了OpenSSL 1.1 https://web.archive.org/web/20180309043602/https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html 的特性。

  • bpo-24334: 清理了ssl模块的内部实现细节。SSLSocket减少了一层间接引用。所有者与会话信息现在由SSLSocket和SSLObject的构造函数处理。通道绑定实现已被简化。

  • bpo-31848: 修复Aifc_read.initfp()中当SSND块未找到时的错误处理。补丁由Zackery Spytz提供。

  • bpo-32585: 向 tkinter.ttk 添加Ttk spinbox小部件。由Alan D Moore提供补丁。

  • bpo-32512: profile 命令行界面接受 -m module_name 作为脚本路径的替代选项。

  • bpo-8525: 现在,一个类型上的help()会显示内置的子类。这主要是为了帮助通知更具体的异常子类。

    由Sanyam Khurana提供补丁。

  • bpo-31639: http.server现在公开了一个ThreadingHTTPServer类,并在使用 -m 运行模块时使用它,以应对web浏览器预打开套接字的情况。

  • bpo-29877: compileall: 仅在需要时导入ProcessPoolExecutor,防止在资源低的平台上挂起

  • bpo-32221: 现在,返回包含IPv6地址的元组的各种函数省略了 %scope 部分,因为相同的信息已经在 scopeid 元组项中编码。特别是这加快了 socket.recvfrom() 在接收多播数据包时的速度,因为省略了无用的网络接口名称解析。

  • bpo-32147: binascii.unhexlify() 现在快了2倍。由Sergey Fedoseev提供补丁。

  • bpo-30693: TarFile类现在以一种可重复的方式递归目录。

  • bpo-30693: ZipFile类现在以一种可重复的方式递归目录。

  • bpo-31680: 添加了 curses.ncurses_version

  • bpo-31908: 修复了 trace 模块命令行工具的封面文件输出。之前仅在使用了 --missing 选项时才会发出封面文件。由Michael Selik提供补丁。

  • bpo-31608: 如果 collections.deque 子类从 __new__ 返回非队列,现在会引发一个``TypeError``而不是崩溃。由Oren Milman提供补丁。

  • bpo-31425: 添加了对AF_QIPCRTR地址族套接字的支持,这是Linux内核支持的。这用于与运行在Qualcomm设备上的服务(如GPS或无线电)通信。由Bjorn Andersson提供补丁。

  • bpo-22005: 实现了对Python 2腌制的 datetimedatetime 实例的解腌。应该使用 encoding='latin1' 以成功解码。

  • bpo-27645: 如果底层的SQLite库版本为3.6.11或更高,sqlite3.Connection 现在公开了一个 backup 方法。由Lele Gaifax提供补丁。

  • bpo-16865: 在 ctypes 中支持>=2GiB的数组。由Segev Finer提供补丁。

  • bpo-31508: 移除了 tkinter.ttk.Treeview.selection 中对参数的支持。这在3.6中已被弃用。使用像 selection_set 这样的专门方法来更改选择。

  • bpo-29456: 修复韩文音节标准化中的漏洞:u1176、u11a7和u11c3。

文档

  • bpo-21257: 文档化 http.client.parse_headers()

  • bpo-34764: 改进了iter()带有第二个哨兵参数的示例。

  • bpo-35564: 为了符合Sphinx 2.0,明确设置了conf.py中的master_doc变量。

  • bpo-35511: 指定了profile.Profile类不支持enable或disable方法。并且详细说明了Profile对象作为上下文管理器仅在cProfile模块中支持。

  • bpo-10536: 增强gettext文档。由Éric Araujo提供补丁。

  • bpo-35089: 移除了对 typing.iotyping.re 的提及。它们的类型应该直接从 ``typing``导入。

  • bpo-35038: 修复了关于frame对象中不存在的 f_restricted 属性的文档。由Stéphane Wirtel提供补丁。

  • bpo-35042: 用pep角色替换PEP XYZ,并允许直接链接到PEPs。

  • bpo-35044: 修复了文档中使用 exc 角色指向适当异常的错误。由Stéphane Wirtel提供补丁。

  • bpo-35035: 将 email.utils 的文档重命名为 email.utils.rst

  • bpo-34967: 使用app.add_object_type()代替已弃用的Sphinx函数app.description_unit()。

  • bpo-34913: 添加了关于gzip模块新命令行界面的文档。

  • bpo-32174: chm文档在某些MBCS Windows系统上正确显示非ASCII字符。

  • bpo-11233: 为文档创建可用性指令。原始由Georg Brandl提供补丁。

  • bpo-34790: 文档说明将协程传递给 asyncio.wait() 可能会引起混淆。

  • bpo-34552: 明确说明 == 操作符有时等同于 is<<=>>= 操作符仅在它们有意义的地方定义。

  • bpo-28617: 修复了 stdtypes 文档中关于支持成员资格测试的类型的错误信息。

  • bpo-20177: 将 datetime.date.fromtimestamp 迁移到 Argument Clinic。由 Tim Hoffmann 提供补丁。

  • bpo-34065: 修复了 basicConfig 文档标记语法的错误写法。

  • bpo-33460: 在教程第3章中,用正确的错误代码替换了省略号。

  • bpo-33847: 在索引中添加 '@' 操作符条目。

  • bpo-33409: 澄清了 PEP 538 的 PYTHONCOERCECLOCALE 和 PEP 540 的 PYTHONUTF8 模式之间的关系。

  • bpo-33197: 在 ParameterKind.description 的文档中添加了 versionadded 标签。

  • bpo-17045: 改进了 PyTypeObject 的 C-API 文档。包括添加了几个快速参考表和许多缺失的槽/类型定义条目。现有的条目也被清理,格式更加一致。

  • bpo-33736: 改进了 asyncio.open_connection()asyncio.start_server() 及其 UNIX 套接字对应函数的文档。

  • bpo-23859: 文档说明 asyncio.wait() 在超时时不会取消它的 futures。

  • bpo-32436: 文档说明 PEP 567 对 asyncio 的更改。

  • bpo-33604: 将 HMAC md5 的默认警告更新为 DeprecationWarning,移除时间推迟到 3.8。

  • bpo-33594: 在各自的文档字符串中将 getargspecfrom_functionfrom_builtin 标记为已弃用,并在 DeprecationWarning 消息中包含弃用版本。

  • bpo-33503: 修复损坏的 pypi 链接

  • bpo-33421: 为 typing.AsyncContextManager 添加缺失的文档。

  • bpo-33487: 当传递 buffering=None 时,BZ2file 现在会发出 DeprecationWarning,弃用消息和文档现在也明确说明自 3.0 起已弃用。

  • bpo-33378: 为 https://docs.python.org/3/ 添加韩语语言切换器。

  • bpo-33276: 澄清模块上的 __path__ 属性不能是任意值。

  • bpo-33201: 现代化编写 C 扩展类型的文档。

  • bpo-33195: 在 c-api/arg 文档中弃用 Py_UNICODE 的使用。自 Python 3.3 起,Py_UNICODE 相关 API 已被弃用,但文档中遗漏了这一点。

  • bpo-33126: 文档化 PyBuffer_ToContiguous()。

  • bpo-27212: 修改 islice() 函数示例代码的文档说明,使其在起始索引前消耗初始值。

  • bpo-28247: 更新 zipapp 文档,描述如何制作独立应用程序。

  • bpo-18802: ipaddress 的文档更改。由 Jon Foster 和 Berker Peksag 提供补丁。

  • bpo-27428: 更新文档以澄清 WindowsRegistryFinder 实现了 MetaPathFinder。(补丁由 Himanshu Lakhara 提供)

  • bpo-28124: ssl 模块函数 ssl.wrap_socket() 已被弱化并弃用,推荐使用更安全高效的 SSLContext.wrap_socket() 方法。

  • bpo-17232: 澄清 -O 和 -OO 的文档。由 Terry Reedy 提供补丁。

  • bpo-32436: 为 contextvars 模块(PEP 567)添加文档。

  • bpo-32800: 更新 xml 默认命名空间的 w3c 文档链接。

  • bpo-11015: 更新 test.support 文档。

  • bpo-32613: 更新 faq/windows.html,使用 PEP 397 中的 py 命令而非 python。

  • bpo-8722: 文档化当属性 get() 方法引发 AttributeError__getattr__() 的行为。

  • bpo-32614: 修改文档中的正则表达式示例,使用原始字符串以防止 DeprecationWarning,并在正则表达式 HOWTO 中添加文本以突出弃用。

  • bpo-20709: 删除解释 os.utime() 在 Windows 下不支持目录作为路径的段落。由 Jan-Philip Gehrcke 提供补丁。

  • bpo-32722: 移除生成器表达式教程中的不良示例。由 Stéphane Wirtel 提供补丁。

  • bpo-31972: 改进 pathlib.PurePath 子类的文档字符串。

  • bpo-30607: 在构建文档时使用外部化的 python-docs-theme 包。

  • bpo-8243: 添加关于 curses.addch 和 curses.addstr 在窗口或 pad 外部写入时的异常行为的注释。

  • bpo-32337: 更新与 dict 顺序相关的文档。

  • bpo-25041: 在 socket 模块中记录 AF_PACKET

  • bpo-31432: 澄清 ssl.SSLContext.verify_mode 的 CERT_NONE、CERT_OPTIONAL 和 CERT_REQUIRED 标志的含义。

测试

  • bpo-35772: 在 ppc64 上使用 tmpfs 文件系统修复 test_tarfile 的稀疏文件测试。修复测试文件系统是否支持稀疏文件的函数:创建一个包含数据和“空洞”的文件,而不是创建一个不包含数据的文件。tmpfs 的有效块大小是一个页面大小(tmpfs 存在于页面缓存中)。RHEL 在 aarch64、ppc64、ppc64le 上使用 64 KiB 页面,只有 s390x 和 x86_64 使用 4 KiB 页面,而测试打孔的是 4 KiB。

  • bpo-35045: 使 ssl 测试不那么严格,也接受 TLSv1 作为系统默认值。这些更改修复了 Fedora 29 上的 test_min_max_version。

  • bpo-32710: test_asyncio/test_sendfile.py 现在像其他测试一样使用 tearDownModule() 重置事件循环策略,以防止在 Windows 上运行测试时出现警告。

  • bpo-33717: test.pythoninfo 现在记录所有时钟的信息,而不仅仅是 time.time() 和 time.perf_counter()。

  • bpo-35488: 向 pathlib 的 Path.match() 添加一个测试,以验证它不支持 glob 风格的 ** 递归模式匹配。

  • bpo-31731: 修复 test_io 的 check_interrupted_write() 中的竞争条件:直接创建带有 SIGALRM 信号阻塞的线程,而不是稍后从线程中阻塞信号。以前,有可能线程在信号被阻塞之前就收到了信号。

  • bpo-35424: 修复 test_multiprocessing_main_handling:使用 multiprocessing.Pool 与上下文管理器,然后显式加入池。

  • bpo-35519: 将 test.bisect 模块重命名为 test.bisect_cmd,以避免在直接运行测试如 ./python Lib/test/test_xmlrpc.py 时与 bisect 模块冲突。

  • bpo-35513: 在测试中用 time.monotonic() 替换 time.time() 来测量时间差。

  • bpo-34279: test.support.run_unittest() 不再在测试结果包含跳过的测试时引发 TestDidNotRun 异常。现在只有在没有运行任何测试且没有跳过任何测试时才会引发该异常。

  • bpo-35412: 向 test_future4 添加测试用例:检查 unicode 字面量。

  • bpo-26704: 添加了演示实例方法双重修补的测试。由 Anthony Sottile 提供补丁。

  • bpo-33725: 在 macOS 的较新版本上,test_multiprocessing_fork 可能会崩溃。在问题解决之前,在 macOS 上跳过该测试。

  • bpo-35352: 修改 test_asyncio 以使用测试目录中的证书集。

  • bpo-35317: 修复 test_email 中的 mktime() 溢出错误:在特定时区下运行 test_localtime_daylight_true_dst_true()test_localtime_daylight_false_dst_true()

  • bpo-21263: 在多次报告 test_gdb 在 macOS 上无法正常工作后,并且由于 gdb 不再默认附带,当使用 LLVM Clang 编译 Python 时,现在在 macOS 上跳过 test_gdb。由 Lysandros Nikolaou 提供补丁

  • bpo-34279: 当在特定测试文件中没有执行任何测试时,regrtest 发出警告。此外,如果在所有测试文件中没有执行任何测试,则发出新的最终结果状态。由 Pablo Galindo 提供补丁。

  • bpo-34962: Doc 中的 docstest 现在通过了,并且在 CI 中强制执行。

  • bpo-23596: 为 gzip 模块的命令行使用 argparse。由 Antony Lee 提供补丁

  • bpo-34537: 当 LC_ALL=C 且 GDB 是用 Python 3.6 或更早版本编译时,修复 test_gdb.test_strings()

  • bpo-34587: test_socket: 移除RDSTest.testCongestion()。该测试试图填满接收者的套接字缓冲区并期望出现错误。但RDS协议并不要求这一点。此外,RDS的Linux实现期望消息的生产者降低其速率,触发错误不是接收者的角色。该测试在Fedora 28上按设计失败,因此直接移除它。

  • bpo-34661: 如果unzip不支持-t,修复test_shutil。

  • bpo-34200: 通过不使用可怕的test.support.module_cleanup()逻辑来保存和恢复测试用例之间的sys.modules内容,修复了test_pkg的非确定性波动。

  • bpo-34569: 实验性的PEP 554数据通道现在在32位系统上正确地在子解释器之间传递负的PyLong对象。由Michael Felt提供补丁。

  • bpo-34594: 修复测试中硬编码的 errno 值的使用。

  • bpo-34579: 为AIX修复test_embed,由Michael Felt提供补丁

  • bpo-34542: 使用3072位的RSA密钥和SHA-256签名用于测试证书和密钥。

  • bpo-11193: 移除 test_subprocess.test_undecodable_env 中对AIX的特殊条件

  • bpo-34347: 为AIX修复 test_utf8_mode.test_cmd_line

  • bpo-34490: 在AIX上,使用AF_UNIX家族套接字的getsockname()不提供'sockname',因此跳过对transport.get_extra_info('sockname')的调用

  • bpo-34391: 通过从数据套接字读取,为TLS 1.3修复ftplib测试。

  • bpo-11192: 在AIX 6.1及更高版本上修复 test_socket,IPv6区域ID仅由``inet_pton6_zone()``支持。切换到基于运行时的 platform.system() 来确定当前平台,而不是基于构建时的 sys.platform()

  • bpo-34399: 更新所有RSA密钥和DH参数以使用至少2048位。

  • bpo-34373: 为AIX修复 test_mktimetest_pthread_getcpuclickid 测试,为AIX添加对``_PyTime_localtime``的范围检查,由Michael Felt提供补丁

  • bpo-11191: 当使用XLC作为编译器时,跳过distutils测试'test_search_cpp',由aixtools(Michael Felt)提供补丁

  • 改进了当模拟 assert_has_calls 失败时的错误信息。

  • bpo-33746: 修复在详细模式下运行时的 test_unittest。

  • bpo-33901: 在 macOS 上使用 gdbm 1.15 修复 test_dbm_gnu:添加一个更大的值以确保文件大小发生变化。

  • bpo-33873: 修复 regrtest 中的一个错误,该错误在使用了 --huntrleaks/-R 时会导致额外运行一个测试。如果指定了无效的参数给 --huntrleaks/-R(至少必须使用一次预热运行和一次重复运行),则退出并报错。

  • bpo-33562: 检查任何测试是否没有留下全局 asyncio 事件循环策略。

  • bpo-33655: 忽略在可能由于在 ZFS 上运行而导致的 BSD 平台上的 test_posix_fallocate 失败。

  • bpo-32962: 当 Python 使用标志 -mcet -fcf-protection -O0 编译时,修复 test_gdb。

  • bpo-33358: 当解释器使用 --enable-shared 构建时,修复 test_embed.test_pre_initialization_sys_options()

  • bpo-32872: 避免 regrtest 与命名空间包的兼容性问题。

  • bpo-32517: 修复由于 KqueueSelector 循环的传输未被关闭而在 macOS 10.12.2+ 上失败的 test_asyncio

  • bpo-32663: 确保 test_smtplib.py 中的 SMTPUTF8SimTests 测试类被运行。

  • bpo-27643: Test_C 测试用例需要“有符号短”位字段,但 IBM XLC 编译器(在 AIX 上)不支持此功能,当使用 AIX 和 XLC 时跳过代码和测试

    适用于 Python2-2.7 及以后版本

  • bpo-19417: 添加 test_bdb.py。

  • bpo-31809: 添加测试以验证与 secp ECDH 曲线的连接。

构建

  • bpo-34691: _contextvars 模块现在被内置到 Windows 上的核心 Python 库中。

  • bpo-35683: 改进了 Azure Pipelines 构建步骤,现在正确验证布局

  • bpo-35642: 从 pythoncore.vcxproj 中移除 asynciomodule.c

  • bpo-35550: 修复编译时错误的 Solaris #ifdef 检查,改为查找 __sun && __SVR4 而不是 sun。

  • bpo-35499: make profile-opt 不再用 CFLAGS 替换 CFLAGS_NODIST。现在它将配置文件引导优化(PGO)标志添加到 CFLAGS_NODIST 中:原有的 CFLAGS_NODIST 标志被保留。

  • bpo-35257: 在编译 C 扩展时,避免将链接时间优化(LTO)的链接器标志泄漏到 distutils 中。

  • bpo-35351: 当使用 clang 和 LTO 构建 Python 时,不再将 LTO 标志传递到 CFLAGS 中,以通过 distutils 构建第三方 C 扩展。

  • bpo-35139: 修复在 Modules/Setup 中静态链接 pyexpat 时的编译器错误。

  • bpo-35059: PCbuild:在 Debug 模式下将 InlineFunctionExpansion 设置为 OnlyExplicitInline("/Ob1" 选项)在 pyproject.props 中,以展开标记为内联的函数。这一变化应该会使在 Windows 上以 Debug 模式编译的 Python 稍微快一些。

  • bpo-35011: 恢复使用 pyexpatns.h 来隔离我们嵌入的 expat C 库副本,以便其符号在链接或动态加载时不会与嵌入应用程序或其他带有自己版本 libexpat 的扩展模块冲突。

  • bpo-28015: 使 --with-lto 与 clang 正确工作。

  • bpo-34765: 将过时的 install-sh 文件更新至 automake v1.16.1 的最新修订版。

  • bpo-34585: 在 configure.ac 中使用编译测试而不是执行代码来检查浮点字节顺序,以便这些检查在交叉编译构建中工作。

  • bpo-34710: 修复了使用 OpenSSL 和严格 CFLAGS 构建 SSL 模块的问题。

  • bpo-34582: 为回归测试添加 JUnit XML 输出并更新 Azure DevOps 构建。

  • bpo-34081: 在 Docs Makefile 中将 Sphinx 警告视为错误。

  • bpo-34555: 修复了无法同时未定义 HAVE_LINUX_VM_SOCKETS_HHAVE_SOCKADDR_ALG 的情况。

  • bpo-33015: 修复了 PyThread_start_new_thread() 的 pthread 实现中的一个未定义行为:添加一个函数包装器以始终返回 NULL

  • bpo-34245: Python共享库现在以写权限(模式0755)安装,这是安装此类库的标准方式。

  • bpo-34121: 修复在clang上对C11原子支持的检测。

  • bpo-32430: 将Modules/Setup.dist重命名为Modules/Setup,并消除在更新本地源代码树时需要手动将前者复制到后者的必要性。

  • bpo-30345: 在使用LTO编译时添加-g到LDFLAGS以获取调试符号。

  • bpo-5755: 将 -Wstrict-prototypes 选项从 OPT 移到 CFLAGS_NODIST。此选项在用C++编写扩展模块时会产生烦人的警告。

  • bpo-33614: 确保Windows上稳定ABI的模块定义文件被正确重新生成。

  • bpo-33648: 已移除--with-c-locale-warning配置标志。它已经大约一年没有效果了。

  • bpo-33522: 在https://python.visualstudio.com/cpython上启用Visual Studio Team Services的CI构建。

  • bpo-33522: 配置对"long double"的检查已被简化

  • bpo-33483: 现在可以从标准环境变量中正确检测C编译器。--without-gcc和--with-icc选项已被移除。

  • bpo-33394: 当GNU make在命令行上传递宏时,为扩展模块启用详细构建。

  • bpo-33393: 更新config.guess和config.sub文件。

  • bpo-33377: 为mips r6和riscv变体添加新的三元组(用于扩展后缀)。

  • bpo-32232: 默认情况下,配置在 Modules/Setup 中的模块不再使用 -DPy_BUILD_CORE 构建。相反,特别需要该预处理器定义的模块在其单独条目中包含它。

  • bpo-33182: 嵌入测试可以再次用clang 6.0构建。

  • bpo-33163: 将pip升级到9.0.3,setuptools升级到v39.0.1。

  • bpo-33012: gcc 8 新增了一个警告启发式方法来检测无效的函数转换,而标准的 Python 构建似乎经常触发该警告。最常见的是将 METH_NOARGS 函数(仅使用一个参数)转换为 PyCFunction。通过为所有实现 METH_NOARGS 的函数添加一个虚拟参数来解决这个问题。

  • bpo-32898: 修复了在使用 COUNT_ALLOCS 时的 Python 调试构建问题。

  • bpo-29442: 在 setup.py 中用 argparse 替换 optparse。

Windows

  • bpo-35890: 修复 GetVersionEx 和 wcstok 的 API 调用一致性。

  • bpo-32560: py 启动器现在将其 STARTUPINFO 结构转发给子进程。

  • bpo-35854: 在 Windows 上修复 EnvBuilder 和 --symlinks 在 venv 中的问题。

  • bpo-35811: 避免在通过 py.exe 启动时传播 venv 设置。

  • bpo-35797: 修复 multiprocessing 模块使用的默认可执行文件。

  • bpo-35758: 允许在 ARM 上使用 MSVC 进行构建。

  • bpo-29734: 修复 Windows 上 os.stat 中的句柄泄漏问题。

  • bpo-35596: 为嵌入式发行版使用未检查的 PYC,以避免 zipimport 限制。

  • bpo-35596: 修复 vcruntime140.dll 被多次添加到嵌入式发行版的问题。

  • bpo-35402: 更新 Windows 构建以使用 Tcl 和 Tk 8.6.9。

  • bpo-35401: 将 Windows 构建更新至 OpenSSL 1.1.0j。

  • bpo-34977: Windows 上的 venv 现在将使用 python.exe 重定向器,而不是从基础环境中复制实际的二进制文件。

  • bpo-34977: 添加了对构建 Windows 应用商店包的支持。

  • bpo-35067: 移除 _distutils_findvs 模块并改用 vswhere.exe。

  • bpo-32557: 允许 shutil.disk_usage 在 Windows 上接受文件路径。

  • bpo-34770: 修复 pyshellext.cpp 中可能的空指针解引用问题。

  • bpo-34603: 修复由 MSVC 生成的函数返回结构体的问题。

  • bpo-34581: 在 socketmodule.c 中使用 #ifdef _MSC_VER 保护 MSVC 特定代码。

  • bpo-34532: 修复了 py.exe 的列表版本参数的退出代码。

  • bpo-34062: 修复了 py.exe 启动器的 '--list' 和 '--list-paths' 参数。

  • bpo-34225: 确保INCLUDE和LIB目录不以反斜杠结尾。

  • bpo-34011: 一套代码已被更改,这些代码从运行的Python位置复制DLLs和init.tcl到正在创建的venv中。这些复制仅在从Python源代码构建运行时需要,现在复制代码仅在这种情况下运行,而不是在创建venv时总是运行。

  • bpo-34006: 恢复Windows帮助文档的行长度限制。行长度限制不需要,因为页面显示在单独的应用程序中而不是浏览器标签中。它也可能与DPI设置产生不良互动。

  • bpo-31546: 恢复在提示符等待用户输入时运行PyOS_InputHook。这恢复了交互式GUI窗口(如Matplotlib图形)与Windows上提示符的集成。

  • bpo-30237: 当ReadConsole被CancelSynchronousIo取消时输出错误而不是崩溃。

  • bpo-33895: 在调用获取Windows加载器锁的函数时释放GIL。

  • bpo-33720: 减少发布版本上的最大marshal递归深度。

  • bpo-29097: 修复 datetime.fromtimestamp() 在Windows上对0到86400之间的值错误抛出 OSError 的bug。由Ammar Askar提供补丁。

  • bpo-33316: PyThread_release_lock总是失败

  • bpo-33184: 更新Windows安装程序以使用OpenSSL 1.1.0h。

  • bpo-32890: 修复os.execve()和os.truncate()中使用GetLastError()而不是errno的问题。

  • bpo-33016: 修复nt._getfinalpathname中潜在使用未初始化内存的问题。

  • bpo-32903: 修复如果当前目录设置为UNC路径时Windows上os.chdir()的内存泄漏。

  • bpo-32901: 将Tcl和Tk版本更新到8.6.8

  • bpo-31966: 修复WindowsConsoleIO.write()写入空数据的问题。

  • bpo-32409: 确保activate.bat可以处理Unicode内容。

  • bpo-32457: 改进启动Python时对非规范化可执行路径的处理。

  • bpo-32370: 在uuid模块中为ipconfig输出使用正确的编码。由Segev Finer提交补丁。

  • bpo-29248: 修复Windows上的 os.readlink(),它错误地将重新解析数据缓冲区的``PrintNameOffset`` 字段视为字符数而非字节数。由Craig Holmquist和SSE4提交补丁。

  • bpo-1104: 正确处 msilib.SummaryInfo.GetProperty() 中的字符串长度,以防止其截断最后一个字符。

macOS

  • bpo-35401: 更新macOS安装程序以使用OpenSSL 1.1.0j。

  • bpo-35025: 在macOS上正确保护 timemodule 中使用 CLOCK_GETTIME 等宏。

  • bpo-24658: 在macOS上,修复从大小超过2 GiB的文件读取和写入的问题。

  • bpo-34405: 为macOS安装程序构建更新至OpenSSL 1.1.0i。

  • bpo-33635: 在macOS上,某些文件描述符(例如/dev/fd/3)的stat将导致坏文件描述符OSError。在is_dir、is_file及类似方法中添加了对这一异常的防护。DirEntry.is_dir也可能抛出此异常,因此_RecursiveWildcardSelector._iterate_directories也扩展了相同的错误忽略模式。

  • bpo-13631: 在macOS上通过editline模拟初始化readline时,现在可以正确处理用户主目录中的.editrc文件。

  • bpo-33184: 更新macOS安装程序构建以使用OpenSSL 1.1.0h。

  • bpo-32726: 为macOS 10.6+安装程序构建并链接Tcl/Tk 8.6的私有副本。10.9+安装程序变体已经这样做了。这意味着python.org macOS安装程序提供的Python 3.7不再需要或使用任何外部版本的Tcl/Tk,无论是系统提供的还是用户安装的,如ActiveTcl。

  • bpo-32901: 将macOS 10.9+安装程序更新至Tcl/Tk 8.6.8。

  • bpo-31903: 在 _scproxy 中,调用 SystemConfiguration 时释放GIL以避免死锁。

IDLE

  • bpo-35770: IDLE在macosx上删除了选项 => 配置IDLE。之前错误地删除了窗口 => 缩放高度(缩放高度现在在选项菜单中)。在Mac上,设置对话框通过IDLE菜单中的偏好设置访问。

  • bpo-35769: 将IDLE的新文件名从'Untitled'改为'untitled'。

  • bpo-35660: 修复idlelib.window中的导入。

  • bpo-35641: 当函数没有文档字符串时,正确格式化 calltip

  • bpo-33987: 为ttk小部件使用ttk框架。

  • bpo-34055: 修复IDLE Shell中错误的'智能'缩进和换行。

  • bpo-35591: 现在,当未找到选择时,查找选择也能工作。

  • bpo-35196: 加速squeezer的行计数。

  • bpo-35598: 更新config_key:使用PEP 8命名和ttk小部件,使一些对象全局化,并添加测试。

  • bpo-28097: 在Shell菜单中添加上一个/下一个历史记录条目。

  • bpo-35208: Squeezer现在在新行之前正确计算换行。

  • bpo-35555: 当代码上下文菜单条目不适用时,将其置灰。

  • bpo-35521: 记录IDLE编辑器代码上下文功能。在IDLE文档中添加一些内部引用。

  • bpo-22703: 代码上下文菜单标签现在在显示/隐藏代码上下文之间切换。缩放高度菜单现在在缩放/恢复高度之间切换。缩放高度已从窗口菜单移动到选项菜单。

  • bpo-35213: 在适当的地方,在idlelib中使用'macOS'。

  • bpo-34864: 在macOS上,如果系统偏好设置“打开文档时偏好标签页”设置为“总是”,则发出警告。

  • bpo-34864: 记录两个在MacOS上的IDLE问题。系统偏好设置Dock“总是偏好标签页”设置禁用了一些IDLE功能。菜单与Windows和Linux的描述有些不同。

  • bpo-35202: 从lib/idlelib中移除未使用的导入。

  • bpo-33000: 记录IDLE的Shell没有行限制。一个无限运行的程序可能会耗尽内存。

  • bpo-23220: 解释IDLE的Shell如何显示输出。

  • bpo-35099: 改进关于IDLE运行用户代码的文档。该部分从“IDLE -- 控制台差异”更名为“运行用户代码”。主要涵盖了使用自定义 sys.stdxxx 对象的影响。

  • bpo-35097: 在IDLE文档中添加解释编辑器窗口的子章节。主题包括打开、标题和状态栏、.py*扩展名以及运行。

  • bpo-35093: 在IDLE文档中记录IDLE文档查看器。在“帮助和偏好设置”中的“帮助来源”子部分添加一段。

  • bpo-35088: 更新idlelib.help.copy_string的文档字符串。我们现在使用git和后向移植而不是hg和前向合并。

  • bpo-35087: 为当前文档构建更新idlelib帮助文件。主要变化是消除了章节-节号。

  • bpo-34548: 为只读文本视图使用配置的颜色主题。

  • bpo-1529353: 启用shell中长输出的“压缩”,以避免性能下降并在不丢失历史记录的情况下清理历史。压缩的输出可以复制、在单独窗口中查看并“解压”。

  • bpo-34047: 修复了macOS上鼠标滚轮的滚动方向。

  • bpo-34275: 使IDLE的调用提示在Mac上始终可见。某些MacOS-tk组合需要.update_idletasks()。由Kevin Walzer提供的补丁。

  • bpo-34120: 修复关闭某些窗口和对话框后的无响应问题。

  • bpo-33975: 在运行htests时避免小字体。由于人类查看测试的部分目的是确定小部件看起来是否正确,因此重要的是它们在测试时看起来与运行IDLE时相同。

  • bpo-33905: 为idlelib.stackview.StackBrowser添加测试。

  • bpo-33924: 将mainmenu.menudefs键'windows'更改为'window'。每个其他menudef键都是主菜单项的小写版本。

  • bpo-33906: 将idlelib.windows重命名为window,以匹配主菜单上的Window,并移除最后一个复数模块名称。

  • bpo-33917: 修复并记录idlelib/idle_test/template.py。修订后的文件编译、运行和测试均正常。idle_test/README.txt说明了如何使用它来创建新的IDLE测试文件。

  • bpo-33904: IDLE:在rstrip中,将类RstripExtension重命名为Rstrip

  • bpo-33907: 为了保持一致性和清晰度,重命名一个IDLE模块和类。模块calltips及其类CallTips现在更名为calltip和Calltip。在模块calltip_w中,类CallTip现在更名为CalltipWindow。

  • bpo-33856: 在IDLE的欢迎消息中添加“帮助”

  • bpo-33839: IDLE:重构ToolTip和CallTip并添加文档和测试

  • bpo-33855: 对所有IDLE模块进行最小化测试。添加缺失的文件,导入模块,实例化类,并检查覆盖率。检查现有文件。

  • bpo-33656: 在Windows上,添加API调用表明tk针对DPI进行缩放。在Windows 8.1+或10上,Python二进制文件的DPI兼容性属性未更改,且显示器分辨率大于96 DPI时,这应使文本和线条更清晰。否则应无影响。

  • bpo-33768: 点击上下文行将该行移动到编辑器窗口的顶部。

  • bpo-33763: IDLE:使用只读文本小部件代替标签小部件作为代码上下文。

  • bpo-33664: 按行滚动IDLE编辑器文本。之前,鼠标滚轮和滚动条滑块以固定像素数移动文本,导致编辑器盒顶部出现部分行。此更改也适用于shell和grep输出窗口,但不适用于只读文本视图。

  • bpo-33679: 启用代码上下文的主题特定颜色配置。使用“高亮”选项卡查看内置主题的设置或为自定义主题添加设置。

  • bpo-33642: 为代码上下文显示最多maxlines非空行。如果没有当前上下文,则显示单个空行。

  • bpo-33628: IDLE:清理codecontext.py及其测试。

  • bpo-33564: IDLE的代码上下文现在能识别async作为一个块的开头。

  • bpo-21474: 将单词/标识符的定义从ASCII更新为Unicode。在文本和输入框中,这会影响通过双击选择、通过control-left/right左右移动以及通过control-BACKSPACE/DEL左右删除。

  • bpo-33204: IDLE:一致地着色无效的字符串前缀。'u'字符串前缀不能与'r'或'f'配对。从右边开始,尽可能多地着色有效的部分。修订并扩展颜色化器测试。

  • bpo-32984: 在运行启动文件时设置 __file__。与Python一样,IDLE在展示第一个交互式输入提示之前,可选地在Shell窗口中运行一个启动文件。对于IDLE,-s``运行环境变量 :envvar:`IDLESTARTUP` :envvar:`PYTHONSTARTUP` 中命名的文件;-r file`` 运行 file。Python在运行文件之前将 __file__ 设置为启动文件名,并在第一个提示之前取消设置。IDLE现在在没有 -n 选项的情况下正常运行时也会这样做。

  • bpo-32940: 在pyparse中简化并重命名StringTranslatePseudoMapping。

  • bpo-32916: 在pyparse中将 str 更改为 code

  • bpo-32905: 移除pyparse模块中未使用的代码。

  • bpo-32874: 为pyparse添加测试。

  • bpo-32837: 对于IDLE的系统和位置无关文件,使用系统和位置相关的默认编码对于open()来说是一个坏主意。

  • bpo-32826: 在IDLE的test_help_about的open()中添加"encoding=utf-8"。GUI测试test_file_buttons()仅查看初始的ascii-only行,但在open()默认为'ascii'的系统上失败,因为readline()内部读取和解码足够远,以在CREDITS.txt中遇到非ascii字符。

  • bpo-32831: 为codecontext添加文档字符串和测试。

  • bpo-32765: 更新configdialog General标签的文档字符串,将新部件添加到部件列表中。

工具/示例

  • bpo-35884: 添加一个基准测试脚本,用于计时访问变量的各种方式:Tools/scripts/var_access_benchmark.py

  • bpo-34989: python-gdb.py 现在可以处理计算 Python 帧行号时的错误。

  • bpo-20260: Argument Clinic 现在有了非位无符号整型转换器。

  • bpo-32962: python-gdb 现在在调用 string() 时会捕获 UnicodeDecodeError 异常。

  • bpo-32962: python-gdb 现在会在 read_var() 上捕获 ValueError:例如当 Python 没有调试符号时。

  • bpo-33189: pygettext.py 现在只识别字面字符串作为文档字符串和可翻译字符串,并拒绝字节字面量和 f-string 表达式。

  • bpo-31920: 修复了 pygettext 脚本中将目录作为参数处理的问题。基于 Oleg Krasnikov 的补丁。

  • bpo-29673: 修复 pystackv 和 pystack gdbinit 宏。

  • bpo-25427: 移除 pyvenv 脚本,转而使用 python3 -m venv,以减少关于虚拟环境将为哪个 Python 解释器创建的混淆。

  • bpo-32885: 为 Tools/scripts/pathfix.py 添加 -n 标志以禁用自动备份创建(带有 ~ 后缀的文件)。

  • bpo-32222: 修复 pygettext 不提取带有类型注释参数的函数的文档字符串的问题。由 Toby Harradine 提供的补丁。

  • bpo-31583: 修复 2to3 在使用 --add-suffix 选项但没有 --output-dir 选项时对当前目录中文件的相对路径的处理。

C API

Python 3.7.0 正式版

发布日期: 2018-06-27

C API

  • bpo-33932: 调用 Py_Initialize() 两次不做任何操作,而不是以致命错误失败:恢复 Python 3.6 的行为。

Python 3.7.0 rc1

发布日期: 2018-06-12

核心与内置函数

  • bpo-33803: 修复 hamt.c 中的一个崩溃问题,该问题是由于为一个对象启用 GC 跟踪时,其所有字段未设置为 NULL 引起的。

  • bpo-33706: 修复解析命令行选项时 Python 初始化过程中的崩溃问题。感谢 Christoph Gohlke 的报告和修复!

  • bpo-30654: 修复了即使之前设置了自定义处理程序,在解释器关闭时 SIGINT 处理程序重置为 SIG_DFL 的问题。由 Philipp Kerling 提供补丁。

  • bpo-31849: 修复了 pyhash.c 中的有符号/无符号比较警告。

  • bpo-30167: 如果设置了PYTHONSTARTUP,防止site.main()异常。由Steve Weber提供补丁。

  • bpo-33812: 对于tzinfo非None但d.tzinfo.utcoffset(d)返回None的Datetime实例d,现在astimezone()方法将其视为naive。

  • bpo-30805: 避免调试日志记录中的竞态条件

  • bpo-33694: asyncio: 修复在使用ProactorEventLoop时,pause_reading()/resume_reading()导致数据丢失的竞态条件。

  • bpo-32493: 在 configure.ac 中更正对 uuid_enc_be 可用性的测试。由Michael Felt提供补丁。

  • bpo-33792: 添加asyncio.WindowsSelectorEventLoopPolicy和asyncio.WindowsProactorEventLoopPolicy。

  • bpo-33778: 更新 unicodedata 的数据库至Unicode版本11.0.0。

  • bpo-33770: 针对长度无效的编码输入,改进base64异常消息

  • bpo-33769: asyncio/start_tls: 修复错误消息;在未处理错误的情况下取消回调;如果SSLTransport被中止,则标记为已关闭。

  • bpo-33767: 在 mmap.mmap 对象上执行时,连接(+)和重复(*)序列操作现在会引发 TypeError 而不是 SystemError。由 Zackery Spytz 提供补丁。

  • bpo-33734: asyncio/ssl:修复 AttributeError,增加默认的握手超时时间

  • bpo-11874: 当将用法分解为可包装部分时使用更好的正则表达式。避免来自自定义 metavar 字符串的错误断言错误。

  • bpo-33582: 为 inspect.formatargspec 发出弃用警告。

文档

构建

  • bpo-5755: 将 -Wstrict-prototypes 选项从 OPT 移到 CFLAGS_NODIST。此选项在用C++编写扩展模块时会产生烦人的警告。

Windows

  • bpo-33720: 减少发布版本上的最大marshal递归深度。

IDLE

  • bpo-33656: 在Windows上,添加API调用表明tk针对DPI进行缩放。在Windows 8.1+或10上,Python二进制文件的DPI兼容性属性未更改,且显示器分辨率大于96 DPI时,这应使文本和线条更清晰。否则应无影响。

  • bpo-33768: 点击上下文行将该行移动到编辑器窗口的顶部。

  • bpo-33763: IDLE:使用只读文本小部件代替标签小部件作为代码上下文。

  • bpo-33664: 按行滚动IDLE编辑器文本。之前,鼠标滚轮和滚动条滑块以固定像素数移动文本,导致编辑器盒顶部出现部分行。此更改也适用于shell和grep输出窗口,但不适用于只读文本视图。

  • bpo-33679: 启用代码上下文的主题特定颜色配置。使用“高亮”选项卡查看内置主题的设置或为自定义主题添加设置。

  • bpo-33642: 为代码上下文显示最多maxlines非空行。如果没有当前上下文,则显示单个空行。

Python 3.7.0 beta 5

发布日期: 2018-05-30

核心与内置函数

  • bpo-33622: 修复了当垃圾收集器无法将带有 __del__ 方法或被其引用的对象添加到 gc.garbage 列表时的内存泄漏问题。现在可以在设置异常时调用 PyGC_Collect(),并保留异常。

  • bpo-33509: 修复了 warnings.warn_explicit() 的 module_globals 参数:如果 module_globals 不是字典,不会崩溃。

  • bpo-20104: 在 3.7.0b1 中添加的新 os.posix_spawn 已被移除,因为我们仍在研究 API 应该是什么样子。预计将在 3.8 中提供。

  • bpo-33475: 修复了将注释转换为字符串时的杂项错误,并优化了字符串表示中的括号。

  • bpo-33391: 修复了 set_symmetric_difference() 中的内存泄漏。

  • bpo-28055: 修复了 siphash24() 中的未对齐访问。由 Rolf Eike Beer 提供补丁。

  • bpo-32911: 由于在下游beta测试期间发现的意外兼容性问题,恢复了 bpo-29463。从Module、ClassDef、FunctionDef和AsyncFunctionDef ast节点中移除了在3.7a1中添加的`docstring` 字段。docstring表达式被恢复为其主体的第一条语句。基于Inada Naoki的补丁。

  • bpo-21983: 修复当类型参数是 ctypes 结构化数据类型时,ctypes.cast() 中的崩溃问题。由 Eryk Sun 和 Oren Milman 提供补丁。

  • bpo-32751: 当由于超时取消任务时,asyncio.wait_for() 现在将等待直到取消完成。

  • bpo-32684: 修复 gather 即使在 return_exceptions 的情况下也能传播自身的取消。

  • bpo-33654: 在 SSLTransport.set_protocol() 中支持协议类型切换。

  • bpo-33674: 尽早暂停传输,以进一步降低在 connection_made() 之前调用 data_received() 的风险。

  • bpo-33674: 修复 asyncio.sslproto 中 SSLProtocol.connection_made() 的竞态条件:立即开始握手而不是使用 call_soon()。之前,data_received() 可能在握手开始前被调用,导致握手挂起或失败。

  • bpo-31647: 修复了在 _SelectorSocketTransport 已经关闭后调用 write_eof() 会引发 AttributeError 的错误。

  • bpo-32610: 使 asyncio.all_tasks() 仅返回待处理的任务。

  • bpo-32410: 在 sendfile 回退代码中避免阻塞文件 IO。

  • bpo-33469: 修复了使用 run_in_executor 后关闭循环时引发的 RuntimeError。

  • bpo-33672: 修复 Task.__repr__ 与 Cython 的虚假协程一起使用时崩溃的问题。

  • bpo-33654: 修复 transport.set_protocol() 以支持在 asyncio.Protocol 和 asyncio.BufferedProtocol 之间切换。修复 loop.start_tls() 以支持 asyncio.BufferedProtocols。

  • bpo-33652: 类型变量和下标泛型的 pickle 现在具有未来兼容性,并与旧版 Python 兼容。

  • bpo-32493: 修复了 FreeBSD 上的 uuid.uuid1()

  • bpo-33618: 完成并记录与 OpenSSL 1.1.1 的初步和实验性 TLS 1.3 支持。

  • bpo-33623: 修复在 __del__ 中创建 asyncio.Future 时可能出现的 SIGSGV。

  • bpo-30877: 修复了 JSON 解码器 Python 实现中的一个错误,该错误阻止了在完成解码后清除已解析字符串的缓存。基于 c-fos 的补丁。

  • bpo-33570: 更改 TLS 1.3 密码套件设置,以兼容 OpenSSL 1.1.1-pre6 及更新版本。OpenSSL 1.1.1 将默认启用 TLS 1.3 密码。

  • bpo-28556: 不再简化 typing.Union 的参数。现在 Union[Manager, Employee] 在运行时不会简化为 Employee。之前的简化导致了一些错误,并限制了内省的可能性。

  • bpo-33540: 向 socketserverForkingMixInThreadingMixIn 类添加一个新的 block_on_close 类属性。

  • bpo-33548: tempfile._candidate_tempdir_list 应考虑常见的 TEMP 位置

  • bpo-33109: argparse 子解析器默认再次不需要,恢复了在 3.7.0a2 中由 bpo-26510 引入的行为变化。

  • bpo-33536: dataclasses.make_dataclass 现在检查无效的字段名和重复的字段。此外,添加了对无效字段规范的检查。

  • bpo-33542: 防止 uuid.get_node 在 Windows 上使用 DUID 而不是 MAC。由 Zvi Effron 提供补丁

  • bpo-26819: 修复 Windows proactor 事件循环中 ReadTransport.resume_reading 的竞争条件。

  • 修复当 ClassVar 作为字符串前向引用提供时 typing.get_type_hints() 的失败。

  • bpo-33505: 通过重新排序if检查优化asyncio.ensure_future():速度提升1.17倍。

  • bpo-33497: 向cgi.parse_multipart添加errors参数,并使FieldStorage中的编码使用给定的errors(Twisted所需)。由Amber Brown提供补丁。

  • bpo-33495: 更改dataclasses.Fields的repr以使用其每个成员的repr,而非str。这使得每个字段实际代表的内容更加清晰。这对于'type'成员尤为明显。

  • bpo-33453: 修复dataclasses以在使用字面字符串类型注解或使用PEP 563“推迟的注解评估”时工作。仅为ClassVar("ClassVar"和"typing.ClassVar")和InitVar("InitVar"和"dataclasses.InitVar")检测特定的字符串前缀。

  • bpo-28556: typing模块中的小修复:向 NamedTuple.__new__ 添加注解,在``Generic.__new__``中传递 *args**kwds。原始PR由Paulius Šarka和Chad Dombrova提供。

  • bpo-20087: 更新了支持glibc 2.27地区设置的别名映射。

  • bpo-33422: 修复在pydoc上查找字节/字符串字面量时尾随引号被删除的问题。由Andrés Delfino提供补丁。

  • bpo-28167: 函数 platform.linux_distributionplatform.dist 现在触发``DeprecationWarning``,并已被标记为在Python 3.8中移除。

  • bpo-33197: 更新构造无效inspect.Parameters时的错误信息。由Donghee Na提供补丁。

  • bpo-33263: 修复了 _SelectorSocketTransport 中的文件描述符泄漏问题。由 Vlad Starostin 提供补丁。

  • bpo-32861: urllib.robotparser 的 __str__ 表示现在包括通配符条目以及 "Crawl-delay" 和 "Request-rate" 字段。由 Michael Lazar 提供补丁。

  • bpo-32257: ssl模块现在包含OP_NO_RENEGOTIATION常量,适用于OpenSSL 1.1.0h或1.1.1版本。

  • bpo-16865: 在 ctypes 中支持>=2GiB的数组。由Segev Finer提供补丁。

文档

  • bpo-23859: 文档说明 asyncio.wait() 在超时时不会取消它的 futures。

  • bpo-32436: 文档说明 PEP 567 对 asyncio 的更改。

  • bpo-33604: 将 HMAC md5 的默认警告更新为 DeprecationWarning,移除时间推迟到 3.8。

  • bpo-33503: 修复损坏的 pypi 链接

  • bpo-33421: 为 typing.AsyncContextManager 添加缺失的文档。

测试

  • bpo-33655: 忽略在可能由于在 ZFS 上运行而导致的 BSD 平台上的 test_posix_fallocate 失败。

  • bpo-32604: 移除 _xxsubinterpreters 模块(用于测试)和相关的辅助工具。此模块最近在 3.7b1 中添加。

构建

  • bpo-33614: 确保Windows上稳定ABI的模块定义文件被正确重新生成。

  • bpo-33522: 在https://python.visualstudio.com/cpython上启用Visual Studio Team Services的CI构建。

  • bpo-33012: 为 gcc 8 添加 -Wno-cast-function-type 以静默关于函数类型转换的警告,如在方法定义列表中转换为 PyCFunction 的警告。

macOS

  • bpo-13631: 在macOS上通过editline模拟初始化readline时,现在可以正确处理用户主目录中的.editrc文件。

IDLE

  • bpo-33628: IDLE:清理codecontext.py及其测试。

  • bpo-33564: IDLE的代码上下文现在能识别async作为一个块的开头。

  • bpo-32831: 为codecontext添加文档字符串和测试。

Python 3.7.0 beta 4

发布日期: 2018-05-02

核心与内置函数

  • bpo-33363: 对于异步函数外的 async withasync for 语句,现在会引发 SyntaxError。

  • bpo-33128: 修复了一个导致 PathFinder 在 sys.meta_path 上出现两次的 bug。由 Pablo Galindo Salgado 提供补丁。

  • bpo-33312: 通过调整内部结构 _dictkeysobject 共享键结构的声明方式,修复了 dictobject.c 中的 clang ubsan(未定义行为消毒剂)警告。

  • bpo-33231: 修复了 normalizestring() 中潜在的内存泄漏问题。

  • bpo-33205: 将字典增长函数从 round_up_to_power_2(used*2+hashtable_size/2) 更改为``round_up_to_power_2(used*3)``。以前,字典仅在 used == 0 时收缩。现在字典有更多机会被收缩。

  • bpo-29922: 改进了'async with'中当 __aenter__()__aexit__() 返回不可等待对象时的错误消息。

  • bpo-33199: 修复了在从键共享字典复制时,字典实现中的 ma_version_tag 未初始化的问题。

  • bpo-33281: 修复macOS上ctypes.util.find_library的回归问题。

  • bpo-33383: 修复了当使用单个参数调用 dbm.ndbm 数据库对象的get()方法时崩溃的问题。

  • bpo-33329: 修复了在新版 glibc 上的多进程回归问题。

  • bpo-991266: 修复了 http.cookies.SimpleCookieComment 属性的引用问题。

  • bpo-33131: 将捆绑的 pip 版本升级至 10.0.1。

  • bpo-33308: 修复了 parser 模块在将 ST 对象转换为元组或列表树时,当 line_info=Falsecol_info=True 时的崩溃问题。

  • bpo-33266: lib2to3 现在能识别 rf'...' 字符串。

  • bpo-11594: 确保在使用 lib2to3 时尊重行尾。

  • bpo-33254: 让 importlib.resources.contents()importlib.abc.ResourceReader.contents() 返回一个 iterable 而不是 iterator

  • bpo-33256: 修复了 cgitb.html() 生成的 html 中 <module> 调用的显示问题。补丁由 Stéphane Blondon 提供。

  • bpo-33185: 修复了使用 -m 开关运行 pydoc 时的回归问题。(此回归问题由 bpo-33053 的解决在 3.7.0b3 中引入)此修复还更改了 pydoc,在必要时将 os.getcwd() 添加到 sys.path 中,而不是添加 "."

  • bpo-33169: 当调用 importlib.machinery.invalidate_caches() 时,删除 sys.path_importer_cache 中的 None 条目。

  • bpo-33217: 弃用在 Enum 类和 Enum 成员中查找非 Enum 对象的行为(在 3.8+ 中将引发 TypeError)。

  • bpo-33203: random.Random.choice() 现在对于空序列会一致地引发 IndexError,即使是从没有 getrandbits() 实现的子类中调用也是如此。

  • bpo-33224: 为 PEP 479 更新 difflib.mdiff()。将生成器中未捕获的 StopIteration 转换为 return 语句。

  • bpo-33209: 在 pickle.Pickler.dump() 的 C 实现结束时结束帧。

  • bpo-20104: 改进了 os.posix_spawn() 中的错误处理并修复了一个引用泄漏。

  • bpo-33175: 在数据类中,Field.__set_name__ 现在查找默认值的类上的 __set_name__ 特殊方法,而不是实例上的。

  • bpo-33097: 在解释器关闭期间调用 executor.submit 时抛出RuntimeError。

  • bpo-31908: 修复了 trace 模块命令行工具的封面文件输出。之前仅在使用了 --missing 选项时才会发出封面文件。由Michael Selik提供补丁。

文档

  • bpo-33378: 为 https://docs.python.org/3/ 添加韩语语言切换器。

  • bpo-33276: 澄清模块上的 __path__ 属性不能是任意值。

  • bpo-33201: 现代化编写 C 扩展类型的文档。

  • bpo-33195: 在 c-api/arg 文档中弃用 Py_UNICODE 的使用。自 Python 3.3 起,Py_UNICODE 相关 API 已被弃用,但文档中遗漏了这一点。

  • bpo-8243: 添加关于 curses.addch 和 curses.addstr 在窗口或 pad 外部写入时的异常行为的注释。

  • bpo-32337: 更新与 dict 顺序相关的文档。

测试

  • bpo-33358: 当解释器使用 --enable-shared 构建时,修复 test_embed.test_pre_initialization_sys_options()

构建

  • bpo-33394: 当GNU make在命令行上传递宏时,为扩展模块启用详细构建。

  • bpo-33393: 更新config.guess和config.sub文件。

  • bpo-33377: 为mips r6和riscv变体添加新的三元组(用于扩展后缀)。

  • bpo-32232: 默认情况下,配置在 Modules/Setup 中的模块不再使用 -DPy_BUILD_CORE 构建。相反,特别需要该预处理器定义的模块在其单独条目中包含它。

  • bpo-33182: 嵌入测试可以再次用clang 6.0构建。

Windows

  • bpo-33184: 更新Windows安装程序以使用OpenSSL 1.1.0h。

macOS

  • bpo-33184: 更新macOS安装程序构建以使用OpenSSL 1.1.0h。

IDLE

  • bpo-21474: 将单词/标识符的定义从ASCII更新为Unicode。在文本和输入框中,这会影响通过双击选择、通过control-left/right左右移动以及通过control-BACKSPACE/DEL左右删除。

  • bpo-33204: IDLE:一致地着色无效的字符串前缀。'u'字符串前缀不能与'r'或'f'配对。从右边开始,尽可能多地着色有效的部分。修订并扩展颜色化器测试。

工具/示例

  • bpo-33189: pygettext.py 现在只识别字面字符串作为文档字符串和可翻译字符串,并拒绝字节字面量和 f-string 表达式。

  • bpo-31920: 修复了 pygettext 脚本中将目录作为参数处理的问题。基于 Oleg Krasnikov 的补丁。

  • bpo-29673: 修复 pystackv 和 pystack gdbinit 宏。

  • bpo-31583: 修复 2to3 在使用 --add-suffix 选项但没有 --output-dir 选项时对当前目录中文件的相对路径的处理。

Python 3.7.0 beta 3

发布日期: 2018-03-29

安全性

  • bpo-33136: 加固ssl模块以抵御LibreSSL的 CVE 2018-8970。调用X509_VERIFY_PARAM_set1_host()时使用明确的namelen。新增测试确保不允许NULL字节。

  • bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。

  • bpo-32981: difflib 和 poplib 中的正则表达式容易受到灾难性回溯的影响。这些正则表达式构成了潜在的 DOS 向量(REDOS)。它们已被重构。这解决了 CVE 2018-1060CVE 2018-1061。由 Jamie Davis 提供补丁。

核心与内置函数

  • bpo-33053: 当使用-m开关时,sys.path[0]现在明确扩展为 起始 工作目录,而不是保留为空路径(允许在导入时从当前工作目录导入)。

  • bpo-33018: 提高了当 issubclass() 的第一个参数是非类而第二个参数是抽象基类时引发错误的一致性。由Josh Bronson提供补丁。

  • bpo-33041: 修复了当函数包含 async for 循环时的跳转问题。

  • bpo-33026: 通过设置f_lineno修复了跳出“with”块的问题。

  • bpo-33005: 修复了在使用自定义内存分配器(例如:使用PYTHONMALLOC环境变量)时fork导致的崩溃。_PyGILState_Reinit()和_PyInterpreterState_Enable()现在使用默认的RAW内存分配器在fork时分配新的解释器互斥锁。

  • bpo-17288: 防止从'return'和'exception'跟踪事件跳转。

  • bpo-32836: 在列表/字典/集合推导式的情况下不使用临时变量。

  • bpo-33141: 如果 Field 对象有自己的 __set_name__,则让它们将 __set_name__ 传递给它们的默认值。

  • bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。

  • bpo-32873: 通过复制和pickle操作将类型变量和特殊类型形式视为不可变。这修复了几个小问题和不一致性,并提高了与Python 3.6的向后兼容性。

  • bpo-33134: 在计算数据类的__hash__时,使用查找表包含返回__hash__值的函数。这比查找字符串然后测试该字符串以决定做什么有所改进。

  • bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。

  • bpo-32505: 如果数据类的成员变量是Field类型但没有类型注解,则抛出TypeError。

  • bpo-33078: 修复了由于测试依赖sem_getvalue而在OSX上导致的失败。

  • bpo-33116: 将'Field'添加到dataclasses.__all__中。

  • bpo-32896: 修复了一个错误,即当子类化一个使用default_factory字段的数据类时会生成一个不正确的类。

  • bpo-33100: 数据类:如果一个字段有一个默认值是MemberDescriptorType,那么它是因为该字段在__slots__中,而不是一个实际的默认值。

  • bpo-32953: 如果一个非数据类继承自一个冻结的数据类,允许向派生类添加属性。只有来自冻结数据类的属性不能被赋值。要求层次结构中的所有数据类要么全部冻结,要么全部非冻结。

  • bpo-33061: 在typing.py的 __all__ 中添加缺失的 NoReturn

  • bpo-33078: 修复当发生pickling错误时multiprocessing.Queue中的大小处理。

  • bpo-33064: lib2to3现在正确支持函数签名中 *args**kwargs 后的尾随逗号。

  • bpo-33056: 修复concurrent.futures.ProcessPoolExecutor中泄漏的文件描述符未正确关闭的问题。

  • bpo-33021: 在fstat()调用期间释放GIL,避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。

  • bpo-31804: 避免在标准流在退出时被关闭或为None时,multiprocessing.Process失败。

  • bpo-33037: 在SSL传输关闭后跳过发送/接收数据。

  • bpo-27683: 修复 ipaddress 中的一个回归问题,当网络由包含整数掩码且仅剩1位地址的元组构造时,hosts() 的结果为空。

  • bpo-32999: 修复 ABC.__subclasscheck__(cls, subclass) 的C实现,在 subclass 不是类型对象时崩溃的问题。

  • bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。

  • bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。

  • bpo-32056: 改进在模块 aifcwavesunau 中读取音频文件时,对于无效通道数和样本宽度引发的异常。

  • bpo-32844: 修复在subprocess中如果另一个低描述符被关闭时,将低描述符(0或1)错误重定向到stderr的问题。

  • bpo-32857: 在 tkinter 中,after_cancel(None) 现在会引发 ValueError 异常,而不是取消第一个预定的函数。由Cheryl Sabella提供补丁。

  • bpo-31639: http.server 现在暴露了一个 ThreadedHTTPServer 类,并在模块使用 -m 运行时使用它以应对网络浏览器预打开套接字的情况。

  • bpo-27645: 如果底层的SQLite库版本为3.6.11或更高,sqlite3.Connection 现在公开了一个 backup 方法。由Lele Gaifax提供补丁。

文档

  • bpo-33126: 文档化 PyBuffer_ToContiguous()。

  • bpo-27212: 修改 islice() 函数示例代码的文档说明,使其在起始索引前消耗初始值。

  • bpo-28247: 更新 zipapp 文档,描述如何制作独立应用程序。

  • bpo-18802: ipaddress 的文档更改。由 Jon Foster 和 Berker Peksag 提供补丁。

  • bpo-27428: 更新文档以澄清 WindowsRegistryFinder 实现了 MetaPathFinder。(补丁由 Himanshu Lakhara 提供)

测试

  • bpo-32872: 避免 regrtest 与命名空间包的兼容性问题。

  • bpo-32517: 修复由于 KqueueSelector 循环的传输未被关闭而在 macOS 10.12.2+ 上失败的 test_asyncio

  • bpo-19417: 添加 test_bdb.py。

构建

  • bpo-33163: 将pip升级到9.0.3,setuptools升级到v39.0.1。

Windows

  • bpo-33016: 修复nt._getfinalpathname中潜在使用未初始化内存的问题。

  • bpo-32903: 修复如果当前目录设置为UNC路径时Windows上os.chdir()的内存泄漏。

macOS

  • bpo-32726: 为macOS 10.6+安装程序构建并链接Tcl/Tk 8.6的私有副本。10.9+安装程序变体已经这样做了。这意味着python.org macOS安装程序提供的Python 3.7不再需要或使用任何外部版本的Tcl/Tk,无论是系统提供的还是用户安装的,如ActiveTcl。

IDLE

  • bpo-32984: 在运行启动文件时设置 __file__。与Python一样,IDLE在展示第一个交互式输入提示之前,可选地在Shell窗口中运行一个启动文件。对于IDLE,-s``运行环境变量 :envvar:`IDLESTARTUP` :envvar:`PYTHONSTARTUP` 中命名的文件;-r file`` 运行 file。Python在运行文件之前将 __file__ 设置为启动文件名,并在第一个提示之前取消设置。IDLE现在在没有 -n 选项的情况下正常运行时也会这样做。

  • bpo-32940: 在pyparse中简化并重命名StringTranslatePseudoMapping。

工具/示例

  • bpo-32885: 为 Tools/scripts/pathfix.py 添加 -n 标志以禁用自动备份创建(带有 ~ 后缀的文件)。

C API

  • bpo-33042: 嵌入应用程序可以再次在调用 Py_Initialize 之前调用 PySys_ResetWarnOptions、PySys_AddWarnOption 和 PySys_AddXOption。

  • bpo-32374: 文档说明多阶段初始化模块的 m_traverse 可以在 m_state=NULL 时调用,并添加健全性检查

Python 3.7.0 beta 2

发布日期: 2018-02-27

安全性

  • bpo-28414: ssl 模块现在允许用户在使用 SNI 时执行自己的 IDN 编码/解码。

核心与内置函数

  • bpo-32889: 更新Valgrind抑制列表,以考虑`Py_ADDRESS_IN_RANG`重命名为`address_in_range`的情况。

  • bpo-31356: 移除了在 bpo-31356 中添加的新API(gc.ensure_disabled()上下文管理器)。

  • bpo-32305: 对于命名空间包,确保`__file__`和`__spec__.origin`都被设置为None。

  • bpo-32303: 确保对于命名空间包,__spec__.loader__loader__ 相匹配。

  • bpo-32711: 修复 Python/ast_unparse.c 中的警告信息。由 Stéphane Wirtel 提供补丁。

  • bpo-32583: 修复在使用自定义解码错误处理程序时,内置 Unicode 解码器可能因越界写入错误而崩溃的问题。

  • bpo-32960: 对于数据类,禁止从非冻结类继承冻结类,也禁止从冻结类继承非冻结类。这一限制将在未来放宽。

  • bpo-32713: 修复tarfile.itn对超出界限的浮点值的处理。由Joffrey Fuhrer提供补丁。

  • bpo-32951: 现在禁止直接实例化SSLSocket和SSLObject对象。这些构造函数从未被记录、测试或设计为公共构造函数。用户应该使用ssl.wrap_socket()或SSLContext。

  • bpo-32929: 移除了三态参数"hash",并添加了布尔型"unsafe_hash"。如果unsafe_hash为True,添加一个__hash__函数,但如果__hash__已存在,则抛出TypeError。如果unsafe_hash为False,根据eq=和frozen=的值添加__hash__。unsafe_hash=False的行为与旧的hash=None行为相同。unsafe_hash=False是默认值,就像hash=None曾经是默认值一样。

  • bpo-32947: 添加OP_ENABLE_MIDDLEBOX_COMPAT和测试解决方法,以便未来与OpenSSL 1.1.1兼容的TLSv1.3。

  • bpo-30622: ssl模块现在能检测到LibreSSL中缺少的NPN支持。

  • bpo-32922: dbm.open()现在使用文件系统编码而不是默认编码对文件名进行编码。

  • bpo-32859: 在 os.dup2 中,不再每次调用时检查 dup3 系统调用是否存在。

  • bpo-32556: nt._getfinalpathname、nt._getvolumepathname和nt._getdiskusage现在能正确地从字节转换。

  • bpo-25988: 当使用或直接从 collections 导入 ABC 而不是从 collections.abc 导入时,发出 DeprecationWarning

  • bpo-21060: 将setup.py upload中令人困惑的消息从"No dist file created in earlier command"重写为更有帮助的"Must create and upload files in one command"。

  • bpo-32852: 确保在运行trace时sys.argv保持为列表。

  • bpo-31333: 新增了 _abc 模块。这是一个速度优化模块,提供了 abc 中各种函数和方法的 C 语言实现。创建 ABC 子类及使用 ABC 子类调用 isinstanceissubclass 的速度提高了 1.5 倍。此外,这还使得 Python 的启动速度提高了 10%。请注意,新实现隐藏了内部注册表和缓存,之前可以通过私有属性 _abc_registry_abc_cache_abc_negative_cache 访问。现在可以使用三个调试辅助方法 _dump_registry_abc_registry_clear_abc_caches_clear 来代替。

  • bpo-32841: 修复了 asyncio.Condition 问题,该问题在通知并取消条件锁后默默忽略了取消。由Bar Harel提供补丁。

  • bpo-32819: ssl.match_hostname() 已被简化,不再依赖 re 和 ipaddress 模块处理通配符和IP地址。对于无效通配符的错误报告已改进。

  • bpo-32394: socket: 在旧版本Windows运行时移除TCP_FASTOPEN、TCP_KEEPCNT、TCP_KEEPIDLE、TCP_KEEPINTVL标志。

  • bpo-31787: 修复了多个模块中 __init__() 方法的内存泄漏问题。(由Oren Milman贡献)

  • bpo-30157: 修复了在只有最后一个字段被引用时,csv.Sniffer.sniff() 中猜测引用和分隔符的问题。由Jake Davis提供补丁。

  • bpo-32792: collections.ChainMap() 保留了底层映射的顺序。

  • bpo-32775: fnmatch.translate() 不再生成包含集合操作的模式。以'['开头或包含'--'、'&&'、'~~'或'||'的集合在未来版本的正则表达式中将被不同解释。目前它们会发出警告。fnmatch.translate() 现在避免意外生成包含此类集合的模式。

  • bpo-32622: 为Windows proactor事件循环实现原生快速发送文件功能。

  • bpo-32777: 修复了在POSIX系统的子进程中,当标记文件描述符为可继承时,subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。

  • bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在,在支持dl的平台上,共享扩展已明确链接到libdl。

  • bpo-32741: 实现 asyncio.TimerHandle.when() 方法。

  • bpo-32691: 在使用pdb运行模块时使用mod_spec.parent。

  • bpo-32734: 修复了 asyncio.Lock() 的安全问题,该问题允许多次获取和锁定同一个锁,而锁并未释放。由Bar Harel提供补丁。

  • bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。

  • bpo-31453: 添加TLSVersion常量和SSLContext.maximum_version / minimum_version属性。新API封装了OpenSSL 1.1 https://web.archive.org/web/20180309043602/https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html 的特性。

  • bpo-24334: 清理了ssl模块的内部实现细节。SSLSocket减少了一层间接引用。所有者与会话信息现在由SSLSocket和SSLObject的构造函数处理。通道绑定实现已被简化。

  • bpo-31848: 修复Aifc_read.initfp()中当SSND块未找到时的错误处理。补丁由Zackery Spytz提供。

  • bpo-32585: 向 tkinter.ttk 添加Ttk spinbox小部件。由Alan D Moore提供补丁。

  • bpo-32221: 现在,返回包含IPv6地址的元组的各种函数省略了 %scope 部分,因为相同的信息已经在 scopeid 元组项中编码。特别是这加快了 socket.recvfrom() 在接收多播数据包时的速度,因为省略了无用的网络接口名称解析。

  • bpo-30693: TarFile类现在以一种可重复的方式递归目录。

  • bpo-30693: ZipFile类现在以一种可重复的方式递归目录。

文档

  • bpo-28124: ssl 模块函数 ssl.wrap_socket() 已被弱化并弃用,推荐使用更安全高效的 SSLContext.wrap_socket() 方法。

  • bpo-17232: 澄清 -O 和 -OO 的文档。由 Terry Reedy 提供补丁。

  • bpo-32436: 为 contextvars 模块(PEP 567)添加文档。

  • bpo-32800: 更新 xml 默认命名空间的 w3c 文档链接。

  • bpo-11015: 更新 test.support 文档。

  • bpo-8722: 文档化当属性 get() 方法引发 AttributeError__getattr__() 的行为。

  • bpo-32614: 修改文档中的正则表达式示例,使用原始字符串以防止 DeprecationWarning,并在正则表达式 HOWTO 中添加文本以突出弃用。

  • bpo-31972: 改进 pathlib.PurePath 子类的文档字符串。

测试

  • bpo-31809: 添加测试以验证与 secp ECDH 曲线的连接。

构建

  • bpo-32898: 修复了在使用 COUNT_ALLOCS 时的 Python 调试构建问题。

Windows

  • bpo-32901: 将Tcl和Tk版本更新到8.6.8

  • bpo-31966: 修复WindowsConsoleIO.write()写入空数据的问题。

  • bpo-32409: 确保activate.bat可以处理Unicode内容。

  • bpo-32457: 改进启动Python时对非规范化可执行路径的处理。

  • bpo-32370: 在uuid模块中为ipconfig输出使用正确的编码。由Segev Finer提交补丁。

  • bpo-29248: 修复Windows上的 os.readlink(),它错误地将重新解析数据缓冲区的``PrintNameOffset`` 字段视为字符数而非字节数。由Craig Holmquist和SSE4提交补丁。

macOS

  • bpo-32901: 将macOS 10.9+安装程序更新至Tcl/Tk 8.6.8。

IDLE

  • bpo-32916: 在pyparse中将 str 更改为 code

  • bpo-32905: 移除pyparse模块中未使用的代码。

  • bpo-32874: 为pyparse添加测试。

  • bpo-32837: 对于IDLE的系统和位置无关文件,使用系统和位置相关的默认编码对于open()来说是一个坏主意。

  • bpo-32826: 在IDLE的test_help_about的open()中添加"encoding=utf-8"。GUI测试test_file_buttons()仅查看初始的ascii-only行,但在open()默认为'ascii'的系统上失败,因为readline()内部读取和解码足够远,以在CREDITS.txt中遇到非ascii字符。

  • bpo-32765: 更新configdialog General标签的文档字符串,将新部件添加到部件列表中。

工具/示例

  • bpo-32222: 修复 pygettext 不提取带有类型注释参数的函数的文档字符串的问题。由 Toby Harradine 提供的补丁。

Python 3.7.0 beta 1

发布日期: 2018-01-30

核心与内置函数

  • bpo-32703: 修复了协程在最终化时存在活动错误集时的 ResourceWarning 问题。

  • bpo-32650: Pdb 和其他依赖于 bdb.py 的调试器现在能够正确地单步跳过(next 命令)原生协程。由 Pablo Galindo 提供补丁。

  • bpo-28685: 通过尽可能使用类型专用比较,优化了 list.sort() 和 sorted()。

  • bpo-32685: 改进了当 Python 2 形式的 print 语句出现在复合语句的同一行或以分号而非换行符终止时的建议。由 Nitish Chandra 提供补丁。

  • bpo-32697: Python 现在明确保留了仅关键字参数的定义顺序。虽然之前总是保留其顺序,但这一行为从未得到保证;现在这一行为得到了保证和测试。

  • bpo-32690: locals() 字典现在按照变量定义的词法顺序显示。之前顺序是相反的。

  • bpo-32677: 向 strbytesbytearray 添加了 .isascii() 方法。可用于测试字符串是否仅包含 ASCII 字符。

  • bpo-32670: 对所有代码强制执行 PEP 479。这意味着从生成器中手动引发 StopIteration 异常对所有代码都是禁止的,无论是否使用了 'from __future__ import generator_stop'。

  • bpo-32591: 添加了对跟踪协程对象来源的内置支持;参见 sys.set_coroutine_origin_tracking_depth 和 CoroutineType.cr_origin。这取代了 asyncio 调试模式对原生协程对象使用协程包装的做法。

  • bpo-31368: 在 os 模块中暴露了 preadv 和 pwritev 系统调用。由 Pablo Galindo 提供补丁

  • bpo-32544: hasattr(obj, name)getattr(obj, name, default)name 未找到且 obj 未重写 __getattr____getattribute__ 时,速度比以前快了约4倍。

  • bpo-26163: 改进了 frozenset() 的哈希函数,当面对包含许多相似值的数据集时,能生成更多不同的哈希值。

  • bpo-32550: 移除了 STORE_ANNOTATION 字节码。

  • bpo-20104: 在 os 模块中暴露了 posix_spawn 作为低级 API。(在 3.7.0rc1 之前移除)

  • bpo-24340: 修复了代码堆栈大小的估计问题。

  • bpo-32436: 实现了 PEP 567 上下文变量。

  • bpo-18533: repr() 在包含其自身的 values()items() 的字典上不再引发 RecursionError;OrderedDict 同理。相反,像其他递归结构一样使用 ...。由 Ben North 提供补丁。

  • bpo-20891: Py_Initialize() 现在会创建 GIL。GIL 不再“按需”创建,以修复在非 Python 线程中调用 PyGILState_Ensure() 时的竞态条件。

  • bpo-32028: 在为将 Py2 打印语句转换为 Py3 内置打印函数调用生成建议时,现在正确地忽略了前导空白。由 Sanyam Khurana 提供补丁。

  • bpo-31179: 使 dict.copy() 速度提高了多达5.5倍。

  • bpo-31113: 在编译器中消除了对正常控制流的递归。

  • bpo-25988: 弃用在常规 collections 模块中暴露 collections.abc 的内容。

  • bpo-31429: ssl模块的默认密码套件选择现在使用黑名单方法,而不是硬编码的白名单。Python不再重新启用被OpenSSL安全更新阻止的密码。默认密码套件选择可以在编译时配置。

  • bpo-30306: contextlib.contextmanager现在一旦进入上下文管理器,就会释放传递给底层生成器的参数。以前,它会保持它们活跃,只要上下文管理器是活跃的,即使不作为函数装饰器使用。由Martin Teichmann提供补丁。

  • bpo-21417: 增加了对设置zipfile.ZipFile压缩级别的支持。

  • bpo-32251: 实现了asyncio.BufferedProtocol(临时API)。

  • bpo-32513: 在数据类中,允许更容易地覆盖dunder方法,而无需指定装饰器参数。

  • bpo-32660: termios 在Solaris/衍生系统下也提供 FIONREAD, FIONCLEX, FIOCLEX, FIOASYNCFIONBIO

  • bpo-27931: 修复当用户名为空引号字符串时的电子邮件地址头解析错误。由Xiang Zhang提供补丁。

  • bpo-32659: 在Solaris及其衍生系统下,os.stat_result 提供了一个st_fstype属性。

  • bpo-32662: 实现了Server.start_serving()、Server.serve_forever()和Server.is_serving()方法。向loop.create_server()和loop.create_unix_server()添加了'start_serving'关键字参数。

  • bpo-32391: 实现了 asyncio.StreamWriter.wait_closed()asyncio.StreamWriter.is_closing() 方法。

  • bpo-32643: 将Task._step、Task._wakeup和Future._schedule_callbacks方法设为私有。

  • bpo-32630: 重构decimal模块以使用contextvars存储decimal上下文。

  • bpo-32622: 添加 asyncio.AbstractEventLoop.sendfile() 方法。

  • bpo-32304: distutils的上传命令不再损坏以CR字节结尾的tar文件,并且不再尝试在上传的任何文本字段中将CR转换为CRLF。

  • bpo-32502: 当遇到64位硬件地址时,uuid.uuid1不再抛出异常。

  • bpo-32596: concurrent.futures 现在懒加载 ThreadPoolExecutorProcessPoolExecutor (使用 PEP 562) 。这使得 import asyncio 大约快15%,因为 asyncio 默认只使用 ThreadPoolExecutor

  • bpo-31801: 在 Enum 中添加 _ignore_,以便在类构造期间可以使用临时变量而不会将其转换为成员。

  • bpo-32576: 在可以从弱引用回调调用的地方使用 queue.SimpleQueue()。

  • bpo-32574: 修复 asyncio.Queue 中的内存泄漏问题,当队列大小有限且已满时,取消 queue.put() 可能导致内存泄漏。补丁由:José Melero。

  • bpo-32521: nis 模块现在与新的 libnsl 和头文件位置兼容。

  • bpo-32467: collections.abc.ValuesView 现在继承自 collections.abc.Collection。

  • bpo-32473: 提高 ABCMeta._dump_registry() 输出的可读性

  • bpo-32102: subprocess.run 的新参数 capture_output

  • bpo-32521: glibc 已移除 Sun RPC。在 nis 模块中使用替代的 libtirpc 头文件和库。

  • bpo-32493: UUID 模块修复了 FreeBSD/OpenBSD 的构建

  • bpo-32503: 使用协议4进行pickle时不再创建过小的帧。

  • bpo-29237: 为 pstats 排序选项创建枚举

  • bpo-32454: 向 socket 模块添加 close(fd) 函数。

  • bpo-25942: subprocess 模块现在在 subprocess.call、subprocess.run 或 Popen 上下文管理器期间处理 Ctrl-C KeyboardInterrupt 时更加优雅。现在它会在继续 KeyboardInterrupt 异常处理之前等待子进程(假设也收到了 SIGINT)短暂退出。这仍然包括在 call() 和 run() API 中的 SIGKILL,但至少子进程有机会首先退出。

  • bpo-32433: hmac 模块现在有了 hmac.digest(),它提供了一个优化的 HMAC 摘要。

  • bpo-28134: 现在默认情况下,套接字会自动从文件描述符中检测家族、类型和协议。

  • bpo-32404: 修复了 datetime.datetime.fromtimestamp()datetime.datetime 子类中不调用 __new__ 的 bug。

  • bpo-32403: 提高了 datetime.datedatetime.datetime 替代构造器的速度。

  • bpo-32228: 确保 truncate() 在写入长度超过缓冲区大小后保留文件位置(由 tell() 报告)。

  • bpo-32410: 为 asyncio 事件循环实现了 loop.sock_sendfile

  • bpo-22908: 向 ZipExtFile 类添加了 seek 和 tell。这仅在用于打开 zipfile 的文件对象可查找时有效。

  • bpo-32373: 添加了 socket.getblocking() 方法。

  • bpo-32248: 添加了 importlib.resourcesimportlib.abc.ResourceReader 作为读取包内资源的统一 API。希望支持资源读取的加载器必须实现 get_resource_reader() 方法。基于文件和基于 zipimport 的加载器都实现了这些 API。importlib.abc.ResourceLoader 已被弃用,推荐使用这些新的 API。

  • bpo-32320: collections.namedtuple() 现在支持默认值。

  • bpo-29302: 添加了 contextlib.AsyncExitStack。由 Alexander Mohr 和 Ilya Kulakov 提供补丁。

  • bpo-31961: 已在 Python 3.7.0b2 中移除。 subprocess.Popen 的 args 参数现在可以是 path-like object。如果 args 以序列形式给出,其第一个元素现在也可以是 path-like object

  • bpo-31900: 现在 locale.localeconv() 函数会临时将 LC_CTYPE 区域设置改为``LC_NUMERIC``区域设置,以解码 decimal_pointthousands_sep 字节字符串,如果它们是非ASCII或长度超过1字节,并且 LC_NUMERIC 区域设置与 LC_CTYPE 区域设置不同。这一临时变更会影响其他线程。对于 str.format() 方法,当使用 n 类型格式化数字(int, float, float 及其子类)时(例如:'{:n}'.format(1234)),也进行了相同的更改。

  • bpo-31853: 在SSLSocket中使用super().method替代socket.method。它们很可能是因为遗留原因而存在。

  • bpo-31399: ssl模块现在使用OpenSSL的X509_VERIFY_PARAM_set1_host()和X509_VERIFY_PARAM_set1_ip() API来验证主机名和IP地址。可以通过SSLContext.hostname_checks_common_name禁用主题通用名称回退。

  • bpo-14976: 添加了一个queue.SimpleQueue类,这是一个无界的FIFO队列,带有put()的可重入C实现。

文档

  • bpo-32724: 在Pdb的文档中添加了一些命令的引用。由Stéphane Wirtel提供补丁。

  • bpo-32649: 完成了C API文档的性能分析和跟踪部分,新增了每操作码事件的说明。

  • bpo-17799: 解释了sys.settrace和sys.setprofile及其C-API对应项的实际行为,关于在每个函数中接收哪些类型的事件。由Pablo Galindo Salgado提供补丁。

测试

  • bpo-32721: 修复test_hashlib,使其在未构建_md5模块时不会失败。

  • bpo-28414: 为IDNA 2003和2008主机名添加测试用例。自 bpo-31399 落地以来,IDNA 2003国际化主机名已经可以工作。IDNA 2008仍然存在问题。

  • bpo-32604: 添加一个新的 "_xxsubinterpreters" 扩展模块,该模块暴露了现有的子解释器 C-API 和一个新的跨解释器数据共享机制。此模块主要用于更彻底地测试现有的子解释器支持。请注意,_xxsubinterpreters 模块已在 3.7.0rc1 中移除。

  • bpo-32602: 添加测试证书和用于 ECDSA 证书及 EC/RSA 双模式的测试。

  • bpo-32549: 在 Travis CI 上,Python 现在编译并使用 OpenSSL 1.1.0g 的本地副本进行测试。

构建

  • bpo-32635: 修复当系统提供的是 libxcrypt 而不是 libcrypt 时 crypt 模块的段错误。

  • bpo-32598: 使用 autoconf 检测 OpenSSL 库、头文件和支持的特性。ax_check_openssl M4 宏使用 pkg-config 定位 OpenSSL,并回退到手动搜索。

  • bpo-32593: 放弃对 FreeBSD 9 及更旧版本的支持。

  • bpo-29708: 如果设置了 SOURCE_DATE_EPOCH 环境变量,py_compile 将始终创建基于哈希的 .pyc 文件。

Windows

  • bpo-32588: 创建独立的 _distutils_findvs 模块,并将缺失的 _queue 模块添加到安装程序中。

  • bpo-29911: 确保显示单独的修改和卸载按钮。

  • bpo-32507: 对于旧版本的 Windows,使用应用本地的 UCRT 安装,而不是正确的更新。

macOS

  • bpo-32726: 提供一个额外的、更现代的 macOS 安装程序变体,仅支持 64 位模式下的 macOS 10.9+ 系统。将提供的第三方库升级到 OpenSSL 1.1.0g 和 SQLite 3.22.0。10.9+ 安装程序现在链接并提供其自己的 Tcl/Tk 8.6 副本。

  • bpo-28440: 不再将 /Library/Python/3.x/site-packages 添加到 macOS 框架构建的 sys.path 中,以避免未来的冲突。

C API

  • bpo-32681: 修复 os.dup2 的 C 实现中未初始化的变量 'res'。补丁由 Stéphane Wirtel 提供。

  • bpo-10381: 添加对 datetime.timezone 构造函数和 datetime.timezone.UTC 单例的 C API 访问。

Python 3.7.0 alpha 4

发布日期: 2018-01-08

核心与内置函数

  • bpo-31975: 默认的警告过滤器列表现在以 "default::DeprecationWarning:__main__" 条目开始,因此在单文件脚本和交互式提示符中,弃用警告默认再次显示。

  • bpo-32226: __class_getitem__ 现在是一个自动类方法。

  • bpo-32399: 使用 libc.a 中的 uuid_create() 为 AIX 添加 RFC4122 uuid 库支持。

  • bpo-32390: 修复在 os.statvfs() 返回的对象中添加 f_fsid 字段后在 AIX 上的编译失败问题 (bpo-32143)。原始由 Michael Felt 提供补丁。

  • bpo-32379: 当一个类继承自单一基类时,使 MRO 计算更快。

  • bpo-32259: 解包不可迭代对象时引发的 TypeError 错误消息现在更加具体。

  • bpo-27169: __debug__ 常量现在在编译时被优化掉。这也修复了 bpo-22091

  • bpo-32329: 当 PYTHONHASHSEED 环境变量设置为 0 时,-R 选项现在会开启哈希随机化。之前,该选项被忽略。此外,当哈希随机化被 PYTHONHASHSEED=0 关闭时,sys.flags.hash_randomization 现在被正确设置为 0。

  • bpo-30416: 优化器现在受到保护,不会花费大量时间进行复杂计算和在常量折叠中创建大常量时消耗大量内存。增加了在常量折叠中可以产生的常量的限制。

  • bpo-32282: 修复 Windows 上 socketmodule 中 VersionHelpers.h 包含的不必要的 ifdef。

  • bpo-30579: 实现 TracebackType.__new__ 以允许在 Python 级别创建回溯对象,并使 TracebackType.tb_next 可变。

  • bpo-32260: 不要在大端平台上对 SipHash 算法的输入键进行字节交换。这应确保 siphash 在不同平台上给出一致的结果。

  • bpo-31506: 改进 object.__new__ 和 object.__init__ 的错误消息逻辑。由 Sanyam Khurana 提供补丁。

  • bpo-20361: -b-bb 现在会在 sys.warnoptions 中注入 'default::BytesWarning'error::BytesWarning 条目,确保它们优先于通过 -W 选项或 PYTHONWARNINGS 环境变量配置的任何其他警告过滤器。

  • bpo-32230: -X dev 现在会在 sys.warnoptions 中注入一个 'default' 条目,确保其行为与在命令行中实际传递 -Wdefault 相同。

  • bpo-29240: 添加新的 UTF-8 模式:实现了 PEP 540

  • bpo-32226: PEP 560: 添加对 __mro_entries____class_getitem__ 的支持。由 Ivan Levkivskyi 实现。

  • bpo-32225: PEP 562: 添加对模块 __getattr____dir__ 的支持。由 Ivan Levkivskyi 实现。

  • bpo-31901: atexit 模块现在每个解释器都有其回调存储。

  • bpo-31650: 实现 PEP 552 (确定性 pycs) 。Python 现在支持基于源内容哈希而非源最后修改时间使字节码缓存文件失效。

  • bpo-29469: 将常量折叠从字节码层移动到 AST 层。原始由 Eugene Toder 提供补丁。

  • bpo-32506: 既然 dict 被定义为保持插入顺序,那么放弃 OrderedDict,直接使用普通 dict。

  • bpo-32279: 向 dataclasses.make_dataclasses() 添加参数:init、repr、eq、order、hash 和 frozen。将它们传递给 dataclass()。

  • bpo-32278: 使 dataclasses.make_dataclass() 上的类型信息可选。如果省略,则使用字符串 'typing.Any'。

  • bpo-32499: 添加 dataclasses.is_dataclass(obj),如果 obj 是数据类或其实例,则返回 True。

  • bpo-32468: 改进 frame repr() 以提及文件名、代码名称和当前行号。

  • bpo-23749: asyncio: 实现 loop.start_tls()

  • bpo-32441: 从 os.dup2 返回新的文件描述符(即第二个参数)。以前总是返回 None

  • bpo-32422: functools.lru_cache 使用更少的内存(每个缓存键3个单词)并且循环GC时间大约减少到1/3。

  • bpo-31721: 防止当Future._log_traceback被手动设置为True时Python崩溃。现在它只能被设置为False,否则会引发ValueError。

  • bpo-32415: asyncio: 添加Task.get_loop()和Future.get_loop()

  • bpo-26133: 在解释器关闭时不要在asyncio UNIX事件循环中取消订阅信号。

  • bpo-32363: 使asyncio.Task.set_exception()和set_result()引发NotImplementedError。Task._step()和Future.__await__()在无效状态时引发适当的异常,而不是AssertionError。

  • bpo-32357: 为非原生协程(如用Cython编译的async/await)优化asyncio.iscoroutine()和loop.create_task()。'loop.create_task(python_coroutine)'过去比'loop.create_task(cython_coroutine)'快20%。现在,后者一样快。

  • bpo-32356: asyncio.transport.resume_reading()和pause_reading()现在是幂等的。新增transport.is_reading()方法。

  • bpo-32355: 优化asyncio.gather(); 现在快达15%。

  • bpo-32351: 如果delay<0,在asyncio.sleep中使用fastpath(2倍加速)

  • bpo-32348: 优化asyncio.Future schedule/add/remove回调。该优化显示async/await代码性能提升3-6%。

  • bpo-32331: 修复socket.settimeout()和socket.setblocking()以保持socket.type不变。修复socket.socket()构造函数以重置应用于socket类型的任何位标志。此更改仅影响具有SOCK_NONBLOCK和/或SOCK_CLOEXEC的操作系统。

  • bpo-32248: 添加 importlib.abc.ResourceReader 作为加载器的ABC,为读取包中包含的资源提供统一的API。同时添加 importlib.resources 作为 importlib_resources 的端口。

  • bpo-32311: 实现asyncio.create_task(coro)快捷方式

  • bpo-32327: 将文档中标记为协程的asyncio函数转换为协程。受影响的函数包括:loop.sock_sendall、loop.sock_recv、loop.sock_accept、loop.getaddrinfo、loop.getnameinfo。

  • bpo-32323: urllib.parse.urlsplit() 现在不会将作用域IPv6地址的主机名中的区域ID(作用域)转换为小写。

  • bpo-32302: 修复了distutils的bdist_wininst对于CRT v142的支持:它二进制兼容于CRT v140。

  • bpo-29711: 修复了asyncio proactor循环中的 stop_serving 会杀死所有监听服务器的问题。

  • bpo-32308: re.sub() 现在会替换与前一个非空匹配相邻的空匹配。

  • bpo-29970: 如果握手在10秒内未完成,则中止asyncio SSLProtocol连接。

  • bpo-32314: 实现了asyncio.run()。

  • bpo-17852: 基于对_Py_PyAtExit()语义的误解,撤销了不正确的修复。

  • bpo-32296: 在C中实现了asyncio._get_running_loop()和get_event_loop()。这使得它们的速度提高了4倍。

  • bpo-32250: 实现了 asyncio.current_task()asyncio.all_tasks()。添加了旨在供替代任务实现使用的助手:asyncio._register_taskasyncio._enter_taskasyncio._leave_task``和 ``asyncio._unregister_task。弃用了``asyncio.Task.current_task()``和 asyncio.Task.all_tasks()

  • bpo-32255: 现在,当写入CSV文件时,单个空字段总是会被引用。这允许区分空行和由单个空字段组成的行。由Licht Takeuchi提供补丁。

  • bpo-32277: 在不支持 chmod(..., follow_symlinks=False) 的平台上,引发``NotImplementedError``而不是 SystemError。由Anthony Sottile提供补丁。

  • bpo-30050: signal.set_wakeup_fd的新参数warn_on_full_buffer让你控制当唤醒fd缓冲区溢出时Python是否在stderr上打印警告。

  • bpo-29137: fpectl 库已被移除。它从未默认启用,在 x86-64 上从未正确工作,并且它以导致 C 扩展意外中断的方式改变了 Python ABI。

  • bpo-32273: 将 asyncio.test_utils 移动到 test.test_asyncio。

  • bpo-32272: 移除 asyncio.async() 函数。

  • bpo-32269: 添加 asyncio.get_running_loop() 函数。

  • bpo-32265: 内置类型的所有类和静态方法现在被 inspect.classify_class_attrs() 正确分类并在 pydoc 输出中分组。添加了 types.ClassMethodDescriptorType 用于内置类型的未绑定类方法。

  • bpo-32253: 弃用 yield from lock, await lock, with (yield from lock)with await lock 用于 asyncio 同步原语。

  • bpo-22589: 将 .bmp 的 MIME 类型从 'image/x-ms-bmp' 改为 'image/bmp'。

  • bpo-32193: 将 asyncio 转换为使用 async/await 语法。旧式的 yield from 仍然支持。

  • bpo-32206: 添加支持以使用 pdb 运行模块。

  • bpo-32227: functools.singledispatch 现在支持使用类型注释注册实现。

  • bpo-15873: 添加了新的替代构造函数 datetime.datetime.fromisoformat(), datetime.time.fromisoformat()datetime.date.fromisoformat() 作为各自类 isoformat 方法的逆操作。

  • bpo-32199: getnode() ip 获取器现在使用 'ip link' 而不是 'ip link list'。

  • bpo-32143: os.statvfs() 包含来自 statvfs(2) 的 f_fsid 字段。

  • bpo-26439: 通过实现 ctypes._aix.find_library() 修复 ctypes.util.find_library() 在 AIX 上的问题。补丁由:Michael Felt

  • bpo-31993: 当将大的 bytes 和 str 对象序列化到文件时,pickler 现在使用更少的内存。使用协议 4 创建的 pickle 将需要更少的内存来反序列化大的 bytes 和 str 对象。

  • bpo-27456: 确保在 Linux 上设置 TCP_NODELAY。测试由 Victor Stinner 完成。

  • bpo-31778: 现在ast.literal_eval()更加严格。不再允许任意数字的加减法。

  • bpo-31802: 即使`os`模块尚未导入,导入原生路径模块(posixpath, ntpath)现在也能正常工作。

  • bpo-30241: 添加contextlib.AbstractAsyncContextManager。由Jelle Zijlstra提供补丁。

  • bpo-31699: 修复了当任务参数或结果导致pickling或unpickling错误时 concurrent.futures.ProcessPoolExecutor 中的死锁问题。这应确保对 ProcessPoolExecutor API的调用最终总能返回。

  • bpo-15216: TextIOWrapper.reconfigure() 支持更改*encoding*, errors, 和*newline*。

文档

  • bpo-32418: 向Server和AbstractServer类添加get_loop()方法。

测试

  • bpo-32252: 修复用于在测试崩溃时防止核心转储文件的faulthandler_suppress_crash_report()。getrlimit()在成功时返回零。

  • bpo-32002: 调整C语言环境强制测试,针对空语言环境和POSIX语言环境情况,更容易适应平台依赖行为。

Windows

  • bpo-19764: 在Windows上实现支持 subprocess.Popen(close_fds=True)。由Segev Finer提供补丁。

工具/示例

  • bpo-24960: 2to3和lib2to3现在可以使用pkgutil.get_data()读取pickled语法文件,而不是探测文件系统。这使得2to3和lib2to3在从zipfile运行时也能工作。

C API

  • bpo-32030: 如果未设置 PYTHONMALLOC 环境变量,Py_Initialize()不会将内存分配器重置为默认值。

  • bpo-29084: OrderedDict的未记录C API已从有限C API中排除。它是被错误添加的,实际上在有限C API中从未工作过。

  • bpo-32264: 将pygetopt.h头文件移动到internal/,因为它没有公共API。

  • bpo-32241: Py_SetProgramName()Py_SetPythonHome() 现在接受``const wchar *参数而不是 ``wchar *

Python 3.7.0 alpha 3

发布日期: 2017-12-05

核心与内置函数

  • bpo-32176: 现在,代码对象构造函数会根据freevars和cellvars正确设置co_flags.CO_NOFREE,而不是需要调用者正确设置。这确保了当额外的cell引用被注入到修改后的代码对象和函数中时,它会自动清除。

  • bpo-10544: 现在在推导式和生成器表达式中不推荐使用yield表达式。它们仍然允许在最外层可迭代对象的定义中使用,因为那是在封闭作用域中直接评估的。

  • bpo-32137: 现在,深度嵌套字典的repr会引发RecursionError,而不是因为堆栈溢出而崩溃。

  • bpo-32096: 在C API中恢复内存分配器的更改:将结构体从_PyRuntime移回Objects/obmalloc.c。内存分配器再次静态初始化,因此PyMem_RawMalloc()和Py_DecodeLocale()可以在_PyRuntime_Initialize()之前调用。

  • bpo-32043: 添加了一个新的“开发者模式”:新的“-X dev”命令行选项,用于在运行时启用调试检查。

  • bpo-32023: 现在,当在类定义中使用没有括号的生成器表达式代替继承列表时,会正确引发SyntaxError。只有在调用时可以省略括号的重复。

  • bpo-32012: 现在,当传递一个没有括号的生成器表达式作为参数,但后面跟着一个尾随逗号时,会正确引发SyntaxError。生成器表达式总是需要直接在一组括号内,并且不能在两边有任何逗号。

  • bpo-28180: 添加了一个新的内部 _Py_SetLocaleFromEnv(category) 辅助函数,以提高不同``libc``实现之间行为的一致性(例如,Android默认不支持从环境设置区域设置)。

  • bpo-31949: 修复了打印回溯(PyTraceBack_Print())中的若干问题。现在将sys.tracebacklimit设置为0或更小会抑制回溯的打印。将sys.tracebacklimit设置为None现在会导致使用默认限制。将sys.tracebacklimit设置为大于LONG_MAX的整数现在意味着使用LONG_MAX限制而不是默认限制。修复了Windows上超过 2**31 个回溯项时的整数溢出问题。修复了输出错误处理。

  • bpo-30696: 修复了在没有内存时交互式解释器无限循环的问题。

  • bpo-20047: Bytearray方法partition()和rpartition()现在仅接受类似字节的对象作为分隔符,如文档所述。特别是,现在当传递整数作为分隔符时,它们会引发TypeError而不是返回一个虚假的结果。

  • bpo-21720: 当 __import__()fromlist 参数或模块的 __all__ 属性包含bytes实例时,不再发出BytesWarning。

  • bpo-31845: 环境变量在解释器启动时再次被正确读取。

  • bpo-28936: 确保在给定范围内首先检测到涉及参数和 globalnonlocal 的词法上第一个语法错误。由Ivan Levkivskyi提供补丁。

  • bpo-31825: 修复了在解码转义的非ascii字节时'unicode-escape'编解码器和codecs.escape_decode()中的OverflowError。

  • bpo-31618: 3.7a1中添加的每帧跟踪逻辑已更改,以便在发出 "line""opcode" 事件之前更新 frame->f_lineno。以前,操作码事件首先发出,因此偶尔会在帧上看到过时的行号。此功能的行为因此略有变化:当同时启用 f_trace_linesf_trace_opcodes 时,行事件现在首先发生。

  • bpo-28603: 在解释器退出时打印异常的完整上下文/原因链,即使链中的异常不可哈希或与后面的异常相等。由Zane Bitter提供补丁。

  • bpo-31786: 修复 select 模块中负超时时间在 -1.0 和 0.0 之间的正确舍入问题。现在函数会按预期阻塞等待事件。此前,调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。

  • bpo-31781: 防止在调用未初始化的 zipimport.zipimporter 对象方法时崩溃。由 Oren Milman 提供补丁。

  • bpo-30399: 单一参数的 BaseException 的标准 repr() 不再包含多余的尾随逗号。

  • bpo-31626: 修复了调试内存分配器中的一个错误。在缩小内存块后存在对已释放内存的写入。

  • bpo-30817: PyErr_PrintEx() 现在会清除可能由 _PySys_SetObjectId() 引发的忽略异常,例如在没有内存时。

  • bpo-28556: 对 typing 模块的两项小修复:允许浅复制泛型类的实例,改进 __init_subclass__ 与泛型的交互。原始 PR 由 Ivan Levkivskyi 提供。

  • bpo-32214: PEP 557,数据类。提供了一个装饰器,为使用类型注解指定字段的类添加样板方法。

  • bpo-27240: 新电子邮件策略的头部折叠算法已被重写,这也修复了 bpo-30788bpo-31831bpo-32182。特别是,现在可以正确进行 RFC2231 折叠。

  • bpo-32186: io.FileIO.readall() 和 io.FileIO.read() 现在在获取文件大小时释放 GIL。修复了所有线程因无法访问的 NFS 服务器而挂起的问题。由 Nir Soffer 提供补丁。

  • bpo-32101: 添加 sys.flags.dev_mode 标志

  • bpo-32154: 已移除 asyncio.windows_utils.socketpair() 函数:直接使用 socket.socketpair(),该函数自 Python 3.5 起在所有平台上可用(此前在 Windows 上不可用)。asyncio.windows_utils.socketpair() 在 Python 3.5 及更新版本上只是 socket.socketpair 的别名。

  • bpo-32089: 警告:在开发(-X dev)和调试模式(pydebug 构建)中,默认警告过滤器中对 ResourceWarning 使用“default”操作,而非“always”操作。

  • bpo-32107: uuid.getnode() 现在优先返回普遍管理的 MAC 地址(如果可用),而不是本地管理的 MAC 地址。这为 uuid.uuid1() 返回的 UUID 提供了更好的全局唯一性保证。如果只有本地管理的 MAC 地址可用,则返回找到的第一个此类地址。

  • bpo-23033: 在 ssl.match_hostname() 的第二个参数中,当主机名的最左侧段是且仅是一个字符时,现在支持通配符。由 Mandeep Singh 提供补丁。

  • bpo-12239: 当属性的值为 VT_EMPTY 时,使 msilib.SummaryInformation.GetProperty() 返回 None。初始由 Mark Mc Mahon 提供补丁。

  • bpo-28334: 在 netrc.netrc 中使用 os.path.expanduser() 来查找 ~/.netrc 文件。如果文件不存在,则抛出 FileNotFoundError。由 Dimitri Merejkowsky 提供补丁。

  • bpo-32121: 使 tracemalloc.Traceback 的行为更类似于 traceback 模块,将帧从最旧到最新排序。Traceback.format() 现在接受负的 limit 参数,将结果截断为 abs(limit) 个最旧的帧。要获得旧的行为,可以使用 Traceback.format() 的新参数 most_recent_first。(补丁由 Jesse Bakker 提供。)

  • bpo-31325: 修复了 RobotFileParser.parse() 方法中 collections.namedtuple() 的错误用法。初始由 Robin Wellner 提供补丁。

  • bpo-12382: msilib.OpenDatabase() 现在在无法打开或创建 MSI 文件时引发更好的异常消息。初始由 William Tisäter 提供补丁。

  • bpo-19610: setup() 现在会对某些字段的无效类型发出警告。当 classifierskeywordsplatforms 字段未指定为列表或字符串时,distutils.dist.Distribution 类现在会发出警告。

  • bpo-32071: 为 python -m unittest 添加了 -k 命令行选项,以仅运行与给定模式匹配的测试。

  • bpo-10049: 向 contextlib 添加了 nullcontext 无操作上下文管理器。这为处理可选上下文管理器时提供了比 ExitStack() 更简单、更快的替代方案。

  • bpo-28684: 这里使用了新的 test.support.skip_unless_bind_unix_socket() 装饰器来跳过 asyncio 测试,这些测试因为平台缺少对 unix 域套接字的功能性 bind() 函数而失败(如在现在以强制模式运行 SELinux 的较新 Android 版本上的非 root 用户就是这种情况)。

  • bpo-32110: codecs.StreamReader.read(n) 现在对于非负的 n,返回不超过 n 个字符/字节。这使得它与其他类似文件对象的 read() 方法兼容。

  • bpo-27535: warnings 模块在警告过滤器的 "ignore" 操作的隐藏警告注册表中不再泄漏内存。warn_explicit() 函数不再为 "ignore" 操作将警告键添加到注册表中。

  • bpo-32088: warnings: 当 Python 以调试模式构建(Py_DEBUG)时,DeprecationWarningPendingDeprecationWarningImportWarning 警告现在默认显示。

  • bpo-1647489: 修复了可以匹配空字符串的正则表达式模式的搜索。现在可以在匹配空字符串后正确找到非空字符串。

  • bpo-25054: 添加了对可以匹配空字符串的模式进行拆分的支持。

  • bpo-32072: 修复了二进制 plists 的问题:修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。

  • bpo-32069: 从asyncio中移除遗留的SSL传输,反正总是使用ssl.MemoryBIO。

  • bpo-32066: asyncio: 在create_unix_connection中支持pathlib.Path;sock参数应为可选的

  • bpo-32046: 更新2to3,将operator.isCallable(obj)转换为callable(obj)。由Donghee Na提供补丁。

  • bpo-32018: inspect.signature应遵循 PEP 8,如果参数有注解和默认值。由Donghee Na提供补丁。

  • bpo-32025: 添加time.thread_time()和time.thread_time_ns()

  • bpo-32037: 适应有符号32位整数的整数现在将使用协议0的INT操作码进行pickle。这将减少pickle的大小,加快pickle和unpickle的速度,并使这些整数在Python 2中作为int实例被unpickle。

  • bpo-32034: 使asyncio.IncompleteReadError和LimitOverrunError可pickle。

  • bpo-32015: 修复了在等待异步读写套接字期间重新连接套接字时asyncio的循环问题。

  • bpo-32011: 恢复了对加载带有TYPE_INT64代码的marshal文件的支持。这些文件可以在Python 2.7中生成。

  • bpo-28369: 增强add_reader/writer检查,确保套接字未被某些传输使用。之前,仅支持使用int FD调用add_reader/writer的情况。现在,对所有类文件对象都正确实现了检查。

  • bpo-31976: 修复了当文件刷新缓慢时可能导致的竞态条件,如果从另一个线程关闭文件可能会导致段错误。

  • bpo-31985: 正式弃用aifc.openfp、sunau.openfp和wave.openfp。自1993年的变更7bc817d5ba917528e8bd07ec461c635291e7b06a以来,这三个模块中的openfp作为向后兼容性问题,一直指向该模块的open函数,尽管它既未经测试也无文档记录。

  • bpo-21862: cProfile命令行现在接受 -m module_name 作为脚本路径的替代方案。由Sanyam Khurana提供补丁。

  • bpo-31970: 降低asyncio调试模式的性能开销。

  • bpo-31843: sqlite3.connect()的 database 参数现在接受一个 path-like object,而不仅仅是一个字符串。

  • bpo-31945: 为 HTTPConnectionHTTPSConnection 添加可配置的 blocksize 以提高上传吞吐量。由Nir Soffer提供补丁。

  • bpo-31943: 向 asyncio.Handle 添加一个 cancelled() 方法。由Marat Sharafutdinov提供补丁。

  • bpo-9678: 修复了uuid模块中确定MAC地址的问题:在NetBSD和OpenBSD上使用ifconfig。在Linux、FreeBSD、NetBSD和OpenBSD上使用arp。基于Takayuki Shimizukawa的补丁。

  • bpo-30057: 修复了signal.signal()中潜在的信号丢失问题。

  • bpo-31933: 修复Blake2参数leaf_size和node_offset在大端平台上的问题。由Jack O'Connor提供补丁。

  • bpo-21423: 向{Process,Thread}PoolExecutor添加一个初始化参数。

  • bpo-31927: 修复了socket模块在NetBSD 8上的编译问题。修复了在NetBSD和DragonFly BSD上解析AF_BLUETOOTH地址时的断言失败或读取任意数据的问题。

  • bpo-27666: 修复了当类型chtype或mmask_t的大小小于C long的大小时,curses.box()和curses.ungetmouse()中的堆栈损坏问题。curses.box()现在接受字符作为参数。基于Steve Fink的补丁。

  • bpo-31917: 添加3个新的时钟标识符:time.CLOCK_BOOTTIMEtime.CLOCK_PROFtime.CLOCK_UPTIME

  • bpo-31897: plistlib现在在读取二进制plist时会捕获更多错误,并抛出InvalidFileException而不是意外的异常。

  • bpo-25720: 修复了检查curses WINDOW填充状态的方法。由Masayuki Yamamoto提供补丁。

  • bpo-31893: 修复了OpenBSD和NetBSD上kqueue_event结构的布局。修复了kqueue_event对象的比较。

  • bpo-31891: 修复了在NetBSD上构建curses模块的问题。

  • bpo-31884: 向subprocess模块添加了在Windows上设置优先级所需的常量。

  • bpo-28281: 移除了Calendar.weekday()函数对年份(1-9999)的限制。由Mark Gollahon提供补丁。

  • bpo-31702: crypt.mksalt() 现在允许指定 SHA-256 和 SHA-512 哈希的轮数。

  • bpo-30639: inspect.getfile() 不再计算未知对象的 repr 以显示在错误消息中,以防止不良行为的自定义 repr。

  • bpo-30768: 修复了当 timeout > 0 和 intr_flag=0 时 PyThread_acquire_lock_timed() 的 pthread+semaphore 实现:如果 sem_timedwait() 被信号(EINTR)中断,则重新计算超时。另见 PEP 475

  • bpo-31854: 添加 mmap.ACCESS_DEFAULT 常量。

  • bpo-31834: 仅在 SSSE3+ 上使用优化的 BLAKE2 代码。纯 SSE2 实现比纯 C 参考实现慢。

  • bpo-28292: 当日期超出 0001-01-01 到 9999-12-31 范围时,Calendar.itermonthdates() 将始终引发异常。为了支持不能容忍此类异常的应用程序,添加了新方法 itermonthdays3() 和 itermonthdays4()。新方法返回元组,不受 datetime.date 支持的范围限制。

  • bpo-28564: shutil.rmtree() 函数的速度提高了 20--40%。这是通过使用 os.scandir() 函数实现的。

  • bpo-28416: 具有 persistent_id() 方法的 pickle.Pickler 子类和具有 persistent_load() 方法的 pickle.Unpickler 子类的实例不再创建引用循环。

  • bpo-31653: 如果可以立即获取多处理信号量,则不释放 GIL。

  • bpo-28326: 修复当 stdout 和/或 stderr 关闭或为 None 时的 multiprocessing.Process。

  • bpo-20825: 向 ipaddress.IPv6Networkipaddress.IPv4Network 添加 subnet_ofsuperset_of 包含测试。由 Michel Albert 和 Cheryl Sabella 提供补丁。

  • bpo-31827: 移除 os.stat_float_times() 函数。该函数在 Python 2.3 中引入,用于向后兼容 Python 2.2,并从 Python 3.1 开始弃用。

  • bpo-31756: 向 subprocess 函数添加一个 subprocess.Popen(text=False) 关键字参数,以更明确地指示库何时应尝试将输出解码为文本。由 Andrew Clegg 提供补丁。

  • bpo-31819: 添加 AbstractEventLoop.sock_recv_into()。

  • bpo-31457: 如果使用嵌套的日志适配器,内部 process() 方法不再被省略。

  • bpo-31457: LoggerAdapter 对象的 manager 属性现在可以正确设置了。

  • bpo-31806: 修复 time.sleep(), threading.Lock.acquire() 和 socket.socket.settimeout() 中的超时舍入,以正确舍入 -1.0 和 0.0 之间的负超时。这些函数现在会按预期阻塞等待事件。之前,调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。

  • bpo-31803: time.clock() 和 time.get_clock_info('clock') 现在会发出 DeprecationWarning 警告。

  • bpo-31800: 扩展了对解析 UTC 偏移的支持。strptime '%z' 现在可以解析由 datetime.isoformat 生成的输出,包括秒和微秒。

  • bpo-28603: traceback: 修复了在打印异常回溯时,当当前异常或其上下文/原因链中的异常不可哈希时发生的 TypeError。由 Zane Bitter 提供补丁。

  • bpo-30541: 添加新功能以密封模拟对象并防止自动创建子模拟对象。由 Mario Corchero 提供补丁。

  • bpo-31784: 实现 PEP 564,向 time 模块添加 6 个具有纳秒分辨率的新函数:clock_gettime_ns(), clock_settime_ns(), monotonic_ns(), perf_counter_ns(), process_time_ns(), time_ns()

  • bpo-30143: 2to3 现在生成的代码使用 collections.abc 中的抽象集合类而不是 collections。

  • bpo-31770: 防止多次调用 sqlite3.Cursor 对象的 __init__() 方法时崩溃。由 Oren Milman 提供补丁。

  • bpo-31764: 防止在 sqlite3.Cursor.close() 中当 Cursor 对象未初始化时发生崩溃。补丁由 Oren Milman 提供。

  • bpo-31752: 修复在调用自定义整数的 timedelta 构造函数时可能发生的崩溃。

  • bpo-31620: 空的 asyncio.Queue 现在在队列获取轮询超时时不会泄漏内存。

  • bpo-31690: 允许将 re.ASCII、re.LOCALE 和 re.UNICODE 标志用作正则表达式的组标志。

  • bpo-30349: 如果正则表达式包含将来会语义变化的字符集构造(嵌套集和集操作),现在会发出 FutureWarning。

  • bpo-31664: 在 crypt 模块中添加了对 Blowfish 哈希的支持。

  • bpo-31632: 修复 asyncio 模块中 _SSLProtocolTransport 类的 set_protocol() 方法。此方法之前修改了错误的协议引用。

  • bpo-15037: 为 ncurses 5.7 及更早版本的 curses 中的 getkey() 添加了一个变通方案。

  • bpo-31307: 允许使用字节对象作为 configparser.ConfigParser.read() 的参数。补丁由 Vincent Michel 提供。

  • bpo-31334: 修复 select 模块中的 poll.poll([timeout]),在所有操作系统上对于任意的负超时值,现在可以仅接受非负整数或 -1。由 Riccardo Coccioli 提供补丁。

  • bpo-31310: 如果崩溃,multiprocessing 的信号量跟踪器应该重新启动。

  • bpo-31308: 使 multiprocessing 的 forkserver 进程免受 Ctrl-C 和其他用户中断的影响。如果崩溃,必要时重启它。

  • bpo-31245: 在 asyncio 的 create_datagram_endpoint 中添加了对 AF_UNIX 套接字的支持。

  • bpo-30553: 将 HTTP/2 状态码 421(Misdirected Request)添加到 http.HTTPStatus。由 Vitor Pereira 提供补丁。

文档

  • bpo-32105: 添加了 asyncio.BaseEventLoop.connect_accepted_socket 的 versionadded 标记。

测试

  • bpo-31380: 在 macOS 上跳过 test_httpservers 的 test_undecodable_file 测试:在 APFS 上失败。

  • bpo-31705: 在早于4.5版本的Linux内核上跳过test_socket.test_sha256()测试。该测试在内核3.10(ppc64le架构)上会因ENOKEY而失败。此问题已在4.5内核中修复。

  • bpo-32138: 在Android上跳过引发SIGSEGV的test_faulthandler测试,并移除test.support.requires_android_level装饰器。

  • bpo-32136: 运行时嵌入测试已从 Lib/test/test_capi.py 分离出来,移至新文件``Lib/test/test_embed.py``。

  • bpo-28668: 移除了test.support.requires_multiprocessing_queue。当信号量实现损坏或缺失时,改用test.support.import_module('multiprocessing.synchronize')跳过测试。

  • bpo-32126: 当sem_open()功能不正常时,跳过test.test_asyncio.test_events中的test_get_event_loop_new_process测试。

  • bpo-31174: 修复test_tools.test_unparse:DirectoryTestCase现在存储样本名称以始终测试相同的文件。这避免了在查找引用泄漏时产生误报。

构建

  • bpo-28538: 撤销之前的更改,if_nameindex结构由统一头文件定义。

  • bpo-28762: 撤销最后一次提交,F_LOCK宏由Android统一头文件定义。

  • bpo-29040: 支持使用统一头文件构建Android。首个支持统一头文件的NDK版本是android-ndk-r14。

  • bpo-32059: setup.py 中的 detect_modules() 现在在交叉编译时也会搜索sysroot路径。

  • bpo-31957: 修复为Windows构建时的Windows SDK版本检测。

  • bpo-31609: 修复PCbuild/clean.bat中的引号问题。

  • bpo-31934: 当构建源树不干净时中止构建。

  • bpo-31926: 修复了当.c文件中有多个同名函数和/或方法时,Argument Clinic有时会导致编译错误的问题。

  • bpo-28791: 更新Windows构建以使用SQLite 3.21.0。

  • bpo-28791: 更新OS X安装程序以使用SQLite 3.21.0。

  • bpo-28643: 使用stamp文件记录profile-opt构建进度。

  • bpo-31866: 完成移除对AtheOS的支持。

Windows

  • bpo-1102: 当 View.Fetch() 返回 ERROR_NO_MORE_ITEMS 时返回 None,而不是引发``MSIError``。初始由Anthony Tuininga提供补丁。

  • bpo-31944: 修复应用和功能对话框中的修改按钮。

  • bpo-20486: 实现 Database.Close() 方法以帮助关闭MSI数据库对象。

  • bpo-31857: 在多线程环境中使USE_STACKCHECK的行为变得确定。

macOS

  • bpo-31392: 更新macOS安装程序以使用OpenSSL 1.0.2m。

IDLE

  • bpo-32207: 在IDLE中改进tk事件异常回溯。当tk事件处理由IDLE的运行循环驱动时,不再向tk事件异常回溯中添加令人困惑和分散注意力的queue.EMPTY回溯上下文。现在,回溯与事件处理由用户代码驱动时相同。基于Serhiy Storchaka的建议的补丁。

  • bpo-32164: 删除未使用的文件idlelib/tabbedpages.py。在configdialog中使用TabbedPageSet已被ttk.Notebook替代。

  • bpo-32100: IDLE: 修复pathbrowser中的旧错误和新错误;改进测试。补丁主要由Cheryl Sabella提供。

  • bpo-31858: IDLE -- 将shell提示符操作限制在shell中。编辑器和输出窗口仅看到一个空的最后提示行。这简化了代码并修复了插入换行时的一个小错误。如果存在Sys.ps1,则在Shell启动时读取,但不设置或更改。

  • bpo-31860: IDLE配置对话框中的字体样本现在可编辑。更改在IDLE保持打开时持续存在。

  • bpo-31836: 现在如果在设置ps1的test_idle之后运行,Test_code_module将通过。代码模块如果存在则使用sys.ps1,如果不存在则设置为'>>> '。Test_code_module现在正确测试了这两种行为。ps2同理。

  • bpo-28603: 修复了一个TypeError,该错误在打印包含不可哈希异常的追溯时导致shell重启。补丁由Zane Bitter提供。

  • bpo-13802: 在IDLE的字体设置示例中使用非拉丁字符。即使用户选择的字体仅定义了Unicode基本多语言平面的一个有限子集,tcl/tk也会使用定义了该字符的其他字体。扩展后的示例让使用非拉丁字符的用户更清楚地了解他们在IDLE的shell和编辑器中可能会看到的内容。为了给扩展后的示例腾出空间,字体标签页上的框架被重新排列。字体/标签帮助文档对这些新增内容进行了一些说明。

工具/示例

  • bpo-32159: 移除CVS和Subversion工具:删除svneol.py和treesync.py脚本。CPython已经从CVS迁移到Subversion,再到Mercurial,最后到Git。CVS和Subversion已不再用于CPython的开发。

  • bpo-30722: 使redemo能够在Python 3.6及更新版本中工作。同时,移除 LOCALE 选项,因为它不适用于Python 3中的字符串模式。由Christoph Sarnowski提供补丁。

C API

  • bpo-20891: 修复PyGILState_Ensure()。当PyGILState_Ensure()在非Python线程中且在PyEval_InitThreads()之前被调用时,仅在调用PyThreadState_New()之后调用PyEval_InitThreads(),以修复崩溃问题。

  • bpo-32125: 已移除 Py_UseClassExceptionsFlag 标志。该标志自Python 2.0以来已被弃用且不再使用。

  • bpo-25612: 将当前的异常状态从帧对象移动到协程。这简化了解释器,并修复了一些由于在进入或退出生成器时交换异常状态而导致的晦涩错误。

  • bpo-23699: 添加Py_RETURN_RICHCOMPARE宏以减少富比较函数中的样板代码。

  • bpo-30697: 移除了 PyExc_RecursionErrorInst 单例,PyErr_NormalizeException() 也不再使用它。这个单例是持久的,其成员从未被清除可能会导致解释器在最终化期间出现段错误。另见 bpo-22898

Python 3.7.0 alpha 2

发布日期: 2017-10-16

核心与内置函数

  • bpo-31558: gc.freeze() 是一个新的API,它允许将垃圾收集器当前跟踪的所有对象移动到永久代,从而有效地将它们从未来的收集事件中移除。这可以用来保护这些对象的PyGC_Head不被改变。实际上,这为fork()提供了极佳的写时复制稳定性。

  • bpo-31642: 通过将sys.modules["package.module"]设置为None,恢复了阻塞的"from package import module"。

  • bpo-31708: 允许在同步函数中使用异步生成器表达式。

  • bpo-31709: 放弃对异步__aiter__的支持。

  • bpo-30404: -u选项现在使stdout和stderr流变为无缓冲而非行缓冲。

  • bpo-31619: 修复了将带有大量下划线的字符串转换为二进制基数整数时的ValueError。

  • bpo-31602: 修复了在 zlib.decompress() 出错时 zipimporter.get_source() 中的断言失败。由Oren Milman提供补丁。

  • bpo-31592: 修复了在 unicodedata.normalize() 出错时Python解析器中的断言失败。由Oren Milman提供补丁。

  • bpo-31588: 当类创建由于元类的 __prepare__() 方法出错而失败时,抛出一个带有有用错误信息的 TypeError。由Oren Milman提供补丁。

  • bpo-31574: 为importlib装备了两个dtrace探针以分析导入时间。

  • bpo-31566: 修复了在 __name__ 全局变量出错时 _warnings.warn() 中的断言失败。由Oren Milman提供补丁。

  • bpo-31506: 改进了 object.__new__object.__init__ 的错误消息逻辑。

  • bpo-31505: 修复了在 _json.make_encoder()``接收到错误的 ``encoder() 参数时 json 中的断言失败。由Oren Milman提供补丁。

  • bpo-31492: 修复了在从具有错误 __name__ 属性的模块导入失败时,以及在访问此类模块的属性失败时的断言失败。由Oren Milman提供补丁。

  • bpo-31478: 修复 _random.Random.seed() 中当参数有坏的 __abs__() 方法时的断言失败。由 Oren Milman 提供补丁。

  • bpo-31336: 通过减少必要的特殊方法查找的开销,加快类创建速度10-20%。由 Stefan Behnel 提供补丁。

  • bpo-31415: 添加 -X importtime 选项以显示每个导入花费的时间。可用于优化应用程序的启动时间。支持使用 PYTHONPROFILEIMPORTTIME 作为启用此功能的等效方式。

  • bpo-31410: 优化了调用包装器和类方法描述符。

  • bpo-31353: PEP 553 - 添加一个名为 breakpoint() 的新内置函数,它会调用 sys.breakpointhook()。默认情况下,这会导入 pdb 并调用 pdb.set_trace(),但用户可以覆盖 sys.breakpointhook() 来调用他们想要的任何调试器。钩子的原始值保存在 sys.__breakpointhook__ 中。

  • bpo-17852: 维护一个打开的缓冲文件列表,在退出解释器之前刷新它们。基于 Armin Rigo 的补丁。

  • bpo-31315: 修复 imp.create_dynamic() 中当 spec.name 不是字符串时的断言失败。由 Oren Milman 提供补丁。

  • bpo-31311: 修复 ctypes._CData__setstate__() 方法在 __dict__ 有问题时的崩溃。由 Oren Milman 提供补丁。

  • bpo-31293: 修复 timedelta 对象与具有坏的 as_integer_ratio() 方法的浮点数进行真除法和乘法时的崩溃。由 Oren Milman 提供补丁。

  • bpo-31285: 修复 warnings.warn_explicit 中当接收的加载器的 get_source() 的返回值有坏的 splitlines() 方法时的断言失败。由 Oren Milman 提供补丁。

  • bpo-30406: 使 asyncawait 成为合适的关键字,如 PEP 492 所规定。

  • bpo-30058: 修复 select.kqueue.control() 中的缓冲区溢出。

  • bpo-31672: string.Template 中的 idpattern 匹配了一些非ASCII字符。现在它使用 -i 正则表达式本地标志来避免非ASCII字符。

  • bpo-31701: 在Windows上,faulthandler.enable()现在会忽略MSC和COM异常。

  • bpo-31728: 防止由于 Element.textElement.tail 的不安全清理导致的``_elementtree``崩溃。由Oren Milman提供补丁。

  • bpo-31671: 现在 re.compile() 在编译前将传递的RegexFlag转换为普通的int对象。bm_regex_compile基准测试显示性能提升了14%。

  • bpo-30397: 编译的正则表达式对象和匹配对象的类型现在暴露为 re.Pattern 和``re.Match``。这为 re 模块的pydoc输出增加了信息。

  • bpo-31675: 修复了Tkinter的splitlist()和split()方法在传递大于2 GiB的字符串时的内存泄漏问题。

  • bpo-31673: 修复了Tkinter方法adderrorinfo()名称中的拼写错误。

  • bpo-31648: 对ElementTree中的路径谓词进行了改进:允许谓词部分周围有空格,例如"[a = 'text']",而不是要求不太可读的"[a='text']"。添加了对当前节点文本比较的支持,如"[.='text']"。由Stefan Behnel提供补丁。

  • bpo-30806: 修复了netrc对象的字符串表示。

  • bpo-31638: 向 zipapp.create_archive 添加可选参数 compressed,并向 zipapp 的命令行界面添加选项 --compress

  • bpo-25351: 避免venv激活时因未定义变量而失败。

  • bpo-20519: 尽可能避免使用ctypes并提高uuid的导入时间。

  • bpo-28293: 当正则表达式缓存满时,不再完全清空。

  • bpo-31596: 向time模块添加了pthread_getcpuclockid()。

  • bpo-27494: 使2to3接受生成器表达式中的尾随逗号。例如,现在允许``set(x for x in [],)``。

  • bpo-30347: 修复了在并发迭代itertools.groupby()迭代器时的崩溃问题。

  • bpo-30346: 由itertools.groupby()迭代器生成的迭代器现在在推进groupby迭代器后会耗尽。

  • bpo-31556: 如果超时<=0,则更快地取消asyncio.wait_for未来。

  • bpo-31540: 允许在 concurrent.futures.ProcessPoolExecutor 构造函数中传递上下文对象。同时,提前释放 concurrent.futures.ProcessPoolExecutor 中的作业资源,以改善工作线程等待新作业时的内存使用情况。

  • bpo-31516: threading.current_thread() 在关闭时不应返回一个虚拟线程。

  • bpo-31525: 在 sqlite 模块中,要求 sqlite3_prepare_v2 API。因此,sqlite 模块现在要求 sqlite 版本至少为 3.3.9。

  • bpo-26510: argparse 子解析器现在默认是必需的。这与 Python 2 的行为一致。对于可选的子解析器,使用新参数 add_subparsers(required=False)。由 Anthony Sottile 提供补丁。(截至 3.7.0rc1,默认值更改为非必需,这是自 Python 3.3 以来的情况。)

  • bpo-27541: 一些集合和迭代器类的子类(bytearrayarray.arraycollections.dequecollections.defaultdictitertools.countitertools.repeat)的 repr 现在包含实际的类型名,而不是基类的硬编码名称。

  • bpo-31351: 如果 pip 引导失败,python -m ensurepip 现在会以非零退出代码退出。

  • bpo-31389: pdb.set_trace() 现在接受一个可选的关键字参数 header。如果提供,这将在调试开始前打印到控制台。

文档

  • bpo-31537: 修复了 readline 文档示例代码中 get_history_length 的不正确用法。补丁由 Brad Smith 提供。

  • bpo-30085: 为了清晰起见,优先使用没有双下划线的操作符函数。带有下划线的仅为了向后兼容而保留。

构建

  • bpo-31696: 当 Python 使用 Clang 构建时,改进 sys.version 中的编译器版本信息。

  • bpo-31625: 停止在静态库上使用 ranlib。相反,我们假设 ar 支持 's' 标志。

  • bpo-31624: 移除对 BSD/OS 的支持。

  • bpo-22140: 防止在 python-config.sh 中双重替换前缀。

  • bpo-31569: 在构建脚本和文档中将PCBuild/更正为PCbuild/。

  • bpo-31536: 如果没有任何更改,避免在 make regen-all 后进行全面重建。

IDLE

  • bpo-31460: 简化IDLE模块浏览器的API。传递一个小部件而不是带有根部件的flist,开启了创建一个仅是窗口一部分的浏览器框架的可能性。传递一个完整的文件名而不是假定来自.py文件的片段,开启了浏览不以.py结尾的python文件的可能性。

  • bpo-31649: IDLE - 使_htest, _utest参数仅关键字。

  • bpo-31559: 在idle_test.test_browser中移除测试顺序依赖。

  • bpo-31459: 将IDLE的模块浏览器从类浏览器重命名为模块浏览器。原始的模块级类和方法浏览器多年前就变成了一个模块浏览器,增加了模块级函数。昨天又增加了嵌套类和函数。为了向后兼容,设置对话框的键标签上出现的虚拟事件<<open-class-browser>>没有被更改。补丁由Cheryl Sabella提供。

  • bpo-31500: 现在默认字体在高DPI显示器上会进行缩放。

  • bpo-1612262: IDLE模块浏览器现在显示嵌套类和函数。代码和测试的原始补丁分别由Guilherme Polo和Cheryl Sabella提供。

C API

  • bpo-28280: 使 PyMapping_Keys()PyMapping_Values()PyMapping_Items() 总是返回一个 list (而不是一个 list 或一个 tuple) 。由Oren Milman提供补丁。

  • bpo-31532: 修复由于在getpath.c中Py_GetPath()和Py_SetPath()之间的分配器混合导致的内存损坏。

  • bpo-25658: 实现线程特定存储(TSS)API的 PEP 539:这是CPython的一个新的线程本地存储(TLS)API,将取代CPython解释器中现有的TLS API的使用,同时弃用现有的API。PEP由Erik M. Bray撰写,由Masayuki Yamamoto提供补丁。

Python 3.7.0 alpha 1

发布日期: 2017-09-19

安全性

核心与内置函数

  • bpo-31490: 修复 ctypes 类定义中的断言失败,当类有一个属性其名称在 _anonymous_ 中指定但不在 _fields_ 中时。由 Oren Milman 提供补丁。

  • bpo-31471: 修复 Windows 上 subprocess.Popen() 中的断言失败,当 env 参数有一个坏的 keys() 方法时。由 Oren Milman 提供补丁。

  • bpo-31418: 修复 PyErr_WriteUnraisable() 中的断言失败,当异常有一个坏的 __module__ 属性时。由 Oren Milman 提供补丁。

  • bpo-31416: 修复当warnings.filters或warnings.defaultaction错误时的断言失败。由Oren Milman提供补丁。

  • bpo-28411: 将直接使用PyInterpreterState.modules改为使用PyImport_GetModuleDict()。同时,在处理sys.modules的其他代码中引入更多一致性。这有助于减少在处理sys.modules时的复杂性。

  • bpo-28411: 在处理 PyInterpreterState.modules 时切换到抽象API。这为以后支持所有字典子类和其他映射实现提供了可能。同时添加了一个 PyImport_GetModule() 函数以减少大量重复代码。

  • bpo-31411: 当warnings.onceregistry不是字典时,抛出TypeError而不是SystemError。由Oren Milman提供补丁。

  • bpo-31344: 为了更精细地控制测试解释器时的跟踪行为,添加了两个新的帧属性来控制特定跟踪事件的发出:f_trace_lines``(默认为 ``True)用于关闭每行跟踪事件;f_trace_opcodes (默认为 False) 用于开启每操作码跟踪事件。

  • bpo-31373: 修复了几个由于浮点降级可能导致的未定义行为实例。

  • bpo-30465: f-字符串中的位置信息(lineno``和 ``col_offset)现在(大部分)正确。这修复了像flake8这样的工具在错误行(通常是文件的第一行)显示警告的问题。

  • bpo-30860: 将CPython的全局运行时状态整合到一个结构体中。这提高了运行时状态的可发现性。

  • bpo-31347: 修复了_PyObject_FastCall_Prepend中可能存在的未定义行为。

  • bpo-31343: 包含sys/sysmacros.h以获取major()、minor()和makedev()。GNU C库计划从sys/types.h中移除这些函数。

  • bpo-31291: 修复了Windows上 zipimport.zipimporter.get_data 中的一个断言失败,当``pathname.replace('/','\')``的返回值不是字符串时。由Oren Milman提供补丁。

  • bpo-31271: 修复当编码器未返回字节对象时,io.TextIOWrapper``的 ``write() 方法中的断言失败。由Oren Milman提供补丁。

  • bpo-31243: 修复当解码器状态无效时,``io.TextIOWrapper``的某些方法中的崩溃问题。由Oren Milman提供补丁。

  • bpo-30721: print 现在显示使用Python 2重定向语法的正确用法提示。由Sanyam Khurana提供补丁。

  • bpo-31070: 修复importlib中_get_module_lock()的竞态条件。

  • bpo-30747: 在MSVC上添加_Py_atomic_store和_Py_atomic_load的非虚拟实现。

  • bpo-31095: 修复由未调用 PyObject_GC_UnTrack()tp_dealloc 引起的GC期间潜在崩溃问题。

  • bpo-31071: 当传递其他参数时,避免在使用*解包调用中掩盖原始TypeError。

  • bpo-30978: str.format_map()现在传递键查找异常。之前任何异常都被替换为KeyError异常。

  • bpo-30808: 对并发敏感的信号状态使用_Py_atomic API。

  • bpo-30876: 从未加载的包中进行相对导入现在会重新导入包,而不是因SystemError失败。从非包中进行相对导入现在会因ImportError而非SystemError失败。

  • bpo-30703: 改进信号传递。避免在信号处理程序中使用Py_AddPendingCall,以避免调用信号不安全函数。这里添加的测试在没有补丁的其他部分的情况下,在Linux和OS X上失败。这意味着我们的信号传递逻辑存在缺陷(某些信号可能会丢失)。

  • bpo-30765: 当PyThread_acquire_lock()被要求不阻塞时,避免在pthread_mutex_lock()中阻塞。

  • bpo-31161: 确保'Missing parentheses'语法错误消息仅应用于SyntaxError,而不是子类。补丁由Martijn Pieters提供。

  • bpo-30814: 修复从包中导入子模块时的竞态条件。

  • bpo-30736: 内部unicodedata数据库已升级到Unicode 10.0。

  • bpo-30604: 将 co_extra_freefuncs 从每线程转移到每解释器以避免崩溃。

  • bpo-30597: print 现在在作为 Python 2 语句使用时,自定义错误消息中显示预期的输入。由 Sanyam Khurana 提供补丁。

  • bpo-30682: 移除了对某些 f-字符串过于严格的断言,例如 eval("f'\n'") 和 eval("f'\r'")。

  • bpo-30501: 编译器现在为 "if"、"while" 和 "assert" 语句、"if" 表达式、生成器表达式和推导式中的复杂条件表达式生成更优化的代码。

  • bpo-28180: 实现 :pep:`538`(传统 C 语言环境强制)。这意味着当有合适的强制目标区域设置可用时,核心解释器和区域设置感知的 C 扩展将假定使用 UTF-8 作为默认文本编码,而不是 ASCII。

  • bpo-30486: 允许为 __closure__ 设置单元格值。由 Lisa Roach 提供补丁。

  • bpo-30537: itertools.islice 现在接受类似整数的对象(具有 __index__ 方法)作为开始、停止和切片参数

  • bpo-25324: Python 解析所需的令牌已移至 C。 COMMENTNLENCODING。这样,当导入 tokenize 模块时,token 模块中的令牌和 tok_names 不会被更改。

  • bpo-29104: 修复了 f-字符串中反斜杠的解析。

  • bpo-27945: 修复了在搜索、插入或比较过程中输入集合被修改时,字典的各种段错误。基于 Duane Griffin 和 Tim Mitchell 的补丁。

  • bpo-25794: 修复了 type.__setattr__() 和 type.__delattr__() 对于非 interned 属性名称的问题。基于 Eryk Sun 的补丁。

  • bpo-30039: 如果解释器在恢复一系列嵌套的 'yield from' 或 'await' 调用过程中发生 KeyboardInterrupt,现在会正确地传递到最内层的帧。

  • bpo-28974: object.__format__(x, '') 现在等同于 str(x) 而不是 format(str(self), '')

  • bpo-30024: 现在支持涉及绝对导入并将子模块绑定到名称的循环导入。

  • bpo-12414: sys.getsizeof() 在代码对象上现在返回的大小包括代码结构及其引用对象的大小。由 Donghee Na 提交的补丁。

  • bpo-29839: 如果 __len__() 返回一个大的负整数,len() 现在会引发 ValueError 而不是 OverflowError。

  • bpo-11913: README.rst 现在被包含在 distutils 标准 README 列表中,因此也包含在源代码分发中。

  • bpo-29914: 修复了 __reduce__ 和 __reduce_ex__() 的默认实现。object.__reduce__() 不再接受参数,object.__reduce_ex__() 现在需要一个参数。

  • bpo-29949: 修复了 set 和 frozenset 对象的内存使用回归问题。

  • bpo-29935: 修复了在传递错误类型的索引时,tuple、list 和 deque 的 index() 方法中的错误消息。

  • bpo-29816: 移位操作现在引发 OverflowError 的机会更少。对于负计数,总是引发 ValueError 而不是 OverflowError。用非负计数移位零总是返回零。

  • bpo-24821: 修复了在某些不幸的 Unicode 字符搜索中减慢到 25 倍的问题。

  • bpo-29102: 向 PyInterpreterState 添加了一个唯一 ID。这使得更容易识别每个子解释器。

  • bpo-29894: 如果 __complex__ 返回一个严格子类的实例,则会发出弃用警告。在 Python 的未来版本中,这可能是一个错误。

  • bpo-29859: 当 thread_pthread.h 中的任何 pthread_* 调用失败时,显示正确的错误消息。

  • bpo-29849: 修复了在从导入期间引发 ImportError 时的内存泄漏。

  • bpo-28856: 修复了一个疏忽,即 %b 格式的字节应支持遵循缓冲区协议的对象。

  • bpo-29723: bpo-29139 中对 sys.path[0] 初始化的更改导致了一个回归问题,暴露了在执行来自 zip 文件、目录或其他导入位置的 __main__sys.path 初始化方式的不一致性。解释器现在一致避免将导入位置的父目录添加到 sys.path 中,并确保在插入命令行中指定的导入位置时不会无意中修改其他 sys.path 条目。

  • bpo-29568: 经典字符串格式化格式字符串中的转义百分号 "%%" 不再允许两个百分号之间存在任何字符。

  • bpo-29714: 修复了一个回归问题,即当包含零字节时,字节格式可能会失败。

  • bpo-29695: bool()、float()、list() 和 tuple() 不再接受关键字参数。int() 的第一个参数现在只能作为位置参数传递。

  • bpo-28893: 为从 __aiter__ 和 __anext__ 返回的无效可等待对象引发的错误设置了正确的 __cause__。

  • bpo-28876: 即使 len(range) 引发 OverflowErrorbool(range) 也能正常工作。

  • bpo-29683: 修复了 _PyCode_SetExtra 中的内存分配问题。由 Brian Coleman 提供补丁。

  • bpo-29684: 修复了 PyEval_CallObjectWithKeywords 的一个小回归问题。当 kwargs 不是字典时,它应该引发 TypeError。但当 args=NULL 且 kwargs 不是字典时,可能会导致段错误。

  • bpo-28598: 支持在调用 str.__mod__ 之前调用 str 子类的 __rmod__。由 Martijn Pieters 提供补丁。

  • bpo-29607: 修复了 CALL_FUNCTION_EX 的 stack_effect 计算。补丁由 Matthieu Dartiailh 提供。

  • bpo-29602: 修复了在复杂子类的构造函数和具有 __complex__ 方法的输入中对有符号零的错误处理。由 Serhiy Storchaka 提供补丁。

  • bpo-29347: 修复了在创建弱引用对象时可能解引用未定义指针的问题。

  • bpo-29463: 向Module、ClassDef、FunctionDef和AsyncFunctionDef ast节点添加 docstring``字段。docstring不再是它们体中的第一个stmt。这影响了模块和类的代码对象的 ``co_firstlineno``和 ``co_lnotab。(在 bpo-32911 中恢复。)

  • bpo-29438: 修复了key sharing dict中的use-after-free问题。

  • bpo-29546: 为 from ... import ... 设置了ImportError的'path'和'name'属性。

  • bpo-29546: 使用位置改进了from-import错误消息

  • bpo-29478: 在使用Compat32策略时,如果指定了max_line_length=None,它将不再被忽略。补丁由Mircea Cosbuc提供。

  • bpo-29319: 防止RunMainFromImporter覆盖sys.path[0]。

  • bpo-29337: 修复了比较代码对象时可能出现的BytesWarning。警告可能在编译时发出。

  • bpo-29327: 修复了将可迭代关键字参数传递给sorted()时崩溃的问题。

  • bpo-29034: 修复了os模块(path_converter)中的内存泄漏和use-after-free问题。

  • bpo-29159: 修复了当x.__index__()引发异常时bytes(x)的回归问题。

  • bpo-29049: 在调用Python函数时懒惰地调用_PyObject_GC_TRACK()。调用函数速度提高了5%。

  • bpo-28927: bytes.fromhex()和bytearray.fromhex()现在忽略所有ASCII空白字符,而不仅仅是空格。由Robert Xiao提供补丁。

  • bpo-28932: 如果不存在<sys/random.h>,则不包含它。

  • bpo-25677: 修正了缩进块语法错误提示符的位置。基于Michael Layzell的补丁。

  • bpo-29000: 修复了八进制数在交替形式下零填充的bytes格式化。

  • bpo-18896: Python函数现在可以有超过255个参数。collections.namedtuple()现在支持超过255个元素的元组。

  • bpo-28596: 在Android上,首选编码是UTF-8。补丁由Chi Hsuan Yen编写。

  • bpo-22257: 清理解释器启动(参见 PEP 432)。

  • bpo-26919: 在Android上,操作系统数据现在总是以UTF-8编码/解码,而不是使用区域设置编码,以避免与已经使用UTF-8的os.fsencode()和os.fsdecode()不一致。

  • bpo-28991: functools.lru_cache()容易受到一个由猴子补丁len()函数触发的晦涩的重入错误的影响。

  • bpo-28147: 修复了分割表字典中的内存泄漏:setattr()不能将合并表转换为分割表。补丁由INADA Naoki编写。

  • bpo-28739: f字符串表达式不再被接受为文档字符串和由ast.literal_eval()处理,即使它们不包含表达式。

  • bpo-28512: 修复了通过PyErr_SyntaxLocationEx()和PyErr_SyntaxLocationObject()设置SyntaxError的offset属性。

  • bpo-28918: 修复了当Python使用Py_DEBUG定义构建时,xxlimited的交叉编译问题。

  • bpo-23722: 而不是无声地产生一个不支持方法中零参数 super() 的类,未能将新的``__classcell__``命名空间条目传递给 type.__new__ 现在会导致一个 DeprecationWarning 和一个支持零参数 super() 的类。

  • bpo-28797: 修改类__dict__在一个描述符的__set_name__方法内部,该描述符在那个类内部使用,不再阻止调用其他描述符的__set_name__方法。

  • bpo-28799: 移除 PyEval_GetCallStats() 函数并弃用未测试和未文档化的``sys.callstats()``函数。移除 CALL_PROFILE 特殊构建:使用 sys.setprofile() 函数、cProfileprofile 来分析函数调用。

  • bpo-12844: 现在可以向一个函数传递超过255个参数。

  • bpo-28782: 修复了在检查下一条指令是否为YIELD_FROM时 yield from 实现中的一个错误。由WORDCODE(bpo-26647)引入的回归问题。

  • bpo-28774: 修复ASCII和Latin1编码器中当错误处理程序返回的字符串包含多个不可编码字符(对于ASCII编解码器是非ASCII字符,对于Latin1是超出U+0000-U+00FF范围的字符)时的错误位置。

  • bpo-28731: 优化_PyDict_NewPresized()以创建正确大小的字典。将具有常量键的字典字面量的速度提高至30%。

  • bpo-28532: 当提供-V选项两次时显示sys.version。

  • bpo-27100: with语句现在在检查__exit__之前先检查__enter__。当两种方法都缺失时,这会给出不那么令人困惑的错误信息。由Jonathan Ellington提供补丁。

  • bpo-28746: 在没有ioctl FIOCLEX和FIONCLEX命令的平台上修复set_inheritable()文件描述符方法。

  • bpo-26920: 在没有langinfo的平台上修复初始化解释器时未获取区域设置的字符集的问题。

  • bpo-28648: 修复了在Mac OS X上调试版本中解码星体字符时Py_DecodeLocale()崩溃的问题。补丁由Xiang Zhang提供。

  • bpo-28665: 将STORE_DEREF操作码的速度提高40%。

  • bpo-19398: 在编译时PYTHONPATH组件为空的情况下,不再向sys.path组件添加额外的斜杠。

  • bpo-28621: 通过重用更快的位数计数实现,加快了将int转换为float的速度。由Adrian Wielgosik提供补丁。

  • bpo-28580: 优化了迭代分割表值。由Xiang Zhang提供补丁。

  • bpo-28583: PyDict_SetDefault在需要时未合并分割表。由Xiang Zhang提供补丁。

  • bpo-28128: 无效的str和byte转义序列的弃用警告现在会打印出关于错误发生位置的更好信息。由Serhiy Storchaka和Eric Smith提供补丁。

  • bpo-28509: dict.update()不再分配不必要的大内存。

  • bpo-28426: 修复了调试版本中PyUnicode_AsDecodedObject()潜在的崩溃问题。

  • bpo-28517: 修复了窥孔优化器中的一个偏移错误,该错误导致保留无法到达的代码。

  • bpo-28214: 改进了对有问题的 __set_name__ 属性的异常报告。

  • bpo-23782: 修复了 _PyTraceback_Add() 中可能的内存泄漏和 PyTraceBack_Here() 中的异常丢失问题。

  • bpo-28183: 优化并清理了字典迭代。

  • bpo-26081: 添加了 asyncio.Future 的 C 实现。原始由 Yury Selivanov 提供补丁。

  • bpo-28379: 为 PyUnicode_CopyCharacters() 添加了健全性检查和测试。由 Xiang Zhang 提供补丁。

  • bpo-28376: 长范围迭代器的类型现在注册为 Iterator。由 Oren Milman 提供补丁。

  • bpo-28376: 现在不允许通过调用 range_iterator 类型来创建 range_iterator 实例。调用 iter() 方法是唯一的方式。由 Oren Milman 提供补丁。

  • bpo-26906: 现在解析未初始化类型的特殊方法会导致类型的隐式初始化而不是失败。

  • bpo-18287: PyType_Ready() 现在检查 tp_name 是否为 NULL。原始由 Niklas Koep 提供补丁。

  • bpo-24098: 修复了在编译过程中 AST 被更改时可能发生的崩溃。

  • bpo-28201: 当哈希值具有相同的低位时,字典减少了哈希表中第二次冲突的可能性。

  • bpo-28350: 不再对含有空字符的字符串常量进行内部化。

  • bpo-26617: 修复了在弱引用回调过程中运行垃圾收集时发生的崩溃。

  • bpo-27942: 现在在元组和冻结集合中递归内部化字符串常量。

  • bpo-28289: ImportError.__init__ 现在重置未指定的属性。

  • bpo-21578: 修复了当 ImportError 使用无效关键字参数调用时误导性的错误消息。

  • bpo-28203: 修复了 complex(1.0, {2:3}) 错误消息中的不正确类型。补丁由 Soumya Sharma 提供。

  • bpo-28086: 元组子类型的单个可变位置参数现在被转换为确切的元组,而不是原封不动地传递给 C 定义的函数。

  • bpo-28214: 现在 __set_name__ 是在类上查找而不是在实例上查找。

  • bpo-27955: 当 getrandom() 系统调用因 EPERM 失败时(例如被 SECCOMP 阻止时),回退读取 /dev/urandom 设备。

  • bpo-28192: 在隔离模式下不导入readline。

  • bpo-27441: 移除longobject.c中一些对ob_size的冗余赋值。感谢Oren Milman。

  • bpo-27222: 清理long_rshift函数中的冗余代码。感谢Oren Milman。

  • 升级内部unicode数据库至Unicode 9.0.0版本。

  • bpo-28131: 修复zipimport的compile_source()中的回归问题。zipimport应使用与解释器相同的优化级别。

  • bpo-28126: 用memcpy()替换Py_MEMCPY。Visual Studio能正确优化memcpy()。

  • bpo-28120: 当尝试移除"待定键"(尚未插入分裂表的键)时,修复split字典的dict.pop()。由Xiang Zhang提供补丁。

  • bpo-26182: 当async和await关键字被用作变量/属性/类/函数名时,发出DeprecationWarning。

  • bpo-26182: 修复在引发DeprecationWarning的代码中的内存泄漏。

  • bpo-28721: 修复异步生成器的aclose()和athrow()以正确处理StopAsyncIteration传播。

  • bpo-26110: 加速方法调用:添加LOAD_METHOD和CALL_METHOD操作码。

  • bpo-31499: xml.etree:修复当解析器是引用循环的一部分时的崩溃问题。

  • bpo-31482: random.seed() 现在在version=1时可以与bytes一起工作。

  • bpo-28556: typing.get_type_hints现在默认(当调用者未指定 globalns 时)为类和模块找到正确的globalns。

  • bpo-28556: 对 typing 模块的速度改进。原始PR由Ivan Levkivskyi和Mitar提供。

  • bpo-31544: ElementTree的C加速器模块忽略了在XMLParser()中查找TreeBuilder目标方法时引发的异常。

  • bpo-31234: socket.create_connection()现在手动修复了一个引用循环:成功时清除存储最后一个异常的变量。

  • bpo-31457: LoggerAdapter对象现在可以嵌套。

  • bpo-31431: SSLContext.check_hostname现在自动将SSLContext.verify_mode设置为ssl.CERT_REQUIRED,而不是以ValueError失败。

  • bpo-31233: socketserver.ThreadingMixIn 现在维护一个非守护线程列表,在 server_close() 中等待所有这些线程完成。

  • bpo-28638: 改变了 collections.namedtuple() 的实现策略,大幅减少了 exec() 的使用,转而采用预计算的方法。因此,不再支持 verbose 参数和 _source 属性。这一变化带来了以下好处:1) 对于使用多个命名元组的应用程序,内存占用更小;2) 命名元组类的创建速度更快(大约快 4 到 6 倍,具体取决于测量方式);3) 使用 __new__、_make 和 _replace 创建实例时的速度略有提升。(主要补丁贡献者是 Jelle Zijlstra,INADA Naoki、Serhiy Storchaka 和 Raymond Hettinger 进一步改进。)

  • bpo-31400: 改进了 SSL 错误处理,避免丢失错误编号。

  • bpo-27629: 使 SSLContext.wrap_bio() 和 SSLContext.wrap_socket() 的返回类型可定制。

  • bpo-28958: ssl.SSLContext() 现在在无法实例化上下文时使用 OpenSSL 错误信息。

  • bpo-28182: 当 OpenSSL 无法验证对等证书时,SSL 模块现在会引发 SSLCertVerificationError 异常。该异常包含更多关于错误的信息。

  • bpo-27340: SSLSocket.sendall() 现在使用 memoryview 来创建数据切片。这修复了对所有类似于字节对象的支持。同时,这也更高效,避免了昂贵的复制。

  • bpo-14191: 新增函数 argparse.ArgumentParser.parse_intermixed_args 提供了解析命令行中用户混合选项和位置参数的能力。

  • bpo-31178: 修复了 subprocess 模块中在罕见错误路径下的字符串连接错误

  • bpo-31350: 对 asyncio._get_running_loop() 进行微优化,使其速度提升高达 10%。

  • bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题(libexpat bug 115):https://github.com/libexpat/libexpat/issues/115

  • bpo-29136: 添加 TLS 1.3 密码套件和 OP_NO_TLSv1_3。

  • bpo-1198569: string.Template 子类可以选择性地定义 braceidpattern,如果它们想要在花括号内外指定不同的占位符模式。如果为 None(默认值),则回退到 idpattern

  • bpo-31326: concurrent.futures.ProcessPoolExecutor.shutdown() 现在显式关闭调用队列。此外,shutdown(wait=True) 现在也会加入调用队列线程,以防止泄漏悬挂线程。

  • bpo-27144: concurrent.futures 中的 map()as_completed() 迭代器现在避免保留对生成对象的引用。

  • bpo-31281: 修复 fileinput.FileInput(files, inplace=True)files 包含 pathlib.Path 对象时的问题。

  • bpo-10746: 修复 ctypes 为整数类型生成错误的 PEP 3118 类型代码的问题。

  • bpo-27584: AF_VSOCK 已被添加到套接字接口中,允许虚拟机与其主机之间的通信。

  • bpo-22536: 在 POSIX 系统上由于找不到可执行文件或 cwd 而引发 FileNotFoundError 时,子进程模块现在会设置文件名。

  • bpo-29741: 更新 _pyio 模块中的一些方法,以也接受整数类型。由 Oren Milman 提供补丁。

  • bpo-31249: concurrent.futures: ThreadPoolExecutor 使用的 WorkItem.run() 现在打破了异常对象和 WorkItem 对象之间的循环引用。

  • bpo-31247: xmlrpc.server 现在在处理异常的代码中使用 sys.exc_info() 时显式地打破循环引用。

  • bpo-23835: configparser: 现在在 ConfigParser() 构造器中读取默认值使用 read_dict(),使其行为与解析器的其余部分一致。默认字典中的非字符串键和值现在被隐式转换为字符串。由 James Tocknell 提供补丁。

  • bpo-31238: pydoc: 私有 ServerThread 类的 stop() 方法现在会等待 DocServer.serve_until_quit() 完成,然后显式将其 docserver 属性设置为 None 以打破循环引用。

  • bpo-5001: multiprocessing 中的许多断言现在提供了更多信息,并且一些错误类型已更改为更具体的类型。

  • bpo-31109: 将 zipimport 转换为使用 Argument Clinic。

  • bpo-30102: ssl 和 hashlib 模块现在在 OpenSSL < 1.1.0 时调用 OPENSSL_add_all_algorithms_noconf()。该函数检测 CPU 特性并在一些 CPU 架构(如 POWER8)上启用优化。补丁基于 Gustavo Serra Scalet 的研究。

  • bpo-18966: 由 multiprocessing.Process 创建的非守护线程现在在子进程退出时被 join。

  • bpo-31183: dis 现在可以与异步生成器和协程对象一起工作。由 George Collins 提供补丁,基于 Luciano Ramalho 的诊断。

  • bpo-5001: 如问题 5001 所述,multiprocessing 模块中有许多不提供信息的断言。此更改修复了其中两个最有可能造成问题的断言,因为它们位于错误报告代码中,在 multiprocessing.managers.convert_to_error 函数中。(它还使 ValueError 消息更具信息性。)唯一可能造成问题的变化是 AssertionError 现在是一个 TypeError;然而,这也应该有助于将其与函数/其调用者报告的 AssertionError 区分开来(如问题 31169 中)。 - 由 Allen W. Smith(github 上的 drallensmith)提供补丁。

  • bpo-31185: 修复了 asyncio 加速模块中的杂项错误。

  • bpo-31151: socketserver.ForkingMixIn.server_close() 现在会等待所有子进程完成,以防止僵尸进程泄漏。

  • bpo-31072: 向 zipapp.create_archive() 添加一个 include_file 形参。

  • bpo-24700: 优化 array.array 比较。当比较持有相同整数类型值的数组时,现在速度提高了 10 倍到 70 倍。

  • bpo-31135: ttk:修复LabeledScale和OptionMenu类的destroy()方法。即使使用的属性不存在,也调用父类的destroy()方法。LabeledScale.destroy()方法现在还显式清除了label和scale属性,以帮助垃圾回收器销毁所有小部件。

  • bpo-31107: 修复 copyreg._slotnames() 对于名称以下划线开头的类的损坏属性计算。由Shane Harvey提供补丁。

  • bpo-31080: 允许 logging.config.fileConfig 接受kwargs和/或args。

  • bpo-30897: pathlib.Path 对象现在包含一个 is_mount() 方法(仅在POSIX上实现)。这与 os.path.ismount(p) 类似。由Cooper Ry Lees提供补丁。

  • bpo-31061: 修复了在使用asyncio和线程时的崩溃问题。

  • bpo-30987: 在socket模块中增加了对CAN ISO-TP协议的支持。

  • bpo-30522: 向 logging.StreamHandler 添加了一个 setStream 方法,允许在创建后设置流。

  • bpo-30502: 修复了ssl中长oids的处理。基于Christian Heimes的补丁。

  • bpo-5288: 支持具有不足一分钟偏移的tzinfo对象。

  • bpo-30919: 修复了Python 3.x版本中多进程模块(multiprocessing)的共享内存性能回归问题。在Python 2.x中,共享内存使用匿名内存映射实现,而Python 3.x则改为映射实际文件。本次修复尝试尽可能减少磁盘I/O操作以提升性能。

  • bpo-26732: 修复了使用“forkserver”方法启动的进程中fd过多的问题。子进程会继承与仍在运行的子进程数量一样多的fd。

  • bpo-29403: 修复``unittest.mock``模块的autospec功能,使其不再对绑定到方法的内置函数报错。由Aaron Gallagher提供补丁。

  • bpo-30961: 修复了tracemalloc中借用引用的递减问题。

  • bpo-19896: 修复multiprocessing.sharedctypes以识别类型码 'q''Q'

  • bpo-30946: 移除了readline模块中对于GNU readline版本低于2.1或select()不可用平台的过时代码。

  • bpo-25684: 修改 ttk.OptionMenu 单选按钮,使其在不同 OptionMenu 实例间保持唯一。

  • bpo-30886: 修复 multiprocessing.Queue.join_thread():现在即使线程是由创建队列的同一进程启动的,它也会等待线程完成。

  • bpo-29854: 修复使用 readline 的 history-size 选项时 readline 中的段错误。由 Nir Soffer 提供补丁。

  • bpo-30794: 在 Unix 上添加了 multiprocessing.Process.kill 方法,用于使用 SIGKILL 信号终止。

  • bpo-30319: socket.close() 现在忽略 ECONNRESET 错误。

  • bpo-30828: 修复 asyncio.CFuture.remove_done_callback() 中的越界写入问题。

  • bpo-30302: 在 datetime.timedeltarepr 中使用关键字。

  • bpo-30807: 当传递一个极小的值时,signal.setitimer() 可能会禁用计时器。极小的值(如 1e-6)是 setitimer() 有效的非零值,它被指定为采取微秒级间隔。然而,在某些平台上,我们的转换例程可能将 1e-6 转换为零间隔,从而禁用计时器而不是(重新)调度它。

  • bpo-30441: 修复在迭代 os.environ 时修改它导致的错误。

  • bpo-29585: 避免从 site 导入 sysconfig 以提高启动速度。Python 在 Linux 上的启动速度提高了约 5%,在 macOS 上提高了约 30%。

  • bpo-29293: 在 multiprocessing.Condition.notify() 上添加缺失的参数 "n"。文档声称 multiprocessing.Condition 的行为类似于 threading.Condition,但其 notify() 方法缺少 threading.Condition.notify() 接受的 "n" 参数(指定要唤醒的睡眠者数量)。

  • bpo-30532: 修复电子邮件头值解析器在某些情况下丢弃折叠空白的问题。

  • bpo-30596: 向 multiprocessing.Process 添加一个 close() 方法。

  • bpo-9146: 修复 _hashopenssl 在链接的 OpenSSL 库中不可用标准哈希函数(如 md5)时的段错误。如在某些特殊的 FIPS-140 构建环境中。

  • bpo-29169: 将 zlib 更新至 1.2.11。

  • bpo-30119: ftplib.FTP.putline() 现在会在命令包含 CR 或 LF 时抛出 ValueError。由 Donghee Na 提供补丁。

  • bpo-30879: os.listdir() 和 os.scandir() 现在在使用字节类参数调用时会发出字节名称。

  • bpo-30746: 禁止在 os.putenv()os.spawn*() 的环境变量名中使用 '=' 字符。

  • bpo-30664: unittest 子测试的描述现在会保留 TestCase.subTest() 的关键字参数的顺序。

  • bpo-21071: struct.Struct.format 类型现在是 str 而非 bytes

  • bpo-29212: 修复 concurrent.futures.thread.ThreadPoolExecutor 线程在没有提供 thread_name_prefix 时默认使用非 repr() 基础的线程名。它们现在会自称为 "ThreadPoolExecutor-y_n"。

  • bpo-29755: 修复了 gettext 模块中的 lgettext() 系列函数。它们现在总是返回字节。

  • bpo-30616: enum 的功能 API 允许创建空的枚举。由 Donghee Na 提供补丁

  • bpo-30038: 修复了信号传递和唤醒文件描述符之间的竞争条件。补丁由 Nathaniel Smith 提供。

  • bpo-23894: lib2to3 现在能识别 rb'...'f'...' 字符串。

  • bpo-24744: pkgutil.walk_packages 函数现在会在 path 是字符串时抛出 ValueError。补丁由 Sanyam Khurana 提供。

  • bpo-24484: 避免多进程清理中的竞争条件。

  • bpo-30589: 修复 multiprocessing.Process.exitcode 在使用 "forkserver" 方法时,当进程被信号杀死时返回信号数的相反数(而不是 255)。

  • bpo-28994: 对于由 atexit 注册的回调中引发的 SystemExit,不再显示回溯。

  • bpo-30508: 如果调用了 Task/Future 的 "cancel()" 方法,则不记录异常。

  • bpo-30645: 修复 imp.load_package() 中的路径计算,修复了当包仅随字节码提供时的情况。由 Alexandru Ardelean 提供补丁。

  • bpo-11822: dis.dis() 函数现在能够反汇编嵌套的代码对象。

  • bpo-30624: selectors 没有考虑到 KeyboardInterrupt 和 SystemExit,导致在出错时文件描述符处于不良状态。由 Giampaolo Rodola' 提供补丁。

  • bpo-30595: multiprocessing.Queue.get() 现在在非阻塞模式下轮询其读取器,如果成功获取锁但获取时间超过了超时时间。

  • bpo-28556: typing 模块的更新:添加通用的 AsyncContextManager,为所有版本添加对 ContextManager 的支持。原始 PR 由 Jelle Zijlstra 和 Ivan Levkivskyi 提供。

  • bpo-30605: re.compile() 在编译带有错误放置的内联修饰符的 bytes 实例时不再引发 BytesWarning。由 Roy Williams 提供补丁。

  • bpo-29870: 修复 asyncio/ssl 实现中当连接被中止时 SSL 套接字的泄漏问题。由 Michaël Sghaïer 提供补丁。

  • bpo-29743: 在握手过程中关闭传输会导致打开的套接字泄漏。由 Nikolay Kim 提供补丁。

  • bpo-27585: 修复 asyncio.Lock 中的等待者取消问题。由 Mathieu Sornay 提供补丁。

  • bpo-30014: selectors 模块中基于 poll()、epoll() 和 devpoll() 的类的 modify() 方法现在快了约 10%。由 Giampaolo Rodola' 提供补丁。

  • bpo-30418: 在 Windows 上,如果子进程仍在运行但关闭了管道,subprocess.Popen.communicate() 现在也会忽略 stdin.write() 上的 EINVAL。

  • bpo-30463: 向 abc.ABC 添加了空的 __slots__。这允许子类拒绝 __dict__ 和 __weakref__ 的创建。由 Aaron Hall 提供补丁。

  • bpo-30520: 现在 Logger 可以被 pickle 序列化。

  • bpo-30557: faulthandler 现在能够正确过滤和显示 Windows 上的异常代码。

  • bpo-30526: 添加了 TextIOWrapper.reconfigure() 和 TextIOWrapper.write_through 属性。

  • bpo-30245: 修复在组织 struct.pack_into 错误消息时可能出现的溢出问题。由 Yuan Liu 提供补丁。

  • bpo-30378: 修复 logging.handlers.SysLogHandler 无法处理 IPv6 地址的问题。

  • bpo-16500: 允许注册 at-fork 处理程序。

  • bpo-30470: 弃用 Windows 上的无效 ctypes 调用保护。由 Mariatta Wijaya 提供补丁。

  • bpo-30414: multiprocessing.Queue._feed 后台运行线程在异常时不从主循环中中断。

  • bpo-30003: 修复HZ编解码器中转义字符的处理。基于Ma Lin的补丁。

  • bpo-30149: inspect.signature() 现在支持带有被partialmethod包装的可变参数参数的可调用对象。由Donghee Na提供补丁。

  • bpo-30436: 如果指定的父模块不是一个包(即缺少__path__属性),importlib.find_spec() 现在会引发ModuleNotFoundError而不是AttributeError。

  • bpo-30301: 修复在 spawnforkserver 启动方法下使用SimpleQueue.empty()时的AttributeError。

  • bpo-30375: 编译正则表达式时发出的警告现在总是指向用户代码中的行。之前如果从组或条件内部发出,它们可能指向re模块的内部。

  • bpo-30329: imaplib和poplib现在在shutdown(SHUT_RDWR)时捕获Windows socket WSAEINVAL错误(代码10022):尝试了无效操作。此错误有时发生在SSL连接上。

  • bpo-29196: 移除了plistlib模块中以前在Python 2.4中弃用的类Plist、Dict和_InternalDict。readPlist()和readPlistFromBytes()函数的结果中的Dict值现在是普通的dict。你不能再使用属性访问来访问这些字典的项目。

  • bpo-9850: macpath 现在已被弃用,并将在Python 3.8中移除。

  • bpo-30299: 在CPython上以调试模式编译正则表达式现在以人类可读的形式显示编译后的字节码。

  • bpo-30048: 修复了当任务运行协程且协程返回而没有任何更多 await 时,``Task.cancel()``可能被忽略的问题。

  • bpo-30266: contextlib.AbstractContextManager现在支持通过设置__enter__ = None或__exit__ = None进行反注册,遵循 bpo-25958 中引入的模式。由Jelle Zijlstra提供补丁。

  • bpo-30340: 增强正则表达式优化。这使某些模式的匹配性能提高了25倍。

  • bpo-30298: 放宽内联修饰符的弃用警告条件。现在允许在模式开始处连续使用多个内联修饰符(例如 '(?i)(?s)...')。在详细模式下,现在允许在内联修饰符之前和之间使用空格和注释(例如 '(?x) (?i) (?s)...')。

  • bpo-30285: 优化了正则表达式的不区分大小写的匹配和搜索。

  • bpo-29990: 修复GB18030解码器中的范围检查。原由Ma Lin提供补丁。

  • bpo-29979: 重写cgi.parse_multipart,重用FieldStorage类,并使其结果与FieldStorage对于multipart/form-data请求的结果一致。由Pierre Quentel提供补丁。

  • bpo-30243: 移除了_json的扫描器和编码器的__init__方法。误用它们可能导致内存泄漏或崩溃。现在扫描器和编码器对象在__new__方法中完全初始化。

  • bpo-30215: 使用re.LOCALE标志编译的正则表达式对象不再依赖于编译时的区域设置。只有匹配时的区域设置会影响匹配结果。

  • bpo-30185: 在收到Ctrl-C时,避免forkserver辅助进程中的KeyboardInterrupt回溯。

  • bpo-30103: binascii.b2a_uu()和uu.encode()现在支持使用 '`' 代替空格作为零。

  • bpo-28556: 对typing模块的各种更新:添加typing.NoReturn类型,使用WrapperDescriptorType,小错误修复。原PR由Jim Fasarakis-Hilliard和Ivan Levkivskyi提供。

  • bpo-30205: 修复Linux上未绑定的AF_UNIX套接字的getsockname()。

  • bpo-30228: io.FileIO的seek()和tell()方法现在设置内部seekable属性,以避免在open()时(在缓冲或文本模式下)进行一次系统调用。

  • bpo-30190: unittest的assertAlmostEqual和assertNotAlmostEqual在失败时提供了更好的消息,包括左右参数的差异。(由Giampaolo Rodola提供补丁)

  • bpo-30101: 添加对curses.A_ITALIC的支持。

  • bpo-29822: inspect.isabstract()现在在__init_subclass__期间工作。补丁由Nate Soares提供。

  • bpo-29960: 当_random.Random.setstate()引发异常时,保留生成器状态。补丁由Bryan Olson提供。

  • bpo-30070: 修复了解析模块中错误处理的内存泄漏和崩溃问题。

  • bpo-22352: dis.dis()的输出中的列宽现在针对大行号和指令偏移进行了调整。

  • bpo-30061: 修复了当readline()或__next__()分别返回不可大小化的对象时,IOBase方法__next__()和readlines()中的崩溃。修复了由不检查PyObject_Size()、PySequence_Size()或PyMapping_Size()的结果可能引起的其他错误。

  • bpo-30218: 修复了shutil.unpack_archive的PathLike支持。由Jelle Zijlstra提供补丁。

  • bpo-10076: re模块中的编译正则表达式和匹配对象现在支持copy.copy()和copy.deepcopy()(它们被认为是原子的)。

  • bpo-30068: 当存在hint时,_io._IOBase.readlines将首先检查是否关闭。

  • bpo-29694: 修复了pathlib mkdir与flags parents=True时的竞争条件。补丁由Armin Rigo提供。

  • bpo-29692: 修复了contextlib.contextmanager中RuntimeError异常的任意解链。由Siddharth Velankar提供补丁。

  • bpo-26187: 测试sqlite3跟踪回调在模式更改时不被多次调用。通过切换到在 bpo-9303 中使用sqlite3_prepare_v2()间接修复。由Aviv Palivoda提供补丁。

  • bpo-30017: 允许多次调用zip条目写入器对象的close()方法。向已关闭的写入器写入现在总是产生ValueError。

  • bpo-29998: Pickling和复制ImportError现在保留name和path属性。

  • bpo-29995: re.escape() 现在仅转义正则表达式特殊字符。

  • bpo-29962: 添加 math.remainder 操作,实现 IEEE 754 中规定的余数。

  • bpo-29649: 改进 struct.pack_into() 对于缓冲区大小和偏移量问题的异常消息。由 Andrew Nester 提供补丁。

  • bpo-29654: 支持 If-Modified-Since HTTP 头部(浏览器缓存)。补丁由 Pierre Quentel 提供。

  • bpo-29931: 修复了 ipaddress.ip_interface 对象的比较检查。补丁由 Sanjay Sundaresan 提供。

  • bpo-29953: 修复了当传递超出范围的 fold 参数时,datetime 和 time 对象的 replace() 方法中的内存泄漏问题。

  • bpo-29942: 修复了在遇到长串空可迭代对象时,itertools.chain.from_iterable 的崩溃问题。

  • bpo-10030: 通过加密 ZIP 文件的读取速度提高了2倍。

  • bpo-29204: Element.getiterator() 和 XMLParser() 的 html 参数仅在文档中被弃用(分别自 Python 3.2 和 3.4 起)。现在使用它们会发出弃用警告。

  • bpo-27863: 修复了由竞争条件和错误类型引起的 ElementTree 中的多个崩溃问题。

  • bpo-25996: 在 Unix 上添加了对 os.scandir() 中文件描述符的支持。通过使用 os.scandir(),os.fwalk() 的速度提高了2倍。

  • bpo-28699: 修复了 multiprocessing.pool 中池的一个 bug,即在可迭代对象的最开始引发异常可能会吞掉异常或使程序挂起。由 Davin Potts 和 Xiang Zhang 提供补丁。

  • bpo-23890: unittest.TestCase.assertRaises() 现在手动打破引用循环,以避免对象存活时间超过预期。

  • bpo-29901: zipapp 模块现在支持一般的路径类对象,而不仅仅是 pathlib.Path。

  • bpo-25803: 当操作系统优先考虑如 EACCES 而不是 EEXIST 的错误时,避免 Path.mkdir(exist_ok=True) 引发不正确的错误。

  • bpo-29861: 在 multiprocessing.Pool 中,任务、它们的参数和结果一旦完成就释放引用。

  • bpo-19930: os.makedirs()的mode参数不再影响新创建的中间级别目录的文件权限位。

  • bpo-29884: faulthandler: 在拆卸期间恢复旧的sigaltstack。由Christophe Zeitouny提供补丁。

  • bpo-25455: 修复了递归缓冲文件类对象repr中的崩溃。

  • bpo-29800: 修复了如果partial.keywords的键不是字符串时partial.__repr__的崩溃。由Michael Seifert提供补丁。

  • bpo-8256: 修复了如果sys.stdin或sys.stdout的属性"encoding"或"errors"未设置或不是字符串时可能导致的input()失败或崩溃。

  • bpo-28692: 现在弃用使用非整数值在gettext中选择复数形式。

  • bpo-26121: 使用C库实现math函数erf()和erfc()。

  • bpo-29619: os.stat()和os.DirEntry.inode()现在使用无符号整数转换inode(st_ino)。

  • bpo-28298: 修复了一个阻止数组'Q'、'L'和'I'接受大整数(具有__int__的对象)作为元素的错误。

  • bpo-29645: 加快了导入webbrowser模块的速度。webbrowser.register()现在是线程安全的。

  • bpo-28231: zipfile模块现在接受路径类对象作为外部路径。

  • bpo-26915: collections.abc.Sequence的index()和count()方法在进行比较时现在在检查相等性之前检查身份。

  • bpo-28682: 在 os.fwalk() 中添加了对字节路径的支持。

  • bpo-29728: 添加新的 socket.TCP_NOTSENT_LOWAT (Linux 3.12) 常量。由 Nathaniel J. Smith 提供补丁。

  • bpo-29623: 允许在 ConfigParser.read() 中使用路径类对象作为单一参数。由 David Ellis 提供补丁。

  • bpo-9303: 将sqlite3模块迁移到 _v2 API。由 Aviv Palivoda 提供补丁。

  • bpo-28963: 修复了在 C 中实现的 asyncio.Future.remove_done_callback 中的越界迭代。

  • bpo-29704: asyncio.subprocess.SubprocessStreamProtocol 在所有管道关闭之前不再关闭。

  • bpo-29271: 修复 Task.current_task 和 Task.all_tasks 在 C 中的实现,使其能够接受 None 参数,如同它们的纯 Python 实现一样。

  • bpo-29703: 修复 asyncio,支持在子进程中实例化新的事件循环。

  • bpo-29615: SimpleXMLRPCDispatcher 不再将 KeyError(或任何其他异常)链接到调度方法中引发的异常。由 Petr Motejlek 提供补丁。

  • bpo-7769: xmlrpc.server.SimpleXMLRPCDispatcher 及其子类的 register_function() 方法现在可以用作装饰器。

  • bpo-29376: 修复 threading._DummyThread.is_alive() 中的断言错误。

  • bpo-28624: 添加一个测试,检查 Popen() 的 cwd 参数是否接受 PathLike 对象。由 Sayan Chowdhury 提供补丁。

  • bpo-28518: 在 DML 语句之前隐式开始一个事务。由 Aviv Palivoda 提供补丁。

  • bpo-29742: 如果 get_extra_info() 在关闭的 ssl 传输上调用,将引发异常。由 Nikolay Kim 提供补丁。

  • bpo-16285: urllib.parse.quote 现在基于 RFC 3986,因此默认情况下不引用 '~' 字符。补丁由 Christian Theune 和 Ratnadeep Debnath 提供。

  • bpo-29532: 修改传递给 functools.partial() 的 kwarg 字典不再影响创建后的 partial 对象。

  • bpo-29110: 修复 aifc.open() 中当文件作为文件系统路径给出且不是有效的 AIFF 格式时的文件对象泄漏问题。由 Anthony Zhang 提供补丁。

  • bpo-22807: 添加 uuid.SafeUUID 和 uuid.UUID.is_safe,以传递平台关于生成的 UUID 是否使用多进程安全方法生成的信息。

  • bpo-29576: 改进了 importlib 中的一些弃用。一些弃用的方法现在会发出 DeprecationWarnings,并有更好的描述性消息。

  • bpo-29534: 修复了 Decimal.from_float() 在 _decimal 和 _pydecimal 中的不同行为。感谢 Andrew Nester。

  • bpo-10379: locale.format_string 现在支持 'monetary' 关键字参数,而 locale.format 已被弃用。

  • bpo-29851: importlib.reload() 现在会在模块缺少 spec 时抛出 ModuleNotFoundError。

  • bpo-28556: 对 typing 模块进行了多项更新:typing.Counter、typing.ChainMap、改进的 ABC 缓存等。原始 PR 由 Jelle Zijlstra、Ivan Levkivskyi、Manuel Krebber 和 Łukasz Langa 提供。

  • bpo-29100: 修复了 Python 3.6.0 中引入的 datetime.fromtimestamp() 的回归问题:检查最小和最大年份。

  • bpo-29416: 防止 pathlib.Path.mkdir 中的无限循环。

  • bpo-29444: 修复了 match 对象的 group() 方法中的越界缓冲区访问。基于 WGH 的补丁。

  • bpo-29377: 将 WrapperDescriptorType、MethodWrapperType 和 MethodDescriptorType 内置类型添加到 types 模块。原始由 Manuel Krebber 提供补丁。

  • bpo-29218: 现在移除了未使用的 install_misc 命令。自 2000 年以来,它已被记录为未使用。由 Eric N. Vander Weele 提供补丁。

  • bpo-29368: 现在在反序列化 collections.deque 和其他类似列表的对象时,调用 extend() 方法而不是 append() 方法。这可以将反序列化速度提高至 2 倍。

  • bpo-29338: 现在,如果为类提供了 __text_signature__,内置或扩展类的帮助信息会包括构造函数签名。

  • bpo-29335: 修复了当子进程已退出到停止状态而不是终止状态(例如:在 ptrace 下)时的 subprocess.Popen.wait()。

  • bpo-29290: 修复了 argparse 中帮助消息会在非断行空格处换行的回归问题。

  • bpo-28735: 修复了 mock.MagickMock 与 mock.ANY 的比较。

  • bpo-29197: 移除了已弃用的函数 ntpath.splitunc()。

  • bpo-29210: 移除了对 tarfile.TarFile.add() 中已弃用参数 "exclude" 的支持。

  • bpo-29219: 修复了未初始化的 ctypes.CDLL 实例的 repr 中的无限递归。

  • bpo-29192: 移除了 http.cookies 模块中已弃用的功能。

  • bpo-29193: string.Formatter.format() 的格式字符串参数现在仅为位置参数。

  • bpo-29195: 移除了对正则表达式对象方法中已弃用的未记录关键字参数的支持。

  • bpo-28969: 修复了functools.lru_cache的C实现中的竞态条件。当缓存函数满时,如果同时从不同线程以相同的未缓存参数调用,可能会引发KeyError。

  • bpo-20804: unittest.mock.sentinel属性现在在复制或pickle时保持其身份。

  • bpo-29142: 在urllib.request中,no_proxy环境变量中带有前导点的后缀可以再次匹配相关的主机名(例如.b.c匹配a.b.c)。由Milan Oberkirch提供补丁。

  • bpo-28961: 修复unittest.mock._Call辅助函数:不再忽略name参数。由Jiajun Huang提供补丁。

  • bpo-15812: inspect.getframeinfo()现在正确显示上下文的第行。由Sam Breese提供补丁。

  • bpo-28985: 更新sqlite3模块中的授权者常量。由Dingyuan Wang提供补丁。

  • bpo-29079: 防止pathlib.resolve()在Windows上陷入无限循环。

  • bpo-13051: 修复了大型或调整大小的curses.textpad.Textbox中的递归错误。基于Tycho Andersen的补丁。

  • bpo-9770: curses.ascii谓词现在正确处理负整数。

  • bpo-28427: 当从另一个线程收集时,旧键不应从WeakValueDictionary中移除新值。

  • bpo-28923: 从Tix.py中移除编辑器工件。

  • bpo-28871: 修复了在深度ElementTree释放时的崩溃。

  • bpo-19542: 修复WeakValueDictionary.setdefault()和WeakValueDictionary.pop()中的bug,这些bug在另一个线程发生GC收集时出现。

  • bpo-20191: 修复了resource.prlimit()中的崩溃,当传递一个不拥有其元素的序列作为限制时。

  • bpo-16255: subprocess.Popen在Android上使用/system/bin/sh作为shell,而不是/bin/sh。

  • bpo-28779: 如果预加载的模块实例化了某些多处理对象(如锁),multiprocessing.set_forkserver_preload()会使forkserver进程崩溃。

  • bpo-26937: tarfile.TarFile 类的 chown() 方法现在在无法导入 grp 模块时不会失败,例如在 Android 平台上。

  • bpo-28847: dbm.dumb 现在支持读取只读文件,并且在索引文件未更改时不再写入。如果在 'r' 和 'w' 模式下索引文件丢失并重新创建,现在会发出弃用警告(在未来的 Python 版本中将会是错误)。

  • bpo-27030: 在 re.sub() 替换模板正则表达式中,由 '\' 和一个 ASCII 字母组成的未知转义现在会引发错误。

  • bpo-28835: 修复了 warnings.catch_warnings() 中引入的一个回归问题:如果在上下文管理器内部覆盖了 warnings.showwarning(),则调用它。

  • bpo-27172: 为了协助从 2.7 版本升级,之前文档中关于 inspect.getfullargspec() 的弃用已被撤销。在 Python 2.7 分支不再官方支持后,可能会重新考虑这一决定。

  • bpo-28740: 添加 sys.getandroidapilevel():返回 Android 的构建时 API 版本作为整数。此函数仅在 Android 上可用。

  • bpo-26273: 新增 socket.TCP_CONGESTION (Linux 2.6.13) 和 socket.TCP_USER_TIMEOUT (Linux 2.6.37) 常量。补丁由 Omar Sandoval 编写。

  • bpo-28752: 恢复了 datetime 对象的 __reduce__() 方法。

  • bpo-28727: 正则表达式模式,由 re.compile() 创建的 _sre.SRE_Pattern 对象,现在可以比较(仅限 x==y 和 x!=y 操作符)。这一更改应该修复了 bpo-18383:当 warnings 模块重新加载时不要重复警告过滤器(通常只在单元测试中这样做)。

  • bpo-20572: 移除了 subprocess.Popen.wait 的 endtime 参数。它在 3.4 版本中被弃用,在此之前也未在文档中记录。

  • bpo-25659: 在 ctypes 中,防止在抽象类(如 Array)上调用 from_buffer() 和 from_buffer_copy() 方法时崩溃。

  • bpo-28548: 在"http.server"模块中,尽可能解析协议版本,以避免在某些错误响应中使用HTTP 0.9。

  • bpo-19717: 使Path.resolve()在不存在的路径上也能成功。由Vajrasky Kok提供补丁。

  • bpo-28563: 修复了在gettext模块中处理复数形式选择时可能导致的DoS和任意代码执行问题。表达式解析器现在支持GNU gettext所支持的精确语法。

  • bpo-28387: 修复了当垃圾收集器在其他线程中调用时,_io.TextIOWrapper解构器可能崩溃的问题。基于Sebastian Cufre的补丁。

  • bpo-27517: LZMA压缩器和解压器在两次接收到空数据时不再抛出异常。补丁由Benjamin Fogle提供。

  • bpo-28549: 修复了curses的addch()在使用ncurses6时的段错误。

  • bpo-28449: tarfile.open()以模式"r"或"r:"现在会先尝试以压缩方式打开tar文件,再尝试无压缩方式打开。否则在使用ignore_zeros=True时有50%的几率失败。

  • bpo-23262: webbrowser模块现在支持Firefox 36+及衍生浏览器。基于Oleg Broytman的补丁。

  • bpo-24241: 在X环境下,webbrowser现在更倾向于直接使用默认浏览器。此外,webbrowser的register()函数现在有一个文档化的'preferred'参数,用于指定无参数调用get()时返回的浏览器。补丁由David Steele提供。

  • bpo-27939: 修复了tkinter.ttk.LabeledScale和tkinter.Scale中由于在Tk内部将比例表示为浮点值而导致的错误。如果底层Tk变量设置为浮点值,tkinter.IntVar现在可以正常工作。

  • bpo-28255: calendar.TextCalendar.prweek()不再在周历后打印空格。calendar.TextCalendar.pryear()不再在年历后打印多余的换行符。基于Xiang Zhang的补丁。

  • bpo-28255: calendar.TextCalendar.prmonth()在打印月历后的新行开头不再打印空格。由Xiang Zhang提供补丁。

  • bpo-20491: textwrap.TextWrapper 类现在支持不换行空格。基于 Kaarle Ritvanen 的补丁。

  • bpo-28353: os.fwalk() 不再因损坏的链接而失败。

  • bpo-28430: 修复了 C 实现的 asyncio.Future 迭代器不接受非 None 值传递给 it.send(val) 的问题。

  • bpo-27025: 为提升可读性,Tkinter 部件的生成名称现在以 "!" 前缀开头。

  • bpo-25464: 通过为 Tix 库的 bug 添加变通方法,修复了 tkinter.tix 模块中的 HList.header_exists()。

  • bpo-28488: shutil.make_archive() 不再向 ZIP 归档添加 "./" 条目。

  • bpo-25953: re.sub() 现在即使在字符串中未找到模式,也会为替换模板中的无效数字组引用引发错误。无效组引用的错误消息现在包括组索引和引用的位置。基于 SilentGhost 的补丁。

  • bpo-28469: timeit 现在使用 1, 2, 5, 10, 20, 50,... 序列代替 1, 10, 100,... 进行自动范围调整。

  • bpo-28115: zipfile 模块的命令行界面现在使用 argparse。添加了对长选项的支持。

  • bpo-18219: 为大量列优化 csv.DictWriter。Mariatta Wijaya 的补丁。

  • bpo-28448: 修复了 C 实现的 asyncio.Future 在 Windows 上不工作的问题。

  • bpo-23214: 在 "io" 模块中,BufferedReader 和 BytesIO 的 read1() 方法的参数现在是可选的,并且可以是 -1,以匹配 BufferedIOBase 的规范。

  • bpo-28480: 修复在禁用多线程时构建 socket 模块时的错误。

  • bpo-28240: timeit: 移除自 Python 3.3 以来已弃用的 -c/--clock-t/--time 命令行选项。

  • bpo-28240: timeit 现在将基准测试重复 5 次而非仅 3 次,以使基准测试更加可靠。

  • bpo-28240: 如果基准测试耗时少于 10 秒,timeit 自动范围调整现在使用单次循环迭代而非 10 次迭代。"python3 -m timeit -s 'import time' 'time.sleep(1)'" 现在耗时 4 秒而非 40 秒。

  • Distutils.sdist 现在对 README 和 setup.py 文件的查找区分大小写。这一行为与 Setuptools 6.0 及以后版本中的行为一致。理由参见 setuptools 100

  • bpo-24452: 使 webbrowser 支持 Mac OS X 上的 Chrome。由 Ned Batchelder 提供补丁。

  • bpo-20766: 修复了 pdb 在处理 SIGINT 处理器时的引用泄漏问题。

  • bpo-27998: 修复了 Windows 上 os.scandir() 对字节路径的支持。由 Eryk Sun 提供补丁。

  • bpo-28317: 反汇编器现在解码 FORMAT_VALUE 参数。

  • bpo-28380: unittest.mock 的 Mock autospec 函数现在正确支持 assert_called、assert_not_called 和 assert_called_once。

  • bpo-28229: lzma 模块现在支持 pathlib。

  • bpo-28321: 修复了在 plistlib 中使用二进制格式写入非 BMP 字符的问题。

  • bpo-28225: bz2 模块现在支持 pathlib。初始由 Ethan Furman 提供补丁。

  • bpo-28227: gzip 现在支持 pathlib。由 Ethan Furman 提供补丁。

  • bpo-28332: 弃用了 socket.htons 和 socket.ntohs 中的静默截断。原始由 Oren Milman 提供补丁。

  • bpo-27358: 优化了合并可变关键字参数的过程,并改进了当传递非映射作为可变关键字参数时的错误信息。

  • bpo-28257: 改进了当传递非可迭代对象作为可变位置参数时的错误信息。添加了操作码 BUILD_TUPLE_UNPACK_WITH_CALL。

  • bpo-28322: 修复了当从错误的 pickle 数据反序列化 itertools 对象时可能发生的崩溃。基于 John Leitch 的补丁。

  • bpo-28228: imghdr 现在支持 pathlib。

  • bpo-28226: compileall 现在支持 pathlib。

  • bpo-28314: 修复了 xml.etree.ElementTree.Element 的 getiterator() 方法的函数声明(C 标志)。

  • bpo-28148: 停止在 time 模块中使用 localtime() 和 gmtime()。引入了平台无关的 _PyTime_localtime API,该 API 类似于 POSIX 的 localtime_r,但在所有平台上都可用。由 Ed Schouten 提供补丁。

  • bpo-28253: 修复了极端月份(0001-01和9999-12)的日历功能。重新实现了itermonthdays()和itermonthdays2()方法,使其不再调用可能导致datetime.date下溢/溢出的itermonthdates()。

  • bpo-28275: 修复了LZMADecompressor和BZ2Decompressor类中decompress()方法可能存在的释放后使用问题。原始由John Leitch提供补丁。

  • bpo-27897: 修复了如果传递无效的字符串类似对象作为名称时,sqlite3.Connection.create_collation()可能崩溃的问题。由Xiang Zhang提供补丁。

  • bpo-18844: random.choices()现在将k作为仅关键字参数,以提高常见情况的可读性,并与其他语言中使用的签名保持一致。

  • bpo-18893: 修复了Lib/ctypes/macholib/dyld.py中无效的异常处理。由Madison May提供补丁。

  • bpo-27611: 修复了tkinter.tix模块中对默认根窗口的支持。在DisplayStyle构造函数中添加了master参数。

  • bpo-27348: 在traceback模块中,恢复了类似于"Exception: None"的异常消息的格式化。这修复了3.5a2中引入的回归问题。

  • bpo-25651: 允许在subTest()的msg参数中使用假值。

  • bpo-27778: 修复了当getrandom()被信号中断且信号处理程序引发Python异常时,os.getrandom()中的内存泄漏问题。

  • bpo-28200: 修复了Windows上os模块中的内存泄漏问题(修复了path_converter()函数)。

  • bpo-25400: RobotFileParser现在正确返回crawl_delay和request_rate的默认值。初始由Peter Wirtz提供补丁。

  • bpo-27932: 防止win32_ver()中的内存泄漏。

  • 修复socket._sendfile_use_sendfile中的UnboundLocalError。

  • bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。

  • bpo-22493: 现在,通过在正则表达式中间使用内联标志发出的警告消息包含(截断的)正则表达式模式。由Tim Graham提供补丁。

  • bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。

  • bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。

  • bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。

  • bpo-28114: 修复当env包含字节字符串时parse_envlist()崩溃的问题。由Eryk Sun提供补丁。

  • bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。

  • bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。

  • bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。

  • bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。

  • bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。

  • bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。

  • bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。

  • bpo-28325: 移除遗留的MacOS 9 macurl2path模块及其测试。

  • bpo-28368: 如果子监视器没有附加循环,则拒绝监视进程。由Vincent Michel提供补丁。

  • bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。

  • bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。

  • bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。

  • bpo-28372: 修复asyncio以支持非python协程的格式化。

  • bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。

  • bpo-27972: 禁止Tasks等待自身。

  • bpo-24142: 读取损坏的配置文件会使configparser处于无效状态。原始补丁由Florian Höch提供。

  • bpo-29581: ABCMeta.__new__现在接受 **kwargs,允许抽象基类在__init_subclass__中使用关键字参数。由Nate Soares提供补丁。

  • bpo-25532: inspect.unwrap()现在只会尝试解包对象sys.getrecursionlimit()次,以防止在每次属性访问时创建新对象的对象。

  • bpo-30177: path.resolve(strict=False)不再在文件系统中不存在的第一个元素后截断路径。补丁由Antoine Pietri提供。

文档

  • bpo-31294: 修复ZeroMQSocketListener和ZeroMQSocketHandler示例中的不完整代码片段,并将它们适配到Python 3。

  • bpo-21649: 在SSL文档中添加RFC 7525和Mozilla服务器端TLS链接。

  • bpo-31128: 允许pydoc服务器绑定到任意主机名。

  • bpo-30803: 澄清关于真值测试的文档。原始由Peter Thomassen提供补丁。

  • bpo-30176: 在curses文档中添加缺失的属性相关常量。

  • bpo-30052: bytes()bytearray() 的链接目标现在是它们各自的类型定义,而不是相应的内置函数条目。使用 bytesbytearray 来引用后者。为了确保这一及未来的交叉引用更新能自动应用,每日文档构建现在禁用了Sphinx中的默认输出缓存功能。

  • bpo-26985: 在inspect文档中添加缺失的代码对象信息。

  • bpo-19824: 通过强调模板字符串在国际化中的实用性,并澄清一些使用限制,改进模板字符串的文档和链接。(另见 : bpo-20314, bpo-12518)

  • bpo-28929: 将文档链接到其在GitHub上的源文件。

  • bpo-25008: 将smtpd.py文档标记为实际上已弃用,并添加指向aiosmtpd的指针,这是一个基于asyncio的第三方替代品。

  • bpo-26355: 在每个页面上添加指向相应主要版本文档的规范头部链接。由Matthias Bussonnier提供补丁。

  • bpo-29349: 修复构建文档代码中的Python 2语法。

  • bpo-23722: 3.6 新特性指南中的数据模型参考和移植部分现在涵盖了自定义元类为实现完全支持 PEP 487 和无参数 super() 所需的额外 __classcell__ 处理。

  • bpo-28513: 记录了 zipfile 的命令行接口。

测试

  • bpo-29639: test.support.HOST 现在是 "localhost",新增了一个 HOSTv4 常量用于满足 127.0.0.1 的需求,类似于现有的 HOSTv6 常量。

  • bpo-31320: 在 test_ssl 中静默回溯。

  • bpo-31346: 对于 SSLContext,优先使用 PROTOCOL_TLS_CLIENT 和 PROTOCOL_TLS_SERVER 协议。

  • bpo-25674: 移除 sha256.tbs-internet.com 的 ssl 测试。

  • bpo-30715: 处理 OpenSSL 1.1.0f 的 ALPN 回调变更。最新版本的行为类似于 OpenSSL 1.0.2,不再中止握手。

  • bpo-30822: regrtest: 从 regrtest --all 中排除 tzdata。当使用 --use=all / -u all 运行测试套件时,排除 tzdata,因为它会使 test_datetime 变得太慢(在某些构建机器人上需要 15-20 分钟),从而导致某些构建机器人超时。同时修复 regrtest 命令行解析器,允许传递 -u extralargefile 来运行 test_zipfile64。

  • bpo-30695: 向 _testcapi 模块添加了 set_nomemory(start, stop)remove_mem_hooks() 函数。

  • bpo-30357: test_thread: setUp() 现在使用 support.threading_setup() 和 support.threading_cleanup() 来等待线程完成,以避免对后续测试产生随机副作用。初始补丁由 Grzegorz Grzywacz 编写。

  • bpo-30197: 增强了 test.support 模块中的 swap_attr() 和 swap_item() 函数。它们现在可以在 with 语句内部删除替换的属性或项目时工作。属性或项目的旧值(如果不存在则为 None)现在将被赋值给 "as" 子句的目标,如果有的话。

  • bpo-24932: 在 _testembed 中使用正确的命令行解析。

  • bpo-28950: 在 regrtest 命令行参数中禁止将 -j0 与 -T/-l 结合使用。

  • bpo-28683: 修复在Android上为非root用户绑定Unix socket并引发PermissionError的测试。

  • bpo-26936: 修复Android上的test_socket失败 - getservbyname()、getservbyport()和getaddrinfo()在某些Android API级别上被破坏。

  • bpo-28666: 现在test.support.rmtree能够删除不可写或不可读的目录。

  • bpo-23839: 现在在运行每个测试文件之前清除各种缓存。

  • bpo-26944: 修复Android上的test_posix,其中'id -G'完全错误或缺少有效的gid。

  • bpo-28409: regrtest: 修复命令行参数的解析器。

  • bpo-28217: 添加_testconsole模块以测试控制台输入。

  • bpo-26939: 添加support.setswitchinterval()函数以修复在Android armv7 qemu模拟器上挂起的test_functools。

构建

  • bpo-31354: 允许 --with-lto 用于所有构建,而不仅仅是 make profile-opt

  • bpo-31370: 移除对构建--without-threads的支持。在21世纪,这个选项已经不再真正有用。移除大量条件路径允许我们简化代码库,包括难以维护的低级内部代码。

  • bpo-31341: 根据 PEP 11,移除了对IRIX操作系统的支持。

  • bpo-30854: 修复编译--without-threads时的编译错误。由Masayuki Yamamoto提供补丁。

  • bpo-30687: 在Windows上构建时定位msbuild.exe而不是vcvarsall.bat。

  • bpo-20210: 支持Setup文件中的 disabled 标记。在此标记之后列出的扩展模块完全不被构建,无论是通过Makefile还是setup.py。

  • bpo-29941: 添加 --with-assertions 配置标志以明确启用C assert() 检查。默认为关闭。--with-pydebug``意味着 ``--with-assertions

  • bpo-28787: 修复使用 --with--dtrace 配置时Python的树外构建。

  • bpo-29243: 在配置为 --enable-optimizations 时,防止在 make test``make install``和一些其他make目标期间不必要的Python重新构建。

  • bpo-23404: 不再基于文件修改时间重新生成已生成的文件:该操作现在是显式的。用``make regen-all``替换 make touch

  • bpo-29643: 修复 --enable-optimization 不起作用的问题。

  • bpo-27593: 当从仓库构建时,sys.version和platform模块的python_build()、python_branch()和python_revision()函数现在使用git信息而不是hg。

  • bpo-29572: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2k。

  • bpo-27659: 禁止隐式C函数声明:在可能的情况下使用``-Werror=implicit-function-declaration`` (GCC和Clang,但这取决于编译器版本) 。补丁由Chi Hsuan Yen编写。

  • bpo-29384: 移除旧的Be OS辅助脚本。

  • bpo-26851: 设置Android编译和链接标志。

  • bpo-28768: 修复函数_setmode的隐式声明。由Masayuki Yamamoto提供补丁

  • bpo-29080: 从PCBuild/build.bat中移除对hg.exe的硬依赖

  • bpo-23903: 向PC/python3.def添加遗漏的名称。

  • bpo-28762: lockf()在Android API level 24上可用,但F_LOCK宏在android-ndk-r13中未定义。

  • bpo-28538: 修复因if_nameindex()在Android API level 24上可用但if_nameindex结构未定义而导致的编译错误。

  • bpo-20211: 不要将安装C头文件的目录和安装对象代码库的目录添加到交叉编译搜索路径中。原始由Thomas Petazzoni提供补丁。

  • bpo-28849: 不要在Android上定义sys.implementation._multiarch。

  • bpo-10656: 修复AIX上的树外构建。由Tristan Carel和Michael Haubenwallner提供补丁。

  • bpo-26359: 将--with-optimiations重命名为--enable-optimizations。

  • bpo-28444: 修复交叉编译时缺少扩展模块的问题。

  • bpo-28208: 更新Windows构建和OS X安装程序以使用SQLite 3.14.2。

  • bpo-28248: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2j。

  • bpo-21124: 通过在PyVarObject_HEAD_INIT中传递 NULL 而不是 &PyType_Type 修复在Cygwin上构建_struct模块的问题。由Masayuki Yamamoto提供补丁。

  • bpo-13756: 修复在Cygwin上构建扩展模块的问题。由Roumen Petrov提供补丁,基于Jason Tishler的原始补丁。

  • bpo-21085: 添加对siginfo_t.si_band的配置检查,Cygwin不提供此功能。由Masayuki Yamamoto提供补丁,Erik Bray进行审查和重新基于。

  • bpo-28258: 修复了在爱沙尼亚语言环境下构建的问题(Makefile中的python-config和distclean目标)。由Arfrever Frehtes Taifersar Arahesis提供补丁。

  • bpo-26661: setup.py现在可以检测到带有multiarch包装的系统libffi。

  • bpo-27979: 不再为在非OSX UNIX平台上构建_ctypes捆绑libffi的完整副本。现在在这样的平台上构建_ctypes需要安装libffi。

  • bpo-15819: 移除了为在源码树外构建而冗余的包含搜索目录选项。

  • bpo-28676: 防止在macOS上出现缺失'getentropy'声明的警告。由Gareth Rees提供补丁。

Windows

  • bpo-31392: 更新Windows构建以使用OpenSSL 1.1.0f。

  • bpo-30389: 在Windows上的distutils中添加对Visual Studio 2017的检测。

  • bpo-31358: zlib不再捆绑在CPython源代码中,而是像bz2、lzma、OpenSSL、Tcl/Tk和SQLite一样按需下载。

  • bpo-31340: 更改为使用MSVC v141(包含在Visual Studio 2017中)构建。

  • bpo-30581: os.cpu_count()现在在Windows上当逻辑处理器数量大于64时返回正确的处理器数量。

  • bpo-30916: 预构建OpenSSL、Tcl和Tk,并将二进制文件包含在构建中。

  • bpo-30731: 向python.manifest添加缺失的xmlns,以使其匹配模式。

  • bpo-30291: 允许使用-64后缀从py.exe要求64位解释器。由Steve (Gadget) Barnes贡献。

  • bpo-30362: 向py.exe启动器添加列表选项(-0, -0p)。由Steve Barnes贡献。

  • bpo-23451: 修复 socketmodule.c 中的 socket 弃用警告。由 Segev Finer 提供补丁。

  • bpo-30450: Windows 上的构建过程不再依赖于 Subversion,而是通过 Python 脚本从 GitHub 拉取外部代码。如果系统中未找到 Python 3.6(通过 py -3.6),则使用 NuGet 下载 32 位 Python 的副本。

  • bpo-29579: 从安装程序中移除 readme.txt。

  • bpo-25778: winreg 未正确截断字符串(由 Eryk Sun 提供补丁)

  • bpo-28896: 弃用 WindowsRegistryFinder 并默认禁用它

  • bpo-28522: 修复 getpathp.c 中错误处理的缓冲区重新分配

  • bpo-28402: 为 Windows 上的标准库添加签名目录文件。

  • bpo-28333: 为 ps1/ps2 和 input() 提示启用 Unicode。(由 Eryk Sun 提供补丁)

  • bpo-28251: 改进 Windows 上的帮助手册。

  • bpo-28110: launcher.msi 在 32 位和 64 位之间有不同的产品代码

  • bpo-28161: 以写权限打开 CON 失败

  • bpo-28162: 如果第一行以 Ctrl+Z 开头,WindowsConsoleIO readall() 失败

  • bpo-28163: WindowsConsoleIO fileno() 将错误的标志传递给 _open_osfhandle

  • bpo-28164: 对于各种路径,_PyIO_get_console_type 失败

  • bpo-28137: 将 Windows 路径文件重命名为 ._pth

  • bpo-28138: Windows ._pth 文件应允许导入站点

IDLE

  • bpo-31493: IDLE 代码上下文——修复代码更新和字体更新计时器。取消计时器可以防止 test_idle 完成时出现警告消息。

  • bpo-31488: IDLE - 更新前扩展类中的非键选项。应用配置对话框更改时,为每个特性类调用 .reload。更改 ParenMatch,使更新的选项影响附加到现有编辑器窗口的现有实例。

  • bpo-31477: IDLE - 改进文档中的 rstrip 条目。剥离尾随空白会剥离比空格更多的内容。多行字符串文字不被跳过。

  • bpo-31480: IDLE - 使测试在默认禁用 zzdummy 扩展的情况下通过。

  • bpo-31421: 文档说明IDLE如何运行tkinter程序。IDLE在后台调用tcl/tk更新,以使与tkinter应用程序的实时交互和实验更加容易。

  • bpo-31414: IDLE -- 通过首先删除来修复tk输入框测试。向整数输入框中添加内容与删除并插入不同,因为int('')会失败。

  • bpo-31051: 将IDLE的configdialog GenPage重新排列为窗口、编辑器和帮助部分。

  • bpo-30617: IDLE - 为outwin子类添加文档字符串和测试,这是editor的子类。将一些数据和函数从类移到模块级别。由Cheryl Sabella提供补丁。

  • bpo-31287: IDLE - 在test_configdialog中不要修改tkinter.message。

  • bpo-27099: 将IDLE的内置'extensions'转换为常规功能。大约10个IDLE功能作为所谓的可选扩展实现。它们的不同行为可能会让用户感到困惑或更糟,对维护也不利。因此进行了转换。对用户的主要区别是,现在对内置功能的用户可配置键绑定的处理是统一的。现在,编辑键集中的绑定只会影响其在键集中的值。所有绑定都在config-extensions.def中系统特定的默认键集中一起定义。所有自定义键集作为一个整体保存在config-extension.cfg中。所有更改在点击Apply或Ok后立即生效。受影响的事件有'<<force-open-completions>>', '<<expand-word>>', '<<force-open-calltip>>', '<<flash-paren>>', '<<format-paragraph>>', '<<run-module>>', '<<check-module>>', 和'<<zoom-height>>'。任何在3.6.3之前进行的(全局)自定义将不会影响到3.6.3之后的键集特定自定义,反之亦然。初始由Charles Wohlganger提供补丁。

  • bpo-31206: IDLE: 从ConfigDialog中提取HighPage(Frame)类。由Cheryl Sabella提供补丁。

  • bpo-31001: 为configdialog高亮标签添加测试。由Cheryl Sabella提供补丁。

  • bpo-31205: IDLE:从ConfigDialog中提取KeysPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。

  • bpo-31130: IDLE -- 修复test_configdialog中的内存泄漏。初始由Victor Stinner提供补丁。

  • bpo-31002: 为configdialog的keys标签页添加测试。由Cheryl Sabella提供补丁。

  • bpo-19903: IDLE:使用 inspect.signature 代替 inspect.getfullargspec 生成调用提示。这将改进使用Argument Clinic转换的内置函数的调用提示。由Louie Lu提供补丁。

  • bpo-31083: IDLE - 在configdialog中添加TabPage类的概要。更新现有类以匹配概要。初始补丁由Cheryl Sabella提供。

  • bpo-31050: 从ConfigDialog中提取GenPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。

  • bpo-31004: IDLE - 从ConfigDialog中提取FontPage(Frame)类。经过轻微修改的测试仍然通过。修复通用测试。补丁主要由Cheryl Sabella提供。

  • bpo-30781: IDLE - 在ConfigDialog中使用ttk部件。由Terry Jan Reedy和Cheryl Sabella提供补丁。

  • bpo-31060: IDLE - 完成ConfigDialog中方法的重新排列。将与每个标签页和按钮相关的方法分组有助于编写测试和改进标签页,并将使这些组能够分割成类。

  • bpo-30853: IDLE -- 从ConfigDialog中提取VarTrace类。实例跟踪器管理由tk变量和回调函数组成的对。当跟踪开启时,设置变量会调用函数。新类的测试覆盖率为100%。

  • bpo-31003: IDLE:为通用标签页添加更多测试。

  • bpo-30993: IDLE - 改进配置对话框字体页面及测试。在配置对话框中:在create_font_tab文档字符串中记录因果路径。简化一些属性名称。将set_samples调用移至var_changed_font(来自Cheryl Sabella的想法)。将相关函数移动到创建小部件函数之后的位置。在test_configdialog中:修复test_font_set使其不依赖于顺序。修复重命名的test_indent_scale以测试小部件。调整测试以适应set_samples调用的移动。为加载函数添加测试。将所有字体测试放在一个类中,将标签缩进测试放在另一个类中。除了两行代码外,这些测试完全覆盖了相关函数。

  • bpo-30981: IDLE -- 为配置对话框字体页面添加更多测试。

  • bpo-28523: IDLE:在配置对话框中将'colour'替换为'color'。

  • bpo-30917: 为idlelib.config.IdleConf添加测试。将覆盖率从46%提高到96%。由Louie Lu提供补丁。

  • bpo-30934: 记录idlelib测试的覆盖率详情。在idlelib/idle-test/README.txt中添加部分内容。包括检查分支是否双向执行。排除在单元测试期间不运行的IDLE特定代码。

  • bpo-30913: IDLE:在文档字符串中记录ConfigDialog的tk变量、方法和部件。这将有助于改进对话框和分割类。原始由Cheryl Sabella提供补丁。

  • bpo-30899: IDLE:为config中的ConfigParser子类添加测试。由Louie Lu提供补丁。

  • bpo-30881: IDLE:为browser.py添加文档字符串。由Cheryl Sabella提供补丁。

  • bpo-30851: IDLE:移除configdialog中未使用的变量。一个是重复的,一个是设置但用户无法更改的。由Cheryl Sabella提供补丁。

  • bpo-30870: IDLE:在设置对话框中,使用上下键以及鼠标选择字体。初始由Louie Lu提供补丁。

  • bpo-8231: IDLE:仅调用config.IdleConf.GetUserCfgDir一次。

  • bpo-30779: IDLE:从configdialog中提取ConfigChanges类,放入config;测试。* 在config中,将转储测试代码放入一个函数;运行它和'unittest'在'if __name__ == '__main__'中。* 基于bpo问题上的changes_class_v4.py添加config.ConfigChanges类。* 添加test_config.ChangesTest类,部分使用configdialog_tests_v1.py。* 修改configdialog以使用ConfigChanges;参见tracker msg297804。* 修改test_configdialog以匹配configdialog的更改。* 移除未使用或已移至ConfigChanges的configdialog函数。Cheryl Sabella贡献了部分补丁。

  • bpo-30777: IDLE:configdialog - 添加文档字符串并修复注释。由Cheryl Sabella提供补丁。

  • bpo-30495: IDLE:通过添加文档字符串、PEP8命名和更多测试来改进textview。由Cheryl Sabella提供补丁。

  • bpo-30723: IDLE:对parenmatch进行多项改进。添加'parens'风格以同时高亮开启和关闭符号。使'default'风格(非默认)成为'opener'的同义词。使时间延迟在所有风格中工作方式相同。为配置对话框扩展标签添加帮助,包括parenmatch的帮助。添加新测试。原始补丁由Charles Wohlganger提供。

  • bpo-30674: IDLE:向grep模块添加文档字符串。由Cheryl Sabella提供补丁。

  • bpo-21519: IDLE的基本自定义键输入对话框现在能正确检测重复项。原始由Saimadhav Heblikar提供补丁。

  • bpo-29910: IDLE不再通过快捷键注释掉一个区域后删除一个字符。为此添加 ``return 'break'``以及IDLE和默认键绑定之间的其他潜在冲突。

  • bpo-30728: 审查并更改idlelib.configdialog的名称。将方法和属性名称小写。将'colour'替换为'color',扩展过于隐晦的名称,删除不需要的下划线。用特定的导入替换 import *。由Cheryl Sabella提供补丁。

  • bpo-6739: IDLE:通过尝试用tk绑定用户输入的键序列来验证它们。为所有3个验证函数添加测试。原始由G Polo提供补丁。测试由Cheryl Sabella添加。

  • bpo-15786: 修复IDLE自动完成框的几个问题。现在以下功能应该可以正常工作:点击选择框中的项目;使用滚动条;通过按回车键选择项目。MacOSX上的挂起问题应该不会再发生。补丁由Louie Lu提供。

  • bpo-25514: 添加关于IDLE启动失败的文档子节。无连接弹出消息会引导用户查看此部分。

  • bpo-30642: 修复IDLE测试中的引用泄露。由Louie Lu和Terry Jan Reedy提供补丁。

  • bpo-30495: 为textview.py添加文档字符串并使用PEP8命名。由Cheryl Sabella和Terry Jan Reedy提供补丁。

  • bpo-30290: 帮助-关于:使用pep8命名并添加测试。将覆盖率提高到100%。由Louie Lu、Cheryl Sabella和Terry Jan Reedy提供补丁。

  • bpo-30303: 向textview添加_utest选项;添加新测试。将覆盖率提高到100%。由Louie Lu和Terry Jan Reedy提供补丁。

  • bpo-29071: IDLE为f-字符串前缀着色(但不包括无效的ur前缀)。

  • bpo-28572: 将IDLE的test_configdialog覆盖率提高10%。更新并增强配置系统的描述。

工具/示例

  • bpo-30983: gdb集成命令(py-bt等)现在也可以在优化的共享构建上工作了。PEP 523 引入了_PyEval_EvalFrameDefault,它在非调试共享构建上内联了PyEval_EvalFrameEx。这破坏了使用py-bt、py-up和其他一些Python特定的gdb集成的能力。问题通过在python-gdb.py中仅查找_PyEval_EvalFrameDefault帧来修复。原始由Bruno "Polaco" Penteado提供补丁。

  • bpo-29748: 在Argument Clinic中添加了切片索引转换器。

  • bpo-24037: Argument Clinic现在使用转换器 bool(accept={int}) 而不是 int 来表示语义布尔值。这避免了为Python和C重复默认值,并将有助于未来转换为 bool

  • bpo-29367: python-gdb.py现在也支持 method-wrapper (wrapperobject) 对象。

  • bpo-28023: 修复python-gdb.py不支持新字典实现的问题。

  • bpo-15369: pybench和pystone微基准测试已从Tools中移除。请使用新的Python基准测试套件https://github.com/python/pyperformance,它更可靠,并包含一个可在Python 2和Python 3上工作的pybench便携版本。

  • bpo-28102: zipfile模块的CLI现在将用法打印到stderr。由Stephen J. Turnbull提供补丁。

C API

  • bpo-31338: 添加了 Py_UNREACHABLE() 宏,用于永远不会预期到达的代码路径。这个和其他一些有用的宏现在已在C API手册中记录。

  • bpo-30832: 移除了线程本地存储的自实现。CPython在Python/thread.c中提供了线程本地存储(TLS)的自实现,用于平台没有提供原生TLS的情况。然而,当前所有支持的平台(Windows和pthreads)都已提供原生TLS,并且在任何情况下都无条件定义了Py_HAVE_NATIVE_TLS宏。

  • bpo-30708: 如果第二个参数为NULL且wchar_t*字符串包含空字符,PyUnicode_AsWideCharString()现在会引发ValueError。

  • bpo-16500: 弃用PyOS_AfterFork()并添加PyOS_BeforeFork()、PyOS_AfterFork_Parent()和PyOS_AfterFork_Child()。

  • bpo-6532: PyThread_start_new_thread()和PyThread_get_thread_ident()的结果类型,以及PyThreadState_SetAsyncExc()的id参数类型从"long"改为"unsigned long"。

  • bpo-27867: 函数PySlice_GetIndicesEx()被弃用,如果Py_LIMITED_API未设置或设置为0x03050400到0x03060000(不包括)或0x03060100或更高的值,则替换为宏。添加了函数PySlice_Unpack()和PySlice_AdjustIndices()。

  • bpo-29083: 修正了一些公共API函数的声明。PyArg_VaParse()和PyArg_VaParseTupleAndKeywords()在有限API中不可用。当定义了PY_SSIZE_T_CLEAN时,PyArg_ValidateKeywordArguments()、PyArg_UnpackTuple()和Py_BuildValue()在版本<3.3的有限API中不可用。

  • bpo-28769: PyUnicode_AsUTF8AndSize() 和 PyUnicode_AsUTF8() 的结果现在是 const char * 类型,而不是 char *

  • bpo-29058: 所有在 Python 3.2 之后添加的稳定 API 扩展现在只有在 Py_LIMITED_API 设置为支持此 API 的最低 Python 版本的 PY_VERSION_HEX 值时才可用。

  • bpo-28822: PyUnicode_FindChar() 的索引参数 startend 现在被调整为像 str[start:end] 一样行为。

  • bpo-28808: PyUnicode_CompareWithASCIIString() 现在永远不会引发异常。

  • bpo-28761: 结构体 PyMemberDef、PyGetSetDef、PyStructSequence_Field、PyStructSequence_Desc 和 wrapperbase 的字段 name 和 doc 现在是 const char * 类型,而不是 char *

  • bpo-28748: 私有变量 _Py_PackageContext 现在是 const char * 类型,而不是 char *

  • bpo-19569: 如果使用大多数已弃用的函数,现在会发出编译器警告。

  • bpo-28426: 已弃用未记录的函数 PyUnicode_AsEncodedObject()、PyUnicode_AsDecodedObject()、PyUnicode_AsDecodedUnicode() 和 PyUnicode_AsEncodedUnicode()。

Python 3.6.6 正式版

发布日期: 2018-06-27

在 3.6.6 版本中没有新的更改。

Python 3.6.6 rc1

发布日期: 2018-06-11

核心与内置函数

  • bpo-33786: 修复异步生成器以正确处理 athrow() 中的 GeneratorExit。

  • bpo-30654: 修复了即使之前设置了自定义处理程序,在解释器关闭时 SIGINT 处理程序重置为 SIG_DFL 的问题。由 Philipp Kerling 提供补丁。

  • bpo-33622: 修复了当垃圾收集器无法将带有 __del__ 方法或被其引用的对象添加到 gc.garbage 列表时的内存泄漏问题。现在可以在设置异常时调用 PyGC_Collect(),并保留异常。

  • bpo-31849: 修复了 pyhash.c 中的有符号/无符号比较警告。

  • bpo-33391: 修复了 set_symmetric_difference() 中的内存泄漏。

  • bpo-28055: 修复了 siphash24() 中的未对齐访问。由 Rolf Eike Beer 提供补丁。

  • bpo-33231: 修复了 normalizestring() 中潜在的内存泄漏问题。

  • bpo-29922: 改进了'async with'中当 __aenter__()__aexit__() 返回不可等待对象时的错误消息。

  • bpo-33199: 修复了在从键共享字典复制时,字典实现中的 ma_version_tag 未初始化的问题。

  • bpo-33041: 修复了当函数包含 async for 循环时的跳转问题。

  • bpo-32282: 修复 Windows 上 socketmodule 中 VersionHelpers.h 包含的不必要的 ifdef。

  • bpo-21983: 修复当类型参数是 ctypes 结构化数据类型时,ctypes.cast() 中的崩溃问题。由 Eryk Sun 和 Oren Milman 提供补丁。

  • bpo-30167: 如果设置了PYTHONSTARTUP,防止site.main()异常。由Steve Weber提供补丁。

  • bpo-33812: 对于tzinfo非None但d.tzinfo.utcoffset(d)返回None的Datetime实例d,现在astimezone()方法将其视为naive。

  • bpo-30805: 避免调试日志记录中的竞态条件

  • bpo-33767: 在 mmap.mmap 对象上执行时,连接(+)和重复(*)序列操作现在会引发 TypeError 而不是 SystemError。由 Zackery Spytz 提供补丁。

  • bpo-32684: 修复 gather 即使在 return_exceptions 的情况下也能传播自身的取消。

  • bpo-33674: 修复 asyncio.sslproto 中 SSLProtocol.connection_made() 的竞态条件:立即开始握手而不是使用 call_soon()。之前,data_received() 可能在握手开始前被调用,导致握手挂起或失败。

  • bpo-31647: 修复了在 _SelectorSocketTransport 已经关闭后调用 write_eof() 会引发 AttributeError 的错误。

  • bpo-33672: 修复 Task.__repr__ 与 Cython 的虚假协程一起使用时崩溃的问题。

  • bpo-33469: 修复了使用 run_in_executor 后关闭循环时引发的 RuntimeError。

  • bpo-11874: 当将用法分解为可包装部分时使用更好的正则表达式。避免来自自定义 metavar 字符串的错误断言错误。

  • bpo-30877: 修复了 JSON 解码器 Python 实现中的一个错误,该错误阻止了在完成解码后清除已解析字符串的缓存。基于 c-fos 的补丁。

  • bpo-33548: tempfile._candidate_tempdir_list 应考虑常见的 TEMP 位置

  • bpo-33542: 防止 uuid.get_node 在 Windows 上使用 DUID 而不是 MAC。由 Zvi Effron 提供补丁

  • bpo-26819: 修复 Windows proactor 事件循环中 ReadTransport.resume_reading 的竞争条件。

  • bpo-28556: typing模块中的小修复:向 NamedTuple.__new__ 添加注解,在``Generic.__new__``中传递 *args**kwds。原始PR由Paulius Šarka和Chad Dombrova提供。

  • bpo-20087: 更新了支持glibc 2.27地区设置的别名映射。

  • bpo-33422: 修复在pydoc上查找字节/字符串字面量时尾随引号被删除的问题。由Andrés Delfino提供补丁。

  • bpo-33197: 更新构造无效inspect.Parameters时的错误信息。由Donghee Na提供补丁。

  • bpo-33383: 修复了当使用单个参数调用 dbm.ndbm 数据库对象的get()方法时崩溃的问题。

  • bpo-33329: 修复了在新版 glibc 上的多进程回归问题。

  • bpo-991266: 修复了 http.cookies.SimpleCookieComment 属性的引用问题。

  • bpo-33131: 将捆绑的 pip 版本升级至 10.0.1。

  • bpo-33308: 修复了 parser 模块在将 ST 对象转换为元组或列表树时,当 line_info=Falsecol_info=True 时的崩溃问题。

  • bpo-33263: 修复了 _SelectorSocketTransport 中的文件描述符泄漏问题。由 Vlad Starostin 提供补丁。

  • bpo-33256: 修复了 cgitb.html() 生成的 html 中 <module> 调用的显示问题。补丁由 Stéphane Blondon 提供。

  • bpo-33203: random.Random.choice() 现在对于空序列会一致地引发 IndexError,即使是从没有 getrandbits() 实现的子类中调用也是如此。

  • bpo-33224: 为 PEP 479 更新 difflib.mdiff()。将生成器中未捕获的 StopIteration 转换为 return 语句。

  • bpo-33209: 在 pickle.Pickler.dump() 的 C 实现结束时结束帧。

  • bpo-32861: urllib.robotparser 的 __str__ 表示现在包括通配符条目以及 "Crawl-delay" 和 "Request-rate" 字段。由 Michael Lazar 提供补丁。

  • bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。

  • bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。

  • bpo-33021: 在fstat()调用期间释放GIL,避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。

  • bpo-27683: 修复 ipaddress 中的一个回归问题,当网络由包含整数掩码且仅剩1位地址的元组构造时,hosts() 的结果为空。

  • bpo-32844: 修复在subprocess中如果另一个低描述符被关闭时,将低描述符(0或1)错误重定向到stderr的问题。

  • bpo-31908: 修复了 trace 模块命令行工具的封面文件输出。之前仅在使用了 --missing 选项时才会发出封面文件。由Michael Selik提供补丁。

  • bpo-31457: 如果使用嵌套的日志适配器,内部 process() 方法不再被省略。

  • bpo-16865: 在 ctypes 中支持>=2GiB的数组。由Segev Finer提供补丁。

  • bpo-31238: pydoc: 私有 ServerThread 类的 stop() 方法现在会等待 DocServer.serve_until_quit() 完成,然后显式将其 docserver 属性设置为 None 以打破循环引用。

文档

  • bpo-33503: 修复损坏的 pypi 链接

  • bpo-33421: 为 typing.AsyncContextManager 添加缺失的文档。

  • bpo-33378: 为 https://docs.python.org/3/ 添加韩语语言切换器。

  • bpo-33276: 澄清模块上的 __path__ 属性不能是任意值。

  • bpo-33201: 现代化编写 C 扩展类型的文档。

  • bpo-33195: 在 c-api/arg 文档中弃用 Py_UNICODE 的使用。自 Python 3.3 起,Py_UNICODE 相关 API 已被弃用,但文档中遗漏了这一点。

  • bpo-33126: 文档化 PyBuffer_ToContiguous()。

  • bpo-27212: 修改 islice() 函数示例代码的文档说明,使其在起始索引前消耗初始值。

  • bpo-28247: 更新 zipapp 文档,描述如何制作独立应用程序。

  • bpo-18802: ipaddress 的文档更改。由 Jon Foster 和 Berker Peksag 提供补丁。

  • bpo-27428: 更新文档以澄清 WindowsRegistryFinder 实现了 MetaPathFinder。(补丁由 Himanshu Lakhara 提供)

  • bpo-8243: 添加关于 curses.addch 和 curses.addstr 在窗口或 pad 外部写入时的异常行为的注释。

  • bpo-31432: 澄清 ssl.SSLContext.verify_mode 的 CERT_NONE、CERT_OPTIONAL 和 CERT_REQUIRED 标志的含义。

测试

  • bpo-33655: 忽略在可能由于在 ZFS 上运行而导致的 BSD 平台上的 test_posix_fallocate 失败。

  • bpo-19417: 添加 test_bdb.py。

构建

  • bpo-5755: 将 -Wstrict-prototypes 选项从 OPT 移到 CFLAGS_NODIST。此选项在用C++编写扩展模块时会产生烦人的警告。

  • bpo-33614: 确保Windows上稳定ABI的模块定义文件被正确重新生成。

  • bpo-33522: 在https://python.visualstudio.com/cpython上启用Visual Studio Team Services的CI构建。

  • bpo-33012: 为 gcc 8 添加 -Wno-cast-function-type 以静默关于函数类型转换的警告,如在方法定义列表中转换为 PyCFunction 的警告。

  • bpo-33394: 当GNU make在命令行上传递宏时,为扩展模块启用详细构建。

Windows

  • bpo-33184: 将 Windows 安装程序更新到 OpenSSL 1.0.2o。

macOS

  • bpo-33184: 将 macOS 安装程序构建更新为使用 OpenSSL 1.0.2o。

IDLE

  • bpo-33656: 在Windows上,添加API调用表明tk针对DPI进行缩放。在Windows 8.1+或10上,Python二进制文件的DPI兼容性属性未更改,且显示器分辨率大于96 DPI时,这应使文本和线条更清晰。否则应无影响。

  • bpo-33768: 点击上下文行将该行移动到编辑器窗口的顶部。

  • bpo-33763: IDLE:使用只读文本小部件代替标签小部件作为代码上下文。

  • bpo-33664: 按行滚动IDLE编辑器文本。之前,鼠标滚轮和滚动条滑块以固定像素数移动文本,导致编辑器盒顶部出现部分行。此更改也适用于shell和grep输出窗口,但不适用于只读文本视图。

  • bpo-33679: 启用代码上下文的主题特定颜色配置。使用“高亮”选项卡查看内置主题的设置或为自定义主题添加设置。

  • bpo-33642: 为代码上下文显示最多maxlines非空行。如果没有当前上下文,则显示单个空行。

  • bpo-33628: IDLE:清理codecontext.py及其测试。

  • bpo-33564: IDLE的代码上下文现在能识别async作为一个块的开头。

  • bpo-29706: IDLE 现在在 3.6 版本中将 async 和 await 作为关键字着色。它们在 3.7 版本中成为完全的关键字。

  • bpo-21474: 将单词/标识符的定义从ASCII更新为Unicode。在文本和输入框中,这会影响通过双击选择、通过control-left/right左右移动以及通过control-BACKSPACE/DEL左右删除。

  • bpo-33204: IDLE:一致地着色无效的字符串前缀。'u'字符串前缀不能与'r'或'f'配对。从右边开始,尽可能多地着色有效的部分。修订并扩展颜色化器测试。

  • bpo-32831: 为codecontext添加文档字符串和测试。

工具/示例

  • bpo-33189: pygettext.py 现在只识别字面字符串作为文档字符串和可翻译字符串,并拒绝字节字面量和 f-string 表达式。

  • bpo-31920: 修复了 pygettext 脚本中将目录作为参数处理的问题。基于 Oleg Krasnikov 的补丁。

  • bpo-29673: 修复 pystackv 和 pystack gdbinit 宏。

  • bpo-32885: 为 Tools/scripts/pathfix.py 添加 -n 标志以禁用自动备份创建(带有 ~ 后缀的文件)。

  • bpo-31583: 修复 2to3 在使用 --add-suffix 选项但没有 --output-dir 选项时对当前目录中文件的相对路径的处理。

C API

  • bpo-32374: 文档说明多阶段初始化模块的 m_traverse 可以在 m_state=NULL 时调用,并添加健全性检查

Python 3.6.5 正式版

发布日期: 2018-03-28

测试

  • bpo-32872: 避免 regrtest 与命名空间包的兼容性问题。

构建

  • bpo-33163: 将pip升级到9.0.3,setuptools升级到v39.0.1。

Python 3.6.5 rc1

发布日期: 2018-03-13

安全性

  • bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。

  • bpo-32981: difflib 和 poplib 中的正则表达式容易受到灾难性回溯的影响。这些正则表达式构成了潜在的 DOS 向量(REDOS)。它们已被重构。这解决了 CVE 2018-1060CVE 2018-1061。由 Jamie Davis 提供补丁。

核心与内置函数

  • bpo-33026: 通过设置f_lineno修复了跳出“with”块的问题。

  • bpo-17288: 防止从'return'和'exception'跟踪事件跳转。

  • bpo-32889: 更新Valgrind抑制列表,以考虑`Py_ADDRESS_IN_RANG`重命名为`address_in_range`的情况。

  • bpo-32650: Pdb 和其他依赖于 bdb.py 的调试器现在能够正确地单步跳过(next 命令)原生协程。由 Pablo Galindo 提供补丁。

  • bpo-32685: 改进了当 Python 2 形式的 print 语句出现在复合语句的同一行或以分号而非换行符终止时的建议。由 Nitish Chandra 提供补丁。

  • bpo-32583: 修复在使用自定义解码错误处理程序时,内置 Unicode 解码器可能因越界写入错误而崩溃的问题。

  • bpo-26163: 改进了 frozenset() 的哈希函数,当面对包含许多相似值的数据集时,能生成更多不同的哈希值。

  • bpo-27169: __debug__ 常量现在在编译时被优化掉。这也修复了 bpo-22091

  • bpo-32329: 当通过 PYTHONHASHSEED=0 关闭哈希随机化时,sys.flags.hash_randomization 现在被正确设置为 0。

  • bpo-30416: 优化器现在受到保护,不会花费大量时间进行复杂计算和在常量折叠中创建大常量时消耗大量内存。

  • bpo-18533: repr() 在包含其自身的 values()items() 的字典上不再引发 RecursionError;OrderedDict 同理。相反,像其他递归结构一样使用 ...。由 Ben North 提供补丁。

  • bpo-32028: 在为将 Py2 打印语句转换为 Py3 内置打印函数调用生成建议时,现在正确地忽略了前导空白。由 Sanyam Khurana 提供补丁。

  • bpo-32137: 现在,深度嵌套字典的repr会引发RecursionError,而不是因为堆栈溢出而崩溃。

  • bpo-33064: lib2to3现在正确支持函数签名中 *args**kwargs 后的尾随逗号。

  • bpo-31804: 避免在标准流在退出时被关闭或为None时,multiprocessing.Process失败。

  • bpo-33037: 在SSL传输关闭后跳过发送/接收数据。

  • bpo-30353: 修复 64 位 Cygwin/MinGW 上结构体的 ctypes 按值传递问题。

  • bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。

  • bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。

  • bpo-32713: 修复tarfile.itn对超出界限的浮点值的处理。由Joffrey Fuhrer提供补丁。

  • bpo-30622: ssl模块现在能检测到LibreSSL中缺少的NPN支持。

  • bpo-32922: dbm.open()现在使用文件系统编码而不是默认编码对文件名进行编码。

  • bpo-32859: 在 os.dup2 中,不再每次调用时检查 dup3 系统调用是否存在。

  • bpo-21060: 将setup.py upload中令人困惑的消息从"No dist file created in earlier command"重写为更有帮助的"Must create and upload files in one command"。

  • bpo-32857: 在 tkinter 中,after_cancel(None) 现在会引发 ValueError 异常,而不是取消第一个预定的函数。由Cheryl Sabella提供补丁。

  • bpo-32852: 确保在运行trace时sys.argv保持为列表。

  • bpo-32841: 修复了 asyncio.Condition 问题,该问题在通知并取消条件锁后默默忽略了取消。由Bar Harel提供补丁。

  • bpo-31787: 修复了多个模块中 __init__() 方法的内存泄漏问题。(由Oren Milman贡献)

  • bpo-30157: 修复了在只有最后一个字段被引用时,csv.Sniffer.sniff() 中猜测引用和分隔符的问题。由Jake Davis提供补丁。

  • bpo-32394: socket: 在运行时移除旧版本 Windows 上的 TCP_FASTOPEN、TCP_KEEPCNT 标志。

  • bpo-32777: 修复了在POSIX系统的子进程中,当标记文件描述符为可继承时,subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。

  • bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在,在支持dl的平台上,共享扩展已明确链接到libdl。

  • bpo-32734: 修复了 asyncio.Lock() 的安全问题,该问题允许多次获取和锁定同一个锁,而锁并未释放。由Bar Harel提供补丁。

  • bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。

  • bpo-27931: 修复当用户名为空引号字符串时的电子邮件地址头解析错误。由Xiang Zhang提供补丁。

  • bpo-32304: distutils的上传命令不再损坏以CR字节结尾的tar文件,并且不再尝试在上传的任何文本字段中将CR转换为CRLF。

  • bpo-32502: 当遇到64位硬件地址时,uuid.uuid1不再抛出异常。

  • bpo-31848: 修复Aifc_read.initfp()中当SSND块未找到时的错误处理。补丁由Zackery Spytz提供。

  • bpo-32555: 在 FreeBSD 和 Solaris 上,os.strerror() 现在总是从当前区域设置编码解码字节字符串,而不是在某些情况下使用 ASCII/替代转义。

  • bpo-32521: nis 模块现在与新的 libnsl 和头文件位置兼容。

  • bpo-32473: 提高 ABCMeta._dump_registry() 输出的可读性

  • bpo-32521: glibc 已移除 Sun RPC。在 nis 模块中使用替代的 libtirpc 头文件和库。

  • bpo-32228: 确保 truncate() 在写入长度超过缓冲区大小后保留文件位置(由 tell() 报告)。

  • bpo-26133: 在解释器关闭时不要在asyncio UNIX事件循环中取消订阅信号。

  • bpo-32185: 在装有OpenSSL 1.0.2+或inet_pton的平台上,SSL模块不再在SNI TLS扩展中发送IP地址。

  • bpo-32323: urllib.parse.urlsplit() 现在不会将作用域IPv6地址的主机名中的区域ID(作用域)转换为小写。

  • bpo-32302: 修复了distutils的bdist_wininst对于CRT v142的支持:它二进制兼容于CRT v140。

  • bpo-32255: 现在,当写入CSV文件时,单个空字段总是会被引用。这允许区分空行和由单个空字段组成的行。由Licht Takeuchi提供补丁。

  • bpo-32277: 在不支持 chmod(..., follow_symlinks=False) 的平台上,引发``NotImplementedError``而不是 SystemError。由Anthony Sottile提供补丁。

  • bpo-32199: getnode() ip 获取器现在使用 'ip link' 而不是 'ip link list'。

  • bpo-27456: 确保在 Linux 上设置 TCP_NODELAY。测试由 Victor Stinner 完成。

  • bpo-31900: 现在 locale.localeconv() 函数会临时将 LC_CTYPE 区域设置改为``LC_NUMERIC``区域设置,以解码 decimal_pointthousands_sep 字节字符串,如果它们是非ASCII或长度超过1字节,并且 LC_NUMERIC 区域设置与 LC_CTYPE 区域设置不同。这一临时变更会影响其他线程。对于 str.format() 方法,当使用 n 类型格式化数字(int, float, float 及其子类)时(例如:'{:n}'.format(1234)),也进行了相同的更改。

  • bpo-31802: 即使`os`模块尚未导入,导入原生路径模块(posixpath, ntpath)现在也能正常工作。

文档

  • bpo-17232: 澄清 -O 和 -OO 的文档。由 Terry Reedy 提供补丁。

  • bpo-32800: 更新 xml 默认命名空间的 w3c 文档链接。

  • bpo-8722: 文档化当属性 get() 方法引发 AttributeError__getattr__() 的行为。

  • bpo-32614: 修改文档中的正则表达式示例,使用原始字符串以防止 DeprecationWarning,并在正则表达式 HOWTO 中添加文本以突出弃用。

  • bpo-31972: 改进 pathlib.PurePath 子类的文档字符串。

  • bpo-17799: 解释了sys.settrace和sys.setprofile及其C-API对应项的实际行为,关于在每个函数中接收哪些类型的事件。由Pablo Galindo Salgado提供补丁。

测试

  • bpo-32517: 修复由于 KqueueSelector 循环的传输未被关闭而在 macOS 10.12.2+ 上失败的 test_asyncio

  • bpo-32721: 修复test_hashlib,使其在未构建_md5模块时不会失败。

  • bpo-32252: 修复用于在测试崩溃时防止核心转储文件的faulthandler_suppress_crash_report()。getrlimit()在成功时返回零。

  • bpo-31518: Debian Unstable已为SSLv23_METHOD()禁用了TLS 1.0和1.1。将一些测试的TLS/SSL协议更改为PROTOCOL_TLS或PROTOCOL_TLSv1_2,以使它们在Debian上通过。

构建

  • bpo-32635: 修复当系统提供的是 libxcrypt 而不是 libcrypt 时 crypt 模块的段错误。

Windows

  • bpo-33016: 修复nt._getfinalpathname中潜在使用未初始化内存的问题。

  • bpo-32903: 修复如果当前目录设置为UNC路径时Windows上os.chdir()的内存泄漏。

  • bpo-31966: 修复WindowsConsoleIO.write()写入空数据的问题。

  • bpo-32409: 确保activate.bat可以处理Unicode内容。

  • bpo-32457: 改进启动Python时对非规范化可执行路径的处理。

  • bpo-32370: 在uuid模块中为ipconfig输出使用正确的编码。由Segev Finer提交补丁。

  • bpo-29248: 修复Windows上的 os.readlink(),它错误地将重新解析数据缓冲区的``PrintNameOffset`` 字段视为字符数而非字节数。由Craig Holmquist和SSE4提交补丁。

  • bpo-32588: 创建独立的_distutils_findvs模块。

macOS

  • bpo-32726: 提供一个额外的、更现代的macOS安装程序变体,仅支持64位模式的macOS 10.9+系统。将提供的第三方库升级到OpenSSL 1.0.2n、XZ 5.2.3和SQLite 3.22.0。10.9+安装程序现在链接并提供其自己的Tcl/Tk 8.6.8副本。

IDLE

  • bpo-32984: 在运行启动文件时设置 __file__。与Python一样,IDLE在展示第一个交互式输入提示之前,可选地在Shell窗口中运行一个启动文件。对于IDLE,-s``运行环境变量 :envvar:`IDLESTARTUP` :envvar:`PYTHONSTARTUP` 中命名的文件;-r file`` 运行 file。Python在运行文件之前将 __file__ 设置为启动文件名,并在第一个提示之前取消设置。IDLE现在在没有 -n 选项的情况下正常运行时也会这样做。

  • bpo-32940: 在pyparse中简化并重命名StringTranslatePseudoMapping。

  • bpo-32916: 在pyparse中将 str 更改为 code

  • bpo-32905: 移除pyparse模块中未使用的代码。

  • bpo-32874: 为pyparse添加测试。

  • bpo-32837: 对于IDLE的系统和位置无关文件,使用系统和位置相关的默认编码对于open()来说是一个坏主意。

  • bpo-32826: 在IDLE的test_help_about的open()中添加"encoding=utf-8"。GUI测试test_file_buttons()仅查看初始的ascii-only行,但在open()默认为'ascii'的系统上失败,因为readline()内部读取和解码足够远,以在CREDITS.txt中遇到非ascii字符。

  • bpo-32765: 更新configdialog General标签的文档字符串,将新部件添加到部件列表中。

工具/示例

  • bpo-24960: 2to3和lib2to3现在可以使用pkgutil.get_data()读取pickled语法文件,而不是探测文件系统。这使得2to3和lib2to3在从zipfile运行时也能工作。

  • bpo-32222: 修复 pygettext 不提取带有类型注释参数的函数的文档字符串的问题。由 Toby Harradine 提供的补丁。

C API

  • bpo-29084: OrderedDict的未记录C API已从有限C API中排除。它是被错误添加的,实际上在有限C API中从未工作过。

Python 3.6.4 正式版

发布日期: 2017-12-18

从 3.6.4 rc1 到 3.6.4 正式版中没有新的代码更改。

Python 3.6.4 rc1

发布日期: 2017-12-05

核心与内置函数

  • bpo-32176: 现在,代码对象构造函数会根据freevars和cellvars正确设置co_flags.CO_NOFREE,而不是需要调用者正确设置。这确保了当额外的cell引用被注入到修改后的代码对象和函数中时,它会自动清除。

  • bpo-31949: 修复了打印回溯(PyTraceBack_Print())中的若干问题。现在将sys.tracebacklimit设置为0或更小会抑制回溯的打印。将sys.tracebacklimit设置为None现在会导致使用默认限制。将sys.tracebacklimit设置为大于LONG_MAX的整数现在意味着使用LONG_MAX限制而不是默认限制。修复了Windows上超过 2**31 个回溯项时的整数溢出问题。修复了输出错误处理。

  • bpo-30696: 修复了在没有内存时交互式解释器无限循环的问题。

  • bpo-20047: Bytearray方法partition()和rpartition()现在仅接受类似字节的对象作为分隔符,如文档所述。特别是,现在当传递整数作为分隔符时,它们会引发TypeError而不是返回一个虚假的结果。

  • bpo-31852: 修复由async软关键字和续行组合引起的段错误。

  • bpo-21720: 当 __import__()fromlist 参数或模块的 __all__ 属性包含bytes实例时,不再发出BytesWarning。

  • bpo-31825: 修复了在解码转义的非ascii字节时'unicode-escape'编解码器和codecs.escape_decode()中的OverflowError。

  • bpo-28603: 在解释器退出时打印异常的完整上下文/原因链,即使链中的异常不可哈希或与后面的异常相等。由Zane Bitter提供补丁。

  • bpo-31786: 修复 select 模块中负超时时间在 -1.0 和 0.0 之间的正确舍入问题。现在函数会按预期阻塞等待事件。此前,调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。

  • bpo-31642: 通过将sys.modules["package.module"]设置为None,恢复了阻塞的"from package import module"。

  • bpo-31626: 修复了调试内存分配器中的一个错误。在缩小内存块后存在对已释放内存的写入。

  • bpo-31619: 修复了将带有大量下划线的字符串转换为二进制基数整数时的ValueError。

  • bpo-31592: 修复了在 unicodedata.normalize() 出错时Python解析器中的断言失败。由Oren Milman提供补丁。

  • bpo-31588: 当类创建由于元类的 __prepare__() 方法出错而失败时,抛出一个带有有用错误信息的 TypeError。由Oren Milman提供补丁。

  • bpo-31566: 修复了在 __name__ 全局变量出错时 _warnings.warn() 中的断言失败。由Oren Milman提供补丁。

  • bpo-31505: 修复了在 _json.make_encoder()``接收到错误的 ``encoder() 参数时 json 中的断言失败。由Oren Milman提供补丁。

  • bpo-31492: 修复了在从具有错误 __name__ 属性的模块导入失败时,以及在访问此类模块的属性失败时的断言失败。由Oren Milman提供补丁。

  • bpo-31490: 修复 ctypes 类定义中的断言失败,当类有一个属性其名称在 _anonymous_ 中指定但不在 _fields_ 中时。由 Oren Milman 提供补丁。

  • bpo-31478: 修复 _random.Random.seed() 中当参数有坏的 __abs__() 方法时的断言失败。由 Oren Milman 提供补丁。

  • bpo-31315: 修复 imp.create_dynamic() 中当 spec.name 不是字符串时的断言失败。由 Oren Milman 提供补丁。

  • bpo-31311: 修复 ctypes._CData__setstate__() 方法在 __dict__ 有问题时的崩溃。由 Oren Milman 提供补丁。

  • bpo-31293: 修复 timedelta 对象与具有坏的 as_integer_ratio() 方法的浮点数进行真除法和乘法时的崩溃。由 Oren Milman 提供补丁。

  • bpo-31285: 修复 warnings.warn_explicit 中当接收的加载器的 get_source() 的返回值有坏的 splitlines() 方法时的断言失败。由 Oren Milman 提供补丁。

  • bpo-30817: PyErr_PrintEx() 现在会清除可能由 _PySys_SetObjectId() 引发的忽略异常,例如在没有内存时。

  • bpo-28556: 对 typing 模块的两项小修复:允许浅复制泛型类的实例,改进 __init_subclass__ 与泛型的交互。原始 PR 由 Ivan Levkivskyi 提供。

  • bpo-27240: 新电子邮件策略的头部折叠算法已被重写,这也修复了 bpo-30788bpo-31831bpo-32182。特别是,现在可以正确进行 RFC2231 折叠。

  • bpo-32186: io.FileIO.readall() 和 io.FileIO.read() 现在在获取文件大小时释放 GIL。修复了所有线程因无法访问的 NFS 服务器而挂起的问题。由 Nir Soffer 提供补丁。

  • bpo-12239: 当属性的值为 VT_EMPTY 时,使 msilib.SummaryInformation.GetProperty() 返回 None。初始由 Mark Mc Mahon 提供补丁。

  • bpo-31325: 修复了 RobotFileParser.parse() 方法中 collections.namedtuple() 的错误用法。初始由 Robin Wellner 提供补丁。

  • bpo-12382: msilib.OpenDatabase() 现在在无法打开或创建 MSI 文件时引发更好的异常消息。初始由 William Tisäter 提供补丁。

  • bpo-32110: codecs.StreamReader.read(n) 现在对于非负的 n,返回不超过 n 个字符/字节。这使得它与其他类似文件对象的 read() 方法兼容。

  • bpo-32072: 修复了二进制 plists 的问题:修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。

  • bpo-32034: 使asyncio.IncompleteReadError和LimitOverrunError可pickle。

  • bpo-32015: 修复了在等待异步读写套接字期间重新连接套接字时asyncio的循环问题。

  • bpo-32011: 恢复了对加载带有TYPE_INT64代码的marshal文件的支持。这些文件可以在Python 2.7中生成。

  • bpo-31970: 降低asyncio调试模式的性能开销。

  • bpo-9678: 修复了uuid模块中确定MAC地址的问题:在NetBSD和OpenBSD上使用ifconfig。在Linux、FreeBSD、NetBSD和OpenBSD上使用arp。基于Takayuki Shimizukawa的补丁。

  • bpo-30057: 修复了signal.signal()中潜在的信号丢失问题。

  • bpo-31933: 修复Blake2参数leaf_size和node_offset在大端平台上的问题。由Jack O'Connor提供补丁。

  • bpo-31927: 修复了socket模块在NetBSD 8上的编译问题。修复了在NetBSD和DragonFly BSD上解析AF_BLUETOOTH地址时的断言失败或读取任意数据的问题。

  • bpo-27666: 修复了当类型chtype或mmask_t的大小小于C long的大小时,curses.box()和curses.ungetmouse()中的堆栈损坏问题。curses.box()现在接受字符作为参数。基于Steve Fink的补丁。

  • bpo-31897: plistlib现在在读取二进制plist时会捕获更多错误,并抛出InvalidFileException而不是意外的异常。

  • bpo-25720: 修复了检查curses WINDOW填充状态的方法。由Masayuki Yamamoto提供补丁。

  • bpo-31893: 修复了OpenBSD和NetBSD上kqueue_event结构的布局。修复了kqueue_event对象的比较。

  • bpo-31891: 修复了在NetBSD上构建curses模块的问题。

  • bpo-28416: 具有 persistent_id() 方法的 pickle.Pickler 子类和具有 persistent_load() 方法的 pickle.Unpickler 子类的实例不再创建引用循环。

  • bpo-28326: 修复当 stdout 和/或 stderr 关闭或为 None 时的 multiprocessing.Process。

  • bpo-31457: 如果使用嵌套的日志适配器,内部 process() 方法不再被省略。

  • bpo-31457: LoggerAdapter 对象的 manager 属性现在可以正确设置了。

  • bpo-31806: 修复 time.sleep(), threading.Lock.acquire() 和 socket.socket.settimeout() 中的超时舍入,以正确舍入 -1.0 和 0.0 之间的负超时。这些函数现在会按预期阻塞等待事件。之前,调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。

  • bpo-28603: traceback: 修复了在打印异常回溯时,当当前异常或其上下文/原因链中的异常不可哈希时发生的 TypeError。由 Zane Bitter 提供补丁。

  • bpo-30058: 修复 select.kqueue.control() 中的缓冲区溢出。

  • bpo-31770: 防止多次调用 sqlite3.Cursor 对象的 __init__() 方法时崩溃。由 Oren Milman 提供补丁。

  • bpo-31672: string.Template 中的 idpattern 匹配了一些非ASCII字符。现在它使用 -i 正则表达式本地标志来避免非ASCII字符。

  • bpo-31764: 防止在 sqlite3.Cursor.close() 中当 Cursor 对象未初始化时发生崩溃。补丁由 Oren Milman 提供。

  • bpo-31752: 修复在调用自定义整数的 timedelta 构造函数时可能发生的崩溃。

  • bpo-31701: 在Windows上,faulthandler.enable()现在会忽略MSC和COM异常。

  • bpo-31728: 防止由于 Element.textElement.tail 的不安全清理导致的``_elementtree``崩溃。由Oren Milman提供补丁。

  • bpo-31620: 空的 asyncio.Queue 现在在队列获取轮询超时时不会泄漏内存。

  • bpo-31632: 修复 asyncio 模块中 _SSLProtocolTransport 类的 set_protocol() 方法。此方法之前修改了错误的协议引用。

  • bpo-31675: 修复了Tkinter的splitlist()和split()方法在传递大于2 GiB的字符串时的内存泄漏问题。

  • bpo-31673: 修复了Tkinter方法adderrorinfo()名称中的拼写错误。

  • bpo-30806: 修复了netrc对象的字符串表示。

  • bpo-15037: 为 ncurses 5.7 及更早版本的 curses 中的 getkey() 添加了一个变通方案。

  • bpo-25351: 避免venv激活时因未定义变量而失败。

  • bpo-25532: inspect.unwrap()现在只会尝试解包对象sys.getrecursionlimit()次,以防止在每次属性访问时创建新对象的对象。

  • bpo-30347: 修复了在并发迭代itertools.groupby()迭代器时的崩溃问题。

  • bpo-31516: threading.current_thread() 在关闭时不应返回一个虚拟线程。

  • bpo-31351: 如果 pip 引导失败,python -m ensurepip 现在会以非零退出代码退出。

  • bpo-31482: random.seed() 现在在version=1时可以与bytes一起工作。

  • bpo-31334: 修复 select 模块中的 poll.poll([timeout]),在所有操作系统上对于任意的负超时值,现在可以仅接受非负整数或 -1。由 Riccardo Coccioli 提供补丁。

  • bpo-31310: 如果崩溃,multiprocessing 的信号量跟踪器应该重新启动。

  • bpo-31308: 使 multiprocessing 的 forkserver 进程免受 Ctrl-C 和其他用户中断的影响。如果崩溃,必要时重启它。

文档

  • bpo-32105: 添加了 asyncio.BaseEventLoop.connect_accepted_socket 的 versionadded 标记。

  • bpo-31537: 修复了 readline 文档示例代码中 get_history_length 的不正确用法。补丁由 Brad Smith 提供。

  • bpo-30085: 为了清晰起见,优先使用没有双下划线的操作符函数。带有下划线的仅为了向后兼容而保留。

测试

  • bpo-31380: 在 macOS 上跳过 test_httpservers 的 test_undecodable_file 测试:在 APFS 上失败。

  • bpo-31705: 在早于4.5版本的Linux内核上跳过test_socket.test_sha256()测试。该测试在内核3.10(ppc64le架构)上会因ENOKEY而失败。此问题已在4.5内核中修复。

  • bpo-31174: 修复test_tools.test_unparse:DirectoryTestCase现在存储样本名称以始终测试相同的文件。这避免了在查找引用泄漏时产生误报。

  • bpo-30695: 向 _testcapi 模块添加了 set_nomemory(start, stop)remove_mem_hooks() 函数。

构建

  • bpo-32059: setup.py 中的 detect_modules() 现在在交叉编译时也会搜索sysroot路径。

  • bpo-31957: 修复为Windows构建时的Windows SDK版本检测。

  • bpo-31609: 修复PCbuild/clean.bat中的引号问题。

  • bpo-31934: 当构建源树不干净时中止构建。

  • bpo-31926: 修复了当.c文件中有多个同名函数和/或方法时,Argument Clinic有时会导致编译错误的问题。

  • bpo-28791: 更新Windows构建以使用SQLite 3.21.0。

  • bpo-28791: 更新OS X安装程序以使用SQLite 3.21.0。

  • bpo-22140: 防止在 python-config.sh 中双重替换前缀。

  • bpo-31536: 如果没有任何更改,避免在 make regen-all 后进行全面重建。

Windows

  • bpo-1102: 当 View.Fetch() 返回 ERROR_NO_MORE_ITEMS 时返回 None,而不是引发``MSIError``。初始由Anthony Tuininga提供补丁。

  • bpo-31944: 修复应用和功能对话框中的修改按钮。

macOS

  • bpo-31392: 更新macOS安装程序以使用OpenSSL 1.0.2m。

IDLE

  • bpo-32207: 在IDLE中改进tk事件异常回溯。当tk事件处理由IDLE的运行循环驱动时,不再向tk事件异常回溯中添加令人困惑和分散注意力的queue.EMPTY回溯上下文。现在,回溯与事件处理由用户代码驱动时相同。基于Serhiy Storchaka的建议的补丁。

  • bpo-32164: 删除未使用的文件idlelib/tabbedpages.py。在configdialog中使用TabbedPageSet已被ttk.Notebook替代。

  • bpo-32100: IDLE: 修复pathbrowser中的旧错误和新错误;改进测试。补丁主要由Cheryl Sabella提供。

  • bpo-31858: IDLE -- 将shell提示符操作限制在shell中。编辑器和输出窗口仅看到一个空的最后提示行。这简化了代码并修复了插入换行时的一个小错误。如果存在Sys.ps1,则在Shell启动时读取,但不设置或更改。

  • bpo-31860: IDLE配置对话框中的字体样本现在可编辑。更改在IDLE保持打开时持续存在。

  • bpo-31836: 现在如果在设置ps1的test_idle之后运行,Test_code_module将通过。代码模块如果存在则使用sys.ps1,如果不存在则设置为'>>> '。Test_code_module现在正确测试了这两种行为。ps2同理。

  • bpo-28603: 修复了一个TypeError,该错误在打印包含不可哈希异常的追溯时导致shell重启。补丁由Zane Bitter提供。

  • bpo-13802: 在IDLE的字体设置样本中使用非拉丁字符。即使选择定义Unicode基本多语言平面有限子集的字体,tcl/tk也会使用定义字符的其他字体。扩展的示例为非拉丁字符用户提供了更好的了解他们在IDLE的shell和编辑器中可能会看到的内容。为了给扩展的样本腾出空间,字体标签上的框架被重新排列。字体/标签帮助解释了关于添加的一些内容。

  • bpo-31460: 简化IDLE模块浏览器的API。传递一个小部件而不是带有根部件的flist,开启了创建一个仅是窗口一部分的浏览器框架的可能性。传递一个完整的文件名而不是假定来自.py文件的片段,开启了浏览不以.py结尾的python文件的可能性。

  • bpo-31649: IDLE - 使_htest, _utest参数仅关键字。

  • bpo-31559: 在idle_test.test_browser中移除测试顺序依赖。

  • bpo-31459: 将IDLE的模块浏览器从类浏览器重命名为模块浏览器。原始的模块级类和方法浏览器多年前就变成了一个模块浏览器,增加了模块级函数。昨天又增加了嵌套类和函数。为了向后兼容,设置对话框的键标签上出现的虚拟事件<<open-class-browser>>没有被更改。补丁由Cheryl Sabella提供。

  • bpo-31500: 现在默认字体在高DPI显示器上会进行缩放。

  • bpo-1612262: IDLE模块浏览器现在显示嵌套类和函数。代码和测试的原始补丁分别由Guilherme Polo和Cheryl Sabella提供。

工具/示例

  • bpo-30722: 使redemo能够在Python 3.6及更新版本中工作。同时,移除 LOCALE 选项,因为它不适用于Python 3中的字符串模式。由Christoph Sarnowski提供补丁。

C API

  • bpo-20891: 修复PyGILState_Ensure()。当PyGILState_Ensure()在非Python线程中且在PyEval_InitThreads()之前被调用时,仅在调用PyThreadState_New()之后调用PyEval_InitThreads(),以修复崩溃问题。

  • bpo-31532: 修复由于在getpath.c中Py_GetPath()和Py_SetPath()之间的分配器混合导致的内存损坏。

  • bpo-30697: 移除了 PyExc_RecursionErrorInst 单例,PyErr_NormalizeException() 也不再使用它。这个单例是持久的,其成员从未被清除可能会导致解释器在最终化期间出现段错误。另见 bpo-22898

Python 3.6.3 正式版

发布日期: 2017-10-03

  • bpo-31641: 重新允许在 concurrent.futures.as_completed() 中使用任意可迭代对象。修复3.6.3rc1中的回归。

构建

  • bpo-31662: 修复Windows uploadrelease.bat 脚本中的拼写错误。修复 Doc/make.bat 中的Windows文档构建问题。

  • bpo-31423: 修复使用新版本Sphinx构建PDF文档的问题。

Python 3.6.3 rc1

发布日期: 2017-09-18

安全性

  • bpo-29781: 当尚未通过 BIO 执行握手时,SSLObject.version() 现在正确返回 None。

  • bpo-30947: 将内嵌的 libexpat 从版本 2.2.1 升级到 2.2.3 以获取安全修复。

核心与内置函数

  • bpo-31471: 修复 Windows 上 subprocess.Popen() 中的断言失败,当 env 参数有一个坏的 keys() 方法时。由 Oren Milman 提供补丁。

  • bpo-31418: 修复 PyErr_WriteUnraisable() 中的断言失败,当异常有一个坏的 __module__ 属性时。由 Oren Milman 提供补丁。

  • bpo-31416: 修复当warnings.filters或warnings.defaultaction错误时的断言失败。由Oren Milman提供补丁。

  • bpo-31411: 当warnings.onceregistry不是字典时,抛出TypeError而不是SystemError。由Oren Milman提供补丁。

  • bpo-31373: 修复了几个由于浮点降级可能导致的未定义行为实例。

  • bpo-30465: f-字符串中的位置信息(lineno``和 ``col_offset)现在(大部分)正确。这修复了像flake8这样的工具在错误行(通常是文件的第一行)显示警告的问题。

  • bpo-31343: 包含sys/sysmacros.h以获取major()、minor()和makedev()。GNU C库计划从sys/types.h中移除这些函数。

  • bpo-31291: 修复了Windows上 zipimport.zipimporter.get_data 中的一个断言失败,当``pathname.replace('/','\')``的返回值不是字符串时。由Oren Milman提供补丁。

  • bpo-31271: 修复当编码器未返回字节对象时,io.TextIOWrapper``的 ``write() 方法中的断言失败。由Oren Milman提供补丁。

  • bpo-31243: 修复当解码器状态无效时,``io.TextIOWrapper``的某些方法中的崩溃问题。由Oren Milman提供补丁。

  • bpo-30721: print 现在显示使用Python 2重定向语法的正确用法提示。由Sanyam Khurana提供补丁。

  • bpo-31070: 修复importlib中_get_module_lock()的竞态条件。

  • bpo-31095: 修复由未调用 PyObject_GC_UnTrack()tp_dealloc 引起的GC期间潜在崩溃问题。

  • bpo-31071: 当传递其他参数时,避免在使用*解包调用中掩盖原始TypeError。

  • bpo-30978: str.format_map()现在传递键查找异常。之前任何异常都被替换为KeyError异常。

  • bpo-30808: 对并发敏感的信号状态使用_Py_atomic API。

  • bpo-30876: 从未加载的包中进行相对导入现在会重新导入包,而不是因SystemError失败。从非包中进行相对导入现在会因ImportError而非SystemError失败。

  • bpo-30703: 改进信号传递。避免在信号处理程序中使用Py_AddPendingCall,以避免调用信号不安全函数。这里添加的测试在没有补丁的其他部分的情况下,在Linux和OS X上失败。这意味着我们的信号传递逻辑存在缺陷(某些信号可能会丢失)。

  • bpo-30765: 当PyThread_acquire_lock()被要求不阻塞时,避免在pthread_mutex_lock()中阻塞。

  • bpo-31161: 确保'Missing parentheses'语法错误消息仅应用于SyntaxError,而不是子类。补丁由Martijn Pieters提供。

  • bpo-30814: 修复从包中导入子模块时的竞态条件。

  • bpo-30597: print 现在在作为 Python 2 语句使用时,自定义错误消息中显示预期的输入。由 Sanyam Khurana 提供补丁。

  • bpo-31499: xml.etree:修复当解析器是引用循环的一部分时的崩溃问题。

  • bpo-28556: typing.get_type_hints现在默认(当调用者未指定 globalns 时)为类和模块找到正确的globalns。

  • bpo-28556: 对 typing 模块的速度改进。原始PR由Ivan Levkivskyi和Mitar提供。

  • bpo-31544: ElementTree的C加速器模块忽略了在XMLParser()中查找TreeBuilder目标方法时引发的异常。

  • bpo-31234: socket.create_connection()现在手动修复了一个引用循环:成功时清除存储最后一个异常的变量。

  • bpo-31457: LoggerAdapter对象现在可以嵌套。

  • bpo-31400: 改进了 SSL 错误处理,避免丢失错误编号。

  • bpo-28958: ssl.SSLContext() 现在在无法实例化上下文时使用 OpenSSL 错误信息。

  • bpo-27340: SSLSocket.sendall() 现在使用 memoryview 来创建数据切片。这修复了对所有类似于字节对象的支持。同时,这也更高效,避免了昂贵的复制。

  • bpo-31178: 修复了 subprocess 模块中在罕见错误路径下的字符串连接错误

  • bpo-31350: 对 asyncio._get_running_loop() 进行微优化,使其速度提升高达 10%。

  • bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题(libexpat bug 115):https://github.com/libexpat/libexpat/issues/115

  • bpo-29136: 添加 TLS 1.3 密码套件和 OP_NO_TLSv1_3。

  • bpo-29212: 修复 concurrent.futures.thread.ThreadPoolExecutor 线程在没有提供 thread_name_prefix 时默认使用非 repr() 基础的线程名。它们现在会自称为 "ThreadPoolExecutor-y_n"。

  • bpo-9146: 修复 _hashopenssl 在链接的 OpenSSL 库中不可用标准哈希函数(如 md5)时的段错误。如在某些特殊的 FIPS-140 构建环境中。

  • bpo-27144: concurrent.futures 中的 map()as_completed() 迭代器现在避免保留对生成对象的引用。

  • bpo-10746: 修复 ctypes 为整数类型生成错误的 PEP 3118 类型代码的问题。

  • bpo-22536: 在 POSIX 系统上由于找不到可执行文件或 cwd 而引发 FileNotFoundError 时,子进程模块现在会设置文件名。

  • bpo-31249: concurrent.futures: ThreadPoolExecutor 使用的 WorkItem.run() 现在打破了异常对象和 WorkItem 对象之间的循环引用。

  • bpo-31247: xmlrpc.server 现在在处理异常的代码中使用 sys.exc_info() 时显式地打破循环引用。

  • bpo-30102: ssl 和 hashlib 模块现在在 OpenSSL < 1.1.0 时调用 OPENSSL_add_all_algorithms_noconf()。该函数检测 CPU 特性并在一些 CPU 架构(如 POWER8)上启用优化。补丁基于 Gustavo Serra Scalet 的研究。

  • bpo-31185: 修复了 asyncio 加速模块中的杂项错误。

  • bpo-31135: ttk:修复LabeledScale和OptionMenu类的destroy()方法。即使使用的属性不存在,也调用父类的destroy()方法。LabeledScale.destroy()方法现在还显式清除了label和scale属性,以帮助垃圾回收器销毁所有小部件。

  • bpo-31107: 修复 copyreg._slotnames() 对于名称以下划线开头的类的损坏属性计算。由Shane Harvey提供补丁。

  • bpo-31061: 修复了在使用asyncio和线程时的崩溃问题。

  • bpo-30502: 修复了ssl中长oids的处理。基于Christian Heimes的补丁。

  • bpo-30119: ftplib.FTP.putline() 现在会在命令包含 CR 或 LF 时抛出 ValueError。由 Donghee Na 提供补丁。

  • bpo-30595: multiprocessing.Queue.get() 现在在非阻塞模式下轮询其读取器,如果成功获取锁但获取时间超过了超时时间。

  • bpo-29403: 修复``unittest.mock``模块的autospec功能,使其不再对绑定到方法的内置函数报错。由Aaron Gallagher提供补丁。

  • bpo-30961: 修复了tracemalloc中借用引用的递减问题。

  • bpo-25684: 修改 ttk.OptionMenu 单选按钮,使其在不同 OptionMenu 实例间保持唯一。

  • bpo-30886: 修复 multiprocessing.Queue.join_thread():现在即使线程是由创建队列的同一进程启动的,它也会等待线程完成。

  • bpo-29854: 修复使用 readline 的 history-size 选项时 readline 中的段错误。由 Nir Soffer 提供补丁。

  • bpo-30319: socket.close() 现在忽略 ECONNRESET 错误。

  • bpo-30828: 修复 asyncio.CFuture.remove_done_callback() 中的越界写入问题。

  • bpo-30807: 当传递一个极小的值时,signal.setitimer() 可能会禁用计时器。极小的值(如 1e-6)是 setitimer() 有效的非零值,它被指定为采取微秒级间隔。然而,在某些平台上,我们的转换例程可能将 1e-6 转换为零间隔,从而禁用计时器而不是(重新)调度它。

  • bpo-30441: 修复在迭代 os.environ 时修改它导致的错误。

  • bpo-30532: 修复电子邮件头值解析器在某些情况下丢弃折叠空白的问题。

  • bpo-30879: os.listdir() 和 os.scandir() 现在在使用字节类参数调用时会发出字节名称。

  • bpo-30746: 禁止在 os.putenv()os.spawn*() 的环境变量名中使用 '=' 字符。

  • bpo-29755: 修复了 gettext 模块中的 lgettext() 系列函数。它们现在总是返回字节。

文档

  • bpo-31294: 修复ZeroMQSocketListener和ZeroMQSocketHandler示例中的不完整代码片段,并将它们适配到Python 3。

  • bpo-21649: 在SSL文档中添加RFC 7525和Mozilla服务器端TLS链接。

  • bpo-30803: 澄清关于真值测试的文档。原始由Peter Thomassen提供补丁。

测试

  • bpo-31320: 在 test_ssl 中静默回溯。

  • bpo-25674: 移除 sha256.tbs-internet.com 的 ssl 测试。

  • bpo-30715: 处理 OpenSSL 1.1.0f 的 ALPN 回调变更。最新版本的行为类似于 OpenSSL 1.0.2,不再中止握手。

  • bpo-30822: regrtest: 从 regrtest --all 中排除 tzdata。当使用 --use=all / -u all 运行测试套件时,排除 tzdata,因为它会使 test_datetime 变得太慢(在某些构建机器人上需要 15-20 分钟),从而导致某些构建机器人超时。同时修复 regrtest 命令行解析器,允许传递 -u extralargefile 来运行 test_zipfile64。

构建

  • bpo-30854: 修复编译--without-threads时的编译错误。由Masayuki Yamamoto提供补丁。

Windows

  • bpo-30389: 在Windows上的distutils中添加对Visual Studio 2017的检测。

  • bpo-31340: 更改为使用MSVC v141(包含在Visual Studio 2017中)构建。

  • bpo-30581: os.cpu_count()现在在Windows上当逻辑处理器数量大于64时返回正确的处理器数量。

  • bpo-30731: 向python.manifest添加缺失的xmlns,以使其匹配模式。

IDLE

  • bpo-31493: IDLE 代码上下文——修复代码更新和字体更新计时器。取消计时器可以防止 test_idle 完成时出现警告消息。

  • bpo-31488: IDLE - 更新前扩展类中的非键选项。应用配置对话框更改时,为每个特性类调用 .reload。更改 ParenMatch,使更新的选项影响附加到现有编辑器窗口的现有实例。

  • bpo-31477: IDLE - 改进文档中的 rstrip 条目。剥离尾随空白会剥离比空格更多的内容。多行字符串文字不被跳过。

  • bpo-31480: IDLE - 使测试在默认禁用 zzdummy 扩展的情况下通过。

  • bpo-31421: 文档说明IDLE如何运行tkinter程序。IDLE在后台调用tcl/tk更新,以使与tkinter应用程序的实时交互和实验更加容易。

  • bpo-31414: IDLE -- 通过首先删除来修复tk输入框测试。向整数输入框中添加内容与删除并插入不同,因为int('')会失败。

  • bpo-31051: 将IDLE的configdialog GenPage重新排列为窗口、编辑器和帮助部分。

  • bpo-30617: IDLE - 为outwin子类添加文档字符串和测试,这是editor的子类。将一些数据和函数从类移到模块级别。由Cheryl Sabella提供补丁。

  • bpo-31287: IDLE - 在test_configdialog中不要修改tkinter.message。

  • bpo-27099: 将IDLE的内置'extensions'转换为常规功能。大约10个IDLE功能作为所谓的可选扩展实现。它们的不同行为可能会让用户感到困惑或更糟,对维护也不利。因此进行了转换。对用户的主要区别是,现在对内置功能的用户可配置键绑定的处理是统一的。现在,编辑键集中的绑定只会影响其在键集中的值。所有绑定都在config-extensions.def中系统特定的默认键集中一起定义。所有自定义键集作为一个整体保存在config-extension.cfg中。所有更改在点击Apply或Ok后立即生效。受影响的事件有'<<force-open-completions>>', '<<expand-word>>', '<<force-open-calltip>>', '<<flash-paren>>', '<<format-paragraph>>', '<<run-module>>', '<<check-module>>', 和'<<zoom-height>>'。任何在3.6.3之前进行的(全局)自定义将不会影响到3.6.3之后的键集特定自定义,反之亦然。初始由Charles Wohlganger提供补丁。

  • bpo-31206: IDLE: 从ConfigDialog中提取HighPage(Frame)类。由Cheryl Sabella提供补丁。

  • bpo-31001: 为configdialog高亮标签添加测试。由Cheryl Sabella提供补丁。

  • bpo-31205: IDLE:从ConfigDialog中提取KeysPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。

  • bpo-31130: IDLE -- 修复test_configdialog中的内存泄漏。初始由Victor Stinner提供补丁。

  • bpo-31002: 为configdialog的keys标签页添加测试。由Cheryl Sabella提供补丁。

  • bpo-19903: IDLE:使用 inspect.signature 代替 inspect.getfullargspec 生成调用提示。这将改进使用Argument Clinic转换的内置函数的调用提示。由Louie Lu提供补丁。

  • bpo-31083: IDLE - 在configdialog中添加TabPage类的概要。更新现有类以匹配概要。初始补丁由Cheryl Sabella提供。

  • bpo-31050: 从ConfigDialog中提取GenPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。

  • bpo-31004: IDLE - 从ConfigDialog中提取FontPage(Frame)类。经过轻微修改的测试仍然通过。修复通用测试。补丁主要由Cheryl Sabella提供。

  • bpo-30781: IDLE - 在ConfigDialog中使用ttk部件。由Terry Jan Reedy和Cheryl Sabella提供补丁。

  • bpo-31060: IDLE - 完成ConfigDialog中方法的重新排列。将与每个标签页和按钮相关的方法分组有助于编写测试和改进标签页,并将使这些组能够分割成类。

  • bpo-30853: IDLE -- 从ConfigDialog中提取VarTrace类。实例跟踪器管理由tk变量和回调函数组成的对。当跟踪开启时,设置变量会调用函数。新类的测试覆盖率为100%。

  • bpo-31003: IDLE:为通用标签页添加更多测试。

  • bpo-30993: IDLE - 改进配置对话框字体页面及测试。在配置对话框中:在create_font_tab文档字符串中记录因果路径。简化一些属性名称。将set_samples调用移至var_changed_font(来自Cheryl Sabella的想法)。将相关函数移动到创建小部件函数之后的位置。在test_configdialog中:修复test_font_set使其不依赖于顺序。修复重命名的test_indent_scale以测试小部件。调整测试以适应set_samples调用的移动。为加载函数添加测试。将所有字体测试放在一个类中,将标签缩进测试放在另一个类中。除了两行代码外,这些测试完全覆盖了相关函数。

  • bpo-30981: IDLE -- 为配置对话框字体页面添加更多测试。

  • bpo-28523: IDLE:在配置对话框中将'colour'替换为'color'。

  • bpo-30917: 为idlelib.config.IdleConf添加测试。将覆盖率从46%提高到96%。由Louie Lu提供补丁。

  • bpo-30934: 记录idlelib测试的覆盖率详情。在idlelib/idle-test/README.txt中添加部分内容。包括检查分支是否双向执行。排除在单元测试期间不运行的IDLE特定代码。

  • bpo-30913: IDLE:在文档字符串中记录ConfigDialog的tk变量、方法和部件。这将有助于改进对话框和分割类。原始由Cheryl Sabella提供补丁。

  • bpo-30899: IDLE:为config中的ConfigParser子类添加测试。由Louie Lu提供补丁。

  • bpo-30881: IDLE:为browser.py添加文档字符串。由Cheryl Sabella提供补丁。

  • bpo-30851: IDLE:移除configdialog中未使用的变量。一个是重复的,一个是设置但用户无法更改的。由Cheryl Sabella提供补丁。

  • bpo-30870: IDLE:在设置对话框中,使用上下键以及鼠标选择字体。初始由Louie Lu提供补丁。

  • bpo-8231: IDLE:仅调用config.IdleConf.GetUserCfgDir一次。

  • bpo-30779: IDLE:从configdialog中提取ConfigChanges类,放入config;测试。* 在config中,将转储测试代码放入一个函数;运行它和'unittest'在'if __name__ == '__main__'中。* 基于bpo问题上的changes_class_v4.py添加config.ConfigChanges类。* 添加test_config.ChangesTest类,部分使用configdialog_tests_v1.py。* 修改configdialog以使用ConfigChanges;参见tracker msg297804。* 修改test_configdialog以匹配configdialog的更改。* 移除未使用或已移至ConfigChanges的configdialog函数。Cheryl Sabella贡献了部分补丁。

  • bpo-30777: IDLE:configdialog - 添加文档字符串并修复注释。由Cheryl Sabella提供补丁。

  • bpo-30495: IDLE:通过添加文档字符串、PEP8命名和更多测试来改进textview。由Cheryl Sabella提供补丁。

  • bpo-30723: IDLE:对parenmatch进行多项改进。添加'parens'风格以同时高亮开启和关闭符号。使'default'风格(非默认)成为'opener'的同义词。使时间延迟在所有风格中工作方式相同。为配置对话框扩展标签添加帮助,包括parenmatch的帮助。添加新测试。原始补丁由Charles Wohlganger提供。

  • bpo-30674: IDLE:向grep模块添加文档字符串。由Cheryl Sabella提供补丁。

  • bpo-21519: IDLE的基本自定义键输入对话框现在能正确检测重复项。原始由Saimadhav Heblikar提供补丁。

  • bpo-29910: IDLE不再通过快捷键注释掉一个区域后删除一个字符。为此添加 ``return 'break'``以及IDLE和默认键绑定之间的其他潜在冲突。

  • bpo-30728: 审查并更改idlelib.configdialog的名称。将方法和属性名称小写。将'colour'替换为'color',扩展过于隐晦的名称,删除不需要的下划线。用特定的导入替换 import *。由Cheryl Sabella提供补丁。

  • bpo-6739: IDLE:通过尝试用tk绑定用户输入的键序列来验证它们。为所有3个验证函数添加测试。原始由G Polo提供补丁。测试由Cheryl Sabella添加。

工具/示例

  • bpo-30983: gdb集成命令(py-bt等)现在也可以在优化的共享构建上工作了。PEP 523 引入了_PyEval_EvalFrameDefault,它在非调试共享构建上内联了PyEval_EvalFrameEx。这破坏了使用py-bt、py-up和其他一些Python特定的gdb集成的能力。问题通过在python-gdb.py中仅查找_PyEval_EvalFrameDefault帧来修复。原始由Bruno "Polaco" Penteado提供补丁。

Python 3.6.2 正式版

发布日期: 2017-07-17

自rc2起没有更改

Python 3.6.2 rc2

发布日期: 2017-07-07

安全性

Python 3.6.2 rc1

发布日期: 2017-06-17

安全性

核心与内置函数

  • bpo-30682: 移除了对某些 f-字符串过于严格的断言,例如 eval("f'\n'") 和 eval("f'\r'")。

  • bpo-30604: 将co_extra_freefuncs移动到非每线程以避免崩溃

  • bpo-29104: 修复了 f-字符串中反斜杠的解析。

  • bpo-27945: 修复了在搜索、插入或比较过程中输入集合被修改时,字典的各种段错误。基于 Duane Griffin 和 Tim Mitchell 的补丁。

  • bpo-25794: 修复了 type.__setattr__() 和 type.__delattr__() 对于非 interned 属性名称的问题。基于 Eryk Sun 的补丁。

  • bpo-30039: 如果解释器在恢复一系列嵌套的 'yield from' 或 'await' 调用过程中发生 KeyboardInterrupt,现在会正确地传递到最内层的帧。

  • bpo-12414: sys.getsizeof() 在代码对象上现在返回的大小包括代码结构及其引用对象的大小。由 Donghee Na 提交的补丁。

  • bpo-29949: 修复了 set 和 frozenset 对象的内存使用回归问题。

  • bpo-29935: 修复了在传递错误类型的索引时,tuple、list 和 deque 的 index() 方法中的错误消息。

  • bpo-29859: 当 thread_pthread.h 中的任何 pthread_* 调用失败时,显示正确的错误消息。

  • bpo-28876: 即使 len(range) 引发 OverflowErrorbool(range) 也能正常工作。

  • bpo-29600: 修复在StopIteration中包装协程返回值的问题。

  • bpo-28856: 修复了一个疏忽,即 %b 格式的字节应支持遵循缓冲区协议的对象。

  • bpo-29714: 修复了一个回归问题,即当包含零字节时,字节格式可能会失败。

  • bpo-29478: 在使用Compat32策略时,如果指定了max_line_length=None,它将不再被忽略。补丁由Mircea Cosbuc提供。

  • bpo-30616: enum 的功能 API 允许创建空的枚举。由 Donghee Na 提供补丁

  • bpo-30038: 修复了信号传递和唤醒文件描述符之间的竞争条件。补丁由 Nathaniel Smith 提供。

  • bpo-23894: lib2to3 现在能识别 rb'...'f'...' 字符串。

  • bpo-23890: unittest.TestCase.assertRaises() 现在手动打破引用循环,以避免对象存活时间超过预期。

  • bpo-30149: inspect.signature() 现在支持带有被partialmethod包装的可变参数参数的可调用对象。由Donghee Na提供补丁。

  • bpo-30645: 修复imp.load_package()中的路径计算,修复仅随字节码一起提供包的情况。由Alexandru Ardelean提供补丁。

  • bpo-29931: 修复了 ipaddress.ip_interface 对象的比较检查。补丁由 Sanjay Sundaresan 提供。

  • bpo-30605: re.compile() 在编译带有错误放置的内联修饰符的 bytes 实例时不再引发 BytesWarning。由 Roy Williams 提供补丁。

  • bpo-24484: 避免多进程清理中的竞争条件(#2159)

  • bpo-28994: 对于由 atexit 注册的回调中引发的 SystemExit,不再显示回溯。

  • bpo-30508: 如果调用了 Task/Future 的 "cancel()" 方法,则不记录异常。

  • bpo-28556: typing 模块的更新:添加通用的 AsyncContextManager,为所有版本添加对 ContextManager 的支持。原始 PR 由 Jelle Zijlstra 和 Ivan Levkivskyi 提供。

  • bpo-29870: 修复 asyncio/ssl 实现中当连接被中止时 SSL 套接字的泄漏问题。由 Michaël Sghaïer 提供补丁。

  • bpo-29743: 在握手过程中关闭传输会导致打开的套接字泄漏。由 Nikolay Kim 提供补丁。

  • bpo-27585: 修复 asyncio.Lock 中的等待者取消问题。由 Mathieu Sornay 提供补丁。

  • bpo-30418: 在 Windows 上,如果子进程仍在运行但关闭了管道,subprocess.Popen.communicate() 现在也会忽略 stdin.write() 上的 EINVAL。

  • bpo-29822: inspect.isabstract()现在在__init_subclass__期间工作。补丁由Nate Soares提供。

  • bpo-29581: ABCMeta.__new__现在接受 **kwargs,允许抽象基类在__init_subclass__中使用关键字参数。由Nate Soares提供补丁。

  • bpo-30557: faulthandler 现在能够正确过滤和显示 Windows 上的异常代码。

  • bpo-30378: 修复 logging.handlers.SysLogHandler 无法处理 IPv6 地址的问题。

  • bpo-29960: 当_random.Random.setstate()引发异常时,保留生成器状态。补丁由Bryan Olson提供。

  • bpo-30414: multiprocessing.Queue._feed 后台运行线程在异常时不从主循环中中断。

  • bpo-30003: 修复HZ编解码器中转义字符的处理。基于Ma Lin的补丁。

  • bpo-30301: 修复在 spawnforkserver 启动方法下使用SimpleQueue.empty()时的AttributeError。

  • bpo-30329: imaplib和poplib现在在shutdown(SHUT_RDWR)时捕获Windows socket WSAEINVAL错误(代码10022):尝试了无效操作。此错误有时发生在SSL连接上。

  • bpo-30375: 编译正则表达式时发出的警告现在总是指向用户代码中的行。之前如果从组或条件内部发出,它们可能指向re模块的内部。

  • bpo-30048: 修复了当任务运行协程且协程返回而没有任何更多 await 时,``Task.cancel()``可能被忽略的问题。

  • bpo-30266: contextlib.AbstractContextManager现在支持通过设置__enter__ = None或__exit__ = None进行反注册,遵循 bpo-25958 中引入的模式。由Jelle Zijlstra提供补丁。

  • bpo-30298: 放宽内联修饰符的弃用警告条件。现在允许在模式开始处连续使用多个内联修饰符(例如 '(?i)(?s)...')。在详细模式下,现在允许在内联修饰符之前和之间使用空格和注释(例如 '(?x) (?i) (?s)...')。

  • bpo-29990: 修复GB18030解码器中的范围检查。原由Ma Lin提供补丁。

  • bpo-26293: 由于zipfile损坏导致的变更。(另见:bpo-29094

  • bpo-30243: 移除了_json的扫描器和编码器的__init__方法。误用它们可能导致内存泄漏或崩溃。现在扫描器和编码器对象在__new__方法中完全初始化。

  • bpo-30185: 在收到Ctrl-C时,避免forkserver辅助进程中的KeyboardInterrupt回溯。

  • bpo-28556: 对typing模块的各种更新:添加typing.NoReturn类型,使用WrapperDescriptorType,小错误修复。原PR由Jim Fasarakis-Hilliard和Ivan Levkivskyi提供。

  • bpo-30205: 修复Linux上未绑定的AF_UNIX套接字的getsockname()。

  • bpo-30070: 修复了解析模块中错误处理的内存泄漏和崩溃问题。

  • bpo-30061: 修复了当readline()或__next__()分别返回不可大小化的对象时,IOBase方法__next__()和readlines()中的崩溃。修复了由不检查PyObject_Size()、PySequence_Size()或PyMapping_Size()的结果可能引起的其他错误。

  • bpo-30017: 允许多次调用zip条目写入器对象的close()方法。向已关闭的写入器写入现在总是产生ValueError。

  • bpo-30068: 当存在hint时,_io._IOBase.readlines将首先检查是否关闭。

  • bpo-29694: 修复了pathlib mkdir与flags parents=True时的竞争条件。补丁由Armin Rigo提供。

  • bpo-29692: 修复了contextlib.contextmanager中RuntimeError异常的任意解链。由Siddharth Velankar提供补丁。

  • bpo-29998: Pickling和复制ImportError现在保留name和path属性。

  • bpo-29953: 修复了当传递超出范围的 fold 参数时,datetime 和 time 对象的 replace() 方法中的内存泄漏问题。

  • bpo-29942: 修复了在遇到长串空可迭代对象时,itertools.chain.from_iterable 的崩溃问题。

  • bpo-27863: 修复了由竞争条件和错误类型引起的 ElementTree 中的多个崩溃问题。

  • bpo-28699: 修复了 multiprocessing.pool 中池的一个 bug,即在可迭代对象的最开始引发异常可能会吞掉异常或使程序挂起。由 Davin Potts 和 Xiang Zhang 提供补丁。

  • bpo-25803: 当操作系统优先考虑如 EACCES 而不是 EEXIST 的错误时,避免 Path.mkdir(exist_ok=True) 引发不正确的错误。

  • bpo-29861: 在 multiprocessing.Pool 中,任务、它们的参数和结果一旦完成就释放引用。

  • bpo-29884: faulthandler: 在拆卸期间恢复旧的sigaltstack。由Christophe Zeitouny提供补丁。

  • bpo-25455: 修复了递归缓冲文件类对象repr中的崩溃。

  • bpo-29800: 修复了如果partial.keywords的键不是字符串时partial.__repr__的崩溃。由Michael Seifert提供补丁。

  • bpo-29742: 如果 get_extra_info() 在关闭的 ssl 传输上调用,将引发异常。由 Nikolay Kim 提供补丁。

  • bpo-8256: 修复了如果sys.stdin或sys.stdout的属性"encoding"或"errors"未设置或不是字符串时可能导致的input()失败或崩溃。

  • bpo-28298: 修复了一个bug,该bug阻止了数组'Q'、'L'和'I'接受大整数(具有__int__方法的对象)作为元素。由Oren Milman提供补丁。

  • bpo-28231: zipfile模块现在接受路径类对象作为外部路径。

  • bpo-26915: collections.abc.Sequence的index()和count()方法在进行比较时现在在检查相等性之前检查身份。

  • bpo-29615: SimpleXMLRPCDispatcher 不再将 KeyError(或任何其他异常)链接到调度方法中引发的异常。由 Petr Motejlek 提供补丁。

  • bpo-30177: path.resolve(strict=False)不再在文件系统中不存在的第一个元素后截断路径。补丁由Antoine Pietri提供。

IDLE

  • bpo-15786: 修复IDLE自动完成框的几个问题。现在以下功能应该可以正常工作:点击选择框中的项目;使用滚动条;通过按回车键选择项目。MacOSX上的挂起问题应该不会再发生。补丁由Louie Lu提供。

  • bpo-25514: 添加关于IDLE启动失败的文档子节。无连接弹出消息会引导用户查看此部分。

  • bpo-30642: 修复IDLE测试中的引用泄露。由Louie Lu和Terry Jan Reedy提供补丁。

  • bpo-30495: 为textview.py添加文档字符串并使用PEP8命名。由Cheryl Sabella和Terry Jan Reedy提供补丁。

  • bpo-30290: 帮助-关于:使用pep8命名并添加测试。将覆盖率提高到100%。由Louie Lu、Cheryl Sabella和Terry Jan Reedy提供补丁。

  • bpo-30303: 向textview添加_utest选项;添加新测试。将覆盖率提高到100%。由Louie Lu和Terry Jan Reedy提供补丁。

C API

  • bpo-27867: 如果未设置Py_LIMITED_API,函数PySlice_GetIndicesEx()不再被宏替换。

构建

  • bpo-29941: 添加 --with-assertions 配置标志以明确启用C assert() 检查。默认为关闭。--with-pydebug``意味着 ``--with-assertions

  • bpo-28787: 修复使用 --with--dtrace 配置时Python的树外构建。

  • bpo-29243: 在配置为 --enable-optimizations 时,防止在 make test``make install``和一些其他make目标期间不必要的Python重新构建。

  • bpo-23404: 不再基于文件修改时间重新生成已生成的文件:该操作现在是显式的。用``make regen-all``替换 make touch

  • bpo-29643: 修复 --enable-optimization 不起作用的问题。

文档

  • bpo-30176: 在curses文档中添加缺失的属性相关常量。

  • bpo-30052: bytes()bytearray() 的链接目标现在是它们各自的类型定义,而不是相应的内置函数条目。使用 bytesbytearray 来引用后者。为了确保这一及未来的交叉引用更新能自动应用,每日文档构建现在禁用了Sphinx中的默认输出缓存功能。

  • bpo-26985: 在inspect文档中添加缺失的代码对象信息。

工具/示例

  • bpo-29367: python-gdb.py现在也支持 method-wrapper (wrapperobject) 对象。

测试

  • bpo-30357: test_thread: setUp() 现在使用 support.threading_setup() 和 support.threading_cleanup() 来等待线程完成,以避免对后续测试产生随机副作用。初始补丁由 Grzegorz Grzywacz 编写。

  • bpo-30197: 增强了 test.support 模块中的 swap_attr() 和 swap_item() 函数。它们现在可以在 with 语句内部删除替换的属性或项目时工作。属性或项目的旧值(如果不存在则为 None)现在将被赋值给 "as" 子句的目标,如果有的话。

Windows

  • bpo-30687: 在Windows上构建时定位msbuild.exe而不是vcvarsall.bat。

  • bpo-30450: Windows 上的构建过程不再依赖于 Subversion,而是通过 Python 脚本从 GitHub 拉取外部代码。如果系统中未找到 Python 3.6(通过 py -3.6),则使用 NuGet 下载 32 位 Python 的副本。

Python 3.6.1 正式版

发布日期: 2017-03-21

核心与内置函数

  • bpo-29723: bpo-29139 中对 sys.path[0] 初始化的更改导致了一个回归问题,暴露了在执行来自 zip 文件、目录或其他导入位置的 __main__sys.path 初始化方式的不一致性。解释器现在一致避免将导入位置的父目录添加到 sys.path 中,并确保在插入命令行中指定的导入位置时不会无意中修改其他 sys.path 条目。

构建

  • bpo-27593: 修复了sys.version中使用的git信息格式。

  • 修复python.h中不兼容的注释。

Python 3.6.1 rc1

发布日期: 2017-03-04

核心与内置函数

  • bpo-28893: 为从 __aiter__ 和 __anext__ 返回的无效可等待对象引发的错误设置了正确的 __cause__。

  • bpo-29683: 修复了 _PyCode_SetExtra 中的内存分配问题。由 Brian Coleman 提供补丁。

  • bpo-29684: 修复了 PyEval_CallObjectWithKeywords 的一个小回归问题。当 kwargs 不是字典时,它应该引发 TypeError。但当 args=NULL 且 kwargs 不是字典时,可能会导致段错误。

  • bpo-28598: 支持在调用 str.__mod__ 之前调用 str 子类的 __rmod__。由 Martijn Pieters 提供补丁。

  • bpo-29607: 修复了 CALL_FUNCTION_EX 的 stack_effect 计算。补丁由 Matthieu Dartiailh 提供。

  • bpo-29602: 修复了在复杂子类的构造函数和具有 __complex__ 方法的输入中对有符号零的错误处理。由 Serhiy Storchaka 提供补丁。

  • bpo-29347: 修复了在创建弱引用对象时可能解引用未定义指针的问题。

  • bpo-29438: 修复了key sharing dict中的use-after-free问题。

  • bpo-29319: 防止RunMainFromImporter覆盖sys.path[0]。

  • bpo-29337: 修复了比较代码对象时可能出现的BytesWarning。警告可能在编译时发出。

  • bpo-29327: 修复了将可迭代关键字参数传递给sorted()时崩溃的问题。

  • bpo-29034: 修复了os模块(path_converter)中的内存泄漏和use-after-free问题。

  • bpo-29159: 修复了当x.__index__()引发异常时bytes(x)的回归问题。

  • bpo-28932: 如果不存在<sys/random.h>,则不包含它。

  • bpo-25677: 修正了缩进块语法错误提示符的位置。基于Michael Layzell的补丁。

  • bpo-29000: 修复了八进制数在交替形式下零填充的bytes格式化。

  • bpo-26919: 在Android上,操作系统数据现在总是以UTF-8编码/解码,而不是使用区域设置编码,以避免与已经使用UTF-8的os.fsencode()和os.fsdecode()不一致。

  • bpo-28991: functools.lru_cache()容易受到一个由猴子补丁len()函数触发的晦涩的重入错误的影响。

  • bpo-28739: f字符串表达式不再被接受为文档字符串和由ast.literal_eval()处理,即使它们不包含表达式。

  • bpo-28512: 修复了通过PyErr_SyntaxLocationEx()和PyErr_SyntaxLocationObject()设置SyntaxError的offset属性。

  • bpo-28918: 修复了当Python使用Py_DEBUG定义构建时,xxlimited的交叉编译问题。

  • bpo-28731: 优化_PyDict_NewPresized()以创建正确大小的字典。将具有常量键的字典字面量的速度提高至30%。

  • bpo-29169: 将 zlib 更新至 1.2.11。

  • bpo-29623: 允许在 ConfigParser.read() 中使用路径类对象作为单一参数。由 David Ellis 提供补丁。

  • bpo-28963: 修复了在 C 中实现的 asyncio.Future.remove_done_callback 中的越界迭代。

  • bpo-29704: asyncio.subprocess.SubprocessStreamProtocol 在所有管道关闭之前不再关闭。

  • bpo-29271: 修复 Task.current_task 和 Task.all_tasks 在 C 中的实现,使其能够接受 None 参数,如同它们的纯 Python 实现一样。

  • bpo-29703: 修复 asyncio,支持在子进程中实例化新的事件循环。

  • bpo-29376: 修复 threading._DummyThread.is_alive() 中的断言错误。

  • bpo-28624: 添加一个测试,检查 Popen() 的 cwd 参数是否接受 PathLike 对象。由 Sayan Chowdhury 提供补丁。

  • bpo-28518: 在 DML 语句之前隐式开始一个事务。由 Aviv Palivoda 提供补丁。

  • bpo-29532: 修改传递给 functools.partial() 的 kwarg 字典不再影响创建后的 partial 对象。

  • bpo-29110: 修复 aifc.open() 中当文件作为文件系统路径给出且不是有效的 AIFF 格式时的文件对象泄漏问题。由 Anthony Zhang 提供补丁。

  • bpo-28556: 对 typing 模块进行了多项更新:typing.Counter、typing.ChainMap、改进的 ABC 缓存等。原始 PR 由 Jelle Zijlstra、Ivan Levkivskyi、Manuel Krebber 和 Łukasz Langa 提供。

  • bpo-29100: 修复了 Python 3.6.0 中引入的 datetime.fromtimestamp() 的回归问题:检查最小和最大年份。

  • bpo-29519: 修复了在与multiprocessing和自定义编解码器的罕见组合使用时,weakref在解释器关闭期间抛出异常的问题。

  • bpo-29416: 防止 pathlib.Path.mkdir 中的无限循环。

  • bpo-29444: 修复了 match 对象的 group() 方法中的越界缓冲区访问。基于 WGH 的补丁。

  • bpo-29335: 修复了当子进程已退出到停止状态而不是终止状态(例如:在 ptrace 下)时的 subprocess.Popen.wait()。

  • bpo-29290: 修复了 argparse 中帮助消息会在非断行空格处换行的回归问题。

  • bpo-28735: 修复了 mock.MagickMock 与 mock.ANY 的比较。

  • bpo-29316: 恢复typing模块的临时状态,向文档添加相应说明。由Ivan L.提供补丁。

  • bpo-29219: 修复了未初始化的 ctypes.CDLL 实例的 repr 中的无限递归。

  • bpo-29011: 通过向typing模块添加Deque来修复一个重要的遗漏。

  • bpo-28969: 修复了functools.lru_cache的C实现中的竞态条件。当缓存函数满时,如果同时从不同线程以相同的未缓存参数调用,可能会引发KeyError。

  • bpo-29142: 在urllib.request中,no_proxy环境变量中带有前导点的后缀可以再次匹配相关的主机名(例如.b.c匹配a.b.c)。由Milan Oberkirch提供补丁。

  • bpo-28961: 修复unittest.mock._Call辅助函数:不再忽略name参数。由Jiajun Huang提供补丁。

  • bpo-29203: functools.lru_cache()现在尊重 PEP 468 并保留关键字参数的顺序。f(a=1, b=2)现在与f(b=2, a=1)分开缓存,因为这两个调用可能产生不同的结果。

  • bpo-15812: inspect.getframeinfo()现在正确显示上下文的第行。由Sam Breese提供补丁。

  • bpo-29094: 使用外部文件对象和模式"w"和"x"创建的ZIP文件中的偏移量现在相对于文件的开始位置。

  • bpo-29085: 允许random.Random.seed()使用高质量的OS随机性,而不是pid和时间。

  • bpo-29061: 修复了secrets.randbelow()中的一个bug,该bug在给定负输入时会挂起。由Brendan Donegan提供补丁。

  • bpo-29079: 防止pathlib.resolve()在Windows上陷入无限循环。

  • bpo-13051: 修复了大型或调整大小的curses.textpad.Textbox中的递归错误。基于Tycho Andersen的补丁。

  • bpo-29119: 修复collections.OrderedDict move_to_end()方法的纯Python版本中的weakrefs。由Andra Bogildea贡献。

  • bpo-9770: curses.ascii谓词现在正确处理负整数。

  • bpo-28427: 当从另一个线程收集时,旧键不应从WeakValueDictionary中移除新值。

  • bpo-28923: 从Tix.py中移除编辑器工件。

  • bpo-29055: 通过抑制上游异常,清理了random.choice()上的空种群错误。

  • bpo-28871: 修复了在深度ElementTree释放时的崩溃。

  • bpo-19542: 修复WeakValueDictionary.setdefault()和WeakValueDictionary.pop()中的bug,这些bug在另一个线程发生GC收集时出现。

  • bpo-20191: 修复了resource.prlimit()中的崩溃,当传递一个不拥有其元素的序列作为限制时。

  • bpo-28779: 如果预加载的模块实例化了某些多处理对象(如锁),multiprocessing.set_forkserver_preload()会使forkserver进程崩溃。

  • bpo-28847: dbm.dumb现在支持读取只读文件,并且在索引文件未更改时不再写入索引文件。

  • bpo-26937: tarfile.TarFile 类的 chown() 方法现在在无法导入 grp 模块时不会失败,例如在 Android 平台上。

IDLE

  • bpo-29071: IDLE为f-字符串前缀着色(但不包括无效的ur前缀)。

  • bpo-28572: 将IDLE的test_configdialog覆盖率提高10%。更新并增强配置系统的描述。

Windows

  • bpo-29579: 从安装程序中移除readme.txt

  • bpo-29326: 忽略._pth文件中的空行(由Alexey Izbyshev提供补丁)

  • bpo-28164: 正确处理特殊的控制台文件名(由Eryk Sun提供补丁)

  • bpo-29409: 为 io.FileIO 实现 PEP 529 (由 Eryk Sun 提供的补丁)

  • bpo-29392: 防止将无效参数传递到 msvcrt 模块时崩溃。

  • bpo-25778: winreg 未正确截断字符串(由 Eryk Sun 提供补丁)

  • bpo-28896: 弃用 WindowsRegistryFinder 并默认禁用它。

C API

  • bpo-27867: 如果未设置 Py_LIMITED_API 或其值设置在 0x03050400 和 0x03060000(不包括)之间或 0x03060100 或更高,则函数 PySlice_GetIndicesEx() 将被宏替换。

  • bpo-29083: 修正了一些公共API函数的声明。PyArg_VaParse()和PyArg_VaParseTupleAndKeywords()在有限API中不可用。当定义了PY_SSIZE_T_CLEAN时,PyArg_ValidateKeywordArguments()、PyArg_UnpackTuple()和Py_BuildValue()在版本<3.3的有限API中不可用。

  • bpo-29058: 所有在 Python 3.2 之后添加的稳定 API 扩展现在只有在 Py_LIMITED_API 设置为支持此 API 的最低 Python 版本的 PY_VERSION_HEX 值时才可用。

文档

  • bpo-28929: 将文档链接到其在GitHub上的源文件。

  • bpo-25008: 将smtpd.py文档标记为实际上已弃用,并添加指向aiosmtpd的指针,这是一个基于asyncio的第三方替代品。

  • bpo-26355: 在每个页面上添加指向相应主要版本文档的规范头部链接。由Matthias Bussonnier提供补丁。

  • bpo-29349: 修复构建文档代码中的Python 2语法。

测试

  • bpo-28087: 在 macOS 上跳过 test_asyncore 和 test_eintr 的 poll 失败。由于某些 macOS 版本上底层系统 poll 函数的未解决问题,在 macOS 上运行时跳过 select.poll 的一些测试。

  • bpo-29571: 为了匹配 re.LOCALE 标志的行为,test_re.test_locale_flag 现在使用 locale.getpreferredencoding(False) 来确定测试正则表达式的候选编码(允许它在默认区域编码是多字节编码时正确跳过测试)

  • bpo-28950: 在 regrtest 命令行参数中禁止将 -j0 与 -T/-l 结合使用。

  • bpo-28683: 修复在Android上为非root用户绑定Unix socket并引发PermissionError的测试。

  • bpo-26939: 添加support.setswitchinterval()函数以修复在Android armv7 qemu模拟器上挂起的test_functools。

构建

  • bpo-27593: 当从仓库构建时,sys.version和platform模块的python_build()、python_branch()和python_revision()函数现在使用git信息而不是hg。

  • bpo-29572: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2k。

  • bpo-26851: 设置Android编译和链接标志。

  • bpo-28768: 修复函数_setmode的隐式声明。由Masayuki Yamamoto提供补丁

  • bpo-29080: 从PCBuild/build.bat中移除对hg.exe的硬依赖

  • bpo-23903: 向PC/python3.def添加遗漏的名称。

  • bpo-28762: lockf()在Android API level 24上可用,但F_LOCK宏在android-ndk-r13中未定义。

  • bpo-28538: 修复因if_nameindex()在Android API level 24上可用但if_nameindex结构未定义而导致的编译错误。

  • bpo-20211: 不要将安装C头文件的目录和安装对象代码库的目录添加到交叉编译搜索路径中。原始由Thomas Petazzoni提供补丁。

  • bpo-28849: 不要在Android上定义sys.implementation._multiarch。

Python 3.6.0 正式版

发布日期: 2016-12-23

自rc2起没有更改

Python 3.6.0 rc2

发布日期: 2016-12-16

核心与内置函数

  • bpo-28147: 修复了分割表字典中的内存泄漏:setattr()不能将合并表转换为分割表。补丁由INADA Naoki编写。

  • bpo-28990: 修复 asyncio SSL 在握手完成前连接关闭时的挂起问题。(由 HoHo-Ho 提供的补丁)

工具/示例

  • bpo-28770: 修复 python-gdb.py 以支持 fastcalls。

Windows

构建

  • bpo-28898: 防止由于 HAVE_LONG_LONG 重定义导致的 gdb 构建错误。

Python 3.6.0 rc1

发布日期: 2016-12-06

核心与内置函数

  • bpo-23722: 而不是无声地产生一个不支持方法中零参数 super() 的类,未能将新的``__classcell__``命名空间条目传递给 type.__new__ 现在会导致一个 DeprecationWarning 和一个支持零参数 super() 的类。

  • bpo-28797: 修改类__dict__在一个描述符的__set_name__方法内部,该描述符在那个类内部使用,不再阻止调用其他描述符的__set_name__方法。

  • bpo-28782: 修复了在检查下一条指令是否为YIELD_FROM时 yield from 实现中的一个错误。由WORDCODE(bpo-26647)引入的回归问题。

  • bpo-27030: 再次允许 re.sub() 替换模板中的未知转义。但它们仍然被弃用,并将在 3.7 中禁用。

  • bpo-28835: 修复了 warnings.catch_warnings() 中引入的一个回归问题:如果在上下文管理器内部覆盖了 warnings.showwarning(),则调用它。

  • bpo-27172: 为了协助从 2.7 版本升级,之前文档中关于 inspect.getfullargspec() 的弃用已被撤销。在 Python 2.7 分支不再官方支持后,可能会重新考虑这一决定。

  • bpo-26273: 新增 socket.TCP_CONGESTION (Linux 2.6.13) 和 socket.TCP_USER_TIMEOUT (Linux 2.6.37) 常量。补丁由 Omar Sandoval 编写。

  • bpo-24142: 读取损坏的配置文件会使configparser处于无效状态。原始补丁由Florian Höch提供。

  • bpo-28843: 修复 asyncio C Task 以处理异常的 __traceback__。

C API

  • bpo-28808: PyUnicode_CompareWithASCIIString() 现在永远不会引发异常。

文档

  • bpo-23722: 数据模型参考和 What's New 指南中的移植部分现在涵盖了自定义元类为了完全支持 PEP 487 和零参数 super() 所需的额外 __classcell__ 处理。

工具/示例

  • bpo-28023: 修复python-gdb.py不支持新字典实现的问题。

Python 3.6.0 beta 4

发布日期: 2016-11-21

核心与内置函数

  • bpo-28532: 当提供-V选项两次时显示sys.version。

  • bpo-27100: with语句现在在检查__exit__之前先检查__enter__。当两种方法都缺失时,这会给出不那么令人困惑的错误信息。由Jonathan Ellington提供补丁。

  • bpo-28746: 在没有ioctl FIOCLEX和FIONCLEX命令的平台上修复set_inheritable()文件描述符方法。

  • bpo-26920: 在没有langinfo的平台上修复初始化解释器时未获取区域设置的字符集的问题。

  • bpo-28648: 修复了在Mac OS X上调试版本中解码星体字符时Py_DecodeLocale()崩溃的问题。补丁由Xiang Zhang提供。

  • bpo-19398: 在编译时PYTHONPATH组件为空的情况下,不再向sys.path组件添加额外的斜杠。

  • bpo-28665: 将STORE_DEREF操作码的速度提高40%。

  • bpo-28583: PyDict_SetDefault在需要时未合并分割表。由Xiang Zhang提供补丁。

  • bpo-27243: 将 PendingDeprecationWarning 改为 DeprecationWarning。如问题中达成的共识,__aiter__ 返回一个可等待对象应在 3.5 中导致 PendingDeprecationWarning,在 3.6 中导致 DeprecationWarning。

  • bpo-26182: 修复在引发DeprecationWarning的代码中的内存泄漏。

  • bpo-28721: 修复异步生成器的aclose()和athrow()以正确处理StopAsyncIteration传播。

  • bpo-28752: 恢复了 datetime 对象的 __reduce__() 方法。

  • bpo-28727: 正则表达式模式,由 re.compile() 创建的 _sre.SRE_Pattern 对象,现在可以比较(仅限 x==y 和 x!=y 操作符)。这一更改应该修复了 bpo-18383:当 warnings 模块重新加载时不要重复警告过滤器(通常只在单元测试中这样做)。

  • bpo-20572: subprocess.Popen.wait 方法的未记录参数 endtime 现在会引发 DeprecationWarning。

  • bpo-25659: 在 ctypes 中,防止在抽象类(如 Array)上调用 from_buffer() 和 from_buffer_copy() 方法时崩溃。

  • bpo-19717: 使Path.resolve()在不存在的路径上也能成功。由Vajrasky Kok提供补丁。

  • bpo-28563: 修复了在gettext模块中处理复数形式选择时可能导致的DoS和任意代码执行问题。表达式解析器现在支持GNU gettext所支持的精确语法。

  • bpo-28387: 修复了当垃圾收集器在其他线程中调用时,_io.TextIOWrapper解构器可能崩溃的问题。基于Sebastian Cufre的补丁。

  • bpo-28600: 优化 loop.call_soon。

  • bpo-28613: 修复 get_event_loop() 在协程/回调中调用时返回当前循环的问题。

  • bpo-28634: 修复 asyncio.isfuture() 以支持 unittest.Mock。

  • bpo-26081: 修复 _asyncio.Future.__iter__().throw 中的 refleak。

  • bpo-28639: 修复 inspect.isawaitable 始终返回布尔值,由 Justin Mayfield 提供补丁。

  • bpo-28652: 使循环方法拒绝它们不支持的套接字类型。

  • bpo-28653: 修复 functools.lru_cache 中的 refleak。

  • bpo-28703: 修复 asyncio.iscoroutinefunction 以处理 Mock 对象。

  • bpo-28704: 修复 create_unix_server 以支持类路径对象 (PEP 519)。

  • bpo-28720: 添加 collections.abc.AsyncGenerator。

文档

  • bpo-28513: 记录了 zipfile 的命令行接口。

测试

  • bpo-28666: 现在test.support.rmtree能够删除不可写或不可读的目录。

  • bpo-23839: 现在在运行每个测试文件之前清除各种缓存。

构建

  • bpo-10656: 修复AIX上的树外构建。由Tristan Carel和Michael Haubenwallner提供补丁。

  • bpo-26359: 将--with-optimiations重命名为--enable-optimizations。

  • bpo-28676: 防止在macOS上出现缺失'getentropy'声明的警告。由Gareth Rees提供补丁。

Python 3.6.0 beta 3

发布日期: 2016-10-31

核心与内置函数

  • bpo-28128: 无效的str和byte转义序列的弃用警告现在会打印出关于错误发生位置的更好信息。由Serhiy Storchaka和Eric Smith提供补丁。

  • bpo-28509: dict.update()不再分配不必要的大内存。

  • bpo-28426: 修复了调试版本中PyUnicode_AsDecodedObject()潜在的崩溃问题。

  • bpo-28517: 修复了窥孔优化器中的一个偏移错误,该错误导致保留无法到达的代码。

  • bpo-28214: 改进了对有问题的 __set_name__ 属性的异常报告。

  • bpo-23782: 修复了 _PyTraceback_Add() 中可能的内存泄漏和 PyTraceBack_Here() 中的异常丢失问题。

  • bpo-28471: 修复 socket.setblocking 中“Python 内存分配器在未持有 GIL 的情况下被调用”的崩溃问题。

  • bpo-27517: LZMA压缩器和解压器在两次接收到空数据时不再抛出异常。补丁由Benjamin Fogle提供。

  • bpo-28549: 修复了curses的addch()在使用ncurses6时的段错误。

  • bpo-28449: tarfile.open()以模式"r"或"r:"现在会先尝试以压缩方式打开tar文件,再尝试无压缩方式打开。否则在使用ignore_zeros=True时有50%的几率失败。

  • bpo-23262: webbrowser模块现在支持Firefox 36+及衍生浏览器。基于Oleg Broytman的补丁。

  • bpo-27939: 修复了tkinter.ttk.LabeledScale和tkinter.Scale中由于在Tk内部将比例表示为浮点值而导致的错误。如果底层Tk变量设置为浮点值,tkinter.IntVar现在可以正常工作。

  • bpo-18844: random.choices() 中指定权重的各种方式现在产生相同的结果序列。

  • bpo-28255: calendar.TextCalendar().prmonth() 在打印月历后不再在新行的开头打印空格。由 Xiang Zhang 提供补丁。

  • bpo-20491: textwrap.TextWrapper 类现在支持不换行空格。基于 Kaarle Ritvanen 的补丁。

  • bpo-28353: os.fwalk() 不再因损坏的链接而失败。

  • bpo-28430: 修复了 C 实现的 asyncio.Future 迭代器不接受非 None 值传递给 it.send(val) 的问题。

  • bpo-27025: 为提升可读性,Tkinter 部件的生成名称现在以 "!" 前缀开头。

  • bpo-25464: 通过为 Tix 库的 bug 添加变通方法,修复了 tkinter.tix 模块中的 HList.header_exists()。

  • bpo-28488: shutil.make_archive() 不再向 ZIP 归档添加 "./" 条目。

  • bpo-25953: re.sub() 现在即使在字符串中未找到模式,也会为替换模板中的无效数字组引用引发错误。无效组引用的错误消息现在包括组索引和引用的位置。基于 SilentGhost 的补丁。

  • bpo-18219: 为大量列优化 csv.DictWriter。Mariatta Wijaya 的补丁。

  • bpo-28448: 修复了 C 实现的 asyncio.Future 在 Windows 上不工作的问题。

  • bpo-28480: 修复在禁用多线程时构建 socket 模块时的错误。

  • bpo-24452: 使 webbrowser 支持 Mac OS X 上的 Chrome。

  • bpo-20766: 修复了 pdb 在处理 SIGINT 处理器时的引用泄漏问题。

  • bpo-28492: 修复 _asyncio.Future 中如何引发 StopIteration 异常。

  • bpo-28500: 修复 asyncio 以处理来自另一个线程的异步生成器 GC。

  • bpo-26923: 修复 asyncio.Gather 一旦所有子项完成就拒绝被取消的问题。由 Johannes Ebke 提供补丁。

  • bpo-26796: 不要为默认的线程池执行器配置工作线程数量。初始由 Hans Lawrenz 提供补丁。

  • bpo-28544: 用 C 实现 asyncio.Task。

Windows

  • bpo-28522: 修复 getpathp.c 中错误处理的缓冲区重新分配

构建

  • bpo-28444: 修复交叉编译时缺少扩展模块的问题。

  • bpo-28208: 更新Windows构建和OS X安装程序以使用SQLite 3.14.2。

  • bpo-28248: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2j。

测试

  • bpo-26944: 修复Android上的test_posix,其中'id -G'完全错误或缺少有效的gid。

  • bpo-28409: regrtest: 修复命令行参数的解析器。

Python 3.6.0 beta 2

发布日期: 2016-10-10

核心与内置函数

  • bpo-28183: 优化并清理了字典迭代。

  • bpo-26081: 添加了 asyncio.Future 的 C 实现。原始由 Yury Selivanov 提供补丁。

  • bpo-28379: 为 PyUnicode_CopyCharacters() 添加了健全性检查和测试。由 Xiang Zhang 提供补丁。

  • bpo-28376: 长范围迭代器的类型现在注册为 Iterator。由 Oren Milman 提供补丁。

  • bpo-28376: 现在不推荐通过调用 range_iterator 类型来创建 range_iterator 实例。由 Oren Milman 提供补丁。

  • bpo-28376: range_iterator 的构造函数现在检查步长不为 0。由 Oren Milman 提供补丁。

  • bpo-26906: 现在解析未初始化类型的特殊方法会导致类型的隐式初始化而不是失败。

  • bpo-18287: PyType_Ready() 现在检查 tp_name 是否为 NULL。原始由 Niklas Koep 提供补丁。

  • bpo-24098: 修复了在编译过程中 AST 被更改时可能发生的崩溃。

  • bpo-28201: 当哈希值具有相同的低位时,字典减少了哈希表中第二次冲突的可能性。

  • bpo-28350: 不再对含有空字符的字符串常量进行内部化。

  • bpo-26617: 修复了在弱引用回调过程中运行垃圾收集时发生的崩溃。

  • bpo-27942: 现在在元组和冻结集合中递归内部化字符串常量。

  • bpo-21578: 修复了当 ImportError 使用无效关键字参数调用时误导性的错误消息。

  • bpo-28203: 修复了 complex(1.0, {2:3}) 错误消息中的不正确类型。补丁由 Soumya Sharma 提供。

  • bpo-28086: 元组子类型的单个可变位置参数现在被转换为确切的元组,而不是原封不动地传递给 C 定义的函数。

  • bpo-28214: 现在 __set_name__ 是在类上查找而不是在实例上查找。

  • bpo-27955: 当 getrandom() 系统调用因 EPERM 失败时(例如被 SECCOMP 阻止时),回退读取 /dev/urandom 设备。

  • bpo-28192: 在隔离模式下不导入readline。

  • 升级内部unicode数据库至Unicode 9.0.0版本。

  • bpo-28131: 修复zipimport的compile_source()中的回归问题。zipimport应使用与解释器相同的优化级别。

  • bpo-28126: 用memcpy()替换Py_MEMCPY。Visual Studio能正确优化memcpy()。

  • bpo-28120: 当尝试移除"待定键"(尚未插入分裂表的键)时,修复split字典的dict.pop()。由Xiang Zhang提供补丁。

  • bpo-26182: 当async和await关键字被用作变量/属性/类/函数名时,发出DeprecationWarning。

  • bpo-27998: 修复了 Windows 上 os.scandir() 对字节路径的支持。由 Eryk Sun 提供补丁。

  • bpo-28317: 反汇编器现在解码 FORMAT_VALUE 参数。

  • bpo-26293: 修复了不从文件开头开始写入 ZIP 文件的问题。ZIP 文件中的偏移量现在相对于存档的开始,以符合规范。

  • bpo-28380: unittest.mock 的 Mock autospec 函数现在正确支持 assert_called、assert_not_called 和 assert_called_once。

  • bpo-27181: 移除 statistics.geometric_mean 并推迟至 3.7 版本。

  • bpo-28229: lzma 模块现在支持 pathlib。

  • bpo-28321: 修复了在 plistlib 中使用二进制格式写入非 BMP 字符的问题。

  • bpo-28225: bz2 模块现在支持 pathlib。初始由 Ethan Furman 提供补丁。

  • bpo-28227: gzip 现在支持 pathlib。由 Ethan Furman 提供补丁。

  • bpo-27358: 优化了合并可变关键字参数的过程,并改进了当传递非映射作为可变关键字参数时的错误信息。

  • bpo-28257: 改进了当传递非可迭代对象作为可变位置参数时的错误信息。添加了操作码 BUILD_TUPLE_UNPACK_WITH_CALL。

  • bpo-28322: 修复了当从错误的 pickle 数据反序列化 itertools 对象时可能发生的崩溃。基于 John Leitch 的补丁。

  • bpo-28228: imghdr 现在支持 pathlib。

  • bpo-28226: compileall 现在支持 pathlib。

  • bpo-28314: 修复了 xml.etree.ElementTree.Element 的 getiterator() 方法的函数声明(C 标志)。

  • bpo-28148: 停止在 time 模块中使用 localtime() 和 gmtime()。引入了平台无关的 _PyTime_localtime API,该 API 类似于 POSIX 的 localtime_r,但在所有平台上都可用。由 Ed Schouten 提供补丁。

  • bpo-28253: 修复了极端月份(0001-01和9999-12)的日历功能。重新实现了itermonthdays()和itermonthdays2()方法,使其不再调用可能导致datetime.date下溢/溢出的itermonthdates()。

  • bpo-28275: 修复了LZMADecompressor和BZ2Decompressor类中decompress()方法可能存在的释放后使用问题。原始由John Leitch提供补丁。

  • bpo-27897: 修复了如果传递无效的字符串类似对象作为名称时,sqlite3.Connection.create_collation()可能崩溃的问题。由Xiang Zhang提供补丁。

  • bpo-18844: random.choices()现在将k作为仅关键字参数,以提高常见情况的可读性,并与其他语言中使用的签名保持一致。

  • bpo-18893: 修复了Lib/ctypes/macholib/dyld.py中无效的异常处理。由Madison May提供补丁。

  • bpo-27611: 修复了tkinter.tix模块中对默认根窗口的支持。在DisplayStyle构造函数中添加了master参数。

  • bpo-27348: 在traceback模块中,恢复了类似于"Exception: None"的异常消息的格式化。这修复了3.5a2中引入的回归问题。

  • bpo-25651: 允许在subTest()的msg参数中使用假值。

  • bpo-27778: 修复了当getrandom()被信号中断且信号处理程序引发Python异常时,os.getrandom()中的内存泄漏问题。

  • bpo-28200: 修复了Windows上os模块中的内存泄漏问题(修复了path_converter()函数)。

  • bpo-25400: RobotFileParser现在正确返回crawl_delay和request_rate的默认值。初始由Peter Wirtz提供补丁。

  • bpo-27932: 防止win32_ver()中的内存泄漏。

  • 修复socket._sendfile_use_sendfile中的UnboundLocalError。

  • bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。

  • bpo-22493: 现在,通过在正则表达式中间使用内联标志发出的警告消息包含(截断的)正则表达式模式。由Tim Graham提供补丁。

  • bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。

  • bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。

  • bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。

  • bpo-28114: 修复当env包含字节字符串时parse_envlist()崩溃的问题。由Eryk Sun提供补丁。

  • bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。

  • bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。

  • bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。

  • bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。

  • bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。

  • bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。

  • bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。

  • bpo-28368: 如果子监视器没有附加循环,则拒绝监视进程。由Vincent Michel提供补丁。

  • bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。

  • bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。

  • bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。

  • bpo-28372: 修复asyncio以支持非python协程的格式化。

  • bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。

  • bpo-27972: 禁止Tasks等待自身。

Windows

  • bpo-28402: 为 Windows 上的标准库添加签名目录文件。

  • bpo-28333: 为 ps1/ps2 和 input() 提示启用 Unicode。(由 Eryk Sun 提供补丁)

  • bpo-28251: 改进 Windows 上的帮助手册。

  • bpo-28110: launcher.msi 在 32 位和 64 位之间有不同的产品代码

  • bpo-28161: 以写权限打开 CON 失败

  • bpo-28162: 如果第一行以 Ctrl+Z 开头,WindowsConsoleIO readall() 失败

  • bpo-28163: WindowsConsoleIO fileno() 将错误的标志传递给 _open_osfhandle

  • bpo-28164: 对于各种路径,_PyIO_get_console_type 失败

  • bpo-28137: 将 Windows 路径文件重命名为 ._pth

  • bpo-28138: Windows ._pth 文件应允许导入站点

C API

  • bpo-28426: 已弃用未记录的函数 PyUnicode_AsEncodedObject()、PyUnicode_AsDecodedObject()、PyUnicode_AsDecodedUnicode() 和 PyUnicode_AsEncodedUnicode()。

构建

  • bpo-28258: 修复了在爱沙尼亚语言环境下构建的问题(Makefile中的python-config和distclean目标)。由Arfrever Frehtes Taifersar Arahesis提供补丁。

  • bpo-26661: setup.py现在可以检测到带有multiarch包装的系统libffi。

  • bpo-15819: 移除了为在源码树外构建而冗余的包含搜索目录选项。

测试

  • bpo-28217: 添加_testconsole模块以测试控制台输入。

Python 3.6.0 beta 1

发布日期: 2016-09-12

核心与内置函数

  • bpo-23722: 由零参数 super() 使用的 __class__ 单元现在从 type.__new__ 而不是 __build_class__ 初始化,因此在类创建期间从元类方法调用时,依赖于此的类方法现在将正常工作。由 Martin Teichmann 提供补丁。

  • bpo-25221: 当 Python 编译时设置 NSMALLPOSINTS = 0 时,修复 PyLong_FromLong(0) 的损坏结果。

  • bpo-27080: 实现 PEP 515 的格式化支持。初始由 Chris Angelico 提供补丁。

  • bpo-27199: 在 tarfile 中,公开 copyfileobj 的 bufsize 以提高吞吐量。由 Jason Fried 提供补丁。

  • bpo-27948: 在 f-字符串中,仅允许在花括号内(表达式所在处)使用反斜杠。这是与 3.6 alpha 版本的破坏性变更,其中反斜杠允许在 f-字符串的任何地方使用。同时,要求 f-字符串内的表达式必须包围在字面花括号内,而不是像 f'\x7b"hi"\x7d' 这样的转义。

  • bpo-28046: 从 sys.path 中移除平台特定的目录。

  • bpo-28071: 为与空集的差异添加早期退出。

  • bpo-25758: 防止 zipimport 不必要地编码文件名(由 Eryk Sun 提供补丁)

  • bpo-25856: 扩展类和函数的 __module__ 属性现在被 interned。这导致协议 4 的 pickle 数据更加紧凑。

  • bpo-27213: 重做 CALL_FUNCTION* 操作码以产生更短更高效的字节码。补丁由 Demur Rumed 提供,设计由 Serhiy Storchaka 完成,由 Serhiy Storchaka 和 Victor Stinner 审核。

  • bpo-26331: 实现 PEP 515 的词法分析支持。由 Georg Brandl 提供补丁。

  • bpo-27999: 将“使用后全局”设为 SyntaxError,同样适用于 nonlocal。由 Ivan Levkivskyi 提供补丁。

  • bpo-28003: 实现 PEP 525 -- 异步生成器。

  • bpo-27985: 实现 PEP 526 -- 变量注解语法。由 Ivan Levkivskyi 提供补丁。

  • bpo-26058: 为内置字典类型添加一个新的私有版本,每次字典创建和每次字典更改时递增。PEP 509的实现。

  • bpo-27364: 现在,不是一个有效转义序列的反斜杠字符对会生成一个DeprecationWarning。补丁由Emanuel Barry提供。

  • bpo-27350: dict 的实现改为类似PyPy的方式。它更紧凑并保持插入顺序。(概念由Raymond Hettinger开发,由Inada Naoki提供补丁。)

  • bpo-27911: 移除 exec_builtin_or_dynamic() 中不必要的错误检查。

  • bpo-27078: 添加了BUILD_STRING操作码。优化了f-字符串的评估。

  • bpo-17884: Python现在要求系统支持inttypes.h和stdint.h。

  • bpo-27961: 要求平台支持 long long。Python多年来已不再编译不支持 long long 的版本,因此这基本上是一个形式上的要求。

  • bpo-27355: 移除了对Windows CE的支持。它从未完成,而且Windows CE不再是Python的相关平台。

  • 实现 PEP 523

  • bpo-27870: 零的大整数左移不再尝试分配大量内存。

  • bpo-25402: 在整数到十进制字符串的转换中,改进了对所需中间内存的估计,并移除了一个不必要的严格溢出检查。由Serhiy Storchaka提供补丁。

  • bpo-27214: 在long_invert中,更加小心地修改由long_add返回的对象,并移除了对小long的不必要检查。感谢Oren Milman的分析和补丁。

  • bpo-27506: 支持通过关键字传递bytes/bytearray.translate()的"delete"参数。

  • bpo-27812: 正确清除生成器帧对生成器的反向引用,以防止frame.clear()中的崩溃。

  • bpo-27811: 修复了一个在启用警告即错误时,未等待的协程被最终化时崩溃的问题。

  • bpo-27587: 修复了PVS-Studio发现的另一个问题:在_PyState_AddModule()中使用'def'后的空指针检查。初始由Christian Heimes提供补丁。

  • bpo-27792: 现在对 bool 和其他 int 子类应用的模运算总是返回一个 int。以前返回类型依赖于输入值。由 Xiang Zhang 提供补丁。

  • bpo-26984: int() 现在总是返回一个精确的 int 实例。

  • bpo-25604: 修复了整数真除法中的一个次要错误;这个错误可能导致在具有不可靠 ldexp 实现的平台上出现 off-by-one-ulp 结果。

  • bpo-24254: 默认情况下,使类定义命名空间有序。

  • bpo-27662: 修复了 List_New 中的一个溢出检查:原始代码检查的是 Py_SIZE_MAX 而不是正确的上限 Py_SSIZE_T_MAX。由 Xiang Zhang 提供补丁。

  • bpo-27782: 多阶段扩展模块导入现在正确地允许使用 m_methods 字段来向 Py_create_mod 返回的非模块类型实例添加模块级函数。由 Xiang Zhang 提供补丁。

  • bpo-27936: round() 函数对某些类型接受第二个 None 参数,但对其他类型不接受。通过接受所有数值类型的 None 来修复这种不一致性。

  • bpo-27487: 如果在导入父包之后但在执行子模块之前,在 sys.modules 中找到了 "python -m" 或 runpy.run_module() 的子模块参数,则发出警告。

  • bpo-27157: 使只有 type() 本身接受单参数形式。由 Eryk Sun 和 Emanuel Barry 提供补丁。

  • bpo-27558: 修复 "raise" 语句实现中的一个 SystemError。在一个全新的线程中,引发一个 RuntimeError,因为没有活动的异常可以重新引发。补丁由 Xiang Zhang 编写。

  • bpo-28008: 实现 PEP 530 -- 异步推导式。

  • bpo-27942: 修复 codeobject.c 中的内存泄漏

  • bpo-28732: 修复 os.spawnv() 在 args 中没有元素时的崩溃

  • bpo-28485: 对于 compileall.compile_dir(workers=...) 参数的负值,即使多线程不可用,也总是引发 ValueError。

  • bpo-28037: 使用 sqlite3_get_autocommit() 而不是手动设置 Connection->inTransaction。

  • bpo-25283: 现在,在所有平台上,time.localtime() 和 time.gmtime() 的返回值中都提供了属性 tm_gmtoff 和 tm_zone。

  • bpo-24454: 现在可以使用 __getitem__ 访问正则表达式匹配对象组。"mo[x]" 等同于 "mo.group(x)"。

  • bpo-10740: sqlite3 不再在 DDL 语句之前隐式提交一个打开的事务。

  • bpo-17941: 向 collections.namedtuple() 添加了一个 module 参数。

  • bpo-22493: 内联标志现在应该只在正则表达式的开头使用。如果在正则表达式的中间使用它们,则会发出弃用警告。

  • bpo-26885: xmlrpc 现在支持解组 Apache XML-RPC 实现用于数字和 None 的附加数据类型。

  • bpo-28070: 修复了正则表达式中解析内联详细标志的问题。

  • bpo-19500: 向 ssl 模块添加了客户端 SSL 会话恢复功能。

  • bpo-28022: 弃用有利于 SSLContext 的 ssl 相关参数。弃用包括在 ftplib、httplib、imaplib、smtplib、poplib 和 urllib 中手动创建 SSLSocket 和 certfile/keyfile(或类似)。

  • bpo-28043: SSLContext 改进了默认设置:OP_NO_SSLv2、OP_NO_SSLv3、OP_NO_COMPRESSION、OP_CIPHER_SERVER_PREFERENCE、OP_SINGLE_DH_USE、OP_SINGLE_ECDH_USE 和没有 MD5 的 HIGH 密码。

  • bpo-24693: 将 zipfile 模块中的一些 RuntimeError 更改为更合适的类型。改进了一些错误消息和调试输出。

  • bpo-17909: json.loadjson.loads 现在支持以 UTF-8、UTF-16 或 UTF-32 编码的二进制输入。由 Serhiy Storchaka 提供补丁。

  • bpo-27137: functools.partial 的纯 Python 回退实现现在在子类化、pickling 和文本表示目的方面与其加速的 C 对应物行为匹配。由 Emanuel Barry 和 Serhiy Storchaka 提供补丁。

  • 修复了 mmap 模块中在异常使用模式下可能出现的整数溢出和崩溃问题。

  • bpo-1703178: 修复了向distutils的build_ext命令传递--link-objects选项的功能。

  • bpo-28019: itertools.count()不再将1.0到2.0之间的非整数步长四舍五入为1。

  • bpo-18401: Pdb现在支持'readrc'关键字参数,以控制是否应读取.pdbrc文件。由Martin Matusiak和Sam Kimbrel提供的补丁。

  • bpo-25969: 更新lib2to3语法以处理3.5中添加的解包泛化。

  • bpo-14977: mailcap现在遵循mailcap文件中的行顺序(“首次匹配”),符合RFC 1542的要求。由Michael Lazar提供的补丁。

  • bpo-28082: 将re标志常量转换为IntFlag。

  • bpo-28025: 将所有ssl模块常量转换为IntEnum和IntFlags。SSLContext属性现在返回标志和枚举。

  • bpo-23591: 向enum模块添加Flag、IntFlag和auto()。

  • bpo-433028: 增加了对正则表达式中修饰符跨度的支持。

  • bpo-24594: 在打开MSI数据库时验证persist参数。

  • bpo-17582: xml.etree.ElementTree现在保留属性中的空白(由Duane Griffin提供补丁。由Stefan Behnel审查和批准。)。

  • bpo-28047: 修复了用于新电子邮件策略中base64 CTE的行长度计算。

  • bpo-27576: 修复OrderedDict.__init__()中的调用顺序。

  • email.generator.DecodedGenerator现在支持policy关键字。

  • bpo-28027: 从 Lib/plat-* 中移除未记录的模块:IN、CDROM、DLFCN、TYPES、CDIO和STROPTS。

  • bpo-27445: 不将str(_charset)传递给MIMEText.set_payload()。由Claude Paroz提供的补丁。

  • bpo-24277: 新的电子邮件API不再是临时的,文档已经重新组织和重写以强调新API。

  • bpo-22450: urllib现在在默认头中包括一个 Accept: */* 头。这使得REST API请求的结果更加一致和可预测,尤其是在涉及代理服务器时。

  • lib2to3.pgen3.driver.load_grammar() 现在在相同的Grammar.txt输入下,无论哈希随机化设置如何,都会创建一个稳定的缓存文件。

  • bpo-28005: 允许编码实现中的ImportErrors传播。

  • bpo-26667: 在importlib.util中支持路径类对象。

  • bpo-27570: 在“ctypes”和“array”模块中避免使用空源指针进行零长度memcpy()等调用。

  • bpo-22233: 仅在RFC指定的CR和LF字符上断开电子邮件标题行,而不是在任意Unicode换行符上。这也修复了HTTP标题解析中的一个错误。

  • bpo-27331: email.mime类现在都接受一个可选的policy关键字。

  • bpo-27988: 修复email iter_attachments对payload列表的错误修改。

  • bpo-16113: 向hashlib模块添加SHA-3和SHAKE支持。

  • 消除_scproxy.c中的一个同义指针比较警告。

  • bpo-27776: os.urandom() 函数现在在Linux 3.17及更新版本上会阻塞,直到系统urandom熵池初始化以提高安全性。这一变更是 PEP 524 的一部分。

  • bpo-27778: 将Linux的 getrandom() 系统调用作为一个新的 os.getrandom() 函数公开。这一变更是 PEP 524 的一部分。

  • bpo-27691: 修复ssl模块对X.509证书中GEN_RID主题替代名字段的解析。

  • bpo-18844: 添加random.choices()。

  • bpo-25761: 改进了关于C实现解pickler中截断pickle数据的错误报告。在某些情况下,现在会抛出UnpicklingError而不是AttributeError和ValueError。

  • bpo-26798: 向hashlib添加BLAKE2(blake2b和blake2s)。

  • bpo-26032: 通过使用os.scandir()优化了pathlib中的globing;现在大约快了1.5到4倍。

  • bpo-25596: 优化了glob模块中的glob()和iglob()函数;现在大约快了3到6倍。

  • bpo-27928: 向hashlib模块添加scrypt(基于密码的密钥派生函数)(需要OpenSSL 1.1.0)。

  • bpo-27850: 从ssl模块的默认加密列表中移除3DES以应对sweet32攻击(CVE 2016-2183)。

  • bpo-27766: 向ssl模块的默认加密列表中添加ChaCha20 Poly1305。(需要OpenSSL 1.1.0或LibreSSL)。

  • bpo-25387: 检查winsound.MessageBeep的返回值。

  • bpo-27866: 添加SSLContext.get_ciphers()方法以获取所有启用的加密列表。

  • bpo-27744: 向socket模块添加AF_ALG(Linux内核加密)。

  • bpo-26470: 将ssl和hashlib模块移植到OpenSSL 1.1.0。

  • bpo-11620: 修复winsound.PlaySound中对SND_MEMORY的支持。基于Tim Lesher的补丁。

  • bpo-11734: 向struct模块添加对IEEE 754半精度浮点数的支持。基于Eli Stevens的补丁。

  • bpo-27919: 弃用distutils打包中的 extra_path 分发选项。

  • bpo-23229: 添加新的 cmath``常量:``cmath.inf``和 ``cmath.nan 以匹配 math.inf 和``math.nan``,以及 cmath.infjcmath.nanj 以匹配复数repr使用的格式。

  • bpo-27842: csv.DictReader现在返回OrderedDict类型的行。(由Steve Holden贡献。)

  • 移除对传递文件描述符给os.access的支持。它从未工作过,但以前不会引发错误。

  • bpo-12885: 修复distutils遇到符号链接时的错误。

  • bpo-27881: 修复了设置sqlite3.Connection.isolation_level时可能的错误。基于Xiang Zhang的补丁。

  • bpo-27861: 修复了当工厂创建的不是游标时sqlite3.Connection.cursor()中的崩溃。由Xiang Zhang提供补丁。

  • bpo-19884: 避免在OS X上使用Gnu Readline时产生虚假输出。

  • bpo-27706: 恢复random.Random().seed()对于使用种子版本1的字符串种子的确定性行为。允许random()的调用序列与Python 2中完全匹配。由Nofar Schnider提供补丁。

  • bpo-10513: 修复Connection.commit()中的回归问题。提交后不应重置语句。

  • bpo-12319: 在http.client.HTTPConnection请求中添加了分块传输编码支持。urllib.request.AbstractHTTPHandler类不再强制要求Content-Length头部。如果一个HTTP请求有一个文件或可迭代体,但没有Content-Length头部,库现在会转而使用分块传输编码。

  • 来自https://github.com/python/typing的typing.py新版本:- Collection(仅适用于3.6)(bpo-27598) - 将FrozenSet添加到__all__(上游#261) - 修复_get_type_vars()中的崩溃(上游#259) - 移除ForwardRef._eval_type中的字典约束(上游#252)

  • bpo-27832: 使 _normalize 参数成为 Fraction 构造器的仅关键字参数,这样``Fraction(2, 3, 4)``现在会引发 TypeError

  • bpo-27539: 修复了在负指数和负基数情况下未归一化的 Fraction.__pow__ 结果。

  • bpo-21718: 现在,使用CTEs的查询可以使用cursor.description了。

  • bpo-27819: 在distutils的sdists中,除非提供了"formats",否则简单地在所有平台上生成"gztar"(gzip压缩的tar格式)分发。

  • bpo-2466: posixpath.ismount现在能正确识别用户没有权限访问的挂载点。

  • bpo-9998: 在Linux上,ctypes.util.find_library现在会在LD_LIBRARY_PATH中查找共享库。

  • bpo-27573: code.interact的退出消息现在可以配置。

  • bpo-27930: 改进了logging.handlers.QueueListener的行为。感谢Paulo Andrade和Petr Viktorin的分析和补丁。

  • bpo-6766: 向multiprocessing添加了分布式引用计数以支持共享值/代理对象的嵌套。

  • bpo-21201: 提高了multiprocessing错误消息的可读性。感谢Wojciech Walczak的补丁。

  • asyncio: 在各Transport类中添加了 set_protocol / get_protocol 方法。

  • bpo-27456: asyncio:默认设置TCP_NODELAY。

IDLE

  • bpo-15308: 向Shell菜单添加了'中断执行'(^C)。由Roger Serwy提供补丁,由Bayard Randel更新。

  • bpo-27922: 停止IDLE测试在屏幕上'闪烁'gui小部件。

  • bpo-27891: 在idlelib模块中一致地分组和排序导入。

  • bpo-17642: 为教室投影添加更大的字体大小。

  • 在 IDLE 帮助窗口的标题中加入版本号

  • bpo-25564: 在IDLE与控制台差异的部分,提到使用exec意味着每个语句都定义了__builtins__。

  • bpo-27821: 修复3.6.0a3回归,该回归阻止在没有定义自定义主题时选择自定义键集。

C API

  • bpo-26900: 从有限API中排除下划线名称和其他私有API。

  • bpo-26027: 在PyUnicode_FSConverter()和PyUnicode_FSDecoder()中添加对路径类对象的支持。

测试

  • bpo-27427: 为数学模块添加额外测试。由Francisco Couzo提供补丁。

  • bpo-27953: 跳过在OS X 10.4上由于tan函数的libm实现不佳而失败的数学和cmath测试。

  • bpo-26040: 提高test_math和test_cmath的覆盖范围和严谨性。由Jeff Allen提供补丁。

  • bpo-27787: 在检查每个测试的“悬挂线程”之前调用gc.collect(),因为悬挂线程是弱引用。

构建

  • bpo-27566: 修复冻结makefile中的clean目标(Lisa Roach提供补丁)

  • bpo-27705: 更新validate_ucrtbase.py中的消息

  • bpo-27976: 弃用在非OSX UNIX平台上使用捆绑的libffi副本构建_ctypes。

  • bpo-27983: 当启用 --with-optimizations 时,将使用clang作为PGO链接所需的llvm-profdata工具的缺失变为配置时错误,而不是制作时。同时提高我们在MacOS和一些Linux上找到llvm-profdata工具的能力。

  • bpo-21590: 支持DTrace和SystemTap探针。

  • bpo-26307: profile-opt构建现在将PGO应用于内置模块。

  • bpo-26359: 添加--with-optimizations标志以在可用时开启LTO和PGO构建支持。

  • bpo-27917: 为Android构建设置平台三元组。

  • bpo-25825: 更新AIX上对$(LIBPL)安装路径的引用。此路径在3.2a4中更改。

  • 更新 OS X 安装包,使用SQLite 3.14.1 和 XZ 5.2.2版本。

  • bpo-21122: 修复OS X上的LTO构建。

  • bpo-17128: 构建带有OpenSSL私有副本的OS X安装程序。同时提供一个安装证书命令脚本示例,用于从第三方certifi模块安装一组根证书。

工具/示例

  • bpo-27952: 使Tools/scripts/fixcid.py能够在Python 3和当前的"re"模块下工作,避免无效的Python反斜杠转义,并修复解析转义C引号符号时的错误。

Windows

  • bpo-28065: 将xz依赖更新至5.2.2版本并从源代码构建。

  • bpo-25144: 确保在继续自定义安装之前设置TargetDir。

  • bpo-1602: Windows控制台不支持输入或打印Unicode(PEP 528)。

  • bpo-27781: 在Windows上将文件系统编码更改为UTF-8(PEP 529)。

  • bpo-27731: 在Windows 10上选择退出MAX_PATH限制。

  • bpo-6135: 向subprocess添加encoding和errors参数。

  • bpo-27959: 添加oem编码,将ansi别名设为mbcs,将aliasmbcs移动到编解码器查找。

  • bpo-27982: winsound模块的函数现在接受关键字参数。

  • bpo-20366: 在Windows上构建SQLite的全文搜索支持。

  • bpo-27756: 为Windows上的Python文件和进程添加新图标。设计由Cherry Wang提供。

  • bpo-27883: 在Windows上将sqlite更新至3.14.1.0版本。

Python 3.6.0 alpha 4

发布日期: 2016-08-15

核心与内置函数

  • bpo-27704: 优化从字节类对象和可迭代对象创建bytes和bytearray。对于短对象速度提升可达3倍。原始由Naoki Inada提供补丁。

  • bpo-26823: 回溯中大量重复的行现在被内置回溯渲染缩写为"[Previous line repeated {count} more times]"。由Emanuel Barry提供补丁。

  • bpo-27574: 减少了在使用Argument Clinic实现的函数中解析关键字参数的开销。

  • bpo-22557: 现在导入已经导入的模块速度提升可达2.5倍。

  • bpo-17596: 包含<wincrypt.h>以帮助Min GW构建。

  • bpo-17599: 在Windows上,重命名私有定义的REPARSE_DATA_BUFFER结构以避免与Min GW的定义冲突。

  • bpo-27507: 在bytearray.extend()中添加整数溢出检查。由张翔提供补丁。

  • bpo-27581: 在PySequence_Tuple()中不依赖包装进行溢出检查。由张翔提供补丁。

  • bpo-1621: 避免在列表和元组操作中出现有符号整数溢出。由张翔提供补丁。

  • bpo-27419: 标准的__import__()不再在全局或内置变量中查找"__import__"以导入子模块或"from import"。修复了如果从__spec__或__package__无法解析包时发出警告导致崩溃的问题。

  • bpo-27083: 在Windows下尊重PYTHONCASEOK环境变量。

  • bpo-27514: 将静态嵌套块过多的情况改为SyntaxError而非SystemError。

  • bpo-27366: 实现了 PEP 487 (类创建的简化定制) 。在子类化时,__init_subclass__类方法会在基类上调用。描述符在类创建后通过__set_name__初始化。

  • bpo-26027: 向os和os.path模块添加 PEP 519/__fspath__()支持。包含来自Jelle Zijlstra的代码。(另见 bpo-27524

  • bpo-27598: 将Collections添加到collections.abc。由Ivan Levkivskyi提供补丁,文档由Neil Girdhar提供。

  • bpo-25958: 支持从各种ABC中"反注册"特殊方法,如__hash__、__iter__或__len__。所有这些(以及更多)可以在实现类中设置为None,行为将如同方法根本未定义。(以前,这种机制仅存在于__hash__,以使可变类不可哈希。)代码由Andrew Barnert和Ivan Levkivskyi贡献。

  • bpo-16764: 支持zlib.decompress()的关键字参数。由张翔提供补丁。

  • bpo-27736: 防止由于在3.6.0a3中为 bpo-27038 引入的代码导致的引用计数问题在解释器重新初始化后出现段错误。由张翔提供补丁。

  • bpo-25628: collections.namedtuple的 verboserename 参数现在仅为关键字参数。

  • bpo-12345: 向 math 和 cmath 添加数学常数 tau。另见 PEP 628

  • bpo-26823: traceback.StackSummary.format 现在将重复行的大段缩写为 "[前一行重复了 {count} 次]"(这一变化进一步影响了模块中的其他 traceback 显示操作)。由 Emanuel Barry 提供补丁。

  • bpo-27664: 向 concurrent.futures.thread.ThreadPoolExecutor() 添加了指定线程名前缀的能力。

  • bpo-27181: 向 statistics 模块添加 geometric_mean 和 harmonic_mean。

  • bpo-27573: code.interact 现在在退出时打印一条消息。

  • bpo-6422: 向 timeit.Timer 对象添加 autorange 方法。

  • bpo-27773: 更正 _ssl.wrap_socket() 中 server_hostname 的一些内存管理错误。

  • bpo-26750: unittest.mock.create_autospec() 现在可以正确用于 property() 和其他数据描述符的子类。移除从未公开使用、从未文档化的 unittest.mock.DescriptorTypes 元组。

  • bpo-26754: 现在弃用 compile() 及类似函数中未文档化的对一般 bytes-like 对象作为路径的支持。

  • bpo-26800: 现在弃用 os 函数中未文档化的对一般 bytes-like 对象作为路径的支持。

  • bpo-26981: 向 enum.Enum 添加 _order_ 兼容性垫片,用于 Python 2/3 代码库。

  • bpo-27661: 向 datetime.combine 添加 tzinfo 关键字参数。

  • 在 curses 模块中,如果向 window.getstr() 或 window.instr() 传递负值,则引发错误。

  • bpo-27783: 修复 operator.methodcaller 中可能使用未初始化内存的问题。

  • bpo-27774: 修复 _sre 中可能对未拥有对象进行 Py_DECREF 的问题。

  • bpo-27760: 修复 binascii.b2a_qp 中可能的整数溢出。

  • bpo-27758: 修复 _csv 模块中对于大记录长度可能的整数溢出。

  • bpo-27568: 防止 HTTPoxy 攻击 (CVE 2016-1000110)。当设置了 REQUEST_METHOD 环境变量时忽略 HTTP_PROXY 变量,这表明脚本处于 CGI 模式。

  • bpo-7063: 从“array”模块的切片处理中移除无用代码。由Chuck提交补丁。

  • bpo-27656: 不再假设sched.h定义了任何SCHED_*常量。

  • bpo-27130: 在“zlib”模块中,修复了压缩和解压缩大缓冲区(通常为4 GiB)时的处理问题。之前,输入被限制在4 GiB,压缩和解压缩操作未能正确处理4 GiB的结果。

  • bpo-24773: 实现了 PEP 495 (本地时间歧义消除) 。

  • 在select模块中公开EPOLLEXCLUSIVE常量(当它被定义时)。

  • bpo-27567: 在select模块中公开EPOLLRDHUP和POLLRDHUP常量。

  • bpo-1621: 在“audioop”模块中避免有符号整数否定溢出。

  • bpo-27533: 在nt._isdir中释放GIL。

  • bpo-17711: 修复了使用协议0的持久ID进行反序列化的问题。原始补丁由Alexandre Vassalotti提交。

  • bpo-27522: 避免在email.feedparser中无意中创建的引用循环。

  • bpo-27512: 修复了当os.fspath()调用一个引发异常的__fspath__()方法时的段错误。补丁由Xiang Zhang提交。

IDLE

  • bpo-27714: text_textview和test_autocomplete现在在同一个进程中重新运行时通过。这发生在test_idle使用-w选项运行但未使用-jn选项时失败时。修复test_config的警告。

  • bpo-27621: 将查询响应验证错误消息放在查询框本身中,而不是放在单独的消息框中。重做测试以匹配。添加Mac OSX改进。原始补丁由Mark Roseman提交。

  • bpo-27620: 现在按Esc键会取消关闭查询框。

  • bpo-27609: IDLE:在初始空白后按Tab键应制表,而不是自动完成。这解决了至少两次缩进编写文档字符串的问题。

  • bpo-27609: 当也有非None返回时,显式返回None。在少数情况下,反转条件并消除返回。

  • bpo-25507: IDLE不再因为其tkinter导入而运行有bug的代码。用户必须包含直接在Python中运行所需的相同导入。

  • bpo-27173: 将'IDLE Modern Unix'添加到内置键集中。使默认键集依赖于平台。为配置模块的更改添加测试。

  • bpo-27452: 在IDLE configHandler测试转储中添加行计数器和crc。

测试

  • bpo-25805: 在test_pkgutil中根据需要跳过不适用于当 __name__ == __main__ 时的测试。补丁由SilentGhost提供。

  • bpo-27472: 添加test.support.unix_shell作为默认shell的路径。

  • bpo-27369: 在test_pyexpat中,避免测试在Expat 2.2.0中已更改的错误消息详情。

  • bpo-27594: 防止在启用覆盖时运行test_ast时出现断言错误:确保代码对象具有有效的首行号。补丁由Ivan Levkivskyi建议。

Windows

  • bpo-27647: 更新捆绑的Tcl/Tk至8.6.6。

  • bpo-27610: 向Windows安装程序添加 PEP 514 元数据。

  • bpo-27469: 向启动器添加shell扩展,以便拖放操作能正确工作。

  • bpo-27309: 在python[w].exe清单中启用正确的Windows样式。

构建

  • bpo-27713: 在更新importlib的引导文件时抑制虚假的构建警告。由Xiang Zhang提供补丁。

  • bpo-25825: 更正对Modules/python.exp的引用,这在AIX上是必需的。这些引用在3.5.0a1中意外被更改。

  • bpo-27453: 配置中的CPP调用必须使用CPPFLAGS。由Chi Hsuan Yen提供补丁。

  • bpo-27641: 配置脚本现在在makefile中插入注释,以防止pgen和_freeze_importlib可执行文件被交叉编译。

  • bpo-26662: 在配置中设置PYTHON_FOR_GEN作为构建期间用于文件生成的Python程序。

  • bpo-10910: 避免在FreeBSD和OS X上出现C++编译错误。同时更新FreedBSD版本检查以应对原始的ctype UTF-8变通方案。

Python 3.6.0 alpha 3

发布日期: 2016-07-11

安全性

  • bpo-27278: 修复在Linux上使用getrandom()实现的os.urandom()。将大小截断为INT_MAX,并循环直到收集足够的随机字节,而不是直接将Py_ssize_t转换为int。

  • bpo-22636: 避免 ctypes.util.find_library() 的 shell 注入问题。

核心与内置函数

  • bpo-27473: 修复了 bytes 和 bytearray 连接中可能的整数溢出问题。补丁由 Xiang Zhang 提供。

  • bpo-23034: 现在默认关闭了定义了 COUNT_ALLOCS、SHOW_ALLOC_COUNT 或 SHOW_TRACK_COUNT 宏的特殊 Python 构建的输出。可以通过 "-X showalloccount" 选项重新启用。现在输出到 stderr 而不是 stdout。

  • bpo-27443: bytearray 迭代器的 __length_hint__() 不再为调整大小的 bytearray 返回负整数。

  • bpo-27007: bytes 和 bytearray 子类的 fromhex() 类方法现在返回相应子类的实例。

  • bpo-26844: 修复 imp.find_module() 的错误消息,使其引用 'path' 而不是 'name'。由 Lev Maximov 提供补丁。

  • bpo-23804: 修复 SSL 零长度 recv() 调用,使其不阻塞且不引发关于不干净 EOF 的错误。

  • bpo-27466: 更改 http.cookie.time2netscape 返回的时间格式,确认 netscape cookie 格式并使其与文档一致。

  • bpo-21708: 弃用了 dbm.dumb 与常见 dbm 行为不同的行为:在 'r' 和 'w' 模式下创建数据库以及在 'r' 模式下修改数据库。

  • bpo-26721: 将 socketserver.StreamRequestHandler.wfile 属性更改为实现 BufferedIOBase。特别是,write() 方法不再进行部分写入。

  • bpo-22115: 在 tkinter.Variable 类中添加了 trace_add、trace_remove 和 trace_info 方法。它们取代了使用过时 Tcl 命令的旧方法 trace_variable、trace、trace_vdelete 和 trace_vinfo,这些旧方法在未来的 Tcl 版本中可能不起作用。修复了旧跟踪方法:trace_vdelete() 在模式错误时不再中断跟踪,trace_vinfo() 现在总是返回字符串对的列表,"u" 模式的跟踪现在正常工作。

  • bpo-26243: 现在 zlib.compress() 只有 level 参数是关键字参数。第一个参数是仅位置参数。

  • bpo-27038: 将DirEntry类型公开为os.DirEntry。代码由Jelle Zijlstra提供补丁。

  • bpo-27186: 更新os.fspath()/PyOS_FSPath()以检查__fspath__()的返回值为str或bytes。

  • bpo-18726: json模块中的dump()、dumps()、load()和loads()函数以及JSONEncoder和JSONDecoder类构造函数的所有可选参数现在仅为关键字参数。

  • bpo-27319: ttk.TreeView的selection_set()、selection_add()、selection_remove()和selection_toggle()方法现在允许将多个项作为多个参数传递,而不是将它们作为元组传递。弃用了selection()方法带参数调用的未记录功能。

  • bpo-27079: 修复了curses.ascii函数isblank()、iscntrl()和ispunct()。

  • bpo-27294: Tkinter事件对象的repr中的数值状态现在表示为已知标志的组合。

  • bpo-27177: re模块中的Match对象现在支持类似索引的对象作为组索引。基于Jeroen Demeyer和Xiang Zhang的补丁。

  • bpo-26754: 一些函数(如compile()等)接受以整数可迭代对象编码的文件名参数。现在只接受字符串和字节类对象。

  • bpo-26536: socket.ioctl现在支持SIO_LOOPBACK_FAST_PATH。由Daniel Stokes提供补丁。

  • bpo-27048: 防止distutils在Windows上因环境变量包含非ASCII字符而失败。

  • bpo-27330: 修复了ctypes模块中可能的泄漏。

  • bpo-27238: 移除了turtle模块中的裸except。原始由Jelle Zijlstra提供补丁。

  • bpo-27122: 当在由contextlib.ExitStack()管理的上下文中引发异常,并且退出堆栈生成器之一捕获并在链中引发它时,退出时不再重新引发原始异常,而是让新的链式异常通过。这避免了issue25782中描述的 PEP 479 错误。

  • bpo-16864: sqlite3.Cursor.lastrowid现在支持REPLACE语句。初始补丁由Alex LordThorsen提供。

  • bpo-26386: 修复了 ttk.TreeView 选中操作中项目 ID 包含空格的问题。

  • bpo-8637: 优先使用环境变量 MANPAGER 设置的页面浏览程序(而非环境变量 PAGER 设置的)。

  • bpo-16182: 修复 "readline" 模块中的多个函数以使用区域设置编码,并修复 get_begidx() 和 get_endidx() 返回代码点索引。

  • bpo-27392: 添加 loop.connect_accepted_socket()。由 Jim Fulton 提供补丁。

IDLE

  • bpo-27477: IDLE 搜索对话框现在使用 ttk 部件。

  • bpo-27173: 将'IDLE Modern Unix'添加到内置键集中。使默认键集依赖于平台。为配置模块的更改添加测试。

  • bpo-27452: 使命令行 "idle-test> python test_help.py" 正常工作。当 python 在文件目录中启动时,__file__ 是相对的。

  • bpo-27452: 在IDLE configHandler测试转储中添加行计数器和crc。

  • bpo-27380: IDLE:添加 query.py 包含基本查询对话框和 ttk 部件。模块有子类 SectionName、ModuleName 和 HelpSource,用于通过 configdialog 和 file =>Load Module 从用户获取信息。每个子类有其自己的有效性检查。使用 ModuleName 允许用户编辑错误的模块名而不是重新开始。添加测试并删除合并到新文件中的两个文件。

  • bpo-27372: Test_idle 不再更改区域设置。

  • bpo-27365: 允许在 IDLE NEWS.txt 中使用非 ASCII 字符,用于贡献者姓名。

  • bpo-27245: IDLE:干净地删除自定义主题和键绑定。以前,当 IDLE 从控制台或通过导入启动时,会发出一系列警告。由 Serhiy Storchaka 提供补丁。

  • bpo-24137: 运行 IDLE、test_idle 和 htest 时禁用 tkinter 默认根。修复因此限制而失败的代码和测试。修复 htests 不创建第二个冗余的根和主循环。

  • bpo-27310: 修复 IDLE.app 在 OS X 上因遗留导入而无法启动的问题。

C API

  • bpo-26754: PyUnicode_FSDecoder() 接受以整数迭代形式编码的文件名参数。现在只接受字符串和类字节对象。

构建

  • bpo-28066: 修复在源代码树外构建时搜索构建目录中生成的包含文件的逻辑。

  • bpo-27442: 在sysconfig.get_config_vars()中暴露Python构建所针对的Android API级别,作为'ANDROID_API_LEVEL'。

  • bpo-27434: 运行交叉构建的解释器,位于PATH中,现在必须与正在构建的源代码具有相同的特性版本(例如3.6)。

  • bpo-26930: 更新Windows构建以使用OpenSSL 1.0.2h。

  • bpo-23968: 将平台目录从plat-$(MACHDEP)重命名为plat-$(PLATFORM_TRIPLET)。将配置目录(LIBPL)从config-$(LDVERSION)重命名为config-$(LDVERSION)-$(PLATFORM_TRIPLET)。将特定于平台的_sysconfigdata模块安装到平台目录,并重命名以包含ABIFLAGS。

  • 在 GNU/Hurd 系统中不使用大文件支持。

工具/示例

  • bpo-27332: 修复了由Argument Clinic生成的模块级函数的第一个参数的类型。由Petr Viktorin提供补丁。

  • bpo-27418: 修复了Tools/importbench/importbench.py。

文档

  • bpo-19489: 将搜索框从侧边栏移动到每个页面的页眉和页脚。由Ammar Askar提供补丁。

  • bpo-27285: 更新文档以反映 pyvenv 的弃用,并统一使用术语“虚拟环境”。由Steve Piercy提供补丁。

测试

  • bpo-27027: 添加了test.support.is_android,当这是一个Android构建时为True。

Python 3.6.0 alpha 2

发布日期: 2016-06-13

安全性

  • bpo-26556: 将expat更新到2.1.1,修复了 CVE 2015-1283

  • 修复smtplib中的TLS剥离漏洞,CVE 2016-0772。由Team Oststrom报告。

  • bpo-26839: 在Linux上,os.urandom() 现在调用 getrandom()GRND_NONBLOCK,如果urandom熵池尚未初始化,则回退到读取 /dev/urandom。补丁由Colm Buckley编写。

核心与内置函数

  • bpo-27095: 简化了MAKE_FUNCTION并移除了MAKE_CLOSURE操作码。由Demur Rumed提供补丁。

  • bpo-27190: 如果sqlite3版本低于3.3.1,则引发NotSupportedError。由Dave Sawyer提供补丁。

  • bpo-27286: 修复了编译BUILD_MAP_UNPACK_WITH_CALL操作码的问题。使用广义解包(PEP 448)和冲突的关键字名称调用函数可能导致未定义行为。

  • bpo-27140: 添加了BUILD_CONST_KEY_MAP操作码。

  • bpo-27186: 为 open() 添加对 os.PathLike 对象的支持(PEP 519 的一部分)。

  • bpo-27066: 修复了如果自定义 opener(为 open())返回一个负数而没有设置异常时的 SystemError。

  • bpo-26983: float() 现在总是返回一个精确的 float 实例。如果 __float__ 返回一个 float 的严格子类的实例,将发出弃用警告。在 Python 的未来版本中,这可能是一个错误。

  • bpo-27097: Python 解释器现在由于优化的指令解码而大约快了 7%。基于 Demur Rumed 的补丁。

  • bpo-26647: Python 解释器现在使用 16 位字码代替字节码。由 Demur Rumed 提供补丁。

  • bpo-23275: 允许在圆括号中赋值给空的目标列表:() = iterable。

  • bpo-27243: 更新 __aiter__ 协议:异步迭代器应该直接返回,而不是返回一个解析为异步迭代器的 awaitable。执行前者将触发 PendingDeprecationWarning。

  • 注释掉在 API 上暴露的未在 GNU/Hurd 上实现的 socket (SO_REUSEPORT) 和 posix (O_SHLOCK, O_EXLOCK) 常量。无论如何,它们在运行时都不会工作。

  • bpo-27025: 现在 Tkinter 小部件生成的名称更有意义且更易于识别。

  • bpo-25455: 修复了递归 ElementTree.Element 和 functools.partial 对象的 repr 中的崩溃。

  • bpo-27294: 改进了 Tkinter 事件对象的 repr。

  • bpo-20508: 改进了 IPv{4,6}Network.__getitem__ 的异常消息。由 Gareth Rees 提供补丁。

  • bpo-21386: 实现了缺失的 IPv4Address.is_global 属性。自 07a5610bae9d 以来已有文档记录。初始由 Roger Luethi 提供补丁。

  • bpo-27029: 从 ZipFile.open() 中移除了对通用换行模式的已弃用支持。

  • bpo-27030: 现在,由 '\' 和一个 ASCII 字母组成的未知转义在正则表达式中是错误。re.LOCALE 标志现在只能用于字节模式。

  • bpo-27186: 向 DirEntry 添加 os.PathLike 支持(作为 PEP 519 的一部分)。初始由 Jelle Zijlstra 提供补丁。

  • bpo-20900: distutils register 命令现在能正确解码 HTTP 响应。初始由 ingrid 提供补丁。

  • bpo-27186: 向 pathlib 添加 os.PathLike 支持,移除其临时状态(作为 PEP 519 的一部分)。初始由 Dusty Phillips 提供补丁。

  • bpo-27186: 向 os.fsencode() 和 os.fsdecode() 添加对 os.PathLike 对象的支持(作为 PEP 519 的一部分)。

  • bpo-27186: 引入 os.PathLike 和 os.fspath()(作为 PEP 519 的一部分)。

  • 新版本的 typing.py 提供了几个新类和特性:stubs 外的 @overload、Reversible、DefaultDict、Text、ContextManager、Type[]、NewType()、TYPE_CHECKING,以及众多错误修复(注意,一些新特性尚未在 mypy 或其他静态分析器中实现)。同时,为 PEP 492 (Awaitable、AsyncIterable、AsyncIterator) 添加的类也已加入(实际上它们已在 3.5.1 中实现,但从未被提及)。

  • bpo-25738: 停止 http.server.BaseHTTPRequestHandler.send_error() 为 205 Reset Content 发送消息体。同时,不在没有正文的响应中发送 Content 头字段。由 Susumu Koshiba 提供补丁。

  • bpo-21313: 修复 "platform" 模块以容忍 sys.version 包含截断的构建信息。

  • bpo-23883: 向 __all__ 添加缺失的 API 以匹配以下模块的文档化 API:cgi、mailbox、mimetypes、plistlib 和 smtpd。由 Jacek Kołodziej 提供补丁。

  • bpo-27164: 在 zlib 模块中,允许使用预定义的 zdict 解压原始 Deflate 流。基于 Xiang Zhang 的补丁。

  • bpo-24291: 修复 wsgiref.simple_server.WSGIRequestHandler 以完全向客户端写入数据。之前它可能进行部分写入并截断数据。同时,wsgiref.handler.ServerHandler 现在可以处理 stdout 进行部分写入,但此功能已被弃用。

  • bpo-21272: 使用 _sysconfigdata.py 初始化 distutils.sysconfig。

  • bpo-19611: inspect 现在将编译器为推导式和生成器表达式作用域生成的隐式 .0 参数报告为名为 implicit0 的位置参数。由 Jelle Zijlstra 提供补丁。

  • bpo-26809: 向 string 添加了 __all__。由 Emanuel Barry 提供补丁。

  • bpo-26373: subprocess.Popen.communicate 现在在更多/所有情况下,当子进程在调用 .communicate() 之前死亡时,正确地忽略 BrokenPipeError。

  • signal、socket 和 ssl 模块的 IntEnum 常量名称查找现在为具有多个名称的值返回一致的名称。例如:signal.Signals(6) 现在自称为 signal.SIGALRM,而不是根据解释器的哈希随机化种子在 signal.SIGALRM 和 signal.SIGIOT 之间切换。

  • bpo-27167: 当子进程因信号死亡时,澄清 subprocess.CalledProcessError 错误消息文本。

  • bpo-25931: 在像 Windows 这样不支持 os.fork() 的平台上不定义 socketserver.Forking* 名称。

  • bpo-21776: distutils.upload 现在正确处理 HTTPError。初始由 Claudiu Popa 提供补丁。

  • bpo-26526: 用简单的 DFA 验证器替换解析器模块中的自定义解析树验证。

  • bpo-27114: 修复 SSLContext._load_windows_store_certs 因 PermissionError 失败的问题。

  • bpo-18383: 避免在使用 filterwarnings 和 simplefilter 时创建重复的过滤器。基于 Alex Shkop 的补丁。

  • bpo-23026: winreg.QueryValueEx() 现在为 REG_QWORD 类型返回一个整数。

  • bpo-26741: 如果子进程仍在运行,subprocess.Popen 析构函数现在会发出 ResourceWarning 警告。

  • bpo-27056: 优化 pickle.load() 和 pickle.loads(),反序列化大量小对象时速度提高高达 10%。

  • bpo-21271: reset_mock 调用中的新关键字参数。

IDLE

  • bpo-5124: 在 X11 上,现在粘贴选中的文本会替换选中内容。这匹配了 Windows、Mac、大多数现代 Linux 应用和 ttk 小部件上的粘贴工作方式。原始由 Serhiy Storchaka 提供补丁。

  • bpo-24750: 将 IDLE 中的所有滚动条切换为 ttk 版本。必要时,添加最小测试以覆盖更改。

  • bpo-24759: IDLE 需要 tk 8.5 及 ttk 小部件的可用性。删除现在不再需要的 tk 版本测试和旧版本代码。添加 IDLE 语法着色器的测试。

  • bpo-27239: idlelib.macosx.isXyzTk 函数按需初始化。

  • bpo-27262: 将 Aqua 解绑代码(启用上下文菜单)移至 macosx。

  • bpo-24759: 在 idlelib.idle_test.__init__ 中明确表示该目录是 test.test_idle 的私有实现和维护者的工具。

  • bpo-27196: 在运行 IDLE 测试时停止 'ThemeChanged' 警告。这些警告在其他警告被 #20567 抑制后仍然存在。将 Serhiy Storchaka 的 update_idletasks 解决方案应用于四个测试文件。在 idle_test/README.txt 中记录这一额外建议。

  • bpo-20567: 修改 idle_test/README.txt,提供避免测试中 tk 警告信息的建议。将建议应用于几个 IDLE 测试。

  • bpo-24225: 使用新文件名和事件处理程序更新 idlelib/README.txt。

  • bpo-27156: 移除 IDLE 未使用的过时代码。

  • bpo-27117: 使颜色器 htest 和 turtledemo 支持深色主题。将配置文本小部件颜色的代码移至新函数。

  • bpo-24225: 重命名许多 idlelib/*.pyidle_test/test_*.py 文件。编辑文件,当旧名称引用模块而非其包含的类时,用新名称替换旧名称。更多信息见问题和 IDLE 在 3.6 中的新功能部分。

  • bpo-26673: 当 tk 报告字体大小为 0 时,更改为大小 10。Linux 上的此类字体阻止了配置对话框的打开。

  • bpo-21939: 添加 IDLE 的渗滤器测试。原始由 Saimadhav Heblikar 提供补丁。

  • bpo-21676: 添加 IDLE 的替换对话框测试。原始由 Saimadhav Heblikar 提供补丁。

  • bpo-18410: 添加 IDLE 的搜索对话框测试。原始由 Westley Martínez 提供补丁。

  • bpo-21703: 添加撤销委托器的测试。补丁主要由 Saimadhav Heblikar 提供。

  • bpo-27044: 添加ConfigDialog.remove_var_callbacks以防止内存泄漏。

  • bpo-23977: 在test_delegator中添加更多断言。

文档

  • bpo-16484: 将默认的PYTHONDOCS URL更改为"https:",并修复结果链接以使用小写。由Sean Rodman提供补丁,测试由Kaushik Nadikuditi进行。

  • bpo-24136: 文档化新的 PEP 448 解包语法(3.5版本)。

  • bpo-22558: 将剩余的文档链接添加到Python编码模块的源代码中。由Yoni Lavi提供补丁。

测试

  • bpo-25285: 当使用-j1命令行选项时,regrtest现在使用子进程:每个测试文件在一个新的子进程中运行。之前,-j1选项被忽略。

  • bpo-25285: Tools/buildbot/test.bat脚本现在默认使用-j1来在每个新的子进程中运行测试文件。

Windows

构建

  • bpo-27229: 修复树内构建的交叉编译pgen规则。由Xavier de Gaye提供补丁。

  • bpo-26930: 更新OS X 10.5+ 32位仅安装程序以构建并与OpenSSL 1.0.2h链接。

C API

  • bpo-27186: 添加PyOS_FSPath()函数(PEP 519 的一部分)。

  • bpo-26282: PyArg_ParseTupleAndKeywords()现在支持仅位置参数。

工具/示例

  • bpo-26282: Argument Clinic现在支持在同一函数中的仅位置和关键字参数。

Python 3.6.0 alpha 1

发布日期: 2016-05-16

安全性

  • bpo-26657: 修复Windows上http.server的目录遍历漏洞。这修复了在3.3.4rc1和3.4.0rc1中引入的回归问题。基于Philipp Hagemeister的补丁。

  • bpo-26313: 如果windows证书存储为空,ssl.py _load_windows_store_certs失败。由Baji提供补丁。

  • bpo-25939: 在Windows上以只读方式打开证书存储于ssl.enum_certificates中。

核心与内置函数

  • bpo-20041: 修复当frame.f_trace被设置为None时的TypeError。由Xavier de Gaye提供补丁。

  • bpo-26168: 修复了在使用 "N" 格式化单元时 Py_BuildValue() 失败可能导致的内存泄漏问题。

  • bpo-26991: 修复了创建带有注解的函数时可能出现的内存泄漏问题。

  • bpo-27039: 修复了 bytearray.remove() 对于大于127的值的处理。基于 Joe Jevnik 的补丁。

  • bpo-23640: int.from_bytes() 不再绕过子类的构造函数。

  • bpo-27005: 优化了 float.fromhex() 类方法对于精确浮点数的处理。现在速度提高了2倍。

  • bpo-18531: 单一的可变关键字参数如果是字典子类,将不再原封不动地传递给C定义的函数。现在会被转换为确切的字典。

  • bpo-26811: gc.get_objects() 不再包含带有 NULL 指针的损坏元组。

  • bpo-20120: 使用 RawConfigParser 来解析 .pypirc 文件,移除了无意中随着迁移到 Python 3 而添加的插值支持。现在的行为不会再在 .pypirc 文件中进行任何插值,与 Python 2.7 和 Setuptools 19.0 的行为一致。

  • bpo-26249: PyMem_Malloc() 域(PYMEM_DOMAIN_MEM)的内存函数现在使用 pymalloc allocator 而非系统的 malloc()。应用程序在不持有 GIL 的情况下调用 PyMem_Malloc() 现在可能会崩溃:使用 PYTHONMALLOC=debug 环境变量来验证你的应用程序中内存分配器的使用情况。

  • bpo-26802: 优化了仅使用解包的函数调用,如 func(*tuple) (没有其他位置参数,没有关键字参数) :避免复制元组。补丁由 Joe Jevnik 编写。

  • bpo-26659: 使内置的 slice 类型支持循环回收。

  • bpo-26718: super.__init__ 如果被多次调用,将不再泄露内存。注意:不推荐直接调用 super.__init__!

  • bpo-27138: 修正了 FileFinder.find_spec() 的文档注释。

  • bpo-27147: 在 importlib 文档中提到了 PEP 420

  • bpo-25339: 现在在设置 stdin 和 stdout 的错误处理器时,PYTHONIOENCODING 优先于 locale。

  • bpo-26494: 修复了在迭代耗尽迭代器时的崩溃问题。受影响的类包括通用序列迭代器、str、bytes、bytearray、list、tuple、set、frozenset、dict、OrderedDict的迭代器,相应的视图以及os.scandir()迭代器。

  • bpo-26574: 优化了 bytes.replace(b'', b'.')bytearray.replace(b'', b'.')。补丁由Josh Snider编写。

  • bpo-26581: 如果在Python源代码文件中一行内多次指定编码声明,只有第一个会被考虑。

  • bpo-19711: 为重新加载命名空间包添加了测试。

  • bpo-21099: 将适用的importlib测试切换到使用 PEP 451 API。

  • bpo-26563: 如果调用 PyMem_Malloc() 系列函数时没有持有GIL,Python内存分配器的调试钩子现在会引发致命错误。

  • bpo-26564: 在错误时,Python内存分配器的调试钩子现在使用 tracemalloc 模块来获取内存块分配时的回溯。

  • bpo-26558: Python内存分配器 PyObject_Malloc() 的调试钩子现在可以检测到在没有持有GIL时调用函数的情况。

  • bpo-26516: 添加了 PYTHONMALLOC 环境变量来设置Python内存分配器和/或安装调试钩子。

  • bpo-26516: PyMem_SetupDebugHooks() 函数现在也可以在发布模式下编译的Python中使用。

  • bpo-26516: PYTHONMALLOCSTATS 环境变量现在也可以在发布模式下编译的Python中使用。如果设置为空字符串,则现在无效。

  • bpo-26516: 在调试模式下,当Python配置为不使用pymalloc时,调试钩子现在也会安装在Python内存分配器上。

  • bpo-26464: 修复了当字符串为ASCII且第一个替换移除了字符,但下一个替换使用非ASCII字符或长度超过1个字符的字符串时str.translate()的问题。这是在Python 3.5.0中引入的回归问题。

  • bpo-22836: 确保即使格式化产生次要错误时,PyErr_Display()和PyErr_WriteUnraisable()产生的异常报告也是合理的。这影响sys.__excepthook__()产生的报告以及__del__()引发异常时的情况。

  • bpo-26302: 修正行为,拒绝将逗号作为cookie名称的合法字符。

  • bpo-26136: 当生成器引发StopIteration时,将警告从PendingDeprecationWarning升级为DeprecationWarning。由Anish Shah提供补丁。

  • bpo-26204: 编译器现在忽略所有常量语句:bytes、str、int、float、complex、名称常量(None、False、True)、Ellipsis和ast.Constant;不仅仅是str和int。例如,``1.0``现在在``def f(): 1.0``中被忽略。

  • bpo-4806: 在函数调用中使用星号(*)解包时,避免掩盖原始的TypeError异常。基于Hagen Fürstenau和Daniel Urban的补丁。

  • bpo-26146: 添加一种新的AST节点:ast.Constant。它可以被外部AST优化器使用,但编译器不直接发出这样的节点。

  • bpo-23601: 通过使用Python的小对象分配器,加速了字典键对象的分配。(由Julian Taylor贡献。)

  • bpo-18018: 如果尝试在没有已知父包的情况下进行相对导入,导入将引发ImportError而不是SystemError。

  • bpo-25843: 编译代码时,如果常量相等但类型不同,则不合并它们。例如,f1, f2 = lambda: 1, lambda: 1.0``现在被正确编译为两个不同的函数:``f1()``返回 ``1 (int) 和``f2()``返回 1.0 (float) ,即使 11.0 相等。

  • bpo-26107: 代码对象的 co_lnotab 属性的格式更改以支持负行号增量。

  • bpo-26154: 新增一个私有函数_PyThreadState_UncheckedGet()用于获取当前Python线程状态,但如果其为NULL时不发出致命错误。必须使用此新函数而非直接访问_PyThreadState_Current变量。自Python 3.5.1起,该变量不再暴露以隐藏原子C类型的精确实现,避免编译器问题。

  • bpo-25791: 如果__package__ != __spec__.parent或既未定义__package__也未定义__spec__,则引发ImportWarning。

  • bpo-22995: [更新] 由于在基于Cython的项目中观察到的回归问题,注释掉_PyObject_GetState()中的一个可pickle性测试。

  • bpo-25961: 类型名称中不允许空字符。

  • bpo-25973: 修复当无效的非局部语句绑定一个以两个下划线开头的名称时导致的段错误。

  • bpo-22995: 不是列表或字典的子类且未实现任何与pickle相关的方法(__reduce__、__reduce_ex__、__getnewargs__、__getnewargs_ex__或__getstate__)的扩展类型实例,包括memoryview,将不能再被pickle。

  • bpo-20440: 大量替换不安全的属性设置代码为特殊宏Py_SETREF。

  • bpo-25766: 特殊方法__bytes__()现在在str子类中工作。

  • bpo-25421: 内置类型的__sizeof__方法现在使用动态基本大小。这使得sys.getsize()能够正确工作于定义了__slots__的子类。

  • bpo-25709: 修复了原地字符串连接和utf-8缓存的问题。

  • bpo-5319: 新增Py_FinalizeEx() API,允许Python在刷新缓冲流失败时设置退出状态为120。

  • bpo-25485: telnetlib.Telnet现在是一个上下文管理器。

  • bpo-24097: 修复了如果槽名称在__getattr__内部被释放时object.__reduce__()中的崩溃问题。

  • bpo-24731: 修复了在将具有特殊方法 __bytes__、__trunc__ 和 __float__ 的对象转换为 bytes、int 和 float 的子类时,返回这些子类实例导致的崩溃问题。

  • bpo-25630: 修复了在接受文件系统路径的函数中,参数解析时可能发生的段错误。

  • bpo-23564: 修复了 _posixsubprocess 内部关于如何将 fds_to_pass 传递给子进程的部分损坏的健全性检查。由于 subprocess.py 已经避免了这个问题,这个错误没有实际影响。

  • bpo-25388: 修复了在处理包含空字节的不可解码源代码时,分词器崩溃的问题。

  • bpo-25462: 在 OrderedDict 的 C 实现中,大多数操作现在只计算一次键的哈希值。

  • bpo-22995: __reduce__ 和 __reduce_ex__ 的默认实现现在拒绝那些未定义 __new__ 的内置类型。

  • bpo-24802: 当 int()、float()、compile()、exec() 和 eval() 传递类似字节的对象时,避免缓冲区过度读取。这些对象不一定以空字节终止,但函数假设它们是。

  • bpo-25555: 修复解析器和 AST:当从 Python 对象编译 AST 时,填充 "arg" 节点的 lineno 和 col_offset。

  • bpo-24726: 修复了 OrderedDict 在直接调用 dict 方法后被 repr() 时崩溃和泄漏 NULL 的问题。

  • bpo-25449: 现在在 C 实现和 Python 实现中,迭代具有不稳定哈希键的 OrderedDict 都会引发 KeyError。

  • bpo-25395: 修复了在垃圾回收高度嵌套的 OrderedDict 结构时崩溃的问题。

  • bpo-25395: 优化了 bytes.fromhex() 和 bytearray.fromhex():它们现在快了 2 到 3.5 倍。

  • bpo-25399: 使用新的私有 _PyBytesWriter API 优化了 bytearray % args 操作。格式化现在快了 2.5 到 5 倍。

  • bpo-25274: sys.setrecursionlimit() 现在如果新的递归限制根据当前递归深度太低会引发 RecursionError。同时修改“低水位标记”公式使其单调。这个标记用于决定何时重置线程状态的溢出标志。

  • bpo-24402: 修复 input() 在 sys.stdout.fileno() 失败时提示重定向的 stdout。

  • bpo-25349: 使用新的私有 _PyBytesWriter API 优化 bytes % args。格式化现在快达2倍。

  • bpo-24806: 防止不允许被继承的内置类型通过多重继承被继承。

  • bpo-25301: UTF-8 解码器现在对于错误处理程序 ignorereplacesurrogateescape 快达15倍。

  • bpo-24848: 修复了UTF-7解码畸形数据时的一些错误。

  • bpo-25267: UTF-8 编码器现在对于错误处理程序 ignorereplacesurrogateescapesurrogatepass 快达75倍。补丁与Serhiy Storchaka共同编写。

  • bpo-25280: 在详细模式(-v)下发出的导入跟踪消息不再格式化两次。

  • bpo-25227: 使用 surrogateescape 错误处理程序优化ASCII和latin1编码器:编码器现在快达3倍。初始补丁由Serhiy Storchaka编写。

  • bpo-25003: 在Solaris 11.3或更新版本上,os.urandom() 现在使用 getrandom() 函数而不是 getentropy() 函数。getentropy() 函数为了生成非常高质量的熵是阻塞的,os.urandom() 不需要如此高质量的熵。

  • bpo-9232: 修改Python的语法以允许函数声明的参数列表中的尾随逗号。例如,“def f(*, a = 3,): pass”现在是合法的。补丁来自Mark Dickinson。

  • bpo-24965: 实现 PEP 498 "字面字符串插值"。这允许你在f-字符串中嵌入表达式,这些表达式在运行时被转换为普通字符串。给定x=3,那么 f'value={x}' == 'value=3'。由Eric V. Smith提供补丁。

  • bpo-26478: 修复在使用二进制运算符与字典视图和元组时的语义错误。

  • bpo-26171: 修复zipimporter.get_data()中可能的整数溢出和堆损坏问题。

  • bpo-25660: 修复REPL中使用readline时的TAB键行为。

  • bpo-26288: 优化PyLong_AsDouble。

  • bpo-26289: 优化单数字长整数的地板除和模除运算。微基准测试显示有2-2.5倍的提升。内置的'divmod'函数现在也快了约10%。(另见:bpo-26315

  • bpo-25887: 当协程对象被多次等待时,抛出RuntimeError。

  • bpo-27057: 修复Android上的os.set_inheritable(),ioctl()被SELinux阻止并因EACCESS失败。该函数现在回退到使用fcntl()。补丁由Michał Bednarski编写。

  • bpo-27014: 修复使用typing.py时的无限递归问题。感谢Kalle Tuure!

  • bpo-27031: 移除了Tkinter小部件类中的虚拟方法:tk_menuBar()和tk_bindForTraversal()。

  • bpo-14132: 修复urllib.request在目标仅有查询字符串时的重定向处理。原始修复由Ján Janech提供。

  • bpo-17214: "urllib.request"模块现在对重定向目标URL中的非ASCII字节进行百分比编码。一些服务器发送含有非ASCII字节的Location头字段,但"http.client"要求请求目标必须可ASCII编码,否则会抛出UnicodeEncodeError。基于Christian Heimes的补丁。

  • bpo-27033: smtpd.SMTPChannel和smtpd.SMTPServer构造函数的decode_data参数的默认值更改为False。

  • bpo-27034: 移除了已弃用的类asynchat.fifo。

  • bpo-26870: 添加了readline.set_auto_history(),可以阻止条目自动添加到历史列表中。基于Tyler Crompton的补丁。

  • bpo-26039: zipfile.ZipFile.open()现在可用于向ZIP文件中写入数据,以及提取数据。由Thomas Kluyver提供补丁。

  • bpo-26892: 在urllib.request.HTTPHandler中尊重debuglevel标志。补丁由Chi Hsuan Yen贡献。

  • bpo-22274: 在subprocess模块中,即使stdout未被重定向,也允许将stderr重定向到stdout。补丁由Akira Li提供。

  • bpo-26807: mock_open 'files' 在文件末尾的readline操作不再报错。补丁由Yolanda Robla提供。

  • bpo-25745: 修复了curses panel析构函数中userptr的泄漏问题。

  • bpo-26977: 在statistics.pvariance中移除了不必要且被忽略的平方和辅助函数调用。

  • bpo-26002: 在statistics.median中使用二分查找替代线性搜索。由Upendra Kuma提供补丁。

  • bpo-25974: 在统计模块中利用了新的Decimal.as_integer_ratio()方法。补丁由Stefan Krah提供。

  • bpo-26996: 添加了如 PEP 506 所述的secrets模块。

  • bpo-26881: modulefinder模块现在支持扩展的操作码参数。

  • bpo-23815: 修复了直接创建_tkinter和curses.panel模块中类型实例相关的崩溃问题。

  • bpo-17765: weakref.ref()不再默默忽略关键字参数。由Georg Brandl提供补丁。

  • bpo-26873: xmlrpc现在会在遇到不支持的类型标签时抛出ResponseError,而不是默默返回错误结果。

  • bpo-26915: collections ABCs中的__contains__方法现在在检查相等性之前先检查标识。这更好地匹配了具体类的行为,允许合理处理NaNs,并使容器不变量的推理更加容易。

  • bpo-26711: 修复了plistlib.Data与其他类型的比较问题。

  • bpo-24114: 修复了 ctypes.util 中一个未初始化的变量问题。此bug仅在SunOS上,当ctypes实现搜索 crle 程序时出现。由Xiang Zhang提供补丁。在SunOS上由Kees Bos测试。

  • bpo-26864: 在urllib.request中,将代理绕过主机检查对no_proxy的匹配改为不区分大小写,并且不匹配那些恰好以后缀形式包含被绕过主机名的无关主机名。由Xiang Zhang提供补丁。

  • bpo-24902: 在http.server启动时打印服务器URL。初始由Felix Kaiser提供补丁。

  • bpo-25788: fileinput.hook_encoded() 现在支持传递一个 "errors" 参数给 open。原始补丁由 Joseph Hackman 提供。

  • bpo-26634: recursive_repr() 现在设置包装器的 __qualname__。由 Xiang Zhang 提供补丁。

  • bpo-26804: urllib.request 现在会优先选择小写的代理环境变量,而不是大写或混合大小写的。补丁由 Hans-Peter Jansen 贡献。

  • bpo-26837: assertSequenceEqual() 现在能正确输出非字符串化的不同项(如 -b 模式下的字节)。这影响了 assertListEqual() 和 assertTupleEqual()。

  • bpo-26041: 从 platform.dist() 和 platform.linux_distribution() 的弃用消息中移除了 "将在 Python 3.7 中移除"。由 Kumaripaba Miyurusara Athukorala 提供补丁。

  • bpo-26822: itemgetter、attrgetter 和 methodcaller 对象不再静默忽略关键字参数。

  • bpo-26733: 反汇编一个类现在会反汇编类和静态方法。由 Xiang Zhang 提供补丁。

  • bpo-26801: 修复 shutil.get_terminal_size() 中的错误处理,捕获 AttributeError 而不是 NameError。补丁由 Emanuel Barry 编写。

  • bpo-24838: tarfile 的 ustar 和 gnu 格式现在能正确计算多字节字符编码(如 utf-8)的名称和链接字段限制。

  • bpo-26717: 停止用 UTF-8 编码拉丁-1 化的 WSGI 路径。由 Anthony Sottile 提供补丁。

  • bpo-26782: 在 Windows 上向 subprocess.__all__ 添加 STARTUPINFO。

  • bpo-26404: 向 socketserver 添加上下文管理器。由 Aviv Palivoda 提供补丁。

  • bpo-26735: 修复 Solaris 11.3 及更新版本上 os.urandom() 当读取超过 1,024 字节时的问题:多次调用 getrandom(),每次调用限制为 1024 字节。

  • bpo-26585: 移除 http.server._quote_html() 并使用 html.escape(quote=False)。由 Xiang Zhang 提供补丁。

  • bpo-26685: 如果关闭套接字失败,则引发 OSError。

  • bpo-16329: 向 mimetypes.types_map 添加 .webm。由 Giampaolo Rodola' 提供补丁。

  • bpo-13952: 向 mimetypes.types_map 添加 .csv。由 Geoff Wilson 提供补丁。

  • bpo-26587: 站点模块现在允许 .pth 文件指定要添加到 sys.path 的文件(例如 zip 文件)。

  • bpo-25609: 引入了 contextlib.AbstractContextManager 和 typing.ContextManager。

  • bpo-26709: 修复了加载二进制 PLists 时的 Y2038 问题。

  • bpo-23735: 通过安装我们自己的 SIGWINCH 处理程序,处理 Readline 6.3+ 的终端调整大小。由 Eric Price 提供补丁。

  • bpo-25951: 将 SSLSocket.sendall() 更改为返回 None,如明文套接字对象文档中明确所述。补丁由 Aviv Palivoda 提供。

  • bpo-26586: 在 http.server 中,如果头字段太多无法解析,则响应 "413 请求头字段太大",而不是终止连接并引发未处理的异常。由 Xiang Zhang 提供补丁。

  • bpo-26676: 将缺失的 XMLPullParser 添加到 ElementTree.__all__。

  • bpo-22854: 将 BufferedReader.writable() 和 BufferedWriter.readable() 更改为总是返回 False。

  • bpo-26492: array.array 的耗尽迭代器现在与其他可变序列的迭代器行为一致:即使迭代的数组被扩展,它也会保持耗尽状态。

  • bpo-26641: doctest.DocFileTest 和 doctest.testfile() 现在支持 package 参数用于包(模块分割到多个目录)。

  • bpo-25195: 修复了 mock.MagicMock 中的一个回归问题。_Call 是 tuple 的子类(changeset 3603bae63c13 仅适用于类),所以我们需要自己实现 __ne__。由 Andrew Plummer 提供补丁。

  • bpo-26644: 当向 SSLSocket.recv() 或 read() 传递负长度时,引发 ValueError 而不是 SystemError。

  • bpo-23804: 修复 SSL recv(0) 和 read(0) 方法返回零字节而不是最多 1024 字节的问题。

  • bpo-26616: 修复了 datetime.astimezone() 方法中的一个错误。

  • bpo-26637: 现在,如果在 Python 关闭过程中尝试 __import__()sys.path 已经被清除(设置为 None),importlib 模块会发出 ImportError 而不是 TypeError

  • bpo-21925: warnings.formatwarning() 现在在调用 linecache.getline()tracemalloc.get_object_traceback() 时会捕获异常,以便能够记录在Python关闭过程中晚期发出的 ResourceWarning

  • bpo-23848: 在Windows上,faulthandler.enable() 现在也会安装一个异常处理器,以在任何Windows异常(不仅仅是UNIX信号(SIGSEGV、SIGFPE、SIGABRT))上转储所有Python线程的跟踪信息。

  • bpo-26530: 添加C函数 _PyTraceMalloc_Track()_PyTraceMalloc_Untrack() 来使用 tracemalloc 模块跟踪内存块。添加 _PyTraceMalloc_GetTraceback() 来获取对象的跟踪信息。

  • bpo-26588: _tracemalloc 现在支持跟踪多个地址空间(域)的内存分配。

  • bpo-24266: 在编译时使用Readline 7的情况下,Readline历史搜索期间的Ctrl+C现在会取消搜索模式。

  • bpo-26590: 为_socket.socket类型实现了一个安全的终结器。它现在会释放GIL来关闭套接字。

  • bpo-18787: 如果用户没有权限,spwd.getspnam() 现在会引发一个PermissionError。

  • bpo-26560: 避免BaseHandler.start_response中潜在的ValueError。初始由Peter Inglesby提供补丁。

  • bpo-26567: 添加一个新函数 PyErr_ResourceWarning() 来传递被销毁的对象。向 warnings.WarningMessage 添加一个 source 属性。添加warnings._showwarnmsg(),它使用tracemalloc来获取源对象分配时的跟踪信息。

  • bpo-26569: 修复 pyclbr.readmodule()pyclbr.readmodule_ex() 以支持导入包。

  • bpo-26499: 在HTTPResponse.readline()和read1()中考虑剩余的Content-Length。基于Silent Ghost的补丁。同时记录HTTPResponse现在支持这些方法。

  • bpo-25320: 处理unittest发现扫描的目录中的套接字。补丁来自Victor van den Elzen。

  • bpo-16181: 现在如果年份高于datetime.MAXYEAR,cookiejar.http2time()会返回None。

  • bpo-26513: 修复了平台模块对Windows Server的检测。

  • bpo-23718: 修复了在1月1日前的第0周解析时间的问题。原始由Tamás Bence Gedai提供补丁。

  • bpo-26323: 向unittest.mock添加了Mock.assert_called()和Mock.assert_called_once()方法。补丁由Amit Saha编写。

  • bpo-20589: 在Windows上调用Path.owner()和Path.group()现在会引发NotImplementedError而不是ImportError。

  • bpo-26177: 修复了Canvas和Scrollbar小部件的keys()方法。

  • bpo-15068: 消除了fileinput中过度的缓冲。bufsize参数现在已被弃用并被忽略。

  • bpo-19475: 向datetime的isoformat()方法添加了一个可选参数timespec,用于选择时间组件的精度。

  • bpo-2202: 修复了AbstractDigestAuthHandler.get_algorithm_impls中的UnboundLocalError。初始由Mathieu Dupuy提供补丁。

  • bpo-26167: 最小化了copy.copy()和copy.deepcopy()的开销。优化了bytearrays、NotImplemented、slices、短列表、元组、字典和集合的复制和深复制。

  • bpo-25718: 修复了当total为None时,对accumulate()迭代器的pickling和复制。

  • bpo-26475: 修复了带有(?x)标志的正则表达式的调试输出。

  • bpo-26482: 允许pickling递归的dequeues。

  • bpo-26335: 使mmap.write()像其他write方法一样返回写入的字节数。补丁由Jakub Stasiak提供。

  • bpo-26457: 修复了当结果前缀长度等于最大前缀长度时,IP网络类中的subnets()方法。基于Xiang Zhang的补丁。

  • bpo-26385: 如果NamedTemporaryFile()中的内部open()调用失败,则删除文件。由Silent Ghost提供补丁。

  • bpo-26402: 修复了XML-RPC客户端在服务器关闭持久连接时重试的问题。这是与3.5.0a4中的新http.client.RemoteDisconnected异常相关的回归问题。

  • bpo-25913: 在adobe=True时,base64.a85decode()中前导的 <~ 现在是可选的。由Swati Jaiswal提供补丁。

  • bpo-26186: 移除importlib.util.LazyLoader中的一个无效类型检查。

  • bpo-26367: 当指定了 level 但没有指定相应的包时,importlib.__import__()会像builtins.__import__()一样引发ImportError。

  • bpo-26309: 在"socketserver"模块中,当verify_request()返回false时,关闭请求(关闭连接的套接字)。由Aviv Palivoda提供补丁。

  • bpo-23430: 更改socketserver模块,只捕获源自Exception(而不是BaseException)的请求处理程序引发的异常。因此,SystemExit和KeyboardInterrupt不再触发handle_error()方法,现在将停止单线程服务器。

  • bpo-25995: os.walk()不再使用与树深度成比例的FDs。

  • bpo-25994: 为os.scandir()迭代器添加了close()方法和上下文管理器协议的支持。

  • bpo-23992: multiprocessing:使MapResult在异常时不快速失败。

  • bpo-26243: 支持zlib.compress()的关键字参数。由Aviv Palivoda提供补丁。

  • bpo-26117: os.scandir()迭代器现在不仅在迭代完成时关闭文件描述符,而且在因错误失败时也关闭。

  • bpo-25949: OrderedDict实例的__dict__现在只在需要时创建。

  • bpo-25911: 恢复了在Windows上os.walk()中对字节路径的支持。

  • bpo-26045: 在使用http.client发布非Latin-1字符串时,向错误消息添加UTF-8建议。

  • bpo-26039: 添加了zipfile.ZipInfo.from_file()和zipinfo.ZipInfo.is_dir()。由Thomas Kluyver提供补丁。

  • bpo-12923: 即使有异常也重置FancyURLopener的重定向计数器。基于Brian Brazil和Daniel Rocco的补丁。

  • bpo-25945: 修复了解除 pickle functools.partial 对象时状态错误导致的崩溃问题。修复了 functools.partial 构造函数失败时的内存泄漏。functools.partial 的 "args" 和 "keywords" 属性现在总是分别具有 tuple 和 dict 类型。

  • bpo-26202: copy.deepcopy() 现在能正确复制具有非原子属性的 range() 对象。

  • bpo-23076: Path.glob() 现在在调用无效模式时会引发 ValueError。补丁由 Thomas Nyberg 提供。

  • bpo-19883: 修复了 zipimport 中可能的整数溢出问题。

  • bpo-26227: 在 Windows 上,socket 模块的 getnameinfo()、gethostbyaddr() 和 gethostbyname_ex() 函数现在从 ANSI 代码页而非 UTF-8 解码主机名。

  • bpo-26099: site 模块现在会在 sitecustomize 模块可以导入但执行该模块时引发 ImportError 时,向 stderr 写入错误信息。对 usercustomize 做了相同的更改。

  • bpo-26147: xmlrpc 现在可以处理无法用所使用的非 UTF-8 编码编码的字符串。

  • bpo-25935: 垃圾回收器现在可以打破 OrderedDict 的引用循环。

  • bpo-16620: 修复了 msilib.Directory.glob() 中的 AttributeError。

  • bpo-26013: 增加了对旧 Python 3 版本(3.4.3 及以下)创建的损坏协议 2 pickle 的兼容性。

  • bpo-26129: 废弃了在 grp.getgrgid() 中接受非整数。

  • bpo-25850: 默认使用交叉编译为 64 位 Windows。

  • bpo-25822: 向 urllib.parse 结果的字段添加了文档字符串。由 Swati Jaiswal 提供补丁。

  • bpo-22642: 将 trace 模块的选项解析机制转换为 argparse。由 SilentGhost 提供补丁。

  • bpo-24705: 修复了 sysconfig._parse_makefile 不扩展出现在 $() 变量之前的 ${} 变量的问题。

  • bpo-26069: 移除了 trace 模块中已弃用的 API。

  • bpo-22138: 修复了 mock.patch 在修补描述符时的行为。修补后恢复原始值。由 Sean McCully 提供补丁。

  • bpo-25672: 在 ssl 模块中,如果安全的话,启用 SSL_MODE_RELEASE_BUFFERS 模式选项。

  • bpo-26012: 在 pathlib.Path.[r]glob() 中不对符号链接进行 ** 模式的遍历。

  • bpo-24120: 在使用 pathlib.Path.[r]glob() 遍历树时忽略 PermissionError。由 Ulrich Petri 提供补丁。

  • bpo-21815: 在 imap 响应的数据部分接受 ] 字符,以处理由 gmail 等服务器接受和产生的带有方括号的标志。

  • bpo-25447: 如果 sys.stdin 没有缓冲区属性,fileinput 现在会直接使用它(恢复了向后兼容性)。

  • bpo-25971: 通过 2 倍的速度优化了从浮点数创建 Fractions,通过 3 倍的速度优化了从 Decimals 创建 Fractions。

  • bpo-25802: 将 importlib.abc.Loader.load_module() 的剩余实现文档化为已弃用。

  • bpo-25928: 添加了 Decimal.as_integer_ratio()。

  • bpo-25447: 复制 lru_cache() 包装器对象现在总是有效,与被包装对象的类型无关(通过返回未更改的原始对象)。

  • bpo-25768: 使 compileall 中的函数返回布尔值而不是整数,并为返回值添加了适当的文档和测试。

  • bpo-24103: 修复了 ElementTree.XMLPullParser 中可能的使用后释放问题。

  • bpo-25860: os.fwalk() 在发生错误时不再跳过剩余的目录。原始由 Samson Lee 提供补丁。

  • bpo-25914: 修复并简化了 OrderedDict.__sizeof__。

  • bpo-25869: 优化了 ElementTree 的深拷贝;现在速度快了 20 倍。

  • bpo-25873: 优化了 ElementTree 的迭代。迭代元素 Element.iter() 现在快了 40%,迭代文本 Element.itertext() 现在快了最多 2.5 倍。

  • bpo-25902: 修复了 ElementTree 迭代中的各种引用计数问题。

  • bpo-22227: TarFile 迭代器使用生成器重新实现。这个实现比使用类更简单。

  • bpo-25638: 优化了 ElementTree.iterparse();现在快了 2 倍。优化了 ElementTree 解析;现在快了 10%。

  • bpo-25761: 改进了对损坏的 pickle 数据中错误的检测。

  • bpo-25717: 恢复在打开文件时容忍大多数fstat()错误的先前行为。这是3.5a1版本中的一个回归问题,阻止了匿名临时文件在特殊情况下的工作。

  • bpo-24903: 修复了当指定'-d'时compileall接受的参数数量的回归问题。对参数数量的检查已被完全删除,因为它从未正确工作过。

  • bpo-25764: 在subprocess模块中,当使用preexec_fn时,保留由fork()失败引起的任何异常。

  • bpo-25771: 当'package'未指定但必要时,调整importlib.util.resolve_name()的异常消息。

  • bpo-6478: 在更改时区后,_strptime的正则表达式缓存现在会被time.tzset()重置。

  • bpo-14285: 当使用"python -m package"选项执行包且包初始化失败时,现在会报告正确的回溯。"runpy"模块现在让包初始化的异常传递回调用者,而不是引发ImportError。

  • bpo-19771: 同样在runpy和"-m"选项中,如果包甚至无法初始化(例如由于坏的 *.pyc 文件),则省略不相关的消息"...是一个包,不能直接执行"。

  • bpo-25177: 修复了非常小和非常大的数字的平均值问题。作为副作用,statistics.mean和statistics.variance应该会显著更快。

  • bpo-25718: 修复了复制状态为布尔值false的对象的问题。

  • bpo-10131: 修复了minidom文档的深拷贝问题。基于Marian Ganisin的补丁。

  • bpo-7990: ElementTree.Element上的dir()现在列出属性:"tag", "text", "tail"和"attrib"。原始由Santoso Wijaya提供补丁。

  • bpo-25725: 修复了在解包含元组指令的无效数据时pickle.loads()中的引用泄漏问题。

  • bpo-25663: 在Readline completer中,避免列出重复的全局名称,并在搜索内置名称之前搜索全局命名空间。

  • bpo-25688: 修复了ElementTree.iterparse()在引发错误时的文件泄露问题。

  • bpo-23914: 修复了解pickle数据损坏时unpickler引发的SystemError。

  • bpo-25691: 修复了删除ElementTree.Element属性时的崩溃问题。

  • bpo-25624: ZipFile现在总是为目录条目写入ZIP_STORED头。由王定远提供补丁。

  • bpo-25626: 修改了三个zlib函数以接受适合Py_ssize_t的大小,但在内部将这些大小限制为UINT_MAX。这解决了3.5版本中GzipFile.read()无法读取大于2或4 GiB块的回归问题。此更改影响zlib.Decompress.decompress()的max_length参数、zlib.decompress()的bufsize参数和zlib.Decompress.flush()的length参数。

  • bpo-25583: 当操作系统优先考虑如EACCES这样的错误而不是EEXIST时,避免os.makedirs(exist_ok=True)引发错误。

  • bpo-25593: 修改了asyncio中EventLoop.stop()的语义。

  • bpo-6973: 当我们知道一个subprocess.Popen进程已经死亡时,不允许send_signal()、terminate()或kill()方法执行任何操作,因为它们可能会信号到不同的进程。

  • bpo-23883: 添加了缺失的API到__all__以匹配以下模块的文档API:calendar、csv、enum、fileinput、ftplib、logging、optparse、tarfile、threading和wave。还添加了一个test.support.check__all__()辅助函数。由Jacek Kołodziej、Mauro S. M. Rodrigues和Joel Taddei提供补丁。

  • bpo-25590: 在Readline completer中,每个属性只调用一次getattr()。同时完成如属性和槽这样的属性名称,这些属性由dir()列出但尚未在实例上创建。

  • bpo-25498: 修复了在垃圾回收由包装memoryview创建的ctypes对象时的崩溃问题。这是3.5a1中的一个回归。基于Eryksun的补丁。

  • bpo-25584: 将"escape"添加到glob模块的__all__列表中。

  • bpo-25584: 修复了以 ** 开头的递归glob()模式。

  • bpo-25446: 修复 smtplib 的 AUTH LOGIN 支持中的回归问题。

  • bpo-18010: 修复 pydoc web 服务器的模块搜索功能,以处理导入包时的异常。

  • bpo-25554: 消除了正则表达式解析中的循环引用。

  • bpo-18973: 日历模块的命令行界面现在使用 argparse 而不是 optparse。

  • bpo-25510: 如果 FileInput 以二进制模式打开,fileinput.FileInput.readline() 现在在末尾返回 b'' 而不是 ''。由 Ryosuke Ito 提供补丁。

  • bpo-25503: 修复了 inspect.getdoc() 对于属性的继承文档字符串的处理。原始由 John Mark Vandenberg 提供补丁。

  • bpo-25515: 在 uuid.uuid4 中始终使用 os.urandom 作为随机性来源。

  • bpo-21827: 修复了 textwrap.dedent() 当最大公共空白是最小前导空白的子字符串时的情况。基于 Robert Li 的补丁。

  • bpo-25447: lru_cache() 包装器对象现在可以被复制和 pickle(通过返回未更改的原始对象)。

  • bpo-25390: typing: 不因 Union[str, Pattern] 而崩溃。

  • bpo-25441: asyncio: 当套接字关闭时从 drain() 引发错误。

  • bpo-25410: 清理并修复了 OrderedDict 的 C 实现中的小错误。

  • bpo-25411: 通过更好地使用 email 包,改进了 SMTPHandler 中的 Unicode 支持。感谢用户 simon04 的补丁。

  • 将 imp 模块从 PendingDeprecationWarning 移动到 DeprecationWarning。

  • bpo-25407: 移除了关于 formatter 模块在 Python 3.6 中被移除的提及。

  • bpo-25406: 修复了 OrderedDict.move_to_end() 的 C 实现中的一个错误,该错误导致在将几个项目移动到有序字典的开头后在迭代中出现分段错误或挂起。

  • bpo-25382: pickletools.dis() 现在为 MEMOIZE 操作码输出隐式备忘录索引。

  • bpo-25357: 向 binascii.b2a_base64() 添加了一个可选的新行参数。base64.b64encode() 使用它来避免内存拷贝。

  • bpo-24164: 需要使用关键字参数调用 __new__ 的对象,现在可以使用低于协议版本4的pickle协议进行序列化。

  • bpo-25364: zipfile 现在可以在禁用线程的构建中工作。

  • bpo-25328: 如果 decode_data 和 enable_SMTPUTF8 都被设置为 true,smtpd 的 SMTPChannel 现在会正确地引发 ValueError。

  • bpo-16099: RobotFileParser 现在支持 Crawl-delay 和 Request-rate 扩展。由 Nikolay Bogoychev 提供补丁。

  • bpo-25316: 当未安装 MSVC 时,distutils 会引发 OSError 而不是 DistutilsPlatformError。

  • bpo-25380: 修复了 pickletools.opcodes 中 STACK_GLOBAL 操作码的协议。

  • bpo-23972: 更新了 asyncio 的数据报创建方法,允许在绑定套接字之前设置 reuseport 和 reuseaddr 套接字选项。与现有的 asyncio create_server 方法类似,如果操作系统是 'posix'(除非平台是 Cygwin),数据报套接字的 reuseaddr 选项默认为 True。由 Chris Laws 提供补丁。

  • bpo-25304: 添加了 asyncio.run_coroutine_threadsafe()。这让你可以从另一个线程向循环提交一个协程,返回一个 concurrent.futures.Future。由 Vincent Michel 提供。

  • bpo-25232: 修复 CGIRequestHandler,使其在第一个问号 (?) 处而不是最后一个问号处将查询与 URL 分开。补丁来自 Xiang Zhang。

  • bpo-24657: 防止 CGIRequestHandler 像处理路径一样在 URL 的查询部分折叠斜杠。补丁来自 Xiang Zhang。

  • bpo-25287: 如果不支持 crypt.METHOD_CRYPT,则不要将其添加到 crypt.methods 中。检查是否支持,例如在 OpenBSD 上可能不支持。

  • bpo-23600: tzinfo.fromutc() 的默认实现在某些情况下返回了错误的结果。

  • bpo-25203: 失败的 readline.set_completer_delims() 不再使模块处于不一致状态。

  • bpo-25011: rlcompleter 现在会省略私有和特殊属性名称,除非前缀以下划线开头。

  • bpo-25209: rlcompleter 现在可以在完成的关键字后添加空格或冒号。

  • bpo-22241: timezone.utc 名称现在是简单的 'UTC',而不是 'UTC-00:00'。

  • bpo-23517: datetime.datetime 的 fromtimestamp() 和 utcfromtimestamp() 方法现在将微秒四舍五入到最近的偶数整数(ROUND_HALF_EVEN),如同 round(float),而不是向负无穷方向舍入(ROUND_FLOOR)。

  • bpo-23552: Timeit 现在在最佳和最差时间之间存在显著(4倍)差异时发出警告。补丁来自 Serhiy Storchaka。

  • bpo-24633: site-packages/README -> README.txt。

  • bpo-24879: help() 和 pydoc 现在可以按照命名元组字段定义的顺序而非字母顺序列出它们。排序由 _fields 属性(如果存在)决定。

  • bpo-24874: 提高 itertools.cycle() 的速度并使其 pickle 更加紧凑。

  • 修复了当第一个参数不是列表时 itertools.cycle.__setstate__() 的崩溃问题。

  • bpo-20059: urllib.parse 在所有无效端口上引发 ValueError。补丁来自 Martin Panter。

  • bpo-24360: 为无效标识符改进 argparse.Namespace() 的 __repr__。补丁来自 Matthias Bussonnier。

  • bpo-23426: distutils 中的 run_setup 被破坏。补丁来自 Alexander Belopolsky。

  • bpo-13938: 2to3 将 StringTypes 转换为元组。补丁来自 Mark Hammond。

  • bpo-2091: open() 接受包含 '+' 的 'U' 模式字符串,但 'U' 只能与 'r' 一起使用。补丁来自 Jeff Balogh 和 John O'Connor。

  • bpo-8585: 改进了 zipimporter2 的测试。补丁来自 Mark Lawrence。

  • bpo-18622: unittest.mock.mock_open().reset_mock 会无限递归。补丁来自 Nicola Palumbo 和 Laurent De Buyst。

  • bpo-24426: 正则表达式中的快速搜索优化现在适用于以捕获组开始的模式。快速搜索优化现在不能在编译时禁用。

  • bpo-23661: unittest.mock 的 side_effects 现在可以再次是异常。这是对 Python 3.4 的一个回归。补丁来自 Ignacio Rossi

  • bpo-13248: 移除已弃用的 inspect.getmoduleinfo 函数。

  • bpo-25578: 修复 SSLSocket.getpeercer() 中的另一个内存泄漏问题。

  • bpo-25530: 默认情况下,在创建 ssl.SSLContext 时禁用易受攻击的 SSLv3 协议。

  • bpo-25569: 修复 SSLSocket.getpeercert() 中的内存泄漏问题。

  • bpo-25471: 从 accept() 返回的套接字不应显示为非阻塞。

  • bpo-25319: 当 threading.Event 被重新初始化时,底层条件应使用常规锁而不是递归锁。

  • 如果主机已解析,则跳过 getaddrinfo。由 A. Jesse Jiryu Davis 提供补丁。

  • bpo-26050: 添加 asyncio.StreamReader.readuntil() 方法。由 Марк Коренберг 提供补丁。

  • bpo-25924: 在 OS X 10.5 或更高版本上避免不必要的 getaddrinfo(3) 调用序列化。原始补丁由 A. Jesse Jiryu Davis 提供。

  • bpo-26406: 在当前版本的 OpenBSD 和 NetBSD 上避免不必要的 getaddrinfo(3) 调用序列化。由 A. Jesse Jiryu Davis 提供补丁。

  • bpo-26848: 修复 asyncio/subprocess.communicate() 以处理空输入。由 Jack O'Connor 提供补丁。

  • bpo-27040: 添加 loop.get_exception_handler 方法

  • bpo-27041: asyncio: 添加 loop.create_future 方法

IDLE

  • bpo-20640: 为 idlelib.configHelpSourceEdit 添加测试。由 Saimadhav Heblikar 提供补丁。

  • 在 IDLE 文档的 'IDLE-控制台差异' 部分,澄清使用 IDLE 运行如何影响 sys.modules 和标准流。

  • bpo-25507: 修复 IOBinding 中阻止打印的错误更改。增强 IOBinding htest 以包括所有主要 IOBinding 功能。

  • bpo-25905: 恢复 README.txt 中 ' 到 ’ 右单引号的不必要转换,并用 'ascii' 打开此文件和 NEWS.txt。将 CREDITS.txt 重新编码为 utf-8 并用 'utf-8' 打开。

  • bpo-15348: 在关闭调试器窗口(在 IDLE 进程中运行)之前停止调试器引擎(通常在用户进程中)。这防止了被捕获并忽略的 RuntimeErrors。

  • bpo-24455: 防止IDLE在以下情况下挂起:a) 当调试器处于活动状态时关闭shell(15347);b) 使用[X]按钮关闭调试器(15348);以及c) 当调试器已经处于活动状态时再次激活(24455)。Mark Roseman的补丁通过两个更改来实现这一点。1. 使用为此目的设计的tcl vwait机制(而不是root.mainloop & .quit)暂停和恢复gui.interaction方法。2. 在gui.run中,允许任何现有的交互首先终止。

  • 在IDLE的'终止程序?'消息中,将'程序'改为'您的程序',以更清楚地表明所指的是当前运行的用户程序,而不是IDLE本身。

  • bpo-24750: 改善IDLE编辑器窗口状态栏的外观。Patch by Mark Roseman。

  • bpo-25313: 更改新内置文本颜色主题的处理,以更好地解决由IDLE Dark的添加引入的兼容性问题。在idlelib中一致地使用修订后的idleConf.CurrentTheme。

  • bpo-24782: 扩展配置现在是IDLE首选项对话框中的一个标签,而不是一个单独的对话框。原来的标签现在是一个排序列表。Patch by Mark Roseman。

  • bpo-22726: 重新激活配置对话框帮助按钮,包含一些关于其他按钮和新IDLE Dark主题的内容。

  • bpo-24820: IDLE现在有一个'IDLE Dark'内置文本颜色主题。它或多或少是IDLE Classic的反转,背景为钴蓝色。字符串、注释、关键字等仍然是绿色、红色、橙色等。要在2015年11月之前发布的IDLEs中使用它,点击'保存为新的自定义主题'按钮并输入一个新名称,如'Custom Dark'。自定义主题适用于任何IDLE版本,并且可以修改。

  • bpo-25224: README.txt现在是IDLE开发者和好奇用户的idlelib索引。以前的用户内容现在在IDLE文档章节中。'IDLE'现在意味着'集成开发和学习环境'。

  • bpo-24820: 用户现在可以在设置->自定义高亮中设置断点颜色。原始由Mark Roseman提供补丁。

  • bpo-24972: 非活动选择背景现在在所有系统上都与用户配置的活动选择背景相匹配。在Windows上,找到的项目现在总是高亮显示。初始由Mark Roseman提供补丁。

  • bpo-24570: Idle:在受tk回归影响的Mac上显示调用提示和完成框。初始补丁由Mark Roseman提供。

  • bpo-24988: Idle ScrolledList上下文菜单(在调试器中使用)现在在Mac Aqua上工作。由Mark Roseman提供补丁。

  • bpo-24801: 使右键点击上下文菜单在Mac Aqua上工作。由Mark Roseman提供补丁。

  • bpo-25173: 将tkinter消息框与特定小部件关联。对于Mac OSX,使它们成为'表单'。由Mark Roseman提供补丁。

  • bpo-25198: 增强现在用于Idle Help的初始html查看器。正确缩进固定间距文本(由Mark Roseman提供补丁)。给代码片段一个非常类似Sphinx的浅蓝灰色背景。重用用户为shell和编辑器设置的初始宽度和高度。当使用目录(TOC)菜单时,将部分标题放在屏幕顶部。

  • bpo-25225: 压缩并重写Idle文档中关于文本颜色的部分。

  • bpo-21995: 解释IDLE和控制台Python之间的一些差异。

  • bpo-22820: 解释在从Idle编辑器运行文件时需要 print 的原因。

  • bpo-25224: 文档:增加Idle功能列表和无子进程部分。

  • bpo-25219: 更新Idle命令行选项的文档。有些选项缺失,注释也不正确。

  • bpo-24861: 大多数idlelib是私有的,可能会更改。使用idleib.idle.*来启动Idle。参见idlelib.__init__.__doc__。

  • bpo-25199: Idle:为未来的维护者添加同步注释。

  • bpo-16893: 将 Idle 文档显示的 help.txt 替换为 help.html。新的 idlelib/help.html 是去除右侧空格的 Doc/build/html/library/idle.html。它看起来比 help.txt 更好,并将更好地记录发布的 Idle。适用于此文件的 tkinter html 查看器是由 Rose Roseman 编写的。现在未使用的 EditorWindow.HelpDialog 类和 helt.txt 文件已被弃用。

  • bpo-24199: 弃用未使用的 idlelib.idlever,可能在 3.6 中移除。

  • bpo-24790: 移除多余的代码(这也造成了 2 和 3 的冲突)。

文档

  • bpo-26736: 尽可能在文档中使用 HTTPS 作为外部链接。

  • bpo-6953: 重新组织 Readline 模块文档,将相关函数分组,并添加更多细节,如访问哪些底层的 Readline 函数和变量。

  • bpo-23606: 向 ctypes 文档添加关于 cdll.msvcrt 的注释。

  • bpo-24952: 阐明 "threading" 和 "_thread" 模块中 stack_size() 的默认 size 参数。来自 Mattip 的补丁。

  • bpo-26014: 更新 3.x 打包文档:* 现在在旧版页面中提供了指向新文档的 "参见" 链接 * 更新了指向 setuptools 文档的链接

测试

  • bpo-21916: 为 turtle 模块添加了测试。由 ingrid、Gregory Loyse 和 Jelle Zijlstra 提供补丁。

  • bpo-26295: 当使用 "python3 -m test --testdir=TESTDIR" 时,regrtest 不会给测试模块名添加 "test." 前缀。

  • bpo-26523: 多进程线程池(multiprocessing.dummy.Pool)未经测试。

  • bpo-26015: 为可变序列的迭代器的 pickle 操作添加了新测试。

  • bpo-26325: 添加了 test.support.check_no_resource_warning() 来检查是否未发出 ResourceWarning。

  • bpo-25940: 更改 test_ssl 以更多地使用其内部本地服务器。这避免依赖 svn.python.org,后者最近更改了根证书。

  • bpo-25616: OrderedDict 的测试从 test_collections 中提取出来,放入单独的文件 test_ordered_dict 中。

  • bpo-25449: 为 OrderedDict 的子类添加了测试。

  • bpo-25188: 添加 -P/--pgo 到 test.regrtest,以在运行测试套件用于PGO构建时抑制错误输出。初始由Alecsandru Patrascu提供补丁。

  • bpo-22806: 添加 python -m test --list-tests 命令以列出测试。

  • bpo-18174: python -m test --huntrleaks ... 现在也会检查文件描述符的泄漏。补丁由Richard Oudkerk编写。

  • bpo-25260: 修复 python -m test --coverage 在Windows上的问题。移除忽略目录的列表。

  • PCbuild\rt.bat 现在可以接受无限数量的参数传递给regrtest.py。之前有9个的限制。

  • bpo-26583: 如果无法写入字节码文件,则在test_import中跳过test_timestamp_overflow测试。

构建

  • bpo-21277: 不要试图将_ctypes与ffi_convenience库链接。

  • bpo-26884: 修复交叉构建中扩展模块的链接问题。由Xavier de Gaye提供补丁。

  • bpo-26932: 修复了对定义为枚举值而非宏的RTLD_*常量的支持(特别是在Android上)。由Chi Hsuan Yen提供补丁。

  • bpo-22359: 在交叉编译时禁用运行_freeze_importlib和pgen的规则。这些程序的输出通常与源代码一起保存,并且在本地构建时仍会重新生成。由Xavier de Gaye提供补丁。

  • bpo-21668: 将audioop、_datetime、_ctypes_test模块链接到libm,除了Mac OS X。补丁由Chi Hsuan Yen编写。

  • bpo-25702: 添加了一个--with-lto配置选项,该选项将在make profile-opt期间启用构建时的链接时间优化。已知一些编译器和工具链在使用LTO时不会产生稳定的代码,因此在依赖它之前确保彻底测试。它可以比仅使用profile-opt提供几个%的速度提升。

  • bpo-26624: 添加了对ucrtbase[d].dll版本的验证,并对旧版本发出警告。

  • bpo-17603: 通过使用struct stat中st_blocks的低级检查,避免关于不存在的fileblocks.o文件的错误。

  • bpo-26079: 修复 tix-8.4.3.6 的构建输出文件夹。由 Bjoern Thiel 提交补丁。

  • bpo-26465: 更新 Windows 构建以使用 OpenSSL 1.0.2g。

  • bpo-25348: 添加了 --pgo--pgo-job 参数到 PCbuild\build.bat 以便使用 Profile-Guided Optimization 构建。旧的 PCbuild\build_pgo.bat 脚本已被移除。

  • bpo-25827: 向 configure 添加了对使用 ICC 构建的支持,包括一个新的 --with-icc 标志。

  • bpo-25696: 修复了在 UNIX 上使用 make -j9 安装 Python 的问题。

  • bpo-24986: 现在可以在 Windows 上构建 Python 而不会在没有外部库的情况下出现错误。

  • bpo-24421: 在构建扩展之前,先编译 Modules/_math.c 一次。之前如果数学和 cmath 构建同时进行,可能会导致编译失败。

  • bpo-26465: 更新 OS X 10.5+ 仅 32 位安装程序,以构建和链接 OpenSSL 1.0.2g。

  • bpo-26268: 更新 Windows 构建以使用 OpenSSL 1.0.2f。

  • bpo-25136: 支持 Apple Xcode 7 的新文本 SDK stub 库。

  • bpo-24324: 当使用 gcc 时不启用不可达代码警告,因为该选项在旧版本的 gcc 中不起作用,并且在 gcc-4.5 之后已被静默移除。

Windows

  • bpo-27053: 更新 make_zip.py 以正确生成库 ZIP 文件。

  • bpo-26268: 更新 prepare_ssl.py 脚本以处理不包含 include 目录内容的 OpenSSL 版本(即 1.0.2e 及更高版本)。

  • bpo-26071: bdist_wininst 创建的二进制文件无法启动并找到 32 位 Python

  • bpo-26073: 更新启动器中的魔法数字列表

  • bpo-26065: 在生成可嵌入发行版时从库中排除 venv。

  • bpo-25022: 删除了非常过时的 PC/example_nt/ 目录。

工具/示例

  • bpo-26799: 修复 python-gdb.py:不要在 Python 代码加载时一次性获取 C 类型,而是按需获取 C 类型。如果在 Python 可执行文件之前加载 python-gdb.py,C 类型可以改变。补丁由 Thomas Ilsche 编写。

  • bpo-26271: 修复Freeze工具以正确使用通过configure传递的标志。补丁由Daniel Shaulov提供。

  • bpo-26489: 向Tools/parser/unparse.py添加字典解包支持。由Guo Ci Teo提供补丁。

  • bpo-26316: 修复Argument Clinic中的变量名拼写错误。

  • bpo-25440: 修复python-config --extension-suffix的输出。

  • bpo-25154: pyvenv脚本已被弃用,推荐使用 python3 -m venv

C API

  • bpo-26312: 现在在所有使用PyArg_ParseTupleAndKeywords()的编程错误中都会引发SystemError。之前在某些编程错误中会引发RuntimeError。

  • bpo-26198: 现在在解析"es#"和"et#"格式单元时发生缓冲区溢出会引发ValueError而不是TypeError。在解析格式字符串时发生编程错误会引发SystemError而不是TypeError。

Python 3.5.5 正式版

发布日期e: 2018-02-04

在 3.5.5 版本中没有新的更改。

Python 3.5.5 rc1

发布日期: 2018-01-23

安全性

  • bpo-32551: bpo-29139 中对 sys.path[0] 初始化的更改导致了一个回归问题,揭示了在执行来自zipfile、目录或其他导入位置的 __main__ 时sys.path初始化的不一致性。这被认为是一个潜在的安全问题,因为在之前不会出现的情况下,可能导致特权进程从用户控制的目录意外加载代码。解释器现在一致地避免将导入位置的父目录添加到 sys.path 中,并确保在插入命令行指定的导入位置时不会无意中修改其他 sys.path 条目。(最初作为 bpo-29723 针对Python 3.6rc1报告,但当时忽略了即将发布的Python 3.5.4也会受到影响)

  • bpo-30657: 修复了PyBytes_DecodeEscape中可能的整数溢出,CVE 2017-1000158。原始补丁由Jay Bosamiya提供;由Miro Hrončok重新基于Python 3。

  • bpo-30947: 将内嵌的 libexpat 从版本 2.2.1 升级到 2.2.3 以获取安全修复。

核心与内置函数

  • bpo-31095: 修复由未调用 PyObject_GC_UnTrack()tp_dealloc 引起的GC期间潜在崩溃问题。

  • bpo-32072: 修复了二进制 plists 的问题:修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。

  • bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题(libexpat bug 115):https://github.com/libexpat/libexpat/issues/115

Python 3.5.4 正式版

发布日期: 2017-08-07

  • bpo-30119: ftplib.FTP.putline() 现在会在命令包含 CR 或 LF 时抛出 ValueError。由 Donghee Na 提供补丁。

Python 3.5.4 rc1

发布日期: 2017-07-23

安全性

核心与内置函数

  • bpo-30876: 从未加载的包中进行相对导入现在会重新导入包,而不是因SystemError失败。从非包中进行相对导入现在会因ImportError而非SystemError失败。

  • bpo-30765: 当PyThread_acquire_lock()被要求不阻塞时,避免在pthread_mutex_lock()中阻塞。

  • bpo-27945: 修复了在搜索、插入或比较过程中输入集合被修改时,字典的各种段错误。基于 Duane Griffin 和 Tim Mitchell 的补丁。

  • bpo-25794: 修复了 type.__setattr__() 和 type.__delattr__() 对于非 interned 属性名称的问题。基于 Eryk Sun 的补丁。

  • bpo-29935: 修复了在传递错误类型的索引时,tuple、list 和 deque 的 index() 方法中的错误消息。

  • bpo-28876: 即使 len(range) 引发 OverflowErrorbool(range) 也能正常工作。

  • bpo-29600: 修复在StopIteration中包装协程返回值的问题。

  • bpo-29537: 恢复与由 CPython 3.5.0 至 3.5.2 生成的字节码文件的运行时兼容性,并调整 eval 循环以避免可能由它们可能包含的 BUILD_MAP_UNPACK_WITH_CALL 操作码的错误变体引起的问题。由 Petr Viktorin、Serhiy Storchaka 和 Nick Coghlan 提供补丁。

  • bpo-28598: 支持在调用 str.__mod__ 之前调用 str 子类的 __rmod__。由 Martijn Pieters 提供补丁。

  • bpo-29602: 修复了在复杂子类的构造函数和具有 __complex__ 方法的输入中对有符号零的错误处理。由 Serhiy Storchaka 提供补丁。

  • bpo-29347: 修复了在创建弱引用对象时可能解引用未定义指针的问题。

  • bpo-29438: 修复了key sharing dict中的use-after-free问题。

  • bpo-29319: 防止RunMainFromImporter覆盖sys.path[0]。

  • bpo-29337: 修复了比较代码对象时可能出现的BytesWarning。警告可能在编译时发出。

  • bpo-29478: 在使用Compat32策略时,如果指定了max_line_length=None,它将不再被忽略。补丁由Mircea Cosbuc提供。

  • bpo-29403: 修复``unittest.mock``模块的autospec功能,使其不再对绑定到方法的内置函数报错。由Aaron Gallagher提供补丁。

  • bpo-30961: 修复了tracemalloc中借用引用的递减问题。

  • bpo-30886: 修复 multiprocessing.Queue.join_thread():现在即使线程是由创建队列的同一进程启动的,它也会等待线程完成。

  • bpo-29854: 修复使用 readline 的 history-size 选项时 readline 中的段错误。由 Nir Soffer 提供补丁。

  • bpo-30807: 当传递一个极小的值时,signal.setitimer() 可能会禁用计时器。极小的值(如 1e-6)是 setitimer() 有效的非零值,它被指定为采取微秒级间隔。然而,在某些平台上,我们的转换例程可能将 1e-6 转换为零间隔,从而禁用计时器而不是(重新)调度它。

  • bpo-30441: 修复在迭代 os.environ 时修改它导致的错误。

  • bpo-30532: 修复电子邮件头值解析器在某些情况下丢弃折叠空白的问题。

  • bpo-29169: 将 zlib 更新至 1.2.11。

  • bpo-30879: os.listdir() 和 os.scandir() 现在在使用字节类参数调用时会发出字节名称。

  • bpo-30746: 禁止在 os.putenv()os.spawn*() 的环境变量名中使用 '=' 字符。

  • bpo-29755: 修复了 gettext 模块中的 lgettext() 系列函数。它们现在总是返回字节。

  • bpo-30645: 修复imp.load_package()中的路径计算,修复仅随字节码一起提供包的情况。由Alexandru Ardelean提供补丁。

  • bpo-23890: unittest.TestCase.assertRaises() 现在手动打破引用循环,以避免对象存活时间超过预期。

  • bpo-30149: inspect.signature() 现在支持带有被partialmethod包装的可变参数参数的可调用对象。由Donghee Na提供补丁。

  • bpo-29931: 修复了 ipaddress.ip_interface 对象的比较检查。补丁由 Sanjay Sundaresan 提供。

  • bpo-24484: 避免多进程清理中的竞争条件。

  • bpo-28994: 对于由 atexit 注册的回调中引发的 SystemExit,不再显示回溯。

  • bpo-30508: 如果调用了 Task/Future 的 "cancel()" 方法,则不记录异常。

  • bpo-28556: typing 模块的更新:添加通用的 AsyncContextManager,为所有版本添加对 ContextManager 的支持。原始 PR 由 Jelle Zijlstra 和 Ivan Levkivskyi 提供。

  • bpo-29870: 修复 asyncio/ssl 实现中当连接被中止时 SSL 套接字的泄漏问题。由 Michaël Sghaïer 提供补丁。

  • bpo-29743: 在握手过程中关闭传输会导致打开的套接字泄漏。由 Nikolay Kim 提供补丁。

  • bpo-27585: 修复 asyncio.Lock 中的等待者取消问题。由 Mathieu Sornay 提供补丁。

  • bpo-30418: 在 Windows 上,如果子进程仍在运行但关闭了管道,subprocess.Popen.communicate() 现在也会忽略 stdin.write() 上的 EINVAL。

  • bpo-30378: 修复 logging.handlers.SysLogHandler 无法处理 IPv6 地址的问题。

  • bpo-29960: 当_random.Random.setstate()引发异常时,保留生成器状态。补丁由Bryan Olson提供。

  • bpo-30414: multiprocessing.Queue._feed 后台运行线程在异常时不从主循环中中断。

  • bpo-30003: 修复HZ编解码器中转义字符的处理。基于Ma Lin的补丁。

  • bpo-30301: 修复在 spawnforkserver 启动方法下使用SimpleQueue.empty()时的AttributeError。

  • bpo-30329: imaplib和poplib现在在shutdown(SHUT_RDWR)时捕获Windows socket WSAEINVAL错误(代码10022):尝试了无效操作。此错误有时发生在SSL连接上。

  • bpo-30375: 编译正则表达式时发出的警告现在总是指向用户代码中的行。之前如果从组或条件内部发出,它们可能指向re模块的内部。

  • bpo-30048: 修复了当任务运行协程且协程返回而没有任何更多 await 时,``Task.cancel()``可能被忽略的问题。

  • bpo-29990: 修复GB18030解码器中的范围检查。原由Ma Lin提供补丁。

  • bpo-26293: 由于zipfile损坏导致的变更。(另见:bpo-29094

  • bpo-30243: 移除了_json的扫描器和编码器的__init__方法。误用它们可能导致内存泄漏或崩溃。现在扫描器和编码器对象在__new__方法中完全初始化。

  • bpo-30185: 在收到Ctrl-C时,避免forkserver辅助进程中的KeyboardInterrupt回溯。

  • bpo-28556: 对typing模块的各种更新:添加typing.NoReturn类型,使用WrapperDescriptorType,小错误修复。原PR由Jim Fasarakis-Hilliard和Ivan Levkivskyi提供。

  • bpo-30205: 修复Linux上未绑定的AF_UNIX套接字的getsockname()。

  • bpo-30070: 修复了解析模块中错误处理的内存泄漏和崩溃问题。

  • bpo-30061: 修复了当readline()或__next__()分别返回不可大小化的对象时,IOBase方法__next__()和readlines()中的崩溃。修复了由不检查PyObject_Size()、PySequence_Size()或PyMapping_Size()的结果可能引起的其他错误。

  • bpo-30068: 当存在hint时,_io._IOBase.readlines将首先检查是否关闭。

  • bpo-29694: 修复了pathlib mkdir与flags parents=True时的竞争条件。补丁由Armin Rigo提供。

  • bpo-29692: 修复了contextlib.contextmanager中RuntimeError异常的任意解链。由Siddharth Velankar提供补丁。

  • bpo-29998: Pickling和复制ImportError现在保留name和path属性。

  • bpo-29942: 修复了在遇到长串空可迭代对象时,itertools.chain.from_iterable 的崩溃问题。

  • bpo-27863: 修复了由竞争条件和错误类型引起的 ElementTree 中的多个崩溃问题。

  • bpo-28699: 修复了 multiprocessing.pool 中池的一个 bug,即在可迭代对象的最开始引发异常可能会吞掉异常或使程序挂起。由 Davin Potts 和 Xiang Zhang 提供补丁。

  • bpo-25803: 当操作系统优先考虑如 EACCES 而不是 EEXIST 的错误时,避免 Path.mkdir(exist_ok=True) 引发不正确的错误。

  • bpo-29861: 在 multiprocessing.Pool 中,任务、它们的参数和结果一旦完成就释放引用。

  • bpo-29884: faulthandler: 在拆卸期间恢复旧的sigaltstack。由Christophe Zeitouny提供补丁。

  • bpo-25455: 修复了递归缓冲文件类对象repr中的崩溃。

  • bpo-29800: 修复了如果partial.keywords的键不是字符串时partial.__repr__的崩溃。由Michael Seifert提供补丁。

  • bpo-29742: 如果 get_extra_info() 在关闭的 ssl 传输上调用,将引发异常。由 Nikolay Kim 提供补丁。

  • bpo-8256: 修复了如果sys.stdin或sys.stdout的属性"encoding"或"errors"未设置或不是字符串时可能导致的input()失败或崩溃。

  • bpo-28298: 修复了一个bug,该bug阻止了数组'Q'、'L'和'I'接受大整数(具有__int__方法的对象)作为元素。由Oren Milman提供补丁。

  • bpo-29615: SimpleXMLRPCDispatcher 不再将 KeyError(或任何其他异常)链接到调度方法中引发的异常。由 Petr Motejlek 提供补丁。

  • bpo-29704: asyncio.subprocess.SubprocessStreamProtocol 在所有管道关闭之前不再关闭。

  • bpo-29703: 修复 asyncio,支持在子进程中实例化新的事件循环。

  • bpo-29376: 修复 threading._DummyThread.is_alive() 中的断言错误。

  • bpo-29110: 修复 aifc.open() 中当文件作为文件系统路径给出且不是有效的 AIFF 格式时的文件对象泄漏问题。由 Anthony Zhang 提供补丁。

  • bpo-28961: 修复unittest.mock._Call辅助函数:不再忽略name参数。由Jiajun Huang提供补丁。

  • bpo-29532: 修改传递给 functools.partial() 的 kwarg 字典不再影响创建后的 partial 对象。

  • bpo-28556: 对 typing 模块进行了多项更新:typing.Counter、typing.ChainMap、改进的 ABC 缓存等。原始 PR 由 Jelle Zijlstra、Ivan Levkivskyi、Manuel Krebber 和 Łukasz Langa 提供。

  • bpo-29100: 修复了 Python 3.6.0 中引入的 datetime.fromtimestamp() 的回归问题:检查最小和最大年份。

  • bpo-29519: 修复了在与multiprocessing和自定义编解码器的罕见组合使用时,weakref在解释器关闭期间抛出异常的问题。

  • bpo-29416: 防止 pathlib.Path.mkdir 中的无限循环。

  • bpo-29444: 修复了 match 对象的 group() 方法中的越界缓冲区访问。基于 WGH 的补丁。

  • bpo-29335: 修复了当子进程已退出到停止状态而不是终止状态(例如:在 ptrace 下)时的 subprocess.Popen.wait()。

  • bpo-29290: 修复了 argparse 中帮助消息会在非断行空格处换行的回归问题。

  • bpo-28735: 修复了 mock.MagickMock 与 mock.ANY 的比较。

  • bpo-29011: 通过向typing模块添加Deque来修复一个重要的遗漏。

  • bpo-29219: 修复了未初始化的 ctypes.CDLL 实例的 repr 中的无限递归。

  • bpo-28969: 修复了functools.lru_cache的C实现中的竞态条件。当缓存函数满时,如果同时从不同线程以相同的未缓存参数调用,可能会引发KeyError。

  • bpo-29142: 在urllib.request中,no_proxy环境变量中带有前导点的后缀可以再次匹配相关的主机名(例如.b.c匹配a.b.c)。由Milan Oberkirch提供补丁。

文档

  • bpo-30176: 在curses文档中添加缺失的属性相关常量。

  • bpo-26985: 在inspect文档中添加缺失的代码对象信息。

  • bpo-28929: 将文档链接到其在GitHub上的源文件。

  • bpo-25008: 将smtpd.py文档标记为实际上已弃用,并添加指向aiosmtpd的指针,这是一个基于asyncio的第三方替代品。

  • bpo-26355: 在每个页面上添加指向相应主要版本文档的规范头部链接。由Matthias Bussonnier提供补丁。

  • bpo-29349: 修复构建文档代码中的Python 2语法。

测试

  • bpo-30822: 修复 regrtest 命令行解析器以允许传递 -u extralargefile 来运行 test_zipfile64。

  • bpo-30383: regrtest: 增强 regrtest 并从主分支回传功能。添加选项:--coverage、--testdir、--list-tests(列出测试文件,不运行它们)、--list-cases(列出测试标识符,不运行它们,bpo-30523)、--matchfile(从文本文件加载测试过滤器列表,bpo-30540)、--slowest(--slow 的别名)。增强输出:添加时间戳、测试结果、当前运行的测试、“Tests result: xxx”总结与总持续时间等。修复 regrtest 中的引用泄漏狩猎,--huntrleaks:regrtest 现在预热缓存,显式创建所有按需创建的内部单例以防止在检查引用泄漏时出现假阳性。(bpo-30675)。

  • bpo-30357: test_thread: setUp() 现在使用 support.threading_setup() 和 support.threading_cleanup() 来等待线程完成,以避免对后续测试产生随机副作用。初始补丁由 Grzegorz Grzywacz 编写。

  • bpo-28087: 在 macOS 上跳过 test_asyncore 和 test_eintr 的 poll 失败。由于某些 macOS 版本上底层系统 poll 函数的未解决问题,在 macOS 上运行时跳过 select.poll 的一些测试。

  • bpo-30197: 增强了 test.support 模块中的 swap_attr() 和 swap_item() 函数。它们现在可以在 with 语句内部删除替换的属性或项目时工作。属性或项目的旧值(如果不存在则为 None)现在将被赋值给 "as" 子句的目标,如果有的话。

  • bpo-29571: 为了匹配 re.LOCALE 标志的行为,test_re.test_locale_flag 现在使用 locale.getpreferredencoding(False) 来确定测试正则表达式的候选编码(允许它在默认区域编码是多字节编码时正确跳过测试)

构建

  • bpo-29243: 在配置为 --enable-optimizations 时,防止在 make test``make install``和一些其他make目标期间不必要的Python重新构建。

  • bpo-23404: 不再基于文件修改时间重新生成已生成的文件:该操作现在是显式的。用``make regen-all``替换 make touch

  • bpo-29643: 修复 --enable-optimization 不起作用的问题。

Windows

  • bpo-30687: 在Windows上构建时定位msbuild.exe而不是vcvarsall.bat。

  • bpo-29392: 防止将无效参数传递到 msvcrt 模块时崩溃。

C API

  • bpo-27867: 如果 Py_LIMITED_API 设置为介于 0x03050400 和 0x03060000(不包括)或 0x03060100 或更高之间的值,则函数 PySlice_GetIndicesEx() 被替换为宏。

  • bpo-29083: 修正了一些公共API函数的声明。PyArg_VaParse()和PyArg_VaParseTupleAndKeywords()在有限API中不可用。当定义了PY_SSIZE_T_CLEAN时,PyArg_ValidateKeywordArguments()、PyArg_UnpackTuple()和Py_BuildValue()在版本<3.3的有限API中不可用。

Python 3.5.3 正式版

发布日期: 2017-01-17

在 3.5.3rc1 和 3.5.3 最终版之间没有代码更改。

Python 3.5.3 rc1

发布日期: 2017-01-02

安全性

  • bpo-27278: 修复在Linux上使用getrandom()实现的os.urandom()。将大小截断为INT_MAX,并循环直到收集足够的随机字节,而不是直接将Py_ssize_t转换为int。

  • bpo-22636: 避免 ctypes.util.find_library() 的 shell 注入问题。

核心与内置函数

  • bpo-29073: bytearray 格式化不再在第一个空字节处截断。

  • bpo-28932: 如果不存在<sys/random.h>,则不包含它。

  • bpo-28147: 修复 split-table 字典中的内存泄漏:setattr() 不得将组合表转换为分裂表。

  • bpo-25677: 修正了缩进块语法错误提示符的位置。基于Michael Layzell的补丁。

  • bpo-29000: 修复了八进制数在交替形式下零填充的bytes格式化。

  • bpo-28512: 修复了通过PyErr_SyntaxLocationEx()和PyErr_SyntaxLocationObject()设置SyntaxError的offset属性。

  • bpo-28991: functools.lru_cache() 容易受到由猴子补丁 len() 函数引起的隐蔽重入错误的影响。

  • bpo-28648: 修复了在Mac OS X上调试版本中解码星体字符时Py_DecodeLocale()崩溃的问题。补丁由Xiang Zhang提供。

  • bpo-19398: 在编译时PYTHONPATH组件为空的情况下,不再向sys.path组件添加额外的斜杠。

  • bpo-28426: 修复了调试版本中PyUnicode_AsDecodedObject()潜在的崩溃问题。

  • bpo-23782: 修复了 _PyTraceback_Add() 中可能的内存泄漏和 PyTraceBack_Here() 中的异常丢失问题。

  • bpo-28379: 为 PyUnicode_CopyCharacters() 添加了健全性检查和测试。由 Xiang Zhang 提供补丁。

  • bpo-28376: 长范围迭代器的类型现在注册为 Iterator。由 Oren Milman 提供补丁。

  • bpo-28376: range_iterator 的构造函数现在检查步长不为 0。由 Oren Milman 提供补丁。

  • bpo-26906: 现在解析未初始化类型的特殊方法会导致类型的隐式初始化而不是失败。

  • bpo-18287: PyType_Ready() 现在检查 tp_name 是否为 NULL。原始由 Niklas Koep 提供补丁。

  • bpo-24098: 修复了在编译过程中 AST 被更改时可能发生的崩溃。

  • bpo-28350: 不再对含有空字符的字符串常量进行内部化。

  • bpo-26617: 修复了在弱引用回调过程中运行垃圾收集时发生的崩溃。

  • bpo-27942: 现在在元组和冻结集合中递归内部化字符串常量。

  • bpo-21578: 修复了当 ImportError 使用无效关键字参数调用时误导性的错误消息。

  • bpo-28203: 修复来自 complex(1.0, {2:3}) 的错误消息中的错误类型。由 Soumya Sharma 提供补丁。

  • bpo-27955: 当 getrandom() 系统调用因 EPERM 失败时(例如被 SECCOMP 阻止时),回退读取 /dev/urandom 设备。

  • bpo-28131: 修复zipimport的compile_source()中的回归问题。zipimport应使用与解释器相同的优化级别。

  • bpo-25221: 当 Python 编译时设置 NSMALLPOSINTS = 0 时,修复 PyLong_FromLong(0) 的损坏结果。

  • bpo-25758: 防止 zipimport 不必要地编码文件名(由 Eryk Sun 提供补丁)

  • bpo-28189: dictitems_contains 不再吞下比较错误。(由 Xiang Zhang 提供补丁)

  • bpo-27812: 正确清除生成器帧对生成器的反向引用,以防止frame.clear()中的崩溃。

  • bpo-27811: 修复了一个在启用警告即错误时,未等待的协程被最终化时崩溃的问题。

  • bpo-27587: 修复了PVS-Studio发现的另一个问题:在_PyState_AddModule()中使用'def'后的空指针检查。初始由Christian Heimes提供补丁。

  • bpo-26020: 集合字面量评估顺序与文档行为不匹配。

  • bpo-27782: 多阶段扩展模块导入现在正确地允许使用 m_methods 字段来向 Py_create_mod 返回的非模块类型实例添加模块级函数。由 Xiang Zhang 提供补丁。

  • bpo-27936: round() 函数对某些类型接受第二个 None 参数,但对其他类型不接受。通过接受所有数值类型的 None 来修复这种不一致性。

  • bpo-27487: 如果在导入父包之后但在执行子模块之前,在 sys.modules 中找到了 "python -m" 或 runpy.run_module() 的子模块参数,则发出警告。

  • bpo-27558: 修复 "raise" 语句实现中的一个 SystemError。在一个全新的线程中,引发一个 RuntimeError,因为没有活动的异常可以重新引发。补丁由 Xiang Zhang 编写。

  • bpo-27419: 标准 __import__() 不再在全局或内置中查找 "__import__" 以导入子模块或 "from import"。修复了非字符串包名错误的处理。

  • bpo-27083: 在Windows下尊重PYTHONCASEOK环境变量。

  • bpo-27514: 将静态嵌套块过多的情况改为SyntaxError而非SystemError。

  • bpo-27473: 修复了 bytes 和 bytearray 连接中可能的整数溢出问题。补丁由 Xiang Zhang 提供。

  • bpo-27507: 在bytearray.extend()中添加整数溢出检查。由张翔提供补丁。

  • bpo-27581: 在PySequence_Tuple()中不依赖包装进行溢出检查。由张翔提供补丁。

  • bpo-27443: bytearray 迭代器的 __length_hint__() 不再为调整大小的 bytearray 返回负整数。

  • bpo-27942: 修复 codeobject.c 中的内存泄漏

  • bpo-15812: inspect.getframeinfo()现在正确显示上下文的第行。由Sam Breese提供补丁。

  • bpo-29094: 使用外部文件对象和模式"w"和"x"创建的ZIP文件中的偏移量现在相对于文件的开始位置。

  • bpo-13051: 修复了大型或调整大小的curses.textpad.Textbox中的递归错误。基于Tycho Andersen的补丁。

  • bpo-29119: 修复collections.OrderedDict move_to_end()方法的纯Python版本中的weakrefs。由Andra Bogildea贡献。

  • bpo-9770: curses.ascii谓词现在正确处理负整数。

  • bpo-28427: 当从另一个线程收集时,旧键不应从WeakValueDictionary中移除新值。

  • bpo-28923: 从Tix.py中移除编辑器工件。

  • bpo-28871: 修复了在深度ElementTree释放时的崩溃。

  • bpo-19542: 修复WeakValueDictionary.setdefault()和WeakValueDictionary.pop()中的bug,这些bug在另一个线程发生GC收集时出现。

  • bpo-20191: 修复了当传递一个不拥有其元素的序列作为限制时,resource.prlimit() 崩溃的问题。

  • bpo-28779: 如果预加载的模块实例化了某些多处理对象(如锁),multiprocessing.set_forkserver_preload()会使forkserver进程崩溃。

  • bpo-28847: dbm.dumb现在支持读取只读文件,并且在索引文件未更改时不再写入索引文件。

  • bpo-25659: 在 ctypes 中,防止在抽象类(如 Array)上调用 from_buffer() 和 from_buffer_copy() 方法时崩溃。

  • bpo-28732: 修复 os.spawnv() 在 args 中没有元素时的崩溃

  • bpo-28485: 对于 compileall.compile_dir(workers=...) 参数的负值,即使多线程不可用,也总是引发 ValueError。

  • bpo-28387: 修复了当垃圾收集器在其他线程中调用时,_io.TextIOWrapper解构器可能崩溃的问题。基于Sebastian Cufre的补丁。

  • bpo-27517: LZMA压缩器和解压器在两次接收到空数据时不再抛出异常。补丁由Benjamin Fogle提供。

  • bpo-28549: 修复了curses的addch()在使用ncurses6时的段错误。

  • bpo-28449: tarfile.open()以模式"r"或"r:"现在会先尝试以压缩方式打开tar文件,再尝试无压缩方式打开。否则在使用ignore_zeros=True时有50%的几率失败。

  • bpo-23262: webbrowser模块现在支持Firefox 36+及衍生浏览器。基于Oleg Broytman的补丁。

  • bpo-27939: 修复了tkinter.ttk.LabeledScale和tkinter.Scale中由于在Tk内部将比例表示为浮点值而导致的错误。如果底层Tk变量设置为浮点值,tkinter.IntVar现在可以正常工作。

  • bpo-28255: calendar.TextCalendar().prmonth() 在打印月历后不再在新行的开头打印空格。由 Xiang Zhang 提供补丁。

  • bpo-20491: textwrap.TextWrapper 类现在支持不换行空格。基于 Kaarle Ritvanen 的补丁。

  • bpo-28353: os.fwalk() 不再因损坏的链接而失败。

  • bpo-25464: 通过为 Tix 库的 bug 添加变通方法,修复了 tkinter.tix 模块中的 HList.header_exists()。

  • bpo-28488: shutil.make_archive() 不再向 ZIP 存档添加条目 "./"。

  • bpo-24452: 使 webbrowser 支持 Mac OS X 上的 Chrome。

  • bpo-20766: 修复了 pdb 在处理 SIGINT 处理器时的引用泄漏问题。

  • bpo-26293: 修复了不从文件开头开始写入 ZIP 文件的问题。ZIP 文件中的偏移量现在相对于存档的开始,以符合规范。

  • bpo-28321: 修复了在 plistlib 中使用二进制格式写入非 BMP 字符的问题。

  • bpo-28322: 修复了当从错误的 pickle 数据反序列化 itertools 对象时可能发生的崩溃。基于 John Leitch 的补丁。

  • 修复了 mmap 模块中在异常使用模式下可能出现的整数溢出和崩溃问题。

  • bpo-1703178: 修复了向distutils的build_ext命令传递--link-objects选项的功能。

  • bpo-28253: 修复了极端月份(0001-01和9999-12)的日历功能。重新实现了itermonthdays()和itermonthdays2()方法,使其不再调用可能导致datetime.date下溢/溢出的itermonthdates()。

  • bpo-28275: 修复了LZMADecompressor和BZ2Decompressor类中decompress()方法可能存在的释放后使用问题。原始由John Leitch提供补丁。

  • bpo-27897: 修复了如果传递无效的字符串类似对象作为名称时,sqlite3.Connection.create_collation()可能崩溃的问题。由Xiang Zhang提供补丁。

  • bpo-18893: 修复了Lib/ctypes/macholib/dyld.py中无效的异常处理。由Madison May提供补丁。

  • bpo-27611: 修复了 tkinter.tix 模块中默认根窗口的支持。

  • bpo-27348: 在traceback模块中,恢复了类似于"Exception: None"的异常消息的格式化。这修复了3.5a2中引入的回归问题。

  • bpo-25651: 允许在subTest()的msg参数中使用假值。

  • bpo-27932: 防止win32_ver()中的内存泄漏。

  • 修复socket._sendfile_use_sendfile中的UnboundLocalError。

  • bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。

  • bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。

  • bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。

  • bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。

  • bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。

  • bpo-19003: email.generator 现在按照 RFC,仅替换 \r 和/或 \n 行结束符,而不是所有的 Unicode 行结束符。

  • bpo-28019: itertools.count()不再将1.0到2.0之间的非整数步长四舍五入为1。

  • bpo-25969: 更新lib2to3语法以处理3.5中添加的解包泛化。

  • bpo-14977: mailcap现在遵循mailcap文件中的行顺序(“首次匹配”),符合RFC 1542的要求。由Michael Lazar提供的补丁。

  • bpo-24594: 在打开MSI数据库时验证persist参数。

  • bpo-17582: xml.etree.ElementTree现在保留属性中的空白(由Duane Griffin提供补丁。由Stefan Behnel审查和批准。)。

  • bpo-28047: 修复了用于新电子邮件策略中base64 CTE的行长度计算。

  • bpo-27445: 不将str(_charset)传递给MIMEText.set_payload()。由Claude Paroz提供的补丁。

  • bpo-22450: urllib现在在默认头中包括一个 Accept: */* 头。这使得REST API请求的结果更加一致和可预测,尤其是在涉及代理服务器时。

  • lib2to3.pgen3.driver.load_grammar() 现在在相同的Grammar.txt输入下,无论哈希随机化设置如何,都会创建一个稳定的缓存文件。

  • bpo-27570: 在“ctypes”和“array”模块中避免使用空源指针进行零长度memcpy()等调用。

  • bpo-22233: 仅在RFC指定的CR和LF字符上断开电子邮件标题行,而不是在任意Unicode换行符上。这也修复了HTTP标题解析中的一个错误。

  • bpo-27988: 修复email iter_attachments对payload列表的错误修改。

  • bpo-27691: 修复ssl模块对X.509证书中GEN_RID主题替代名字段的解析。

  • bpo-27850: 从ssl模块的默认加密列表中移除3DES以应对sweet32攻击(CVE 2016-2183)。

  • bpo-27766: 向ssl模块的默认加密列表中添加ChaCha20 Poly1305。(需要OpenSSL 1.1.0或LibreSSL)。

  • bpo-26470: 将ssl和hashlib模块移植到OpenSSL 1.1.0。

  • 移除对传递文件描述符给os.access的支持。它从未工作过,但以前不会引发错误。

  • bpo-12885: 修复distutils遇到符号链接时的错误。

  • bpo-27881: 修复了设置sqlite3.Connection.isolation_level时可能的错误。基于Xiang Zhang的补丁。

  • bpo-27861: 修复了当工厂创建的不是游标时sqlite3.Connection.cursor()中的崩溃。由Xiang Zhang提供补丁。

  • bpo-19884: 避免在OS X上使用Gnu Readline时产生虚假输出。

  • bpo-27706: 恢复random.Random().seed()对于使用种子版本1的字符串种子的确定性行为。允许random()的调用序列与Python 2中完全匹配。由Nofar Schnider提供补丁。

  • bpo-10513: 修复Connection.commit()中的回归问题。提交后不应重置语句。

  • 来自 https://github.com/python/typing 的 typing.py 新版本:Collection(仅适用于 3.6)(bpo-27598)。将 FrozenSet 添加到 __all__(上游 #261)。修复 _get_type_vars() 中的崩溃(上游 #259)。移除 ForwardRef._eval_type 中的字典约束(上游 #252)。

  • bpo-27539: 修复了在负指数和负基数情况下未归一化的 Fraction.__pow__ 结果。

  • bpo-21718: 现在,使用CTEs的查询可以使用cursor.description了。

  • bpo-2466: posixpath.ismount现在能正确识别用户没有权限访问的挂载点。

  • bpo-27773: 更正 _ssl.wrap_socket() 中 server_hostname 的一些内存管理错误。

  • bpo-26750: unittest.mock.create_autospec() 现在能正确处理 property() 及其他数据描述符的子类。

  • 在 curses 模块中,如果向 window.getstr() 或 window.instr() 传递负值,则引发错误。

  • bpo-27783: 修复 operator.methodcaller 中可能使用未初始化内存的问题。

  • bpo-27774: 修复 _sre 中可能对未拥有对象进行 Py_DECREF 的问题。

  • bpo-27760: 修复 binascii.b2a_qp 中可能的整数溢出。

  • bpo-27758: 修复 _csv 模块中对于大记录长度可能的整数溢出。

  • bpo-27568: 防止 HTTPoxy 攻击 (CVE 2016-1000110)。当设置了 REQUEST_METHOD 环境变量时忽略 HTTP_PROXY 变量,这表明脚本处于 CGI 模式。

  • bpo-27656: 不再假设sched.h定义了任何SCHED_*常量。

  • bpo-27130: 在“zlib”模块中,修复了压缩和解压缩大缓冲区(通常为4 GiB)时的处理问题。之前,输入被限制在4 GiB,压缩和解压缩操作未能正确处理4 GiB的结果。

  • bpo-27533: 在nt._isdir中释放GIL。

  • bpo-17711: 修复了使用协议0的持久ID进行反序列化的问题。原始补丁由Alexandre Vassalotti提交。

  • bpo-27522: 避免在email.feedparser中无意中创建的引用循环。

  • bpo-26844: 修复 imp.find_module() 的错误消息,使其引用 'path' 而不是 'name'。由 Lev Maximov 提供补丁。

  • bpo-23804: 修复 SSL 零长度 recv() 调用,使其不阻塞且不引发关于不干净 EOF 的错误。

  • bpo-27466: 更改 http.cookie.time2netscape 返回的时间格式,确认 netscape cookie 格式并使其与文档一致。

  • bpo-26664: 通过移除 $ 的错误使用修复 activate.fish。

  • bpo-22115: 修复了跟踪 Tkinter 变量的功能:trace_vdelete() 使用错误的模式不再破坏跟踪,trace_vinfo() 现在总是返回字符串对的列表,"u" 模式下的跟踪现在可以工作。

  • 修复了 importlib.util.LazyLoader 中的一个作用域问题,该问题在懒加载一个已经被放入 sys.modules 的模块时会触发 UnboundLocalError。

  • bpo-27079: 修复了curses.ascii函数isblank()、iscntrl()和ispunct()。

  • bpo-26754: 一些函数(如compile()等)接受以整数可迭代对象编码的文件名参数。现在只接受字符串和字节类对象。

  • bpo-27048: 防止distutils在Windows上因环境变量包含非ASCII字符而失败。

  • bpo-27330: 修复了ctypes模块中可能的泄漏。

  • bpo-27238: 移除了turtle模块中的裸except。原始由Jelle Zijlstra提供补丁。

  • bpo-27122: 当在由contextlib.ExitStack()管理的上下文中引发异常,并且退出堆栈生成器之一捕获并在链中引发它时,退出时不再重新引发原始异常,而是让新的链式异常通过。这避免了issue25782中描述的 PEP 479 错误。

  • bpo-26386: 修复了 ttk.TreeView 选中操作中项目 ID 包含空格的问题。

  • bpo-16182: 修复 "readline" 模块中的多个函数以使用区域设置编码,并修复 get_begidx() 和 get_endidx() 返回代码点索引。

  • bpo-27392: 添加 loop.connect_accepted_socket()。由 Jim Fulton 提供补丁。

  • bpo-27930: 改进了logging.handlers.QueueListener的行为。感谢Paulo Andrade和Petr Viktorin的分析和补丁。

  • bpo-21201: 提高了multiprocessing错误消息的可读性。感谢Wojciech Walczak的补丁。

  • bpo-27456: asyncio:默认设置TCP_NODELAY。

  • bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。

  • bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。

  • bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。

  • bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。

  • bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。

  • bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。

  • bpo-28368: 如果子监视器没有附加循环,则拒绝监视进程。由Vincent Michel提供补丁。

  • bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。

  • bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。

  • bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。

  • bpo-28372: 修复asyncio以支持非python协程的格式化。

  • bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。

  • bpo-27972: 禁止Tasks等待自身。

  • bpo-26923: 修复 asyncio.Gather 一旦所有子项完成就拒绝被取消的问题。由 Johannes Ebke 提供补丁。

  • bpo-26796: 不要为默认的线程池执行器配置工作线程数量。初始由 Hans Lawrenz 提供补丁。

  • bpo-28600: 优化 loop.call_soon()。

  • bpo-28613: 修复 get_event_loop() 在协程/回调中调用时返回当前循环的问题。

  • bpo-28639: 修复 inspect.isawaitable 始终返回布尔值,由 Justin Mayfield 提供补丁。

  • bpo-28652: 使循环方法拒绝它们不支持的套接字类型。

  • bpo-28653: 修复 functools.lru_cache 中的 refleak。

  • bpo-28703: 修复 asyncio.iscoroutinefunction 以处理 Mock 对象。

  • bpo-24142: 读取损坏的配置文件会使解析器处于无效状态。原始由 Florian Höch 提供补丁。

  • bpo-28990: 修复了如果在握手完成前关闭连接会导致 SSL 挂起的问题。(补丁由 HoHo-Ho 提供)

IDLE

  • bpo-15308: 向Shell菜单添加了'中断执行'(^C)。由Roger Serwy提供补丁,由Bayard Randel更新。

  • bpo-27922: 停止IDLE测试在屏幕上'闪烁'gui小部件。

  • 在 IDLE 帮助窗口的标题中加入版本号

  • bpo-25564: 在IDLE与控制台差异的部分,提到使用exec意味着每个语句都定义了__builtins__。

  • bpo-27714: text_textview和test_autocomplete现在在同一个进程中重新运行时通过。这发生在test_idle使用-w选项运行但未使用-jn选项时失败时。修复test_config的警告。

  • bpo-25507: IDLE不再因为其tkinter导入而运行有bug的代码。用户必须包含直接在Python中运行所需的相同导入。

  • bpo-27452: 在IDLE configHandler测试转储中添加行计数器和crc。

  • bpo-27365: 允许在 IDLE NEWS.txt 中使用非 ASCII 字符,用于贡献者姓名。

  • bpo-27245: IDLE:干净地删除自定义主题和键绑定。以前,当 IDLE 从控制台或通过导入启动时,会发出一系列警告。由 Serhiy Storchaka 提供补丁。

C API

  • bpo-28808: PyUnicode_CompareWithASCIIString() 现在永远不会引发异常。

  • bpo-26754: PyUnicode_FSDecoder() 接受一个编码为整数迭代的文件名参数。现在只接受字符串和类字节对象。

文档

  • bpo-28513: 记录了 zipfile 的命令行接口。

测试

  • bpo-28950: 在 regrtest 命令行参数中禁止将 -j0 与 -T/-l/-M 组合使用。

  • bpo-28666: 现在test.support.rmtree能够删除不可写或不可读的目录。

  • bpo-23839: 现在在运行每个测试文件之前清除各种缓存。

  • bpo-28409: regrtest: 修复命令行参数的解析器。

  • bpo-27787: 在检查每个测试的“悬挂线程”之前调用gc.collect(),因为悬挂线程是弱引用。

  • bpo-27369: 在test_pyexpat中,避免测试在Expat 2.2.0中已更改的错误消息详情。

工具/示例

  • bpo-27952: 使Tools/scripts/fixcid.py能够在Python 3和当前的"re"模块下工作,避免无效的Python反斜杠转义,并修复解析转义C引号符号时的错误。

  • bpo-27332: 修复了由Argument Clinic生成的模块级函数的第一个参数的类型。由Petr Viktorin提供补丁。

  • bpo-27418: 修复了Tools/importbench/importbench.py。

Windows

  • bpo-28251: 改进 Windows 上的帮助手册。

  • bpo-28110: launcher.msi 在 32 位和 64 位之间有不同的产品代码

  • bpo-25144: 确保在继续自定义安装之前设置TargetDir。

  • bpo-27469: 向启动器添加shell扩展,以便拖放操作能正确工作。

  • bpo-27309: 在 python[w].exe 清单中启用了适当的 Windows 样式。

构建

  • bpo-29080: 从PCBuild/build.bat中移除对hg.exe的硬依赖

  • bpo-23903: 向PC/python3.def添加遗漏的名称。

  • bpo-10656: 修复AIX上的树外构建。由Tristan Carel和Michael Haubenwallner提供补丁。

  • bpo-26359: 将--with-optimiations重命名为--enable-optimizations。

  • bpo-28444: 修复交叉编译时缺少扩展模块的问题。

  • bpo-28248: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2j。

  • bpo-28258: 修复了在爱沙尼亚语言环境下构建的问题(Makefile中的python-config和distclean目标)。由Arfrever Frehtes Taifersar Arahesis提供补丁。

  • bpo-26661: setup.py现在可以检测到带有multiarch包装的系统libffi。

  • bpo-28066: 修复在源代码树外构建时搜索构建目录中生成的包含文件的逻辑。

  • bpo-15819: 移除了为在源码树外构建而冗余的包含搜索目录选项。

  • bpo-27566: 修复冻结makefile中的clean目标(Lisa Roach提供补丁)

  • bpo-27705: 更新validate_ucrtbase.py中的消息

  • bpo-27983: 当使用clang作为PGO链接所需工具时,由于缺少llvm-profdata工具,在启用--with-optimizations时将配置时错误变为make时错误。同时提高我们在MacOS和一些Linux上找到llvm-profdata工具的能力。

  • bpo-26307: profile-opt构建现在将PGO应用于内置模块。

  • bpo-26359: 添加--with-optimizations配置标志。

  • bpo-27713: 在更新importlib的引导文件时抑制虚假的构建警告。由Xiang Zhang提供补丁。

  • bpo-25825: 更正对Modules/python.exp和ld_so_aix的引用,这些在AIX上是必需的。这更新了对在3.2a4中更改的安装路径的引用,并撤销了在3.5.0a1中对构建树的引用更改。

  • bpo-27453: 配置中的CPP调用必须使用CPPFLAGS。由Chi Hsuan Yen提供补丁。

  • bpo-27641: 配置脚本现在在makefile中插入注释,以防止pgen和_freeze_importlib可执行文件被交叉编译。

  • bpo-26662: 在配置中设置PYTHON_FOR_GEN作为构建期间用于文件生成的Python程序。

  • bpo-10910: 避免在FreeBSD和OS X上出现C++编译错误。同时更新FreedBSD版本检查以应对原始的ctype UTF-8变通方案。

  • bpo-28676: 防止在macOS上出现缺失'getentropy'声明的警告。由Gareth Rees提供补丁。

Python 3.5.2 正式版

发布日期: 2016-06-26

核心与内置函数

  • bpo-26930: 更新Windows构建以使用OpenSSL 1.0.2h。

测试

  • bpo-26867: Ubuntu的openssl OP_NO_SSLv3默认强制开启;修复测试。

IDLE

  • bpo-27365: 允许在idlelib/NEWS.txt中使用非ASCII字符 - 3.5.2的最小部分。

Python 3.5.2 rc1

发布日期: 2016-06-12

安全性

  • bpo-26556: 将expat更新到2.1.1,修复了 CVE 2015-1283

  • 修复smtplib中的TLS剥离漏洞,CVE 2016-0772。由Team Oststrom报告。

  • bpo-26839: 在Linux上,os.urandom() 现在调用 getrandom()GRND_NONBLOCK,如果urandom熵池尚未初始化,则回退到读取 /dev/urandom。补丁由Colm Buckley编写。

  • bpo-26657: 修复Windows上http.server的目录遍历漏洞。这修复了在3.3.4rc1和3.4.0rc1中引入的回归问题。基于Philipp Hagemeister的补丁。

  • bpo-26313: 如果windows证书存储为空,ssl.py _load_windows_store_certs失败。由Baji提供补丁。

  • bpo-25939: 在Windows上以只读方式打开证书存储于ssl.enum_certificates中。

核心与内置函数

  • bpo-27066: 修复了如果自定义 opener(为 open())返回一个负数而没有设置异常时的 SystemError。

  • bpo-20041: 修复当frame.f_trace被设置为None时的TypeError。由Xavier de Gaye提供补丁。

  • bpo-26168: 修复了在使用 "N" 格式化单元时 Py_BuildValue() 失败可能导致的内存泄漏问题。

  • bpo-26991: 修复了创建带有注解的函数时可能出现的内存泄漏问题。

  • bpo-27039: 修复了bytearray.remove()对于大于127的值的问题。由Joe Jevnik提供补丁。

  • bpo-23640: int.from_bytes() 不再绕过子类的构造函数。

  • bpo-26811: gc.get_objects() 不再包含带有 NULL 指针的损坏元组。

  • bpo-20120: 使用 RawConfigParser 来解析 .pypirc 文件,移除了无意中随着迁移到 Python 3 而添加的插值支持。现在的行为不会再在 .pypirc 文件中进行任何插值,与 Python 2.7 和 Setuptools 19.0 的行为一致。

  • bpo-26659: 使内置的 slice 类型支持循环回收。

  • bpo-26718: super.__init__ 如果被多次调用,将不再泄露内存。注意:不推荐直接调用 super.__init__!

  • bpo-25339: 现在在设置 stdin 和 stdout 的错误处理器时,PYTHONIOENCODING 优先于 locale。

  • bpo-26494: 修复了在迭代耗尽迭代器时的崩溃问题。受影响的类包括通用序列迭代器、str、bytes、bytearray、list、tuple、set、frozenset、dict、OrderedDict的迭代器,相应的视图以及os.scandir()迭代器。

  • bpo-26581: 如果在Python源代码文件中一行内多次指定编码声明,只有第一个会被考虑。

  • bpo-26464: 修复了当字符串为ASCII且第一个替换移除了字符,但下一个替换使用非ASCII字符或长度超过1个字符的字符串时str.translate()的问题。这是在Python 3.5.0中引入的回归问题。

  • bpo-22836: 确保即使格式化产生次要错误时,PyErr_Display()和PyErr_WriteUnraisable()产生的异常报告也是合理的。这影响sys.__excepthook__()产生的报告以及__del__()引发异常时的情况。

  • bpo-26302: 修正行为,拒绝将逗号作为cookie名称的合法字符。

  • bpo-4806: 在函数调用中使用星号(*)解包时,避免掩盖原始的TypeError异常。基于Hagen Fürstenau和Daniel Urban的补丁。

  • bpo-27138: 修正了 FileFinder.find_spec() 的文档注释。

  • bpo-26154: 新增一个私有函数_PyThreadState_UncheckedGet()用于获取当前Python线程状态,但如果其为NULL时不发出致命错误。必须使用此新函数而非直接访问_PyThreadState_Current变量。自Python 3.5.1起,该变量不再暴露以隐藏原子C类型的精确实现,避免编译器问题。

  • bpo-26194: Deque.insert()对于已达到最大大小的有界deque给出了奇怪的结果。现在当尝试向一个已满的deque插入时会引发IndexError。

  • bpo-25843: 编译代码时,如果常量相等但类型不同,则不合并它们。例如,f1, f2 = lambda: 1, lambda: 1.0``现在被正确编译为两个不同的函数:``f1()``返回 ``1 (int) 和``f2()``返回 1.0 (float) ,即使 11.0 相等。

  • bpo-22995: [更新] 由于在基于Cython的项目中观察到的回归问题,注释掉_PyObject_GetState()中的一个可pickle性测试。

  • bpo-25961: 类型名称中不允许空字符。

  • bpo-25973: 修复当无效的非局部语句绑定一个以两个下划线开头的名称时导致的段错误。

  • bpo-22995: 不是列表或字典的子类且未实现任何与pickle相关的方法(__reduce__、__reduce_ex__、__getnewargs__、__getnewargs_ex__或__getstate__)的扩展类型实例,包括memoryview,将不能再被pickle。

  • bpo-20440: 大量替换不安全的属性设置代码为特殊宏Py_SETREF。

  • bpo-25766: 特殊方法__bytes__()现在在str子类中工作。

  • bpo-25421: 内置类型的__sizeof__方法现在使用动态基本大小。这使得sys.getsize()能够正确工作于定义了__slots__的子类。

  • bpo-25709: 修复了原地字符串连接和utf-8缓存的问题。

  • bpo-27147: 在 importlib 文档中提到了 PEP 420

  • bpo-24097: 修复了如果槽名称在__getattr__内部被释放时object.__reduce__()中的崩溃问题。

  • bpo-24731: 修复了在将具有特殊方法 __bytes__、__trunc__ 和 __float__ 的对象转换为 bytes、int 和 float 的子类时,返回这些子类实例导致的崩溃问题。

  • bpo-26478: 修复在使用二进制运算符与字典视图和元组时的语义错误。

  • bpo-26171: 修复zipimporter.get_data()中可能的整数溢出和堆损坏问题。

  • bpo-25660: 修复REPL中使用readline时的TAB键行为。

  • bpo-25887: 当协程对象被多次等待时,抛出RuntimeError。

  • bpo-27243: 更新 __aiter__ 协议:异步迭代器应该直接返回,而不是返回一个解析为异步迭代器的 awaitable。执行前者将触发 PendingDeprecationWarning。

  • bpo-21386: 实现了缺失的 IPv4Address.is_global 属性。自 07a5610bae9d 以来已有文档记录。初始由 Roger Luethi 提供补丁。

  • bpo-20900: distutils register 命令现在能正确解码 HTTP 响应。初始由 ingrid 提供补丁。

  • 新版本的 typing.py 提供了几个新类和特性:stubs 外的 @overload、Reversible、DefaultDict、Text、ContextManager、Type[]、NewType()、TYPE_CHECKING,以及众多错误修复(注意,一些新特性尚未在 mypy 或其他静态分析器中实现)。同时,为 PEP 492 (Awaitable、AsyncIterable、AsyncIterator) 添加的类也已加入(实际上它们已在 3.5.1 中实现,但从未被提及)。

  • bpo-25738: 停止 http.server.BaseHTTPRequestHandler.send_error() 为 205 Reset Content 发送消息体。同时,不在没有正文的响应中发送 Content 头字段。由 Susumu Koshiba 提供补丁。

  • bpo-21313: 修复 "platform" 模块以容忍 sys.version 包含截断的构建信息。

  • bpo-27164: 在 zlib 模块中,允许使用预定义的 zdict 解压原始 Deflate 流。基于 Xiang Zhang 的补丁。

  • bpo-24291: 修复 wsgiref.simple_server.WSGIRequestHandler 以完全向客户端写入数据。之前它可能进行部分写入并截断数据。同时,wsgiref.handler.ServerHandler 现在可以处理 stdout 进行部分写入,但此功能已被弃用。

  • bpo-26809: 向 string 添加了 __all__。由 Emanuel Barry 提供补丁。

  • bpo-26373: subprocess.Popen.communicate 现在在更多/所有情况下,当子进程在调用 .communicate() 之前死亡时,正确地忽略 BrokenPipeError。

  • bpo-21776: distutils.upload 现在正确处理 HTTPError。初始由 Claudiu Popa 提供补丁。

  • bpo-27114: 修复 SSLContext._load_windows_store_certs 因 PermissionError 失败的问题。

  • bpo-18383: 避免在使用 filterwarnings 和 simplefilter 时创建重复的过滤器。基于 Alex Shkop 的补丁。

  • bpo-27057: 修复Android上的os.set_inheritable(),ioctl()被SELinux阻止并因EACCESS失败。该函数现在回退到使用fcntl()。补丁由Michał Bednarski编写。

  • bpo-27014: 修复使用typing.py时的无限递归问题。感谢Kalle Tuure!

  • bpo-14132: 修复urllib.request在目标仅有查询字符串时的重定向处理。原始修复由Ján Janech提供。

  • bpo-17214: "urllib.request"模块现在对重定向目标URL中的非ASCII字节进行百分比编码。一些服务器发送含有非ASCII字节的Location头字段,但"http.client"要求请求目标必须可ASCII编码,否则会抛出UnicodeEncodeError。基于Christian Heimes的补丁。

  • bpo-26892: 在urllib.request.HTTPHandler中尊重debuglevel标志。补丁由Chi Hsuan Yen贡献。

  • bpo-22274: 在subprocess模块中,即使stdout未被重定向,也允许将stderr重定向到stdout。补丁由Akira Li提供。

  • bpo-26807: mock_open 'files' 在文件末尾的readline操作不再报错。补丁由Yolanda Robla提供。

  • bpo-25745: 修复了curses panel析构函数中userptr的泄漏问题。

  • bpo-26977: 在statistics.pvariance中移除了不必要且被忽略的平方和辅助函数调用。

  • bpo-26881: modulefinder模块现在支持扩展的操作码参数。

  • bpo-23815: 修复了直接创建_tkinter和curses.panel模块中类型实例相关的崩溃问题。

  • bpo-17765: weakref.ref()不再默默忽略关键字参数。由Georg Brandl提供补丁。

  • bpo-26873: xmlrpc现在会在遇到不支持的类型标签时抛出ResponseError,而不是默默返回错误结果。

  • bpo-26711: 修复了plistlib.Data与其他类型的比较问题。

  • bpo-24114: 修复了 ctypes.util 中一个未初始化的变量问题。此bug仅在SunOS上,当ctypes实现搜索 crle 程序时出现。由Xiang Zhang提供补丁。在SunOS上由Kees Bos测试。

  • bpo-26864: 在urllib.request中,将代理绕过主机检查对no_proxy的匹配改为不区分大小写,并且不匹配那些恰好以后缀形式包含被绕过主机名的无关主机名。由Xiang Zhang提供补丁。

  • bpo-26634: recursive_repr() 现在设置包装器的 __qualname__。由 Xiang Zhang 提供补丁。

  • bpo-26804: urllib.request 现在会优先选择小写的代理环境变量,而不是大写或混合大小写的。补丁由 Hans-Peter Jansen 贡献。

  • bpo-26837: assertSequenceEqual() 现在能正确输出非字符串化的不同项(如 -b 模式下的字节)。这影响了 assertListEqual() 和 assertTupleEqual()。

  • bpo-26041: 从 platform.dist() 和 platform.linux_distribution() 的弃用消息中移除了 "将在 Python 3.7 中移除"。由 Kumaripaba Miyurusara Athukorala 提供补丁。

  • bpo-26822: itemgetter、attrgetter 和 methodcaller 对象不再静默忽略关键字参数。

  • bpo-26733: 反汇编一个类现在会反汇编类和静态方法。由 Xiang Zhang 提供补丁。

  • bpo-26801: 修复 shutil.get_terminal_size() 中的错误处理,捕获 AttributeError 而不是 NameError。补丁由 Emanuel Barry 编写。

  • bpo-24838: tarfile 的 ustar 和 gnu 格式现在能正确计算多字节字符编码(如 utf-8)的名称和链接字段限制。

  • bpo-26717: 停止用 UTF-8 编码拉丁-1 化的 WSGI 路径。由 Anthony Sottile 提供补丁。

  • bpo-26735: 修复 Solaris 11.3 及更新版本上 os.urandom() 当读取超过 1,024 字节时的问题:多次调用 getrandom(),每次调用限制为 1024 字节。

  • bpo-16329: 向 mimetypes.types_map 添加 .webm。由 Giampaolo Rodola' 提供补丁。

  • bpo-13952: 向 mimetypes.types_map 添加 .csv。由 Geoff Wilson 提供补丁。

  • bpo-26709: 修复了加载二进制 PLists 时的 Y2038 问题。

  • bpo-23735: 通过安装我们自己的 SIGWINCH 处理程序,处理 Readline 6.3+ 的终端调整大小。由 Eric Price 提供补丁。

  • bpo-26586: 在 http.server 中,如果头字段太多无法解析,则响应 "413 请求头字段太大",而不是终止连接并引发未处理的异常。由 Xiang Zhang 提供补丁。

  • bpo-22854: 将 BufferedReader.writable() 和 BufferedWriter.readable() 更改为总是返回 False。

  • bpo-25195: 修复了 mock.MagicMock 中的一个回归问题。_Call 是 tuple 的子类(changeset 3603bae63c13 仅适用于类),所以我们需要自己实现 __ne__。由 Andrew Plummer 提供补丁。

  • bpo-26644: 当向 SSLSocket.recv() 或 read() 传递负长度时,引发 ValueError 而不是 SystemError。

  • bpo-23804: 修复 SSL recv(0) 和 read(0) 方法返回零字节而不是最多 1024 字节的问题。

  • bpo-26616: 修复了 datetime.astimezone() 方法中的一个错误。

  • bpo-21925: warnings.formatwarning() 现在捕获 linecache.getline(...) 上的异常,以便能够记录在Python关闭过程后期发出的 ResourceWarning

  • bpo-24266: 在编译时使用Readline 7的情况下,Readline历史搜索期间的Ctrl+C现在会取消搜索模式。

  • bpo-26560: 避免BaseHandler.start_response中潜在的ValueError。初始由Peter Inglesby提供补丁。

  • bpo-26569: 修复 pyclbr.readmodule()pyclbr.readmodule_ex() 以支持导入包。

  • bpo-26499: 在HTTPResponse.readline()和read1()中考虑剩余的Content-Length。基于Silent Ghost的补丁。同时记录HTTPResponse现在支持这些方法。

  • bpo-25320: 处理unittest发现扫描的目录中的套接字。补丁来自Victor van den Elzen。

  • bpo-16181: 现在如果年份高于datetime.MAXYEAR,cookiejar.http2time()会返回None。

  • bpo-26513: 修复了平台模块对Windows Server的检测。

  • bpo-23718: 修复了在1月1日前的第0周解析时间的问题。原始由Tamás Bence Gedai提供补丁。

  • bpo-20589: 在Windows上调用Path.owner()和Path.group()现在会引发NotImplementedError而不是ImportError。

  • bpo-26177: 修复了Canvas和Scrollbar小部件的keys()方法。

  • bpo-15068: 在fileinput模块中去掉了过度的缓冲。bufsize参数不再使用。

  • bpo-2202: 修复了AbstractDigestAuthHandler.get_algorithm_impls中的UnboundLocalError。初始由Mathieu Dupuy提供补丁。

  • bpo-25718: 修复了当total为None时,对accumulate()迭代器的pickling和复制。

  • bpo-26475: 修复了带有(?x)标志的正则表达式的调试输出。

  • bpo-26457: 修复了当结果前缀长度等于最大前缀长度时,IP网络类中的subnets()方法。基于Xiang Zhang的补丁。

  • bpo-26385: 如果NamedTemporaryFile()中的内部open()调用失败,则删除文件。由Silent Ghost提供补丁。

  • bpo-26402: 修复了XML-RPC客户端在服务器关闭持久连接时重试的问题。这是与3.5.0a4中的新http.client.RemoteDisconnected异常相关的回归问题。

  • bpo-25913: 在adobe=True时,base64.a85decode()中前导的 <~ 现在是可选的。由Swati Jaiswal提供补丁。

  • bpo-26186: 移除importlib.util.LazyLoader中的一个无效类型检查。

  • bpo-26367: 当指定了 level 但没有指定相应的包时,importlib.__import__()像builtins.__import__()一样引发SystemError。

  • bpo-26309: 在"socketserver"模块中,当verify_request()返回false时,关闭请求(关闭连接的套接字)。由Aviv Palivoda提供补丁。

  • bpo-25995: os.walk()不再使用与树深度成比例的FDs。

  • bpo-26117: os.scandir()迭代器现在不仅在迭代完成时关闭文件描述符,而且在因错误失败时也关闭。

  • bpo-25911: 恢复了在Windows上os.walk()中对字节路径的支持。

  • bpo-26045: 在使用http.client发布非Latin-1字符串时,向错误消息添加UTF-8建议。

  • bpo-12923: 即使有异常也重置FancyURLopener的重定向计数器。基于Brian Brazil和Daniel Rocco的补丁。

  • bpo-25945: 修复了解除 pickle functools.partial 对象时状态错误导致的崩溃问题。修复了 functools.partial 构造函数失败时的内存泄漏。functools.partial 的 "args" 和 "keywords" 属性现在总是分别具有 tuple 和 dict 类型。

  • bpo-26202: copy.deepcopy() 现在能正确复制具有非原子属性的 range() 对象。

  • bpo-23076: Path.glob() 现在在调用无效模式时会引发 ValueError。补丁由 Thomas Nyberg 提供。

  • bpo-19883: 修复了 zipimport 中可能的整数溢出问题。

  • bpo-26227: 在 Windows 上,socket 模块的 getnameinfo()、gethostbyaddr() 和 gethostbyname_ex() 函数现在从 ANSI 代码页而非 UTF-8 解码主机名。

  • bpo-26147: xmlrpc 现在可以处理无法用所使用的非 UTF-8 编码编码的字符串。

  • bpo-25935: 垃圾回收器现在可以打破 OrderedDict 的引用循环。

  • bpo-16620: 修复了 msilib.Directory.glob() 中的 AttributeError。

  • bpo-26013: 增加了对旧 Python 3 版本(3.4.3 及以下)创建的损坏协议 2 pickle 的兼容性。

  • bpo-25850: 默认使用交叉编译为 64 位 Windows。

  • bpo-17633: 改进zipimport对命名空间包的支持。

  • bpo-24705: 修复了 sysconfig._parse_makefile 不扩展出现在 $() 变量之前的 ${} 变量的问题。

  • bpo-22138: 修复了 mock.patch 在修补描述符时的行为。修补后恢复原始值。由 Sean McCully 提供补丁。

  • bpo-25672: 在 ssl 模块中,如果安全的话,启用 SSL_MODE_RELEASE_BUFFERS 模式选项。

  • bpo-26012: 在 pathlib.Path.[r]glob() 中不对符号链接进行 ** 模式的遍历。

  • bpo-24120: 在使用 pathlib.Path.[r]glob() 遍历树时忽略 PermissionError。由 Ulrich Petri 提供补丁。

  • bpo-25447: 如果 sys.stdin 没有缓冲区属性,fileinput 现在会直接使用它(恢复了向后兼容性)。

  • bpo-25447: 复制 lru_cache() 包装器对象现在总是有效,与被包装对象的类型无关(通过返回未更改的原始对象)。

  • bpo-24103: 修复了 ElementTree.XMLPullParser 中可能的使用后释放问题。

  • bpo-25860: os.fwalk() 在发生错误时不再跳过剩余的目录。原始由 Samson Lee 提供补丁。

  • bpo-25914: 修复并简化了 OrderedDict.__sizeof__。

  • bpo-25902: 修复了 ElementTree 迭代中的各种引用计数问题。

  • bpo-25717: 恢复在打开文件时容忍大多数fstat()错误的先前行为。这是3.5a1版本中的一个回归问题,阻止了匿名临时文件在特殊情况下的工作。

  • bpo-24903: 修复了当指定'-d'时compileall接受的参数数量的回归问题。对参数数量的检查已被完全删除,因为它从未正确工作过。

  • bpo-25764: 在subprocess模块中,当使用preexec_fn时,保留由fork()失败引起的任何异常。

  • bpo-6478: 在更改时区后,_strptime的正则表达式缓存现在会被time.tzset()重置。

  • bpo-14285: 当使用"python -m package"选项执行包且包初始化失败时,现在会报告正确的回溯。"runpy"模块现在让包初始化的异常传递回调用者,而不是引发ImportError。

  • bpo-19771: 同样在runpy和"-m"选项中,如果包甚至无法初始化(例如由于坏的 *.pyc 文件),则省略不相关的消息"...是一个包,不能直接执行"。

  • bpo-25177: 修复了非常小和非常大的数字的平均值问题。作为副作用,statistics.mean和statistics.variance应该会显著更快。

  • bpo-25718: 修复了复制状态为布尔值false的对象的问题。

  • bpo-10131: 修复了minidom文档的深拷贝问题。基于Marian Ganisin的补丁。

  • bpo-25725: 修复了在解包含元组指令的无效数据时pickle.loads()中的引用泄漏问题。

  • bpo-25663: 在Readline completer中,避免列出重复的全局名称,并在搜索内置名称之前搜索全局命名空间。

  • bpo-25688: 修复了ElementTree.iterparse()在引发错误时的文件泄露问题。

  • bpo-23914: 修复了解pickle数据损坏时unpickler引发的SystemError。

  • bpo-25691: 修复了删除ElementTree.Element属性时的崩溃问题。

  • bpo-25624: ZipFile现在总是为目录条目写入ZIP_STORED头。由王定远提供补丁。

  • 如果主机已解析,则跳过 getaddrinfo。由 A. Jesse Jiryu Davis 提供补丁。

  • bpo-26050: 添加 asyncio.StreamReader.readuntil() 方法。由 Марк Коренберг 提供补丁。

  • bpo-25924: 在 OS X 10.5 或更高版本上避免不必要的 getaddrinfo(3) 调用序列化。原始补丁由 A. Jesse Jiryu Davis 提供。

  • bpo-26406: 在当前版本的 OpenBSD 和 NetBSD 上避免不必要的 getaddrinfo(3) 调用序列化。由 A. Jesse Jiryu Davis 提供补丁。

  • bpo-26848: 修复 asyncio/subprocess.communicate() 以处理空输入。由 Jack O'Connor 提供补丁。

  • bpo-27040: 添加 loop.get_exception_handler 方法

  • bpo-27041: asyncio: 添加 loop.create_future 方法

  • bpo-27223: asyncio: 修复_read_ready和_write_ready以尊重_conn_lost。由Łukasz Langa提供补丁。

  • bpo-22970: asyncio:修复取消Condition.wait时的不一致性。由David Coles提供补丁。

IDLE

  • bpo-5124: 在 X11 上,现在粘贴选中的文本会替换选中内容。这匹配了 Windows、Mac、大多数现代 Linux 应用和 ttk 小部件上的粘贴工作方式。原始由 Serhiy Storchaka 提供补丁。

  • bpo-24759: 在 idlelib.idle_test.__init__ 中明确表示该目录是 test.test_idle 的私有实现和维护者的工具。

  • bpo-27196: 在运行 IDLE 测试时停止 'ThemeChanged' 警告。这些警告在其他警告被 #20567 抑制后仍然存在。将 Serhiy Storchaka 的 update_idletasks 解决方案应用于四个测试文件。在 idle_test/README.txt 中记录这一额外建议。

  • bpo-20567: 修改 idle_test/README.txt,提供避免测试中 tk 警告信息的建议。将建议应用于几个 IDLE 测试。

  • bpo-27117: 使颜色器 htest 和 turtledemo 支持深色主题。将配置文本小部件颜色的代码移至新函数。

  • bpo-26673: 当 tk 报告字体大小为 0 时,更改为大小 10。Linux 上的此类字体阻止了配置对话框的打开。

  • bpo-21939: 添加 IDLE 的渗滤器测试。原始由 Saimadhav Heblikar 提供补丁。

  • bpo-21676: 添加 IDLE 的替换对话框测试。原始由 Saimadhav Heblikar 提供补丁。

  • bpo-18410: 添加 IDLE 的搜索对话框测试。原始由 Westley Martínez 提供补丁。

  • bpo-21703: 为IDLE的撤销委托器添加测试。原始由Saimadhav Heblikar提供补丁。

  • bpo-27044: 添加ConfigDialog.remove_var_callbacks以防止内存泄漏。

  • bpo-23977: 在test_delegator中添加更多断言。

  • bpo-20640: 为 idlelib.configHelpSourceEdit 添加测试。由 Saimadhav Heblikar 提供补丁。

  • 在 IDLE 文档的 'IDLE-控制台差异' 部分,澄清使用 IDLE 运行如何影响 sys.modules 和标准流。

  • bpo-25507: 修复 IOBinding 中阻止打印的错误更改。增强 IOBinding htest 以包括所有主要 IOBinding 功能。

  • bpo-25905: 恢复 README.txt 中 ' 到 ’ 右单引号的不必要转换,并用 'ascii' 打开此文件和 NEWS.txt。将 CREDITS.txt 重新编码为 utf-8 并用 'utf-8' 打开。

文档

  • bpo-19489: 将搜索框从侧边栏移动到每个页面的页眉和页脚。由Ammar Askar提供补丁。

  • bpo-24136: 文档化新的 PEP 448 解包语法(3.5版本)。

  • bpo-26736: 尽可能在文档中使用 HTTPS 作为外部链接。

  • bpo-6953: 重新组织 Readline 模块文档,将相关函数分组,并添加更多细节,如访问哪些底层的 Readline 函数和变量。

  • bpo-23606: 向 ctypes 文档添加关于 cdll.msvcrt 的注释。

  • bpo-25500: 修正文档,不再声称__import__在全局范围内搜索。

  • bpo-26014: 更新 3.x 打包文档:* 现在在旧版页面中提供了指向新文档的 "参见" 链接 * 更新了指向 setuptools 文档的链接

测试

  • bpo-21916: 为 turtle 模块添加了测试。由 ingrid、Gregory Loyse 和 Jelle Zijlstra 提供补丁。

  • bpo-26523: 多进程线程池(multiprocessing.dummy.Pool)未经测试。

  • bpo-26015: 为可变序列的迭代器的 pickle 操作添加了新测试。

  • bpo-26325: 添加了 test.support.check_no_resource_warning() 来检查是否未发出 ResourceWarning。

  • bpo-25940: 将test_ssl改为使用self-signed.pythontest.net。这避免了对svn.python.org的依赖,该网站最近更改了根证书。

  • bpo-25616: OrderedDict 的测试从 test_collections 中提取出来,放入单独的文件 test_ordered_dict 中。

  • bpo-26583: 如果无法写入字节码文件,则在test_import中跳过test_timestamp_overflow测试。

构建

  • bpo-26884: 修复交叉构建中扩展模块的链接问题。由Xavier de Gaye提供补丁。

  • bpo-22359: 在交叉编译时禁用运行_freeze_importlib和pgen的规则。这些程序的输出通常与源代码一起保存,并且在本地构建时仍会重新生成。由Xavier de Gaye提供补丁。

  • bpo-27229: 修复树内构建的交叉编译pgen规则。由Xavier de Gaye提供补丁。

  • bpo-21668: 将audioop、_datetime、_ctypes_test模块链接到libm,Mac OS X除外。补丁由Xavier de Gaye编写。

  • bpo-25702: 添加了一个--with-lto配置选项,该选项将在make profile-opt期间启用构建时的链接时间优化。已知一些编译器和工具链在使用LTO时不会产生稳定的代码,因此在依赖它之前确保彻底测试。它可以比仅使用profile-opt提供几个%的速度提升。

  • bpo-26624: 添加了对ucrtbase[d].dll版本的验证,并对旧版本发出警告。

  • bpo-17603: 通过使用struct stat中st_blocks的低级检查,避免关于不存在的fileblocks.o文件的错误。

  • bpo-26079: 修复 tix-8.4.3.6 的构建输出文件夹。由 Bjoern Thiel 提交补丁。

  • bpo-26465: 更新 Windows 构建以使用 OpenSSL 1.0.2g。

  • bpo-24421: 在构建扩展之前,先编译 Modules/_math.c 一次。之前如果数学和 cmath 构建同时进行,可能会导致编译失败。

  • bpo-25348: 向 PCbuild\build.bat``添加了 ``--pgo--pgo-job 参数,用于构建时进行配置文件引导优化。旧的 PCbuild\build_pgo.bat 脚本现已弃用,仅调用``PCbuildbuild.bat --pgo %*``。

  • bpo-25827: 向 configure 添加了对使用 ICC 构建的支持,包括一个新的 --with-icc 标志。

  • bpo-25696: 修复了在 UNIX 上使用 make -j9 安装 Python 的问题。

  • bpo-26930: 更新OS X 10.5+ 32位仅安装程序以构建并与OpenSSL 1.0.2h链接。

  • bpo-26268: 更新 Windows 构建以使用 OpenSSL 1.0.2f。

  • bpo-25136: 支持 Apple Xcode 7 的新文本 SDK stub 库。

  • bpo-24324: 当使用 gcc 时不启用不可达代码警告,因为该选项在旧版本的 gcc 中不起作用,并且在 gcc-4.5 之后已被静默移除。

Windows

工具/示例

  • bpo-26799: 修复 python-gdb.py:不要在 Python 代码加载时一次性获取 C 类型,而是按需获取 C 类型。如果在 Python 可执行文件之前加载 python-gdb.py,C 类型可以改变。补丁由 Thomas Ilsche 编写。

  • bpo-26271: 修复Freeze工具以正确使用通过configure传递的标志。补丁由Daniel Shaulov提供。

  • bpo-26489: 向Tools/parser/unparse.py添加字典解包支持。由Guo Ci Teo提供补丁。

  • bpo-26316: 修复Argument Clinic中的变量名拼写错误。

Python 3.5.1 正式版

发布日期: 2015-12-06

核心与内置函数

  • bpo-25709: 修复了原地字符串连接和utf-8缓存的问题。

Windows

  • bpo-25715: Python 3.5.1安装程序显示错误的升级路径和启动器检测逻辑。

Python 3.5.1 rc1

发布日期: 2015-11-22

核心与内置函数

  • bpo-25630: 修复了在接受文件系统路径的函数中,参数解析时可能发生的段错误。

  • bpo-23564: 修复了 _posixsubprocess 内部关于如何将 fds_to_pass 传递给子进程的部分损坏的健全性检查。由于 subprocess.py 已经避免了这个问题,这个错误没有实际影响。

  • bpo-25388: 修复了在处理包含空字节的不可解码源代码时,分词器崩溃的问题。

  • bpo-25462: 在 OrderedDict 的 C 实现中,大多数操作现在只计算一次键的哈希值。

  • bpo-22995: __reduce__ 和 __reduce_ex__ 的默认实现现在拒绝那些未定义 __new__ 的内置类型。

  • bpo-25555: 修复解析器和 AST:当从 Python 对象编译 AST 时,填充 "arg" 节点的 lineno 和 col_offset。

  • bpo-24802: 当 int()、float()、compile()、exec() 和 eval() 传递类似字节的对象时,避免缓冲区过度读取。这些对象不一定以空字节终止,但函数假设它们是。

  • bpo-24726: 修复了 OrderedDict 在直接调用 dict 方法后被 repr() 时崩溃和泄漏 NULL 的问题。

  • bpo-25449: 现在在 C 实现和 Python 实现中,迭代具有不稳定哈希键的 OrderedDict 都会引发 KeyError。

  • bpo-25395: 修复了在垃圾回收高度嵌套的 OrderedDict 结构时崩溃的问题。

  • bpo-25274: sys.setrecursionlimit() 现在如果新的递归限制根据当前递归深度太低会引发 RecursionError。同时修改“低水位标记”公式使其单调。这个标记用于决定何时重置线程状态的溢出标志。

  • bpo-24402: 修复 input() 在 sys.stdout.fileno() 失败时提示重定向的 stdout。

  • bpo-24806: 防止不允许被继承的内置类型通过多重继承被继承。

  • bpo-24848: 修复了UTF-7解码畸形数据时的一些错误。

  • bpo-25280: 在详细模式(-v)下发出的导入跟踪消息不再格式化两次。

  • bpo-25003: 在Solaris 11.3或更新版本上,os.urandom() 现在使用 getrandom() 函数而不是 getentropy() 函数。getentropy() 函数为了生成非常高质量的熵是阻塞的,os.urandom() 不需要如此高质量的熵。

  • bpo-25182: stdprinter(在启动时导入io模块之前用作sys.stderr)现在使用backslashreplace错误处理程序。

  • bpo-25131: 使集合/字典字面量和推导式的行号和列偏移与开括号对应。

  • bpo-25150: 从公共Python.h头文件中隐藏私有的 _Py_atomic_xxx 符号,以修复与OpenMP的编译错误。PyThreadState_GET()成为PyThreadState_Get()的别名,以避免ABI不兼容。

  • bpo-25626: 修改了三个zlib函数以接受适合Py_ssize_t的大小,但在内部将这些大小限制为UINT_MAX。这解决了3.5版本中GzipFile.read()无法读取大于2或4 GiB块的回归问题。此更改影响zlib.Decompress.decompress()的max_length参数、zlib.decompress()的bufsize参数和zlib.Decompress.flush()的length参数。

  • bpo-25583: 当操作系统优先考虑如EACCES这样的错误而不是EEXIST时,避免os.makedirs(exist_ok=True)引发错误。

  • bpo-25593: 修改了asyncio中EventLoop.stop()的语义。

  • bpo-6973: 当我们知道一个subprocess.Popen进程已经死亡时,不允许send_signal()、terminate()或kill()方法执行任何操作,因为它们可能会信号到不同的进程。

  • bpo-25590: 在Readline completer中,每个属性只调用一次getattr()。

  • bpo-25498: 修复了在垃圾回收由包装memoryview创建的ctypes对象时的崩溃问题。这是3.5a1中的一个回归。基于Eryksun的补丁。

  • bpo-25584: 将"escape"添加到glob模块的__all__列表中。

  • bpo-25584: 修复了以 ** 开头的递归glob()模式。

  • bpo-25446: 修复 smtplib 的 AUTH LOGIN 支持中的回归问题。

  • bpo-18010: 修复 pydoc web 服务器的模块搜索功能,以处理导入包时的异常。

  • bpo-25554: 消除了正则表达式解析中的循环引用。

  • bpo-25510: 如果 FileInput 以二进制模式打开,fileinput.FileInput.readline() 现在在末尾返回 b'' 而不是 ''。由 Ryosuke Ito 提供补丁。

  • bpo-25503: 修复了 inspect.getdoc() 对于属性的继承文档字符串的处理。原始由 John Mark Vandenberg 提供补丁。

  • bpo-25515: 在 uuid.uuid4 中始终使用 os.urandom 作为随机性来源。

  • bpo-21827: 修复了 textwrap.dedent() 当最大公共空白是最小前导空白的子字符串时的情况。基于 Robert Li 的补丁。

  • bpo-25447: lru_cache() 包装器对象现在可以被复制和 pickle(通过返回未更改的原始对象)。

  • bpo-25390: typing: 不因 Union[str, Pattern] 而崩溃。

  • bpo-25441: asyncio: 当套接字关闭时从 drain() 引发错误。

  • bpo-25410: 清理并修复了 OrderedDict 的 C 实现中的小错误。

  • bpo-25411: 通过更好地使用 email 包,改进了 SMTPHandler 中的 Unicode 支持。感谢用户 simon04 的补丁。

  • bpo-25407: 移除了关于 formatter 模块在 Python 3.6 中被移除的提及。

  • bpo-25406: 修复了 OrderedDict.move_to_end() 的 C 实现中的一个错误,该错误导致在将几个项目移动到有序字典的开头后在迭代中出现分段错误或挂起。

  • bpo-25364: zipfile 现在可以在禁用线程的构建中工作。

  • bpo-25328: 如果 decode_data 和 enable_SMTPUTF8 都被设置为 true,smtpd 的 SMTPChannel 现在会正确地引发 ValueError。

  • bpo-25316: 当未安装 MSVC 时,distutils 会引发 OSError 而不是 DistutilsPlatformError。

  • bpo-25380: 修复了 pickletools.opcodes 中 STACK_GLOBAL 操作码的协议。

  • bpo-23972: 更新了 asyncio 的数据报创建方法,允许在绑定套接字之前设置 reuseport 和 reuseaddr 套接字选项。与现有的 asyncio create_server 方法类似,如果操作系统是 'posix'(除非平台是 Cygwin),数据报套接字的 reuseaddr 选项默认为 True。由 Chris Laws 提供补丁。

  • bpo-25304: 添加了 asyncio.run_coroutine_threadsafe()。这让你可以从另一个线程向循环提交一个协程,返回一个 concurrent.futures.Future。由 Vincent Michel 提供。

  • bpo-25232: 修复 CGIRequestHandler,使其在第一个问号 (?) 处而不是最后一个问号处将查询与 URL 分开。补丁来自 Xiang Zhang。

  • bpo-24657: 防止 CGIRequestHandler 像处理路径一样在 URL 的查询部分折叠斜杠。补丁来自 Xiang Zhang。

  • bpo-24483: functools.lru_cache()的C实现现在只计算一次key的哈希。

  • bpo-22958: weakref.WeakValueDictionary的构造函数和更新方法现在接受self和dict关键字参数。

  • bpo-22609: collections.UserDict的构造函数现在接受self关键字参数。

  • bpo-25111: 修复了traceback.FrameSummary的比较。

  • bpo-25262: 在Python的解pickler实现中增加了对BINBYTES8操作码的支持。在C实现中,对于BINUNICODE8和BINBYTES8操作码的64位大小的高32位不再在32位平台上被静默忽略。

  • bpo-25034: 修复了string.Formatter在自动编号和嵌套format_specs时的问题。由Anthon van der Neut提供补丁。

  • bpo-25233: 重写了asyncio.Queue和asyncio.Semaphore的内部实现,使其更加易懂和正确。

  • bpo-25203: 失败的 readline.set_completer_delims() 不再使模块处于不一致状态。

  • bpo-23600: tzinfo.fromutc() 的默认实现在某些情况下返回了错误的结果。

  • bpo-23329: 允许ssl模块与旧版本的LibreSSL一起构建。

  • 防止_Unpickler_Read中的溢出。

  • bpo-25047: Element Tree写入的XML编码声明现在尊重用户给出的大小写。这恢复了以大写形式写入编码名称(如“UTF-8”)的能力,这在Python 2中是可行的。

  • bpo-25135: 通过在清除前清空deque来使deque_clear()更安全。这有助于避免可能的可重入性问题。

  • bpo-19143: platform模块现在从kernel32.dll读取Windows版本以避免兼容性垫片。

  • bpo-25092: 修复了当errno已经设置为EINVAL时datetime.strftime()失败的问题。

  • bpo-23517: 修复了datetime.datetime的fromtimestamp()和utcfromtimestamp()方法中的舍入问题:微秒现在被舍入到最接近的偶数(ROUND_HALF_EVEN),而不是向负无穷舍入(ROUND_FLOOR)。重要的是,这些方法使用与datetime.timedelta相同的舍入模式,以保持属性:(datetime(1970,1,1) + timedelta(seconds=t)) == datetime.utcfromtimestamp(t)。这也是round(float)使用的舍入模式。

  • bpo-25155: 修复了Windows上的datetime.datetime.now()和datetime.datetime.utcnow()以支持2038年之后的日期。这是在Python 3.5.0中引入的回归问题。

  • bpo-25108: 在没有参数的情况下调用traceback函数print_stack()、format_stack()和extract_stack()时省略内部帧。

  • bpo-25118: 修复了Python 3.5.0在Windows上os.waitpid()中的一个回归问题。

  • bpo-24684: socket.socket.getaddrinfo() 现在调用 PyUnicode_AsEncodedString() 而不是调用主机的 encode() 方法,以正确处理具有不返回字节字符串的 encode() 方法的自定义字符串。现在直接调用 IDNA 编解码器的编码器,而不是调用字符串的 encode() 方法。

  • bpo-25060: 正确计算 BUILD_MAP 操作码的堆栈使用情况。

  • bpo-24857: 现在将 call_args 与长序列比较时正确返回布尔结果,而不是引发异常。由 A Kaptur 提供补丁。

  • bpo-23144: 确保即使 convert_charrefs 为 True,HTMLParser.feed() 也能返回所有数据。

  • bpo-24982: 使用 "zip" 格式的 shutil.make_archive() 现在在 ZIP 文件中为目录(包括空目录)添加条目。

  • bpo-25019: 修复了由设置 expat 解析器的非字符串键引起的崩溃。基于 John Leitch 的补丁。

  • bpo-16180: 如果文件有语法错误,退出 pdb,而不是将用户困在无限循环中。由 Xavier de Gaye 提供补丁。

  • bpo-24891: 修复 Python 启动时如果标准输入(0)、标准输出(1)或标准错误(2)的文件描述符在 Python 创建 sys.stdin、sys.stdout 和 sys.stderr 对象时被关闭导致的竞态条件。如果对象创建失败,这些属性现在设置为 None,而不是引发 OSError 异常。初始补丁由 Marco Paolini 编写。

  • bpo-24992: 修复 collections.OrderedDict 构造函数中的错误处理和与垃圾收集相关的竞态条件。

  • bpo-24881: 在 Windows 和 Cygwin 上修复了 Python 实现的 FileIO 中设置二进制模式的问题。补丁来自 Akira Li。

  • bpo-25578: 修复 SSLSocket.getpeercer() 中的另一个内存泄漏问题。

  • bpo-25530: 默认情况下,在创建 ssl.SSLContext 时禁用易受攻击的 SSLv3 协议。

  • bpo-25569: 修复 SSLSocket.getpeercert() 中的内存泄漏问题。

  • bpo-25471: 从 accept() 返回的套接字不应显示为非阻塞。

  • bpo-25319: 当 threading.Event 被重新初始化时,底层条件应使用常规锁而不是递归锁。

  • bpo-21112: 修复 unittest.expectedFailure 在子类上的回归问题。补丁来自 Berker Peksag。

  • bpo-24764: cgi.FieldStorage.read_multi() 现在忽略部分头中的 Content-Length 头。补丁由 Peter Landry 编写,Pierre Quentel 审阅。

  • bpo-24913: 修复 deque.index() 中的溢出错误。由 John Leitch 和 Bryce Darling 发现。

  • bpo-24774: 修复 http.server.test 中的文档字符串。补丁来自 Chiu-Hsiang Hsu。

  • bpo-21159: 改进 configparser.InterpolationMissingOptionError 中的消息。补丁来自 Łukasz Langa。

  • bpo-20362: 在 assertRegex 中正确遵循 TestCase.longMessage。补丁来自 Ilia Kurenkov。

  • bpo-23572: 修复了 functools.singledispatch 在具有假元类的类上的问题。补丁来自 Ethan Furman。

  • asyncio: ensure_future() 现在接受可等待对象。

IDLE

  • bpo-15348: 在关闭调试器窗口(在 IDLE 进程中运行)之前停止调试器引擎(通常在用户进程中)。这防止了被捕获并忽略的 RuntimeErrors。

  • bpo-24455: 防止IDLE在以下情况下挂起:a) 当调试器处于活动状态时关闭shell(15347);b) 使用[X]按钮关闭调试器(15348);以及c) 当调试器已经处于活动状态时再次激活(24455)。Mark Roseman的补丁通过两个更改来实现这一点。1. 使用为此目的设计的tcl vwait机制(而不是root.mainloop & .quit)暂停和恢复gui.interaction方法。2. 在gui.run中,允许任何现有的交互首先终止。

  • 在IDLE的'终止程序?'消息中,将'程序'改为'您的程序',以更清楚地表明所指的是当前运行的用户程序,而不是IDLE本身。

  • bpo-24750: 改善IDLE编辑器窗口状态栏的外观。Patch by Mark Roseman。

  • bpo-25313: 更改新内置文本颜色主题的处理,以更好地解决由IDLE Dark的添加引入的兼容性问题。在idlelib中一致地使用修订后的idleConf.CurrentTheme。

  • bpo-24782: 扩展配置现在是IDLE首选项对话框中的一个标签,而不是一个单独的对话框。原来的标签现在是一个排序列表。Patch by Mark Roseman。

  • bpo-22726: 重新激活配置对话框帮助按钮,包含一些关于其他按钮和新IDLE Dark主题的内容。

  • bpo-24820: IDLE现在有一个'IDLE Dark'内置文本颜色主题。它或多或少是IDLE Classic的反转,背景为钴蓝色。字符串、注释、关键字等仍然是绿色、红色、橙色等。要在2015年11月之前发布的IDLEs中使用它,点击'保存为新的自定义主题'按钮并输入一个新名称,如'Custom Dark'。自定义主题适用于任何IDLE版本,并且可以修改。

  • bpo-25224: README.txt现在是IDLE开发者和好奇用户的idlelib索引。以前的用户内容现在在IDLE文档章节中。'IDLE'现在意味着'集成开发和学习环境'。

  • bpo-24820: 用户现在可以在设置->自定义高亮中设置断点颜色。原始由Mark Roseman提供补丁。

  • bpo-24972: 非活动选择背景现在在所有系统上都与用户配置的活动选择背景相匹配。在Windows上,找到的项目现在总是高亮显示。初始由Mark Roseman提供补丁。

  • bpo-24570: Idle:在受tk回归影响的Mac上显示调用提示和完成框。初始补丁由Mark Roseman提供。

  • bpo-24988: Idle ScrolledList上下文菜单(在调试器中使用)现在在Mac Aqua上工作。由Mark Roseman提供补丁。

  • bpo-24801: 使右键点击上下文菜单在Mac Aqua上工作。由Mark Roseman提供补丁。

  • bpo-25173: 将tkinter消息框与特定小部件关联。对于Mac OSX,使它们成为'表单'。由Mark Roseman提供补丁。

  • bpo-25198: 增强现在用于Idle Help的初始html查看器。正确缩进固定间距文本(由Mark Roseman提供补丁)。给代码片段一个非常类似Sphinx的浅蓝灰色背景。重用用户为shell和编辑器设置的初始宽度和高度。当使用目录(TOC)菜单时,将部分标题放在屏幕顶部。

  • bpo-25225: 压缩并重写Idle文档中关于文本颜色的部分。

  • bpo-21995: 解释IDLE和控制台Python之间的一些差异。

  • bpo-22820: 解释在从Idle编辑器运行文件时需要 print 的原因。

  • bpo-25224: 文档:增加Idle功能列表和无子进程部分。

  • bpo-25219: 更新Idle命令行选项的文档。有些选项缺失,注释也不正确。

  • bpo-24861: 大多数idlelib是私有的,可能会更改。使用idleib.idle.*来启动Idle。参见idlelib.__init__.__doc__。

  • bpo-25199: Idle:为未来的维护者添加同步注释。

  • bpo-16893: 用 help.html 替换 help.txt 用于 Idle 文档显示。新的 idlelib/help.html 是从 Doc/build/html/library/idle.html 去除右侧空白的版本。它看起来比 help.txt 更好,并且能更好地记录发布的 Idle。为此文件工作的 tkinter html 查看器由 Mark Roseman 编写。现在未使用的 EditorWindow.HelpDialog 类和 helt.txt 文件已被弃用。

  • bpo-24199: 弃用未使用的 idlelib.idlever,可能在 3.6 中移除。

  • bpo-24790: 移除多余的代码(这也造成了 2 和 3 的冲突)。

文档

  • bpo-22558: 将剩余的文档链接添加到Python编码模块的源代码中。由Yoni Lavi提供补丁。

  • bpo-12067: 重写语言参考中表达式章节的比较部分。一些关于比较混合类型的细节不正确或含糊。NotImplemented 仅在比表达式章节更低的层次相关。增加了比较 range() 对象的细节,以及用户定义类的默认行为和一致性建议。补丁来自 Andy Maier。

  • bpo-24952: 阐明 "threading" 和 "_thread" 模块中 stack_size() 的默认 size 参数。来自 Mattip 的补丁。

  • bpo-23725: 彻底修改 tempfile 文档。注意 mktemp 的弃用状态。补丁来自 Zbigniew Jędrzejewski-Szmek。

  • bpo-24808: 更新一些 PyTypeObject 字段的类型。补丁来自 Joseph Weston。

  • bpo-22812: 修复 unittest 发现示例。补丁来自 Pam McA'Nulty。

测试

  • bpo-25449: 为 OrderedDict 的子类添加了测试。

  • bpo-25099: 使 test_compileall 在无法写入 sys.path 上的条目时不失败(在 Windows 的管理安装中常见)。

  • bpo-23919: 防止测试套件中出现断言对话框。

  • PCbuild\rt.bat 现在可以接受无限数量的参数传递给regrtest.py。之前有9个的限制。

构建

  • bpo-24915: 为 PGO 构建添加 LLVM 支持,并使用测试套件生成配置文件数据。初始补丁来自 Intel 的 Alecsandru Patrascu。

  • bpo-24910: Windows MSI 现在具有唯一的显示名称。

  • bpo-24986: 现在可以在 Windows 上构建 Python 而不会在没有外部库的情况下出现错误。

Windows

  • bpo-25450: 更新快捷方式以在安装目录中启动 Python。

  • bpo-25164: 将默认所有用户安装目录更改为与每用户目录匹配。

  • bpo-25143: 改进了对不支持平台的安装程序错误消息。

  • bpo-25163: 在使用非默认设置时,在安装程序中显示正确的目录。

  • bpo-25361: 在Windows 32位构建中禁用SSE2指令的使用。

  • bpo-25089: 在升级时未选择启动器的情况下,为安装程序添加日志记录。

  • bpo-25165: 如果其他版本仍存在,Windows卸载不应移除启动器。

  • bpo-25112: py.exe启动器缺少图标。

  • bpo-25102: Windows安装程序未预编译-O或-OO。

  • bpo-25081: 在升级时,使安装程序中的返回按钮返回到升级页面。

  • bpo-25091: 增加安装程序的字体大小。

  • bpo-25126: 澄清非Web安装程序将下载一些组件。

  • bpo-25213: 恢复manifest中的requestedExecutionLevel以禁用UAC虚拟化。

  • bpo-25022: 删除了非常过时的 PC/example_nt/ 目录。

工具/示例

  • bpo-25440: 修复python-config --extension-suffix的输出。

Python 3.5.0 正式版

发布日期: 2015-09-13

构建

  • bpo-25071: Windows安装程序在静默安装时不应需要TargetDir参数。

Python 3.5.0 rc4

发布日期: 2015-09-09

  • bpo-25029: 修复test_strptime中的MemoryError。

构建

  • bpo-25027: 恢复部分静态构建选项并将vcruntime140.dll添加到Windows安装中。

Python 3.5.0 rc3

发布日期: 2015-09-07

核心与内置函数

  • bpo-24305: 防止导入子系统堆栈帧被warnings.warn(stacklevel=)参数计数。

  • bpo-24912: 防止__class__赋值给不可变的内置对象。

  • bpo-24975: 修复AST编译为 PEP 448 语法。

  • bpo-24917: time_strftime()缓冲区过度读取。

  • bpo-24748: 为了解决与py2exe和pywin32发现的兼容性问题,imp.load_dynamic()再次忽略先前加载的模块,以支持Python模块用扩展模块替换自己。由Petr Viktorin提供补丁。

  • bpo-24635: 修复了typing.py中的一个错误,其中isinstance([], typing.Iterable)会返回一次True,然后在后续调用中返回False。

  • bpo-24989: 如果设置的位置超出大小,修复BytesIO.readline()中的缓冲区过度读取。基于John Leitch的补丁。

  • bpo-24913: 修复 deque.index() 中的溢出错误。由 John Leitch 和 Bryce Darling 发现。

Python 3.5.0 rc2

发布日期: 2015-08-25

核心与内置函数

  • bpo-24769: 当动态加载被禁用时,解释器现在可以正常启动。由Petr Viktorin提供补丁。

  • bpo-21167: 现在即使没有指定-fp-model strict,当Python用ICC编译时,NAN操作也能被正确处理。

  • bpo-24492: 当尝试执行 from .. import ... 语句时,缺少__name__属性的“package”将触发ImportError而不是AttributeError。

  • bpo-24847: 从Tcl/Tk中移除了vcruntime140.dll依赖。

  • bpo-24839: platform._syscmd_ver现在会引发DeprecationWarning

  • bpo-24867: 修复了'async def'协程的Task.get_stack()

Python 3.5.0 rc1

发布日期: 2015-08-09

核心与内置函数

  • bpo-24667: 在所有底层字典调整大小的情况下调整odict的大小。

  • bpo-24824: codecs.encode()和codecs.decode()的签名现在与pydoc兼容。

  • bpo-24634: 在Windows上导入uuid不应该尝试加载libc

  • bpo-24798: _msvccompiler.py没有正确支持清单

  • bpo-4395: 更好的二进制运算符测试和文档。由Martin Panter提供补丁。

  • bpo-23973: 从GitHub仓库更新typing.py。

  • bpo-23004: mock_open()现在当read_data的类型是bytes时能正确读取二进制数据。初始由Aaron Hill提供补丁。

  • bpo-23888: 处理cookie过期时间中的小数时间。由ssh提供补丁。

  • bpo-23652: 使得可以针对Linux标准基础的libc头文件编译select模块,这些头文件不包含一些EPOLL宏。由Matt Frank提供补丁。

  • bpo-22932: 修复email.utils.formatdate中的时区问题。补丁来自Dmitry Shachnev。

  • bpo-23779: 如果认证器尝试中止,imaplib会引发TypeError。补丁来自Craig Holmquist。

  • bpo-23319: 修复ctypes.BigEndianStructure,正确交换字节。补丁由Matthieu Gautier编写。

  • bpo-23254: 记录如何关闭TCPServer监听套接字。补丁来自Martin Panter。

  • bpo-19450: 更新Windows和OS X安装程序构建以使用SQLite 3.8.11。

  • bpo-17527: 向wsgiref.validator添加PATCH。补丁来自Luca Sbardella。

  • bpo-24791: 修复调用语法 'g(*a or b)' 的语法回归问题。

IDLE

  • bpo-23672: 允许Idle编辑和运行名称中包含星体字符的文件。由Mohd Sanad Zaki Rizvi提供补丁。

  • bpo-24745: Idle编辑器默认字体。从Courier切换到平台敏感的TkFixedFont。这不应影响当前自定义的字体选择。如果存在问题,请编辑$HOME/.idlerc/config-main.cfg并从[Editor Window]中移除'fontxxx'条目。由Mark Roseman提供补丁。

  • bpo-21192: Idle编辑器。当运行文件时,将其名称放入重启栏。不打印虚假提示。原始由Adnan Umer提供补丁。

  • bpo-13884: Idle菜单。移除撕裂线。由Roger Serwy提供补丁。

文档

  • bpo-24129: 明确名称解析的参考文档。这包括移除读者会熟悉Python在引入函数命名空间的词法作用域之前使用的名称解析方案的假设。由Ivan Levkivskyi提供补丁。

  • bpo-20769: 改进reload()文档。由Dorian Pula提供补丁。

  • bpo-23589: 从FAQ中移除重复句子。由Yongzhi Pan提供补丁。

  • bpo-24729: 更正IO教程以匹配关于open函数编码参数的实现。

测试

  • bpo-24751: 当使用 -w 命令行选项运行regrtest时,如果所有测试在重新运行时成功,则不再将测试运行标记为失败。

Python 3.5.0 beta 4

发布日期: 2015-07-26

核心与内置函数

  • bpo-23573: 在Linux上恢复了bytes.rfind()和bytearray.rfind()对单字节参数的优化。

  • bpo-24569: 使 PEP 448 字典评估更加一致。

  • bpo-24583: 修复集合在被更新时发生突变导致的崩溃。

  • bpo-24407: 修复字典在被更新时发生突变导致的崩溃。

  • bpo-24619: 新的异步/等待标记化方法。因此,现在可以有一行的'async def foo(): await ..'函数。

  • bpo-24687: 修复函数参数注释中SyntaxError的反射泄漏。

  • bpo-15944: memoryview:在转换为字节时允许任意格式。由Martin Panter提供补丁。

  • bpo-23441: rcompleter现在打印一个制表符而不是显示空字的可能完成项。初始由Martin Sekera提供补丁。

  • bpo-24683: 修复了使用不适当类型的参数调用_json函数时的崩溃问题。

  • bpo-21697: shutil.copytree()现在正确处理指向目录的符号链接。由Eduardo Seabra和Thomas Kluyver提供补丁。

  • bpo-14373: 修复了在构建lru_cache(C实现)期间调用gc.collect()时出现的段错误。

  • bpo-24695: 修复了traceback.print_exception()中的一个回归问题。如果exc_traceback为None,我们不应该像文档中描述的那样打印回溯头。

  • bpo-24620: Random.setstate()现在验证state最后一个元素的值。

  • bpo-22485: 修复了导致 inspect.getsource 在嵌套函数上返回不正确结果的问题。

  • bpo-22153: 改进unittest文档。补丁来自Martin Panter和evilzero。

  • bpo-24580: 在re模式中,现在明确禁止对开放组的符号组引用以及数字组引用。

  • bpo-24206: 修复了inspect类的__eq__和__ne__方法。

  • bpo-24631: 修复了timeit模块中多行设置的回归问题。

  • bpo-18622: unittest.mock.mock_open().reset_mock 会无限递归。补丁来自 Nicola Palumbo 和 Laurent De Buyst。

  • bpo-23661: unittest.mock 的 side_effects 现在可以再次是异常。这是对 Python 3.4 的一个回归。补丁来自 Ignacio Rossi

  • bpo-24608: chunk.Chunk.read()现在总是返回字节,而不是str。

  • bpo-18684: 修复了re模块中读取缓冲区的问题。

  • bpo-24259: 如果存档在数据段内被截断,tarfile现在会引发ReadError。

  • bpo-15014: SMTP.auth()和SMTP.login()现在支持RFC 4954中SMTP AUTH命令的可选初始响应参数。

  • bpo-24669: 修复inspect.getsource()对于'async def'函数的问题。由Kai Groner提供补丁。

  • bpo-24688: ast.get_docstring()对于'async def'函数。

构建

  • bpo-24603: 更新Windows构建和OS X 10.5安装程序以使用OpenSSL 1.0.2d。

Python 3.5.0 beta 3

发布日期: 2015-07-05

核心与内置函数

  • bpo-24467: 修复了 bytearray 中可能的缓冲区越界读取问题。bytearray 对象现在总是为尾随的空字节分配空间,其缓冲区现在总是以空字符结尾。

  • 升级到 Unicode 8.0.0。

  • bpo-24345: 为稳定 ABI 添加 Py_tp_finalize 插槽。

  • bpo-24400: 为 PEP 492 协程引入一个独特的类型;添加 types.CoroutineType, inspect.getcoroutinestate, inspect.getcoroutinelocals;协程不再使用 CO_GENERATOR 标志;sys.set_coroutine_wrapper 仅适用于 'async def' 协程;inspect.iscoroutine 不再使用 collections.abc.Coroutine,它旨在仅测试纯 'async def' 协程;添加新的操作码:GET_YIELD_FROM_ITER;修复 types.coroutine 中使用的生成器包装器为 collections.abc.Generator 的实例;collections.abc.Awaitable 和 collections.abc.Coroutine 不能再用于检测基于生成器的协程——请使用 inspect.isawaitable 代替。

  • bpo-24450: 向生成器添加 gi_yieldfrom 和向协程添加 cr_await。由 Benno Leslie 和 Yury Selivanov 贡献。

  • bpo-19235: 添加新的 RecursionError 异常。由 Georg Brandl 提供补丁。

  • bpo-21750: mock_open.read_data 现在可以从每个实例中读取,就像在 Python 3.3 中一样。

  • bpo-24552: 修复 _pickle 模块在错误情况下的释放后使用问题。

  • bpo-24514: tarfile 现在容忍仅由空白组成的数字字段。

  • bpo-19176: 修复了 ElementTree 的 C 实现中与 doctype() 相关的错误。XMLParser 子类不再发出带有默认 doctype() 方法的弃用警告。直接调用 doctype() 现在会发出警告。如果目标的 doctype() 被调用,解析器的 doctype() 现在不会被调用。基于 Martin Panter 的补丁。

  • bpo-20387: 在 tab 缩进的块中恢复 tokenize/untokenize 的语义往返正确性。

  • bpo-24456: 修复了 audioop 模块的 adpcm2lin() 和 lin2adpcm() 函数中可能的缓冲区越界读取问题。

  • bpo-24336: contextmanager装饰器现在可以与名为"func"和"self"的关键字参数的函数一起工作。由Martin Panter提供补丁。

  • bpo-24522: 修复json加速模块中可能的整数溢出问题。

  • bpo-24489: 确保先前设置的C errno不会干扰cmath.polar()。

  • bpo-24408: 修复了tkinter.Font的measure()和metrics()方法中的AttributeError。

  • bpo-14373: functools.lru_cache()的C实现现在可以与方法一起使用。

  • bpo-24347: 如果PyDict_GetItemWithError返回NULL,则设置KeyError。

  • bpo-24348: 删除多余的incref/decref。

  • bpo-24359: 在迭代期间检查OrderedDict大小的变化。

  • bpo-24368: 支持OrderedDict方法中的关键字参数。

  • bpo-24362: 简化C OrderedDict快速节点调整大小的逻辑。

  • bpo-24377: 修复OrderedDict.__repr__中的引用泄漏。

  • bpo-24369: 防御迭代期间的键变更。

测试

  • bpo-24373: _testmultiphase和xxlimited现在使用tp_traverse和tp_finalize来避免当tp_dealloc与PyType_FromSpec结合时遇到的引用泄漏(详情见 bpo-16690)。

文档

  • bpo-24458: 更新文档以涵盖扩展模块的多阶段初始化(PEP 489)。由Petr Viktorin提供补丁。

  • bpo-24351: 澄清在string.Template实例上下文中“标识符”的含义。

构建

  • bpo-24432: 更新Windows构建和OS X 10.5安装程序以使用OpenSSL 1.0.2c。

Python 3.5.0 beta 2

发布日期: 2015-05-31

核心与内置函数

  • bpo-24284: str类的startswith和endswith方法在找到空字符串且索引完全超出范围时不再返回True。

  • bpo-24115: 更新PyObject_IsTrue()、PyObject_Not()、PyObject_IsInstance()、PyObject_RichCompareBool()和_PyDict_Contains()的使用,以正确检查和处错误。

  • bpo-24328: 修复导入单字符扩展模块的问题。

  • bpo-11205: 在字典显示中,先评估键再评估值。

  • bpo-24285: 修复了阻止从包内导入扩展模块的回归问题。由Petr Viktorin提供补丁。

  • bpo-23247: 修复了CJK编解码器中StreamWriter.reset()的崩溃问题。

  • bpo-24270: 根据 PEP 485 添加了math.isclose()和cmath.isclose()函数。由Chris Barker和Tal Einat贡献。

  • bpo-5633: 修复了当语句是字符串而设置不是时的timeit问题。

  • bpo-24326: 修复了audioop.ratecv()使用非默认weightB参数的问题。原始补丁由David Moore提供。

  • bpo-16991: 添加了OrderedDict的C实现。

  • bpo-23934: 修复inspect.signature以正确失败于缺乏签名信息的内置类型。初始由James Powell提供补丁。

Python 3.5.0 beta 1

发布日期: 2015-05-24

核心与内置函数

  • bpo-24276: 修复了属性描述符getter的优化。

  • bpo-24268: PEP 489: 多阶段扩展模块初始化。由Petr Viktorin提供补丁。

  • bpo-23955: 添加pyvenv.cfg选项以抑制在Windows上生成sys.path时的注册表/环境查找。

  • bpo-24257: 修复了伪造的types.SimpleNamespace比较中的系统错误。

  • bpo-22939: 修复了迭代器对象中的整数溢出问题。由Clement Rouault提供补丁。

  • bpo-23985: 修复了从bytearray前端删除一个切片后追加其他字节数据时可能发生的缓冲区溢出问题。

  • bpo-24102: 修复了标准错误处理程序中的异常类型检查。

  • bpo-15027: UTF-32编码器现在快3到7倍。

  • bpo-23290: 为目标为空的情况优化了set_merge()。(由Serhiy Storchaka贡献。)

  • bpo-2292: PEP 448: 额外的解包泛化。

  • bpo-24096: 使warnings.warn_explicit对warnings.filters列表的突变更加健壮。

  • bpo-23996: 避免当委托的生成器引发未标准化的StopIteration异常时崩溃。由Stefan Behnel提供补丁。

  • bpo-23910: 优化property() getter调用。由Joe Jevnik提供补丁。

  • bpo-23911: 将基于路径的importlib引导代码移动到一个单独的冻结模块。

  • bpo-24192: 修复命名空间包的导入问题。

  • bpo-24022: 修复处理不可解码源代码时标记器的崩溃问题。

  • bpo-9951: 为bytes、bytearray和memoryview添加了hex()方法。

  • bpo-22906: PEP 479: 改变生成器内部StopIteration的处理方式。

  • bpo-24017: PEP 492: 使用async和await语法实现协程。

  • bpo-14373: 添加了functools.lru_cache()的C实现。基于Matt Joiner和Alexey Kachayev的补丁。

  • bpo-24230: tempfile模块现在接受prefix、suffix和dir参数的bytes类型,并在这种情况下返回bytes(与os模块的API相匹配)。

  • bpo-22189: collections.UserString现在支持__getnewargs__()、__rmod__()、casefold()、format_map()、isprintable()和maketrans()。由Joe Jevnik提供补丁。

  • bpo-24244: 防止在Windows上遇到无效格式字符串时strftime终止。

  • bpo-23973: PEP 484: 添加typing模块。

  • bpo-23086: collections.abc.Sequence()抽象基类为index()混入添加了 startstop 参数。由Devin Jeanpierre提供补丁。

  • bpo-20035: 将用于在Windows上设置Tcl/Tk环境的 tkinter._fix 模块替换为 _tkinter 模块中的私有函数,该函数不会对环境进行永久性更改。

  • bpo-24257: 修复了使用伪造游标类型时sqlite3.Row构造函数中的段错误。

  • bpo-15836: assertRaises()、assertRaisesRegex()、assertWarns()和assertWarnsRegex()断言现在检查第一个参数的类型以防止可能的用户错误。基于Daniel Wagner-Hall的补丁。

  • bpo-9858: 为_io.RawIOBase添加缺失的方法存根。由Laura Rupprecht提供补丁。

  • bpo-22955: operator模块中的attrgetter、itemgetter和methodcaller对象现在支持pickle。为这些对象添加了可读和可评估的repr。基于Josh Rosenberg的补丁。

  • bpo-22107: tempfile.gettempdir() 和 tempfile.mkdtemp() 现在在 Windows 和 Unix 上都会在所选名称的目录已存在时重试。tempfile.mkstemp() 现在在 Windows 上如果父目录无效(不存在或是文件)时会提前失败。

  • bpo-23780: 改进了 os.path.join() 在单个参数时的错误信息。

  • bpo-6598: 提高了 email.utils.make_msgid() 中的时间精度和随机数范围,以增强消息 ID 的唯一性。

  • bpo-24091: 修复了 ElementTree 的 C 实现中各种角落情况的崩溃问题。

  • bpo-21931: msilib.FCICreate() 现在在参数错误的情况下会引发 TypeError 而不是带有虚假 FCI 错误号的 ValueError。由 Jeffrey Armstrong 提供补丁。

  • bpo-13866: 为 urllib.parse.urlencode 添加了 quote_via 参数。

  • bpo-20098: 为 email 添加了新的 mangle_from 策略选项,对于 compat32 默认为 True,但对于所有其他策略默认为 False。

  • bpo-24211: email 库现在支持 RFC 6532:它可以生成使用 utf-8 而不是编码单词的头部。

  • bpo-16314: 在 distutils 中添加了对 LZMA 压缩的支持。

  • bpo-21804: poplib 现在支持 RFC 6856 (UTF8)。

  • bpo-18682: 优化了内置标量类型的 pprint 函数。

  • bpo-22027: smtplib 现在支持 RFC 6531 (SMTPUTF8)。

  • bpo-23488: 随机生成器对象现在在 64 位系统上消耗的内存减少了一半。

  • bpo-1322: platform.dist() 和 platform.linux_distribution() 函数现在已被弃用。初始补丁由 Vajrasky Kok 提供。

  • bpo-22486: 添加了 math.gcd() 函数。fractions.gcd() 函数现在已被弃用。基于 Mark Dickinson 的补丁。

  • bpo-24064: Property() 的文档字符串现在可写。(由 Berker Peksag 提供补丁。)

  • bpo-22681: 添加了对 koi8_t 编码的支持。

  • bpo-22682: 添加了对 kz1048 编码的支持。

  • bpo-23796: BufferedReader 的 peek 和 read1 方法现在在对象已关闭时调用会引发 ValueError。由 John Hergenroeder 提供补丁。

  • bpo-21795: 当新的 decode_data 构造函数参数设置为 False 时,smtpd 现在支持 8BITMIME 扩展。

  • bpo-24155: 优化 heapq.heapify() 以提高在堆化大型列表时的缓存性能。

  • bpo-21800: imaplib 现在支持 RFC 5161(启用)、RFC 6855(utf8/国际化邮件)并自动将非 ASCII 用户名和密码编码为 UTF8。

  • bpo-20274: 当调用 _sqlite.Connection 时,如果传递了任何关键字参数,现在会报错。之前是默默地忽略它们。

  • bpo-20274: 从 _sqlite.Connection 上的三个 METH_VARARGS 方法中移除被忽略和错误的 "kwargs" 参数。

  • bpo-24134: assertRaises()、assertRaisesRegex()、assertWarns() 和 assertWarnsRegex() 检查现在当 callable 为 None 或在上下文管理器模式下传递了除 msg 外的关键字参数时,会发出弃用警告。

  • bpo-24018: 添加 collections.abc.Generator 抽象基类。由 Stefan Behnel 贡献。

  • bpo-23880: Tkinter 的 getint() 和 getdouble() 现在支持 Tcl_Obj。Tkinter 的 getdouble() 现在支持任何数字(特别是整数)。

  • bpo-22619: 在 traceback 模块中添加了对负限制的支持。基于 Dmitry Kazakov 的补丁。

  • bpo-24094: 修复了在 json.encode 中可能因为行为不良的字典子类而导致的崩溃。

  • bpo-9246: 在 POSIX 上,os.getcwd() 现在支持超过 1025 字节的路径。补丁由 William Orr 编写。

  • bpo-17445: 添加 difflib.diff_bytes() 以支持字节字符串的比较(修复了从 Python 2 开始的回归)。

  • bpo-23917: 当 ProcessPoolExecutor 不存在时,回退到顺序编译。补丁由 Claudiu Popa 提供。

  • bpo-23008: 修复了在 pydoc 中解析布尔值为 False 的属性时的错误。

  • 修复 asyncio 问题 235:LifoQueue 和 PriorityQueue 的 put 没有增加未完成任务(这个错误是在 JoinableQueue 与 Queue 合并时引入的)。

  • bpo-23908: os 函数现在在 Windows 上拒绝含有嵌入空字符的路径,而不是默默地截断它们。

  • bpo-23728: 对于空数据,binascii.crc_hqx() 可能返回一个超出 0-0xffff 范围的整数。

  • bpo-23887: urllib.error.HTTPError 现在有了一个正确的 repr() 表示。由 Berker Peksag 提供补丁。

  • asyncio: 新增事件循环 API: set_task_factory() 和 get_task_factory()。

  • asyncio: async() 函数已弃用,推荐使用 ensure_future()。

  • bpo-24178: asyncio.Lock、Condition、Semaphore 和 BoundedSemaphore 支持新的 'async with' 语法。由 Yury Selivanov 贡献。

  • bpo-24179: 为 asyncio.StreamReader 支持 'async for'。由 Yury Selivanov 贡献。

  • bpo-24184: 将 AsyncIterator 和 AsyncIterable ABCs 添加到 collections.abc。由 Yury Selivanov 贡献。

  • bpo-22547: 为 inspect.BoundArguments 实现信息丰富的 __repr__。由 Yury Selivanov 贡献。

  • bpo-24190: 实现 inspect.BoundArgument.apply_defaults() 方法。由 Yury Selivanov 贡献。

  • bpo-20691: 向 inspect.Signature.from_callable() 和 inspect.signature() 添加 'follow_wrapped' 参数。由 Yury Selivanov 贡献。

  • bpo-24248: 弃用 inspect.Signature.from_function() 和 inspect.Signature.from_builtin()。

  • bpo-23898: 修复 inspect.classify_class_attrs() 以支持具有重载 __eq__ 和 __bool__ 的属性。由 Mike Bayer 提供补丁。

  • bpo-24298: 修复 inspect.signature() 以正确解包绑定方法的包装器。

IDLE

  • bpo-23184: 移除 idlelib 中未使用的名称和导入。初始由 Al Sweigart 提供补丁。

测试

  • bpo-21520: 如果当前目录名称中出现 'bad' 单词,test_zipfile 不再失败。

  • bpo-9517: 将 script_helper 移动到 support 包中。由 Christie Wilson 提供补丁。

文档

  • bpo-22155: 在 tkinter 文档中添加文件处理程序子章节,包含 createfilehandler。从 FAQ 中移除过时的示例。由 Martin Panter 提供补丁。

  • bpo-24029: 记录子模块导入的名称绑定行为。

  • bpo-24077: 修复 -I 命令选项的手册页中的拼写错误:-s,不是 -S。

工具/示例

  • bpo-24000: 改进了 Argument Clinic 对转换器到旧版“格式单元”的映射。更新了文档以匹配。

  • bpo-24001: Argument Clinic 转换器现在使用 accept={type} 而不是 types={'type'} 来指定转换器接受的类型。

  • bpo-23330: h2py 现在支持在 #include 中使用任意文件名。

  • bpo-24031: make patchcheck 现在也支持 git 检出。

Python 3.5.0 alpha 4

发布日期: 2015-04-19

核心与内置函数

  • bpo-22980: 在 Linux、GNU/KFreeBSD 和 Hurd 下,C 扩展现在在扩展名中包括架构三元组,以便在同一工作树中轻松测试不同 ABI 的构建。在 OS X 下,扩展名现在包括 PEP 3149 风格的信息。

  • bpo-22631: 添加了 Linux 特定的套接字常量 CAN_RAW_FD_FRAMES。由 Joe Jevnik 提供补丁。

  • bpo-23731: 实现了 PEP 488: 移除了 .pyo 文件。

  • bpo-23726: 对于没有添加任何新字段的非 GC 类型的用户子类,不启用 GC。由 Eugene Toder 提供补丁。

  • bpo-23309: 如果在关闭时守护线程在被持有缓冲 I/O 对象的锁时被中止,并且主线程尝试使用相同的 I/O 对象(通常是 stdout 或 stderr),则避免死锁。相反,会发出致命错误。

  • bpo-22977: 修复了在 Wine 上格式化 Windows 错误消息的问题。由 Martin Panter 提供补丁。

  • bpo-23466: 在字节格式化中,%c、%o、%x 和 %X 现在对非整数输入引发 TypeError。

  • bpo-24044: 修复了在内存不足情况下 list.sort 中可能的空指针解引用。

  • bpo-21354: PyCFunction_New 函数再次由 python DLL 暴露。

  • bpo-23840: tokenize.open() 现在在错误时关闭临时二进制文件以修复资源警告。

  • bpo-16914: smtplib 中的新调试级别 2 在调试输出中添加了时间戳。

  • bpo-7159: urllib.request 现在支持在第一次 401 后自动发送认证凭据。此增强是 bpo-19494 增强的超集,并取代了该更改。

  • bpo-23703: 修复在901e4e52b20a中引入的urljoin()回归问题。由Demian Brecht提供补丁。

  • bpo-4254: 添加_curses.update_lines_cols()。由Arnon Yaari提供补丁。

  • bpo-19933: 为round提供ndigits的默认参数。由Vajrasky Kok提供补丁。

  • bpo-23193: 向tarfile.TarFile.extract和tarfile.TarFile.extractall添加numeric_owner参数。由Michael Vogt和Eric Smith提供补丁。

  • bpo-23342: 添加subprocess.run()函数,该函数返回CalledProcess实例,提供了比现有call*函数更一致的API。

  • bpo-21217: inspect.getsourcelines()现在尝试从代码对象计算开始和结束行,修复了当lambda函数用作装饰器参数时的问题。由Thomas Ballinger和Allison Kaptur提供补丁。

  • bpo-24521: 修复pickle模块中可能的整数溢出。

  • bpo-22931: 允许cookie值中包含'['和']'。

  • functools.partial的keywords属性现在总是一个字典。

  • bpo-23811: 向PyCompileError错误消息添加缺失的换行符。由Alex Shkop提供补丁。

  • bpo-21116: 避免在分配大于可用RAM 50%的多进程共享数组时耗尽内存。由Médéric Boquien提供补丁。

  • bpo-22982: 改进在可写文本文件的多位置查找时的BOM处理。

  • bpo-23464: 移除已弃用的asyncio JoinableQueue。

  • bpo-23529: 限制从GzipFile、BZ2File或LZMAFile读取时的解压数据大小。这防止了使用压缩炸弹(即解压后尺寸巨大的压缩负载)的拒绝服务攻击。由Martin Panter和Nikolaus Rath提供补丁。

  • bpo-21859: 添加了io.FileIO的Python实现。

  • bpo-23865: 多个模块中的close()方法现在在关闭时是幂等的且更健壮。如果需要释放多个资源,即使发生错误,所有资源也会被释放。

  • bpo-23400: 如果sem_open不可用,在Python 2和3上抛出相同的异常。由Davin Potts提供补丁。

  • bpo-10838: subprocess模块现在在其导出的名称列表中包括SubprocessError和TimeoutError,以供那些大胆使用 from subprocess import * 的用户使用。

  • bpo-23411: 将DefragResult、ParseResult、SplitResult、DefragResultBytes、ParseResultBytes和SplitResultBytes添加到urllib.parse.__all__中。由Martin Panter提供补丁。

  • bpo-23881: urllib.request.ftpwrapper构造函数现在会在FTP连接失败时关闭套接字,以修复ResourceWarning。

  • bpo-23853: socket.socket.sendall() 不再在每次数据成功发送时重置套接字超时。套接字超时现在是发送所有数据的最大总持续时间。

  • bpo-22721: 包含可排序和不可排序元素的集合或多行pprint输出的字典的顺序不再依赖于集合或字典的迭代顺序。

  • bpo-15133: _tkinter.tkapp.getboolean()现在支持Tcl_Obj并始终返回bool。tkinter.BooleanVar现在验证输入值(接受bool、int、str和Tcl_Obj)。tkinter.BooleanVar.get()现在始终返回bool。

  • bpo-10590: xml.sax.parseString()现在支持字符串参数。

  • bpo-23338: 修复了在Cygwin上格式化ctypes错误消息的问题。由Makoto Kato提供补丁。

  • bpo-15582: inspect.getdoc()现在遵循继承链。

  • bpo-2175: SAX解析器现在支持InputSource对象的字符流。

  • bpo-16840: Tkinter现在支持Tcl 8.4中添加的64位整数和Tcl 8.5中添加的任意精度整数。

  • bpo-23834: 修复socket.sendto(),使用C Py_ssize_t类型来存储sendto()的结果,而不是C int类型。

  • bpo-23618: socket.socket.connect() 现在等待连接完成,而不是在连接被信号中断时抛出 InterruptedError,前提是信号处理程序没有抛出异常且套接字是阻塞的或具有超时。对于非阻塞套接字,socket.socket.connect() 仍然会抛出 InterruptedError

  • bpo-21526: Tkinter 现在支持 Tcl 8.5 中的新布尔类型。

  • bpo-23836: 修复 faulthandler 模块以处理对其信号处理程序的可重入调用。

  • bpo-23838: linecache 现在可以在 MemoryError 时清除缓存并返回空结果。

  • bpo-10395: 添加了 os.path.commonpath()。在 posixpath 和 ntpath 中实现。基于 Rafik Draoui 的补丁。

  • bpo-23611: 现在支持使用 pickle 协议 < 4 序列化更多“可查找”对象(如未绑定方法或嵌套类)。

  • bpo-13583: sqlite3.Row 现在支持切片索引。

  • bpo-18473: 修复了 2to3 和 3to2 兼容的 pickle 映射。修复了模糊的反向映射。添加了许多新映射。导入映射不再应用于已使用全名映射的模块。

  • bpo-23485: select.select() 现在在被信号中断时会自动重试,并重新计算超时,除非信号处理程序引发异常。此变更是 PEP 475 的一部分。

  • bpo-23752: 当从现有文件描述符构建时,io.FileIO() 现在只调用 fstat() 一次。之前 fstat() 被调用了两次,这是不必要的。

  • bpo-23704: collections.deque() 对象现在支持 __add__, __mul__, 和 __imul__()。

  • bpo-23171: csv.Writer.writerow() 现在支持任意可迭代对象。

  • bpo-23745: 新的电子邮件头解析器现在可以无错误地处理重复的 MIME 参数名称,类似于 get_param 的行为。

  • bpo-22117: 修复 os.utime(),现在它将时间戳向负无穷(-inf)舍入,而不是向零舍入。

  • bpo-23310: 修复 MagicMock 的初始化器以与 __methods__ 一起工作,就像 configure_mock() 一样。由 Kasia Jachim 提供的补丁。

构建

  • bpo-23817: FreeBSD 现在像其他操作系统一样在 SOVERSION 中使用 "1.0",而不仅仅是 "1"。

  • bpo-23501: Argument Clinic 现在默认将代码生成到单独的文件中。

测试

  • bpo-23799: 添加了 test.support.start_threads() 用于运行和清理多个线程。

  • bpo-22390: test.regrtest 现在会在测试运行后如果临时文件或目录未被清理时发出警告。

工具/示例

  • bpo-18128: pygettext 现在在 POT-Creation-Date 头中使用标准的 +NNNN 格式。

  • bpo-23935: Argument Clinic 现在对接受字节、字节数组和缓冲区的格式单元的理解与文档和实现一致。

  • bpo-23944: Argument Clinic 现在在第78列换行长 impl 原型。

  • bpo-20586: Argument Clinic 现在确保没有文档字符串的函数也有签名。

  • bpo-23492: Argument Clinic 现在尽可能使用 PyArg_Parse 而不是 PyArg_ParseTuple 生成参数解析代码。

  • bpo-23500: Argument Clinic 现在更智能地生成 methoddef 宏的“#ifndef”(空)定义:即使 Argument Clinic 多次处理相同的符号,它也只会生成一次,并且是在所有处理完成后而不是在第一次使用后立即发出。

C API

  • bpo-23998: PyImport_ReInitLock() 现在检查锁分配错误

Python 3.5.0 alpha 3

发布日期: 2015-03-28

核心与内置函数

  • bpo-23573: 提高了字符串搜索操作(str.find、str.index、str.count、in 操作符、str.split、str.partition)与不同类型参数(UCS1、UCS2、UCS4)的性能。

  • bpo-23753: Python 不再支持没有 stat() 或 fstat() 的平台,这些函数现在总是必需的。

  • bpo-23681: -b 选项现在影响 bytes 与 int 的比较。

  • bpo-23632: Memoryviews 现在允许元组索引(包括多维 memoryviews)。

  • bpo-23192: 修复了生成器 lambda。由 Bruno Cauet 提供补丁。

  • bpo-23629: 修复了可变大小对象的默认 __sizeof__ 实现。

  • bpo-14260: 正则表达式模式对象的 groupindex 属性现在是非可修改的映射。

  • bpo-23792: 当 pydoc 分页器处于活动状态时忽略 KeyboardInterrupt。这模拟了标准 unix 分页器的行为,并防止 pipepager 在分页器本身仍在运行时关闭。

  • bpo-23775: pprint() 现在输出的 OrderedDict 表示与 repr() 相同。

  • bpo-23765: 移除了 ctypes 中的 IsBadStringPtr 调用。

  • bpo-22364: 使用正则表达式提示改进了部分 re 错误消息。

  • bpo-23742: ntpath.expandvars() 不再丢失不平衡的单引号。

  • bpo-21717: zipfile.ZipFile.open 函数现在支持 'x'(独占创建)模式。

  • bpo-21802: 现在,即使写入器关闭失败,BufferedRWPair.close() 中的读取器也会被关闭。

  • bpo-23622: 现在,由 '\' 和 ASCII 字母组成的正则表达式中的未知转义将引发弃用警告,并将在 Python 3.6 中禁止使用。

  • bpo-23671: string.Template 现在允许将 "self" 参数指定为关键字参数。string.Formatter 现在允许将 "self" 和 "format_string" 参数指定为关键字参数。

  • bpo-23502: pprint 模块现在支持映射代理。

  • bpo-17530: pprint 现在会换行显示长的 bytes 对象和 bytearrays。

  • bpo-22687: 修复了 textwrap 中分割单词的一些极端情况。消除了分割长单词时的二次复杂度。

  • bpo-4727: copy 模块现在使用 pickle 协议 4(PEP 3154),并支持复制其 __new__ 方法接受仅关键字参数的类实例。

  • bpo-23491: 添加了一个 zipapp 模块以支持创建 Python 代码的可执行 zip 文件归档。为这些归档在 Windows 上注册了 ".pyz" 和 ".pyzw" 扩展名(PEP 441)。

  • bpo-23657: 避免在 zipapp 中显式检查 str,增加了对 pathlib.Path 对象作为参数的支持。

  • bpo-23688: 添加了对任意字节类对象的支持,并避免了在 gzip.GzipFile.write() 中不必要地复制 memoryview。原始由 Wolfgang Maier 提供补丁。

  • bpo-23252: 添加了对将 ZIP 文件写入不可寻址流的支持。

  • bpo-23647: 增加了 imaplib 的 MAXLINE 以适应现代邮箱大小。

  • bpo-23539: 如果 body 为 None,http.client.HTTPConnection.request 现在会为 PUT、POST 和 PATCH 头设置 Content-Length 为 0,以避免某些 web 服务器返回 411 错误。

  • bpo-22351: nntplib.NNTP 构造函数不再保持连接和 socket 打开直到垃圾回收器清理它们。补丁由 Martin Panter 提供。

  • bpo-23704: collections.deque() 对象现在支持 index()、insert() 和 copy() 方法。这使得 deque 可以注册为 MutableSequence 并且提高了它们替代列表的能力。

  • bpo-23715: signal.sigwaitinfo()signal.sigtimedwait() 现在当被不在 sigset 参数中的信号中断时,如果信号处理器没有引发异常,会重试。signal.sigtimedwait() 在重试时使用单调时钟重新计算超时。

  • bpo-23001: 在 mmap、ossaudiodev、socket、ssl 和 codecs 模块中,一些之前只接受只读 bytes-like 对象的函数现在也接受可写的 bytes-like 对象。

  • bpo-23646: 如果 time.sleep() 被信号中断,现在会使用重新计算的延迟重试睡眠,除非信号处理器引发异常(PEP 475)。

  • bpo-23136: _strptime 现在统一处理第 0 周的所有天,包括上一年的 12 月 30 日。基于 Jim Carroll 的补丁。

  • bpo-23700: NamedTemporaryFile 的迭代器现在保持对 NamedTemporaryFile 实例的引用。补丁由 Bohuslav Kabrda 提供。

  • bpo-22903: unittest.loader 在导入测试模块失败时创建的假测试用例现在可以 pickle。

  • bpo-22181: 在 Linux 上,os.urandom() 现在如果可用会使用新的 getrandom() 系统调用,该系统调用在 Linux 内核 3.17 中引入。它更可靠也更安全,因为它避免了文件描述符的需要,并等待内核有足够的熵。

  • bpo-2211: 更新了http.cookies.Morsel类的实现。现在直接设置属性key、value和coded_value已被弃用。update()和setdefault()现在会转换并检查键。比较相等性现在会考虑属性key、value和coded_value。copy()现在返回一个Morsel,而不是dict。repr()现在包含所有属性。优化了键的检查和值的引用。添加了新的测试。原始由Demian Brecht提供补丁。

  • bpo-18983: 允许在timeit中选择输出单位。由Julian Gindi提供补丁。

  • bpo-23631: 修复traceback.format_list当traceback被修改时的问题。

  • bpo-23568: 向MagicMock()对象添加rdivmod支持。由Håkan Lövdahl提供补丁。

  • bpo-2052: 向HtmlDiff.make_file()添加charset参数。

  • bpo-23668: 在Windows上支持os.truncate和os.ftruncate。

  • bpo-23138: 修复了在cookiejar中解析缺少键或值的cookie的问题。由Demian Brecht提供补丁。

  • bpo-23051: multiprocessing.Pool方法imap()和imap_unordered()现在可以处理迭代器引发的异常。由Alon Diamant和Davin Potts提供补丁。

  • bpo-23581: 向MagicMock添加matmul支持。由Håkan Lövdahl提供补丁。

  • bpo-23566: faulthandler的enable()、register()、dump_traceback()和dump_traceback_later()函数现在接受文件描述符。由Wei Wu提供补丁。

  • bpo-22928: 在http.client中禁用了HTTP头注入。原始由Demian Brecht提供补丁。

  • bpo-23615: 模块bz2、tarfile和tokenize现在可以通过imp.reload()重新加载。由Thomas Kluyver提供补丁。

  • bpo-23605: os.walk()现在调用os.scandir()而不是os.listdir()。使用os.scandir()减少了对os.stat()的调用次数。初始补丁由Ben Hoyt编写。

构建

  • bpo-23585: make patchcheck将确保解释器被构建。

测试

  • bpo-23583: 在IDLE中添加了标准IO流的测试。

  • bpo-22289: 防止由于ftp连接超时导致的test_urllib2net失败。

工具/示例

  • bpo-22826: Tools/freeze/bkfile.py 中的 open() 函数结果现在与常规文件更兼容(特别是现在支持上下文管理协议)。

Python 3.5.0 alpha 2

发布日期: 2015-03-09

核心与内置函数

  • bpo-23571: PyObject_Call() 和 PyCFunction_Call() 现在会在函数返回结果并引发异常时抛出 SystemError。SystemError 会被链接到前一个异常。

  • bpo-22524: 新增 os.scandir() 函数,属于 PEP 471: "os.scandir() 函数 -- 一个更好更快的目录迭代器"。补丁由 Ben Hoyt 编写。

  • bpo-23103: 减少了 IPv4Address 和 IPv6Address 的内存消耗。

  • bpo-21793: BaseHTTPRequestHandler 再次将响应代码记录为数字,而不是字符串化的枚举。补丁由 Demian Brecht 提供。

  • bpo-23476: 在 ssl 模块中,当可用时,在证书存储上启用 OpenSSL 的 X509_V_FLAG_TRUSTED_FIRST 标志。

  • bpo-23576: 当 SSL 层已到达 EOF 但底层连接尚未关闭时,避免在 SSL 读取中停滞。

  • bpo-23504: 在 types 模块中添加了 __all__。

  • bpo-23563: 优化了 urllib.parse 中的实用函数。

  • bpo-7830: 扁平化嵌套的 functools.partial。

  • bpo-20204: 为 _tkinter 类添加了 __module__ 属性。

  • bpo-19980: 改进了对非识别字符串的 help()。help('') 现在显示关于 str 的帮助。help('help') 现在显示关于 help() 的帮助。原始由 Mark Lawrence 提供补丁。

  • bpo-23521: 更正了 timedelta 除法的纯 Python 实现。对于某些浮点数,消除了 timedelta * float 中的 OverflowError;更正了 timedelta 真除法中的舍入。

  • bpo-21619: 如果管道已断开,Popen 对象在 with 语句退出后不再留下僵尸进程。由 Martin Panter 提供补丁。

  • bpo-22936: 使得可以在 traceback 模块和 unittest 中显示跟踪回溯中的局部变量。

  • bpo-15955: 在 bz2.decompress() 中添加了一个选项以限制输出大小。由 Nikolaus Rath 提供补丁。

  • bpo-6639: 关闭窗口后,模块级的turtle函数不再引发TclError。

  • bpo-814253: 现在,在正则表达式的后向断言中,组引用和条件组引用可以正常工作。(另见:bpo-9179

  • bpo-23215: 使用自定义错误处理程序的多字节编解码器在忽略错误时消耗了过多内存并引发了SystemError或MemoryError。原始由Aleksi Torhamo提供补丁。

  • bpo-5700: io.FileIO()在关闭文件后调用了flush()。如果closefd=False,则在close()中不会调用flush()。

  • bpo-23374: 修复了当标准输出编码与文件系统编码不同(例如在Mac OS上)时,pydoc处理非ASCII文件失败的问题。

  • bpo-23481: 从SSL模块的默认密码列表中移除RC4。

  • bpo-21548: 修复了pydoc.synopsis()和pydoc.apropos()在模块文档字符串为空时的行为。

  • bpo-22885: 修复了dbm.dumb模块中的任意代码执行漏洞。原始由Claudiu Popa提供补丁。

  • bpo-23239: ssl.match_hostname()现在支持IP地址的匹配。

  • bpo-23146: 修复了pathlib中处理带有正斜杠的绝对Windows路径时的错误。

  • bpo-23096: 现在,协议0下的浮点数的pickle表示在Python和C实现中是相同的。

  • bpo-19105: pprint现在更有效地利用右侧的自由空间。

  • bpo-14910: 向argparse.ArgumentParser添加了allow_abbrev参数。由Jonathan Paugh、Steven Bethard、paul j3和Daniel Eriksson提供补丁。

  • bpo-21717: tarfile.open()现在支持'x'(独占创建)模式。

  • bpo-23344: marshal.dumps()现在平均快了20-25%。

  • bpo-20416: 使用协议3和4的marshal.dumps()现在平均快了40-50%。

  • bpo-23421: 修复了tarfile CLI中的压缩问题。由wdv4758h提供补丁。

  • bpo-23367: 修复了unicodedata模块中可能的溢出问题。

  • bpo-23361: 修复了Windows子进程创建代码中可能的溢出问题。

  • logging.handlers.QueueListener 现在接受一个 respect_handler_level 关键字参数,如果设置为 True,将会在考虑处理器级别的情况下将消息传递给处理器。

  • bpo-19705: turtledemo 现在有一个视觉排序算法演示。原始补丁来自 Jason Yeo。

  • bpo-23801: 修复了 cgi.FieldStorage 不总是忽略多部分主体的整个前导部分的问题。

构建

  • bpo-23445: pydebug 构建现在尽可能使用 "gcc -Og",以使生成的可执行文件更快。

  • bpo-23686: 更新 OS X 10.5 安装程序构建以使用 OpenSSL 1.0.2a。

C API

  • bpo-20204: 现在对于没有 __module__ 属性的内置类型会发出弃用警告。

Windows

  • bpo-23465: 实现 PEP 486 - 使 Python 启动器感知虚拟环境。由 Paul Moore 提供补丁。

  • bpo-23437: 在 Windows 上使用户脚本目录版本化。由 Paul Moore 提供补丁。

Python 3.5.0 alpha 1

发布日期: 2015-02-08

核心与内置函数

  • bpo-23285: PEP 475 - EINTR 处理。

  • bpo-22735: 修复了许多涉及自定义 mro() 实现的边缘情况(包括崩溃)。

  • bpo-22896: 避免使用 PyObject_AsCharBuffer(), PyObject_AsReadBuffer() 和 PyObject_AsWriteBuffer()。

  • bpo-21295: 撤销了一些对 AST 行号和列偏移量的更改(bpo-16795),这些更改构成了回归。

  • bpo-22986: 在某些情况下允许更改对象的 __class__ 在动态类型和静态类型之间。

  • bpo-15859: PyUnicode_EncodeFSDefault(), PyUnicode_EncodeMBCS() 和 PyUnicode_EncodeCodePage() 现在如果对象不是 Unicode 对象则会引发异常。对于 PyUnicode_EncodeFSDefault(),在非 Windows 平台上已经是这种情况。补丁由 Campbell Barton 编写。

  • bpo-21408: 默认的 __ne__() 现在如果 __eq__() 返回 NotImplemented 则返回 NotImplemented。原始由 Martin Panter 提供补丁。

  • bpo-23321: 修复了当错误处理程序返回的替换字符串比畸形输入数据长时 str.decode() 中的崩溃。

  • bpo-22286: "backslashreplace" 错误处理程序现在可以用于解码和转换。

  • bpo-23253: 在Windows上延迟加载ShellExecute[AW]以减少os.startfile的启动开销。

  • bpo-22038: pyatomic.h现在使用stdatomic.h或GCC内置函数进行原子内存访问(如果可用)。补丁由Vitor de Lima和Gustavo Temple编写。

  • bpo-20284: 为bytes和bytearray添加了%-插值(即printf)格式化。

  • bpo-23048: 修复了在pdb中跳出无限while循环的问题。

  • bpo-20335: bytes构造函数现在在编码或错误与非字符串参数一起指定时引发TypeError。基于Renaud Blanch的补丁。

  • bpo-22834: 如果当前工作目录最终被设置为不存在的目录,则导入将不再引发FileNotFoundError。

  • bpo-22869: 将解释器启动和关闭代码移动到一个新的专用pylifecycle.c模块中。

  • bpo-22847: 提高方法缓存的效率。

  • bpo-22335: 修复在32位平台上尝试将bytearray扩大到0x7fffffff字节时的崩溃问题。

  • bpo-22653: 修复在调试模式下进行可重入字典插入时的断言失败。

  • bpo-22643: 修复Unicode大小写操作(大写、小写、标题、交换大小写、casefold)中的整数溢出问题。

  • bpo-17636: 现在支持涉及相对导入的循环导入。

  • bpo-22604: 修复在调试模式下将复数除以(nan+0j)时的断言错误。

  • bpo-21052: 当sys.path_hooks或sys.meta_path设置为None时,不引发ImportWarning。

  • bpo-16518: 在错误消息中使用'需要类似字节的对象',而不是之前使用的更为晦涩的"'x'不支持缓冲区协议"。

  • bpo-22470: 修复了"backslashreplace"、"xmlcharrefreplace"和"surrogatepass"错误处理程序中的整数溢出问题。

  • bpo-22540: 在第二个参数具有元类 type 的常见情况下,加速 PyObject_IsInstance 和``PyObject_IsSubclass``。

  • bpo-18711: 添加了一个新的 PyErr_FormatV 函数,类似于 PyErr_Format,但接受一个``va_list``参数。

  • bpo-22520: 修复生成 unicode 对象 repr 时的溢出检查。

  • bpo-22519: 修复 PyBytes_Repr 中的溢出检查。

  • bpo-22518: 修复 latin-1 编码中的整数溢出问题。

  • bpo-16324: MIMEText 的 _charset 参数现在也接受 email.charset.Charset 实例。初始补丁由 Claude Paroz 提供。

  • bpo-1764286: 修复 inspect.getsource() 以支持装饰函数。由 Claudiu Popa 提供补丁。

  • bpo-18554: os.__all__ 包括 posix 函数。

  • bpo-21391: 在 shutil 模块中使用 os.path.abspath。

  • bpo-11471: 避免在 if 块的末尾生成 JUMP_FORWARD 指令,如果没有 else 子句。原始由 Eugene Toder 提供补丁。

  • bpo-22215: 现在当 str 或 bytes 参数包含不允许的空字符或字节时,会引发 ValueError 而不是 TypeError。

  • bpo-22258: 修复 Illumos 上的内部函数 set_inheritable()。该平台暴露了函数 ioctl(FIOCLEX),但调用它会失败,errno 是 ENOTTY: "Inappropriate ioctl for device"。set_inheritable() 现在回退到较慢的 fcntl() (F_GETFD 然后 F_SETFD)。

  • bpo-21389: 在绑定方法的 repr 中显示底层函数的 __qualname__。

  • bpo-22206: 使用 pthread 时,PyThread_create_key() 现在在整数溢出时将 errno 设置为 ENOMEM 并返回 -1(错误)。

  • bpo-20184: 为 30 个内置函数添加了基于 Argument Clinic 的签名内省。

  • bpo-22116: C 函数和方法('builtin_function_or_method' 类型)现在可以被弱引用。由 Wei Wu 提供补丁。

  • bpo-22077: 通过添加 'or slices' 改善 bytearrays、bytes、lists 和 tuples 的索引错误消息。为 bytearrays 添加了 ', not <typename>'。原始由 Claudiu Popa 提供补丁。

  • bpo-20179: 将 Argument Clinic 应用于 bytes 和 bytearray。由 Tal Einat 提供补丁。

  • bpo-22082: 清除 slotdefs 中的内部字符串。

  • 升级 Unicode 数据库到 7.0.0 版本。

  • bpo-21897: 修复当 frame.clear() 被调用时带有闭包变量的 f_locals 属性的崩溃问题。

  • bpo-21205: 为生成器添加一个新的 __qualname__ 属性,即限定名称,并在生成器的表示中使用它(repr(gen))。生成器的默认名称(__name__ 属性)现在从函数中获取,而不是从代码中获取。使用 gen.gi_code.co_name 获取代码的名称。

  • bpo-21669: 借助 SyntaxError.__init__ 中的启发式方法,解析器现在尝试在“exec”和“print”被用作语句时生成更有意义(或至少更搜索引擎友好)的错误消息。

  • bpo-21642: 在条件 if-else 表达式中,允许整数与 else 关键字之间没有空格(例如 True if 42else False)的写法作为有效语法。

  • bpo-21523: 修复了编译器中一些操作码堆栈效应的过度悲观计算。这也修复了当编译包含大量“and”和“or”运算符的代码时明显的二次编译时间问题。

  • bpo-21418: 修复了在没有参数且没有当前帧(例如嵌入式 Python)时调用内置函数 super() 时的崩溃问题。

  • bpo-21425: 修复了交互式解释器中标准流的刷新问题。

  • bpo-21435: 在极少数情况下,对循环垃圾中的对象运行终结器时,由于内部迭代逻辑的微妙缺陷,可能会发生错误的指针解引用。

  • bpo-21377: PyBytes_Concat() 现在尝试在第一个参数的引用计数为1时原地连接。由 Nikolaus Rath 提供补丁。

  • bpo-20355: -W 命令行选项现在比 PYTHONWARNINGS 环境变量具有更高的优先级。由 Arfrever 提供补丁。

  • bpo-21274: 在 Python/pythonrun.c 中为 GNU/Hurd 定义 PATH_MAX。

  • bpo-20904: 支持在 m68k 上设置 FPU 精度。

  • bpo-21209: 修复使用 yield from 语法向自定义生成器对象发送元组的问题。

  • bpo-21193: 当 b 为负数时,pow(a, b, c) 现在会引发 ValueError 而不是 TypeError。补丁由 Josh Rosenberg 提供。

  • bpo-21176: PEP 465: 为矩阵乘法添加'@'运算符。

  • bpo-21134: 修复在未初始化的UnicodeEncodeError、UnicodeDecodeError或UnicodeTranslateError对象上调用str时出现的段错误。

  • bpo-19537: 修复m68k下PyUnicode_DATA()的对齐问题。由Andreas Schwab提供补丁。

  • bpo-20929: 添加类型转换以避免负数移位。

  • bpo-20731: 即使以文本模式打开,也能正确定位源代码文件中的位置。由Serhiy Storchaka提供补丁。

  • bpo-20637: 键共享现在也适用于子类的实例字典。由Peter Ingebretson提供补丁。

  • bpo-8297: 模块中缺失的属性现在在错误文本中包含模块名称。原始由ysj.ray提供补丁。

  • bpo-19995: %c、%o、%x和%X现在对非整数输入引发TypeError。

  • bpo-19655: ASDL解析器 - 用于构建过程中生成用于在C中管理Python AST的代码 - 被重写。新解析器是自包含的,不需要携带spark.py解析器生成器库;spark.py已从源代码库中移除。

  • bpo-12546: 允许在使用str、int、float和complex的__format__方法时使用 \x00 作为填充字符。

  • bpo-20480: 添加ipaddress.reverse_pointer。由Leon Weber提供补丁。

  • bpo-13598: 修改string.Formatter以支持替换字段的自动编号。现在在这方面它与str.format()的行为相匹配。由Phil Elson和Ramchandra Apte提供补丁。

  • bpo-8931: 使类型'c'的替代格式('#')引发异常。在3.5之前的版本中,'#'与'c'一起使用没有效果。现在指定它是一个错误。由Torsten Landschoff提供补丁。

  • bpo-23165: 在_Py_char2wchar函数中分配内存之前执行溢出检查。

  • bpo-23399: pyvenv尽可能创建相对符号链接。

  • bpo-20289: cgi.FieldStorage()现在支持上下文管理协议。

  • bpo-13128: 当debuglevel > 0时,打印CONNECT请求的响应头。由Demian Brecht提供补丁。

  • bpo-15381: 优化了 io.BytesIO 以减少分配和复制操作。

  • bpo-22818: 现在,对可能匹配空字符串的模式进行拆分时会发出警告。只能匹配空字符串的模式现已被拒绝。

  • bpo-23099: 现在拒绝关闭带有导出缓冲区的 io.BytesIO,以防止损坏导出的缓冲区。

  • bpo-23326: 移除了 __ne__ 实现。由于在 bpo-21408 中修复了默认的 __ne__ 实现,它们现在是多余的。

  • bpo-23363: 修复了 itertools.permutations 中可能的溢出问题。

  • bpo-23364: 修复了 itertools.product 中可能的溢出问题。

  • bpo-23366: 修复了 itertools.combinations 中可能的整数溢出问题。

  • bpo-23369: 修复了 _json.encode_basestring_ascii 中可能的整数溢出问题。

  • bpo-23353: 修复了 PyEval_EvalFrameEx() 中生成器的异常处理。在入口处,即使 PyEval_EvalFrameEx() 以 throwflag=0 调用,也会保存或交换异常状态。在退出时,异常状态现在总是被恢复或交换,不仅当 why 是 WHY_YIELD 或 WHY_RETURN 时。补丁由 Antoine Pitrou 共同编写。

  • bpo-14099: 恢复了对可定位但不可寻址流的 ZIP 文件写入支持。

  • bpo-14099: 现在,写入 ZipFile 和读取多个 ZipExtFiles 是线程安全的。

  • bpo-19361: JSON 解码器现在引发 JSONDecodeError 而不是 ValueError。

  • bpo-18518: timeit 现在拒绝不能在函数或循环外编译的语句(例如 "return" 或 "break")。

  • bpo-23094: 修复了 pickle 的 Python 实现中带有帧的 readline 问题。

  • bpo-23268: 修复了 ipaddress 类比较中的错误。

  • bpo-21408: 移除了不正确的 __ne__() 实现,这些实现在 __eq__() 返回 NotImplemented 时没有返回 NotImplemented。现在默认的 __ne__() 工作正常。

  • bpo-19996: email.feedparser.FeedParser 现在处理(格式错误的)没有键的头部,而不是假设主体已经开始。

  • bpo-20188: 在ssl模块中支持应用层协议协商(ALPN)。

  • bpo-23133: ipaddress对象的pickle现在生成更紧凑且可移植的表示。

  • bpo-23248: 从最新的OpenSSL git master更新ssl错误代码。

  • bpo-23266: 当存在许多非连续地址时,ipaddress.collapse_addresses()的实现速度大幅提升。

  • bpo-23098: os模块现在支持64位的dev_t。

  • bpo-21817: 当提交给ProcessPoolExecutor的任务中抛出异常时,现在会在父进程中显示远程回溯。由Claudiu Popa提供补丁。

  • bpo-15955: 添加一个选项以限制解压LZMA数据时的输出大小。由Nikolaus Rath和Martin Panter提供补丁。

  • bpo-23250: 在http.cookies模块中,将"HttpOnly"和"Secure"按照标准中的写法大写。

  • bpo-23063: 在distutils的check命令中,修复带有code或code-block指令的reST的解析。

  • bpo-23209: 如果选择器已关闭,selectors.BaseSelector.get_key()现在会抛出RuntimeError。并且selectors.BaseSelector.close()现在会清除其对选择器映射的内部引用以打破引用循环。初始补丁由Martin Richard编写。(另见:bpo-23225

  • bpo-17911: 提供一种方式来为PEP-302模块的linecache播种,而无需实际加载代码。

  • bpo-17911: 为traceback提供一个新的对象API,包括能够不在回溯实际渲染之前查找行,且不保留原始对象的任何痕迹。

  • bpo-19777: 在Path对象上提供一个home()类方法。由Victor Salgado和Mayank Tripathi贡献。

  • bpo-23206: 使 json.dumps(..., ensure_ascii=False) 与默认情况 ensure_ascii=True 一样快。由Naoki Inada提供补丁。

  • bpo-23185: 添加math.inf和math.nan常量。

  • bpo-23186: 添加 ssl.SSLObject.shared_ciphers() 和 ssl.SSLSocket.shared_ciphers() 以获取客户端在握手时发送的加密套件列表。

  • bpo-23143: 移除对早于0.9.8版本的OpenSSL的兼容性支持。

  • bpo-23132: 改进由functool.total_ordering创建的比较方法的性能和内省支持。

  • bpo-19776: 在Path对象上添加expanduser()方法。

  • bpo-23112: 修复SimpleHTTPServer在重定向添加尾部斜杠时正确携带查询字符串和片段的问题。

  • bpo-21793: 添加了http.HTTPStatus枚举(例如HTTPStatus.OK, HTTPStatus.NOT_FOUND)。补丁由Demian Brecht提供。

  • bpo-23093: 在io模块中,允许更多操作在已分离的流上工作。

  • bpo-23111: 在ftplib中,使ssl.PROTOCOL_SSLv23成为默认协议版本。

  • bpo-22585: 在OpenBSD 5.6及更新版本上,os.urandom()现在调用getentropy(),而不是读取/dev/urandom,来获取伪随机字节。

  • bpo-19104: pprint现在为包装的字符串生成可评估的输出。

  • bpo-23071: 向codecs.__all__添加了缺失的名称。由Martin Panter提供补丁。

  • bpo-22783: 如果可能,Pickling现在使用NEWOBJ操作码而不是NEWOBJ_EX操作码。

  • bpo-15513: 为pickle类添加了__sizeof__实现。

  • bpo-19858: pickletools.optimize()现在能够识别MEMOIZE操作码,可以生成更紧凑的结果,并且在输入数据包含与PUT或BINPUT操作码一起的MEMOIZE操作码时不再生成无效输出。

  • bpo-22095: 修复了HTTPConnection.set_tunnel的默认端口问题。主机头中的端口值被设置为"None"。由Demian Brecht提供补丁。

  • bpo-23016: 当程序使用pythonw.exe运行时,警告不再产生AttributeError。

  • bpo-21775: shutil.copytree(): 修复在复制到VFAT时崩溃的问题。异常处理程序假设OSError对象总是有'winerror'属性。但事实并非如此,因此在Linux(以及任何其他非Windows操作系统)上运行时,异常处理程序本身会引发AttributeError。由Greg Ward提供补丁。

  • bpo-1218234: 修复inspect.getsource()以加载重新加载模块的更新源代码。初始由Berker Peksag提供补丁。

  • bpo-21740: 在doctest中支持包装的可调用对象。由Claudiu Popa提供补丁。

  • bpo-23009: 确保selectors.EpollSelector.select()在没有FD注册时也能工作。

  • bpo-22959: 在http.client.HTTPSConnection的构造函数中,优先使用上下文的check_hostname属性而不是 check_hostname 参数。

  • bpo-22696: 添加函数 sys.is_finalizing() 以了解解释器关闭状态。

  • bpo-16043: 为xmlrpclib.gzip_decode返回的数据量添加默认限制。这解决了 CVE 2013-1753

  • bpo-14099: ZipFile.open()不再重新打开底层文件。ZipFile.open()返回的对象现在可以独立于ZipFile操作,即使ZipFile是通过将类似文件的对象作为构造函数的第一个参数传递而创建的。

  • bpo-22966: 修复当pyc_compile被要求编译包含源文件名中多个点的源文件时,__pycache__ pyc文件名冲突的问题。

  • bpo-21971: 更新turtledemo文档并将模块添加到索引中。

  • bpo-21032: 修复如果HTTPConnection.getresponse()失败时的套接字泄漏问题。原始由Martin Panter提供补丁。

  • bpo-22407: 弃用re.LOCALE标志与str模式或re.ASCII一起使用。它从未工作过。

  • bpo-22902: 在Linux上现在使用“ip”命令在uuid.getnode()中确定MAC地址。由Bruno Cauet提供补丁。

  • bpo-22960: 向xmlrpclib.ServerProxy构造函数添加上下文参数。

  • bpo-22389: 添加contextlib.redirect_stderr()。

  • bpo-21356: 使 ssl.RAND_egd() 成为可选项以支持 LibreSSL。该函数的可用性在编译期间进行检查。补丁由 Bernard Spil 编写。

  • bpo-22915: SAX 解析器现在支持通过文件描述符或字节路径打开的文件。

  • bpo-22609: collections 模块中的映射类的构造函数和更新方法现在接受 self 关键字参数。

  • bpo-22940: 添加 readline.append_history_file。

  • bpo-19676: 添加了 "namereplace" 错误处理程序。

  • bpo-22788: 向 logging.handlers.HTTPHandler 添加 context 参数。

  • bpo-22921: 允许 SSLContext 接受 hostname 参数,即使 OpenSSL 不支持 SNI。

  • bpo-22894: TestCase.subTest() 在 failfast 模式下会导致测试套件停止,即使没有失败。

  • bpo-22796: HTTP cookie 解析现在更加严格,以防范潜在的注入攻击。

  • bpo-22370: pathlib 中的 Windows 检测现在更加健壮。

  • bpo-22841: 在 asyncio add_signal_handler() 中拒绝协程。由 Ludovic.Gasc 提供补丁。

  • bpo-19494: 添加了 urllib.request.HTTPBasicPriorAuthHandler。由 Matej Cepl 提供补丁。

  • bpo-22578: 向 re.error 类添加了属性。

  • bpo-22849: 修复了 io.TextIOWrapper 构造函数中可能的双重释放问题。

  • bpo-12728: 现在在不区分大小写的正则表达式中匹配具有相同大写但不同小写的不同 Unicode 字符。

  • bpo-22821: 修复了在 64 位大端平台上使用整数参数的 fcntl()。

  • bpo-21650: 向 json.tool CLI 添加了一个 --sort-keys 选项。

  • bpo-22824: 更新了 reprlib 中集合的输出格式以使用集合字面量。补丁由 Berker Peksag 贡献。

  • bpo-22824: 更新了 reprlib 中数组的输出格式,以显示没有不必要空列表的空数组。建议由 Serhiy Storchaka 提出。

  • bpo-22406: 修复了错误移植到 3.x 的 uu_codec 编解码器。基于 Martin Panter 的补丁。

  • bpo-17293: uuid.getnode() 现在在 AIX 上使用 netstat 确定 MAC 地址。基于 Aivars Kalvāns 的补丁。

  • bpo-22769: 修复了 ttk.Treeview.tag_has() 在没有参数调用时的问题。

  • bpo-22417: 在 httplib 中默认验证证书 (PEP 476)。

  • bpo-22775: 修复了使用协议 2 及以上版本对 http.cookies.SimpleCookie 的反序列化。补丁由 Tim Graham 提供。

  • bpo-22776: 在 SysLogHandler.emit() 中将排除的代码移至 try 块的作用域内。

  • bpo-22665: 将缺失的 get_terminal_size 和 SameFileError 添加到 shutil.__all__。

  • bpo-6623: 移除了 ftplib 模块中已弃用的 Netrc 类。由 Matt Chaput 提供补丁。

  • bpo-17381: 修复了正则表达式中不区分大小写范围的处理。

  • bpo-22410: re 模块中的模块级函数现在会缓存考虑到区域的依赖于区域设置的编译后的正则表达式。

  • bpo-22759: pathlib.Path() 上的查询方法 (exists(), is_dir() 等) 现在在底层 stat 调用引发 NotADirectoryError 时返回 False。

  • bpo-8876: distutils 现在在硬链接不起作用时回退到复制文件。这允许使用如 VirtualBox 共享文件夹这样的特殊文件系统。

  • bpo-22217: 实现了 zipfile 模块中类的 reprs。

  • bpo-22457: 在发现的 start_dir 中尊重 load_tests。

  • bpo-18216: gettext 现在在 .mo 文件有不受支持的主版本号时引发错误。由 Aaron Hill 提供补丁。

  • bpo-13918: 提供了一个 locale.delocalize() 函数,可以从表示数字的字符串中移除区域特定的数字格式,而不将其转换为特定类型。由 Cédric Krier 提供补丁。

  • bpo-22676: 使没有 __module__ 属性的全局对象的序列化不那么慢。

  • bpo-18853: 修复了 shlex.__nain__ 中的 ResourceWarning。

  • bpo-9351: 使用 set_defaults 在 argparse 子解析器上设置的默认值不再在父解析器上也设置时被忽略。

  • bpo-7559: unittest 测试加载时的 ImportErrors 现在会在导入失败后作为导入异常报告,而不是属性错误。

  • bpo-19746: 使得无需执行测试套件即可检查 unittest 发现过程中的错误。TestLoader 的新 errors 属性暴露了在发现过程中遇到的这些非致命错误。

  • bpo-21991: 使 email.headerregistry 的头 'params' 属性变为只读(MappingProxyType)。之前字典是可修改的,但每次访问属性时都会创建一个新的字典。

  • bpo-22638: 现在整个标准库中 SSLv3 已被禁用。仍然可以通过手动实例化 SSLContext 来启用它。

  • bpo-22641: 在 asyncio 中,客户端连接的默认 SSL 上下文现在使用 ssl.create_default_context() 创建,以提高安全性。

  • bpo-17401: 在 io.FileIO 的 repr 中包含 closefd。

  • bpo-21338: 为 compileall 添加静默模式。compile_{dir, file, path} 函数的 quiet 参数现在具有多级值。此外,CLI 的 -q 选项现在也具有多级值。由 Thomas Kluyver 提供补丁。

  • bpo-20152: 将 array 和 cmath 模块转换为 Argument Clinic。

  • bpo-18643: 在 Windows 上添加 socket.socketpair()。

  • bpo-22435: 修复 socketserver 绑定失败时的文件描述符泄漏问题。

  • bpo-13096: 修复了 CTypes POINTER 处理大值时出现的段错误。

  • bpo-11694: 如文档所述,在 xdrlib 中引发 ConversionError。由 Filip Gruszczyński 和 Claudiu Popa 提供补丁。

  • bpo-19380: 优化了正则表达式的解析。

  • bpo-1519638: 现在在 re.sub() 和 re.subn() 中,未匹配的组将被空字符串替换。

  • bpo-18615: sndhdr.what/whathdr 现在返回一个 namedtuple。

  • bpo-22462: 修复 pyexpat 创建虚拟帧以使其出现在异常回溯中的问题。

  • bpo-21965: 为 ssl 模块添加对内存中 SSL 的支持。由 Geert Jansen 提供补丁。

  • bpo-21173: 修复了在调用.clear()时有迭代器存活时,对WeakKeyDictionary的len()操作的问题。

  • bpo-11866: 消除了新线程名称计算中的竞态条件。

  • bpo-21905: 在迭代过程中当sys.modules被修改时,避免pickle.whichmodule()中的RuntimeError。由Olivier Grisel提供补丁。

  • bpo-11271: concurrent.futures.Executor.map()现在接受一个 chunksize 参数,允许在子进程中批量处理任务并提高ProcessPoolExecutor的性能。由Dan O'Reilly提供补丁。

  • bpo-21883: os.path.join()和os.path.relpath()现在对于不支持或参数类型不匹配的情况,会抛出带有更有帮助的错误信息的TypeError。

  • bpo-22219: zipfile模块的命令行接口现在为ZIP文件中的目录(包括空目录)添加条目。

  • bpo-22449: 在ssl.SSLContext.load_default_certs中,在Windows上查询环境变量SSL_CERT_DIR和SSL_CERT_FILE。

  • bpo-22508: 移除了email.__version__变量;email代码不再与标准库分开提供,并且__version__在多个版本中未更新。

  • bpo-20076: 向语言环境别名表添加了非派生的UTF-8别名。

  • bpo-20079: 向语言环境别名表添加了glibc 2.18支持的语言环境。

  • bpo-20218: 向pathlib.Path对象添加了便利方法read_text/write_text和read_bytes/write_bytes。

  • bpo-22396: 在32位AIX平台上,不暴露os.posix_fadvise()和os.posix_fallocate(),因为它们在系统头文件中的原型是错误的。

  • bpo-22517: 当io.BufferedRWPair对象被析构时,清除其弱引用。

  • bpo-22437: 正则表达式中的捕获组数量不再限制为100。

  • bpo-17442: InteractiveInterpreter现在在其showtraceback方法中显示完整的链式回溯,以匹配内置的交互式解释器。

  • bpo-23392: 添加了与FILE*一起工作的marshal C API的测试。

  • bpo-10510: distutils的register和upload方法现在使用符合HTML标准的CRLF行尾。

  • bpo-9850: 修复了macpath.join()对于空的第一组件的问题。由Oleg Oshmyan提供补丁。

  • bpo-5309: distutils的build和build_ext命令现在接受一个 -j 选项以启用扩展模块的并行构建。

  • bpo-22448: 改进取消的定时器句柄清理以防止无限制的内存使用。补丁由Joshua Moore-Oliva提供。

  • bpo-22427: 当在生成器中使用with语句时,TemporaryDirectory不再尝试两次清理。

  • bpo-22362: 禁止在正则表达式中使用超出0-0o377范围的模糊八进制转义。

  • bpo-20912: 现在添加到ZIP文件的目录具有正确的Unix和MS-DOS目录属性。

  • bpo-21866: 如果allowZip64为false,ZipFile.close()不再写入ZIP64中央目录记录。

  • bpo-22278: 修复了urljoin在处理相对URL时的问题,这是在提交issue22118的更改后观察到的回归。

  • bpo-22415: 修复了re模块中GROUPREF_EXISTS操作码的调试输出。移除了调试输出中的尾随空格。

  • bpo-22423: 线程中的未处理异常不再导致当sys.stderr为None时未处理的AttributeError。

  • bpo-21332: 确保subprocess.Popen()中的 bufsize=1 选择行缓冲,而不是块缓冲。由Akira Li提供补丁。

  • bpo-21091: 修复API错误:email.message.EmailMessage.is_attachment现在是一个方法。

  • bpo-21079: 修复email.message.EmailMessage.is_attachment以在头部既有参数又有值时返回正确的结果。

  • bpo-22247: 将NNTPError添加到nntplib.__all__。

  • bpo-22366: urllib.request.urlopen将接受一个上下文对象(SSLContext)作为参数,该对象将用于HTTPS连接。由Alex Gaynor提供补丁。

  • bpo-4180: 当过滤器被修改时,警告注册表现在被重置。

  • bpo-22419: 限制 wsgiref 服务器中传入 HTTP 请求的长度为 65536 字节,对于超出此长度的请求发送 414 错误代码。由 Devin Cook 提供补丁。

  • http.cookies 中的宽松 cookie 解析在与某些网页浏览器的非标准 cookie 处理结合使用时可能成为安全问题。由 Sergey Bobrov 报告。

  • bpo-20537: 日志记录方法现在接受异常实例以及布尔值或异常元组。感谢 Yury Selivanov 提供的补丁。

  • bpo-22384: 当使用 pythonw.exe 运行时,Tkinter 回调中的异常不再导致程序崩溃。

  • bpo-22168: 在 OS X 上使用非默认 Canvas 时防止 turtle 的 AttributeError。

  • bpo-21147: 如果请求包含空字符,sqlite3 现在会引发异常而不是截断它。基于 Victor Stinner 的补丁。

  • bpo-13968: glob 模块现在支持使用 ** 模式在子目录中进行递归搜索。

  • bpo-21951: 修复了在 AIX 上当使用空字符串或元组参数调用 Tcl 命令时 Tkinter 的崩溃问题。

  • bpo-21951: 如果内存分配失败,Tkinter 现在更可能引发 MemoryError 而不是崩溃。

  • bpo-22338: 修复了 json 模块在内存分配失败时的崩溃问题。

  • bpo-12410: imaplib.IMAP4 现在支持上下文管理协议。原始由 Tarek Ziadé 提供补丁。

  • bpo-21270: 我们现在在 mock.call 对象中覆盖元组方法,以便它们可以用作普通的调用属性。

  • bpo-16662: 当 load_tests() 存在于包的 __init__.py 中时,现在无条件运行。TestLoader.loadTestsFromModule() 仍然接受 use_load_tests,但它已被弃用并被忽略。新增并文档化了一个仅关键字的属性 pattern。由 Robert Collins 提供补丁,Barry Warsaw 进行了调整。

  • bpo-22226: Treeview.heading() 的结果中 "status" 键的第一个字母不再被剥离。

  • bpo-19524: 修复了在接收到无效响应时HTTP连接的资源泄漏问题。由Martin Panter提供补丁。

  • bpo-20421: 向SSL套接字添加了.version()方法,暴露实际使用的协议版本。

  • bpo-19546: configparser异常不再暴露实现细节。移除了链式KeyErrors,使得跟踪回溯更加清晰。由Claudiu Popa提供补丁。

  • bpo-22051: turtledemo不再重新加载示例来重新运行它们。变量初始化和GUI设置应该在main()中完成,每次运行演示时都会调用main(),但不会在导入时调用。

  • bpo-21933: Turtledemo用户可以通过菜单选择或控制(command) '-'或'+'或控制鼠标滚轮来更改代码字体大小。原始由Lita Cho提供补丁。

  • bpo-21597: 现在可以通过鼠标抓取和拖动turtledemo文本窗格和绘图画布之间的分隔符。可以加宽代码文本窗格以便轻松查看或复制文本的完整宽度。在小屏幕上可以加宽画布。原始由Jan Kanis和Lita Cho提供补丁。

  • bpo-18132: 当窗口缩小时,Turtledemo按钮不再消失。原始由Jan Kanis和Lita Cho提供补丁。

  • bpo-22043: time.monotonic()现在总是可用。threading.Lock.acquire()``threading.RLock.acquire()``和套接字操作现在在使用超时时使用单调时钟,而不是系统时钟。

  • bpo-21527: 向ThreadPoolExecutor添加了默认的工作线程数,等于CPU数量的5倍。由Claudiu Popa提供补丁。

  • bpo-22216: smtplib现在在退出后更完全地重置其状态。之前行为的最明显后果是在connect/starttls/quit/connect/starttls序列中的STARTTLS失败。

  • bpo-22098: ctypes的BigEndianStructure和LittleEndianStructure现在定义了一个空的__slots__,这样子类不会总是得到一个实例字典。由Claudiu Popa提供补丁。

  • bpo-22185: 修复了threading.Condition.wait()中因不持有锁而修改等待队列导致的偶尔出现的RuntimeError。由Doug Zongker提供补丁。

  • bpo-22287: 在UNIX上,_PyTime_gettimeofday()现在使用clock_gettime(CLOCK_REALTIME)(如果可用)。作为副作用,Python现在在Solaris和Linux上(仅glibc版本低于2.17时)依赖于librt库。

  • bpo-22182: 在distutils.file_util.move_file中正确使用e.args来解包异常。由Claudiu Popa提供补丁。

  • webbrowser模块现在使用subprocess的start_new_session=True,而不是潜在风险的preexec_fn=os.setsid调用。

  • bpo-22042: 如果文件描述符处于阻塞模式,signal.set_wakeup_fd(fd)现在会引发异常。

  • bpo-16808: inspect.stack()现在返回一个命名元组而不是元组。由Daniel Shahaf提供补丁。

  • bpo-22236: 修复了在NoDefaultRoot模式下的Tkinter图像复制操作。

  • bpo-2527: 向timeit函数添加了一个 globals 参数,以便覆盖执行定时代码的全局命名空间。补丁由Ben Roberts提供。

  • bpo-22118: 将urllib.parse切换到使用RFC 3986语义解析相对URL,而不是RFCs 1808和2396。补丁由Demian Brecht提供。

  • bpo-21549: 向TarFile.list()添加了“members”参数。

  • bpo-19628: 允许通过-r选项指定compileall的递归深度。

  • bpo-15696: 为Windows上的mmap对象添加了__sizeof__实现。

  • bpo-22068: 避免了Tkinter中Variables和Fonts的引用循环。

  • bpo-22165: SimpleHTTPRequestHandler现在支持不可解码的文件名。

  • bpo-15381: 优化了io.BytesIO中的行读取。

  • bpo-8797: 在基本认证失败时立即引发HTTPError。初始由Sam Bull提供补丁。

  • bpo-20729: 恢复了mailbox模块中lazy iterkeys()/itervalues()/iteritems()的使用。

  • bpo-21448: 更改了FeedParser的feed()方法,以避免在解析长行时的*O*(n2)行为。原始由Raymond Hettinger提供补丁。

  • bpo-22184: 当用户忘记必需的参数时,functools LRU Cache装饰器工厂现在会提供更早更清晰的错误信息。

  • bpo-17923: 在AIX上,以斜杠结尾的glob()模式不再匹配非目录。基于Delhallt的补丁。

  • bpo-21725: 在smtpd中添加了对RFC 6531(SMTPUTF8)的支持。

  • bpo-22176: 将ctypes模块的libffi更新到v3.1。此版本增加了对Linux AArch64和POWERPC ELF ABIv2小端架构的支持。

  • bpo-5411: 在shutil模块中添加了对"xztar"格式的支持。

  • bpo-21121: 不再强制第三方C扩展使用-Werror=declaration-after-statement构建。

  • bpo-21975: 修复了使用未初始化的sqlite3.Row(特别是在解pickle pickled sqlite3.Row时)时的崩溃问题。sqlite3.Row现在在__new__()方法中初始化。

  • bpo-20170: 将posixmodule转换为使用Argument Clinic。

  • bpo-21539: 向 Pathlib.mkdir() 添加了一个 exists_ok 参数,以模拟 mkdir -p 和``os.makedirs()``的功能。当为真时,忽略 FileExistsErrors。由Berker Peksag提供补丁。

  • bpo-22127: 在socket模块中绕过IDNA处理纯ASCII主机名(特别是数字IP)。

  • bpo-21047: 将HTMLParser的 convert_charrefs 参数的默认值设置为True。由Berker Peksag提供补丁。

  • 在 html.entities 包中增加 __all__ 变量。

  • bpo-15114: HTMLParser的严格模式和参数,HTMLParser.error,以及HTMLParserError异常已被移除。

  • bpo-22085: 在Tkinter中放弃了对Tk 8.3的支持。

  • bpo-21580: 现在Tkinter正确处理传递给Tk的字节参数。特别是这允许从二进制数据初始化图像。

  • bpo-22003: 当从字节对象初始化时,io.BytesIO()现在延迟复制直到它被修改,从而在某些用例中提高了性能和内存使用。由David Wilson提供补丁。

  • bpo-22018: 在Windows上,signal.set_wakeup_fd()现在也支持套接字。一个副作用是Python依赖于WinSock库。

  • bpo-22054: 添加 os.get_blocking() 和 os.set_blocking() 函数以获取和设置文件描述符的阻塞模式(如果设置了 O_NONBLOCK 标志则为 False,否则为 True)。这些函数在 Windows 上不可用。

  • bpo-17172: 即使在通过子进程运行时,也使 turtledemo 在 OS X 上作为活动状态启动。补丁由 Lita Cho 提供。

  • bpo-21704: 当信号量不可用时,修复 _multiprocessing 的构建错误。由 Arfrever Frehtes Taifersar Arahesis 提供补丁。

  • bpo-20173: 将 sha1、sha256、sha512 和 md5 转换为 ArgumentClinic。由 Vajrasky Kok 提供补丁。

  • 修复 Windows 64 位上的 repr(_socket.socket):不要在关闭的套接字上因 OverflowError 而失败。repr(socket.socket) 已经工作良好。

  • bpo-22033: 大多数 Python 实现的类的 repr 现在包含实际的类名而不是硬编码的名称。

  • bpo-21947: dis 模块现在可以根据 generator-iterator 对象的 gi_code 属性对其进行反汇编。由 Clement Rouault 提供补丁。

  • bpo-16133: asynchat.async_chat.handle_read() 方法现在忽略 BlockingIOError 异常。

  • bpo-22044: 修复了 call_tzinfo_method 中的过早 DECREF。由 Tom Flanagan 提供补丁。

  • bpo-19884: readline:如果标准输出不是终端,则禁用元修饰键,以避免将 ANSI 序列 "\033[1034h" 写入标准输出。此序列用于某些终端(例如:TERM=xterm-256color)以启用 8 位字符支持。

  • bpo-4350: 移除了许多长期过时且不工作的 Tkinter 方法。

  • bpo-6167: Scrollbar.activate() 现在在未指定参数时返回活动元素的名称。Scrollbar.set() 现在总是只接受 2 个参数。

  • bpo-15275: 清理并加速 ntpath 模块。

  • bpo-21888: plistlib 的 load() 和 loads() 现在在指定 fmt 参数时可以工作。

  • bpo-22032: 现在总是使用 __qualname__ 而不是 __name__ 来格式化 Python 实现的类的完全限定类名。

  • bpo-22031: 当包含形如" at 0x..."的id时,Reprs现在总是使用带有"0x"前缀的十六进制格式。

  • bpo-22018: signal.set_wakeup_fd()现在在 fstat() 失败时引发OSError而不是ValueError。

  • bpo-21044: tarfile.open()现在可以处理具有整数'name'属性的fileobj。基于Antoine Pietri的补丁。

  • bpo-21966: 当运行代码模块时,尊重-q命令行选项。

  • bpo-19076: 不再向self.error()传递冗余的'file'参数。

  • bpo-16382: 改进了warnings.warn()对于错误类别的异常消息。初始由Phil Elson提供补丁。

  • bpo-21932: os.read()现在使用 Py_ssize_t() 类型而不是 int 来支持一次性读取超过2GB的数据。在Windows上,大小被截断为INT_MAX。如同任何对os.read()的调用,操作系统可能读取的字节数少于请求的字节数。

  • bpo-21942: 修复了Windows上pydoc服务器模式下查看源文件的问题。

  • bpo-11259: asynchat.async_chat().set_terminator()现在如果接收到的字节数为负值时会引发ValueError。

  • bpo-12523: asynchat.async_chat.push()现在如果没有接收到字节字符串时会引发TypeError。

  • bpo-21707: 向ModuleFinder.replace_paths_in_code()添加了缺失的kwonlyargcount参数。

  • bpo-20639: 调用Path.with_suffix('')允许再次移除后缀。由July Tikhonov提供补丁。

  • bpo-21714: 禁止使用Path.with_name()构造无效路径。原始由Antony Lee提供补丁。

  • bpo-15014: 向smtplib添加了'auth'方法以使实现认证机制更简单,并在login方法内部使用它。

  • bpo-21151: 修复了当向SetValueEx传递 None 作为 REG_BINARY 值时winreg模块中的段错误。由John Ehresman提供补丁。

  • bpo-21090: io.FileIO.readall()不再忽略I/O错误。在此之前,如果至少第一次C调用read()成功,它会忽略I/O错误。

  • bpo-5800: wsgiref.headers.Headers 的 headers 参数现在是可选的。初始由 Pablo Torres Navarrete 和 SilentGhost 提供补丁。

  • bpo-21781: ssl.RAND_add() 现在支持超过 2 GB 的字符串。

  • bpo-21679: 防止在 open() 过程中进行多余的 fstat() 调用。由 Bohuslav Kabrda 提供补丁。

  • bpo-21863: cProfile 现在除了显示 C 扩展函数的名称外,还会显示其模块名。

  • bpo-11453: asyncore: 当未关闭的 file_wrapper 对象被销毁时发出 ResourceWarning。现在析构函数会在需要时关闭文件。close() 方法现在可以被调用两次:第二次调用不做任何操作。

  • bpo-21858: 在 sqlite3 模块中更好地处理 Python 异常。

  • bpo-21476: 确保 email.parser.BytesParser TextIOWrapper 在解析后被丢弃,这样输入文件不会意外关闭。

  • bpo-20295: imghdr 现在可以识别 OpenEXR 格式的图像。

  • bpo-21729: 在 dbm.dumb 模块中使用 "with" 语句确保文件关闭。补丁由 Claudiu Popa 提供。

  • bpo-21491: socketserver: 修复子进程回收中的一个竞争条件。

  • bpo-21719: 在 Windows 上为 os.stat_result 添加了 st_file_attributes 字段。

  • bpo-21832: 要求命名元组的输入必须是确切的字符串。

  • bpo-21722: distutils 的 "upload" 命令现在在上传失败时以非零返回码退出。由 Martin Dengler 提供补丁。

  • bpo-21723: asyncio.Queue: 支持任何类型的数字(例如浮点数)作为最大大小。补丁由 Vajrasky Kok 编写。

  • bpo-21711: 现在已从 site 模块中移除了对 "site-python" 目录的支持(已在 3.4 中弃用)。

  • bpo-17552: 新的 socket.sendfile() 方法允许通过 UNIX 上的高性能 os.sendfile() 发送文件。由 Giampaolo Rodola' 提供补丁。

  • bpo-18039: dbm.dump.open() 现在当标志值为 'n' 时总是创建一个新的数据库。由 Claudiu Popa 提供补丁。

  • bpo-21326: 向asyncio.BaseEventLoop添加了一个新的is_closed()方法。如果事件循环已关闭,asyncio.BaseEventLoop的run_forever()和run_until_complete()方法现在会抛出异常。

  • bpo-21766: 通过在检查路径是否为CGI脚本之前对路径进行URL解码,防止了CGIHTTPServer中的安全漏洞。

  • bpo-21310: 修复了在open()失败时可能发生的资源泄漏问题。

  • bpo-21256: 在模拟函数调用中,关键字参数的打印输出现在按确定性顺序进行。这将有助于编写更好的文档测试。

  • bpo-21677: 修复了在io close()方法中链接非规范化异常的问题。

  • bpo-11709: 修复了pydoc.help函数在sys.stdin不是有效文件时不失败的问题。

  • bpo-21515: tempfile.TemporaryFile现在在可用时使用os.O_TMPFILE标志。

  • bpo-13223: 修复了pydoc.writedoc,使得在示例代码中使用'self'的方法的HTML文档能够正确生成。

  • bpo-21463: 在urllib.request中,修复了FTP缓存的修剪问题。

  • bpo-21618: subprocess模块现在能够关闭调用进程继承的打开文件描述符,即使这些描述符已经高于POSIX资源限制所允许的值。在具有正常工作的/proc/self/fd或/dev/fd接口的系统上,现在忽略最大值并关闭所有文件描述符。

  • bpo-20383: 引入了importlib.util.module_from_spec()作为创建新模块的首选方式。

  • bpo-21552: 修复了在64位平台上,tkinter模块中过长的字符串长度可能导致整数溢出的问题。

  • bpo-14315: zipfile模块现在会忽略中央目录中太短而无法解析的额外字段,而不是让struct.unpack错误冒泡,因为这种“坏数据”在现实世界的许多zip文件中出现,并被其他zip工具忽略。

  • bpo-13742: 向heapq.merge()添加了“key”和“reverse”参数。(补丁的第一版由Simon Sapin贡献。)

  • bpo-21402: 当未设置默认根窗口时,tkinter.ttk现在可以正常工作。

  • bpo-3015: _tkinter.create() 现在默认以 wantobjects=1 创建 tkapp 对象。

  • bpo-10203: sqlite3.Row 现在真正支持序列协议,特别是它支持 reverse() 和负索引。原始补丁由 Claudiu Popa 提供。

  • bpo-18807: 如果为 venv 指定了复制(无符号链接),则现在通过复制而非符号链接创建 python 解释器别名(python, python3)。

  • bpo-20197: 在 imghdr 模块中添加了对 WebP 图像类型的支持。由 Fabrice Aneche 和 Claudiu Popa 提供补丁。

  • bpo-21513: 加速了 IP 地址(IPv4Address, IPv6Address)的一些属性,如 .is_private 或 .is_multicast。

  • bpo-21137: 通过显示“锁定”或“未锁定”状态改进了 threading.Lock() 及其变体的 repr。补丁由 Berker Peksag 提供。

  • bpo-21538: plistlib 模块现在支持在引用或偏移大小不是二的幂时加载二进制 plist 文件。

  • bpo-21455: 为 socket.listen() 添加了一个默认的 backlog。

  • bpo-21525: 大多数接受元组的 Tkinter 方法现在也接受列表。

  • bpo-22166: 在新内部 _codecs._forget_codec 辅助函数的帮助下,test_codecs 现在清除编码缓存以避免出现引用泄露。

  • bpo-22236: Tkinter 测试现在不再重用默认的根窗口。为每个测试类创建新的根窗口。

  • bpo-10744: 修复具有非平凡形状的 ctypes 对象上的 PEP 3118 格式字符串。

  • bpo-20826: 优化 ipaddress.collapse_addresses()。

  • bpo-21487: 优化 ipaddress.summarize_address_range() 和 ipaddress.{IPv4Network,IPv6Network}.subnets()。

  • bpo-21486: 优化 ipaddress.IPv4Network 和 ipaddress.IPv6Network 中网络掩码的解析。

  • bpo-13916: 禁止了非 UTF-* 编码的 surrogatepass 错误处理器。

  • bpo-20998: 修复了忽略大小写的重复单字符模式的 re.fullmatch()。原始由 Matthew Barnett 提供补丁。

  • bpo-21075: 如果指定了二进制模式,fileinput.FileInput 现在可以从标准流中读取字节。由 Sam Kimbrel 提供补丁。

  • bpo-19775: 向 pathlib Path 对象添加 samefile() 方法。初始由 Vajrasky Kok 提供补丁。

  • bpo-21226: 在 PyImport_ExecCodeModuleObject(及其相关函数)中正确设置模块。

  • bpo-21398: 修复 pydoc 分页器中的一个 unicode 错误,当文档包含无法编码为标准输出编码的字符时。

  • bpo-16531: ipaddress.IPv4Network 和 ipaddress.IPv6Network 现在接受一个(地址,网络掩码)元组参数,以便从现有地址轻松构建网络对象。

  • bpo-21156: importlib.abc.InspectLoader.source_to_code() 现在是一个静态方法。

  • bpo-21424: 简化和优化了 heapq.nlargest() 和 nsmallest(),以减少元组比较的次数。

  • bpo-21396: 修复 TextIOWrapper(..., write_through=True) 不强制底层二进制流 flush() 的问题。由 akira 提供补丁。

  • bpo-18314: 在 Windows 上,Unlink 现在可以移除 junctions。由 Kim Gräsman 提供补丁。

  • bpo-21088: 修复 curses.window.addch() 在 3.4.0 版本中的回归问题。在迁移到 Argument Clinic 时,前两个参数被反转了。

  • bpo-21407: _decimal: 模块现在支持函数签名。

  • bpo-10650: 从 Python 版本的 Decimal.quantize() 方法中移除了非标准的 'watchexp' 参数。它从未在 C 版本中出现过。

  • bpo-21469: 通过检查确保 robots.txt 已被读取或不存在,在 can_fetch() 返回 True 之前,减少了 robotparser 中误报的风险。

  • bpo-19414: 让 OrderedDict 将被删除的链接标记为不可用。如果在迭代过程中链接被删除,这会提前失败。

  • bpo-21421: 向 MappingViews ABC 添加 __slots__。由 Josh Rosenberg 提供补丁。

  • bpo-21101: 在 collections.Counter() 的 C 加速代码中消除双重哈希。

  • bpo-21321: itertools.islice() 现在在切片耗尽时会释放对源迭代器的引用。由 Anton Afanasyev 提供补丁。

  • bpo-21057: TextIOWrapper 现在允许底层的二进制流的 read() 或 read1() 方法返回任意的 bytes-like 对象(如 memoryview)。由 Nikolaus Rath 提供补丁。

  • bpo-20951: 在非阻塞套接字上,如果操作会阻塞,SSLSocket.send() 现在会引发 SSLWantReadError 或 SSLWantWriteError。之前,它会返回 0。由 Nikolaus Rath 提供补丁。

  • bpo-13248: 移除了之前弃用的 asyncore.dispatcher __getattr__ 廉价继承 hack。

  • bpo-9815: assertRaises 现在尝试清除异常回溯中对局部变量的引用。

  • bpo-19940: ssl.cert_time_to_seconds() 现在将给定的时间字符串解释为 UTC 时区(如 RFC 5280 所指定),而不是本地时区。

  • bpo-13204: 调用 sys.flags.__new__ 会崩溃解释器,现在它会引发 TypeError。

  • bpo-19385: 对已关闭的 dbm.dumb 数据库的操作现在总是引发相同的异常。

  • bpo-21207: 检测 os.urandom 缓存的 fd 是否被关闭或替换,并重新打开它。

  • bpo-21291: subprocess 的 Popen.wait() 现在是线程安全的,因此多个线程可以同时调用 Popen 实例的 wait() 或 poll() 而不会丢失 Popen.returncode 值。

  • bpo-21127: Path 对象现在可以从 str 子类实例(如 numpy.str_)实例化。

  • bpo-15002: urllib.response 对象使用 _TemporaryFileWrapper(和 _TemporaryFileCloser)设施。提供了一种更好的处理文件描述符关闭的方法。由 Christian Theune 提供补丁。

  • bpo-12220: mindom 现在会引发一个自定义的 ValueError,指示它不支持 URI 中的空格,而不是让 'split' ValueError 冒泡。

  • bpo-21068: ssl.PROTOCOL* 常量现在是枚举成员。

  • bpo-21276: posixmodule: 不要在 KFreeBSD 和 Hurd 上定义 USE_XATTRS。

  • bpo-21262: Mock 的新方法 assert_not_called。如果 mock 被调用过,它会引发 AssertionError。

  • bpo-21238: Mock 的新关键字参数 unsafe。如果属性以 assert 或 assret 开头,它会引发 AttributeError

  • bpo-20896: ssl.get_server_certificate() 现在使用 PROTOCOL_SSLv23,而不是 PROTOCOL_SSLv3,以获得最大的兼容性。

  • bpo-21239: 当同一个名字被多次 patch 时,patch.stopall() 没有确定性地工作。

  • bpo-21203: 更新了 fileConfig 和 dictConfig 以消除不一致。感谢 Jure Koren 的补丁。

  • bpo-21222: 现在,将 name 关键字参数传递给 mock.create_autospec 可以工作了。

  • bpo-21197: 在 64 位非 OS X POSIX 上,venvs 中添加了 lib64 -> lib 的符号链接。

  • bpo-17498: 一些 SMTP 服务器在特定错误后断开连接,违反了严格的 RFC 一致性。smtplib 现在返回错误代码,并在发出下一个命令时延迟引发 SMTPServerDisconnected 错误,而不是在我们发出后续 RSET 时丢失错误代码。

  • bpo-17826: 现在,在由 create_autospec 创建的 mock 函数上设置可迭代的 side_effect 可以工作了。由 Kushal Das 提供的补丁。

  • bpo-7776: 修复了在使用 http.client.HTTPConnection.set_tunnel() 时的 Host: 标头和重新连接。由 Nikolaus Rath 提供的补丁。

  • bpo-20968: unittest.mock.MagicMock 现在支持除法。由 Johannes Baiter 提供的补丁。

  • bpo-21529: 修复了 JSONDecoder.raw_decode 中第二个参数为负数时的任意内存访问。由 Guido Vranken 报告的错误。(另见:CVE 2014-4616

  • bpo-21169: getpass 现在通过使用 replace 错误处理程序重新编码,处理输入流编码无法编码的非 ASCII 字符。

  • bpo-21171: 修复了 rot13 编解码器未记录的过滤器 API。由 Berker Peksag 提供的补丁。

  • bpo-20539: 改进了 math.factorial 对于大正数输入的错误消息,并更改了大负数输入的异常类型(OverflowError -> ValueError)。

  • bpo-21172: isinstance 检查从 dict 放宽到 collections.Mapping。

  • bpo-21155: asyncio.EventLoop.create_unix_server() 现在如果同时指定了 path 和 sock 会抛出 ValueError。

  • bpo-21136: 避免了由于幂和其他操作导致的 Fractions 不必要的规范化。由 Raymond Hettinger 提供补丁。

  • bpo-17621: 引入了 importlib.util.LazyLoader。

  • bpo-21076: signal 模块的常量被转换为枚举。由 Giampaolo Rodola' 提供补丁。

  • bpo-20636: 改进了 Tkinter 小部件的 repr。

  • bpo-19505: OrderedDict 的 items、keys 和 values 视图现在支持使用 reversed() 进行反向迭代。

  • bpo-21149: 改进了解释器关闭期间日志清理的线程安全性。感谢 Devin Jeanpierre 提供的补丁。

  • bpo-21058: 修复了 tempfile.NamedTemporaryFile() 中的文件描述符泄漏问题,如果 io.open() 失败则关闭文件描述符。

  • bpo-21200: 当 __spec__ 缺失时,从 pkgutil.get_loader() 返回 None。

  • bpo-21013: 增强 ssl.create_default_context() 用于服务器端套接字时的默认安全性。

  • bpo-20145: assertRaisesRegexassertWarnsRegex 现在如果第二个参数不是字符串或编译的正则表达式会抛出 TypeError

  • bpo-20633: 用绝对导入替换相对导入。

  • bpo-20980: 使用 ThreadPool 时停止包装异常。

  • bpo-21082: 在 os.makedirs 中,不设置进程级的 umask。注意这改变了 makedirs 当 exist_ok=True 时的行为。

  • bpo-20990: 修复了 pyflakes 为 multiprocessing 发现的问题。

  • bpo-21015: SSL 上下文现在会在 OpenSSL 1.0.2 及更高版本上自动为 ECDH 密钥交换选择椭圆曲线,否则默认为 "prime256v1"。

  • bpo-21000: 改进了 json.tool 的命令行界面。

  • bpo-20995: 增强了 ssl 模块使用的默认密码,以实现更好的安全性并优先考虑完美前向保密。

  • bpo-20884: 不假设 __file__ 在 importlib.__init__ 上有定义。

  • bpo-21499: 在几个 test_importlib.test_api 测试中忽略 __builtins__。

  • bpo-20627: xmlrpc.client.ServerProxy 现在是一个上下文管理器。

  • bpo-19165: formatter 模块现在引发 DeprecationWarning 而不是 PendingDeprecationWarning。

  • bpo-13936: 移除了 datetime.time 实例在布尔上下文中被视为假的能力。

  • bpo-18931: selectors 模块现在支持 Solaris 上的 /dev/poll。补丁由 Giampaolo Rodola' 提供。

  • bpo-19977: 当 LC_TYPE 语言环境是 POSIX 语言环境(C 语言环境)时,sys.stdinsys.stdout 现在使用 surrogateescape 错误处理程序,而不是 strict 错误处理程序。

  • bpo-20574: 为 cp65001 代码(Windows 代码页 65001,Microsoft UTF-8)实现增量解码器。

  • bpo-20879: 延迟初始化 base64 模块中 base32、ascii85 和 base85 编解码器的编码和解码表,并延迟初始化 urllib.parse 模块的 unquote_to_bytes() 表,以避免在这些模块未使用时浪费内存。

  • bpo-19157: 在 ipaddress 中为 IPv6 包含广播地址到可用主机中。

  • bpo-11599: 当外部命令(例如编译器)失败时,如果设置了环境变量 DISTUTILS_DEBUG,distutils 现在会打印出整个命令行(而不仅仅是命令名称)。

  • bpo-4931: distutils 不应再产生无帮助的“error: None”消息。distutils.util.grok_environment_error 被保留但文档标记为弃用。

  • bpo-20875: 防止可能的 gzip "'read' is not defined" NameError。由 Claudiu Popa 提供补丁。

  • bpo-11558: email.message.Message.attach 现在在 is_multipart 为 False 的消息上调用 attach 时返回更有用的错误消息。

  • bpo-20283: RE 模式方法现在接受字符串关键字参数如文档所述。模式和源关键字参数作为弃用的别名保留。

  • bpo-20778: 修复 modulefinder 以与仅字节码的模块一起工作。

  • bpo-20791: copy.copy() 现在当输入是 bytes 对象时不再制作副本。初始由 Peter Otten 提供补丁。

  • bpo-19748: 在 AIX 上,time.mktime() 现在对于超出范围 [1902; 2037] 的年份会引发 OverflowError。

  • bpo-19573: inspect.signature: 使用枚举作为参数种类常量。

  • bpo-20726: inspect.signature: 使 Signature 和 Parameter 可 pickle。

  • bpo-17373: 添加 inspect.Signature.from_callable 方法。

  • bpo-20378: 改进 inspect.Signature 和 inspect.Parameter 的 repr。

  • bpo-20816: 修复 inspect.getcallargs() 以对缺少的关键字参数引发正确的 TypeError。补丁由 Jeremiah Lowin 提供。

  • bpo-20817: 修复 inspect.getcallargs() 以在缺少超过 3 个参数时正确失败。由 Jeremiah Lowin 提供补丁。

  • bpo-6676: 确保在尝试为每个 pyexpat xmlparser 实例解析多个 XML 文档时引发有意义的异常。(原始由 Hirokazu Yamamoto 和 Amaury Forgeot d'Arc 提供补丁,建议措辞由 David Gutteridge 提出)

  • bpo-21117: 修复 inspect.signature 以更好地支持 functools.partial。由于 functools.partial 实现的特殊性,作为关键字参数传递的位置或关键字参数变为仅关键字。

  • bpo-20334: inspect.Signature 和 inspect.Parameter 现在可哈希。感谢 Antony Lee 的错误报告和建议。

  • bpo-15916: 如果 doctest.DocTestSuite 没有找到测试,则返回一个空的 unittest.TestSuite 而不是引发 ValueError。

  • bpo-21209: 修复 asyncio.tasks.CoroWrapper 以解决在 CPython 3.4.1 之前的 yield-from 实现中的一个错误。

  • asyncio: 向 CoroWrapper 添加 gi_{frame,running,code} 属性(上游 bpo-163)。

  • bpo-21311: 避免在 _osx_support 中因非标准编译器配置而引发异常。由 John Szakmeister 提供补丁。

  • bpo-11571: 确保在 OS X 上启动时 turtle 窗口成为最顶层窗口。

  • bpo-21801: 验证 __signature__ 是否为 None 或 Signature 的实例。

  • bpo-21923: 防止由于_config_vars可能未初始化而在distutils.sysconfig.customize_compiler中引发AttributeError。

  • bpo-21323: 修复http.server再次处理CGI子目录中的脚本的问题,此功能因修复安全问题 bpo-19435 而损坏。由Zach Byrne提供补丁。

  • bpo-22733: 修复ffi_prep_args在64位Windows上未能正确零扩展参数值的问题。

  • bpo-23302: 在建立HTTPConnection时默认设置TCP_NODELAY=1。移除了对硬编码MSS的使用,因为这是一个在Nagle禁用后不再需要的优化。

IDLE

  • bpo-20577: FormatParagraph扩展的最大行长配置已从Idle偏好对话框的General标签页移动到Config Extensions对话框的FormatParagraph标签页。由Tal Einat提供补丁。

  • bpo-16893: 更新Idle文档章节以匹配当前Idle并添加新信息。

  • bpo-3068: 在Options菜单中添加Idle扩展配置对话框。更改将写入HOME/.idlerc/config-extensions.cfg。原始由Tal Einat提供补丁。

  • bpo-16233: 模块浏览器(文件 : 类浏览器,Alt+C)需要一个有文件名的编辑器窗口。当从shell、输出窗口或'Untitled'编辑器请求类浏览器时,Idle不再显示错误框。现在会弹出一个打开模块框(Alt+M)。如果输入了一个有效的名称并打开了一个模块,相应的浏览器也会被打开。

  • bpo-4832: 保存为Python文件时自动为你输入的名称添加.py扩展名(即使你的系统不显示它)。某些系统在类型为文本文件时会自动添加.txt。

  • bpo-21986: 代码对象通常不被pickle模块pickle。为了匹配这一点,当在Idle下运行时,它们不再被pickle。

  • bpo-17390: 调整编辑器窗口标题;移除'Python',将版本号移至末尾。

  • bpo-14105: 在插入或删除行时,Idle调试器的断点不再消失。

  • bpo-17172: Turtledemo 现在可以从 Idle 运行。目前,该入口位于帮助菜单上,但可能会移至运行菜单。由 Ramchandra Apt 和 Lita Cho 提供的补丁。

  • bpo-21765: 为 HyperParser 添加对非 ASCII 标识符的支持。

  • bpo-21940: 为 WidgetRedirector 添加单元测试。初始由 Saimadhav Heblikar 提供补丁。

  • bpo-18592: 为 SearchDialogBase 添加单元测试。由 Phil Webster 提供的补丁。

  • bpo-21694: 为 ParenMatch 添加单元测试。由 Saimadhav Heblikar 提供的补丁。

  • bpo-21686: 为 HyperParser 添加单元测试。原始由 Saimadhav Heblikar 提供补丁。

  • bpo-12387: 为 Idle 添加默认 Windows 键绑定的大写(小写)版本,以便 Caps Lock 不会禁用它们。由 Roger Serwy 提供的补丁。

  • bpo-21695: 在搜索仍在进行时关闭“在文件中查找”输出窗口不再关闭 Idle。

  • bpo-18910: 为 textView 添加单元测试。由 Phil Webster 提供的补丁。

  • bpo-18292: 为 AutoExpand 添加单元测试。由 Saihadhav Heblikar 提供的补丁。

  • bpo-18409: 为 AutoComplete 添加单元测试。由 Phil Webster 提供的补丁。

  • bpo-21477: htest.py - 改进框架,完成测试集。由 Saimadhav Heblikar 提供的补丁

  • bpo-18104: 添加 idlelib/idle_test/htest.py,包含几个示例测试,开始整合和改进 Idle 的人工验证测试。根据需要更改其他文件以与 htest 协同工作。将模块作为 __main__ 运行会运行所有测试。

  • bpo-21139: 将默认段落宽度更改为 72,这是 PEP 8 的推荐。

  • bpo-21284: 用户更改重新格式化宽度后,段落重新格式化测试通过。

  • bpo-17654: 确保在 OS X 上为非框架构建和所有 Tk 变体正确自定义 IDLE 菜单。

  • bpo-23180: 将 IDLE 的“Windows”菜单项重命名为“Window”。由 Al Sweigart 提供的补丁。

构建

  • bpo-15506: 在配置脚本中使用标准的 PKG_PROG_PKG_CONFIG autoconf 宏。

  • bpo-22935: 如果 openssl 不支持 SSL 3,也允许编译 ssl 模块。

  • bpo-22592: 放弃对使用 Borland C 编译器构建 Python 的支持。distutils 模块仍支持使用该编译器构建扩展。

  • bpo-22591: 放弃对 MS-DOS 的支持,特别是 DJGPP 编译器(MS-DOS 版的 GCC)。

  • bpo-16537: 在 setup.py 中检查 self.extensions 是否为空。由 Jonathan Hosmer 提供补丁。

  • bpo-22359: 移除递归 make 的错误使用。由 Jonas Wagner 提供补丁。

  • bpo-21958: 当使用 Visual Studio 2013 及以上版本构建时,定义 HAVE_ROUND。由 Zachary Turner 提供补丁。

  • bpo-18093: 嵌入 CPython 运行时的程序现在放在单独的 "Programs" 目录中,而不是保留在 Modules 目录中。

  • bpo-15759: 在 Doc/ 中的 "make suspicious"、"make linkcheck" 和 "make doctest" 现在仅在失败时显示特殊消息。

  • bpo-21141: Windows 构建过程不再尝试查找 Perl,而是依赖已配置并准备好构建的 OpenSSL 源代码。PCbuild\build_ssl.py 脚本已被重写并重命名为 PCbuild\prepare_ssl.py,并负责为 32 位和 64 位平台配置 OpenSSL 源代码。从 svn.python.org 获取的 OpenSSL 源代码将始终预先配置并准备好构建。

  • bpo-21037: 添加构建选项以启用 AddressSanitizer 支持。

  • bpo-19962: Windows 构建过程现在在源代码树的根目录中创建 "python.bat",它将所有参数传递给最近构建的解释器。

  • bpo-21285: 重构并修复 curses 配置检查,始终在 ncursesw 目录中搜索。

  • bpo-15234: 对于 BerkeleyDB 和 Sqlite,仅当未搜索到库和包含目录时才添加它们。这避免了显式的运行时库依赖。

  • bpo-17861: Tools/scripts/generate_opcode_h.py 如果 Lib/opcode.py 有任何更改,会自动从 Lib/opcode.py 重新生成 Include/opcode.h。

  • bpo-20644: OS X 安装程序构建支持3.4.1中文档构建的更改:假设外部提供的sphinx-build在/usr/bin中可用。

  • bpo-20022: 在OS X构建中消除对已弃用的bundlebuilder的使用。

  • bpo-15968: 将Tcl、Tk和Tix构建集成到Windows构建解决方案中。

  • bpo-17095: 修复Modules/Setup shared 支持。

  • bpo-21811: 预期修复以支持OS X版本 > 10.9。

  • bpo-21166: 防止python --generate-posix-vars在pybuilddir.txt构建目标中可能出现的段错误和其他随机故障。

  • bpo-18096: 修复python-config返回的库顺序。

  • bpo-17219: 为Python扩展跨构建添加库构建目录。

  • bpo-22919: Windows构建更新以支持VC 14.0(Visual Studio 2015),这将用于官方发布。

  • bpo-21236: 使用cabinet.lib而非fci.lib构建_msi.pyd。

  • bpo-17128: 为OS X 10.5+安装程序使用OpenSSL的私有版本。

C API

  • bpo-14203: 移除了对PyBuffer_FillInfo()、bytearray_getbuffer()、bytesiobuf_getbuffer()和array_buffer_getbuf()中view==NULL的过时支持。所有函数在那种情况下现在都会引发BufferError。

  • bpo-22445: PyBuffer_IsContiguous()现在实现了精确的连续性测试,与NumPy的NPY_RELAXED_STRIDES_CHECKING编译标志兼容。之前该函数在角落案例中报告了假阴性。

  • bpo-22079: PyType_Ready()现在检查静态分配的类型没有动态分配的基类。

  • bpo-22453: 移除了未记录的宏PyObject_REPR()。

  • bpo-18395: 将 _Py_char2wchar() 重命名为 Py_DecodeLocale(),将``_Py_wchar2char()`` 重命名为 Py_EncodeLocale(),并记录这些函数。

  • bpo-21233: 添加新的C函数:PyMem_RawCalloc()、PyMem_Calloc()、PyObject_Calloc()、_PyObject_GC_Calloc()。bytes(int)现在对于大对象使用 calloc() 而非 malloc(),这样更快且使用更少的内存。

  • bpo-20942: PyImport_ImportFrozenModuleObject() 不再设置 __file__ 以匹配 importlib 的行为;这影响了 _frozen_importlib 以及任何使用 imp.init_frozen() 加载的模块。

文档

  • bpo-19548: 更新 codecs 模块文档,以更好地涵盖文本编码和其他编解码器之间的区别,以及其他一些澄清。由 Martin Panter 提供补丁。

  • bpo-22394: Doc/Makefile 现在支持 make venv PYTHON=../python 来创建一个用于生成文档的 venv,例如,make html PYTHON=venv/bin/python3

  • bpo-21514: json 模块的文档现在引用新的 JSON RFC 7159 而不是过时的 RFC 4627。

  • bpo-21777: bytes 和 bytearray 的二进制序列方法现在被明确文档化,而不是假设用户能够从相应的 str 方法的行为中推导出预期行为。

  • bpo-6916: 取消文档中已弃用的 asynchat.fifo 类的记录。

  • bpo-17386: 扩展了 Doc/make.bat 脚本的功能,使其更加接近 Doc/Makefile

  • bpo-21312: 更新 thread_foobar.h 模板文件,包括更新的线程 API。由 Jack McCracken 提供补丁。

  • bpo-21043: 移除对特定 CA 组织的推荐,并提及加载操作系统证书的能力。

  • bpo-20765: 添加 PurePath.with_name() 和 PurePath.with_suffix() 的缺失文档。

  • bpo-19407: 基于 Python Packaging Authority 工具的新包安装和分发指南。现有的指南作为遗留链接保留在 distutils 文档中,因为它们仍然包含一些工具开发者所需的参考材料,这些材料在其他地方没有记录。

  • bpo-19697: 文档化 __main__.__spec__ 为 None 的情况。

测试

  • bpo-18982: 为 calendar 模块的 CLI 添加测试。

  • bpo-19548: 向 test_codecs 添加了一些额外的检查,以确保更新后的文档中的陈述保持准确。由 Martin Panter 提供补丁。

  • bpo-22838: 所有的test_re测试现在都可以通过unittest测试发现来运行。

  • bpo-22173: 更新lib2to3测试以使用unittest测试发现。

  • bpo-16000: 将test_curses转换为使用unittest。

  • bpo-21456: 如果_ssl模块不存在,则跳过test_urllib2net.py中的两个测试。由Remi Pointel提供补丁。

  • bpo-20746: 修复test_pdb以在refleak模式(-R)下运行。由Xavier de Gaye提供补丁。

  • bpo-22060: test_ctypes已经进行了一定程度的清理和简化;现在它使用unittest测试发现来找到它的测试。

  • bpo-22104: regrtest.py不再持有对从没有定义test_main()的测试模块加载的测试套件的引用。

  • bpo-22111: 在test_imaplib中进行了一些清理。由Milan Oberkirch提供补丁。

  • bpo-22002: 向test.support添加了 load_package_tests 函数,并用它在test_asyncio、test_email、test_importlib、test_json和test_tools中实现/增强测试发现。

  • bpo-21976: 修复test_ssl以接受LibreSSL版本字符串。感谢William Orr。

  • bpo-21918: 将test_tools从一个模块转换为一个包,包含每个测试脚本的单独测试文件。

  • bpo-9554: 在test_argparse中使用现代的unittest特性。由Denver Coneybeare和Radu Voicilas提供初始补丁。

  • bpo-20155: 更改test_httpservers中失败测试的HTTP方法名称,以便数据包过滤软件(特别是Windows基础过滤引擎)不会干扰测试预期的事务语义。

  • bpo-19493: 重构了ctypes测试包,明确跳过测试而不是静默跳过。

  • bpo-18492: 当测试不是由regrtest.py运行时,现在允许所有资源。

  • bpo-21634: 修复pystone微基准测试:使用地板除法代替真除法来对整数而不是浮点数进行基准测试。将pystone版本设置为1.2。补丁由Lennart Regebro编写。

  • bpo-21605: 为Tkinter图像添加了测试。

  • bpo-21493: 为ntpath.expanduser()添加了测试。原始由Claudiu Popa提供补丁。

  • bpo-19925: 为spwd模块添加了测试。原始由Vajrasky Kok提供补丁。

  • bpo-21522: 为Listbox.itemconfigure()、PanedWindow.paneconfigure()和Menu.entryconfigure()添加了Tkinter测试。

  • bpo-17756: 修复从安装位置运行时的test_code测试。

  • bpo-17752: 修复从安装位置运行时的distutils测试。

  • bpo-18604: 合并了对GUI可用性的检查。现在所有平台在请求GUI资源时至少会检查是否可以实例化Tk。

  • bpo-21275: 修复 KFreeBSD 上的一个套接字测试。

  • bpo-21223: 当某些扩展作为内置模块编译时传入 test_site/test_startup_imports。

  • bpo-20635: 添加了针对 Tk geometry 管理器的测试。

  • 增加freeze包的测试用例。

  • bpo-20743: 修复了 test_tcl 中的一个引用泄漏。

  • bpo-21097: 将 test_namespace_pkgs 移至 test_importlib。

  • bpo-21503: 在 test_importlib 中一致地使用 test_both()。

  • bpo-20939: 避免由于新增从 http://www.python.org/https://www.python.org 的重定向导致的网络测试失败:改用 http://www.example.com

  • bpo-20668: asyncio 测试不再依赖 tests.txt 文件。 (由 Vajrasky Kok 提供补丁)

  • bpo-21093: 在 OS X 上防止当 libz 的副本存在于 $HOME/lib 或 /usr/local/lib 中时 ctypes test_macholib 的失败。

  • bpo-22770: 在 OS X 上防止当运行图形用户界面测试时的某些 Tk 段错误。

  • bpo-23211: 在某些 OS X 10.6 系统上绕过 test_logging 失败。

  • bpo-23345: 防止较大 OpenSSL 补丁级别值 (如 0.9.8zc) 导致的 test_ssl 失败。

工具/示例

  • bpo-22314: 现在当设置了 LINES 环境变量时 pydoc 将会可用。

  • bpo-22615: Argument Clinic 现在支持 int 转换器的 "type" 参数。 这允许将 int 转换器用于枚举和 typedef。

  • bpo-20076: makelocalealias.py 脚本将不再忽略 UTF-8 映射。

  • bpo-20079: makelocalealias.py 脚本现在能够解析 glibc 源代码中的 SUPPORTED 文件并支持针对源代码路径的命令行选项。

  • bpo-22201: zipfile 模块的命令行界面现在能正确地提取带有目录项的 ZIP 文件。 由 Ryan Wilson 提供补丁。

  • bpo-22120: 对于使用无符号整数返回转换器的函数,现在 Argument Clinic 会在所生成的代码中为与 -1 的比较生成到该类型的强制转换。 (这将抑制一个编译警告。)

  • bpo-18974: Tools/scripts/diff.py 现在将使用 argparse 而不是 optparse。

  • bpo-21906: 让 Tools/scripts/md5sum.py 适用于 Python 3。 由 Zachary Ware 提供补丁。

  • bpo-21629: 修复 Argument Clinic 的 "--converters" 特性。

  • 为2to3添加 yield from 的支持。

  • 为 2to3 添加对 PEP 465 矩阵乘法运算符的支持。

  • bpo-16047: 修正冻结中的模块异常列表和 __file__ 处理。 由 Meador Inge 提供补丁。

  • bpo-11824: 考虑冻结中的 ABI 标签。 由 Meador Inge 提供补丁。

  • bpo-20535: PYTHONWARNING 不再影响 run_tests.py 脚本。 由 Arfrever Frehtes Taifersar Arahesis 提供补丁。

Windows

  • bpo-23260: 更新 Windows 安装器

  • 捆绑的 Tcl/Tk 版本已被更新至 8.6.3。 这项改变最显示的结果是当在 Windows Vista 或更新版本上运行时增加了新的原生文件对话框。 请参阅 Tcl/Tk 的 TIP 432 了解详情。 此外,该 Tcl/Tk 版本还包括了对 Windows 10 的支持。

  • bpo-17896: 现在 Windows 构建脚本将预期外部库源代码位于 PCbuild\..\externals 而不是 PCbuild\..\..

  • bpo-17717: 现在 Windows 构建脚本将使用来自 svn.python.org的 NASM 副本来构建 OpenSSL。

  • bpo-21907: 改进了供构建 Python 的处理脚本。

  • bpo-22644: 捆绑的 OpenSSL 版本已更新到 1.0.1j。

  • bpo-10747: 在 Windows 开始菜单中使用带版本号的标签。 由 Olive Kilburn 提供补丁。

  • bpo-22980: 带有版本号和平台标记的 .pyd 文件 (例如 ".cp35-win32.pyd") 现在将优先于不带标记的文件被加载。

(有关旧版本的信息,请参阅HISTORY文件。)