更新日志

Python 下一版

发布日期: XXXX-XX-XX

macOS

  • gh-124111: Update macOS installer to use Tcl/Tk 9.0.4.

  • gh-152023: Update macOS installer builds to SQLite 3.53.3. Enable median() and percentile() functions.

  • gh-151163: 更新 macOS 安装程序以包括 SQLite version 3.53.2 版。

  • gh-150644: 当启用系统日志记录时 (通过 config.use_system_logger),消息会使用 public 标签。 这将允许 macOS 26 系统日志记录器查看消息而无需特殊配置。

Windows

  • gh-124111: 更新 Windows 构建以使用 Tcl/Tk 9.0.4。

  • gh-152433: ssl: improve UWP build compatibility.

  • gh-152433: Restores the mmap module when CPython is built from source for specific Windows API sets.

  • gh-152433: Use the Windows API GetFileSizeEx() for memory mapped files, rather than the older GetFileSize().

  • gh-152433: Implement os.cpu_count() for Universal Windows Platform.

  • gh-151163: 更新 Windows 构建以包括 SQLite 3.53.2 版。

  • gh-151159: 将捆绑的 OpenSSL 更新至 3.5.7 版。

  • gh-150836: 使已安装的 tkinter 在 Windows 上适用于嵌入 Tk DLL 的 Tk 脚本库。

  • gh-149786: 修复 Windows 自由线程构建上虚拟环境启动器的问题。

  • gh-138489: Windows 发行版现在包括一个 build-details.json 文件 (参见 PEP 739)。 旧式安装程序不会安装它,但其他所有来自 python.org 的发行版和 PC\layout 脚本中所有预设配置都会包括它。

  • gh-140146: 在 Windows 上当交互式会话中标准输入被重定向至管道时防止 tkinter 挂起。 这有助于从脚本中测试 tkinter 的交互式使用,例如作为 cpython 测试套件的一部分。

工具/示例

  • gh-152384: The CPython Pixi packages are now all accessible at the same Tools/pixi-packages subdirectory, rather than at Tools/pixi-packages/{variant} as before. Variants are now selected not via subdirectory but via flags; see https://pixi.prefix.dev/latest/concepts/package_specifications/#extras-and-flags for usage instructions. The tsan-freethreading variant has been renamed to tsan_freethreading, while the default, asan, and freethreading variants retain their previous names.

  • gh-150258: 更新 Tachyon 火焰图的浮动提示以同时显示绝对和相对百分比。

  • gh-111501: PS1 is no longer exported by venv activate script

测试

  • gh-154211: Add test.support.skip_if_huge_c_stack() and use it to skip tests that exhaust the C stack if the stack limit is very large (e.g. on DragonFly BSD or with ulimit -s unlimited).

  • gh-154144: Fix building the _testcapi module on NetBSD.

  • gh-151626: 修复 test.test_inspect, test.test_import, test.test_importlib, test.test_py_compiletest.test_compileall 中测试套件在设置了 PYTHONPYCACHEPREFIX 的情况下运行时多个测试的失败问题。 这些测试现在会将 pycache 前缀设为无效并假定采用默认的 __pycache__ 字节码布局。

  • gh-151096: 修复当 CPython 配置带有拆分的 exec 前缀 (--exec-prefix 不同于 --prefix) 时 test_embed 执行失败的问题。

  • gh-151130: 为 PyWeakref_* C API 添加更多测试。

  • gh-150966: 避免过早终结出错的实时采样性能分析器测试目标,因为这会导致 ASAN buildbot 上标准错误的断言结果不稳定。

  • gh-150387: 修复在缓慢的 buildbot 上 test.test_profiling.test_sampling_profiler.test_live_collector_ui.TestLiveModeErrors.test_run_failed_script_live 挂起的问题。 现在测试总是会将一个最终 q 按键加入队列使活动的 TUI 循环退出即使性能分析器收集了足够的样本以进入结束后输入循环也是如此。

  • gh-150114: On Linux, regrtest now logs the total memory usage of all Python processes. Read the private memory in /proc/pid/smaps. Patch by Victor Stinner.

  • gh-149776: 在 Linux 内核 7.1 或更新版本上修复 test_socket。 在不支持的情况下跳过 UDP Lite 测试。 由 Victor Stinner 编写补丁。.

  • gh-148853: 修复 FreeBSD 上在 test.support 的 in_systemd_nspawn_sync_suppressed() 中由于 /run 目录不可读导致的测试失败问题。

安全性

  • gh-153030: 修复 html.parser.HTMLParser 中对很长的未终止结构(如标签或注释 )进行增量解析时存在的二次方级时间复杂度问题,该问题可能被利用来发起拒绝服务攻击。

  • gh-152216: 将捆绑的 libexpat 更新至 2.8.2 版。

  • gh-151987: 现在 tarfile.TarFile.extract() 方法将在从归档提取链接目标作为回退方案时应用给定的过滤器。

  • gh-151981: 在 tarfile 中,流的定位现在将在到达流末尾时停止。

  • gh-151544: Modules/Setup.local 不再被用作发现 Python 是否在源代码树中运行的指标,因为它有可能影响实际的安装。 pybuilddir.txt 现在是运行在源代码树中唯一指示器。

  • gh-151558: 修复 tarfiledatatar 解压缩过滤器中特殊制作的归档可能创建指向目标目录以外的符号链接的安全漏洞。 这绕过了 CVE 2025-4330

  • gh-151159: 更新 macOS 安装程序以使用 OpenSSL 3.5.7。

  • gh-151159: 更新 Android 和 iOS 安装程序以使用 OpenSSL 3.5.7。

  • gh-150599: 修复 bz2 中当发生解压缩错误后重用 bz2.BZ2Decompressor 时可能的栈缓冲区溢出问题。 解压缩器在 libbz2 报告错误后将不可用。

  • gh-150743: 现在 http.client 会将其读取的分块响应尾部行数限制为 max_response_headers (默认为 100),并将跳过的临时 (1xx) 响应数限制为 100。 在此之前恶意或存在缺陷的服务器可能无限期地流式传输尾部行或 100 Continue 响应,即使客户端使用了套接字超时也会导致客户端挂起。 由 @YLChen-007 通过 GHSA-w4q2-g22w-6fr4 报告。

  • gh-149835: 当检测目标位置是否在源目录之内时现在 shutil.move() 会通过 os.path.realpath() 来解析符号链接,以防止基于符号链接绕过该限制的手段。

  • gh-149698: 将捆绑的 libexpat 更新至 version 2.8.1 以修复 CVE 2026-45186

  • gh-87451: ftplib 模块的未写入文档的 ftpcp 函数默认将不再信任作为对 PASV 命令的响应从源服务器返回的 IPv4 地址,以完成对 CVE-2021-4189 的修复。 对于 ftplib.FTP,之前的行为可通过将源 ftplib.FTP 实例上的 trust_server_pasv_ipv4_address 属性设为 True 来重新启用。 感谢 Aurascape AI 的 Qi Deng 报告此问题。

  • gh-149474: 修复在创建输出文件时 profiling.sampling 中的二进制写入器不发出审计事件的问题 (PEP 578)。 该写入器和读取器现在将可接受任意路径型对象。 由 Maurycy Pawłowski-Wieroński 编写补丁。

  • gh-149486: 现在 tarfile.data_filter() 会使用与写入磁盘的相同的正规化值来验证链接目标,当解析符号链接目录时将去除成员名称末尾的分隔符,并会拒绝将替换目标目录本身的链接成员。 这将关闭 data 提取过滤器的几个路径遍历绕过漏洞。

  • gh-149079: Fix a potential denial of service in unicodedata.normalize(). The canonical ordering step of Unicode normalization used a quadratic-time insertion sort for reordering combining characters, which could be exploited with crafted input containing many combining characters in non-canonical order. Replaced with a linear-time counting sort for long runs.

  • gh-149018: 当 Python 编译附带 libExpat 2.8.0 或更新版本时改进 xml.parsers.expatxml.etree.ElementTree 对 XML 哈希洪水攻击的防护。

  • gh-143927: 在写入多行 configparser 值时将所有行结束符 (CR, CRLF 和 LF) 正规化为 LF+TAB。

  • gh-154176: Fix a crash in locale.strxfrm() on DragonFly BSD, whose wcsxfrm() does not support the zero size.

  • gh-154146: Fix accuracy of math.acospi() for arguments close to 1 on platforms that do not provide acospi() in libm.

  • gh-154053: 修复 ssl 模块使用 LibreSSL 的编译问题,由于该库未提供 SSL_CTX_set1_sigalgs_list()SSL_CTX_set1_client_sigalgs_list()。 现在 ssl.SSLContextset_server_sigalgs()set_client_sigalgs() 方法在 LibreSSL 上会引发 NotImplementedError

  • gh-154001: 修复当 random.random() 返回零时 random.binomialvariate() 引发 ZeroDivisionError 的问题。

  • gh-153906: Modernize the HTML output of pydoc: use semantic HTML5 markup and a new style sheet based on the python-docs-theme used by docs.python.org, with dark mode support. Class members inherited from other classes are now collapsed by default.

  • gh-153908: 修复在 free-threaded build 下当调用 itertools.countrepr() 时的数据竞争问题。

  • gh-153896: 对 typing.Literal 中不可哈希的参数进行去重。

  • gh-153903: Add ctypes.util.wrap_dll_function() for creating _CFuncPtr objects from a function signature.

  • gh-153864: On a wide curses build, curses.window.insch() now inserts a non-ASCII byte as the character it encodes in the window's encoding, consistently with addch(), instead of its code point.

  • gh-153862: On a wide curses build, curses.window.inch() now returns the locale-encoded byte of a non-ASCII character, matching instr(), instead of the low byte of its code point.

  • gh-153856: Add os.RWF_NOSIGNAL constant for Linux 6.18+.

  • gh-153844: symtable.symtable() now accepts an AST object, like the builtin compile().

  • gh-104533: Add ctypes.util.struct() and ctypes.util.CFieldInfo for generating structure types using annotations.

  • gh-153761: Fix cancelling asyncio.loop.sock_accept() dropping a pending connection.

  • gh-153695: 对包含不可哈希值的 sqlite3.Row 执行哈希运算现在将引发 TypeError 而不是 SystemError。 由 tonghuaroot 编写补丁。

  • gh-127049: Fix a race condition in asyncio on Unix where asyncio.subprocess.Process.send_signal(), terminate() or kill() could signal an unrelated process that was recycled onto the PID of the already-reaped child when ThreadedChildWatcher is used. Patch by Kumar Aditya.

  • gh-153658: 修复 sqlite3.Connection.iterdump() 在表名包含单个引号时引发 sqlite3.OperationalError 的问题。 由 tonghuaroot 编写补丁。

  • gh-98078: Fix asyncio SSL transports not sending the fatal TLS alert to the peer when the TLS handshake fails or when receiving corrupted data, and not sending the close_notify alert to the peer when the TLS shutdown fails. The peer can now tell why the connection was dropped (for example, certificate verification failure or no TLS version in common) instead of seeing the connection abruptly closed.

  • gh-85943: 修复当 str 格式在相等的 bytes 格式之后被使用(或者反之)时 struct 函数在 -bb 命令行选项下引发 BytesWarning 的问题。 内部格式缓存将不再混用 strbytes 键。

  • gh-153502: imaplib.IMAP4.copy(), move(), fetch(), store(), search(), sort(), thread() and expunge() now accept a keyword-only uid argument that selects the corresponding UID command, as a more convenient alternative to uid().

  • gh-153494: imaplib.IMAP4.search(), sort() and thread() (and the corresponding uid commands) now encode str search criteria to the declared charset, so international search text can be passed as ordinary str. When charset is None (as it must be under UTF8=ACCEPT), the criteria are sent using the connection encoding instead. A criterion passed as bytes is sent unchanged, for use with a charset that Python has no codec for.

  • gh-153513: Values of several Tcl object types returned by tkinter are now converted to the corresponding Python type instead of being wrapped in a _tkinter.Tcl_Obj: index, window, nsName and parsedVarName objects to str, and pixel screen distances with no unit suffix to int or float.

  • gh-153404: urllib.robotparser.RobotFileParser now silently ignores a Crawl-delay or Request-rate value written with non-decimal digits (such as U+00B2 SUPERSCRIPT TWO) instead of raising ValueError and aborting the parse of the whole robots.txt file.

  • gh-151292: 样本计数以 profiling.sampling 二进制文件格式存储,使用 64 位整数类型,比之前使用的 32 位整数更大。 这会使现有的记录失效。 长时间或线程密集型的性能分析会话将不再因 OverflowError 而失败。 由 Maurycy Pawłowski-Wieroński 编写补丁。

  • gh-153417: 当邮箱或命令参数为 bytes 时来自 imaplib.IMAP4.select()imaplib.IMAP4.uid() 的错误消息在 -bb 之下将不再引发 BytesWarning

  • gh-153422: winfo_exists(), winfo_ismapped() and winfo_viewable() methods of tkinter widgets and edit_modified() of tkinter.Text now return a bool instead of an integer or, depending on wantobjects, a string.

  • gh-49555: imaplib now encodes non-ASCII mailbox names as modified UTF-7 (RFC 3501, section 5.1.3) in the default mode, so international mailbox names can be passed as ordinary str; under UTF8=ACCEPT they are sent as UTF-8 instead. A name that is not valid modified UTF-7, such as one with a bare &, is now encoded correctly instead of being sent as is. A str that is already valid modified UTF-7, or a bytes object, is sent unchanged.

  • gh-153395: curses.ascii predicates and the ctrl() and unctrl() functions now accept a curses.complexchar. ctrl() now returns a non-ASCII argument unchanged instead of masking it to a control character.

  • gh-153406: 当被解析的年份或时差超出范围时 email.utils.parsedate_to_datetime() 现在会引发 ValueError 而不是 OverflowError,与其文档中的行为相匹配。

  • gh-153333: 现在 tkinter.Tkreadprofile 方法会使用文件中声明的编码格式来读取用户的配置脚本,而非语言区域的编码格式。

  • gh-153083: 将对 array.array 的 GC 追踪延迟到其构建结束时进行。 由 Donghee Na 编写补丁。

  • gh-153292: 修复自由线程构建版在 threading.RLock 的 repr 中的数据竞争问题。

  • gh-153293: 修复实时采样性能分析器 TUI 在统计信息重置后保留过时的聚合操作码统计数据的问题。

  • gh-143990: 根据指定字体创建的 tkinter.font.Font,包括由 copy() 所创建的,现在会拷贝其已配置的选项而不是由 Tcl 的 font actual 解析出的选项,从而保留以像素形式指定的大小(大小值为负数)。

  • gh-148286: 修复在:attr:compression.zstd.ZstdDecompressor.unused_data 中当一个完整的帧通过单次调用来解压缩时的未定义行为问题。

  • gh-153210: 修复在内存压力下 array 导入的崩溃问题。

  • gh-153521: Add support for structured arguments in imaplib command methods. A message_set and lists of flags or other atoms can now be passed as sequences instead of preformatted strings, and the search(), fetch(), sort(), thread() and uid() methods accept a params keyword argument that substitutes and quotes ? placeholders.

  • gh-153256: Added the tk_print() method to tkinter.Canvas and tkinter.Text which prints the contents of the widget using the native print dialog. It requires Tk 8.7/9.0 or newer.

  • gh-153259: Added the tkinter.systray module which provides the SysTrayIcon class as an interface to the system tray icon and the notify() function which sends a desktop notification. They require Tk 8.7/9.0 or newer.

  • gh-72880: Added the tkinter.fontchooser module which provides the FontChooser class as an interface to the native font selection dialog.

  • gh-153200: 修复当 math.isqrt() 对于参数为不小于 2**64 的 int 子类的实例并具有重写的比较运算符时返回不正确结果的问题。

  • gh-66788: Add the utf-7-imap codec, implementing the modified UTF-7 encoding used for international IMAP4 mailbox names (RFC 3501, section 5.1.3).

  • gh-89869: Add imaplib.IMAP4.login_plain(), which authenticates using the PLAIN SASL mechanism (RFC 4616). Unlike login(), it supports non-ASCII user names and passwords.

  • gh-98092: Add imaplib.IMAP4.id(), a wrapper for the IMAP ID command (RFC 2971).

  • gh-153133: Fix a socket leak in asyncio.loop.create_connection() when the transport cannot be created.

  • gh-153068: 修复 cProfile.Profile.enable() 使其不再覆盖来自 sys.monitoring 的错误。

  • gh-153062: 修复在自由线程构建版中并发地迭代 itertools.tee() 迭代器时发生崩溃的问题。

  • gh-153056: 修复当 pattern 属性是一个已编译正则表达式对象时 string.Template 引发错误的 ValueError 的问题,这种情况在文档中是允许的。 在自由线程构建中这问题也会在首次并发使用时作为数据竞争而出现。

  • gh-59396: tkinter.scrolledtext.ScrolledText gained a use_ttk parameter to use the themed tkinter.ttk frame and scroll bar instead of the classic tkinter widgets.

  • gh-143921: 收窄了对 imaplib 命令中控制字符的检查:现在仅拒绝 NUL、CR 和 LF。 其他控制字符字符在带引号的字符串中有效并可能出现在服务器返回的邮箱名称中,因此它们现在将被允许并以带引号的形式发送。

  • gh-153037: 修复在迭代一个未被打开供读取的文件时 ZstdFile 引发 AttributeError 而不是 io.UnsupportedOperation 的问题。

  • gh-135661: 修复了 html.parser.HTMLParser: 一个突然关闭的空注释 (<!--> or <!--->) 不再向上扩展到同一个 feed() 调用中后续的 -->

  • gh-153009: Fix compilation of curses on platforms that define the stdscr macro. Patch by Bénédikt Tran.

  • gh-152851: 防止在拷贝 BLAKE-2s/2b 对象时内存分配失败导致崩溃的问题。 由 Bénédikt Tran 编写补丁。

  • gh-54930: Error responses of http.server.BaseHTTPRequestHandler to malformed request lines now include a status line and headers instead of being sent in the bare HTTP/0.9 style. Only a valid HTTP/0.9 request (a two-word GET request line) now receives an HTTP/0.9 style response.

  • gh-152997: On platforms providing the C library's iconv(3) function, the codecs module now exposes every encoding known to iconv for which Python has no built-in codec. Such an encoding can be used by its name (for example "cp1133") or, to force the iconv-based engine even when a built-in codec exists, with an "iconv:" prefix (for example "iconv:latin1").

  • gh-119592: Fix concurrent.futures.ProcessPoolExecutor stranding submitted work forever when a worker process exited upon reaching its max_tasks_per_child limit after shutdown() was called with wait=False: a replacement worker is now spawned and the remaining work executed as documented. If the executor has instead been garbage collected without shutdown() (gh-152967), or a replacement worker cannot be started, the remaining futures now fail with BrokenProcessPool instead of never resolving. A worker exit racing shutdown(wait=False) can also no longer crash the executor management thread.

  • gh-150579: concurrent.futures now uses lazy imports for its executor submodules instead of a module __getattr__ hook.

  • gh-152951: collections.deque prevent rare crash when calling extend under high memory pressure conditions.

  • gh-150880: Normalize non-extended Windows paths before appending the wildcard used by os.listdir() and os.scandir(), making paths with trailing spaces behave consistently with other filesystem APIs.

  • gh-152068: Fixes a bug when a line was split (particularly on macOS Terminal.app) in the middle of a colorized keyword, causing the ANSI Color Reset sequence (ESC0m) to not be properly printed, causing the output to be colored when it shouldn't

  • gh-152849: Out-of-range float and integer timestamps now raise OverflowError with the same message. Patch by tonghuaroot.

  • gh-152847: Reject a POSIX TZ transition rule with non-digit characters in the day-of-year field in the pure-Python zoneinfo parser. Patch by tonghuaroot.

  • gh-152905: On glibc, locale.nl_langinfo() now decodes the LC_TIME items (such as the month and day names) using the wide locale data, so the result no longer depends on the LC_CTYPE encoding.

  • gh-152586: tempfile._TemporaryFileWrapper has been renamed to the public tempfile.TemporaryFileWrapper. The old private name is kept as a deprecated alias and will be removed in Python 3.21.

  • gh-77508: Add imaplib.IMAP4.move(), a wrapper for the IMAP MOVE command (RFC 6851), analogous to copy().

  • gh-49680: Add the translate_line_endings parameter to imaplib.IMAP4.append(). By default line endings in the message are translated to CRLF, as before; passing False sends the message literal exactly as given, preserving bare CR or LF octets.

  • gh-152718: Fix unbounded memory allocation in the profiling.sampling binary profile reader when a file declares more string or frame entries than it contains.

  • gh-108280: Connecting imaplib to a server that does not send a valid IMAP4 greeting (for example a POP3 server answering on the IMAP port) now raises an error reporting the server's response instead of imaplib.IMAP4.error: None.

  • gh-151126: Fix a crash caused by failing to set MemoryError on allocation failure when passing ctypes.Structure or ctypes.Union instances by value to ctypes foreign functions.

  • gh-63121: imaplib now refreshes the cached capability list after a successful login() or authenticate(), using the CAPABILITY response sent by the server or, if none was sent, by querying it, so that capabilities that become available only after authentication (such as ENABLE on Gmail) are recognized. Capabilities advertised in the server greeting are now also used, avoiding a redundant CAPABILITY command.

  • gh-88574: imaplib no longer fails when a server sends a spurious blank line after the counted data of a literal, including after a literal that terminates a response (such as a mailbox name returned by LIST). Such blank lines are now skipped without swallowing the following line.

  • gh-152502: Detect the curses mouse interface (getmouse(), has_mouse(), the BUTTON* constants, and others) and the window is_* state-query methods with configure capability probes or library macros instead of gating them on ncurses-specific macros. They are now also available with other curses implementations that provide them, such as NetBSD curses and PDCurses (the latter underpins windows-curses).

  • gh-151842: 修复当发生 MemoryError_interpreters.capture_exception() 中的崩溃问题。 由 Amrutha Modela 编写补丁。

  • gh-40038: imaplib now again quotes command arguments when necessary, for example mailbox names containing a space. Such quoting was inadvertently disabled when the module was ported to Python 3, and the arguments are now quoted according to the RFC 3501 grammar. For backward compatibility, an argument already enclosed in double quotes is left unchanged, so code that quotes arguments itself keeps working.

  • gh-50966: Fix unbounded recursion in turtle when a mouse event handler that moves the turtle is reentered while the screen is being redrawn, for example with screen.ondrag(turtle.goto). This could previously crash the interpreter.

  • gh-152638: Deprecate tkinter.filedialog.askopenfiles(). Opening several files at once is error-prone and the returned list cannot be used in a with statement; iterate over the names returned by tkinter.filedialog.askopenfilenames() and open them one by one instead.

  • gh-152587: In tkinter, the name parameter of the wait_variable(), setvar() and getvar() methods and the value parameter of setvar() are now required. Their former default values ('PY_VAR' and '1') were not meaningful.

  • gh-152569: Fix asyncio.wait() leaking waiting tasks via the await-graph when racing a future that never resolves. The waiting task is now discarded from every future's awaited_by set once wait() returns, even for pending futures.

  • gh-110357: Importing hashlib no longer logs an error to stderr when a normally guaranteed hash algorithm is unavailable in the current runtime (for example under an OpenSSL FIPS configuration or a build using --without-builtin-hashlib-hashes). Code that actually uses the missing algorithm still gets a clear ValueError.

  • gh-152503: Fix curses.window.in_wch(), curses.window.in_wchstr() and curses.window.getbkgrnd() returning garbage text when curses is built against a curses library that does not NUL-terminate the cchar_t text array (such as NetBSD curses).

  • gh-152356: Fix a hang in profiling.sampling run --blocking on Windows when the target process exits. The profiler now finalizes binary profiles instead of continuing to sample the exited process.

  • gh-152470: The wide-character curses functions and methods curses.window.get_wch(), curses.window.get_wstr(), curses.unget_wch(), curses.erasewchar(), curses.killwchar() and curses.wunctrl() now also work when Python is not built against a wide-character-aware curses library, on an 8-bit locale, where each character is a single byte in the relevant encoding. curses.ungetch() now also accepts a one-character string, like curses.unget_wch(); on a wide-character build it can be any character (previously a multibyte character raised OverflowError).

  • gh-78335: Update the docstrings of tkinter and tkinter.ttk widget classes to list all supported widget options, including options added in Tk 9.0 and 9.1. tkinter.Menubutton and tkinter.Message previously had no option list at all.

  • gh-152431: Fix asyncio.StreamWriter.start_tls() to keep the linked StreamReader transport in sync with the upgraded transport.

  • gh-103878: The tkinter.filedialog functions that return a filename (askopenfilename(), asksaveasfilename() and askdirectory()) now consistently return an empty string when the dialog is cancelled, instead of an empty tuple or b'' on some platforms. askopenfilenames() likewise always returns an empty tuple, and askopenfiles() an empty list.

  • gh-151126: Fix two crashes in tkinter and socket modules initialization under a memory pressure. Sets missing MemoryError.

  • gh-133031: curses.textpad.Textbox now supports entering and reading back the full Unicode range, including combining characters, when curses is built with wide-character support.

  • gh-133031: curses.textpad.Textbox now enters and reads back the non-ASCII characters of an 8-bit locale encoding, instead of mangling them with a 7-bit mask.

  • gh-43699: The drag cursor in tkinter.dnd is now changed only once the pointer starts moving rather than on the initial button press, so that a plain click no longer flashes it.

  • gh-50409: Deprecate the tagOrId parameter of tkinter.PanedWindow.paneconfigure() (and its paneconfig() alias) in favor of child, for consistency with the other pane methods; it will be removed in Python 3.18.

  • gh-71880: curses.textpad.Textbox now lets the lower-right cell of the window be edited. Writing it with addch() would move the cursor past the end of the window, raising an error and scrolling a scrollable window, so it is now written with insch(), which keeps the cursor in place.

  • gh-152334: Add the curses.define_key(), curses.key_defined() and curses.keyok() key-management functions.

  • gh-152332: Add the curses.term_attrs() function, the counterpart of curses.termattrs() for the WA_* attributes.

  • gh-87904: The curses types and exceptions now report their public module in __module__, repr() and help() -- for example curses.window instead of _curses.window and curses.panel.error instead of _curses_panel.error.

  • gh-152325: Add the curses.has_mouse() function and the curses.window.mouse_trafo() method.

  • gh-121249: Deprecate using 'F' and 'D' type codes in the struct module.

  • gh-152275: The curses module now raises OverflowError instead of silently truncating an out-of-range value: curses.color_pair() rejects a color pair number that does not fit in the chtype color field, and the attr argument of the character-cell and attribute methods (addch(), addstr(), attron(), attrset() and others) is checked against the chtype range.

  • gh-83274: Deallocating a tkinter application from a thread other than the one it was created in no longer crashes the interpreter. The underlying Tcl interpreter is leaked instead, and a RuntimeWarning is reported.

  • gh-152305: Fix the pure-Python datetime.time.strftime() implementation raising AttributeError for the year directives. Patch by tonghuaroot.

  • gh-88758: tkinter.Misc.focus_get(), focus_displayof(), focus_lastfor() and winfo_containing() now return None instead of raising KeyError when the widget was not created by tkinter (for example a torn-off menu).

  • gh-152260: Add the curses functions scr_dump(), scr_restore(), scr_init() and scr_set(), which dump the whole screen to a file and restore it.

  • gh-38464: tkinter.Misc.nametowidget() now resolves the auto-generated names of cloned menus (a menu used as a menubar or a cascade) back to the original widget.

  • gh-152263: Add the soft-label-key functions to the curses module: slk_init(), slk_set(), slk_label(), slk_refresh(), slk_noutrefresh(), slk_clear(), slk_restore(), slk_touch(), slk_attron(), slk_attroff(), slk_attrset(), slk_attr(), slk_attr_on(), slk_attr_off(), slk_attr_set() and slk_color().

  • gh-116946: The internal _tkinter tkapp and tktimertoken types now implement the garbage collector protocol, so reference cycles involving a Tcl interpreter or a timer handler can be collected.

  • gh-152258: Add the curses window method dupwin(), which returns a new window that is an independent duplicate of an existing one.

  • gh-152248: Make the C and pure-Python zoneinfo parsers validate POSIX TZ abbreviations consistently, rejecting unquoted abbreviations with non-letter characters and empty quoted abbreviations. Patch by tonghuaroot.

  • gh-80937: Fix a memory leak in tkinter when a Tcl command created with createcommand was not explicitly removed before the interpreter was deleted. The command no longer keeps the interpreter alive through a reference cycle.

  • gh-152246: Fix the pure-Python zoneinfo parser accepting an invalid POSIX TZ transition rule with a non-period separator. Patch by tonghuaroot.

  • gh-152233: Add the curses.complexstr type, an immutable string of styled character cells (the counterpart of curses.complexchar), and the curses window method in_wchstr() that returns one. The string-cell methods addstr(), addnstr(), insstr() and insnstr() now also accept a complexstr. Like curses.complexchar, it works whether or not Python was built against a wide-character-aware curses library.

  • gh-152233: Add the curses.complexchar type, representing a styled character cell (text, attributes and color pair), and the curses window methods in_wch() and getbkgrnd() that return one. The character-cell methods (addch(), bkgd(), border(), hline() and others) now also accept a complexchar. This works whether or not Python was built against a wide-character-aware curses library; on a narrow build a cell holds a single character representable as one byte in the window's encoding.

  • gh-152099: asyncio's loop.sendfile(..., fallback=False) now consistently raises asyncio.SendfileNotAvailableError for fallback-only transports, such as SSL/TLS transports, when native sendfile cannot be used. Previously, this case raised RuntimeError.

  • gh-151496: Fixed profiling.sampling --gecko with --async-aware by flattening async task stacks before generating Gecko samples. --binary now rejects --async-aware until the binary format supports async task data.

  • gh-152219: Add the curses window methods attr_get(), attr_set(), attr_on(), attr_off() and color_set(), which use a separate color pair argument instead of packing it into the attribute value, and the corresponding WA_* attribute constants.

  • gh-139816: Fix a hang in tkinter on interactive Python built without readline. An exception raised in a callback no longer causes the event loop to stop and wait for the user to press Enter; pending callbacks now keep running until input is actually available on stdin.

  • gh-139145: Fix a busy loop in tkinter on interactive Python. When a Tcl command running its own event loop (such as vwait or wait_variable()) was active and input arrived on stdin, the event loop kept spinning at 100% CPU. The stdin file handler is now removed as soon as input is available. Based on a patch by Michiel de Hoon.

  • gh-152212: Fix the pure-Python zoneinfo parser accepting a POSIX TZ string with a std abbreviation but no offset. This is invalid per POSIX and now raises ValueError, matching the C accelerator. Patch by tonghuaroot.

  • gh-152156: Fix a possible crash in concurrent.interpreters.create() under limited memory conditions.

  • gh-152157: The C implementations of fromisoformat() and fromisoformat() now reject a decimal separator that is not followed by any fractional digit before a timezone designator.

  • gh-151763: 修复队列创建中当发生 MemoryError_interpqueues.create() 中的崩溃问题。

  • gh-151669: On Windows, when populating tar archives from filesystem content, to conform to the tar format standard, backslashes in symlink targets are be replaced by slashes.

  • gh-105895: 将 matchcase 添加至 help() 的支持主题列表中。

  • gh-151378: Fix a bug in the binary collector in Tachyon that caused unbounded memory growth while profiling a thread that stayed asleep. Patch by Maurycy Pawłowski-Wieroński.

  • gh-152074: Increase the buffer size to 256 KiB in asyncio.loop.sendfile() method fallback.

  • gh-152100: Support set operations and nested sets in regular expression character classes, as described in Unicode Technical Standard #18: set difference ([A--B]), intersection ([A&&B]) and union ([A||B]).

  • gh-152079: 修正 datetime.datetime.fromisoformat() 在 C 实现中当 UTC 时差秒数部分为零时丢弃其后小数部分的问题,以与纯 Python 实现相匹配。

  • gh-152052: The json C accelerator now correctly reports an unterminated string for a \uXXXX escape at the end of the input.

  • gh-152060: 修正在纯 Python 实现中 datetime.datetime.fromisoformat() 针对某些错误格式的字符串引发 AssertionError 而非 ValueError 的问题,以与 C 实现相匹配。

  • gh-152056: Optimize matching of a character set that contains a single character category, such as [\d] or [^\s]: it is now compiled to a single CATEGORY opcode, the same as the corresponding \d or \S escape, instead of being wrapped in an IN block. This speeds up matching and reduces the size of the compiled byte code. Patch by Pieter Eendebak.

  • gh-152033: Optimize matching of character class escapes (\d, \D, \s, \S, \w and \W) that occur outside a character set: they are now compiled to a single CATEGORY opcode instead of being wrapped in an IN block. This speeds up patterns such as \d+ and reduces the size of the compiled byte code.

  • gh-143990: tkinter.font.Font can now wrap a font description without creating a new named font, by passing it as font with exists=True and no name. This avoids a loss of precision in actual(), measure() and metrics(). Keyword options now override the corresponding settings of the given font instead of being ignored.

  • gh-127802: 已弃用的 tkinter.Variable 方法 trace_variable(), trace(), trace_vdelete()trace_vinfo() 现在计划在 Python 3.17 中移除。

  • gh-126219: 修正 中 tkinter.TkclassName 包含非 BMP 字符并且 tkinter 是针对 Tcl/Tk 8.x 构建时的崩溃问题。 现在这样的名称将被拒绝并引发 ValueError

  • gh-101284: tkinter.OptionMenu now accepts arbitrary tkinter.Menubutton options as keyword arguments and uses them to override its default appearance.

  • gh-143070: Automatically generated tkinter widget names now start with "+" instead of "!", so that they can be used as tags in the tkinter.Canvas and tkinter.Text widgets.

  • gh-151955: Allow more types to be used in the bound argument to typing.ParamSpec and typing.TypeVarTuple.

  • gh-151920: Add the ttk.Style.theme_styles method, wrapping the Tk ttk::style theme styles subcommand, which returns the list of styles defined in a theme.

  • gh-95555: Regular expressions now support Unicode property escapes \p{...} and \P{...} for properties that the engine can resolve without the unicodedata database: many General_Category values, a number of binary properties, the POSIX compatibility classes, and properties derivable from the code point.

  • gh-151910: Added tkinter.ttk.Treeview methods wrapping the enhanced ttk::treeview widget commands added in Tk 9.1 (and the detached query added in Tk 9.0): item navigation and queries, opening, hiding, sorting and searching of items, and cell focus, selection and tagging. The expand() and collapse() methods (without recursion) also work on Tk older than 9.1.

  • gh-151890: Add the format parameter to the tkinter.PhotoImage.put() method, the metadata parameter to the put(), read(), write() and data() methods, and the withalpha parameter to the get() method. The metadata and withalpha parameters require Tcl/Tk 9.0 or newer.

  • gh-151888: Add the tkinter.PhotoImage.redither() method, wrapping the photo image redither Tk command.

  • gh-151886: Add the tkinter.Misc.tk_appname(), tkinter.Misc.tk_useinputmethods() and tkinter.Misc.tk_caret() methods, wrapping the tk appname, tk useinputmethods and tk caret Tk commands.

  • gh-151881: Add the tkinter.Menu.postcascade() method and the tkinter.Misc.tk_scaling() and tkinter.Misc.tk_inactive() methods, wrapping the postcascade, tk scaling and tk inactive Tk commands.

  • gh-151878: Add the validate() method to the tkinter.Entry and tkinter.Spinbox widgets, forcing an evaluation of the validation command.

  • gh-151876: Add the tkinter.Canvas methods rchars() and rotate(), wrapping the rchars and rotate Tk canvas commands.

  • gh-151874: Add the tkinter methods Misc.winfo_isdark(), Wm.wm_iconbadge() and Wm.wm_stackorder(), wrapping the winfo isdark, wm iconbadge and wm stackorder Tk commands.

  • gh-59396: The tkinter.filedialog.FileDialog dialog and its tkinter.filedialog.LoadFileDialog and tkinter.filedialog.SaveFileDialog subclasses, which follow the layout of the classic Motif file selection dialog, were modernized to match its look and feel more closely. They are now built from the themed tkinter.ttk widgets instead of the classic tkinter widgets, and gained a use_ttk parameter that selects between the classic Tk widgets and the themed ttk widgets. The buttons and field labels gained Alt key accelerators, the default ring follows the keyboard focus, and the Escape key cancels the dialog. The directory and file lists gained a horizontal scrollbar and type-ahead selection. The dialog is now centered over its parent, and the overwrite confirmation of SaveFileDialog uses a themed message box.

  • gh-86165: Fix imaplib.Time2Internaldate() to use the local timezone offset for time.struct_time values with tm_gmtoff set to None, as returned by datetime.datetime.timetuple(). Contributed by Xiao Yuan.

  • gh-151822: Colorize exit, quit, copyright, help, and clear as commands in the REPL when typed alone on a line. Patch by Bartosz Sławecki.

  • gh-59396: The tkinter.simpledialog dialogs were modernized to match the look and feel of the native Tk dialogs. tkinter.simpledialog.SimpleDialog and the askinteger(), askfloat() and askstring() dialogs are now built from the themed tkinter.ttk widgets instead of the classic tkinter widgets; the tkinter.simpledialog.Dialog base class still defaults to the classic widgets for compatibility. Both Dialog and SimpleDialog gained a use_ttk parameter that selects between the classic Tk widgets and the themed ttk widgets. SimpleDialog also gained bitmap and detail parameters, draws the standard icons with themed images in the ttk version, and accepts mappings of button options as buttons entries, where an underline option adds an Alt key accelerator. The font and wrap length of the message and the detail message are taken from the Tk option database and can be overridden by the application. The dialogs also follow the keyboard conventions of the Tk message box: the default ring follows the keyboard focus, the Return key activates the focused button, and the Dialog OK and Cancel buttons gained Alt key accelerators. Several bugs were also fixed.

  • gh-151814: Fix unbounded memory growth in io.TextIOWrapper when repeatedly writing an empty string.

  • gh-75666: Fix a reference leak in tkinter: the Tcl commands created for event callbacks are now deleted when a binding is replaced or unbound.

  • gh-151770: 修复 datetime.datetime.fromisoformat() 对与 24:00 相组合的超范围月份引发 AssertionError 而非 ValueError 的问题。

  • gh-151776: Add curses functions and window methods that report state which could previously only be set: the window methods is_cleared(), is_idcok(), is_idlok(), is_immedok(), is_keypad(), is_leaveok(), is_nodelay(), is_notimeout(), is_pad(), is_scrollok(), is_subwin(), is_syncok(), getdelay(), getparent() and getscrreg(), and the functions curses.is_cbreak(), curses.is_echo(), curses.is_nl() and curses.is_raw(). They are only available when built against an ncurses with NCURSES_EXT_FUNCS.

  • gh-151774: Add the curses functions curses.alloc_pair(), curses.find_pair(), curses.free_pair() and curses.reset_color_pairs() for dynamic color-pair management. They are only available when Python is built against a wide-character version of the underlying curses library with extended-color support.

  • gh-151757: The curses character-cell window methods now accept a full character cell -- a spacing character optionally followed by combining characters -- in addition to a single integer or byte character. Add the wide-character read methods curses.window.get_wstr() and curses.window.in_wstr(), and the functions curses.erasewchar(), curses.killwchar() and curses.wunctrl(). On a narrow (non-ncursesw) build the character cell holds a single character without combining marks, representable as one byte in the window's encoding, and curses.window.in_wstr() returns its decoded text.

  • gh-151744: Add curses.nofilter(), which undoes the effect of curses.filter().

  • gh-90092: Add support for multiple terminals to the curses module: the new functions curses.newterm(), curses.set_term() and curses.new_prescr(), the corresponding screen object, and the curses.window.use() method.

  • gh-151675: Add the sync() and pendingsync() methods of tkinter.Text, wrapping the Tk sync and pendingsync subcommands.

  • gh-151674: Add the edit_canundo() and edit_canredo() methods of tkinter.Text, wrapping the Tk edit canundo and edit canredo subcommands.

  • gh-151695: 修复 curses 模块中的一个释放后使用问题。 被 curses.unctrl()curses.ungetch() 用来编码非 ASCII 字符的初始屏幕的编码格式现在将作为私有副本保留而不是指向窗口对象的可以被释放的借入指针。

  • gh-151596: Add missing size positional argument to the pure-Python implementation of io.TextIOBase.readline().

  • gh-151640: Fix a data race in io.BytesIO in free-threaded builds when whole-buffer reads or peeks, or getvalue(), share the internal buffer with concurrent writes.

  • gh-151615: Fix asyncio servers repeatedly logging and rescheduling on a single event loop iteration when accept() fails with a resource errors.

  • gh-151613: Fix another way the Tachyon profiler frame cache could produce impossible mixed stack traces when _PyInterpreterFrame addresses are reused, by validating cached frame anchors with a sequence counter.

  • gh-148660: Fix a crash in collections.OrderedDict.copy() when a key's __eq__ or a subclass method mutates the dict during the copy. Now raises RuntimeError instead, as iteration does.

  • gh-151497: Opening a tarfile archive no longer attempts to pre-allocate a huge buffer when a crafted or truncated member claims an oversized extended header (a GNU long name/link or a pax header). The extended header is now read in bounded chunks, so its size field can no longer trigger memory exhaustion.

  • gh-151485: Fix command quoting in subprocess.CalledProcessError. Contributed by Benjy Wiener.

  • gh-151436: Fix skewed stack traces in the Tachyon profiler when caching is enabled and when generators and coroutines are profiled, by updating tstate->last_profiled_frame at every frame-removal site. The issue resulted in total erasure of some callers. Patch by Maurycy Pawłowski-Wieroński.

  • gh-151426: 修复了在 Tachyon 性能分析器中缓存帧时出现无法处理的栈追踪(调用方与被调用方交叉调用、孤立项及错误的行等)问题,具体做法是在缓存未命中时遍历帧链之前先对栈块进行快照。 由 Maurycy Pawłowski-Wieroński 编写补丁。

  • gh-151403: Fixed a crash in subprocess.Popen (and _posixsubprocess.fork_exec) when an argv item's __fspath__() concurrently mutates the args sequence being converted.

  • gh-151390: Colorize match in the REPL when followed by a unary + or - operator. Patch by Bartosz Sławecki.

  • gh-151128: Cross-language keyword suggestions are now shown for SyntaxError messages. For example, switch x: suggests match, delete x suggests del, function f(): suggests def. Contributed by Zang Langyan.

  • gh-151126: 修复 ctypes.get_errno() 中在取消设置分配失败时的 MemoryError 时发生崩溃的问题。

  • gh-151416: Fix a crash in os.spawnv() and os.spawnve() when an argv item's __fspath__() method mutates the argv list during argument conversion. os.spawnv() argument conversion errors other than TypeError, such as the ValueError for an embedded null, are no longer replaced with a generic TypeError.

  • gh-151337: 在 Windows 上避免 tkinter.c 中可能的内存泄漏问题。

  • gh-150285: pydoc now uses all available space (80 columns) for formatting reprs of module and class data, but ensure that they do not overflow.

  • gh-151126: 修复当 os._path_splitroot() 中的 MemoryError 未正确设置时的崩溃问题。

  • gh-149671: Restore compatibility with setuptools -nspkg.pth files in the site module. Inject sitedir variable in the frame which executes pth code. Patch by Victor Stinner.

  • gh-119710: Fix asyncio subprocess wait() hanging when the process has exited but one of its pipes is kept open by an inherited child process (so the pipe never reaches EOF). wait() now returns as soon as the process exits, regardless of the pipes' state.

  • gh-150994: Make type annotations in the private _colorize module resolvable.

  • gh-151295: 修复在 bytes.join()bytearray.join() 中当某个条目的 __buffer__() 并发地修改被合并的序列时可能发生的崩溃问题(释放后使用)。 修改操作现在将导致报告 RuntimeError

  • gh-109940: 修正 Windows 下在 cmd.exevenv 的激活以遵循 VIRTUAL_ENV_DISABLE_PROMPT

  • gh-151179: Fix a pidfd leak in _PidfdChildWatcher on Linux: the watcher no longer leaks the process file descriptor when waitpid() fails with an error other than ChildProcessError.

  • gh-80384: weakref.ref() and weakref.proxy() now raise TypeError if the callback argument is not callable or None.

  • gh-150771: Fix email messages created with shift_jis or euc-jp charsets. set_content() now stores the payload using the output charset (iso-2022-jp) so printing the message no longer raises UnicodeEncodeError.

  • gh-150285: pydoc now wraps long single-line summary in text output.

  • gh-151039: 修复当静态 datetime 类型生存期超过 _datetime 模块时的崩溃问题。

  • gh-151042: Fixed venv exporting mixed path styles to PATH on Windows inside fish (via Cygwin, MinGW or MSYS2)

  • gh-151021: 修正 mmap.mmap.find()rfind() 以在附带超出映射末尾的开始位置搜索空的子字符串时返回 -1

  • gh-151022: Fix _remote_debugging stack traces for code objects with large line tables.

  • gh-150994: Make the type annotations in the private _colorize module resolvable.

  • gh-62825: 编码格式 "KS_C_5601-1987", "KS X 1001" 等现在是 "CP949" 的别名而不是 "EUC-KR" 的。

  • gh-150913: 修正 sqlite3.Blob 的切片赋值以分别针对类型和大小不匹配引发 TypeErrorIndexError,即使当目标切片为空时也是如此。

  • gh-140006: The venv activate.fish script now calls fish builtins through builtin so a user function that shadows ./source, echo, printf, set_color, or functions can no longer hijack the virtual environment prompt or break exit-status reporting.

  • gh-143008: 修复当重新初始化 io.TextIOWrapper 对象时的竞争条件问题。

  • gh-150889: Speed up unicodedata.normalize() for the NFC and NFKC forms of non-ASCII text up to a factor 2.

  • gh-150898: Unconditionally assume ssl.SSLContext.keylog_filename exists.

  • gh-150886: Remove the private, undocumented function importlib._bootstrap._object_name(). It had no caller after load_module() and its deprecation warnings were removed from importlib.

  • gh-150583: Correctly set the default compression level in compression.zstd when passing a digested dictionary during compression.

  • gh-150662: 修复 profiling.sampling--gecko 收集器将所有采样保留在内存中的问题。 它现在会将采样和标记数据写入临时文件再读取它们,在结束时最终构建输出文件。 由 Pablo Galindo 和 Maurycy Pawłowski-Wieroński 编写补丁。

  • gh-150818: Speed up logging.getLogger() with a lock-free fast path that returns an already-registered logger without acquiring the logging lock. Patch by Bernát Gábor.

  • gh-150817: Speed up the |, & and ^ operations on enum.Flag members. Patch by Bernát Gábor.

  • gh-150750: 修复自由线程模式下在 collections.deque.index() 中的竞争条件问题。

  • gh-150717: Avoid an unnecessary per-call memory allocation when matching re patterns that have no capturing groups. Patch by Bernát Gábor.

  • gh-150685: 将捆绑的 pip 更新至 26.1.2

  • gh-150641: Fix bug where typing.evaluate_forward_ref() with the STRING format could leak internal names used by the annotation machinery.

  • gh-150942: Speed up re.findall(), re.sub() and re.subn() by appending result items to the output list without an extra reference-count round-trip (using the internal reference-stealing list append helper).

  • gh-150942: Speed up json.loads() decoding of arrays and objects by storing parsed values into the result list/dict without an extra reference-count round-trip (using the internal reference-stealing append/insert helpers).

  • gh-150478: Add show_jit option to dis.dis to show JIT entry points in the bytecode. This is useful for visualizing where JIT traces are entered from the interpreter.

  • gh-148932: 修正 Windows 上虚拟环境中的 profiling.sampling 以根据虚拟环境 shim 解析实际的 Python PID。

  • gh-150534: Added trigonometric functions that work in units of half turns, rather than radians. The new functions math.acospi(), math.asinpi(), math.atanpi(), and math.atan2pi() return half-turn angles. The new functions math.cospi(), math.sinpi(), and math.tanpi() take half-turn angle arguments. These functions are recommended by IEEE 754-2019 and standardized in C23.

  • gh-150228: The new site.StartupState class lets callers batch-process PEP 829 startup configuration files across multiple site directories before any startup code runs, with public addsitedir(), addusersitepackages(), addsitepackages(), and process() methods. The signature of site.addsitedir() is unchanged from Python 3.14. The defer_processing_start_files argument and the process_startup_files() function added earlier in the 3.15 cycle have been removed; use site.StartupState instead.

  • gh-150479: email.utils.formataddr() now raises ValueError when the name or address contains a carriage return or line feed, matching email.headerregistry.Address. This check can be disabled by passing strict=False.

  • gh-150406: 修复在 socket 初始化期间当系统在没有重进入 gethostbyname 的平台上耗尽内存时可能发生的崩溃问题。

  • gh-150372: readline: 修复在 tab 补全期间由于模块初始化期间发生内存耗尽错误导致的潜在崩溃问题。

  • gh-132372: Speed up logging.config.fileConfig() and logging.config.dictConfig() when handling many existing loggers.

  • gh-150157: Fix a crash in free-threaded builds that occurs when pickling by name objects without a __module__ attribute while sys.modules is concurrently being modified.

  • gh-150175: Fix race condition in unittest.mock.ThreadingMock where concurrent calls could lose increments to call_count and other attributes due to a missing lock in _increment_mock_call.

  • gh-84353: Preserve non-UTF-8 encoded filenames when appending to a zipfile.ZipFile. Previously, non-ASCII names stored in a legacy encoding (without the UTF-8 flag bit set) could be corrupted when the central directory was rewritten: they were decoded as cp437 and then re-stored as UTF-8.

  • gh-150077: Fix tarfile.TarFile.zstopen to close the underlying zstd file object when opening the tar archive is interrupted by a BaseException subclass such as KeyboardInterrupt.

  • gh-149980: Fix tarfile so that GNU long-name directory entries have all trailing slashes stripped from their names, matching the behavior for short-name entries. Previously, only a single trailing slash was removed.

  • gh-127949: Remove the deprecated asyncio event loop policy system. Patch by Kumar Aditya.

  • gh-149816: 修复 ssl.SSLContext.sni_callback 中的竞争条件问题

  • gh-149189: 撤销对 pprint 默认设置的更改。 由 Hugo van Kemenade 编写补丁。

  • gh-79413: Update dataclasses.make_dataclass() to add a qualname parameter. The qualname parameter will be used to set the __qualname__ of the created dataclass.

  • gh-149816: Fix a potential use after free condition in pickle.dumps() in free-threaded mode when serializing lists.

  • gh-149995: 更新 typing 中的多个文档字符串。

  • gh-88726: The email package now uses standard MIME charset names "gb2312" and "big5" instead of non-standard names "eucgb2312_cn" and "big5_tw".

  • gh-53144: 现在 email 包支持所有 Python 编解码器的别名并将为所有 IANA 注册字符集使用 MIME/IANA 名称。

  • gh-149571: Fix the C implementation of xml.etree.ElementTree.Element.itertext(): it no longer emits text for comments and processing instructions.

  • gh-146406: Add cross-language hints for .clear() on tuple, frozenset, and frozendict, suggesting the mutable counterpart. Follow-up to gh-146406.

  • gh-149921: 修复 _interpchannels_interpqueues 扩展模块错误路径中的引用泄漏问题。

  • gh-149891: 增加对 在 IANA 中正式注册的 更多编码格式别名的支持。

  • gh-142349: 将 lazy 添加至 help() 的支持主题列表中。

  • gh-149819: 修复 site.addsitedir().pth 文件不再在 Python 子进程中处理的回归问题。 出现此问题是因为 site.main() 使得 known_paths 带有继承自父进程的条目,导致 addsitedir 跳过了 .pth 的处理。

  • gh-62259: Add support for multiple multi-byte encodings in the XML parser: "cp932", "cp949", "cp950", "Big5","EUC-JP", "GB2312", "GBK", "johab", and "Shift_JIS". Add partial support (only BMP characters) for multi-byte encodings "Big5-HKSCS", "EUC_JIS-2004", "EUC_JISX0213", "Shift_JIS-2004", "Shift_JISX0213", "utf-8-sig" and non-standard aliases like "UTF8" (without hyphen). The parser now raises ValueError for known unsupported multi-byte encodings such us "ISO-2022-JP" or "raw-unicode-escape" instead of failing later, when encounter non-ASCII data.

  • gh-149816: 修复自由线程模式下在 _random.Random.__init__ 方法中的竞争条件问题。

  • gh-149801: 为对应的编解码器增加具有前导零加数字形式的 IANA 注册名和别名(如 IBM00858, CP00858, IBM01140, CP01140)。

  • gh-149473: 调用 os.environ.clear() 现在会发出 os._clearenv 审计事件。 由 Victor Stinner 编写补丁。

  • gh-149720: Remove support for undotted ext in mimetypes.MimeTypes.add_type().

  • gh-149718:在 Tachyon 中凝聚连续的相同栈帧,以便聚合采集器(pstats、collapsed、flamegraph、gecko)接收一个采集项。 采样率将获得 3x 提升,错误率和漏检率将下降 70%。 由 Maurycy Pawłowskii-Wieroński 编写补丁。

  • gh-149701: 修复在禁用哈希时来自 Lib/venv/bin/activate 不正确的返回码

  • gh-149504: 修正 site.addsitedir() 以允许来自启动文件内部的重进入调用。 在此之前,包含调用了 site.addsitedir()import 行的 .pth 文件(或执行相同操作的 .start 入口点)可能会在站点初始化期间崩溃并引发 RuntimeError: dictionary changed size during iteration,从而破坏 uv run --with 等工具的执行。

  • gh-149584: 通过避免重复远端页面缓存扫描、批处理预测的远端读取,以及重用缓存的性能分析器结果对象修复 Tachyon 性能分析器在检查远端进程时过大的开销。 由 Pablo Galindo 和 Maurycy Pawłowski-Wieroński 编写补丁。

  • gh-149609: Raise DeprecationWarning on using abc.abstractclassmethod, abc.abstractstaticmethod, and abc.abstractproperty, schedule its removal for Python 3.21.

  • gh-149634: Remove deprecated and unused tarfile.TarInfo.tarfile attribute.

  • gh-139489: 将 xml.is_valid_text() 添加至 xml.__all__

  • gh-149614: 修复一个可能破坏对 argparse.ArgumentParser 实例进行深拷贝的能力的回归问题。

  • gh-149600: Remove deprecated asyncio.iscoroutinefunction() function.

  • gh-149598: Remove support of deprecated strm argument for logging handlers.

  • gh-149595: Remove the sys._enablelegacywindowsfsencoding() function which has been deprecated since Python 3.13.

  • gh-149567: Remove the shutil.ExecError exception which has been deprecated since Python 3.14.

  • gh-112821: 在 REPL 中,自动补全可能会运行描述器的 getter 中的任意代码。 如果 getter 引发了异常,自动补全将无法为整个对象提供任何选项。 现在自动补全的工作方式将能符合预期。

  • gh-149436: Improve performance of inspect.getattr_static().

  • gh-149534: Fix merging of collections.defaultdict and frozendict.

  • gh-149537: Remove kw parameters from python version of functools.reduce() function.

  • gh-80480: Remove deprecated 'u' type code (wchar_t) for the array module. Use 'w' format code instead (Py_UCS4, always 4 bytes).

  • gh-149530: Removed symtable.Class.get_methods() which has been deprecated since 3.14.

  • gh-149528: Remove annotationlib.ForwardRef._evaludate deprecated method.

  • gh-149388: 使 asyncio.windows_utils.PipeHandle 关闭幂等。

  • gh-149499: Removed the sysconfig.expand_makefile_vars() function which has been deprecated since Python 3.14. Use the vars argument of sysconfig.get_paths() instead.

  • gh-149489: Fix ElementTree serialization to HTML. The content of comments, processing instructions and elements "xmp", "iframe", "noembed", "noframes", and "plaintext" is no longer escaped. The "plaintext" element no longer have the closing tag. Add support of empty attributes (with value None).

  • gh-149319: The asyncio REPL now ignores PYTHONSTARTUP and PYTHON_BASIC_REPL when -E or -I is used. Patch by Jonathan Dung.

  • gh-149464: Add os.pidfd_getfd() for duplicating a file descriptor from another process via a pidfd. Available on Linux 5.6+. Patch by Maurycy Pawłowski-Wieroński.

  • gh-149056: Fix json.load() not forwarding the array_hook argument to json.loads(). Patch by Thomas Kowalski.

  • gh-149046: io: Fix io.StringIO serialization: no longer call str(obj) on str subclasses. Patch by Thomas Kowalski.

  • gh-118158: Ensure py_compile CLI error messages end with a newline. Contributed by Xiao Yuan.

  • gh-148954: 修复 xmlrpc.client.dumps() 中的 XML 注入漏洞即 methodname 未在插值至 XML 数据体之前被转义。

  • gh-148441: xml.parsers.expat: 防止 CharacterDataHandler() 中当字符数据大小超出解析器的 缓冲区大小 时发生崩溃。

  • gh-119670: Add keyword-only parameter force to shlex.quote() to force quoting a string, even if it is already safe for a shell without being quoted.

  • gh-92455: Fix mimetypes to prefer case-sensitive matches for suffix mappings and MIME type suffixes before falling back to case-insensitive matches. Contributed by Xiao Yuan.

  • gh-147950: Bind yank-arg to M-_ in the REPL.

  • gh-146452: Fix segfault in pickle when pickling a dictionary concurrently mutated by another thread in the free-threaded build.

  • gh-47005: Fix urllib.request.AbstractHTTPHandler.do_open() to give regular headers set via add_header() priority over unredirected headers, consistent with get_header() and header_items().

  • gh-140729: Fix a pickling error in the cProfile module when profiling a script that uses multiprocessing.Process with the spawn and forkserver start methods.

  • gh-143988: Fixed crashes in socket.socket.sendmsg() and socket.socket.recvmsg_into() that could occur if buffer sequences are concurrently mutated.

  • gh-143008: Fix crash in io.TextIOWrapper when reentrant io.TextIOBase.detach() is called reentrantly from the underlying buffer.

  • gh-81881: shutil.copyfile() now raises SpecialFileError for sockets and device files.

  • gh-140924: Add locale.localize(), locale.delocalize() and platform-specific locale constants from the _locale module to locale.__all__.

  • gh-115634: Fix a deadlock in concurrent.futures.ProcessPoolExecutor when using max_tasks_per_child, present since the feature was introduced in Python 3.11. The executor stopped scheduling queued tasks after a worker process exited upon reaching its task limit. Based on a fix proposed by Tabrez Mohammed.

  • gh-140344: The classes ast.slice, ast.ExtSlice, ast.Index, ast.Suite, ast.AugLoad, ast.AugStore, and ast.Param, deprecated since Python 3.9, now issue deprecation warnings on use. They are now scheduled for removal in Python 3.21.

    The dims property of ast.Tuple objects, deprecated since Python 3.9, now issues a deprecation warning when accessed. The property is scheduled for removal in Python 3.21. Use the (non-deprecated) elts property of ast.Tuple objects instead.

    The deprecated global names are also no longer imported by from ast import *.

  • gh-139398: Add supported _sunder_ names to the dir() method of the enum module to support them in REPL autocompletion.

  • gh-139819: rlcompleter: Avoid suggesting attributes that are not accessible on instances (e.g., Enum members showing __name__). Patch by Peter (ttw225).

  • gh-79638: Disallow all access in urllib.robotparser if the robots.txt file is unreachable due to server or network errors.

  • gh-86533: The os.makedirs() function and pathlib.Path.mkdir() method now have a parent_mode parameter to specify the mode for intermediate directories when creating parent directories. This allows one to match the behavior from Python 3.6 and earlier for os.makedirs().

  • gh-51067: Add remove() and repack() to ZipFile.

  • gh-134261: zip: On reproducible builds, ZipFile uses UTC instead of the local time when writing file datetimes to avoid underflows.

  • gh-133998: Fix struct.error exception when creating a file with gzip.GzipFile or compressing data with gzip.compress() if the system time is outside the range 00:00:00 UTC, January 1, 1970 through 06:28:15 UTC, February 7, 2106, or explicitly passed mtime argument is outside the range 0 to 2**32-1.

  • gh-46927: Prevent readline from overriding the COLUMNS and LINES environment variables, as values are not updated on terminal resize.

  • gh-72902: Optimize (~x1.4 speedup) fractions.Fraction.from_decimal() and fractions.Fraction.from_float() for Decimal and float inputs, respectively. Patch by Sergey B Kirpichev.

  • gh-128110: 修复在 email 地址标头解析中当使用较新式的 email 策略时可能导致已解码文本中出现额外空格的程序缺陷。 在相邻 RFC 2047 已编码单词对之间的空格现在将被忽略,参见该规范的 6.2 小节(并与现有的非结构化标头如 Subject 的解析方式保持一致)。

  • gh-107398: Fix tarfile stream mode exception when process the file with the gzip extra field.

  • gh-121109: Fix tarfile performance issue when reading archives in streaming mode (e.g. r|*).

  • gh-120665: Fixed an issue where unittest loaders would load and instantiate unittest.TestCase-derived subclasses that are also abstract base classes, which can't be instantiated.

  • gh-115988: lzma adds constants to support the newer BCJ filters for ARM64 and RISC-V.

  • gh-105708: Accept an uppercase V prefix in IPvFuture addresses in urllib.parse.urlsplit().

  • gh-60055: Let urllib.robotparser.RobotFileParser accept a urllib.request.Request object as well as a url string when setting a robots.txt url.

  • gh-91099: imaplib.IMAP4.login() 现在会对 str 而不是 bytes 引发异常。 由 Florian Best 编写补丁。

  • gh-101267: When a worker process terminates unexpectedly, concurrent.futures.ProcessPoolExecutor now sets a separate BrokenProcessPool exception on each pending future instead of sharing a single instance among them all. Sharing one exception produced malformed tracebacks: each Future.result() call re-raised the same object, appending another copy of the traceback to it.

  • bpo-46375: Add io.BytesIO.peek() method to read without advancing position.

  • bpo-47216: Added mtime option to gzip.open(), which will be passed to the constructor of GzipFile.

  • bpo-45509: 现在会检查 Gzip 标头中损坏的 NAME, COMMENT 和 HCRC 字段。

  • bpo-40469: TimedRotatingFileHandler now uses the creation time instead of the last modification time of an existing log file as the basis for the first rotation after handler creation, if supported by the OS and file system. This allows it to be used in short-running programs that start and end before the rotation interval expires.

  • bpo-42861: Add next_network() and next_network(). Patch by Faisal Mahmood.

IDLE

  • gh-82183: When the shell is busy running code, using "Run... Customized" with "Restart shell" unchecked now reports that the shell is executing instead of restarting it anyway.

  • gh-83653: Blanking an integer entry in IDLE's Settings dialog, such as "Auto squeeze min lines", no longer saves an empty string as an invalid configuration value.

  • gh-65339: Saving the IDLE Shell or an Output window now defaults to a .txt extension and lists text files before Python files, since their content is not Python source.

  • gh-80504: The "In files:" field of IDLE's Find in Files dialog now always contains a full directory path, even for an unsaved editor or the Shell. This shows in the grep output which directory was searched.

  • gh-134300: Do not add the idlelib directory to the path of the IDLE user process. User code run in IDLE can no longer import idlelib submodules as top-level modules, such as import help.

  • gh-89360: Fix a rare crash in the IDLE editor when the completion window is closed: deleting a key binding for a sequence that is not bound to the virtual event is now ignored instead of raising a ValueError.

  • gh-71956: Fix Replace All in the IDLE editor's Replace dialog when the search direction is "Up" and "Wrap around" is off: it now replaces all matches above the current position instead of only the first one.

  • gh-152728: Move functions run.fix_scaling, editor.fixwordbreaks (as fix_word_breaks) and pyshell.fix_x11_paste to idlelib.util.

  • gh-66331: Set the WM_CLASS window property of IDLE's windows to Idle on X11, so that window managers group and label them correctly instead of using the default Toplevel.

  • gh-85320: IDLE now reads and writes its configuration files and the breakpoints file using UTF-8 instead of the locale encoding. This keeps non-ASCII data (such as non-ASCII paths) from being corrupted and makes the files portable between environments.

  • bpo-6699: 如果文件在保存时会被覆盖将警告用户。

文档

  • gh-86726: Greatly expand the tkinter documentation to cover the full public API of the package and its submodules. The descriptions are oriented towards Python rather than Tcl/Tk, with corrected return types and versionadded/versionchanged information.

  • gh-150319: 泛型内置对象和标准库类型文档现在将说明其类型形参的含义。

  • gh-109503: Fix documentation for shutil.move() on usage of os.rename() since nonatomic move might be used even if the files are on the same filesystem. Patch by Fang Li

核心与内置函数

  • gh-153932: Fix thread safety issue in the __reduce__ method of enumerate.

  • gh-153568: Speed up the parser by caching repeated identifiers during a parse.

  • gh-153568: Speed up the parser by letting memoization lookups that cannot match return immediately.

  • gh-153298: Fixes a data race in types.GenericAlias __parameters__ initialization on free-threading builds.

  • gh-153205: Fix a potential SystemError during vector calls when memory allocation fails. A MemoryError is now raised instead.

  • gh-153171: Improve syntax error messages for misplaced not after an operator in contexts where a generic "invalid syntax" error was previously reported, such as 1 << 2 + not x and 1 * + not x.

  • gh-153236: Propagate exceptions raised while importing lazy submodules instead of reporting them as missing attributes.

  • gh-102960: Frame objects now support weak references. Patch by Łukasz Langa.

  • gh-152682: Fix NULL pointer dereference in compile() when a reserved name (e.g. __classdict__) is used as a type parameter name and memory allocation fails while formatting the error message.

  • gh-152635: Fix a crash caused when running out of memory creating a _interpchannels channel. Now a MemoryError is correctly raised.

  • gh-152405: Do not expose the internal mapping of types.MappingProxyType when performing rich-compare operations with non-stdlib types. Previously, it was possible to mutate the internal mapping of a proxy there. Now we pass not the original dict instance, but its copy, when dealing with custom types.

  • gh-152492: collections.OrderedDict update method can now accept frozendict as an argument.

  • gh-152375: Fix undefined behaviour when a sys.monitoring callback raised an exception while the program was following a branch or loop.

  • gh-152192: Fix a truncated oparg being passed to JIT trace initialization for a JUMP_BACKWARD with an EXTENDED_ARG.

  • gh-152235: Defer GC tracking of set.intersection(), set.difference(), set.symmetric_difference(), set.union() and set.__sub__. Patch by Donghee Na.

  • gh-152235: Defer GC tracking of a set or frozenset to the end of its construction from iterable. Patch by Donghee Na.

  • gh-152228: Fix an assertion failure when python is built in a debug mode that happened in str.replace() under a limited memory situation.

  • gh-151722: frozendict.fromkeys() now only tracks the frozendict in the garbage collector once the dictionary is fully initialized. Patch by Donghee Na and Victor Stinner.

  • gh-151763: Fixes possible crash on types.CodeType deallocation.

  • gh-152020: On the free-threaded build, asyncio.all_tasks() no longer loses eager-started tasks when called from a thread other than the one running the event loop.

  • gh-151763: Fix a potential crash in compile(), exec(), eval() and ast.parse() when an allocation fails: the parser or compiler could return without setting an exception.

  • gh-151912: Fixed a crash in type() when selecting a metaclass whose tp_new slot is NULL. Such metaclasses are now rejected with TypeError instead of causing a NULL pointer dereference.

  • gh-151905: 修复 PyFrame_GetBack() 中的 OOM 错误处理以传播异常而不是将其设为 None。

  • gh-151907: Avoid creating list objects in comprehensions when the comprehension is not used as a value.

  • gh-151773: 修复了 contextvars.ContextVar.set() 中在内存分配失败时的崩溃问题。

  • gh-151665: inspect.signature() now works on the lazy evaluators of type aliases and type parameters instead of raising ValueError.

  • gh-151672: Fix an inconsistency where calling __lazy_import__ with a string fromlist would return a types.LazyImportType that resolves to the named member, rather than the module being imported.

  • gh-151722: Defer GC tracking of frozendict to end of construction. Patch by Donghee Na.

  • gh-151619: Fix an issue where using non-module global or builtin namespaces (such as dictionaries passed to exec()) could cause cached global loads to produce unresolved lazy imports.

  • gh-151646: Fix a data race in free-threading builds between gc.get_stats() and a concurrent garbage collection cycle. Access to the per-generation statistics is now serialized with a mutex so the reader observes a consistent snapshot.

  • gh-151126: Fix a crash when sharing memoryview objects between interpreters fails due to running out of memory. It now raises a proper MemoryError.

  • gh-151644: Fix a data race in sys.setdlopenflags() and sys.getdlopenflags() when called concurrently in the free-threaded build. The underlying _PyImport_GetDLOpenFlags and _PyImport_SetDLOpenFlags functions now use atomic load/store operations.

  • gh-151126: Avoid possible crash in _winapi.c where a device has no memory left. Now it properly raises a MemoryError. Patch by Ivy Xu.

  • gh-151126: Avoid possible crash in getpath.c where a device has no memory left. Now it properly raises a MemoryError. Patch by Ivy Xu.

  • gh-151546: Fix the stack limit check if Python is linked to musl (ex: Alpine Linux). Use the stack size set by the linker to compute the stack limits. Patch by Victor Stinner.

  • gh-151510: Fix a crash in __lazy_import__() when called without an explicit globals argument and without a current Python frame.

  • gh-151461: Fix direct execution of files with invalid source encodings to report the underlying codec lookup or decoding error instead of the generic SyntaxError: encoding problem message. Patch by Bartosz Sławecki.

  • gh-151218: PyConfig_Set() and sys.set_int_max_str_digits() now replace sys.flags (create a new object), instead of modifying sys.flags in-place. Patch by Victor Stinner.

  • gh-151297: Fix an invalid pointer dereference that could occur when calling PyObject_Realloc() with a NULL pointer in free-threaded builds or with PYTHONMALLOC set to mimalloc.

  • gh-151253: If import encodings (first import) fails at Python startup, dump the Python path configuration to help users debugging their configuration. Patch by Victor Stinner.

  • gh-151238: Fix a crash when compiling a concatenated f-string or t-string if an error occurs when processing one of it's parts.

  • gh-151112: Fix a crash in the compiler that could occur when running out of memory.

  • gh-151126: Fix a crash, when there's no memory left on a device, which happened in: code compilation, _interpchannels module, _winapi.CreateProcess() function.

    Now these places raise proper MemoryError errors.

  • gh-150902: Apply an existing optimization of PyCriticalSection (single mutex) to PyCriticalSection2: avoid acquiring the same locks that the current CS has already acquired.

  • gh-151065: Fix memory leak when using the mimalloc memory allocator.

  • gh-151029: On Linux, fix sys.remote_exec() unable to find remote writable memory when libpython replaced on disk.

  • gh-150942: Speed up frame local variable item collection by appending result pairs to the output list without an extra reference-count round-trip (using the internal reference-stealing list append helper). Patch by Omkar Kabde.

  • gh-150988: Fix a reference leak in OSError when attributes are set before super().__init__().

  • gh-146495: Improve SyntaxError message for && and || operators, suggesting and/& and or/| respectively.

  • gh-148874: Ignore interrupts immediately after calling the __enter__ method of a context menager in a with statement. This ensures that the __exit__ method is always called in a with statement.

  • gh-150459: Fix SyntaxError error message for from x lazy import y. Raise SyntaxWarning on from . lazy import x (with whitespace between the dots and a module named lazy).

  • gh-150858: Fix a data race while changing __qualname__ of a type concurrently on free-threaded builds.

  • gh-150723: 修复 macOS 上的 perf jitdump 时间戳问题。 事件时间戳将使用 CLOCK_MONOTONIC,但 macOS 性能分析器则会使用 mach_absolute_time() 给采样打时间戳。 此种错误匹配将阻止 JIT 代码映射与采样保持对应,使得 Python 帧无法被解析。frame could be resolved.

  • gh-150723: Fix malformed perf jitdump thread ids on macOS. The thread_id field of the JR_CODE_LOAD record was written as a 64-bit value instead of the 32-bit value required by the jitdump format, which shifted every following field and prevented profilers from resolving Python frames.

  • gh-150700: Fix a SystemError when compiling a class-scope comprehension containing a lambda that references __class__, __classdict__, or __conditional_annotations__. Patch by Bartosz Sławecki.

  • gh-150633: Fix the frozen importer accepting module names with embedded null bytes, which caused it to bypass the sys.modules cache and create duplicate module objects.

  • gh-144774: Fix data race in BaseException when an exception is copied while being mutated.

  • gh-150411: Fix a data race in the free-threaded build when gc.get_count() reads the young generation allocation count while another thread updates it.

  • gh-150374: Fix double release of the import lock on lazy import reification errors.

  • gh-148613: Fix a data race in the free-threaded build between gc.set_threshold() and garbage collection scheduling during object allocation.

  • gh-149156: Fix an intermittent crash after os.fork() when perf trampoline profiling is enabled and the child returns through trampoline frames inherited from the parent process.

  • gh-149449: Fix a use-after-free crash when the unicodedata module was removed from sys.modules and garbage-collected between calls that decode \N{...} escapes or use the namereplace codec error handler.

  • gh-150207: Fix a crash when a memory allocation fails during tokenizer initialization. A proper MemoryError is now raised instead.

  • gh-150107: asyncio: sendfile() and sock_sendfile() event loop methods now call file.seek(offset) if file has a seek() method, even if offset is 0 (default value).

  • gh-150208: Avoid double-quoting string values from pyconfig.h in sysconfigdata variables.

  • gh-150146: Fix a crash on a complex type variable substitution.

    from typing import TypeVar; memoryview[TypeVar("")][*typing.Mapping[..., ...]] used to fail due to missing NULL check on _unpack_args C function call.

  • gh-148587: sys.lazy_modules is now a set instead of a dict as initially spelled out in PEP 810.

  • gh-150027: Improve performance of frozenset objects by avoiding copies during construction.

  • gh-150042: Fix refleak in queue.SimpleQueue.put if memory allocation fails.

  • gh-149590: Fix crash when faulthandler is imported more than once.

  • gh-138325: Speed up converting a list to a tuple in the tuple(genexpr) fast path and in starred tuple displays (e.g. (*a, *b)) by stealing the list's items into the tuple instead of copying them.

  • gh-149816: Fix a race condition in _PyBytes_FromList in free-threading mode.

  • gh-149816: Fix a race condition in memoryview with free-threading.

  • gh-149807: Fix hash(frozendict): compute the hash of each (key, value) pair correctly. Patch by Victor Stinner.

  • gh-149805: Fix a SystemError when compiling a compiling __classdict__ class annotation. Found by OSS-Fuzz in #512907042.

  • gh-149738: sqlite3: Disallow removing row_factory and text_factory attributes of a connection to prevent a crash on a query.

  • gh-139808: Add branch protections for AArch64 (BTI/PAC) in assembly code used by -X perf_jit (Linux perf profiler integration).

  • gh-127727: Warn when running a virtual environment created for a different minor Python version than the current interpreter, and suggest using python -m venv --upgrade.

  • gh-148871: The empty tuple () is now loaded via LOAD_COMMON_CONSTANT instead of LOAD_CONST, removing it from per-code-object co_consts tuples.

  • gh-149689: Fix missing error propagation in parser action helpers when memory allocation fails. Patch by Thomas Kowalski.

  • gh-149676: 修复 frozendict | frozendict 的哈希问题。

  • gh-148829: sentinel objects now support a repr= argument and their __module__ attribute is writable.

  • gh-149642:在 PYTHON_LAZY_IMPORTS=all 的情况下允许在函数中的 exec() 调用内部执行导入。

  • gh-144957: 修复由模块级 __getattr__ 提供的模块属性的惰性 from 导入。imports of module attributes provided by module-level.

  • gh-149459: 修复在插入合成 NULL 栈条目后对专门的 LOAD_SPECIAL 守卫项执行去优化时 JIT 优化器中的崩溃问题。

  • gh-149321: Do not support none as a lazy imports mode.

  • gh-149162: Fix a potential deadlock in PyUnicode_InternFromString() and other interning functions in the free-threaded build when called from C++ static local initializers.

  • gh-148825: Fix build error if specialization is disabled.

  • gh-148450: Fix abc.register() so it invalidates type version tags for registered classes.

  • gh-75723: Avoid re-executing .pth files when site.addsitedir() is called for a known directory.

  • gh-145857: The DELETE_GLOBAL opcode is now replaced with PUSH_NULL; STORE_GLOBAL.

  • gh-145855: The DELETE_ATTR opcode is now replaced with PUSH_NULL; STORE_ATTR.

  • gh-145854: The DELETE_NAME opcode is now replaced with PUSH_NULL; STORE_NAME.

  • bpo-38131: Produce more meaningful messages when compiling AST objects with wrong field values. Patch by Batuhan Taskaya.

C API

构建

  • gh-154136: Fix building the math module on FreeBSD. Define _ISOC23_SOURCE to make the C23 library declarations (such as sinpi() in math.h) visible.

  • gh-154055: The curses and curses.panel modules can now be built against a curses library that lacks the X/Open attr_t and soft-label attribute functions, scr_set() or resizeterm() -- such as the native SVr4 curses of illumos and Solaris. These functions are probed and used only when present.

  • gh-136687: Add the --with-curses option to configure to select the curses backend (ncursesw, ncurses or the system's native curses) or, as --without-curses, to exclude the curses and curses.panel modules from the build.

  • gh-126877: Fix the configure check for Tcl/Tk which could wrongly succeed with optimizing compilers when the libraries are missing.

  • gh-153438: Update Windows build and installer tooling and documentation to use the current download URL for nuget.exe.

  • gh-152870: Fix a compilation error in the decimal C extension (_decimal) when it is built with EXTRA_FUNCTIONALITY. Context.apply() called the internal _apply helper using its pre-Argument-Clinic signature; the call is now made through the generated _impl function.

  • gh-152769: Enable the perf profiler trampoline on Alpine Linux with the musl C library on x86_64 and aarch64. The trampoline is architecture-specific and does not depend on the C library, so the same assembly trampoline used for glibc is reused for musl.

  • gh-152502: The curses module now detects its optional functions with configure capability probes instead of assuming ncurses, so it builds against narrow (non-wide) ncurses and other curses implementations such as NetBSD curses, exposing exactly the functions they provide.

  • gh-152240: Fix C stack unwinding tests on Linux LoongArch builds by teaching the manual frame pointer unwinder to recognize the LoongArch frame layout.

  • gh-151163: Updated Android build to include SQLite version 3.53.2.

  • gh-115119: Fix the detection of libmpdec header when no .pc files are available.

  • gh-148294: Corrected the use of AC_PATH_TOOL in configure.ac to allow a C++ compiler to be found on PATH.

  • gh-131372: Add a --with-build-details-suffix configure flag to allow Linux distributions that co-install multiple versions of Python in the same tree to avoid build-details.json clashes.

  • gh-148260: On Linux when Python is linked to the musl C library, use a thread stack size of at least 1 MiB instead of musl default which is 128 kiB. Patch by Victor Stinner.

  • gh-148832: Fix --enable-bolt build by switching the default BOLT flag from -icf=1 to -icf=0. -icf=1 folds address-taken functions and breaks type-slot dispatch, crashing on list and tuple concatenation. Patched by Shamil Abdulaev.

  • gh-115119: Removed bundled copy of the libmpdec, use system library if it's available. Patch by Sergey B Kirpichev.

Python 3.15.0 beta 1

发布日期: 2026-05-07

安全性

  • gh-149254: 更新 Android 和 iOS 安装程序以使用 OpenSSL 3.5.6。

  • gh-149017: 将捆绑的 libexpat 更新至 2.8.0。

  • gh-148252: 修复在 32 位构建版上解码某些 .pyb 输入时 _remote_debugging 中的字符串表和样本记录边界检查问题。 由 Maurycy Pawłowski-Wieroński 编写补丁。

  • gh-90309: 在使用 http.cookies.BaseCookie.js_output() 将 cookie 嵌入到 JavaScript 时会对值执行 base64 编码以避免注入和转义。

  • gh-148808: 在将 nbytes 形参用于 asyncio.AbstractEventLoop.sock_recvfrom_into() 时会添加缓冲区边界检测。 仅对 Windows 和 asyncio.ProactorEventLoop 有意义。

  • gh-148395: 修复 lzma.LZMADecompressor, bz2.BZ2Decompressor 和内部 zlib._ZlibDecompressor 中当内存分配失败引发 MemoryError 时的悬空输入指针问题,这可能导致后续的 decompress() 调用通过旧指针读取或写入已经被释放的调用方缓冲区。

  • gh-148252: 修复在 32 位构建版上解码某些 .pyb 输入时Fixed stack depth calculation in _remote_debugging 中的栈深度计算问题。 该问题最初由 Tristan Madani (GitHub 上的 @TristanInSec) 标识并诊断。

  • gh-148178: 通过在使用之前先验证远程调试偏移表以确定内存读取量或解读远程布局对 _remote_debugging 进行加固。

  • gh-148169: webbrowser 中的一个旁路允许以 %action 为前缀的 URL 通过横线前缀安全检查。

  • gh-146581: 修正 Windows 上 shutil.unpack_archive() 中有关 ZIP 文件的漏洞,如果归档中的补丁包含 Windows 驱动器前缀则该漏洞允许在目标树之外写入文件。 现在此类无效路径将被跳过。 名称中包含 ".." 的文件(如 "foo..bar")不再会被跳过。

  • gh-137586: 修复在 macOS 上 webbrowser 中的 PATH 注入安全漏洞,即不带绝对路径地唤起 osascript。 新的 MacOS 类将直接使用 /usr/bin/open,完全消除对 osascript 的依赖。

  • gh-146333: 修复 configparser.RawConfigParser 选项解析正则表达式 (OPTCRE and OPTCRE_NV) 中的二次方级回溯问题。 精心设计有大量空格符的配置行可能导致过量的 CPU 使用。

  • gh-146211: 在 HTTPConnection.set_tunnel() 方法的隧道请求头中拒绝 CR/LF 字符。

核心与内置函数

  • gh-148940: Revert the process size based deferral of garbage collection (gh-133464). The performance issue this change resolves is also fixed by gh-142562. This approach has the problem that process size as seen by the OS (e.g. the resident size or RSS) does not immediately decrease after cyclic garbage is freed since mimalloc defers returning memory of the OS. This change applies to the free-threaded GC only.

  • gh-149243: Check for recursion limits in CALL_ALLOC_AND_ENTER_INIT opcode.

  • gh-126910: Add support for unwinding JIT frames using GNU backtrace. Patch by Diego Russo and Pablo Galindo

  • gh-149171: 允许对 typing.TypeAliasType 实例的 __module__ 属性赋值。

  • gh-149122: 修正在对传入异步生成器表达式参数的 all(), any(), tuple(), list()set() 的优化调用中发生崩溃的问题 (例如 tuple(await x for x in y))。 这些调用现在能正确地引发 TypeError 而不会发生崩溃。

  • gh-149049: 修复第 2 层中 BINARY_OP 的栈下溢问题。

  • gh-83065: Fix a deadlock that could occur when one thread is importing a submodule (for example import pkg.sub.mod) while another thread is importing one of its parent packages (for example import pkg.sub) and that parent's __init__.py itself imports the submodule. The import system now acquires module locks in hierarchical (parent-before-child) order so the two threads serialise instead of raising _DeadlockError.

  • gh-113956: 修复自由线程构建版中 sys.intern() 在内化其他线程所拥有的字符串时的数据竞争问题。 当把原始对象设为永生对象不安全时将改用当前线程所拥有的内化副本。

  • gh-148850: 修复 os.getrandom() 中内存净化器的假阳性问题。

  • gh-148820: 修复自由线程构建版中 _PyRawMutex 当从 _PySemaphore_Wait 返回 Py_PARK_INTR 时可能会让等待方在解锁线程的 _PySemaphore_Wakeup 完成之前销毁其信号,导致致命 ReleaseSemaphore 错误的竞争问题。

  • gh-148829: 增加 sentinel,实现 PEP 661。 PEP 由 Tal Einat 撰写;由 Jelle Zijlstra 提供补丁。

  • gh-146270: 修复 structmember.c 中的序列一致性程序缺陷。

  • gh-148766: 解释器帮助 (如 python --help) 现在支持彩色。 由 Hugo van Kemenade 编写补丁。

  • gh-148571: 修复在专门的操作码族继承了不兼容的已记录操作数布局时 JIT 优化器中的崩溃问题。

  • gh-148653: Forbid marshalling recursive code objects, slice and frozendict objects which cannot be correctly unmarshalled.

  • gh-142516: Forward-port the generational cycle garbage collector to the default 3.15 build, replacing the incremental collector while leaving the free-threaded collector unchanged.

  • gh-146462: Added PyTypeObject.tp_basicsize, PyTypeObject.tp_dictoffset, and PyHeapTypeObject.ht_cached_keys offsets to _Py_DebugOffsets to support version-independent read-only dict introspection tools.

  • gh-145239: Unary plus is now accepted in match literal patterns, mirroring the existing support for unary minus. Patch by Bartosz Sławecki.

  • gh-148515: Fix a bug in the JIT optimizer reading operands for uops with multiple caches.

  • gh-148390: 修正当在 cast() 中使用原生布尔格式 (?) 时 memoryview 中的未定义行为。 在之前版本中,在某些常见平台上,调用 memoryview(b).cast("?").tolist() 对于任意偶数字节值 b 会不正确地返回 [False] 而不是 [True]。 由 Bénédikt Tran 编写补丁。

  • gh-148418: 修复损坏的 TYPE_CODE marshal 流中可能出现的引用泄漏问题。

  • gh-148393: 修复 free-threaded buildPyDict_Watch() / PyDict_Unwatch() 与并发字典修改之间的数据竞争问题。

  • gh-148398: Fix a bug in the JIT optimizer where class attribute loads were not invalidated after type mutation.

  • gh-146527: Add a GCMonitor class with a get_gc_stats method to the _remote_debugging module to allow reading GC statistics from an external Python process without requiring the full RemoteUnwinder functionality. Patch by Sergey Miryanov and Pablo Galindo.

  • gh-148284: 通过在带有计算跳转的编译时设置内联的函数限制修复 Python 的解释器循环在 Clang 22 上过高的栈消耗问题。

  • gh-148037: 在自由线程构建中移除 PyCode_Addr2Line() 的关键节。

  • gh-115802: Improve JIT code generation on Linux AArch64 by reducing the indirect call to external symbols. Patch by Diego Russo.

  • gh-148189: Repaired undercount of bytes in type-specific free lists reported by sys._debugmallocstats(). For types that participate in cyclic garbage collection, it was missing two pointers used by GC.

  • gh-148222: 修复 types.GenericAlias 中当下层类型不支持 vectorcall 协议时对 vectorcall 的支持。 修复 types.GenericAliastypes.UnionType 中当发生内存错误时可能的泄漏问题。

  • gh-148208: 修复 PyObject_Print() 中的递归深度泄漏问题。

  • gh-95004: The specializing interpreter now specializes for enum.Enum improving performance and scaling in free-threading. Patch by Kumar Aditya.

  • gh-149202: Enable frame pointers by default for GCC-compatible CPython builds, including -mno-omit-leaf-frame-pointer, -marm on 32-bit ARM, and/or -mbackchain on s390x platforms when the compiler supports them, so profilers and debuggers can unwind native interpreter frames more reliably. Users can pass --without-frame-pointers to ./configure to opt out.

  • gh-148014: Accept a function name in -X presite command line option and PYTHON_PRESITE environment variable. Patch by Victor Stinner.

  • gh-147998: 修正解释器辅助调用中的内存泄漏以使在操作跨越解释器边界时清理过程可正常工作。 由 Maurycy Pawłowskii-Wieroński 编写补丁。

  • gh-146455: 修正在将常量折叠从 AST 移至 CFG 优化器之后的 O(N²) 级编译时回归问题。

  • gh-146306: Specialize float true division in the tier 2 optimizer with inplace mutation for uniquely-referenced operands.

  • gh-142186: Global sys.monitoring events can now be turned on and disabled on a per code object basis. Returning DISABLE from a callback disables the event for the entire code object (for the current tool).

  • gh-126910: Add support for unwinding JIT frames using GDB. Patch by Diego Russo and Pablo Galindo.

  • gh-146031: The unstable API _PyInterpreterState_SetEvalFrameFunc has a companion function _PyInterpreterState_SetEvalFrameAllowSpecialization to specify if specialization should be allowed. When this option is set to 1 the specializer will turn Python -> Python calls into specialized opcodes which the replacement interpreter loop can choose to respect and perform inlined dispatch.

  • gh-145278: The encodings is now partially frozen, including the aliases and utf_8 submodules.

    The linecache is now frozen.

  • gh-134584: Optimize and eliminate redundant ref-counting for MAKE_FUNCTION in the JIT.

  • gh-143886: Reorder function annotations so positional-only arguments are returned before other arguments. This fixes how functools.singledispatch() registers functions with positional-only arguments.

  • gh-98894: Restore function__entry and function__return DTrace/SystemTap probes that were broken since Python 3.11.

  • gh-116021: Support for creating instances of abstract AST nodes from the ast module is deprecated and scheduled for removal in Python 3.20. Patch by Brian Schubert.

  • gh-137814: 修复在函数上应用 __annotate__ 函数的 __qualname__ 属性问题。

  • gh-137600: ast: The constructors of AST nodes now raise a TypeError when a required argument is omitted or when a keyword argument that does not map to a field on the AST node is passed. These cases had previously raised a DeprecationWarning since Python 3.13. Patch by Brian Schubert.

  • gh-137293: 修复当在 sys.remote_exec() 中搜索 ELF 文件时的 SystemError

  • gh-135357: Add support for socket.SO_PASSRIGHTS on Linux.

  • gh-134690: Removed deprecated in PEP 626 since Python 3.12 codeobject.co_lnotab from types.CodeType.

  • gh-100239: Specialize BINARY_OP for concatenation of lists and tuples, and propagate the result type through _BINARY_OP_EXTEND in the tier 2 optimizer so that follow-up type guards can be eliminated.

  • gh-148823: Defer the import of _colorize in argparse until needed for coloring output.

  • gh-141560: Add an annotation_format parameter to inspect.getfullargspec().

  • gh-139489: Add the xml.is_valid_text() function, which allows to check whether a string can be used in the XML document.

  • gh-142389: Add backticks to stdlib argparse help to display in colour. Patch by Hugo van Kemenade.

  • gh-149377: 将捆绑的 pip 更新至 26.1.1

  • gh-142389: Add backtick markup support in argparse option help text to highlight inline code when color output is enabled. Patch by Hugo van Kemenade.

  • gh-148675: Remove F and D formats from array and memoryview. Patch by Victor Stinner.

  • gh-149342: Fix _remote_debugging binary writing so that sampling a thread whose Python frame stack is empty (for example while it is in a C call or mid-syscall) no longer raises RuntimeError("Invalid stack encoding type"), and so that BinaryWriter.total_samples after finalize() or context-manager exit includes samples flushed from the RLE buffer. Patch by Maurycy Pawłowski-Wieroński.

  • gh-149010: The inspect module CLI now reports as much information as it has available for non-source modules when --details is specified, and provides an error message rather than a traceback when --details is omitted. It also reports improved information when the given target location is not the target's defining location and when the given target is a data value rather than a class or function definition.

  • gh-146609: Use argparse for colour help timeit CLI. Patch by Hugo van Kemenade.

  • gh-142389: Add backticks for colour to regrtest and pdb's help description. Patch by Hugo van Kemenade.

  • gh-144384: Lazily import _colorize. Patch by Hugo van Kemenade.

  • gh-149321: Fix import cycles exposed by running standard library modules with -X lazy_imports=none.

  • gh-145378: Generate consistent colors for pdb commands in pdb REPL.

  • gh-149296: Add a dump subcommand to profiling.sampling that prints a single traceback-style snapshot of a running process's Python stack, including per-thread status, source line highlighting, optional bytecode opcode names, and async-aware task reconstruction. Patch by Pablo Galindo.

  • gh-143231: A module attribute has been added to warnings.WarningMessage.

  • gh-148675: ctypes: Change the _type_ of c_float_complex, c_double_complex and c_longdouble_complex from F, D and G to Zf, Zd and Zg for compatibility with numpy. Patch by Victor Stinner.

  • gh-148675: The array.typecodes type changed from str to tuple to support type codes longer than 1 character (Zf and Zd). Patch by Victor Stinner.

  • gh-149221: 为 random.binomialvariate() 捕获罕见的 math 域错误。

  • gh-149231: In tomllib, the number of parts in TOML keys is now limited.

  • gh-143231: unittest.TestCase.assertWarns() and unittest.TestCase.assertWarnsRegex() no longer swallow warnings that do not match the specified category or regex. Nested context managers are now supported.

  • gh-149214: Fix _remote_debugging misreading non-ASCII Unicode strings (Latin-1, BMP and non-BMP) from a remote process. Filenames and function names that contain non-ASCII characters are now reported correctly in stack traces, the sampling profiler, and asyncio task introspection.

  • gh-149189: pprint now uses modern defaults: indent=4 and width=88, and the default compact=False output is now formatted similar to pretty-printed json.dumps(), with opening parentheses and brackets followed by a newline and the contents indented by one level. The expand parameter, added in 3.15.0a8, has been removed; compact=False (the default) now produces the former expand=True layout. Patch by Hugo van Kemenade.

  • gh-149173: Fix inverted PYTHON_BASIC_REPL environment check in pdb._pyrepl_available.

  • gh-149117: 修复 runpy.run_module()runpy.run_path() 以上它们引发的 ImportError 上设置 name 属性。

  • gh-149148: ensurepip: 将捆绑的 pip 升级至 26.1。 此版本修复了 CVE 2026-3219 安全漏洞。 由 Victor Stinner 编写补丁。

  • gh-149009: Validate that profiling.sampling binary profiles do not contain more unique (thread, interpreter) pairs than declared in the header. Patch by Maurycy Pawłowski-Wieroński.

  • gh-148292: ssl: Update ssl.SSLSocket and ssl.SSLObject for OpenSSL 4. The classes now remember if they get a ssl.SSLEOFError. In this case, following read(), sendfile(), write(), and do_handshake() calls raise ssl.SSLEOFError without calling the underlying OpenSSL function. Thanks to that, ssl.SSLSocket behaves the same on all OpenSSL versions on EOF. Patch by Victor Stinner.

  • gh-149085: Add a max_threads keyword argument to faulthandler.dump_traceback(), faulthandler.dump_traceback_later(), faulthandler.enable(), and faulthandler.register().

  • gh-148641: pkgutil.resolve_name() gets a new optional, keyword-only argument called strict. The default is False for backward compatibility.

  • gh-148093: 修正 binascii.a2b_uu() 中越界读取一个字节的问题。 将会引发 binascii.Error,而不是超出缓冲区末尾继续读取。

  • gh-149083: dataclasses.MISSINGdataclasses.KW_ONLY 现在是 sentinel 的实例。

  • gh-148914: 修正 pickle 的 Python 实现中带内 PickleBuffer 的记忆问题。 在此之前,相同的 PickleBuffer 不会保留标识,空的可写 PickleBuffer 会记忆一个空的字节数组对象而不是 b'',因此对后续 b'' 的引用会被反 pickled 为一个空的字节数组对象。

  • gh-149026: 为 pickletools CLI 输出增加色彩。 由 Hugo van Kemenade 编写补丁。

  • gh-148991: 为 tokenize CLI 输出增加色彩。 由 Hugo van Kemenade 编写补丁。

  • gh-138907: 在 urllib.robotparser 中支持 RFC 9309

  • gh-148981: 为 ast.dump() 增加 color 形参。

  • gh-148849: Deprecate http.cookies.Morsel.js_output() and http.cookies.BaseCookie.js_output(), which will be removed in Python 3.19. Use http.cookies.Morsel.output() or http.cookies.BaseCookie.output() instead.

  • gh-146311: Add a canonical keyword-only parameter to the base16, base32, base64, base85, ascii85, and Z85 decoders in base64 and binascii. When true, encodings with non-zero padding bits (base16/32/64) or non-canonical encodings (base85/ascii85) are rejected. Single-character final groups in binascii.a2b_ascii85() and binascii.a2b_base85() are now always rejected as encoding violations, regardless of canonical; previously they were silently ignored and produced no output bytes.

  • gh-148947: 修复在 crash in @dataclasses.dataclass 设置 slots=True 的情况下当类中的函数存在空的 __class__ 单元时的崩溃问题。

  • gh-148680: 在作为字符串被求值时包含内部名称以代表已知对象的 ForwardRef 对象现在会显示已知对象的 type_repr 而不是内部的 __annotationlib_name_x__ 名称。

  • gh-124397: The threading module added tooling to support concurrent iterator access: threading.serialize_iterator, threading.synchronized_iterator(), and threading.concurrent_tee().

  • gh-148801: xml.etree.ElementTree: 修复在深度嵌套树结构上 Element.__deepcopy__ 中发生崩溃的问题。

  • gh-148735: xml.etree.ElementTree: 修复了当搜索期间元素树被并发修改时 Element.findtext 的释放后被使用问题。

  • gh-148740: 修复了 uuid 命令行界面的使用问题以支持为 uuid3 和 uuid5 提供自定义命名空间。

  • gh-148688: bz2, compression.zstd, lzma, zlib: Fix a double free on memory allocation failure. Patch by Victor Stinner.

  • gh-148675: array, struct: Add support for Zd and Zf formats for double complex and float complex. Patch by Victor Stinner.

  • gh-148651: 修复 compression.zstd.ZstdDecompressor 在传入无效选项键时的引用泄漏问题。

  • gh-148641: PEP 829 (package startup configuration files) implements a new format <name>.start parallel to <name>.pth files, to replace import lines in the latter.

  • gh-148639: 实现 PEP 800,增加 @typing.disjoint_base 装饰器。 由 Jelle Zijlstra 编写补丁。

  • gh-148615: 修正 pdb 以接受标准的 -- 选项结束分隔符。 由 haampie 报告。 由 Shrey Naithani 编写补丁。

  • gh-146553: 修复当 __wrapped__ 构成回环时 typing.get_type_hints() 中的无限循环问题。 由 Shamil Abdulaev 编写补丁。

  • gh-148599: 更新 socket 模块的 WSA 错误消息以匹配官方文档。

  • gh-148508: 当在 iOS 上运行 SSL 测试时发生间歇性定时错误的问题已被解决。

  • gh-144881: asyncio debugging tools (python -m asyncio ps and pstree) now retry automatically on transient errors that can occur when attaching to a process under active thread delegation. The number of retries can be controlled with the --retries flag. Patch by Bartosz Sławecki.

  • gh-148518: 如果使用非 compat32 策略解析包含以起始双引号结尾的地址标头的电子邮件,则访问通过该标头对象访问的邮箱的 username 属性会导致 IndexError。 现在它可以正确地返回一个空字符串作为结果。

  • gh-148464: 为 c_float_complexc_double_complex 增加缺失的 __ctype_le/be__ 属性。 由 Sergey B Kirpichev 编写补丁。.

  • gh-148370: configparser: 防止当解析器解析多行内容失败引发 ParsingError 时的平方级复杂度行为。 由 Bénédikt Tran 编写补丁。

  • gh-121190: importlib.resources.files() now emits a more meaningful error message when module spec is None (as found in some __main__ modules).

  • gh-127012: importlib.abc.Traversable.read_text now allows/solicits an errors parameter.

  • gh-137855: 通过惰性加载 recopy 模块改善 dataclasses 模块的导入时间。

  • gh-148352: 为 calendar's CLI 输出添加更多色彩。 由 Hugo van Kemenade 编写补丁。

  • gh-148254: 在 timeit 详细输出中使用单数形式 "sec" 而非 "secs" 以与其他时间单位保持一致。

  • gh-130472: 导入补全集成到 fancycompleter。

  • gh-148241: json: Fix serialization: no longer call str(obj) on str subclasses. Patch by Victor Stinner.

  • gh-148225: The profiling.sampling replay command now rejects non-binary profile files with a clear error explaining that replay only accepts files created with --binary.

  • gh-148192: 当行分隔符不为 n 时 email.generator.Generator._make_boundary 可能无法检测重复的边界字符串。 现在它在行分隔符为 rn 时也能正确检测边界字符串。

  • gh-148207: typing.TypeVarTuple now accepts bound, covariant, contravariant, and infer_variance parameters, matching the interface of typing.TypeVar and typing.ParamSpec.

  • gh-148100: Soft deprecate re.match() and re.Pattern.match() in favour of re.prefixmatch() and re.Pattern.prefixmatch(). Patch by Hugo van Kemenade.

  • gh-147991: Improve tomllib import time (up to 10x faster). Patch by Victor Stinner.

  • gh-147957: Guarantees that collections.UserDict.popitem() will pop in the same order as the wrapped dictionary rather than an arbitrary order.

  • gh-146256: The profiling.sampling module now supports JSONL output format via --jsonl. Each run emits a newline-delimited JSON file that is sequentially parseable by external tools, scripts, and programmatic consumers. Patch by Maurycy Pawłowski-Wieroński.

  • gh-146609: Add colour to timeit CLI output. Patch by Hugo van Kemenade.

  • gh-146563: xml.parsers.expat: add an exception note when a custom Expat handler return value cannot be properly interpreted. Patch by Bénédikt Tran.

  • gh-137586: Add MacOS to webbrowser for macOS, which opens URLs via /usr/bin/open instead of piping AppleScript to osascript. Deprecate MacOSXOSAScript in favour of MacOS.

  • gh-146406: Cross-language method suggestions are now shown for AttributeError on builtin types and their subclasses. For example, [].push() suggests append, (1,2).append(3) suggests using a list, None.keys() suggests expecting a dict, and 1.0.__or__ suggests using an int.

  • gh-146313: 修复 multiprocessing 的资源跟踪器中死锁问题:在解释器关闭期间如果通过 os.fork() 创建的子进程仍然持有打开的资源跟踪器的管道则父进程可能在 os.waitpid() 中无限挂起。

  • gh-146292: Add colour to BaseHTTPRequestHandler logs, as used by the http.server CLI. Patch by Hugo van Kemenade.

  • gh-145917: Add MIME types for TTC and Haptics formats to mimetypes. (Contributed by Charlie Lin in gh-145918.)

  • gh-145846: Fix memory leak in _lsprof when clear() is called during active profiling with nested calls. clearEntries() now walks the entire currentProfilerContext linked list instead of only freeing the top context.

  • gh-145831: 通过去除完整的 eol 字符串而非单个字符修复当 eol='\r\n'email.quoprimime.decode() 留下单个 \r 的问题。

  • gh-145378: Use PyREPL as the default input console for pdb

  • gh-145244: Fixed a use-after-free in json encoder when a default callback mutates the dictionary being serialized.

  • gh-117716: Fix wave writing of odd-sized data chunks by appending the required RIFF pad byte and correcting the RIFF chunk size field accordingly.

  • gh-145200: hashlib: fix a memory leak when allocating or initializing an OpenSSL HMAC context fails.

  • gh-145056: Add support for frozendict in dataclasses.asdict() and dataclasses.astuple().

  • gh-145105: 修复 csv 读取器在迭代会从 __next__ 内部调用同一个读取器上调用 next() 的重进入式迭代器时的崩溃问题。

  • gh-130750: 恢复 argparse 错误消息中选项的引号以提高清晰度并与文档保持一致。

  • gh-137855: Reduce the import time of dataclasses module by ~20%.

  • gh-70647: strptime() now raises ValueError when the format string contains %d without a year directive. Using %e without a year now emits a DeprecationWarning.

  • gh-105936: 尝试修改 dataclassesfrozenslots 同时为 True 的非字段属性现在将引发 FrozenInstanceError 而非 TypeError。 它们的非 dataclass 子类现在可以自由地修改非字段属性,并且原始非 slot 类可以被垃圾回收。

  • gh-142831: Fix a crash in the json module where a use-after-free could occur if the object being encoded is modified during serialization.

  • gh-108411: typing.IO and typing.BinaryIO method arguments are now positional-only.

  • gh-130273: Fix traceback color output with Unicode characters.

  • gh-142307: imaplib: deprecate support for IMAP4.file. This attribute was never meant to be part of the public interface and altering its value may result in unclosed files or other synchronization issues with the underlying socket. Patch by Bénédikt Tran.

  • gh-141449: Improve tests and documentation for non-function callables as annotate functions.

  • gh-140287: 现在 asyncio REPL 在执行 PYTHONSTARTUP 脚本时将能处理异常。 由 Bartosz Sławecki 编写补丁。

  • gh-139489: Add the xml.is_valid_name() function, which allows to check whether a string can be used as an element or attribute name in XML.

  • gh-75707: Add optional mtime argument to tarfile.open(), for setting the mtime header field in .tar.gz archives.

  • gh-125862: The contextlib.contextmanager() and contextlib.asynccontextmanager() decorators now work correctly with generators, coroutine functions, and async generators when the wrapped callables are used as decorators.

  • gh-135528: http.cookiejar: add "tv", "or", "nom", "sch", and "web" to the default list of supported country code second-level domains.

  • gh-135056: Add a -H or --header CLI option to python -m http.server. Contributed by Anton I. Sipos.

  • gh-134551: Add t-strings support to pprint functions

  • gh-133956: Fix bug where @dataclass wouldn't detect ClassVar fields if ClassVar was re-exported from a module other than typing.

  • gh-132631: 修复在使用 JSON CLI 解析 JSON 多行文件时的 "I/O operation on closed file" 问题。

  • gh-108951: asyncio: Add TaskGroup.cancel which cancels unfinished tasks and exits the group without raising asyncio.CancelledError.

  • gh-123853: Update the table of Windows language code identifiers (LCIDs) used by locale.getdefaultlocale() on Windows to protocol version 16.0 (2024-04-23).

  • gh-122476: The email module no longer incorrectly uses RFC 2047 encoding for a mailbox with non-ASCII characters in its local-part. Under a policy with utf8 set False, attempting to serialize such a message will now raise an HeaderWriteError. There is no valid 7-bit encoding for an internationalized local-part. Use email.policy.SMTPUTF8 (or another policy with utf8=True) to correctly pass through the local-part as Unicode characters.

  • gh-83938: The email module no longer incorrectly uses RFC 2047 encoding for a mailbox with non-ASCII characters in its domain. Under a policy with utf8 set False, attempting to serialize such a message will now raise an HeaderWriteError. Either apply an appropriate IDNA encoding to convert the domain to ASCII before serialization, or use email.policy.SMTPUTF8 (or another policy with utf8=True) to correctly pass through the internationalized domain name as Unicode characters.

  • gh-81074: The email module no longer treats email addresses with non-ASCII characters as defects when parsing a Unicode string or in the addr_spec parameter to email.headerregistry.Address. RFC 5322 permits such addresses, and they were already supported when parsing bytes and in the Address username parameter.

    The (undocumented) email.errors.NonASCIILocalPartDefect is no longer used and should be considered deprecated.

  • gh-70039: 修复当 smtplib.SMTP.connect() 被显式调用而不是隐式调用时 smtplib.SMTP.starttls() 可能失败的程序缺陷。

  • gh-113471: Allow http.server to set a default content-type when serving files with an unknown or missing extension.

  • gh-83281: email: 改进对地址列表末尾部垃圾条目的处理以避免在某些边界情况下抛出 AttributeError。

  • gh-96894: Do not turn echo off for subsequent commands in batch activators (activate.bat and deactivate.bat) of venv.

文档

测试

  • gh-149425: 增加 test.test_zipfile.test_core.OtherTests.test_write_without_source_date_epoch 中的时间差

  • gh-148600: Add OpenSSL 4.0.0 support to test configurations.

构建

  • gh-149353: Avoid unnecessary JIT-related rebuilds during make install after --enable-optimizations builds.

  • gh-149351: 避免当在构建期间指定 DESTDIR 时可能破坏 macOS 框架安装名称的问题。

  • gh-149252: Update to WASI SDK 33.

  • gh-148690: Windows free-threaded builds now output to a different default path with default filenames, for example, PCbuild/amd64t/python.exe rather than PCbuild/amd64/python3.15t.exe. The PC/layout script has been updated to ensure compatibility of generated layouts.

  • gh-146475: 阻止使用 Apple Clang 来构建 JIT 因为它没有附带必要的 LLVM 工具。

  • gh-148644: Errors during the PGO training job on Windows are no longer ignored, and a non-zero return code will cause the build to fail.

  • gh-148535: 在 i686 上不再使用 gcc -fprofile-update=atomic 旗标。 该旗标被添加用于修复 PGO 构建 (gh-145801) 上配置数据 (.gcda 文件) 损坏导致的随机 GCC 内部错误。 它的问题是在 i686 上使 PGO 构建大幅变慢(减速至多 47x)。 由于在 i686 上还未出现 GCC 内部错误,请不要再在 i686 上使用 -fprofile-update=atomic。 由 Victor Stinner 编写补丁。

  • gh-148483: Use Py_GCC_ATTRIBUTE(unused) for stop_tracing label.

  • gh-148474: Fixed compilation of Python/pystrhex.c with older clang versions.

  • gh-146445: The Android build tools have been moved to the Platforms folder.

  • gh-146264: 当 MODULE_BUILDTYPE=static 时通过链接 HACL 依赖作为静态库修复在非 WASI 目标上的静态模块构建问题,防止在链接时出现重复 _Py_LibHacl_* 符号错误。

  • gh-138451: Allow for custom LLVM path using LLVM_TOOLS_INSTALL_DIR during JIT build.

  • gh-133312: Add a new ./configure option --enable-static-libpython-for-interpreter which, when used with --enable-shared, continues to build the shared library but does not use it for the interpreter. Instead, libpython is statically linked into the interpreter, as if --enable-shared had not been used. This allows you to do a single build and get a Python interpreter binary that does not use a shared library but also get a shared library for use by other programs.

Windows

  • gh-149254: Updated bundled version of OpenSSL to 3.5.6.

  • gh-148690: Non-freethreaded builds on Windows now support extensions linked to python3t.dll, and will include a copy of that library in normal installs that references the non-freethreaded runtime.

  • gh-146458: 修复在 Windows 上当改变控制台窗口大小时不正确的 REPL 高度和宽度追踪。

macOS

  • gh-142295: 针对 Python macOS 框架构建版,将 Info.plist 文件更新为更符合当前 Apple 指导方针。 原始补丁由 Martinus Verburg 贡献。

  • gh-149254: Update macOS installer to use OpenSSL 3.5.6.

IDLE

  • gh-94523: Detect file if modified at local disk and prompt to ask refresh. Patch by Shixian Li.

  • gh-139551: Support rendering BaseExceptionGroup in IDLE.

  • gh-89520: Make IDLE extension configuration look at user config files, allowing user-installed extensions to have settings and key bindings defined in ~/.idlerc.

C API

Python 3.15.0 alpha 8

发布日期: 2026-04-07

安全性

核心与内置函数

  • gh-148157: 修复当解析针对函数形参的无效类型注释时可能发生的崩溃问题。 由 OSS Fuzz 在 #492782951 中贡献。

  • gh-100239: Propagate result type and uniqueness information through _BINARY_OP_EXTEND in the tier 2 optimizer, enabling elimination of downstream type guards and selection of inplace float operations.

  • gh-148144: 在拷贝解释器帧时初始化 _PyInterpreterFrame.visited 以使增量式 GC 不会读取来自生成器和帧对象拷贝的未初始化字节数据。

  • gh-148072: Cache pickle.dumps and pickle.loads per interpreter in the XIData framework, avoiding repeated module lookups on every cross-interpreter data transfer. This speeds up InterpreterPoolExecutor for mutable types (list, dict) by 1.7x--3.3x.

  • gh-148110: Fix sys.set_lazy_imports_filter() so relative lazy imports pass the resolved imported module name to the filter callback. Patch by Pablo Galindo.

  • gh-148083: Constant-fold _CONTAINS_OP_SET for frozenset. Patch by Donghee Na.

  • gh-144319: Fix a bug that could cause applications with specific allocation patterns to leak memory via Huge Pages if compiled with Huge Page support. Patch by Pablo Galindo

  • gh-147985: Make PySet_Contains() attempt a lock-free lookup, similar to set.__contains__(). This avoids acquiring the set object mutex in the normal case.

  • gh-147856: Allow the count argument of bytes.replace() to be a keyword.

  • gh-146615: 修复针对 METH_METHOD 描述器的 __get__() 中当将无效的(空类型)对象作为第二个参数传入时的崩溃问题。 由 Steven Sun 编写补丁。

  • gh-146306: Optimize compact integer arithmetic in the JIT by mutating uniquely-referenced operands in place, avoiding allocation of a new int object. Speeds up the pyperformance spectral_norm benchmark by ~10%.

  • gh-146587: Fix type slot assignment incase of multiple slots for same name in type object implementation. Patch by Kumar Aditya.

  • gh-126910: Set frame pointers in aarch64-unknown-linux-gnu JIT code, allowing most native profilers and debuggers to unwind through them. Patch by Diego Russo

  • gh-146388: Adds a null check to handle when the JIT optimizer runs out of space when dealing with contradictions in make_bottom.

  • gh-146308: Fixed multiple error handling issues in the _remote_debugging module including a double-free in code object caching, memory leaks on allocation failure, missing exception checks in binary format varint decoding, reference leaks on error paths in frame chain processing, and inconsistent thread status error reporting across platforms. Patch by Pablo Galindo.

  • gh-146306: Optimize float arithmetic in the JIT by mutating uniquely-referenced operands in place, avoiding allocation of a new float object. Speeds up the pyperformance nbody benchmark by ~19%.

  • gh-146128: 修复在 AArch64 JIT 代码中可能导致常量值部分损坏的程序缺陷。 此问题是理论性的,并未在未修改的 Python 解释器中被实际观察到。

  • gh-146250: 修复 SyntaxError 在重初始化时的内存泄漏问题。

  • gh-146245: 修复 socket 中审计钩子在 socket.getaddrinfo()socket.sendto() 中引发异常时的引用泄漏问题。

  • gh-146151: memoryview now supports the float complex and double complex C types: formatting characters 'F' and 'D' respectively. Patch by Sergey B Kirpichev.

  • gh-146196: 通过添加零长度检测修复 PyUnicodeWriter_WriteASCII() 中潜在的未定义行为。 由 Shamil Abdulaev 编写补丁。

  • gh-146227: 修复 C11 atomics 后端 (pyatomic_std.h) 的 _Py_atomic_load_uint16 中的错误类型,它使用了 32 位的 atomic 载荷而不是 16 位的。 由 Mohammed Zuhaib 发现。

  • gh-146205: Fixed a bug where select.epoll.close(), select.kqueue.close(), and select.devpoll.close() silently ignored errors.

  • gh-146199: Comparison of code objects now handles errors correctly.

  • gh-145667: Remove the GET_ITER_YIELD_FROM instruction, modifying SEND to pair with GET_ITER when compiling yield from expressions.

  • gh-146192: Add Base32 support to binascii and improve the performance of the Base32 converters in base64. Patch by James Seo.

  • gh-135871: Improve multithreaded scaling of PyMutex in low-contention scenarios by reloading the lock's internal state, without slowing down high-contention scenarios.

  • gh-146096: Fixed segmentation fault when called repr for BaseExceptionGroup with empty or 1-size tuple args.

  • gh-146056: 修复包含 NULL 的列表和元组的 repr()

  • gh-145059: Fixed sys.lazy_modules to include lazy modules without submodules. Patch by Bartosz Sławecki.

  • gh-146041: 当字符串已被内部化和永生化时通过避免使用解释器级锁修复自由线程版在 sys.intern()PyObject_SetAttr() 中的缩放瓶颈。

  • gh-145990: python --help-env 各部分现在将按环境变量名称排序。

  • gh-145990: python --help-xoptions 现在将按 -X 选项名称排序。

  • gh-145876: AttributeErrors and KeyErrors raised in keys() or __getitem__() during dictionary unpacking ({**mymapping} or func(**mymapping)) are no longer masked by TypeError.

  • gh-127958: Support tracing from function entrypoints in the JIT. Patch by Ken Jin.

  • gh-145376: 修复 structseq.__replace__() 中的 GC 追踪问题。

  • gh-145792: 修复当在编译时未启用 VLA 支持的 CPython 构建版上唤起错误处理器时出现越界访问的问题。

  • gh-142183: 避免在特定栈深度上重复调用会导致速度大幅变慢的病态现象。

  • gh-145779: 通过避免调用描述器的 __get__ 来提升 classmethod()staticmethod() 调用的适应性。

  • gh-145783: 修复当有特定错误未被正确传播时解析器的意外崩溃问题。 由 OSS Fuzz 在 #491369109 中发现。.

  • gh-145685: 在 free-threaded build 中通过避免对内部类型锁的争夺改善类型属性查找的灵活性。

  • gh-145713: 通过使用关键节并调用 resize 函数持有锁的版本使得 bytearray.resize() 在自由线程构建中是线程安全的。

  • gh-145036: 在自由线程构建版中,修复在 list 上调用 __sizeof__() 时的竞争条件问题。

  • gh-134584: Eliminate redundant refcounting for MATCH_CLASS in the JIT.

  • gh-69605: Add math.integer to REPL auto-completion of imports.

  • gh-131798: Optimize _ITER_CHECK_RANGE and _ITER_CHECK_LIST in the JIT

  • gh-143414: Add tracking to the JIT optimizer to determine whether a reference is uniquely owned or shared

  • gh-143636: 修复在非命名空间实例上调用 SimpleNamespace.__replace__() 时的崩溃问题。 由 Bénédikt Tran 编写补丁。

  • gh-126910: Set frame pointers in x86_64-unknown-linux-gnu JIT code, allowing most native profilers and debuggers to unwind through them.

  • gh-140594: 修正当从标准输入读取单个 NUL 字符时的读取越界问题。 由 Shamil Abdulaev 编写补丁。

  • gh-140870: Add support for module attributes in the REPL auto-completion of imports.

文档

  • gh-126676: 扩展 argparse 文档的 type=bool 部分以展示意外行为并提示常用替代方式。

  • gh-145649: 通过使用正确的 roff 标记修正 python(1) 手册页面中 -X 选项说明的文字换行和格式问题。

测试

  • gh-144418: Android testbed 的模拟器 RAM 从 2 GB 增加至 4 GB。

  • gh-146202: 修复 regrtest 中的竞争条件问题:确保在工作进程中创建临时目录。 在之前版本中,temp_cwd() 在 Windows 上当 "build" 目录未被创建时执行将失败。 由 Victor Stinner 编写补丁。

构建

  • gh-146541: 现在 Android testbed 可以针对 32 位 ARM 和 x86 目标进行构建。

  • gh-146498: iOS XCframework 构建脚本现在会确保 libpython 不被包括在安装的 app 内容中,并在标识需要处理的标准库二进制内容时更为稳定可靠。

  • gh-146450: 修改了 Android 构建脚本以提升与其他平台构建脚本的一致性。

  • gh-146446: 现在 Apple/iOS XCframework 构建脚本的 clean 目标在针对单一架构时将更具选择性。

  • gh-146444: The Apple/iOS build script has been moved to the Platforms directory.

  • gh-146210: Fix building the jit stencils on Windows when the interpreter is built with a different clang version. Patch by Chris Eibl.

  • gh-145844: Update to WASI SDK 32.

  • gh-145801: When Python build is optimized with GCC using PGO, use -fprofile-update=atomic option to use atomic operations when updating profile information. This option reduces the risk of gcov Data Files (.gcda) corruption which can cause random GCC crashes. Patch by Victor Stinner.

  • gh-138850: Add --disable-epoll to configure

  • gh-145633: Remove support for ancient ARM platforms (ARMv4L and ARMv5L OABI boards), using mixed-endian representation for doubles. Patch by Sergey B Kirpichev.

  • gh-85277: Fix building without stropts.h or empty stropts.h

Windows

  • gh-140131: 修正在 Windows 上当模块补全建议行达到控制台窗口宽度时的 REPL 光标位置问题。

macOS

工具/示例

  • gh-135953: Properly identify the main thread in the Gecko profiler collector by using a status flag from the interpreter state instead of relying on threading.main_thread() in the collector process.

  • gh-145976: Remove Misc/indent.pro, a configuration file for GNU indent(1).

  • gh-145976: Remove Misc/vgrindefs and Misc/Porting.

C API

Python 3.15.0 alpha 7

Release date: 2026-03-10

Windows

测试

  • gh-144741: Fix test_frame_pointer_unwind when Python is built with --enable-shared. Classify also libpython frames as "python". Patch by Victor Stinner.

  • gh-144739: 如果编译 Python 时使用的系统 expat 版本早于 2.7.2 但测试运行时使用较新的 expat,则仍然会跳过 test.test_pyexpat.MemoryProtectionTest

安全性

文档

核心与内置函数

  • gh-145701: 修复当 __classdict____conditional_annotations__ 位于类作用域内联推导式中时的 SystemError 异常。 由 OSS Fuzz 在 #491105000 中发现。

  • gh-145615: 修正 free-threaded build 中 mimalloc 页面可能永久性地无法回收直到拥有方线程退出的内存泄漏问题。

  • gh-116738: Make mmap.mmap.set_name() thread-safe on the free threaded build.

  • gh-145566: In the free threading build, skip the stop-the-world pause when reassigning __class__ on a newly created object.

  • gh-143055: Fix crash in AST unparser when unparsing dict comprehension unpacking. Found by OSS Fuzz in #489790200.

  • gh-145335: 修复 os.pathconf() 附带 -1 作为 path 参数进行调用时的煤库问题。

  • gh-145376: 修复多个不常见错误场景中的引用泄漏问题。

  • gh-145234: 修复解析器中当编码的 cookie (例如使用 UTF-7) 解码为回车符 (\r) 时发生 SystemError 的问题。 现在字符串分词器中解码完成后会进行标准化处理。

    由 Pablo Galindo 编写补丁。

  • gh-145275: Added the -X pathconfig_warnings and PYTHON_PATHCONFIG_WARNINGS options, allowing to disable warnings from sys.path 模块搜索路径的初始化.

  • gh-145273: A warning is now shown during sys.path 模块搜索路径的初始化 if it can't find a valid standard library.

  • gh-145241: Specialized the parser error for when with items are followed by a trailing comma (for example, with item,:), raising a clearer SyntaxError message. Patch by Pablo Galindo and Bartosz Sławecki.

  • gh-130555: 修复 dict.clear() 在字典值是嵌入到某个对象并且析构器导致该字典的重进入改变时的释放后使用问题。

  • gh-145197: Fix JIT trace crash when recording function from cleared generator frame.

  • gh-145187: 修复当条件代码块中类型形参绑定包含无效表达式时编译器断言失败的问题。

  • gh-145142: 修复在自由线程构建中当传给 str.maketrans() 的字典参数被并发修改时的崩溃问题。

  • gh-145118: str.maketrans() now accepts frozendict.

  • gh-144015: Speed up bytes.hex(), bytearray.hex(), binascii.hexlify(), and hashlib .hexdigest() operations with SIMD on x86-64, ARM64, and ARM32 with NEON when built with gcc (version 12 or higher) or clang (version 3 or higher) compilers. Around 1.1-3x faster for common 16-64 byte inputs such as hashlib hex digests, and up to 8x faster for larger data.

  • gh-145118: type() now accepts frozendict as an argument.

  • gh-145064: Fix JIT optimizer assertion failure during CALL_ALLOC_AND_ENTER_INIT side exit.

  • gh-145055: exec() and eval() now accept frozendict for globals. Patch by Victor Stinner.

  • gh-145058: Fix a crash when __lazy_import__() is passed a non-string argument, by raising an TypeError instead.

  • gh-144995: Optimize memoryview comparison: a memoryview is equal to itself, there is no need to compare values. Patch by Victor Stinner.

  • gh-141510: Update specializer to support frozendict. Patch by Donghee Na.

  • gh-141510: Optimize frozendict.fromkeys() to avoid unnecessary thread-safety operations in frozendict cases. Patch by Donghee Na.

  • gh-100239: Speedup BINARY_OP_EXTEND for exact floats and medium-size integers by up to 15%. Patch by Chris Eibl.

  • gh-144914: Use mimalloc for raw memory allocations such as via PyMem_RawMalloc() for better performance on free-threaded builds. Patch by Kumar Aditya.

  • gh-144872: 修复用 OSS-Fuzz 找到的解析器内堆缓冲区溢出问题。

  • gh-144766: 修复当 perf 支持被启用时在分叉子进程中的崩溃问题。

  • gh-144759: Fix undefined behavior in the lexer when start and multi_line_start pointers are NULL in _PyLexer_remember_fstring_buffers() and _PyLexer_restore_fstring_buffers(). The NULL pointer arithmetic (NULL - valid_pointer) is now guarded with explicit NULL checks.

  • gh-141510: Add built-in frozendict type. Patch by Victor Stinner.

  • gh-144681: Fix a JIT assertion failure when a conditional branch jumps to the same target as the fallthrough path.

  • gh-143300: Add PyUnstable_SetImmortal() C-API function to mark objects as immortal.

  • gh-144702: Clarify the error message raised when a class pattern is used to match on a non-class object.

  • gh-144569: Optimize BINARY_SLICE for list, tuple, and unicode by avoiding temporary slice object creation.

  • gh-144438: 将Align the QSBR 线程状态数组对齐到 64 字节缓存行边界以避免 free-threaded build 中错误的共享。

  • gh-142349: Implement PEP 810. Patch by Pablo Galindo and Dino Viehland.

  • gh-141226: Deprecate PEP 456 support for providing an external definition of the string hashing scheme. Removal is scheduled for Python 3.19. Patch by Bénédikt Tran.

  • gh-138912: Improve MATCH_CLASS performance by up to 52% in certain cases. Patch by Marc Mueller.

  • gh-130327: 修复当对象的 __dict__ 在运行时被覆盖时错误的清理问题。

  • gh-80667: Literals using 使用 \N{name} 转义语法的字面值现在可以使用大小写不敏感的名称构造 CJK 表意文字和 Hangul 音节。

C API

构建

  • gh-144533: Use wasmtime's --argv0 to auto-discover sysconfig in WASI builds

  • gh-145110: Fix targets "Clean" and "CLeanAll" in case of PGO builds on Windows. Patch by Chris Eibl.

  • gh-144679: When building with Visual Studio 2026 (Version 18), use PlatformToolSet v145 by default. Patch by Chris Eibl.

  • gh-144675: Update to WASI SDK 30.

  • gh-136677: Introduce executable specific linker flags to ./configure.

Python 3.15.0 alpha 6

Release date: 2026-02-11

macOS

  • gh-144648: Allowed _remote_debugging to build on more OS versions by using proc_listpids() rather than proc_listallpids().

  • gh-124111: Update macOS installer to use Tcl/Tk 9.0.3.

  • gh-144551: Update macOS installer to use OpenSSL 3.5.5.

Windows

测试

  • gh-144415: Android testbed 现在会区分由换行符触发的和由手动调用 flush 触发的 stdout/stderr 消息。 这将修正进度提示及类似内容的日志记录问题。

  • gh-65784: 增加对 regrtests 中参数化资源 wantobjects 的支持,这将允许运行 Tkinter 测试时使用指定的 tkinter.wantobjects 值,例如 -u wantobjects=0

安全性

  • gh-144125: BytesGenerator 现在将拒绝序列化(写入)不安全折叠或分隔的标头;参见 verify_generated_headers。(由 Bas Bloemsaat 和 Petr Viktorin 在 gh-121650 中贡献。)

  • gh-143935: 修复了使用现代邮件策略扁平化电子邮件消息时注释折叠中的程序缺陷。由很长的不可折叠字符序列组成的注释可能会触发强制换行,而该换行会省略续行所需的前导空格,导致注释的剩余部分被解释为新的标头字段。这使得通过精心构造的输入实现标头注入成为可能。

  • gh-143925: 拒绝 data: URL 媒体类型中的控制字符。

  • gh-143923: Reject control characters in POP3 commands.

  • gh-143921: Reject control characters in IMAP commands.

  • gh-143919: 拒绝 http.cookies.Morsel 字段和值中的控制字符。

  • gh-143916: 拒绝 wsgiref.headers.Headers 字段、值和参数之内的 C0 控制字符。

IDLE

  • gh-143774: 更好地解释"格式 / 格式化段落"的操作。

核心与内置函数

  • gh-134584: Optimize and eliminate ref-counting in _BINARY_OP_SUBSCR_LIST_SLICE

  • gh-144563: Fix interaction of the Tachyon profiler and ctypes and other modules that load the Python shared library (if present) in an independent map as this was causing the mechanism that loads the binary information to be confused. Patch by Pablo Galindo

  • gh-144601: Fix crash when importing a module whose PyInit function raises an exception from a subinterpreter.

  • gh-144549: Fix building the tail calling interpreter on Visual Studio 2026 with free-threading.

  • gh-144513: 修复自由线程构建版中当在 stop-the-world 暂停期间使用关键节时潜在的死锁问题。

  • gh-131798: Optimise _GUARD_TOS_SLICE in the JIT.

  • gh-144330: Move classmethod and staticmethod initialization from __init__() to __new__(). Patch by Victor Stinner.

  • gh-144446: 修复自由线程构建版中当另一个线程正在执行帧时读取帧对象属性导致的数据竞争问题。

  • gh-120321: Add gi_state, cr_state, and ag_state attributes to generators, coroutines, and async generators that return the current state as a string (e.g., GEN_RUNNING). The inspect module functions getgeneratorstate(), getcoroutinestate(), and getasyncgenstate() now return these attributes directly.

  • gh-141563: Fix thread safety of PyDateTime_IMPORT.

  • gh-144280: Fix a bug in JIT where the predicate symbol had no truthiness

  • gh-140550: In PyModuleDef.m_slots, allow slots that repeat information present in PyModuleDef.

  • gh-139103: Improve scaling of namedtuple() instantiation in the free-threaded build.

  • gh-144307: 在解释器最终化时防止模块卸载中的引用泄漏问题。

  • gh-144319: Add huge pages support for the pymalloc allocator. Patch by Pablo Galindo

  • gh-120321: Made gi_yieldfrom thread-safe in the free-threading build by using a lightweight lock on the frame state.

  • gh-144194: 修复内存分配失败时 perf jitdump 初始化中的错误处理。

  • gh-143962: Name suggestion for not normalized name suggests now the normalized name or the closest name to the normalized name. If the suggested name is not ASCII, include also its ASCII representation.

  • gh-144157: bytes.translate() now allows the compiler to unroll its loop more usefully for a 2x speedup in the common no-deletions specified case.

  • gh-144068: Fix JIT tracer memory leak, ensure the JIT tracer state is freed when daemon threads are cleaned up during interpreter shutdown.

  • gh-144012: 在 BINARY_OP_EXTENT 操作码中检查结果是否为 NULL

  • gh-144007: Eliminate redundant refcounting in the JIT for BINARY_OP.

  • gh-144005: Eliminate redundant refcounting from BINARY_OP_EXTEND.

  • gh-143939: Fix erroneous "cannot reuse already awaited coroutine" error that could occur when a generator was run during the process of clearing a coroutine's frame.

  • gh-141805: 修复在移除具有相同哈希值的元素后、集合中仍包含具有相同哈希值的元素的情况下并发向 set 中添加具有相同哈希值的对象时的崩溃问题。

  • gh-143670: 修复 ga_repr_items_list 函数中的崩溃问题。

  • gh-143650: 修复 importlib 中一个线程在另一个线程的导入失败时可能接收到过期的模块引用导致的竞争条件问题。

  • gh-143569: Generator expressions in 3.15 now conform to the documented behavior when the iterable does not support iteration. This matches the behavior in 3.14 and earlier

  • gh-143192: Improve performance of bitwise operations on multi-digit ints.

  • gh-132657: If we are specializing to LOAD_GLOBAL_MODULE or LOAD_ATTR_MODULE, try to enable deferred reference counting for the value, if the object is owned by a different thread. This applies to the free-threaded build only and should improve scaling of multi-threaded programs. Note that when deferred reference counting is enabled, the object will be deallocated by the GC, rather than by Py_DECREF().

  • gh-143055: Implement PEP 798 (Unpacking in Comprehensions). Patch by Adam Hartz.

  • gh-142037: Improve error messages for printf-style formatting. For errors in the format string, always include the position of the start of the format unit. For errors related to the formatted arguments, always include the number or the name of the argument. Raise more specific errors and include more information (type and number of arguments, most probable causes of error).

  • gh-140557: bytearray buffers now have the same alignment when empty as when allocated. Unaligned buffers can still be created by slicing.

  • gh-140232: Frozenset objects with immutable elements are no longer tracked by the garbage collector.

  • gh-115231: Setup __module__ attribute for built-in static methods. Patch by Sergey B Kirpichev.

C API

构建

  • gh-140421: Disable the perf trampoline on older macOS versions where it cannot be built.

  • gh-144309: Build Python with POSIX 2024, instead of POSIX 2008. Patch by Victor Stinner.

  • gh-144278: Enables defining the _PY_IMPL_NAME and _PY_IMPL_CACHE_TAG preprocessor definitions to override sys.implementation at build time. Definitions need to include quotes when setting to a string literal. Setting the cache tag to NULL has the effect of completely disabling automatic creation and use of .pyc files.

  • gh-143960: Add support for OpenSSL 3.6, drop EOL 3.2. Patch by Hugo van Kemenade.

  • gh-143941: Move WASI-related files to Platforms/WASI. Along the way, leave a deprecated Tools/wasm/wasi/__main__.py behind for backwards-compatibility.

  • gh-143842: Prevent static builds from clashing with curses by making the optimizer COLORS table static.

Python 3.15.0 alpha 5

Release date: 2026-01-14

Windows

  • gh-143082: Fix pdb arrow key history not working when stdin is sys.stdin.

  • gh-128067: 修复 Windows 上的 PyREPL 中不带末尾换行符的输出会被下一个提示符覆盖的程序缺陷。

工具/示例

  • gh-142095: 在可能的情况下让 gdb 'py-bt' 命令使用来自线程局部状态的帧。 由 Sam Gross 和 Victor Stinner 编写补丁。

测试

  • gh-143460: 如果栈大小没有限制则将跳过依赖于无限递归的测试。

  • gh-143553: 增加对参数化资源的支持,如 -u xpickle=2.7

  • bpo-31391: 将 test_xpickle 从 Python 2 前向移植到 Python 3 并将资源添加回测试的命令行。

  • gh-143706: 修复 multiprocessing forkserver 以便在预加载 __main__ 之前正确设置 sys.argv。此前,forkserver 子进程中在主模块导入期间 sys.argv 是空的。这修复了 3.13.8 和 3.14.1 中引入的回归问题。由 Aaron Wieczorek 根本定位,由 Thomas Watson 提供测试,感谢!

  • gh-143638: 禁止 C 实现中 pickle.Picklerpickle.Unpickler 方法的重入调用。此前,这可能会导致崩溃或数据损坏,现在对同一对象的方法进行并发调用将引发 RuntimeError

  • gh-143658: importlib.metadata: Use str.translate() to improve performance of importlib.metadata.Prepared.normalize(). Patch by Hugo van Kemenade and Henry Schreiner.

  • gh-78724: 当用户尝试调用半初始化的 Struct 对象(例如由 Struct.__new__(Struct) 创建的对象)的方法时引发 RuntimeError。由 Sergey B Kirpichev 编写补丁。

  • gh-143196: 修复由未文档化函数 json.encoder.c_make_encoder() 返回的内部编码器对象在附带非零第二个参数 (_current_indent_level) 调用时的崩溃问题。

  • gh-143191: 如果栈大小过小,_thread.stack_size() 现在将引发 ValueError。由 Victor Stinner 编写补丁。

  • gh-143547: 修复当钩子引发异常并更改 sys.unraisablehook() 时的 sys.unraisablehook(): 持有对旧钩子的强引用。由 Victor Stinner 编写补丁。

  • gh-139686: Revert 0a97941245f1dda6d838f9aaf0512104e5253929 and 57db12514ac686f0a752ec8fe1c08b6daa0c6219 which made importlib.reload a no-op for lazy modules; caused Buildbot failures.

  • gh-143517: 当求值以一个或多个空白字符后跟 * 开头的字符串化星号标注时,annotationlib.get_annotations() 不再引发 SyntaxError。由 Bartosz Sławecki 编写补丁。

  • gh-143474: Add os.RWF_ATOMIC constant for Linux 6.11+.

  • gh-143445: Speed up copy.deepcopy() by 1.04x.

  • gh-143378: 修复在 write()writelines() 期间并发修改 BytesIO 对象时的释放后使用崩溃问题。

  • gh-143368: Fix endless retry loop in profiling.sampling blocking mode when threads cannot be seized due to EPERM. Such threads are now skipped instead of causing repeated error messages. Patch by Pablo Galindo.

  • gh-143346: 修复当缩进包含制表符和空格混合时 plistlib._PlistWriter 中 Base64 数据的错误换行问题。

  • gh-140025: queue: Fix SimpleQueue.__sizeof__() computation.

  • gh-143310: tkinter: 修复在将 Python list 转换为 Tcl 对象时 (例如在设置 Tcl 变量时) 如果其被修改则会造成程序崩溃的问题。 由 Bénédikt Tran 编写补丁。

  • gh-143309: 修复在非 Windows 平台上当给定一个在解析期间被修改的自定义环境映射时 os.execve() 中的崩溃问题。由 Bénédikt Tran 编写补丁。

  • gh-143308: pickle: 修复在 pickle 期间自定义缓冲区回调并发修改 PickleBuffer 时的释放后使用崩溃问题。由 Bénédikt Tran 和 Aaron Wieczorek 编写补丁。

  • gh-142939: Performance optimisations for difflib.get_close_matches()

  • gh-124951: The base64 implementation behind the binascii, base64, and related codec has been optimized for modern pipelined CPU architectures and now performs 2-3x faster across all platforms.

  • gh-143237: 修复 logging 滚动处理器中对命名管道的支持。

  • gh-143249: 修复 Windows 重叠 I/O 在错误处理时可能的缓冲区泄漏问题。

  • gh-143241: zoneinfo: 修复解析格式错误的 TZif 文件时 ZoneInfo.from_file 中的无限循环问题。由 Fatih Celik 编写补丁。

  • gh-142830: sqlite3: 修复在回调执行期间修改连接的回调时的释放后使用崩溃问题。由 Bénédikt Tran 编写补丁。

  • gh-143200: xml.etree.ElementTree: 修复当元素被并发修改时 Element__getitem__()__setitem__() 方法中的释放后使用崩溃问题。由 Bénédikt Tran 编写补丁。

  • gh-143214: Add the wrapcol parameter in binascii.b2a_base64() and base64.b64encode().

  • gh-142195: 更新 subprocess 中的超时评估逻辑,使其兼容像 Shadow 这样时间完全按请求推进的确定性环境。

  • gh-140739: Fix several crashes due to reading invalid memory in the new Tachyon sampling profiler. Patch by Pablo Galindo.

  • gh-142164: 修复 ctypes 位域溢出错误消息以报告正确的偏移量和大小计算。

  • gh-143145: 修复 ctypes 在出错时使用多个输出参数构造结果时可能的引用泄漏问题。

  • gh-143103: Add padding support to base64.z85encode() via the pad parameter.

  • gh-130796: Undeprecate the locale.getdefaultlocale() function. Patch by Victor Stinner.

  • gh-74902: Add the iter_graphemes() function in the unicodedata module to iterate over grapheme clusters according to rules defined in Unicode Standard Annex #29, "Unicode Text Segmentation". Add grapheme_cluster_break(), indic_conjunct_break() and extended_pictographic() functions to get the properties of the character which are related to the above algorithm.

  • gh-143004: 修复当用户代码在更新期间修改 Counter 时 collections.Counter.update() 中潜在的释放后使用问题。

  • gh-140648: asyncio REPL 现在遵守 -I 标志(隔离模式)。此前,即使设置了该标志,它也会加载并执行 PYTHONSTARTUP。由 Bartosz Sławecki 贡献。

  • gh-142991: 修复 FreeBSD divert(4) 套接字的 recvfrom() 和 sendto() 等套接字操作。

  • gh-116738: Make the attributes in lzma thread-safe on the free threaded build.

  • gh-142950: Fix regression in argparse where format specifiers in help strings raised ValueError.

  • gh-142881: 修复 atexit.unregister() 的并发和重入调用问题。

  • gh-142615: Fix possible crashes when initializing asyncio.Task or asyncio.Future multiple times. These classes can now be initialized only once and any subsequent initialization attempt will raise a RuntimeError. Patch by Kumar Aditya.

  • gh-142517: 非 compat32email 策略现在可正确处理包含无法在其指定字符集中解码的字节的编码字的重新折叠。此前这会在折叠期间导致编码异常。

  • gh-138122: The Tachyon profiler's live TUI now integrates with the experimental _colorize theming system. Users can customize colors via _colorize.set_theme() (experimental API, subject to change). A LiveProfilerLight theme is provided for light terminal backgrounds. Patch by Pablo Galindo.

  • gh-142306: Improve errors for Element.remove.

  • gh-63016: Add a flags parameter to mmap.mmap.flush() to control synchronization behavior.

  • gh-139262: Windows 上新的 PyREPL 中某些按键可能被吞掉,特别是与 ALT 键一起使用时。由 Chris Eibl 修复。

  • gh-138897: 改进 REPLlicense/copyright/credits 的显示:现在使用分页器。

  • gh-135852: Add _winapi.RegisterEventSource(), _winapi.DeregisterEventSource() and _winapi.ReportEvent(). Using these functions in NTEventLogHandler to replace pywin32.

  • gh-109263: 从 multiprocessing 中的 spawn 上下文启动进程时不再全局设置启动方法。

  • gh-132715: 一旦发生失败,跳过在 marshal 期间写入对象。

文档

核心与内置函数

  • gh-134584: Eliminate redundant refcounting from _CONTAINS_OP, _CONTAINS_OP_SET and _CONTAINS_OP_DICT.

  • gh-143604: Fix a reference counting issue in the JIT tracer where the current executor could be prematurely freed during tracing.

  • gh-143469: Enable LOAD_ATTR_MODULE specialization even if __getattr__() is defined in module.

  • gh-134584: Eliminate redundant refcounting from TO_BOOL_STR.

  • gh-143377: 修复异常格式不正确时 _interpreters.capture_exception() 中的崩溃问题。由 Bénédikt Tran 编写补丁。

  • gh-139757: Add BINARY_OP_SUBSCR_USTR_INT to specialize reading an ASCII character from any string. Patch by Chris Eibl.

  • gh-141504: Factor out tracing and optimization heuristics into a single object. Patch by Donghee Na.

  • gh-142982: Specialize CALL_FUNCTION_EX for Python and non-Python callables.

  • gh-136924: REPL 中的交互式帮助模式不再错误地将文本输入作为 Python 代码进行语法高亮。由 Olga Matoula 贡献。

  • gh-139757: Fix unintended bytecode specialization for non-ascii string. Patch by Donghee Na, Ken Jin and Chris Eibl.

  • gh-143361: Add PY_VECTORCALL_ARGUMENTS_OFFSET to _Py_CallBuiltinClass_StackRefSteal to avoid redundant allocations

  • gh-131798: The JIT optimizer now understands more generator instructions.

  • gh-134584: Eliminate redundant refcounting from _LOAD_ATTR_SLOT.

  • gh-143189: 修复当将非 str 键插入拆分表字典时,如果该键与拆分表中现有键匹配但在字典中没有对应值时的崩溃问题。

  • gh-143228: 修复在线程运行时切换性能分析或在守护线程活动期间进行解释器终结时 perf trampoline 中的释放后使用问题。此修复使用引用计数来确保在任何代码对象仍可能引用 trampoline 时不会释放它们。由 Pablo Galindo 编写补丁。

  • gh-142664: 修复当被引用对象的 __hash__ 方法修改该对象或视图时 memoryview.__hash__ 中的释放后使用崩溃问题。由 Bénédikt Tran 编写补丁。

  • gh-142557: 修复在格式化 % 风格参数时 bytearray 被修改时 bytearray.__mod__ 中的释放后使用崩溃问题。由 Bénédikt Tran 编写补丁。

  • gh-143195: 修复当分隔符的 __len__() 修改原始对象时 bytearray.hex()memoryview.hex() 中的释放后使用崩溃问题。由 Bénédikt Tran 编写补丁。

  • gh-143183: Fix a bug in the JIT when dealing with unsupported control-flow or operations.

  • gh-142975: 修复在 free threaded 构建版本中解冻垃圾回收器跟踪的所有对象后的崩溃问题。

  • gh-143135: 当 PYTHONINSPECT0 时将 sys.flags.inspect 设置为 1。此前,在这种情况下它被设置为 0

  • gh-143123: Protect the JIT against recursive tracing.

  • gh-143092: Fix a crash in the JIT when dealing with list.append(x) style code.

  • gh-143003: 修复当 __length_hint__() 对非空迭代器返回 0 时 bytearray.extend() 中共享空缓冲区的溢出问题。

  • gh-143006: 修复比较整数部分具有相同位数的负非整数 floatint 时可能的断言错误。

  • gh-116738: Fix thread safety of contextvars.Context.run().

  • gh-142829: 修复当自定义 __eq__ 方法通过 set() 修改上下文时 contextvars.Context 比较中的释放后使用崩溃问题。

  • gh-142863: Generate optimized bytecode when calling list or set with generator expression.

  • gh-41779: Allowed defining any __slots__ for a class derived from tuple (including classes created by collections.namedtuple()).

  • gh-69605: 修正在 modules in the REPL 自动补全导入功能中已导入模块的边界情况问题。

  • gh-138568: 调整内置 help() 函数以在交互模式下忽略空输入。

  • gh-131798: Remove bounds check when indexing into tuples with a constant index.

  • gh-134584: Eliminate redundant refcounting from _CALL_TYPE_1. Patch by Tomas Roun

  • gh-132108: Speed up int.from_bytes() when passed object supports buffer protocol, like bytearray by ~1.2x.

  • gh-128334: Make the slice class subscriptable at runtime to be consistent with typing implementation.

C API

Python 3.15.0 alpha 4

Release date: 2026-01-13

测试

  • gh-142836: 在 test_pdb.test_script_target_anonymous_pipe 中支持 Solaris。

  • gh-122431: 修正 readline.append_history_file() 中的错误消息以指明 nelements 必须是非负数而不是正数。

  • gh-143046: asyncio REPL 在静默模式下 (-q) 将不再打印版权和版本消息。 由 Bartosz Sławecki 编写补丁。

  • gh-80744: Fix issue where pdb would read a .pdbrc twice if launched from the home directory

  • gh-138122: Add blocking mode to Tachyon for accurate stack traces in applications with many generators or fast-changing call stacks. Patch by Pablo Galindo.

  • gh-143010: 修复 mailbox 中的一个程序缺陷,外部事件的精确时机可能导致库打开一个现有文件而不是它期望创建的文件。

  • gh-112127: 修复在比较期间取消注册回调时 atexit.unregister() 中可能的释放后使用问题。

  • gh-138122: Fix incomplete stack traces in the Tachyon profiler's frame cache when profiling code with deeply nested generators. The frame cache now validates that stack traces reach the base frame before caching, preventing broken flamegraphs. Patch by Pablo Galindo.

  • gh-142834: Change the pdb commands command to use the last available breakpoint instead of failing when the most recently created breakpoint was deleted.

  • gh-142783: 修复 zoneinfo 中描述器 _weak_cache 的释放后使用问题。描述器作为 _weak_cache 可能在对象创建期间导致崩溃。此修复确保对描述器提供的对象进行正确的引用计数。

  • gh-76007: Deprecate VERSION from xml.etree.ElementTree and version from xml.sax.expatreader and xml.sax.handler. Patch by Hugo van Kemenade.

  • gh-142784: asyncio REPL 现在在交互式会话结束时正确关闭循环。此前,这可能会导致意外的警告。由 Bartosz Sławecki 贡献。

  • gh-138122: Add binary output format to profiling.sampling for compact storage of profiling data. The new --binary option captures samples to a file that can be converted to other formats using the replay command. Patch by Pablo Galindo

  • gh-142495: collections.defaultdict 现在在从 default_factory 插入默认值时优先使用 __setitem__()。这可以防止默认值覆盖在 default_factory 返回之前设置的值的竞争条件。

  • gh-142654: Show the clearer error message when using profiling.sampling on an unknown PID.

  • gh-142560: 通过将存储标记为已导出 (这会导致重新分配尝试引发 BufferError) 修复 bytearray 搜索类方法 (find()count()index()rindex()rfind()) 中的释放后使用问题。 对于 contains()split()rsplit(),为此使用 buffer protocol

  • gh-142419: mmap.mmap.set_name() method added to annotate an anonymous memory map if Linux kernel supports PR_SET_VMA_ANON_NAME (Linux 5.17 or newer). Patch by Donghee Na.

  • gh-139971: pydoc: 确保 stdlib 模块的在线文档链接正确。

  • gh-124098: Fix issue where methods in handlers that lacked the protocol name but matched a valid base handler method (e.g., _open() or error()) were incorrectly added to urllib.request.OpenerDirector's handlers. Contributed by Andrea Mattei.

  • gh-136282: 增加通过映射协议访问创建节时对 UNNAMED_SECTION 的支持。

核心与内置函数

  • gh-143057: 当 tracemalloc 未启用时避免在 PyTraceMalloc_Track()PyTraceMalloc_Untrack() 中加锁。

  • gh-139109: Add missing terminator in certain cases when tracing in the new JIT compiler.

  • gh-142961: Fix a segfault in the JIT when constant folding len(tuple).

  • gh-142776: 修复 import.c 中的文件描述符泄漏问题。

  • gh-139757: Fix building JIT stencils on free-threaded builds.

  • gh-129068: Make concurrent iteration over the same range iterator thread-safe in the free threading build.

  • gh-142543: Fix a stack overflow on Clang JIT build configurations with full LTO.

  • gh-142448: Fix a bug when using monitoring with the JIT.

  • gh-142766: 当 generator.close() 被调用时清除生成器的帧。

  • gh-134584: Eliminate redundant refcounting from _LOAD_ATTR_INSTANCE_VALUE.

  • gh-134584: Eliminate redundant refcounting from _STORE_ATTR_WITH_HINT.

  • gh-142476: Fix a memory leak in the experimental Tier 2 optimizer when creating executors. Patched by Shamil Abdulaev.

  • gh-100964: 修复已耗尽生成器帧中的引用循环问题。由 Savannah Ostrowski 编写补丁。

  • gh-139922: Allow building CPython with the tail calling interpreter on Visual Studio 2026 MSVC. This provides a performance gain over the prior interpreter for MSVC. Patch by Ken Jin, Brandt Bucher, and Chris Eibl. With help from the MSVC team including Hulon Jenkins.

Python 3.15.0 alpha 3

Release date: 2025-12-16

工具/示例

  • gh-141692: 现在 iOS XCframework 的每个切片都包含一个 lib 文件夹,其中包含指向 libpython dylib 的符号链接。 这允许为 iOS 编译二进制模块时使用动态库链接,而不是 Framework 链接。

测试

  • gh-140381: Fix flaky test_profiling tests on i686 and s390x architectures by increasing slow_fibonacci call frequency from every 5th iteration to every 2nd iteration.

  • gh-140210: Make test_sysconfig.test_parse_makefile_renamed_vars less fragile by clearing the environment variables before parsing the Makefile.

安全性

  • gh-142145: 移除 xml.minidom 节点 ID 缓存清理中的二次方增长行为。

  • gh-42400: Fix buffer overflow in _Py_wrealpath() for paths exceeding MAXPATHLEN bytes by using dynamic memory allocation instead of fixed-size buffer. Patch by Shamil Abdulaev.

  • gh-119451: 修正 http.client 模块中一个潜在的内存拒绝服务问题。 当连接到一个恶意服务器时,它可能导致分配任意大小的内存。 这会造成多种问题包括 MemoryError、消耗交换空间、内存不足(OOM)杀死进程或容器,甚至系统崩溃。

  • gh-119342: 修正a potential memory denial of service in the plistlib 模块中一个潜在的内存拒绝服务问题。 当读取从不受信任的源接收的 Plist 文件时,它可能导致分配任意大小的内存。 这会造成多种问题包括 MemoryError、消耗交换空间、内存不足(OOM)杀死进程或容器,甚至系统崩溃。

  • gh-142754: 为通过直接实例化 ElementAttr 类创建的 xml.dom.minidom 元素和属性添加 ownerDocument 属性。请注意这种创建节点的方式不受支持;应改用像 xml.dom.Document.documentElement() 这样的创建器函数。

  • gh-142594: 修复当底层缓冲区的 closed 属性调用 detach()TextIOWrapper.close() 中的崩溃问题。

  • gh-76007: Deprecate __version__ from ctypes. Patch by Hugo van Kemenade.

  • gh-76007: Deprecate __version__ from wsgiref.simple_server. Patch by Hugo van Kemenade.

  • gh-142651: unittest.mock: 修复当 mock 从多个线程并发调用时 Mock.call_count 可能返回不准确值的线程安全问题。

  • gh-76007: Deprecate __version__ from http.server. Patch by Hugo van Kemenade.

  • gh-138122: Add --subprocesses flag to profiling.sampling CLI to automatically profile subprocesses spawned by the target. When enabled, the profiler monitors for new Python subprocesses and profiles each one separately, writing results to individual output files. This is useful for profiling applications that use multiprocessing, ProcessPoolExecutor, or other subprocess-based parallelism. Patch by Pablo Galindo.

  • gh-142595: 在 decimal 模块初始化期间增加类型检查以防止标准库损坏时的崩溃。由 Sergey B Kirpichev 编写补丁。

  • gh-142556: 修复在 asyncio 中执行最终化期间有任务被重新注册时导致的崩溃问题。 由 Kumar Aditya 编写补丁。

  • gh-138122: Add --mode=exception to the sampling profiler to capture samples only from threads with an active exception, useful for analyzing exception handling overhead. Patch by Pablo Galindo.

  • gh-142539: traceback: Fix location of carets in SyntaxErrors when the source contains wide characters.

  • gh-123241: 在 ctypes 对象的垃圾回收中避免引用计数操作。

  • gh-142451: hmac: correctly copy HMAC attributes for objects copied through HMAC.copy(). Patch by Bénédikt Tran.

  • gh-138122: The profiling.sampling flamegraph profiler now supports inverted flamegraph view that aggregates all leaf nodes. In a standard flamegraph, if a hot function is called from multiple locations, it appears multiple times as separate leaf nodes. In the inverted flamegraph, all occurrences of the same leaf function are merged into a single aggregated node at the root, showing the total hotness of that function in one place. The children of each aggregated node represent its callers, making it easier to identify which functions consume the most CPU time and where they are called from.

  • gh-112527: 在 argparse 中针对必需选项的帮助文本不再带有 " (default: None)" 扩展。

  • gh-142438: Fixed a possible leaked GIL in _PySSL_keylog_callback.

  • gh-138122: Add bytecode-level instruction profiling to the sampling profiler via the new --opcodes flag. When enabled, the profiler captures which bytecode opcode is executing at each sample, including Python 3.11+ adaptive specializations, and visualizes this data in the heatmap, flamegraph, gecko, and live output formats. Patch by Pablo Galindo

  • gh-142389: Add backtick markup support in argparse description and epilog text to highlight inline code when color output is enabled.

  • gh-142346: 修复 argparse 中当互斥组前面有位置参数或后面跟有其他可选参数或与其他可选参数混合时的用法格式化问题。

  • gh-142374: Fix cumulative percentage calculation for recursive functions in the new sampling profiler. When profiling recursive functions, cumulative statistics (cumul%, cumtime) could exceed 100% because each recursive frame in a stack was counted separately. For example, a function recursing 500 times in every sample would show 50000% cumulative presence. The fix deduplicates locations within each sample so cumulative stats correctly represent "percentage of samples where this function was on the stack". Patch by Pablo Galindo.

  • gh-142315: Pdb 现在可以从进程替换中使用的匿名管道运行脚本。由 Bartosz Sławecki 编写补丁。

  • gh-64532: Subparser help now includes required optional arguments from the parent parser in the usage, making it clearer what arguments are needed to run a subcommand. Patch by Savannah Ostrowski.

  • gh-142207: Fix: profiling.sampling may cause assertion !(has_gil && gil_requested)

  • gh-142332: argparse: 修复 argparse 的互斥组中位置参数的用法格式化问题。

  • gh-142282: 修复 winreg.QueryValueEx() 在竞争条件下意外读取垃圾缓冲区的问题。

  • gh-142318: Fix typing 'q' at the help of the interactive tachyon profiler exiting the profiler.

  • gh-75949: 修复 argparse 以在用法行因长度而换行时保留互斥组中的 | 分隔符。

  • gh-142267: 通过缓存用于参数验证的格式化器来提高 argparse 性能。

  • gh-139862: Remove color parameter from argparse.HelpFormatter constructor. Color is controlled by ArgumentParser.

  • gh-68552: MisplacedEnvelopeHeaderDefectMissing header name 缺陷现在可正确传递给 FeedParserpolicyhandle_defect 方法。

  • gh-142206: The resource tracker in the multiprocessing module can now understand messages from older versions of itself. This avoids issues with upgrading Python while it is running. (Note that such 'in-place' upgrades are not tested.)

  • gh-142214: 修复 Python 3.14.1 中 dataclasses 与标注相关的两个回归问题。

    • 如果使用了 slots=True__init__ 方法没有 __annotate__ 属性 (可能是因为使用了 init=False),现在不再引发异常。

    • 如果在 __init__ 方法上请求标注且其中一个字段在类标注中不存在,现在不再引发异常。这种情况可能发生在某些动态场景中。

    由 Jelle Zijlstra 提供补丁。

  • gh-142203: Remove the debug_override parameter from importlib.util.cache_from_source() which has been deprecated since Python 3.5.

  • gh-138122: The _remote_debugging module now implements frame caching in the RemoteUnwinder class to reduce memory reads when profiling remote processes. When cache_frames=True, unchanged portions of the call stack are reused from previous samples, significantly improving profiling performance for deep call stacks.

  • gh-116738: 修正在使用子解释器初始化三角函数表时 cmath 的数据竞争问题。

  • gh-141982: Allow pdb to set breakpoints on async functions with function names.

  • gh-74389: 当 subprocess.Popen 实例使用的 stdin 被关闭时,现在此错误将被 subprocess.Popen.communicate() 忽略而不是让该类进入不稳定状态。

  • gh-87512: 修正在 Windows 上当写入大量输入内容时 subprocess.Popen.communicate() 的超时处理问题。 在之前版本中,在写入 stdin 时会忽略超时设置,导致在子进程未快速消费输入内容时此方法无限阻塞。 现在 stdin 写入将在后台线程中执行,以允许正确地应用超时设置。

  • gh-141939: Add color to all interpolated values in argparse help, like %(default)s or %(choices)s. Patch by Alex Prengère.

  • gh-141473: 当 subprocess.Popen.communicate() 附带 inputtimeout 被调用并且是在进程死亡之前 TimeoutExpired 异常引发之后再次被调用时,它将不再会被挂起。

  • gh-141999: Correctly allow KeyboardInterrupt to stop the process when using profiling.sampling.

  • gh-142006: 修复 email.policy.default 折叠算法中的一个程序缺陷,该缺陷在行恰好结束于 max_line_length 且后跟不可折叠 token 时会错误地产生双换行符。

  • gh-141968: Remove data copy from re compilation of regexes with large charsets by using bytearray.take_bytes().

  • gh-141968: Remove data copy from encodings.idna encode() and encode() by using bytearray.take_bytes().

  • gh-141968: Remove data copy from codecs punycode encoding by using bytearray.take_bytes().

  • gh-141968: Remove data copy from wave.Wave_read.readframes() and wave.Wave_write.writeframes() by using bytearray.take_bytes().

  • gh-141968: Remove a data copy from base64.b32decode() and base64.b32encode() by using bytearray.take_bytes().

  • gh-59000: 修正 pdb 在未导入定义类的模块时针对类方法的中断点精确性问题。

  • gh-116738: 修正自由线程构建版中 re 扫描器对象的线程安全问题。

  • gh-138122: The profiling.sampling flamegraph profiler now displays thread status statistics showing the percentage of time threads spend holding the GIL, running without the GIL, waiting for the GIL, and performing garbage collection. These statistics help identify GIL contention and thread behavior patterns. When filtering by thread, the display shows per-thread metrics.

  • gh-141781: Fixed an issue where pdb.line_prefix assignment was ignored if assigned after the module was imported.

  • gh-141863: Update to use bytearray.take_bytes() for a over 10% performance improvement on pyperformance asyncio_tcp benchmark.

  • gh-141817: Add socket.IPV6_HDRINCL constant.

  • gh-105836: 修复 asyncio.run_coroutine_threadsafe() 让底层已取消的 asyncio 任务继续运行的问题。

  • gh-141570: 支持让 file-like object 在颜色检测 (_colorize.can_colorize()) 中从 fileno() 引发 OSError。 这种情况会在 sys.stdout 被重定向时发生。

  • gh-141679: Add colour to defaults in argparse help. Patch by Hugo van Kemenade.

  • gh-141686: Break reference cycles created by each call to json.dump() or json.JSONEncoder.iterencode().

  • gh-141659: 修复 AIX 上来自 _posixsubprocess 的无效文件描述符错误。

  • gh-141645: Add a new --live mode to the tachyon profiler in profiling.sampling module. This mode consist of a live TUI that displays real-time profiling statistics as the target application runs, similar to top. Patch by Pablo Galindo

  • gh-141615: Check stdin instead of stdout for use_rawinput in pdb.

  • gh-69113: Fix doctest to correctly report line numbers for doctests in __test__ dictionary when formatted as triple-quoted strings by finding unique lines in the string and matching them in the source file.

  • gh-141600: 修复 Void Linux 上的 musl 版本检测问题。

  • gh-48752: Add readline.get_pre_input_hook() function to retrieve the current pre-input hook. This allows applications to save and restore the hook without overwriting user settings. Patch by Sanyam Khurana.

  • gh-141565: Add async-aware profiling to the Tachyon sampling profiler. The profiler now reconstructs and displays async task hierarchies in flamegraphs, making the output more actionable for users. Patch by Savannah Ostrowski and Pablo Galindo Salgado.

  • gh-60107: Remove a copy from io.RawIOBase.read(). If the underlying I/O class keeps a reference to the mutable memory, raise a BufferError.

  • gh-116738: 使 csv 模块在 自由线程 构建上线程安全。

  • gh-140911: collections: 确保 UserString.rindex()UserString.index() 方法接受 collections.UserString 实例作为子参数。

  • gh-140875: 修复当在 html.parser.HTMLParser 中设置 convert_charrefs=False 时对文件结束位置上未关闭字符引用(名称型和数字型)的处理问题。

  • gh-140677: Add heatmap visualization mode to the Tachyon sampling profiler. The new --heatmap output format provides a line-by-line view showing execution intensity with color-coded samples, inline statistics, and interactive call graph navigation between callers and callees.

  • gh-139946: Distinguish stdout and stderr when colorizing output in argparse module.

  • gh-76007: pydoc: Fix DeprecationWarning being raised when generating doc for stdlib modules.

  • gh-138697: Fix inferring dest from a single-dash long option in argparse. If a short option and a single-dash long option are passed to add_argument(), dest is now inferred from the single-dash long option.

  • gh-138525: Add support for single-dash long options and alternate prefix characters in argparse.BooleanOptionalAction.

  • gh-79986: 为 email 库增加对 ReferencesIn-Reply-To 标头的解析支持,将标头内容解析为消息 ID token 的列表。这可以防止它们被错误折叠。

  • gh-135559: Flag: a dir() on a Flag enumeration now shows non-canonical members. (i.e. aliases).

  • gh-134453: 修正 POSIX 平台上 subprocess.Popen.communicate() 对于非字节形状 memoryview 实例的 input= 处理。 现在它们会被正确转换为字节形状视图而不是截断输入。 Windows 平台不存在此程序缺陷。platforms did not have this bug.

  • gh-127930: Add __all__ to tkinter.simpledialog.

  • gh-115952: Fix a potential memory denial of service in the pickle module. When reading a pickled data received from untrusted source, it could cause an arbitrary amount of memory to be allocated, even if the code that is allowed to execute is restricted by overriding the find_class() method. This could have led to symptoms including a MemoryError, swapping, out of memory (OOM) killed processes or containers, or even system crashes.

  • bpo-40350: Fix support for namespace packages in modulefinder.

文档

核心与内置函数

  • gh-134584: Eliminate redundant refcounting from _STORE_ATTR_INSTANCE_VALUE.

  • gh-142718: JIT: Fix segfault caused by not flushing the stack to memory at side exits.

  • gh-142737: 即使 io.open() 丢失,回溯信息也将在回退模式下显示。此前,这会导致解释器崩溃。由 Bartosz Sławecki 编写补丁。

  • gh-116738: Make the attributes in bz2 thread-safe on the free threaded build.

  • gh-134584: Eliminate redundant refcounting from _CALL_LIST_APPEND.

  • gh-142554: 修复当 _pylong.int_divmod() 没有精确返回长度为 2 的元组时 divmod() 中的崩溃问题。由 Bénédikt Tran 编写补丁。

  • gh-142531: 修复自由线程 GC 性能回归问题。如果有很多未跟踪的元组,GC 会运行得太频繁,导致性能低下。修复方法是将未跟踪的元组包含在"长寿命"对象计数中。由于自由线程 GC 也必须扫描冻结对象,因此现在也包含了冻结对象的数量。

  • gh-142402: 修复构造 string.templatelib.Template 时合并相邻字面量部分时的引用计数问题,防止被替换的字符串对象泄漏。

  • gh-116738: Make the attributes in zlib thread-safe on the free threaded build.

  • gh-142343: 修复 m68k 上由于不正确的汇编约束导致的 SIGILL 崩溃问题。

  • gh-142236: Improve the "Perhaps you forgot a comma?" syntax error for multi-line string concatenations to point to the last string instead of the first, making it easier to locate where the comma is missing. Patch by Pablo Galindo.

  • gh-142236: Fix incorrect keyword suggestions for syntax errors in traceback. The keyword typo suggestion mechanism would incorrectly suggest replacements when the extracted source code was incomplete rather than containing an actual typo. Patch by Pablo Galindo.

  • gh-142305: Decrease the size of the generated stencils and the runtime JIT code. Patch by Diego Russo.

  • gh-135379: Implement a limited form of register allocation known as "top of stack caching" in the JIT. It works by keeping 0-3 of the top items in the stack in registers. The code generator generates multiple versions of those uops that do not escape and are relatively small. During JIT compilation, the copy that produces the least memory traffic is selected, spilling or reloading values when needed.

  • gh-142276: Fix missing type watcher when promoting attribute loads to constants in the JIT. Patch by Ken Jin. Reproducer by Yuancheng Jiang.

  • gh-142218: 修复使用与现有键匹配的非 str 键插入拆分表字典时的崩溃问题。

  • gh-141976: Check against abstract stack overflow in the JIT optimizer.

  • gh-97850: Remove all *.load_module() usage and definitions from the import system and importlib. The method has been deprecated in favor of importlib.abc.Loader.exec_module() since Python 3.4.

  • gh-142048: 修正在自由线程构建版中指数级增加的垃圾回收延迟问题。

  • gh-65961: Stop setting __cached__ on modules.

  • gh-141770: Annotate anonymous mmap usage only when supported by the Linux kernel and if -X dev is used or Python is built in debug mode. Patch by Donghee Na.

  • gh-142029: Raise ModuleNotFoundError instead of crashing when a nonexistent module is used as a name in _imp.create_builtin().

  • gh-142029: Raise ValueError instead of crashing when empty string is used as a name in _imp.create_builtin().

  • gh-141976: Protect against specialization failures in the tracing JIT compiler for performance reasons.

  • gh-141861: Fix invalid memory read in the ENTER_EXECUTOR instruction.

  • gh-141930: 当导入模块时,使用 Python 的常规文件对象以确保完整写入 .pyc 文件否则将引发适当的错误。

  • gh-138122: Add incomplete sample detection to prevent corrupted profiling data. Each thread state now contains an embedded base frame (sentinel at the bottom of the frame stack) with owner type FRAME_OWNED_BY_INTERPRETER. The profiler validates that stack unwinding terminates at this sentinel frame. Samples that fail to reach the base frame (due to race conditions, memory corruption, or other errors) are now rejected rather than being included as spurious data.

  • gh-120158: 修正当启用或禁用监视事件太多次时的不一致状态问题。

  • gh-140638: Expose a "candidates" stat in gc.get_stats() and gc.callbacks.

  • gh-141780: Fix Py_mod_gil with API added in PEP 793: PyModule_FromSlotsAndSpec() and PyModExport hooks

  • gh-141732: 确保针对 ExceptionGroupBaseExceptionGroup__repr__() 在最初传入其构造器的异常序列后来被修改时不会发生变化。

  • gh-140638: Expose a "duration" stat in gc.get_stats() and gc.callbacks.

  • gh-139653: 如果栈指针低于限制指针 并且 高于栈基准位置则仅引发 RecursionError 或者触发一个致命错误。 如果在此边界以外则认为没有问题。 这将避免当用户空间线程与栈相交换时的误报问题。

  • gh-41779: Allowed defining the __dict__ and __weakref__ __slots__ for any class.

  • gh-139103: 在自由线程构建上改进数据类的多线程调节操作。

  • gh-141589: Change backoff counter to use prime numbers instead of powers of 2. Use only 3 bits for counter and 13 bits for value. This allows to support values up to 8191. Patch by Mikhail Efimov.

  • gh-137007: 修正一个在 JIT 编译期间会导致垃圾回收调试断言失败的程序缺陷。

  • gh-132657: For the free-threaded build, avoid locking the set object for the __contains__ method.

  • gh-134584: Eliminate redundant refcounting from _CALL_STR_1.

  • gh-134584: Eliminate redundant refcounting from _CALL_BUILTIN_O.

  • gh-134584: Eliminate redundant refcounting from _CALL_TUPLE_1. Patch by Noam Cohen

C API

构建

  • gh-131372: Add LDVERSION and EXE to the base_interpreter value of build-details.json.

  • gh-142454: 计算 JIT stencil 输入的摘要时,在将文件内容添加到哈希器之前按文件名对要哈希的文件进行排序。这确保了确定性的哈希输入从而产生确定性的哈希,与文件系统顺序无关。

  • gh-131372: build-details.py will only be installed as part of the main install (make install). make altinstall will no longer include it.

  • gh-142234: Allow --enable-wasm-dynamic-linking for WASI. While CPython doesn't directly support it so external/downstream users do not have to patch in support for the flag.

  • gh-142050: Fixed a bug where JIT stencils produced on Windows contained debug data. Patch by Chris Eibl.

  • gh-141808: 在 Windows 上的 PGO 构建场景中不会重复生成 jit stencil。

  • gh-141926: RUNSHARED is no longer cleared when cross-compiling. Previously, RUNSHARED was cleared when cross-compiling, which breaks PGO when using --enabled-shared on systems where the cross-compiled CPython is otherwise executable (e.g., via transparent emulation).

  • gh-141808: 运行 make clean-retain-profile 时保留生成的 JIT stencil。这样在使用配置文件引导优化 (PGO) 时就不会生成两次 stencil。这也允许分发者提供他们自己预构建的 JIT stencil。

  • gh-141784: 修复在 32 位 Linux 上 _remote_debugging_module.c 的编译问题。 在系统头文件之前先包括 Python.h 以确保 _remote_debugging_module.c 使用与 Python 相同的类型 (ABI)。 由 Victor Stinner 编写补丁。

  • gh-141172: Update to WASI SDK 29.

  • gh-139707: Add configure option --with-missing-stdlib-config=FILE allows which distributors to pass a JSON configuration file containing custom error messages for missing standard library modules.

  • gh-108819: Honor --with-platlibdir in the pure-Python standard library installation path, if PLATLIBDIR doesn't match the value used in LIBDIR.

Python 3.15.0 alpha 2

Release date: 2025-11-18

Windows

  • gh-140849: Update bundled liblzma to version 5.8.1.

工具/示例

  • gh-141442: 现在 iOS testbed 可正确地处理包含空格的测试参数。

  • gh-140702: 现在 iOS testbed app 将把 GITHUB_ACTIONS 环境变量暴露给被测试的 iOS app。

  • gh-139198: Remove Tools/scripts/checkpip.py script.

  • gh-139188: Remove Tools/tz/zdump.py script.

测试

  • gh-140482: 保留并恢复 stty echo 的状态作为测试环境的一部分。

  • gh-140082: 更新 python -m test 当启用彩色运行时设置 FORCE_COLOR=1 这样基于该设置运行的带转发输出的 unittest 将使用彩色输出。

  • gh-136442: 当 unittest.TestCase.setUpClass() 引发异常时使用退出码 1 而不是 5

安全性

核心与内置函数

  • gh-141579: 修复 sys.activate_stack_trampoline() 以正确地支持 perf_jit 后端。 由 Pablo Galindo 编写补丁。

  • gh-114203: 如果对象已被双向互斥关键节锁定则跳过锁定操作。

  • gh-141528: 当就其他子解释器发出警告时建议使用 concurrent.interpreters.Interpreter.close() 而不是私有的 _interpreters.destroy 函数。 由 Sergey Miryanov 编写补丁。

  • gh-141367: Specialize CALL_LIST_APPEND instruction only for lists, not for list subclasses, to avoid unnecessary deopt. Patch by Mikhail Efimov.

  • gh-141312: 修复在 range 迭代器的 __setstate__ 方法中当传入非整数参数时的断言失败问题。 由 Sergey Miryanov 编写补丁。

  • gh-140643: Add support for <GC> and <native> frames to profiling.sampling output to denote active garbage collection and calls to native code.

  • gh-140942: Add .cjs to mimetypes to give CommonJS modules a MIME type of application/node.

核心与内置函数

  • gh-140260: 修复子解释器端序表初始化中的 struct 数据竞争问题。 由 Shamil Abdulaev 编写补丁。

核心与内置函数

  • gh-140530: 修复当 raise exc from cause 执行失败时的引用泄漏问题。 由 Bénédikt Tran 编写补丁。

核心与内置函数

  • gh-140373: 当生成器对象关闭时正确发出 PY_UNWIND 事件。由 Mikhail Efimov 编写补丁。

  • gh-140729: Fix pickling error in the sampling profiler when using concurrent.futures.ProcessPoolExecutor script can not be properly pickled and executed in worker processes.

  • gh-131527: Dynamic borrow checking for stackrefs is added to Py_STACKREF_DEBUG mode. Patch by Mikhail Efimov.

  • gh-140576: 修复 tokenize.generate_tokens() 在特定错误输入情况下的崩溃问题。 由 Mikhail Efimov 编写补丁。

  • gh-140544: Speed up accessing interpreter state by caching it in a thread local variable. Patch by Kumar Aditya.

  • gh-140551: 修复当 dict.clear() 在查找阶段被调用时 dict 中的崩溃问题。 由 Mikhail Efimov 和 Inada Naoki 编写补丁。

  • gh-140517: 修复当输入的可迭代对象具有不同长度时在对设置了 strict=Truemap() 的结果进行迭代时的引用泄漏问题。 由 Mikhail Efimov 编写补丁。

  • gh-133467: Fix race when updating type.__bases__ that could allow a read of type.__base__ to observe an inconsistent value on the free threaded build.

  • gh-140471: 修复了在遇到包含非 str 的不良格式 _fieldsast.AST 节点初始化中潜在的缓冲区溢出问题。

  • gh-140443: The logarithm functions (such as math.log10() and math.log()) may now produce slightly different results for extremely large integers that cannot be converted to floats without overflow. These results are generally more accurate, with reduced worst-case error and a tighter overall error distribution.

核心与内置函数

核心与内置函数

  • gh-140406: 修复当一个对象的 __hash__() 方法返回不为 int 的对象时发生崩溃的问题。

  • gh-140358: 恢复在 GC 调试输出中的已花费时间和不可访问对象计数。 这些内容在 gc.c 重构期间被无意中移除了。 调试日志现在将再次报告已花费收集时间和不可访问对象数量。 由 Pål Grønås Drange 贡献。

  • gh-136895: Update JIT compilation to use LLVM 20 at build time.

  • gh-139109: A new tracing frontend for the JIT compiler has been implemented. Patch by Ken Jin. Design for CPython by Ken Jin, Mark Shannon and Brandt Bucher.

  • gh-140306: 修复跨解释器通道操作和共享命名空间处理中的内存泄漏问题。

  • gh-116738: Make _suggestions module thread-safe on the free threaded build.

  • gh-140301: 修复子解释器中 PyConfig 的内存泄漏问题。

  • gh-140257: 修复守护线程最终化期间在 eval_breaker 上 interpreter_clear() 和 take_gil() 之间的数据竞争问题。

  • gh-139951: 修复针对主要由小元组构成的堆不断增长导致的 GC 性能回归问题。

    • 实际跟踪对象,而非可跟踪对象的计数。 这将确保未跟踪的元组具有降低 GC 开销的预期效果。

    • 不跟踪在创建期间大部分不可跟踪的元组。 这将避免大量小元组导致过度的 GC 操作。

  • gh-140253: Wrong placement of a double-star pattern inside a mapping pattern now throws a specialized syntax error. Contributed by Bartosz Sławecki in gh-140253.

  • gh-140104: 修复 JIT 中的一个异常处理程序缺陷。 由 Ken Jin 编写补丁。 由 Daniel Diniz 报告程序缺陷。

  • gh-140149: Speed up parsing bytes literals concatenation by using PyBytesWriter API and a single memory allocation (about 3x faster).

  • gh-140061: 修正检查对象是否被唯一引用的功能以确保自由线程兼容性。 由 Sergey Miryanov 编写补丁。

  • gh-140080: Fix hang during finalization when attempting to call atexit handlers under no memory.

  • gh-139871: Update bytearray to use a bytes under the hood as its buffer and add bytearray.take_bytes() to take it out.

  • gh-140067: 修复子解释器创建中的内存泄漏问题。

  • gh-139914: 恢复对 HP PA-RISC 的支持,它具有向上增长的栈。

  • gh-139817: Attribute __qualname__ is added to typing.TypeAliasType. Patch by Mikhail Efimov.

  • gh-135801: Many functions related to compiling or parsing Python code, such as compile(), ast.parse(), symtable.symtable(), and importlib.abc.InspectLoader.source_to_code() now allow to specify the module name. It is needed to unambiguous filter syntax warnings by module name.

  • gh-139640: ast.parse() 将不再针对 finally 中的 return/break/continue 发出语法警告 (参见 PEP 765) -- 它们只会在编译期间发出。

  • gh-139640: 修复在多个模块中当某些语法警告具有相同消息并从相同行发出时被漏掉的问题。 修复 finally 代码块中重复的警告。

  • gh-139475: Changes in stackref debugging mode when Py_STACKREF_DEBUG is set. We use the same pattern of refcounting for stackrefs as in production build.

  • gh-139269: Fix undefined behavior when using unaligned store in JIT's patch_* functions.

  • gh-138944: 修复当无效的语法与有效的 import ... as ...from ... import ... as ... 语句出现在同一行时的 SyntaxError。 由 Brian Schubert 编写补丁。

  • gh-138857: Improve SyntaxError message for case keyword placed outside match body.

  • gh-131253: Support the --enable-pystats build option for the free-threaded build.

  • gh-136327: Errors when calling functions with invalid values after * and ** now do not include the function name. Patch by Ilia Solin.

  • gh-134786: If Py_TPFLAGS_MANAGED_DICT and Py_TPFLAGS_MANAGED_WEAKREF are used, then Py_TPFLAGS_HAVE_GC must be used as well.

C API

构建

  • gh-140454: When building the JIT, match the jit_stencils filename expectations in Makefile with the generator script. This avoid needless JIT recompilation during make install.

  • gh-140768: 当 WASI SDK 版本与受支持版本不匹配时发出警告。

  • gh-140513: 当 _Py_TAIL_CALL_INTERP 被启用但 preserve_nonemusttail 不受支持时生成明确的编译错误。

  • gh-140475: Support WASI SDK 25.

  • gh-140239: Check statx availability only on Linux (including Android).

  • gh-140189: iOS 构建被添加到 CI。

  • gh-137618: PYTHON_FOR_REGEN 现在需要 Python 3.10 至 Python 3.15。 由 Adam Turner 编写补丁。

Python 3.15.0 alpha 1

发布日期: 2025-10-14

macOS

  • gh-115119: Update macOS installer to use libmpdecimal 4.0.1.

  • gh-124111: Update macOS installer to use Tcl/Tk 9.0.2.

  • gh-132339: Update macOS installer version of OpenSSL to 3.5.4.

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

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

Windows

  • gh-139810: 现在使用 py install 3[.x]-dev 安装时将会选择最终版本和预发布版本。

  • gh-139573: 将捆绑的 OpenSSL 版本升级至 3.0.18。

  • gh-138896: 修复在未更新的 Windows 机器上安装 C 运行时导致的错误

  • 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-139330: SBOM 生成工具不会针对 Modules/expat/refresh.sh 脚本交叉检查版本和校验和值,导致这些值在例程更新期间变得过时。

  • gh-132006: XCframeworks 现在包括隐私声明以满足 Apple App Store 的提交要求。

  • gh-138171: 增加一个用于构建 iOS XCframework 的脚本。 作为此项改变的一部分,最高层级的 iOS 文件夹被移动为 Apple 文件夹的子目录。

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

  • gh-137484: 由 Tools/wasm/wasi 将构建的 Python 放入以 build 加三个数值而非 "build" 命名的目录。

  • gh-137025: The wasm_build.py script has been removed. Tools/wasm/emscripten and Tools/wasm/wasi should be used instead, as described in the Dev Guide.

  • gh-137248: 给 Tools/wasm/wasi 增加 --logdir 选项用来指明将日志文件写到何处。

  • gh-137243: 当直接从发布 tarball 中提取文件时让 Tools/wasm/wasi 在 /opt 中检测 WASI SDK 安装情况。

  • 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-139208: 修复 regrtest --fast-ci --verbose: 不会再忽略 --verbose 选项。 由 Victor Stinner 编写补丁。

  • gh-138313: Restore skipped test and add janky workaround to prevent select buildbots from failing with a ResourceWarning.

  • 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-139700: 检测 zip64 中央目录记录末尾的一致性。 在没有字节数据被附加到 ZIP 文件时支持使用 "zip64 可扩展数据" 的记录。

  • gh-139400: xml.parsers.expat: 确保父级 Expat 解析器当其不再被 ExternalEntityParserCreate() 所创建的子解析器所引用时只会被作为垃圾回收一次。 由 Sebastian Pipping 编写补丁。

  • gh-139283: sqlite3: 正确处理 Cursor.fetchmany 可获取的最大行数并拒绝 Cursor.arraysize 使用负值。 由 Bénédikt Tran 编写补丁。

  • 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: 根据 HTML5 标准修复了 html.parser.HTMLParser 中的 CDATA 段解析问题:] ]>]] > 不再终止 CDATA 段。新增私有方法 _set_support_cdata(),可用于指定如何解析 <[CDATA[ —— 在外部内容(SVG 或 MathML)中作为 CDATA 段解析,或在 HTML 命名空间中作为伪注释解析。

  • 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地址,以防止过多的内存消耗和轻微的拒绝服务。

IDLE

  • gh-96491: 去除在保存到文件后 IDLE shell 标题栏中重复的版本号。

  • gh-139742: 在 IDLE 中为模板字符串的 t 字符串前缀设置颜色,如同 f 字符串前缀一样。

文档

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

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

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

核心与内置函数

  • gh-140000: 修复当 typing.TypeAliasType, typing.TypeVar, typing.ParamSpectyping.TypeVarTuple 的实例及其 __name__ 属性之间存在引用循环时潜在的内存泄漏问题。 由 Mikhail Efimov 编写补丁。

  • gh-140009: 改进使用字典条目扩展列表的性能。

  • gh-139988: 修复当创建 Union 类型失败时的内存泄漏问题。 由 Bénédikt Tran 编写补丁。

  • gh-139748: 修复在接受路径字符串或字节串的函数如 compile()os.system() 的错误分支中的引用泄漏问题。 由 Bénédikt Tran 编写补丁。

  • gh-139516: 修复 lambda 的冒号在 tokenizer 的 f-字符串中错误开启格式说明的问题。

  • gh-63161: 当在 Python 源文件中指定非 UTF-8 编码格式时支持非 UTF-8 shebang 和注释。 针对默认 (UTF-8) 编码格式检测注释中的解码错误。 在回溯中显示针对默认编码格式的解码错误的行和位置。 在回溯中显示包含与 BOM 冲突的 coding cookie 的行。

  • gh-139116: 防止当多个线程同时启动、停止和使用 tracemalloc 时发生死锁。

  • gh-139275: 修复当系统不包含 process_vm_readv_remote_debugging_module.c 中的编译问题。 由 Pablo Galindo 编写补丁。

  • gh-133059: 将缓存小正整数的数量从 256 增加到 1024。

  • gh-74857: PEP 538: 将 POSIX 语言区域转换为基于 UTF-8 的语言区域。 由 Victor Stinner 编写补丁。

核心与内置函数

  • gh-138558: 修正在 annotationlib 中对不常见 t-字符串标注的处理。 由 Dave Peck 编写代码。

  • gh-134466: 当不允许设置 termios 属性时不在降级的环境中运行 PyREPL。

  • gh-138794: 当使用When a new tracing function is registered with PyRefTracer_SetTracer() 注册新的追踪函数时,会将当前调用替换为追踪函数并将 object 设为 NULLevent 设为 PyRefTracer_TRACKER_REMOVED。 这将在新注册被注册之前发生。 由 Pablo Galindo 编写补丁。

  • gh-71810: 修复了在字节数为零的有符号转换中,(-1).to_bytes() 未引发 OverflowError 的问题。 由 Sergey B Kirpichev 提供补丁。

  • gh-138716: 对于 assert a := b 这样的情况改进用于 assertSyntaxError 消息。

  • gh-105487: 从 types.GenericAlias__dir__() 条目中移除不存在的 __copy__(), __deepcopy__()__bases__

  • gh-138192: 修复了 contextvars 初始化问题以使所有子解释器都已分配 MISSING 值。

  • gh-138479: 修复了当泛型对象的 __typing_subst__ 返回非 tuple 类型对象时出现的崩溃问题。

  • gh-138431: 修复 JIT 优化器在处理字符串和元组的往返调用时出现的程序缺陷。

  • gh-138378: 将全局转常量 JIT 优化器阶段移入主 JIT 优化器阶段

核心与内置函数

  • gh-138372: 修复了针对涉及 模板字符串字面值 的错误下标表达式发出 SyntaxWarning 的问题。 由 Brian Schubert 编写补丁。

  • gh-138302: 现在如果操作数为紧凑整数则 BINARY_OP 将专门化为 BINARY_OP_ADD_INT, BINARY_OP_SUBTRACT_INTBINARY_OP_MULTIPLY_INT

  • gh-138318: 默认 REPL 现在会在内置名称 (例如 setformat()) 被用作属性名称 (例如 value.settext.format) 时避免高亮它们。

  • gh-138349: 修复了模块同时包含模块级注解和推导式时可能发生的崩溃问题。

  • gh-69605: 修复 REPL 的导入自动补全中缺失某些标准库子模块的问题。

  • gh-61206: 现在 zipimport 将支持 zstandard 压缩的 zip 文件条目。

核心与内置函数

  • gh-137838: 通过增加可能的退出存根修复 JIT 追踪缓冲区溢出问题。 由 Donghee Na 编写补丁。

  • gh-71679: Use the same quoting algorithm for the repr of bytearrays as for bytes objects and strings -- use double quotes for quoting if the bytearray contains single quotes and does not contain double quotes.

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

  • gh-138004: 在 Solaris/Illumos 平台上,线程名称现在将被编码为 ASCII 以避免在不支持非 ASCII 名称的系统 (例如 OpenIndiana) 上出错。

  • gh-137976: Removed localtime from the list of reported system timezones.

核心与内置函数

  • gh-137992: Ensure that PyRefTracer_SetTracer() sync with all existing threads when called to avoid races in the free threaded build. Patch by Pablo Galindo

  • 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: 修正针对无效 mock 断言的 AttributeError 消息中出现两个句点的问题。

  • gh-137433: 修复在 free threading 构建版中主线程正执行关闭解释器操作期间当守护线程启用或禁用性能分析或跟踪时潜在的死锁问题。

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

  • gh-37817: 允许对内置类的直接子类的 __bases__ 赋值。

  • gh-132732: 在 JIT 构建中通过常量加载 uops (_POP_TWO_LOAD_CONST_INLINE_BORROW_POP_TOP_LOAD_CONST_INLINE_BORROW),然后同时移除两者以减少指令计数来优化 _COMPARE_OP, _CONTAINS_OP, _UNARY_NEGATIVE, _UNARY_NOT_UNARY_INVERT

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

  • gh-133143: 增加 sys.abi_info 对象以更方便地访问 ABI 信息。

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

  • gh-120037: 当使用 ._pth 文件时禁止用户级 site packages 目录,即使其中包含 import site

  • gh-58124: 修正代码页编解码器的 Unicode 错误中 Python 编码格式名称:使用 "cp65000" 和 "cp65001" 而不是无效的 Python 代码名称 "CP_UTF7" 和 "CP_UTF8"。 由 Victor Stinner 编写补丁。

  • gh-136966: 现在 object.__dict____weakref__ 描述器将使用每解释器单独描述器实例,并在所有需要它们的类型间共享。 这将加快类创建速度,并有助于避免引用循环。

  • gh-137314: 修复了原始 f-字符串不正确地解读格式说明符中的转义序列的回归问题。 原始 f-字符串现在会正确地保留格式说明符中的反斜杠字面值,以与自 Python 3.11 以来的行为相匹配。 例如,rf"{obj:\xFF}" 现在会正确地产生 '\\xFF' 而不是 'ÿ'。 由 Pablo Galindo 编写补丁。

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

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

  • gh-137291: 现在 perf 性能分析器可以在已提供之前的帧求值 API 时被使用。

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

  • gh-88886: 现在编解码器查找函数在将编码格式名称传递给搜索函数之前再次仅对其进行最基本的规范化处理:将所有 ASCII 字母转换为小写,空格替换为连字符。 这恢复了 Python 3.9 之前的行为。

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

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

  • gh-132732: 在 JIT 构建中优化对 _COMPARE_OP_INT , _COMPARE_OP_FLOAT_COMPARE_OP_STR 的常量比较

  • gh-127598: 在传入 -S 选项时通过向异常添加特别文本来改进 ModuleNotFoundError。 由 Andrea Mattei 编写补丁。

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

  • gh-74185: 现在 ImportErrorModuleNotFoundError__repr__() 当 "name" 和 "path" 在构造时作为关键字参数给出时会将其显示为 name=<name>path=<path>。 由 Serhiy Storchaka, Oleg Iarygin 和 Yoav Nir 编写补丁。

核心与内置函数

核心与内置函数

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

核心与内置函数

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

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

  • gh-132657: 通过移除自由线程构建中的锁提升了 frozenset 的性能。

  • 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: 在执行垃圾回收期间,将清理指向在终结器运行中被创建的不可达对象的弱引用。 如果这些弱引用未被清理,它们可以揭示相应的不可达对象。

  • gh-136355: Deprecate -b and -bb command line options and schedule them to become no-op in Python 3.17.

  • 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-136003: Fix threading.Thread objects becoming incorrectly daemon when created from an atexit callback or a pending call (Py_AddPendingCall()).

  • 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: 在 free threading 构建版本中,非阻塞互斥锁尝试在锁被占用时会立即返回,而不再进行短暂的忙等待。

  • 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: 将整数运算限定为仅针对紧凑整数。 这是 CPython 的内部变更。

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

  • gh-135422: 在 gh-134036 之后修复 SyntaxError 消息中的回归问题。

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

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

核心与内置函数

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

  • gh-131798: 在长度已知时优化 JIT 中的 _CALL_LEN。 由 Tomas Roun 编写补丁。

  • gh-131798: 在 JIT 编译的代码中优化 _UNARY_NEGATIVE

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

  • gh-131798: 在 JIT 编译的代码中优化 _UNARY_INVERT

  • gh-131798: 在返回类型已知时优化掉 JIT 中的 _CALL_TYPE_1。 由 Tomas Roun 编写补丁。

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

  • gh-131798: 在 JIT 编译的代码中将 _CHECK_METHOD_VERSION 优化为 _CHECK_FUNCTION_VERSION_INLINE

核心与内置函数

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

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

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

核心与内置函数

  • gh-117852: 修复 athrow() 的参数检查问题。

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

  • gh-131798: 允许 JIT 移除不必要的 _ITER_CHECK_TUPLE 操作。

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

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

  • gh-131798: 使 JIT 优化器知识对字符串/列表/元组进行切片将返回同样的类型。

  • gh-134584: 增加传给 JIT 编译器的引用计数清除操作。 由 Ken Jin 编写补丁。

  • gh-131798: 优化 _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW

核心与内置函数

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

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

  • gh-131798: JIT: 将 _LOAD_SMALL_INT 替换为 _LOAD_CONST_INLINE_BORROW

  • gh-131798: 改进 JIT 优化已缓存类属性和方法载入的能力。

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

  • gh-131798: 改进 JIT 将未知类收窄至常量值的能力。

  • gh-134268: 增加 _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW 并用它来进一步优化 CALL_ISINSTANCE

  • gh-131798: 将 CALL_LIST_APPEND 拆分为多个 uops。 由 Diego Russo 编写补丁。

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

  • gh-134170: 为 sys.unraisablehook() 默认增加彩色。

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

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

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

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

  • gh-134036: 改进当使用了无效的 raise 语句时的 SyntaxError 消息。

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

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

  • gh-133400: 修复 _pyrepl 模块中的 Ctrl+D (^D) 行为以匹配 3.13 版之前的旧 REPL 行为。

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

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

  • gh-133711: 实现 PEP 686: 默认启用 Python UTF-8 模式。 由 Adam Turner 编写补丁。

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

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

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

  • gh-131798: 通过将返回类型设为 int 允许 JIT 移除 _GET_LEN 之后的 int 守卫。

  • gh-131798: 将 CALL_ISINSTANCE 拆分为多个,允许 JIT 移除其中一部分。

  • gh-132554: 将迭代操作修改为对序列使用“虚拟迭代器”。 不再创建迭代器,而是将一个代表下一索引的带标签整数推入栈的可迭代对象之上。 对于非序列迭代器,则推入 NULL

  • gh-130821: 加强错误的类型错误消息并使其更具一致性。 由 Semyon Moroz 编写补丁。.

  • gh-131798: 收窄返回类型和常量求值 CALL_ISINSTANCE 为 JIT 中已知值的子集。 由 Tomas Roun 编写补丁。

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

  • gh-132732: 将在 JIT 优化器中将自动常量求值字节码运算标记为纯操作。

核心与内置函数

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

  • gh-132042: 通过仅计算一次类型槽位使类创建时间加快 12%。 由 Sergey Miryanov 编写补丁。

  • gh-133379: 修正错误消息中 arguments 的用法。

  • gh-127266: 在自由线程构建版中,避免在类型最初创建之后由更新类型槽位或类型旗标导致的数据竞争问题。 对于这些(通常很罕见的)情况,使用停止世界机制。 移除在读取或写入类型旗标时对原子化的使用。 原子化的使用不足以避免竞争(因由旗标有时会被不加锁且非原子化地读取)也不再是必需的。

  • gh-130425: 当使用 del obj.attrattr 不存在时增加 "Did you mean: 'attr'?" 提示。

  • gh-128640: 修复在子解释器中使用线程时的崩溃问题。

  • gh-116738: 使用 json 模块在自由构建构建上是线程安全的。

核心与内置函数

  • gh-119494: 当试图删除类型的属性时的异常文本内容更为明确。

C API

构建

  • gh-138489: 当通过 build_wasmbuild_emscripten 为 WASI 执行交叉编译时,build-details.json 步骤现在将被包括在构建过程中,就像原生构建一样。

    这将修正 libinstall 任务在进程执行期间需要 build-details.json 文件的问题。

  • gh-138497: JIT 在构建时使用的 LLVM 版本现在可使用 LLVM_VERSION 环境变量来修改。 使用此功能你需要自担风险,因为只有一个受官方支持的 LLVM 版本。 要了解更多信息,请查看 Tools/jit/README.md

  • gh-95952: 当针对 WASI 进行交叉编译时,要求显式地设置 HOSTRUNNER 环境变量。

    需要这个是因为 macOS 缺少适当的 CLI 工具来设置合理的默认值。

  • gh-138061: 通过使 JIT stencil 头文件生成确定化来确保可重复构建。

  • gh-128042: 现在 ./configure 会在 --enable-optimizationsCFLAGS=-O0 同时被设置时发出警告,建议将 -O0CFLAGS 中移除以优化性能。 由 Taegyun Kim 编写补丁。

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

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

  • gh-135927: 修复当传入 /std:clatest 选项时 MSVC 的构建问题。

  • 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: 现在 ctypes 模块会针对 alloca(3) 的定义执行更具可移植性的测试,修复 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: 在运行时而不是编译时检查 strftime() 的行为以支持交叉编译。 移除内部宏 _Py_NORMALIZE_CENTURY

  • gh-127545: 修复在 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-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: 通过将返回类型设为 int 允许 JIT 移除 _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-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 (或 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" 的字符串参数现在会自动去除缩进。 这使得 "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: 修复在 free threading 构建中,当构造一个包含非字节码编译器生成类型实例的 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: 为 free threading 修复两个更多的 bytearray 函数。

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

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

  • gh-129107: 使 bytearray 迭代器在 free threading 下安全。

  • 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: 修复了在 free threading 构建中,当 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: 使 bytearrayfree threading 下安全。

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

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-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-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-124375: 修复了在自由线程构建中,当垃圾回收与新线程启动同时进行时发生的崩溃。

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

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

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

核心与内置函数

  • 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 现在对于 Blake2 会无条件地使用 vendored HACL* 库。 Python不再接受 libb2 作为 Blake2 的可选依赖。

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

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

核心与内置函数

  • 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: 针对 list.index(), range.index(), deque.index(), deque.remove()ShareableList.index()ValueError 消息不再包含搜索值 的 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-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 中,这将允许其形式的延迟引用计数。对于默认和自由线程构建,这为未来未装箱整数设置了基础设施。

核心与内置函数

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 目前是否启用。 在默认构建版中它将总是返回 True 因为 GIL 始终被启用。 在自由线程构建版中,它可能返回 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: 现在 interactive 解释器已在 Python 中实现,允许许多新功能,如颜色、多行输入、历史记录查看和粘贴模式。 由 Pablo Galindo、Łukasz Langa 和 Lysandros Nikolaou 基于 PyPy 项目的代码贡献。

  • gh-74929: 实现PEP 667:转换 FrameType.f_localsPyFrame_GetLocals(),当帧引用函数或推导式时返回一个直写代理对象。

  • gh-116767: 修复编译器在'async with'具有许多上下文管理器时崩溃的问题。

  • gh-118335: 更改第 2 层级解释器的使用方式。 不再是设置 -X uops 或设置环境变量 PYTHON_UOPS=1 再运行 Python,现在此选择是在构建时通过配置 --enable-experimental-jit=interpreter 来设置的。

    注意! 这会将负责启用或禁用微操作的环境变量更改为 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 的做法已被设为 soft deprecated

  • 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: The configure option --with-system-libmpdec now defaults to yes. The bundled copy of libmpdecimal will be removed in 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 now uses pkg-config to detect decimal dependencies if the --with-system-libmpdec option is given.

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() 现在保留在协程中引发的 CancelledErrorTimeoutErrorInvalidStateError 的追踪信息。

  • 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 中在创建新的 _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> 在释放时仍有挂起的操作,可能导致进程崩溃 的实例。

  • 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) 返回对常量零的 strong reference。由 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-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: 始终在 functools.partial() 对象的 repr() 中包括 module 名称。 由 Furkan Onder 和 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: 添加一个选项 (--enable-experimental-jit 针对基于 configure 的构建而 --experimental-jit 针对基于 PCbuild 的构建) 来构建一个 实验性的 即时编译器,基于 copy-and-patch

  • 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.Fractioncomplex 实例之间进行地板除、模或除模操作时混淆的回溯。

  • 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 上可用。

    弃用 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.statvfsos.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 使用的后端 (editlinereadline) 添加了 readline.backend

  • gh-112328: [Enum] 将 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: Deprecate sys._enablelegacywindowsfsencoding(). Use PYTHONLEGACYWINDOWSFSENCODING instead. Patch by 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: 如果 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_ONETIER_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: 现在使用 受限 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。- 第二部分根据我们拥有的不同分词模式(字符串,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: 用 #ifndef HAVE_PTHREAD_STUBS 保护 assert(tstate->thread_id > 0)。 这允许 pydebug 构建在(目前)缺少线程支持的 WASI 下工作。

  • 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: 将 varsdirnextgetattriter 恢复为不使用 argument clinic。

  • gh-84805: 为 METH_NOARGSMETH_O 扩展函数自动生成签名。

  • gh-107758: 通过确保 lltrace 特性所使用的 dump_stack() 例程(低层级解释器调试)绝不会调用 Python 中实现的 __repr__ 方法使得其对于递归具有健壮性。 同时使得用于第 2 层级 uops 的类似输出出现于 stdout (而非 stderr),以与 ceval.c 中的 lltrace 代码相匹配。

  • 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_FileSystemDefaultEncodingPy_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 已被弃用并将在 3.15 中移除。 其设计过于陈旧并且 web 世界早已抛弃了 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_SSLSSL_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_OPCODEopcode.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(<format 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_targetoparg

  • 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 黑洞 (sysctl net.inet.tcp.blackhole=2sysctl 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(),但返回一个 strong reference 而不是 borrowed reference。 由 Victor Stinner 编写补丁。

  • gh-105927: 弃用 PyWeakref_GetObject()PyWeakref_GET_OBJECT() 函数:改用新的 PyWeakref_GetRef() 函数。 由 Victor Stinner 编写补丁。

  • gh-105927: 增加 PyWeakref_GetRef() 函数:类似于 PyWeakref_GetObject() 但会返回一个 strong reference,或者如果引用对象不再存活则返回 NULL。 由 Victor Stinner 编写补丁。

  • gh-105922: 添加 PyImport_AddModuleRef(): 类似于 PyImport_AddModule(),但返回一个 strong reference 而不是 borrowed reference。 由 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: 弃用 PyImport_ImportModuleNoBlock() 函数,它自 Python 3.3 开始仅是 PyImport_ImportModule() 的一个别名。 由 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.ParamSpecast.TypeVarTuple 的实例。

    typing.TypeVartyping.ParamSpectyping.ParamSpecArgstyping.ParamSpecKwargstyping.TypeVarTupletyping.Generic 现在是用 C 而非 Python 实现的。

    新增了字节码指令 LOAD_LOCALSLOAD_CLASSDICT_OR_GLOBALLOAD_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 在请求的哈希算法虽然作为 hashlib 本身的一部分单独可用但在 OpenSSL 中不可用时引发异常的程序缺陷。 现在它将正确地回退至内置算法。 举例来说,这种情况可能发生在你的 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-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中移除。

文档

测试

  • 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.islinkos.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* 项目的经过正式验证、抗侧信道攻击的代码。 内置实现仅在 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: 在 socket 中当 libc getaddrinfo() 实现在返回错误时在输出指针中留下垃圾时避免潜在的意外 freeaddrinfo 调用(双重释放)。 最初由 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-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 性能。

核心与内置函数

  • bpo-32782: 从 ctypes 长度为0的数组构建 memoryview 时,现在会报告正确的itemsize,而不是总是给出0的值。

  • gh-100833: 通过移除防御性的 volatile 限定符来加速 math.fsum()

  • gh-100805: 修改 random.choice() 实现,使其再次与NumPy数组一起工作。

  • gh-100813: 添加 socket.IP_PKTINFO 常量。

  • gh-100792: 使 email.message.Message.__contains__() 速度提高一倍。

  • gh-91851: 对 fractions.Fraction.__round__()fractions.Fraction.__ceil__()fractions.Fraction.__floor__() 进行微优化。

  • gh-90104: 如果数据类字段定义有循环引用,则在 repr 上避免 RecursionError。

  • gh-100689: 通过静态分配 PyExpat_CAPI 胶囊来修复 pyexpat 中的崩溃。

  • gh-100740: 修复 unittest.mock.Mock 不尊重以 assert 前缀开头的属性名的规范。

  • gh-91219: 更改 SimpleHTTPRequestHandler 以支持子类化来提供一组不同的索引文件名,而不是使用 __init__ 参数。

  • gh-100690: 不安全的 Mock 对象现在将在访问与断言名称匹配但没有 assert_ 前缀的属性时引发 AttributeError,例如访问 called_once 而不是 assert_called_once。除了已经对带有前缀 assertassretasertaseertassrt 的属性访问发生这种情况之外。

  • gh-89727: 通过使用 isinstance() 检查来检查栈顶,简化和优化 os.walk()

  • gh-100485: 添加 math.sumprod() 以计算乘积之和。

  • gh-86508: 修复 asyncio.open_connection() 跳过绑定到不同族的本地地址。由 Kumar Aditya 提供补丁。

  • gh-97930: importlib.resources.files 现在接受模块作为锚点,而不仅仅是包。如果传递了一个模块,资源将解析为该模块相邻的位置(在同一包中或在包根目录中)。该参数已从 package 重命名为 anchor,并为那些通过关键字传递的提供了兼容性填充。此外,新的 anchor 参数现在是可选的,将默认为调用者的模块。

  • gh-100585: 修复了 importlib.resources.as_file 留下文件指针未关闭的错误。

  • gh-100562: 将 pathlib.Path.absolute() 的性能提高了近 2 倍。这是以 pathlib.Path.cwd() 的性能退步为代价的,后者在用户代码中一般使用频率较低。

  • gh-100519: 对 http.cookiejar.eff_request_host() 进行了小的简化,提高了可读性,并更好地匹配了 RFC 的措辞。

  • gh-100287: 修复了 unittest.mock.seal()unittest.mock.AsyncMock 的交互问题。

  • gh-100488: 添加 Fraction.is_integer() 以检查 fractions.Fraction 是否为整数。这提高了与 floatint 的鸭子类型兼容性。

  • gh-100474: http.server 现在在尝试提供索引页面之前会检查它是否确实是一个常规文件。这避免了名为 index.html 的目录引起的问题。

  • gh-100363: 通过移除冗余的 getpid 检查来加速 asyncio.get_running_loop()。补丁由 Kumar Aditya 提供。

  • gh-78878: 修复了创建 _ctypes.CField 实例时崩溃的问题。

  • gh-100348: 通过在 close 中移除 _read_ready_cb 来修复 asyncio._SelectorSocketTransport 中的引用循环。

  • gh-100344: 为 asyncio.current_task() 提供 C 实现,速度提升 4 到 6 倍。

  • gh-100272: 修复 OrderedDict 的 JSON 序列化问题。现在它能保持键的顺序。

  • gh-83076: Mock()AsyncMock() 的实例化现在快了 3.8 倍。

  • gh-100234: 为 random.expovariate() 的 lambd 参数设置了默认值 1.0。

  • gh-100228: 当从多线程进程调用 os.fork()os.forkpty() 时,可能会引发 DeprecationWarning。使用线程进行 fork 是不安全的,可能导致死锁、崩溃和难以察觉的问题。没有警告并不意味着 fork 调用实际上是安全的,因为 Python 可能不知道所有线程。

  • gh-100039: 改进了枚举和标志的签名。

  • gh-100133: 修复了 asyncio 中的一个回归问题,其中子进程有时会丢失从管道接收的数据。

  • bpo-44592: 修复了 csv.DictWriterextrasaction 参数大小写处理不一致的问题。

  • gh-100098: 修复了 tuple 子类在被用作枚举值时被强制转换为 tuple 的问题。

  • gh-85432: 将 datetime.time.strftime() 的纯 Python 实现中的 fmt 参数重命名为 format。将 datetime.datetime.fromtimestamp()t 参数重命名为 timestamp。这些更改意味着纯 Python 实现中的参数名称现在与 C 实现中的参数名称匹配。由 Alex Waygood 提供补丁。

  • gh-98778: 更新 HTTPError,使其即使在 fpNone 时也能正确初始化。由 Donghee Na 提供补丁。

  • gh-99925: 统一了 json.dumps(float('nan'), allow_nan=False)json.dumps(float('nan'), allow_nan=False, indent=<SOMETHING>) 之间的 JSON 序列化错误消息。现在两者都包括无法序列化的值的表示。

  • gh-89727: 通过将 os.walk() 调整为迭代方式而非递归方式修复 os.walk() 在深层目录结构上会发生 RecursionError 的问题。

  • gh-94943: 向 Enum__repr__() 添加 数据类支持。当从 dataclass 继承时,仅在成员的 repr() 的值部分显示字段名称,而不显示 dataclass 的类名。

  • gh-83035: 修复 inspect.getsource() 对带有嵌套括号的装饰器调用的处理。

  • gh-99576: 修复 LWPCookieJarMozillaCookieJar.save() 方法:在重复保存时未截断保存的文件。

  • gh-94912: 添加 inspect.markcoroutinefunction() 装饰器,手动将函数标记为协程,以利于 iscoroutinefunction()

  • gh-99509: 为 multiprocessing.queues.Queue 添加 PEP 585 支持。

  • gh-99482: 从多个 stdlib 模块中移除 Jython 部分兼容性代码。

  • gh-99433: 修复模块中对 types.MethodWrapperTypedoctest 失败。

  • gh-85267: 对 inspect.signature() 处理 __text_signature__ 的多项改进。 - 修复了 inspect.signature() 丢弃参数的情况 - 修复了 inspect.signature() 引发 tokenize.TokenError 的情况 - 允许 inspect.signature() 理解涉及常量二元运算的默认值 - inspect.signature() 文档说明仅引发 TypeErrorValueError,但有时会引发 RuntimeError。这些情况现在会引发 ValueError - 移除了一个死代码路径

  • gh-91166: 优化 asyncio 以避免在写入套接字时过度复制,并在平台支持时使用 sendmsg()。由 Kumar Aditya 提供补丁。

  • gh-98030: 从Linux添加缺失的TCP套接字选项: TCP_MD5SIG, TCP_THIN_LINEAR_TIMEOUTS, TCP_THIN_DUPACK, TCP_REPAIR, TCP_REPAIR_QUEUE, TCP_QUEUE_SEQ, TCP_REPAIR_OPTIONS, TCP_TIMESTAMP, TCP_CC_INFO, TCP_SAVE_SYN, TCP_SAVED_SYN, TCP_REPAIR_WINDOW, TCP_FASTOPEN_CONNECT, TCP_ULP, TCP_MD5SIG_EXT, TCP_FASTOPEN_KEY, TCP_FASTOPEN_NO_COOKIE, TCP_ZEROCOPY_RECEIVE, TCP_INQ, TCP_TX_DELAY.

  • gh-88500: 减少了 urllib.parse.unquote()urllib.parse.unquote_to_bytes() 在大值上的内存使用。

  • gh-96127: inspect.signature 在使用模拟对象调用时会引发 TypeError。现在它正确地返回 (*args, **kwargs) 作为推断签名。

  • gh-95882: 修复了 asynccontextmanager() 中的3.11回归问题,该问题导致它传播带有不正确回溯的异常;并修复了 contextmanager() 中的3.11回归问题,该问题导致它为 StopIteration 传播带有不正确回溯的异常。

  • gh-78707: 弃用向 pathlib.PurePath.relative_to()is_relative_to() 传递多于一个位置参数。

  • gh-92122: 修复了 enum 模块中文档字符串的reStructuredText语法错误。

  • gh-91851: 优化了 Fraction 对小组件的算术运算。

  • bpo-24132: 使 pathlib.PurePathPath 可子类化(初始为私有)。之前,尝试实例化一个子类会引发 AttributeError。由Barney Gale提供补丁。

  • bpo-40447: 在 compileall.compile_file()compileall.compile_dir()stripdir 参数中接受 os.PathLike (如 pathlib.Path) 。

  • bpo-36880: 修复了当 ctypes 回调返回类型为 py_object 且返回 None 时的引用计数问题,该问题可能导致崩溃。

文档

测试

  • 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: 在 os.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 类支持下标操作,使其成为 generic type

  • 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 中添加新工具,用于从操作码定义列表生成解释器切换语句。 这仅影响添加、修改或删除指令定义。 指令定义现在以 custom DSL (under development) 的形式存在于 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: Don't use vendored libmpdec headers if --with-system-libmpdec is passed to configure. Don't use vendored libexpat headers if --with-system-expat is passed to configure.

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"启动方法 的代码会受到影响。

    抽象套接字没有权限设置,可能允许同一 network namespace (通常是整个系统) 内的任何用户向 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-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 代码块以处理在通过挂起的帧调用 close()throw() 期间引发的异常。

  • gh-95977: 使用 vectorcall 优化调用 __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: 减少由 str.split()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-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-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 中的弃用警告消息,从

    It is deprecated to return a value!=None

    to

    It is deprecated to return a value that is not None from a test case

  • 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: 在把 sqlite3.connect() 的 database 参数传给工厂之前不再将其转换为字节串。

  • 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_tPy_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 项目 中找到。 由 Victor Stinner 提供补丁。

  • gh-97669: 移除 Tools/scripts/ 目录中过时的示例脚本。 副本可以在 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_ACLCOPYFILE_XATTR 常量。

  • gh-91215: 对于 @~dataclasses.dataclass,增加了 weakref_slot。 该新增形参默认为 False。 如果为真值,并且如果 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 添加 context manager 支持。 由 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-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-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-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-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.TimeoutErrorasyncio.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-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_INTBINARY_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-45726: 改进 functools.singledispatch()functools.singledispatchmethod 的文档。

  • bpo-45680: 修改关于 GenericAlias 对象的文档,以澄清非容器类也可以实现 __class_getitem__。 由 Alex Waygood 提供补丁。

  • bpo-45618: 将用于构建文档的Sphinx版本更新至4.2.0。由Maciej Olko提供补丁。

  • bpo-45655: 在 typing 模块文档的顶部新增一个“相关的 Python 增强提案(PEP)”部分。由Alex Waygood提供补丁。

  • bpo-45604: 在 multiprocessing.log_to_stderr 函数的文档中添加 level 参数。

  • bpo-45516: 在 importlib.abc.TraversableResources 文档中添加协议描述。

  • bpo-45464: 在 Built-in Exceptions 文档中提到,由于可能存在内存布局不兼容问题,不建议在单个子类中继承多个异常类型。

  • bpo-45449: 在 collections.abc 中添加关于 PEP 585 的说明。

  • bpo-45516: 在 importlib.abc.Traversable 文档中添加协议描述。

  • bpo-20692: 添加编程FAQ条目,解释整数字面量属性访问需要在字面量后加空格或使用括号。

测试

  • 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_pickletest_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.cswprintf%s 使用的警告

  • bpo-45548: Modules/SetupModules/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.hlongintrepr.h 已被移动到 Include/cpython 目录。 此外,eval.h 头文件已被移除。 这些文件不应直接包含,因为它们已经被包含在 Python.h 中:参见 包含文件。 如果它们已被直接包含,考虑改为包含 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-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 语句中现在会分别对不支持 context managerasynchronous context manager 协议的对象引发 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() 能识别大量的保留文件名,包括带有末尾空格或冒号的。

  • 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_GenericAliasPy_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 字段设置为 NULLPyStructSequence_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 keywords: matchcase_。然而,这种高亮显示并不完美,在某些罕见情况下会不正确,包括一些 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() 会在退出时将 PyImport_Inittab 重围为其初始值。 必须能够在每次 Python 初始化时调用 PyImport_AppendInittab()PyImport_ExtendInittab()。 由 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-43433: xmlrpc.client.ServerProxy 不再忽略服务器 URL 中的查询和片段。

  • bpo-31956: array.arrayindex() 方法现在有可选的 startstop 形参。

  • 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: 恢复在 bpo-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提供补丁。

  • bpo-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 提供补丁。

核心与内置函数

  • bpo-42808: 由于采用了 vectorcall 调用约定,现在对 type(object) 的简单调用更快了。 补丁由 Dennis Sweeney 提供。

  • bpo-42217: 使编译器像已经对 co_consts 做的那样,合并模块中相同的 co_code 和 co_linetable 对象。

  • bpo-41972: 子字符串搜索函数如 str1 in str2str2.find(str1) 现在有时会使用"双向"字符串比较算法,以避免在长字符串上出现二次行为。

  • bpo-42128: 实现了PEP 634(结构化模式匹配)。由Brandt Bucher提供补丁。

核心与内置函数

  • bpo-43316: python -m gzip 命令行应用程序现在在检测到不支持的扩展时会正确失败。 它会以非零退出码退出,并向 stderr 打印错误消息。

  • bpo-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-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: 未写入文档的内置函数 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-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: 恢复 os.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-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-42246: 提高了行跟踪事件和Frame对象的f_lineno属性的准确性。详见PEP 626。

核心与内置函数

  • 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: 移除了 formatter 模块,它在 Python 3.4 中已被弃用。 该模块有些过时,很少使用,且未经测试。 它原计划在 Python 3.6 中移除,但移除计划被推迟到 Python 2.7 EOL 之后。 现有用户应当将任何他们在用的类拷贝到他们的代码中。 由 Donghee Na 和 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.locksasyncio.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-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-39934: 在编译器中正确计算 'except' 中的控制块。确保对于深层嵌套的命名异常处理程序产生语法错误而非致命错误。

  • bpo-41780: 修复 types.GenericAlias__dir__() 方法。由 Batuhan Taskaya 提供补丁。

核心与内置函数

  • bpo-41690: 修复解析器在解析具有大量参数的函数和类时可能出现的栈溢出问题。由 Pablo Galindo 提供补丁。

核心与内置函数

  • 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-41631: _ast 模块再次使用了全局状态。每个模块实例使用模块状态会导致一些微妙的实际问题。例如,Mercurial 项目替换了 __import__() 函数以实现延迟导入,而 Python 期望 import _ast 总是返回一个完全初始化的 _ast 模块。

核心与内置函数

  • bpo-1653741: 将 _sha3 移植到多阶段初始化。将静态类型转换为堆类型。

核心与内置函数

  • 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-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-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-字符串 (如 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-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 添加了一个 iterator

  • 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: 修复了当安装 numpytest_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

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: 在 lib2to3 中正确地为包含 lambda 表达式的基于过滤器的语句添加括号。由 Donghee Na 提供补丁。

  • bpo-39142: 对 logging.config.dictConfig 进行了更改,以避免将具名元组的实例转换为 ConvertingTuple。假设命名元组过于专门化,不能像普通元组那样处理;如果具名元组的用户需要 ConvertingTuple 的功能,他们必须自己在具名元组类中实现。

  • bpo-39158: ast.literal_eval() 现在支持空集合。

  • bpo-39129: 修复了 asyncio.TimeoutError 的导入路径。

  • bpo-39057: urllib.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</