這份說明文件是寫給一個不再被支援的舊版 Python。你應該升級，並閱讀 當前穩定發行的 Python 版本說明文件.

# Changelog（更動日誌）

## Python 3.9.25 final

Release date: 2025-10-31

### 安全性

- gh-137836: Add support of the "plaintext" element, RAWTEXT elements "xmp", "iframe", "noembed" and "noframes", and optionally RAWTEXT element "noscript" in `html.parser.HTMLParser`.

- gh-136063: `email.message`: ensure linear complexity for legacy HTTP parameters parsing. Patch by Bénédikt Tran.

- gh-136065: Fix quadratic complexity in `os.path.expandvars()`.

### 库

- gh-98793: Fix argument typechecks in `_overlapped.WSAConnect()` and `_overlapped.Overlapped.WSASendTo()` functions.

- bpo-44817: 在使用 ntpath.realpath() 时忽略 WinError 53 (ERROR_BAD_NETPATH)、65 (ERROR_NETWORK_ACCESS_DENIED) 和 161 (ERROR_BAD_PATHNAME)。

### 核心与内置函数

- gh-120384: Fix an array out of bounds crash in `list_ass_subscript`, which could be invoked via some specificly tailored input: including concurrent modification of a list object, where one thread assigns a slice and another clears it.

- gh-120298: Fix use-after free in `list_richcompare_impl` which can be invoked via some specificly tailored evil input.

## Python 3.9.24 final

Release date: 2025-10-09

### 安全性

- gh-139700: 检测 zip64 中央目录记录末尾的一致性。 在没有字节数据被附加到 ZIP 文件时支持使用 "zip64 可扩展数据" 的记录。

- gh-139400: `xml.parsers.expat`: 确保父级 Expat 解析器当其不再被 `ExternalEntityParserCreate()` 所创建的子解析器所引用时只会被作为垃圾回收一次。 由 Sebastian Pipping 编写补丁。

- gh-121227: Raise an `SSL.SSLError` if an empty protocols argument is passed to `ssl.SSLContext.set_npn_protocols()` to fix `CVE-2024-5642`.

- 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-86155: `html.parser.HTMLParser.close()` 现在在 `<script>` 标签未关闭时不再丢失数据。由 Waylan Limberg 提供补丁。

### 库

- gh-139312: 将捆绑的 libexpat 升级至 2.7.3

- gh-138998: 将捆绑的 libexpat 更新至 2.7.2

- gh-130577: `tarfile` 现在可验证归档以确保成员偏移量为非负值。 （由 Alexander Enrique Urieles Nieto 在 gh-130577 中贡献。）

- gh-135374: Update the bundled copy of setuptools to 79.0.1.

## Python 3.9.23 final

发布日期: 2025-06-03

### 安全性

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

  Addresses CVE 2024-12718, CVE 2025-4138, CVE 2025-4330, and CVE 2025-4517.

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

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

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

### 库

- gh-128840: 修复了解析包含嵌入式IPv4地址的长IPv6地址的问题。

- gh-134062: `ipaddress`: 修复 `__hash__()` 中 `IPv4Network` 和 `IPv6Network` 对象的冲突。

- gh-123409: 根据 RFC 3596, §2.5 修复 `ipaddress.IPv6Address.reverse_pointer` 的输出。由 Bénédikt Tran 提供补丁。

- bpo-43633: 改进 `ipaddress` 中 IPv4 映射的 IPv6 地址 (RFC 4291 第 2.2, 2.5.5.2 节) 的文本表示。由 Oleksandr Pavliuk 提交补丁。

- bpo-25264: `os.path.realpath()` 现在接受一个仅限关键词的 strict 参数。当设置为``True``时，如果路径不存在或遇到符号链接循环，将引发 `OSError`。

## Python 3.9.22 final

发布日期: 2025-04-08

### 安全性

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

- gh-131261: 更新至 libexpat 2.7.0

- gh-105704: 当使用 `urllib.parse.urlsplit()` 和 `urllib.parse.urlparse()` 时主机解析将不会拒绝包含方括号 (`[` 和 `]`) 的主机名。 根据 `RFC 3986 第 3.2.2 节 <https://www.rfc-editor.org/rfc/rfc3986#section-3.2.2>`__方括号仅适用于 IPv6 和 IPvFuture 主机。

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

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

### 文档

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

## Python 3.9.21 final

发布日期: 2024-12-03

### 测试

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

- gh-109396: 修复 FIPS 模式下的 `test_socket.test_hmac_sha1()`。使用更长的密钥：FIPS 模式要求至少 112 位。之前的密钥只有 32 位。由 Victor Stinner 提供补丁。

- gh-100454: Fix SSL tests CI for OpenSSL 3.1+

### 安全性

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

- gh-122792: 修改了IPv4映射的 `ipaddress.IPv6Address`，使其一致使用映射的IPv4地址值来决定属性。行为被修复的属性包括 `is_multicast`、`is_reserved`、`is_link_local`、`is_global` 和 `is_unspecified`。

### 库

- gh-124651: 在 `venv` 激活脚本中正确引用模板字符串。

- gh-103848: 添加检查以确保 `urllib.parse.urlsplit()` 找到的 `[` 括号 `]` 主机是 IPv6 或 IPvFuture 格式。

### 文档

- gh-95588: 澄清了 `ast` 文档中关于 `ast.literal_eval()` 对不可信输入“安全”使用的冲突建议，同时警告它可能会崩溃进程。后一种说法是正确的，并且被认为在不适合 bugfix 的大量工作下无法修复。因此我们保留警告，不再声称 `literal_eval` 是安全的。

## Python 3.9.20 final

发布日期: 2024-09-06

### Windows

- gh-119690: Fixes data type confusion in audit events raised by `_winapi.CreateFile` and `_winapi.CreateNamedPipe`.

- gh-116773: 修复``<_overlapped.Overlapped object at 0xXXX> still has pending operation at deallocation, the process may crash``的实例。

### 测试

- gh-112769: 现在，当 `zlib.ZLIB_RUNTIME_VERSION` 包含非整数后缀时，测试正确比较 zlib 版本。例如，zlib-ng 将版本定义为 `1.3.0.zlib-ng`。

- gh-117187: 修复对 vanilla Expat <2.6.0 的XML测试。

### 安全性

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

- gh-121957: Fixed missing audit events around interactive use of Python, now also properly firing for `python -i`, as well as for `python -m asyncio`. The event in question is `cpython.run_stdin`.

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

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

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

- gh-118486: `os.mkdir()` on Windows now accepts mode of `0o700` to restrict the new directory to the current user. This fixes CVE-2024-4030 affecting `tempfile.mkdtemp()` in scenarios where the base temporary directory is more permissive than the default.

- gh-114572: `ssl.SSLContext.cert_store_stats()` 和 `ssl.SSLContext.get_ca_certs()` 现在在 `ssl.SSLContext` 被多个线程共享时正确锁定对证书存储的访问。

- gh-116741: 更新捆绑的 libexpat 到 2.6.2

### 库

- gh-123270: 对 `zipfile.Path` 中导致无限循环的畸形负载应用了更为精确的修复（gh-122905），而不会破坏使用合法字符的内容。

- gh-123067: 通过 `http.cookies` 修复解析带有反斜杠的 `"` 引号包围的 cookie 值时的二次复杂度问题。

- gh-121650: 现在，带有嵌入换行符的 `email` 标题在输出时会被引用。`generator` 现在会拒绝序列化（写入）不安全折叠或分隔的标题；参见 `verify_generated_headers`。（由Bas Bloemsaat和Petr Viktorin在 gh-121650 中贡献。）

- gh-113171: 修复了以下属性判断中的各类误报（false positives）和漏报（false negatives）问题

  - `ipaddress.IPv4Address.is_private` (详见相关文档说明)

  - `ipaddress.IPv4Address.is_global`

  - `ipaddress.IPv6Address.is_private`

  - `ipaddress.IPv6Address.is_global`

  同样适用于相应的 `ipaddress.IPv4Network` 和 `ipaddress.IPv6Network` 属性。

- gh-102988: `email.utils.getaddresses()` and `email.utils.parseaddr()` now return `('', '')` 2-tuples in more situations where invalid email addresses are encountered instead of potentially inaccurate values. Add optional strict parameter to these two functions: use `strict=False` to get the old behavior, accept malformed inputs. `getattr(email.utils, 'supports_strict_parsing', False)` can be use to check if the strict paramater is available. Patch by Thomas Dwyer and Victor Stinner to improve the CVE-2023-27043 fix.

- gh-67693: 修复了 `urllib.parse.urlunparse()` 和 `urllib.parse.urlunsplit()` 对于路径以多个斜杠开始且没有权限的 URI 的处理。基于 Ashwin Ramaswami 的补丁。

### 核心与内置函数

- gh-112275: A deadlock involving `pystate.c`'s `HEAD_LOCK` in `posixmodule.c` at fork is now fixed. Patch by ChuBoning based on previous Python 3.12 fix by Victor Stinner.

## Python 3.9.19 final

Release date: 2024-03-19

### 安全性

- gh-115398: Allow controlling Expat >=2.6.0 reparse deferral (CVE-2023-52425) by adding five new methods:

  - `xml.etree.ElementTree.XMLParser.flush()`

  - `xml.etree.ElementTree.XMLPullParser.flush()`

  - `xml.parsers.expat.xmlparser.GetReparseDeferralEnabled()`

  - `xml.parsers.expat.xmlparser.SetReparseDeferralEnabled()`

  - `xml.sax.expatreader.ExpatParser.flush()`

- gh-115399: 将捆绑的 libexpat 更新到 2.6.0

- gh-113659: 跳过名称以点开头或具有隐藏文件属性的 `.pth` 文件。

### 核心与内置函数

- gh-102388: 修复 `iso2022_jp_3` 和 `iso2022_jp_2004` 编解码器读取越界的错误

### 库

- gh-115197: `urllib.request` 在 macOS 和 Windows 上不再在检查系统代理绕过列表之前解析主机名。

- gh-115133: 修复与Expat 2.6.0兼容的 `XMLPullParser` 测试。

- gh-81194: 修复了 `socket.if_indextoname()` 在特定值（UINT_MAX）下的崩溃问题。修复了64位非Windows平台上 `socket.if_indextoname()` 的整数溢出问题。

- gh-109858: 保护 `zipfile` 免受“引用覆盖”zip炸弹攻击。现在在尝试读取与其他条目或中央目录重叠的条目时会引发 BadZipFile。

- gh-107077: Seems that in some conditions, OpenSSL will return `SSL_ERROR_SYSCALL` instead of `SSL_ERROR_SSL` when a certification verification has failed, but the error parameters will still contain `ERR_LIB_SSL` and `SSL_R_CERTIFICATE_VERIFY_FAILED`. We are now detecting this situation and raising the appropiate `ssl.SSLCertVerificationError`. Patch by Pablo Galindo

- gh-91133: 修复了 `tempfile.TemporaryDirectory` 清理中的一个错误，现在在解决文件系统权限错误时不再解引用符号链接。

### 文档

- gh-115399: Document CVE-2023-52425 of Expat <2.6.0 under "XML vulnerabilities".

### Windows

- gh-111239: 更新 Windows 构建以使用 zlib v1.3.1。

- gh-109991: Windows builds now use OpenSSL 1.1.1w. Note that OpenSSL 1.1 has reached its end of life and no future fixes will be made, and this version of Python is no longer receiving maintenance fixes and will not be updated to OpenSSL 3.0.

### 工具/示例

- gh-109991: Update GitHub CI workflows to use OpenSSL 3.0.11 and multissltests to use 1.1.1w and 3.0.11.

## Python 3.9.18 final

Release date: 2023-08-24

### 安全性

- gh-108310: Fixed an issue where instances of `ssl.SSLSocket` were vulnerable to a bypass of the TLS handshake and included protections (like certificate verification) and treating sent unencrypted data as if it were post-handshake TLS encrypted data. Security issue reported as CVE-2023-40217 by Aapo Oksman. Patch by Gregory P. Smith.

### 库

- gh-107845: `tarfile.data_filter()` 现在在确定符号链接的目标时会考虑其位置，因此不再会因 `LinkOutsideDestinationError` 拒绝一些有效的 tarball。

### 工具/示例

- gh-107565: Update multissltests and GitHub CI workflows to use OpenSSL 1.1.1v, 3.0.10, and 3.1.2.

### C API

- gh-99612: 修复 `PyUnicode_DecodeUTF8Stateful()` 对于仅ASCII数据的问题：`*consumed` 未被设置。

## Python 3.9.17 final

Release date: 2023-06-06

### 安全性

- gh-103142: The version of OpenSSL used in our binary builds has been upgraded to 1.1.1u to address several CVEs.

- gh-99889: Fixed a security in flaw in `uu.decode()` that could allow for directory traversal based on the input if no `out_file` was specified.

- gh-104049: 在 `http.client.SimpleHTTPRequestHandler` 生成的目录索引中不暴露本地的磁盘位置。

- gh-102153: `urllib.parse.urlsplit()` now strips leading C0 control and space characters following the specification for URLs defined by WHATWG in response to CVE-2023-24329. Patch by Illia Volochii.

- gh-101727: Updated the OpenSSL version used in Windows and macOS binary release builds to 1.1.1t to address CVE-2023-0286, CVE-2022-4303, and CVE-2022-4303 per the OpenSSL 2023-02-07 security advisory.

- gh-101283: `subprocess.Popen` 现在使用更安全的方法在 `shell=True` 启动时查找 `cmd.exe`。由 Eryk Sun 基于 Oleg Iarygin 的补丁提供补丁。

### 核心与内置函数

- gh-102126: 修复在关闭时清除线程状态时如果任何终结器尝试获取运行时头锁导致的死锁。由Kumar Aditya提供补丁。

- gh-100892: 修复在清除 `threading.local` 时迭代线程状态的竞争。由 Kumar Aditya 提供补丁。

### 库

- gh-103935: 对要执行的文件使用 `io.open_code()` 而不是原始的 `open()`。

- gh-102953: `tarfile` 中的提取方法，以及 `shutil.unpack_archive()`，新增了一个 filter 参数，允许限制可能令人惊讶或危险的tar特性，例如在目标目录之外创建文件。详情请见 解压缩过滤器。

- gh-101997: 升级与 ensurepip 捆绑的 pip wheel (pip 23.0.1)

### Windows

- gh-100180: 将 Windows 安装程序更新至 OpenSSL 1.1.1s。

### macOS

- gh-103142: Update macOS installer to use OpenSSL 1.1.1u.

## Python 3.9.16 final

发布日期：2022-12-06

### 安全性

- gh-100001: `python -m http.server` 不再允许垃圾请求中发送的终端控制字符被打印到 stderr 服务器日志中。

  This is done by changing the `http.server` `BaseHTTPRequestHandler` `.log_message` method to replace control characters with a `\xHH` hex escape before printing.

- gh-87604: 避免通过 `gc` 模块发布每个解释器的活动审计钩子列表

- gh-98433: The IDNA codec decoder used on DNS hostnames by `socket` or `asyncio` related name resolution functions no longer involves a quadratic algorithm. This prevents a potential CPU denial of service if an out-of-spec excessive length hostname involving bidirectional characters were decoded. Some protocols such as `urllib` http `3xx` redirects potentially allow for an attacker to supply such a name.

- gh-98739: 更新捆绑的 libexpat 到 2.5.0

- gh-98517: Port XKCP's fix for the buffer overflows in SHA-3 (CVE-2022-37454).

- gh-97514: 在Linux系统上，`multiprocessing` 模块恢复使用基于文件系统的Unix域套接字与 forkserver 进程通信，而不是使用Linux抽象套接字命名空间。只有选择使用 "forkserver"启动方法 的代码会受到影响。

  抽象套接字没有权限设置，可能允许同一`网络命名空间 <https://man7.org/linux/man-pages/man7/network_namespaces.7.html>`_（通常是整个系统）内的任何用户向multiprocessing的 forkserver 进程注入代码。这是一个潜在的特权提升风险。基于文件系统的套接字权限将这一行为限制为 forkserver 进程的用户，这是Python 3.8及更早版本的默认行为。

  This prevents Linux CVE-2022-42919.

- gh-68966: 已弃用的mailcap模块现在拒绝将不安全的文本（文件名、MIME类型、参数）注入到shell命令中。它将发出警告并视为未找到匹配（或对于测试命令，视为测试失败），而不是使用此类文本。

## Python 3.9.15 final

Release date: 2022-10-11

### 安全性

- gh-97616: 修复列表乘以整数(`list *= int`)的问题：当新分配的长度接近最大大小时检测整数溢出。问题由Jordan Limor报告，由Victor Stinner提供补丁。

- gh-97612: Fix a shell code injection vulnerability in the `get-remote-certificate.py` example script. The script no longer uses a shell to run `openssl` commands. Issue reported and initial fix by Caleb Shortt. Patch by Victor Stinner.

### 核心与内置函数

- gh-96848: 修复命令行解析：当 `PYTHONINTMAXSTRDIGITS` 环境变量设置为有效限制时，拒绝没有值的 `-X int_max_str_digits` 选项（无效）。由Victor Stinner提供补丁。

- gh-95778: 当整数超过限制时引发 `ValueError` 时，在错误消息中提到 `sys.set_int_max_str_digits()` 函数。由 Victor Stinner 提供补丁。

### 库

- gh-97005: 将捆绑的 libexpat 更新到 2.4.9

### Windows

- gh-96577: Fixes a potential buffer overrun in `msilib`.

### macOS

- gh-97897: macOS 13 SDK 包含对 `mkfifoat` 和 `mknodat` 系统调用的支持。如果在使用 macOS 13 SDK 构建的 cpython 但在较早版本的 macOS 上运行时，使用 `dir_fd` 选项与 `os.mkfifo()` 或 `os.mknod()` 可能导致段错误。通过添加对这些系统调用的运行时支持检测（“弱链接”）来防止这种情况，就像在 macOS 上对其他更新的系统调用所做的那样。

## Python 3.9.14 final

Release date: 2022-09-06

### 安全性

- gh-95778: Converting between `int` and `str` in bases other than 2 (binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal) now raises a `ValueError` if the number of digits in string form is above a limit to avoid potential denial of service attacks due to the algorithmic complexity. This is a mitigation for CVE-2020-10735.

  This new limit can be configured or disabled by environment variable, command line flag, or `sys` APIs. See the integer string conversion length limitation documentation. The default limit is 4300 digits in string form.

  Patch by Gregory P. Smith [Google] and Christian Heimes [Red Hat] with feedback from Victor Stinner, Thomas Wouters, Steve Dower, Ned Deily, and Mark Dickinson.

- gh-87389: `http.server`: 修复了HTTP服务器中当URI路径以 `//` 开头时的开放重定向漏洞。漏洞由Hamza Avvan发现并提出了初步修复方案。

### 核心与内置函数

- gh-93065: 修复了 contextvars HAMT 实现以处理对深树的迭代。

  该错误由 Eli Libman 发现并修复。更多详情请见 MagicStack/immutables#84。

### 库

- gh-94821: 修复 Linux 上 Unix 套接字绑定到空地址时使用抽象命名空间中的可用地址，而不是 "0"。

- gh-91810: 在使用 `encoding='unicode'` 和 `xml_declaration=None` 的 `ElementTree.write()` 中，抑制在打开的文件中写入 XML 声明。

- bpo-45393: 在使用 `help()` 系统时，修复了操作符优先级表中 `await x` 和 `not x` 的格式化。

- bpo-46197: 修复了 `ensurepip` 对运行 `pip` 的子进程的环境隔离。

### 测试

- gh-95280: 修复了在需要完美前向保密（PFS）密码的系统上 `test_ssl` `test_get_ciphers` 的问题。

- gh-94208: `test_ssl` 现在在更多测试中检查支持的 TLS 版本和协议。

- bpo-47016: 创建一个 GitHub Actions 工作流用于验证捆绑的 pip 和 setuptools。由 Illia Volochii 和 Adam Turner 提供补丁。

## Python 3.9.13 final

Release date: 2022-05-17

### 核心与内置函数

- gh-92311: Fixed a bug where setting `frame.f_lineno` to jump over a list comprehension could misbehave or crash.

- gh-92112: 修复由元类上的恶意自定义 `mro()` 触发的崩溃。

- gh-92036: 修复了与垃圾收集器相关的子解释器崩溃问题。当删除子解释器时，取消跟踪其垃圾收集器跟踪的所有对象。为了防止在期望对象被垃圾收集器跟踪的析构函数中崩溃，有意泄露这些对象的强引用，这样它们就永远不会被删除，它们的析构函数也不会被调用。由Victor Stinner提供补丁。

- gh-91421: 修复了 _Py_DecodeUTF8Ex 中潜在的整数溢出问题。

- bpo-46775: Some Windows system error codes(>= 10000) are now mapped into the correct errno and may now raise a subclass of `OSError`. Patch by Dong-hee Na.

- bpo-46962: Classes and functions that unconditionally declared their docstrings ignoring the `--without-doc-strings` compilation flag no longer do so.

  The classes affected are `pickle.PickleBuffer`, `testcapi.RecursingInfinitelyError`, and `types.GenericAlias`.

  受影响的函数是 `ctypes` 中的24个方法。

  由 Oleg Iarygin 提供补丁。

- bpo-36819: 修复内置编码器中错误处理程序返回的位置小于或等于不可编码字符起始位置时的崩溃问题。

### 库

- gh-91581: `utcfromtimestamp()` 在纯Python实现中不再尝试解析 `fold`，因为在UTC中fold永远不会是1。除了在常见情况下稍微快一些之外，这还防止了当时间戳接近 `datetime.min` 时的一些错误。由Paul Ganssle提供补丁。

- gh-92530: 修复了在中断 `threading.Condition.notify()` 后出现的问题。

- gh-92049: 禁止pickling常量 `re._constants.SUCCESS` 等。之前，pickling不会失败，但结果无法被unpickle。

- bpo-47029: 在向管道的写入端最后一次写入缓冲数据*之后*，始终关闭 `multiprocessing.Queue` 使用的管道的读取端，以避免在垃圾回收和调用 `multiprocessing.Queue.close()` 时出现 `BrokenPipeError`。补丁由 Géry Ogam 提供。

- gh-91910: 在 `multiprocessing` 和 `asyncio` 模块的错误消息中，为 f-字符串添加缺失的 f 前缀。

- gh-91810: `ElementTree` 方法 `write()` 和函数 `tostring()` 现在在指定 `encoding="unicode"` 时使用文本文件的编码（如果不可用则为 "UTF-8"）而不是 XML 声明中的区域设置编码。

- gh-91832: 在 `argparse.Action` 的 repr 输出中添加 `required` 属性。

- gh-91734: 修复Solaris上的OSS音频支持。

- gh-91700: 现在，包含条件表达式 `(?(group)...)` 的正则表达式的编译，如果组号引用未定义的组，将引发适当的 `re.error`。之前会引发内部RuntimeError。

- gh-91676: Fix `unittest.IsolatedAsyncioTestCase` to shutdown the per test event loop executor before returning from its `run` method so that a not yet stopped or garbage collected executor state does not persist beyond the test.

- gh-90568: 在 `regular expression` 中解析Unicode命名字符序列的 `\N` 转义现在会引发 `re.error` 而不是 `TypeError`。

- gh-91595: 修复 `Tools.gdb.libpython.write_repr()` 中字符和整数的比较。由 Yu Liu 提交的补丁。

- gh-90622: 当多进程上下文启动方法为 ``"fork"``时，`concurrent.futures.ProcessPoolExecutor` 的工作进程不再按需生成（这是3.9版本中添加的特性），因为这可能会导致子进程中的死锁，因为在线程运行时发生了fork。

- gh-91575: 将 `re` 模块中的大小写不敏感匹配更新至最新的 Unicode 版本。

- gh-91581: 移除了在调用没有时区的 `datetime.fromtimestamp` 的C实现中未处理的错误情况（即从epoch时间戳获取本地时间）。这除了在调用落在本地时间10000-01-01的时间戳时可能给出更准确的错误消息外，应该不会对用户产生影响。由Paul Ganssle提供补丁。

- bpo-34480: Fix a bug where `_markupbase` raised an `UnboundLocalError` when an invalid keyword was found in marked section. Patch by Marek Suscak.

- bpo-27929: 修复 `asyncio.loop.sock_connect()` 仅解析 `socket.AF_INET` 或 `socket.AF_INET6` 家族的名称。对于其他家族，如 `socket.AF_BLUETOOTH` 和 `socket.AF_UNIX`，解析可能没有意义。

- bpo-43323: 修复 `email` 模块中如果字符集本身包含不可解码/不可编码字符时的错误。

- bpo-46787: 修复 `concurrent.futures.ProcessPoolExecutor` 异常内存泄漏

- bpo-46415: 修复 ipaddress.ip_{address,interface,network} 在给定无效元组作为地址参数时抛出 TypeError 而不是 ValueError 的问题。

- bpo-44911: `IsolatedAsyncioTestCase` 在取消泄漏任务时将不再抛出异常。由 Bar Harel 提供补丁。

- bpo-44493: 在 sockaddr_un 的长度中添加缺失的终止 NUL。

  当使用非抽象的 AF_UNIX 数据报套接字与用另一种编程语言编写的进程通信时，这个问题可能被观察到。

- bpo-42627: 修复了 Windows 注册表代理设置的错误解析。

- bpo-36073: 在 `sqlite3` 转换器中递归使用游标时，引发 `ProgrammingError` 而不是段错误。由 Sergey Fedoseev 提供补丁。

### 文档

- gh-91888: 向文档添加一个新的 `gh` 角色，以链接到 GitHub 问题。

- gh-91783: 记录关于使用函数 `shutil.unpack_archive()` 的安全问题。

- gh-91547: 移除“未记录模块”页面。

- bpo-44347: 澄清了 dirs_exist_ok 的含义，这是 `shutil.copytree()` 的一个关键字参数。

- bpo-38668: 更新 `os.path` 文档的引言，移除在实现了 PEP 383 和 PEP 529 后变得无关紧要的警告。

- bpo-47138: Pin Jinja to a version compatible with Sphinx version 2.4.4.

- bpo-46962: All docstrings in code snippets are now wrapped into `PyDoc_STR()` to follow the guideline of PEP 7's Documentation Strings paragraph. Patch by Oleg Iarygin.

- bpo-26792: 改进 `runpy.run_module()` 和 `runpy.run_path()` 的文档字符串。原始补丁由Andrew Brezovsky提供。

- bpo-45790: 调整 自定义扩展类型：教程 中关于 `ob_base` 字段和用于访问其内容的宏的不准确措辞。

- bpo-42340: 记录在某些情况下 `KeyboardInterrupt` 可能导致代码进入不一致状态。如果需要，提供了一个示例解决方法以避免这种情况。

- bpo-41233: 将 `Doc/library/exceptions.rst` 中引用的 errnos 链接到它们在 `Doc/library/errno.rst` 中的相应部分，反之亦然。之前这仅对 EINTR 和 InterruptedError 进行了操作。由 Yan "yyyyyyyan" Orestes 提供补丁。

- bpo-38056: 全面修改了 `codecs` 中的 错误处理方案 文档。

- bpo-13553: 文档说明 tkinter.Tk 的参数。

### 测试

- gh-91607: 修复 `test_concurrent_futures`，在测试逻辑混淆的情况下测试正确的多进程启动方法上下文。

- bpo-47205: 在 FreeBSD 上跳过 `sched_getaffinity()` 和 `sched_setaffinity()` 错误情况的测试。

- bpo-29890: 为 `ipaddress.IPv4Interface` 和 `ipaddress.IPv6Interface` 添加了使用元组参数构造的测试。原始补丁和测试由louisom提供。

### 构建

- bpo-47103: Windows `PGInstrument` 构建现在会将一个必需的 DLL 复制到输出目录，使得运行 PGO 构建的分析阶段更加容易。

### Windows

- bpo-47194: Update `zlib` to v1.2.12 to resolve CVE-2018-25032.

- bpo-46785: 通过适当在 `win32_xstat_impl` 中使用 `FindFirstFileW()` 返回的错误代码，修复了 Windows 上 `os.stat()` 和取消链接文件之间的竞态条件。

- bpo-40859: 更新 Windows 构建以使用 xz-5.2.5。

### 工具/示例

- gh-91583: 修复了 Argument Clinic 为带有 `defining_class` 参数的函数生成的代码中的回归问题。

## Python 3.9.12 final

Release date: 2022-03-23

### 核心与内置函数

- bpo-46968: 在 `faulthandler` 中检查 "sys/auxv.h" 头文件的存在，以避免在不存在此头文件的系统中出现编译问题。由 Pablo Galindo 提供补丁。

### 库

- bpo-47101: `hashlib.algorithms_available` 现在仅列出由OpenSSL 3.0上激活的加密提供者提供的算法。除非将遗留提供者加载到默认的OSSL上下文中，否则不会列出遗留算法。

- bpo-23691: 保护 `re.finditer()` 迭代器不被重新进入。

- bpo-42369: 修复 `zipfile._SharedFile.tell()` 的线程安全性，以避免在多线程读取 `ZipFile` 时出现 "zipfile.BadZipFile: Bad CRC-32 for file" 异常。

- bpo-38256: 修复了当编译使用 zlib 的 crc32 时的 `binascii.crc32()`，使其正确处理长度超过 4GiB 的输入而不是返回错误结果。在此之前的解决方法是始终以小于 4GiB 的增量向函数提供数据，或直接调用 zlib 模块函数。

- bpo-39394: 关于不在正则表达式开头的内联标志的警告现在包含标志的位置。

- 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-2604: 修复了使用全局变量的doctests在多次运行时失败的bug。

- bpo-45997: 修复 `asyncio.Semaphore` 重新获取FIFO顺序的问题。

- bpo-47022: The `asynchat`, `asyncore` and `smtpd` modules have been deprecated since at least Python 3.6. Their documentation has now been updated to note they will removed in Python 3.12 (PEP 594).

- bpo-46421: 修复了一个 unittest 问题，即如果命令以 `python -m unittest` 形式调用且文件名以点（.）开头，会返回 `ValueError`。

- bpo-40296: 修复 `pydoc` 中支持泛型别名的问题。

- bpo-14156: argparse.FileType 现在支持二进制模式下的 '-' 参数，根据情况返回 sys.stdin/sys.stdout 的 .buffer 属性。当参数为 '-' 时，包含 'x' 和 'a' 的模式被视为等同于 'w'。补丁由 Josh Rosenberg 贡献

## Python 3.9.11 final

Release date: 2022-03-16

### 核心与内置函数

- bpo-46852: 将私有的未文档化的 `float.__set_format__()` 方法重命名为 `float.__setformat__()`，以修复 Python 3.7 中引入的拼写错误。该方法仅由 test_float 使用。由 Victor Stinner 提供补丁。

- bpo-46794: 将 libexpat 版本提升至 2.4.6。

- bpo-46762: 修复在调试版本中，当 '<'、'>' 或 '=' 是 f 字符串中缺失右大括号的最后一个字符时的断言失败。

- bpo-46732: Correct the docstring for the `__bool__()` method. Patch by Jelle Zijlstra.

- bpo-40479: 在 `Modules/_hashopenssl.c` 中添加一个遗漏的 `va_end()` 调用。

- bpo-46615: 在 `setobject.c` 中内部迭代集合时，对集合中的结果项获取强引用。这防止了在各种集合操作的边角情况下集合被修改导致的崩溃。

- bpo-43721: 修复 `getter`, `setter`, 和 `deleter` 的文档字符串，以明确它们创建属性的新副本。

- bpo-46503: 修复在解析 f-strings 中一些无效的 N 转义序列时的断言。

- bpo-46417: 修复设置类型 `__bases__` 属性时的竞争条件：内部函数 `add_subclass()` 现在在调用 `PyWeakref_NewRef()` 后获取 `PyTypeObject.tp_subclasses` 成员，这可以触发垃圾回收，间接修改 `PyTypeObject.tp_subclasses`。由 Victor Stinner 提供补丁。

- bpo-46383: 修复 `_zoneinfo` 的 `module_free` 函数的无效签名，以解决wasm32-emscripten平台上的崩溃问题。

### 库

- bpo-43253: 修复在Proactor事件循环中关闭传输时底层套接字句柄已无效导致的崩溃问题。

- bpo-47004: 应用来自importlib_metadata 4.11.3的错误修复，包括修复EntryPoint.extras返回匹配对象而非额外字符串的问题。

- 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-46955: 将 `asyncio.base_events.Server` 作为 `asyncio.Server` 公开。由Stefan Zabka提供补丁。

- bpo-46932: 更新捆绑的libexpat到2.4.7版本。

- bpo-25707: 修复了 `xml.etree.ElementTree.iterparse()` 中当迭代器未被耗尽时的文件泄露问题。由 Jacob Walls 提供补丁。

- bpo-44886: 将 asyncio proactor 数据报传输继承自 `asyncio.DatagramTransport`。

- bpo-46827: 在基于选择器的事件循环中支持 `asyncio.loop.sock_connect()` 的 UDP 套接字。由 Thomas Grainger 提供补丁。

- bpo-46811: 使测试套件支持 Expat >=2.4.5。

- bpo-46252: 如果 `ssl.SSLSocket` 被传递给基于传输的 API，则抛出 `TypeError`。

- bpo-46784: 修复了在嵌入式 Python 中与用户动态加载或静态链接的 libexpat 库的符号冲突。

- bpo-39327: `shutil.rmtree()` 现在可以在客户操作系统中运行时与 VirtualBox 共享文件夹一起工作。

- bpo-46756: 修复了 `urllib.request.HTTPPasswordMgr.find_user_password()` 和 `urllib.request.HTTPPasswordMgrWithPriorAuth.is_authenticated()` 中的一个漏洞，该漏洞允许绕过授权。例如，如果用户被授权访问 URI `example.org/foo`，则允许访问 URI `example.org/foobar`。

- bpo-45863: 当 `tarfile` 模块创建 pax 格式的存档时，它会在 ustar 头中放置时间戳的整数表示（如果可能的话），以便于旧的解档工具使用，此外还会在 pax 扩展头中放置现有的全精度时间戳。

- bpo-46672: 修复 `asyncio.gather()` 中初始类型检查失败时的 `NameError`。

- bpo-45948: 修复了 `xml.etree.ElementTree` 模块 C 实现中的一个不一致之处。现在，实例化 `xml.etree.ElementTree.XMLParser` 时使用 `target=None` 关键字参数会像 Python 实现一样提供一个默认的 `xml.etree.ElementTree.TreeBuilder` 目标。

- bpo-46591: 使About IDLE对话框中的IDLE文档URL可点击。

- bpo-46400: expat: 将 libexpat 从 2.4.1 更新至 2.4.4

- bpo-46487: 在 `asyncio.transports.WriteTransport` 和 SSL 传输中添加 `get_write_buffer_limits` 方法。

- bpo-46539: 在 `typing.get_type_hints()` 中，支持在 `Annotated` 内部评估字符串化的 `ClassVar` 和 `Final` 注解。由 Gregory Beauregard 提供补丁。

- bpo-46491: 允许 `typing.Annotated` 包装 `typing.Final` 和 `typing.ClassVar`。由 Gregory Beauregard 提供补丁。

- bpo-46436: 修复模块 `http.server` 中的命令行选项 `-d`/`--directory`，当与命令行选项 `--cgi` 结合使用时被忽略的问题。由 Géry Ogam 提供补丁。

- bpo-41403: 使 `mock.patch()` 在无效参数上引发带有相关错误信息的 `TypeError`。之前它允许一个难以理解的 `AttributeError` 逃逸。

- bpo-46474: 在 `importlib.metadata.EntryPoint.pattern` 中，通过限制连续空白字符的歧义性来避免潜在的 REDoS。

- bpo-46469: `asyncio` 泛型类现在在 `__class_getitem__` 中返回 `types.GenericAlias` 而不是同一个类。

- bpo-46434: `pdb` now gracefully handles `help` when `__doc__` is missing, for example when run with pregenerated optimized `.pyc` files.

- bpo-46333: `typing.ForwardRef` 的 `__eq__()` 和 `__hash__()` 方法现在尊重 `typing.ForwardRef` 的 `module` 参数。现在可以区分来自不同模块的前向引用。

- bpo-43118: 修复 `inspect.signature()` 中的一个 bug，该 bug 导致它在某些引用模块全局的 `__text_signature__` 的类的子类上失败。由 Weipeng Hong 提供补丁。

- bpo-21987: 修复 `tarfile.TarFile.getmember()` 获取带有尾随斜杠的目录名的问题。

- bpo-20392: 修复 `MimeTypes.guess_type()` 中大写文件扩展名的不一致问题。由 Kumar Aditya 提供补丁。

- bpo-46080: 修复了如果 `argparse.BooleanOptionalAction` 参数的默认值为 `argparse.SUPPRESS` 并且指定了 `help` 时，在 argparse 帮助文本生成中出现的异常。补丁由 Felix Fontein 提供。

- bpo-44439: 修复 `ZipFile` 中成员文件的 `.write()` 方法，当输入数据是支持缓冲协议的对象时，文件长度可能错误的问题。

- bpo-45703: 当在程序运行时，一个命名空间包在另一个来自同一命名空间的模块被创建/安装在不同的 `sys.path` 位置之前被导入时，调用 `importlib.invalidate_caches()` 函数现在也能保证新模块被注意到。

- bpo-24959: 修复 `unittest` 中有时会从测试中引发的异常的追溯中丢弃帧的错误。

### 文档

- bpo-46463: 修复了构建 CHM 文档文件时使用的 `escape4chm.py` 脚本。

### 测试

- bpo-46913: 如果 Python 是用未定义行为消毒剂 (UBSAN) 构建的，修复 test_faulthandler.test_sigfpe()：在 faulthandler_sigfpe() 函数上禁用 UBSAN。由 Victor Stinner 提供补丁。

- bpo-46708: 防止 `test_asyncio` 执行后默认 asyncio 事件循环策略修改警告。

- bpo-46616: 确保 `test_importlib.test_windows` 在完成后清理注册表键。

- bpo-44359: test_ftplib 现在默默地忽略套接字错误，以防止记录未处理的线程异常。由 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: Skip test_builtin PTY tests on non-ASCII characters if the readline module is loaded. The readline module changes input() behavior, but test_builtin is not intented to test the readline module. Patch by Victor Stinner.

### 构建

- bpo-47024: 为 macOS 安装程序和所有 Windows 构建更新 OpenSSL 到 1.1.1n。

- bpo-38472: 修复交叉编译时 setup.py 中的 GCC 检测。现在 C 编译器以 LC_ALL=C 运行。之前，检测在德语环境下会失败。

- bpo-46513: configure 不再使用 `AC_C_CHAR_UNSIGNED` 宏，且 `pyconfig.h` 不再定义保留符号 `__CHAR_UNSIGNED__`。

- bpo-45925: 更新 Windows 安装程序以使用 SQLite 3.37.2。

- bpo-47032: 确保当构建的一部分失败时，Windows 安装构建能够正确地以非零退出码失败。

### Windows

- bpo-44549: Update bzip2 to 1.0.8 in Windows builds to mitigate CVE-2016-3189 and CVE-2019-12900

- bpo-46948: Prevent CVE-2022-26488 by ensuring the Add to PATH option in the Windows installer uses the correct path when being repaired.

- bpo-46638: 确保注册表虚拟化一致禁用。对于3.10及更早版本，它保持启用（某些注册表写入受到保护），而对于3.11及更高版本，它被禁用（注册表修改影响所有应用程序）。

### macOS

- bpo-45925: 更新 macOS 安装程序到 SQLite 3.37.2。

### IDLE

- bpo-46630: 使 Windows 上的查询对话框开始时光标在输入框中。

- bpo-45296: 在 IDLE 中明确了关闭、退出和退出的区别。在文件菜单中，'关闭' 和 '退出' 现在是 '关闭窗口'（当前窗口）和 '退出 IDLE'（通过关闭所有窗口）。在 Shell 中，'quit()' 和 'exit()' 意思是 '关闭 Shell'。如果没有其他窗口，这也将退出 IDLE。

- bpo-45447: Apply IDLE syntax highlighting to `pyi` files. Patch by Alex Waygood and Terry Jan Reedy.

## Python 3.9.10 final

发布日期: 2022-01-13

### 核心与内置函数

- bpo-46070: `Py_EndInterpreter()` now explicitly untracks all objects currently tracked by the GC. Previously, if an object was used later by another interpreter, calling `PyObject_GC_UnTrack()` on the object crashed if the previous or the next object of the `PyGC_Head` structure became a dangling pointer. Patch by Victor Stinner.

- bpo-46085: 修复 `OrderedDict` 的迭代器缓存机制。

- bpo-46110: 向 PEG 解析器添加最大递归检查以避免堆栈溢出。由 Pablo Galindo 提供补丁。

- bpo-46000: 提高 `curses` 模块与NetBSD curses的兼容性。

- bpo-45614: 修复了 `traceback` 对于模块名称无效的异常的显示。

- bpo-45806: Re-introduced fix that allows recovery from stack overflow without crashing the interpreter. The original fix as part of bpo-42500 was reverted (see release notes for Python 3.9.4) since it introduced an ABI change in a bugfix release which is not allowed. The new fix doesn't introduce any ABI changes. Patch by Mark Shannon.

- bpo-45822: 修复了解析器中的一个错误，该错误导致在没有提供标志时不尊重 PEP 263 编码声明。由Pablo Galindo提供补丁

- bpo-45820: 修复了当解析器在未读取任何输入时失败时的段错误。由Pablo Galindo提供补丁

- bpo-42540: 修复了在调用 `os.fork()` 时存在活跃的非默认内存分配器时的崩溃。

### 库

- bpo-40479: 修复 `hashlib` usedforsecurity 选项，使其在 FIPS 模式下与 OpenSSL 3.0.0 正确工作。

- bpo-46070: 修复了从不同的子解释器并行导入 `asyncio` 模块时可能出现的段错误。补丁由 Erlend E. Aasland 提供。

- bpo-46278: 在 `AbstractEventLoop.call_*()` 方法中反映 `context` 参数。循环实现已经支持它。

- bpo-46239: 在非 Windows 系统上导入 `asyncio.windows_events` 时改进了错误消息。

- bpo-20369: 当给定重复的 Futures 时，`concurrent.futures.wait()` 不再永远阻塞。由 Kumar Aditya 提供补丁。

- bpo-46105: 在使用 URL 和 extras 生成需求规范时遵循规范（importlib_metadata 4.8.3）。

- bpo-26952: `argparse` raises `ValueError` with clear message when trying to render usage for an empty mutually-exclusive group. Previously it raised a cryptic `IndexError`.

- bpo-27718: 修复 `signal` 模块的帮助文档。一些函数（例如 `signal()` 和 `getsignal()`）被遗漏了。

- bpo-46032: `functools.singledispatch()` 函数的 `registry()` 方法现在会检查第一个参数或第一个参数注解，并在不支持时抛出 TypeError。之前不支持的“类型”被忽略（例如 `typing.List[int]`）或在调用时引发错误（例如 `list[int]`）。

- bpo-46018: 确保 `math.expm1()` 在下溢时不抛出异常。

- bpo-27946: Fix possible crash when getting an attribute of class:`xml.etree.ElementTree.Element` simultaneously with replacing the `attrib` dict.

- bpo-13236: `unittest.TextTestResult` 和 `unittest.TextTestRunner` 现在更频繁地刷新输出流。

- bpo-37658: 修复了在某些条件下 `asyncio.wait_for()` 可能允许协程成功完成，但未能返回结果，可能导致内存泄漏或其他问题的问题。

- bpo-45831: `faulthandler` 现在可以在转储回溯时，通过一次 write() 系统调用写入仅包含 ASCII 的字符串（如文件名和函数名）。这减少了当两个线程或两个进程同时向同一文件（如 stderr）转储回溯时，产生不可读转储的风险。由 Victor Stinner 提供补丁。

- bpo-41735: 在 `PyObject_GetBuffer` 之前修复了 `zlib.Decompress.flush()` 方法中的线程锁。

- 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-43498: 避免在调整 `ProcessPoolExecutor` 的进程计数时可能出现的*“RuntimeError: dictionary changed size during iteration”*。

- bpo-29620: `assertWarns()` 在访问模块的 `__warningregistry__``导致新模块导入或另一线程中导入新模块时不再引发 ``RuntimeException`。由Kernc提供补丁。

### 文档

- bpo-19737: 更新 `globals()` 函数的文档。

- bpo-45840: 改进数据模型文档中的交叉引用。

- bpo-45788: 将sys.prefix的文档链接到sysconfig文档的安装路径部分。

- bpo-25381: 在扩展文档的扩展章节中，更新了一段关于包含异常信息的全局变量的段落。

- bpo-43905: 扩展了 `astuple()` 和 `asdict()` 的文档，警告应用了deepcopy并提供了解决方法。

- bpo-41028: 语言和版本切换器之前由每个cpython分支维护，现在由docsbuild-script处理。

### 测试

- bpo-46205: 修复由于竞态条件导致的runtest_mp中的挂起问题。

- bpo-46263: 在FreeBSD 14-dev上修复test_capi：指示jemalloc不要用垃圾字节填充释放的内存。

- 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-19460: Add new Test for `email.mime.nonmultipart.MIMENonMultipart`.

- bpo-45835: 修复了test_queue测试中多个“feeder”线程的竞态条件。

### 构建

- bpo-46263: `configure` 不再在 FreeBSD 平台上设置 `MULTIARCH`。

- bpo-46106: 在 Windows 构建、macOS 安装包构建和 CI 中更新 OpenSSL 到 1.1.1m。由 Kumar Aditya 提供补丁。

- bpo-44035: CI现在验证autoconf文件是否已使用当前且未打补丁的autoconf包重新生成。

- 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-41498: Python 现在可以在没有 `sigset_t` 的平台上编译。当 `sigset_t` 缺失时，`signal` 中的几个函数不可用。

  基于 Roman Yurchak 为 pyodide 提供的补丁。

- bpo-45881: `setup.py` 现在首先使用环境中的 `CC` 来发现多架构和交叉编译路径。

### Windows

- bpo-45901: 当通过 Microsoft Store 安装并设置为 `*.py` 文件的默认应用时，现在在调用脚本时无需显式启动 Python（即 `script.py args` 而非 `python script.py args`）即可将命令行参数传递给 Python。

### macOS

- bpo-40477: macOS的Python启动器应用程序现在能正确启动脚本，并在必要时在最近的macOS版本上运行终端应用程序。

- bpo-45732: 更新 python.org macOS 安装程序以使用 Tcl/Tk 8.6.12。

### 工具/示例

- bpo-45838: Fix line number calculation when debugging Python with GDB.

### C API

- bpo-39026: 修复 Python.h 以使用 Xcode 构建 C 扩展：从 `Include/cpython/pystate.h` 中移除一个相对包含。

## Python 3.9.9 final

Release date: 2021-11-15

### 核心与内置函数

- bpo-45738: 修复解析器中无效连续字符错误位置的计算。由Pablo Galindo提供补丁。

### 库

- bpo-45235: 恢复了 argparse 的一个错误修复，该修复导致了处理子解析器默认参数时的回归。这防止了叶级参数优先于根级参数。

- bpo-45765: 在 importlib.metadata 中，修复了对于空路径的发行版发现。

- bpo-45644: 使用 `python3 -m json.tool infile infile` 进行原地 JSON 文件格式化现在可以正常工作，之前会导致文件为空。由 Chris Wesseling 提供补丁。

### 文档

- bpo-45772: `socket.socket` 的文档被从函数更正为类。

- bpo-45392: 更新内置 `type` 的文档字符串，移除冗余行并提及构造器的关键字参数。

### Windows

- bpo-45732: 更新捆绑的 Tcl/Tk 至 8.6.12。

- bpo-45720: 移除了对 `shlwapi.dll` 的内部引用以帮助提高启动时间。此 DLL 将不再在每个 Python 进程启动时加载。

## Python 3.9.8 final

发布日期: 2021-11-05

### 核心与内置函数

- bpo-30570: 修复了在搜索病态的 `__bases__` 元组时 `issubclass()` 因无限递归而崩溃的问题。

- bpo-45494: 修复报告涉及无效延续字符错误时的解析器崩溃。由Pablo Galindo提供补丁。

- bpo-45385: Fix reference leak from descr_check. Patch by Dong-hee Na.

- bpo-45167: 修复了 `types.GenericAlias` 对象的深拷贝问题。

- bpo-44219: 在执行任意文件描述符的 `isatty` 系统调用时释放GIL。这特别影响了 `os.isatty()`、`os.device_encoding()` 和 `io.TextIOWrapper`。间接地，文本模式下的 `io.open()` 也受到影响。此更改解决了 `os.isatty()` 中的一个死锁问题。由Vincent Michel在 bpo-44219 中提供补丁。

- bpo-44959: 在HP-UX系统上添加了对'.sl'后缀扩展模块的回退支持。

- bpo-44050: 通过设置 `m_size` 为-1来表明使用全局状态的扩展可以再次在多个解释器中使用。这恢复到Python 3.8的行为。

- bpo-45121: 修复了当直接调用或通过 `super()` 调用时，`Protocol.__init__` 会引发``RecursionError``的问题。由Yurii Karabas提供补丁。

- bpo-45083: 当解释器渲染异常时，其名称现在具有完整的限定名。以前只有类名被连接到模块名，这有时会导致显示的全名不正确。

  （此问题仅影响C代码异常渲染，`traceback` 模块已经使用了限定名）。

### 库

- bpo-45678: Fix bug in Python 3.9 that meant `functools.singledispatchmethod` failed to properly wrap the attributes of the target method. Patch by Alex Waygood.

- bpo-45679: 修复多值 `typing.Literal` 的缓存问题。`Literal[True, 2]` 不再等于``Literal[1, 2]``。

- bpo-45438: 修复泛型内置类型的typing.Signature字符串表示。

- bpo-45581: `sqlite3.connect()` 现在在底层SQLite API发出内存错误信号时正确引发 `MemoryError`。由Erlend E. Aasland提供补丁。

- bpo-39679: Fix bug in `functools.singledispatchmethod` that caused it to fail when attempting to register a `classmethod()` or `staticmethod()` using type annotations. Patch contributed by Alex Waygood.

- bpo-45515: 在 `datetime` 文档中添加了对 `zoneinfo` 的引用，主要替换了对 `dateutil.tz` 的过时引用。由 Paul Ganssle 更改。

- bpo-45467: 修复了 "raw-unicode-escape" 编解码器中的增量解码器和流读取器。之前如果转义序列被分割，它们会失败。

- bpo-45461: 修复了 "unicode-escape" 编解码器中的增量解码器和流读取器。之前如果转义序列被分割，它们会失败。

- bpo-45239: 修复了 `email.utils.parsedate_tz()` 在某些无效输入上崩溃并抛出 `UnboundLocalError` 而不是返回 `None` 的问题。由 Ben Hoyt 提供补丁。

- bpo-44904: 修复了 `doctest` 模块中的一个错误，该错误会在文档字符串包含一个带有 `classmethod` `property` 的示例时导致失败。由 Alex Waygood 提供补丁。

- bpo-45406: Make `inspect.getmodule()` catch `FileNotFoundError` raised by :'func:`inspect.getabsfile`, and return `None` to indicate that the module could not be determined.

- bpo-45262: 防止 asyncio 中的 use-after-free。确保缓存的运行循环持有人在释放时被清除，以防止在 get_running_loop 中出现 use-after-free。

- bpo-45386: 使 `xmlrpc.client` 对 C 运行时更加健壮，其中底层的 C `strftime` 函数在测试年份格式化选项时会导致 `ValueError`。

- bpo-45371: Fix clang rpath issue in `distutils`. The UnixCCompiler now uses correct clang option to add a runtime library directory (rpath) to a shared library.

- bpo-20028: Improve error message of `csv.Dialect` when initializing. Patch by Vajrasky Kok and Dong-hee Na.

- bpo-45343: 将捆绑的 pip 更新到 21.2.4，setuptools 更新到 58.1.0。

- bpo-41710: On Unix, if the `sem_clockwait()` function is available in the C library (glibc 2.30 and newer), the `threading.Lock.acquire()` method now uses the monotonic clock (`time.CLOCK_MONOTONIC`) for the timeout, rather than using the system clock (`time.CLOCK_REALTIME`), to not be affected by system clock changes. Patch by Victor Stinner.

- bpo-45328: 修复了 `http.client.HTTPConnection` 在不支持 `TCP_NODELAY` 套接字选项的操作系统中正常工作的问题。

- bpo-1596321: 修复当 `threading` 模块首次从非主线程导入时 `threading._shutdown()` 函数的问题：在 Python 退出时不再记录错误。

- bpo-45274: 修复 `threading` 模块中 `Thread.join()` 方法的竞态条件。如果函数被信号中断并且信号处理程序引发异常，确保线程保持在一个一致的状态以防止死锁。由 Victor Stinner 提供补丁。

- bpo-45238: 修复 `unittest.IsolatedAsyncioTestCase.debug()`：现在可以运行异步方法和回调。

- bpo-36674: `unittest.TestCase.debug()` 现在如果类或测试方法被跳过装饰器装饰，会引发 `unittest.SkipTest`。

- bpo-45235: 修复了一个问题，即当使用带有默认值的子解析器时，argparse不会保留提供的命名空间中的值。

- bpo-45234: 修复了 `copyfile()`, `copy()`, `copy2()` 中的一个回归问题，当源是目录时不应抛出 `FileNotFoundError` 而应抛出 `IsADirectoryError`。

- bpo-45228: 修复解析J1939网络地址时的栈缓冲区溢出问题。

- bpo-45192: 修复 `tempfile._infer_return_type` 函数，使得 `tempfile` 函数的 `dir` 参数接受实现 `os.PathLike` 协议的对象。

  由 Kyungmin Lee 提供补丁。

- bpo-45160: 当追踪被 ttk OptionMenu 使用的 tkinter 变量时，回调不再被调用两次。

- bpo-35474: 使用 `strict=False` 调用 `mimetypes.guess_all_extensions()` 不再影响后续使用 `strict=True` 调用的结果。同时，修改返回的列表不再影响全局状态。

- bpo-45166: `typing.get_type_hints()` 现在可以与 `Final` 包裹在 `ForwardRef` 中的情况一起工作。

- bpo-45097: Remove deprecation warnings about the loop argument in `asyncio` incorrectly emitted in cases when the user does not pass the loop argument.

- bpo-45081: 修复了继承自 `typing.Protocol` 子类的数据类具有错误 `__init__` 的问题。由 Yurii Karabas 提供补丁。

- bpo-24444: 修复了 `argparse` 帮助显示中当选项的帮助设置为 1+ 个空格或当 choices 参数为空容器时引发的错误。

- bpo-45021: 修复了在使用 `concurrent.futures` 模块时，fork 的子进程在关闭时可能出现的死锁问题。

- bpo-45030: 修复了在序列化和复制 range 迭代器时的整数溢出问题。

- bpo-39039: 当文件提取过程中发生 zlib 错误时，tarfile.open 会引发 `ReadError`。

- bpo-44594: 修复了 `ExitStack` 和 `AsyncExitStack` 异常链的一个边缘情况。当异常在传播过程中 `__context__` 被显式设置为 `None` 时，它们现在将匹配 `with` 块的行为。

### 文档

- bpo-45726: 改进 `functools.singledispatch()` 和 `functools.singledispatchmethod` 的文档。

- bpo-45680: 修改关于 `GenericAlias` 对象的文档，以澄清非容器类也可以实现``__class_getitem__``。由Alex Waygood提供补丁。

- bpo-45655: 在 `typing` 模块文档的顶部新增一个“相关的 Python 增强提案（PEP）”部分。由Alex Waygood提供补丁。

- bpo-45604: 在 `multiprocessing.log_to_stderr` 函数的文档中添加 `level` 参数。

- bpo-45464: 在 Built-in Exceptions 文档中提到，由于可能存在内存布局不兼容问题，不建议在单个子类中继承多个异常类型。

- bpo-45449: 在 `collections.abc` 中添加关于 PEP 585 的说明。

- bpo-45516: 在 `importlib.abc.Traversable` 文档中添加协议描述。

- bpo-20692: 添加编程FAQ条目，解释整数字面量属性访问需要在字面量后加空格或使用括号。

- bpo-45216: 移除 `difflib` 中额外的方法文档列表。它在pydoc中渲染两次，并且在某些地方已经过时。

### 测试

- bpo-45578: 为 `dis.distb()` 添加测试。

- bpo-45577: 在 `test_zoneinfo` 中为所有 `pickle` 协议添加子测试。

- bpo-43592: `test.libregrtest` 现在会在默认值对我们的测试套件来说太低时（如经常在macOS上的情况）提高文件描述符的最大数量的软资源限制。

- bpo-40173: 修复 `test.support.import_helper.import_fresh_module()`。

- bpo-45280: 为空的 `typing.NamedTuple` 添加测试用例。

- bpo-45269: 覆盖当向 `c_make_encoder` 提供无效 `markers` 类型的情况。

- bpo-45209: 修复 `_test_multiprocessing._TestSharedMemory.test_shared_memory_cleaned_after_process_termination` 中的 `UserWarning: resource_tracker` 警告。

- bpo-45195: 修复 test_readline.test_nonascii()：有时，换行符不会在末尾写入，因此不要期望在输出中看到它。Victor Stinner 提供的补丁。

- bpo-45156: 修复了由 `create_autospec()` 创建的模拟在 `unittest.mock.seal()` 上的无限循环问题。

- bpo-45042: 修复了使用 `@hashlib_helper.requires_hashdigest` 装饰的测试类总是被跳过的问题。

### 构建

- bpo-43158: `setup.py` 现在使用来自配置脚本的值来构建 `_uuid` 扩展模块。配置现在也能检测util-linux的 `libuuid`。

- bpo-45571: `Modules/Setup` 现在使用 `PY_CFLAGS_NODIST` 而不是 `PY_CFLAGS` 来编译共享模块。

- bpo-45532: 更新 `sys.version` 使用 `main` 作为后备信息。由 Jeong YunWon 提供补丁。

- bpo-45405: 防止在使用非 Apple clang 的近期版本运行 `configure` 时出现 `internal configure error`。由 David Bohman 提供补丁。

- bpo-45220: 避免自动使用Windows 11 SDK预览版构建。可以通过在构建前设置``DefaultWindowsSDKVersion``环境变量来覆盖此设置。

### Windows

- bpo-45337: venv 现在会在创建的环境可能需要通过不同的路径访问时发出警告，由于重定向、链接或连接点。现在它还能在需要替代路径时正确安装或升级组件。

### macOS

- bpo-44828: 避免在使用python.org macOS安装程序提供的Tk 8.6.11时，在macOS 12 Monterey上出现tkinter文件对话框失败的问题。由Tk项目的Marc Culler提供补丁。

### IDLE

- bpo-45296: 在 Windows 上，将退出/退出的提示信息改为建议使用 Ctrl-D（这是有效的），而不是 <Ctrl-Z Return>（在 IDLE 中无效）。

### C API

- bpo-44687: `BufferedReader.peek()` 在文件已全部缓冲时不再引发 `ValueError`。

- bpo-44751: 从公共 `Python.h` 头文件中移除 `crypt.h` 包含。

## Python 3.9.7 final

Release date: 2021-08-30

### 安全性

- bpo-42278: 将 `tempfile.mktemp()` 的使用替换为 `TemporaryDirectory`，以避免潜在的竞态条件。

- bpo-41180: 向 `marshal` 模块添加审计事件，并停止为每个解组的代码对象引发 `code.__init__` 事件。直接实例化的代码对象将继续引发事件，审计事件处理程序应检查或收集原始 marshal 数据。这减少了从 `.pyc` 文件加载时的显著性能开销。

- bpo-44394: Update the vendored copy of libexpat to 2.4.1 (from 2.2.8) to get the fix for the CVE-2013-0340 "Billion Laughs" vulnerability. This copy is most used on Windows and macOS.

- bpo-43124: 在 `smtplib` 中的内部函数 `putcmd` 现在会对输入进行 `\r` 和 `\n` 字符的清理，以避免（不太可能的）命令注入。

### 核心与内置函数

- bpo-45018: Fixed pickling of range iterators that iterated for over 2**32 times.

- bpo-44962: 修复了WeakKeyDictionary、WeakValueDictionary和WeakSet中当两个线程尝试提交最后一个待处理的移除时的竞争条件。这修复了asyncio.create_task并修复了asyncio.run中shutdown_asyncgens未运行导致的数据丢失问题。

- bpo-44954: 修复了一个边界情况下的bug，即 `float.fromhex('0x.8p-1074')` 的结果错误地四舍五入。

- bpo-44947: 改进了导入语句中尾随逗号的语法错误提示。由Pablo Galindo提供补丁。

- bpo-44698: 恢复了类型为 `float` 或 `complex` 的整数值指数的复数幂运算行为。

- bpo-44885: 修正了带有格式规范和重复表达式的f字符串的ast位置。补丁由Pablo Galindo提供。

- 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-44698: 修复复杂对象求幂中的未定义行为。

- bpo-44562: 在初始化 `types.GenericAlias` 时，错误路径中移除 `PyObject_GC_Del()` 的使用。

- bpo-44523: 移除 `hash()` 对 `weakref.proxy` 对象的透传，以防止当原始引用对象死亡而代理是可哈希对象的一部分时产生意外后果。由 Pablo Galindo 提供补丁。

- bpo-44472: 修复当异常被抛出时的 ltrace 功能。由 Pablo Galindo 提供补丁。

- bpo-44184: 修复了当解构函数移除堆类型最后一个强引用时 Python 退出的崩溃问题。由 Victor Stinner 提供补丁。

- bpo-39091: 修复向生成器的 `throw()` 方法传递非异常对象时导致的崩溃。由 Noah Oxer 提供补丁。

### 库

- bpo-41620: `run()` 现在总是返回一个 `TestResult` 实例。之前如果测试类或方法使用了跳过装饰器，它会返回 `None`。

- bpo-43913: 修复了在 `unittest` 中清理类和模块时的错误：

  - 使用 `addModuleCleanup()` 注册的函数不会被调用，除非用户在测试模块中定义了 `tearDownModule()`。

  - 如果 `tearDownClass` 设置为 `None`，使用 `addClassCleanup()` 注册的函数不会被调用。

  - `TestResult` 中的缓冲功能对使用 `addClassCleanup()` 和 `addModuleCleanup()` 注册的函数无效。

  - 在缓冲和调试模式下，使用 `addClassCleanup()` 和 `addModuleCleanup()` 注册的函数中的错误未被正确处理。

  - `setUpModule()` 和使用 `addModuleCleanup()` 注册的函数中的错误以错误的顺序报告。

  - 以及几个较小的错误。

- bpo-45001: 使电子邮件日期解析对格式错误的输入更加健壮，特别是针对仅包含空白的 `Date:` 头。由 Wouter Bolsterlee 提供补丁。

- bpo-44449: Fix a crash in the signal handler of the `faulthandler` module: no longer modify the reference count of frame objects. Patch by Victor Stinner.

- bpo-44955: 对于 `run()` 中隐式创建的 `TestResult` 对象，方法 `stopTestRun()` 现在总是与方法 `startTestRun()` 成对调用。之前，对于使用跳过装饰器装饰的测试方法和类，它不会被调用。

- bpo-38956: 当与 `argparse.ArgumentDefaultsHelpFormatter` 一起使用时，`argparse.BooleanOptionalAction` 的默认值不再打印两次。

- bpo-44581: 将捆绑的 pip 升级到 21.2.3 和 setuptools 到 57.4.0。

- bpo-44849: Fix the `os.set_inheritable()` function on FreeBSD 14 for file descriptor opened with the `O_PATH` flag: ignore the `EBADF` error on `ioctl()`, fallback on the `fcntl()` implementation. Patch by Victor Stinner.

- bpo-44605: @functools.total_ordering() 装饰器现在可以与元类一起工作。

- bpo-44822: `sqlite3` 用户定义的函数和聚合器返回带有嵌入 NUL 字符的 `strings` 不再被截断。由 Erlend E. Aasland 提供补丁。

- bpo-44815: Always show `loop=` arg deprecations in `asyncio.gather()` and `asyncio.sleep()`

- bpo-44806: `typing.Protocol` 的非协议子类现在会忽略从协议基类继承的 `__init__` 方法。

- bpo-44667: `tokenize.tokenize()` 不会在源代码不以换行符结束但最后一行是注释时错误地生成 `NEWLINE` 令牌，因为该函数已经生成了一个 `NL` 令牌。由 Pablo Galindo 提供补丁。

- bpo-42853: Fix `http.client.HTTPSConnection` fails to download >2GiB data.

- bpo-44752: `rcompleter` 不在 `property` 对象上调用 `getattr()` 以避免评估相应方法的副作用。

- 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-40897: 在 `inspect.signature()` 中优先使用当前类的构造函数。由Weipeng Hong提供补丁。

- bpo-44608: Fix memory leak in `_tkinter._flatten()` if it is called with a sequence or set, but not list or tuple.

- bpo-41928: 更新 `shutil.copyfile()`，当以 `os.path.sep` 结尾的路径不存在时，抛出 `FileNotFoundError` 而不是混淆的 `IsADirectoryError`；`shutil.copy()` 和 `shutil.copy2()` 也会受到影响。

- bpo-44566: 处理由 @contextlib.contextmanager 生成器引发的 StopIteration 子类。

- bpo-44558: Make the implementation consistency of `indexOf()` between C and Python versions. Patch by Dong-hee Na.

- bpo-41249: 修正 `TypedDict` 以使其能与 `typing.get_type_hints()` 和跨模块的注解延迟求值一起工作。

- bpo-44461: 修复 `pdb` 处理由于包没有 `__main__` 模块而导致的导入错误的 bug。

- bpo-42892: 修复 `email.message.EmailMessage` 在解析格式错误的多部分邮件时抛出的异常。

- bpo-27827: `pathlib.PureWindowsPath.is_reserved()` 现在能识别更多保留文件名，包括那些带有尾部空格或冒号的文件名。

- bpo-34266: 处理解析 `pdb` 的 run/restart 命令参数时的异常。

- bpo-27334: `sqlite3` 上下文管理器现在在提交失败时执行回滚（从而释放数据库锁）。补丁由Luca Citi和Erlend E. Aasland提供。

- bpo-43853: 改进了 `sqlite3` 用户定义函数和聚合函数的字符串处理：

  - 现在可以将含有嵌入空字符的字符串传递给 UDFs

  - 转换失败现在会正确引发 `MemoryError`

  由 Erlend E. Aasland 提交的补丁。

- bpo-43048: Handle `RecursionError` in `TracebackException`'s constructor, so that long exceptions chains are truncated instead of causing traceback formatting to fail.

- bpo-41402: 修复 `email.message.EmailMessage.set_content()` 当使用二进制数据和 `7bit` 内容传输编码调用时的问题。

- bpo-32695: `tarfile.open()` 的 compresslevel 和 preset 关键字参数现在都已记录并测试。

- bpo-34990: 修复了 compileall 模块中的一个 Y2k38 错误，该错误会导致在 2038 年后修改的文件编译失败。

- bpo-38840: 在没有共享内存实现的平台上修复 `test___all__`。

- bpo-30256: 通过AutoProxy传递multiprocessing BaseProxy参数 `manager_owned`。

- bpo-27513: `email.utils.getaddresses()` 现在接受 `email.header.Header` 对象以及字符串值。由Zackery Spytz提供补丁。

- bpo-33349: lib2to3现在在任何地方都能识别异步生成器。

- bpo-29298: 修复没有 `dest` 的必需子解析器未接收到参数时的 `TypeError`。由Anthony Sottile提供补丁。

### 文档

- bpo-44903: Removed the othergui.rst file, any references to it, and the list of GUI frameworks in the FAQ. In their place I've added links to the Python Wiki `page on GUI frameworks`.

- bpo-44693: 通过替换混淆的词汇"伪模块"为更准确的描述，更新了术语表中__future__的定义。

- bpo-35183: 向os.path.splitext文档添加典型示例

- bpo-30511: 澄清由于依赖改变当前工作目录，`shutil.make_archive()` 不是线程安全的。

- bpo-44561: 更新Doc/distributing/index.rst中三个过期的超链接："项目结构"、"构建和打包项目"以及"将项目上传到Python包索引"。

- bpo-42958: 更新了 `filecmp.cmp()` 的文档字符串和文档，使其更加准确且不易混淆，特别是关于 shallow 参数的部分。

- bpo-44558: 使 `countOf()` 的文档字符串和Python实现与其C实现的行为相匹配。

- bpo-44544: 列出 `textwrap.wrap()`、`textwrap.fill()` 和 `textwrap.shorten()` 的所有kwargs。现在，有导航链接指向 `TextWrap` 的属性，这使得在文档中导航更加容易，同时最小化了重复。

- bpo-38062: 澄清atexit在内部使用相等比较。

- bpo-43066: 向 `zipfile` 文档添加警告：带有前导斜杠的文件名参数可能导致在Windows系统上无法打开存档。

- bpo-27752: csv.Dialect的文档更加描述性。

- bpo-44453: 修复了 `sysconfig.get_path()` 返回类型的文档。

- bpo-39498: 添加一个“安全考虑”索引，链接到有明确记录安全考虑的标准库模块。

- bpo-33479: 移除了关于 tkinter 线程安全的未经证实的声明。这一说法已经多年不成立，可能从来就不是真的。关于什么是真的解释可能会在更多的讨论之后，甚至可能在修补 _tkinter.c 之后添加。

### 测试

- bpo-25130: 在测试中添加 `gc.collect()` 的调用以支持 PyPy。

- bpo-45011: Made tests relying on the `_asyncio` C extension module optional to allow running on alternative Python implementations. Patch by Serhiy Storchaka.

- bpo-44949: 修复 test_readline 的自动历史测试：有时，换行符不会在末尾写入，因此不要期望它在输出中出现。

- bpo-44852: 添加了在运行回归测试套件时全面静默 DeprecationWarnings 的能力。

- bpo-40928: 通知在 macOS 上运行 test_decimal 回归测试的用户，test_decimal 可能会输出无害的“malloc can't allocate region”消息。

- bpo-44734: Fixed floating point precision issue in turtle tests.

- bpo-44708: 回归测试现在在使用 -w 运行时，仅重新运行受影响的测试方法，而不是重新运行整个测试文件。

- bpo-30256: 添加嵌套队列的测试，当在 `ListProxy` 和 `DictProxy` 中使用``multiprocessing``共享对象 `AutoProxy[Queue]` 时。

### 构建

- bpo-44535: 支持在Windows上使用Visual Studio 2022安装进行构建。

- bpo-43298: 改进了在没有安装Windows SDK时构建的错误消息。

### Windows

- bpo-45007: 在Windows构建中更新到OpenSSL 1.1.1l

- bpo-44572: 避免在 `platform` 模块中消耗标准输入

- bpo-40263: 这是 https://bugs.python.org/issue26903 的后续错误。一旦应用了该修复，我们会遇到一个差一的断言问题。该断言不正确。

### macOS

- bpo-45007: 更新 macOS 安装程序构建以使用 OpenSSL 1.1.1l。

- bpo-44689: `ctypes.util.find_library()` 现在在 macOS 11 Big Sur 上即使是在旧版 macOS 上构建的 Python 也能正确工作。之前，当在旧版 macOS 系统上构建时，由于系统库存储方式的改变，`find_library` 在 Big Sur 上运行时无法找到 macOS 系统库。

## Python 3.9.6 最终版

发布日期: 2021-06-28

### 安全性

- bpo-44022: mod:`http.client` now avoids infinitely reading potential HTTP headers after a `100 Continue` status response from the server.

### 核心与内置函数

- bpo-44409: 修复在初始化分词器时抛出的分词器错误的位置信息。补丁由 Pablo Galindo 提供。

- bpo-43667: 在 Oracle Solaris 上的非 UTF 语言环境中改进 Unicode 支持。此问题不影响其他 Solaris 系统。

- bpo-44168: 修复了解析器中涉及带有无效表达式的关键字参数的错误消息。由 Pablo Galindo 提供补丁。

- bpo-44114: 修复 C 代码中错误的 dictkeys_reversed 和 dictitems_reversed 函数签名，这破坏了 webassembly 构建。

- bpo-44070: No longer eagerly makes import filenames absolute, except for extension modules, which was introduced in 3.9.5.

- bpo-28146: 修复 `str.format()` 中一个令人困惑的错误信息。

- bpo-11105: 当通过 `compile()` 编译带有递归引用的 `ast.AST` 对象时，解释器不再崩溃，而是引发 `RecursionError`。

### 库

- bpo-44516: 将捆绑的 pip 更新至 21.1.3 版本。

- bpo-44482: 修复在替代Python实现中 `glob` 极不可能发生的资源泄漏。

- 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-44422: `threading.enumerate()` 函数现在使用可重入锁以防止在可重入调用上挂起。由 Victor Stinner 提供补丁。

- bpo-44395: Fix `as_string()` to pass unixfrom properly. Patch by Dong-hee Na.

- bpo-44342: [Enum] Be more robust in searching for pickle support before making an enum class unpicklable.

- bpo-44356: [Enum] 如果所有数据类型混合都是相同的，则允许多个数据类型混合。

- bpo-44254: 在 Mac 上，为 turtledemo 按钮文本提供一种在亮或暗背景下都能工作的颜色。程序员无法控制后者。

- bpo-44145: `hmac` 计算在调用OpenSSL `HMAC_Update` C API时（3.9中的新功能）没有释放GIL。这无意中阻止了并行计算，而其他 `hashlib` 算法支持并行计算。

- bpo-37788: 修复了一个当 Thread 对象从未被 join 时的引用泄漏问题。

- bpo-44061: 修复了之前版本中当使用 `pathlib.Path` 对象的列表调用 `pkgutil.iter_modules()` 时的回归问题。

- bpo-36515: 当为 ARM 平台编译时，`hashlib` 模块不再进行非对齐的内存访问。

- bpo-44018: random.seed() 不再改变 bytearray 输入。

- bpo-38352: 将 `IO`, `BinaryIO`, `TextIO`, `Match`, 和 `Pattern` 添加到 `typing.__all__`。由 Jelle Zijlstra 提供补丁。

- bpo-43972: When `http.server.SimpleHTTPRequestHandler` sends a `301 (Moved Permanently)` for a directory path not ending with `/`, add a `Content-Length: 0` header. This improves the behavior for certain clients.

- bpo-28528: 修复 `pdb` 中的一个错误，其中 `checkline()` 如果在 `reset()` 之后调用会引发 `AttributeError`。

- bpo-43776: 当 `subprocess.Popen` 的参数以字符串或 `pathlib.Path` 形式提供时，Popen 实例的 repr 现在显示正确的内容。

- bpo-43666: AIX: `Lib/_aix_support.get_platform()` may fail in an AIX WPAR. The fileset bos.rte appears to have a builddate in both LPAR and WPAR so this fileset is queried rather than bos.mp64. To prevent a similiar situation (no builddate in ODM) a value (9988) sufficient for completing a build is provided. Patch by M Felt.

- bpo-43650: 修复 `shutil.unpack_archive()` 中的 `MemoryError`，该错误在 `shutil._unpack_zipfile()` 处理大文件时发生。由 Igor Bolshakov 提供补丁。

- bpo-43318: 修复了一个错误，其中 `pdb` 并不总是回显清除的断点。

- bpo-43295: `datetime.datetime.strptime()` 现在在匹配 `'z'` 和 `%z` 格式说明符时引发 `ValueError` 而不是 `IndexError`。

- bpo-37022: `pdb` 现在通过其 `p` 和 `pp` 命令显示来自 `repr()` 的异常。

### 文档

- bpo-40620: 将教程controlflow.rst第4.3节中的示例转换为解释器演示样式。

- bpo-13814: 在设计FAQ中，回答了“为什么生成器不支持with语句？”

- bpo-44392: 在C API文档中新增了一个关于类型提示中使用的类型的部分。记录了``Py_GenericAlias``和 `Py_GenericAliasType`。

- bpo-38291: 在文档中标记 `typing.io` 和 `typing.re` 为自Python 3.8起弃用。它们从未得到类型检查器的适当支持。

- bpo-44322: 记录了SyntaxError的参数有一个details元组，并且对于f-string字段替换表达式中的错误调整了details。

- bpo-44195: 更正了文档中对 `TraversableResources` 的引用。没有 `TraversableReader`。

- bpo-41963: 记录了 `ConfigParser` 在读取配置文件时会去掉注释。

- bpo-44072: 更正了在数字ABC层次结构中 `**` 支持被添加的位置，即numbers.Complex，而非numbers.Integral。

- bpo-43558: 在 `dataclasses` 的文档中添加了备注，说明任何基类的 `__init__()` 必须在 `__post_init__()` 中被调用，并附带了一个代码示例。

- bpo-41621: Document that `collections.defaultdict` parameter `default_factory` defaults to None and is positional-only.

### 测试

- bpo-44287: 通过使用更长的超时时间来修复asyncio的test_popen()测试_windows_utils。使用军用级经过实战检验的 `test.support.SHORT_TIMEOUT` 超时而不是硬编码的10秒超时：默认为30秒，但在慢速构建机器人上会更长。由Victor Stinner提供补丁。

- bpo-44363: 在test_capi中考虑地址消毒器。当运行GCC地址消毒器时，test_capi现在可以通过。

### 构建

- bpo-44381: Windows构建现在接受 `EnableControlFlowGuard` 设置为 `guard` 以启用CFG。

### Windows

- bpo-41299: Fix 16ms jitter when using timeouts in `threading`, such as with `threading.Lock.acquire()` or `threading.Condition.wait()`.

### macOS

- bpo-43568: Relax unnecessarily restrictive MACOSX_DEPLOYMENT_TARGET check when building extension modules for macOS. Patch by Joshua Root.

- bpo-43109: 允许 --with-lto 配置选项与 Apple 提供的 Xcode 或 Command Line Tools 一起工作。

### IDLE

- 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-44074: 使patchcheck自动检测正确的基础分支名称（之前硬编码为'master'）

### C API

- bpo-44441: 现在 `Py_RunMain()` 会在退出时将 `PyImport_Inittab` 重围为其初始值。 必须能够在每次 Python 初始化时调用 `PyImport_AppendInittab()` 或 `PyImport_ExtendInittab()`。 由 Victor Stinner 编写补丁。

- bpo-42083: Fix crash in `PyStructSequence_NewType()` when passed `NULL` in the documentation string slot.

## Python 3.9.5 最终版

发布日期: 2021-05-03

### 安全性

- bpo-43434: Creating a `sqlite3.Connection` object now also produces a `sqlite3.connect` auditing event. Previously this event was only produced by `sqlite3.connect()` calls. Patch by Erlend E. Aasland.

- bpo-43882: URL 部分中存在的换行符或制表符可能允许某些形式的攻击。

  遵循 WHATWG 定义的 URL 控制规范，`urllib.parse()` 现在从 URL 中移除 ASCII 换行符和制表符，防止此类攻击。

- bpo-43472: 确保解释器级审计钩子在通过 `_xxsubinterpreters` 模块调用时接收到 `cpython.PyInterpreterState_New` 事件。

- bpo-36384: `ipaddress` module no longer accepts any leading zeros in IPv4 address strings. Leading zeros are ambiguous and interpreted as octal notation by some libraries. For example the legacy function `socket.inet_aton()` treats leading zeros as octal notatation. glibc implementation of modern `inet_pton()` does not accept any leading zeros. For a while the `ipaddress` module used to accept ambiguous leading zeros.

- bpo-43075: 修复 `urllib.request.AbstractBasicAuthHandler` 中的正则表达式拒绝服务（ReDoS）漏洞。易受 ReDoS 攻击的正则表达式具有二次最坏情况复杂度，当识别精心制作的无效 RFC 时，它可能导致拒绝服务。此 ReDoS 问题位于客户端，需要远程攻击者控制 HTTP 服务器。

- bpo-42800: 现在为 frame.f_code、traceback.tb_frame 和生成器代码/帧属性访问触发审计钩子。

### 核心与内置函数

- bpo-43105: Importlib 现在在从文件位置创建模块规范对象时解析相对路径。

- bpo-42924: 修复了 `bytearray` 重复错误地从缓冲区开始复制数据的问题，即使数据在缓冲区中偏移（例如，在将 `bytearray` 开始的切片重新分配给较短的字节字符串后）。

### 库

- bpo-43993: 更新捆绑的 pip 到 21.1.1。

- bpo-43937: 修复了 `turtle` 模块与非默认根窗口一起工作的问题。

- bpo-43930: 更新捆绑的 pip 到 21.1 和 setuptools 到 56.0.0

- bpo-43920: OpenSSL 3.0.0: 当 cadata 不包含有效证书时，`load_verify_locations()` 现在返回一致的错误消息。

- bpo-43607: `urllib` 现在可以将带有 `\\?\` 前缀的 Windows 路径转换为 URL 路径。

- bpo-43284: platform.win32_ver 从 sys.getwindowsversion().platform_version 派生 Windows 版本，而后者又从 kernel32.dll 派生版本（可能与 Windows 本身的版本不同）。因此，更改 platform.win32_ver 以使用平台模块的 _syscmd_ver 私有函数来确定版本，以返回准确的版本。

- bpo-42248: [Enum] ensure exceptions raised in `_missing_` are released.

- bpo-43799: OpenSSL 3.0.0：定义 `OPENSSL_API_COMPAT` 为1.1.1以抑制弃用警告。Python需要OpenSSL 1.1.1的API。

- bpo-43794: Add `ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL 3.0.0)

- bpo-43789: OpenSSL 3.0.0：当第一次调用已经发出错误信号时，不再第二次调用密码回调函数。

- bpo-43788: `ssl` 错误代码的头文件现在是特定于OpenSSL版本的。异常现在会显示正确的原因和库代码。``make_ssl_data.py``脚本已被重写，以使用OpenSSL带有错误代码的文本文件。

- bpo-43655: `tkinter` 对话框窗口现在被 macOS 和 X Window 上的窗口管理器识别为对话框。

- bpo-43534: `turtle.textinput()` 和 `turtle.numinput()` 现在创建了一个代表画布窗口工作的瞬态窗口。

- bpo-43522: 修复了 `hostname_checks_common_name` 的问题。OpenSSL 不会将主机标志从 struct SSL_CTX 复制到 struct SSL。

- bpo-42967: 在解析 `str` 查询字符串时，允许 `bytes` `separator` 参数在 `urllib.parse.parse_qs` 和 `urllib.parse.parse_qsl` 中使用。之前这会引发 `TypeError`。

- bpo-43176: 修复了继承自无字段冻结数据类的数据类的处理。现在能正确检测为错误。

- bpo-41735: 修复 zlib 模块中的线程锁在极少数情况下可能出错的问题。由 Ma Lin 提供补丁。

- bpo-36470: Fix dataclasses with `InitVar`s and `replace()`. Patch by Claudiu Popa.

- bpo-32745: 修复了处理 ctypes 的 `ctypes.c_wchar_p` 类型时的一个回归问题：嵌入的空字符会导致抛出 `ValueError`。由 Zackery Spytz 提供补丁。

### 文档

- bpo-43959: 澄清了关于 PyContextVar C-API 的文档。

- bpo-43938: 更新 dataclasses 文档以表达 FrozenInstanceError 派生自 AttributeError。

- 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-43811: 在GitHub Actions上测试多个OpenSSL版本。使用ccache加速测试。

- bpo-43791: OpenSSL 3.0.0：禁用对旧协议TLS 1.0和1.1的测试。测试因TLSV1_ALERT_INTERNAL_ERROR而失败。

### Windows

- bpo-35306: Avoid raising errors from `pathlib.Path.exists()` when passed an invalid filename.

- 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-43492: 升级Windows安装程序以使用SQLite 3.35.5。

### macOS

- bpo-42119: 修复构建Python时对macOS SDK路径的检查。缩小搜索范围以匹配SDKs的内容，即仅包括 `/System/Library`、`/System/IOSSupport``和 ``/usr` 中除 `/usr/local` 外的文件。之前，任何在 `/System` 下的内容都被假定为在SDK中，这在10.15+的新文件系统布局中会导致问题，因为用户文件系统可能看似挂载在 `/System` 下。`/Library` 中的路径也被错误地视为SDK位置。

- bpo-44009: 提供"python3.x-intel64"可执行文件，以便在Apple Silicon Mac上可靠地强制macOS universal2框架构建在Rosetta 2 Intel-64仿真下运行。这对于测试或当universal2 wheel尚不可用时非常有用。

- bpo-43492: 更新macOS安装程序以使用SQLite 3.35.4。

### IDLE

- bpo-43655: IDLE对话框窗口现在被macOS和X Window的窗口管理器识别为对话框。

## Python 3.9.4 final

Release date: 2021-04-04

### 核心与内置函数

- bpo-43710: Reverted the fix for https://bugs.python.org/issue42500 as it changed the PyThreadState struct size and broke the 3.9.x ABI in the 3.9.3 release (visible on 32-bit platforms using binaries compiled using an earlier version of Python 3.9.x headers).

### 库

- bpo-26053: 修复了 `pdb` 交互式运行命令回显 shell 命令行参数的错误，即使这些参数已在 pdb 提示符下被覆盖。

## Python 3.9.3 final

Release date: 2021-04-02

### 安全性

- bpo-42988: CVE-2021-3426: Remove the `getfile` feature of the `pydoc` module which could be abused to read arbitrary files on the disk (directory traversal vulnerability). Moreover, even source code of Python modules can contain sensitive data like passwords. Vulnerability reported by 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-43660: 修复在替换 `sys.stderr` 为一个可在打印异常时删除对象的可调用对象时发生的崩溃。由 Pablo Galindo 提供补丁。

- bpo-43555: 为无效的行继续字符报告 `SyntaxError` 的列偏移。由 Pablo Galindo 提供补丁。

- bpo-43517: 修复了在使用 `from pkg.mod import attr` 时循环导入的错误检测，这导致了非平凡的多线程代码中的假阳性。

- bpo-35883: 如果命令行参数包含无效的 Unicode 字符，Python 不再在启动时以致命错误失败。`Py_DecodeLocale()` 函数现在会转义将被解码为 [U+0000; U+10ffff] 范围之外的 Unicode 字符的字节序列。

- bpo-43406: 修复了一个可能的竞态条件，其中 `PyErr_CheckSignals` 尝试执行非 Python 信号处理程序。

- bpo-42500: 改进递归限制附近的异常处理。将一些致命错误转换为 RecursionErrors。

### 库

- bpo-43433：`xmlrpc.client.ServerProxy` 不再忽略服务器URL中的查询和片段。

- bpo-35930：在“future”实例中引发的异常将创建引用循环。

- bpo-43577: 修复了在使用 `ssl.SSLContext` 调试回调与 `ssl.SSLContext.sni_callback()` 时出现的死锁问题。

- bpo-43521: `ast.unparse` 现在可以渲染 NaNs 和空集。

- 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-43332: 通过 `set_tunnel()` 使用代理时，提高了 `http.client` 的网络效率。在连接设置过程中减少了小发送调用的次数。

- bpo-43399: 修复 `ElementTree.extend` 在使用 Python 实现时不适用于迭代器的问题。

- 问题`43316`：``python -m gzip``命令行应用程序现在在检测到不支持的扩展时会正确失败。它会以非零退出码退出，并向stderr打印错误消息。

- bpo-43260: 修复在写入非常大的文本后，TextIOWrapper无法永远刷新内部缓冲区的问题。

- bpo-42782: Fail fast in `shutil.move()` to avoid creating destination directories on failure.

- bpo-37193: 修复了 Python 3.7 中引入的 `socketserver.ThreadingMixIn` 内存泄漏。

### 文档

- bpo-43199: 在设计与历史常见问题中回答“为什么没有 goto？”。

- bpo-43407: 明确了 `time.monotonic()`、`time.perf_counter()`、`time.process_time()` 或 `time.thread_time()` 的结果可以与任何后续调用同一函数的结果进行比较 - 不仅仅是下一个立即调用。

- bpo-27646: 澄清了'yield from <expr>'可以与任何可迭代对象一起使用，而不仅仅是迭代器。

- bpo-36346: 更新了一些被标记为“将在4.0中移除”的不推荐使用的Unicode API，改为“3.12”。详见 PEP 623。

### 测试

- bpo-37945: 修复 test_locale 的 test_getsetlocale_issue1813()：如果 `setlocale()` 失败，跳过测试。由 Victor Stinner 提供补丁。

- bpo-41561: 为 Ubuntu 自定义的 OpenSSL 安全级别策略添加变通方案。

- bpo-43288: Fix test_importlib to correctly skip Unicode file tests if the fileystem does not support them.

### 构建

- bpo-43631: 将 macOS、Windows 和 CI 更新至 OpenSSL 1.1.1k。

- bpo-43617: 改进 configure.ac：检查 autoconf-archive 包的存在并移除我们拷贝的 M4 宏。

### macOS

- bpo-41837: 更新macOS安装程序构建以使用OpenSSL 1.1.1j。

### IDLE

- bpo-42225: Document that IDLE can fail on Unix either from misconfigured IP masquerage rules or failure displaying complex colored (non-ascii) characters.

- bpo-43283: 文档说明了为什么打印到IDLE的Shell通常比打印到系统终端慢，以及通过打印前预格式化单个字符串可以使其更快。

## Python 3.9.2 final

发布日期: 2021-02-19

### Windows

- bpo-43155: `PyCMethod_New()` 现在存在于 `python3.lib` 中。

## Python 3.9.2 发布候选版 1

发布日期: 2021-02-16

### 安全性

- bpo-42967: 通过默认将查询参数分隔符设置为 `&`，并允许用户选择自定义分隔符，修复了web缓存中毒漏洞。

- bpo-42938: 在计算 `ctypes.c_double` 和 `ctypes.c_longdouble` 值的repr时避免使用静态缓冲区。

### 核心与内置函数

- 问题`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-42806: 修复被括号包围的f-字符串 `ast` 节点和跨越多行节点的列偏移。由Pablo Galindo提供补丁。

- bpo-40631: 修复回归，其中单个括号包围的星号表达式是有效的赋值目标。

- bpo-32381: 修复在 Windows 上运行 `.pyc` 文件时的编码名称问题：`PyRun_SimpleFileExFlags()` 现在使用正确的编码来解码文件名。

- bpo-42536: 现在，几个内置和标准库类型确保它们的内部结果元组总是被 垃圾收集器 跟踪:

  - `collections.OrderedDict.items()`

  - `dict.items()`

  - `enumerate()`

  - `functools.reduce()`

  - `itertools.combinations()`

  - `itertools.combinations_with_replacement()`

  - `itertools.permutations()`

  - `itertools.product()`

  - `itertools.zip_longest()`

  - `zip()`

  之前，它们可能会被前一次垃圾回收取消追踪。 由 Brandt Bucher 提供补丁。

- bpo-42195: The `__args__` of the parameterized generics for `typing.Callable` and `collections.abc.Callable` are now consistent. The `__args__` for `collections.abc.Callable` are now flattened while `typing.Callable`'s have not changed. To allow this change, `types.GenericAlias` can now be subclassed and `collections.abc.Callable`'s `__class_getitem__` will now return a subclass of `types.GenericAlias`. Tests for typing were also updated to not subclass things like `Callable[..., T]` as that is not a valid base class. Finally, both types no longer validate their `argtypes`, in `Callable[[argtypes], resulttype]` to prepare for PEP 612. Patch by Ken Jin.

### 库

- bpo-43102: namedtuple __new__方法的__builtins__设置为None而不是实际的字典。这给内省工具带来了问题。

- bpo-43108: 修复了 `curses` 模块中的一个引用泄漏。由Pablo Galindo提供补丁

- bpo-42944: 修复 `random.Random.sample` 当 `counts` 参数不为 `None` 时的问题。

- bpo-42931: 将 `randbytes()` 添加到 `random.__all__` 中。

- bpo-42780: 修复 Linux 上 O_PATH 文件描述符的 os.set_inheritable()。

- bpo-42851: 移除对枚举成员的 `__init_subclass__` 支持

- bpo-41748: 修复 HTMLParser 解析包含逗号和空格的元素属性的规则。补丁由 Karl Dubost 提供

- bpo-42759: 修复了 `tkinter.Variable` 和 `tkinter.font.Font` 的相等比较问题。现在，属于不同 Tcl 解释器的对象即使名称相同也会被视为不同。

- bpo-42756: 当未明确提供超时时间时，配置 LMTP Unix 域套接字使用套接字全局默认超时。

- bpo-23328: 允许在 _PROXY 环境变量的用户名和密码字段中使用 / 字符。

- bpo-42655: `subprocess` 的 extra_groups 现在正确地传递到 setgroups() 系统调用中。

- bpo-42727: `EnumMeta.__prepare__` 现在接受 `**kwds` 以正确支持 `__init_subclass__`。

- bpo-42681: 修复了 `curses` 中颜色和配对数字的范围检查。

- bpo-37961: 修复 `tracemalloc.Traceback.__repr__()` 中的崩溃问题（在 Python 3.9 中回归）。

- bpo-42630: 需要默认根窗口的 `tkinter` 函数和构造函数现在会引发带有描述性消息的 `RuntimeError`，而不是晦涩的 `AttributeError` 或 `NameError`，如果它尚未创建或无法自动创建。

- bpo-42644: `logging.disable` will now validate the types and value of its parameter. It also now accepts strings representing the levels (as does `loging.setLevel`) instead of only the numerical values.

- bpo-36541: 修复了 lib2to3.pgen2 能够解析 PEP-570 仅位置参数语法的问题。

- bpo-42517: Enum: private names will raise a DeprecationWarning; in 3.10 they will become normal attributes

- bpo-42678: `Enum`: call `__init_subclass__` after members have been added

- bpo-42532: 当向 Mock 传递 `spec_arg` 参数时，移除了对 `__bool__` 的意外调用。

- bpo-42388: 修复 subprocess.check_output(..., input=None) 当 text=True 时的行为，使其与文档和 universal_newlines=True 的行为一致。

- bpo-34463: 修复了 `traceback` 和解释器在格式化未设置 lineno 的 SyntaxError 时的不一致（`traceback` 被更改为匹配解释器）。

- bpo-42375: subprocess 模块更新以支持 DragonFlyBSD。

- bpo-42384: 使 pdb 填充 sys.path[0] 的方式与常规 python 执行完全相同

- bpo-42383: 修复 pdb：如果调试目标使用相对路径指定且当前目录发生变化，pdb 将无法重新启动调试目标的问题

- bpo-42318: 在 macOS 上修复了 `tkinter` 中对非 BMP 字符的支持。

- bpo-42163: 恢复 `uname_result` 在 deepcopy 和 _replace 时的兼容性。

- bpo-39825：Windows：将 `sysconfig.get_config_var('EXT_SUFFIX')` 更改为预期的完整``platform_tag.extension``格式。之前它被硬编码为 `.pyd`，现在它与 `distutils.sysconfig``兼容，将产生类似 ``.cp38-win_amd64.pyd` 的结果。这使Windows与其他平台一致。

- bpo-42059: 使用替代调用样式语法创建的 `typing.TypedDict` 类型现在在设置其 `__required_keys__` 和 `__optional_keys__` 类属性时正确尊重 `total` 关键字参数。

- bpo-39101: 修复了使用 IsolatedAsyncioTestCase 的测试在遇到 BaseExceptions 时挂起的问题。

- bpo-42005: 修复 `cProfile` 和 `profile` 的 CLI 以捕获 `BrokenPipeError`

- bpo-41907: fix `format()` behavior for `IntFlag`

- bpo-41889: Enum: fix regression involving inheriting a multiply-inherited enum

- bpo-41891: 确保 asyncio.wait_for 等待任务完成

- bpo-41604: 当 set_panel_userptr 失败时，不减少先前 user_ptr 的引用计数

- bpo-40219: 降低 `tkinter.ttk.LabeledScale` 虚拟小部件以防止隐藏部分内容标签。

- bpo-40084: 修复了 `Enum.__dir__`: dir(Enum.member) 现在包括属性和方法。

- bpo-39068: 修复 `base64` 中 `a85encode()` 和 `b85encode()` 的初始化竞争条件。由 Brandon Stansbury 提供补丁。

- bpo-33289: 修正对 `tkinter.colorchooser` 的调用，使其返回整型RGB三元组而非浮点数。由 Cheryl Sabella 提供补丁。

### 文档

- bpo-40304: 修正 type(name, bases, dict) 的文档。由 Boris Verkhovskiy 和 Éric Araujo 提供补丁。

- bpo-42811: Updated importlib.utils.resolve_name() doc to use __spec__.parent instead of __package__. (Thanks Yair Frid.)

- bpo-17140: 为 `multiprocessing.pool.ThreadPool` 类添加文档。

### 测试

- bpo-42794: Update test_nntplib to use offical group name of news.aioe.org for testing. Patch by Dong-hee Na.

- bpo-40810: 在 `sqlite3` 中，为 SQLite 3.7.15 之前版本修复 `CheckTraceCallbackContent`。

### 构建

- bpo-43174: Windows构建现在使用 `/utf-8` 编译器选项。

- bpo-42692: 修复旧编译器上的 __builtin_available 检查。由Joshua Root提供补丁。

- bpo-42604: Now all platforms use a value for the "EXT_SUFFIX" build variable derived from SOABI (for instance in freeBSD, "EXT_SUFFIX" is now ".cpython-310d.so" instead of ".so"). Previosuly only Linux, Mac and VxWorks were using a value for "EXT_SUFFIX" that included "SOABI".

- bpo-42598: 修复configure中的隐式函数声明，这可能导致错误的配置检查。由Joshua Root提供补丁。

- bpo-29076: 向macOS安装程序添加fish shell支持。

### 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') 的值始终为字符串，即使在值可解析为整数时也是如此。

- bpo-42361: 更新macOS安装程序构建以使用Tcl/Tk 8.6.11（rc2，预计为最终版本）。

- bpo-41837: 更新macOS安装程序构建以使用OpenSSL 1.1.1i。

- bpo-42584: 更新macOS安装程序以使用SQLite 3.34.0。

### IDLE

- bpo-43008: 使 IDLE 在正常的双进程模式下调用 `sys.excepthook()`。由 Ken Hilton 提供补丁。

- bpo-33065: 修复调试带有 __repr__ 方法的用户类时的问题。

- bpo-23544: 当用户代码正在运行或调试器处于活动状态时，禁用 Debug=>Stack Viewer，以防止挂起或崩溃。由 Zackery Spytz 提供补丁。

- bpo-32631: 完成zzdummy示例扩展模块：使菜单条目正常工作；添加文档字符串和覆盖率为100%的测试。

### 工具/示例

- bpo-42726: 修复了Python 3与gdb/libpython.py处理属性字典时的兼容性问题。

- bpo-42613: 修复 `freeze.py` 工具以使用正确的配置和库目录。补丁由Victor Stinner提供。

### C API

- bpo-43030: Fixed a compiler warning in `Py_UNICODE_ISSPACE()` on platforms with signed `wchar_t`.

- bpo-42591: 导出 `Py_FrozenMain()` 函数：修复Python 3.9.0的回归问题。Python 3.9使用 `-fvisibility=hidden` 并且该函数未被显式导出，因此未被导出。

- bpo-40052: 修复函数 `PyVectorcall_Function()` 中的对齐构建警告/错误。补丁由 Andreas Schneider、Antoine Pitrou 和 Petr Viktorin 提交。

## Python 3.9.1 final

发布日期: 2020-12-07

### 核心与内置函数

- bpo-42576: `types.GenericAlias` 现在会在尝试使用关键字参数初始化时引发 `TypeError`。之前，如果解释器编译时包含调试符号，这将导致解释器崩溃。这不影响为发布编译的解释器。补丁由 Ken Jin 提交。

### 库

- bpo-5054: CGIHTTPRequestHandler.run_cgi() 中 HTTP_ACCEPT 解析不当。用通用的 get_all 方法替换特殊用途的 getallmatchingheaders，并添加相关测试。

  原始由 Martin Panter 提供补丁，由 Senthil Kumaran 修改。

- bpo-17735: `inspect.findsource()` 现在在代码对象的 `co_lineno` 大于文件长度时，会引发 `OSError` 而不是 `IndexError`。例如，当文件在导入后被编辑时可能会发生此情况。PR 由 Irit Katriel 提供。

- bpo-42116: 修复了 `inspect.getsource()` 处理尾部注释的问题。

- bpo-42487: ChainMap.__iter__ 不再调用底层映射的 __getitem__

- bpo-42482: `TracebackException` 不再持有对异常回溯对象的引用。因此，对于等效但不相等的异常，TracebackException 的实例现在比较为相等。

- bpo-42406: We fixed an issue in `pickle.whichmodule` in which importing `multiprocessing` could change the how pickle identifies which module an object belongs to, potentially breaking the unpickling of those objects.

- bpo-34215: 当 `expected` 为 `None` 时，澄清 `asyncio.IncompleteReadError` 的错误消息。

- bpo-12800: 从tarball中提取符号链接应该成功，并在符号链接已存在时覆盖它。修复方法是在提取前移除现有的文件或符号链接。基于Chris AtLee、Jeffrey Kintscher和Senthil Kumaran的补丁。

### 测试

- bpo-41473: Reenable test_gdb on gdb 9.2 and newer: https://bugzilla.redhat.com/show_bug.cgi?id=1866884 bug is fixed in gdb 10.1.

- bpo-42553: 修复 `test_asyncio.test_call_later()` 的竞争条件：不在 `call_later()` 单元测试中测量asyncio性能。测试在CI上随机失败。

### macOS

- bpo-41116: If no explicit macOS SDK was specified, setup.py should check for Tcl and TK frameworks in /Library/Frameworks; the previous commit inadvertently broke that test.

- bpo-42504: 修复了在 MACOSX_DEPLOYMENT_TARGET=11 时在 macOS Big Sur 上的构建问题。

### IDLE

- bpo-42508: 保持 IDLE 在 macOS 上运行。移除在使用 macOS 11 上构建的新 universal2 安装程序时阻止使用快捷方式运行文件的过时解决方法。

## Python 3.9.1 release candidate 1

Release date: 2020-11-24

### 安全性

- bpo-42103: 防止了处理格式错误的二进制格式Apple属性列表文件时可能通过CPU和RAM耗尽导致的DoS攻击。

- bpo-42051: `plistlib` 模块不再接受XML plist文件中的实体声明，以避免XML漏洞。这对用户应该没有影响，因为实体声明在常规的plist文件中并未使用。

- bpo-40791: 在 `hmac.compare_digest` 中为累加器变量添加 `volatile`，减少破坏恒定时间优化的可能性。

### 核心与内置函数

- bpo-41686: 在 Windows 上，即使 Python 配置为不安装信号处理程序（如果 `PyConfig.install_signal_handlers` 等于 0，或 `Py_InitializeEx(0)`），现在也会创建 `SIGINT` 事件 `_PyOS_SigintEvent()`。

- bpo-42381: 根据PEP 572，允许在集合字面量和集合推导式中使用赋值表达式。由Pablo Galindo提供补丁。

- bpo-42374: 修复了新解析器引入的一个回归问题，即在生成器表达式中不允许使用未加括号的海象运算符。

- bpo-42296: 在Windows上，修复了信号处理中的一个回归问题，该问题阻止了使用CTRL+C中断程序。信号处理程序可以在与Python线程不同的线程中运行，在这种情况下，判断线程是否可以处理信号的测试是错误的。

- bpo-42332: `types.GenericAlias` 对象现在可以作为弱引用的目标。

- bpo-42218: 修复了PEG解析器中导致调试模式下崩溃的一个错误。现在在左递归规则中检查错误，以避免这些错误未能及时处理并在其他地方表现为长距离崩溃的情况。

- bpo-42214: 修复了在 `barry_as_flufl` 规则中检查 '!=' 标记时PEG解析器可能崩溃的问题。由 Pablo Galindo 提供补丁。

- bpo-42143: 修复了在创建 `PyFunctionObject` 过程中错误处理的问题，该问题导致了对未初始化内存的操作。由 Yonatan Goldschmidt 提供补丁。

- bpo-41659: Fix a bug in the parser, where a curly brace following a `primary` didn't fail immediately. This led to invalid expressions like `a {b}` to throw a `SyntaxError` with a wrong offset, or invalid expressions ending with a curly brace like `a {` to not fail immediately in the REPL.

- bpo-42150: 修复新解析器在检查续行时可能出现的缓冲区溢出。由 Pablo Galindo 提供补丁。

- bpo-42123: 运行解析器两次。第一次运行时，禁用所有仅生成更好错误消息的规则以提高性能。如果解析失败，则第二次运行时启用这些规则。

- bpo-42057: Fix peephole optimizer misoptimize conditional jump + JUMP_IF_NOT_EXC_MATCH pair.

- bpo-41984: 垃圾收集器现在跟踪所有用户定义的类。由 Brandt Bucher 提供补丁。

- bpo-41993: 修复了在导入失败时从 `sys.modules` 中删除未完全初始化的模块可能引发的问题。

- bpo-41979: PEG 解析器现在允许在 with 项目的目标中使用星号解包。

- bpo-41909: 修复了在 `issubclass()` 和 `isinstance()` 中当获取 `__bases__` 属性导致无限递归时的堆栈溢出问题。

- bpo-41894: 在加载本地模块并且加载失败时，防止在不使用 UTF-8 语言环境运行时可能出现的 UnicodeDecodeError，通过使用当前语言环境的编码解码加载错误消息。

- bpo-39934: 在编译器中正确计算 'except' 中的控制块。确保对于深层嵌套的命名异常处理程序产生语法错误而非致命错误。

### 库

- bpo-42328: 修复了 `tkinter.ttk.Style.map()`。该函数现在接受默认状态的表示为空序列（由 `Style.map()` 返回）。结果的结构现在在所有平台上都是相同的，不依赖于 `wantobjects` 的值。

- bpo-42345: 修复了 `typing.Literal` 参数处理中的各种问题（扁平化、去重、使用类型缓存键）。由 Yurii Karabas 提供补丁。

- bpo-42350: 修复了 `threading.Thread` 类在 fork 时的问题：如果线程已经停止（例如：在 Python 退出时调用 fork），则不执行任何操作。以前，在子进程中会记录一个错误。

- bpo-42014: 现在，当 `os.open` 失败时，`shutil.rmtree` 的 `onerror` 回调会接收到正确的函数。

- bpo-42237: Fix `os.sendfile()` on illumos.

- bpo-42249：修复了写入大于4 GiB的二进制Plist文件的问题。

- bpo-35455: 在Solaris上，`thread_time()` 现在通过 `gethrvtime()` 实现，因为``clock_gettime(CLOCK_THREAD_CPUTIME_ID)``并不总是可用。由Jakub Kulik提供补丁。

- bpo-42233:对于包含 Generic Alias Types 的 `typing` 类型，其 `repr()` 表示形式此前不会在 `GenericAlias` 中显示参数化类型。现在这一行为已调整为会显示参数化类型。

- bpo-41754：webbrowser：调用 `xdg-settings` 时忽略*NotADirectoryError*。

- bpo-29566: `binhex.binhex()` 一致地写入macOS 9行结束符。

- bpo-42183：修复了asyncio任务或Future的repr()导致的堆栈溢出错误。

  在 Task 或 Future 递归返回自身的情形下会导致栈溢出。

- bpo-42146: Fix memory leak in `subprocess.Popen()` in case an uid (gid) specified in `user` (`group`, `extra_groups`) overflows `uid_t` (`gid_t`).

- bpo-42140：改进asyncio.wait函数，使其仅创建一次futures集合。

- bpo-42103: `InvalidFileException` 和 `RecursionError` 现在是加载损坏的二进制 Plist 文件时仅会引发的错误（在之前的一些特定情况下可能会引发 ValueError 和 TypeError）。

- bpo-41052: 现在，使用协议 0 和 1 对 C 中实现的堆类型进行 Pickle 操作会引发错误，而不是产生不正确的数据。

- bpo-41491: plistlib: 修复解析带有十六进制整数值的 XML plists 的问题

- bpo-42065: Fix an incorrectly formatted error from `_codecs.charmap_decode()` when called with a mapped value outside the range of valid Unicode code points. PR by Max Bernstein.

- bpo-41966: 修复纯 Python `datetime.time` 子类的 Pickle 操作。由 Dean Inwood 提供的补丁。

- bpo-41976: 修复了一个导致 `ctypes.util.find_library()` 在尝试在 gcc>=9 可用但 `ldconfig` 不可用的环境中定位库时返回 `None` 的 bug。由 Pablo Galindo 提供补丁。

- bpo-41900: 在 xml.etree.ElementTree 中的 C14N 2.0 序列化在定义了默认命名空间时，对于未加前缀的属性失败。

- bpo-41840: 修复 `symtable` 模块中的一个 bug，该 bug 导致模块作用域的全局变量未被同时报告为局部和全局。由 Pablo Galindo 提供补丁。

- bpo-41831: `tkinter.Event` 对象的 `type` 属性的 `str()` 现在总是返回由 Tk 返回的数字代码，而不是事件类型的名称。

- bpo-41817: fix `tkinter.EventType` Enum so all members are strings, and none are tuples

- bpo-41815: 修复 SQLite3 在备份已关闭数据库时的段错误。补丁由 Peter David McCormick 提供。

- bpo-41316: 修复 `tarfile` 模块，使其仅将 TAR 文件的基本名写入 GZIP 压缩头。

- bpo-16396: 允许在非 Windows 系统上导入 `ctypes.wintypes`。

- bpo-40592: `shutil.which()` 现在忽略 `PATHEXT` 中的空条目，而不是将它们视为匹配项。

- bpo-40550: 修复subprocess.Popen.send_signal中的检查时间/动作时间问题。

- bpo-40492: 修复当被分析的程序更改工作目录时，`cProfile` / `profile` 的 `--outfile` 不在原始目录中写入输出文件的问题。PR由Anthony Sottile提供。

- bpo-40105: 在附加（"a"）模式下提供较短的注释时，ZipFile会截断文件以避免损坏。由Jan Mazur提供补丁。

- bpo-27321: 修复了将电子邮件扁平化为字符串时尝试替换不存在的Content-Transfer-Encoding头时引发的KeyError异常。

### 文档

- bpo-42153: 修复IMAP协议文档的URL。

- bpo-42061: 记录IP地址的__format__功能。

- bpo-41910: Document the default implementation of `object.__eq__`.

- bpo-42010: 澄清订阅表达式对于标准库中的某些 类 也有效，并且如果提供了类方法 `__class_getitem__()`，则对于用户定义的类和类型也有效。

- bpo-41805: 记录了 generic alias type 和 `types.GenericAlias`。还在词汇表中添加了 泛型类型 的条目。

- bpo-41774: 在编程FAQ的“序列（元组/列表）”部分添加“如何从列表中删除多个项目”。

- bpo-35293: Fix RemovedInSphinx40Warning when building the documentation. Patch by Dong-hee Na.

- bpo-41726: 更新 `PyType_FromModuleAndSpec` 的引用计数信息。

- bpo-39693: 修复tarfile的extractfile文档

- bpo-39416: 记录一些关于数字类默认字符串表示的限制。

### 测试

- bpo-40754: 在Windows安装程序中包含 `_testinternalcapi` 模块用于测试套件。

- bpo-41739: 修复test_logging.test_race_between_set_target_and_flush()：测试现在等待所有线程完成，以避免运行线程泄漏。

- bpo-41970: 如果模块在测试执行时已经导入，避免在 `test_lib2to3` 中出现测试失败。由Pablo Galindo提供补丁。

- bpo-41944: CJK编解码器的测试不再对通过HTTP接收的内容调用 `eval()`。

- bpo-41939: 修复test_site.test_license_exists_at_url()：调用``urllib.request.urlcleanup()``以重置全局 `urllib.request._opener`。由Victor Stinner提供补丁。

- bpo-41561: test_ssl：当TLS 1.0不可用时跳过test_min_max_version_mismatch。

- bpo-41602: 为runpy模块中的SIGINT处理添加测试。

- bpo-41306: 修复了在执行使用Tk 8.6.10的测试时 `test_tk.test_widgets.ScaleTest` 中出现的失败。

### 构建

- 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-38249: Update `Py_UNREACHABLE` to use __builtin_unreachable() if only the compiler is able to use it. Patch by Dong-hee Na.

- bpo-40998: 解决了未定义行为消毒器（ubsan）发现的三个编译器警告。

### Windows

- bpo-42120: 移除了头文件中 `copysign` (到 `_copysign`) 的宏定义。

- bpo-38439: 更新了Windows商店包中IDLE的图标。

- bpo-41744: 修复使用Nuget包时props文件的自动导入问题。

- bpo-41557: 更新Windows安装程序以使用SQLite 3.33.0。

- bpo-38324: 在Windows上访问某些区域设置数据时避免Unicode错误。

### macOS

- 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-38443: 配置脚本的 `--enable-universalsdk` 和 `--with-universal-archs` 选项现在检查指定的架构是否可以使用。

- bpo-41471: 忽略系统代理排除中的无效前缀长度。

- bpo-41557: 更新macOS安装程序，使用SQLite 3.33.0。

### IDLE

- bpo-42426: 修复了在搜索引擎中报告 RE 错误的偏移量。

- bpo-42415: 通过使用 inspect.getdoc 更频繁地获取 IDLE 调用提示的文档字符串。

- bpo-33987: 主要完成了对编辑器、设置和搜索使用ttk小部件的工作。部分由Mark Roseman提供补丁。

- bpo-41775: 使用 'IDLE Shell' 作为 shell 标题。

- bpo-35764: 重写 Calltips 文档部分。

- bpo-40181: 在 calltips 中，停止提醒 '/' 标记仅位置参数的结束。

- bpo-40511: 在函数调用的括号内键入开闭括号将不再导致现有的调用提示不必要地“闪烁”开关，例如在字符串字面量中键入时。

- bpo-38439: 向Windows .ico文件添加一个256×256像素的IDLE图标。由Andrew Clover创建。从.ico文件中移除低色彩gif变体。

### C API

- bpo-42015: Fix potential crash in deallocating method objects when dynamically allocated `PyMethodDef`'s lifetime is managed through the `self` argument of a `PyCFunction`.

- bpo-41986: `Py_FileSystemDefaultEncodeErrors` and `Py_UTF8Mode` are available again in limited API.

## Python 3.9.0 final

Release date: 2020-10-04

### 库

- bpo-41815: 修复 SQLite3 在备份已关闭数据库时的段错误。补丁由 Peter David McCormick 提供。

- bpo-41662: 不再覆盖在 `sqlite3` 中参数序列的 `__len__()` 中引发的异常，而是使用 `ProgrammingError`。

- bpo-41662: 修复了在 `sqlite3` 中迭代期间突变参数列表时崩溃的问题。

- bpo-39728: fix default `_missing_` so a duplicate `ValueError` is not set as the `__context__` of the original `ValueError`

### 测试

- bpo-41602: 为runpy模块中的SIGINT处理添加测试。

### 构建

- bpo-38249: Update `Py_UNREACHABLE` to use __builtin_unreachable() if only the compiler is able to use it. Patch by Dong-hee Na.

## Python 3.9.0 release candidate 2

Release date: 2020-09-16

### 核心与内置函数

- bpo-41780: 修复 `types.GenericAlias` 的 `__dir__()` 方法。由 Batuhan Taskaya 提供补丁。

- bpo-41690: Fix a possible stack overflow in the parser when parsing functions and classes with a huge ammount of arguments. Patch by Pablo Galindo.

- bpo-41681: Fixes the wrong error description in the error raised by using 2 `,` in format string in f-string and `str.format()`.

- bpo-41654: 修复销毁 `MemoryError` 子类时发生的崩溃问题。由 Pablo Galindo 提供补丁。

- bpo-41631: `_ast` 模块再次使用了全局状态。每个模块实例使用模块状态会导致一些微妙的实际问题。例如，Mercurial 项目替换了 `__import__()` 函数以实现延迟导入，而 Python 期望 `import _ast` 总是返回一个完全初始化的 `_ast` 模块。

- bpo-41533: 如果 `do_mkstack` 失败且堆栈不是 `small_stack`，则释放 `va_build_stack` 中分配的堆栈。

- bpo-41531: 修复了一个在编译包含超过 0xFFFF 个元素的字典字面量时会丢失键的错误。由 Pablo Galindo 提供补丁。

- bpo-41525: `python --help` 的输出现在仅包含 ASCII 字符。

- bpo-29590: 在生成器上调用 `generator.throw()` 后，使堆栈跟踪正确，该生成器已经从 `yield from` 中产出。

### 库

- bpo-41517: 修复允许通过多重继承扩展枚举的 bug。

- bpo-39587: 在构造枚举时使用正确的混合数据类型。

- bpo-41789: Honor `object` overrides in `Enum` class creation (specifically, `__str__`, `__repr__`, `__format__`, and `__reduce_ex__`).

- bpo-39651: 修复了 `asyncio.ProactorEventLoop` 的 `call_soon_threadsafe()` 方法中的一个竞态条件：如果自管道套接字已关闭，则不执行任何操作。

- bpo-41720: 修复了:turtle.Vec2D.__rmul__`对于非int或float参数的处理。

- bpo-41696: 修复了在 `asyncio.run()` 中调试模式的处理。现在可以通过设置``PYTHONASYNCIODEBUG``或 `-X dev` 来在使用 `asyncio.run()` 时启用asyncio调试模式。

- bpo-41687: 修复了sendfile的实现以兼容Solaris。

- bpo-39010: 在Windows上重启 `ProactorEventLoop` 不再记录虚假的``ConnectionResetErrors``。

- bpo-41609: pdb的whatis命令现在正确地将实例方法报告为'Method'而不是'Function'。

- bpo-32751: 当由于超时取消任务时，`asyncio.wait_for()` 现在也会在*timeout* <= 0的情况下等待取消完成，就像对正超时那样。

- bpo-37658: `asyncio.wait_for()` 现在正确处理了自身取消与包装的可等待对象完成之间的竞争条件。

- bpo-40782: 将方法 asyncio.AbstractEventLoop.run_in_executor 改为不是协程。

- bpo-41520: 修复 `codeop` 回归问题，该问题阻止了将编译警告转为错误。

- bpo-41503: 修复了 logging.handlers.MemoryHandler 中 setTarget 和 flush 之间的竞争条件。

- bpo-41344: 防止创建 `size=0` 的 `shared_memory.SharedMemory` 对象。

- bpo-41025: 修复了阻止 `zoneinfo.ZoneInfo` 的C实现被子类化的问题。

- bpo-31122: ssl.wrap_socket() 现在在TLS协商期间对等方关闭连接时引发ssl.SSLEOFError而不是OSError。

- bpo-33660: 修复pathlib.PosixPath正确解析位于根目录的相对路径。

### 文档

- bpo-37149: 将Shipman tkinter文档链接从archive.org更改为TkDocs。（该文档已从NMT服务器移除。）新链接响应更快，并包含简短说明。

- bpo-41624: 修正 `typing.Coroutine` 的签名。

- bpo-40204: 启用Sphinx 3.2的 `c_allow_pre_v3` 选项并禁用 `c_warn_on_allowed_pre_v3` 选项，使文档兼容Sphinx 2和Sphinx 3。

- bpo-40979: 重构typing.rst，将超过70个类、函数和装饰器安排到新的子章节中。

- bpo-39883: 使Python文档中的代码、示例和配方除了现有的Python 2.0许可证外，还采用更宽松的BSD0许可证。

### 测试

- bpo-41731: 使test_cmd_line_script在使用选项'-vv'时通过。

### 构建

- bpo-41617: Fix `pycore_byteswap.h` header file to support old clang versions: `__builtin_bswap16()` is not available in LLVM clang 3.0.

### Windows

- bpo-41526: 通过移除对Mark Hammond的特别感谢（获得他的许可），修复了安装程序最后一页的布局问题。

### C API

- bpo-41524: 修复 PyOS_mystrnicmp 和 PyOS_mystricmp 中增加指针超出字符串末尾的 bug。

## Python 3.9.0 发布候选版 1

发布日期: 2020-08-11

### 核心与内置函数

- bpo-38156: 正确处理在 `PyOS_StdioReadline` 中 EOF 之后到来的中断。

### 库

- bpo-41497: 修复 dis 模块中潜在的 UnicodeDecodeError。

- bpo-41490: Update `ensurepip` to install pip 20.2.1 and setuptools 49.2.1.

- bpo-41467: 在 Windows 上，修复 asyncio `recv_into()` 当套接字/管道关闭时的返回值 (`BrokenPipeError`): 返回 `0` 而不是空字节串 (`b''`)。

- bpo-41425: 使 tkinter 文档示例可运行。

- bpo-41384: 当向 tkinter.OptionMenu 传递未知选项时，抛出 TclError 而不是 TypeError。

- bpo-38731: Fix `NameError` in command-line interface of `py_compile`.

- bpo-41317: 在 asyncio.loop.sock_accept() 中使用 add_done_callback() 以在取消时尽早取消订阅读取器。

- bpo-41364: 减少 `uuid` 的导入开销。

- bpo-41341: Recursive evaluation of `typing.ForwardRef` in `get_type_hints`.

- bpo-41182: selector: 根据实现使用DefaultSelector

- bpo-40726: 处理在 `ast.increment_lineno()` 中 `end_lineno` 为 `None` 的情况。

### 文档

- bpo-41045: 添加f-strings调试功能的文档。

- bpo-41314: 将 `from __future__ import annotations` 成为默认的发布版本从 `4.0` 改为``3.10`` (遵循PEP 563的变更) 。

### Windows

- bpo-41492: 修复了出现在UAC提示中的描述。

- bpo-40948: 改进安装后消息，引导人们使用"py"命令。

- bpo-41412: 安装程序现在将无法在Windows 7和Windows 8上安装。此外，UCRT依赖现在总是按需下载。

- bpo-40741: 更新Windows版本，包括SQLite 3.32.3。

### IDLE

- bpo-41468: 改进 IDLE 运行崩溃错误消息（用户应该永远不会看到）。

- bpo-41373: 通过将其行结束符设置为系统默认值，保存没有行结束符加载的文件，如空白或不同行结束符。修复 3.8.4 和 3.9.0b4 中的回归。

## Python 3.9.0 beta 5

Release date: 2020-07-20

### 安全性

- bpo-41304: Fixes `python3x._pth` being ignored on Windows, caused by the fix for bpo-29778 (CVE-2020-15801).

- bpo-41162: 审计钩子现在在最终化过程的后期被清除，以避免错过事件。

- bpo-29778: Ensure `python3.dll` is loaded from correct locations when Python is embedded (CVE-2020-15523).

- bpo-39603: 通过拒绝 http.client.putrequest(...) 中的控制字符来防止 http 头注入。

### 核心与内置函数

- bpo-41295: 解决了 CPython 3.8.4 中的一个回归问题，即在多重继承设置中定义 "__setattr__" 并调用层次链时，如果基类型涉及内置/扩展类型，可能会失败。

- bpo-41247: 运行 `asyncio.set_running_loop` 时，始终缓存运行循环持有者。

- bpo-41252: 修复 _ssl.c 中 `_servername_callback()` 的错误引用计数。

- 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-39960: 防止通过调用超类方法绕过类型的 __setattr__() 的“hackcheck”被重写，以允许 C 实现的堆类型。

### 库

- bpo-41288: 使用C实现时，反序列化无效的NEWOBJ_EX操作码现在会引发UnpicklingError，而不是崩溃。

- bpo-39017: Avoid infinite loop when reading specially crafted TAR files using the tarfile module (CVE-2019-20907).

- bpo-41235: 修复了 `ssl.SSLContext.load_dh_params()` 中的错误处理。

- bpo-41207: 在distutils.spawn中，恢复了当命令未找到时引发DistutilsExecError的预期行为。

- bpo-39168: 移除了 `typing.Generic` 的 `__new__` 方法。

- bpo-41194: 修复了 `_ast` 模块中的崩溃问题：它现在不能被多次加载。它现在使用全局状态而非模块状态。

- bpo-39384: 修复了email.contentmanager，允许set_content()设置空字符串。

### 文档

- bpo-37703: 更新文档，全面阐述gather.cancel()的行为。

### macOS

- bpo-40741: 更新 macOS 安装程序以使用 SQLite 3.32.3。

### IDLE

- bpo-41300: 保存含有非 ASCII 字符的文件。修复 3.9.0b4 和 3.8.4 中发布的回归。

- bpo-37765: 将关键字添加到模块名称完成列表。重写 IDLE 文档的 Completions 部分。

### C API

- bpo-40170: 回滚 `PyType_HasFeature()` 更改：当不使用有限的 C API 时，它再次直接读取 `PyTypeObject.tp_flags` 成员，而不是总是调用隐藏实现细节的 `PyType_GetFlags()`。

## Python 3.9.0 beta 4

Release date: 2020-07-02

### 安全性

- bpo-41004: ipaddress.IPv4Interface 和 ipaddress.IPv6Interface 的 __hash__() 方法错误地生成了分别为 32 和 128 的常量哈希值。这导致了总是发生哈希冲突。修复使用 hash() 来为 (地址, 掩码长度, 网络地址) 的元组生成哈希值。

### 核心与内置函数

- bpo-41094: 修复在非 UTF-8 语言环境下打开非 ASCII 名称文件时的解码错误。

- bpo-41084: 在解析抛出 `SyntaxError` 的 f-string 表达式时，在错误消息前加上 'f-string: '。

- bpo-41076: 预填充解析器时提供 f-string 表达式的位置，而不是 f-string 本身，这允许我们在解析完成后跳过 AST 节点位置的移动。

- bpo-40939: Deprecate `PyNode_Compile()`.

- bpo-41056: 修复了在启动时通过 -c 提供代码时，涉及相对符号链接构造 sys.path 过程中引用已释放堆栈空间的问题。（通过 Coverity 发现）

- bpo-41061: 修复了哈希表代码和测试中的错误表达式和断言。

- bpo-41052: 为 _random.Random 选择退出序列化/反序列化。

- bpo-40939: Deprecate `PyParser_SimpleParseStringFlags()`, `PyParser_SimpleParseStringFlagsFilename()` and `PyParser_SimpleParseFileFlags()`.

- bpo-35975: Stefan Behnel 报告称，即使 PyCF_ONLY_AST 未设置，也会使用 cf_feature_version。这与意图和文档行为相违背，因此已修复。

- bpo-40985: 修复了一个导致文件以行继续字符（即反斜杠）结尾时，`SyntaxError` 文本为空的错误。错误文本应包含最后一行的文本。

- bpo-40958: 修复了 PEG 解析器在收集信息以发出语法错误时可能存在的缓冲区溢出。由 Pablo Galindo 提供补丁。

- bpo-40957: 修复 _Py_fopen_obj() 在 PySys_Audit() 失败时的反射泄漏

- bpo-40947: Python 的 Path Configuration 现在考虑了 `PyConfig.platlibdir`。

- bpo-40847: Fix a bug where a line with only a line continuation character is not considered a blank line at tokenizer level. In such cases, more than a single `NEWLINE` token was emitted. The old parser was working around the issue, but the new parser threw a `SyntaxError` for valid input due to this. For example, an empty line following a line continuation character was interpreted as a `SyntaxError`.

- bpo-40824: 在 `in` 操作符和 `operator` 模块的函数 `contains()`、`indexOf()` 和 `countOf()` 中，调用 `__iter__` 方法时不再因 `TypeError` 而掩盖意外错误。

- bpo-19569: 添加私有宏 `_Py_COMP_DIAG_PUSH`、`_Py_COMP_DIAG_IGNORE_DEPR_DECLS` 和 `_Py_COMP_DIAG_POP`。

### 库

- bpo-41193: readline completer的 `write_history()` atexit函数现在忽略任何 `OSError`，以在文件系统为只读时忽略错误，而不仅仅是忽略 `FileNotFoundError` 和 `PermissionError`。

- 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-31938: 修复了 `select` 模块中几个函数的默认值签名 - 由Anthony Sottile提供。

- bpo-41068: 修复了直接从ZIP存档中读取非ASCII名称文件后立即写入的问题。

- bpo-41058: `pdb.find_function()` 现在能正确确定源文件的编码。

- 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-40448: `ensurepip` now disables the use of `pip` cache when installing the bundled versions of `pip` and `setuptools`. Patch by Krzysztof Konopko.

- bpo-40967: Removed `asyncio.Task.current_task()` and `asyncio.Task.all_tasks()`. Patch contributed by Rémi Lapeyre.

- bpo-40955: 修复了 `subprocess` 模块中在指定extra_groups时的一个小内存泄漏。

- bpo-40855: statistics模块中的标准差和方差函数忽略了它们的mu和xbar参数。

- bpo-40924: Removed support for loaders implementing .files and supplying TraversableResources.

- bpo-40939: 在生成标准库 `keyword` 模块时使用新的PEG解析器。

- bpo-40834: 修复在发送str对象时使用_xxsubinterpreters.channel_send的截断问题。

- bpo-26407: 在 `csv.reader()`, `csv.writer.writerow()` 和 `csv.writer.writerows()` 中调用 `__iter__` 方法时不再因 `TypeError` 掩盖意外错误。

- bpo-38488: 更新ensurepip以安装pip 20.1.1和setuptools 47.1.0。

- bpo-36543: 恢复了已弃用的 `xml.etree.cElementTree` 模块。

- bpo-34226: Fix `cgi.parse_multipart` without content_length. Patch by Roger Duran

### 测试

- bpo-41085: 在64位Windows上修复 `array.array.index()` 方法对于大于 `2**31` 的索引的整数溢出问题。

- bpo-41069: `test.support.TESTFN` 和通过 `test.regrtest` 运行测试时的当前目录现在尽可能包含非ASCII字符。

- bpo-38377: 在Linux上，如果当前用户无法在 `/dev/shm/` 目录中创建文件，则跳过使用多进程的测试。将 `skip_if_broken_multiprocessing_synchronize()` 函数添加到 `test.support` 模块中。

- bpo-41009: 修复了将 `support.require_{linux|mac|freebsd}_version()` 装饰器用作类装饰器时的问题。

- bpo-41003: 修复了当安装 `numpy``时 ``test_copyreg` 的问题：`test.pickletester` 现在在导入 `numpy` 时保存/恢复警告过滤器，以忽略由 `numpy` 安装的过滤器。

- bpo-40964: 禁用远程 `imaplib` 测试，主机cyrus.andrew.cmu.edu正在阻止传入连接。

- bpo-40927: 修复了test_binhex在运行两次时的问题：现在使用import_fresh_module()确保每次都引发DeprecationWarning。

- bpo-34401: 使test_gdb在HP-UX上正确运行。由Michael Osipov提供补丁。

### 构建

- bpo-40204: 在 `Doc/Makefile` 中将Sphinx版本固定为2.3.1。

### Windows

- bpo-41074: Fixed support of non-ASCII names in functions `msilib.OpenDatabase()` and `msilib.init_database()` and non-ASCII SQL in method `msilib.Database.OpenView()`.

- bpo-40164: 将Windows上的OpenSSL更新至1.1.1g。

- bpo-37556: 扩展py.exe帮助，提及通过venv、shebang、环境变量和ini文件进行的覆盖。

### macOS

- bpo-39580: 如果从命令行运行安装程序，避免打开Finder窗口。补丁由Rick Heil贡献。

- bpo-41100: 修复在macOS 11上构建时的配置错误。请注意，当前的Python版本是在macOS 11（Big Sur）的第一个开发者预览版发布后不久发布的；在开发者预览版上构建和运行还有其他已知问题。预计在Python 3.8.x的未来错误修复版本和3.9.0中完全支持Big Sur。

- bpo-41005: 修复了 webbrowser.py 中不允许 macOS 打开浏览器的 XDG 设置问题。

### IDLE

- bpo-41152: IDLE 中 `stdin`、`stdout` 和 `stderr` 的编码现在始终为 UTF-8。

- bpo-41144: 使 Open Module 可以打开特殊模块如 os.path。

### C API

- bpo-36346: Mark `Py_UNICODE_COPY`, `Py_UNICODE_FILL`, `PyUnicode_WSTR_LENGTH`, `PyUnicode_FromUnicode`, `PyUnicode_AsUnicode`, `_PyUnicode_AsUnicode`, and `PyUnicode_AsUnicodeAndSize` as deprecated in C. Remove `Py_UNICODE_MATCH` which was deprecated and broken since Python 3.3.

- bpo-36020: 在 Windows 上，`#include "pyerrors.h"` 不再定义 `snprintf` 和 `vsnprintf` 宏。

- bpo-40703: PyType_FromSpec*() 函数不再覆盖类型的 "__module__" 属性，如果该属性是通过 "Py_tp_members" 或 "Py_tp_getset" 设置的。

## Python 3.9.0 beta 3

Release date: 2020-06-09

### 库

- bpo-40924: `importlib.resources`: Reverted `TraversableResources` implementations from the built-in loaders (SourceFileLoader and ZipImporter) as it was an incompatible change introduced in 3.9.0 beta 2 causing through a chain of events for root TLS certificates to be missing.

### 构建

- bpo-40684: `make install` 现在在使用 `./configure --with-platlibdir` 时，为目标``lib-dynload/`目录使用 ``PLATLIBDIR` 变量。

## Python 3.9.0 beta 2

Release date: 2020-06-08

### 核心与内置函数

- bpo-40904: 修复了在解析包含无值 yield 语句的 f-string（如 `f"{yield}"`）时，新的 PEG 解析器可能出现的段错误。由 Pablo Galindo 提供补丁。

- bpo-40903: 修复了新的 PEG 解析器在为形式如 `p=p=` 的无效赋值生成错误消息时可能出现的段错误。由 Pablo Galindo 提供补丁。

- bpo-40880: 修复了在检查字符串字面量中的换行符时，新解析器中的无效内存读取问题。补丁由 Pablo Galindo 提供。

- bpo-40883: 修复了在新解析器中解析 f-strings 时的内存泄漏问题。补丁由 Pablo Galindo 提供。

- bpo-40870: 在验证自定义 AST 时，如果常量 `True`、`False` 和 `None` 在 `ast.Name` 节点中使用，则抛出 `ValueError`。

- bpo-40854: 允许通过新的环境变量 `PYTHONPLATLIBDIR` 覆盖 `sys.platlibdir`。

- bpo-40826: 修复 `PyOS_Readline()` 中的GIL使用：锁定GIL以设置异常，并在检查是否有待处理信号时传递Python线程状态。

- bpo-40780: 修复了浮点数g风格字符串格式化未能移除尾部零的一个边缘情况。

- bpo-38964: 当fstring的表达式部分出现 `SyntaxError` 时，`SyntaxError` 的filename属性现在被正确设置为fstring所在文件的名称。

- bpo-40750: 在新的PEG解析器中支持 "-d" 调试标志。由Pablo Galindo提供补丁

- bpo-40217: 使用 `PyType_FromSpecWithBases()` 创建的类型实例在垃圾收集器中遍历引用时将不再自动访问其类对象。用户需要手动访问对象的类。由Pablo Galindo提供补丁。

- bpo-40696: 修复了由于异常上下文链中的循环而在 `generator.throw()` 后可能出现的挂起问题。

### 库

- bpo-39791: 从importlib_metadata 1.6.1刷新importlib.metadata。

- bpo-40807: Stop codeop._maybe_compile, used by code.InteractiveInterpreter (and IDLE). from from emitting each warning three times.

- bpo-39791: 内置加载器（SourceFileLoader和ZipImporter）现在为 `ResourceReader` 提供 `TraversableResources` 实现，并且移除了回退函数。

- bpo-17005: 最初在 `functools` 模块中引入的拓扑排序功能已被移动到一个新的 `graphlib` 模块，以更好地适应新工具并保持 `functools` 模块的原始范围。由Pablo Galindo提供补丁

- bpo-40777: 在运行时初始化PyDateTime_IsoCalendarDateType.tp_base，以避免在某些编译器上出现错误。

- 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-30008: 修复 `ssl` 代码以兼容使用 `no-deprecated` 和 `--api=1.1.0` 构建的OpenSSL 1.1.x。

- bpo-30064: 修复asyncio `loop.sock_*` 竞争条件问题

- bpo-40759: 弃用 `symbol` 模块。

- bpo-40737: 修复 `sqlite3` 初始化时可能的引用泄漏。

- bpo-40698: `distutils` upload creates SHA2-256 and Blake2b-256 digests. MD5 digests is skipped if platform blocks MD5.

- bpo-40695: `hashlib` 不再在 OpenSSL 提供哈希摘要且算法被安全策略阻止时回退到内置哈希实现。

- bpo-9216: func:`hashlib.new` passed `usedforsecurity` to OpenSSL EVP constructor `_hashlib.new()`. test_hashlib and test_smtplib handle strict security policy better.

- bpo-40614: `ast.parse()` 在传递的 `feature_version` 小于 `(3, 8)` 时不会解析 f-strings 中的自文档化表达式。

- bpo-40671: 为 PEP 489 准备 `_hashlib` 并使用 `PyModule_AddType()`。

- bpo-32309: 添加了一个新的 coroutine `asyncio.to_thread()`。它主要用于在单独的线程中运行 IO 密集型函数以避免阻塞事件循环，本质上是一个可以直接接受关键字参数的高级版本的 `run_in_executor()`。

- bpo-40630: Added `tracemalloc.reset_peak()` to set the peak size of traced memory blocks to the current size, to measure the peak of specific pieces of code.

- bpo-13097: `ctypes` 现在在回调函数被调用时传递超过1024个参数时会引发 `ArgumentError`。

- bpo-23082: 更新了PurePath.relative_to()的错误信息和文档，以更好地反映函数行为。

- bpo-39244: 修复了 `multiprocessing.context.get_all_start_methods`，以在macOS上正确首先返回默认方法。

- bpo-39040: 通过折叠裸引号字符串中编码字词之间的空白，修复了无效mime头参数的解析。

- bpo-35714: 如果 `struct` 格式字符串中有空字符，现在会引发 `struct.error`。

- bpo-36290: AST节点现在在关键字参数冲突时抛出 `TypeError`。补丁由Rémi Lapeyre提供。

### 测试

- bpo-17258: 当MD5哈希摘要被阻止时，跳过一些 `multiprocessing` 测试。

### 构建

- bpo-40514: Remove `--with-experimental-isolated-subinterpreters` configure option in Python 3.9: the experiment continues in the master branch, but it's no longer needed in 3.9.

- bpo-40683: 修复了当使用 `make` 安装Python时，`zoneinfo` 模块及其测试未被包含的问题。

### Windows

- bpo-39631: 将Windows上 `.py` 文件的注册MIME类型更改为 `text/x-python`，而不是``text/plain``。

- bpo-40677: 手动定义IO_REPARSE_TAG_APPEXECLINK，以防某些旧的Windows SDK没有它。

### macOS

- bpo-40741: 更新 macOS 安装程序以使用 SQLite 3.32.2。

### IDLE

- bpo-39885: 使上下文菜单中的剪切和复制在右击选择内容时再次工作。

- bpo-40723: 使 test_idle 在导入后运行时通过。

### C API

- bpo-40910: 显式地将 `Py_GetArgcArgv()` 函数导出到 C API 并记录该函数。之前，它是隐式导出的，由于 Python 是用 `-fvisibility=hidden` 构建的，这种方式不再有效。

- bpo-40724: 允许在类型规范中定义缓冲区槽。

- bpo-40826: 现在如果在 GIL 释放的情况下调用 `PyOS_InterruptOccurred()`，将会失败并产生致命错误。

## Python 3.9.0 beta 1

发布日期: 2020-05-19

### 安全性

- bpo-40501: `uuid` 不再使用 `ctypes` 在运行时加载 `libuuid` 或 `rpcrt4.dll`。

### 核心与内置函数

- 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: Reporting a specialised error message for invalid string prefixes, which was introduced in bpo-40246, is being reverted due to backwards compatibility concerns for strings that immediately follow a reserved keyword without whitespace between them. Constructs like `bg="#d00" if clear else"#fca"` were failing to parse, which is not an acceptable breakage on such short notice.

- 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: Improve performance of `PyLong_FromDouble()` for values that fit into `long`.

### 库

- 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_cons`、`inner` 和 `outer` 已被弃用，并将在未来移除。

- 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 615，`zoneinfo` 模块。增加了对 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: `ssl` 和 `hashlib` 模块现在主动检查 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: Update `nntplib` to merge `nntplib.NNTP` and `nntplib._NNTPBase`. Patch by Dong-hee Na.

- bpo-32494: Update `dbm.gnu` to use gdbm_count if possible when calling `len()`. Patch by Dong-hee Na.

- bpo-40453: 添加 `isolated=True` 关键字参数到 `_xxsubinterpreters.create()`。一个孤立的子解释器不能生成线程、生成子进程或调用 `os.fork()`。

- bpo-40286: 移除 `_random.Random.randbytes()`：`randbytes()` 的 C 实现。为实现子类化，该方法现在直接在 Python 中实现：`randbytes()` 现在直接重用 `getrandbits()`。

- bpo-40394: Added default arguments to `difflib.SequenceMatcher.find_longest_match()`.

- bpo-39995: 修复 concurrent.futures._ThreadWakeup 中的竞争条件：现在对 _ThreadWakeup 的访问受到关闭锁的保护。

- bpo-30966: `concurrent.futures` 的 `Process.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()` is added. Patch by Dong-hee 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: On AIX, `thread_time()` is now implemented with `thread_cputime()` which has nanosecond resolution, rather than `clock_gettime(CLOCK_THREAD_CPUTIME_ID)` which has a resolution of 10 ms. Patch by Batuhan Taskaya.

- bpo-40025: 当_generate_next_value_在成员之后定义时，抛出TypeError。由Ethan Onstott提供补丁。

- bpo-39058: 在argparse模块中，Namespace()和其他参数持有者的repr现在按照属性添加的顺序显示。以前，尽管模块的用户可见部分保留了参数顺序，但它是按字母顺序显示的。

- bpo-24416: `datetime.date` 和 `datetime.datetime` 的 `isocalendar()` 方法现在返回一个 named tuple 而不是 `tuple`。

### 文档

- bpo-34790: Add version of removal for explicit passing of coros to `asyncio.wait()`'s documentation

- 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: The `AbstractBasicAuthHandler` class of the `urllib.request` module uses an inefficient regular expression which can be exploited by an attacker to cause a denial of service. Fix the regex to prevent the catastrophic backtracking. Vulnerability reported by Ben Caller and Matt Schwager.

### 核心与内置函数

- bpo-40313: 提高 bytes.hex() 的性能。

- bpo-40334: 切换到基于 PEG 的新解析器。更多详情见 PEP 617。要暂时切换回旧解析器，使用 `-X oldparser` 或 `PYTHONOLDPARSER=1`。在 Python 3.10 中，我们将完全移除旧解析器，包括 `parser` 模块（已弃用）以及依赖于它的任何内容。

- bpo-40267: Fix the tokenizer to display the correct error message, when there is a SyntaxError on the last input character and no newline follows. It used to be `unexpected EOF while parsing`, while it should be `invalid syntax`.

- bpo-39522: 当激活注释的延迟评估时，正确反解析字符串的显式 `u` 前缀。由 Batuhan Taskaya 提供补丁。

- bpo-40246: Report a specialized error message, `invalid string prefix`, when the tokenizer encounters a string with an invalid prefix.

- bpo-40082: 修复信号处理程序：现在总是使用主解释器，而不是尝试获取当前的Python线程状态。

- bpo-37388: str.encode()和str.decode()在开发模式或Python终止期间的调试模式下不再检查编码和错误。编解码器机制在非常晚调用str.encode()和str.decode()时不再工作。

- bpo-40077: Fix possible refleaks in `_json`, memo of PyScannerObject should be traversed.

- 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: The `lib2to3` module is pending deprecation due to PEP 617.

- 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: Added `pathlib.Path.with_stem()` to create a new Path with the stem replaced.

- bpo-40325: 弃用了在 random.sample() 中对集合对象的支持。

- bpo-40257: 改进了 `typing` 模块的帮助信息。现在所有特殊形式和特殊泛型别名（如 `Union` 和 `List`）的文档字符串都会被显示。使用 `help()` 查看像 `List[int]` 这样的泛型别名时，会显示相应具体类型（在这个例子中是 `list`）的帮助信息。

- bpo-40257: func:`inspect.getdoc` no longer returns docstring inherited from the type of the object or from parent class if it is a class if it is not defined in the object itself. In `pydoc` the documentation string is now shown not only for class, function, method etc, but for any object that has its own `__doc__` attribute.

- 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: Wait in `KqueueSelector.select` when no fds are registered

- 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: Remove deprecated `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: Improve the error message when triying to import a module using `runpy` and incorrently use the ".py" extension at the end of the module name. Patch by 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: Add a private `_at_fork_reinit()` method to `_thread.Lock`, `_thread.RLock`, `threading.RLock` and `threading.Condition` classes: reinitialize the lock at fork in the child process, reset the lock to the unlocked state. Rename also the private `_reset_internal_locks()` method of `threading.Event` to `_at_fork_reinit()`.

- bpo-25780: Expose `CAN_RAW_JOIN_FILTERS` in the `socket` module.

- bpo-39503: `urllib.request` 的 `AbstractBasicAuthHandler` 现在解析所有 WWW-Authenticate HTTP 头部，并接受每个头部多个挑战：使用第一个 Basic 挑战的领域。

- bpo-39812: Removed daemon threads from `concurrent.futures` by adding an internal `threading._register_atexit()`, which calls registered functions prior to joining all non-daemon threads. This allows for compatibility with subinterpreters, which don't support daemon threads.

- bpo-40050: 修复 `importlib._bootstrap_external`: 如果 `winreg` 内置模块已经在 `sys.modules` 中可用，避免创建新的 `winreg` 内置模块，并移除冗余导入。

- bpo-40014: 修复 `os.getgrouplist()`: 如果 `getgrouplist()` 函数因为组列表太小而失败，尝试使用更大的组列表。在失败时，glibc 实现的 `getgrouplist()` 将 `ngroups` 设置为组的总数。对于其他实现，将组列表大小加倍。

- bpo-40017: Add `time.CLOCK_TAI` constant if the operating system support it.

- bpo-40016: 在 re 文档字符串中，阐明内联和参数编译标志之间的关系。

- bpo-39953: 更新 `ssl` 模块中 OpenSSL 错误代码的内部表。

- bpo-36144: 在 `weakref.WeakValueDictionary` 中添加了 PEP 584 运算符。

- bpo-36144: 在 `weakref.WeakKeyDictionary` 中添加了 PEP 584 运算符。

- bpo-38891: Fix linear runtime behaviour of the `__getitem__` and `__setitem__` methods in `multiprocessing.shared_memory.ShareableList`. This avoids quadratic performance when iterating a `ShareableList`. Patch by Thomas Krennwallner.

- bpo-39682: Remove undocumented support for closing a `pathlib.Path` object via its context manager. The context manager magic methods remain, but they are now a no-op, making `Path` objects immutable.

- 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: Deprecate passing None as an argument for `shlex.split()`'s `s` parameter. Patch by 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.FTP` 和 `ftplib.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将不再冻结。

### 工具/示例

- bpo-40385: 移除了checkpyc.py工具。请考虑使用不带force模式的compileall作为潜在替代方案。

- bpo-40179: 修复了Argument Clinic中 `#elif` 的翻译问题。

- bpo-40094: 修复了 `which.py` 脚本的退出码：现在使用 `os.waitstatus_to_exitcode()` 将 `os.system()` 的退出状态转换为退出码。

### C API

- bpo-40241: Move the `PyGC_Head` structure to the internal C API.

- bpo-40170: 将 `PyObject_IS_GC()` 宏转换为函数以隐藏实现细节。

- bpo-40241: 向公共API添加函数 `PyObject_GC_IsTracked()` 和 `PyObject_GC_IsFinalized()`，以分别查询Python对象是否正在被跟踪或已经被垃圾收集器终结。由Pablo Galindo提供补丁。

- bpo-40170: The `PyObject_NEW()` macro becomes an alias to the `PyObject_New()` macro, and the `PyObject_NEW_VAR()` macro becomes an alias to the `PyObject_NewVar()` macro, to hide implementation details. They no longer access directly the `PyTypeObject.tp_basicsize` member.

- bpo-40170: `PyType_HasFeature()` 现在总是调用 `PyType_GetFlags()` 以隐藏实现细节。以前，当不使用有限C API时，它直接访问 `PyTypeObject.tp_flags` 成员。

- bpo-40170: Convert the `PyObject_GET_WEAKREFS_LISTPTR()` macro to a function to hide implementation details: the macro accessed directly to the `PyTypeObject.tp_weaklistoffset` member.

- bpo-40170: 将 `PyObject_CheckBuffer()` 宏转换为函数以隐藏实现细节：该宏直接访问 `PyTypeObject.tp_as_buffer` 成员。

- bpo-40170: 始终将 `PyIndex_Check()` 声明为不透明函数以隐藏实现细节：移除 `PyIndex_Check()` 宏。该宏直接访问了 `PyTypeObject.tp_as_number` 成员。

- bpo-39947: 添加 `PyThreadState_GetID()` 函数：获取 Python 线程状态的唯一标识符。

## Python 3.9.0 alpha 5

发布日期: 2020-03-23

### 安全性

- bpo-38576: Disallow control characters in hostnames in http.client, addressing CVE-2019-18348. Such potentially malicious header injection URLs now cause a InvalidURL to be raised.

### 核心与内置函数

- 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: Speed up calls to `frozenset()` by using the PEP 590 `vectorcall` calling convention. Patch by Dong-hee Na.

- bpo-39984: 子解释器：将 `_PyRuntimeState.ceval.tracing_possible` 移动到 `PyInterpreterState.ceval.tracing_possible`：每个解释器现在拥有自己的变量。

- bpo-37207: Speed up calls to `set()` by using the PEP 590 `vectorcall` calling convention. Patch by Dong-hee 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: Speed up calls to `tuple()` by using the PEP 590 `vectorcall` calling convention. Patch by Dong-hee Na.

- bpo-38373: Changed list overallocation strategy. It no longer overallocates if the new size is closer to overalocated size than to the old size and adds padding.

- 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.AugLoad` 和 `ast.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.environ` 和 `os.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()` no longer outputs optional fields and attributes with default values. The default values for optional fields and attributes of AST nodes are now set as class attributes (e.g. `Constant.kind` is set to `None`).

- bpo-39889: 修复了 `ast.unparse()` 对于包含单个元素的扩展切片（例如 `a[i:j,]`）的问题。当使用元组索引时（例如 `a[i, j]`），移除冗余的元组。

- bpo-39828: Fix `json.tool` to catch `BrokenPipeError`. Patch by Dong-hee Na.

- bpo-13487: Avoid a possible "RuntimeError: dictionary changed size during iteration" from `inspect.getmodule()` when it tried to loop through `sys.modules`.

- 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: Reimplement `distutils.spawn.spawn()` function with the `subprocess` module.

- 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: The `compileall.compile_dir()` function's ddir parameter and the compileall command line flag `-d` no longer write the wrong pathname to the generated pyc file for submodules beneath the root of the directory tree being compiled. This fixes a regression introduced with 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 status codes `103 EARLY_HINTS` and `425 TOO_EARLY` are added to `http.HTTPStatus`. Patch by Dong-hee 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``添加了对 ``return` 和 `yield` 语句中星号表达式的支持。由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。简单索引现在由其值表示，扩展切片表示为元组。`ast` 类 `Index` 和 `ExtSlice` 被认为已弃用，将在未来的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: 将模块 `dis` 中 MAKE_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: Add `--with-platlibdir` option to the configure script: name of the platform-specific library directory, stored in the new `sys.platlibdir` attribute. It is used to build the path of platform-specific extension modules and the path of the standard library. It is equal to `"lib"` on most platforms. On Fedora and SuSE, it is equal to `"lib64"` on 64-bit platforms. Patch by Jan Matějek, Matěj Cepl, Charalampos Stratakis and Victor Stinner.

### Windows

- bpo-39930: 确保安装包中包含所需的 `vcruntime140.dll`。

- bpo-39847: 避免在计算机休眠时等待互斥锁（用于来自 `threading` 的锁相关对象）时挂起，大约49天的运行时间。

- bpo-38597: `distutils` will no longer statically link `vcruntime140.dll` when a redistributable version is unavailable. All future releases of CPython will include a copy of this DLL to ensure distributed extensions can continue to load.

- 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: Added support to fix `getproxies` in the `lib2to3.fixes.fix_urllib` module. Patch by José Roberto Meza Cabrera.

### C API

- bpo-40024: Add `PyModule_AddType()` helper function: add a type to a module. Patch by Dong-hee Na.

- bpo-39946: 移除 `_PyRuntime.getframe` 钩子并移除作为 `_PyRuntime.getframe` 别名的 `_PyThreadState_GetFrame` 宏。它们仅由内部 C API 暴露。同时移除 `PyThreadFrameGetter` 类型。

- bpo-39947: 添加 `PyThreadState_GetFrame()` 函数：获取 Python 线程状态的当前帧。

- bpo-37207: Add _PyArg_NoKwnames helper function. Patch by Dong-hee Na.

- bpo-39947: 添加 `PyThreadState_GetInterpreter()`：获取 Python 线程状态的解释器。

- bpo-39947: 将 `PyInterpreterState_Get()` 函数添加到有限的 C API 中。

- bpo-35370: 如果在 `PyEval_SetProfile()` 或 `PyEval_SetTrace()` 中 `PySys_Audit()` 失败，将错误记录为不可引发的异常。

- bpo-39947: 将 Py_EnterRecursiveCall() 和 Py_LeaveRecursiveCall() 的静态内联函数版本移至内部 C API：它们访问 PyThreadState 属性。有限的 C API 提供了隐藏实现细节的常规函数。

- bpo-39947: Py_TRASHCAN_BEGIN_CONDITION 和 Py_TRASHCAN_END 宏不再访问 PyThreadState 属性，而是调用新的私有 _PyTrash_begin() 和 _PyTrash_end() 函数，这些函数隐藏了实现细节。

- bpo-39884: `PyDescr_NewMethod()` 和 `PyCFunction_NewEx()` 现在在 SystemError "bad call flags" 错误消息中包含方法名称，以方便调试。

- bpo-39877: Deprecated `PyEval_InitThreads()` and `PyEval_ThreadsInitialized()`. Calling `PyEval_InitThreads()` now does nothing.

- bpo-38249: `Py_UNREACHABLE` 现在在发布模式下使用 `__builtin_unreachable()` 和类似实现。

- bpo-38643: `PyNumber_ToBase()` 现在在被调用时使用无效的基数会引发 `SystemError` 而不是崩溃。

- bpo-39882: `Py_FatalError()` 函数被一个宏替换，该宏自动记录当前函数的名称，除非定义了 `Py_LIMITED_API` 宏。

- bpo-39824: 扩展模块：如果模块状态被请求但尚未分配，`m_traverse`、`m_clear` 和 `m_free` 函数将不再被调用。这种情况发生在模块创建后立即和模块执行前（`Py_mod_exec` 函数）。更准确地说，如果 `m_size` 大于 0 且模块状态（由 `PyModule_GetState()` 返回）为 `NULL`，这些函数不会被调用。

  没有模块状态的扩展模块 (`m_size <= 0`) 不会受到影响。

- bpo-38913: 修复了在设置了异常的情况下，使用包含 "#" 且未定义 PY_SSIZE_T_CLEAN 的格式调用 `Py_BuildValue()` 时的段错误。

- bpo-38500: 添加了一个私有 API 来获取和设置帧评估函数：添加了 `_PyInterpreterState_GetEvalFrameFunc()` 和 `_PyInterpreterState_SetEvalFrameFunc()` C 函数。`_PyFrameEvalFunction` 函数类型现在接受一个 tstate 参数。

## Python 3.9.0 alpha 4

发布日期: 2020-02-25

### 安全性

- bpo-39184: Add audit events to functions in `fcntl`, `msvcrt`, `os`, `resource`, `shutil`, `signal` and `syslog`.

- bpo-39401: 避免在 Windows 7 及更早版本上启动时不安全的 DLL 加载。

- bpo-39184: 向 os 和 pty 模块中的命令执行函数添加审计事件。

### 核心与内置函数

- bpo-39382: 修复了 `issubclass()` 单继承路径中的一个释放后使用问题，当对象的 `__bases__` 有一个单一引用时，其第一个项目也是如此。由 Yonatan Goldschmidt 提供补丁。

- bpo-39573: Update clinic tool to use `Py_IS_TYPE()`. Patch by Dong-hee Na.

- bpo-39619: 在 HP-UX 系统上启用 `os.chroot()` 的使用。

- bpo-39573: 添加 `Py_IS_TYPE()` 静态内联函数，用于检查对象 o 的类型是否为 type。

- bpo-39606: 修复由 bpo-39386 的修复引起的回归问题，该问题阻止了对已经关闭或耗尽的异步生成器调用 `aclose`。

- bpo-39579: Change the ending column offset of `Attribute` nodes constructed in `ast_for_dotted_name` to point at the end of the current node and not at the end of the last `NAME` node.

- 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: Fixed a possible crash in `list.__contains__()` when a list is changed during comparing items. Patch by Dong-hee Na.

- bpo-39434: floor division of float operation now has a better performance. Also the message of `ZeroDivisionError` for this operation is updated. Patch by Dong-hee Na.

- bpo-1635741: 将 _codecs 扩展模块移植到多阶段初始化 (PEP 489)。

- bpo-1635741: 将 _bz2 扩展模块移植到多阶段初始化 (PEP 489)。

- bpo-1635741: 将 _abc 扩展模块移植到多阶段初始化 (PEP 489)。

- bpo-39320: 用两个更简单的字节码替换构建字典的两个复杂字节码。添加了新的字节码 `DICT_MERGE` 和 `DICT_UPDATE`，移除了旧的字节码 `BUILD_MAP_UNPACK` 和 `BUILD_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: Remove obsolete check for `__args__` in bdb.Bdb.format_stack_entry.

- 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: `pydoc` 和 `trace` 模块现在使用 `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: Improved performance of zipfile.Path for files with a large number of entries. Also improved performance and fixed minor issue as published with 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.Annotated` 和 `include_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` 存档中为非设备文件省略 `devmajor` 和 `devminor` 字段，实现与 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.Condition` 和 `asyncio.Semaphore` 同样适用。

- bpo-25597: 确保在向 `unittest.mock.MagicMock` 提供 `wraps` 时，它被用于计算魔术方法的返回值，而不是使用默认返回值。由Karthikeyan Singaravelan提供的补丁。

- bpo-36350: `inspect.Signature.parameters` and `inspect.BoundArguments.arguments` are now dicts instead of OrderedDicts. Patch contributed by Rémi Lapeyre.

- bpo-35727: 修复了在multiprocessing.Process中使用sys.exit()和sys.exit(None)时的退出代码传播问题。

- bpo-32173: * Add `lazycache` function to `__all__`. * Use `dict.clear` to clear the cache. * Refactoring `getline` function and `checkcache` function.

### 文档

- bpo-17422: 语言参考现在指定了对类命名空间的限制。基于Ethan Furman的补丁改编。

- bpo-39572: 更新了 `TypedDict` 的 `total` 标志的文档。

- 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-38325: 在test_winconsoleio的非BMP字符测试中跳过测试。

- bpo-39502: 如果 `time.localtime()` 因 `OverflowError` 失败，则跳过test_zipfile.test_add_file_after_2107()。例如在AIX 6.1上就是这种情况。

### 构建

- bpo-39489: 移除 `COUNT_ALLOCS` 特殊构建。

### Windows

- bpo-39553: 删除与SxS清单相关的未使用代码。

- bpo-39439: 在Windows上激活virtualenv时，尊重Python路径。

- bpo-39393: 改进尝试加载具有未解决依赖项的DLL时的错误消息。

- bpo-38883: `home()` and `expanduser()` on Windows now prefer `USERPROFILE` and no longer use `HOME`, which is not normally set for regular user accounts. This makes them again behave like `os.path.expanduser()`, which was changed to ignore `HOME` in 3.8, see 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`）。现在编译 `math` 和 `cmath` 模块时必须定义 `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_Vectorcall`、`PyObject_VectorcallMethod`、`PyVectorcall_Function`、`PyObject_CallOneArg`、`PyObject_CallMethodNoArgs`、`PyObject_CallMethodOneArg`、`PyObject_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: Correct the error message when calling the `min()` or `max()` with no arguments. Patch by Dong-hee 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: Fixed a regression with the `ignore` callback of `shutil.copytree()`. The argument types are now str and List[str] again.

- 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: The previously deprecated `xpath()` and `xgtitle()` methods of `nntplib.NNTP` have been removed.

- bpo-39357: 移除 `bz2.BZ2File` 的 buffering 参数。自 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` constructor now has an optional timeout parameter. Patch by Dong-hee Na.

- bpo-39313: 为 `RefactoringTool` 添加一个新的 `exec_function` 选项（CLI 中的 --exec-function）以使 `exec` 成为函数。由 Batuhan Taskaya 提供补丁。

- bpo-39259: `FTP_TLS` and `FTP_TLS` now raise a `ValueError` if the given timeout for their constructor is zero to prevent the creation of a non-blocking socket. Patch by Dong-hee Na.

- bpo-39259: `SMTP` and `SMTP_SSL` now raise a `ValueError` if the given timeout for their constructor is zero to prevent the creation of a non-blocking socket. Patch by Dong-hee Na.

- bpo-39310: 添加 `math.ulp()`：返回一个浮点数的最低有效位的值。

- bpo-39297: 提高了 importlib.metadata 分发发现的性能以及对无法访问的 sys.path 条目的恢复能力（importlib_metadata v1.4.0）。

- bpo-39259: `NNTP` and `NNTP_SSL` now raise a `ValueError` if the given timeout for their constructor is zero to prevent the creation of a non-blocking socket. Patch by Dong-hee Na.

- bpo-38901: 当您指定prompt='.'或等效地使用python -m venv --prompt . ...时，当前目录的basename将被用来设置创建的venv在激活时的提示符。

- bpo-39288: 添加 `math.nextafter()`: 返回 x 向 y 方向的下一个浮点数值。

- bpo-39259: `POP3` and `POP3_SSL` now raise a `ValueError` if the given timeout for their constructor is zero to prevent the creation of a non-blocking socket. Patch by Dong-hee Na.

- bpo-39242: Updated the Gmane domain from news.gmane.org to news.gmane.io which is used for examples of `NNTP` news reader server and nntplib tests.

- bpo-35292: Proxy the `SimpleHTTPRequestHandler.guess_type` to `mimetypes.guess_type` so the `mimetypes.init` is called lazily to avoid unnecessary costs when `http.server` module is imported.

- bpo-39239: `select.epoll.unregister()` 方法不再忽略 `EBADF` 错误。

- bpo-38907: 在http.server脚本中，恢复在Windows上绑定到IPv4。

- bpo-39152: 修复ttk.Scale.configure([name])返回名称或所有选项的配置元组。Giovanni Lombardo贡献了部分补丁。

- bpo-39198: If an exception were to be thrown in `Logger.isEnabledFor` (say, by asyncio timeouts or stopit) , the `logging` global lock may not be released appropriately, resulting in deadlock. This change wraps that block of code with `try...finally` to ensure the lock is released.

- bpo-39191: 在 `loop.run_until_complete()` 中开始新任务前检查是否有运行循环，以快速失败；它防止在引发异常之前新任务产生的副作用。

- bpo-38871: Correctly parenthesize filter-based statements that contain lambda expressions in mod:`lib2to3`. Patch by Dong-hee 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=True` 的 `base64.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` 命令在提供 `author` 和 `maintainer` 字段但未找到相应电子邮件字段（`author_email` 或 `maintainer_email`）时发出的警告的措辞。措辞现在反映了这些字段是建议的，但不是必需的。由 Juergen Gmach 提供补丁。

- bpo-38878：修复了 `os.PathLike` 的 __subclasshook__ 以在继承时返回正确的结果。由 Bar Harel 提供补丁。

- bpo-38615: `IMAP4` and `IMAP4_SSL` now have an optional timeout parameter for their constructors. Also, the `open()` method now has an optional timeout parameter with this change. The overridden methods of `IMAP4_SSL` and `IMAP4_stream` were applied to this change. Patch by Dong-hee Na.

- bpo-35182: 修复了当子进程已经关闭了任何管道标准流但仍然继续运行时，`Popen.communicate()` 后续调用崩溃的问题。由 Andriy Maletsky 提供补丁。

- bpo-38630: 在 Unix 上，`subprocess.Popen.send_signal()` 现在会轮询进程状态。轮询减少了在进程已完成但 `subprocess.Popen.returncode` 属性仍为 `None` 且 pid 已被重新分配（回收）给一个新的不同进程时向错误进程发送信号的风险。

- bpo-38536: Removes trailing space in formatted currency with `international=True` and a locale with symbol following value. E.g. `locale.currency(12.34, international=True)` returned `'12,34 EUR '` instead of `'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: Add an entry for `__module__` in the "function" & "method" sections of the inspect docs types and members table

- bpo-3530: 在 `ast` 模块文档中，修正一个误导性的 `NodeTransformer` 示例，并添加关于何时使用 `fix_missing_locations` 函数的建议。

### 构建

- bpo-39395: 在非Windows平台上，`setenv()` 和 `unsetenv()` 函数现在是构建Python所必需的。

- bpo-39160: Updated the documentation in `/configure --help` to show default values, reference documentation where required and add additional explanation where needed.

- bpo-39144: ctags 和 etags 的构建目标都包括 Modules/_ctypes 和 Python 标准库源文件。

### IDLE

- bpo-39050: 使IDLE设置对话框的帮助按钮重新工作。

- bpo-34118: 在库手册内置函数列表中，将 memoryview、range 和 tuple 标记为类，与 list 等相同。

- bpo-32989: 为编辑器 newline_and_indent_event 方法添加测试。从 pyparse find_good_parse_start 方法中删除死代码。

### C API

- bpo-39372: 清理定义了但未实现的接口的头文件。被移除的公共API符号有：`_PyBytes_InsertThousandsGroupingLocale`、`_PyBytes_InsertThousandsGrouping`、`_Py_InitializeFromArgs`、`_Py_InitializeFromWideArgs`、`_PyFloat_Repr`、`_PyFloat_Digits`、`_PyFloat_DigitsInit`、`PyFrame_ExtendStack`、`_PyAIterWrapper_Type`、`PyNullImporter_Type`、`PyCmpWrapper_Type`、`PySortWrapper_Type`、`PyNoArgsFunction`。

- bpo-39164: 添加一个私有的 `_PyErr_GetExcInfo()` 函数来检索指定Python线程状态的异常信息。

## Python 3.9.0 alpha 2

发布日期: 2019-12-18

### 安全性

- bpo-38945: 为了防止换行符溢出到编码文件的内容部分，在进行uu编码时已对换行符进行了转义。这可以防止在解码过程中数据被恶意或意外修改。

- bpo-37228: 由于重大的安全问题，`asyncio.loop.create_datagram_endpoint()` 的 reuse_address 参数不再被支持。这是因为UDP中 `SO_REUSEADDR` 的行为。更多详情，请参见 `loop.create_datagram_endpoint()` 的文档。（由Kyle Stanley、Antoine Pitrou和Yury Selivanov在 bpo-37228 中贡献。）

- bpo-38804: 修复了 `http.cookiejar` 中的一个ReDoS漏洞。由Ben Caller提供补丁。

### 核心与内置函数

- bpo-39028: 通过加强kwargs是interned字符串的假设，略微提高了在有许多kwargs时关键字参数解析的速度。

- bpo-39080: 当Starred Expression AST节点位于Call AST节点的 args 属性中的元素之间时，修复了 end_col_offset 的值。

- bpo-39031: 当解析一个"elif"节点时，节点的lineno和col_offset现在指向"elif"关键字而不是其条件，使其与"if"节点保持一致。由Lysandros Nikolaou提供补丁。

- bpo-20443: 在Python 3.9.0a1中，如果在命令行中指定了文件名，sys.argv[0]会被设置为绝对路径。撤销这一更改，因为大多数用户期望sys.argv保持不变。

- bpo-39008: `PySys_Audit()` 现在要求在格式字符串中使用 `Py_ssize_t` 作为大小参数，不管在包含时是否定义了 `PY_SSIZE_T_CLEAN`。

- bpo-38673: 在REPL模式下，如果行以注释或空白开始，不切换到PS2。基于Batuhan Taşkaya的工作。

- bpo-38922: 现在在代码对象上调用 `replace` 会引发 `code.__new__` 审计事件。

- bpo-38920: 添加了当 `sys.excepthook()` 和 `sys.unraisablehook()` 被调用时的审计钩子。

- bpo-38892: 改进审计事件表格和函数的文档。

- bpo-38852: 在安卓平台的调试版本中将线程堆栈大小设置为8 Mb。

- bpo-38858: 每个Python子解释器现在都有自己的“小整数单例”：范围在[-5; 257]的数字。现在不再可能通过在构建时覆盖 `NSMALLNEGINTS` 和 `NSMALLPOSINTS` 宏来更改小整数的数量：宏现在应该在 `pycore_pystate.h` 头文件中手动修改。

- bpo-36854: 垃圾收集器状态变为每个解释器（`PyInterpreterState.gc`），而不是全局的（`_PyRuntimeState.gc`）。

- bpo-38835: `PyFPE_START_PROTECT()` 和 `PyFPE_END_PROTECT()` 宏为空：它们在过去一年中什么也没做，因此停止使用它们。

- bpo-38328: 加速了常量 `list` 和 `set` 显示的创建时间。由Brandt Bucher提供补丁。

- bpo-38707: `MainThread.native_id` 现在在使用 `multiprocessing.Process` 生成的子进程中被正确重置，而不是保留父进程的值。

- bpo-38629: 向float对象添加了 `__floor__` 和 `__ceil__` 方法。由Batuhan Taşkaya提供补丁。

- bpo-27145: int + int和int - int操作符现在可以返回小整数单例。由hongweipeng提供补丁。

- bpo-38021: 为AIX提供一个足以用于PEP425二进制分发识别的平台标签。由Michael Felt提供补丁。

- bpo-35409: 在向异步生成器的aclose协程抛出异常时忽略GeneratorExit异常。

- bpo-33387: 移除了WITH_CLEANUP_START、WITH_CLEANUP_FINISH、BEGIN_FINALLY、END_FINALLY、CALL_FINALLY和POP_FINALLY字节码。替换为RERAISE和WITH_EXCEPT_START字节码。编译器现在为'with'和'try-except'语句的异常和非异常分支生成不同的代码。对于'try-finally'语句，'finally'块为'try'主体的每次退出复制。

### 库

- bpo-39033: 修复 `zipimport` 中的 `NameError`。由Karthikeyan Singaravelan提供补丁。

- bpo-39022: 更新importlib.metadata以包含来自importlib_metadata 1.3的改进，包括EntryPoints的更好的序列化和自定义查找器的改进文档。

- bpo-39006: 修复当ssl模块缺失时的asyncio问题：仅在ssl模块可用时检查ssl.SSLSocket实例。

- bpo-38708: 修复电子邮件解析器在解析空msg-id时可能出现的IndexError。

- bpo-38698: 向电子邮件解析器添加一个新的 `InvalidMessageID` 标记，以表示无效的Message-ID头。此外，在解析头之后还有剩余值时添加缺陷。

- bpo-38994: 为 `os.PathLike`、`pathlib.Path` 实现 `__class_getitem__`。

- bpo-38979: 从 `ContextVar.__class_getitem__` 返回类以简化子类化。

- bpo-38978: 在asyncio对象（Future, Task, Queue）上实现 `__class_getitem__`。由Batuhan Taskaya提供补丁。

- bpo-38916: `array.array`: 移除 `tostring()` 和 `fromstring()` 方法。它们是``tobytes()``和 `frombytes()` 的别名，自Python 3.2起已弃用。

- bpo-38986: 使C加速的TaskWakeupMethWrapper的repr与纯Python版本的相同。

- bpo-38982: 修复asyncio `PidfdChildWatcher`：处理 `waitpid()` 错误。如果在其他地方调用 `waitpid()`，`waitpid()` 调用会失败并抛出 `ChildProcessError`：在这种情况下使用返回码255，并记录一个警告。这确保了如果此错误发生，pidfd文件描述符会被关闭。

- bpo-38529: 取消关于未显式调用 `.close()` 删除流的过于嘈杂的asyncio警告。

- bpo-27413: 增加了在 `json.tool` 命令行界面中将 `ensure_ascii` 选项传递给json.dumps的能力。

- bpo-38634: `readline` 模块现在在所有平台上运行时检测Python是否链接到libedit。以前，此检查仅在macOS上进行。

- bpo-33684: 修复当区域编码不是UTF-8时，`json.tool` 无法读取包含非ASCII字符的JSON文件的问题。

- bpo-38698: 防止在parse_message_id中出现UnboundLocalError。

  parse_message_id() was improperly using a token defined inside an exception handler, which was raising `UnboundLocalError` on parsing an invalid value. Patch by Claudiu Popa.

- bpo-38927: 在venv中使用 `python -m pip` 而不是 `pip` 来升级依赖。

- bpo-26730: 修复 `SpooledTemporaryFile.rollover()` 在文本模式下可能会损坏文件的问题。由Serhiy Storchaka提供补丁。

- bpo-38881: 当所有权重为零时，random.choices() 现在会引发 ValueError。

- bpo-38876: 当从memo加载无效输入的项时，引发pickle.UnpicklingError。

  The previous code was raising a `KeyError` for both the Python and C implementation. This was caused by the specified index of an invalid input which did not exist in the memo structure, where the pickle stores what objects it has seen. The malformed input would have caused either a `BINGET` or `LONG_BINGET` load from the memo, leading to a `KeyError` as the determined index was bogus. Patch by Claudiu Popa

- bpo-38688: Calling func:`shutil.copytree` to copy a directory tree from one directory to another subdirectory resulted in an endless loop and a RecursionError. A fix was added to consume an iterator and create the list of the entries to be copied, avoiding the recursion for newly created directories. Patch by Bruno P. Kinoshita.

- bpo-38863: 改进 `http.server` 中的 `is_cgi()` 函数，使其能够处理cgi目录是除根目录外的另一个目录的子目录的情况。

- bpo-37838: `typing.get_type_hints()` 正确处理了用 `functools.wraps()` 装饰的函数。

- bpo-38870: 将 `ast.unparse()` 作为 `ast` 模块的一个函数公开，可用于反解析一个 `ast.AST` 对象，并生成一个字符串，该字符串在被解析时会生成一个等效的 `ast.AST` 对象。由 Pablo Galindo 和 Batuhan Taskaya 提供补丁。

- bpo-38859: AsyncMock 现在在 side_effects 可迭代对象耗尽时返回 StopAsyncIteration。由于 PEP-479，从协程中引发 StopIteration 异常是不可能的。

- bpo-38857: AsyncMock 修复了返回值为可等待类型的问题。这还包括了那些恰好是可等待的 side_effect 可迭代值，并包装了返回可等待类型的可调用对象。在此之前，这些可等待对象是被等待而不是原样返回。

- bpo-38834: `typing.TypedDict` 子类现在使用 `__required_keys__` 和 `__optional_keys__` 属性来跟踪哪些键是可选的，以便下游项目进行运行时验证。由 Zac Hatfield-Dodds 提供补丁。

- bpo-38821: 修复了 `argparse` 在国际化错误消息时对于 `nargs` 设置为特殊（非整数）值的参数未处理的异常。由 Federico Bond 提供补丁。

- bpo-38820: 使 Python 与 OpenSSL 3.0.0 兼容。`ssl.SSLSocket.getpeercert()` 不再返回带有尾随换行符的 IPv6 地址。

- bpo-38811: 修复了 `pathlib` 在 `os.link()` 缺失时的未处理异常。由 Toke Høiland-Jørgensen 提供补丁。

- bpo-38686: 在 `urllib.request.AbstractDigestAuthHandler` 中添加了对多个 `qop` 值的支持。

- bpo-38712: 添加了 Linux 特有的 `signal.pidfd_send_signal()` 函数，该函数允许向由文件描述符而非 pid 标识的进程发送信号。

- bpo-38348: 向 ast 解析工具添加了 `-i` 和 `--indent` (缩进级别) 以及 `--no-type-comments` (类型注释) 命令行选项。

- bpo-37523: 修改 `zipfile.ZipExtFile` 在尝试访问已关闭的底层文件对象时抛出 `ValueError`。这一新行为与 Python 其他部分处理访问已关闭文件的方式保持一致。

- bpo-38045: 提高 `enum` 中 `enum._decompose()` 的性能。由 hongweipeng 提供补丁。

- bpo-36820: 在 socket.py、codeop.py 和 dyld.py 中保存异常时生成的循环被打破，因为它们不仅通过 `__traceback__` 属性保持异常活跃，还保持了用户对象。由 Mario Corchero 提供补丁。

- bpo-36406: 在 `doctest` 中处理命名空间包。由 Karthikeyan Singaravelan 提供补丁。

- bpo-34776: 修复数据类以支持类型注解中的前向引用。

- bpo-20928: ElementTree 支持递归 XInclude 处理。由 Stefan Behnel 提供补丁。

- bpo-29636: 为 `json.tool` CLI 添加格式化 JSON 的空格选项。现在支持以下互斥选项：`--indent` 用于设置空格缩进级别；`--tab` 用于使用制表符缩进；`--no-indent` 用于抑制换行；`--compact` 用于抑制所有空格。默认行为仍与 `--indent=4` 相同。

### 文档

- bpo-38928: 更正 venv 的 `upgrade_dependencies()` 和 `--upgrade-deps` 的添加时机。

- bpo-38899: Update documentation to state that to activate virtual environments under fish one should use `source`, not `` as documented at https://fishshell.com/docs/current/commands.html#source.

- bpo-22377: 改进 `datetime.datetime.strptime()` 接受的 `%Z` 值的文档。由 Karl Dubost 提供补丁。

### 测试

- bpo-38546: 修复 test_concurrent_futures 的 test_ressources_gced_in_workers()：显式停止管理器以防止测试完成后泄漏在后台运行的子进程。

- bpo-38546: 多处理和 concurrent.futures 测试现在在测试完成时停止资源跟踪器进程。

- bpo-38614: 在测试中用新的 `test.support` 常量替换硬编码的超时常量：`LOOPBACK_TIMEOUT`、`INTERNET_TIMEOUT`、`SHORT_TIMEOUT` 和 `LONG_TIMEOUT`。这样更容易一次性为所有测试调整这四个超时常量，而不必调整每一个测试文件。

- bpo-38547: 修复 test_pty：如果进程是会话领导者，关闭主文件描述符会引发 SIGHUP 信号：在运行测试时简单地忽略 SIGHUP。

- bpo-38992: 修复一个因常数折叠而失败的 `math.fsum()` 测试。

- bpo-38991: `test.support`：`run_python_until_end()`、`assert_python_ok()` 和 `assert_python_failure()` 函数不再从 stderr 中去除空格。移除 `test.support.strip_python_stderr()` 函数。

- bpo-38965: 在 GCC 10 上修复 test_faulthandler。在 `faulthandler._stack_overflow()` 中使用 "volatile" 关键字来防止在任何编译器上进行尾调用优化，而不是依赖于编译器特定的编译指示。

- bpo-38875: test_capi：垃圾回收测试现在需要测试 "cpu" 资源。

- bpo-38841: 在缺乏对命名 Unix 域套接字有功能 bind() 的平台上跳过 asyncio test_create_datagram_endpoint_existing_sock_unix。

- bpo-38692: 如果 `os.pidfd_open()` 因为 `PermissionError` 失败，则跳过 test_posix.test_pidfd_open() 测试。这种情况可能发生在使用系统调用白名单但不允许 `pidfd_open()` 系统调用的 Linux 沙箱中。

- bpo-38839: 修复测试中一些未使用的函数。由 Adam Johnson 提供补丁。

- bpo-38669: 当用字符串传递目标时，`unittest.mock.patch.object()` 抛出 `TypeError`。

- bpo-37957: test.regrtest 现在可以接收一个要忽略的测试模式列表（使用 -i/--ignore 参数）或一个包含要忽略模式列表的文件（使用 --ignore-file 参数）。由 Pablo Galindo 提供补丁。

### 构建

- bpo-37404: `asyncio` now raises `TyperError` when calling incompatible methods with an `ssl.SSLSocket` socket. Patch by Ido Michael.

- bpo-36500: 在 Visual Studio 解决方案中添加了一个可选的 "regen" 项目，该项目将重新生成所有语法、标记和操作码。

### Windows

- bpo-39007: 向 `winreg` 中的函数添加审计事件。

- bpo-33125: 添加对构建和发布 Windows ARM64 包的支持。

### macOS

- bpo-37931: Fixed a crash on OSX dynamic builds that occurred when re-initializing the posix module after a Py_Finalize if the environment had changed since the previous `import posix`. Patch by Benoît Hudson.

### IDLE

- bpo-38944: 现在按 Escape 键可以关闭 IDLE 的补全窗口。由 Johnny Najera 提供补丁。

- bpo-38943: 修复了在某些系统上 IDLE 自动补全窗口不总是出现的问题。由 Johnny Najera 提供补丁。

- bpo-38862: 格式菜单上的 '去除尾部空白' 现在会去除非 shell 文件末尾的额外换行符。

- bpo-38636: 修复 IDLE 格式菜单的标签切换和文件缩进宽度。这些功能（默认快捷键 Alt-T 和 Alt-U）在 3.7.5 和 3.8.0 中被错误地禁用。

### C API

- bpo-38896: 移除 `PyUnicode_ClearFreeList()` 函数：Unicode 空闲列表已在 Python 3.3 中移除。

- bpo-37340: 移除 `PyMethod_ClearFreeList()` 和 `PyCFunction_ClearFreeList()` 函数：绑定方法对象的空闲列表已被移除。

- bpo-38835: 从 `Py_LIMITED_API` (稳定 API) 中排除 `pyfpe.h` 的 `PyFPE_START_PROTECT()` 和 `PyFPE_END_PROTECT()` 宏。

## Python 3.9.0 alpha 1

发布日期: 2019-11-19

### 安全性

- bpo-38722: `runpy` 现在使用 `io.open_code()` 来打开代码文件。由 Jason Killen 提供补丁。

- bpo-38622: 为 `ctypes` 模块添加额外的审计事件。

- bpo-38418: 修复 `os.system()` 的审计事件名称为 `os.system`。

- bpo-38243: Escape the server title of `xmlrpc.server.DocXMLRPCServer` when rendering the document page as HTML. (Contributed by Dong-hee Na in bpo-38243.)

- bpo-38174: Update vendorized expat library version to 2.2.8, which resolves CVE-2019-15903.

- bpo-37764: 修复了 email._header_value_parser.get_unstructured 在特定情况下进入无限循环的问题，这些情况包括电子邮件头部没有尾随空白，以及包含无效编码字的情况。由 Ashwin Ramaswami 提供补丁。

- bpo-37461: 修复解析特别构造的电子邮件头部时出现的无限循环问题。补丁由 Abhilash Raj 提供。

- bpo-37363: 为一系列支持的运行命令添加审计事件（参见 命令行与环境）。

- bpo-37463: ssl.match_hostname() 不再接受 IPv4 地址后面附加额外文本，且仅接受不带尾随空格的四点表示法。某些 inet_aton() 实现会忽略空格及空格后的所有数据，例如 '127.0.0.1 whatever'。

- bpo-37363: Adds audit events for `ensurepip`, `ftplib`, `glob`, `imaplib`, `nntplib`, `pdb`, `poplib`, `shutil`, `smtplib`, `sqlite3`, `subprocess`, `telnetlib`, `tempfile` and `webbrowser`, as well as `os.listdir()`, `os.scandir()` and `breakpoint()`.

- bpo-37364: 现在在读取 `.pth` 文件时使用 `io.open_code()`。

- bpo-34631: 在 Windows 安装程序中更新 OpenSSL 至 1.1.1c。

- bpo-34155: 修复解析包含多个 `@` 的无效电子邮件地址（例如 a@b@c.com）时的问题，确保不会将第二个 `@` 之前的部分作为有效电子邮件地址返回。由 maxking 和 jpic 提供补丁。

### 核心与内置函数

- bpo-38631: 在 `float.__getformat__()` 中将 `Py_FatalError()` 调用替换为常规的 `RuntimeError` 异常。

- bpo-38639: Optimized `math.floor()`, `math.ceil()` and `math.trunc()` for floats.

- bpo-38640: 修复了编译器中的一个bug，该bug在总是为假的while循环中存在break语句和continue语句时会引发错误。由Pablo Galindo提供补丁。

- bpo-38613: 优化了 `dict_keys` 的一些集合操作（例如 `|`、`^`、和 `-`）。`d.keys() | other``之前比 ``set(d) | other` 慢，但现在它们的性能几乎相同。

- bpo-28029: `"".replace("", s, n)``现在对于所有非零 ``n` 返回 `s` 而不是空字符串。`bytes` 和 `bytearray` 对象也有类似的更改。

- bpo-38535: 修复了装饰器中无参数调用的AST节点的行号和列偏移。

- bpo-38525: Fix a segmentation fault when using reverse iterators of empty `dict` objects. Patch by Dong-hee Na and Inada Naoki.

- bpo-38465: `bytearray`、`array` 和 `mmap` 对象现在允许一次导出超过 `2**31` 个缓冲区。

- bpo-38469: 修复了一个bug，即在存在 global 关键字时，命名表达式的作用域未被正确解析。由Pablo Galindo提供补丁。

- bpo-38437: 为解释器的调试版本（当设置 `Py_DEBUG` 时）激活 `GC_DEBUG` 宏。由Pablo Galindo提供补丁。

- bpo-38379: 当垃圾回收器进行回收时，其中一些对象复活（在执行完终结器后可以从隔离的循环外部访问），不要阻止回收所有仍然无法访问的对象。由Pablo Galindo和Tim Peters提供补丁。

- bpo-38379: 当循环垃圾回收（gc）运行终结器使无法访问的对象复活时，当前的gc运行结束，不收集任何循环垃圾。然而，`collect()``和 ``get_stats()` 报告的统计信息声称所有发现的循环垃圾都被回收了，并且复活的对象也被回收了。更改了统计信息以报告没有收集到任何对象。

- bpo-38392: 在调试模式下，`PyObject_GC_Track()` 现在会调用对象类型的 `tp_traverse()` 以确保对象有效：测试被 `tp_traverse()` 访问的对象是否有效。

- bpo-38210: Remove unnecessary intersection and update set operation in dictview with empty set. (Contributed by Dong-hee Na in bpo-38210.)

- bpo-38402: 检查系统底层 `crypt` 或 `crypt_r` 的错误。

- bpo-37474: On FreeBSD, Python no longer calls `fedisableexcept()` at startup to control the floating point control mode. The call became useless since FreeBSD 6: it became the default mode.

- bpo-38006: 修复了一个由于弱引用和循环垃圾收集器交互导致的错误。我们必须清除垃圾中的任何弱引用，以防止它们的回调执行并导致崩溃。

- bpo-38317: 修复警告选项的优先级：`PyConfig.warnoptions` 拥有最高优先级，如 PEP 587 所述。

- bpo-38310: 在主解释器循环中预测 `BUILD_MAP_UNPACK_WITH_CALL` -> `CALL_FUNCTION_EX` 操作码对。由 Brandt Bucher 提供补丁。

- bpo-36871: 改进了对模拟的 assert_has_calls 和 assert_has_awaits 方法的错误处理。修复了一个错误，其中在将预期调用绑定到模拟的规范时遇到的任何错误都被静默吞噬，导致误导性的错误输出。

- bpo-11410: 通过使用 gcc >= 4.0 中可用的可见性属性，在 POSIX 和 Windows 上以统一的方式提供了更好的符号可见性控制。POSIX 构建文件已更新，以使用 -fvisibility=hidden 编译，最小化导出的符号。

- bpo-38219: 针对参数为字典的情况优化了 `dict` 构造函数和 `update()` 方法。

- bpo-38236: 如果 Python 无法导入文件系统和标准 IO 编码的 Python 编解码器，现在会转储路径配置。

- bpo-38013: 允许为未启动的异步生成器助手调用 `async_generator_athrow().throw(...)`。这修复了在 `asyncio.run()` 调用结束时出现的烦人警告。

- bpo-38124: 修复了 PyState_AddModule 中的一个差一错误，该错误可能导致内存越界访问。

- bpo-38116: select 模块现在符合 PEP-384 标准，不再有静态状态。

- bpo-38113: ast 模块已更新至 PEP-384 标准，所有静态内容已被移除。

- bpo-38076: struct 模块现在兼容 PEP-384。

- bpo-38075: random 模块现在兼容 PEP-384。

- bpo-38074: zlib 模块已兼容 PEP-384。

- bpo-38073: 使 pwd 扩展模块兼容 PEP-384。

- bpo-38072: grp 模块已兼容 PEP-384。

- bpo-38069: 使 _posixsubprocess 兼容 PEP-384。

- bpo-38071: 使 termios 扩展模块兼容 PEP-384。

- bpo-38005: 修复了 InterpreterID 和 ChannelID 的比较和创建。

- bpo-36946: 修复了处理切片时可能发生的有符号整数溢出。由 hongweipeng 提供补丁。

- bpo-37994: 修复了在多个站点中如果属性查找失败时静默任意错误的问题。只有 AttributeError 应该被静默。

- bpo-8425: 优化了当另一个集合远大于基础集合时的集合 difference_update 操作。（由 Evgeny Kapun 建议，Michele Orrù 贡献代码）。

- bpo-37966: `is_normalized()` 的实现对于未规范化的字符串已经大大加速，这是通过实现 Unicode 标准中的完整规范化快速检查算法完成的。

- bpo-37947: 正确调整了命名表达式符号表生成中的递归级别。由 Pablo Galindo 提供补丁。

- bpo-37812: `Object/longobject.c` 中使用的 `CHECK_SMALL_INT` 宏已被替换为在每个调用站点显式的 `return`。

- bpo-37751: 修复 `codecs.lookup()` 以与 `encodings.normalize_encoding()` 相同的方式标准化编码名称，除了 `codecs.lookup()` 还将名称转换为小写。

- bpo-37830: 修复了当相应的 `try` 块包含带有非常量值的 `return` 时，在 `finally` 块中编译 `break` 和 `continue` 的问题。

- bpo-20490: 通过Anthony Sottile的贡献，改进了循环 `from` 导入时部分初始化模块的导入错误消息。

- bpo-37840: 修复了 `bytearray` 的 `sq_item` 中负索引的处理。由Sergey Fedoseev提供补丁。

- bpo-37802: 略微提高了 `PyLong_FromUnsignedLong()`、`PyLong_FromUnsignedLongLong()` 和 `PyLong_FromSize_t()` 的性能。由Sergey Fedoseev提供补丁。

- bpo-37409: 确保在交互式会话和没有父包的脚本中，显式相对导入总是引发ImportError，而不是将当前模块视为包。由Ben Lewis提供补丁。

- bpo-32912: 回退了 bpo-32912：对于字符串和字节字面量中的无效转义序列，现在发出 `SyntaxWarning` 而不是 `DeprecationWarning`。

- bpo-37757: PEP 572: 如PEP所述，当赋值表达式与理解作用域的交互导致目标作用域不明确时，现在会引发 `SyntaxError`。

  最初由PEP提出的 `TargetScopeError` 子类已被移除，改为仅对不允许的情况引发常规语法错误。

- bpo-36279: 修复了 `os.wait3()` 中可能使用未初始化内存的问题。

- bpo-36311: 解码大于2GiB的字节对象更快，并且当多字节字符跨越块边界时不再失败。

- bpo-34880: 如果 `AssertionError` 异常被遮蔽，`assert` 语句现在可以正常工作。由Zackery Spytz提供补丁。

- bpo-37340: 移除了绑定方法对象（`free_list`）的对象缓存。由于 `LOAD_METHOD` 操作码和 `_PyObject_VectorcallMethod` C API 的存在，临时绑定方法对象的使用比以前少。

- bpo-37648: 修复了 `list.__contains__()`、`tuple.__contains__()` 及其他几处的小不一致性。集合的项现在始终位于 `==` 的左侧，而针位于右侧。

- bpo-37444: 更新了 `builtins.__import__()` 和 `importlib.__import__()` 之间的异常差异。

- bpo-37619: 当将包装描述符从一个类添加到另一个类时（例如，在 `int` 子类上设置 `__add__ = str.__add__`），调用操作符时会正确引发异常。

- bpo-37593: 在 `ast.parameters` 节点的构造函数中交换了 posonlyargs 和 args 参数的位置。

- bpo-37543: 为非 PGO 构建优化了 pymalloc。

- bpo-37537: 在 _Py_GetAllocatedBlocks() 内部计算分配的 pymalloc 块。这减慢了 _Py_GetAllocatedBlocks() 的速度，但为 _PyObject_Malloc() 和 _PyObject_Free() 带来了小幅加速。

- bpo-37467: 修复了 `sys.excepthook()` 和 `PyErr_Display()`，如果文件名是字节字符串。例如，对于文件名属性是字节字符串的 SyntaxError 异常。

- bpo-37433: 修复了 `SyntaxError` 指示器在多行字符串中打印过多空格的问题 - 由 Anthony Sottile 提供。

- bpo-37417: `bytearray.extend()` 现在正确处理了迭代过程中出现的错误。由 Brandt Bucher 提供补丁。

- bpo-37414: 未文档化的 `sys.callstats()` 函数已被移除。自 Python 3.7 起，它已被弃用，并总是返回 `None`。它需要一个特殊的构建选项 `CALL_PROFILE`，该选项已在 Python 3.7 中移除。

- bpo-37392: 移除 `sys.getcheckinterval()` 和 `sys.setcheckinterval()` 函数。这两个函数自 Python 3.2 起已被弃用。请改用 `sys.getswitchinterval()` 和 `sys.setswitchinterval()`。同时移除 `PyInterpreterState` 结构中的 `check_interval` 字段。

- bpo-37388: 在开发模式和调试构建中，现在会对字符串编码和解码操作的 encoding 和 errors 参数进行检查。例如：`open()`、`str.encode()` 和 `bytes.decode()`。

  默认情况下，为了获得最佳性能，errors 参数仅在第一次编码/解码错误时检查，encoding 参数有时会为空字符串忽略。

- bpo-37348: 优化了使用 UTF-8 和 ASCII 编解码器解码短 ASCII 字符串的性能。`b"foo".decode()` 大约快了 15%。由 Inada Naoki 提供补丁。

- bpo-24214: 改进了 UTF-8 和 UTF-16 增量解码器中对 surrogatepass 错误处理程序的支持。

- bpo-37330: `open()`、`io.open()`、`codecs.open()` 和 `fileinput.FileInput` 不再接受文件模式中的 `'U'` ("通用换行") 。此标志自 Python 3.3 起已被弃用。

- bpo-35224: 按照 PEP 572 的提议，反向评估字典推导式中 key: value 的求值顺序。即在 `{k: v for ...}` 中，`k` 将在 `v` 之前被评估。

- bpo-37316: 修复了 `mmap.mmap` 中的 `PySys_Audit()` 调用。

- bpo-37300: 移除了 classobject.c 中一个不必要的 Py_XINCREF。

- bpo-37269: 修复了窥孔优化器中的一个错误，该错误未正确处理带有二元运算符的常量条件。补丁由 Pablo Galindo 提供。

- bpo-20443: Python 现在获取命令行中指定的脚本文件名的绝对路径（例如：“python3 script.py”）：__main__ 模块的 __file__ 属性和 sys.path[0] 现在变为绝对路径，而非相对路径。

- bpo-37257: Python的小对象分配器（`obmalloc.c`）现在允许（不超过）一个空arena保持可用以便立即重用，而不将其返回给操作系统。这防止了在简单循环中可能每次迭代都创建和销毁一个新arena的颠簸现象。

- bpo-37231: 类型槽到特殊方法的派发（例如在执行 `x * y` 时调用 `__mul__`）已经变得更快。

- bpo-36974: 为内置函数和方法的所有调用约定实现了单独的vectorcall函数。这提高了调用的性能。

- bpo-37213: 在窥孔优化器中正确处理负的行偏移。由Pablo Galindo提供补丁。

- bpo-37219: 移除了空集差异的错误优化。

- bpo-15913: 实现了 `PyBuffer_SizeFromFormat()` 函数（之前有文档记录但未实现）：调用 `struct.calcsize()`。由Joannah Nanjekye提供补丁。

- bpo-36922: 槽函数优化了任何带有 `Py_TPFLAGS_METHOD_DESCRIPTOR` 的可调用对象，而不仅仅是 `function` 的实例。

- bpo-36974: 槽 `tp_vectorcall_offset` 被无条件继承以支持当基类使用vectorcall时的``super().__call__()``。

- bpo-37160: `threading.get_native_id()` 现在也支持NetBSD。

- bpo-37077: 为AIX添加了 `threading.get_native_id()` 支持。由M. Felt提供补丁

- bpo-36781: `sum()` 已经为布尔值进行了优化。

- bpo-34556: 向venv模块添加了 `--upgrade-deps`。由Cooper Ry Lees提供补丁

- bpo-20523: `pdb.Pdb` 支持Windows 7中的~/.pdbrc。由Tim Hopper和Dan Lidral-Porter提供补丁。

- bpo-35551: 更新了编码：- 移除了“tis260”编码，这是一个不存在的“tactis”编解码器的别名。- 添加了“mac_centeuro”作为mac_latin2编码的别名。

- bpo-19072: `classmethod` 装饰器现在可以包装其他描述符，如property对象。根据Graham Dumpleton编写的补丁改编。

- bpo-27575: 通过直接使用集合交集逻辑提高字典视图交集的速度。由David Su提供补丁。

- bpo-30773: 禁止并行运行aclose() / asend() / athrow()。修复ag_running以反映AG的实际运行状态。

### 库

- bpo-36589: 现在，`curses.update_lines_cols()` 函数在成功时返回 `None` 而不是``1``。

- bpo-38807: 更新 `TypeError` 消息，为 `os.path.join()` 包括 `os.PathLike` 对象作为可接受的输入类型。

- bpo-38724: 为 `subprocess.Popen` 对象添加repr。由Andrey Doroschenko提供补丁。

- bpo-38786: pydoc现在可以识别并解析HTTPS URL。由python273提供补丁。

- bpo-38785: 如果从 `asyncio.Future` 派生的对象的构造函数中没有调用父 `__init__`，则防止asyncio崩溃。

- bpo-38723: `pdb` 现在使用 `io.open_code()` 来触发审计事件。

- bpo-27805: 允许以追加模式打开管道和其他不可寻址的文件，使用 `open()`。

- bpo-38438: 简化 `argparse` 对于 `nargs="*"` 的使用信息。

- bpo-38761: WeakSet现在被注册为collections.abc.MutableSet。

- bpo-38716: logging: 将RotatingHandler的namer和rotator更改为类级别属性。这会阻止__init__在子类用同名方法定义它们的情况下将它们设置为None。

- bpo-38713: Add `os.P_PIDFD` constant, which may be passed to `os.waitid()` to wait on a Linux process file descriptor.

- bpo-38692: 添加 `asyncio.PidfdChildWatcher`，一个特定于Linux的子监视器实现，它轮询进程文件描述符。

- bpo-38692: 将Linux的 `pidfd_open` 系统调用暴露为 `os.pidfd_open()`。

- bpo-38602: Added constants `F_OFD_GETLK`, `F_OFD_SETLK` and `F_OFD_SETLKW` to the `fcntl` module. Patch by Dong-hee Na.

- bpo-38334: 修复了在加密的 `zipfile.ZipExtFile` 上向后查找的问题。

- bpo-38312: 添加 `curses.get_escdelay()`、`curses.set_escdelay()`、`curses.get_tabsize()` 和 `curses.set_tabsize()` 函数 - 由 Anthony Sottile 提供。

- bpo-38586: 现在 `fileConfig()` 正确设置了加载的处理程序的 .name。

- bpo-38565: 为 functools.lru_cache() 添加新的 cache_parameters() 方法，以更好地支持 pickle。

- bpo-34679: asynci.ProactorEventLoop.close() 现在只在主线程中调用 signal.set_wakeup_fd()。

- bpo-31202: `pathlib.WindowsPath.glob()` 的结果现在匹配字面部分的大小写。

- bpo-36321: 移除拼写错误的属性。3.8 的变更日志指出这将在 3.9 中移除。

- bpo-38521: 修复了 statistics.NormalDist() 中的错误等式比较。

- bpo-38493: Added `CLD_KILLED` and `CLD_STOPPED` for `si_code`. Patch by Dong-hee Na.

- bpo-38478: 修复了 `inspect.signature.bind()` 中的一个 bug，该 bug 导致处理与位置唯一参数同名的关键字参数时失败。由 Pablo Galindo 提供补丁。

- bpo-33604: Fixed `hmac.new` and `hmac.HMAC` to raise TypeError instead of ValueError when the digestmod parameter, now required in 3.8, is omitted. Also clarified the hmac module documentation and docstrings.

- bpo-38378: `os.sendfile()` 的参数 out 和 in 被重命名为 out_fd 和 in_fd。

- bpo-38417: 在 POSIX 系统上为子进程添加了设置 umask 的支持到 subprocess 模块。

- bpo-38449: 撤销 PR 15522，由于对文件名作为 url 的不正确处理，导致 `mimetypes.guess_type()` 中的回归。

- bpo-38431: 修复 `dataclasses.InitVar` 的 `__repr__` 方法以支持类型对象，补丁由 Samuel Colvin 提供。

- bpo-38109: Add missing `stat.S_IFDOOR`, `stat.S_IFPORT`, `stat.S_IFWHT`, `stat.S_ISDOOR()`, `stat.S_ISPORT()`, and `stat.S_ISWHT()` values to the Python implementation of `stat`.

- bpo-38422: 澄清 pathlib 后缀(es) 的文档字符串。

- bpo-38405: 现在 `typing.NamedTuple` 的嵌套子类可以被 pickle。

- bpo-38332: Prevent `KeyError` thrown by `_encoded_words.decode()` when given an encoded-word with invalid content-type encoding from propagating all the way to `email.message.get()`.

- bpo-38371: Deprecated the `split()` method in `_tkinter.TkappType` in favour of the `splitlist()` method which has more consistent and predicable behavior.

- bpo-38341: 将 `smtplib.SMTPNotSupportedError` 添加到 `smtplib` 的导出名称中。

- bpo-38319: 在 socket 和 shutil 模块中使用的 sendfile() 在 32 位架构上对于 >= 2GiB 的文件会引发 OverflowError。（由 Giampaolo Rodola 提供补丁）

- bpo-38242: 回滚新的 asyncio Streams API

- bpo-13153: 现在使用操作系统原生编码在 Python 字符串和 Tcl 对象之间进行转换。这允许显示、复制和粘贴到剪贴板的 emoji 和其他非 BMP 字符。从现在开始，从 Tcl 到 Python 以及反向的字符串转换永远不会失败（除了 MemoryError）。

- bpo-38019: 正确处理已关闭的 asyncio unix 管道的暂停/恢复读取。

- bpo-38163: 子 mock 现在会检测它们的类型是同步还是异步的，异步子 mock 将是 AsyncMocks，同步子 mock 将是 MagicMock 或 Mock（取决于它们的父类型）。

- bpo-38161: 从 AsyncMock 中移除 _AwaitEvent。

- bpo-38216: Allow the rare code that wants to send invalid http requests from the `http.client` library a way to do so. The fixes for bpo-30458 led to breakage for some projects that were relying on this ability to test their own behavior in the face of bad requests.

- bpo-28286: 弃用隐式打开 `GzipFile` 进行写入的操作。 写入时始终指定 mode 参数。

- bpo-38108: 现在，AsyncMock 上的任何同步魔术方法都返回一个 MagicMock。MagicMock 上的任何异步魔术方法都返回一个 AsyncMock。

- bpo-38265: Update the length parameter of `os.pread()` to accept `Py_ssize_t` instead of `int`.

- bpo-38112: `compileall` 具有更高的默认递归限制和新的命令行参数，用于路径操作、符号链接处理和多级优化。

- bpo-38248: asyncio: 修复了立即任务取消不一致的问题

- bpo-38237: 内置 pow 函数的参数更具描述性。现在也可以通过关键字传递这些参数。

- bpo-34002: 通过将 while-pop 改为 for 循环，使用 isdisjoint 而不是集合交集，提高了 email 包中部分的效率。

- bpo-38191: `NamedTuple` 和 `TypedDict` 类型的构造函数现在接受任意关键字参数名称，包括 "cls"、"self"、"typename"、"_typename"、"fields" 和 "_fields"。

- bpo-38155: 向 `datetime` 添加 `__all__`。由 Tahia Khan 提供补丁。

- bpo-38185: 修复了 `sqlite3.Row` 索引中不区分大小写的字符串比较。

- bpo-38136: 将 AsyncMock 的调用计数和等待计数更改为两个不同的计数器。现在等待计数仅在协程被等待时计数，而不是在被调用时，反之亦然。更新了相关文档。

- bpo-37828: 修复了 `unittest.mock.Mock.assert_called()` 异常中的默认模拟名称。补丁由 Abraham Toriz Cruz 提供。

- bpo-38175: 修复了 `sqlite3.Row` 对象比较中的内存泄漏。

- bpo-33936: _hashlib 不再调用 OpenSSL 1.1.0+ 中过时的 OpenSSL 初始化函数。

- bpo-34706: 在 inspect.Signature.from_callable 中保留子类化。

- bpo-38153: OpenSSL的哈希算法名称现在被规范化以遵循Python的命名约定。例如，OpenSSL使用sha3-512而不是sha3_512，或使用blake2b512而不是blake2b。

- bpo-38115: 修复了dis.findlinestarts()中的一个错误，该错误会导致返回无效的字节码偏移量。记录了代码对象的co_lnotab可能包含无效字节码偏移量的情况。

- bpo-38148: 向 `asyncio` 传输类添加插槽，可以减少内存使用。

- bpo-38142: _hashlib OpenSSL包装器扩展模块现在符合PEP-384标准。

- bpo-9216: hashlib构造函数现在支持usedforsecurity标志，以指示哈希算法不用于安全上下文。

- bpo-36991: 修复了在某些不支持的输入错误情况下，ZipFile.extract()可能错误地抛出AttributeError异常的问题。

- bpo-38134: 移除了过时的PBKDF2_HMAC_fast副本。所有支持的OpenSSL版本都包含快速实现。

- bpo-38132: OpenSSL的hashlib包装器使用了更简单的实现。几个宏和无用的缓存已被移除。哈希名称现在来自OpenSSL的EVP。算法名称保持不变，除了现在总是小写。

- bpo-38008: 修复了协议中的父类检查，以正确识别提供内置协议的模块，而不是假设它们都来自 `collections.abc` 模块。

- bpo-34037: 对于 `asyncio`，添加了一个新的协程 `loop.shutdown_default_executor()`。这个新协程提供了一个API来安排执行器的关闭，等待线程池关闭完成。此外，`asyncio.run()` 已被更新以利用这个新协程。补丁由Kyle Stanley提供。

- bpo-37405: 通过返回1元组而不是字符串，修复了非CAN_ISOTP AF_CAN地址族套接字的socket.getsockname()的回归错误。

- bpo-38121: 更新了importlib.metadata中函数的参数名称，与importlib_metadata 0.22版本的更改相匹配。

- bpo-38110: os.closewalk() 实现现在在可用平台上使用 libc fdwalk() API。

- bpo-38093: 修复 AsyncMock，使其在使用 AsyncContextManagers 或 AsyncIterators 时不会崩溃。

- bpo-37488: 向 `datetime.utctimetuple()`, `datetime.utcnow()` 和 `datetime.utcfromtimestamp()` 添加警告。

- bpo-35640: 允许将 path-like object 作为 `directory` 参数传递给 `http.server.SimpleHTTPRequestHandler` 类。由 Géry Ogam 提供的补丁。

- bpo-38086: 使用来自 importlib_metadata 0.21 的更改更新 importlib.metadata。

- bpo-37251: Remove `__code__` check in AsyncMock that incorrectly evaluated function specs as async objects but failed to evaluate classes with `__await__` but no `__code__` attribute defined as async objects.

- bpo-38037: 修复 `signal` 模块中的引用计数器。

- bpo-38066: 隐藏 asyncio.Stream 的内部方法：feed_eof(), feed_data(), set_exception() 和 set_transport()。

- bpo-38059: inspect.py 现在使用 sys.exit() 而不是 exit()。

- bpo-38049: 为 `ast` 模块添加了命令行界面。

- bpo-37953: 在 `typing` 中，改进了 `ForwardReferences` 的 `__hash__` 和 `__eq__` 方法。

- bpo-38026: 修复了 `inspect.getattr_static()` 在使用 `isinstance` 时应避免动态查找的问题。

- bpo-35923: Update `importlib.machinery.BuiltinImporter` to use `loader._ORIGIN` instead of a hardcoded value. Patch by Dong-hee Na.

- bpo-38010: 在 `importlib.metadata` 中与 `importlib_metadata` 0.20 同步，澄清 `files()` 的行为并修复 `requires()` 在 `dist-info` 包上只返回一个要求的问题。

- bpo-38006: weakref.WeakValueDictionary 定义了一个局部 remove() 函数，用作弱引用的回调。这个函数是通过闭包创建的。修改实现以避免闭包。

- bpo-37995: 向 `ast.dump()` 添加了 indent 选项，允许其产生多行缩进的输出。

- bpo-34410: 修复了重新进入 `tee()` 迭代器时的崩溃问题。现在在这种情况下会抛出 RuntimeError。

- bpo-37140: 修复了 Python 3.8 的一个 ctypes 回归问题。当 ctypes.Structure 通过拷贝传递给函数时，ctypes 内部创建了一个临时对象，这个临时对象的副作用是调用了结构体的终结器（__del__）两次。Python 语义要求终结器只被调用一次。修复 ctypes 内部不再两次调用终结器。

- bpo-37587: 当 JSON 字符串中有许多反斜杠转义字符时，`_json.scanstring` 现在快了多达 3 倍。

- bpo-37834: 防止在没有 fd 系统调用支持的非 Windows 系统（如旧版本的 macOS）上构建时 shutil.rmtree 抛出异常。

- bpo-10978: 信号量和 BoundedSemaphores 现在可以一次释放多个等待的线程。

- bpo-37972: Subscripts to the `unittest.mock.call` objects now receive the same chaining mechanism as any other custom attributes, so that the following usage no longer raises a `TypeError`:

  call().foo().__getitem__('bar')

  由 blhsing 提供补丁

- bpo-37965: 修复由 distutils.ccompiler.CCompiler.has_function 引起的 C 编译器警告。

- bpo-37964: 向 `fcntl` 添加 `F_GETPATH` 命令。

- bpo-37960: 缓冲流和文本流的 `repr()` 现在在获取 "name" 和 "mode" 属性值时只静默预期的异常。

- bpo-37961: 向 tracemalloc 模块收集的跟踪添加一个 `total_nframe` 字段。这个字段表示在被截断之前的原始帧数。

- bpo-37951: subprocess模块的大部分功能现在在子解释器中再次可用。仅在子解释器中限制了*preexec_fn*。

- bpo-36205: 修复time.process_time()的rusage实现，正确报告系统和用户CPU时间的总和。

- bpo-37950: 修复 `ast.dump()` 在调用未完全初始化的节点时的行为。

- bpo-34679: 恢复从非主线程实例化Windows IOCP事件循环的能力。

- bpo-36917: Add default implementation of the `ast.NodeVisitor.visit_Constant()` method which emits a deprecation warning and calls corresponding methody `visit_Num()`, `visit_Str()`, etc.

- bpo-37798: Update test_statistics.py to verify that the statistics module works well for both C and Python implementations. Patch by Dong-hee Na

- bpo-26589: 向http模块添加了一个新的状态码：451 UNAVAILABLE_FOR_LEGAL_REASONS。

- bpo-37915: 修复在比较 `datetime.timezone` 和 `datetime.tzinfo` 对象实例时出现的段错误。由Pablo Galindo提供补丁。

- bpo-32554: 弃用在random.seed()中对任意类型调用hash的行为。

- bpo-9938: 为 `ArgumentParser` 添加可选关键字参数 `exit_on_error`。

- bpo-37851: `faulthandler` 模块不再在Python启动时分配其替代堆栈。现在堆栈仅在首次使用faulthandler时分配。

- bpo-32793: 修复当调用 `smtplib.SMTP.connect()` 时出现的重复调试消息。

- bpo-37885: venv: 在deactivate时不生成未设置变量警告。

- bpo-37868: 修复dataclasses.is_dataclass，当给定一个在__getattr__中从不引发AttributeError的实例时。也就是说，一个对象即使不是dataclass，也为__dataclass_fields__返回某些内容。

- bpo-37811: 修复 `socket` 模块的 `socket.connect(address)` 函数在系统调用中断时无法建立连接的问题。此问题在所有 `poll(2)` 系统调用仅接受非负整数和-1作为超时值的操作系统上观察到。

- bpo-37863: Tim Peters 提出的对 Fraction.__hash__ 的优化建议。

- bpo-21131: 修复 `faulthandler.register(chain=True)` 堆栈。faulthandler 现在分配一个专用的 `SIGSTKSZ*2` 字节堆栈，而不是仅 `SIGSTKSZ` 字节。在某些平台上，调用 faulthandler 信号处理程序中的先前信号处理程序使用的堆栈内存超过 `SIGSTKSZ` 字节。

- bpo-37798: Add C fastpath for statistics.NormalDist.inv_cdf() Patch by Dong-hee Na

- bpo-37804: Remove the deprecated method `threading.Thread.isAlive()`. Patch by Dong-hee Na.

- bpo-37819: 添加 Fraction.as_integer_ratio() 以匹配 bool、int、float 和 decimal 中的相应方法。

- bpo-14465: 为美化打印 XML 树添加 xml.etree.ElementTree.indent() 函数。由 Stefan Behnel 贡献。

- bpo-37810: 修复 `difflib` 在处理制表符时 diff 输出中的 `?` 提示。由 Anthony Sottile 提供补丁。

- bpo-37772: 在 `zipfile.Path` 中，添加隐式目录时，确保添加祖先目录并排除重复项。

- bpo-18578: Renamed and documented `test.bytecode_helper` as `test.support.bytecode_helper`. Patch by Joannah Nanjekye.

- bpo-37785: 修复 `argparse` 中的 xgettext 警告。

- bpo-34488: `io.BytesIO` 的 `writelines()` 方法在传递许多小行时现在稍微快一些。由 Sergey Fedoseev 提供补丁。

- bpo-37449: `ensurepip` now uses `importlib.resources.read_binary()` to read data instead of `pkgutil.get_data()`. Patch by Joannah Nanjekye.

- bpo-28292: 将calendar.py中的辅助函数标记为私有。这遵循了PEP 8的指导原则，保持了模块中的风格约定，并解决了一个已知的用户困惑案例。

- bpo-18049: 在Python/thread_pthread.h中为AIX添加THREAD_STACK_SIZE的定义。默认的线程堆栈大小导致了在默认递归限制下的崩溃。由M Felt提供补丁。

- bpo-37742: logging.getLogger() API现在在传递名称'root'时返回根日志记录器，而之前它返回一个名为'root'的非根日志记录器。这可能会影响那些明确需要一个名为'root'的非根日志记录器，或者在某些名为'root.py'的顶级模块中使用logging.getLogger(__name__)实例化日志记录器的用户代码。

- bpo-37738: 修复curses `addch(str, color_pair)` 的实现：将颜色对传递给``setcchar()``，而不是总是传递0作为颜色对。

- bpo-37723: 修复了在解析包含巨大字符集的正则表达式时的性能回归。补丁由Yann Vaginay提供。

- bpo-35943: 函数 `PyImport_GetModule()` 现在确保它返回的任何模块都已完全初始化。补丁由Joannah Nanjekye提供。

- bpo-32178: 修复了 `email` 包中尝试解析以 `:` 开头的无效地址字段时的IndexError。

- bpo-37268: `parser` 模块已被弃用，并将在Python的未来版本中移除。

- bpo-11953: 在 `socket` 中完成WSA*错误代码。

- bpo-37685: 修复了 `datetime.timedelta` 和 `datetime.timezone` 的比较。

- bpo-37697: 将 `importlib.metadata` 与`importlib_metadata 0.19 <https://gitlab.com/python-devs/importlib_metadata/-/milestones/20>`_同步，改进了对EGG-INFO文件的处理，并修复了当入口点名称包含冒号时的崩溃问题。

- bpo-37695: 更正 `curses.unget_wch()` 的错误信息。由Anthony Sottile提供补丁。

- bpo-37689: 在 `PurePath` 中添加 `is_relative_to()` 方法，以确定一个路径是否相对于另一个路径。

- bpo-29553: 修复了 `argparse.ArgumentParser.format_usage()` 对于互斥组的情况。补丁由 Andrew Nester 提供。

- bpo-37691: 让 math.dist() 接受序列（或可迭代对象）而不仅仅是元组作为坐标。

- bpo-37685: 修复了一些类中的 `__eq__`, `__lt__` 等实现。对于不支持的其他操作数类型，现在返回 `NotImplemented`。这允许其他操作数发挥作用（例如与 `ANY` 的相等比较将返回 `True`）。

- bpo-37354: 将 Activate.ps1 Powershell 脚本设为静态，以允许对其进行签名。

- bpo-37664: 更新了与 ensurepip 捆绑的 wheels（pip 19.2.3 和 setuptools 41.2.0）。

- bpo-37663: 通过始终使用 __VENV_PROMPT__ 来使 venv shell 激活脚本保持一致。

- bpo-37642: 允许 `datetime.timezone` 的纯 Python 实现在接近最小和最大边界时表示亚分钟偏移，特别是在 (23:59, 24:00) 和 (-23:59, 24:00) 的范围内。补丁由 Ngalim Siregar 提供。

- bpo-36161: 在 `posix` 中，使用 `ttyname_r` 代替 `ttyname` 以实现线程安全。

- bpo-36324: 将 statistics.NormalDist() 的内部属性设为私有。

- bpo-37555: Fix `NonCallableMock._call_matcher` returning tuple instead of `_Call` object when `self._spec_signature` exists. Patch by Elizabeth Uselton

- bpo-29446: Make `from tkinter import *` import only the expected objects.

- bpo-16970: 当传递无效值给 nargs 时添加一个值错误。由 Robert Leenders 提供补丁。

- bpo-34443: `enum` 的异常现在在异常消息中使用枚举类的 `__qualname__` 而不是 `__name__`。

- bpo-37491: 修复在解析具有意外结束的裸引用字符串值的电子邮件头时出现的 `IndexError`。由 Abhilash Raj 提供补丁。

- bpo-37587: 使 json.loads 对长字符串的处理更快。（由 Marco Paolini 提供补丁）

- bpo-18378: 将 "UTF-8" 识别为 locale._parse_localename 中 LC_CTYPE 的有效值。

- bpo-37579: 在Python的 `__eq__` 实现中，当比较的对象不是同一类型时，对于 `timedelta` 和 `time` 返回 `NotImplemented`，以匹配C实现。由Karthikeyan Singaravelan提供补丁。

- bpo-21478: 当使用 `unittest.mock.attach_mock()` 将自动模拟对象附加到模拟时，记录对父级的调用。由Karthikeyan Singaravelan提供补丁。

- bpo-37531: "python3 -m test -jN --timeout=TIMEOUT" 现在会在工作进程运行超过 TIMEOUT 秒时终止该进程。

- bpo-37482: 修复了在发件人或收件人地址字段中同时包含编码字和特殊字符时显示名称的序列化问题。

- bpo-36993: 改进了对带有坏zip64额外数据的损坏zip文件的错误报告。补丁由Daniel Hillier提供。

- bpo-37502: 当buffers参数设置为None时，pickle.loads() 不再抛出TypeError。

- bpo-37520: 修正了当路径对象标识子目录时zipfile.Path.parent的行为。

- bpo-18374: 修复了在某些情况下，嵌套的 `ast.BinOp` 实例的 `.col_offset` 属性值过大的问题。

- bpo-37424: Fixes a possible hang when using a timeout on `subprocess.run()` while capturing output. If the child process spawned its own children or otherwise connected its stdout or stderr handles with another process, we could hang after the timeout was reached and our child was killed when attempting to read final output from the pipes.

- bpo-37421: 修复 `multiprocessing.util.get_temp_dir()` 的终结器：同时清除当前进程的'tempdir'配置，以便下次调用 `get_temp_dir()` 时将创建新的临时目录，而不是重用已删除的临时目录。

- bpo-37481: Python 3.8中已弃用distutils的 `bdist_wininst` 命令，改用 `bdist_wheel` (wheel包) 。

- bpo-37479: When `Enum.__str__` is overridden in a derived class, the override will be used by `Enum.__format__` regardless of whether mixin classes are present.

- bpo-37440: http.client 现在为默认上下文或如果向 HTTPSConnection 传递了 cert_file，则启用 TLS 1.3 握手后认证。

- bpo-37437: 更新了供应商化的 expat 版本到 2.2.7。

- bpo-37428: SSLContext.post_handshake_auth = True 不再为客户端连接设置 SSL_VERIFY_POST_HANDSHAKE 验证标志。虽然该选项被记录为对客户端忽略，但当该标志设置时，OpenSSL 隐式启用了证书链验证。

- bpo-37420: `os.sched_setaffinity()` 现在正确处理了在其 `mask` 参数迭代过程中出现的错误。由 Brandt Bucher 提供补丁。

- bpo-37412: `os.getcwdb()` 函数现在在 Windows 上使用 UTF-8 编码，而不是 ANSI 代码页：参见 PEP 529 的理由。该函数在 Windows 上不再被弃用。

- bpo-37406: 如果操作参数类型不是 str，sqlite3 模块现在会抛出 TypeError，而不是 ValueError：execute()、executemany() 和调用连接时。

- bpo-29412: 修复了在解析意外结束的头值时引发的 IndexError。由 Abhilash Raj 提供补丁。

- bpo-36546: statistics.quantiles() 的 dist 参数现在仅为位置参数。当前名称没有反映该参数可以是数据集或分布。将参数标记为位置参数避免了混淆，并使得以后可以更改名称。

- bpo-37394: 修复了一个导致 `queue` 模块在加速器模块不可用时失败的 bug。由 Pablo Galindo 提供补丁。

- bpo-37376: `pprint` 现在支持 `types.SimpleNamespace`。由 Carl Bordum Hansen 提供补丁。

- bpo-26967: 一个带有 `allow_abbrev=False` 的 `ArgumentParser` 不再禁用短标志的分组，例如 `-vv`，但仅禁用长标志的缩写，如文档所述。由 Zac Hatfield-Dodds 提交的补丁。

- bpo-37212: `unittest.mock.call()` 现在保留关键字参数在 repr 输出中的顺序。由 Karthikeyan Singaravelan 提交的补丁。

- bpo-37372: 修复从 Python 2 中解封秒数>=24 的 datetime.time 对象时的错误。由 Justin Blanchard 提交的补丁。

- bpo-37345: Add formal support for UDPLITE sockets. Support was present before, but it is now easier to detect support with `hasattr(socket, 'IPPROTO_UDPLITE')` and there are constants defined for each of the values needed: `socket.IPPROTO_UDPLITE`, `UDPLITE_SEND_CSCOV`, and `UDPLITE_RECV_CSCOV`. Patch by Gabe Appleton.

- bpo-37358: 通过使用 vectorcall 优化了 `functools.partial`。

- bpo-37347: 如果 `sqlite3.Connection.create_aggregate()`、`sqlite3.Connection.create_function()`、`sqlite3.Connection.set_authorizer()`、`sqlite3.Connection.set_progress_handler()` 和 `sqlite3.Connection.set_trace_callback()` 方法被用相同的对象但不是同一个对象调用两次，会导致段错误。现在回调的存储更加谨慎。由 Aleksandr Balezin 提交的补丁。

- bpo-37163: `dataclasses.replace()` 的 obj 参数现在是仅位置参数。

- bpo-37085: 在 socket 模块中添加了可选的 Linux SocketCAN 广播管理器常量，用作配置 BCM 行为的标志。由 Karl Ding 提交的补丁。

- bpo-37328: `HTMLParser.unescape` 已被移除。它自 Python 3.4 起未记录且被弃用。

- bpo-37305: 将 .webmanifest -> application/manifest+json 添加到识别的文件类型和内容类型头列表中。

- bpo-37320: `aifc.openfp()` 到 `aifc.open()` 的别名、`sunau.openfp()` 到 `sunau.open()` 的别名、以及 `wave.openfp()` 到 `wave.open()` 的别名已被移除。它们自 Python 3.7 起被弃用。

- bpo-37315: 弃用在 `math.factorial()` 中接受整数值的浮点数（如 `5.0`）。

- bpo-37312: `_dummy_thread` 和 `dummy_threading` 模块已被移除。这些模块自 Python 3.7 起已被弃用，因为 Python 3.7 需要线程支持。

- bpo-33972: 对于设置为 `multipart/*` 但只有单一部分的电子邮件，不再引发 AttributeError。

- bpo-37280: 在 sendfile 后备模式中，使用线程池从文件读取。

- bpo-37279: 修复在 sendfile 后备模式中发送额外数据时的 asyncio sendfile 支持。

- bpo-19865: `ctypes.create_unicode_buffer()` now also supports non-BMP characters on platforms with 16-bit `wchar_t` (for example, Windows and AIX).

- bpo-37266: 在子解释器中，现在尝试生成守护线程会引发异常。子解释器从未支持守护线程。之前，如果守护线程仍在运行，子解释器终止时会因 Python 致命错误而崩溃。

- bpo-37210: Allow pure Python implementation of `pickle` to work even when the C `_pickle` module is unavailable.

- bpo-21872: 修复 `lzma` 模块解压数据不完整的问题。当解压 FORMAT_ALONE 格式的文件且没有结束标记时，有时最后的一些字节无法输出。由马林提供补丁。

- bpo-35922: 修复 `RobotFileParser.crawl_delay()` 和 `RobotFileParser.request_rate()`，当 robots.txt 文件中没有定义相关规则时返回 `None` 而不是引发 `AttributeError`。由 Rémi Lapeyre 提供补丁。

- bpo-35766: 将 feature_version 的格式更改为 (major, minor) 元组。

- bpo-36607: Eliminate `RuntimeError` raised by `asyncio.all_tasks()` if internal tasks weak set is changed by another thread during iteration.

- bpo-18748: `_pyio.IOBase` destructor now does nothing if getting the `closed` attribute fails to better mimic `_io.IOBase` finalizer.

- bpo-36402: 修复 Python 关闭时等待线程的竞争条件。等待所有非守护线程的 Python 线程状态被删除（加入所有非守护线程），而不仅仅是等待非守护 Python 线程完成。

- bpo-37206: 无法表示为 Python 对象的默认值不再在函数签名中错误地表示为 `None`。

- bpo-37111: 向 `logging.basicConfig` 添加了 `encoding` 和 `errors` 关键字参数。

- bpo-12144: 确保在 `CookieJar.make_cookies()` 中处理带有 `expires` 属性的 cookies。

- bpo-34886: Fix an unintended ValueError from `subprocess.run()` when checking for conflicting `input` and `stdin` or `capture_output` and `stdout` or `stderr` args when they were explicitly provided but with `None` values within a passed in `**kwargs` dict rather than as passed directly by name. Patch contributed by Rémi Lapeyre.

- bpo-37173: `inspect.getfile()` 的异常消息现在正确地报告传递的类而非 builtins 模块。

- bpo-37178: 给 math.perm() 添加了一个单参数形式，其含义与 math.factorial() 相同。

- bpo-37178: 对于 math.perm(n, k)，让 k 默认为 n，给出与阶乘相同的结果。

- bpo-37165: 将 _collections._count_elements 转换为使用 Argument Clinic。

- bpo-34767: 不在 `asyncio.Lock` 中总是创建一个 `collections.deque`。

- bpo-37158: 通过从函数切换到生成器来加速 statistics.fmean()。

- bpo-34282: 移除 `Enum._convert` 方法，已在 3.8 版本中弃用。

- bpo-37150: `argparse._ActionsContainer.add_argument` now throws error, if someone accidentally pass FileType class object instead of instance of FileType as `type` argument

- bpo-28724: socket 模块现在有 `socket.send_fds()` 和 `socket.recv.fds()` 方法。由 Joannah Nanjekye、Shinya Okano 和 Victor Stinner 贡献。

- bpo-35621: 支持在UNIX上线程中运行事件循环时执行asyncio子进程。

- bpo-36520: 现在，带有UTF-8字符的长电子邮件头在折叠时能够正确编码。由Jeffrey Kintscher提供补丁。

- bpo-30835: 修复了电子邮件解析中的一个错误，其中多部分消息中内容传输编码含有无效字节可能导致AttributeError。由Andrew Donnellan提供补丁。

- bpo-31163: pathlib.Path实例的rename和replace方法现在返回新的Path实例。

- bpo-25068: `urllib.request.ProxyHandler` 现在将传递的字典的键转换为小写。

- bpo-26185: 修复空 `ZipInfo` 对象上的 `repr()`。由Mickaël Schoentgen提供补丁。

- bpo-21315: 即使缺少空白，也会解析包含RFC2047编码词的电子邮件头，并记录一个缺陷。现在，编码词后缺少尾随空白也会被记录为缺陷。

- bpo-31904: 将test_datetime移植到VxWorks：在VxWorks上跳过zoneinfo测试

- bpo-35805: 添加Message-ID头的解析器并将其添加到默认HeaderRegistry中。这应该可以防止使用RFC 2048编码词折叠Message-ID。

- bpo-36871: 确保在断言模拟对象对方法调用时使用方法签名而不是类的构造函数签名。由Karthikeyan Singaravelan提供补丁。

- bpo-35070: 当用户属于NGROUPS_MAX补充组时，posix.getgrouplist()现在可以正常工作。补丁由Jeffrey Kintscher提供。

- bpo-31783: 修复ThreadPoolExecutor中在解释器关闭期间创建工作线程时的竞争条件。

- bpo-36582: 修复 `UserString.encode()``以正确返回 ``bytes` 而不是 `UserString` 实例。

- bpo-32424: 弃用xml.etree.ElementTree.Element.copy()，推荐使用copy.copy()。

  由Gordon P. Hemsley提供补丁

- 问题`36564`: 修复了当邮件策略的max_line_length不足以包含所需标记和消息中的任何值时触发的电子邮件头折叠逻辑中的无限循环。由Paul Ganssle提供补丁。

- 问题`36543`: 移除了Element.getchildren()、Element.getiterator()和ElementTree.getiterator()方法以及xml.etree.cElementTree模块。

- 问题`36409`: 移除了在Python 3.4中已弃用的旧plistlib API。

- 问题`36302`: distutils对源文件列表进行排序，使得默认情况下Extension .so文件的构建更具可重复性。

- 问题`36250`: 在非主线程中，忽略来自`signal`与`interaction`的`ValueError`。

- 问题`36046`: 向subprocess.Popen构造函数添加了`user`、`group`和`extra_groups`参数。由Patrick McLean提供补丁。

- 问题`32627`: 修复了当包含冲突的`_uuid`头时导致的编译错误。

- 问题`35800`: 弃用`smtpd.MailmanProxy`，为将来移除做准备。

- 问题`35168`: `shlex.shlex.punctuation_chars` 现在是一个只读属性。

- 问题`8538`: 向argparse添加了对布尔动作的支持，如`--foo`和`--no-foo`。由Rémi Lapeyre提供补丁。

- bpo-20504: Fixes a bug in `cgi` module when a multipart/form-data request has no `Content-Length` header.

- 问题`25988`: `collections.abc` 中的抽象基类不再暴露在常规的 `collections` 模块中。

- 问题`11122`: Distutils不会仅在指定的路径中检查rpmbuild。

- 问题`34775`: 当传递的不是str或PurePath的实例时，PurePath的除法处理现在返回NotImplemented而不是引发TypeError。由Roger Aiudi提供补丁。

- 问题`34749`: `binascii.a2b_base64()` 现在快了2倍。由Sergey Fedoseev提供补丁。

- 问题`34519`: 为HP Roman 8添加了额外的别名。由Michael Osipov提供补丁。

- bpo-28009: 修复在MAC地址分隔符为'.'的平台以及MAC地址值中省略前导0的MAC地址格式情况下uuid.getnode()的问题。目前，AIX是唯一已知具有这些设置的平台。由Michael Felt提供补丁。

- bpo-30618: 添加 `readlink()`。由Girts Folkmanis提供补丁。

- bpo-32498: Made `urllib.parse.unquote()` accept bytes in addition to strings. Patch by Stein Karlsen.

- bpo-33348: lib2to3 now recognizes expressions after `*` and `**` like in `f(*[] or [])`.

- bpo-32689: 更新 `shutil.move()` 函数以允许使用Path对象作为源参数。由Emily Morehouse和Maxwell "5.13b" McKinnon提供补丁。

- bpo-32820: Added __format__ to IPv4 and IPv6 classes. Always outputs a fully zero- padded string. Supports b/x/n modifiers (bin/hex/native format). Native format for IPv4 is bin, native format for IPv6 is hex. Also supports '#' and '_' modifiers.

- bpo-27657: 修复带有数字路径的urllib.parse.urlparse()。像"path:80"这样的字符串不再被解析为路径，而是被解析为方案（"path"）和路径（"80"）。

- bpo-4963: 修复了与mimetypes扩展映射和模块重新初始化相关的非确定性行为。

### 文档

- bpo-21767: 在functools.singledispatch中明确提及abc支持。

- bpo-38816: 提供了关于 `fork()` 与CPython运行时之间交互的更多细节，仅关注C-API。这包括关于在何处应该和不应该调用 `fork()` 的警告。

- bpo-38351: 将 `email` 示例从%-格式化更新为f-strings。

- bpo-38778: 记录了如果在子解释器中调用 `os.fork()` 会引发 `RuntimeError` 的事实。

- bpo-38592: 在Python文档网站的语言切换器中添加巴西葡萄牙语。

- bpo-38294: 将不再转义的字符列表添加到re.escape文档中。

- bpo-38053: 更新了plistlib文档。

- bpo-26868: 修复 `PyModule_AddObject()` 的示例用法以正确处理错误。

- bpo-36797: 修复 distutils API 参考中的死链接。

- bpo-37977: 更强烈和明确地警告关于 pickle 的不安全性。

- bpo-37979: 在 datetime.fromisoformat 文档中添加了到 dateutil.parser.isoparse 的链接。由 Paul Ganssle 提供补丁。

- bpo-12707: 弃用 info()、geturl()、getcode() 方法，分别推荐使用 headers、url 和 status 属性，针对 HTTPResponse 和 addinfourl。同时弃用 addinfourl 的 code 属性，推荐使用 status 属性。由 Ashwin Ramaswami 提供补丁。

- bpo-37937: 在 `sys.settrace()` 文档中提及 `frame.f_trace`。

- bpo-37878: 使 `PyThreadState_DeleteCurrent()` 内部化。

- bpo-37759: 开始编辑 Whatsnew 3.8。

- bpo-37726: 停止在教程中推荐使用 getopt 进行命令行参数解析，并推广 argparse。

- bpo-32910: 移除关于 venv 的 Deactivate 如何工作的实现特定行为。

- bpo-37256: 修正 `urllib.request` 中 `Request` 的参数措辞。

- bpo-37284: 添加简短说明，指出任何新的 `sys.implementation` 必需属性必须经过 PEP 流程。

- bpo-30088: 文档说明 `mailbox.Maildir` 构造函数不尝试验证 maildir 文件夹布局的正确性。由 Sviatoslav Sydorenko 提供补丁。

- bpo-37521: Fix `importlib` examples to insert any newly created modules via importlib.util.module_from_spec() immediately into sys.modules instead of after calling loader.exec_module().

  感谢 Benjamin Mintz 发现这个错误。

- bpo-37456: 斜杠 ('/') 现在成为语法的一部分。

- bpo-37487: 修正 PyList_GetItem 索引描述以包含 0。

- bpo-37149: 将死链接 Tkinter 8.5 参考（作者：John Shipman, New Mexico Tech）替换为 archive.org 的副本链接。

- bpo-37478: 在 os.chdir() 的描述中添加了可能的异常。

- bpo-34903: Documented that in `datetime.datetime.strptime()`, the leading zero in some two-digit formats is optional. Patch by Mike Gleen.

- bpo-36260: 在 zipfile 模块文档中添加了解压缩的陷阱。

- bpo-37004: 在 difflib 的文档中，添加了一个明确警告，指出 SequenceMatcher 的 ratio 方法的结果可能依赖于输入字符串的顺序。

- bpo-36960: 重构了 `datetime` 文档，旨在使其更加用户友好并提高可读性。由 Brad Solomon 提供补丁。

- bpo-36487: 在 C-API 文档中明确了“主”解释器的含义。

- bpo-23460: The documentation for decimal string formatting using the `:g` specifier has been updated to reflect the correct exponential notation cutoff point. Original patch contributed by Tuomas Suutari.

- bpo-35803: 记录并测试了 `tempfile` 函数可能接受一个 path-like object 作为 `dir` 参数。由 Anthony Sottile 提供补丁。

- bpo-33944: 添加了关于 .pth 文件中代码预期用途的说明。

- bpo-34293: 修复了 Doc/Makefile 关于 PAPER 环境变量和 PDF 构建的问题。

- bpo-25237: 为 tkinter 模块添加文档。

### 测试

- bpo-38614: 修复了 test_asyncio.test_subprocess 的 test_communicate()：使用 `support.LONG_TIMEOUT` (5 分钟) 而不是仅 1 分钟。

- bpo-38614: 向 `test.support` 添加超时常量：`LOOPBACK_TIMEOUT`、`INTERNET_TIMEOUT`、`SHORT_TIMEOUT` 和 `LONG_TIMEOUT`。

- bpo-38502: 如果进程组可用（`os.setsid()` 和 `os.killpg()` 函数可用），test.regrtest 现在在多进程模式（-jN 命令行选项）中使用进程组。

- bpo-35998: 修复 test_asyncio.test_start_tls_server_1() 中的竞态条件。之前，测试 main() 函数替换协议和测试 ServerProto 协议在收到 HELLO 后发送 ANSWER 之间存在竞态条件。现在，只有测试 main() 函数负责发送数据，ServerProto 不再发送数据。

- bpo-38470: 在没有长路径支持的 Windows 上修复 `test_compileall.test_compile_dir_maxlevels()`：仅创建 3 个子目录，而不是创建 20 到 100 个子目录。

- bpo-37531: 在超时时，regrtest 不再尝试再次调用 `popen.communicate()`：它可能会挂起，直到所有使用 stdout 和 stderr 管道的子进程完成。杀死工作进程并忽略其输出。还将主进程的 faulthandler 超时从 1 分钟更改为 5 分钟，以适应 Python 最慢的构建机器人。

- bpo-38239: 为链接时优化 (LTO) 构建修复 test_gdb。

- bpo-38275: test_ssl 现在更好地处理禁用的 TLS/SSL 版本。识别 OpenSSL 的加密策略和运行时设置，并跳过禁用版本的测试。测试还接受更多的 TLS minimum_versions，以适应那些用严格设置覆盖 OpenSSL 默认值的平台。

- bpo-38271: test_ssl 的私钥之前是用 3DES 加密的传统 PKCS#5 格式。一些严格的加密策略会阻止 3DES 和 PKCS#5 的摘要算法。现在改用 PKCS#8 格式并使用 AES256 加密。

- bpo-38270: test.support 现在有一个辅助函数来检查哈希摘要函数的可用性。重构了几个测试以避免使用 MD5 并使用 SHA256 代替。其他测试被标记为使用 MD5，并在 MD5 被禁用时跳过。

- bpo-37123: 多处理测试 test_mymanager() 现在也期望 -SIGTERM，不仅仅是退出码 0。如果管理器进程停止时间超过 1 秒，BaseManager._finalize_manager() 会向管理器进程发送 SIGTERM，这在慢速构建机器人上会发生。

- bpo-38212: 多进程测试：将 test_queue_feeder_donot_stop_onexc() 的超时时间从 1 秒增加到 60 秒。

- bpo-38117: 使用 OpenSSL 1.1.1d 进行测试

- bpo-38018: 提高 multiprocessing.shared_memory 的代码覆盖率。

- bpo-37805: Add tests for json.dump(..., skipkeys=True). Patch by Dong-hee Na.

- bpo-37531: 增强 regrtest 多进程超时功能：在终止工作进程时写入消息，捕获 popen.kill() 和 popen.wait() 异常，对第二次调用 popen.communicate() 设置超时。

- bpo-37876: 为 ROT-13 编解码器添加测试。

- bpo-36833: Added tests for PyDateTime_xxx_GET_xxx() macros of the C API of the `datetime` module. Patch by Joannah Nanjekye.

- bpo-37558: 修复 test_shared_memory_cleaned_after_process_termination 名称处理

- bpo-37526: 添加 `test.support.catch_threading_exception()`：使用 `threading.excepthook()` 捕获 `threading.Thread` 异常的上下文管理器。

- bpo-37421: test_concurrent_futures 现在如果 ForkServer 实例正在运行，则明确停止它。

- bpo-37421: 多进程测试现在如果 ForkServer 实例正在运行，则停止它：关闭“alive”文件描述符以请求服务器停止，然后移除其 UNIX 地址。

- bpo-37421: test_distutils.test_build_ext() 现在能够在 Windows 上移除临时目录：不在当前进程中导入新构建的 C 扩展（“xx”），而是在一个单独的进程中测试它。

- bpo-37421: test_concurrent_futures 现在清理多进程以立即移除由 multiprocessing.util.get_temp_dir() 创建的临时目录。

- bpo-37421: test_winconsoleio 不再泄漏临时文件：使用 tempfile.TemporaryFile() 在测试完成时移除它。

- bpo-37421: 多进程测试现在明确调用 `_run_finalizers()` 以立即移除测试创建的临时目录。

- bpo-37421: urllib.request 测试现在调用 `urlcleanup()` 来移除由 `urlretrieve()` 测试创建的临时文件，并清除由 `urlopen()` 和间接调用 `urlopen()` 的函数设置的 `_opener` 全局变量。

- bpo-37472: 移除 `Lib/test/outstanding_bugs.py`。

- bpo-37199: 修复当 IPv6 不可用或禁用时的测试失败问题。

- bpo-19696: 在 "test_pkg_import.py" 中用 "random.choice" 替换已弃用的方法 "random.choose"。

- bpo-37335: 从 c 语言环境强制测试中移除不再必要的代码。

- bpo-37421: 修复 test_shutil 以不再泄漏临时文件。

- bpo-37411: 修复 test_wsgiref.testEnviron() 以不再依赖环境变量（如果设置了 "X" 变量也不会失败）。

- bpo-37400: 修复 test_os.test_chown()：使用 os.getgroups() 而不是 grp.getgrall() 来获取组。同时将测试重命名为 test_chown_gid()。

- bpo-37359: 向 python3 -m test 添加 --cleanup 选项以移除之前失败作业的 `test_python_*` 目录。添加 "make cleantest" 以运行 `python3 -m test --cleanup`。

- bpo-37362: 如果 test_gdb 在 stderr 上接收到“意外”消息，它不再失败：现在它会忽略 stderr。test_gdb 的目的是测试 python-gdb.py 命令是否按预期工作，而不是测试 gdb。

- bpo-35998: 在 test_asyncio: test_start_tls_server_1() 中避免 TimeoutError。

- bpo-37278: 修复 test_asyncio ProactorLoopCtrlC：加入线程以防止泄漏运行中的线程和引用。

- bpo-37261: 修复 `test.support.catch_unraisable_exception()`：它的 __exit__() 方法现在忽略在清除其 `unraisable` 属性时引发的不可捕获异常。

- bpo-37069: regrtest 现在使用 `sys.unraisablehook()` 来标记测试为“环境已更改”（ENV_CHANGED），如果它发出了“不可捕获的异常”。此外，regrtest 在这种情况下会记录一个警告。

  使用 `python3 -m test --fail-env-changed` 来捕获测试中的不可捕获异常。

- bpo-37252: 修复devpoll测试中 `test_close` 和 `test_events_mask_overflow` 的断言。

- bpo-37169: 重写 `_PyObject_IsFreed()` 单元测试。

- bpo-37153: `test_venv.test_multiprocessing()` 现在显式调用 `pool.terminate()` 以等待池完成。

- bpo-34001: 使test_ssl能够与LibreSSL一起通过。LibreSSL处理最小和最大TLS版本的方式与OpenSSL不同。

- bpo-36919: 使 `test_source_encoding.test_issue2301` 实现独立。该测试现在适用于CPython和IronPython。

- bpo-30202: 更新 `test.test_importlib.test_abc` 以测试 `find_spec()`。

- bpo-28009: 修改test_uuid逻辑，以测试当程序可用且可用于获取MACADDR作为UUID基础时的情况。由M. Felt提供补丁。

- bpo-34596: 当 `unittest.skip()` 未被调用时，回退到默认原因。由Naitree Zhu提供补丁。

### 构建

- bpo-38809: 在Windows上，构建脚本现在可以识别并使用活动虚拟环境中的python.exe。

- bpo-38684: 当Blake2被禁用但OpenSSL支持它时，修复_hashlib构建。

- bpo-38468: Misc/python-config.in now uses `getvar()` for all still existing `sysconfig.get_config_var()` calls. Patch by Joannah Nanjekye.

- bpo-37415: 修复ICC编译器的stdatomic.h头文件检查：ICC实现缺少Python所需的atomic_uintptr_t类型。

- bpo-38301: 在Solaris系列中，我们必须确保使用 `-D_REENTRANT`。由Jesús Cea Avión提供补丁。

- bpo-36002: 使用 `AC_PATH_TOOL``而非 ``AC_PATH_TARGET_TOOL` 定位 `llvm-profdata` 和``llvm-ar``二进制文件。

- bpo-37936: `.gitignore` 文件系统地“根植”所有规则，规则末尾不带斜杠，这些规则旨在应用于仓库中特定位置的文件。以前，当要忽略的文件恰好在仓库的根目录时，我们经常会意外地忽略树中任何地方同名的文件和目录。

- bpo-37760: 用于将Unicode字符数据库中的信息转换为由 `str` 方法和 `unicodedata` 模块使用的生成代码和数据的脚本 `Tools/unicode/makeunicodedata.py`，现在将每个字符的数据作为一个具有命名属性的 `dataclass` 处理，而不是一个长度为18的不同字段列表。

- bpo-37936: `.gitignore` 文件不再适用于实际上在Git仓库中被跟踪的任何文件。由Greg Price提供补丁。

- bpo-37725: 更改“clean”makefile目标，以同时清除程序引导优化(PGO)数据。以前，您必须使用“make clean”和“make profile-removal”，或者“make clobber”。

- bpo-37707: 标记一些单独的测试在使用--pgo时跳过。标记的测试显著增加PGO任务时间，并且可能无助于改进最终可执行文件的优化。

- bpo-36044: 减少为PGO生成任务运行的单元测试数量。这使任务速度提高了约15倍。运行完整的单元测试套件很慢。这一变化可能导致构建稍微不那么优化，因为不会执行那么多代码分支。如果您愿意等待更慢的构建，可以使用'./configure [..] PROFILE_TASK="-m test --pgo-extended"'恢复旧行为。我们不保证哪个PGO任务集会产生更快的构建。关心的用户应该运行自己的相关基准测试，因为结果可能依赖于环境、工作负载和编译器工具链。

- bpo-37468: `make install` 不再安装distutils bdist_wininst使用的 `wininst-*.exe` 文件：bdist_wininst仅在Windows上工作。

- bpo-37189: Many `PyRun_XXX()` functions like `PyRun_String()` were no longer exported in `libpython38.dll` by mistake. Export them again to fix the ABI compatibility.

- bpo-25361: 在Windows 32位构建中启用SSE2指令的使用。

- bpo-36210: 更新AIX的可选扩展模块检测。osssaudiodev和spwd不适用于AIX，不再报告为缺失。第三方打包的ncurses（支持ASIS）与官方支持的AIX curses库冲突，因此配置AIX使用libcurses.a。但是，跳过尝试构建_curses_panel。

  由M Felt提供补丁

### Windows

- bpo-38589: 修复当Windows未安装在C盘时的HTML帮助快捷方式

- bpo-38453: 确保ntpath.realpath()正确解析相对路径。

- bpo-38519: 恢复nuget.org和Microsoft Store包中缺失的内部C头文件。

- bpo-38492: 移除 `pythonw.exe` 对Microsoft C++运行时的依赖。

- bpo-38344: 修复activate.bat中的错误消息

- bpo-38359: 确保 `pyw.exe` 启动器读取正确的注册表键。

- bpo-38355: 修复 `ntpath.realpath` 在 `sys.executable` 上失败的问题。

- bpo-38117: 更新捆绑的OpenSSL至1.1.1d

- bpo-38092: 减少在Windows虚拟环境中使用多进程时的开销。

- bpo-38133: 允许py.exe启动器定位来自Microsoft Store的安装，并改进活动虚拟环境的显示。

- bpo-38114: `pip.ini` 不再包含在Nuget包中。

- bpo-32592: 将Windows 8设置为API支持的最低要求版本

- bpo-36634: `os.cpu_count()` 现在返回活动处理器而非最大处理器。

- bpo-36634: 当现有变量包含双引号字符时，venv activate.bat现在可以工作。

- bpo-38081: 防止在 `'NUL'` 上调用 `os.path.realpath()` 时出错。

- bpo-38087: 修复test_pathlib和test_ntpath中的大小写敏感性。

- bpo-38088: 修复仅安装v142工具集时，distutils找不到vcruntime140.dll的问题。

- bpo-37283: 确保命令行和unattend.xml设置覆盖Windows安装程序中先前检测到的状态。

- bpo-38030: 修复 `os.stat()` 在Windows上对块设备失败的问题。

- bpo-38020: 修复在调用 `os.readlink()` (或间接通过 `realpath()`) 时，如果文件不是支持的链接可能导致崩溃的问题。

- bpo-37705: 改进 `winerror_to_errno()` 的实现。

- bpo-37549: `os.dup()` 在 Windows 7 上不再为标准流失败。

- bpo-1311: Windows 上的 `nul` 文件现在从 `exists()` 返回 True，并从 `os.stat()` 返回一个有效结果，设置了 `S_IFCHR`。

- bpo-9949: 在 `os.realpath()` 中启用对符号链接的支持。

- bpo-37834: 在 `os.lstat()` 中将 Windows 上的所有名称代理重解析点和其他重解析点在 `os.stat()` 中视为常规文件。

- bpo-36266: 在 `_PyImport_FindSharedFuncptrWindows()` 中模块导入期间发生 DLL 加载失败时，在格式化的错误消息中添加模块名称。由 Srinivas Nyayapati 提供补丁。

- bpo-25172: Trying to import the `crypt` module on Windows will result in an `ImportError` with a message explaining that the module isn't supported on Windows. On other platforms, if the underlying `_crypt` module is not available, the ImportError will include a message explaining the problem.

- bpo-37778: 修复用于 Microsoft Store 包的文件关联的图标。

- bpo-37734: 修复使用注册表值从 Microsoft Store 应用启动 Python 的问题。

- bpo-37702: Fix memory leak on Windows in creating an SSLContext object or running urllib.request.urlopen('https://...').

- bpo-37672: 将 Windows Store 包的 pip 切换到使用捆绑的 `pip.ini` 而不是 `PIP_USER` 变量。

- bpo-10945: 正式放弃在非 Windows 系统上创建 bdist_wininst 安装程序的支持。

- bpo-37445: 在 `FormatMessageW()` 调用中包含 `FORMAT_MESSAGE_IGNORE_INSERTS` 标志。

- bpo-37369: 修复从 Microsoft Store 运行时 `sys.executable` 的路径。

- bpo-37380: 在Windows上，不再通过 `subprocess._active` 收集未完成的进程以供后续清理。由Ruslan Kuprieiev提供补丁。

- bpo-37351: 从标准的Windows发行版中移除libpython38.a。

- bpo-35360: 更新Windows构建以使用SQLite 3.28.0。

- bpo-37267: 在Windows上，`os.dup()` 处理字符文件时不再创建可继承的文件描述符。

- bpo-36779: 确保在活动代码页设置为CP_UTF7或CP_UTF8时，Windows上的 `time.tzname` 是正确的。

- bpo-32587: Make `winreg.REG_MULTI_SZ` support zero-length strings.

- bpo-28269: Replace use of `strcasecmp()` for the system function `_stricmp()`. Patch by Minmin Gong.

- bpo-36590: 向socket模块添加原生蓝牙RFCOMM支持。

### macOS

- bpo-38117: 在macOS安装程序中更新OpenSSL至1.1.1d。

- bpo-38089: 将Azure Pipelines迁移至最新的VM版本，并使macOS测试变为可选。

- bpo-18049: 在macOS上将线程的默认堆栈大小从5MB增加到16MB，以匹配主线程的堆栈大小。这避免了线程深度递归时的崩溃。

- bpo-34602: 通过在运行时不再调用resource.setrlimit来增加进程堆栈大小限制，避免在macOS上的测试套件失败。由于解释器正在构建为更大的默认堆栈大小，运行时更改不再需要。

- bpo-35360: 更新macOS安装程序以使用SQLite 3.28.0。

- bpo-34631: 在macOS安装程序中更新OpenSSL至1.1.1c。

### IDLE

- bpo-26353: 停止在保存IDLE shell窗口时添加新行。

- bpo-4630: 添加一个选项来切换IDLE的shell、编辑器和输出窗口的光标闪烁。参见设置、常规、窗口首选项、光标闪烁。由Zackery Spytz提供补丁。

- bpo-38598: 不尝试编译IDLE shell或输出窗口

- bpo-36698: IDLE在向stderr写入不可编码的字符时不再失败。现在它会像常规的Python解释器一样用反斜杠转义它们。添加了标准流的 `errors` 字段。

- bpo-35379: 退出IDLE时，捕获任何AttributeError。当EditorWindow.close被调用两次时会发生一次。当IDLE从终端运行时，打印回溯是无用且烦人的。

- bpo-38183: 为避免问题，test_idle忽略用户配置目录。它不再尝试创建或访问.idlerc或其中的任何文件。用户必须运行IDLE来发现保存设置时的问题。

- bpo-38077: IDLE在初始化用户命名空间时不再添加'argv'。此错误仅影响3.7.4和3.8.0b2至3.8.0b4版本。

- bpo-38041: Shell重启行现在填满窗口宽度，始终以'='开头，并避免不必要的换行。如果包含的文件名相对于宽度较长，行仍会换行。

- bpo-35771: 为避免在较慢的机器上偶尔出现的虚假test_idle失败，增加test_tooltip中的``hover_delay``。

- bpo-37824: 正确处理IDLE shell中的用户输入警告。停止将SyntaxWarnings转为SyntaxErrors。

- bpo-37929: 当没有shell窗口时，IDLE设置对话框现在能正确关闭。

- bpo-37902: 为IDLE模块、路径和堆栈浏览器添加鼠标滚轮滚动。由George Zhang提供补丁。

- bpo-37849: 修复了补全列表在当前行上方显示时过高或过低的问题。

- bpo-36419: 重构IDLE自动补全并改进测试。

- bpo-37748: 重新排序运行菜单。将最常见的选择，运行模块，放在顶部。

- bpo-37692: 通过示例shell交互和改进的shell元素标签来改善高亮配置示例。

- bpo-37628: 设置对话框不再随字体大小扩展。

- bpo-37627: 使用最近一次输入的命令行参数初始化自定义运行对话框。用户可以在提交前选择编辑。

- bpo-33610: 修复首次切换时代码上下文未显示正确上下文的问题。

- bpo-37530: 优化代码上下文以减少不必要的后台活动。字体和高亮更改现在与文本更改同时进行，而不是在随机延迟后。

- bpo-27452: 通过内联 `RemoveFile` 和简化 `CreateConfigHandlers` 中 `file` 的处理来清理 `config.py`。

- bpo-37325: 修复帮助源和自定义运行对话框的标签焦点遍历顺序。

- bpo-37321: 现在，两个子进程连接错误消息都指向IDLE文档的'启动失败'部分。

- bpo-17535: 为IDLE编辑器窗口添加可选的行号。除非在配置对话框的常规标签中设置，否则窗口打开时不显示行号。

- bpo-26806: 为了补偿由IDLE添加的堆栈帧并避免低递归限制可能带来的问题，用户代码执行过程中的限制增加了30。报告递归限制时减去30，使这一增加大部分透明。

- bpo-37177: 正确地将搜索对话框'附加'到其主窗口，使其行为类似于其他对话框，并且不会隐藏在主窗口后面。

- bpo-37039: 通过首次使用特定屏幕时暂时最大化窗口来调整“缩放高度”以适应单个屏幕。更改屏幕设置可能会使保存的高度无效。窗口最大化时，“缩放高度”无效。

- bpo-35763: 通过仅在首行有空间时添加关于'/'仅表示位置的提示，使调用提示提醒不那么显眼。

- bpo-5680: 在运行菜单中添加'运行...定制'以使用定制设置运行模块。输入的任何'命令行参数'都会添加到sys.argv。可以抑制正常的Shell主模块重启。

- bpo-36390: 将格式菜单功能收集到format.py中。合并paragraph.py、rstrip.py和editor.py中的格式方法。

### 工具/示例

- bpo-38118: 更新Valgrind抑制文件以忽略在使用GCC内置strcmp()时 `PyUnicode_Decode()` 中的误报。

- bpo-38347: pathfix.py：递归工作时，假设所有以'.py'结尾的文件都是Python脚本。

- bpo-37803: pdb的 `--help` 和 `--version` 长选项现在可以工作了。

- bpo-37942: 改进ArgumentClinic对浮点数的转换器。

- bpo-37704: 移除 `Tools/scripts/h2py.py`：使用cffi在Python中访问C API。

- bpo-37675: 2to3现在可以从压缩的标准库中运行。

- bpo-37034: Argument Clinic现在在使用仅关键字参数的错误时使用参数名称而不是它们的位置。补丁由Rémi Lapeyre贡献。

- bpo-37064: 向pathscript.py脚本添加选项-k：保留shebang标志。向pathscript.py脚本添加选项-a：添加标志。

### C API

- bpo-37633: 重新导出 `pythonrun.h` 中一些宏的函数兼容性包装器。

- bpo-38644: 为有限API提供 `Py_EnterRecursiveCall()` 和 `Py_LeaveRecursiveCall()` 作为常规函数。之前，它们被定义为宏，但这些宏无法与有限API一起工作，因为有限API无法访问 `PyThreadState.recursion_depth` 字段。从稳定ABI中移除``_Py_CheckRecursionLimit``。

- bpo-38650: 全局变量 `PyStructSequence_UnnamedField` 现在是一个常量，并引用一个常量字符串。

- bpo-38540: 修复了在未定义宏 `PY_SSIZE_T_CLEAN` 时，`PyArg_Parse()` 及类似函数对于格式单元 `"es#"` 和 `"et#"` 可能的内存泄漏。

- bpo-38395: 修复了由于在调用可能删除代理引用的对象的最后一个引用的某些关联方法时，`weakref.proxy` 对象的生命周期管理不正确而导致的崩溃。由Pablo Galindo提供补丁。

- bpo-36389: `_PyObject_CheckConsistency()` 函数现在在发布模式下也可用。例如，它可以用于调试GC中 `visit_decref()` 函数的崩溃。

- bpo-38266: 恢复PyThreadState_DeleteCurrent()的移除，并附带文档。

- bpo-38303: 更新audioop扩展模块以使用稳定的ABI（PEP-384）。由Tyler Kieft提供补丁。

- bpo-38234: `Py_SetPath()` now sets `sys.executable` to the program full path (`Py_GetProgramFullPath()`) rather than to the program name (`Py_GetProgramName()`).

- bpo-38234: Python ignored arguments passed to `Py_SetPath()`, `Py_SetPythonHome()` and `Py_SetProgramName()`: fix Python initialization to use specified arguments.

- bpo-38205: `Py_UNREACHABLE()` 宏现在调用 `Py_FatalError()`。

- bpo-38140: 通过PyMemberDef传递偏移量，使dict和weakref的偏移量对于C堆类型变得不透明。

- bpo-15088: C函数 `PyGen_NeedsFinalizing` 已被移除。它没有被记录、测试或在CPython中任何地方使用，在 PEP 442 的实现之后。由Joannah Nanjekye提供补丁。（由Joannah Nanjekye提供补丁）

- bpo-36763: 由 `PySys_AddXOption()` 添加的选项现在与 `PyConfig.xoptions` 和命令行 `-X` 选项以相同的方式处理。

- bpo-37926: 修复 `PySys_SetArgvEx(0, NULL, 0)` 中的崩溃。

- bpo-37879: 修复subtype_dealloc以在基类型为C堆类型时抑制类型递减引用计数。

- bpo-37645: Add `_PyObject_FunctionStr()` to get a user-friendly string representation of a function-like object. Patch by Jeroen Demeyer.

- bpo-29548: 函数 `PyEval_CallObject`、`PyEval_CallFunction`、`PyEval_CallMethod` 和 `PyEval_CallObjectWithKeywords` 已被弃用。请改用 `PyObject_Call()` 及其变体。

- bpo-37151: `PyCFunction_Call` 现在是 `PyObject_Call()` 的弃用别名。

- bpo-37540: vectorcall协议现在要求调用者仅将字符串作为关键字名称传递。

- bpo-37207: vectorcall协议现在对 `type` 对象启用：将 `tp_vectorcall` 设置为一个vectorcall函数，用于在调用类本身时替代 `tp_new` 和 `tp_init`。

- bpo-21120: 将Python-ast.h、ast.h和asdl.h排除在有限API之外。

- bpo-37483: 新增函数 `_PyObject_CallOneArg`，用于调用带有一个位置参数的对象。

- bpo-36763: Add `PyConfig_SetWideStringList()` function.

- bpo-37337: Add fast functions for calling methods: `_PyObject_VectorcallMethod()`, `_PyObject_CallMethodNoArgs()` and `_PyObject_CallMethodOneArg()`.

- bpo-28805: The `METH_FASTCALL` calling convention has been documented.

- bpo-37221: The new function `PyCode_NewWithPosOnlyArgs()` allows to create code objects like `PyCode_New()`, but with an extra posonlyargcount parameter for indicating the number of positonal-only arguments.

- bpo-37215: 修复由 bpo-36842 引入的dtrace问题。

- bpo-37194: 向C API添加一个新的公共 `PyObject_CallNoArgs()` 函数：调用一个可调用的Python对象而不带任何参数。这是调用不带任何参数的回调函数的最有效方式。例如，在x86-64上，``PyObject_CallFunctionObjArgs(func, NULL)``每次调用在栈上分配960字节，而``PyObject_CallNoArgs(func)``每次调用仅分配624字节。

- bpo-37170: 修复 `PyLong_AsUnsignedLongLongMask()` 中的错误转换。

- bpo-35381: 将posixmodule.c中静态分配的类型 `DirEntryType` 和 `ScandirIteratorType` 转换为堆分配类型。

- bpo-34331: Use singular/plural noun in error message when instantiating an abstract class with non-overriden abstract method(s).

## Python 3.8.0 beta 1

发布日期: 2019-06-04

### 安全性

- bpo-35907: CVE-2019-9948: Avoid file reading by disallowing `local-file://` and `local_file://` URL schemes in `URLopener().open()` and `URLopener().retrieve()` of `urllib.request`.

- bpo-33529: 防止在电子邮件头编码中使用的fold函数在头中有太多非ASCII字符时进入无限循环。

- bpo-33164: 更新了blake2实现，使用平台提供的安全memset实现。

### 核心与内置函数

- bpo-35814: 允许在带注释的赋值的右侧进行解包。特别是，现在允许``t: Tuple[int, ...] = x, y, *z``。

- bpo-37126: 现在所有structseq对象都由垃圾收集器跟踪。由Pablo Galindo提交的补丁。

- bpo-37122: 使代码对象的 co_argcount 属性表示位置参数的总数（包括仅限位置参数）。co_posonlyargcount 的值可用于区分哪些参数是仅限位置的，而差值（co_argcount - co_posonlyargcount）是位置或关键字参数的数量。由Pablo Galindo提交的补丁。

- bpo-20092: `int`、`float` 和 `complex` 的构造函数现在将使用 `__index__()` 特殊方法，如果可用且相应的 `__int__()`、`__float__()` 或 `__complex__()` 方法不可用。

- bpo-37087: 向OpenBSD添加原生线程ID（TID）支持。

- bpo-26219: 实现了每操作码缓存机制，``LOAD_GLOBAL``指令使用它。``LOAD_GLOBAL``现在快了约40%。由Yury Selivanov和Inada Naoki贡献。

- bpo-37072: 当flags为NULL时，修复PyAST_FromNodeObject()中的崩溃。

- bpo-37029: 由于使用线性搜索来保持 `obmalloc.c` 的可用的arena列表按空闲内存池数量的顺序排序，释放大量小对象可能需要与arena数量的平方成正比的时间。现在无需搜索即可完成，使最坏情况下的时间与arena数量成线性关系。对于这一点非常明显的程序（通常同时有超过10万个小对象存活），这可以大大减少释放其内存所需的时间。

- bpo-26423: 当 `sizeof(long) < sizeof(Py_ssize_t)` (例如，64位Windows) 时，修复``wrap_lenfunc()``中可能的溢出。

- bpo-37050: 改进用于“调试”f字符串的AST，这些字符串使用'='来打印出正在评估的表达式的源代码。从FormattedValue节点中删除expr_text，转而使用一个Constant字符串节点（可能与f字符串内部的相邻常量表达式合并）。

- bpo-22385: The `bytes.hex`, `bytearray.hex`, and `memoryview.hex` methods as well as the `binascii.hexlify` and `b2a_hex` functions now have the ability to include an optional separator between hex bytes. This functionality was inspired by MicroPython's hexlify implementation.

- bpo-26836: 添加 `os.memfd_create()`。

- bpo-37032: 向代码类型(`types.CodeType`)添加了新的 `replace()` 方法。

- bpo-37007: Implement `socket.if_nameindex()`, `socket.if_nametoindex()`, and `socket.if_indextoname()` on Windows.

- bpo-36829: `PyErr_WriteUnraisable()` 现在在没有当前回溯的情况下创建一个回溯对象。此外，调用 `PyErr_NormalizeException()` 和 `PyException_SetTraceback()` 以规范化异常值。忽略任何错误。

- bpo-36878: Only accept text after `# type: ignore` if the first character is ASCII. This is to disallow things like `# type: ignoreé`.

- bpo-36878: Store text appearing after a `# type: ignore` comment in the AST. For example a type ignore like `# type: ignore[E1000]` will have the string `"[E1000]"` stored in its AST node.

- bpo-2180: 由Anthony Sottile处理的，将EOF处的行延续视为 `SyntaxError`。

- bpo-36907: 修复了在调用带有关键字字典(`f(**kwargs)`)的C函数并在该函数运行时更改字典``kwargs``时崩溃的问题。

- bpo-36946: 修复处理切片时可能出现的带符号整数溢出。

- bpo-36826: 向ast_unparse.c添加NamedExpression种类支持。

- bpo-1875: 如果将被优化掉的代码块（例如总是为假的if条件）包含语法错误，现在会引发 `SyntaxError`。由Pablo Galindo提供补丁。

- bpo-36027: 允许通过三参数 `pow` 计算模逆：现在在第一个和第三个参数互质的情况下，允许第二个参数为负数。

- bpo-36861: 更新Unicode数据库至版本12.1.0。

- bpo-28866: 避免缓存类型定义了mro()的类的属性，以避免硬缓存无效问题。

- bpo-36851: 如果执行以返回结束且堆栈不为空，现在会正确清理 `FrameType` 堆栈。

- bpo-34616: `compile()` 内置函数现在支持 `ast.PyCF_ALLOW_TOP_LEVEL_AWAIT` 标志，该标志允许编译包含顶层 `await`、`async with` 或 `async for` 的源代码。这在已经异步的函数中评估异步代码时非常有用；例如在自定义REPL中。

- bpo-36842: 实现PEP 578，添加sys.audit、io.open_code及相关API。

- bpo-27639: 修正UserList切片操作的返回类型。由Michael Blahay、Erick Cervantes和vaultah提供补丁。

- bpo-36737: 将PyRuntimeState.warnings移动到每个解释器状态（通过“模块状态”）。

- bpo-36793: 从内置类型 `bool`、`int`、`float`、`complex` 和标准库中的几个类中移除 `__str__` 实现。它们现在从 `object` 继承 `__str__()`。

- bpo-36817: 为调试目的在f-字符串中添加 `=``特性。这可以放在 ``!s`、`!r` 或 `!a` 之前。它会生成表达式的文本，后跟等号，然后是表达式值的repr。因此，`f'{3*9+15=}'``将等于字符串 ``'3*9+15=42'`。如果指定了 `=`，则默认转换设置为 `!r`，除非给出了格式说明符，在这种情况下，格式化行为不变，将使用__format__。

- bpo-24048: 在import.c的 `remove_module()` 期间保存实时异常。

- bpo-27987: 在64位平台上，pymalloc返回的内存块对齐方式由8字节改为16字节，以符合x86-64 ABI。最近的编译器更频繁地假设这种对齐方式。由Inada Naoki提供补丁。

- bpo-36601: 从Python内部的C信号处理器中移除了一个早已无意义的 ``getpid() == main_pid``检查。

- bpo-36594: 修复了格式字符串中 `%p` 的错误使用。由Zackery Spytz提供补丁。

- bpo-36045: builtins.help() now prefixes `async` for async functions

- bpo-36084: 向threading.Thread对象添加原生线程ID（TID）（支持的平台：Windows、FreeBSD、Linux、macOS）

- bpo-36035: 添加了针对与pathlib组合使用的损坏符号链接的修复。

- bpo-35983: Added new trashcan macros to deal with a double deallocation that could occur when the `tp_dealloc` of a subclass calls the `tp_dealloc` of a base class and that base class uses the trashcan mechanism. Patch by Jeroen Demeyer.

- bpo-20602: 在关闭期间不清除 `sys.flags` 和 `sys.float_info`。由Zackery Spytz提供补丁。

- bpo-26826: 将 `copy_file_range()` 作为低级API暴露在 `os` 模块中。

- bpo-32388: 移除tp_flags中的跨版本二进制兼容性要求。

- bpo-31862: 将binascii移植到PEP 489多阶段初始化。由Marcel Plch提供补丁。

### 库

- bpo-37128: 添加了 `math.perm()`。

- bpo-37120: 添加SSLContext.num_tickets以控制TLSv1.3会话票证的数量。

- bpo-12202: Fix the error handling in `msilib.SummaryInformation.GetProperty()`. Patch by Zackery Spytz.

- bpo-26835: fcntl 模块现在包含了用于 memfd 密封的文件密封常量。

- bpo-29262: 向 `typing` 模块添加了 `get_origin()` 和 `get_args()` 内省辅助函数。

- bpo-12639: `msilib.Directory.start_component()` no longer fails if keyfile is not `None`.

- bpo-36999: 添加了 `asyncio.Task.get_coro()` 方法，以公开暴露任务的协程对象。

- bpo-35246: 使 `asyncio.create_subprocess_exec()` 接受路径类参数。

- bpo-35279: 将 `ThreadPoolExecutor` 的默认 max_workers 从 `cpu_count() * 5` 改为 `min(32, cpu_count() + 4)`。之前的值在多核机器上不合理地大。

- bpo-37076: `_thread.start_new_thread()` 现在使用 `sys.unraisablehook()` 而非 `sys.excepthook()` 记录函数抛出的未捕获异常，以便钩子能够访问抛出异常的函数。

- bpo-33725: 在 macOS 上，`multiprocessing` 模块现在默认使用 spawn 启动方法。

- bpo-37054: Fix destructor `_pyio.BytesIO` and `_pyio.TextIOWrapper`: initialize their `_buffer` attribute as soon as possible (in the class body), because it's used by `__del__()` which calls `close()`.

- bpo-37058: PEP 544：向 `typing` 模块添加了 `Protocol` 和 `@runtime_checkable`。

- bpo-36933: 已在 3.8 版本中弃用并标记为移除的函数 `sys.set_coroutine_wrapper` 和 `sys.get_coroutine_wrapper` 已被移除。

- bpo-37047: 在 `unittest.mock.AsyncMock` 设置中处理延迟绑定和属性访问以进行自动规范。记录在 `unittest.mock.MagicMock` 中新实现的异步方法。

- bpo-37049: PEP 589：向 `typing` 模块添加了 `TypedDict`。

- bpo-37046: PEP 586：向 `typing` 模块添加了 `Literal`。

- bpo-37045: PEP 591: 向 `typing` 模块添加 `Final` 限定符和 `@final` 装饰器。

- bpo-37035: 如果 asyncio 传输中发生致命错误，则不要记录基于 OSError 的异常。对端可以生成几乎任何 OSError，用户无法通过修复自己的代码来避免这些异常。错误仍然会传播到用户代码，只是记录它们没有意义，并且会污染 asyncio 日志。

- bpo-37001: `symtable.symtable()` 现在接受与内置 `compile()` 函数相同的源代码输入类型。由 Dino Viehland 提供补丁。

- bpo-37028: 实现 asyncio REPL

- bpo-37027: 从 transport.get_extra_info('socket') 返回安全使用的代理套接字对象

- bpo-32528: 使 asyncio.CancelledError 成为 BaseException。

  这将解决许多 asyncio 用户常犯的一个错误：一个“except Exception”子句破坏了任务的取消。

  除了这一变更，我们还将停止让 asyncio.TimeoutError 和 asyncio.InvalidStateError 继承自它们的 concurrent.futures.* 对应项。这些异常共享继承链没有意义。

- bpo-1230540: 添加一个新的 `threading.excepthook()` 函数，用于处理未捕获的 `threading.Thread.run()` 异常。可以重写此函数以控制如何处理未捕获的 `threading.Thread.run()` 异常。

- bpo-36996: 处理 `unittest.mock.patch()` 用作异步函数装饰器的情况。

- bpo-37008: 添加支持对由 `unittest.mock.mock_open()` 产生的 mock 调用 `next()`

- bpo-27737: 在 `email.header` 中允许仅包含空白的头编码 - 由 Batuhan Taskaya 提供

- bpo-36969: PDB command `args` now display positional only arguments. Patch contributed by Rémi Lapeyre.

- bpo-36969: PDB command `args` now display keyword only arguments. Patch contributed by Rémi Lapeyre.

- bpo-36983: 向 `typing.__all__` 添加缺失的名称：`ChainMap`、`ForwardRef`、`OrderedDict` - 由 Anthony Sottile 提供。

- bpo-36972: Add SupportsIndex protocol to the typing module to allow type checking to detect classes that can be passed to `hex()`, `oct()` and `bin()`.

- bpo-32972: 实现 `unittest.IsolatedAsyncioTestCase` 以帮助测试基于 asyncio 的代码。

- bpo-36952: `fileinput.input()` 和 `fileinput.FileInput` 的 bufsize 参数已被移除（自 Python 3.6 起已弃用并被忽略），因此 mode 和 openhook 参数已被设为仅关键字参数。

- bpo-36952: 从 Python 3.3 开始，从 `collections` 导入 ABCs 已被弃用，应从 `collections.abc` 导入。仍然能够从 `collections` 导入的功能原计划在 3.8 中移除，但已推迟到 3.9；文档和 `DeprecationWarning` 已明确说明。

- bpo-36949: 为 WeakSet 对象实现 __repr__。

- bpo-36948: 修复 `urllib.request.URLopener.retrieve()` 中的 `NameError`。补丁由 Karthikeyan Singaravelan 提供。

- bpo-33524: 当 max_line_length 为 0 或 None 且标题包含非 ASCII 字符时，修复电子邮件标题的折叠。由 Licht Takeuchi (@Licht-T) 贡献。

- bpo-24564: `shutil.copystat()` 现在忽略 `os.setxattr()` 上的 `errno.EINVAL`，这可能在复制不支持扩展属性的文件系统上的文件时发生。

  原始由 Giampaolo Rodola 提供补丁，由 Ying Wang 更新。

- bpo-36888: Python 子进程现在可以使用 multiprocessing.process.parent_process 访问其父进程的状态。

- bpo-36921: 弃用 `@coroutine` 以支持 `async def`。

- bpo-25652: 修复 `UserString` 的 `__rmod__` 中的错误 - 由 Batuhan Taskaya 提供。

- bpo-36916: 当 writer.write() 在没有 await 的情况下使用且 writer.drain() 因异常失败时，移除关于任务中未处理异常的消息。

- bpo-36889: 引入 `asyncio.Stream` 类，合并了 `asyncio.StreamReader` 和 `asyncio.StreamWriter` 的功能。`asyncio.Stream` 可以在只读、只写和读写模式下工作。提供 `asyncio.connect()`、`asyncio.connect_unix()`、`asyncio.connect_read_pipe()` 和 `asyncio.connect_write_pipe()` 工厂函数来打开 `asyncio.Stream` 连接。提供 `asyncio.StreamServer` 和 `UnixStreamServer` 来使用 asyncio.Stream API 服务服务器。修改 `asyncio.create_subprocess_shell()` 和 `asyncio.create_subprocess_exec()` 以使用 `asyncio.Stream` 替代已弃用的 `StreamReader` 和 `StreamWriter`。弃用 `asyncio.StreamReader` 和 `asyncio.StreamWriter`。弃用在 asyncio 包之外使用私有类，例如 `asyncio.FlowControlMixing` 和 `asyncio.StreamReaderProtocol`。

- bpo-36845: 在 ipaddress 模块中增加了对 IP 网络和接口构造时的整数前缀的验证。

- bpo-23378: 向 argparser 添加了一个扩展动作。

- bpo-36867: 修复了一个错误，该错误使得 SharedMemoryManager 实例及其父进程使用两个独立的 resource_tracker 进程。

- bpo-23896: 向 lib2to3.pygram 添加了一个语法，其中包含作为函数而非语句的 exec。

- bpo-36895: 函数 `time.clock()` 在 3.3 版本中被弃用，推荐使用 `time.perf_counter()`，并在 3.8 版本中标记为移除，现已被移除。

- bpo-35545: 修复 asyncio 在内部确保主机名解析时丢弃 IPv6 范围的问题。

- bpo-36887: 添加新函数 `math.isqrt()` 来计算整数平方根。

- bpo-34632: 引入 `importlib.metadata` 模块，提供（临时）支持从第三方包读取元数据。

- bpo-36878: When using `type_comments=True` in `ast.parse`, treat `# type: ignore` followed by a non-alphanumeric character and then arbitrary text as a type ignore, instead of requiring nothing but whitespace or another comment. This is to permit formations such as `# type: ignore[E1000]`.

- bpo-36778: `cp65001` 编码（Windows 代码页 65001）成为 `utf_8` 编码的别名。

- bpo-36867: multiprocessing.resource_tracker 替换了 multiprocessing.semaphore_tracker 模块。除了信号量，resource_tracker 还跟踪 shared_memory 段。

- bpo-30262: `sqlite3` 模块的 `Cache` 和 `Statement` 对象不向用户公开。由 Aviv Palivoda 提供补丁。

- bpo-24538: In `shutil.copystat()`, first copy extended file attributes and then file permissions, since extended attributes can only be set on the destination while it is still writeable.

- bpo-36829: 新增 `sys.unraisablehook()` 函数，可被重写以控制如何处理“无法处理的异常”。当异常发生但 Python 无法处理时调用该函数。例如，当析构函数引发异常或垃圾回收期间（`gc.collect()`）。

- bpo-36832: 引入 `zipfile.Path`，一个兼容 pathlib 的包装器，用于遍历 zip 文件。

- bpo-36814: 修复 os.posix_spawnp() 在 file_actions 为 None 时错误地引发 TypeError 的问题。

- bpo-33110: 当 Future 已经完成时，正确处理由 concurrent.futures 的 add_done_callback 添加的函数引发的异常。

- bpo-26903: Limit `max_workers` in `ProcessPoolExecutor` to 61 to work around a WaitForMultipleObjects limitation.

- bpo-36813: 修复 `QueueListener` 在停止时调用 `queue.task_done()` 的问题。由 Bar Harel 提供补丁。

- bpo-36806: 禁止在asyncio包之外创建像StreamReader、StreamWriter、Process这样的异步流对象及其协议。

- bpo-36802: 为StreamWriter.write()和StreamWriter.close()提供同步和异步调用。

- bpo-36801: 在asyncio StreamWriter.drain()调用中正确处理SSL连接的关闭。

- bpo-36785: 实现PEP 574（带有带外缓冲区的pickle协议5）。

- bpo-36772: functools.lru_cache()现在可以直接用作装饰器，除了它现有的作为返回装饰器的函数的用法。

- bpo-6584: 在 `gzip` 模块中添加一个 `BadGzipFile` 异常。

- bpo-36748: 在 `TextIOWrapper` 的C实现中优化了写缓冲。使用ascii、latin1或utf-8编码向``TextIOWrapper``写入ASCII字符串的速度提高了约20%。由Inada Naoki提供补丁。

- bpo-8138: 不要将 `wsgiref.simple_server.SimpleServer` 标记为多线程，因为``wsgiref.simple_server.WSGIServer``是单线程的。

- bpo-22640: `py_compile.compile()` 现在支持静默模式。由Joannah Nanjekye提供补丁。

- bpo-29183: 通过仅在未引发异常时调用 `close()` 方法，修复了 `wsgiref.handlers.BaseHandler` 中的双重异常。

- bpo-36548: 改进了正则表达式标志的repr。

- bpo-36542: 现在可以通过指定 `__text_signature__` 属性来覆盖Python函数的签名。

- bpo-36533: 在fork的子进程中重新初始化logging.Handler锁，而不是尝试在父进程中获取所有锁，仅在子进程中释放。获取/释放模式导致在实现了任何形式的相互依赖的链式日志处理程序的代码中出现死锁，因为无法保证锁的获取顺序。

- bpo-35252: 当使用singledispatch时，如果类型注释无效，抛出TypeError而不是AssertionError。

- bpo-35900: 允许缩减方法返回一个6项元组，其中第6项指定一个自定义的状态设置方法，该方法将被调用以替代常规的 `__setstate__` 方法。

- bpo-35900: 在_pickle.c中为函数和类启用自定义缩减回调注册，使用新的Pickler属性``reducer_override``

- bpo-36368: 修复在交互式会话中发送ctrl-c（KeyboardInterrupt）后导致SharedMemoryManager实例崩溃的错误

- bpo-31904: 修复VxWorks的mmap失败问题

- bpo-27497: `csv.DictWriter.writeheader()` 现在返回底层 `csv.Writer.writerow()` 方法的返回值。补丁由Ashish Nitin Patil贡献。

- bpo-36239: 解析.mo文件时现在忽略以#-#-#-#-#开头和结尾的注释。

- bpo-26707: 使plistlib能够读写作为KeyedArchive文件创建的二进制plist文件。具体来说，这允许plistlib处理0x80令牌作为UID对象。

- bpo-31904: 为VxWorks添加posix模块支持。

- bpo-35125: Asyncio: 在shield中移除外部取消时的内部回调

- bpo-35721: Fix `asyncio.SelectorEventLoop.subprocess_exec()` leaks file descriptors if `Popen` fails and called with `stdin=subprocess.PIPE`. Patch by Niklas Fiekas.

- bpo-31855: `unittest.mock.mock_open()` 结果现在尊重read([size])的参数。补丁由Rémi Lapeyre贡献。

- bpo-35431: 实现 `math.comb()` 函数，返回二项式系数，计算从n个项目中无重复且无序地选择k个项目的方式数。由Yash Aggarwal和Keller Fuchs提供补丁。

- bpo-26660: 修复 `TemporaryDirectory` 清理中的权限错误。之前当在临时目录中创建了不可写或不可搜索的文件或目录时，``TemporaryDirectory.cleanup()``会失败。

- bpo-34271: 向ssl模块添加调试辅助功能。现在可以转储密钥材料并跟踪TLS协议。默认和stdlib上下文也支持SSLKEYLOGFILE环境变量。

- bpo-26467: 添加了AsyncMock以支持使用unittest来模拟asyncio协程。由Lisa Roach提供补丁。

- bpo-33569: dataclasses.InitVar: 暴露用于创建init变量的类型。

- bpo-34424: 修复了当policy.linesep设置为多字符字符串时，包含编码字符串的消息的序列化问题。由Jens Troeger提供补丁。

- bpo-34303: `functools.reduce()` 的性能略有提升。由Sergey Fedoseev提供补丁。

- bpo-33361: 修复了 `codecs.StreamRecoder` 中的一个错误，其中搜索可能会在缓冲区中留下旧数据并破坏后续的读取调用。由Ammar Askar提供补丁。

- bpo-22454: `shlex` 模块现在暴露了 `shlex.join()`，这是 `shlex.split()` 的反向操作。由Bo Bayles提供补丁。

- bpo-31922: `asyncio.AbstractEventLoop.create_datagram_endpoint()`: 当允许广播时，不连接UDP套接字。这允许在UDP广播后接收回复。

- bpo-24882: 更改ThreadPoolExecutor以在创建新线程之前使用现有的空闲线程。

- bpo-31961: 在Windows上的 `subprocess.Popen()` 中添加了对bytes和path-like对象的支持。如果 shell 为 `False`，args 参数现在接受一个 path-like object 和一个包含bytes和path-like对象的序列。executable 参数现在接受bytes和 path-like object。cwd 参数现在接受bytes对象。基于Anders Lorentsen的补丁。

- bpo-33123: `pathlib.Path.unlink` 现在接受一个 missing_ok 参数以避免引发 `FileNotFoundError`。由Robert Buchholz提供补丁。

- bpo-32941: 允许 `mmap.mmap` 对象访问madvise()系统调用（通过 `mmap.mmap.madvise()`）。

- bpo-22102: 添加了对磁盘设置为0的ZIP文件的支持。这类文件通常由Windows上的内置工具在使用ZIP64扩展时创建。由Francisco Facioni提供补丁。

- bpo-32515: trace.py现在可以通过python3 -m trace -t --module module_name来运行模块。

- bpo-32299: 修改了 `unittest.mock.patch.dict()`，使其作为上下文管理器使用时返回被修补的字典。由Vadim Tsander提供补丁。

- bpo-27141: 为 `collections.UserList``和 ``collections.UserDict` 添加了 `__copy__()` 方法，以正确实现对象的浅拷贝。由Bar Harel提供补丁。

- bpo-31829: 现在在协议0的Unicode字符串pickle中，`\r`、`\0``和 ``\x1a` (Windows上的文件结束符) 会被转义。这使得可以从Python 2中以文本模式打开的文件中无损失地加载它们。

- bpo-23395: `_thread.interrupt_main()` 现在在 `SIGINT` 信号被忽略或未被Python处理时避免设置Python错误状态。

### 文档

- bpo-36896: 澄清了一些类型在Python版本间构造函数签名不稳定。

- bpo-36686: 改进了 `asyncio.subprocess_exec` 函数stdin、stdout和stderr参数的文档，指定了哪些值受支持。同时提到不支持作为文本解码。

  添加了一些测试来验证传递给std*参数的各种值是否实际工作。

- bpo-36984: 改进了 `typing` 模块中添加版本引用的说明 - 由Anthony Sottile提供。

- bpo-36868: 新变化现在提到SSLContext.hostname_checks_common_name而不是SSLContext.host_flags。

- bpo-35924: 在 `curses.addstr()` 文档中添加了一条说明，警告由于ncurses的bug，多行字符串可能导致段错误。

- bpo-36783: 根据PEP 495，为Time_FromTimeAndFold和PyDateTime_FromDateAndTimeAndFold添加了C API文档。由Edison Abahurire提供补丁。

- bpo-36797: 更多遗留的distutils文档已被删除，或者更明确地标记为仅在setuptools文档独立覆盖之前保留。

- bpo-22865: Add detail to the documentation on the `pty.spawn` function.

- bpo-35397: 移除弃用并记录urllib.parse.unwrap()。由Rémi Lapeyre提供补丁。

- bpo-32995: 在词汇表中添加了上下文变量。

- bpo-33519: Clarify that `copy()` is not part of the `MutableSequence` ABC.

- bpo-33482: Make `codecs.StreamRecoder.writelines` take a list of bytes.

- bpo-25735: 为func factorial添加了文档，以表明返回整数值。

- bpo-20285: 扩展object.__doc__（文档字符串）以使其更清晰。修改pydoc.py，以便help(object)列出对象方法（对于其他类，help省略了object基类的方法）。

### 测试

- bpo-37069: 修改test_coroutines、test_cprofile、test_generators、test_raise、test_ssl和test_yield_from，使用 `test.support.catch_unraisable_exception()` 而非 `test.support.captured_stderr()`。

- bpo-37098: 修复旧版Linux内核上的test_memfd_create。

- bpo-37081: 使用OpenSSL 1.1.1c进行测试。

- bpo-36829: 添加 `test.support.catch_unraisable_exception()`: 使用 `sys.unraisablehook()` 捕获不可报告异常的上下文管理器。

- bpo-36915: 主regrtest进程现在即使工作进程崩溃或在KeyboardInterrupt（CTRL+c）时被杀死，也会始终移除所有工作进程的临时目录。

- bpo-36719: "python3 -m test -jN ..."现在在工作者进程崩溃（CHILD_ERROR状态）时继续执行下一个测试。以前，测试套件会立即停止。使用--failfast在第一个错误处停止。

- bpo-36816: 更新Lib/test/selfsigned_pythontestdotnet.pem以匹配self-signed.pythontest.net的新TLS证书。

- bpo-35925: 当现代操作系统或发行版默认的OpenSSL策略拒绝连接到证书较弱的服务器时，跳过httplib和nntplib的网络测试。

- bpo-36782: 为 `datetime` 模块中的几个C API函数添加测试。补丁由Edison Abahurire提供。

- bpo-36342: 如果平台缺少可正常工作的sem_open，则在test_venv中修复test_multiprocessing。

### 构建

- bpo-36721: 要将Python嵌入到应用程序中，必须向 `python3-config --libs --embed` 传递一个新的 `--embed` 选项以获取 `-lpython3.8` (将应用程序链接到libpython) 。为了同时支持3.8及更早版本，首先尝试 `python3-config --libs --embed`，如果前一个命令失败，则回退到``python3-config --libs`` (不带 `--embed`) 。

  增加一个 pkg-config `python-3.8-embed` 模块用来将 Python 嵌入到一个应用中: `pkg-config python-3.8-embed --libs` 包含 `-lpython3.8`。 要同时支持 3.8 和旧版本，请先尝试 `pkg-config python-X.Y-embed --libs` 并在此命令失败时回退到 `pkg-config python-X.Y --libs` (即不带 `--embed`) （请将 `X.Y` 替换为 Python 版本号）。

  另一方面，`pkg-config python3.8 --libs``不再包含 ``-lpython3.8`。C扩展不应该链接到libpython（除了在Android上，这种情况由脚本处理）；这一变化是有意为之的向后不兼容。

- bpo-36786: "make install"现在并行运行compileall。

### Windows

- bpo-36965: 包含STATUS_CONTROL_C_EXIT而不依赖于MSC编译器

- bpo-35926: 为Windows更新到OpenSSL 1.1.1b。

- bpo-29883: 为Proactor Event Loop添加对UDP传输的Windows支持。由Adam Meily提供补丁。

- bpo-33407: 对MSVC实现了 `Py_DEPRECATED()` 宏。

### macOS

- bpo-36231: 支持在macOS上在没有安装/usr/include的情况下构建Python。从macOS 10.14开始，系统头文件仅通过Command Line Tools或Xcode应用程序提供的SDK可用。

### IDLE

- bpo-35610: 用.prompt_last_line替换现在冗余的.context_use_ps1。这完成了在 bpo-31858 中开始的更改。

- bpo-37038: 使idlelib.run可运行；添加测试条款。

- bpo-36958: 打印传递给SystemExit或sys.exit()的除None或int之外的任何参数。

- bpo-36807: 保存文件时，调用os.fsync()以便将比特刷新到例如USB驱动器。

- bpo-32411: 在browser.py中，移除按行号的多余排序，因为字典已经是按行号顺序创建的。

### 工具/示例

- bpo-37053: 在Tools/parser/unparse.py中正确处理像u"bar"这样的字符串。由Chih-Hsuan Yen提供补丁。

### C API

- bpo-36763: 实现 PEP 587 "Python初始化配置"。

- bpo-36379: 修复当在C中实现 `__ipow__` 时尝试使用 modulo 参数导致的崩溃。

- bpo-37107: 更新 `PyObject_CallMethodObjArgs()` 和``_PyObject_CallMethodIdObjArgs``以使用 `_PyObject_GetMethod`，避免在许多情况下创建绑定方法对象。由Michael J. Sullivan提供补丁。

- bpo-36974: 实现 PEP 590: Vectorcall: CPython的快速调用协议。这是一个新的协议，用于优化自定义可调用对象的调用。

- bpo-36763: `Py_Main()` 现在在调用 `PyErr_Print()` 时如果当前异常类型是 `SystemExit``则返回退出码而不是调用 ``Py_Exit(exitcode)`。

- bpo-36922: 为行为类似于未绑定方法的对象添加新的类型标志``Py_TPFLAGS_METHOD_DESCRIPTOR``。这些对象支持由 `LOAD_METHOD`/`CALL_METHOD` 操作码给出的优化。参见PEP 590。

- bpo-36728: The `PyEval_ReInitThreads()` function has been removed from the C API. It should not be called explicitly: use `PyOS_AfterFork_Child()` instead.

## Python 3.8.0 alpha 4

发布日期: 2019-05-06

### 安全性

- bpo-36742: 修复urlsplit()中预规范化字符的处理错误。

- bpo-30458: Address CVE-2019-9740 by disallowing URL paths with embedded whitespace or control characters through into the underlying http client request. Such potentially malicious header injection URLs now cause an http.client.InvalidURL exception to be raised.

- bpo-35755: `shutil.which()` 现在如果可用且 `PATH` 环境变量未设置时，会使用 `os.confstr("CS_PATH")`。同时从 `posixpath.defpath` 中移除当前目录。在 Unix 上，如果 `PATH` 环境变量未设置，`shutil.which()` 和 `subprocess` 模块不再在当前目录中搜索可执行文件。

### 核心与内置函数

- bpo-36722: 在调试构建中，导入现在也会查找以发布模式编译的 C 扩展和以稳定 ABI 编译的 C 扩展。

- bpo-32849: 修复 FreeBSD 上的 Python 初始化代码，以正确检测 stdin 文件描述符（fd 0）何时无效。

- bpo-36623: 移除解析器头部和移除 pgen 后缺乏实现的函数声明。

- bpo-20180: 由于 Argument Clinic 的贡献，`dict.pop()` 现在快了 33%。由 Inada Naoki 提供补丁。

- bpo-36611: 调试内存分配器：默认从 Python 内存分配器的调试钩子中禁用 serialno 字段，以减少内存占用 5%。当记录致命内存错误时，启用 `tracemalloc` 以获取内存块分配的跟踪信息，以决定在哪里放置断点。编译 Python 时定义 `PYMEM_DEBUG_SERIALNO` 以恢复该字段。

- bpo-36588: On AIX, `sys.platform` doesn't contain the major version anymore. Always return `'aix'`, instead of `'aix3'` .. `'aix7'`. Since older Python versions include the version number, it is recommended to always use `sys.platform.startswith('aix')`. Contributed by M. Felt.

- bpo-36549: 将 str.capitalize 改为对第一个字符使用标题大小写而不是大写。

- bpo-36540: 实现 PEP 570 (Python 位置参数) 。由 Pablo Galindo 提供补丁。

- bpo-36475: `PyEval_AcquireLock()` and `PyEval_AcquireThread()` now terminate the current thread if called while the interpreter is finalizing, making them consistent with `PyEval_RestoreThread()`, `Py_END_ALLOW_THREADS()`, and `PyGILState_Ensure()`.

- bpo-36504: 修复了 _ctypes.c 中 `PyCArrayType_new()` 的有符号整数溢出问题。

- bpo-20844: 修复了在 Windows 上运行带有编码 cookie 和 LF 行结尾的脚本可能失败的问题。

- bpo-24214: 修复了 UTF-8 增量解码器中 surrogatpass 错误处理程序的支持。

- bpo-36452: Changing `dict` keys during iteration of the dict itself, `keys()`, `values()`, or `items()` will now be detected in certain corner cases where keys are deleted/added so that the number of keys isn't changed. A `RuntimeError` will be raised after `len(dict)` iterations. Contributed by Thomas Perl.

- bpo-36459: 修复了 tokenizer.c 的 `tok_nextc()` 可能导致的双重 `PyMem_FREE()` 问题。

- bpo-36433: 修复了 classmethoddescr_call 中的 TypeError 消息。

- bpo-36430: 修复了 `itertools.count()` 中可能存在的引用泄漏问题。

- bpo-36440: 在 `ParserError` 消息中包含节点名称，而不是数字 ID。由 A. Skrobov 提供补丁。

- bpo-36143: 使用 pgen 从 Grammar 和 Tokens 文件重新生成 `keyword`。由 Pablo Galindo 提供补丁。

- bpo-18372: 在 `pickle` 模块中添加缺失的 `PyObject_GC_Track()` 调用。由 Zackery Spytz 提供补丁。

### 库

- bpo-35952: 修复了当编译器缺失时的 pythoninfo。

- bpo-28238: xml.etree.ElementTree 的 `.find*()` 方法现在可以搜索像 `{*}tag` 和 `{ns}*` 这样的通配符，它们可以匹配任何命名空间中的标签或命名空间中的所有标签。由 Stefan Behnel 提供补丁。

- bpo-26978: `pathlib.path.link_to()` is now implemented. It creates a hard link pointing to a path.

- bpo-1613500: 当向构造函数传递 `inplace=True` 时，`fileinput.FileInput` 现在使用输入文件模式来正确设置输出文件模式（之前是硬编码为 `'w'`）。

- bpo-36734: 修复在 HP-UX 上编译 `faulthandler.c` 的问题。使用 `memset()` 将 `stack_t current_stack` 初始化为零。

- bpo-13611: xml.etree.ElementTree 包增加了对 C14N 2.0 序列化的支持。由 Stefan Behnel 提供补丁。

- bpo-36669: 向 weakref.proxy 添加缺失的矩阵乘法运算符支持。

- bpo-36676: 如果解析器目标定义了回调方法 "start_ns()" 和/或 "end_ns()"，xml.etree.ElementTree 中的 XMLParser() 会向解析器目标提供命名空间前缀上下文。由 Stefan Behnel 提供补丁。

- bpo-36673: xml.etree.ElementTree 中的 TreeBuilder 和 XMLPullParser 增加了对解析注释和处理指令的支持。由 Stefan Behnel 提供补丁。

- bpo-36650: functools.lru_cache() 的 C 版本将带有空 `**kwargs` 字典的调用视为与完全没有关键字的调用不同。这不会导致错误的答案，但确实会触发意外的缓存未命中。

- bpo-28552: Fix `distutils.sysconfig` if `sys.executable` is `None` or an empty string: use `os.getcwd()` to initialize `project_base`. Fix also the distutils build command: don't use `sys.executable` if it is `None` or an empty string.

- bpo-35755: `shutil.which()` and `distutils.spawn.find_executable()` now use `os.confstr("CS_PATH")` if available instead of `os.defpath`, if the `PATH` environment variable is not set. Moreover, don't use `os.confstr("CS_PATH")` nor `os.defpath` if the `PATH` environment variable is set to an empty string.

- bpo-25430: 提高 `IPNetwork.__contains__()` 的性能。

- bpo-30485: xml.etree.ElementTree中的路径表达式现在可以通过传递一个空字符串前缀的默认命名空间，避免为标签使用显式的命名空间前缀（或“{命名空间}标签”符号）。

- bpo-36613: 修复 `asyncio` wait()在异常情况下不删除回调的问题。

- bpo-36598: 修复当代码在追踪下执行时，Mock对象与spec的 `isinstance` 检查。由Karthikeyan Singaravelan提供补丁。

- bpo-18748: 在开发模式(`-X` `dev`)和调试版本中，`io.IOBase` 析构函数现在会记录 `close()` 异常。在发布模式下，这些异常默认是静默的。

- bpo-36575: `_lsprof` 模块现在默认使用与 `time.perf_counter()` 相同的内部计时器。Unix上以前使用 `gettimeofday(2)`。新计时器在大多数Unix平台上具有更好的分辨率，并且由于``perf_counter()``是单调的，计时不再受系统时钟更新的影响。由Inada Naoki提供补丁。

- bpo-33461: 当指定 `encoding` 选项时，`json.loads` 现在会发出 `DeprecationWarning`。由Matthias Bussonnier提供补丁。

- bpo-36559: 为了优化导入时间，random模块现在在seed(version=2)时更倾向于使用精简的内部_sha512模块，而不是hashlib。

- bpo-17561: 将backlog=None设置为socket.create_server的默认值。

- bpo-34373: 修复 `time.mktime()` 在AIX上对1970年之前年份的错误处理。

- bpo-36232: 当尝试打开实际上不存在的现有DBM数据库时，改进错误消息。由Marco Rougeth提供补丁。

- bpo-36546: 添加statistics.quantiles()

- bpo-36050: 优化 `http.client.HTTPResponse.read()` 以处理大响应。补丁由Inada Naoki提供。

- bpo-36522: 如果在 `http.client` 中 debuglevel 设置为>0，打印同一头部名称下多个值的所有值。由Matt Houglum提供补丁。

- bpo-36492: 弃用在应接受任意关键字参数并将其传递给其他函数的函数中，将必需参数（如 func）作为关键字参数传递的做法。现在，如果必需参数作为位置参数传递，则可以向这些函数传递任意关键字参数（即使名称是"self"和"func"）。

- bpo-27181: 添加 statistics.geometric_mean()。

- bpo-30427: `os.path.normcase()` 依赖 `os.fspath()` 来检查其参数的类型。其 `posixpath.normcase()` 和 `ntpath.normcase()` 实现中的冗余检查已被移除。由 Wolfgang Maier 提供补丁。

- bpo-36385: 停止因IPv4八位组可能为八进制而拒绝它们。前导零被忽略，不再假定为指定八进制八位组。八位组始终是十进制数字。八位组仍必须不超过三位数字，包括前导零。

- bpo-36434: 写入ZIP文件时的错误不再阻止其正确关闭。

- bpo-36407: 修复了xml.dom.minidom中CDATA部分写入时的错误缩进。由Vladimir Surjaninov提供补丁。

- bpo-36326: inspect.getdoc()现在可以在__slots__是字典时为成员对象找到文档字符串。

- bpo-36366: Calling `stop()` on an unstarted or stopped `unittest.mock.patch()` object will now return `None` instead of raising `RuntimeError`, making the method idempotent. Patch by Karthikeyan Singaravelan.

- bpo-36348: `imap.IMAP4.logout()` 方法不再静默忽略任意异常。

- bpo-31904: Add time module support and fix test_time faiures for VxWorks.

- bpo-36227: Added support for keyword arguments `default_namespace` and `xml_declaration` in functions ElementTree.tostring() and ElementTree.tostringlist().

- bpo-36004: 新增了替代构造函数 `datetime.date.fromisocalendar()` 和 `datetime.datetime.fromisocalendar()`，这些函数可以从ISO年、周数和工作日构建日期对象；这些是每个类的 `isocalendar` 方法的逆操作。由Paul Ganssle提供补丁。

- bpo-35936: `modulefinder` 不再依赖于已弃用的 `imp` 模块，并且 `modulefinder.ModuleFinder` 的初始化器现在具有不可变的默认参数。由Brandt Bucher提供补丁。

- bpo-35376: `modulefinder` 正确处理了与错误包同名的模块。由Brandt Bucher提供补丁。

- bpo-17396: `modulefinder` 在遇到跟随导入中的语法错误时不再崩溃。由Brandt Bucher提供补丁。

- bpo-35934: Added `create_server()` and `has_dualstack_ipv6()` convenience functions to automate the necessary tasks usually involved when creating a server socket, including accepting both IPv4 and IPv6 connections on the same socket. (Contributed by Giampaolo Rodola in bpo-17561.)

- bpo-23078: 向 `unittest.mock.create_autospec()` 添加了对 `classmethod()` 和 `staticmethod()` 的支持。初始由Felipe Ochoa提供补丁。

- bpo-35416: 修复了distutils中潜在的资源警告。由Mickaël Schoentgen提供补丁。

- bpo-25451: 向 `tkinter.PhotoImage` 添加了透明度方法。由Zackery Spytz提供补丁。

- bpo-35082: 在调用 `unittest.mock.Mock` 上的dir时不再返回已删除的属性。

- bpo-34547: `wsgiref.handlers.BaseHandler` 现在能够优雅地处理客户端连接的突然终止。由Petter Strandmark提供补丁。

- bpo-31658: `xml.sax.parse()` 现在支持 路径类对象。由Mickaël Schoentgen提供补丁。

- bpo-34139: 在绑定前移除旧的unix数据报套接字。

- bpo-33530: Implemented Happy Eyeballs in `asyncio.create_connection()`. Added two new arguments, happy_eyeballs_delay and interleave, to specify Happy Eyeballs behavior.

- bpo-33291: 当在由任意可调用对象创建的方法上调用inspect函数isgeneratorfunction、iscoroutinefunction、isasyncgenfunction时，不再抛出AttributeError。而是返回False。

- bpo-31310: 修复multiprocessing.semaphore_tracker，使其被子进程重用。

- bpo-31292: 修复 `setup.py check --restructuredtext` 对于包含 `include` 指令的文件的支持。

### 文档

- bpo-36625: 从fractions.Fraction的文档字符串中移除过时的注释。

- bpo-30840: 文档化相对导入。

- bpo-36523: 为io.IOBase.writelines()添加文档字符串。

- bpo-36425: 新增文档翻译：简体中文。

- bpo-36345: 避免在 `wsgiref` 文档中使用 `literalinclude` 指令时从``Tools/scripts/serve.py`` 复制代码。由Stéphane Wirtel贡献。

- bpo-36345: 在 `wsgiref` 文档中使用 `Tools/scripts/serve.py` 脚本的代码作为示例。由Stéphane Wirtel贡献。

- bpo-36157: Added Documention for PyInterpreterState_Main().

- bpo-33043: 更新docs.python.org页面，在页面末尾（在'Reporting Bugs'和'About Documentation'之间）添加了一个'Contributing to Docs'链接。在'Found a Bug'页面的文档错误部分添加了额外的链接和信息。

- bpo-35581: @typing.type_check_only现在允许类型存根标记在运行时不可用的函数和类。

- bpo-33832: 在术语表中添加了'magic method'条目。

- bpo-32913: 在正则表达式HOWTO中添加了re.Match.groupdict示例。

### 测试

- bpo-36719: regrtest 现在总是检测不可回收的对象。之前，这个检查只在 `--findleaks` 启用时才进行。现在这个检查也能与 `-jN/--multiprocess N` 一起工作。`--findleaks` 成为 `--fail-env-changed` 的一个弃用别名。

- bpo-36725: 当使用多进程模式 (-jN) 时，regrtest 现在能更好地报告工作进程失败的错误，并且在工作者线程失败或被中断时立即退出。

- bpo-36454: 将 test_time.test_monotonic() 改为仅测试睡眠命令后经过时间的下限而非上限。这避免了在慢速构建机器人上不必要的测试失败。由 Victor Stinner 提供补丁。

- bpo-32424: 提高 xml.etree.ElementTree 的测试覆盖率。由 Gordon P. Hemsley 提供补丁。

- bpo-32424: 修复 xml.etree.ElementTree 中 test_cyclic_gc() 测试的拼写错误。由 Gordon P. Hemsley 提供补丁。

- bpo-36635: Add a new `_testinternalcapi` module to test the internal C API.

- bpo-36629: Fix `test_imap4_host_default_value()` of `test_imaplib`: catch also `errno.ENETUNREACH` error.

- bpo-36611: 当 `tracemalloc` 启用时，修复 `test_sys.test_getallocatedblocks()`。

- bpo-36560: 修复 regrtest 中的引用泄漏检测：在热身期间也计算（引用计数、分配的内存块、文件描述符计数的）增量，以确保在开始检测引用泄漏前一切均已初始化。

- bpo-36565: 当 Python 没有内置的 abc 模块时，修复引用检测（`python3 -m test -R 3:3`）。

- bpo-31904: 将 test_resource 移植到 VxWorks：跳过设置 RLIMIT_FSIZE 和 RLIMIT_CPU 的测试用例。

- bpo-31904: 修复 VxWorks 上的 test_tabnanny：调整 ENOENT 错误消息。

- bpo-36436: 修复 `_testcapi.pymem_buffer_overflow()`：处理内存分配失败。

- bpo-31904: 修复 VxWorks 上的 test_utf8_mode：Python 在 VxWorks 上总是使用 UTF-8。

- bpo-36341: 修复可能在调用 AF_UNIX 套接字的 bind() 时因 PermissionError 而失败的测试。

### 构建

- bpo-36747: 移除陈旧的scriptsinstall Makefile目标。

- bpo-21536: 在Unix上，除了Android和Cygwin，C扩展不再链接到libpython。

  通过共享库的 Python 构建的 C 扩展现在可以被静态链接的 Python 加载了。

  当Python被嵌入时，`libpython` 必须不被 `RTLD_LOCAL` 加载，而应使用 `RTLD_GLOBAL`。之前，使用 `RTLD_LOCAL` 时，已经无法加载未链接到 `libpython` 的C扩展，例如由 `Modules/Setup` 的 `*shared*` 部分构建的标准库的C扩展。

  distutils，python-config 和 python-config.py 已被修改。

- bpo-36707: `./configure --with-pymalloc` 不再向SOABI（sys.implementation.cache_tag）添加 `m` 标志。启用或禁用pymalloc对ABI没有影响。

- bpo-36635: Change `PyAPI_FUNC(type)`, `PyAPI_DATA(type)` and `PyMODINIT_FUNC` macros of `pyport.h` when `Py_BUILD_CORE_MODULE` is defined. The `Py_BUILD_CORE_MODULE` define must be now be used to build a C extension as a dynamic library accessing Python internals: export the PyInit_xxx() function in DLL exports on Windows.

- bpo-31904: 不在VxWorks上构建 `_crypt` 扩展。

- bpo-36618: 当检测到clang编译器时，向CFLAGS添加 `-fmax-type-align=8`。pymalloc内存分配器将内存对齐于8字节。在x86-64上，clang默认期望对齐于16字节，因此使用MOVAPS指令，这可能导致分段错误。指示clang Python限制对齐于8字节以使用MOVUPS指令代替：虽然较慢，但如果内存未对齐于16字节，则不会触发SIGSEGV。遗憾的是，该标志必须添加到 `CFLAGS` 而不仅仅是 `CFLAGS_NODIST`，因为第三方C扩展也可能有相同的问题。

- bpo-36605: `make tags` 和 `make TAGS` 现在也解析 `Modules/_io/*.c` 和 `Modules/_io/*.h`。

- bpo-36465: 发布版本和调试版本现在ABI兼容：定义 `Py_DEBUG` 宏不再隐含 `Py_TRACE_REFS` 宏，后者引入了唯一的ABI不兼容性。`Py_TRACE_REFS` 宏添加了 `sys.getobjects()` 函数和 `PYTHONDUMPREFS` 环境变量，可以通过新的 `./configure --with-trace-refs` 构建选项设置。

- bpo-36577: setup.py 现在再次正确报告缺少的OpenSSL头文件和库。

- bpo-36544: 修复了在 bpo-36146 重构 setup.py 时引入的回归问题。

- bpo-36508: `python-config --ldflags` 不再包含 `LINKFORSHARED` 变量的标志。`LINKFORSHARED` 变量必须仅用于构建可执行文件。

- bpo-36503: 移除了对 "aix3" 和 "aix4" 的引用。由 M. Felt 提供补丁。

### Windows

- bpo-35920: 添加了 platform.win32_edition() 和 platform.win32_is_iot()。添加了对为 Windows ARM32 交叉编译包的支持。跳过在 Windows IoT Core ARM32 上预期不工作的测试。

- bpo-36649: 通过商店安装时，移除注册表键的尾随空格。

- bpo-34144: 修复了 activate.bat，当 chcp.com 在输出中返回点时正确更新代码页。由 Lorenz Mende 提供补丁。

- bpo-36509: 为 Windows IoT ARM 容器添加了预设的 IoT 布局。此布局不包含 UI 组件如 tkinter 或 IDLE。也不包含支持在目标上构建的文件，因为在使用 MSVC 时 Windows ARM32 构建必须交叉编译。

- bpo-35941: ssl模块的enum_certificates函数现在在查询中返回Windows内所有可用证书存储中的证书，而不仅仅是返回系统范围内的证书存储中的证书。这包括来自以下证书存储的证书：本地机器、本地机器企业、本地机器组策略、当前用户、当前用户组策略、服务、用户。ssl.enum_crls()函数以同样的方式更改，以返回Windows证书吊销列表存储中的所有证书吊销列表。

- bpo-36441: 修复了安装调试二进制文件时创建venv的问题。

- bpo-36085: 通过使用安全的DLL搜索路径和添加 `os.add_dll_directory()`，在Windows上启用更好的DLL解析。

- bpo-36010: 将venv标准库模块添加到Windows的nuget分发中。

- bpo-29515: 在Windows上添加以下socket模块常量：IPPROTO_AH IPPROTO_CBT IPPROTO_DSTOPTS IPPROTO_EGP IPPROTO_ESP IPPROTO_FRAGMENT IPPROTO_GGP IPPROTO_HOPOPTS IPPROTO_ICLFXBM IPPROTO_ICMPV6 IPPROTO_IDP IPPROTO_IGMP IPPROTO_IGP IPPROTO_IPV4 IPPROTO_IPV6 IPPROTO_L2TP IPPROTO_MAX IPPROTO_ND IPPROTO_NONE IPPROTO_PGM IPPROTO_PIM IPPROTO_PUP IPPROTO_RDP IPPROTO_ROUTING IPPROTO_SCTP IPPROTO_ST

- bpo-35947: 将当前版本的libffi添加到cpython-source-deps。更改_ctypes以在Windows上使用当前版本的libffi。

- bpo-34060: 在Windows上运行测试套件时报告系统负载。由Ammar Askar提供补丁。基于Jeremy Kloth的先前工作。

- bpo-31512: 随着Windows 10 Creators Update的发布，非特权用户现在可以创建符号链接，只要计算机启用了开发者模式。

### macOS

- bpo-34602: 避免在macOS上使用resource.setrlimit设置堆栈资源限制时失败。这恢复了对 bpo-18075 的早期修复，该修复在macOS上构建解释器可执行文件时强制使用了非默认堆栈大小。

### IDLE

- bpo-36429: 修复启动IDLE时使用pyshell的问题。在顶部添加idlelib.pyshell别名；移除底部的pyshell别名。移除过时的__name__=='__main__'命令。

### 工具/示例

- bpo-14546: 修复Tools/scripts/lll.py中的参数处理问题。

### C API

- bpo-36763: Fix memory leak in `Py_SetStandardStreamEncoding()`: release memory if the function is called twice.

- bpo-36641: `PyDoc_VAR(name)` and `PyDoc_STRVAR(name,str)` now create `static const char name[]` instead of `static char name[]`. Patch by Inada Naoki.

- bpo-36389: 更改Python内存分配器调试钩子(`PyMem_SetupDebugHooks()` 函数)中使用的内部常量 `CLEANBYTE`、`DEADDYTE``和 ``FORBIDDENBYTE` 的值。字节模式 `0xCB`、`0xDB` 和``0xFB``已被替换为 `0xCD`、`0xDD` 和 `0xFD`，以使用与Windows CRT调试 `malloc()` 和``free()``相同的值。

- bpo-36443: Since Python 3.7.0, calling `Py_DecodeLocale()` before `Py_Initialize()` produces mojibake if the `LC_CTYPE` locale is coerced and/or if the UTF-8 Mode is enabled by the user configuration. The LC_CTYPE coercion and UTF-8 Mode are now disabled by default to fix the mojibake issue. They must now be enabled explicitly (opt-in) using the new `_Py_PreInitialize()` API with `_PyPreConfig`.

- bpo-36025: 修复了datetime C API中的一个意外更改，其中 `PyDate_FromTimestamp()` 函数的参数被错误地解释为单个时间戳而非参数元组，这导致现有代码开始引发 `TypeError`。这一不向后兼容的更改仅出现在Python 3.8的alpha版本中。由Paul Ganssle提供的补丁。

- bpo-35810: Modify `PyObject_Init` to correctly increase the refcount of heap- allocated Type objects. Also fix the refcounts of the heap-allocated types that were either doing this manually or not decreasing the type's refcount in tp_dealloc

## Python 3.8.0 alpha 3

发布日期： 2019-03-25

### 安全性

- bpo-36216: 修改 urlsplit()，当 URL 包含在 IDNA 编码（NFKC 规范化）下分解为影响 URL 解析方式的字符时抛出 ValueError。

- bpo-35121: 在使用带有 `http.cookiejar.DefaultCookiePolicy` 策略的 cookiejar 时，不要将没有 Domain 属性的域 A 的 cookies 发送到域 B，当域 A 是域 B 的后缀匹配时。补丁由 Karthikeyan Singaravelan 提供。

### 核心与内置函数

- bpo-36421: 修复 _ctypes.c 的 `PyCArrayType_new()` 中可能出现的双重递减引用。

- bpo-36412: 修复创建新字典时可能发生的崩溃。

- bpo-36398: 修复 `structseq_repr()` 中可能发生的崩溃。

- bpo-36256: 修复 parsermodule 在解析 DFA 中具有两个或更多相同类型标签弧的状态时的错误。由 Pablo Galindo 提供补丁。

- bpo-36365: repr(structseq) 不再限制为 512 字节。

- bpo-36374: 修复 `merge_consts_recursive()` 中可能的空指针解引用。由 Zackery Spytz 提供补丁。

- bpo-36236: 在 Python 初始化时，如果当前目录已被移除，则不再将其前置到 `sys.path` 中。

- bpo-36352: 如果路径过长，Python 初始化现在会失败并报错，而不是静默截断路径。

- bpo-36301: 如果启动时解码 `pybuilddir.txt` 配置文件失败，Python 初始化现在会失败。

- bpo-36333: 修复 _PyRuntimeState_Fini 中的内存泄漏。由 Stéphane Wirtel 贡献。

- bpo-36332: 内置的 `compile()` 现在可以处理包含赋值表达式的 AST 对象。由 Pablo Galindo 提供补丁。

- bpo-36282: 改进了某些内置函数中位置参数过多的错误消息。

- bpo-30040: 现在新创建的空字典使用更少的内存。过去它比通过 `dict.clear()` 创建的空字典使用更多内存。并且空字典的创建和删除速度大约快 2 倍。由 Inada Naoki 提供补丁。

- bpo-36262: 修复了在由 `float(str)`、`complex(str)`、`pickle.load()`、`marshal.load()` 等使用的函数 ``_Py_dg_strtod()``中从字符串到浮点数转换时不太可能出现的内存泄漏问题。

- bpo-36252: 将Unicode数据库更新至12.0.0版本。

- bpo-36218: 修复了在排序包含异构值的列表时出现的段错误。由Rémi Lapeyre和Elliot Gorokhovsky提供补丁。

- bpo-36188: 清理了方法对象和文档中遗留的Python 2未绑定方法处理的痕迹。由Martijn Pieters提供补丁。

- bpo-36124: 添加了一个新的解释器特定的字典，并通过C-API的PyInterpreterState_GetDict()公开。这与PyThreadState_GetDict()并行。不过，扩展模块应继续使用PyModule_GetState()来处理它们自己的内部每个解释器的状态。

- bpo-35975: 向 `ast.parse()` (已文档化) 和 `compile()` (隐藏) 添加了一个``feature_version``标志，允许调整解析器以支持旧版本的语法。特别是，如果 `feature_version``是5或6，则重新启用来自PEP 492的 ``async` 和 `await` 关键字的hack。（对于7或更高版本，这些被无条件视为关键字，但它们仍然是特殊的标记，而不是解析器驱动程序识别的 `NAME` 标记。）

- bpo-31904: 在VxWorks上使用UTF-8作为系统编码。

- bpo-36048: `__index__()` 特殊方法将代替 `__int__()` 用于Python数字到C整数的隐式转换。在隐式转换中使用 `__int__()` 方法已被弃用。

- bpo-35808: 退役pgen并使用修改版的pgen2来生成解析器。由Pablo Galindo提供补丁。

### 库

- bpo-36401: 由pydoc创建的类文档现在有一个单独的部分用于只读属性。

- bpo-36320: typing.NamedTuple() 类已弃用 _field_types 属性，转而使用携带相同信息的 __annotations__ 属性。同时，这两个属性都已从 OrderedDict 转换为常规 dict。

- bpo-34745: 修复 `asyncio` ssl 因循环引用导致的内存问题

- bpo-36324: 向 statistics.NormalDist 添加计算逆累积正态分布的方法。

- bpo-36321: collections.namedtuple() 错误拼写了一个属性名。为了与 typing.NamedTuple 保持一致，属性名应为 "_field_defaults" 而非 "_fields_defaults"。为了向后兼容，现在两种拼写都会创建。错误的拼写未来可能会被移除。

- :issue:`36297": "unicode_internal" 编解码器已被移除。自 Python 3.3 起已弃用。由 Inada Naoki 提供补丁。

- bpo-36298: 在 pyclbr 中当模块无法找到时抛出 ModuleNotFoundError。感谢 'mental' 的 bug 报告。

- bpo-36268: Switch the default format used for writing tars with mod:`tarfile` to the modern POSIX.1-2001 pax standard, from the vendor-specific GNU. Contributed by C.A.M. Gerlach.

- bpo-36285: 修复 array 模块中的整数溢出问题。由 Stephan Hohe 提供补丁。

- bpo-31904: 为 VxWorks 添加 _signal 模块支持。

- bpo-36272: `logging` 不再静默忽略 RecursionError。补丁由 Rémi Lapeyre 贡献。

- bpo-36280: 向 ast.Constant 添加一个 kind 字段。如果字面量有 'u' 前缀（即 Python 2 风格的 unicode 字面量），则为 'u'，否则为 None。

- bpo-35931: `pdb` `debug` 命令现在能够优雅地处理所有异常。

- bpo-36251: 修复用于 stderrprinter 和 re.Match reprs 的格式字符串。由 Stephan Hohe 提供补丁。

- bpo-36235: 修复 `distutils.sysconfig` 的 `customize_compiler()` 中的 `CFLAGS`：当定义了 `CFLAGS` 环境变量时，不再用 `OPT` 变量覆盖 `CFLAGS` 变量。初始补丁由 David Malcolm 编写。

- bpo-35807: 更新ensurepip以安装pip 19.0.3和setuptools 40.8.0。

- bpo-36139: 在关闭 `mmap` 对象时释放GIL。

- bpo-36179: 修复_hashopenssl中两个不太可能的引用泄漏。这些泄漏仅在内存不足的情况下发生。

- bpo-36169: 向statistics.NormalDist添加overlap()方法。计算两个正态分布的重叠系数。

- bpo-36103: 在非Windows平台上，``shutil.copyfileobj()``使用的默认缓冲区大小从16 KiB更改为64 KiB，以减少系统调用开销。由Inada Naoki贡献。

- bpo-36130: 修复当步进到一个没有 `__name__``全局变量的帧时，``pdb` 与 `skip=...` 的问题。由Anthony Sottile提供补丁。

- bpo-35652: shutil.copytree(copy_function=...)错误地传递DirEntry而不是路径字符串。

- bpo-35178: Ensure custom `warnings.formatwarning()` function can receive `line` as positional argument. Based on patch by Tashrif Billah.

- bpo-36106: 解决与libm的sinpi()潜在的名称冲突。由Dmitrii Pasechnik提供补丁。

- bpo-36091: 清理Lib/types中对异步生成器的引用。由Henry Chen提供补丁。

- bpo-36043: `FileCookieJar` 支持 path-like object。由Stéphane Wirtel贡献。

- bpo-35899: 修复Enum以正确处理空字符串和非拉丁字符（如'α'、'א'）而不会崩溃。原始补丁由Maxwell贡献。由Stéphane Wirtel协助。

- bpo-21269: 向模拟调用对象添加 `args` 和 `kwargs` 属性。由Kumar Akshay贡献。

- bpo-30670: `pprint.pp` has been added to pretty-print objects with dictionary keys being sorted with their insertion order by default. Parameter sort_dicts has been added to `pprint.pprint`, `pprint.pformat` and `pprint.PrettyPrinter`. Contributed by Rémi Lapeyre.

- bpo-35843: 为 `_NamespacePath` 实现 `__getitem__`。由Anthony Sottile提供补丁。

- bpo-35802: 清理检查 `os.stat` / `os.lstat` / `os.chmod` 存在的代码，这些始终存在。由 Anthony Sottile 提供补丁。

- bpo-35715: 在不再需要后释放 ProcessPoolExecutor _process_worker 的返回值以释放内存。

- bpo-35493: 在 `multiprocessing.Pool` 中使用 `multiprocessing.connection.wait()` 而不是每 0.2 秒轮询一次工作更新。由 Pablo Galindo 提供补丁。

- bpo-35661: 将 venv 提示存储在 pyvenv.cfg 中。

- bpo-35121: 当请求路径是 cookie 路径属性的前缀匹配但不以 "/" 结尾时，不为请求设置 cookie。由 Karthikeyan Singaravelan 提供补丁。

- bpo-21478: 对使用 `unittest.mock.create_autospec()` 创建的子函数的调用应传播到父函数。由 Karthikeyan Singaravelan 提供补丁。

- bpo-35198: 修复 AIX 上的 C++ 扩展编译。

### 文档

- bpo-36329: 在执行 `make -C Doc/ serve` 时，为 `Tools/scripts/serve.py` 的使用声明 Python 二进制文件的路径。由 Stéphane Wirtel 贡献

- bpo-36138: 改进关于将 datetime.timedelta 转换为标量的文档。

- bpo-21314: 在编程 FAQ 的核心语言部分添加了一个新条目，解释了函数签名中斜杠(/)的用法。由 Lysandros Nikolaou 提供补丁。

### 测试

- bpo-36234: test_posix.PosixUidGidTests: 添加对无效 uid/gid 类型 (str) 的测试。初始补丁由 David Malcolm 编写。

- bpo-29571: 修复 `test_re.test_locale_flag()`: 使用 `locale.getpreferredencoding()` 而不是 `locale.getlocale()` 来获取区域编码。对于某些区域设置，`locale.getlocale()` 返回错误的编码。

- bpo-36123: 修复 test_socket 中的竞争条件。

### 构建

- bpo-36356: 修复导致在配置地址消毒器时构建失败的泄漏问题。

- bpo-36146: 向 `setup.py` 添加 `TEST_EXTENSIONS` 常量，以允许不构建像 `_testcapi` 这样的测试扩展。

- bpo-36146: 修复 macOS 上的 setup.py：仅将 `/usr/include/ffi` 添加到 _ctypes 的包含目录中，而不是所有扩展。

- bpo-31904: 使构建系统能够为 VxWorks RTOS 进行交叉构建。

### Windows

- bpo-36312: 修复了以下代码页的解码器：50220、50221、50222、50225、50227、50229、57002 至 57011、65000 和 42。

- bpo-36264: 在 Windows 上的 `os.path.expanduser` 中不遵循 POSIX `HOME`。由 Anthony Sottile 提供补丁。

- bpo-24643: 修复由于 PC/pyconfig.h 中的 `#define timezone _timezone` 导致的名称冲突。

### IDLE

- bpo-36405: 在 idlelib 中使用字典解包。

- bpo-36396: 移除 idlelib.config.GetHighlight() 的 fgBg 参数。该参数仅使用了两次，并改变了返回类型。

- bpo-36176: 修复 IDLE 自动完成和调用提示弹出窗口的颜色。防止与 Linux 深色主题冲突（并稍微调暗调用提示背景）。

- bpo-23205: 对于 grep 模块，为 findfiles 添加测试，将 findfiles 重构为模块级函数，并重构 findfiles 以使用 os.walk。

- bpo-23216: 为 IDLE 搜索模块添加文档字符串。

- bpo-36152: 移除 colorizer.ColorDelegator.close_when_done 和 .close() 的相应参数。在 IDLE 中，自 2007 年以来，两者始终为 None 或 False。

- bpo-32129: 避免在 macOS 上使用 Tk 8.6 时 IDLE 应用程序图标模糊。由 Kevin Walzer 提供补丁。

- bpo-36096: 在 colorizer 中将类变量重构为实例变量。

- bpo-30348: 将 idlelib.autocomplete 的测试覆盖率提高 30%。由 Louie Lu 提供补丁。

### 工具/示例

- bpo-35132: 修复 python-gdb.py 在 gdb7 上的 py-list 和 py-bt 命令。

- bpo-32217: 修复 Windows 上的冻结脚本。

### C API

- bpo-36381: 当在没有 `PY_SSIZE_T_CLEAN` 的情况下使用 '#' 格式构建或解析值时，引发 `DeprecationWarning`。

- bpo-36142: 整个 coreconfig.h 头文件现在被排除在 Py_LIMITED_API 之外。将函数定义移动到一个新的内部 pycore_coreconfig.h 头文件中。

## Python 3.8.0 alpha 2

发布日期: 2019-02-25

### 核心与内置函数

- bpo-36052: Raise a `SyntaxError` when assigning a value to `__debug__` with the Assignment Operator. Contributed by Stéphane Wirtel and Pablo Galindo.

- bpo-36012: 类变量写入速度提高了一倍。当更新非双下划线属性时，减少了一次不必要的更新槽的调用。

- bpo-35942: 改进了在允许传递 `PathLike` 对象的接口中，从 `__fspath__` 返回无效类型时发出的错误信息，现在它会解释错误的来源。

- bpo-36016: `gc.get_objects` 现在可以接收一个可选参数，指定从哪个代获取对象。由 Pablo Galindo 提供补丁。

- bpo-1054041: 当主解释器由于未捕获的 KeyboardInterrupt 退出时，进程现在会以适当的方式退出，以便其父进程能够检测到是由于 SIGINT 或 ^C 终止的进程。这使得 shell 和批处理脚本能够理解用户要求它们停止。

- bpo-35992: 修复了在具有自定义不可下标元类的类上不调用 `__class_getitem__()` 的问题。

- bpo-35993: 修复了在使用子解释器时 fork 导致的崩溃。由 Stéphane Wirtel 贡献。

- bpo-35991: 修复了 Modules/_randommodule.c 中的潜在双重释放问题。

- bpo-35961: 修复了 slice_richcompare() 中的崩溃：对两个临时内部元组使用强引用而非偷取的引用。

- bpo-35911: 通过添加 `cell.__new__` 方法启用 cell 对象的创建，并在 `Lib/types.py` 中以 CellType 的名称公开 `cell` 类型。由 Pierre Glaser 提供补丁。

- bpo-12822: 当 `pthread_condattr_setclock` 和 `CLOCK_MONOTONIC` 可用时，使用单调时钟进行 `pthread_cond_timedwait`。

- bpo-15248: 编译器现在在可能遗漏逗号之前元组或列表的情况下发出语法警告。

- bpo-35886: PyInterpreterState 的实现已移至内部头文件中（由 Py_BUILD_CORE 保护）。

- bpo-31506: 澄清当 `object.__new__` 和 `object.__init__` 接收到多于一个参数时报告的错误。由 Sanyam Khurana 贡献。

- bpo-35724: 现在保证信号处理相对于主解释器进行。

- bpo-33608: 我们新增了一个内部的 _Py_AddPendingCall()，它相对于提供的解释器进行操作。这使得我们可以使用现有的实现来请求另一个解释器执行在当前解释器中无法完成的工作，比如减少另一个解释器拥有的对象的引用计数。现有的 Py_AddPendingCall() 仅相对于主解释器进行操作。

- bpo-33989: 修复了在 `list.sort()` 中对 `ob_type->tp_richcompare == NULL` 的对象进行排序时可能发生的崩溃。由 Zackery Spytz 提供补丁。

### 库

- bpo-35512: `unittest.mock.patch.dict()` 用作装饰器时，字符串目标在函数调用期间而非装饰器构建期间解析目标。由 Karthikeyan Singaravelan 提供补丁。

- bpo-36018: 添加 statistics.NormalDist，一个用于创建和操作随机变量正态分布的工具。具有一个复合类，将测量数据的平均值和标准差视为单一实体。

- bpo-35904: Added statistics.fmean() as a faster, floating point variant of the existing mean() function.

- bpo-35918: 从 multiprocessing.managers.SyncManager.dict 中移除了损坏的 `has_key` 方法。由 Rémi Lapeyre 贡献。

- bpo-18283: 添加对 bytes 的支持到 `shutil.which()`。

- bpo-35960: 修复 `dataclasses.field()` 丢弃作为元数据传递的空映射对象的问题。

- bpo-35500: 在 `unittest.mock.Mock.assert_called_with()` 断言错误中，将预期和实际的调用参数分别写在单独的行上。由 Susan Su 贡献。

- bpo-35931: `pdb` `debug` 命令现在优雅地处理语法错误。

- bpo-24209: 在http.server脚本中，依赖getaddrinfo根据bind参数绑定到首选地址。现在默认绑定或绑定到一个名称可能会绑定到IPv6或双栈，取决于环境。

- bpo-35321: 设置 `_frozen_importlib` 的 `__spec__.origin` 为frozen，以匹配``_frozen_importlib_external``的行为。由Nina Zakharenko提供补丁。

- bpo-35378: 修复 `multiprocessing.Pool` 内部的一个引用问题，该问题导致如果池在没有显式关闭或终止的情况下被删除，池将保持活动状态。为池迭代器添加了一个新的强引用，将池的生命周期与其迭代器的生命周期联系起来，因此如果池迭代器仍然存活，池不会被销毁。

- bpo-34294: re模块，在罕见情况下修复错误的捕获组。`re.search()`、`re.findall()`、`re.sub()` 和其他扫描字符串寻找匹配的函数，应在两次匹配尝试之间重置捕获组。由Ma Lin提供补丁。

- bpo-35615: `weakref`: 修复在复制WeakKeyDictionary或WeakValueDictionary时由于某些键或值在迭代过程中消失而导致的RuntimeError。

- bpo-35606: 实现 `math.prod()` 作为 `sum()` 的类似函数，返回'start'值（默认：1）乘以数字可迭代对象的乘积。由Pablo Galindo提供补丁。

- bpo-32417: 在 `datetime.datetime` 子类和 `datetime.timedelta` 之间执行算术现在返回与 `datetime.datetime` 子类相同类型的对象。因此，`datetime.datetime.astimezone()` 和替代构造函数如 `datetime.datetime.now()` 和带``tz`` 参数调用的 `datetime.fromtimestamp()` 现在 也 保留它们的子类。

- bpo-35153: 向 `xmlrpc.client.ServerProxy`、`xmlrpc.client.Transport` 和 `xmlrpc.client.SafeTransport` 添加 headers 可选仅关键字参数。补丁由Cédric Krier提供。

- bpo-34572: Fix C implementation of pickle.loads to use importlib's locking mechanisms, and thereby avoid using partially-loaded modules. Patch by Tim Burgess.

### 文档

- bpo-36083: 修复手册页 Synopsis 中 --check-hash-based-pycs 选项的格式。

- bpo-36007: 将最低 sphinx 版本提升至 1.8。由 Anthony Sottile 提供补丁。

- bpo-22062: 更新 pathlib 的文档和文档字符串。原始由 Mike Short 提供补丁。

### 测试

- bpo-27313: 避免 test_ttk_guionly ComboboxTest 在 macOS Cocoa Tk 上失败。

- bpo-36019: 添加 test.support.TEST_HTTP_URL 并用此新常量替换对 http://www.example.com 的引用。由 Stéphane Wirtel 贡献。

- bpo-36037: 为严格的 OpenSSL 配置（如 RHEL8 严格加密策略）修复 test_ssl。如果需要，为服务器 SSL 上下文的最低 TLS 版本使用较旧的 TLS 版本，以测试比默认最低 TLS 版本更旧的 TLS 版本。

- bpo-35798: 添加了 `test.support.check_syntax_warning()`。

- bpo-35505: 使 test_imap4_host_default_value 不依赖于本地 IMAP 服务器是否运行。

- bpo-35917: multiprocessing：为 SyncManager 和 SharedMemoryManager 类提供单元测试 + 所有应该由它们支持的共享类型。（由 Giampaolo Rodola 提供补丁）

- bpo-35704: 跳过 `test_shutil.test_unpack_archive_xztar` 以防止在 32 位 AIX 上当 MAXDATA 设置小于 0x20000000 时发生 MemoryError。

  由 Michael Felt (aixtools) 提供补丁

- bpo-34720: 断言 m_state != NULL 以模仿 GC 遍历函数，这些函数在模块状态尚未创建时不正确处理模块创建。

### Windows

- bpo-35976: 在 PCBuild 的 Windows 构建文件中添加 ARM 构建支持。

- bpo-35692: `pathlib` 在检查未准备好驱动器上的文件和目录存在时不再引发异常

- bpo-35872: 在虚拟环境中调用 venv 时使用基础 Python 可执行文件

- bpo-35873: 防止 venv 路径被子进程继承

- bpo-35299: 修复在PGO分析期间sysconfig对源目录的检测以及distutils对pyconfig.h的处理。

### IDLE

- bpo-24310: IDLE —— 文档设置对话框字体标签示例。

- bpo-35833: 修订IDLE文档关于发送到Shell的控制码。添加一个代码示例块。

- bpo-35689: 为colorizer.py添加文档字符串和单元测试。

## Python 3.8.0 alpha 1

发布日期: 2019-02-03

### 安全性

- bpo-35746: [CVE-2019-5010] Fix a NULL pointer deref in ssl module. The cert parser did not handle CRL distribution points with empty DP or URI correctly. A malicious or buggy certificate can result into segfault. Vulnerability (TALOS-2018-0758) reported by Colin Read and Nicolas Edet of Cisco.

- bpo-34812: The `-I` command line option (run Python in isolated mode) is now also copied by the `multiprocessing` and `distutils` modules when spawning child processes. Previously, only `-E` and `-s` options (enabled by `-I`) were copied.

- bpo-34791: 当sys.flags.ignore_environment由-E或-I参数设置时，xml.sax和xml.dom.domreg不再使用环境变量来覆盖解析器实现。

- bpo-17239: xml.sax和xml.dom.minidom解析器默认不再处理外部实体。外部DTD和ENTITY声明不再加载文件或创建网络连接。

- bpo-34623: CVE-2018-14647: The C accelerated _elementtree module now initializes hash randomization salt from _Py_HashSecret instead of libexpat's default CSPRNG.

- bpo-34405: 更新Windows构建的OpenSSL至1.1.0i版本。

- bpo-33871: 修复在macOS上 `os.sendfile()` 中发送文件部分的问题。使用 trailers 参数可能导致从输入文件发送的字节数多于指定数量。

- bpo-32533: 修复_ssl中错误处理的线程安全性。

- bpo-33136: Harden ssl module against LibreSSL CVE-2018-8970. X509_VERIFY_PARAM_set1_host() is called with an explicit namelen. A new test ensures that NULL bytes are not allowed.

- bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。

- bpo-32981: Regexes in difflib and poplib were vulnerable to catastrophic backtracking. These regexes formed potential DOS vectors (REDOS). They have been refactored. This resolves CVE-2018-1060 and CVE-2018-1061. Patch by Jamie Davis.

- bpo-28414: ssl 模块现在允许用户在使用 SNI 时，自行执行 IDN 的编码与解码操作。

### 核心与内置函数

- bpo-35877: 允许在 while 语句中的赋值表达式中省略圆括号。补丁由 Karthikeyan Singaravelan 提交。

- bpo-35814: 允许在带有类型注解的赋值中使用与普通赋值相同的右侧表达式。特别地，现在允许写作``x: Tuple[int, int] = 1, 2`` （右侧不必括号）。

- bpo-35766: 在 ast 模块中添加了解析 PEP 484 类型注释的选项。（默认关闭）本更改合并了第三方分支项目 [typed_ast](https://github.com/python/typed_ast) 的关键功能。

- bpo-35713:重新组织 Python 的初始化流程，以便更早地启用异常处理机制和 sys.stderr。

- bpo-33416: 向 Python AST 节点添加结束行和结束列位置信息。这是一个 C 级别的向后不兼容的更改。

- bpo-35720: 修复了 Modules/main.c 中 pymain_parse_cmdline_impl 函数的一个小内存泄漏。

- bpo-35634: `func(**kwargs)` 现在会在 `kwargs` 是一个包含多个相同键的映射时引发错误。自 Python 3.6 起，当其他关键字参数在 `**kwargs` 之前传递时，已经会引发错误。

- bpo-35623: 修复了排序非常长的列表时的一个崩溃。由 Stephan Hohe 提供补丁。

- bpo-35214: 添加了 clang Memory Sanitizer 构建工具，以解决来自 posix、socket、time、test_io 和 test_faulthandler 的误报。

- bpo-35560: Fix an assertion error in `format()` in debug build for floating point formatting with "n" format, zero padding and small width. Release build is not impacted. Patch by Karthikeyan Singaravelan.

- bpo-35552: 在 `PyUnicode_FromFormat()` 中的格式字符 `%s` 和 `%V` 以及 `PyBytes_FromFormat()` 中的 `%s` 不再读取超过 precision 指定限制的内存。

- bpo-35504: 修复了删除某些属性时的段错误和 `SystemError`s。由 Zackery Spytz 提供补丁。

- bpo-35504: 修复了删除 OSError 的 characters_written 属性时出现的 SystemError。

- bpo-35494: 改进了 f-string 中括号不匹配的语法错误消息。

- bpo-35444: 修复了在无法查找内置 "getattr" 时，pickling 方法中的错误处理。加快了 pickling 迭代器的速度。

- bpo-35436: 修复了内存分配错误处理中的多个问题。由 Zackery Spytz 提供补丁。

- bpo-35423: 将 eval 循环中的信号处理触发器与 "pending calls" 机制分离。没有语义上的变化，性能差异也不显著。

- bpo-35357: unittest.mock._Call 和 unittest.mock.MagicProxy 的内部属性名（name, parent & from_kall）现在以 _mock_ 为前缀，以防止与广泛使用的对象属性冲突。修复了测试函数名称中的小错字。

- bpo-35372: 修复了对于长度超过 2 GiB 且包含不可解码字节的输入的代码页解码器。

- bpo-35336: 修复 PYTHONCOERCECLOCALE=1 环境变量：仅当 LC_CTYPE 区域设置为 "C" 时才强制使用 C 区域设置。

- bpo-31241: 列表推导式、生成器表达式和元组的 AST 节点的 lineno 和 col_offset 属性现在指向开括号或方括号。对于没有括号的元组，它们指向第一个项目的位置。

- bpo-33954: 对于 `str.format()`、`float.__format__()` 和 `complex.__format__()` 方法，当使用 "n" 格式化器时处理非 ASCII 小数点。

- bpo-35269: Fix a possible segfault involving a newly-created coroutine. Patch by Zackery Spytz.

- bpo-35224: 实现了 PEP 572 (赋值表达式) 。由 Emily Morehouse 提供补丁。

- bpo-32492: Speed up `namedtuple` attribute access by 1.6x using a C fast-path for the name descriptors. Patch by Pablo Galindo.

- bpo-35214: 修复了在解析字符串末尾被截断的Unicode转义序列（如 `'\N'`）时超出边界的内存访问问题。它会读取超出内存分配末尾的一个字节。

- bpo-35214: 解释器和扩展模块已添加注释，以便它们在clang的内存清理器下正常工作。新增了一个配置标志--with-memory-sanitizer，使得执行此类测试构建更加容易。

- bpo-35193: 修复了字节码窥孔优化器中的一个偏差一个错误，该错误在移除不可达代码时可能会读取数组边界之外的字节。这个错误在Python 3.6和3.7的每个版本中都存在，直到现在。

- bpo-35169: 改进了禁止赋值的错误消息。

- bpo-34022: 修复了在 `zipimport` 中处理基于哈希的字节码文件的问题。由Elvis Pranskevichus提供补丁。

- bpo-28401: 调试构建将不再尝试导入为ABI构建的扩展模块，因为它们从一开始就不兼容。补丁由Stefano Rivera提供。

- bpo-29341: 在 `os` 方法的文档字符串中明确说明，路径样式的对象也被接受作为输入参数。

- bpo-35050: `socket`: 修复了 `AF_ALG` 名称和类型长度检查中的一个偏差一个错误。

- bpo-29743: 在 `ctypes.Array` 子类中，对于负的 `_length_`，现在会引发 `ValueError` 而不是 `OverflowError`。对于非整数的 `_length_`，也会引发 `TypeError` 而不是 `AttributeError`。原始由Oren Milman提供补丁。

- bpo-16806: 修复了多行字符串标记的 `lineno` 和 `col_offset`。

- bpo-35029: 在代码生成时作为异常引发的 `SyntaxWarning` 现在将被替换为 `SyntaxError`，以便更好地报告错误。

- bpo-34983: 在 symtable 模块中公开 `symtable.Symbol.is_nonlocal()` 方法。由 Pablo Galindo 提供补丁。

- bpo-34974: `bytes` 和 `bytearray` 构造函数不再将意外异常（如 `MemoryError` 和 `KeyboardInterrupt`）转换为 `TypeError`。

- bpo-34939: 允许在模块命名空间中使用在注解前声明为全局的注解名称。由 Pablo Galindo 提供补丁。

- bpo-34973: 修复了在 `bytes()` 中当 `list` 参数在迭代时被修改导致的崩溃。

- bpo-34876: AST 中装饰函数和类的 lineno 和 col_offset 属性现在指向对应的 `def`、`async def` 和 `class` 的位置，而不是第一个装饰器的位置。这使得在跟踪时行号报告更加准确。这是唯一一种子 AST 节点的位置可能先于父 AST 节点位置的情况。

- bpo-34879: 修复了 bytesobject.c 中可能的空指针解引用问题。由 Zackery Spytz 提供补丁。

- bpo-34784: 修复了 PyStructSequence_NewType 的实现，以便创建堆分配的 StructSequences。

- bpo-32912: 现在对于字符串和字节字面量中的无效转义序列，会发出 `SyntaxWarning` 而不是 `DeprecationWarning`。

- bpo-34854: 修复了在编译包含有关键字唯一参数但没有默认值的 lambda 的字符串注解时的崩溃问题。

- bpo-34850: 当身份检查（`is` 和 `is not`）与某些类型的字面量（例如字符串、整数）一起使用时，编译器现在会产生一个 `SyntaxWarning`。这些在 CPython 中可能偶然工作，但语言规范不保证。警告建议用户改用相等测试（`==` 和 `!=`）。

- bpo-34824: 修复了 Modules/_ssl.c 中可能的空指针解引用问题。补丁由 Zackery Spytz 提供。

- bpo-30156: The C function `property_descr_get()` uses a "cached" tuple to optimize function calls. But this tuple can be discovered in debug mode with `sys.getobjects()`. Remove the optimization, it's not really worth it and it causes 3 different crashes last years.

- bpo-34762: 修复contextvars C API以使用PyObject*指针类型。

- bpo-34751: 元组的哈希函数现在基于xxHash，这在（以前的）病态情况下提供了更好的碰撞结果。此外，在64位系统上，它总体上改善了元组的哈希。由Jeroen Demeyer提供补丁，Tim Peters做出了重要贡献。

- bpo-34735: 修复Modules/timemodule.c中的内存泄漏。由Zackery Spytz提供补丁。

- bpo-34683: 修复了一个错误，其中一些SyntaxError错误指向了位置偏移一位的位置。

- bpo-34651: 只允许主解释器进行fork。这避免了影响主解释器的可能性，这对运行时的操作至关重要。

- bpo-34653: 移除未使用的函数PyParser_SimpleParseStringFilename。

- bpo-32236: 警告如果以二进制模式和 `buffering=1` 调用 `open()`，则不支持行缓冲。

- bpo-34641: 进一步限制函数调用中关键字参数左侧的语法。特别是，``f((keyword)=arg)``现在是不允许的。

- bpo-34637: 使 sum() 的 start 参数作为关键字参数可见。

- bpo-1621: 在执行集合哈希表调整大小时，不假定有符号整数溢出行为（C未定义行为）。

- bpo-34588: 修复回溯格式化中递归调用修剪特性的一个偏移一位的错误。

- bpo-34485: 在Windows上，LC_CTYPE现在在启动时设置为用户首选区域设置。以前，LC_CTYPE区域设置在启动时为"C"，但在调用setlocale(LC_CTYPE, "")或setlocale(LC_ALL, "")时会更改。

- bpo-34485: 在POSIX区域设置（当C区域未被强制且UTF-8模式被禁用时），像sys.stdout这样的标准流现在使用"surrogateescape"错误处理程序，而不是"strict"。

- bpo-34485: 修复像sys.stdout这样的标准流的错误处理程序：PYTHONIOENCODING=":"现在被忽略，而不是将错误处理程序设置为"strict"。

- bpo-34485: Python现在使用C代码获取区域编码，以初始化像sys.stdout这样的标准流的编码。此外，编码现在初始化为Python编解码器名称，以获取规范化的编码名称并确保编解码器被加载。这一改变默认避免了在启动时导入_bootlocale和_locale模块。

- bpo-34527: 在FreeBSD上，如果LC_CTYPE区域是"POSIX"，Py_DecodeLocale()和Py_EncodeLocale()现在也会强制使用ASCII编码，而不仅仅是当LC_CTYPE区域是"C"时。

- bpo-34527: UTF-8模式现在也由"POSIX"区域启用，而不仅仅是"C"区域。

- bpo-34403: 在HP-UX上，如果使用C或POSIX区域设置，sys.getfilesystemencoding()现在返回"ascii"而不是"roman8"（当UTF-8模式被禁用且C区域未被强制时）。

- bpo-34523: Python文件系统编码现在在Python初始化期间更早地读取。

- bpo-12458: 回溯现在显示多行表达式中子表达式的正确行号。回溯现在显示多行表达式的第一行的行号，而不是最后一个子表达式的行号。

- bpo-34408: 防止 `PyInterpreterState_New()` 中的空指针解引用和资源泄漏。

- bpo-34400: 修复parsetok.c中的未定义行为。由Zackery Spytz提供补丁。

- bpo-33073: 向ints添加了as_integer_ratio，以使它们更易于与floats互操作。

- bpo-34377: 更新valgrind抑制列表，使用 `_PyObject_Free`/`_PyObject_Realloc` 代替``PyObject_Free``/`PyObject_Realloc`。

- bpo-34353: Added the "socket" option in the `stat.filemode()` Python implementation to match the C implementation.

- bpo-34320: 修复了 `dict(od)` 未复制OrderedDict的迭代顺序的问题。

- bpo-34113: 修复了在调试版本中，当操作码堆栈被调整为负数时崩溃的问题。由Constantin Petrisor提供补丁。

- bpo-34100: 编译器现在递归合并元组和冻结集合中的常量。代码属性如 `co_names` 也被合并。

- bpo-34151: 列表连接、重复和切片操作的性能略有提升。由Sergey Fedoseev提供补丁。

- bpo-34170: -X dev: 现在即使启用了开发者模式，也可以使用PYTHONMALLOC覆盖内存分配器。

- bpo-33237: 改进了部分初始化模块的 `AttributeError` 消息。

- bpo-34149: 修复min和max函数在key为None时获取默认行为的问题。

- bpo-34125: 当给出 `**kwargs` 时，现在可以对未绑定的内置方法进行性能分析。

- bpo-34141: 优化了原子类型（None, bool, int, float, bytes, str）的pickling。

- bpo-34126: 修复了在分析某些无效调用的未绑定方法时的崩溃问题。由Jeroen Demeyer提供补丁。

- bpo-24618: 修复了在创建代码对象时，当varnames元组过小或参数计数过大时读取无效内存的问题。

- bpo-34068: 在 `io.IOBase.close()` 中，确保在存在活动异常时不设置 `closed` 属性。由Zackery Spytz和Serhiy Storchaka提供补丁。

- bpo-34087: 修复了将unicode转换为数值时的缓冲区溢出问题。

- bpo-34080: 修复了编译器在词法分析过程中引发一些不常见错误时的内存泄漏问题。

- bpo-34066: 在 `with open()` 中，禁止在调用 `open()` 和进入 with 块之间通过Ctrl-C中断。

- bpo-34042: 修复dict.copy()以维持正确的总引用计数（如sys.gettotalrefcount()报告的那样）。

- bpo-33418: 修复了函数对象在创建引用循环时潜在的内存泄漏问题。

- bpo-33985: 实现 contextvars.ContextVar.name 属性。

- bpo-33956: 将集成的 Expat 库更新至版本 2.2.5。

- bpo-24596: 在调用 `PyErr_Print()` 之前，先在 `PyRun_SimpleFileExFlags()` 中减少模块对象的引用计数。由 Zackery Spytz 提供补丁。

- bpo-33451: 在调用 `PyEval_EvalCode()` 之前关闭直接执行的 pyc 文件。

- bpo-1617161: `BuiltinMethodType` 实例（内置类的方法）的哈希现在依赖于 __self__ 的身份哈希而非其值。`ModuleType` 和 `MethodWrapperType` 实例（用户定义类的方法和一些内置类的方法如 `str.__add__`）的哈希和相等性现在依赖于 __self__ 的身份哈希和相等性而非其值。`MethodWrapperType` 实例不再支持排序。

- bpo-33824: 修复 "LC_ALL=C python3.7 -V"：在读取 Python 配置后编码更改时正确重置命令行解析器。

- bpo-33803: 修复 hamt.c 中的一个崩溃问题，该问题是由于为一个对象启用 GC 跟踪时，其所有字段未设置为 NULL 引起的。

- bpo-33738: 修复了七个与有限 API 不兼容的宏，并将宏 `PyIter_Check()`、`PyIndex_Check()` 和 `PyExceptionClass_Name()` 作为函数添加。添加了一个用于自动检查宏的脚本。

- bpo-33786: 修复异步生成器以正确处理 athrow() 中的 GeneratorExit。

- bpo-30167: `PyRun_SimpleFileExFlags` 除了移除模块中的 `__file__` 外，还移除了 `__cached__`。

- bpo-33706: 修复解析命令行选项时 Python 初始化过程中的崩溃问题。感谢 Christoph Gohlke 的报告和修复！

- bpo-33597: 将 `PyGC_Head` 的大小从 3 个字减少到 2 个字。

- bpo-30654: 修复了即使之前设置了自定义处理程序，在解释器关闭时 SIGINT 处理程序重置为 SIG_DFL 的问题。由 Philipp Kerling 提供补丁。

- bpo-33622: 修复了当垃圾收集器无法将带有 `__del__` 方法或被其引用的对象添加到 `gc.garbage` 列表时的内存泄漏问题。现在可以在设置异常时调用 `PyGC_Collect()`，并保留异常。

- bpo-33462: 使字典和字典视图可逆。由 Rémi Lapeyre 提供补丁。

- bpo-23722: 当自定义元类没有在传递给 `type.__new__` 的命名空间中提供 `__classcell__` 条目时，现在会引发 `RuntimeError`。在 Python 3.6--3.7 中会发出 `DeprecationWarning`。

- bpo-33499: 添加了 `PYTHONPYCACHEPREFIX` 环境变量和 `-X` `pycache_prefix` 命令行选项，用于设置写入模块字节码缓存文件的备用根目录。

- bpo-25711: `zipimport` 模块已用纯 Python 重写。

- bpo-33509: 修复了 warnings.warn_explicit() 的 module_globals 参数：如果 module_globals 不是字典，不会崩溃。

- bpo-31849: 修复了 pyhash.c 中的有符号/无符号比较警告。

- bpo-33475: 修复了将注释转换为字符串时的杂项错误，并优化了字符串表示中的括号。

- bpo-20104: Added support for the `setpgroup`, `resetids`, `setsigmask`, `setsigdef` and `scheduler` parameters of `posix_spawn`. Patch by Pablo Galindo.

- bpo-33391: 修复了 set_symmetric_difference() 中的内存泄漏。

- bpo-33363: 对于异步函数外的 `async with` 和 `async for` 语句，现在会引发 SyntaxError。

- bpo-28055: 修复了 siphash24() 中的未对齐访问。由 Rolf Eike Beer 提供补丁。

- bpo-33128: 修复了一个导致 PathFinder 在 sys.meta_path 上出现两次的 bug。由 Pablo Galindo Salgado 提供补丁。

- bpo-33331: 现在在解释器关闭时，最后导入的模块会首先被清除。

- bpo-33312: 通过调整内部结构 _dictkeysobject 共享键结构的声明方式，修复了 dictobject.c 中的 clang ubsan（未定义行为消毒剂）警告。

- bpo-33305: 改进了无效数值字面量的语法错误提示信息。

- bpo-33306: 改进了不平衡括号的语法错误提示信息。

- bpo-33234: 当输入长度已知时，列表构造函数会预分配大小而不会过度分配。

- bpo-33270: 为所有匿名代码对象内部化名称。由Zackery Spytz提供补丁。

- bpo-30455: 现在，与令牌相关的C和Python代码以及文档都从一个单一源文件 `Grammar/Tokens` 生成。

- bpo-33176: 向memoryviews添加了一个 `toreadonly()` 方法。

- bpo-33231: 修复了 `normalizestring()` 中潜在的内存泄漏问题。

- bpo-33205: 将字典增长函数从 `round_up_to_power_2(used*2+hashtable_size/2)` 更改为 `round_up_to_power_2(used*3)`。 在之前版本中，字典仅在 `used == 0` 时才收缩。 现在字典有更多机会被收缩。

- bpo-29922: 改进了'async with'中当 `__aenter__()` 或 `__aexit__()` 返回不可等待对象时的错误消息。

- bpo-33199: 修复了在从键共享字典复制时，字典实现中的 `ma_version_tag` 未初始化的问题。

- bpo-33053: 当使用-m开关时，sys.path[0]现在明确扩展为 起始 工作目录，而不是保留为空路径（允许在导入时从当前工作目录导入）。

- bpo-33138: 更改了不可pickle和不可复制类型的标准错误消息。现在显示"cannot pickle"而不是"can't pickle"或"cannot serialize"。

- bpo-33018: 提高了当 `issubclass()` 的第一个参数是非类而第二个参数是抽象基类时引发错误的一致性。由Josh Bronson提供补丁。

- bpo-33083: `math.factorial` 不再接受非int-like的参数。由Pablo Galindo提供补丁。

- bpo-33041: 添加了新操作码 `END_ASYNC_FOR` 并修复了以下问题：

  - 设置全局 `StopAsyncIteration` 不再破坏 `async for` 循环。

  - 跳入一个 `async for` 循环现在被禁止了。

  - 跳出一个 `async for` 循环不再会破坏堆栈了。

- bpo-25750: 修复了由于描述符从类中删除自身时`type_getattro()`中的引用计数错误导致的Python罕见崩溃。由Jeroen Demeyer提供补丁。

- bpo-33041: 修复了带有复杂目标的“async for”的字节码生成问题。现在，在赋值或解包时引发的StopAsyncIteration将被传播，而不是停止迭代。

- bpo-33026: 通过设置f_lineno修复了跳出“with”块的问题。

- bpo-33005: 修复了在使用自定义内存分配器（例如：使用PYTHONMALLOC环境变量）时fork导致的崩溃。_PyGILState_Reinit()和_PyInterpreterState_Enable()现在使用默认的RAW内存分配器在fork时分配新的解释器互斥锁。

- bpo-32911: 由于在下游beta测试期间发现的意外兼容性问题，恢复了 bpo-29463。从Module、ClassDef、FunctionDef和AsyncFunctionDef ast节点中移除了在3.7a1中添加的`docstring` 字段。docstring表达式被恢复为其主体的第一条语句。基于Inada Naoki的补丁。

- bpo-17288: 防止从'return'和'exception'跟踪事件跳转。

- bpo-32946: 如果模块不是包，从已导入模块中使用“from ... import ...”导入名称现在快30%。

- bpo-32932: 当`__all__`中有非str对象时，使错误消息更加揭示问题。

- bpo-32925: 优化了对由非常量组成的字面列表的迭代和包含测试：`x in [a, b]`和`for x in [a, b]`。所有元素均为常量的情况已经被优化。

- bpo-32889: 更新Valgrind抑制列表，以考虑`Py_ADDRESS_IN_RANG`重命名为`address_in_range`的情况。

- bpo-32836: 在列表/字典/集合推导式的情况下不使用临时变量。

- bpo-31356: 移除了在 bpo-31356 中添加的新API（gc.ensure_disabled()上下文管理器）。

- bpo-32305: 对于命名空间包，确保`__file__`和`__spec__.origin`都被设置为None。

- bpo-32303: 确保对于命名空间包，`__spec__.loader` 与 `__loader__` 相匹配。

- bpo-32711: 修复 Python/ast_unparse.c 中的警告信息。由 Stéphane Wirtel 提供补丁。

- bpo-32583: 修复在使用自定义解码错误处理程序时，内置 Unicode 解码器可能因越界写入错误而崩溃的问题。

- bpo-32489: 现在允许在 `finally` 子句中使用 `continue` 语句。

- bpo-17611: 通过将展开块栈的逻辑移至编译器，简化了解释器循环。编译器现在会为调整值栈和调用 `break`、`continue` 及 `return` 的清理代码发出明确的指令。

  移除了操作码 `BREAK_LOOP`、`CONTINUE_LOOP`、`SETUP_LOOP` 和 `SETUP_EXCEPT`。新增了操作码 `ROT_FOUR`、`BEGIN_FINALLY`、`CALL_FINALLY` 和 `POP_FINALLY`。改变了 `END_FINALLY` 和 `WITH_CLEANUP_START` 的行为。

- bpo-32285: 新增函数 unicodedata.is_normalized，可用于检查字符串是否符合特定的正规形式。

- bpo-10544: 现在禁止在推导式和生成器表达式中使用 yield 表达式，除了最外层可迭代对象的表达式。

- bpo-32117: 现在允许在 yield 和 return 语句中不加括号进行可迭代对象的解包，例如 `yield 1, 2, 3, *rest`。感谢 David Cuthbert 的更改和 Jordan Chapman 增加的测试。

- bpo-31902: 修复 ast 节点 `ast.AsyncFor`、`ast.AsyncFunctionDef` 和 `ast.AsyncWith` 的 `col_offset` 属性。之前，`col_offset` 指向 `async` 后的关键字。

- bpo-25862: 修复 `io.TextIOWrapper` 的 `tell()` 方法中的断言失败。由 Zackery Spytz 提供补丁。

- bpo-21983: Fix a crash in `ctypes.cast()` in case the type argument is a ctypes structured data type. Patch by Eryk Sun and Oren Milman.

- bpo-31577: Fix a crash in `os.utime()` in case of a bad ns argument. Patch by Oren Milman.

- bpo-29832: 从各种socket错误消息中移除对'getsockaddrarg'的引用。补丁由Oren Milman提供。

### 库

- bpo-35845: 向memoryview.tobytes()添加'order'参数。

- bpo-35864: collections.namedtuple的_asdict()方法现在返回一个常规的dict而不是OrderedDict。

- bpo-35537: An ExitStack is now used internally within subprocess.POpen to clean up pipe file handles. No behavior change in normal operation. But if closing one handle were ever to cause an exception, the others will now be closed instead of leaked. (patch by Giampaolo Rodola)

- bpo-35847: RISC-V需要CTYPES_PASS_BY_REF_HACK。修复了ctypes Structure的test_pass_by_value测试。

- bpo-35813: 向multiprocessing添加了共享内存子模块，以避免进程间需要序列化。

- bpo-35780: 修复在递归、可重入或多线程代码中出现的lru_cache()错误。这些错误可能导致孤儿链接和缓存被捕获在指定最大链接数更少的状态中。修复了负maxsize的处理，应该被当作零处理。修复了切换“满”状态标志时的错误。修复了遇到错误时链接的错误排序。同步了C代码和纯Python代码，针对具有单个位置参数的函数的空间节省路径。在这种常见情况下，lru缓存条目的空间开销减少了近一半。修复了缓存未命中的计数。在错误情况下，未命中计数与实际调用底层用户函数的次数不同步。

- bpo-35537: `os.posix_spawn()` 和 `os.posix_spawnp()` 现在有一个 setsid 参数。

- bpo-23846: `asyncio.ProactorEventLoop` 现在捕获并记录当自管道满时的发送错误。

- bpo-34323: `asyncio`: 增强 `IocpProactor.close()` 日志: 在第一次日志前等待1秒，然后每秒记录一次。同时记录自 `close()` 调用以来的秒数。

- bpo-35674: 新增 `os.posix_spawnp()` 函数。由 Joannah Nanjekye 提供补丁。

- bpo-35733: `ast.Constant(boolean)` 不再是 `ast.Num` 的实例。由 Anthony Sottile 提供补丁。

- bpo-35726: QueueHandler.prepare() 现在在修改和入队之前复制记录，以避免影响链中的其他处理程序。

- bpo-35719: 通过 1.3--2.5 倍加速了多参数 `math` 函数 atan2(), copysign(), remainder() 和 hypot()。

- bpo-35717: 修复了在使用枚举和编译时引发的 KeyError 异常。由 Rémi Lapeyre 提供补丁。

- bpo-35699: 修复了 distutils 中对 Visual Studio Build Tools 2017 的检测。

- bpo-32710: 修复了 asyncio ProactorEventLoop 在重叠操作失败时的内存泄漏。

- bpo-35702: The `time.CLOCK_UPTIME_RAW` constant is now available for macOS 10.12.

- bpo-32710: 修复了 asyncio 中 ProactorEventLoop 在 `ReadFile()` 或 `WSASend()` 重叠操作立即失败时的内存泄漏：释放内部缓冲区。

- bpo-35682: 修复 `asyncio.ProactorEventLoop.sendfile()`: 如果内部 future 已经完成，不再尝试设置其结果。

- bpo-35283: Add a deprecated warning for the `threading.Thread.isAlive()` method. Patch by Dong-hee Na.

- bpo-35664: 通过优化参数处理和为元组中单个非负整数索引的常见情况添加快速路径（这是标准库中的典型用例），将 operator.itemgetter() 的性能提高了 33%。

- bpo-35643: 修复了 Modules/_sha3/cleanup.py 中的 SyntaxWarning: 无效的转义序列。补丁由 Mickaël Schoentgen 提供。

- bpo-35619: 改进了 `help()` 和 `pydoc` 中对自定义数据描述符的支持。

- bpo-28503: The `crypt` module now internally uses the `crypt_r()` library function instead of `crypt()` when available.

- bpo-35614: 修复了 metaclasses 上的 help()。由 Sanyam Khurana 提供补丁。

- bpo-35568: Expose `raise(signum)` as `raise_signal`

- bpo-35588: `fractions.Fraction` 类型上的地板除法和模运算以及 `divmod()` 函数速度提高了 2--4 倍。由 Stefan Behnel 提供补丁。

- bpo-35585: 通过值构建枚举的速度提升，例如 http.HTTPStatus(200)。

- bpo-30561: random.gammavariate(1.0, beta) 现在计算的结果与 random.expovariate(1.0 / beta) 相同。这同步了两种算法并消除了旧实现中的一些特性。然而，它确实产生了与以前不同的随机变量流。

- bpo-35537: `subprocess` 模块现在在某些情况下可以使用 `os.posix_spawn()` 函数以获得更好的性能。

- bpo-35526: 将 barry_as_FLUFL.mandatory 的'笑话'延迟到 Python 4.0 版本

- bpo-35523: 移除 `ctypes` 回调的变通方法：不再在启动时创建回调。避免在 `import ctypes` 和 `import uuid` 时触发 SELinux 警报。

- bpo-31784: `uuid.uuid1()` 现在调用 `time.time_ns()` 而不是 `int(time.time() * 1e9)`。

- bpo-35513: `unittest.runner` 的 `TextTestRunner` 现在使用 `time.perf_counter()` 而不是 `time.time()` 来测量测试的执行时间：`time.time()` 可以倒退，而 `time.perf_counter()` 是单调的。

- bpo-35502: 修复了 `xml.etree.ElementTree.TreeBuilder` 在树构建未完成时（特别是解析 XML 时引发错误的情况下）的引用泄漏问题。

- bpo-35348: 使 `platform.architecture()` 解析 `file` 命令输出更加可靠：向 `file` 命令添加 `-b` 选项以省略文件名，强制使用 C 语言环境，并搜索“共享对象”模式。

- bpo-35491: `multiprocessing`: 添加 `Pool.__repr__()` 并增强 `BaseProcess.__repr__()` (添加 pid 和父 pid) 以便于调试。Pool 的状态常量值现在是字符串而不是整数，例如 `RUN` 值变为 `'RUN'` 而不是 `0`。

- bpo-35477: `multiprocessing.Pool.__enter__()` 现在在池未运行时失败：如果多次使用 `with pool:` 会失败。

- bpo-31446: 复制传递给 CreateProcessW 的命令行，因为此函数可以更改输入缓冲区的内容。

- bpo-35471: Python 2.4 放弃了对 MacOS 9 的支持。macpath 模块在 Python 3.7 中被弃用。该模块现已被移除。

- bpo-23057: 在 Windows 上接收到键盘中断时解除 Proactor 事件循环的阻塞。

- bpo-35052: 修复了 xml.dom.minidom 在带有实体的文档上的 cloneNode()：向实体的用户数据处理器传递正确的参数。

- bpo-20239: 允许重复分配删除 `unittest.mock.Mock` 属性。由 Pablo Galindo 提供补丁。

- bpo-17185: 在 mock 上设置 `__signature__` 以便 `inspect` 获取签名。由 Karthikeyan Singaravelan 提供补丁。

- bpo-35445: 创建 posix.environ 时的内存错误不再被忽略。

- bpo-35415: 验证 socket.socket() 的 fileno= 参数。

- bpo-35424: `multiprocessing.Pool` 析构函数现在在池仍在运行时发出 `ResourceWarning`。

- bpo-35330: When a `Mock` instance was used to wrap an object, if `side_effect` is used in one of the mocks of it methods, don't call the original implementation and return the result of using the side effect the same way that it is done with return_value.

- bpo-35346: 从 `platform` 模块中删除对 Mac OS 9 和 Rhapsody 的支持。Rhapsody 的最后一个版本发布于 2000 年。Mac OS 9 的最后一个版本发布于 2001 年。

- bpo-10496: `check_environ()` of `distutils.utils` now catches `KeyError` on calling `pwd.getpwuid()`: don't create the `HOME` environment variable in this case.

- bpo-10496: `posixpath.expanduser()` 现在在 `HOME` 环境变量未设置且当前用户没有家目录（如果当前用户标识在密码数据库中不存在）时，返回输入的 path 不变。这一更改修复了 `site` 模块在当前用户在密码数据库中不存在（如果用户没有家目录）时的问题。

- bpo-35389: `platform.libc_ver()` 现在在可用且未设置 executable 参数时使用 `os.confstr('CS_GNU_LIBC_VERSION')`。

- bpo-35394: 向 asyncio 抽象协议添加空槽。

- bpo-35310: 修复 `select.select()` 中的一个错误，在某些情况下，文件描述符序列在信号中断后未修改返回，即使文件描述符可能尚未准备就绪。现在，如果发生超时，`select.select()` 将始终返回空列表。由 Oran Avraham 提供补丁。

- bpo-35380: 为 proactor asyncio 事件循环在 Windows 上启用 TCP_NODELAY。

- bpo-35341: 向 `typing` 模块添加 `collections.OrderedDict` 的通用版本。由 Ismo Toijala 提供补丁。

- bpo-35371: 修复了在 Windows 上传递不正确参数时 `os.utime()` 可能崩溃的问题。

- bpo-35346: `platform.uname()` 现在在运行外部程序（如 `cmd /c ver`）时将 `stderr` 重定向到 `os.devnull`。

- bpo-35066: 之前，在格式字符串中带有尾随 '%' 的 datetime 对象上调用 strftime() 方法会导致异常。然而，这仅在 datetime C 模块被使用时发生；Python 实现不匹配此行为。现在 datetime 符合 PEP-399，不会在尾随 '%' 上抛出异常。

- bpo-35345: The function `platform.popen` has been removed, it was deprecated since Python 3.3: use `os.popen()` instead.

- bpo-35344: 在 macOS 上，`platform.platform()` 现在使用 `platform.mac_ver()`，如果它返回一个非空的发布字符串，以获取 macOS 版本而非 darwin 版本。

- bpo-35312: 使 `lib2to3.pgen2.parse.ParseError` 可往返 pickle。由 Anthony Sottile 提供补丁。

- bpo-35308: 修复 `webbrowser` 中的回归问题，其中默认浏览器可能优先于 `BROWSER` 环境变量中的浏览器。

- bpo-24746: 避免在 doctest 花式差异中去除尾部空格。原始由 R. David Murray 和 Jairo Trad 提供补丁。由 Sanyam Khurana 增强。

- bpo-28604: `locale.localeconv()` 现在如果两个区域设置不同且货币字符串非 ASCII，会临时将 `LC_CTYPE` 区域设置改为 `LC_MONETARY` 区域设置。这一临时更改会影响其他线程。

- bpo-35277: 更新 ensurepip 以安装 pip 18.1 和 setuptools 40.6.2。

- bpo-24209: 直接调用 http.server 时增加 IPv6 支持。

- bpo-35226: 在测试 `unittest.mock.call` 对象相等性时递归检查参数，并添加说明，在 `mock_calls` 中追踪用于创建模拟祖先的参数是不可能的。

- bpo-29564: warnings 模块现在建议如果指定了源，tracemalloc 模块可用但 tracemalloc 未跟踪内存分配时启用 tracemalloc。

- bpo-35189: 修改以下 fnctl 函数，在信号中断 (EINTR) 时重试：flock, lockf, fnctl

- bpo-30064: 在 sock_* asyncio API 中使用 add_done_callback() 以在取消时早期取消订阅 reader/writer。

- bpo-35186: 移除当 `setup.py upload` 与 `bdist_rpm` 或 `bdist_dumb` 一起使用时添加的“built with”注释。

- bpo-35152: 允许在非 Windows 系统上的多进程连接中一次发送超过 2 GB 的数据。

- bpo-35062: Fix incorrect parsing of `_io.IncrementalNewlineDecoder`'s translate argument.

- bpo-35065: Remove `StreamReaderProtocol._untrack_reader`. The call to `_untrack_reader` is currently performed too soon, causing the protocol to forget about the reader before `connection_lost` can run and feed the EOF to the reader.

- bpo-34160: ElementTree和minidom现在保留了用户指定的属性顺序。

- bpo-35079: 通过添加'non-overlapping'和将'!='改为'<'来改进difflib.SequenceManager.get_matching_blocks的文档。

- bpo-33710: 弃用了 `gettext` 模块中的 `l*gettext()` 函数和方法。它们返回编码的字节而不是Unicode字符串，是Python 2时代的产物。同时也弃用了与设置 `l*gettext()` 函数和方法字符集相关的函数和方法。

- bpo-35017: 现在，如果 :socketserver.BaseServer.serve_forever`的 `shutdown()` 方法在轮询新事件时被调用，它会立即退出。

- bpo-35024: `importlib` no longer logs `wrote` redundantly after `(created|could not create)` is already logged. Patch by Quentin Agren.

- bpo-35047: 现在，如果 `assert_not_called`、`assert_called_once` 或``assert_called_once_with``失败，``unittest.mock``会在异常消息中包含模拟调用。由Petter Strandmark提供的补丁。

- bpo-31047: 修复了 `ntpath.abspath` 在Windows上未移除尾部分隔符的回归问题。由Tim Graham提供的补丁。

- bpo-35053: tracemalloc现在尝试在对象从"自由列表"（用于更快创建对象的优化，例如内置列表类型使用）中重用时更新回溯。

- bpo-31553: 向json.tool添加了--json-lines选项。由hongweipeng提供的补丁。

- bpo-34794: 修复了在将Tcl_Obj的Python包装器传回Tcl/Tk时Tkinter中的泄漏问题。

- bpo-34909: 枚举：修复当父类与具体数据类型混合时子类的子类化问题。

- bpo-35022: `unittest.mock.MagicMock` 现在支持 `__fspath__` 方法（来自 `os.PathLike`）。

- bpo-35008: 修复了在 C 实现中调用已初始化元素的 `xml.etree.ElementTree.Element` 的 `__setstate__()` 方法时的引用泄漏问题。

- bpo-23420: 验证 cProfile CLI 的 '-s' 参数的值。由 Robert Kuska 提供补丁。

- bpo-33947: 数据类现在可以处理递归 repr 而不会引发 RecursionError。

- bpo-34890: 使 `inspect.iscoroutinefunction()`、`inspect.isgeneratorfunction()` 和 `inspect.isasyncgenfunction()` 与 `functools.partial()` 一起工作。由 Pablo Galindo 提供补丁。

- bpo-34521: 使用 `socket.CMSG_SPACE()` 而不是 `socket.CMSG_LEN()` 在 `multiprocessing.reduction.recvfds()` 中计算辅助数据大小，因为 RFC 3542 要求便携式应用程序使用前者。

- bpo-31522: The `mailbox.mbox.get_string` function from_ parameter can now successfully be set to a non-default value.

- bpo-34970: 在 `asyncio.all_tasks()` 中保护任务弱集操作。

- bpo-34969: gzip：在 gzip CLI 上添加 --fast、--best 参数，这些参数将用于快速压缩方法（quick）或最佳压缩方法（较慢，但文件更小）。同时，将默认压缩级别更改为 6（折中）。

- bpo-16965: The 2to3 `execfile` fixer now opens the file with mode `'rb'`. Patch by Zackery Spytz.

- bpo-34966: `pydoc` 现在不仅支持对最终类中定义的方法的别名，还支持对继承的方法的别名。文档字符串不会为别名重复。

- bpo-34926: `mimetypes.MimeTypes.guess_type()` 现在除了接受 URL 字符串外，还接受 path-like object。由 Mayank Asthana 提供补丁。

- bpo-23831: 向 `tkinter.Canvas` 小部件添加 `moveto()` 方法。由 Juliette Monsel 提供补丁。

- bpo-34941: `xml.etree.ElementTree` 模块中 `Element` 类的 `find()`、`findtext()` 和 `findall()` 方法现在能够查找 `Element` 子类实例的子元素。

- bpo-32680: `smtplib.SMTP` objects now always have a `sock` attribute present

- bpo-34769: 修复了当事件循环处于调试模式且垃圾收集器在另一个线程中运行时异步生成器未完成的问题。

- bpo-34936: 修复 `tkinter.Spinbox.selection_element()` 中的 `TclError`。由 Juliette Monsel 提供补丁。

- bpo-34829: 为了与 `tkinter.Entry` 组件保持一致，向 `tkinter.Spinbox` 添加了 `selection_from`、`selection_range`、`selection_present` 和 `selection_to` 方法。由 Juliette Monsel 提供补丁。

- bpo-34911: 向 http.cookiejar.DefaultCookiePolicy 添加了 secure_protocols 参数，以允许调整协议，并默认支持 *wss*（安全的 websocket 协议）。

- bpo-34922: Fixed integer overflow in the `digest()` and `hexdigest()` methods for the SHAKE algorithm in the `hashlib` module.

- bpo-34925: bisect 模块中函数的参数解析速度提高了 25%。

- bpo-34900: 修复了 `unittest.TestCase.debug()` 在调用带有子测试的测试方法时的问题。由 Bruno Oliveira 提供补丁。

- bpo-34844: logging.Formatter 增强 - 确保 logging.Formatter 中的样式和 fmt 匹配 - 在每个格式样式类（StrFormatStyle、PercentStyle、StringTemplateStyle）中添加了 validate 方法。 - 此方法在 logging.Formatter 类的构造函数中调用 - 同时在每个样式类的 format 方法中重新引发 KeyError，以便更清楚地表明这是无效格式字段的错误。

- bpo-34897: 调整 test.support.missing_compiler_executable 检查，以便忽略名义命令名为 "" 的情况。由 Michael Felt 提供补丁。

- bpo-34871: 修复 inspect 模块在解析可调用对象的 `__text_signature__` 时污染 `sys.modules` 的问题。

- bpo-34898: Add `mtime` argument to `gzip.compress` for reproducible output. Patch by Guo Ci Teo.

- bpo-28441: 在 Cygwin 和 MinGW 上，确保 `sys.executable` 始终包含路径中的完整文件名，包括 `.exe` 后缀（除非它是符号链接）。

- bpo-34866: 向 `cgi.FieldStorage` 添加 `max_num_fields`，通过限制 `FieldStorage` 创建的 `MiniFieldStorage` 对象数量来增加 DOS 攻击的难度。

- bpo-34711: http.server 确保当本地路径以 "/" 结尾且不是目录时报告 HTTPStatus.NOT_FOUND，即使底层操作系统（如 AIX）接受此类路径作为有效文件引用。由 Michael Felt 提交补丁。

- bpo-34872: 修复 asyncio.Task 的 C 实现中的自我取消问题。

- bpo-34849: 不在 asyncio 循环迭代中记录等待 `selector.select`。等待对于任何 asyncio 程序来说都是非常正常的，记录其时间只会给日志添加噪音而不提供任何有用信息。

- bpo-34022: 环境变量 `SOURCE_DATE_EPOCH` 不再覆盖 `py_compile.compile()` 的 invalidation_mode 参数的值，而是决定其默认值。

- bpo-34819: 在 `Executor.map()` 和 `as_completed()` 中使用单调时钟计算超时，以防止系统时钟调整时超时偏离。

- bpo-34758: 将 .wasm -> application/wasm 添加到识别的文件类型和内容类型头列表中。

- bpo-34789: `xml.sax.make_parser()` 现在接受任何可迭代对象作为其 parser_list 参数。由 Andrés Delfino 提交补丁。

- bpo-34334: In `QueueHandler`, clear `exc_text` from `LogRecord` to prevent traceback from being written twice.

- bpo-34687: 在 Windows 上，asyncio 现在默认使用 ProactorEventLoop，而不是 SelectorEventLoop。

- bpo-5950: 支持在 `zipimport` 中读取带有归档注释的 zip 文件。

- bpo-32892: 解析器现在将所有常量表示为 `ast.Constant`，而不是使用特定的常量 AST 类型（`Num`、`Str`、`Bytes`、`NameConstant` 和 `Ellipsis`）。这些类被视为已弃用，将在未来的 Python 版本中移除。

- bpo-34728: Add deprecation warning when `loop` is used in methods: `asyncio.sleep`, `asyncio.wait` and `asyncio.wait_for`.

- bpo-34738: ZIP files created by `distutils` will now include entries for directories.

- bpo-34659: 向 itertools.accumulate() 添加一个可选的 initial 参数。

- bpo-29577: 支持在创建 Enums 时使用多个混合类。

- bpo-34670: 为 TLS 1.3 的握手后认证功能添加 SSLContext.post_handshake_auth 和 SSLSocket.verify_client_post_handshake。

- bpo-32718: venv 的 Activate.ps1 脚本现在可以与 PowerShell Core 6.1 一起使用，并且在所有操作系统下都可用。

- bpo-31177: 修复了在使用 `reset_mock` 时，无法在删除属性的模拟实例上使用的问题。

- bpo-34672: 添加一个变通方法，使得在某些情况下，musl C 库上的 `'Z'` `time.strftime()` 说明符可以工作。

- bpo-34666: 实现 `asyncio.StreamWriter.awrite` 和 `asyncio.StreamWriter.aclose()` 协程。这些方法是为了提供一致的流 API，默认情况下开启控制流。

- bpo-6721: 在 fork() 过程中获取日志模块常用的内部锁，以避免子进程中的死锁。

- bpo-34658: 修复了一个罕见的解释器未处理异常状态 SystemError，仅在以下情况下出现：使用 subprocess 与 preexec_fn 同时，os.register_at_fork 注册了 after_parent 处理程序，并且 fork 系统调用失败。

- bpo-34652: 确保 `os.lchmod()` 永远不会在 Linux 上定义。

- bpo-34638: 存储对流读取器的弱引用，以打破读取器和协议之间的强引用循环。这允许在流被删除（垃圾回收）而未调用 `close()` 时检测并关闭套接字。

- bpo-34536: `Enum._missing_`: raise `ValueError` if None returned and `TypeError` if non-member is returned.

- bpo-34636: 加快对字节对象中s w和d的多次不匹配字符的重新扫描。（微优化）

- bpo-24412: Add `addModuleCleanup()` and `addClassCleanup()` to unittest to support cleanups for `setUpModule()` and `setUpClass()`. Patch by Lisa Roach.

- bpo-34630: 不在asyncio代码中记录SSL证书错误（连接错误记录已被跳过）。

- bpo-32490: 防止在 `subprocess` 异常消息中文件名重复。由Zackery Spytz提供补丁。

- bpo-34363: dataclasses.asdict()和.astuple()现在能正确处理命名元组。

- bpo-34625: 更新供应商化的expat库版本至2.2.6。

- bpo-32270: subprocess模块不再错误地关闭被重定向的文件描述符，即使它们在pass_fds中且不在默认的{0, 1, 2}集合内。

- bpo-34622: 创建专用的 `asyncio.CancelledError`、`asyncio.InvalidStateError` 和``asyncio.TimeoutError``异常类。使它们继承自 `concurrent.futures` 包中对应的异常。将``asyncio``异常提取到一个单独的文件中。

- bpo-34610: 修复了 `multiprocessing.managers.DictProxy` 的迭代器。

- bpo-34421: 修复distutils对非ASCII字符串的日志记录。这曾导致Windows上的安装问题。

- bpo-34604: Fix possible mojibake in the error message of `pwd.getpwnam` and `grp.getgrnam` using string representation because of invisible characters or trailing whitespaces. Patch by William Grzybowski.

- bpo-30977: 使uuid.UUID使用 `__slots__` 以减少其内存占用。基于Wouter Bolsterlee的原始补丁。

- bpo-34574: OrderedDict迭代器在pickling时不再耗尽。由Sergey Fedoseev提供补丁。

- bpo-8110: 重构 `subprocess` 以检查Windows特定模块，而非``sys.platform == 'win32'``。

- bpo-34530: `distutils.spawn.find_executable()` 现在在没有设置 `PATH` 环境变量时回退到 `os.defpath`。

- bpo-34563: 在Windows上，修复multiprocessing.Connection对于非常大的读取的修复：修复_winapi.PeekNamedPipe()和_winapi.ReadFile()对于大于INT_MAX（通常是 `2**31-1`）的读取。

- bpo-34558: 修正Lib/ctypes/_aix.py中的拼写错误。

- bpo-34282: 将 `Enum._convert` 移动到 `EnumMeta._convert_` 并修复枚举成员被父属性遮蔽的问题。

- bpo-22872: 当队列关闭时，`multiprocessing.Queue.put()` 和 `multiprocessing.Queue.get()` 现在分别抛出 `ValueError` 而不是 `AssertionError` 和 `OSError`。由Zackery Spytz提供补丁。

- bpo-34515: Fix parsing non-ASCII identifiers in `lib2to3.pgen2.tokenize` (PEP 3131).

- bpo-13312: 避免时间模块的年处理代码在传递非常低的负年值时可能出现的整数下溢（未定义行为）。

- bpo-34472: 提高 `zipfile` 中流式文件的兼容性。之前未写入可选签名，不支持某些ZIP应用程序。由Silas Sewell提供补丁。

- bpo-34454: 修复datetime类型的.fromisoformat()方法在给定非UTF-8可编码的Unicode时崩溃的问题。具体来说，datetime.fromisoformat()现在接受用作分隔符的代理Unicode码点。报告和测试由Alexey Izbyshev提供，由Paul Ganssle提供补丁。

- bpo-6700: 修复inspect.getsourcelines对于模块级别的帧/回溯的问题。由Vladimir Matveev提供补丁。

- bpo-34171: 运行 `trace` 模块不再创建 `trace.cover` 文件。

- bpo-34441: Fix crash when an `ABC`-derived class with invalid `__subclasses__` is passed as the second argument to `issubclass()`. Patch by Alexey Izbyshev.

- bpo-34427: 修复 `MutableSequence` 子类中 `a.extend(a)` 导致的无限循环问题。

- bpo-34412: 使 `signal.strsignal()` 在 HP-UX 上工作。由 Michael Osipov 提供补丁。

- bpo-20849: shutil.copytree 现在接受一个新的 `dirs_exist_ok` 关键字参数。由 Josh Bronson 提供补丁。

- bpo-31715: 将 `.mjs` 文件扩展名与 `application/javascript` MIME 类型关联。

- bpo-34384: `os.readlink()` 现在在 Windows 上接受 路径类 和 `bytes` 对象。

- bpo-22602: UTF-7 解码器现在对以 "+" 开头的不良序列（如 RFC 2152 中指定）引发 `UnicodeDecodeError`。由 Zackery Spytz 提供补丁。

- bpo-2122: `mmap.flush()` 方法现在在成功时返回 `None`，在所有平台上的错误时引发异常。

- bpo-34341: 使用 ZIP64 扩展附加到 ZIP 存档不再增加现有条目的额外字段的大小。

- bpo-34333: 修复 `pathlib.PurePath.with_suffix()` 中格式化错误消息时的 %-格式化问题。

- bpo-18540: `imaplib.IMAP4` 和 `imaplib.IMAP4_SSL` 类现在在使用 host 参数的默认值（`''`）时正确解析到本地主机 IP。

- bpo-26502: 实现 `traceback.FrameSummary.__len__()` 方法以保持与旧元组 API 的兼容性。

- bpo-34318: `assertRaises()`, `assertRaisesRegex()`, `assertWarns()` 和 `assertWarnsRegex()` 如果传递的可调用对象为 None 则不再成功。它们在上下文管理器模式下不再忽略未知关键字参数。自 Python 3.5 以来，在这些情况下会引发 DeprecationWarning。

- bpo-9372: Deprecate `__getitem__()` methods of `xml.dom.pulldom.DOMEventStream`, `wsgiref.util.FileWrapper` and `fileinput.FileInput`.

- bpo-33613: 修复 `multiprocessing.semaphore_tracker` 中的竞态条件，该条件发生在追踪器接收到 SIGINT 信号但尚未注册信号处理程序以忽略它之前。

- bpo-34248: 当由于操作系统相关错误 `dbm.gnu.open()` 和 `dbm.ndbm.open()` 无法打开数据库文件时，在引发的异常中报告文件名。由 Zsolt Cserna 提供补丁。

- bpo-33089: 添加 math.dist() 以计算两点之间的欧几里得距离。

- bpo-34246: `smtplib.SMTP.send_message()` 不再修改 mail_options 参数的内容。补丁由 Pablo S. Blum de Aguiar 提供。

- bpo-31047: 修复 Windows 上无效路径的 `ntpath.abspath`。由 Franz Woellert 提供补丁。

- bpo-32321: 为 functools.reduce 添加纯 Python 回退。由 Robert Wright 提供补丁。

- bpo-34270: The default asyncio task class now always has a name which can be get or set using two new methods (`get_name()` and `set_name()`) and is visible in the `repr()` output. An initial name can also be set using the new `name` keyword argument to `asyncio.create_task()` or the `create_task()` method of the event loop. If no initial name is set, the default Task implementation generates a name like `Task-1` using a monotonic counter.

- bpo-34263: asyncio 的事件循环不会将超过一天的超时传递给 epoll/select 等。

- bpo-34035: 修复 zipfile seek() 方法中的几个 AttributeError。由 Mickaël Schoentgen 提供补丁。

- bpo-32215: 修复 `sqlite3` 中的性能回归，当 DML 语句出现在 SQL 查询的其余部分不同行时。

- bpo-34075: 弃用将非 ThreadPoolExecutor 实例传递给 `AbstractEventLoop.set_default_executor()`。

- bpo-34251: Restore `msilib.Win64` to preserve backwards compatibility since it's already used by `distutils`' `bdist_msi` command.

- bpo-19891: 在交互式会话退出时写入历史记录时，忽略由于主目录缺失或不可写导致的错误。补丁由 Anthony Sottile 提供。

- bpo-33089: 增强了 math.hypot() 以支持超过两个维度。

- bpo-34228: tracemalloc: PYTHONTRACEMALLOC=0 环境变量和 -X tracemalloc=0 命令行选项现在可以用来在启动时显式禁用 tracemalloc。

- bpo-13041: 使用 `shutil.get_terminal_size()` 在 `argparse.HelpFormatter` 类中正确计算终端宽度。初始由 Zbyszek Jędrzejewski-Szmek 提供补丁。

- bpo-34213: 允许冻结的数据类有一个名为“object”的字段。之前这与内部使用的“object”冲突。

- bpo-34052: `sqlite3.Connection.create_aggregate()`, `sqlite3.Connection.create_function()`, `sqlite3.Connection.set_authorizer()`, `sqlite3.Connection.set_progress_handler()` 方法在传递不可哈希对象作为可调用对象时抛出 TypeError。这些方法现在不会将这样的对象传递给 SQLite API。之前的行为可能导致段错误。由 Sergey Fedoseev 提供补丁。

- bpo-34197: `csv` 读取器的 dialect 属性的 skipinitialspace, doublequote 和 strict 属性现在是 `bool` 实例，而不是整数 0 或 1。

- bpo-32788: 在 `sqlite3` 模块中的 `__adapt__()` 和 `__conform__()` 方法中引发的除 `TypeError` 以外的错误现在会传播给用户。

- bpo-21446: The `reload` fixer now uses `importlib.reload()` instead of deprecated `imp.reload()`.

- bpo-940286: pydoc 的 `Helper.showtopic()` 方法现在正确打印主题的交叉引用。

- bpo-34164: `base64.b32decode()` 可能会因错误的填充引发 UnboundLocalError 或 OverflowError。现在在这些情况下总是引发 `base64.Error`。

- bpo-33729: 修复了 `hashlib` 中参数解析的问题。

- bpo-34097: ZipFile 现在可以通过新的 `strict_timestamps` 参数压缩早于 1980-01-01 和晚于 2107-12-31 的文件，代价是将时间戳设置为限制值。

- bpo-34108: 在 2to3 重构中移除了多余的 CR。

- bpo-34070: 确保在打开文件时 `buffering=-1` 的情况下，仅检查句柄是否为 tty。

- bpo-27494: 恢复了 bpo-27494。2to3 现在拒绝在生成器表达式中使用尾随逗号。

- bpo-33967: functools.singledispatch 现在在没有传递位置参数时抛出 TypeError 而不是 IndexError。

- bpo-34041: 向 `sqlite3.Connection.create_function()` 方法添加了 deterministic 参数。由 Sergey Fedoseev 提供补丁。

- bpo-34056: 确保由 `imp.load_module` 创建的加载器 shim 总是从其 `get_data()` 函数返回字节。这修复了 `imp.load_module` 与基于 PEP 552 哈希的 pycs 一起使用的问题。

- bpo-34054: multiprocessing 模块现在使用单调时钟 `time.monotonic()` 而不是系统时钟 `time.time()` 来实现超时。

- bpo-34043: 当使用 gzip 时，优化 tarfile 解压性能约 15%。

- bpo-34044: `subprocess.Popen` 现在复制 startupinfo 参数以保持其不变：它将修改副本，因此同一个 `STARTUPINFO` 对象可以被多次使用。

- bpo-34010: 修复了使用 tarfile 读取流时的性能回归。缓冲读取应使用列表，而不是追加到字节对象。

- bpo-34019: webbrowser: 使用 `webbrowser` 模块打开新 URL 时，正确传递参数给 Opera 浏览器。由 Bumsik Kim 提供补丁。

- bpo-34003: csv.DictReader 现在创建 dicts 而不是 OrderedDicts。补丁由 Michael Selik 提供。

- bpo-33978: 在通过 fileConfig 和 dictConfig 重新配置之前关闭现有的日志处理程序。补丁由 Karthikeyan Singaravelan 提供。

- bpo-14117: 对turtledemo进行小幅调整。'wikipedia'示例现更名为'rosette'，以更准确描述其绘制内容。'penrose'的打印输出已减少。'tree'的'1024'输出已被移除。

- bpo-33974: 修复了将包含特殊字符 `"`, `\`, `{`, `}` 和 `\n` 的字符串列表或元组作为选项传递给 `ttk` 部件的问题。

- bpo-27500: 修复getaddrinfo以正确解析IPv6地址。

- bpo-24567: 改进random.choices()以处理偶尔会触发IndexError的次正规输入权重。

- bpo-33871: 修复了 `os.readv()`, `os.writev()`, `os.preadv()` 和 `os.pwritev()` 以及 `os.sendfile()` (在基于BSD的操作系统和macOS上，带有 headers 或 trailers 参数时) 中的整数溢出问题。

- bpo-25007: 为zlib压缩器和解压缩器添加 `copy.copy()` 和 `copy.deepcopy()` 支持。补丁由Zackery Spytz提供。

- bpo-33929: 多进程处理：修复了multiprocessing.popen_spawn_win32中Popen的一个竞态条件。子进程现在复制管道的读取端而不是“窃取”它。之前，子进程会“窃取”管道的读取端，但如果子进程在从父进程窃取句柄之前被终止，则会泄漏一个句柄。

- bpo-33899: Tokenize模块现在在提供的输入没有尾随换行符时隐式发出NEWLINE。此行为现在与C tokenizer内部的行为匹配。由Ammar Askar贡献。

- bpo-33897: 向logging.basicConfig()添加了一个'force'关键字参数。

- bpo-33695: `shutil.copytree()` 使用 `os.scandir()` 函数以及所有依赖于它的复制函数都使用了缓存的 `os.stat()` 值。在Linux上复制一个包含8000个文件的目录时，速度提升约+9%，在Windows上约+20%，在Windows SMB共享上约+30%。同时，`os.stat()` 系统调用的次数减少了38%，使得 `shutil.copytree()` 在网络文件系统上特别快。（由Giampaolo Rodola'在 bpo-33695 中贡献。）

- bpo-33916: bz2和lzma：当Decompressor.__init__()被调用两次时，释放旧的锁以防止内存泄漏。

- bpo-32568: 使select.epoll()及其文档在 sizehint 和 flags 方面保持一致。

- bpo-33833: 修复了asyncio中的一个bug，该bug导致ProactorSocketTransport在写操作期间强制关闭时会记录AssertionError。

- bpo-33663: 在将内容长度放入头部之前，将其转换为字符串。

- bpo-33721: `os.path` functions that return a boolean result like `exists()`, `lexists()`, `isdir()`, `isfile()`, `islink()`, and `ismount()`, and `pathlib.Path` methods that return a boolean result like `exists()`, `is_dir()`, `is_file()`, `is_mount()`, `is_symlink()`, `is_block_device()`, `is_char_device()`, `is_fifo()`, `is_socket()` now return `False` instead of raising `ValueError` or its subclasses `UnicodeEncodeError` and `UnicodeDecodeError` for paths that contain characters or bytes unrepresentable at the OS level.

- bpo-26544: 修正了 `platform.libc_ver()` 的实现。它几乎总是为glibc返回版本'2.9'。

- bpo-33843: 移除了已弃用的 `cgi.escape`, `cgi.parse_qs` 和 `cgi.parse_qsl`。

- bpo-33842: 移除了自Python 3.3以来已弃用的 `tarfile.filemode`。

- bpo-30167: 如果设置了PYTHONSTARTUP，防止site.main()异常。由Steve Weber提供补丁。

- bpo-33805: 当未指定InitVar时，改进dataclasses.replace()的错误消息

- bpo-33687: 如果给定或解码了模式，修复 `uu.decode()` 对 `os.chmod()` 的调用。由Timo Furrer提供补丁。

- bpo-33812: 对于tzinfo非None但d.tzinfo.utcoffset(d)返回None的Datetime实例d，现在astimezone()方法将其视为naive。

- bpo-32108: 在configparser中，当节被分配给自己时不清除它。

- bpo-27397: 使email模块正确处理长度无效的base64字符串。

- bpo-33578: 实现多字节编码器/解码器状态方法

- bpo-30805: 避免调试日志记录中的竞态条件

- bpo-33476: 当地址组缺少最后的';'时，修复_header_value_parser.py。由Enrique Perez-Terron贡献

- bpo-33694: asyncio: 修复在使用ProactorEventLoop时，pause_reading()/resume_reading()导致数据丢失的竞态条件。

- bpo-32493: 在 `configure.ac` 中更正对 `uuid_enc_be` 可用性的测试。由Michael Felt提供补丁。

- bpo-33792: 添加asyncio.WindowsSelectorEventLoopPolicy和asyncio.WindowsProactorEventLoopPolicy。

- bpo-33274: W3C DOM Level 1指定Element.removeAttributeNode()的返回值为"The Attr node that was removed." xml.dom.minidom现在符合这一要求。

- bpo-33778: 更新 `unicodedata` 的数据库至Unicode版本11.0.0。

- bpo-33165: 为日志记录调用添加了stacklevel参数，以允许使用包装器/辅助函数进行日志记录API的调用。

- bpo-33770: 针对长度无效的编码输入，改进base64异常消息

- bpo-33769: asyncio/start_tls: 修复错误消息；在未处理错误的情况下取消回调；如果SSLTransport被中止，则标记为已关闭。

- bpo-33767: 在 `mmap.mmap` 对象上执行时，连接（`+`）和重复（`*`）序列操作现在会引发 `TypeError` 而不是 `SystemError`。由 Zackery Spytz 提供补丁。

- bpo-33734: asyncio/ssl：修复 AttributeError，增加默认的握手超时时间

- bpo-31014: 修复了当用户在 BROWSER 环境变量中指定条目路径时为 `webbrowser` 创建控制器的问题。基于 John Still 的补丁。

- bpo-2504: 添加 gettext.pgettext() 及其变体。

- bpo-33197: 为 _ParameterKind 添加描述属性

- bpo-32751: 当由于超时取消任务时，`asyncio.wait_for()` 现在将等待直到取消完成。

- bpo-32684: 修复 gather 即使在 return_exceptions 的情况下也能传播自身的取消。

- bpo-33654: 在 SSLTransport.set_protocol() 中支持协议类型切换。

- bpo-33674: 尽早暂停传输，以进一步降低在 connection_made() 之前调用 data_received() 的风险。

- bpo-33671: `shutil.copyfile()`、`shutil.copy()`、`shutil.copy2()`、`shutil.copytree()` 和 `shutil.move()` 在 Linux 和 macOS 上使用平台特定的快速复制系统调用，以更高效地复制文件。在 Windows 上，`shutil.copyfile()` 使用更大的默认缓冲区大小（1 MiB 而不是 16 KiB），并且使用了基于 `memoryview()` 的 `shutil.copyfileobj()` 变体。复制 512MiB 文件的速度在 Linux 上提高了约 +26%，在 macOS 上提高了 +50%，在 Windows 上提高了 +40%。同时，消耗的 CPU 周期大大减少。（由 Giampaolo Rodola' 在 bpo-25427 中贡献。）

- bpo-33674: 修复 asyncio.sslproto 中 SSLProtocol.connection_made() 的竞态条件：立即开始握手而不是使用 call_soon()。之前，data_received() 可能在握手开始前被调用，导致握手挂起或失败。

- bpo-31647: 修复了在 _SelectorSocketTransport 已经关闭后调用 write_eof() 会引发 AttributeError 的错误。

- bpo-32610: 使 asyncio.all_tasks() 仅返回待处理的任务。

- bpo-32410: 在 sendfile 回退代码中避免阻塞文件 IO。

- bpo-33469: 修复了使用 run_in_executor 后关闭循环时引发的 RuntimeError。

- bpo-33672: 修复 Task.__repr__ 与 Cython 的虚假协程一起使用时崩溃的问题。

- bpo-33654: 修复 transport.set_protocol() 以支持在 asyncio.Protocol 和 asyncio.BufferedProtocol 之间切换。修复 loop.start_tls() 以支持 asyncio.BufferedProtocols。

- bpo-33652: 类型变量和下标泛型的 pickle 现在具有未来兼容性，并与旧版 Python 兼容。

- bpo-32493: 修复了 FreeBSD 上的 `uuid.uuid1()`。

- bpo-33238: 将 `InvalidStateError` 添加到 `concurrent.futures`。如果 futures 不是待处理或运行状态，`Future.set_result` 和 `Future.set_exception` 现在会引发 `InvalidStateError`。由 Jason Haydaman 提供补丁。

- bpo-33618: 完成并记录与 OpenSSL 1.1.1 的初步和实验性 TLS 1.3 支持。

- bpo-33625: Release GIL on `grp.getgrnam`, `grp.getgrgid`, `pwd.getpwnam` and `pwd.getpwuid` if reentrant variants of these functions are available. Patch by William Grzybowski.

- bpo-33623: 修复在 __del__ 中创建 asyncio.Future 时可能出现的 SIGSGV。

- bpo-11874: 当将用法分解为可包装部分时使用更好的正则表达式。避免来自自定义 metavar 字符串的错误断言错误。

- bpo-30877: 修复了 JSON 解码器 Python 实现中的一个错误，该错误阻止了在完成解码后清除已解析字符串的缓存。基于 c-fos 的补丁。

- bpo-33604: 移除标记为在 3.8 中移除的 HMAC 默认 md5（原计划在 3.6 中移除，PR 7062 中推迟到 3.8）。

- bpo-33582: 为 inspect.formatargspec 发出弃用警告。

- bpo-21145: 添加 `functools.cached_property` 装饰器，用于计算属性，这些属性在实例的生命周期内被缓存。

- bpo-33570: 更改 TLS 1.3 密码套件设置，以兼容 OpenSSL 1.1.1-pre6 及更新版本。OpenSSL 1.1.1 将默认启用 TLS 1.3 密码。

- bpo-28556: Do not simplify arguments to `typing.Union`. Now `Union[Manager, Employee]` is not simplified to `Employee` at runtime. Such simplification previously caused several bugs and limited possibilities for introspection.

- bpo-12486: `tokenize.generate_tokens()` 现在被记录为一个公共 API，用于对 Unicode 字符串进行分词。它之前存在但未被记录。

- bpo-33540: 向 `socketserver` 的 `ForkingMixIn` 和 `ThreadingMixIn` 类添加一个新的 `block_on_close` 类属性。

- bpo-33548: tempfile._candidate_tempdir_list 应考虑常见的 TEMP 位置

- bpo-33109: argparse 子解析器默认再次不需要，恢复了在 3.7.0a2 中由 bpo-26510 引入的行为变化。

- bpo-33541: 移除未使用的私有方法 `_strptime.LocaleTime.__pad``（又名 ``_LocaleTime__pad`）。

- bpo-33536: dataclasses.make_dataclass 现在检查无效的字段名和重复的字段。此外，添加了对无效字段规范的检查。

- bpo-33542: 防止 `uuid.get_node` 在 Windows 上使用 DUID 而不是 MAC。由 Zvi Effron 提供补丁

- bpo-26819: Fix race condition with `ReadTransport.resume_reading` in Windows proactor event loop.

- Fix failure in `typing.get_type_hints()` when ClassVar was provided as a string forward reference.

- bpo-33516: `unittest.mock.MagicMock` 现在支持 `__round__` 魔术方法。

- bpo-28612: 向 urllib 的 `RobotFileParser` 添加了对站点地图的支持，作为 `RobotFileParser.site_maps()`。补丁由 Lady Red 提供，基于 Peter Wirtz 的补丁。

- bpo-28167: 移除自3.5版起已弃用的platform.linux_distribution。

- bpo-33504: 将 `configparser` 的默认字典实现从 `collections.OrderedDict` 切换为标准 `dict` 类型。

- bpo-33505: 通过重新排序if检查优化asyncio.ensure_future()：速度提升1.17倍。

- bpo-33497: 向cgi.parse_multipart添加errors参数，并使FieldStorage中的编码使用给定的errors（Twisted所需）。由Amber Brown提供补丁。

- bpo-29235: `cProfile.Profile` 类现在可用作上下文管理器。补丁由Scott Sanderson提供。

- bpo-33495: 更改dataclasses.Fields的repr以使用其每个成员的repr，而非str。这使得每个字段实际代表的内容更加清晰。这对于'type'成员尤为明显。

- bpo-26103: 修正 `inspect.isdatadescriptor` 以查找 `__set__` 或 `__delete__`。由Aaron Hall提供补丁。

- bpo-29209: 移除了 `XMLParser` 构造函数的 `doctype()` 方法和 html 参数。子类中定义的 `doctype()` 方法将不再被调用。`ElementTree` 模块中已弃用的方法 `getchildren()` 和 `getiterator()` 现在发出 `DeprecationWarning` 而非 `PendingDeprecationWarning`。

- bpo-33453: 修复dataclasses以在使用字面字符串类型注解或使用PEP 563“推迟的注解评估”时工作。仅为ClassVar（"ClassVar"和"typing.ClassVar"）和InitVar（"InitVar"和"dataclasses.InitVar"）检测特定的字符串前缀。

- bpo-28556: typing模块中的小修复：向 `NamedTuple.__new__` 添加注解，在``Generic.__new__``中传递 `*args` 和 `**kwds`。原始PR由Paulius Šarka和Chad Dombrova提供。

- bpo-33365: 如果在 `http.client` 中将 debuglevel 设置为>0，除了头键外还打印头值。补丁由Marco Strigl提供。

- bpo-20087: 更新了支持glibc 2.27地区设置的别名映射。

- bpo-33422: 修复在pydoc上查找字节/字符串字面量时尾随引号被删除的问题。由Andrés Delfino提供补丁。

- bpo-28167: 函数 `platform.linux_distribution` 和 `platform.dist` 现在触发``DeprecationWarning``，并已被标记为在Python 3.8中移除。

- bpo-33281: 修复macOS上ctypes.util.find_library的回归问题。

- bpo-33311: 由cgitb生成的文本和html输出现在如果当前调用直接在模块中进行时不会显示括号。由Stéphane Blondon提供补丁。

- bpo-27300: tempfile*中的文件类现在接受一个 *errors 参数，补充了已经存在的 encoding 参数。由Stephan Hohe提供补丁。

- bpo-32933: `unittest.mock.mock_open()` 现在支持对文件内容进行迭代。由Tony Flury提供补丁。

- bpo-33217: 当在Enum类和Enum成员中查找非Enum对象时，抛出 `TypeError`。

- bpo-33197: Update error message when constructing invalid inspect.Parameters Patch by Dong-hee Na.

- bpo-33383: 修复了当使用单个参数调用 `dbm.ndbm` 数据库对象的get()方法时崩溃的问题。

- bpo-33375: warnings模块现在从代码对象而非帧的全局命名空间找到与警告相关联的Python文件。这与tracebacks和pdb如何查找文件名一致，应该能更好地处理动态执行的代码。

- bpo-33336: `imaplib``现在允许在 ``IMAP4.uid()` 中使用 `MOVE` 命令（RFC 6851: IMAP MOVE扩展）并可能作为 `IMAP4` 对象支持的方法名称。

- bpo-32455: 向 `dis.stack_effect()` 添加了 jump 参数。

- bpo-27485: 重命名并弃用 `urllib.parse()` 中未文档化的函数。

- bpo-33332: 添加 `signal.valid_signals()` 以暴露POSIX sigfillset()功能。

- bpo-33251: `ConfigParser.items()` was fixed so that key-value pairs passed in via `vars` are not included in the resulting output.

- bpo-33329: 修复了在新版 glibc 上的多进程回归问题。

- bpo-33334: `dis.stack_effect()` 现在支持所有定义的 opcode，包括 NOP 和 EXTENDED_ARG。

- bpo-991266: 修复了 `http.cookies.SimpleCookie` 的 `Comment` 属性的引用问题。

- bpo-33131: 将捆绑的 pip 版本升级至 10.0.1。

- bpo-33308: 修复了 `parser` 模块在将 ST 对象转换为元组或列表树时，当 `line_info=False` 且 `col_info=True` 时的崩溃问题。

- bpo-23403: lib2to3 现在对预计算的语法使用 pickle 协议 4。

- bpo-33266: lib2to3 现在能识别 `rf'...'` 字符串。

- bpo-11594: 确保在使用 lib2to3 时尊重行尾。

- bpo-33254: 让 `importlib.resources.contents()` 和 `importlib.abc.ResourceReader.contents()` 返回一个 iterable 而不是 iterator。

- bpo-33265: `contextlib.ExitStack` 和 `contextlib.AsyncExitStack` 现在使用方法而不是包装函数来处理退出回调。

- bpo-33263: Fix FD leak in `_SelectorSocketTransport` Patch by Vlad Starostin.

- bpo-33256: 修复了 `cgitb.html()` 生成的 html 中 `<module>` 调用的显示问题。补丁由 Stéphane Blondon 提供。

- bpo-33144: 优化了 `random.Random()` 及其子类机制，仅在类/子类实例化时检查一次其 `getrandbits()` 方法是否可以被其他方法（包括 `randrange()`）依赖，用于生成任意大的随机整数。由 Wolfgang Maier 提供补丁。

- bpo-33185: 修复了使用 `-m` 开关运行 pydoc 时的回归问题。（此回归问题由解决 bpo-33053 在 3.7.0b3 版本引入）

  此修复还改变了 pydoc，使其在必要时将 `os.getcwd()` 添加到 `sys.path` 中，而不是添加 `"."`。

- bpo-29613: 在 `http.cookies` 模块中添加了对 `SameSite` cookie 标志的支持。

- bpo-33169: 当调用 `importlib.machinery.invalidate_caches()` 时，删除 `sys.path_importer_cache` 中的 `None` 条目。

- bpo-33203: `random.Random.choice()` 现在对于空序列会一致地引发 `IndexError`，即使是从没有 `getrandbits()` 实现的子类中调用也是如此。

- bpo-33224: 为 PEP 479 更新 difflib.mdiff()。将生成器中未捕获的 StopIteration 转换为 return 语句。

- bpo-33209: 在 `pickle.Pickler.dump()` 的 C 实现结束时结束帧。

- bpo-32861: urllib.robotparser 的 `__str__` 表示现在包括通配符条目和 "Crawl-delay" 和 "Request-rate" 字段。还移除了被附加到字符串末尾的额外换行符。由 Michael Lazar 提供补丁。

- bpo-23403: `pickle` 中的 `DEFAULT_PROTOCOL` 被提升到 4。协议 4 在 PEP 3154 中有描述，自 Python 3.4 起可用。与 Python 3.0 中引入的协议 3 相比，它提供了更好的性能和更小的尺寸。

- bpo-20104: Improved error handling and fixed a reference leak in `os.posix_spawn()`.

- bpo-33106: 从只读 dbm 数据库中删除键会引发模块特定的错误，而不是 KeyError。

- bpo-33175: 在数据类中，Field.__set_name__ 现在查找默认值的类上的 __set_name__ 特殊方法，而不是实例上的。

- bpo-32380: 创建 functools.singledispatchmethod 以支持对描述符和方法的通用单分派。

- bpo-33141: 如果 Field 对象有自己的 __set_name__，则让它们将 __set_name__ 传递给它们的默认值。

- bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。

- bpo-32873: 通过复制和pickle操作将类型变量和特殊类型形式视为不可变。这修复了几个小问题和不一致性，并提高了与Python 3.6的向后兼容性。

- bpo-33134: 在计算数据类的__hash__时，使用查找表包含返回__hash__值的函数。这比查找字符串然后测试该字符串以决定做什么有所改进。

- bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。

- bpo-32505: 如果数据类的成员变量是Field类型但没有类型注解，则抛出TypeError。

- bpo-33078: 修复了由于测试依赖sem_getvalue而在OSX上导致的失败。

- bpo-33116: 将'Field'添加到dataclasses.__all__中。

- bpo-32896: 修复了一个错误，即当子类化一个使用default_factory字段的数据类时会生成一个不正确的类。

- bpo-33100: 数据类：如果一个字段有一个默认值是MemberDescriptorType，那么它是因为该字段在__slots__中，而不是一个实际的默认值。

- bpo-32953: 如果一个非数据类继承自一个冻结的数据类，允许向派生类添加属性。只有来自冻结数据类的属性不能被赋值。要求层次结构中的所有数据类要么全部冻结，要么全部非冻结。

- bpo-33097: 在解释器关闭期间调用 `executor.submit` 时抛出RuntimeError。

- bpo-32968: 涉及Fraction和float的模和地板除法应返回float。

- bpo-33061: 在typing.py的 `__all__` 中添加缺失的 `NoReturn`。

- bpo-33078: 修复当发生pickling错误时multiprocessing.Queue中的大小处理。

- bpo-33064: lib2to3现在正确支持函数签名中 `*args` 和 `**kwargs` 后的尾随逗号。

- bpo-33056: 修复concurrent.futures.ProcessPoolExecutor中泄漏的文件描述符未正确关闭的问题。

- bpo-33021: 在fstat()调用期间释放GIL，避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。

- bpo-31804: 避免在标准流在退出时被关闭或为None时，multiprocessing.Process失败。

- bpo-33034: 当使用 `urlparse()` 和 `urlsplit()` 将port属性转换为非整数值时，提供明确的错误消息。由Matt Eaton提供补丁。

- bpo-30249: 改进struct.unpack_from()在缓冲区大小和偏移量问题上的异常消息。

- bpo-33037: 在SSL传输关闭后跳过发送/接收数据。

- bpo-27683: 修复 `ipaddress` 中的一个回归问题，当网络由包含整数掩码且仅剩1位地址的元组构造时，`hosts()` 的结果为空。

- bpo-22674: 在signal模块中添加strsignal()函数，该函数返回给定信号的系统描述，如同strsignal(3)返回的那样。

- bpo-32999: 修复 `ABC.__subclasscheck__(cls, subclass)` 的C实现，在 `subclass` 不是类型对象时崩溃的问题。

- bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。

- bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。

- bpo-32056: Improved exceptions raised for invalid number of channels and sample width when read an audio file in modules `aifc`, `wave` and `sunau`.

- bpo-32970: 改进MAKE_FUNCTION指令的反汇编。

- bpo-32844: 修复在subprocess中如果另一个低描述符被关闭时，将低描述符（0或1）错误重定向到stderr的问题。

- bpo-32960: 对于数据类，禁止从非冻结类继承冻结类，也禁止从冻结类继承非冻结类。这一限制将在未来放宽。

- bpo-32713: 修复tarfile.itn对超出界限的浮点值的处理。由Joffrey Fuhrer提供补丁。

- bpo-32257: ssl模块现在包含OP_NO_RENEGOTIATION常量，适用于OpenSSL 1.1.0h或1.1.1版本。

- bpo-32951: 现在禁止直接实例化SSLSocket和SSLObject对象。这些构造函数从未被记录、测试或设计为公共构造函数。用户应该使用ssl.wrap_socket()或SSLContext。

- bpo-32929: 移除了三态参数"hash"，并添加了布尔型"unsafe_hash"。如果unsafe_hash为True，添加一个__hash__函数，但如果__hash__已存在，则抛出TypeError。如果unsafe_hash为False，根据eq=和frozen=的值添加__hash__。unsafe_hash=False的行为与旧的hash=None行为相同。unsafe_hash=False是默认值，就像hash=None曾经是默认值一样。

- bpo-32947: 添加OP_ENABLE_MIDDLEBOX_COMPAT和测试解决方法，以便未来与OpenSSL 1.1.1兼容的TLSv1.3。

- bpo-32146: 记录了冻结可执行文件与multiprocessing中spawn和forkserver启动方法之间的交互。

- bpo-30622: ssl模块现在能检测到LibreSSL中缺少的NPN支持。

- bpo-32922: dbm.open()现在使用文件系统编码而不是默认编码对文件名进行编码。

- bpo-32759: 在multiprocessing.heap中释放未使用的竞技场。

- bpo-32859: 在 `os.dup2` 中，不再每次调用时检查 `dup3` 系统调用是否存在。

- bpo-32556: nt._getfinalpathname、nt._getvolumepathname和nt._getdiskusage现在能正确地从字节转换。

- bpo-21060: 将setup.py upload中令人困惑的消息从"No dist file created in earlier command"重写为更有帮助的"Must create and upload files in one command"。

- bpo-32857: 在 `tkinter` 中，`after_cancel(None)` 现在会引发 `ValueError` 异常，而不是取消第一个预定的函数。由Cheryl Sabella提供补丁。

- bpo-32852: 确保在运行trace时sys.argv保持为列表。

- bpo-31333: 添加了 `_abc` 模块。这是一个加速模块，为 `abc` 中的各种函数和方法提供了C语言实现。创建ABC子类及调用 `isinstance` 或 `issubclass` 与ABC子类的速度提高了1.5倍。此外，这使得Python的启动速度提高了10%。

  注意，新实现隐藏了内部注册表和缓存，之前可以通过私有属性 `_abc_registry`、`_abc_cache` 和 `_abc_negative_cache` 访问。有三个调试辅助方法可以替代使用：`_dump_registry`、`_abc_registry_clear` 和 `_abc_caches_clear`。

- bpo-32841: Fixed `asyncio.Condition` issue which silently ignored cancellation after notifying and cancelling a conditional lock. Patch by Bar Harel.

- bpo-32819: ssl.match_hostname() 已被简化，不再依赖 re 和 ipaddress 模块处理通配符和IP地址。对于无效通配符的错误报告已改进。

- bpo-19675: 如果初始化失败，`multiprocessing.Pool` 不再泄漏进程。

- bpo-32394: socket: 在旧版本Windows运行时移除TCP_FASTOPEN、TCP_KEEPCNT、TCP_KEEPIDLE、TCP_KEEPINTVL标志。

- bpo-31787: 修复了多个模块中 `__init__()` 方法的内存泄漏问题。(由Oren Milman贡献)

- bpo-30157: 修复了在只有最后一个字段被引用时，csv.Sniffer.sniff() 中猜测引用和分隔符的问题。由Jake Davis提供补丁。

- bpo-30688: 在正则表达式中添加了对 `\N{name}` 转义的支持。基于Jonathan Eunice的补丁。

- bpo-32792: collections.ChainMap() 保留了底层映射的顺序。

- bpo-32775: `fnmatch.translate()` no longer produces patterns which contain set operations. Sets starting with '[' or containing '--', '&&', '~~' or '||' will be interpreted differently in regular expressions in future versions. Currently they emit warnings. fnmatch.translate() now avoids producing patterns containing such sets by accident.

- bpo-32622: 为Windows proactor事件循环实现原生快速发送文件功能。

- bpo-32777: 修复了在POSIX系统的子进程中，当标记文件描述符为可继承时，subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。

- bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在，在支持dl的平台上，共享扩展已明确链接到libdl。

- bpo-32749: 使用'r'标志打开的 `dbm.dumb` 数据库现在变为只读。使用'r'和'w'标志的 `dbm.dumb.open()` 如果数据库不存在，将不再创建数据库。

- bpo-32741: 实现 `asyncio.TimerHandle.when()` 方法。

- bpo-32691: 在使用pdb运行模块时使用mod_spec.parent。

- bpo-32734: 修复了 `asyncio.Lock()` 的安全问题，该问题允许多次获取和锁定同一个锁，而锁并未释放。由Bar Harel提供补丁。

- bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。

- bpo-31453: Add TLSVersion constants and SSLContext.maximum_version / minimum_version attributes. The new API wraps OpenSSL 1.1 https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html feature.

- bpo-24334: 清理了ssl模块的内部实现细节。SSLSocket减少了一层间接引用。所有者与会话信息现在由SSLSocket和SSLObject的构造函数处理。通道绑定实现已被简化。

- bpo-31848: 修复Aifc_read.initfp()中当SSND块未找到时的错误处理。补丁由Zackery Spytz提供。

- bpo-32585: 向 `tkinter.ttk` 添加Ttk spinbox小部件。由Alan D Moore提供补丁。

- bpo-32512: `profile` CLI accepts `-m module_name` as an alternative to script path.

- bpo-8525: 现在，一个类型上的help()会显示内置的子类。这主要是为了帮助通知更具体的异常子类。

  由Sanyam Khurana提供补丁。

- bpo-31639: http.server现在公开了一个ThreadingHTTPServer类，并在使用 `-m` 运行模块时使用它，以应对web浏览器预打开套接字的情况。

- bpo-29877: compileall: 仅在需要时导入ProcessPoolExecutor，防止在资源低的平台上挂起

- bpo-32221: 现在，返回包含IPv6地址的元组的各种函数省略了 `%scope` 部分，因为相同的信息已经在 scopeid 元组项中编码。特别是这加快了 `socket.recvfrom()` 在接收多播数据包时的速度，因为省略了无用的网络接口名称解析。

- bpo-32147: `binascii.unhexlify()` 现在快了2倍。由Sergey Fedoseev提供补丁。

- bpo-30693: TarFile类现在以一种可重复的方式递归目录。

- bpo-30693: ZipFile类现在以一种可重复的方式递归目录。

- bpo-31680: 添加了 `curses.ncurses_version`。

- bpo-31908: 修复了 `trace` 模块命令行工具的封面文件输出。之前仅在使用了 `--missing` 选项时才会发出封面文件。由Michael Selik提供补丁。

- bpo-31608: 如果 `collections.deque` 子类从 `__new__` 返回非队列，现在会引发一个``TypeError``而不是崩溃。由Oren Milman提供补丁。

- bpo-31425: 添加了对AF_QIPCRTR地址族套接字的支持，这是Linux内核支持的。这用于与运行在Qualcomm设备上的服务（如GPS或无线电）通信。由Bjorn Andersson提供补丁。

- bpo-22005: 实现了对Python 2腌制的 `datetime`、`date` 和 `time` 实例的解腌。应该使用 `encoding='latin1'` 以成功解码。

- bpo-27645: 如果底层的SQLite库版本为3.6.11或更高，`sqlite3.Connection` 现在公开了一个 `backup` 方法。由Lele Gaifax提供补丁。

- bpo-16865: 在 `ctypes` 中支持>=2GiB的数组。由Segev Finer提供补丁。

- bpo-31508: Removed support of arguments in `tkinter.ttk.Treeview.selection`. It was deprecated in 3.6. Use specialized methods like `selection_set` for changing the selection.

- bpo-29456: 修复韩文音节标准化中的漏洞：u1176、u11a7和u11c3。

### 文档

- bpo-21257: 文档化 `http.client.parse_headers()`。

- bpo-34764: 改进了iter()带有第二个哨兵参数的示例。

- bpo-35564: 为了符合Sphinx 2.0，明确设置了conf.py中的master_doc变量。

- bpo-35511: 指定了profile.Profile类不支持enable或disable方法。并且详细说明了Profile对象作为上下文管理器仅在cProfile模块中支持。

- bpo-10536: 增强gettext文档。由Éric Araujo提供补丁。

- bpo-35089: 移除了对 `typing.io` 和 `typing.re` 的提及。它们的类型应该直接从 ``typing``导入。

- bpo-35038: Fix the documentation about an unexisting `f_restricted` attribute in the frame object. Patch by Stéphane Wirtel

- bpo-35042: 用pep角色替换PEP XYZ，并允许直接链接到PEPs。

- bpo-35044: 修复了文档中使用 `exc` 角色指向适当异常的错误。由Stéphane Wirtel提供补丁。

- bpo-35035: 将 `email.utils` 的文档重命名为 `email.utils.rst`。

- bpo-34967: 使用app.add_object_type()代替已弃用的Sphinx函数app.description_unit()。

- bpo-34913: 添加了关于gzip模块新命令行界面的文档。

- bpo-32174: chm document displays non-ASCII charaters properly on some MBCS Windows systems.

- bpo-11233: 为文档创建可用性指令。原始由Georg Brandl提供补丁。

- bpo-34790: 文档说明将协程传递给 asyncio.wait() 可能会引起混淆。

- bpo-34552: Make clear that `==` operator sometimes is equivalent to `is`. The `<`, `<=`, `>` and `>=` operators are only defined where they make sense.

- bpo-28617: 修复了 stdtypes 文档中关于支持成员资格测试的类型的错误信息。

- bpo-20177: 将 datetime.date.fromtimestamp 迁移到 Argument Clinic。由 Tim Hoffmann 提供补丁。

- bpo-34065: 修复了 basicConfig 文档标记语法的错误写法。

- bpo-33460: 在教程第3章中，用正确的错误代码替换了省略号。

- bpo-33847: 在索引中添加 '@' 操作符条目。

- bpo-33409: 澄清了 PEP 538 的 PYTHONCOERCECLOCALE 和 PEP 540 的 PYTHONUTF8 模式之间的关系。

- bpo-33197: 在 ParameterKind.description 的文档中添加了 versionadded 标签。

- bpo-17045: 改进了 PyTypeObject 的 C-API 文档。包括添加了几个快速参考表和许多缺失的槽/类型定义条目。现有的条目也被清理，格式更加一致。

- bpo-33736: 改进了 `asyncio.open_connection()`、`asyncio.start_server()` 及其 UNIX 套接字对应函数的文档。

- bpo-23859: Document that `asyncio.wait()` does not cancel its futures on timeout.

- bpo-32436: 文档说明 PEP 567 对 asyncio 的更改。

- bpo-33604: 将 HMAC md5 的默认警告更新为 DeprecationWarning，移除时间推迟到 3.8。

- bpo-33594: 在各自的文档字符串中将 `getargspec`、`from_function` 和 `from_builtin` 标记为已弃用，并在 DeprecationWarning 消息中包含弃用版本。

- bpo-33503: 修复损坏的 pypi 链接

- bpo-33421: 为 `typing.AsyncContextManager` 添加缺失的文档。

- bpo-33487: 当传递 buffering=None 时，BZ2file 现在会发出 DeprecationWarning，弃用消息和文档现在也明确说明自 3.0 起已弃用。

- bpo-33378: 为 https://docs.python.org/3/ 添加韩语语言切换器。

- bpo-33276: 澄清模块上的 `__path__` 属性不能是任意值。

- bpo-33201: 现代化编写 C 扩展类型的文档。

- bpo-33195: 在 `c-api/arg` 文档中弃用 `Py_UNICODE` 的使用。自 Python 3.3 起，`Py_UNICODE` 相关 API 已被弃用，但文档中遗漏了这一点。

- bpo-33126: 文档化 PyBuffer_ToContiguous()。

- bpo-27212: 修改 `islice()` 函数示例代码的文档说明，使其在起始索引前消耗初始值。

- bpo-28247: 更新 `zipapp` 文档，描述如何制作独立应用程序。

- bpo-18802: ipaddress 的文档更改。由 Jon Foster 和 Berker Peksag 提供补丁。

- bpo-27428: 更新文档以澄清 `WindowsRegistryFinder` 实现了 `MetaPathFinder`。（补丁由 Himanshu Lakhara 提供）

- bpo-28124: ssl 模块函数 ssl.wrap_socket() 已被弱化并弃用，推荐使用更安全高效的 SSLContext.wrap_socket() 方法。

- bpo-17232: 澄清 -O 和 -OO 的文档。由 Terry Reedy 提供补丁。

- bpo-32436: 为 contextvars 模块（PEP 567）添加文档。

- bpo-32800: 更新 xml 默认命名空间的 w3c 文档链接。

- bpo-11015: 更新 `test.support` 文档。

- bpo-32613: 更新 faq/windows.html，使用 PEP 397 中的 py 命令而非 python。

- bpo-8722: 文档化当属性 `get()` 方法引发 `AttributeError` 时 `__getattr__()` 的行为。

- bpo-32614: 修改文档中的正则表达式示例，使用原始字符串以防止 `DeprecationWarning`，并在正则表达式 HOWTO 中添加文本以突出弃用。

- bpo-20709: 删除解释 os.utime() 在 Windows 下不支持目录作为路径的段落。由 Jan-Philip Gehrcke 提供补丁。

- bpo-32722: 移除生成器表达式教程中的不良示例。由 Stéphane Wirtel 提供补丁。

- bpo-31972: Improve docstrings for `pathlib.PurePath` subclasses.

- bpo-30607: 在构建文档时使用外部化的 `python-docs-theme` 包。

- bpo-8243: 添加关于 curses.addch 和 curses.addstr 在窗口或 pad 外部写入时的异常行为的注释。

- bpo-32337: 更新与 `dict` 顺序相关的文档。

- bpo-25041: 在 `socket` 模块中记录 `AF_PACKET`。

- bpo-31432: 澄清 ssl.SSLContext.verify_mode 的 CERT_NONE、CERT_OPTIONAL 和 CERT_REQUIRED 标志的含义。

### 测试

- bpo-35772: 在 ppc64 上使用 tmpfs 文件系统修复 test_tarfile 的稀疏文件测试。修复测试文件系统是否支持稀疏文件的函数：创建一个包含数据和“空洞”的文件，而不是创建一个不包含数据的文件。tmpfs 的有效块大小是一个页面大小（tmpfs 存在于页面缓存中）。RHEL 在 aarch64、ppc64、ppc64le 上使用 64 KiB 页面，只有 s390x 和 x86_64 使用 4 KiB 页面，而测试打孔的是 4 KiB。

- bpo-35045: 使 ssl 测试不那么严格，也接受 TLSv1 作为系统默认值。这些更改修复了 Fedora 29 上的 test_min_max_version。

- bpo-32710: `test_asyncio/test_sendfile.py` 现在像其他测试一样使用 `tearDownModule()` 重置事件循环策略，以防止在 Windows 上运行测试时出现警告。

- bpo-33717: test.pythoninfo 现在记录所有时钟的信息，而不仅仅是 time.time() 和 time.perf_counter()。

- bpo-35488: 向 pathlib 的 Path.match() 添加一个测试，以验证它不支持 glob 风格的 ** 递归模式匹配。

- bpo-31731: 修复 test_io 的 `check_interrupted_write()` 中的竞争条件：直接创建带有 SIGALRM 信号阻塞的线程，而不是稍后从线程中阻塞信号。以前，有可能线程在信号被阻塞之前就收到了信号。

- bpo-35424: 修复 test_multiprocessing_main_handling：使用 `multiprocessing.Pool` 与上下文管理器，然后显式加入池。

- bpo-35519: 将 `test.bisect` 模块重命名为 `test.bisect_cmd`，以避免在直接运行测试如 `./python Lib/test/test_xmlrpc.py` 时与 `bisect` 模块冲突。

- bpo-35513: 在测试中用 `time.monotonic()` 替换 `time.time()` 来测量时间差。

- bpo-34279: `test.support.run_unittest()` 不再在测试结果包含跳过的测试时引发 `TestDidNotRun` 异常。现在只有在没有运行任何测试且没有跳过任何测试时才会引发该异常。

- bpo-35412: 向 `test_future4` 添加测试用例：检查 unicode 字面量。

- bpo-26704: 添加了演示实例方法双重修补的测试。由 Anthony Sottile 提供补丁。

- bpo-33725: 在 macOS 的较新版本上，test_multiprocessing_fork 可能会崩溃。在问题解决之前，在 macOS 上跳过该测试。

- bpo-35352: 修改 test_asyncio 以使用测试目录中的证书集。

- bpo-35317: 修复 `test_email` 中的 `mktime()` 溢出错误：在特定时区下运行 `test_localtime_daylight_true_dst_true()` 和 `test_localtime_daylight_false_dst_true()`。

- bpo-21263: 在多次报告 test_gdb 在 macOS 上无法正常工作后，并且由于 gdb 不再默认附带，当使用 LLVM Clang 编译 Python 时，现在在 macOS 上跳过 test_gdb。由 Lysandros Nikolaou 提供补丁

- bpo-34279: 当在特定测试文件中没有执行任何测试时，regrtest 发出警告。此外，如果在所有测试文件中没有执行任何测试，则发出新的最终结果状态。由 Pablo Galindo 提供补丁。

- bpo-34962: Doc 中的 docstest 现在通过了，并且在 CI 中强制执行。

- bpo-23596: 为 gzip 模块的命令行使用 argparse。由 Antony Lee 提供补丁

- bpo-34537: 当 `LC_ALL=C` 且 GDB 是用 Python 3.6 或更早版本编译时，修复 `test_gdb.test_strings()`。

- bpo-34587: test_socket: 移除RDSTest.testCongestion()。该测试试图填满接收者的套接字缓冲区并期望出现错误。但RDS协议并不要求这一点。此外，RDS的Linux实现期望消息的生产者降低其速率，触发错误不是接收者的角色。该测试在Fedora 28上按设计失败，因此直接移除它。

- bpo-34661: 如果unzip不支持-t，修复test_shutil。

- bpo-34200: 通过不使用可怕的test.support.module_cleanup()逻辑来保存和恢复测试用例之间的sys.modules内容，修复了test_pkg的非确定性波动。

- bpo-34569: 实验性的PEP 554数据通道现在在32位系统上正确地在子解释器之间传递负的PyLong对象。由Michael Felt提供补丁。

- bpo-34594: 修复测试中硬编码的 `errno` 值的使用。

- bpo-34579: 为AIX修复test_embed，由Michael Felt提供补丁

- bpo-34542: 使用3072位的RSA密钥和SHA-256签名用于测试证书和密钥。

- bpo-11193: Remove special condition for AIX in `test_subprocess.test_undecodable_env`

- bpo-34347: Fix `test_utf8_mode.test_cmd_line` for AIX

- bpo-34490: 在AIX上，使用AF_UNIX家族套接字的getsockname()不提供'sockname'，因此跳过对transport.get_extra_info('sockname')的调用

- bpo-34391: 通过从数据套接字读取，为TLS 1.3修复ftplib测试。

- bpo-11192: Fix `test_socket` on AIX 6.1 and later IPv6 zone id supports only supported by inet_pton6_zone() Switch to runtime-based platform.system() to establish current platform rather than build-time based sys.platform()

- bpo-34399: 更新所有RSA密钥和DH参数以使用至少2048位。

- bpo-34373: 为AIX修复 `test_mktime` 和 `test_pthread_getcpuclickid` 测试，为AIX添加对``_PyTime_localtime``的范围检查，由Michael Felt提供补丁

- bpo-11191: 当使用XLC作为编译器时，跳过distutils测试'test_search_cpp'，由aixtools（Michael Felt）提供补丁

- 改进了当模拟 assert_has_calls 失败时的错误信息。

- bpo-33746: 修复在详细模式下运行时的 test_unittest。

- bpo-33901: 在 macOS 上使用 gdbm 1.15 修复 test_dbm_gnu：添加一个更大的值以确保文件大小发生变化。

- bpo-33873: 修复 `regrtest` 中的一个错误，该错误在使用了 --huntrleaks/-R 时会导致额外运行一个测试。如果指定了无效的参数给 --huntrleaks/-R（至少必须使用一次预热运行和一次重复运行），则退出并报错。

- bpo-33562: 检查任何测试是否没有留下全局 asyncio 事件循环策略。

- bpo-33655: 忽略在可能由于在 ZFS 上运行而导致的 BSD 平台上的 test_posix_fallocate 失败。

- bpo-32962: 当 Python 使用标志 -mcet -fcf-protection -O0 编译时，修复 test_gdb。

- bpo-33358: 当解释器使用 `--enable-shared` 构建时，修复 `test_embed.test_pre_initialization_sys_options()`。

- bpo-32872: 避免 regrtest 与命名空间包的兼容性问题。

- bpo-32517: 修复由于 `KqueueSelector` 循环的传输未被关闭而在 macOS 10.12.2+ 上失败的 `test_asyncio`。

- bpo-32663: Making sure the `SMTPUTF8SimTests` class of tests gets run in test_smtplib.py.

- bpo-27643: Test_C 测试用例需要“有符号短”位字段，但 IBM XLC 编译器（在 AIX 上）不支持此功能，当使用 AIX 和 XLC 时跳过代码和测试

  适用于 Python2-2.7 及以后版本

- bpo-19417: 添加 test_bdb.py。

- bpo-31809: 添加测试以验证与 secp ECDH 曲线的连接。

### 构建

- bpo-34691: _contextvars 模块现在被内置到 Windows 上的核心 Python 库中。

- bpo-35683: 改进了 Azure Pipelines 构建步骤，现在正确验证布局

- bpo-35642: 从 pythoncore.vcxproj 中移除 asynciomodule.c

- bpo-35550: 修复编译时错误的 Solaris #ifdef 检查，改为查找 __sun && __SVR4 而不是 sun。

- bpo-35499: `make profile-opt` 不再用 `CFLAGS` 替换 `CFLAGS_NODIST`。现在它将配置文件引导优化（PGO）标志添加到 `CFLAGS_NODIST` 中：原有的 `CFLAGS_NODIST` 标志被保留。

- bpo-35257: 在编译 C 扩展时，避免将链接时间优化（LTO）的链接器标志泄漏到 distutils 中。

- bpo-35351: 当使用 clang 和 LTO 构建 Python 时，不再将 LTO 标志传递到 CFLAGS 中，以通过 distutils 构建第三方 C 扩展。

- bpo-35139: Fix a compiler error when statically linking `pyexpat` in `Modules/Setup`.

- bpo-35059: PCbuild：在 Debug 模式下将 InlineFunctionExpansion 设置为 OnlyExplicitInline（"/Ob1" 选项）在 pyproject.props 中，以展开标记为内联的函数。这一变化应该会使在 Windows 上以 Debug 模式编译的 Python 稍微快一些。

- bpo-35011: 恢复使用 pyexpatns.h 来隔离我们嵌入的 expat C 库副本，以便其符号在链接或动态加载时不会与嵌入应用程序或其他带有自己版本 libexpat 的扩展模块冲突。

- bpo-28015: 使 --with-lto 与 clang 正确工作。

- bpo-34765: 将过时的 install-sh 文件更新至 automake v1.16.1 的最新修订版。

- bpo-34585: 在 configure.ac 中使用编译测试而不是执行代码来检查浮点字节顺序，以便这些检查在交叉编译构建中工作。

- bpo-34710: 修复了使用 OpenSSL 和严格 CFLAGS 构建 SSL 模块的问题。

- bpo-34582: 为回归测试添加 JUnit XML 输出并更新 Azure DevOps 构建。

- bpo-34081: 在 Docs Makefile 中将 Sphinx 警告视为错误。

- bpo-34555: 修复了无法同时未定义 `HAVE_LINUX_VM_SOCKETS_H` 和 `HAVE_SOCKADDR_ALG` 的情况。

- bpo-33015: 修复了 `PyThread_start_new_thread()` 的 pthread 实现中的一个未定义行为：添加一个函数包装器以始终返回 `NULL`。

- bpo-34245: Python共享库现在以写权限（模式0755）安装，这是安装此类库的标准方式。

- bpo-34121: 修复在clang上对C11原子支持的检测。

- bpo-32430: 将Modules/Setup.dist重命名为Modules/Setup，并消除在更新本地源代码树时需要手动将前者复制到后者的必要性。

- bpo-30345: 在使用LTO编译时添加-g到LDFLAGS以获取调试符号。

- bpo-5755: 将 `-Wstrict-prototypes` 选项从 `OPT` 移到 `CFLAGS_NODIST`。此选项在用C++编写扩展模块时会产生烦人的警告。

- bpo-33614: 确保Windows上稳定ABI的模块定义文件被正确重新生成。

- bpo-33648: 已移除--with-c-locale-warning配置标志。它已经大约一年没有效果了。

- bpo-33522: 在https://python.visualstudio.com/cpython上启用Visual Studio Team Services的CI构建。

- bpo-33522: 配置对"long double"的检查已被简化

- bpo-33483: 现在可以从标准环境变量中正确检测C编译器。--without-gcc和--with-icc选项已被移除。

- bpo-33394: 当GNU make在命令行上传递宏时，为扩展模块启用详细构建。

- bpo-33393: 更新config.guess和config.sub文件。

- bpo-33377: 为mips r6和riscv变体添加新的三元组（用于扩展后缀）。

- bpo-32232: By default, modules configured in `Modules/Setup` are no longer built with `-DPy_BUILD_CORE`. Instead, modules that specifically need that preprocessor definition include it in their individual entries.

- bpo-33182: 嵌入测试可以再次用clang 6.0构建。

- bpo-33163: 将pip升级到9.0.3，setuptools升级到v39.0.1。

- bpo-33012: gcc 8 新增了一个警告启发式方法来检测无效的函数转换，而标准的 Python 构建似乎经常触发该警告。最常见的是将 METH_NOARGS 函数（仅使用一个参数）转换为 PyCFunction。通过为所有实现 METH_NOARGS 的函数添加一个虚拟参数来解决这个问题。

- bpo-32898: 修复了在使用 COUNT_ALLOCS 时的 Python 调试构建问题。

- bpo-29442: 在 setup.py 中用 argparse 替换 optparse。

### Windows

- bpo-35890: 修复 GetVersionEx 和 wcstok 的 API 调用一致性。

- bpo-32560: `py` 启动器现在将其 `STARTUPINFO` 结构转发给子进程。

- bpo-35854: 在 Windows 上修复 EnvBuilder 和 --symlinks 在 venv 中的问题。

- bpo-35811: 避免在通过 py.exe 启动时传播 venv 设置。

- bpo-35797: 修复 multiprocessing 模块使用的默认可执行文件。

- bpo-35758: 允许在 ARM 上使用 MSVC 进行构建。

- bpo-29734: 修复 Windows 上 os.stat 中的句柄泄漏问题。

- bpo-35596: 为嵌入式发行版使用未检查的 PYC，以避免 zipimport 限制。

- bpo-35596: 修复 vcruntime140.dll 被多次添加到嵌入式发行版的问题。

- bpo-35402: 更新 Windows 构建以使用 Tcl 和 Tk 8.6.9。

- bpo-35401: 将 Windows 构建更新至 OpenSSL 1.1.0j。

- bpo-34977: Windows 上的 venv 现在将使用 python.exe 重定向器，而不是从基础环境中复制实际的二进制文件。

- bpo-34977: 添加了对构建 Windows 应用商店包的支持。

- bpo-35067: 移除 _distutils_findvs 模块并改用 vswhere.exe。

- bpo-32557: 允许 shutil.disk_usage 在 Windows 上接受文件路径。

- bpo-34770: 修复 pyshellext.cpp 中可能的空指针解引用问题。

- bpo-34603: 修复由 MSVC 生成的函数返回结构体的问题。

- bpo-34581: 在 socketmodule.c 中使用 `#ifdef _MSC_VER` 保护 MSVC 特定代码。

- bpo-34532: 修复了 py.exe 的列表版本参数的退出代码。

- bpo-34062: 修复了 py.exe 启动器的 '--list' 和 '--list-paths' 参数。

- bpo-34225: 确保INCLUDE和LIB目录不以反斜杠结尾。

- bpo-34011: 一套代码已被更改，这些代码从运行的Python位置复制DLLs和init.tcl到正在创建的venv中。这些复制仅在从Python源代码构建运行时需要，现在复制代码仅在这种情况下运行，而不是在创建venv时总是运行。

- bpo-34006: 恢复Windows帮助文档的行长度限制。行长度限制不需要，因为页面显示在单独的应用程序中而不是浏览器标签中。它也可能与DPI设置产生不良互动。

- bpo-31546: 恢复在提示符等待用户输入时运行PyOS_InputHook。这恢复了交互式GUI窗口（如Matplotlib图形）与Windows上提示符的集成。

- bpo-30237: 当ReadConsole被CancelSynchronousIo取消时输出错误而不是崩溃。

- bpo-33895: 在调用获取Windows加载器锁的函数时释放GIL。

- bpo-33720: 减少发布版本上的最大marshal递归深度。

- bpo-29097: 修复 `datetime.fromtimestamp()` 在Windows上对0到86400之间的值错误抛出 `OSError` 的bug。由Ammar Askar提供补丁。

- bpo-33316: PyThread_release_lock总是失败

- bpo-33184: 更新Windows安装程序以使用OpenSSL 1.1.0h。

- bpo-32890: 修复os.execve()和os.truncate()中使用GetLastError()而不是errno的问题。

- bpo-33016: 修复nt._getfinalpathname中潜在使用未初始化内存的问题。

- bpo-32903: 修复如果当前目录设置为UNC路径时Windows上os.chdir()的内存泄漏。

- bpo-32901: 将Tcl和Tk版本更新到8.6.8

- bpo-31966: 修复WindowsConsoleIO.write()写入空数据的问题。

- bpo-32409: 确保activate.bat可以处理Unicode内容。

- bpo-32457: 改进启动Python时对非规范化可执行路径的处理。

- bpo-32370: 在uuid模块中为ipconfig输出使用正确的编码。由Segev Finer提交补丁。

- bpo-29248: 修复Windows上的 `os.readlink()`，它错误地将重新解析数据缓冲区的``PrintNameOffset`` 字段视为字符数而非字节数。由Craig Holmquist和SSE4提交补丁。

- bpo-1104: 正确处 `msilib.SummaryInfo.GetProperty()` 中的字符串长度，以防止其截断最后一个字符。

### macOS

- bpo-35401: 更新macOS安装程序以使用OpenSSL 1.1.0j。

- bpo-35025: 在macOS上正确保护 `timemodule` 中使用 `CLOCK_GETTIME` 等宏。

- bpo-24658: 在macOS上，修复从大小超过2 GiB的文件读取和写入的问题。

- bpo-34405: 为macOS安装程序构建更新至OpenSSL 1.1.0i。

- bpo-33635: 在macOS上，某些文件描述符（例如/dev/fd/3）的stat将导致坏文件描述符OSError。在is_dir、is_file及类似方法中添加了对这一异常的防护。DirEntry.is_dir也可能抛出此异常，因此_RecursiveWildcardSelector._iterate_directories也扩展了相同的错误忽略模式。

- bpo-13631: 在macOS上通过editline模拟初始化readline时，现在可以正确处理用户主目录中的.editrc文件。

- bpo-33184: 更新macOS安装程序构建以使用OpenSSL 1.1.0h。

- bpo-32726: 为macOS 10.6+安装程序构建并链接Tcl/Tk 8.6的私有副本。10.9+安装程序变体已经这样做了。这意味着python.org macOS安装程序提供的Python 3.7不再需要或使用任何外部版本的Tcl/Tk，无论是系统提供的还是用户安装的，如ActiveTcl。

- bpo-32901: 将macOS 10.9+安装程序更新至Tcl/Tk 8.6.8。

- bpo-31903: In `_scproxy`, drop the GIL when calling into `SystemConfiguration` to avoid deadlocks.

### IDLE

- bpo-35770: IDLE在macosx上删除了选项 => 配置IDLE。之前错误地删除了窗口 => 缩放高度（缩放高度现在在选项菜单中）。在Mac上，设置对话框通过IDLE菜单中的偏好设置访问。

- bpo-35769: 将IDLE的新文件名从'Untitled'改为'untitled'。

- bpo-35660: 修复idlelib.window中的导入。

- bpo-35641: Proper format `calltip` when the function has no docstring.

- bpo-33987: 为ttk小部件使用ttk框架。

- bpo-34055: 修复IDLE Shell中错误的'智能'缩进和换行。

- bpo-35591: 现在，当未找到选择时，查找选择也能工作。

- bpo-35196: 加速squeezer的行计数。

- bpo-35598: 更新config_key：使用PEP 8命名和ttk小部件，使一些对象全局化，并添加测试。

- bpo-28097: 在Shell菜单中添加上一个/下一个历史记录条目。

- bpo-35208: Squeezer现在在新行之前正确计算换行。

- bpo-35555: 当代码上下文菜单条目不适用时，将其置灰。

- bpo-35521: 记录IDLE编辑器代码上下文功能。在IDLE文档中添加一些内部引用。

- bpo-22703: 代码上下文菜单标签现在在显示/隐藏代码上下文之间切换。缩放高度菜单现在在缩放/恢复高度之间切换。缩放高度已从窗口菜单移动到选项菜单。

- bpo-35213: 在适当的地方，在idlelib中使用'macOS'。

- bpo-34864: 在macOS上，如果系统偏好设置“打开文档时偏好标签页”设置为“总是”，则发出警告。

- bpo-34864: 记录两个在MacOS上的IDLE问题。系统偏好设置Dock“总是偏好标签页”设置禁用了一些IDLE功能。菜单与Windows和Linux的描述有些不同。

- bpo-35202: 从lib/idlelib中移除未使用的导入。

- bpo-33000: 记录IDLE的Shell没有行限制。一个无限运行的程序可能会耗尽内存。

- bpo-23220: 解释IDLE的Shell如何显示输出。

- bpo-35099: Improve the doc about IDLE running user code. The section is renamed from "IDLE -- console differences" is renamed "Running user code". It mostly covers the implications of using custom sys.stdxxx objects.

- bpo-35097: 在IDLE文档中添加解释编辑器窗口的子章节。主题包括打开、标题和状态栏、.py*扩展名以及运行。

- bpo-35093: 在IDLE文档中记录IDLE文档查看器。在“帮助和偏好设置”中的“帮助来源”子部分添加一段。

- bpo-35088: 更新idlelib.help.copy_string的文档字符串。我们现在使用git和后向移植而不是hg和前向合并。

- bpo-35087: 为当前文档构建更新idlelib帮助文件。主要变化是消除了章节-节号。

- bpo-34548: 为只读文本视图使用配置的颜色主题。

- bpo-1529353: 启用shell中长输出的“压缩”，以避免性能下降并在不丢失历史记录的情况下清理历史。压缩的输出可以复制、在单独窗口中查看并“解压”。

- bpo-34047: 修复了macOS上鼠标滚轮的滚动方向。

- bpo-34275: 使IDLE的调用提示在Mac上始终可见。某些MacOS-tk组合需要.update_idletasks()。由Kevin Walzer提供的补丁。

- bpo-34120: 修复关闭某些窗口和对话框后的无响应问题。

- bpo-33975: 在运行htests时避免小字体。由于人类查看测试的部分目的是确定小部件看起来是否正确，因此重要的是它们在测试时看起来与运行IDLE时相同。

- bpo-33905: 为idlelib.stackview.StackBrowser添加测试。

- bpo-33924: 将mainmenu.menudefs键'windows'更改为'window'。每个其他menudef键都是主菜单项的小写版本。

- bpo-33906: 将idlelib.windows重命名为window，以匹配主菜单上的Window，并移除最后一个复数模块名称。

- bpo-33917: 修复并记录idlelib/idle_test/template.py。修订后的文件编译、运行和测试均正常。idle_test/README.txt说明了如何使用它来创建新的IDLE测试文件。

- bpo-33904: IDLE：在rstrip中，将类RstripExtension重命名为Rstrip

- bpo-33907: 为了保持一致性和清晰度，重命名一个IDLE模块和类。模块calltips及其类CallTips现在更名为calltip和Calltip。在模块calltip_w中，类CallTip现在更名为CalltipWindow。

- bpo-33856: 在IDLE的欢迎消息中添加“帮助”

- bpo-33839: IDLE：重构ToolTip和CallTip并添加文档和测试

- bpo-33855: 对所有IDLE模块进行最小化测试。添加缺失的文件，导入模块，实例化类，并检查覆盖率。检查现有文件。

- bpo-33656: 在Windows上，添加API调用表明tk针对DPI进行缩放。在Windows 8.1+或10上，Python二进制文件的DPI兼容性属性未更改，且显示器分辨率大于96 DPI时，这应使文本和线条更清晰。否则应无影响。

- bpo-33768: 点击上下文行将该行移动到编辑器窗口的顶部。

- bpo-33763: IDLE：使用只读文本小部件代替标签小部件作为代码上下文。

- bpo-33664: 按行滚动IDLE编辑器文本。之前，鼠标滚轮和滚动条滑块以固定像素数移动文本，导致编辑器盒顶部出现部分行。此更改也适用于shell和grep输出窗口，但不适用于只读文本视图。

- bpo-33679: 启用代码上下文的主题特定颜色配置。使用“高亮”选项卡查看内置主题的设置或为自定义主题添加设置。

- bpo-33642: 为代码上下文显示最多maxlines非空行。如果没有当前上下文，则显示单个空行。

- bpo-33628: IDLE：清理codecontext.py及其测试。

- bpo-33564: IDLE的代码上下文现在能识别async作为一个块的开头。

- bpo-21474: 将单词/标识符的定义从ASCII更新为Unicode。在文本和输入框中，这会影响通过双击选择、通过control-left/right左右移动以及通过control-BACKSPACE/DEL左右删除。

- bpo-33204: IDLE：一致地着色无效的字符串前缀。'u'字符串前缀不能与'r'或'f'配对。从右边开始，尽可能多地着色有效的部分。修订并扩展颜色化器测试。

- bpo-32984: 在运行启动文件时设置 `__file__`。与Python一样，IDLE在展示第一个交互式输入提示之前，可选地在Shell窗口中运行一个启动文件。对于IDLE，`-s``运行环境变量 :envvar:`IDLESTARTUP` 或 :envvar:`PYTHONSTARTUP` 中命名的文件；`-r file`` 运行 `file`。Python在运行文件之前将 `__file__` 设置为启动文件名，并在第一个提示之前取消设置。IDLE现在在没有 `-n` 选项的情况下正常运行时也会这样做。

- bpo-32940: 在pyparse中简化并重命名StringTranslatePseudoMapping。

- bpo-32916: 在pyparse中将 `str` 更改为 `code`。

- bpo-32905: 移除pyparse模块中未使用的代码。

- bpo-32874: 为pyparse添加测试。

- bpo-32837: 对于IDLE的系统和位置无关文件，使用系统和位置相关的默认编码对于open()来说是一个坏主意。

- bpo-32826: 在IDLE的test_help_about的open()中添加"encoding=utf-8"。GUI测试test_file_buttons()仅查看初始的ascii-only行，但在open()默认为'ascii'的系统上失败，因为readline()内部读取和解码足够远，以在CREDITS.txt中遇到非ascii字符。

- bpo-32831: 为codecontext添加文档字符串和测试。

- bpo-32765: 更新configdialog General标签的文档字符串，将新部件添加到部件列表中。

### 工具/示例

- bpo-35884: 添加一个基准测试脚本，用于计时访问变量的各种方式：`Tools/scripts/var_access_benchmark.py`。

- bpo-34989: python-gdb.py 现在可以处理计算 Python 帧行号时的错误。

- bpo-20260: Argument Clinic 现在有了非位无符号整型转换器。

- bpo-32962: python-gdb 现在在调用 `string()` 时会捕获 `UnicodeDecodeError` 异常。

- bpo-32962: python-gdb 现在会在 read_var() 上捕获 ValueError：例如当 Python 没有调试符号时。

- bpo-33189: pygettext.py 现在只识别字面字符串作为文档字符串和可翻译字符串，并拒绝字节字面量和 f-string 表达式。

- bpo-31920: 修复了 `pygettext` 脚本中将目录作为参数处理的问题。基于 Oleg Krasnikov 的补丁。

- bpo-29673: 修复 pystackv 和 pystack gdbinit 宏。

- bpo-25427: 移除 pyvenv 脚本，转而使用 `python3 -m venv`，以减少关于虚拟环境将为哪个 Python 解释器创建的混淆。

- bpo-32885: 为 `Tools/scripts/pathfix.py` 添加 `-n` 标志以禁用自动备份创建（带有 `~` 后缀的文件）。

- bpo-32222: 修复 pygettext 不提取带有类型注释参数的函数的文档字符串的问题。由 Toby Harradine 提供的补丁。

- bpo-31583: 修复 2to3 在使用 --add-suffix 选项但没有 --output-dir 选项时对当前目录中文件的相对路径的处理。

### C API

- bpo-35713: The `PyByteArray_Init()` and `PyByteArray_Fini()` functions have been removed. They did nothing since Python 2.7.4 and Python 3.2.0, were excluded from the limited API (stable ABI), and were not documented.

- bpo-33817: 修复了 `_PyBytes_Resize()` 对于空字节对象的处理。

- bpo-35322: 修复 `PyUnicode_EncodeLocale()` 和 `PyUnicode_EncodeFSDefault()` 在错误处理中的内存泄漏。

- bpo-35059: 以下 C 宏已转换为静态内联函数： `Py_INCREF()`, `Py_DECREF()`, `Py_XINCREF()`, `Py_XDECREF()`, `PyObject_INIT()`, `PyObject_INIT_VAR()`。

- bpo-35296: `make install` 现在也会安装内部 API：`Include/internal/*.h` 头文件。

- bpo-35081: 被 `#ifdef Py_BUILD_CORE` 包围的内部 API 已经从 `Include/*.h` 头文件移动到了新的头文件 `Include/internal/pycore_*.h` 中。

- bpo-35259: 根据 Py_LIMITED_API 有条件地声明 :c:func:`Py_FinalizeEx()`（3.6 新增）。补丁由 Arthur Neufeld 提供。

- bpo-35081: The `_PyObject_GC_TRACK()` and `_PyObject_GC_UNTRACK()` macros have been removed from the public C API.

- bpo-35134: 创建了一个新的 `Include/cpython/` 子目录。

- bpo-34725: 添加了 _Py_SetProgramFullPath 以便嵌入者可以覆盖 sys.executable

- bpo-34910: 确保 `PyObject_Print()` 在出错时总是返回 `-1`。由 Zackery Spytz 提供补丁。

- bpo-34523: 如果 Py_LegacyWindowsFSEncodingFlag 为零，Py_DecodeLocale() 和 Py_EncodeLocale() 现在在 Windows 上使用 UTF-8 编码。

- bpo-34193: 修复了 getargs.c 和 typeobject.c 中 TypeError 消息的单复数形式：'1 个参数' 代替 '1 个参数s' 和 '1 个元素' 代替 '1 个元素s'。

- bpo-34127: 根据参数数量返回语法正确的错误消息。由 Karthikeyan Singaravelan 提供补丁。

- bpo-23927: 修复了当 `w*` 格式单元用于可选参数时 `PyArg_ParseTupleAndKeywords()` 中的 `SystemError`。

- bpo-32455: 添加了 `PyCompile_OpcodeStackEffectWithJump()`。

- bpo-34008: Py_Main() 可以再次在 Py_Initialize() 之后被调用，就像在 Python 3.6 中一样。

- bpo-32500: 修复了当 `PySequence_Size()`、`PySequence_GetItem()`、`PySequence_SetItem()` 和 `PySequence_DelItem()` 被映射调用以及 `PyMapping_Size()` 被序列调用时的错误消息。

- bpo-33818: `PyExceptionClass_Name()` 现在将返回 `const char *` 而不是 `char *`。

- bpo-33042: 嵌入应用程序可以再次在调用 Py_Initialize 之前调用 PySys_ResetWarnOptions、PySys_AddWarnOption 和 PySys_AddXOption。

- bpo-32374: 文档说明多阶段初始化模块的 m_traverse 可以在 m_state=NULL 时调用，并添加健全性检查

- bpo-30863: `PyUnicode_AsWideChar()` 和 `PyUnicode_AsWideCharString()` 不再缓存字符串对象的 `wchar_t*` 表示。

## Python 3.7.0 正式版

发布日期: 2018-06-27

### 库

- bpo-33851: 修复 `ast.get_docstring()` 对于缺少文档字符串的节点的问题。

### C API

- bpo-33932: 调用 Py_Initialize() 两次不做任何操作，而不是以致命错误失败：恢复 Python 3.6 的行为。

## Python 3.7.0 rc1

发布日期: 2018-06-12

### 核心与内置函数

- bpo-33803: 修复 hamt.c 中的一个崩溃问题，该问题是由于为一个对象启用 GC 跟踪时，其所有字段未设置为 NULL 引起的。

- bpo-33706: 修复解析命令行选项时 Python 初始化过程中的崩溃问题。感谢 Christoph Gohlke 的报告和修复！

- bpo-30654: 修复了即使之前设置了自定义处理程序，在解释器关闭时 SIGINT 处理程序重置为 SIG_DFL 的问题。由 Philipp Kerling 提供补丁。

- bpo-31849: 修复了 pyhash.c 中的有符号/无符号比较警告。

### 库

- bpo-30167: 如果设置了PYTHONSTARTUP，防止site.main()异常。由Steve Weber提供补丁。

- bpo-33812: 对于tzinfo非None但d.tzinfo.utcoffset(d)返回None的Datetime实例d，现在astimezone()方法将其视为naive。

- bpo-30805: 避免调试日志记录中的竞态条件

- bpo-33694: asyncio: 修复在使用ProactorEventLoop时，pause_reading()/resume_reading()导致数据丢失的竞态条件。

- bpo-32493: 在 `configure.ac` 中更正对 `uuid_enc_be` 可用性的测试。由Michael Felt提供补丁。

- bpo-33792: 添加asyncio.WindowsSelectorEventLoopPolicy和asyncio.WindowsProactorEventLoopPolicy。

- bpo-33778: 更新 `unicodedata` 的数据库至Unicode版本11.0.0。

- bpo-33770: 针对长度无效的编码输入，改进base64异常消息

- bpo-33769: asyncio/start_tls: 修复错误消息；在未处理错误的情况下取消回调；如果SSLTransport被中止，则标记为已关闭。

- bpo-33767: 在 `mmap.mmap` 对象上执行时，连接（`+`）和重复（`*`）序列操作现在会引发 `TypeError` 而不是 `SystemError`。由 Zackery Spytz 提供补丁。

- bpo-33734: asyncio/ssl：修复 AttributeError，增加默认的握手超时时间

- bpo-11874: 当将用法分解为可包装部分时使用更好的正则表达式。避免来自自定义 metavar 字符串的错误断言错误。

- bpo-33582: 为 inspect.formatargspec 发出弃用警告。

### 文档

- bpo-33409: 澄清了 PEP 538 的 PYTHONCOERCECLOCALE 和 PEP 540 的 PYTHONUTF8 模式之间的关系。

- bpo-33736: 改进了 `asyncio.open_connection()`、`asyncio.start_server()` 及其 UNIX 套接字对应函数的文档。

- bpo-31432: 澄清 ssl.SSLContext.verify_mode 的 CERT_NONE、CERT_OPTIONAL 和 CERT_REQUIRED 标志的含义。

### 构建

- bpo-5755: 将 `-Wstrict-prototypes` 选项从 `OPT` 移到 `CFLAGS_NODIST`。此选项在用C++编写扩展模块时会产生烦人的警告。

### Windows

- bpo-33720: 减少发布版本上的最大marshal递归深度。

### IDLE

- bpo-33656: 在Windows上，添加API调用表明tk针对DPI进行缩放。在Windows 8.1+或10上，Python二进制文件的DPI兼容性属性未更改，且显示器分辨率大于96 DPI时，这应使文本和线条更清晰。否则应无影响。

- bpo-33768: 点击上下文行将该行移动到编辑器窗口的顶部。

- bpo-33763: IDLE：使用只读文本小部件代替标签小部件作为代码上下文。

- bpo-33664: 按行滚动IDLE编辑器文本。之前，鼠标滚轮和滚动条滑块以固定像素数移动文本，导致编辑器盒顶部出现部分行。此更改也适用于shell和grep输出窗口，但不适用于只读文本视图。

- bpo-33679: 启用代码上下文的主题特定颜色配置。使用“高亮”选项卡查看内置主题的设置或为自定义主题添加设置。

- bpo-33642: 为代码上下文显示最多maxlines非空行。如果没有当前上下文，则显示单个空行。

## Python 3.7.0 beta 5

发布日期: 2018-05-30

### 核心与内置函数

- bpo-33622: 修复了当垃圾收集器无法将带有 `__del__` 方法或被其引用的对象添加到 `gc.garbage` 列表时的内存泄漏问题。现在可以在设置异常时调用 `PyGC_Collect()`，并保留异常。

- bpo-33509: 修复了 warnings.warn_explicit() 的 module_globals 参数：如果 module_globals 不是字典，不会崩溃。

- bpo-20104: The new `os.posix_spawn` added in 3.7.0b1 was removed as we are still working on what the API should look like. Expect this in 3.8 instead.

- bpo-33475: 修复了将注释转换为字符串时的杂项错误，并优化了字符串表示中的括号。

- bpo-33391: 修复了 set_symmetric_difference() 中的内存泄漏。

- bpo-28055: 修复了 siphash24() 中的未对齐访问。由 Rolf Eike Beer 提供补丁。

- bpo-32911: 由于在下游beta测试期间发现的意外兼容性问题，恢复了 bpo-29463。从Module、ClassDef、FunctionDef和AsyncFunctionDef ast节点中移除了在3.7a1中添加的`docstring` 字段。docstring表达式被恢复为其主体的第一条语句。基于Inada Naoki的补丁。

- bpo-21983: Fix a crash in `ctypes.cast()` in case the type argument is a ctypes structured data type. Patch by Eryk Sun and Oren Milman.

### 库

- bpo-32751: 当由于超时取消任务时，`asyncio.wait_for()` 现在将等待直到取消完成。

- bpo-32684: 修复 gather 即使在 return_exceptions 的情况下也能传播自身的取消。

- bpo-33654: 在 SSLTransport.set_protocol() 中支持协议类型切换。

- bpo-33674: 尽早暂停传输，以进一步降低在 connection_made() 之前调用 data_received() 的风险。

- bpo-33674: 修复 asyncio.sslproto 中 SSLProtocol.connection_made() 的竞态条件：立即开始握手而不是使用 call_soon()。之前，data_received() 可能在握手开始前被调用，导致握手挂起或失败。

- bpo-31647: 修复了在 _SelectorSocketTransport 已经关闭后调用 write_eof() 会引发 AttributeError 的错误。

- bpo-32610: 使 asyncio.all_tasks() 仅返回待处理的任务。

- bpo-32410: 在 sendfile 回退代码中避免阻塞文件 IO。

- bpo-33469: 修复了使用 run_in_executor 后关闭循环时引发的 RuntimeError。

- bpo-33672: 修复 Task.__repr__ 与 Cython 的虚假协程一起使用时崩溃的问题。

- bpo-33654: 修复 transport.set_protocol() 以支持在 asyncio.Protocol 和 asyncio.BufferedProtocol 之间切换。修复 loop.start_tls() 以支持 asyncio.BufferedProtocols。

- bpo-33652: 类型变量和下标泛型的 pickle 现在具有未来兼容性，并与旧版 Python 兼容。

- bpo-32493: 修复了 FreeBSD 上的 `uuid.uuid1()`。

- bpo-33618: 完成并记录与 OpenSSL 1.1.1 的初步和实验性 TLS 1.3 支持。

- bpo-33623: 修复在 __del__ 中创建 asyncio.Future 时可能出现的 SIGSGV。

- bpo-30877: 修复了 JSON 解码器 Python 实现中的一个错误，该错误阻止了在完成解码后清除已解析字符串的缓存。基于 c-fos 的补丁。

- bpo-33570: 更改 TLS 1.3 密码套件设置，以兼容 OpenSSL 1.1.1-pre6 及更新版本。OpenSSL 1.1.1 将默认启用 TLS 1.3 密码。

- bpo-28556: Do not simplify arguments to `typing.Union`. Now `Union[Manager, Employee]` is not simplified to `Employee` at runtime. Such simplification previously caused several bugs and limited possibilities for introspection.

- bpo-33540: 向 `socketserver` 的 `ForkingMixIn` 和 `ThreadingMixIn` 类添加一个新的 `block_on_close` 类属性。

- bpo-33548: tempfile._candidate_tempdir_list 应考虑常见的 TEMP 位置

- bpo-33109: argparse 子解析器默认再次不需要，恢复了在 3.7.0a2 中由 bpo-26510 引入的行为变化。

- bpo-33536: dataclasses.make_dataclass 现在检查无效的字段名和重复的字段。此外，添加了对无效字段规范的检查。

- bpo-33542: 防止 `uuid.get_node` 在 Windows 上使用 DUID 而不是 MAC。由 Zvi Effron 提供补丁

- bpo-26819: Fix race condition with `ReadTransport.resume_reading` in Windows proactor event loop.

- Fix failure in `typing.get_type_hints()` when ClassVar was provided as a string forward reference.

- bpo-33505: 通过重新排序if检查优化asyncio.ensure_future()：速度提升1.17倍。

- bpo-33497: 向cgi.parse_multipart添加errors参数，并使FieldStorage中的编码使用给定的errors（Twisted所需）。由Amber Brown提供补丁。

- bpo-33495: 更改dataclasses.Fields的repr以使用其每个成员的repr，而非str。这使得每个字段实际代表的内容更加清晰。这对于'type'成员尤为明显。

- bpo-33453: 修复dataclasses以在使用字面字符串类型注解或使用PEP 563“推迟的注解评估”时工作。仅为ClassVar（"ClassVar"和"typing.ClassVar"）和InitVar（"InitVar"和"dataclasses.InitVar"）检测特定的字符串前缀。

- bpo-28556: typing模块中的小修复：向 `NamedTuple.__new__` 添加注解，在``Generic.__new__``中传递 `*args` 和 `**kwds`。原始PR由Paulius Šarka和Chad Dombrova提供。

- bpo-20087: 更新了支持glibc 2.27地区设置的别名映射。

- bpo-33422: 修复在pydoc上查找字节/字符串字面量时尾随引号被删除的问题。由Andrés Delfino提供补丁。

- bpo-28167: 函数 `platform.linux_distribution` 和 `platform.dist` 现在触发``DeprecationWarning``，并已被标记为在Python 3.8中移除。

- bpo-33197: Update error message when constructing invalid inspect.Parameters Patch by Dong-hee Na.

- bpo-33263: Fix FD leak in `_SelectorSocketTransport` Patch by Vlad Starostin.

- bpo-32861: urllib.robotparser 的 `__str__` 表示现在包括通配符条目以及 "Crawl-delay" 和 "Request-rate" 字段。由 Michael Lazar 提供补丁。

- bpo-32257: ssl模块现在包含OP_NO_RENEGOTIATION常量，适用于OpenSSL 1.1.0h或1.1.1版本。

- bpo-16865: 在 `ctypes` 中支持>=2GiB的数组。由Segev Finer提供补丁。

### 文档

- bpo-23859: Document that `asyncio.wait()` does not cancel its futures on timeout.

- bpo-32436: 文档说明 PEP 567 对 asyncio 的更改。

- bpo-33604: 将 HMAC md5 的默认警告更新为 DeprecationWarning，移除时间推迟到 3.8。

- bpo-33503: 修复损坏的 pypi 链接

- bpo-33421: 为 `typing.AsyncContextManager` 添加缺失的文档。

### 测试

- bpo-33655: 忽略在可能由于在 ZFS 上运行而导致的 BSD 平台上的 test_posix_fallocate 失败。

- bpo-32604: 移除 _xxsubinterpreters 模块（用于测试）和相关的辅助工具。此模块最近在 3.7b1 中添加。

### 构建

- bpo-33614: 确保Windows上稳定ABI的模块定义文件被正确重新生成。

- bpo-33522: 在https://python.visualstudio.com/cpython上启用Visual Studio Team Services的CI构建。

- bpo-33012: 为 gcc 8 添加 `-Wno-cast-function-type` 以静默关于函数类型转换的警告，如在方法定义列表中转换为 PyCFunction 的警告。

### macOS

- bpo-13631: 在macOS上通过editline模拟初始化readline时，现在可以正确处理用户主目录中的.editrc文件。

### IDLE

- bpo-33628: IDLE：清理codecontext.py及其测试。

- bpo-33564: IDLE的代码上下文现在能识别async作为一个块的开头。

- bpo-32831: 为codecontext添加文档字符串和测试。

## Python 3.7.0 beta 4

发布日期: 2018-05-02

### 核心与内置函数

- bpo-33363: 对于异步函数外的 `async with` 和 `async for` 语句，现在会引发 SyntaxError。

- bpo-33128: 修复了一个导致 PathFinder 在 sys.meta_path 上出现两次的 bug。由 Pablo Galindo Salgado 提供补丁。

- bpo-33312: 通过调整内部结构 _dictkeysobject 共享键结构的声明方式，修复了 dictobject.c 中的 clang ubsan（未定义行为消毒剂）警告。

- bpo-33231: 修复了 `normalizestring()` 中潜在的内存泄漏问题。

- bpo-33205: 将字典增长函数从 `round_up_to_power_2(used*2+hashtable_size/2)` 更改为 `round_up_to_power_2(used*3)`。 在之前版本中，字典仅在 `used == 0` 时才收缩。 现在字典有更多机会被收缩。

- bpo-29922: 改进了'async with'中当 `__aenter__()` 或 `__aexit__()` 返回不可等待对象时的错误消息。

- bpo-33199: 修复了在从键共享字典复制时，字典实现中的 `ma_version_tag` 未初始化的问题。

### 库

- bpo-33281: 修复macOS上ctypes.util.find_library的回归问题。

- bpo-33383: 修复了当使用单个参数调用 `dbm.ndbm` 数据库对象的get()方法时崩溃的问题。

- bpo-33329: 修复了在新版 glibc 上的多进程回归问题。

- bpo-991266: 修复了 `http.cookies.SimpleCookie` 的 `Comment` 属性的引用问题。

- bpo-33131: 将捆绑的 pip 版本升级至 10.0.1。

- bpo-33308: 修复了 `parser` 模块在将 ST 对象转换为元组或列表树时，当 `line_info=False` 且 `col_info=True` 时的崩溃问题。

- bpo-33266: lib2to3 现在能识别 `rf'...'` 字符串。

- bpo-11594: 确保在使用 lib2to3 时尊重行尾。

- bpo-33254: 让 `importlib.resources.contents()` 和 `importlib.abc.ResourceReader.contents()` 返回一个 iterable 而不是 iterator。

- bpo-33256: 修复了 `cgitb.html()` 生成的 html 中 `<module>` 调用的显示问题。补丁由 Stéphane Blondon 提供。

- bpo-33185: 修复了使用 `-m` 开关运行 pydoc 时的回归问题。（此回归问题由 bpo-33053 的解决在 3.7.0b3 中引入）此修复还更改了 pydoc，在必要时将 `os.getcwd()` 添加到 `sys.path` 中，而不是添加 `"."`。

- bpo-33169: 当调用 `importlib.machinery.invalidate_caches()` 时，删除 `sys.path_importer_cache` 中的 `None` 条目。

- bpo-33217: 弃用在 Enum 类和 Enum 成员中查找非 Enum 对象的行为（在 3.8+ 中将引发 `TypeError`）。

- bpo-33203: `random.Random.choice()` 现在对于空序列会一致地引发 `IndexError`，即使是从没有 `getrandbits()` 实现的子类中调用也是如此。

- bpo-33224: 为 PEP 479 更新 difflib.mdiff()。将生成器中未捕获的 StopIteration 转换为 return 语句。

- bpo-33209: 在 `pickle.Pickler.dump()` 的 C 实现结束时结束帧。

- bpo-20104: Improved error handling and fixed a reference leak in `os.posix_spawn()`.

- bpo-33175: 在数据类中，Field.__set_name__ 现在查找默认值的类上的 __set_name__ 特殊方法，而不是实例上的。

- bpo-33097: 在解释器关闭期间调用 `executor.submit` 时抛出RuntimeError。

- bpo-31908: 修复了 `trace` 模块命令行工具的封面文件输出。之前仅在使用了 `--missing` 选项时才会发出封面文件。由Michael Selik提供补丁。

### 文档

- bpo-33378: 为 https://docs.python.org/3/ 添加韩语语言切换器。

- bpo-33276: 澄清模块上的 `__path__` 属性不能是任意值。

- bpo-33201: 现代化编写 C 扩展类型的文档。

- bpo-33195: 在 `c-api/arg` 文档中弃用 `Py_UNICODE` 的使用。自 Python 3.3 起，`Py_UNICODE` 相关 API 已被弃用，但文档中遗漏了这一点。

- bpo-8243: 添加关于 curses.addch 和 curses.addstr 在窗口或 pad 外部写入时的异常行为的注释。

- bpo-32337: 更新与 `dict` 顺序相关的文档。

### 测试

- bpo-33358: 当解释器使用 `--enable-shared` 构建时，修复 `test_embed.test_pre_initialization_sys_options()`。

### 构建

- bpo-33394: 当GNU make在命令行上传递宏时，为扩展模块启用详细构建。

- bpo-33393: 更新config.guess和config.sub文件。

- bpo-33377: 为mips r6和riscv变体添加新的三元组（用于扩展后缀）。

- bpo-32232: By default, modules configured in `Modules/Setup` are no longer built with `-DPy_BUILD_CORE`. Instead, modules that specifically need that preprocessor definition include it in their individual entries.

- bpo-33182: 嵌入测试可以再次用clang 6.0构建。

### Windows

- bpo-33184: 更新Windows安装程序以使用OpenSSL 1.1.0h。

### macOS

- bpo-33184: 更新macOS安装程序构建以使用OpenSSL 1.1.0h。

### IDLE

- bpo-21474: 将单词/标识符的定义从ASCII更新为Unicode。在文本和输入框中，这会影响通过双击选择、通过control-left/right左右移动以及通过control-BACKSPACE/DEL左右删除。

- bpo-33204: IDLE：一致地着色无效的字符串前缀。'u'字符串前缀不能与'r'或'f'配对。从右边开始，尽可能多地着色有效的部分。修订并扩展颜色化器测试。

### 工具/示例

- bpo-33189: pygettext.py 现在只识别字面字符串作为文档字符串和可翻译字符串，并拒绝字节字面量和 f-string 表达式。

- bpo-31920: 修复了 `pygettext` 脚本中将目录作为参数处理的问题。基于 Oleg Krasnikov 的补丁。

- bpo-29673: 修复 pystackv 和 pystack gdbinit 宏。

- bpo-31583: 修复 2to3 在使用 --add-suffix 选项但没有 --output-dir 选项时对当前目录中文件的相对路径的处理。

## Python 3.7.0 beta 3

发布日期: 2018-03-29

### 安全性

- bpo-33136: Harden ssl module against LibreSSL CVE-2018-8970. X509_VERIFY_PARAM_set1_host() is called with an explicit namelen. A new test ensures that NULL bytes are not allowed.

- bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。

- bpo-32981: Regexes in difflib and poplib were vulnerable to catastrophic backtracking. These regexes formed potential DOS vectors (REDOS). They have been refactored. This resolves CVE-2018-1060 and CVE-2018-1061. Patch by Jamie Davis.

### 核心与内置函数

- bpo-33053: 当使用-m开关时，sys.path[0]现在明确扩展为 起始 工作目录，而不是保留为空路径（允许在导入时从当前工作目录导入）。

- bpo-33018: 提高了当 `issubclass()` 的第一个参数是非类而第二个参数是抽象基类时引发错误的一致性。由Josh Bronson提供补丁。

- bpo-33041: 修复了当函数包含 `async for` 循环时的跳转问题。

- bpo-33026: 通过设置f_lineno修复了跳出“with”块的问题。

- bpo-33005: 修复了在使用自定义内存分配器（例如：使用PYTHONMALLOC环境变量）时fork导致的崩溃。_PyGILState_Reinit()和_PyInterpreterState_Enable()现在使用默认的RAW内存分配器在fork时分配新的解释器互斥锁。

- bpo-17288: 防止从'return'和'exception'跟踪事件跳转。

- bpo-32836: 在列表/字典/集合推导式的情况下不使用临时变量。

### 库

- bpo-33141: 如果 Field 对象有自己的 __set_name__，则让它们将 __set_name__ 传递给它们的默认值。

- bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。

- bpo-32873: 通过复制和pickle操作将类型变量和特殊类型形式视为不可变。这修复了几个小问题和不一致性，并提高了与Python 3.6的向后兼容性。

- bpo-33134: 在计算数据类的__hash__时，使用查找表包含返回__hash__值的函数。这比查找字符串然后测试该字符串以决定做什么有所改进。

- bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。

- bpo-32505: 如果数据类的成员变量是Field类型但没有类型注解，则抛出TypeError。

- bpo-33078: 修复了由于测试依赖sem_getvalue而在OSX上导致的失败。

- bpo-33116: 将'Field'添加到dataclasses.__all__中。

- bpo-32896: 修复了一个错误，即当子类化一个使用default_factory字段的数据类时会生成一个不正确的类。

- bpo-33100: 数据类：如果一个字段有一个默认值是MemberDescriptorType，那么它是因为该字段在__slots__中，而不是一个实际的默认值。

- bpo-32953: 如果一个非数据类继承自一个冻结的数据类，允许向派生类添加属性。只有来自冻结数据类的属性不能被赋值。要求层次结构中的所有数据类要么全部冻结，要么全部非冻结。

- bpo-33061: 在typing.py的 `__all__` 中添加缺失的 `NoReturn`。

- bpo-33078: 修复当发生pickling错误时multiprocessing.Queue中的大小处理。

- bpo-33064: lib2to3现在正确支持函数签名中 `*args` 和 `**kwargs` 后的尾随逗号。

- bpo-33056: 修复concurrent.futures.ProcessPoolExecutor中泄漏的文件描述符未正确关闭的问题。

- bpo-33021: 在fstat()调用期间释放GIL，避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。

- bpo-31804: 避免在标准流在退出时被关闭或为None时，multiprocessing.Process失败。

- bpo-33037: 在SSL传输关闭后跳过发送/接收数据。

- bpo-27683: 修复 `ipaddress` 中的一个回归问题，当网络由包含整数掩码且仅剩1位地址的元组构造时，`hosts()` 的结果为空。

- bpo-32999: 修复 `ABC.__subclasscheck__(cls, subclass)` 的C实现，在 `subclass` 不是类型对象时崩溃的问题。

- bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。

- bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。

- bpo-32056: Improved exceptions raised for invalid number of channels and sample width when read an audio file in modules `aifc`, `wave` and `sunau`.

- bpo-32844: 修复在subprocess中如果另一个低描述符被关闭时，将低描述符（0或1）错误重定向到stderr的问题。

- bpo-32857: 在 `tkinter` 中，`after_cancel(None)` 现在会引发 `ValueError` 异常，而不是取消第一个预定的函数。由Cheryl Sabella提供补丁。

- bpo-31639: http.server 现在暴露了一个 ThreadedHTTPServer 类，并在模块使用 `-m` 运行时使用它以应对网络浏览器预打开套接字的情况。

- bpo-27645: 如果底层的SQLite库版本为3.6.11或更高，`sqlite3.Connection` 现在公开了一个 `backup` 方法。由Lele Gaifax提供补丁。

### 文档

- bpo-33126: 文档化 PyBuffer_ToContiguous()。

- bpo-27212: 修改 `islice()` 函数示例代码的文档说明，使其在起始索引前消耗初始值。

- bpo-28247: 更新 `zipapp` 文档，描述如何制作独立应用程序。

- bpo-18802: ipaddress 的文档更改。由 Jon Foster 和 Berker Peksag 提供补丁。

- bpo-27428: 更新文档以澄清 `WindowsRegistryFinder` 实现了 `MetaPathFinder`。（补丁由 Himanshu Lakhara 提供）

### 测试

- bpo-32872: 避免 regrtest 与命名空间包的兼容性问题。

- bpo-32517: 修复由于 `KqueueSelector` 循环的传输未被关闭而在 macOS 10.12.2+ 上失败的 `test_asyncio`。

- bpo-19417: 添加 test_bdb.py。

### 构建

- bpo-33163: 将pip升级到9.0.3，setuptools升级到v39.0.1。

### Windows

- bpo-33016: 修复nt._getfinalpathname中潜在使用未初始化内存的问题。

- bpo-32903: 修复如果当前目录设置为UNC路径时Windows上os.chdir()的内存泄漏。

### macOS

- bpo-32726: 为macOS 10.6+安装程序构建并链接Tcl/Tk 8.6的私有副本。10.9+安装程序变体已经这样做了。这意味着python.org macOS安装程序提供的Python 3.7不再需要或使用任何外部版本的Tcl/Tk，无论是系统提供的还是用户安装的，如ActiveTcl。

### IDLE

- bpo-32984: 在运行启动文件时设置 `__file__`。与Python一样，IDLE在展示第一个交互式输入提示之前，可选地在Shell窗口中运行一个启动文件。对于IDLE，`-s``运行环境变量 :envvar:`IDLESTARTUP` 或 :envvar:`PYTHONSTARTUP` 中命名的文件；`-r file`` 运行 `file`。Python在运行文件之前将 `__file__` 设置为启动文件名，并在第一个提示之前取消设置。IDLE现在在没有 `-n` 选项的情况下正常运行时也会这样做。

- bpo-32940: 在pyparse中简化并重命名StringTranslatePseudoMapping。

### 工具/示例

- bpo-32885: 为 `Tools/scripts/pathfix.py` 添加 `-n` 标志以禁用自动备份创建（带有 `~` 后缀的文件）。

### C API

- bpo-33042: 嵌入应用程序可以再次在调用 Py_Initialize 之前调用 PySys_ResetWarnOptions、PySys_AddWarnOption 和 PySys_AddXOption。

- bpo-32374: 文档说明多阶段初始化模块的 m_traverse 可以在 m_state=NULL 时调用，并添加健全性检查

## Python 3.7.0 beta 2

发布日期: 2018-02-27

### 安全性

- bpo-28414: ssl 模块现在允许用户在使用 SNI 时，自行执行 IDN 的编码与解码操作。

### 核心与内置函数

- bpo-32889: 更新Valgrind抑制列表，以考虑`Py_ADDRESS_IN_RANG`重命名为`address_in_range`的情况。

- bpo-31356: 移除了在 bpo-31356 中添加的新API（gc.ensure_disabled()上下文管理器）。

- bpo-32305: 对于命名空间包，确保`__file__`和`__spec__.origin`都被设置为None。

- bpo-32303: 确保对于命名空间包，`__spec__.loader` 与 `__loader__` 相匹配。

- bpo-32711: 修复 Python/ast_unparse.c 中的警告信息。由 Stéphane Wirtel 提供补丁。

- bpo-32583: 修复在使用自定义解码错误处理程序时，内置 Unicode 解码器可能因越界写入错误而崩溃的问题。

### 库

- bpo-32960: 对于数据类，禁止从非冻结类继承冻结类，也禁止从冻结类继承非冻结类。这一限制将在未来放宽。

- bpo-32713: 修复tarfile.itn对超出界限的浮点值的处理。由Joffrey Fuhrer提供补丁。

- bpo-32951: 现在禁止直接实例化SSLSocket和SSLObject对象。这些构造函数从未被记录、测试或设计为公共构造函数。用户应该使用ssl.wrap_socket()或SSLContext。

- bpo-32929: 移除了三态参数"hash"，并添加了布尔型"unsafe_hash"。如果unsafe_hash为True，添加一个__hash__函数，但如果__hash__已存在，则抛出TypeError。如果unsafe_hash为False，根据eq=和frozen=的值添加__hash__。unsafe_hash=False的行为与旧的hash=None行为相同。unsafe_hash=False是默认值，就像hash=None曾经是默认值一样。

- bpo-32947: 添加OP_ENABLE_MIDDLEBOX_COMPAT和测试解决方法，以便未来与OpenSSL 1.1.1兼容的TLSv1.3。

- bpo-30622: ssl模块现在能检测到LibreSSL中缺少的NPN支持。

- bpo-32922: dbm.open()现在使用文件系统编码而不是默认编码对文件名进行编码。

- bpo-32859: 在 `os.dup2` 中，不再每次调用时检查 `dup3` 系统调用是否存在。

- bpo-32556: nt._getfinalpathname、nt._getvolumepathname和nt._getdiskusage现在能正确地从字节转换。

- bpo-25988: 当使用或直接从 `collections` 导入 ABC 而不是从 `collections.abc` 导入时，发出 `DeprecationWarning`。

- bpo-21060: 将setup.py upload中令人困惑的消息从"No dist file created in earlier command"重写为更有帮助的"Must create and upload files in one command"。

- bpo-32852: 确保在运行trace时sys.argv保持为列表。

- bpo-31333: 新增了 `_abc` 模块。这是一个速度优化模块，提供了 `abc` 中各种函数和方法的 C 语言实现。创建 ABC 子类及使用 ABC 子类调用 `isinstance` 或 `issubclass` 的速度提高了 1.5 倍。此外，这还使得 Python 的启动速度提高了 10%。请注意，新实现隐藏了内部注册表和缓存，之前可以通过私有属性 `_abc_registry`、`_abc_cache` 和 `_abc_negative_cache` 访问。现在可以使用三个调试辅助方法 `_dump_registry`、`_abc_registry_clear` 和 `_abc_caches_clear` 来代替。

- bpo-32841: Fixed `asyncio.Condition` issue which silently ignored cancellation after notifying and cancelling a conditional lock. Patch by Bar Harel.

- bpo-32819: ssl.match_hostname() 已被简化，不再依赖 re 和 ipaddress 模块处理通配符和IP地址。对于无效通配符的错误报告已改进。

- bpo-32394: socket: 在旧版本Windows运行时移除TCP_FASTOPEN、TCP_KEEPCNT、TCP_KEEPIDLE、TCP_KEEPINTVL标志。

- bpo-31787: 修复了多个模块中 `__init__()` 方法的内存泄漏问题。(由Oren Milman贡献)

- bpo-30157: 修复了在只有最后一个字段被引用时，csv.Sniffer.sniff() 中猜测引用和分隔符的问题。由Jake Davis提供补丁。

- bpo-32792: collections.ChainMap() 保留了底层映射的顺序。

- bpo-32775: `fnmatch.translate()` no longer produces patterns which contain set operations. Sets starting with '[' or containing '--', '&&', '~~' or '||' will be interpreted differently in regular expressions in future versions. Currently they emit warnings. fnmatch.translate() now avoids producing patterns containing such sets by accident.

- bpo-32622: 为Windows proactor事件循环实现原生快速发送文件功能。

- bpo-32777: 修复了在POSIX系统的子进程中，当标记文件描述符为可继承时，subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。

- bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在，在支持dl的平台上，共享扩展已明确链接到libdl。

- bpo-32741: 实现 `asyncio.TimerHandle.when()` 方法。

- bpo-32691: 在使用pdb运行模块时使用mod_spec.parent。

- bpo-32734: 修复了 `asyncio.Lock()` 的安全问题，该问题允许多次获取和锁定同一个锁，而锁并未释放。由Bar Harel提供补丁。

- bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。

- bpo-31453: Add TLSVersion constants and SSLContext.maximum_version / minimum_version attributes. The new API wraps OpenSSL 1.1 https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html feature.

- bpo-24334: 清理了ssl模块的内部实现细节。SSLSocket减少了一层间接引用。所有者与会话信息现在由SSLSocket和SSLObject的构造函数处理。通道绑定实现已被简化。

- bpo-31848: 修复Aifc_read.initfp()中当SSND块未找到时的错误处理。补丁由Zackery Spytz提供。

- bpo-32585: 向 `tkinter.ttk` 添加Ttk spinbox小部件。由Alan D Moore提供补丁。

- bpo-32221: 现在，返回包含IPv6地址的元组的各种函数省略了 `%scope` 部分，因为相同的信息已经在 scopeid 元组项中编码。特别是这加快了 `socket.recvfrom()` 在接收多播数据包时的速度，因为省略了无用的网络接口名称解析。

- bpo-30693: TarFile类现在以一种可重复的方式递归目录。

- bpo-30693: ZipFile类现在以一种可重复的方式递归目录。

### 文档

- bpo-28124: ssl 模块函数 ssl.wrap_socket() 已被弱化并弃用，推荐使用更安全高效的 SSLContext.wrap_socket() 方法。

- bpo-17232: 澄清 -O 和 -OO 的文档。由 Terry Reedy 提供补丁。

- bpo-32436: 为 contextvars 模块（PEP 567）添加文档。

- bpo-32800: 更新 xml 默认命名空间的 w3c 文档链接。

- bpo-11015: 更新 `test.support` 文档。

- bpo-8722: 文档化当属性 `get()` 方法引发 `AttributeError` 时 `__getattr__()` 的行为。

- bpo-32614: 修改文档中的正则表达式示例，使用原始字符串以防止 `DeprecationWarning`，并在正则表达式 HOWTO 中添加文本以突出弃用。

- bpo-31972: Improve docstrings for `pathlib.PurePath` subclasses.

### 测试

- bpo-31809: 添加测试以验证与 secp ECDH 曲线的连接。

### 构建

- bpo-32898: 修复了在使用 COUNT_ALLOCS 时的 Python 调试构建问题。

### Windows

- bpo-32901: 将Tcl和Tk版本更新到8.6.8

- bpo-31966: 修复WindowsConsoleIO.write()写入空数据的问题。

- bpo-32409: 确保activate.bat可以处理Unicode内容。

- bpo-32457: 改进启动Python时对非规范化可执行路径的处理。

- bpo-32370: 在uuid模块中为ipconfig输出使用正确的编码。由Segev Finer提交补丁。

- bpo-29248: 修复Windows上的 `os.readlink()`，它错误地将重新解析数据缓冲区的``PrintNameOffset`` 字段视为字符数而非字节数。由Craig Holmquist和SSE4提交补丁。

### macOS

- bpo-32901: 将macOS 10.9+安装程序更新至Tcl/Tk 8.6.8。

### IDLE

- bpo-32916: 在pyparse中将 `str` 更改为 `code`。

- bpo-32905: 移除pyparse模块中未使用的代码。

- bpo-32874: 为pyparse添加测试。

- bpo-32837: 对于IDLE的系统和位置无关文件，使用系统和位置相关的默认编码对于open()来说是一个坏主意。

- bpo-32826: 在IDLE的test_help_about的open()中添加"encoding=utf-8"。GUI测试test_file_buttons()仅查看初始的ascii-only行，但在open()默认为'ascii'的系统上失败，因为readline()内部读取和解码足够远，以在CREDITS.txt中遇到非ascii字符。

- bpo-32765: 更新configdialog General标签的文档字符串，将新部件添加到部件列表中。

### 工具/示例

- bpo-32222: 修复 pygettext 不提取带有类型注释参数的函数的文档字符串的问题。由 Toby Harradine 提供的补丁。

## Python 3.7.0 beta 1

发布日期: 2018-01-30

### 核心与内置函数

- bpo-32703: 修复了协程在最终化时存在活动错误集时的 ResourceWarning 问题。

- bpo-32650: Pdb 和其他依赖于 bdb.py 的调试器现在能够正确地单步跳过（next 命令）原生协程。由 Pablo Galindo 提供补丁。

- bpo-28685: 通过尽可能使用类型专用比较，优化了 list.sort() 和 sorted()。

- bpo-32685: 改进了当 Python 2 形式的 print 语句出现在复合语句的同一行或以分号而非换行符终止时的建议。由 Nitish Chandra 提供补丁。

- bpo-32697: Python 现在明确保留了仅关键字参数的定义顺序。虽然之前总是保留其顺序，但这一行为从未得到保证；现在这一行为得到了保证和测试。

- bpo-32690: locals() 字典现在按照变量定义的词法顺序显示。之前顺序是相反的。

- bpo-32677: 向 `str`、`bytes` 和 `bytearray` 添加了 `.isascii()` 方法。可用于测试字符串是否仅包含 ASCII 字符。

- bpo-32670: 对所有代码强制执行 PEP 479。这意味着从生成器中手动引发 StopIteration 异常对所有代码都是禁止的，无论是否使用了 'from __future__ import generator_stop'。

- bpo-32591: 添加了对跟踪协程对象来源的内置支持；参见 sys.set_coroutine_origin_tracking_depth 和 CoroutineType.cr_origin。这取代了 asyncio 调试模式对原生协程对象使用协程包装的做法。

- bpo-31368: 在 os 模块中暴露了 preadv 和 pwritev 系统调用。由 Pablo Galindo 提供补丁

- bpo-32544: `hasattr(obj, name)` 和 `getattr(obj, name, default)` 在 `name` 未找到且 `obj` 未重写 `__getattr__` 或 `__getattribute__` 时，速度比以前快了约4倍。

- bpo-26163: 改进了 frozenset() 的哈希函数，当面对包含许多相似值的数据集时，能生成更多不同的哈希值。

- bpo-32550: 移除了 STORE_ANNOTATION 字节码。

- bpo-20104: 在 os 模块中暴露了 posix_spawn 作为低级 API。（在 3.7.0rc1 之前移除）

- bpo-24340: 修复了代码堆栈大小的估计问题。

- bpo-32436: 实现了 PEP 567 上下文变量。

- bpo-18533: `repr()` 在包含其自身的 `values()` 或 `items()` 的字典上不再引发 `RecursionError`；OrderedDict 同理。相反，像其他递归结构一样使用 `...`。由 Ben North 提供补丁。

- bpo-20891: Py_Initialize() 现在会创建 GIL。GIL 不再“按需”创建，以修复在非 Python 线程中调用 PyGILState_Ensure() 时的竞态条件。

- bpo-32028: 在为将 Py2 打印语句转换为 Py3 内置打印函数调用生成建议时，现在正确地忽略了前导空白。由 Sanyam Khurana 提供补丁。

- bpo-31179: 使 dict.copy() 速度提高了多达5.5倍。

- bpo-31113: 在编译器中消除了对正常控制流的递归。

### 库

- bpo-25988: 弃用在常规 collections 模块中暴露 collections.abc 的内容。

- bpo-31429: ssl模块的默认密码套件选择现在使用黑名单方法，而不是硬编码的白名单。Python不再重新启用被OpenSSL安全更新阻止的密码。默认密码套件选择可以在编译时配置。

- bpo-30306: contextlib.contextmanager现在一旦进入上下文管理器，就会释放传递给底层生成器的参数。以前，它会保持它们活跃，只要上下文管理器是活跃的，即使不作为函数装饰器使用。由Martin Teichmann提供补丁。

- bpo-21417: 增加了对设置zipfile.ZipFile压缩级别的支持。

- bpo-32251: 实现了asyncio.BufferedProtocol（临时API）。

- bpo-32513: 在数据类中，允许更容易地覆盖dunder方法，而无需指定装饰器参数。

- bpo-32660: `termios` 在Solaris/衍生系统下也提供 `FIONREAD`, `FIONCLEX`, `FIOCLEX`, `FIOASYNC` 和 `FIONBIO`。

- bpo-27931: 修复当用户名为空引号字符串时的电子邮件地址头解析错误。由Xiang Zhang提供补丁。

- bpo-32659: 在Solaris及其衍生系统下，`os.stat_result` 提供了一个st_fstype属性。

- bpo-32662: 实现了Server.start_serving()、Server.serve_forever()和Server.is_serving()方法。向loop.create_server()和loop.create_unix_server()添加了'start_serving'关键字参数。

- bpo-32391: 实现了 `asyncio.StreamWriter.wait_closed()` 和 `asyncio.StreamWriter.is_closing()` 方法。

- bpo-32643: 将Task._step、Task._wakeup和Future._schedule_callbacks方法设为私有。

- bpo-32630: 重构decimal模块以使用contextvars存储decimal上下文。

- bpo-32622: 添加 `asyncio.AbstractEventLoop.sendfile()` 方法。

- bpo-32304: distutils的上传命令不再损坏以CR字节结尾的tar文件，并且不再尝试在上传的任何文本字段中将CR转换为CRLF。

- bpo-32502: 当遇到64位硬件地址时，uuid.uuid1不再抛出异常。

- bpo-32596: `concurrent.futures` 现在懒加载 `ThreadPoolExecutor` 和 `ProcessPoolExecutor` (使用 PEP 562) 。这使得 `import asyncio` 大约快15%，因为 asyncio 默认只使用 `ThreadPoolExecutor`。

- bpo-31801: 在 `Enum` 中添加 `_ignore_`，以便在类构造期间可以使用临时变量而不会将其转换为成员。

- bpo-32576: 在可以从弱引用回调调用的地方使用 queue.SimpleQueue()。

- bpo-32574: 修复 asyncio.Queue 中的内存泄漏问题，当队列大小受限且已满时，取消 queue.put() 可能导致内存泄漏。 补丁编写: José Melero。

- bpo-32521: nis 模块现在与新的 libnsl 和头文件位置兼容。

- bpo-32467: collections.abc.ValuesView 现在继承自 collections.abc.Collection。

- bpo-32473: 提高 ABCMeta._dump_registry() 输出的可读性

- bpo-32102: subprocess.run 的新参数 `capture_output`

- bpo-32521: glibc 已移除 Sun RPC。在 nis 模块中使用替代的 libtirpc 头文件和库。

- bpo-32493: UUID 模块修复了 FreeBSD/OpenBSD 的构建

- bpo-32503: 使用协议4进行pickle时不再创建过小的帧。

- bpo-29237: 为 pstats 排序选项创建枚举

- bpo-32454: 向 socket 模块添加 close(fd) 函数。

- bpo-25942: subprocess 模块现在在 subprocess.call、subprocess.run 或 Popen 上下文管理器期间处理 Ctrl-C KeyboardInterrupt 时更加优雅。现在它会在继续 KeyboardInterrupt 异常处理之前等待子进程（假设也收到了 SIGINT）短暂退出。这仍然包括在 call() 和 run() API 中的 SIGKILL，但至少子进程有机会首先退出。

- bpo-32433: hmac 模块现在有了 hmac.digest()，它提供了一个优化的 HMAC 摘要。

- bpo-28134: 现在默认情况下，套接字会自动从文件描述符中检测家族、类型和协议。

- bpo-32404: 修复了 `datetime.datetime.fromtimestamp()` 在 `datetime.datetime` 子类中不调用 __new__ 的 bug。

- bpo-32403: 提高了 `datetime.date` 和 `datetime.datetime` 替代构造器的速度。

- bpo-32228: 确保 `truncate()` 在写入长度超过缓冲区大小后保留文件位置（由 `tell()` 报告）。

- bpo-32410: 为 asyncio 事件循环实现了 `loop.sock_sendfile`。

- bpo-22908: 向 ZipExtFile 类添加了 seek 和 tell。这仅在用于打开 zipfile 的文件对象可查找时有效。

- bpo-32373: 添加了 socket.getblocking() 方法。

- bpo-32248: Add `importlib.resources` and `importlib.abc.ResourceReader` as the unified API for reading resources contained within packages. Loaders wishing to support resource reading must implement the `get_resource_reader()` method. File-based and zipimport-based loaders both implement these APIs. `importlib.abc.ResourceLoader` is deprecated in favor of these new APIs.

- bpo-32320: collections.namedtuple() 现在支持默认值。

- bpo-29302: 添加了 contextlib.AsyncExitStack。由 Alexander Mohr 和 Ilya Kulakov 提供补丁。

- bpo-31961: 已在 Python 3.7.0b2 中移除。 subprocess.Popen 的 args 参数现在可以是 path-like object。如果 args 以序列形式给出，其第一个元素现在也可以是 path-like object。

- bpo-31900: 现在 `locale.localeconv()` 函数会临时将 `LC_CTYPE` 区域设置改为``LC_NUMERIC``区域设置，以解码 `decimal_point` 和 `thousands_sep` 字节字符串，如果它们是非ASCII或长度超过1字节，并且 `LC_NUMERIC` 区域设置与 `LC_CTYPE` 区域设置不同。这一临时变更会影响其他线程。对于 `str.format()` 方法，当使用 `n` 类型格式化数字（`int`, `float`, `float` 及其子类）时（例如：`'{:n}'.format(1234)`），也进行了相同的更改。

- bpo-31853: 在SSLSocket中使用super().method替代socket.method。它们很可能是因为遗留原因而存在。

- bpo-31399: ssl模块现在使用OpenSSL的X509_VERIFY_PARAM_set1_host()和X509_VERIFY_PARAM_set1_ip() API来验证主机名和IP地址。可以通过SSLContext.hostname_checks_common_name禁用主题通用名称回退。

- bpo-14976: 添加了一个queue.SimpleQueue类，这是一个无界的FIFO队列，带有put()的可重入C实现。

### 文档

- bpo-32724: 在Pdb的文档中添加了一些命令的引用。由Stéphane Wirtel提供补丁。

- bpo-32649: 完成了C API文档的性能分析和跟踪部分，新增了每操作码事件的说明。

- bpo-17799: 解释了sys.settrace和sys.setprofile及其C-API对应项的实际行为，关于在每个函数中接收哪些类型的事件。由Pablo Galindo Salgado提供补丁。

### 测试

- bpo-32721: 修复test_hashlib，使其在未构建_md5模块时不会失败。

- bpo-28414: 为IDNA 2003和2008主机名添加测试用例。自 bpo-31399 落地以来，IDNA 2003国际化主机名已经可以工作。IDNA 2008仍然存在问题。

- bpo-32604: 添加一个新的 "_xxsubinterpreters" 扩展模块，该模块暴露了现有的子解释器 C-API 和一个新的跨解释器数据共享机制。此模块主要用于更彻底地测试现有的子解释器支持。请注意，_xxsubinterpreters 模块已在 3.7.0rc1 中移除。

- bpo-32602: 添加测试证书和用于 ECDSA 证书及 EC/RSA 双模式的测试。

- bpo-32549: 在 Travis CI 上，Python 现在编译并使用 OpenSSL 1.1.0g 的本地副本进行测试。

### 构建

- bpo-32635: 修复当系统提供的是 libxcrypt 而不是 libcrypt 时 crypt 模块的段错误。

- bpo-32598: 使用 autoconf 检测 OpenSSL 库、头文件和支持的特性。ax_check_openssl M4 宏使用 pkg-config 定位 OpenSSL，并回退到手动搜索。

- bpo-32593: 放弃对 FreeBSD 9 及更旧版本的支持。

- bpo-29708: 如果设置了 `SOURCE_DATE_EPOCH` 环境变量，`py_compile` 将始终创建基于哈希的 `.pyc` 文件。

### Windows

- bpo-32588: 创建独立的 _distutils_findvs 模块，并将缺失的 _queue 模块添加到安装程序中。

- bpo-29911: 确保显示单独的修改和卸载按钮。

- bpo-32507: 对于旧版本的 Windows，使用应用本地的 UCRT 安装，而不是正确的更新。

### macOS

- bpo-32726: 提供一个额外的、更现代的 macOS 安装程序变体，仅支持 64 位模式下的 macOS 10.9+ 系统。将提供的第三方库升级到 OpenSSL 1.1.0g 和 SQLite 3.22.0。10.9+ 安装程序现在链接并提供其自己的 Tcl/Tk 8.6 副本。

- bpo-28440: 不再将 /Library/Python/3.x/site-packages 添加到 macOS 框架构建的 sys.path 中，以避免未来的冲突。

### C API

- bpo-32681: 修复 os.dup2 的 C 实现中未初始化的变量 'res'。补丁由 Stéphane Wirtel 提供。

- bpo-10381: Add C API access to the `datetime.timezone` constructor and `datetime.timzone.UTC` singleton.

## Python 3.7.0 alpha 4

发布日期: 2018-01-08

### 核心与内置函数

- bpo-31975: 默认的警告过滤器列表现在以 "default::DeprecationWarning:__main__" 条目开始，因此在单文件脚本和交互式提示符中，弃用警告默认再次显示。

- bpo-32226: `__class_getitem__` 现在是一个自动类方法。

- bpo-32399: 使用 libc.a 中的 uuid_create() 为 AIX 添加 RFC4122 uuid 库支持。

- bpo-32390: 修复在 os.statvfs() 返回的对象中添加 f_fsid 字段后在 AIX 上的编译失败问题 (bpo-32143)。原始由 Michael Felt 提供补丁。

- bpo-32379: 当一个类继承自单一基类时，使 MRO 计算更快。

- bpo-32259: 解包不可迭代对象时引发的 TypeError 错误消息现在更加具体。

- bpo-27169: `__debug__` 常量现在在编译时被优化掉。这也修复了 bpo-22091。

- bpo-32329: 当 `PYTHONHASHSEED` 环境变量设置为 `0` 时，`-R` 选项现在会开启哈希随机化。之前，该选项被忽略。此外，当哈希随机化被 `PYTHONHASHSEED=0` 关闭时，`sys.flags.hash_randomization` 现在被正确设置为 0。

- bpo-30416: 优化器现在受到保护，不会花费大量时间进行复杂计算和在常量折叠中创建大常量时消耗大量内存。增加了在常量折叠中可以产生的常量的限制。

- bpo-32282: 修复 Windows 上 socketmodule 中 VersionHelpers.h 包含的不必要的 ifdef。

- bpo-30579: 实现 TracebackType.__new__ 以允许在 Python 级别创建回溯对象，并使 TracebackType.tb_next 可变。

- bpo-32260: 不要在大端平台上对 SipHash 算法的输入键进行字节交换。这应确保 siphash 在不同平台上给出一致的结果。

- bpo-31506: 改进 object.__new__ 和 object.__init__ 的错误消息逻辑。由 Sanyam Khurana 提供补丁。

- bpo-20361: `-b` 和 `-bb` 现在会在 `sys.warnoptions` 中注入 `'default::BytesWarning'` 和 `error::BytesWarning` 条目，确保它们优先于通过 `-W` 选项或 `PYTHONWARNINGS` 环境变量配置的任何其他警告过滤器。

- bpo-32230: `-X dev` now injects a `'default'` entry into sys.warnoptions, ensuring that it behaves identically to actually passing `-Wdefault` at the command line.

- bpo-29240: 添加新的 UTF-8 模式：实现了 PEP 540。

- bpo-32226: PEP 560: 添加对 `__mro_entries__` 和 `__class_getitem__` 的支持。由 Ivan Levkivskyi 实现。

- bpo-32225: PEP 562: 添加对模块 `__getattr__` 和 `__dir__` 的支持。由 Ivan Levkivskyi 实现。

- bpo-31901: The `atexit` module now has its callback stored per interpreter.

- bpo-31650: 实现 PEP 552 (确定性 pycs) 。Python 现在支持基于源内容哈希而非源最后修改时间使字节码缓存文件失效。

- bpo-29469: 将常量折叠从字节码层移动到 AST 层。原始由 Eugene Toder 提供补丁。

### 库

- bpo-32506: 既然 dict 被定义为保持插入顺序，那么放弃 OrderedDict，直接使用普通 dict。

- bpo-32279: 向 dataclasses.make_dataclasses() 添加参数：init、repr、eq、order、hash 和 frozen。将它们传递给 dataclass()。

- bpo-32278: 使 dataclasses.make_dataclass() 上的类型信息可选。如果省略，则使用字符串 'typing.Any'。

- bpo-32499: 添加 dataclasses.is_dataclass(obj)，如果 obj 是数据类或其实例，则返回 True。

- bpo-32468: 改进 frame repr() 以提及文件名、代码名称和当前行号。

- bpo-23749: asyncio: 实现 loop.start_tls()

- bpo-32441: 从 `os.dup2` 返回新的文件描述符（即第二个参数）。以前总是返回 `None`。

- bpo-32422: `functools.lru_cache` 使用更少的内存（每个缓存键3个单词）并且循环GC时间大约减少到1/3。

- bpo-31721: 防止当Future._log_traceback被手动设置为True时Python崩溃。现在它只能被设置为False，否则会引发ValueError。

- bpo-32415: asyncio: 添加Task.get_loop()和Future.get_loop()

- bpo-26133: 在解释器关闭时不要在asyncio UNIX事件循环中取消订阅信号。

- bpo-32363: 使asyncio.Task.set_exception()和set_result()引发NotImplementedError。Task._step()和Future.__await__()在无效状态时引发适当的异常，而不是AssertionError。

- bpo-32357: 为非原生协程（如用Cython编译的async/await）优化asyncio.iscoroutine()和loop.create_task()。'loop.create_task(python_coroutine)'过去比'loop.create_task(cython_coroutine)'快20%。现在，后者一样快。

- bpo-32356: asyncio.transport.resume_reading()和pause_reading()现在是幂等的。新增transport.is_reading()方法。

- bpo-32355: 优化asyncio.gather(); 现在快达15%。

- bpo-32351: 如果delay<0，在asyncio.sleep中使用fastpath（2倍加速）

- bpo-32348: 优化asyncio.Future schedule/add/remove回调。该优化显示async/await代码性能提升3-6%。

- bpo-32331: 修复socket.settimeout()和socket.setblocking()以保持socket.type不变。修复socket.socket()构造函数以重置应用于socket类型的任何位标志。此更改仅影响具有SOCK_NONBLOCK和/或SOCK_CLOEXEC的操作系统。

- bpo-32248: 添加 `importlib.abc.ResourceReader` 作为加载器的ABC，为读取包中包含的资源提供统一的API。同时添加 `importlib.resources` 作为 `importlib_resources` 的端口。

- bpo-32311: 实现asyncio.create_task(coro)快捷方式

- bpo-32327: 将文档中标记为协程的asyncio函数转换为协程。受影响的函数包括：loop.sock_sendall、loop.sock_recv、loop.sock_accept、loop.getaddrinfo、loop.getnameinfo。

- bpo-32323: `urllib.parse.urlsplit()` does not convert zone-id (scope) to lower case for scoped IPv6 addresses in hostnames now.

- bpo-32302: 修复了distutils的bdist_wininst对于CRT v142的支持：它二进制兼容于CRT v140。

- bpo-29711: 修复了asyncio proactor循环中的 `stop_serving` 会杀死所有监听服务器的问题。

- bpo-32308: `re.sub()` now replaces empty matches adjacent to a previous non-empty match.

- bpo-29970: Abort asyncio SSLProtocol connection if handshake not complete within 10s

- bpo-32314: 实现了asyncio.run()。

- bpo-17852: 基于对_Py_PyAtExit()语义的误解，撤销了不正确的修复。

- bpo-32296: 在C中实现了asyncio._get_running_loop()和get_event_loop()。这使得它们的速度提高了4倍。

- bpo-32250: 实现了 `asyncio.current_task()` 和 `asyncio.all_tasks()`。添加了旨在供替代任务实现使用的助手：`asyncio._register_task`、`asyncio._enter_task`、`asyncio._leave_task``和 ``asyncio._unregister_task`。弃用了``asyncio.Task.current_task()``和 `asyncio.Task.all_tasks()`。

- bpo-32255: 现在，当写入CSV文件时，单个空字段总是会被引用。这允许区分空行和由单个空字段组成的行。由Licht Takeuchi提供补丁。

- bpo-32277: 在不支持 `chmod(..., follow_symlinks=False)` 的平台上，引发``NotImplementedError``而不是 `SystemError`。由Anthony Sottile提供补丁。

- bpo-30050: signal.set_wakeup_fd的新参数warn_on_full_buffer让你控制当唤醒fd缓冲区溢出时Python是否在stderr上打印警告。

- bpo-29137: `fpectl` 库已被移除。它从未默认启用，在 x86-64 上从未正确工作，并且它以导致 C 扩展意外中断的方式改变了 Python ABI。

- bpo-32273: 将 asyncio.test_utils 移动到 test.test_asyncio。

- bpo-32272: 移除 asyncio.async() 函数。

- bpo-32269: 添加 asyncio.get_running_loop() 函数。

- bpo-32265: All class and static methods of builtin types now are correctly classified by inspect.classify_class_attrs() and grouped in pydoc ouput. Added types.ClassMethodDescriptorType for unbound class methods of builtin types.

- bpo-32253: 弃用 `yield from lock`, `await lock`, `with (yield from lock)` 和 `with await lock` 用于 asyncio 同步原语。

- bpo-22589: 将 .bmp 的 MIME 类型从 'image/x-ms-bmp' 改为 'image/bmp'。

- bpo-32193: 将 asyncio 转换为使用 async/await 语法。旧式的 `yield from` 仍然支持。

- bpo-32206: 添加支持以使用 pdb 运行模块。

- bpo-32227: `functools.singledispatch` 现在支持使用类型注释注册实现。

- bpo-15873: 添加了新的替代构造函数 `datetime.datetime.fromisoformat()`, `datetime.time.fromisoformat()` 和 `datetime.date.fromisoformat()` 作为各自类 `isoformat` 方法的逆操作。

- bpo-32199: getnode() ip 获取器现在使用 'ip link' 而不是 'ip link list'。

- bpo-32143: os.statvfs() 包含来自 statvfs(2) 的 f_fsid 字段。

- bpo-26439: 通过实现 ctypes._aix.find_library() 修复 ctypes.util.find_library() 在 AIX 上的问题。补丁由：Michael Felt

- bpo-31993: 当将大的 bytes 和 str 对象序列化到文件时，pickler 现在使用更少的内存。使用协议 4 创建的 pickle 将需要更少的内存来反序列化大的 bytes 和 str 对象。

- bpo-27456: 确保在 Linux 上设置 TCP_NODELAY。测试由 Victor Stinner 完成。

- bpo-31778: 现在ast.literal_eval()更加严格。不再允许任意数字的加减法。

- bpo-31802: 即使`os`模块尚未导入，导入原生路径模块(`posixpath`, `ntpath`)现在也能正常工作。

- bpo-30241: 添加contextlib.AbstractAsyncContextManager。由Jelle Zijlstra提供补丁。

- bpo-31699: 修复了当任务参数或结果导致pickling或unpickling错误时 `concurrent.futures.ProcessPoolExecutor` 中的死锁问题。这应确保对 `ProcessPoolExecutor` API的调用最终总能返回。

- bpo-15216: `TextIOWrapper.reconfigure()` 支持更改*encoding*, errors, 和*newline*。

### 文档

- bpo-32418: 向Server和AbstractServer类添加get_loop()方法。

### 测试

- bpo-32252: 修复用于在测试崩溃时防止核心转储文件的faulthandler_suppress_crash_report()。getrlimit()在成功时返回零。

- bpo-32002: 调整C语言环境强制测试，针对空语言环境和POSIX语言环境情况，更容易适应平台依赖行为。

### Windows

- bpo-19764: Implement support for `subprocess.Popen(close_fds=True)` on Windows. Patch by Segev Finer.

### 工具/示例

- bpo-24960: 2to3和lib2to3现在可以使用pkgutil.get_data()读取pickled语法文件，而不是探测文件系统。这使得2to3和lib2to3在从zipfile运行时也能工作。

### C API

- bpo-32030: 如果未设置 `PYTHONMALLOC` 环境变量，Py_Initialize()不会将内存分配器重置为默认值。

- bpo-29084: OrderedDict的未记录C API已从有限C API中排除。它是被错误添加的，实际上在有限C API中从未工作过。

- bpo-32264: 将pygetopt.h头文件移动到internal/，因为它没有公共API。

- bpo-32241: `Py_SetProgramName()` and `Py_SetPythonHome()` now take the `const wchar *` arguments instead of `wchar *`.

## Python 3.7.0 alpha 3

发布日期: 2017-12-05

### 核心与内置函数

- bpo-32176: 现在，代码对象构造函数会根据freevars和cellvars正确设置co_flags.CO_NOFREE，而不是需要调用者正确设置。这确保了当额外的cell引用被注入到修改后的代码对象和函数中时，它会自动清除。

- bpo-10544: 现在在推导式和生成器表达式中不推荐使用yield表达式。它们仍然允许在最外层可迭代对象的定义中使用，因为那是在封闭作用域中直接评估的。

- bpo-32137: 现在，深度嵌套字典的repr会引发RecursionError，而不是因为堆栈溢出而崩溃。

- bpo-32096: 在C API中恢复内存分配器的更改：将结构体从_PyRuntime移回Objects/obmalloc.c。内存分配器再次静态初始化，因此PyMem_RawMalloc()和Py_DecodeLocale()可以在_PyRuntime_Initialize()之前调用。

- bpo-32043: 添加了一个新的“开发者模式”：新的“-X dev”命令行选项，用于在运行时启用调试检查。

- bpo-32023: 现在，当在类定义中使用没有括号的生成器表达式代替继承列表时，会正确引发SyntaxError。只有在调用时可以省略括号的重复。

- bpo-32012: 现在，当传递一个没有括号的生成器表达式作为参数，但后面跟着一个尾随逗号时，会正确引发SyntaxError。生成器表达式总是需要直接在一组括号内，并且不能在两边有任何逗号。

- bpo-28180: 添加了一个新的内部 `_Py_SetLocaleFromEnv(category)` 辅助函数，以提高不同``libc``实现之间行为的一致性（例如，Android默认不支持从环境设置区域设置）。

- bpo-31949: 修复了打印回溯（PyTraceBack_Print()）中的若干问题。现在将sys.tracebacklimit设置为0或更小会抑制回溯的打印。将sys.tracebacklimit设置为None现在会导致使用默认限制。将sys.tracebacklimit设置为大于LONG_MAX的整数现在意味着使用LONG_MAX限制而不是默认限制。修复了Windows上超过 `2**31` 个回溯项时的整数溢出问题。修复了输出错误处理。

- bpo-30696: 修复了在没有内存时交互式解释器无限循环的问题。

- bpo-20047: Bytearray方法partition()和rpartition()现在仅接受类似字节的对象作为分隔符，如文档所述。特别是，现在当传递整数作为分隔符时，它们会引发TypeError而不是返回一个虚假的结果。

- bpo-21720: 当 `__import__()` 的 fromlist 参数或模块的 `__all__` 属性包含bytes实例时，不再发出BytesWarning。

- bpo-31845: 环境变量在解释器启动时再次被正确读取。

- bpo-28936: 确保在给定范围内首先检测到涉及参数和 `global` 或 `nonlocal` 的词法上第一个语法错误。由Ivan Levkivskyi提供补丁。

- bpo-31825: 修复了在解码转义的非ascii字节时'unicode-escape'编解码器和codecs.escape_decode()中的OverflowError。

- bpo-31618: 3.7a1中添加的每帧跟踪逻辑已更改，以便在发出 `"line"` 或 `"opcode"` 事件之前更新 `frame->f_lineno`。以前，操作码事件首先发出，因此偶尔会在帧上看到过时的行号。此功能的行为因此略有变化：当同时启用 `f_trace_lines` 和 `f_trace_opcodes` 时，行事件现在首先发生。

- bpo-28603: 在解释器退出时打印异常的完整上下文/原因链，即使链中的异常不可哈希或与后面的异常相等。由Zane Bitter提供补丁。

- bpo-31786: 修复 select 模块中负超时时间在 -1.0 和 0.0 之间的正确舍入问题。现在函数会按预期阻塞等待事件。此前，调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。

- bpo-31781: 防止在调用未初始化的 `zipimport.zipimporter` 对象方法时崩溃。由 Oren Milman 提供补丁。

- bpo-30399: 单一参数的 BaseException 的标准 repr() 不再包含多余的尾随逗号。

- bpo-31626: 修复了调试内存分配器中的一个错误。在缩小内存块后存在对已释放内存的写入。

- bpo-30817: `PyErr_PrintEx()` clears now the ignored exception that may be raised by `_PySys_SetObjectId()`, for example when no memory.

### 库

- bpo-28556: 对 `typing` 模块的两项小修复：允许浅复制泛型类的实例，改进 `__init_subclass__` 与泛型的交互。原始 PR 由 Ivan Levkivskyi 提供。

- bpo-32214: PEP 557，数据类。提供了一个装饰器，为使用类型注解指定字段的类添加样板方法。

- bpo-27240: 新电子邮件策略的头部折叠算法已被重写，这也修复了 bpo-30788、bpo-31831 和 bpo-32182。特别是，现在可以正确进行 RFC2231 折叠。

- bpo-32186: io.FileIO.readall() 和 io.FileIO.read() 现在在获取文件大小时释放 GIL。修复了所有线程因无法访问的 NFS 服务器而挂起的问题。由 Nir Soffer 提供补丁。

- bpo-32101: 添加 `sys.flags.dev_mode` 标志

- bpo-32154: 已移除 `asyncio.windows_utils.socketpair()` 函数：直接使用 `socket.socketpair()`，该函数自 Python 3.5 起在所有平台上可用（此前在 Windows 上不可用）。`asyncio.windows_utils.socketpair()` 在 Python 3.5 及更新版本上只是 `socket.socketpair` 的别名。

- bpo-32089: 警告：在开发（-X dev）和调试模式（pydebug 构建）中，默认警告过滤器中对 ResourceWarning 使用“default”操作，而非“always”操作。

- bpo-32107: `uuid.getnode()` 现在优先返回普遍管理的 MAC 地址（如果可用），而不是本地管理的 MAC 地址。这为 `uuid.uuid1()` 返回的 UUID 提供了更好的全局唯一性保证。如果只有本地管理的 MAC 地址可用，则返回找到的第一个此类地址。

- bpo-23033: 在 `ssl.match_hostname()` 的第二个参数中，当主机名的最左侧段是且仅是一个字符时，现在支持通配符。由 Mandeep Singh 提供补丁。

- bpo-12239: Make `msilib.SummaryInformation.GetProperty()` return `None` when the value of property is `VT_EMPTY`. Initial patch by Mark Mc Mahon.

- bpo-28334: 在 `netrc.netrc` 中使用 `os.path.expanduser()` 来查找 `~/.netrc` 文件。如果文件不存在，则抛出 `FileNotFoundError`。由 Dimitri Merejkowsky 提供补丁。

- bpo-32121: 使 `tracemalloc.Traceback` 的行为更类似于 traceback 模块，将帧从最旧到最新排序。`Traceback.format()` 现在接受负的 limit 参数，将结果截断为 `abs(limit)` 个最旧的帧。要获得旧的行为，可以使用 `Traceback.format()` 的新参数 most_recent_first。（补丁由 Jesse Bakker 提供。）

- bpo-31325: 修复了 `RobotFileParser.parse()` 方法中 `collections.namedtuple()` 的错误用法。初始由 Robin Wellner 提供补丁。

- bpo-12382: `msilib.OpenDatabase()` now raises a better exception message when it couldn't open or create an MSI file. Initial patch by William Tisäter.

- bpo-19610: `setup()` 现在会对某些字段的无效类型发出警告。当 `classifiers`、`keywords` 和 `platforms` 字段未指定为列表或字符串时，`distutils.dist.Distribution` 类现在会发出警告。

- bpo-32071: 为 `python -m unittest` 添加了 `-k` 命令行选项，以仅运行与给定模式匹配的测试。

- bpo-10049: 向 contextlib 添加了 nullcontext 无操作上下文管理器。这为处理可选上下文管理器时提供了比 ExitStack() 更简单、更快的替代方案。

- bpo-28684: 这里使用了新的 test.support.skip_unless_bind_unix_socket() 装饰器来跳过 asyncio 测试，这些测试因为平台缺少对 unix 域套接字的功能性 bind() 函数而失败（如在现在以强制模式运行 SELinux 的较新 Android 版本上的非 root 用户就是这种情况）。

- bpo-32110: `codecs.StreamReader.read(n)` 现在对于非负的 n，返回不超过 n 个字符/字节。这使得它与其他类似文件对象的 `read()` 方法兼容。

- bpo-27535: warnings 模块在警告过滤器的 "ignore" 操作的隐藏警告注册表中不再泄漏内存。warn_explicit() 函数不再为 "ignore" 操作将警告键添加到注册表中。

- bpo-32088: warnings: 当 Python 以调试模式构建（`Py_DEBUG`）时，`DeprecationWarning`、`PendingDeprecationWarning` 和 `ImportWarning` 警告现在默认显示。

- bpo-1647489: 修复了可以匹配空字符串的正则表达式模式的搜索。现在可以在匹配空字符串后正确找到非空字符串。

- bpo-25054: 添加了对可以匹配空字符串的模式进行拆分的支持。

- bpo-32072: 修复了二进制 plists 的问题：修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。

- bpo-32069: 从asyncio中移除遗留的SSL传输，反正总是使用ssl.MemoryBIO。

- bpo-32066: asyncio: 在create_unix_connection中支持pathlib.Path；sock参数应为可选的

- bpo-32046: Updates 2to3 to convert from operator.isCallable(obj) to callable(obj). Patch by Dong-hee Na.

- bpo-32018: inspect.signature should follow PEP 8, if the parameter has an annotation and a default value. Patch by Dong-hee Na.

- bpo-32025: 添加time.thread_time()和time.thread_time_ns()

- bpo-32037: 适应有符号32位整数的整数现在将使用协议0的INT操作码进行pickle。这将减少pickle的大小，加快pickle和unpickle的速度，并使这些整数在Python 2中作为int实例被unpickle。

- bpo-32034: 使asyncio.IncompleteReadError和LimitOverrunError可pickle。

- bpo-32015: 修复了在等待异步读写套接字期间重新连接套接字时asyncio的循环问题。

- bpo-32011: 恢复了对加载带有TYPE_INT64代码的marshal文件的支持。这些文件可以在Python 2.7中生成。

- bpo-28369: 增强add_reader/writer检查，确保套接字未被某些传输使用。之前，仅支持使用int FD调用add_reader/writer的情况。现在，对所有类文件对象都正确实现了检查。

- bpo-31976: 修复了当文件刷新缓慢时可能导致的竞态条件，如果从另一个线程关闭文件可能会导致段错误。

- bpo-31985: 正式弃用aifc.openfp、sunau.openfp和wave.openfp。自1993年的变更7bc817d5ba917528e8bd07ec461c635291e7b06a以来，这三个模块中的openfp作为向后兼容性问题，一直指向该模块的open函数，尽管它既未经测试也无文档记录。

- bpo-21862: cProfile command line now accepts `-m module_name` as an alternative to script path. Patch by Sanyam Khurana.

- bpo-31970: 降低asyncio调试模式的性能开销。

- bpo-31843: sqlite3.connect()的 database 参数现在接受一个 path-like object，而不仅仅是一个字符串。

- bpo-31945: 为 `HTTPConnection` 和 `HTTPSConnection` 添加可配置的 blocksize 以提高上传吞吐量。由Nir Soffer提供补丁。

- bpo-31943: 向 `asyncio.Handle` 添加一个 `cancelled()` 方法。由Marat Sharafutdinov提供补丁。

- bpo-9678: 修复了uuid模块中确定MAC地址的问题：在NetBSD和OpenBSD上使用ifconfig。在Linux、FreeBSD、NetBSD和OpenBSD上使用arp。基于Takayuki Shimizukawa的补丁。

- bpo-30057: 修复了signal.signal()中潜在的信号丢失问题。

- bpo-31933: 修复Blake2参数leaf_size和node_offset在大端平台上的问题。由Jack O'Connor提供补丁。

- bpo-21423: 向{Process,Thread}PoolExecutor添加一个初始化参数。

- bpo-31927: 修复了socket模块在NetBSD 8上的编译问题。修复了在NetBSD和DragonFly BSD上解析AF_BLUETOOTH地址时的断言失败或读取任意数据的问题。

- bpo-27666: 修复了当类型chtype或mmask_t的大小小于C long的大小时，curses.box()和curses.ungetmouse()中的堆栈损坏问题。curses.box()现在接受字符作为参数。基于Steve Fink的补丁。

- bpo-31917: Add 3 new clock identifiers: `time.CLOCK_BOOTTIME`, `time.CLOCK_PROF` and `time.CLOCK_UPTIME`.

- bpo-31897: plistlib现在在读取二进制plist时会捕获更多错误，并抛出InvalidFileException而不是意外的异常。

- bpo-25720: 修复了检查curses WINDOW填充状态的方法。由Masayuki Yamamoto提供补丁。

- bpo-31893: 修复了OpenBSD和NetBSD上kqueue_event结构的布局。修复了kqueue_event对象的比较。

- bpo-31891: 修复了在NetBSD上构建curses模块的问题。

- bpo-31884: 向subprocess模块添加了在Windows上设置优先级所需的常量。

- bpo-28281: 移除了Calendar.weekday()函数对年份(1-9999)的限制。由Mark Gollahon提供补丁。

- bpo-31702: crypt.mksalt() 现在允许指定 SHA-256 和 SHA-512 哈希的轮数。

- bpo-30639: `inspect.getfile()` 不再计算未知对象的 repr 以显示在错误消息中，以防止不良行为的自定义 repr。

- bpo-30768: 修复了当 timeout > 0 和 intr_flag=0 时 PyThread_acquire_lock_timed() 的 pthread+semaphore 实现：如果 sem_timedwait() 被信号（EINTR）中断，则重新计算超时。另见 PEP 475。

- bpo-31854: 添加 `mmap.ACCESS_DEFAULT` 常量。

- bpo-31834: 仅在 SSSE3+ 上使用优化的 BLAKE2 代码。纯 SSE2 实现比纯 C 参考实现慢。

- bpo-28292: 当日期超出 0001-01-01 到 9999-12-31 范围时，Calendar.itermonthdates() 将始终引发异常。为了支持不能容忍此类异常的应用程序，添加了新方法 itermonthdays3() 和 itermonthdays4()。新方法返回元组，不受 datetime.date 支持的范围限制。

- bpo-28564: shutil.rmtree() 函数的速度提高了 20--40%。这是通过使用 os.scandir() 函数实现的。

- bpo-28416: 具有 persistent_id() 方法的 pickle.Pickler 子类和具有 persistent_load() 方法的 pickle.Unpickler 子类的实例不再创建引用循环。

- bpo-31653: 如果可以立即获取多处理信号量，则不释放 GIL。

- bpo-28326: 修复当 stdout 和/或 stderr 关闭或为 None 时的 multiprocessing.Process。

- bpo-20825: Add `subnet_of` and `superset_of` containment tests to `ipaddress.IPv6Network` and `ipaddress.IPv4Network`. Patch by Michel Albert and Cheryl Sabella.

- bpo-31827: 移除 os.stat_float_times() 函数。该函数在 Python 2.3 中引入，用于向后兼容 Python 2.2，并从 Python 3.1 开始弃用。

- bpo-31756: Add a `subprocess.Popen(text=False)` keyword argument to `subprocess` functions to be more explicit about when the library should attempt to decode outputs into text. Patch by Andrew Clegg.

- bpo-31819: 添加 AbstractEventLoop.sock_recv_into()。

- bpo-31457: 如果使用嵌套的日志适配器，内部 `process()` 方法不再被省略。

- bpo-31457: LoggerAdapter 对象的 `manager` 属性现在可以正确设置了。

- bpo-31806: 修复 time.sleep(), threading.Lock.acquire() 和 socket.socket.settimeout() 中的超时舍入，以正确舍入 -1.0 和 0.0 之间的负超时。这些函数现在会按预期阻塞等待事件。之前，调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。

- bpo-31803: time.clock() 和 time.get_clock_info('clock') 现在会发出 DeprecationWarning 警告。

- bpo-31800: 扩展了对解析 UTC 偏移的支持。strptime '%z' 现在可以解析由 datetime.isoformat 生成的输出，包括秒和微秒。

- bpo-28603: traceback: 修复了在打印异常回溯时，当当前异常或其上下文/原因链中的异常不可哈希时发生的 TypeError。由 Zane Bitter 提供补丁。

- bpo-30541: 添加新功能以密封模拟对象并防止自动创建子模拟对象。由 Mario Corchero 提供补丁。

- bpo-31784: 实现 PEP 564，向 `time` 模块添加 6 个具有纳秒分辨率的新函数：`clock_gettime_ns()`, `clock_settime_ns()`, `monotonic_ns()`, `perf_counter_ns()`, `process_time_ns()`, `time_ns()`。

- bpo-30143: 2to3 现在生成的代码使用 collections.abc 中的抽象集合类而不是 collections。

- bpo-31770: 防止多次调用 `sqlite3.Cursor` 对象的 `__init__()` 方法时崩溃。由 Oren Milman 提供补丁。

- bpo-31764: 防止在 `sqlite3.Cursor.close()` 中当 `Cursor` 对象未初始化时发生崩溃。补丁由 Oren Milman 提供。

- bpo-31752: 修复在调用自定义整数的 timedelta 构造函数时可能发生的崩溃。

- bpo-31620: 空的 asyncio.Queue 现在在队列获取轮询超时时不会泄漏内存。

- bpo-31690: 允许将 re.ASCII、re.LOCALE 和 re.UNICODE 标志用作正则表达式的组标志。

- bpo-30349: 如果正则表达式包含将来会语义变化的字符集构造（嵌套集和集操作），现在会发出 FutureWarning。

- bpo-31664: 在 crypt 模块中添加了对 Blowfish 哈希的支持。

- bpo-31632: 修复 asyncio 模块中 _SSLProtocolTransport 类的 set_protocol() 方法。此方法之前修改了错误的协议引用。

- bpo-15037: 为 ncurses 5.7 及更早版本的 curses 中的 getkey() 添加了一个变通方案。

- bpo-31307: 允许使用字节对象作为 `configparser.ConfigParser.read()` 的参数。补丁由 Vincent Michel 提供。

- bpo-31334: 修复 `select` 模块中的 `poll.poll([timeout])`，在所有操作系统上对于任意的负超时值，现在可以仅接受非负整数或 -1。由 Riccardo Coccioli 提供补丁。

- bpo-31310: 如果崩溃，multiprocessing 的信号量跟踪器应该重新启动。

- bpo-31308: 使 multiprocessing 的 forkserver 进程免受 Ctrl-C 和其他用户中断的影响。如果崩溃，必要时重启它。

- bpo-31245: Added support for AF_UNIX socket in asyncio `create_datagram_endpoint`.

- bpo-30553: 将 HTTP/2 状态码 421（Misdirected Request）添加到 `http.HTTPStatus`。由 Vitor Pereira 提供补丁。

### 文档

- bpo-32105: 添加了 asyncio.BaseEventLoop.connect_accepted_socket 的 versionadded 标记。

### 测试

- bpo-31380: 在 macOS 上跳过 test_httpservers 的 test_undecodable_file 测试：在 APFS 上失败。

- bpo-31705: 在早于4.5版本的Linux内核上跳过test_socket.test_sha256()测试。该测试在内核3.10（ppc64le架构）上会因ENOKEY而失败。此问题已在4.5内核中修复。

- bpo-32138: 在Android上跳过引发SIGSEGV的test_faulthandler测试，并移除test.support.requires_android_level装饰器。

- bpo-32136: 运行时嵌入测试已从 `Lib/test/test_capi.py` 分离出来，移至新文件``Lib/test/test_embed.py``。

- bpo-28668: 移除了test.support.requires_multiprocessing_queue。当信号量实现损坏或缺失时，改用test.support.import_module('multiprocessing.synchronize')跳过测试。

- bpo-32126: 当sem_open()功能不正常时，跳过test.test_asyncio.test_events中的test_get_event_loop_new_process测试。

- bpo-31174: 修复test_tools.test_unparse：DirectoryTestCase现在存储样本名称以始终测试相同的文件。这避免了在查找引用泄漏时产生误报。

### 构建

- bpo-28538: 撤销之前的更改，if_nameindex结构由统一头文件定义。

- bpo-28762: 撤销最后一次提交，F_LOCK宏由Android统一头文件定义。

- bpo-29040: 支持使用统一头文件构建Android。首个支持统一头文件的NDK版本是android-ndk-r14。

- bpo-32059: `setup.py` 中的 `detect_modules()` 现在在交叉编译时也会搜索sysroot路径。

- bpo-31957: 修复为Windows构建时的Windows SDK版本检测。

- bpo-31609: 修复PCbuild/clean.bat中的引号问题。

- bpo-31934: 当构建源树不干净时中止构建。

- bpo-31926: 修复了当.c文件中有多个同名函数和/或方法时，Argument Clinic有时会导致编译错误的问题。

- bpo-28791: 更新Windows构建以使用SQLite 3.21.0。

- bpo-28791: 更新OS X安装程序以使用SQLite 3.21.0。

- bpo-28643: 使用stamp文件记录profile-opt构建进度。

- bpo-31866: 完成移除对AtheOS的支持。

### Windows

- bpo-1102: 当 `View.Fetch()` 返回 `ERROR_NO_MORE_ITEMS` 时返回 `None`，而不是引发``MSIError``。初始由Anthony Tuininga提供补丁。

- bpo-31944: 修复应用和功能对话框中的修改按钮。

- bpo-20486: 实现 `Database.Close()` 方法以帮助关闭MSI数据库对象。

- bpo-31857: 在多线程环境中使USE_STACKCHECK的行为变得确定。

### macOS

- bpo-31392: 更新macOS安装程序以使用OpenSSL 1.0.2m。

### IDLE

- bpo-32207: 在IDLE中改进tk事件异常回溯。当tk事件处理由IDLE的运行循环驱动时，不再向tk事件异常回溯中添加令人困惑和分散注意力的queue.EMPTY回溯上下文。现在，回溯与事件处理由用户代码驱动时相同。基于Serhiy Storchaka的建议的补丁。

- bpo-32164: 删除未使用的文件idlelib/tabbedpages.py。在configdialog中使用TabbedPageSet已被ttk.Notebook替代。

- bpo-32100: IDLE: 修复pathbrowser中的旧错误和新错误；改进测试。补丁主要由Cheryl Sabella提供。

- bpo-31858: IDLE -- 将shell提示符操作限制在shell中。编辑器和输出窗口仅看到一个空的最后提示行。这简化了代码并修复了插入换行时的一个小错误。如果存在Sys.ps1，则在Shell启动时读取，但不设置或更改。

- bpo-31860: IDLE配置对话框中的字体样本现在可编辑。更改在IDLE保持打开时持续存在。

- bpo-31836: 现在如果在设置ps1的test_idle之后运行，Test_code_module将通过。代码模块如果存在则使用sys.ps1，如果不存在则设置为'>>> '。Test_code_module现在正确测试了这两种行为。ps2同理。

- bpo-28603: 修复了一个TypeError，该错误在打印包含不可哈希异常的追溯时导致shell重启。补丁由Zane Bitter提供。

- bpo-13802: 在IDLE的字体设置示例中使用非拉丁字符。即使用户选择的字体仅定义了Unicode基本多语言平面的一个有限子集，tcl/tk也会使用定义了该字符的其他字体。扩展后的示例让使用非拉丁字符的用户更清楚地了解他们在IDLE的shell和编辑器中可能会看到的内容。为了给扩展后的示例腾出空间，字体标签页上的框架被重新排列。字体/标签帮助文档对这些新增内容进行了一些说明。

### 工具/示例

- bpo-32159: 移除CVS和Subversion工具：删除svneol.py和treesync.py脚本。CPython已经从CVS迁移到Subversion，再到Mercurial，最后到Git。CVS和Subversion已不再用于CPython的开发。

- bpo-30722: 使redemo能够在Python 3.6及更新版本中工作。同时，移除 `LOCALE` 选项，因为它不适用于Python 3中的字符串模式。由Christoph Sarnowski提供补丁。

### C API

- bpo-20891: 修复PyGILState_Ensure()。当PyGILState_Ensure()在非Python线程中且在PyEval_InitThreads()之前被调用时，仅在调用PyThreadState_New()之后调用PyEval_InitThreads()，以修复崩溃问题。

- bpo-32125: 已移除 `Py_UseClassExceptionsFlag` 标志。该标志自Python 2.0以来已被弃用且不再使用。

- bpo-25612: 将当前的异常状态从帧对象移动到协程。这简化了解释器，并修复了一些由于在进入或退出生成器时交换异常状态而导致的晦涩错误。

- bpo-23699: 添加Py_RETURN_RICHCOMPARE宏以减少富比较函数中的样板代码。

- bpo-30697: The `PyExc_RecursionErrorInst` singleton is removed and `PyErr_NormalizeException()` does not use it anymore. This singleton is persistent and its members being never cleared may cause a segfault during finalization of the interpreter. See also bpo-22898.

## Python 3.7.0 alpha 2

发布日期: 2017-10-16

### 核心与内置函数

- bpo-31558: `gc.freeze()` 是一个新的API，它允许将垃圾收集器当前跟踪的所有对象移动到永久代，从而有效地将它们从未来的收集事件中移除。这可以用来保护这些对象的PyGC_Head不被改变。实际上，这为fork()提供了极佳的写时复制稳定性。

- bpo-31642: 通过将sys.modules["package.module"]设置为None，恢复了阻塞的"from package import module"。

- bpo-31708: 允许在同步函数中使用异步生成器表达式。

- bpo-31709: 放弃对异步__aiter__的支持。

- bpo-30404: -u选项现在使stdout和stderr流变为无缓冲而非行缓冲。

- bpo-31619: 修复了将带有大量下划线的字符串转换为二进制基数整数时的ValueError。

- bpo-31602: Fix an assertion failure in `zipimporter.get_source()` in case of a bad `zlib.decompress()`. Patch by Oren Milman.

- bpo-31592: Fixed an assertion failure in Python parser in case of a bad `unicodedata.normalize()`. Patch by Oren Milman.

- bpo-31588: Raise a `TypeError` with a helpful error message when class creation fails due to a metaclass with a bad `__prepare__()` method. Patch by Oren Milman.

- bpo-31574: 为importlib装备了两个dtrace探针以分析导入时间。

- bpo-31566: Fix an assertion failure in `_warnings.warn()` in case of a bad `__name__` global. Patch by Oren Milman.

- bpo-31506: Improved the error message logic for object.__new__ and object.__init__.

- bpo-31505: Fix an assertion failure in `json`, in case `_json.make_encoder()` received a bad `encoder()` argument. Patch by Oren Milman.

- bpo-31492: 修复了在从具有错误 `__name__` 属性的模块导入失败时，以及在访问此类模块的属性失败时的断言失败。由Oren Milman提供补丁。

- bpo-31478: Fix an assertion failure in `_random.Random.seed()` in case the argument has a bad `__abs__()` method. Patch by Oren Milman.

- bpo-31336: 通过减少必要的特殊方法查找的开销，加快类创建速度10-20%。由 Stefan Behnel 提供补丁。

- bpo-31415: 添加 `-X importtime` 选项以显示每个导入花费的时间。可用于优化应用程序的启动时间。支持使用 `PYTHONPROFILEIMPORTTIME` 作为启用此功能的等效方式。

- bpo-31410: 优化了调用包装器和类方法描述符。

- bpo-31353: PEP 553 - 添加一个名为 `breakpoint()` 的新内置函数，它会调用 `sys.breakpointhook()`。默认情况下，这会导入 `pdb` 并调用 `pdb.set_trace()`，但用户可以覆盖 `sys.breakpointhook()` 来调用他们想要的任何调试器。钩子的原始值保存在 `sys.__breakpointhook__` 中。

- bpo-17852: 维护一个打开的缓冲文件列表，在退出解释器之前刷新它们。基于 Armin Rigo 的补丁。

- bpo-31315: 修复 imp.create_dynamic() 中当 spec.name 不是字符串时的断言失败。由 Oren Milman 提供补丁。

- bpo-31311: Fix a crash in the `__setstate__()` method of `ctypes._CData`, in case of a bad `__dict__`. Patch by Oren Milman.

- bpo-31293: 修复 timedelta 对象与具有坏的 as_integer_ratio() 方法的浮点数进行真除法和乘法时的崩溃。由 Oren Milman 提供补丁。

- bpo-31285: Fix an assertion failure in `warnings.warn_explicit`, when the return value of the received loader's get_source() has a bad splitlines() method. Patch by Oren Milman.

- bpo-30406: 使 `async` 和 `await` 成为合适的关键字，如 PEP 492 所规定。

### 库

- bpo-30058: 修复 select.kqueue.control() 中的缓冲区溢出。

- bpo-31672: `string.Template` 中的 `idpattern` 匹配了一些非ASCII字符。现在它使用 `-i` 正则表达式本地标志来避免非ASCII字符。

- bpo-31701: 在Windows上，faulthandler.enable()现在会忽略MSC和COM异常。

- bpo-31728: Prevent crashes in `_elementtree` due to unsafe cleanup of `Element.text` and `Element.tail`. Patch by Oren Milman.

- bpo-31671: 现在 `re.compile()` 在编译前将传递的RegexFlag转换为普通的int对象。bm_regex_compile基准测试显示性能提升了14%。

- bpo-30397: The types of compiled regular objects and match objects are now exposed as `re.Pattern` and `re.Match`. This adds information in pydoc output for the re module.

- bpo-31675: 修复了Tkinter的splitlist()和split()方法在传递大于2 GiB的字符串时的内存泄漏问题。

- bpo-31673: 修复了Tkinter方法adderrorinfo()名称中的拼写错误。

- bpo-31648: 对ElementTree中的路径谓词进行了改进：允许谓词部分周围有空格，例如"[a = 'text']"，而不是要求不太可读的"[a='text']"。添加了对当前节点文本比较的支持，如"[.='text']"。由Stefan Behnel提供补丁。

- bpo-30806: 修复了netrc对象的字符串表示。

- bpo-31638: 向 `zipapp.create_archive` 添加可选参数 `compressed`，并向 `zipapp` 的命令行界面添加选项 `--compress`。

- bpo-25351: 避免venv激活时因未定义变量而失败。

- bpo-20519: 尽可能避免使用ctypes并提高uuid的导入时间。

- bpo-28293: 当正则表达式缓存满时，不再完全清空。

- bpo-31596: 向time模块添加了pthread_getcpuclockid()。

- bpo-27494: 使2to3接受生成器表达式中的尾随逗号。例如，现在允许``set(x for x in [],)``。

- bpo-30347: 修复了在并发迭代itertools.groupby()迭代器时的崩溃问题。

- bpo-30346: 由itertools.groupby()迭代器生成的迭代器现在在推进groupby迭代器后会耗尽。

- bpo-31556: 如果超时<=0，则更快地取消asyncio.wait_for未来。

- bpo-31540: 允许在 `concurrent.futures.ProcessPoolExecutor` 构造函数中传递上下文对象。同时，提前释放 `concurrent.futures.ProcessPoolExecutor` 中的作业资源，以改善工作线程等待新作业时的内存使用情况。

- bpo-31516: `threading.current_thread()` 在关闭时不应返回一个虚拟线程。

- bpo-31525: 在 sqlite 模块中，要求 sqlite3_prepare_v2 API。因此，sqlite 模块现在要求 sqlite 版本至少为 3.3.9。

- bpo-26510: argparse 子解析器现在默认是必需的。这与 Python 2 的行为一致。对于可选的子解析器，使用新参数 `add_subparsers(required=False)`。由 Anthony Sottile 提供补丁。（截至 3.7.0rc1，默认值更改为非必需，这是自 Python 3.3 以来的情况。）

- bpo-27541: Reprs of subclasses of some collection and iterator classes (`bytearray`, `array.array`, `collections.deque`, `collections.defaultdict`, `itertools.count`, `itertools.repeat`) now contain actual type name insteads of hardcoded name of the base class.

- bpo-31351: 如果 pip 引导失败，python -m ensurepip 现在会以非零退出代码退出。

- bpo-31389: `pdb.set_trace()` 现在接受一个可选的关键字参数 `header`。如果提供，这将在调试开始前打印到控制台。

### 文档

- bpo-31537: 修复了 readline 文档示例代码中 `get_history_length` 的不正确用法。补丁由 Brad Smith 提供。

- bpo-30085: 为了清晰起见，优先使用没有双下划线的操作符函数。带有下划线的仅为了向后兼容而保留。

### 构建

- bpo-31696: 当 Python 使用 Clang 构建时，改进 `sys.version` 中的编译器版本信息。

- bpo-31625: 停止在静态库上使用 ranlib。相反，我们假设 ar 支持 's' 标志。

- bpo-31624: 移除对 BSD/OS 的支持。

- bpo-22140: 防止在 python-config.sh 中双重替换前缀。

- bpo-31569: 在构建脚本和文档中将PCBuild/更正为PCbuild/。

- bpo-31536: Avoid wholesale rebuild after `make regen-all` if nothing changed.

### IDLE

- bpo-31460: 简化IDLE模块浏览器的API。传递一个小部件而不是带有根部件的flist，开启了创建一个仅是窗口一部分的浏览器框架的可能性。传递一个完整的文件名而不是假定来自.py文件的片段，开启了浏览不以.py结尾的python文件的可能性。

- bpo-31649: IDLE - 使_htest, _utest参数仅关键字。

- bpo-31559: 在idle_test.test_browser中移除测试顺序依赖。

- bpo-31459: 将IDLE的模块浏览器从类浏览器重命名为模块浏览器。原始的模块级类和方法浏览器多年前就变成了一个模块浏览器，增加了模块级函数。昨天又增加了嵌套类和函数。为了向后兼容，设置对话框的键标签上出现的虚拟事件<<open-class-browser>>没有被更改。补丁由Cheryl Sabella提供。

- bpo-31500: 现在默认字体在高DPI显示器上会进行缩放。

- bpo-1612262: IDLE模块浏览器现在显示嵌套类和函数。代码和测试的原始补丁分别由Guilherme Polo和Cheryl Sabella提供。

### C API

- bpo-28280: Make `PyMapping_Keys()`, `PyMapping_Values()` and `PyMapping_Items()` always return a `list` (rather than a `list` or a `tuple`). Patch by Oren Milman.

- bpo-31532: 修复由于在getpath.c中Py_GetPath()和Py_SetPath()之间的分配器混合导致的内存损坏。

- bpo-25658: 实现线程特定存储（TSS）API的 PEP 539：这是CPython的一个新的线程本地存储（TLS）API，将取代CPython解释器中现有的TLS API的使用，同时弃用现有的API。PEP由Erik M. Bray撰写，由Masayuki Yamamoto提供补丁。

## Python 3.7.0 alpha 1

发布日期: 2017-09-19

### 安全性

- bpo-29781: 当尚未通过 BIO 执行握手时，SSLObject.version() 现在正确返回 None。

- bpo-29505: 为 oss-fuzz 添加 float(str)、int(str)、unicode(str) 的模糊测试。

- bpo-30947: 将内嵌的 libexpat 从版本 2.2.1 升级到 2.2.3 以获取安全修复。

- bpo-30730: 在 Windows 上防止子进程中的环境变量注入。防止传递其他环境变量和命令参数。

- bpo-30694: Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes of multiple security vulnerabilities including: CVE-2017-9233 (External entity infinite loop DoS), CVE-2016-9063 (Integer overflow, re-fix), CVE-2016-0718 (Fix regression bugs from 2.2.0's fix to CVE-2016-0718) and CVE-2012-0876 (Counter hash flooding with SipHash). Note: the CVE-2016-5300 (Use os-specific entropy sources like getrandom) doesn't impact Python, since Python already gets entropy from the OS to set the expat secret using `XML_SetHashSalt()`.

- bpo-30500: 修复 urllib.parse.splithost() 正确解析片段。例如，`splithost('//127.0.0.1#@evil.com/')` 现在正确返回 `127.0.0.1` 主机，而不是将 `@evil.com` 视为认证中的主机（`login@host`）。

- bpo-29591: Update expat copy from 2.1.1 to 2.2.0 to get fixes of CVE-2016-0718 and CVE-2016-4472. See https://sourceforge.net/p/expat/bugs/537/ for more information.

### 核心与内置函数

- bpo-31490: Fix an assertion failure in `ctypes` class definition, in case the class has an attribute whose name is specified in `_anonymous_` but not in `_fields_`. Patch by Oren Milman.

- bpo-31471: Fix an assertion failure in `subprocess.Popen()` on Windows, in case the env argument has a bad keys() method. Patch by Oren Milman.

- bpo-31418: Fix an assertion failure in `PyErr_WriteUnraisable()` in case of an exception with a bad `__module__` attribute. Patch by Oren Milman.

- bpo-31416: 修复当warnings.filters或warnings.defaultaction错误时的断言失败。由Oren Milman提供补丁。

- bpo-28411: 将直接使用PyInterpreterState.modules改为使用PyImport_GetModuleDict()。同时，在处理sys.modules的其他代码中引入更多一致性。这有助于减少在处理sys.modules时的复杂性。

- bpo-28411: 在处理 `PyInterpreterState.modules` 时切换到抽象API。这为以后支持所有字典子类和其他映射实现提供了可能。同时添加了一个 `PyImport_GetModule()` 函数以减少大量重复代码。

- bpo-31411: 当warnings.onceregistry不是字典时，抛出TypeError而不是SystemError。由Oren Milman提供补丁。

- bpo-31344: 为了更精细地控制测试解释器时的跟踪行为，添加了两个新的帧属性来控制特定跟踪事件的发出：`f_trace_lines``（默认为 ``True`）用于关闭每行跟踪事件；`f_trace_opcodes` (默认为 `False`) 用于开启每操作码跟踪事件。

- bpo-31373: 修复了几个由于浮点降级可能导致的未定义行为实例。

- bpo-30465: f-字符串中的位置信息（`lineno``和 ``col_offset`）现在（大部分）正确。这修复了像flake8这样的工具在错误行（通常是文件的第一行）显示警告的问题。

- bpo-30860: 将CPython的全局运行时状态整合到一个结构体中。这提高了运行时状态的可发现性。

- bpo-31347: 修复了_PyObject_FastCall_Prepend中可能存在的未定义行为。

- bpo-31343: Include sys/sysmacros.h for major(), minor(), and makedev(). GNU C libray plans to remove the functions from sys/types.h.

- bpo-31291: Fix an assertion failure in `zipimport.zipimporter.get_data` on Windows, when the return value of `pathname.replace('/','\\')` isn't a string. Patch by Oren Milman.

- bpo-31271: Fix an assertion failure in the write() method of `io.TextIOWrapper`, when the encoder doesn't return a bytes object. Patch by Oren Milman.

- bpo-31243: Fix a crash in some methods of `io.TextIOWrapper`, when the decoder's state is invalid. Patch by Oren Milman.

- bpo-30721: `print` 现在显示使用Python 2重定向语法的正确用法提示。由Sanyam Khurana提供补丁。

- bpo-31070: 修复importlib中_get_module_lock()的竞态条件。

- bpo-30747: 在MSVC上添加_Py_atomic_store和_Py_atomic_load的非虚拟实现。

- bpo-31095: 修复由未调用 `PyObject_GC_UnTrack()` 的 `tp_dealloc` 引起的GC期间潜在崩溃问题。

- bpo-31071: 当传递其他参数时，避免在使用*解包调用中掩盖原始TypeError。

- bpo-30978: str.format_map()现在传递键查找异常。之前任何异常都被替换为KeyError异常。

- bpo-30808: 对并发敏感的信号状态使用_Py_atomic API。

- bpo-30876: 从未加载的包中进行相对导入现在会重新导入包，而不是因SystemError失败。从非包中进行相对导入现在会因ImportError而非SystemError失败。

- bpo-30703: 改进信号传递。避免在信号处理程序中使用Py_AddPendingCall，以避免调用信号不安全函数。这里添加的测试在没有补丁的其他部分的情况下，在Linux和OS X上失败。这意味着我们的信号传递逻辑存在缺陷（某些信号可能会丢失）。

- bpo-30765: 当PyThread_acquire_lock()被要求不阻塞时，避免在pthread_mutex_lock()中阻塞。

- bpo-31161: 确保'Missing parentheses'语法错误消息仅应用于SyntaxError，而不是子类。补丁由Martijn Pieters提供。

- bpo-30814: 修复从包中导入子模块时的竞态条件。

- bpo-30736: 内部unicodedata数据库已升级到Unicode 10.0。

- bpo-30604: 将 co_extra_freefuncs 从每线程转移到每解释器以避免崩溃。

- bpo-30597: `print` 现在在作为 Python 2 语句使用时，自定义错误消息中显示预期的输入。由 Sanyam Khurana 提供补丁。

- bpo-30682: 移除了对某些 f-字符串过于严格的断言，例如 eval("f'\n'") 和 eval("f'\r'")。

- bpo-30501: 编译器现在为 "if"、"while" 和 "assert" 语句、"if" 表达式、生成器表达式和推导式中的复杂条件表达式生成更优化的代码。

- bpo-28180: 实现 :pep:`538`（传统 C 语言环境强制）。这意味着当有合适的强制目标区域设置可用时，核心解释器和区域设置感知的 C 扩展将假定使用 UTF-8 作为默认文本编码，而不是 ASCII。

- bpo-30486: 允许为 __closure__ 设置单元格值。由 Lisa Roach 提供补丁。

- bpo-30537: itertools.islice 现在接受类似整数的对象（具有 __index__ 方法）作为开始、停止和切片参数

- bpo-25324: Python 解析所需的令牌已移至 C。 `COMMENT`、`NL` 和 `ENCODING`。这样，当导入 tokenize 模块时，token 模块中的令牌和 tok_names 不会被更改。

- bpo-29104: 修复了 f-字符串中反斜杠的解析。

- bpo-27945: 修复了在搜索、插入或比较过程中输入集合被修改时，字典的各种段错误。基于 Duane Griffin 和 Tim Mitchell 的补丁。

- bpo-25794: 修复了 type.__setattr__() 和 type.__delattr__() 对于非 interned 属性名称的问题。基于 Eryk Sun 的补丁。

- bpo-30039: 如果解释器在恢复一系列嵌套的 'yield from' 或 'await' 调用过程中发生 KeyboardInterrupt，现在会正确地传递到最内层的帧。

- bpo-28974: `object.__format__(x, '')` 现在等同于 `str(x)` 而不是 `format(str(self), '')`。

- bpo-30024: 现在支持涉及绝对导入并将子模块绑定到名称的循环导入。

- bpo-12414: sys.getsizeof() on a code object now returns the sizes which includes the code struct and sizes of objects which it references. Patch by Dong-hee Na.

- bpo-29839: 如果 __len__() 返回一个大的负整数，len() 现在会引发 ValueError 而不是 OverflowError。

- bpo-11913: README.rst 现在被包含在 distutils 标准 README 列表中，因此也包含在源代码分发中。

- bpo-29914: 修复了 __reduce__ 和 __reduce_ex__() 的默认实现。object.__reduce__() 不再接受参数，object.__reduce_ex__() 现在需要一个参数。

- bpo-29949: 修复了 set 和 frozenset 对象的内存使用回归问题。

- bpo-29935: 修复了在传递错误类型的索引时，tuple、list 和 deque 的 index() 方法中的错误消息。

- bpo-29816: 移位操作现在引发 OverflowError 的机会更少。对于负计数，总是引发 ValueError 而不是 OverflowError。用非负计数移位零总是返回零。

- bpo-24821: 修复了在某些不幸的 Unicode 字符搜索中减慢到 25 倍的问题。

- bpo-29102: 向 PyInterpreterState 添加了一个唯一 ID。这使得更容易识别每个子解释器。

- bpo-29894: 如果 __complex__ 返回一个严格子类的实例，则会发出弃用警告。在 Python 的未来版本中，这可能是一个错误。

- bpo-29859: 当 thread_pthread.h 中的任何 pthread_* 调用失败时，显示正确的错误消息。

- bpo-29849: 修复了在从导入期间引发 ImportError 时的内存泄漏。

- bpo-28856: 修复了一个疏忽，即 %b 格式的字节应支持遵循缓冲区协议的对象。

- bpo-29723: bpo-29139 中对 `sys.path[0]` 初始化的更改导致了一个回归问题，暴露了在执行来自 zip 文件、目录或其他导入位置的 `__main__` 时 `sys.path` 初始化方式的不一致性。解释器现在一致避免将导入位置的父目录添加到 `sys.path` 中，并确保在插入命令行中指定的导入位置时不会无意中修改其他 `sys.path` 条目。

- bpo-29568: 经典字符串格式化格式字符串中的转义百分号 "%%" 不再允许两个百分号之间存在任何字符。

- bpo-29714: 修复了一个回归问题，即当包含零字节时，字节格式可能会失败。

- bpo-29695: bool()、float()、list() 和 tuple() 不再接受关键字参数。int() 的第一个参数现在只能作为位置参数传递。

- bpo-28893: 为从 __aiter__ 和 __anext__ 返回的无效可等待对象引发的错误设置了正确的 __cause__。

- bpo-28876: 即使 `len(range)` 引发 `OverflowError`，`bool(range)` 也能正常工作。

- bpo-29683: 修复了 _PyCode_SetExtra 中的内存分配问题。由 Brian Coleman 提供补丁。

- bpo-29684: 修复了 PyEval_CallObjectWithKeywords 的一个小回归问题。当 kwargs 不是字典时，它应该引发 TypeError。但当 args=NULL 且 kwargs 不是字典时，可能会导致段错误。

- bpo-28598: 支持在调用 str.__mod__ 之前调用 str 子类的 __rmod__。由 Martijn Pieters 提供补丁。

- bpo-29607: 修复了 CALL_FUNCTION_EX 的 stack_effect 计算。补丁由 Matthieu Dartiailh 提供。

- bpo-29602: 修复了在复杂子类的构造函数和具有 __complex__ 方法的输入中对有符号零的错误处理。由 Serhiy Storchaka 提供补丁。

- bpo-29347: 修复了在创建弱引用对象时可能解引用未定义指针的问题。

- bpo-29463: 向Module、ClassDef、FunctionDef和AsyncFunctionDef ast节点添加 `docstring``字段。docstring不再是它们体中的第一个stmt。这影响了模块和类的代码对象的 ``co_firstlineno``和 ``co_lnotab`。（在 bpo-32911 中恢复。）

- bpo-29438: 修复了key sharing dict中的use-after-free问题。

- bpo-29546: 为 `from ... import ...` 设置了ImportError的'path'和'name'属性。

- bpo-29546: 使用位置改进了from-import错误消息

- bpo-29478: 在使用Compat32策略时，如果指定了max_line_length=None，它将不再被忽略。补丁由Mircea Cosbuc提供。

- bpo-29319: 防止RunMainFromImporter覆盖sys.path[0]。

- bpo-29337: 修复了比较代码对象时可能出现的BytesWarning。警告可能在编译时发出。

- bpo-29327: 修复了将可迭代关键字参数传递给sorted()时崩溃的问题。

- bpo-29034: 修复了os模块(path_converter)中的内存泄漏和use-after-free问题。

- bpo-29159: 修复了当x.__index__()引发异常时bytes(x)的回归问题。

- bpo-29049: 在调用Python函数时懒惰地调用_PyObject_GC_TRACK()。调用函数速度提高了5%。

- bpo-28927: bytes.fromhex()和bytearray.fromhex()现在忽略所有ASCII空白字符，而不仅仅是空格。由Robert Xiao提供补丁。

- bpo-28932: 如果不存在<sys/random.h>，则不包含它。

- bpo-25677: 修正了缩进块语法错误提示符的位置。基于Michael Layzell的补丁。

- bpo-29000: 修复了八进制数在交替形式下零填充的bytes格式化。

- bpo-18896: Python函数现在可以有超过255个参数。collections.namedtuple()现在支持超过255个元素的元组。

- bpo-28596: 在Android上，首选编码是UTF-8。补丁由Chi Hsuan Yen编写。

- bpo-22257: 清理解释器启动（参见 PEP 432）。

- bpo-26919: 在Android上，操作系统数据现在总是以UTF-8编码/解码，而不是使用区域设置编码，以避免与已经使用UTF-8的os.fsencode()和os.fsdecode()不一致。

- bpo-28991: functools.lru_cache()容易受到一个由猴子补丁len()函数触发的晦涩的重入错误的影响。

- bpo-28147: 修复了分割表字典中的内存泄漏：setattr()不能将合并表转换为分割表。补丁由INADA Naoki编写。

- bpo-28739: f字符串表达式不再被接受为文档字符串和由ast.literal_eval()处理，即使它们不包含表达式。

- bpo-28512: 修复了通过PyErr_SyntaxLocationEx()和PyErr_SyntaxLocationObject()设置SyntaxError的offset属性。

- bpo-28918: 修复了当Python使用Py_DEBUG定义构建时，xxlimited的交叉编译问题。

- bpo-23722: 而不是无声地产生一个不支持方法中零参数 `super()` 的类，未能将新的``__classcell__``命名空间条目传递给 `type.__new__` 现在会导致一个 `DeprecationWarning` 和一个支持零参数 `super()` 的类。

- bpo-28797: 修改类__dict__在一个描述符的__set_name__方法内部，该描述符在那个类内部使用，不再阻止调用其他描述符的__set_name__方法。

- bpo-28799: 移除 `PyEval_GetCallStats()` 函数并弃用未测试和未文档化的``sys.callstats()``函数。移除 `CALL_PROFILE` 特殊构建：使用 `sys.setprofile()` 函数、`cProfile` 或 `profile` 来分析函数调用。

- bpo-12844: 现在可以向一个函数传递超过255个参数。

- bpo-28782: 修复了在检查下一条指令是否为YIELD_FROM时 `yield from` 实现中的一个错误。由WORDCODE(bpo-26647)引入的回归问题。

- bpo-28774: 修复ASCII和Latin1编码器中当错误处理程序返回的字符串包含多个不可编码字符（对于ASCII编解码器是非ASCII字符，对于Latin1是超出U+0000-U+00FF范围的字符）时的错误位置。

- bpo-28731: 优化_PyDict_NewPresized()以创建正确大小的字典。将具有常量键的字典字面量的速度提高至30%。

- bpo-28532: 当提供-V选项两次时显示sys.version。

- bpo-27100: with语句现在在检查__exit__之前先检查__enter__。当两种方法都缺失时，这会给出不那么令人困惑的错误信息。由Jonathan Ellington提供补丁。

- bpo-28746: 在没有ioctl FIOCLEX和FIONCLEX命令的平台上修复set_inheritable()文件描述符方法。

- bpo-26920: 在没有langinfo的平台上修复初始化解释器时未获取区域设置的字符集的问题。

- bpo-28648: 修复了在Mac OS X上调试版本中解码星体字符时Py_DecodeLocale()崩溃的问题。补丁由Xiang Zhang提供。

- bpo-28665: 将STORE_DEREF操作码的速度提高40%。

- bpo-19398: 在编译时PYTHONPATH组件为空的情况下，不再向sys.path组件添加额外的斜杠。

- bpo-28621: 通过重用更快的位数计数实现，加快了将int转换为float的速度。由Adrian Wielgosik提供补丁。

- bpo-28580: 优化了迭代分割表值。由Xiang Zhang提供补丁。

- bpo-28583: PyDict_SetDefault在需要时未合并分割表。由Xiang Zhang提供补丁。

- bpo-28128: 无效的str和byte转义序列的弃用警告现在会打印出关于错误发生位置的更好信息。由Serhiy Storchaka和Eric Smith提供补丁。

- bpo-28509: dict.update()不再分配不必要的大内存。

- bpo-28426: 修复了调试版本中PyUnicode_AsDecodedObject()潜在的崩溃问题。

- bpo-28517: 修复了窥孔优化器中的一个偏移错误，该错误导致保留无法到达的代码。

- bpo-28214: 改进了对有问题的 __set_name__ 属性的异常报告。

- bpo-23782: 修复了 _PyTraceback_Add() 中可能的内存泄漏和 PyTraceBack_Here() 中的异常丢失问题。

- bpo-28183: 优化并清理了字典迭代。

- bpo-26081: 添加了 asyncio.Future 的 C 实现。原始由 Yury Selivanov 提供补丁。

- bpo-28379: 为 PyUnicode_CopyCharacters() 添加了健全性检查和测试。由 Xiang Zhang 提供补丁。

- bpo-28376: 长范围迭代器的类型现在注册为 Iterator。由 Oren Milman 提供补丁。

- bpo-28376: 现在不允许通过调用 range_iterator 类型来创建 range_iterator 实例。调用 iter() 方法是唯一的方式。由 Oren Milman 提供补丁。

- bpo-26906: 现在解析未初始化类型的特殊方法会导致类型的隐式初始化而不是失败。

- bpo-18287: PyType_Ready() 现在检查 tp_name 是否为 NULL。原始由 Niklas Koep 提供补丁。

- bpo-24098: 修复了在编译过程中 AST 被更改时可能发生的崩溃。

- bpo-28201: 当哈希值具有相同的低位时，字典减少了哈希表中第二次冲突的可能性。

- bpo-28350: 不再对含有空字符的字符串常量进行内部化。

- bpo-26617: 修复了在弱引用回调过程中运行垃圾收集时发生的崩溃。

- bpo-27942: 现在在元组和冻结集合中递归内部化字符串常量。

- bpo-28289: ImportError.__init__ 现在重置未指定的属性。

- bpo-21578: 修复了当 ImportError 使用无效关键字参数调用时误导性的错误消息。

- bpo-28203: 修复了 complex(1.0, {2:3}) 错误消息中的不正确类型。补丁由 Soumya Sharma 提供。

- bpo-28086: 元组子类型的单个可变位置参数现在被转换为确切的元组，而不是原封不动地传递给 C 定义的函数。

- bpo-28214: 现在 __set_name__ 是在类上查找而不是在实例上查找。

- bpo-27955: 当 getrandom() 系统调用因 EPERM 失败时（例如被 SECCOMP 阻止时），回退读取 /dev/urandom 设备。

- bpo-28192: 在隔离模式下不导入readline。

- bpo-27441: 移除longobject.c中一些对ob_size的冗余赋值。感谢Oren Milman。

- bpo-27222: 清理long_rshift函数中的冗余代码。感谢Oren Milman。

- 升级内部unicode数据库至Unicode 9.0.0版本。

- bpo-28131: 修复zipimport的compile_source()中的回归问题。zipimport应使用与解释器相同的优化级别。

- bpo-28126: 用memcpy()替换Py_MEMCPY。Visual Studio能正确优化memcpy()。

- bpo-28120: Fix dict.pop() for splitted dictionary when trying to remove a "pending key" (Not yet inserted in split-table). Patch by Xiang Zhang.

- bpo-26182: 当async和await关键字被用作变量/属性/类/函数名时，发出DeprecationWarning。

- bpo-26182: 修复在引发DeprecationWarning的代码中的内存泄漏。

- bpo-28721: 修复异步生成器的aclose()和athrow()以正确处理StopAsyncIteration传播。

- bpo-26110: 加速方法调用：添加LOAD_METHOD和CALL_METHOD操作码。

### 库

- bpo-31499: xml.etree：修复当解析器是引用循环的一部分时的崩溃问题。

- bpo-31482: `random.seed()` 现在在version=1时可以与bytes一起工作。

- bpo-28556: typing.get_type_hints现在默认（当调用者未指定 `globalns` 时）为类和模块找到正确的globalns。

- bpo-28556: 对 `typing` 模块的速度改进。原始PR由Ivan Levkivskyi和Mitar提供。

- bpo-31544: ElementTree的C加速器模块忽略了在XMLParser()中查找TreeBuilder目标方法时引发的异常。

- bpo-31234: socket.create_connection()现在手动修复了一个引用循环：成功时清除存储最后一个异常的变量。

- bpo-31457: LoggerAdapter对象现在可以嵌套。

- bpo-31431: SSLContext.check_hostname现在自动将SSLContext.verify_mode设置为ssl.CERT_REQUIRED，而不是以ValueError失败。

- bpo-31233: socketserver.ThreadingMixIn 现在维护一个非守护线程列表，在 server_close() 中等待所有这些线程完成。

- bpo-28638: 改变了 collections.namedtuple() 的实现策略，大幅减少了 exec() 的使用，转而采用预计算的方法。因此，不再支持 verbose 参数和 _source 属性。这一变化带来了以下好处：1) 对于使用多个命名元组的应用程序，内存占用更小；2) 命名元组类的创建速度更快（大约快 4 到 6 倍，具体取决于测量方式）；3) 使用 __new__、_make 和 _replace 创建实例时的速度略有提升。（主要补丁贡献者是 Jelle Zijlstra，INADA Naoki、Serhiy Storchaka 和 Raymond Hettinger 进一步改进。）

- bpo-31400: 改进了 SSL 错误处理，避免丢失错误编号。

- bpo-27629: 使 SSLContext.wrap_bio() 和 SSLContext.wrap_socket() 的返回类型可定制。

- bpo-28958: ssl.SSLContext() 现在在无法实例化上下文时使用 OpenSSL 错误信息。

- bpo-28182: 当 OpenSSL 无法验证对等证书时，SSL 模块现在会引发 SSLCertVerificationError 异常。该异常包含更多关于错误的信息。

- bpo-27340: SSLSocket.sendall() 现在使用 memoryview 来创建数据切片。这修复了对所有类似于字节对象的支持。同时，这也更高效，避免了昂贵的复制。

- bpo-14191: 新增函数 `argparse.ArgumentParser.parse_intermixed_args` 提供了解析命令行中用户混合选项和位置参数的能力。

- bpo-31178: 修复了 subprocess 模块中在罕见错误路径下的字符串连接错误

- bpo-31350: 对 `asyncio._get_running_loop()` 进行微优化，使其速度提升高达 10%。

- bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题（libexpat bug 115）：https://github.com/libexpat/libexpat/issues/115

- bpo-29136: 添加 TLS 1.3 密码套件和 OP_NO_TLSv1_3。

- bpo-1198569: `string.Template` 子类可以选择性地定义 `braceidpattern`，如果它们想要在花括号内外指定不同的占位符模式。如果为 None（默认值），则回退到 `idpattern`。

- bpo-31326: concurrent.futures.ProcessPoolExecutor.shutdown() 现在显式关闭调用队列。此外，shutdown(wait=True) 现在也会加入调用队列线程，以防止泄漏悬挂线程。

- bpo-27144: `concurrent.futures` 中的 `map()` 和 `as_completed()` 迭代器现在避免保留对生成对象的引用。

- bpo-31281: 修复 `fileinput.FileInput(files, inplace=True)` 当 `files` 包含 `pathlib.Path` 对象时的问题。

- bpo-10746: 修复 ctypes 为整数类型生成错误的 PEP 3118 类型代码的问题。

- bpo-27584: `AF_VSOCK` 已被添加到套接字接口中，允许虚拟机与其主机之间的通信。

- bpo-22536: 在 POSIX 系统上由于找不到可执行文件或 cwd 而引发 FileNotFoundError 时，子进程模块现在会设置文件名。

- bpo-29741: 更新 _pyio 模块中的一些方法，以也接受整数类型。由 Oren Milman 提供补丁。

- bpo-31249: concurrent.futures: ThreadPoolExecutor 使用的 WorkItem.run() 现在打破了异常对象和 WorkItem 对象之间的循环引用。

- bpo-31247: xmlrpc.server 现在在处理异常的代码中使用 sys.exc_info() 时显式地打破循环引用。

- bpo-23835: configparser: 现在在 `ConfigParser()` 构造器中读取默认值使用 `read_dict()`，使其行为与解析器的其余部分一致。默认字典中的非字符串键和值现在被隐式转换为字符串。由 James Tocknell 提供补丁。

- bpo-31238: pydoc: 私有 ServerThread 类的 stop() 方法现在会等待 DocServer.serve_until_quit() 完成，然后显式将其 docserver 属性设置为 None 以打破循环引用。

- bpo-5001: Many asserts in `multiprocessing` are now more informative, and some error types have been changed to more specific ones.

- bpo-31109: 将 zipimport 转换为使用 Argument Clinic。

- bpo-30102: ssl 和 hashlib 模块现在在 OpenSSL < 1.1.0 时调用 OPENSSL_add_all_algorithms_noconf()。该函数检测 CPU 特性并在一些 CPU 架构（如 POWER8）上启用优化。补丁基于 Gustavo Serra Scalet 的研究。

- bpo-18966: 由 multiprocessing.Process 创建的非守护线程现在在子进程退出时被 join。

- bpo-31183: `dis` now works with asynchronous generator and coroutine objects. Patch by George Collins based on diagnosis by Luciano Ramalho.

- bpo-5001: There are a number of uninformative asserts in the `multiprocessing` module, as noted in issue 5001. This change fixes two of the most potentially problematic ones, since they are in error-reporting code, in the `multiprocessing.managers.convert_to_error` function. (It also makes more informative a ValueError message.) The only potentially problematic change is that the AssertionError is now a TypeError; however, this should also help distinguish it from an AssertionError being reported by the function/its caller (such as in issue 31169). - Patch by Allen W. Smith (drallensmith on github).

- bpo-31185: 修复了 asyncio 加速模块中的杂项错误。

- bpo-31151: socketserver.ForkingMixIn.server_close() 现在会等待所有子进程完成，以防止僵尸进程泄漏。

- bpo-31072: 向 `zipapp.create_archive()` 添加一个 `include_file` 形参。

- bpo-24700: 优化 array.array 比较。当比较持有相同整数类型值的数组时，现在速度提高了 10 倍到 70 倍。

- bpo-31135: ttk：修复LabeledScale和OptionMenu类的destroy()方法。即使使用的属性不存在，也调用父类的destroy()方法。LabeledScale.destroy()方法现在还显式清除了label和scale属性，以帮助垃圾回收器销毁所有小部件。

- bpo-31107: Fix `copyreg._slotnames()` mangled attribute calculation for classes whose name begins with an underscore. Patch by Shane Harvey.

- bpo-31080: Allow `logging.config.fileConfig` to accept kwargs and/or args.

- bpo-30897: `pathlib.Path` 对象现在包含一个 `is_mount()` 方法（仅在POSIX上实现）。这与 `os.path.ismount(p)` 类似。由Cooper Ry Lees提供补丁。

- bpo-31061: 修复了在使用asyncio和线程时的崩溃问题。

- bpo-30987: 在socket模块中增加了对CAN ISO-TP协议的支持。

- bpo-30522: 向 `logging.StreamHandler` 添加了一个 `setStream` 方法，允许在创建后设置流。

- bpo-30502: 修复了ssl中长oids的处理。基于Christian Heimes的补丁。

- bpo-5288: 支持具有不足一分钟偏移的tzinfo对象。

- bpo-30919: 修复了Python 3.x版本中多进程模块（multiprocessing）的共享内存性能回归问题。在Python 2.x中，共享内存使用匿名内存映射实现，而Python 3.x则改为映射实际文件。本次修复尝试尽可能减少磁盘I/O操作以提升性能。

- bpo-26732: 修复了使用“forkserver”方法启动的进程中fd过多的问题。子进程会继承与仍在运行的子进程数量一样多的fd。

- bpo-29403: 修复``unittest.mock``模块的autospec功能，使其不再对绑定到方法的内置函数报错。由Aaron Gallagher提供补丁。

- bpo-30961: 修复了tracemalloc中借用引用的递减问题。

- bpo-19896: 修复multiprocessing.sharedctypes以识别类型码 `'q'` 和 `'Q'`。

- bpo-30946: 移除了readline模块中对于GNU readline版本低于2.1或select()不可用平台的过时代码。

- bpo-25684: 修改 `ttk.OptionMenu` 单选按钮，使其在不同 `OptionMenu` 实例间保持唯一。

- bpo-30886: 修复 multiprocessing.Queue.join_thread()：现在即使线程是由创建队列的同一进程启动的，它也会等待线程完成。

- bpo-29854: 修复使用 readline 的 history-size 选项时 readline 中的段错误。由 Nir Soffer 提供补丁。

- bpo-30794: 在 Unix 上添加了 multiprocessing.Process.kill 方法，用于使用 SIGKILL 信号终止。

- bpo-30319: socket.close() 现在忽略 ECONNRESET 错误。

- bpo-30828: Fix out of bounds write in `asyncio.CFuture.remove_done_callback()`.

- bpo-30302: 在 `datetime.timedelta` 的 `repr` 中使用关键字。

- bpo-30807: 当传递一个极小的值时，signal.setitimer() 可能会禁用计时器。极小的值（如 1e-6）是 setitimer() 有效的非零值，它被指定为采取微秒级间隔。然而，在某些平台上，我们的转换例程可能将 1e-6 转换为零间隔，从而禁用计时器而不是（重新）调度它。

- bpo-30441: 修复在迭代 os.environ 时修改它导致的错误。

- bpo-29585: 避免从 `site` 导入 `sysconfig` 以提高启动速度。Python 在 Linux 上的启动速度提高了约 5%，在 macOS 上提高了约 30%。

- bpo-29293: 在 multiprocessing.Condition.notify() 上添加缺失的参数 "n"。文档声称 multiprocessing.Condition 的行为类似于 threading.Condition，但其 notify() 方法缺少 threading.Condition.notify() 接受的 "n" 参数（指定要唤醒的睡眠者数量）。

- bpo-30532: 修复电子邮件头值解析器在某些情况下丢弃折叠空白的问题。

- bpo-30596: 向 `multiprocessing.Process` 添加一个 `close()` 方法。

- bpo-9146: 修复 _hashopenssl 在链接的 OpenSSL 库中不可用标准哈希函数（如 md5）时的段错误。如在某些特殊的 FIPS-140 构建环境中。

- bpo-29169: 将 zlib 更新至 1.2.11。

- bpo-30119: ftplib.FTP.putline() now throws ValueError on commands that contains CR or LF. Patch by Dong-hee Na.

- bpo-30879: os.listdir() 和 os.scandir() 现在在使用字节类参数调用时会发出字节名称。

- bpo-30746: 禁止在 `os.putenv()` 和 `os.spawn*()` 的环境变量名中使用 '=' 字符。

- bpo-30664: unittest 子测试的描述现在会保留 TestCase.subTest() 的关键字参数的顺序。

- bpo-21071: struct.Struct.format 类型现在是 `str` 而非 `bytes`。

- bpo-29212: 修复 concurrent.futures.thread.ThreadPoolExecutor 线程在没有提供 thread_name_prefix 时默认使用非 repr() 基础的线程名。它们现在会自称为 "ThreadPoolExecutor-y_n"。

- bpo-29755: 修复了 gettext 模块中的 lgettext() 系列函数。它们现在总是返回字节。

- bpo-30616: Functional API of enum allows to create empty enums. Patched by Dong-hee Na

- bpo-30038: 修复了信号传递和唤醒文件描述符之间的竞争条件。补丁由 Nathaniel Smith 提供。

- bpo-23894: lib2to3 现在能识别 `rb'...'` 和 `f'...'` 字符串。

- bpo-24744: pkgutil.walk_packages 函数现在会在 path 是字符串时抛出 ValueError。补丁由 Sanyam Khurana 提供。

- bpo-24484: 避免多进程清理中的竞争条件。

- bpo-30589: 修复 multiprocessing.Process.exitcode 在使用 "forkserver" 方法时，当进程被信号杀死时返回信号数的相反数（而不是 255）。

- bpo-28994: 对于由 atexit 注册的回调中引发的 SystemExit，不再显示回溯。

- bpo-30508: 如果调用了 Task/Future 的 "cancel()" 方法，则不记录异常。

- bpo-30645: Fix path calculation in `imp.load_package()`, fixing it for cases when a package is only shipped with bytecodes. Patch by Alexandru Ardelean.

- bpo-11822: dis.dis() 函数现在能够反汇编嵌套的代码对象。

- bpo-30624: selectors 没有考虑到 KeyboardInterrupt 和 SystemExit，导致在出错时文件描述符处于不良状态。由 Giampaolo Rodola' 提供补丁。

- bpo-30595: multiprocessing.Queue.get() 现在在非阻塞模式下轮询其读取器，如果成功获取锁但获取时间超过了超时时间。

- bpo-28556: typing 模块的更新：添加通用的 AsyncContextManager，为所有版本添加对 ContextManager 的支持。原始 PR 由 Jelle Zijlstra 和 Ivan Levkivskyi 提供。

- bpo-30605: re.compile() 在编译带有错误放置的内联修饰符的 bytes 实例时不再引发 BytesWarning。由 Roy Williams 提供补丁。

- bpo-29870: 修复 asyncio/ssl 实现中当连接被中止时 SSL 套接字的泄漏问题。由 Michaël Sghaïer 提供补丁。

- bpo-29743: 在握手过程中关闭传输会导致打开的套接字泄漏。由 Nikolay Kim 提供补丁。

- bpo-27585: 修复 asyncio.Lock 中的等待者取消问题。由 Mathieu Sornay 提供补丁。

- bpo-30014: selectors 模块中基于 poll()、epoll() 和 devpoll() 的类的 modify() 方法现在快了约 10%。由 Giampaolo Rodola' 提供补丁。

- bpo-30418: 在 Windows 上，如果子进程仍在运行但关闭了管道，subprocess.Popen.communicate() 现在也会忽略 stdin.write() 上的 EINVAL。

- bpo-30463: Addded empty __slots__ to abc.ABC. This allows subclassers to deny __dict__ and __weakref__ creation. Patch by Aaron Hall.

- bpo-30520: 现在 Logger 可以被 pickle 序列化。

- bpo-30557: faulthandler 现在能够正确过滤和显示 Windows 上的异常代码。

- bpo-30526: 添加了 TextIOWrapper.reconfigure() 和 TextIOWrapper.write_through 属性。

- bpo-30245: 修复在组织 struct.pack_into 错误消息时可能出现的溢出问题。由 Yuan Liu 提供补丁。

- bpo-30378: 修复 logging.handlers.SysLogHandler 无法处理 IPv6 地址的问题。

- bpo-16500: 允许注册 at-fork 处理程序。

- bpo-30470: 弃用 Windows 上的无效 ctypes 调用保护。由 Mariatta Wijaya 提供补丁。

- bpo-30414: multiprocessing.Queue._feed 后台运行线程在异常时不从主循环中中断。

- bpo-30003: 修复HZ编解码器中转义字符的处理。基于Ma Lin的补丁。

- bpo-30149: inspect.signature() now supports callables with variable-argument parameters wrapped with partialmethod. Patch by Dong-hee Na.

- bpo-30436: 如果指定的父模块不是一个包（即缺少__path__属性），importlib.find_spec() 现在会引发ModuleNotFoundError而不是AttributeError。

- bpo-30301: 修复在 spawn 和 forkserver 启动方法下使用SimpleQueue.empty()时的AttributeError。

- bpo-30375: 编译正则表达式时发出的警告现在总是指向用户代码中的行。之前如果从组或条件内部发出，它们可能指向re模块的内部。

- bpo-30329: imaplib和poplib现在在shutdown(SHUT_RDWR)时捕获Windows socket WSAEINVAL错误（代码10022）：尝试了无效操作。此错误有时发生在SSL连接上。

- bpo-29196: 移除了plistlib模块中以前在Python 2.4中弃用的类Plist、Dict和_InternalDict。readPlist()和readPlistFromBytes()函数的结果中的Dict值现在是普通的dict。你不能再使用属性访问来访问这些字典的项目。

- bpo-9850: `macpath` 现在已被弃用，并将在Python 3.8中移除。

- bpo-30299: 在CPython上以调试模式编译正则表达式现在以人类可读的形式显示编译后的字节码。

- bpo-30048: 修复了当任务运行协程且协程返回而没有任何更多 `await` 时，``Task.cancel()``可能被忽略的问题。

- bpo-30266: contextlib.AbstractContextManager现在支持通过设置__enter__ = None或__exit__ = None进行反注册，遵循 bpo-25958 中引入的模式。由Jelle Zijlstra提供补丁。

- bpo-30340: 增强正则表达式优化。这使某些模式的匹配性能提高了25倍。

- bpo-30298: 放宽内联修饰符的弃用警告条件。现在允许在模式开始处连续使用多个内联修饰符（例如 `'(?i)(?s)...'`）。在详细模式下，现在允许在内联修饰符之前和之间使用空格和注释（例如 `'(?x) (?i) (?s)...'`）。

- bpo-30285: 优化了正则表达式的不区分大小写的匹配和搜索。

- bpo-29990: 修复GB18030解码器中的范围检查。原由Ma Lin提供补丁。

- bpo-29979: 重写cgi.parse_multipart，重用FieldStorage类，并使其结果与FieldStorage对于multipart/form-data请求的结果一致。由Pierre Quentel提供补丁。

- bpo-30243: 移除了_json的扫描器和编码器的__init__方法。误用它们可能导致内存泄漏或崩溃。现在扫描器和编码器对象在__new__方法中完全初始化。

- bpo-30215: 使用re.LOCALE标志编译的正则表达式对象不再依赖于编译时的区域设置。只有匹配时的区域设置会影响匹配结果。

- bpo-30185: 在收到Ctrl-C时，避免forkserver辅助进程中的KeyboardInterrupt回溯。

- bpo-30103: binascii.b2a_uu()和uu.encode()现在支持使用 `'`'` 代替空格作为零。

- bpo-28556: 对typing模块的各种更新：添加typing.NoReturn类型，使用WrapperDescriptorType，小错误修复。原PR由Jim Fasarakis-Hilliard和Ivan Levkivskyi提供。

- bpo-30205: 修复Linux上未绑定的AF_UNIX套接字的getsockname()。

- bpo-30228: io.FileIO的seek()和tell()方法现在设置内部seekable属性，以避免在open()时（在缓冲或文本模式下）进行一次系统调用。

- bpo-30190: unittest的assertAlmostEqual和assertNotAlmostEqual在失败时提供了更好的消息，包括左右参数的差异。（由Giampaolo Rodola提供补丁）

- bpo-30101: 添加对curses.A_ITALIC的支持。

- bpo-29822: inspect.isabstract()现在在__init_subclass__期间工作。补丁由Nate Soares提供。

- bpo-29960: 当_random.Random.setstate()引发异常时，保留生成器状态。补丁由Bryan Olson提供。

- bpo-30070: 修复了解析模块中错误处理的内存泄漏和崩溃问题。

- bpo-22352: dis.dis()的输出中的列宽现在针对大行号和指令偏移进行了调整。

- bpo-30061: 修复了当readline()或__next__()分别返回不可大小化的对象时，IOBase方法__next__()和readlines()中的崩溃。修复了由不检查PyObject_Size()、PySequence_Size()或PyMapping_Size()的结果可能引起的其他错误。

- bpo-30218: 修复了shutil.unpack_archive的PathLike支持。由Jelle Zijlstra提供补丁。

- bpo-10076: re模块中的编译正则表达式和匹配对象现在支持copy.copy()和copy.deepcopy()（它们被认为是原子的）。

- bpo-30068: 当存在hint时，_io._IOBase.readlines将首先检查是否关闭。

- bpo-29694: 修复了pathlib mkdir与flags parents=True时的竞争条件。补丁由Armin Rigo提供。

- bpo-29692: 修复了contextlib.contextmanager中RuntimeError异常的任意解链。由Siddharth Velankar提供补丁。

- bpo-26187: 测试sqlite3跟踪回调在模式更改时不被多次调用。通过切换到在 bpo-9303 中使用sqlite3_prepare_v2()间接修复。由Aviv Palivoda提供补丁。

- bpo-30017: 允许多次调用zip条目写入器对象的close()方法。向已关闭的写入器写入现在总是产生ValueError。

- bpo-29998: Pickling和复制ImportError现在保留name和path属性。

- bpo-29995: re.escape() 现在仅转义正则表达式特殊字符。

- bpo-29962: 添加 math.remainder 操作，实现 IEEE 754 中规定的余数。

- bpo-29649: 改进 struct.pack_into() 对于缓冲区大小和偏移量问题的异常消息。由 Andrew Nester 提供补丁。

- bpo-29654: 支持 If-Modified-Since HTTP 头部（浏览器缓存）。补丁由 Pierre Quentel 提供。

- bpo-29931: 修复了 ipaddress.ip_interface 对象的比较检查。补丁由 Sanjay Sundaresan 提供。

- bpo-29953: 修复了当传递超出范围的 fold 参数时，datetime 和 time 对象的 replace() 方法中的内存泄漏问题。

- bpo-29942: 修复了在遇到长串空可迭代对象时，itertools.chain.from_iterable 的崩溃问题。

- bpo-10030: 通过加密 ZIP 文件的读取速度提高了2倍。

- bpo-29204: Element.getiterator() 和 XMLParser() 的 html 参数仅在文档中被弃用（分别自 Python 3.2 和 3.4 起）。现在使用它们会发出弃用警告。

- bpo-27863: 修复了由竞争条件和错误类型引起的 ElementTree 中的多个崩溃问题。

- bpo-25996: 在 Unix 上添加了对 os.scandir() 中文件描述符的支持。通过使用 os.scandir()，os.fwalk() 的速度提高了2倍。

- bpo-28699: 修复了 multiprocessing.pool 中池的一个 bug，即在可迭代对象的最开始引发异常可能会吞掉异常或使程序挂起。由 Davin Potts 和 Xiang Zhang 提供补丁。

- bpo-23890: unittest.TestCase.assertRaises() 现在手动打破引用循环，以避免对象存活时间超过预期。

- bpo-29901: zipapp 模块现在支持一般的路径类对象，而不仅仅是 pathlib.Path。

- bpo-25803: 当操作系统优先考虑如 EACCES 而不是 EEXIST 的错误时，避免 Path.mkdir(exist_ok=True) 引发不正确的错误。

- bpo-29861: 在 multiprocessing.Pool 中，任务、它们的参数和结果一旦完成就释放引用。

- bpo-19930: The mode argument of os.makedirs() no longer affects the file permission bits of newly-created intermediate-level directories.

- bpo-29884: faulthandler: 在拆卸期间恢复旧的sigaltstack。由Christophe Zeitouny提供补丁。

- bpo-25455: 修复了递归缓冲文件类对象repr中的崩溃。

- bpo-29800: 修复了如果partial.keywords的键不是字符串时partial.__repr__的崩溃。由Michael Seifert提供补丁。

- bpo-8256: 修复了如果sys.stdin或sys.stdout的属性"encoding"或"errors"未设置或不是字符串时可能导致的input()失败或崩溃。

- bpo-28692: 现在弃用使用非整数值在gettext中选择复数形式。

- bpo-26121: 使用C库实现math函数erf()和erfc()。

- bpo-29619: os.stat()和os.DirEntry.inode()现在使用无符号整数转换inode（st_ino）。

- bpo-28298: 修复了一个阻止数组'Q'、'L'和'I'接受大整数（具有__int__的对象）作为元素的错误。

- bpo-29645: 加快了导入webbrowser模块的速度。webbrowser.register()现在是线程安全的。

- bpo-28231: zipfile模块现在接受路径类对象作为外部路径。

- bpo-26915: collections.abc.Sequence的index()和count()方法在进行比较时现在在检查相等性之前检查身份。

- bpo-28682: 在 os.fwalk() 中添加了对字节路径的支持。

- bpo-29728: Add new `socket.TCP_NOTSENT_LOWAT` (Linux 3.12) constant. Patch by Nathaniel J. Smith.

- bpo-29623: 允许在 ConfigParser.read() 中使用路径类对象作为单一参数。由 David Ellis 提供补丁。

- bpo-9303: 将sqlite3模块迁移到 _v2 API。由 Aviv Palivoda 提供补丁。

- bpo-28963: 修复了在 C 中实现的 asyncio.Future.remove_done_callback 中的越界迭代。

- bpo-29704: asyncio.subprocess.SubprocessStreamProtocol 在所有管道关闭之前不再关闭。

- bpo-29271: 修复 Task.current_task 和 Task.all_tasks 在 C 中的实现，使其能够接受 None 参数，如同它们的纯 Python 实现一样。

- bpo-29703: 修复 asyncio，支持在子进程中实例化新的事件循环。

- bpo-29615: SimpleXMLRPCDispatcher 不再将 KeyError（或任何其他异常）链接到调度方法中引发的异常。由 Petr Motejlek 提供补丁。

- bpo-7769: xmlrpc.server.SimpleXMLRPCDispatcher 及其子类的 register_function() 方法现在可以用作装饰器。

- bpo-29376: 修复 threading._DummyThread.is_alive() 中的断言错误。

- bpo-28624: 添加一个测试，检查 Popen() 的 cwd 参数是否接受 PathLike 对象。由 Sayan Chowdhury 提供补丁。

- bpo-28518: 在 DML 语句之前隐式开始一个事务。由 Aviv Palivoda 提供补丁。

- bpo-29742: 如果 get_extra_info() 在关闭的 ssl 传输上调用，将引发异常。由 Nikolay Kim 提供补丁。

- bpo-16285: urllib.parse.quote 现在基于 RFC 3986，因此默认情况下不引用 '~' 字符。补丁由 Christian Theune 和 Ratnadeep Debnath 提供。

- bpo-29532: 修改传递给 functools.partial() 的 kwarg 字典不再影响创建后的 partial 对象。

- bpo-29110: 修复 aifc.open() 中当文件作为文件系统路径给出且不是有效的 AIFF 格式时的文件对象泄漏问题。由 Anthony Zhang 提供补丁。

- bpo-22807: 添加 uuid.SafeUUID 和 uuid.UUID.is_safe，以传递平台关于生成的 UUID 是否使用多进程安全方法生成的信息。

- bpo-29576: 改进了 importlib 中的一些弃用。一些弃用的方法现在会发出 DeprecationWarnings，并有更好的描述性消息。

- bpo-29534: 修复了 Decimal.from_float() 在 _decimal 和 _pydecimal 中的不同行为。感谢 Andrew Nester。

- bpo-10379: locale.format_string 现在支持 'monetary' 关键字参数，而 locale.format 已被弃用。

- bpo-29851: importlib.reload() 现在会在模块缺少 spec 时抛出 ModuleNotFoundError。

- bpo-28556: 对 typing 模块进行了多项更新：typing.Counter、typing.ChainMap、改进的 ABC 缓存等。原始 PR 由 Jelle Zijlstra、Ivan Levkivskyi、Manuel Krebber 和 Łukasz Langa 提供。

- bpo-29100: 修复了 Python 3.6.0 中引入的 datetime.fromtimestamp() 的回归问题：检查最小和最大年份。

- bpo-29416: 防止 pathlib.Path.mkdir 中的无限循环。

- bpo-29444: 修复了 match 对象的 group() 方法中的越界缓冲区访问。基于 WGH 的补丁。

- bpo-29377: 将 WrapperDescriptorType、MethodWrapperType 和 MethodDescriptorType 内置类型添加到 types 模块。原始由 Manuel Krebber 提供补丁。

- bpo-29218: 现在移除了未使用的 install_misc 命令。自 2000 年以来，它已被记录为未使用。由 Eric N. Vander Weele 提供补丁。

- bpo-29368: 现在在反序列化 collections.deque 和其他类似列表的对象时，调用 extend() 方法而不是 append() 方法。这可以将反序列化速度提高至 2 倍。

- bpo-29338: 现在，如果为类提供了 __text_signature__，内置或扩展类的帮助信息会包括构造函数签名。

- bpo-29335: 修复了当子进程已退出到停止状态而不是终止状态（例如：在 ptrace 下）时的 subprocess.Popen.wait()。

- bpo-29290: 修复了 argparse 中帮助消息会在非断行空格处换行的回归问题。

- bpo-28735: 修复了 mock.MagickMock 与 mock.ANY 的比较。

- bpo-29197: 移除了已弃用的函数 ntpath.splitunc()。

- bpo-29210: 移除了对 tarfile.TarFile.add() 中已弃用参数 "exclude" 的支持。

- bpo-29219: 修复了未初始化的 ctypes.CDLL 实例的 repr 中的无限递归。

- bpo-29192: 移除了 http.cookies 模块中已弃用的功能。

- bpo-29193: string.Formatter.format() 的格式字符串参数现在仅为位置参数。

- bpo-29195: 移除了对正则表达式对象方法中已弃用的未记录关键字参数的支持。

- bpo-28969: 修复了functools.lru_cache的C实现中的竞态条件。当缓存函数满时，如果同时从不同线程以相同的未缓存参数调用，可能会引发KeyError。

- bpo-20804: unittest.mock.sentinel属性现在在复制或pickle时保持其身份。

- bpo-29142: 在urllib.request中，no_proxy环境变量中带有前导点的后缀可以再次匹配相关的主机名（例如.b.c匹配a.b.c）。由Milan Oberkirch提供补丁。

- bpo-28961: 修复unittest.mock._Call辅助函数：不再忽略name参数。由Jiajun Huang提供补丁。

- bpo-15812: inspect.getframeinfo()现在正确显示上下文的第行。由Sam Breese提供补丁。

- bpo-28985: 更新sqlite3模块中的授权者常量。由Dingyuan Wang提供补丁。

- bpo-29079: 防止pathlib.resolve()在Windows上陷入无限循环。

- bpo-13051: 修复了大型或调整大小的curses.textpad.Textbox中的递归错误。基于Tycho Andersen的补丁。

- bpo-9770: curses.ascii谓词现在正确处理负整数。

- bpo-28427: 当从另一个线程收集时，旧键不应从WeakValueDictionary中移除新值。

- bpo-28923: 从Tix.py中移除编辑器工件。

- bpo-28871: 修复了在深度ElementTree释放时的崩溃。

- bpo-19542: 修复WeakValueDictionary.setdefault()和WeakValueDictionary.pop()中的bug，这些bug在另一个线程发生GC收集时出现。

- bpo-20191: 修复了resource.prlimit()中的崩溃，当传递一个不拥有其元素的序列作为限制时。

- bpo-16255: subprocess.Popen在Android上使用/system/bin/sh作为shell，而不是/bin/sh。

- bpo-28779: 如果预加载的模块实例化了某些多处理对象（如锁），multiprocessing.set_forkserver_preload()会使forkserver进程崩溃。

- bpo-26937: tarfile.TarFile 类的 chown() 方法现在在无法导入 grp 模块时不会失败，例如在 Android 平台上。

- bpo-28847: dbm.dumb 现在支持读取只读文件，并且在索引文件未更改时不再写入。如果在 'r' 和 'w' 模式下索引文件丢失并重新创建，现在会发出弃用警告（在未来的 Python 版本中将会是错误）。

- bpo-27030: 在 re.sub() 替换模板正则表达式中，由 `'\'` 和一个 ASCII 字母组成的未知转义现在会引发错误。

- bpo-28835: 修复了 warnings.catch_warnings() 中引入的一个回归问题：如果在上下文管理器内部覆盖了 warnings.showwarning()，则调用它。

- bpo-27172: 为了协助从 2.7 版本升级，之前文档中关于 `inspect.getfullargspec()` 的弃用已被撤销。在 Python 2.7 分支不再官方支持后，可能会重新考虑这一决定。

- bpo-28740: 添加 sys.getandroidapilevel()：返回 Android 的构建时 API 版本作为整数。此函数仅在 Android 上可用。

- bpo-26273: Add new `socket.TCP_CONGESTION` (Linux 2.6.13) and `socket.TCP_USER_TIMEOUT` (Linux 2.6.37) constants. Patch written by Omar Sandoval.

- bpo-28752: 恢复了 datetime 对象的 __reduce__() 方法。

- bpo-28727: 正则表达式模式，由 re.compile() 创建的 _sre.SRE_Pattern 对象，现在可以比较（仅限 x==y 和 x!=y 操作符）。这一更改应该修复了 bpo-18383：当 warnings 模块重新加载时不要重复警告过滤器（通常只在单元测试中这样做）。

- bpo-20572: 移除了 subprocess.Popen.wait 的 endtime 参数。它在 3.4 版本中被弃用，在此之前也未在文档中记录。

- bpo-25659: 在 ctypes 中，防止在抽象类（如 Array）上调用 from_buffer() 和 from_buffer_copy() 方法时崩溃。

- bpo-28548: 在"http.server"模块中，尽可能解析协议版本，以避免在某些错误响应中使用HTTP 0.9。

- bpo-19717: 使Path.resolve()在不存在的路径上也能成功。由Vajrasky Kok提供补丁。

- bpo-28563: 修复了在gettext模块中处理复数形式选择时可能导致的DoS和任意代码执行问题。表达式解析器现在支持GNU gettext所支持的精确语法。

- bpo-28387: 修复了当垃圾收集器在其他线程中调用时，_io.TextIOWrapper解构器可能崩溃的问题。基于Sebastian Cufre的补丁。

- bpo-27517: LZMA压缩器和解压器在两次接收到空数据时不再抛出异常。补丁由Benjamin Fogle提供。

- bpo-28549: 修复了curses的addch()在使用ncurses6时的段错误。

- bpo-28449: tarfile.open()以模式"r"或"r:"现在会先尝试以压缩方式打开tar文件，再尝试无压缩方式打开。否则在使用ignore_zeros=True时有50%的几率失败。

- bpo-23262: webbrowser模块现在支持Firefox 36+及衍生浏览器。基于Oleg Broytman的补丁。

- bpo-24241: 在X环境下，webbrowser现在更倾向于直接使用默认浏览器。此外，webbrowser的register()函数现在有一个文档化的'preferred'参数，用于指定无参数调用get()时返回的浏览器。补丁由David Steele提供。

- bpo-27939: 修复了tkinter.ttk.LabeledScale和tkinter.Scale中由于在Tk内部将比例表示为浮点值而导致的错误。如果底层Tk变量设置为浮点值，tkinter.IntVar现在可以正常工作。

- bpo-28255: calendar.TextCalendar.prweek()不再在周历后打印空格。calendar.TextCalendar.pryear()不再在年历后打印多余的换行符。基于Xiang Zhang的补丁。

- bpo-28255: calendar.TextCalendar.prmonth()在打印月历后的新行开头不再打印空格。由Xiang Zhang提供补丁。

- bpo-20491: textwrap.TextWrapper 类现在支持不换行空格。基于 Kaarle Ritvanen 的补丁。

- bpo-28353: os.fwalk() 不再因损坏的链接而失败。

- bpo-28430: 修复了 C 实现的 asyncio.Future 迭代器不接受非 None 值传递给 it.send(val) 的问题。

- bpo-27025: 为提升可读性，Tkinter 部件的生成名称现在以 "!" 前缀开头。

- bpo-25464: 通过为 Tix 库的 bug 添加变通方法，修复了 tkinter.tix 模块中的 HList.header_exists()。

- bpo-28488: shutil.make_archive() 不再向 ZIP 归档添加 "./" 条目。

- bpo-25953: re.sub() 现在即使在字符串中未找到模式，也会为替换模板中的无效数字组引用引发错误。无效组引用的错误消息现在包括组索引和引用的位置。基于 SilentGhost 的补丁。

- bpo-28469: timeit 现在使用 1, 2, 5, 10, 20, 50,... 序列代替 1, 10, 100,... 进行自动范围调整。

- bpo-28115: zipfile 模块的命令行界面现在使用 argparse。添加了对长选项的支持。

- bpo-18219: 为大量列优化 csv.DictWriter。Mariatta Wijaya 的补丁。

- bpo-28448: 修复了 C 实现的 asyncio.Future 在 Windows 上不工作的问题。

- bpo-23214: 在 "io" 模块中，BufferedReader 和 BytesIO 的 read1() 方法的参数现在是可选的，并且可以是 -1，以匹配 BufferedIOBase 的规范。

- bpo-28480: 修复在禁用多线程时构建 socket 模块时的错误。

- bpo-28240: timeit: 移除自 Python 3.3 以来已弃用的 `-c/--clock` 和 `-t/--time` 命令行选项。

- bpo-28240: timeit 现在将基准测试重复 5 次而非仅 3 次，以使基准测试更加可靠。

- bpo-28240: 如果基准测试耗时少于 10 秒，timeit 自动范围调整现在使用单次循环迭代而非 10 次迭代。"python3 -m timeit -s 'import time' 'time.sleep(1)'" 现在耗时 4 秒而非 40 秒。

- Distutils.sdist 现在对 README 和 setup.py 文件的查找区分大小写。这一行为与 Setuptools 6.0 及以后版本中的行为一致。理由参见 setuptools 100。

- bpo-24452: 使 webbrowser 支持 Mac OS X 上的 Chrome。由 Ned Batchelder 提供补丁。

- bpo-20766: 修复了 pdb 在处理 SIGINT 处理器时的引用泄漏问题。

- bpo-27998: 修复了 Windows 上 os.scandir() 对字节路径的支持。由 Eryk Sun 提供补丁。

- bpo-28317: 反汇编器现在解码 FORMAT_VALUE 参数。

- bpo-28380: unittest.mock 的 Mock autospec 函数现在正确支持 assert_called、assert_not_called 和 assert_called_once。

- bpo-28229: lzma 模块现在支持 pathlib。

- bpo-28321: 修复了在 plistlib 中使用二进制格式写入非 BMP 字符的问题。

- bpo-28225: bz2 模块现在支持 pathlib。初始由 Ethan Furman 提供补丁。

- bpo-28227: gzip 现在支持 pathlib。由 Ethan Furman 提供补丁。

- bpo-28332: 弃用了 socket.htons 和 socket.ntohs 中的静默截断。原始由 Oren Milman 提供补丁。

- bpo-27358: 优化了合并可变关键字参数的过程，并改进了当传递非映射作为可变关键字参数时的错误信息。

- bpo-28257: 改进了当传递非可迭代对象作为可变位置参数时的错误信息。添加了操作码 BUILD_TUPLE_UNPACK_WITH_CALL。

- bpo-28322: 修复了当从错误的 pickle 数据反序列化 itertools 对象时可能发生的崩溃。基于 John Leitch 的补丁。

- bpo-28228: imghdr 现在支持 pathlib。

- bpo-28226: compileall 现在支持 pathlib。

- bpo-28314: 修复了 xml.etree.ElementTree.Element 的 getiterator() 方法的函数声明（C 标志）。

- bpo-28148: 停止在 time 模块中使用 localtime() 和 gmtime()。引入了平台无关的 _PyTime_localtime API，该 API 类似于 POSIX 的 localtime_r，但在所有平台上都可用。由 Ed Schouten 提供补丁。

- bpo-28253: 修复了极端月份（0001-01和9999-12）的日历功能。重新实现了itermonthdays()和itermonthdays2()方法，使其不再调用可能导致datetime.date下溢/溢出的itermonthdates()。

- bpo-28275: 修复了LZMADecompressor和BZ2Decompressor类中decompress()方法可能存在的释放后使用问题。原始由John Leitch提供补丁。

- bpo-27897: 修复了如果传递无效的字符串类似对象作为名称时，sqlite3.Connection.create_collation()可能崩溃的问题。由Xiang Zhang提供补丁。

- bpo-18844: random.choices()现在将k作为仅关键字参数，以提高常见情况的可读性，并与其他语言中使用的签名保持一致。

- bpo-18893: 修复了Lib/ctypes/macholib/dyld.py中无效的异常处理。由Madison May提供补丁。

- bpo-27611: 修复了tkinter.tix模块中对默认根窗口的支持。在DisplayStyle构造函数中添加了master参数。

- bpo-27348: 在traceback模块中，恢复了类似于"Exception: None"的异常消息的格式化。这修复了3.5a2中引入的回归问题。

- bpo-25651: Allow falsy values to be used for msg parameter of subTest().

- bpo-27778: 修复了当getrandom()被信号中断且信号处理程序引发Python异常时，os.getrandom()中的内存泄漏问题。

- bpo-28200: 修复了Windows上os模块中的内存泄漏问题（修复了path_converter()函数）。

- bpo-25400: RobotFileParser现在正确返回crawl_delay和request_rate的默认值。初始由Peter Wirtz提供补丁。

- bpo-27932: 防止win32_ver()中的内存泄漏。

- 修复socket._sendfile_use_sendfile中的UnboundLocalError。

- bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。

- bpo-22493: 现在，通过在正则表达式中间使用内联标志发出的警告消息包含（截断的）正则表达式模式。由Tim Graham提供补丁。

- bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。

- bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。

- bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。

- bpo-28114: 修复当env包含字节字符串时parse_envlist()崩溃的问题。由Eryk Sun提供补丁。

- bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。

- bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。

- bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。

- bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。

- bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。

- bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。

- bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。

- bpo-28325: 移除遗留的MacOS 9 macurl2path模块及其测试。

- bpo-28368: 如果子监视器没有附加循环，则拒绝监视进程。由Vincent Michel提供补丁。

- bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。

- bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。

- bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。

- bpo-28372: 修复asyncio以支持非python协程的格式化。

- bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。

- bpo-27972: 禁止Tasks等待自身。

- bpo-24142: 读取损坏的配置文件会使configparser处于无效状态。原始补丁由Florian Höch提供。

- bpo-29581: ABCMeta.__new__现在接受 `**kwargs`，允许抽象基类在__init_subclass__中使用关键字参数。由Nate Soares提供补丁。

- bpo-25532: inspect.unwrap()现在只会尝试解包对象sys.getrecursionlimit()次，以防止在每次属性访问时创建新对象的对象。

- bpo-30177: path.resolve(strict=False)不再在文件系统中不存在的第一个元素后截断路径。补丁由Antoine Pietri提供。

### 文档

- bpo-31294: 修复ZeroMQSocketListener和ZeroMQSocketHandler示例中的不完整代码片段，并将它们适配到Python 3。

- bpo-21649: 在SSL文档中添加RFC 7525和Mozilla服务器端TLS链接。

- bpo-31128: 允许pydoc服务器绑定到任意主机名。

- bpo-30803: 澄清关于真值测试的文档。原始由Peter Thomassen提供补丁。

- bpo-30176: 在curses文档中添加缺失的属性相关常量。

- bpo-30052: `bytes()` 和 `bytearray()` 的链接目标现在是它们各自的类型定义，而不是相应的内置函数条目。使用 bytes 和 bytearray 来引用后者。为了确保这一及未来的交叉引用更新能自动应用，每日文档构建现在禁用了Sphinx中的默认输出缓存功能。

- bpo-26985: 在inspect文档中添加缺失的代码对象信息。

- bpo-19824: 通过强调模板字符串在国际化中的实用性，并澄清一些使用限制，改进模板字符串的文档和链接。(另见 : bpo-20314, bpo-12518)

- bpo-28929: 将文档链接到其在GitHub上的源文件。

- bpo-25008: 将smtpd.py文档标记为实际上已弃用，并添加指向aiosmtpd的指针，这是一个基于asyncio的第三方替代品。

- bpo-26355: 在每个页面上添加指向相应主要版本文档的规范头部链接。由Matthias Bussonnier提供补丁。

- bpo-29349: 修复构建文档代码中的Python 2语法。

- bpo-23722: 3.6 新特性指南中的数据模型参考和移植部分现在涵盖了自定义元类为实现完全支持 PEP 487 和无参数 `super()` 所需的额外 `__classcell__` 处理。

- bpo-28513: 记录了 zipfile 的命令行接口。

### 测试

- bpo-29639: test.support.HOST 现在是 "localhost"，新增了一个 HOSTv4 常量用于满足 `127.0.0.1` 的需求，类似于现有的 HOSTv6 常量。

- bpo-31320: 在 test_ssl 中静默回溯。

- bpo-31346: 对于 SSLContext，优先使用 PROTOCOL_TLS_CLIENT 和 PROTOCOL_TLS_SERVER 协议。

- bpo-25674: 移除 sha256.tbs-internet.com 的 ssl 测试。

- bpo-30715: 处理 OpenSSL 1.1.0f 的 ALPN 回调变更。最新版本的行为类似于 OpenSSL 1.0.2，不再中止握手。

- bpo-30822: regrtest: 从 regrtest --all 中排除 tzdata。当使用 --use=all / -u all 运行测试套件时，排除 tzdata，因为它会使 test_datetime 变得太慢（在某些构建机器人上需要 15-20 分钟），从而导致某些构建机器人超时。同时修复 regrtest 命令行解析器，允许传递 -u extralargefile 来运行 test_zipfile64。

- bpo-30695: Add the `set_nomemory(start, stop)` and `remove_mem_hooks()` functions to the _testcapi module.

- bpo-30357: test_thread: setUp() 现在使用 support.threading_setup() 和 support.threading_cleanup() 来等待线程完成，以避免对后续测试产生随机副作用。初始补丁由 Grzegorz Grzywacz 编写。

- bpo-30197: 增强了 test.support 模块中的 swap_attr() 和 swap_item() 函数。它们现在可以在 with 语句内部删除替换的属性或项目时工作。属性或项目的旧值（如果不存在则为 None）现在将被赋值给 "as" 子句的目标，如果有的话。

- bpo-24932: 在 _testembed 中使用正确的命令行解析。

- bpo-28950: 在 regrtest 命令行参数中禁止将 -j0 与 -T/-l 结合使用。

- bpo-28683: 修复在Android上为非root用户绑定Unix socket并引发PermissionError的测试。

- bpo-26936: 修复Android上的test_socket失败 - getservbyname()、getservbyport()和getaddrinfo()在某些Android API级别上被破坏。

- bpo-28666: 现在test.support.rmtree能够删除不可写或不可读的目录。

- bpo-23839: 现在在运行每个测试文件之前清除各种缓存。

- bpo-26944: 修复Android上的test_posix，其中'id -G'完全错误或缺少有效的gid。

- bpo-28409: regrtest: 修复命令行参数的解析器。

- bpo-28217: 添加_testconsole模块以测试控制台输入。

- bpo-26939: 添加support.setswitchinterval()函数以修复在Android armv7 qemu模拟器上挂起的test_functools。

### 构建

- bpo-31354: Allow --with-lto to be used on all builds, not just `make profile-opt`.

- bpo-31370: 移除对构建--without-threads的支持。在21世纪，这个选项已经不再真正有用。移除大量条件路径允许我们简化代码库，包括难以维护的低级内部代码。

- bpo-31341: 根据 PEP 11，移除了对IRIX操作系统的支持。

- bpo-30854: 修复编译--without-threads时的编译错误。由Masayuki Yamamoto提供补丁。

- bpo-30687: 在Windows上构建时定位msbuild.exe而不是vcvarsall.bat。

- bpo-20210: 支持Setup文件中的 disabled 标记。在此标记之后列出的扩展模块完全不被构建，无论是通过Makefile还是setup.py。

- bpo-29941: 添加 `--with-assertions` 配置标志以明确启用C `assert()` 检查。默认为关闭。`--with-pydebug``意味着 ``--with-assertions`。

- bpo-28787: 修复使用 `--with--dtrace` 配置时Python的树外构建。

- bpo-29243: 在配置为 `--enable-optimizations` 时，防止在 `make test`、``make install``和一些其他make目标期间不必要的Python重新构建。

- bpo-23404: 不再基于文件修改时间重新生成已生成的文件：该操作现在是显式的。用``make regen-all``替换 `make touch`。

- bpo-29643: 修复 `--enable-optimization` 不起作用的问题。

- bpo-27593: 当从仓库构建时，sys.version和platform模块的python_build()、python_branch()和python_revision()函数现在使用git信息而不是hg。

- bpo-29572: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2k。

- bpo-27659: 禁止隐式C函数声明：在可能的情况下使用``-Werror=implicit-function-declaration`` (GCC和Clang，但这取决于编译器版本) 。补丁由Chi Hsuan Yen编写。

- bpo-29384: 移除旧的Be OS辅助脚本。

- bpo-26851: 设置Android编译和链接标志。

- bpo-28768: 修复函数_setmode的隐式声明。由Masayuki Yamamoto提供补丁

- bpo-29080: 从PCBuild/build.bat中移除对hg.exe的硬依赖

- bpo-23903: 向PC/python3.def添加遗漏的名称。

- bpo-28762: lockf()在Android API level 24上可用，但F_LOCK宏在android-ndk-r13中未定义。

- bpo-28538: 修复因if_nameindex()在Android API level 24上可用但if_nameindex结构未定义而导致的编译错误。

- bpo-20211: 不要将安装C头文件的目录和安装对象代码库的目录添加到交叉编译搜索路径中。原始由Thomas Petazzoni提供补丁。

- bpo-28849: 不要在Android上定义sys.implementation._multiarch。

- bpo-10656: 修复AIX上的树外构建。由Tristan Carel和Michael Haubenwallner提供补丁。

- bpo-26359: 将--with-optimiations重命名为--enable-optimizations。

- bpo-28444: 修复交叉编译时缺少扩展模块的问题。

- bpo-28208: 更新Windows构建和OS X安装程序以使用SQLite 3.14.2。

- bpo-28248: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2j。

- bpo-21124: 通过在PyVarObject_HEAD_INIT中传递 `NULL` 而不是 `&PyType_Type` 修复在Cygwin上构建_struct模块的问题。由Masayuki Yamamoto提供补丁。

- bpo-13756: 修复在Cygwin上构建扩展模块的问题。由Roumen Petrov提供补丁，基于Jason Tishler的原始补丁。

- bpo-21085: 添加对siginfo_t.si_band的配置检查，Cygwin不提供此功能。由Masayuki Yamamoto提供补丁，Erik Bray进行审查和重新基于。

- bpo-28258: 修复了在爱沙尼亚语言环境下构建的问题（Makefile中的python-config和distclean目标）。由Arfrever Frehtes Taifersar Arahesis提供补丁。

- bpo-26661: setup.py现在可以检测到带有multiarch包装的系统libffi。

- bpo-27979: 不再为在非OSX UNIX平台上构建_ctypes捆绑libffi的完整副本。现在在这样的平台上构建_ctypes需要安装libffi。

- bpo-15819: 移除了为在源码树外构建而冗余的包含搜索目录选项。

- bpo-28676: 防止在macOS上出现缺失'getentropy'声明的警告。由Gareth Rees提供补丁。

### Windows

- bpo-31392: 更新Windows构建以使用OpenSSL 1.1.0f。

- bpo-30389: 在Windows上的distutils中添加对Visual Studio 2017的检测。

- bpo-31358: zlib不再捆绑在CPython源代码中，而是像bz2、lzma、OpenSSL、Tcl/Tk和SQLite一样按需下载。

- bpo-31340: 更改为使用MSVC v141（包含在Visual Studio 2017中）构建。

- bpo-30581: os.cpu_count()现在在Windows上当逻辑处理器数量大于64时返回正确的处理器数量。

- bpo-30916: 预构建OpenSSL、Tcl和Tk，并将二进制文件包含在构建中。

- bpo-30731: 向python.manifest添加缺失的xmlns，以使其匹配模式。

- bpo-30291: 允许使用-64后缀从py.exe要求64位解释器。由Steve (Gadget) Barnes贡献。

- bpo-30362: 向py.exe启动器添加列表选项（-0, -0p）。由Steve Barnes贡献。

- bpo-23451: 修复 socketmodule.c 中的 socket 弃用警告。由 Segev Finer 提供补丁。

- bpo-30450: Windows 上的构建过程不再依赖于 Subversion，而是通过 Python 脚本从 GitHub 拉取外部代码。如果系统中未找到 Python 3.6（通过 `py -3.6`），则使用 NuGet 下载 32 位 Python 的副本。

- bpo-29579: 从安装程序中移除 readme.txt。

- bpo-25778: winreg 未正确截断字符串（由 Eryk Sun 提供补丁）

- bpo-28896: 弃用 WindowsRegistryFinder 并默认禁用它

- bpo-28522: 修复 getpathp.c 中错误处理的缓冲区重新分配

- bpo-28402: 为 Windows 上的标准库添加签名目录文件。

- bpo-28333: 为 ps1/ps2 和 input() 提示启用 Unicode。（由 Eryk Sun 提供补丁）

- bpo-28251: 改进 Windows 上的帮助手册。

- bpo-28110: launcher.msi 在 32 位和 64 位之间有不同的产品代码

- bpo-28161: 以写权限打开 CON 失败

- bpo-28162: 如果第一行以 Ctrl+Z 开头，WindowsConsoleIO readall() 失败

- bpo-28163: WindowsConsoleIO fileno() 将错误的标志传递给 _open_osfhandle

- bpo-28164: 对于各种路径，_PyIO_get_console_type 失败

- bpo-28137: 将 Windows 路径文件重命名为 ._pth

- bpo-28138: Windows ._pth 文件应允许导入站点

### IDLE

- bpo-31493: IDLE 代码上下文——修复代码更新和字体更新计时器。取消计时器可以防止 test_idle 完成时出现警告消息。

- bpo-31488: IDLE - 更新前扩展类中的非键选项。应用配置对话框更改时，为每个特性类调用 .reload。更改 ParenMatch，使更新的选项影响附加到现有编辑器窗口的现有实例。

- bpo-31477: IDLE - 改进文档中的 rstrip 条目。剥离尾随空白会剥离比空格更多的内容。多行字符串文字不被跳过。

- bpo-31480: IDLE - 使测试在默认禁用 zzdummy 扩展的情况下通过。

- bpo-31421: 文档说明IDLE如何运行tkinter程序。IDLE在后台调用tcl/tk更新，以使与tkinter应用程序的实时交互和实验更加容易。

- bpo-31414: IDLE -- 通过首先删除来修复tk输入框测试。向整数输入框中添加内容与删除并插入不同，因为int('')会失败。

- bpo-31051: 将IDLE的configdialog GenPage重新排列为窗口、编辑器和帮助部分。

- bpo-30617: IDLE - 为outwin子类添加文档字符串和测试，这是editor的子类。将一些数据和函数从类移到模块级别。由Cheryl Sabella提供补丁。

- bpo-31287: IDLE - 在test_configdialog中不要修改tkinter.message。

- bpo-27099: 将 IDLE 的内置“扩展”功能转换为常规功能。约 10 项 IDLE 功能原本以可选扩展的形式实现，但是，它们的差异行为导致用户困惑甚至更糟，也不利于维护，因此，进行此次转换。对用户的主要区别在于，现在内置功能的可自定义按键绑定将采用统一方式处理。具体表现为：在某个按键集中编辑绑定仅会影响该按键集中的值。所有绑定均在 config-extensions.def 文件中系统预设的默认按键集中统一定义。所有自定义按键集会整体保存在 config-extension.cfg 文件中。点击“应用”或“确定”后所有更改立即生效。受影响的交互事件包括'<<force-open-completions>>'、'<<expand-word>>'、'<<force-open-calltip>>'、'<<flash-paren>>'、'<<format-paragraph>>'、'<<run-module>>'、'<<check-module>>'和'<<zoom-height>>'。注意：3.6.3 版本之前的（全局）自定义设置将不会影响 3.6.3 版本后按键集特定的自定义设置，反之亦然。初始补丁由 Charles Wohlganger 提交。

- bpo-31206: IDLE: 从ConfigDialog中提取HighPage(Frame)类。由Cheryl Sabella提供补丁。

- bpo-31001: 为configdialog高亮标签添加测试。由Cheryl Sabella提供补丁。

- bpo-31205: IDLE：从ConfigDialog中提取KeysPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。

- bpo-31130: IDLE -- 修复test_configdialog中的内存泄漏。初始由Victor Stinner提供补丁。

- bpo-31002: 为configdialog的keys标签页添加测试。由Cheryl Sabella提供补丁。

- bpo-19903: IDLE: Calltips use `inspect.signature` instead of `inspect.getfullargspec`. This improves calltips for builtins converted to use Argument Clinic. Patch by Louie Lu.

- bpo-31083: IDLE - 在configdialog中添加TabPage类的概要。更新现有类以匹配概要。初始补丁由Cheryl Sabella提供。

- bpo-31050: 从ConfigDialog中提取GenPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。

- bpo-31004: IDLE - 从ConfigDialog中提取FontPage(Frame)类。经过轻微修改的测试仍然通过。修复通用测试。补丁主要由Cheryl Sabella提供。

- bpo-30781: IDLE - 在ConfigDialog中使用ttk部件。由Terry Jan Reedy和Cheryl Sabella提供补丁。

- bpo-31060: IDLE - 完成ConfigDialog中方法的重新排列。将与每个标签页和按钮相关的方法分组有助于编写测试和改进标签页，并将使这些组能够分割成类。

- bpo-30853: IDLE -- 从ConfigDialog中提取VarTrace类。实例跟踪器管理由tk变量和回调函数组成的对。当跟踪开启时，设置变量会调用函数。新类的测试覆盖率为100%。

- bpo-31003: IDLE：为通用标签页添加更多测试。

- bpo-30993: IDLE - 改进配置对话框字体页面及测试。在配置对话框中：在create_font_tab文档字符串中记录因果路径。简化一些属性名称。将set_samples调用移至var_changed_font（来自Cheryl Sabella的想法）。将相关函数移动到创建小部件函数之后的位置。在test_configdialog中：修复test_font_set使其不依赖于顺序。修复重命名的test_indent_scale以测试小部件。调整测试以适应set_samples调用的移动。为加载函数添加测试。将所有字体测试放在一个类中，将标签缩进测试放在另一个类中。除了两行代码外，这些测试完全覆盖了相关函数。

- bpo-30981: IDLE -- 为配置对话框字体页面添加更多测试。

- bpo-28523: IDLE：在配置对话框中将'colour'替换为'color'。

- bpo-30917: 为idlelib.config.IdleConf添加测试。将覆盖率从46%提高到96%。由Louie Lu提供补丁。

- bpo-30934: 记录idlelib测试的覆盖率详情。在idlelib/idle-test/README.txt中添加部分内容。包括检查分支是否双向执行。排除在单元测试期间不运行的IDLE特定代码。

- bpo-30913: IDLE：在文档字符串中记录ConfigDialog的tk变量、方法和部件。这将有助于改进对话框和分割类。原始由Cheryl Sabella提供补丁。

- bpo-30899: IDLE：为config中的ConfigParser子类添加测试。由Louie Lu提供补丁。

- bpo-30881: IDLE：为browser.py添加文档字符串。由Cheryl Sabella提供补丁。

- bpo-30851: IDLE：移除configdialog中未使用的变量。一个是重复的，一个是设置但用户无法更改的。由Cheryl Sabella提供补丁。

- bpo-30870: IDLE：在设置对话框中，使用上下键以及鼠标选择字体。初始由Louie Lu提供补丁。

- bpo-8231: IDLE：仅调用config.IdleConf.GetUserCfgDir一次。

- bpo-30779: IDLE：从configdialog中提取ConfigChanges类，放入config；测试。* 在config中，将转储测试代码放入一个函数；运行它和'unittest'在'if __name__ == '__main__'中。* 基于bpo问题上的changes_class_v4.py添加config.ConfigChanges类。* 添加test_config.ChangesTest类，部分使用configdialog_tests_v1.py。* 修改configdialog以使用ConfigChanges；参见tracker msg297804。* 修改test_configdialog以匹配configdialog的更改。* 移除未使用或已移至ConfigChanges的configdialog函数。Cheryl Sabella贡献了部分补丁。

- bpo-30777: IDLE：configdialog - 添加文档字符串并修复注释。由Cheryl Sabella提供补丁。

- bpo-30495: IDLE：通过添加文档字符串、PEP8命名和更多测试来改进textview。由Cheryl Sabella提供补丁。

- bpo-30723: IDLE：对parenmatch进行多项改进。添加'parens'风格以同时高亮开启和关闭符号。使'default'风格（非默认）成为'opener'的同义词。使时间延迟在所有风格中工作方式相同。为配置对话框扩展标签添加帮助，包括parenmatch的帮助。添加新测试。原始补丁由Charles Wohlganger提供。

- bpo-30674: IDLE：向grep模块添加文档字符串。由Cheryl Sabella提供补丁。

- bpo-21519: IDLE的基本自定义键输入对话框现在能正确检测重复项。原始由Saimadhav Heblikar提供补丁。

- bpo-29910: IDLE不再通过快捷键注释掉一个区域后删除一个字符。为此添加 ``return 'break'``以及IDLE和默认键绑定之间的其他潜在冲突。

- bpo-30728: 审查并更改idlelib.configdialog的名称。将方法和属性名称小写。将'colour'替换为'color'，扩展过于隐晦的名称，删除不需要的下划线。用特定的导入替换 `import *`。由Cheryl Sabella提供补丁。

- bpo-6739: IDLE：通过尝试用tk绑定用户输入的键序列来验证它们。为所有3个验证函数添加测试。原始由G Polo提供补丁。测试由Cheryl Sabella添加。

- bpo-15786: 修复IDLE自动完成框的几个问题。现在以下功能应该可以正常工作：点击选择框中的项目；使用滚动条；通过按回车键选择项目。MacOSX上的挂起问题应该不会再发生。补丁由Louie Lu提供。

- bpo-25514: 添加关于IDLE启动失败的文档子节。无连接弹出消息会引导用户查看此部分。

- bpo-30642: 修复IDLE测试中的引用泄露。由Louie Lu和Terry Jan Reedy提供补丁。

- bpo-30495: 为textview.py添加文档字符串并使用PEP8命名。由Cheryl Sabella和Terry Jan Reedy提供补丁。

- bpo-30290: 帮助-关于：使用pep8命名并添加测试。将覆盖率提高到100%。由Louie Lu、Cheryl Sabella和Terry Jan Reedy提供补丁。

- bpo-30303: 向textview添加_utest选项；添加新测试。将覆盖率提高到100%。由Louie Lu和Terry Jan Reedy提供补丁。

- bpo-29071: IDLE为f-字符串前缀着色（但不包括无效的ur前缀）。

- bpo-28572: 将IDLE的test_configdialog覆盖率提高10%。更新并增强配置系统的描述。

### 工具/示例

- bpo-30983: gdb集成命令（py-bt等）现在也可以在优化的共享构建上工作了。PEP 523 引入了_PyEval_EvalFrameDefault，它在非调试共享构建上内联了PyEval_EvalFrameEx。这破坏了使用py-bt、py-up和其他一些Python特定的gdb集成的能力。问题通过在python-gdb.py中仅查找_PyEval_EvalFrameDefault帧来修复。原始由Bruno "Polaco" Penteado提供补丁。

- bpo-29748: 在Argument Clinic中添加了切片索引转换器。

- bpo-24037: Argument Clinic now uses the converter `bool(accept={int})` rather than `int` for semantical booleans. This avoids repeating the default value for Python and C and will help in converting to `bool` in future.

- bpo-29367: python-gdb.py现在也支持 `method-wrapper` (`wrapperobject`) 对象。

- bpo-28023: 修复python-gdb.py不支持新字典实现的问题。

- bpo-15369: The pybench and pystone microbenchmark have been removed from Tools. Please use the new Python benchmark suite https://github.com/python/performance which is more reliable and includes a portable version of pybench working on Python 2 and Python 3.

- bpo-28102: zipfile模块的CLI现在将用法打印到stderr。由Stephen J. Turnbull提供补丁。

### C API

- bpo-31338: 添加了 `Py_UNREACHABLE()` 宏，用于永远不会预期到达的代码路径。这个和其他一些有用的宏现在已在C API手册中记录。

- bpo-30832: 移除了线程本地存储的自实现。CPython在Python/thread.c中提供了线程本地存储（TLS）的自实现，用于平台没有提供原生TLS的情况。然而，当前所有支持的平台（Windows和pthreads）都已提供原生TLS，并且在任何情况下都无条件定义了Py_HAVE_NATIVE_TLS宏。

- bpo-30708: 如果第二个参数为NULL且wchar_t*字符串包含空字符，PyUnicode_AsWideCharString()现在会引发ValueError。

- bpo-16500: 弃用PyOS_AfterFork()并添加PyOS_BeforeFork()、PyOS_AfterFork_Parent()和PyOS_AfterFork_Child()。

- bpo-6532: PyThread_start_new_thread()和PyThread_get_thread_ident()的结果类型，以及PyThreadState_SetAsyncExc()的id参数类型从"long"改为"unsigned long"。

- bpo-27867: 函数PySlice_GetIndicesEx()被弃用，如果Py_LIMITED_API未设置或设置为0x03050400到0x03060000（不包括）或0x03060100或更高的值，则替换为宏。添加了函数PySlice_Unpack()和PySlice_AdjustIndices()。

- bpo-29083: 修正了一些公共API函数的声明。PyArg_VaParse()和PyArg_VaParseTupleAndKeywords()在有限API中不可用。当定义了PY_SSIZE_T_CLEAN时，PyArg_ValidateKeywordArguments()、PyArg_UnpackTuple()和Py_BuildValue()在版本<3.3的有限API中不可用。

- bpo-28769: PyUnicode_AsUTF8AndSize() 和 PyUnicode_AsUTF8() 的结果现在是 `const char *` 类型，而不是 `char *`。

- bpo-29058: 所有在 Python 3.2 之后添加的稳定 API 扩展现在只有在 Py_LIMITED_API 设置为支持此 API 的最低 Python 版本的 PY_VERSION_HEX 值时才可用。

- bpo-28822: PyUnicode_FindChar() 的索引参数 start 和 end 现在被调整为像 `str[start:end]` 一样行为。

- bpo-28808: PyUnicode_CompareWithASCIIString() 现在永远不会引发异常。

- bpo-28761: 结构体 PyMemberDef、PyGetSetDef、PyStructSequence_Field、PyStructSequence_Desc 和 wrapperbase 的字段 name 和 doc 现在是 `const char *` 类型，而不是 `char *`。

- bpo-28748: 私有变量 _Py_PackageContext 现在是 `const char *` 类型，而不是 `char *`。

- bpo-19569: 如果使用大多数已弃用的函数，现在会发出编译器警告。

- bpo-28426: 已弃用未记录的函数 PyUnicode_AsEncodedObject()、PyUnicode_AsDecodedObject()、PyUnicode_AsDecodedUnicode() 和 PyUnicode_AsEncodedUnicode()。

## Python 3.6.6 正式版

发布日期: 2018-06-27

在 3.6.6 版本中没有新的更改。

## Python 3.6.6 rc1

发布日期: 2018-06-11

### 核心与内置函数

- bpo-33786: 修复异步生成器以正确处理 athrow() 中的 GeneratorExit。

- bpo-30654: 修复了即使之前设置了自定义处理程序，在解释器关闭时 SIGINT 处理程序重置为 SIG_DFL 的问题。由 Philipp Kerling 提供补丁。

- bpo-33622: 修复了当垃圾收集器无法将带有 `__del__` 方法或被其引用的对象添加到 `gc.garbage` 列表时的内存泄漏问题。现在可以在设置异常时调用 `PyGC_Collect()`，并保留异常。

- bpo-31849: 修复了 pyhash.c 中的有符号/无符号比较警告。

- bpo-33391: 修复了 set_symmetric_difference() 中的内存泄漏。

- bpo-28055: 修复了 siphash24() 中的未对齐访问。由 Rolf Eike Beer 提供补丁。

- bpo-33231: 修复了 `normalizestring()` 中潜在的内存泄漏问题。

- bpo-29922: 改进了'async with'中当 `__aenter__()` 或 `__aexit__()` 返回不可等待对象时的错误消息。

- bpo-33199: 修复了在从键共享字典复制时，字典实现中的 `ma_version_tag` 未初始化的问题。

- bpo-33041: 修复了当函数包含 `async for` 循环时的跳转问题。

- bpo-32282: 修复 Windows 上 socketmodule 中 VersionHelpers.h 包含的不必要的 ifdef。

- bpo-21983: Fix a crash in `ctypes.cast()` in case the type argument is a ctypes structured data type. Patch by Eryk Sun and Oren Milman.

### 库

- bpo-30167: 如果设置了PYTHONSTARTUP，防止site.main()异常。由Steve Weber提供补丁。

- bpo-33812: 对于tzinfo非None但d.tzinfo.utcoffset(d)返回None的Datetime实例d，现在astimezone()方法将其视为naive。

- bpo-30805: 避免调试日志记录中的竞态条件

- bpo-33767: 在 `mmap.mmap` 对象上执行时，连接（`+`）和重复（`*`）序列操作现在会引发 `TypeError` 而不是 `SystemError`。由 Zackery Spytz 提供补丁。

- bpo-32684: 修复 gather 即使在 return_exceptions 的情况下也能传播自身的取消。

- bpo-33674: 修复 asyncio.sslproto 中 SSLProtocol.connection_made() 的竞态条件：立即开始握手而不是使用 call_soon()。之前，data_received() 可能在握手开始前被调用，导致握手挂起或失败。

- bpo-31647: 修复了在 _SelectorSocketTransport 已经关闭后调用 write_eof() 会引发 AttributeError 的错误。

- bpo-33672: 修复 Task.__repr__ 与 Cython 的虚假协程一起使用时崩溃的问题。

- bpo-33469: 修复了使用 run_in_executor 后关闭循环时引发的 RuntimeError。

- bpo-11874: 当将用法分解为可包装部分时使用更好的正则表达式。避免来自自定义 metavar 字符串的错误断言错误。

- bpo-30877: 修复了 JSON 解码器 Python 实现中的一个错误，该错误阻止了在完成解码后清除已解析字符串的缓存。基于 c-fos 的补丁。

- bpo-33548: tempfile._candidate_tempdir_list 应考虑常见的 TEMP 位置

- bpo-33542: 防止 `uuid.get_node` 在 Windows 上使用 DUID 而不是 MAC。由 Zvi Effron 提供补丁

- bpo-26819: Fix race condition with `ReadTransport.resume_reading` in Windows proactor event loop.

- bpo-28556: typing模块中的小修复：向 `NamedTuple.__new__` 添加注解，在``Generic.__new__``中传递 `*args` 和 `**kwds`。原始PR由Paulius Šarka和Chad Dombrova提供。

- bpo-20087: 更新了支持glibc 2.27地区设置的别名映射。

- bpo-33422: 修复在pydoc上查找字节/字符串字面量时尾随引号被删除的问题。由Andrés Delfino提供补丁。

- bpo-33197: Update error message when constructing invalid inspect.Parameters Patch by Dong-hee Na.

- bpo-33383: 修复了当使用单个参数调用 `dbm.ndbm` 数据库对象的get()方法时崩溃的问题。

- bpo-33329: 修复了在新版 glibc 上的多进程回归问题。

- bpo-991266: 修复了 `http.cookies.SimpleCookie` 的 `Comment` 属性的引用问题。

- bpo-33131: 将捆绑的 pip 版本升级至 10.0.1。

- bpo-33308: 修复了 `parser` 模块在将 ST 对象转换为元组或列表树时，当 `line_info=False` 且 `col_info=True` 时的崩溃问题。

- bpo-33263: Fix FD leak in `_SelectorSocketTransport` Patch by Vlad Starostin.

- bpo-33256: 修复了 `cgitb.html()` 生成的 html 中 `<module>` 调用的显示问题。补丁由 Stéphane Blondon 提供。

- bpo-33203: `random.Random.choice()` 现在对于空序列会一致地引发 `IndexError`，即使是从没有 `getrandbits()` 实现的子类中调用也是如此。

- bpo-33224: 为 PEP 479 更新 difflib.mdiff()。将生成器中未捕获的 StopIteration 转换为 return 语句。

- bpo-33209: 在 `pickle.Pickler.dump()` 的 C 实现结束时结束帧。

- bpo-32861: urllib.robotparser 的 `__str__` 表示现在包括通配符条目以及 "Crawl-delay" 和 "Request-rate" 字段。由 Michael Lazar 提供补丁。

- bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。

- bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。

- bpo-33021: 在fstat()调用期间释放GIL，避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。

- bpo-27683: 修复 `ipaddress` 中的一个回归问题，当网络由包含整数掩码且仅剩1位地址的元组构造时，`hosts()` 的结果为空。

- bpo-32844: 修复在subprocess中如果另一个低描述符被关闭时，将低描述符（0或1）错误重定向到stderr的问题。

- bpo-31908: 修复了 `trace` 模块命令行工具的封面文件输出。之前仅在使用了 `--missing` 选项时才会发出封面文件。由Michael Selik提供补丁。

- bpo-31457: 如果使用嵌套的日志适配器，内部 `process()` 方法不再被省略。

- bpo-16865: 在 `ctypes` 中支持>=2GiB的数组。由Segev Finer提供补丁。

- bpo-31238: pydoc: 私有 ServerThread 类的 stop() 方法现在会等待 DocServer.serve_until_quit() 完成，然后显式将其 docserver 属性设置为 None 以打破循环引用。

### 文档

- bpo-33503: 修复损坏的 pypi 链接

- bpo-33421: 为 `typing.AsyncContextManager` 添加缺失的文档。

- bpo-33378: 为 https://docs.python.org/3/ 添加韩语语言切换器。

- bpo-33276: 澄清模块上的 `__path__` 属性不能是任意值。

- bpo-33201: 现代化编写 C 扩展类型的文档。

- bpo-33195: 在 `c-api/arg` 文档中弃用 `Py_UNICODE` 的使用。自 Python 3.3 起，`Py_UNICODE` 相关 API 已被弃用，但文档中遗漏了这一点。

- bpo-33126: 文档化 PyBuffer_ToContiguous()。

- bpo-27212: 修改 `islice()` 函数示例代码的文档说明，使其在起始索引前消耗初始值。

- bpo-28247: 更新 `zipapp` 文档，描述如何制作独立应用程序。

- bpo-18802: ipaddress 的文档更改。由 Jon Foster 和 Berker Peksag 提供补丁。

- bpo-27428: 更新文档以澄清 `WindowsRegistryFinder` 实现了 `MetaPathFinder`。（补丁由 Himanshu Lakhara 提供）

- bpo-8243: 添加关于 curses.addch 和 curses.addstr 在窗口或 pad 外部写入时的异常行为的注释。

- bpo-31432: 澄清 ssl.SSLContext.verify_mode 的 CERT_NONE、CERT_OPTIONAL 和 CERT_REQUIRED 标志的含义。

### 测试

- bpo-33655: 忽略在可能由于在 ZFS 上运行而导致的 BSD 平台上的 test_posix_fallocate 失败。

- bpo-19417: 添加 test_bdb.py。

### 构建

- bpo-5755: 将 `-Wstrict-prototypes` 选项从 `OPT` 移到 `CFLAGS_NODIST`。此选项在用C++编写扩展模块时会产生烦人的警告。

- bpo-33614: 确保Windows上稳定ABI的模块定义文件被正确重新生成。

- bpo-33522: 在https://python.visualstudio.com/cpython上启用Visual Studio Team Services的CI构建。

- bpo-33012: 为 gcc 8 添加 `-Wno-cast-function-type` 以静默关于函数类型转换的警告，如在方法定义列表中转换为 PyCFunction 的警告。

- bpo-33394: 当GNU make在命令行上传递宏时，为扩展模块启用详细构建。

### Windows

- bpo-33184: 将 Windows 安装程序更新到 OpenSSL 1.0.2o。

### macOS

- bpo-33184: 将 macOS 安装程序构建更新为使用 OpenSSL 1.0.2o。

### IDLE

- bpo-33656: 在Windows上，添加API调用表明tk针对DPI进行缩放。在Windows 8.1+或10上，Python二进制文件的DPI兼容性属性未更改，且显示器分辨率大于96 DPI时，这应使文本和线条更清晰。否则应无影响。

- bpo-33768: 点击上下文行将该行移动到编辑器窗口的顶部。

- bpo-33763: IDLE：使用只读文本小部件代替标签小部件作为代码上下文。

- bpo-33664: 按行滚动IDLE编辑器文本。之前，鼠标滚轮和滚动条滑块以固定像素数移动文本，导致编辑器盒顶部出现部分行。此更改也适用于shell和grep输出窗口，但不适用于只读文本视图。

- bpo-33679: 启用代码上下文的主题特定颜色配置。使用“高亮”选项卡查看内置主题的设置或为自定义主题添加设置。

- bpo-33642: 为代码上下文显示最多maxlines非空行。如果没有当前上下文，则显示单个空行。

- bpo-33628: IDLE：清理codecontext.py及其测试。

- bpo-33564: IDLE的代码上下文现在能识别async作为一个块的开头。

- bpo-29706: IDLE 现在在 3.6 版本中将 async 和 await 作为关键字着色。它们在 3.7 版本中成为完全的关键字。

- bpo-21474: 将单词/标识符的定义从ASCII更新为Unicode。在文本和输入框中，这会影响通过双击选择、通过control-left/right左右移动以及通过control-BACKSPACE/DEL左右删除。

- bpo-33204: IDLE：一致地着色无效的字符串前缀。'u'字符串前缀不能与'r'或'f'配对。从右边开始，尽可能多地着色有效的部分。修订并扩展颜色化器测试。

- bpo-32831: 为codecontext添加文档字符串和测试。

### 工具/示例

- bpo-33189: pygettext.py 现在只识别字面字符串作为文档字符串和可翻译字符串，并拒绝字节字面量和 f-string 表达式。

- bpo-31920: 修复了 `pygettext` 脚本中将目录作为参数处理的问题。基于 Oleg Krasnikov 的补丁。

- bpo-29673: 修复 pystackv 和 pystack gdbinit 宏。

- bpo-32885: 为 `Tools/scripts/pathfix.py` 添加 `-n` 标志以禁用自动备份创建（带有 `~` 后缀的文件）。

- bpo-31583: 修复 2to3 在使用 --add-suffix 选项但没有 --output-dir 选项时对当前目录中文件的相对路径的处理。

### C API

- bpo-32374: 文档说明多阶段初始化模块的 m_traverse 可以在 m_state=NULL 时调用，并添加健全性检查

## Python 3.6.5 正式版

发布日期: 2018-03-28

### 测试

- bpo-32872: 避免 regrtest 与命名空间包的兼容性问题。

### 构建

- bpo-33163: 将pip升级到9.0.3，setuptools升级到v39.0.1。

## Python 3.6.5 rc1

发布日期: 2018-03-13

### 安全性

- bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。

- bpo-32981: Regexes in difflib and poplib were vulnerable to catastrophic backtracking. These regexes formed potential DOS vectors (REDOS). They have been refactored. This resolves CVE-2018-1060 and CVE-2018-1061. Patch by Jamie Davis.

### 核心与内置函数

- bpo-33026: 通过设置f_lineno修复了跳出“with”块的问题。

- bpo-17288: 防止从'return'和'exception'跟踪事件跳转。

- bpo-32889: 更新Valgrind抑制列表，以考虑`Py_ADDRESS_IN_RANG`重命名为`address_in_range`的情况。

- bpo-32650: Pdb 和其他依赖于 bdb.py 的调试器现在能够正确地单步跳过（next 命令）原生协程。由 Pablo Galindo 提供补丁。

- bpo-32685: 改进了当 Python 2 形式的 print 语句出现在复合语句的同一行或以分号而非换行符终止时的建议。由 Nitish Chandra 提供补丁。

- bpo-32583: 修复在使用自定义解码错误处理程序时，内置 Unicode 解码器可能因越界写入错误而崩溃的问题。

- bpo-26163: 改进了 frozenset() 的哈希函数，当面对包含许多相似值的数据集时，能生成更多不同的哈希值。

- bpo-27169: `__debug__` 常量现在在编译时被优化掉。这也修复了 bpo-22091。

- bpo-32329: 当通过 `PYTHONHASHSEED=0` 关闭哈希随机化时，`sys.flags.hash_randomization` 现在被正确设置为 0。

- bpo-30416: 优化器现在受到保护，不会花费大量时间进行复杂计算和在常量折叠中创建大常量时消耗大量内存。

- bpo-18533: `repr()` 在包含其自身的 `values()` 或 `items()` 的字典上不再引发 `RecursionError`；OrderedDict 同理。相反，像其他递归结构一样使用 `...`。由 Ben North 提供补丁。

- bpo-32028: 在为将 Py2 打印语句转换为 Py3 内置打印函数调用生成建议时，现在正确地忽略了前导空白。由 Sanyam Khurana 提供补丁。

- bpo-32137: 现在，深度嵌套字典的repr会引发RecursionError，而不是因为堆栈溢出而崩溃。

### 库

- bpo-33064: lib2to3现在正确支持函数签名中 `*args` 和 `**kwargs` 后的尾随逗号。

- bpo-31804: 避免在标准流在退出时被关闭或为None时，multiprocessing.Process失败。

- bpo-33037: 在SSL传输关闭后跳过发送/接收数据。

- bpo-30353: 修复 64 位 Cygwin/MinGW 上结构体的 ctypes 按值传递问题。

- bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。

- bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。

- bpo-32713: 修复tarfile.itn对超出界限的浮点值的处理。由Joffrey Fuhrer提供补丁。

- bpo-30622: ssl模块现在能检测到LibreSSL中缺少的NPN支持。

- bpo-32922: dbm.open()现在使用文件系统编码而不是默认编码对文件名进行编码。

- bpo-32859: 在 `os.dup2` 中，不再每次调用时检查 `dup3` 系统调用是否存在。

- bpo-21060: 将setup.py upload中令人困惑的消息从"No dist file created in earlier command"重写为更有帮助的"Must create and upload files in one command"。

- bpo-32857: 在 `tkinter` 中，`after_cancel(None)` 现在会引发 `ValueError` 异常，而不是取消第一个预定的函数。由Cheryl Sabella提供补丁。

- bpo-32852: 确保在运行trace时sys.argv保持为列表。

- bpo-32841: Fixed `asyncio.Condition` issue which silently ignored cancellation after notifying and cancelling a conditional lock. Patch by Bar Harel.

- bpo-31787: 修复了多个模块中 `__init__()` 方法的内存泄漏问题。(由Oren Milman贡献)

- bpo-30157: 修复了在只有最后一个字段被引用时，csv.Sniffer.sniff() 中猜测引用和分隔符的问题。由Jake Davis提供补丁。

- bpo-32394: socket: 在运行时移除旧版本 Windows 上的 TCP_FASTOPEN、TCP_KEEPCNT 标志。

- bpo-32777: 修复了在POSIX系统的子进程中，当标记文件描述符为可继承时，subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。

- bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在，在支持dl的平台上，共享扩展已明确链接到libdl。

- bpo-32734: 修复了 `asyncio.Lock()` 的安全问题，该问题允许多次获取和锁定同一个锁，而锁并未释放。由Bar Harel提供补丁。

- bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。

- bpo-27931: 修复当用户名为空引号字符串时的电子邮件地址头解析错误。由Xiang Zhang提供补丁。

- bpo-32304: distutils的上传命令不再损坏以CR字节结尾的tar文件，并且不再尝试在上传的任何文本字段中将CR转换为CRLF。

- bpo-32502: 当遇到64位硬件地址时，uuid.uuid1不再抛出异常。

- bpo-31848: 修复Aifc_read.initfp()中当SSND块未找到时的错误处理。补丁由Zackery Spytz提供。

- bpo-32555: 在 FreeBSD 和 Solaris 上，os.strerror() 现在总是从当前区域设置编码解码字节字符串，而不是在某些情况下使用 ASCII/替代转义。

- bpo-32521: nis 模块现在与新的 libnsl 和头文件位置兼容。

- bpo-32473: 提高 ABCMeta._dump_registry() 输出的可读性

- bpo-32521: glibc 已移除 Sun RPC。在 nis 模块中使用替代的 libtirpc 头文件和库。

- bpo-32228: 确保 `truncate()` 在写入长度超过缓冲区大小后保留文件位置（由 `tell()` 报告）。

- bpo-26133: 在解释器关闭时不要在asyncio UNIX事件循环中取消订阅信号。

- bpo-32185: 在装有OpenSSL 1.0.2+或inet_pton的平台上，SSL模块不再在SNI TLS扩展中发送IP地址。

- bpo-32323: `urllib.parse.urlsplit()` does not convert zone-id (scope) to lower case for scoped IPv6 addresses in hostnames now.

- bpo-32302: 修复了distutils的bdist_wininst对于CRT v142的支持：它二进制兼容于CRT v140。

- bpo-32255: 现在，当写入CSV文件时，单个空字段总是会被引用。这允许区分空行和由单个空字段组成的行。由Licht Takeuchi提供补丁。

- bpo-32277: 在不支持 `chmod(..., follow_symlinks=False)` 的平台上，引发``NotImplementedError``而不是 `SystemError`。由Anthony Sottile提供补丁。

- bpo-32199: getnode() ip 获取器现在使用 'ip link' 而不是 'ip link list'。

- bpo-27456: 确保在 Linux 上设置 TCP_NODELAY。测试由 Victor Stinner 完成。

- bpo-31900: 现在 `locale.localeconv()` 函数会临时将 `LC_CTYPE` 区域设置改为``LC_NUMERIC``区域设置，以解码 `decimal_point` 和 `thousands_sep` 字节字符串，如果它们是非ASCII或长度超过1字节，并且 `LC_NUMERIC` 区域设置与 `LC_CTYPE` 区域设置不同。这一临时变更会影响其他线程。对于 `str.format()` 方法，当使用 `n` 类型格式化数字（`int`, `float`, `float` 及其子类）时（例如：`'{:n}'.format(1234)`），也进行了相同的更改。

- bpo-31802: 即使`os`模块尚未导入，导入原生路径模块(`posixpath`, `ntpath`)现在也能正常工作。

### 文档

- bpo-17232: 澄清 -O 和 -OO 的文档。由 Terry Reedy 提供补丁。

- bpo-32800: 更新 xml 默认命名空间的 w3c 文档链接。

- bpo-8722: 文档化当属性 `get()` 方法引发 `AttributeError` 时 `__getattr__()` 的行为。

- bpo-32614: 修改文档中的正则表达式示例，使用原始字符串以防止 `DeprecationWarning`，并在正则表达式 HOWTO 中添加文本以突出弃用。

- bpo-31972: Improve docstrings for `pathlib.PurePath` subclasses.

- bpo-17799: 解释了sys.settrace和sys.setprofile及其C-API对应项的实际行为，关于在每个函数中接收哪些类型的事件。由Pablo Galindo Salgado提供补丁。

### 测试

- bpo-32517: 修复由于 `KqueueSelector` 循环的传输未被关闭而在 macOS 10.12.2+ 上失败的 `test_asyncio`。

- bpo-32721: 修复test_hashlib，使其在未构建_md5模块时不会失败。

- bpo-32252: 修复用于在测试崩溃时防止核心转储文件的faulthandler_suppress_crash_report()。getrlimit()在成功时返回零。

- bpo-31518: Debian Unstable已为SSLv23_METHOD()禁用了TLS 1.0和1.1。将一些测试的TLS/SSL协议更改为PROTOCOL_TLS或PROTOCOL_TLSv1_2，以使它们在Debian上通过。

### 构建

- bpo-32635: 修复当系统提供的是 libxcrypt 而不是 libcrypt 时 crypt 模块的段错误。

### Windows

- bpo-33016: 修复nt._getfinalpathname中潜在使用未初始化内存的问题。

- bpo-32903: 修复如果当前目录设置为UNC路径时Windows上os.chdir()的内存泄漏。

- bpo-31966: 修复WindowsConsoleIO.write()写入空数据的问题。

- bpo-32409: 确保activate.bat可以处理Unicode内容。

- bpo-32457: 改进启动Python时对非规范化可执行路径的处理。

- bpo-32370: 在uuid模块中为ipconfig输出使用正确的编码。由Segev Finer提交补丁。

- bpo-29248: 修复Windows上的 `os.readlink()`，它错误地将重新解析数据缓冲区的``PrintNameOffset`` 字段视为字符数而非字节数。由Craig Holmquist和SSE4提交补丁。

- bpo-32588: 创建独立的_distutils_findvs模块。

### macOS

- bpo-32726: 提供一个额外的、更现代的macOS安装程序变体，仅支持64位模式的macOS 10.9+系统。将提供的第三方库升级到OpenSSL 1.0.2n、XZ 5.2.3和SQLite 3.22.0。10.9+安装程序现在链接并提供其自己的Tcl/Tk 8.6.8副本。

### IDLE

- bpo-32984: 在运行启动文件时设置 `__file__`。与Python一样，IDLE在展示第一个交互式输入提示之前，可选地在Shell窗口中运行一个启动文件。对于IDLE，`-s``运行环境变量 :envvar:`IDLESTARTUP` 或 :envvar:`PYTHONSTARTUP` 中命名的文件；`-r file`` 运行 `file`。Python在运行文件之前将 `__file__` 设置为启动文件名，并在第一个提示之前取消设置。IDLE现在在没有 `-n` 选项的情况下正常运行时也会这样做。

- bpo-32940: 在pyparse中简化并重命名StringTranslatePseudoMapping。

- bpo-32916: 在pyparse中将 `str` 更改为 `code`。

- bpo-32905: 移除pyparse模块中未使用的代码。

- bpo-32874: 为pyparse添加测试。

- bpo-32837: 对于IDLE的系统和位置无关文件，使用系统和位置相关的默认编码对于open()来说是一个坏主意。

- bpo-32826: 在IDLE的test_help_about的open()中添加"encoding=utf-8"。GUI测试test_file_buttons()仅查看初始的ascii-only行，但在open()默认为'ascii'的系统上失败，因为readline()内部读取和解码足够远，以在CREDITS.txt中遇到非ascii字符。

- bpo-32765: 更新configdialog General标签的文档字符串，将新部件添加到部件列表中。

### 工具/示例

- bpo-24960: 2to3和lib2to3现在可以使用pkgutil.get_data()读取pickled语法文件，而不是探测文件系统。这使得2to3和lib2to3在从zipfile运行时也能工作。

- bpo-32222: 修复 pygettext 不提取带有类型注释参数的函数的文档字符串的问题。由 Toby Harradine 提供的补丁。

### C API

- bpo-29084: OrderedDict的未记录C API已从有限C API中排除。它是被错误添加的，实际上在有限C API中从未工作过。

## Python 3.6.4 正式版

发布日期: 2017-12-18

从 3.6.4 rc1 到 3.6.4 正式版中没有新的代码更改。

## Python 3.6.4 rc1

发布日期: 2017-12-05

### 核心与内置函数

- bpo-32176: 现在，代码对象构造函数会根据freevars和cellvars正确设置co_flags.CO_NOFREE，而不是需要调用者正确设置。这确保了当额外的cell引用被注入到修改后的代码对象和函数中时，它会自动清除。

- bpo-31949: 修复了打印回溯（PyTraceBack_Print()）中的若干问题。现在将sys.tracebacklimit设置为0或更小会抑制回溯的打印。将sys.tracebacklimit设置为None现在会导致使用默认限制。将sys.tracebacklimit设置为大于LONG_MAX的整数现在意味着使用LONG_MAX限制而不是默认限制。修复了Windows上超过 `2**31` 个回溯项时的整数溢出问题。修复了输出错误处理。

- bpo-30696: 修复了在没有内存时交互式解释器无限循环的问题。

- bpo-20047: Bytearray方法partition()和rpartition()现在仅接受类似字节的对象作为分隔符，如文档所述。特别是，现在当传递整数作为分隔符时，它们会引发TypeError而不是返回一个虚假的结果。

- bpo-31852: 修复由async软关键字和续行组合引起的段错误。

- bpo-21720: 当 `__import__()` 的 fromlist 参数或模块的 `__all__` 属性包含bytes实例时，不再发出BytesWarning。

- bpo-31825: 修复了在解码转义的非ascii字节时'unicode-escape'编解码器和codecs.escape_decode()中的OverflowError。

- bpo-28603: 在解释器退出时打印异常的完整上下文/原因链，即使链中的异常不可哈希或与后面的异常相等。由Zane Bitter提供补丁。

- bpo-31786: 修复 select 模块中负超时时间在 -1.0 和 0.0 之间的正确舍入问题。现在函数会按预期阻塞等待事件。此前，调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。

- bpo-31642: 通过将sys.modules["package.module"]设置为None，恢复了阻塞的"from package import module"。

- bpo-31626: 修复了调试内存分配器中的一个错误。在缩小内存块后存在对已释放内存的写入。

- bpo-31619: 修复了将带有大量下划线的字符串转换为二进制基数整数时的ValueError。

- bpo-31592: Fixed an assertion failure in Python parser in case of a bad `unicodedata.normalize()`. Patch by Oren Milman.

- bpo-31588: Raise a `TypeError` with a helpful error message when class creation fails due to a metaclass with a bad `__prepare__()` method. Patch by Oren Milman.

- bpo-31566: Fix an assertion failure in `_warnings.warn()` in case of a bad `__name__` global. Patch by Oren Milman.

- bpo-31505: Fix an assertion failure in `json`, in case `_json.make_encoder()` received a bad `encoder()` argument. Patch by Oren Milman.

- bpo-31492: 修复了在从具有错误 `__name__` 属性的模块导入失败时，以及在访问此类模块的属性失败时的断言失败。由Oren Milman提供补丁。

- bpo-31490: Fix an assertion failure in `ctypes` class definition, in case the class has an attribute whose name is specified in `_anonymous_` but not in `_fields_`. Patch by Oren Milman.

- bpo-31478: Fix an assertion failure in `_random.Random.seed()` in case the argument has a bad `__abs__()` method. Patch by Oren Milman.

- bpo-31315: 修复 imp.create_dynamic() 中当 spec.name 不是字符串时的断言失败。由 Oren Milman 提供补丁。

- bpo-31311: Fix a crash in the `__setstate__()` method of `ctypes._CData`, in case of a bad `__dict__`. Patch by Oren Milman.

- bpo-31293: 修复 timedelta 对象与具有坏的 as_integer_ratio() 方法的浮点数进行真除法和乘法时的崩溃。由 Oren Milman 提供补丁。

- bpo-31285: Fix an assertion failure in `warnings.warn_explicit`, when the return value of the received loader's get_source() has a bad splitlines() method. Patch by Oren Milman.

- bpo-30817: `PyErr_PrintEx()` clears now the ignored exception that may be raised by `_PySys_SetObjectId()`, for example when no memory.

### 库

- bpo-28556: 对 `typing` 模块的两项小修复：允许浅复制泛型类的实例，改进 `__init_subclass__` 与泛型的交互。原始 PR 由 Ivan Levkivskyi 提供。

- bpo-27240: 新电子邮件策略的头部折叠算法已被重写，这也修复了 bpo-30788、bpo-31831 和 bpo-32182。特别是，现在可以正确进行 RFC2231 折叠。

- bpo-32186: io.FileIO.readall() 和 io.FileIO.read() 现在在获取文件大小时释放 GIL。修复了所有线程因无法访问的 NFS 服务器而挂起的问题。由 Nir Soffer 提供补丁。

- bpo-12239: Make `msilib.SummaryInformation.GetProperty()` return `None` when the value of property is `VT_EMPTY`. Initial patch by Mark Mc Mahon.

- bpo-31325: 修复了 `RobotFileParser.parse()` 方法中 `collections.namedtuple()` 的错误用法。初始由 Robin Wellner 提供补丁。

- bpo-12382: `msilib.OpenDatabase()` now raises a better exception message when it couldn't open or create an MSI file. Initial patch by William Tisäter.

- bpo-32110: `codecs.StreamReader.read(n)` 现在对于非负的 n，返回不超过 n 个字符/字节。这使得它与其他类似文件对象的 `read()` 方法兼容。

- bpo-32072: 修复了二进制 plists 的问题：修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。

- bpo-32034: 使asyncio.IncompleteReadError和LimitOverrunError可pickle。

- bpo-32015: 修复了在等待异步读写套接字期间重新连接套接字时asyncio的循环问题。

- bpo-32011: 恢复了对加载带有TYPE_INT64代码的marshal文件的支持。这些文件可以在Python 2.7中生成。

- bpo-31970: 降低asyncio调试模式的性能开销。

- bpo-9678: 修复了uuid模块中确定MAC地址的问题：在NetBSD和OpenBSD上使用ifconfig。在Linux、FreeBSD、NetBSD和OpenBSD上使用arp。基于Takayuki Shimizukawa的补丁。

- bpo-30057: 修复了signal.signal()中潜在的信号丢失问题。

- bpo-31933: 修复Blake2参数leaf_size和node_offset在大端平台上的问题。由Jack O'Connor提供补丁。

- bpo-31927: 修复了socket模块在NetBSD 8上的编译问题。修复了在NetBSD和DragonFly BSD上解析AF_BLUETOOTH地址时的断言失败或读取任意数据的问题。

- bpo-27666: 修复了当类型chtype或mmask_t的大小小于C long的大小时，curses.box()和curses.ungetmouse()中的堆栈损坏问题。curses.box()现在接受字符作为参数。基于Steve Fink的补丁。

- bpo-31897: plistlib现在在读取二进制plist时会捕获更多错误，并抛出InvalidFileException而不是意外的异常。

- bpo-25720: 修复了检查curses WINDOW填充状态的方法。由Masayuki Yamamoto提供补丁。

- bpo-31893: 修复了OpenBSD和NetBSD上kqueue_event结构的布局。修复了kqueue_event对象的比较。

- bpo-31891: 修复了在NetBSD上构建curses模块的问题。

- bpo-28416: 具有 persistent_id() 方法的 pickle.Pickler 子类和具有 persistent_load() 方法的 pickle.Unpickler 子类的实例不再创建引用循环。

- bpo-28326: 修复当 stdout 和/或 stderr 关闭或为 None 时的 multiprocessing.Process。

- bpo-31457: 如果使用嵌套的日志适配器，内部 `process()` 方法不再被省略。

- bpo-31457: LoggerAdapter 对象的 `manager` 属性现在可以正确设置了。

- bpo-31806: 修复 time.sleep(), threading.Lock.acquire() 和 socket.socket.settimeout() 中的超时舍入，以正确舍入 -1.0 和 0.0 之间的负超时。这些函数现在会按预期阻塞等待事件。之前，调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。

- bpo-28603: traceback: 修复了在打印异常回溯时，当当前异常或其上下文/原因链中的异常不可哈希时发生的 TypeError。由 Zane Bitter 提供补丁。

- bpo-30058: 修复 select.kqueue.control() 中的缓冲区溢出。

- bpo-31770: 防止多次调用 `sqlite3.Cursor` 对象的 `__init__()` 方法时崩溃。由 Oren Milman 提供补丁。

- bpo-31672: `string.Template` 中的 `idpattern` 匹配了一些非ASCII字符。现在它使用 `-i` 正则表达式本地标志来避免非ASCII字符。

- bpo-31764: 防止在 `sqlite3.Cursor.close()` 中当 `Cursor` 对象未初始化时发生崩溃。补丁由 Oren Milman 提供。

- bpo-31752: 修复在调用自定义整数的 timedelta 构造函数时可能发生的崩溃。

- bpo-31701: 在Windows上，faulthandler.enable()现在会忽略MSC和COM异常。

- bpo-31728: Prevent crashes in `_elementtree` due to unsafe cleanup of `Element.text` and `Element.tail`. Patch by Oren Milman.

- bpo-31620: 空的 asyncio.Queue 现在在队列获取轮询超时时不会泄漏内存。

- bpo-31632: 修复 asyncio 模块中 _SSLProtocolTransport 类的 set_protocol() 方法。此方法之前修改了错误的协议引用。

- bpo-31675: 修复了Tkinter的splitlist()和split()方法在传递大于2 GiB的字符串时的内存泄漏问题。

- bpo-31673: 修复了Tkinter方法adderrorinfo()名称中的拼写错误。

- bpo-30806: 修复了netrc对象的字符串表示。

- bpo-15037: 为 ncurses 5.7 及更早版本的 curses 中的 getkey() 添加了一个变通方案。

- bpo-25351: 避免venv激活时因未定义变量而失败。

- bpo-25532: inspect.unwrap()现在只会尝试解包对象sys.getrecursionlimit()次，以防止在每次属性访问时创建新对象的对象。

- bpo-30347: 修复了在并发迭代itertools.groupby()迭代器时的崩溃问题。

- bpo-31516: `threading.current_thread()` 在关闭时不应返回一个虚拟线程。

- bpo-31351: 如果 pip 引导失败，python -m ensurepip 现在会以非零退出代码退出。

- bpo-31482: `random.seed()` 现在在version=1时可以与bytes一起工作。

- bpo-31334: 修复 `select` 模块中的 `poll.poll([timeout])`，在所有操作系统上对于任意的负超时值，现在可以仅接受非负整数或 -1。由 Riccardo Coccioli 提供补丁。

- bpo-31310: 如果崩溃，multiprocessing 的信号量跟踪器应该重新启动。

- bpo-31308: 使 multiprocessing 的 forkserver 进程免受 Ctrl-C 和其他用户中断的影响。如果崩溃，必要时重启它。

### 文档

- bpo-32105: 添加了 asyncio.BaseEventLoop.connect_accepted_socket 的 versionadded 标记。

- bpo-31537: 修复了 readline 文档示例代码中 `get_history_length` 的不正确用法。补丁由 Brad Smith 提供。

- bpo-30085: 为了清晰起见，优先使用没有双下划线的操作符函数。带有下划线的仅为了向后兼容而保留。

### 测试

- bpo-31380: 在 macOS 上跳过 test_httpservers 的 test_undecodable_file 测试：在 APFS 上失败。

- bpo-31705: 在早于4.5版本的Linux内核上跳过test_socket.test_sha256()测试。该测试在内核3.10（ppc64le架构）上会因ENOKEY而失败。此问题已在4.5内核中修复。

- bpo-31174: 修复test_tools.test_unparse：DirectoryTestCase现在存储样本名称以始终测试相同的文件。这避免了在查找引用泄漏时产生误报。

- bpo-30695: Add the `set_nomemory(start, stop)` and `remove_mem_hooks()` functions to the _testcapi module.

### 构建

- bpo-32059: `setup.py` 中的 `detect_modules()` 现在在交叉编译时也会搜索sysroot路径。

- bpo-31957: 修复为Windows构建时的Windows SDK版本检测。

- bpo-31609: 修复PCbuild/clean.bat中的引号问题。

- bpo-31934: 当构建源树不干净时中止构建。

- bpo-31926: 修复了当.c文件中有多个同名函数和/或方法时，Argument Clinic有时会导致编译错误的问题。

- bpo-28791: 更新Windows构建以使用SQLite 3.21.0。

- bpo-28791: 更新OS X安装程序以使用SQLite 3.21.0。

- bpo-22140: 防止在 python-config.sh 中双重替换前缀。

- bpo-31536: Avoid wholesale rebuild after `make regen-all` if nothing changed.

### Windows

- bpo-1102: 当 `View.Fetch()` 返回 `ERROR_NO_MORE_ITEMS` 时返回 `None`，而不是引发``MSIError``。初始由Anthony Tuininga提供补丁。

- bpo-31944: 修复应用和功能对话框中的修改按钮。

### macOS

- bpo-31392: 更新macOS安装程序以使用OpenSSL 1.0.2m。

### IDLE

- bpo-32207: 在IDLE中改进tk事件异常回溯。当tk事件处理由IDLE的运行循环驱动时，不再向tk事件异常回溯中添加令人困惑和分散注意力的queue.EMPTY回溯上下文。现在，回溯与事件处理由用户代码驱动时相同。基于Serhiy Storchaka的建议的补丁。

- bpo-32164: 删除未使用的文件idlelib/tabbedpages.py。在configdialog中使用TabbedPageSet已被ttk.Notebook替代。

- bpo-32100: IDLE: 修复pathbrowser中的旧错误和新错误；改进测试。补丁主要由Cheryl Sabella提供。

- bpo-31858: IDLE -- 将shell提示符操作限制在shell中。编辑器和输出窗口仅看到一个空的最后提示行。这简化了代码并修复了插入换行时的一个小错误。如果存在Sys.ps1，则在Shell启动时读取，但不设置或更改。

- bpo-31860: IDLE配置对话框中的字体样本现在可编辑。更改在IDLE保持打开时持续存在。

- bpo-31836: 现在如果在设置ps1的test_idle之后运行，Test_code_module将通过。代码模块如果存在则使用sys.ps1，如果不存在则设置为'>>> '。Test_code_module现在正确测试了这两种行为。ps2同理。

- bpo-28603: 修复了一个TypeError，该错误在打印包含不可哈希异常的追溯时导致shell重启。补丁由Zane Bitter提供。

- bpo-13802: 在IDLE的字体设置样本中使用非拉丁字符。即使选择定义Unicode基本多语言平面有限子集的字体，tcl/tk也会使用定义字符的其他字体。扩展的示例为非拉丁字符用户提供了更好的了解他们在IDLE的shell和编辑器中可能会看到的内容。为了给扩展的样本腾出空间，字体标签上的框架被重新排列。字体/标签帮助解释了关于添加的一些内容。

- bpo-31460: 简化IDLE模块浏览器的API。传递一个小部件而不是带有根部件的flist，开启了创建一个仅是窗口一部分的浏览器框架的可能性。传递一个完整的文件名而不是假定来自.py文件的片段，开启了浏览不以.py结尾的python文件的可能性。

- bpo-31649: IDLE - 使_htest, _utest参数仅关键字。

- bpo-31559: 在idle_test.test_browser中移除测试顺序依赖。

- bpo-31459: 将IDLE的模块浏览器从类浏览器重命名为模块浏览器。原始的模块级类和方法浏览器多年前就变成了一个模块浏览器，增加了模块级函数。昨天又增加了嵌套类和函数。为了向后兼容，设置对话框的键标签上出现的虚拟事件<<open-class-browser>>没有被更改。补丁由Cheryl Sabella提供。

- bpo-31500: 现在默认字体在高DPI显示器上会进行缩放。

- bpo-1612262: IDLE模块浏览器现在显示嵌套类和函数。代码和测试的原始补丁分别由Guilherme Polo和Cheryl Sabella提供。

### 工具/示例

- bpo-30722: 使redemo能够在Python 3.6及更新版本中工作。同时，移除 `LOCALE` 选项，因为它不适用于Python 3中的字符串模式。由Christoph Sarnowski提供补丁。

### C API

- bpo-20891: 修复PyGILState_Ensure()。当PyGILState_Ensure()在非Python线程中且在PyEval_InitThreads()之前被调用时，仅在调用PyThreadState_New()之后调用PyEval_InitThreads()，以修复崩溃问题。

- bpo-31532: 修复由于在getpath.c中Py_GetPath()和Py_SetPath()之间的分配器混合导致的内存损坏。

- bpo-30697: The `PyExc_RecursionErrorInst` singleton is removed and `PyErr_NormalizeException()` does not use it anymore. This singleton is persistent and its members being never cleared may cause a segfault during finalization of the interpreter. See also bpo-22898.

## Python 3.6.3 正式版

发布日期: 2017-10-03

### 库

- bpo-31641: Re-allow arbitrary iterables in `concurrent.futures.as_completed()`. Fixes regression in 3.6.3rc1.

### 构建

- bpo-31662: 修复Windows `uploadrelease.bat` 脚本中的拼写错误。修复 `Doc/make.bat` 中的Windows文档构建问题。

- bpo-31423: 修复使用新版本Sphinx构建PDF文档的问题。

## Python 3.6.3 rc1

发布日期: 2017-09-18

### 安全性

- bpo-29781: 当尚未通过 BIO 执行握手时，SSLObject.version() 现在正确返回 None。

- bpo-30947: 将内嵌的 libexpat 从版本 2.2.1 升级到 2.2.3 以获取安全修复。

### 核心与内置函数

- bpo-31471: Fix an assertion failure in `subprocess.Popen()` on Windows, in case the env argument has a bad keys() method. Patch by Oren Milman.

- bpo-31418: Fix an assertion failure in `PyErr_WriteUnraisable()` in case of an exception with a bad `__module__` attribute. Patch by Oren Milman.

- bpo-31416: 修复当warnings.filters或warnings.defaultaction错误时的断言失败。由Oren Milman提供补丁。

- bpo-31411: 当warnings.onceregistry不是字典时，抛出TypeError而不是SystemError。由Oren Milman提供补丁。

- bpo-31373: 修复了几个由于浮点降级可能导致的未定义行为实例。

- bpo-30465: f-字符串中的位置信息（`lineno``和 ``col_offset`）现在（大部分）正确。这修复了像flake8这样的工具在错误行（通常是文件的第一行）显示警告的问题。

- bpo-31343: Include sys/sysmacros.h for major(), minor(), and makedev(). GNU C libray plans to remove the functions from sys/types.h.

- bpo-31291: Fix an assertion failure in `zipimport.zipimporter.get_data` on Windows, when the return value of `pathname.replace('/','\\')` isn't a string. Patch by Oren Milman.

- bpo-31271: Fix an assertion failure in the write() method of `io.TextIOWrapper`, when the encoder doesn't return a bytes object. Patch by Oren Milman.

- bpo-31243: Fix a crash in some methods of `io.TextIOWrapper`, when the decoder's state is invalid. Patch by Oren Milman.

- bpo-30721: `print` 现在显示使用Python 2重定向语法的正确用法提示。由Sanyam Khurana提供补丁。

- bpo-31070: 修复importlib中_get_module_lock()的竞态条件。

- bpo-31095: 修复由未调用 `PyObject_GC_UnTrack()` 的 `tp_dealloc` 引起的GC期间潜在崩溃问题。

- bpo-31071: 当传递其他参数时，避免在使用*解包调用中掩盖原始TypeError。

- bpo-30978: str.format_map()现在传递键查找异常。之前任何异常都被替换为KeyError异常。

- bpo-30808: 对并发敏感的信号状态使用_Py_atomic API。

- bpo-30876: 从未加载的包中进行相对导入现在会重新导入包，而不是因SystemError失败。从非包中进行相对导入现在会因ImportError而非SystemError失败。

- bpo-30703: 改进信号传递。避免在信号处理程序中使用Py_AddPendingCall，以避免调用信号不安全函数。这里添加的测试在没有补丁的其他部分的情况下，在Linux和OS X上失败。这意味着我们的信号传递逻辑存在缺陷（某些信号可能会丢失）。

- bpo-30765: 当PyThread_acquire_lock()被要求不阻塞时，避免在pthread_mutex_lock()中阻塞。

- bpo-31161: 确保'Missing parentheses'语法错误消息仅应用于SyntaxError，而不是子类。补丁由Martijn Pieters提供。

- bpo-30814: 修复从包中导入子模块时的竞态条件。

- bpo-30597: `print` 现在在作为 Python 2 语句使用时，自定义错误消息中显示预期的输入。由 Sanyam Khurana 提供补丁。

### 库

- bpo-31499: xml.etree：修复当解析器是引用循环的一部分时的崩溃问题。

- bpo-28556: typing.get_type_hints现在默认（当调用者未指定 `globalns` 时）为类和模块找到正确的globalns。

- bpo-28556: 对 `typing` 模块的速度改进。原始PR由Ivan Levkivskyi和Mitar提供。

- bpo-31544: ElementTree的C加速器模块忽略了在XMLParser()中查找TreeBuilder目标方法时引发的异常。

- bpo-31234: socket.create_connection()现在手动修复了一个引用循环：成功时清除存储最后一个异常的变量。

- bpo-31457: LoggerAdapter对象现在可以嵌套。

- bpo-31400: 改进了 SSL 错误处理，避免丢失错误编号。

- bpo-28958: ssl.SSLContext() 现在在无法实例化上下文时使用 OpenSSL 错误信息。

- bpo-27340: SSLSocket.sendall() 现在使用 memoryview 来创建数据切片。这修复了对所有类似于字节对象的支持。同时，这也更高效，避免了昂贵的复制。

- bpo-31178: 修复了 subprocess 模块中在罕见错误路径下的字符串连接错误

- bpo-31350: 对 `asyncio._get_running_loop()` 进行微优化，使其速度提升高达 10%。

- bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题（libexpat bug 115）：https://github.com/libexpat/libexpat/issues/115

- bpo-29136: 添加 TLS 1.3 密码套件和 OP_NO_TLSv1_3。

- bpo-29212: 修复 concurrent.futures.thread.ThreadPoolExecutor 线程在没有提供 thread_name_prefix 时默认使用非 repr() 基础的线程名。它们现在会自称为 "ThreadPoolExecutor-y_n"。

- bpo-9146: 修复 _hashopenssl 在链接的 OpenSSL 库中不可用标准哈希函数（如 md5）时的段错误。如在某些特殊的 FIPS-140 构建环境中。

- bpo-27144: `concurrent.futures` 中的 `map()` 和 `as_completed()` 迭代器现在避免保留对生成对象的引用。

- bpo-10746: 修复 ctypes 为整数类型生成错误的 PEP 3118 类型代码的问题。

- bpo-22536: 在 POSIX 系统上由于找不到可执行文件或 cwd 而引发 FileNotFoundError 时，子进程模块现在会设置文件名。

- bpo-31249: concurrent.futures: ThreadPoolExecutor 使用的 WorkItem.run() 现在打破了异常对象和 WorkItem 对象之间的循环引用。

- bpo-31247: xmlrpc.server 现在在处理异常的代码中使用 sys.exc_info() 时显式地打破循环引用。

- bpo-30102: ssl 和 hashlib 模块现在在 OpenSSL < 1.1.0 时调用 OPENSSL_add_all_algorithms_noconf()。该函数检测 CPU 特性并在一些 CPU 架构（如 POWER8）上启用优化。补丁基于 Gustavo Serra Scalet 的研究。

- bpo-31185: 修复了 asyncio 加速模块中的杂项错误。

- bpo-31135: ttk：修复LabeledScale和OptionMenu类的destroy()方法。即使使用的属性不存在，也调用父类的destroy()方法。LabeledScale.destroy()方法现在还显式清除了label和scale属性，以帮助垃圾回收器销毁所有小部件。

- bpo-31107: Fix `copyreg._slotnames()` mangled attribute calculation for classes whose name begins with an underscore. Patch by Shane Harvey.

- bpo-31061: 修复了在使用asyncio和线程时的崩溃问题。

- bpo-30502: 修复了ssl中长oids的处理。基于Christian Heimes的补丁。

- bpo-30119: ftplib.FTP.putline() now throws ValueError on commands that contains CR or LF. Patch by Dong-hee Na.

- bpo-30595: multiprocessing.Queue.get() 现在在非阻塞模式下轮询其读取器，如果成功获取锁但获取时间超过了超时时间。

- bpo-29403: 修复``unittest.mock``模块的autospec功能，使其不再对绑定到方法的内置函数报错。由Aaron Gallagher提供补丁。

- bpo-30961: 修复了tracemalloc中借用引用的递减问题。

- bpo-25684: 修改 `ttk.OptionMenu` 单选按钮，使其在不同 `OptionMenu` 实例间保持唯一。

- bpo-30886: 修复 multiprocessing.Queue.join_thread()：现在即使线程是由创建队列的同一进程启动的，它也会等待线程完成。

- bpo-29854: 修复使用 readline 的 history-size 选项时 readline 中的段错误。由 Nir Soffer 提供补丁。

- bpo-30319: socket.close() 现在忽略 ECONNRESET 错误。

- bpo-30828: Fix out of bounds write in `asyncio.CFuture.remove_done_callback()`.

- bpo-30807: 当传递一个极小的值时，signal.setitimer() 可能会禁用计时器。极小的值（如 1e-6）是 setitimer() 有效的非零值，它被指定为采取微秒级间隔。然而，在某些平台上，我们的转换例程可能将 1e-6 转换为零间隔，从而禁用计时器而不是（重新）调度它。

- bpo-30441: 修复在迭代 os.environ 时修改它导致的错误。

- bpo-30532: 修复电子邮件头值解析器在某些情况下丢弃折叠空白的问题。

- bpo-30879: os.listdir() 和 os.scandir() 现在在使用字节类参数调用时会发出字节名称。

- bpo-30746: 禁止在 `os.putenv()` 和 `os.spawn*()` 的环境变量名中使用 '=' 字符。

- bpo-29755: 修复了 gettext 模块中的 lgettext() 系列函数。它们现在总是返回字节。

### 文档

- bpo-31294: 修复ZeroMQSocketListener和ZeroMQSocketHandler示例中的不完整代码片段，并将它们适配到Python 3。

- bpo-21649: 在SSL文档中添加RFC 7525和Mozilla服务器端TLS链接。

- bpo-30803: 澄清关于真值测试的文档。原始由Peter Thomassen提供补丁。

### 测试

- bpo-31320: 在 test_ssl 中静默回溯。

- bpo-25674: 移除 sha256.tbs-internet.com 的 ssl 测试。

- bpo-30715: 处理 OpenSSL 1.1.0f 的 ALPN 回调变更。最新版本的行为类似于 OpenSSL 1.0.2，不再中止握手。

- bpo-30822: regrtest: 从 regrtest --all 中排除 tzdata。当使用 --use=all / -u all 运行测试套件时，排除 tzdata，因为它会使 test_datetime 变得太慢（在某些构建机器人上需要 15-20 分钟），从而导致某些构建机器人超时。同时修复 regrtest 命令行解析器，允许传递 -u extralargefile 来运行 test_zipfile64。

### 构建

- bpo-30854: 修复编译--without-threads时的编译错误。由Masayuki Yamamoto提供补丁。

### Windows

- bpo-30389: 在Windows上的distutils中添加对Visual Studio 2017的检测。

- bpo-31340: 更改为使用MSVC v141（包含在Visual Studio 2017中）构建。

- bpo-30581: os.cpu_count()现在在Windows上当逻辑处理器数量大于64时返回正确的处理器数量。

- bpo-30731: 向python.manifest添加缺失的xmlns，以使其匹配模式。

### IDLE

- bpo-31493: IDLE 代码上下文——修复代码更新和字体更新计时器。取消计时器可以防止 test_idle 完成时出现警告消息。

- bpo-31488: IDLE - 更新前扩展类中的非键选项。应用配置对话框更改时，为每个特性类调用 .reload。更改 ParenMatch，使更新的选项影响附加到现有编辑器窗口的现有实例。

- bpo-31477: IDLE - 改进文档中的 rstrip 条目。剥离尾随空白会剥离比空格更多的内容。多行字符串文字不被跳过。

- bpo-31480: IDLE - 使测试在默认禁用 zzdummy 扩展的情况下通过。

- bpo-31421: 文档说明IDLE如何运行tkinter程序。IDLE在后台调用tcl/tk更新，以使与tkinter应用程序的实时交互和实验更加容易。

- bpo-31414: IDLE -- 通过首先删除来修复tk输入框测试。向整数输入框中添加内容与删除并插入不同，因为int('')会失败。

- bpo-31051: 将IDLE的configdialog GenPage重新排列为窗口、编辑器和帮助部分。

- bpo-30617: IDLE - 为outwin子类添加文档字符串和测试，这是editor的子类。将一些数据和函数从类移到模块级别。由Cheryl Sabella提供补丁。

- bpo-31287: IDLE - 在test_configdialog中不要修改tkinter.message。

- bpo-27099: 将 IDLE 的内置“扩展”功能转换为常规功能。约 10 项 IDLE 功能原本以可选扩展的形式实现，但是，它们的差异行为导致用户困惑甚至更糟，也不利于维护，因此，进行此次转换。对用户的主要区别在于，现在内置功能的可自定义按键绑定将采用统一方式处理。具体表现为：在某个按键集中编辑绑定仅会影响该按键集中的值。所有绑定均在 config-extensions.def 文件中系统预设的默认按键集中统一定义。所有自定义按键集会整体保存在 config-extension.cfg 文件中。点击“应用”或“确定”后所有更改立即生效。受影响的交互事件包括'<<force-open-completions>>'、'<<expand-word>>'、'<<force-open-calltip>>'、'<<flash-paren>>'、'<<format-paragraph>>'、'<<run-module>>'、'<<check-module>>'和'<<zoom-height>>'。注意：3.6.3 版本之前的（全局）自定义设置将不会影响 3.6.3 版本后按键集特定的自定义设置，反之亦然。初始补丁由 Charles Wohlganger 提交。

- bpo-31206: IDLE: 从ConfigDialog中提取HighPage(Frame)类。由Cheryl Sabella提供补丁。

- bpo-31001: 为configdialog高亮标签添加测试。由Cheryl Sabella提供补丁。

- bpo-31205: IDLE：从ConfigDialog中提取KeysPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。

- bpo-31130: IDLE -- 修复test_configdialog中的内存泄漏。初始由Victor Stinner提供补丁。

- bpo-31002: 为configdialog的keys标签页添加测试。由Cheryl Sabella提供补丁。

- bpo-19903: IDLE: Calltips use `inspect.signature` instead of `inspect.getfullargspec`. This improves calltips for builtins converted to use Argument Clinic. Patch by Louie Lu.

- bpo-31083: IDLE - 在configdialog中添加TabPage类的概要。更新现有类以匹配概要。初始补丁由Cheryl Sabella提供。

- bpo-31050: 从ConfigDialog中提取GenPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。

- bpo-31004: IDLE - 从ConfigDialog中提取FontPage(Frame)类。经过轻微修改的测试仍然通过。修复通用测试。补丁主要由Cheryl Sabella提供。

- bpo-30781: IDLE - 在ConfigDialog中使用ttk部件。由Terry Jan Reedy和Cheryl Sabella提供补丁。

- bpo-31060: IDLE - 完成ConfigDialog中方法的重新排列。将与每个标签页和按钮相关的方法分组有助于编写测试和改进标签页，并将使这些组能够分割成类。

- bpo-30853: IDLE -- 从ConfigDialog中提取VarTrace类。实例跟踪器管理由tk变量和回调函数组成的对。当跟踪开启时，设置变量会调用函数。新类的测试覆盖率为100%。

- bpo-31003: IDLE：为通用标签页添加更多测试。

- bpo-30993: IDLE - 改进配置对话框字体页面及测试。在配置对话框中：在create_font_tab文档字符串中记录因果路径。简化一些属性名称。将set_samples调用移至var_changed_font（来自Cheryl Sabella的想法）。将相关函数移动到创建小部件函数之后的位置。在test_configdialog中：修复test_font_set使其不依赖于顺序。修复重命名的test_indent_scale以测试小部件。调整测试以适应set_samples调用的移动。为加载函数添加测试。将所有字体测试放在一个类中，将标签缩进测试放在另一个类中。除了两行代码外，这些测试完全覆盖了相关函数。

- bpo-30981: IDLE -- 为配置对话框字体页面添加更多测试。

- bpo-28523: IDLE：在配置对话框中将'colour'替换为'color'。

- bpo-30917: 为idlelib.config.IdleConf添加测试。将覆盖率从46%提高到96%。由Louie Lu提供补丁。

- bpo-30934: 记录idlelib测试的覆盖率详情。在idlelib/idle-test/README.txt中添加部分内容。包括检查分支是否双向执行。排除在单元测试期间不运行的IDLE特定代码。

- bpo-30913: IDLE：在文档字符串中记录ConfigDialog的tk变量、方法和部件。这将有助于改进对话框和分割类。原始由Cheryl Sabella提供补丁。

- bpo-30899: IDLE：为config中的ConfigParser子类添加测试。由Louie Lu提供补丁。

- bpo-30881: IDLE：为browser.py添加文档字符串。由Cheryl Sabella提供补丁。

- bpo-30851: IDLE：移除configdialog中未使用的变量。一个是重复的，一个是设置但用户无法更改的。由Cheryl Sabella提供补丁。

- bpo-30870: IDLE：在设置对话框中，使用上下键以及鼠标选择字体。初始由Louie Lu提供补丁。

- bpo-8231: IDLE：仅调用config.IdleConf.GetUserCfgDir一次。

- bpo-30779: IDLE：从configdialog中提取ConfigChanges类，放入config；测试。* 在config中，将转储测试代码放入一个函数；运行它和'unittest'在'if __name__ == '__main__'中。* 基于bpo问题上的changes_class_v4.py添加config.ConfigChanges类。* 添加test_config.ChangesTest类，部分使用configdialog_tests_v1.py。* 修改configdialog以使用ConfigChanges；参见tracker msg297804。* 修改test_configdialog以匹配configdialog的更改。* 移除未使用或已移至ConfigChanges的configdialog函数。Cheryl Sabella贡献了部分补丁。

- bpo-30777: IDLE：configdialog - 添加文档字符串并修复注释。由Cheryl Sabella提供补丁。

- bpo-30495: IDLE：通过添加文档字符串、PEP8命名和更多测试来改进textview。由Cheryl Sabella提供补丁。

- bpo-30723: IDLE：对parenmatch进行多项改进。添加'parens'风格以同时高亮开启和关闭符号。使'default'风格（非默认）成为'opener'的同义词。使时间延迟在所有风格中工作方式相同。为配置对话框扩展标签添加帮助，包括parenmatch的帮助。添加新测试。原始补丁由Charles Wohlganger提供。

- bpo-30674: IDLE：向grep模块添加文档字符串。由Cheryl Sabella提供补丁。

- bpo-21519: IDLE的基本自定义键输入对话框现在能正确检测重复项。原始由Saimadhav Heblikar提供补丁。

- bpo-29910: IDLE不再通过快捷键注释掉一个区域后删除一个字符。为此添加 ``return 'break'``以及IDLE和默认键绑定之间的其他潜在冲突。

- bpo-30728: 审查并更改idlelib.configdialog的名称。将方法和属性名称小写。将'colour'替换为'color'，扩展过于隐晦的名称，删除不需要的下划线。用特定的导入替换 `import *`。由Cheryl Sabella提供补丁。

- bpo-6739: IDLE：通过尝试用tk绑定用户输入的键序列来验证它们。为所有3个验证函数添加测试。原始由G Polo提供补丁。测试由Cheryl Sabella添加。

### 工具/示例

- bpo-30983: gdb集成命令（py-bt等）现在也可以在优化的共享构建上工作了。PEP 523 引入了_PyEval_EvalFrameDefault，它在非调试共享构建上内联了PyEval_EvalFrameEx。这破坏了使用py-bt、py-up和其他一些Python特定的gdb集成的能力。问题通过在python-gdb.py中仅查找_PyEval_EvalFrameDefault帧来修复。原始由Bruno "Polaco" Penteado提供补丁。

## Python 3.6.2 正式版

发布日期: 2017-07-17

自rc2起没有更改

## Python 3.6.2 rc2

发布日期: 2017-07-07

### 安全性

- bpo-30730: 在 Windows 上防止子进程中的环境变量注入。防止传递其他环境变量和命令参数。

- bpo-30694: Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes of multiple security vulnerabilities including: CVE-2017-9233 (External entity infinite loop DoS), CVE-2016-9063 (Integer overflow, re-fix), CVE-2016-0718 (Fix regression bugs from 2.2.0's fix to CVE-2016-0718) and CVE-2012-0876 (Counter hash flooding with SipHash). Note: the CVE-2016-5300 (Use os-specific entropy sources like getrandom) doesn't impact Python, since Python already gets entropy from the OS to set the expat secret using `XML_SetHashSalt()`.

- bpo-30500: 修复 urllib.parse.splithost() 正确解析片段。例如，`splithost('//127.0.0.1#@evil.com/')` 现在正确返回 `127.0.0.1` 主机，而不是将 `@evil.com` 视为认证中的主机（`login@host`）。

## Python 3.6.2 rc1

发布日期: 2017-06-17

### 安全性

- bpo-29591: Update expat copy from 2.1.1 to 2.2.0 to get fixes of CVE-2016-0718 and CVE-2016-4472. See https://sourceforge.net/p/expat/bugs/537/ for more information.

### 核心与内置函数

- bpo-30682: 移除了对某些 f-字符串过于严格的断言，例如 eval("f'\n'") 和 eval("f'\r'")。

- bpo-30604: 将co_extra_freefuncs移动到非每线程以避免崩溃

- bpo-29104: 修复了 f-字符串中反斜杠的解析。

- bpo-27945: 修复了在搜索、插入或比较过程中输入集合被修改时，字典的各种段错误。基于 Duane Griffin 和 Tim Mitchell 的补丁。

- bpo-25794: 修复了 type.__setattr__() 和 type.__delattr__() 对于非 interned 属性名称的问题。基于 Eryk Sun 的补丁。

- bpo-30039: 如果解释器在恢复一系列嵌套的 'yield from' 或 'await' 调用过程中发生 KeyboardInterrupt，现在会正确地传递到最内层的帧。

- bpo-12414: sys.getsizeof() on a code object now returns the sizes which includes the code struct and sizes of objects which it references. Patch by Dong-hee Na.

- bpo-29949: 修复了 set 和 frozenset 对象的内存使用回归问题。

- bpo-29935: 修复了在传递错误类型的索引时，tuple、list 和 deque 的 index() 方法中的错误消息。

- bpo-29859: 当 thread_pthread.h 中的任何 pthread_* 调用失败时，显示正确的错误消息。

- bpo-28876: 即使 `len(range)` 引发 `OverflowError`，`bool(range)` 也能正常工作。

- bpo-29600: 修复在StopIteration中包装协程返回值的问题。

- bpo-28856: 修复了一个疏忽，即 %b 格式的字节应支持遵循缓冲区协议的对象。

- bpo-29714: 修复了一个回归问题，即当包含零字节时，字节格式可能会失败。

- bpo-29478: 在使用Compat32策略时，如果指定了max_line_length=None，它将不再被忽略。补丁由Mircea Cosbuc提供。

### 库

- bpo-30616: Functional API of enum allows to create empty enums. Patched by Dong-hee Na

- bpo-30038: 修复了信号传递和唤醒文件描述符之间的竞争条件。补丁由 Nathaniel Smith 提供。

- bpo-23894: lib2to3 现在能识别 `rb'...'` 和 `f'...'` 字符串。

- bpo-23890: unittest.TestCase.assertRaises() 现在手动打破引用循环，以避免对象存活时间超过预期。

- bpo-30149: inspect.signature() now supports callables with variable-argument parameters wrapped with partialmethod. Patch by Dong-hee Na.

- bpo-30645: 修复imp.load_package()中的路径计算，修复仅随字节码一起提供包的情况。由Alexandru Ardelean提供补丁。

- bpo-29931: 修复了 ipaddress.ip_interface 对象的比较检查。补丁由 Sanjay Sundaresan 提供。

- bpo-30605: re.compile() 在编译带有错误放置的内联修饰符的 bytes 实例时不再引发 BytesWarning。由 Roy Williams 提供补丁。

- bpo-24484: 避免多进程清理中的竞争条件（#2159）

- bpo-28994: 对于由 atexit 注册的回调中引发的 SystemExit，不再显示回溯。

- bpo-30508: 如果调用了 Task/Future 的 "cancel()" 方法，则不记录异常。

- bpo-28556: typing 模块的更新：添加通用的 AsyncContextManager，为所有版本添加对 ContextManager 的支持。原始 PR 由 Jelle Zijlstra 和 Ivan Levkivskyi 提供。

- bpo-29870: 修复 asyncio/ssl 实现中当连接被中止时 SSL 套接字的泄漏问题。由 Michaël Sghaïer 提供补丁。

- bpo-29743: 在握手过程中关闭传输会导致打开的套接字泄漏。由 Nikolay Kim 提供补丁。

- bpo-27585: 修复 asyncio.Lock 中的等待者取消问题。由 Mathieu Sornay 提供补丁。

- bpo-30418: 在 Windows 上，如果子进程仍在运行但关闭了管道，subprocess.Popen.communicate() 现在也会忽略 stdin.write() 上的 EINVAL。

- bpo-29822: inspect.isabstract()现在在__init_subclass__期间工作。补丁由Nate Soares提供。

- bpo-29581: ABCMeta.__new__现在接受 `**kwargs`，允许抽象基类在__init_subclass__中使用关键字参数。由Nate Soares提供补丁。

- bpo-30557: faulthandler 现在能够正确过滤和显示 Windows 上的异常代码。

- bpo-30378: 修复 logging.handlers.SysLogHandler 无法处理 IPv6 地址的问题。

- bpo-29960: 当_random.Random.setstate()引发异常时，保留生成器状态。补丁由Bryan Olson提供。

- bpo-30414: multiprocessing.Queue._feed 后台运行线程在异常时不从主循环中中断。

- bpo-30003: 修复HZ编解码器中转义字符的处理。基于Ma Lin的补丁。

- bpo-30301: 修复在 spawn 和 forkserver 启动方法下使用SimpleQueue.empty()时的AttributeError。

- bpo-30329: imaplib和poplib现在在shutdown(SHUT_RDWR)时捕获Windows socket WSAEINVAL错误（代码10022）：尝试了无效操作。此错误有时发生在SSL连接上。

- bpo-30375: 编译正则表达式时发出的警告现在总是指向用户代码中的行。之前如果从组或条件内部发出，它们可能指向re模块的内部。

- bpo-30048: 修复了当任务运行协程且协程返回而没有任何更多 `await` 时，``Task.cancel()``可能被忽略的问题。

- bpo-30266: contextlib.AbstractContextManager现在支持通过设置__enter__ = None或__exit__ = None进行反注册，遵循 bpo-25958 中引入的模式。由Jelle Zijlstra提供补丁。

- bpo-30298: 放宽内联修饰符的弃用警告条件。现在允许在模式开始处连续使用多个内联修饰符（例如 `'(?i)(?s)...'`）。在详细模式下，现在允许在内联修饰符之前和之间使用空格和注释（例如 `'(?x) (?i) (?s)...'`）。

- bpo-29990: 修复GB18030解码器中的范围检查。原由Ma Lin提供补丁。

- bpo-26293: 由于zipfile损坏导致的变更。（另见：bpo-29094）

- bpo-30243: 移除了_json的扫描器和编码器的__init__方法。误用它们可能导致内存泄漏或崩溃。现在扫描器和编码器对象在__new__方法中完全初始化。

- bpo-30185: 在收到Ctrl-C时，避免forkserver辅助进程中的KeyboardInterrupt回溯。

- bpo-28556: 对typing模块的各种更新：添加typing.NoReturn类型，使用WrapperDescriptorType，小错误修复。原PR由Jim Fasarakis-Hilliard和Ivan Levkivskyi提供。

- bpo-30205: 修复Linux上未绑定的AF_UNIX套接字的getsockname()。

- bpo-30070: 修复了解析模块中错误处理的内存泄漏和崩溃问题。

- bpo-30061: 修复了当readline()或__next__()分别返回不可大小化的对象时，IOBase方法__next__()和readlines()中的崩溃。修复了由不检查PyObject_Size()、PySequence_Size()或PyMapping_Size()的结果可能引起的其他错误。

- bpo-30017: 允许多次调用zip条目写入器对象的close()方法。向已关闭的写入器写入现在总是产生ValueError。

- bpo-30068: 当存在hint时，_io._IOBase.readlines将首先检查是否关闭。

- bpo-29694: 修复了pathlib mkdir与flags parents=True时的竞争条件。补丁由Armin Rigo提供。

- bpo-29692: 修复了contextlib.contextmanager中RuntimeError异常的任意解链。由Siddharth Velankar提供补丁。

- bpo-29998: Pickling和复制ImportError现在保留name和path属性。

- bpo-29953: 修复了当传递超出范围的 fold 参数时，datetime 和 time 对象的 replace() 方法中的内存泄漏问题。

- bpo-29942: 修复了在遇到长串空可迭代对象时，itertools.chain.from_iterable 的崩溃问题。

- bpo-27863: 修复了由竞争条件和错误类型引起的 ElementTree 中的多个崩溃问题。

- bpo-28699: 修复了 multiprocessing.pool 中池的一个 bug，即在可迭代对象的最开始引发异常可能会吞掉异常或使程序挂起。由 Davin Potts 和 Xiang Zhang 提供补丁。

- bpo-25803: 当操作系统优先考虑如 EACCES 而不是 EEXIST 的错误时，避免 Path.mkdir(exist_ok=True) 引发不正确的错误。

- bpo-29861: 在 multiprocessing.Pool 中，任务、它们的参数和结果一旦完成就释放引用。

- bpo-29884: faulthandler: 在拆卸期间恢复旧的sigaltstack。由Christophe Zeitouny提供补丁。

- bpo-25455: 修复了递归缓冲文件类对象repr中的崩溃。

- bpo-29800: 修复了如果partial.keywords的键不是字符串时partial.__repr__的崩溃。由Michael Seifert提供补丁。

- bpo-29742: 如果 get_extra_info() 在关闭的 ssl 传输上调用，将引发异常。由 Nikolay Kim 提供补丁。

- bpo-8256: 修复了如果sys.stdin或sys.stdout的属性"encoding"或"errors"未设置或不是字符串时可能导致的input()失败或崩溃。

- bpo-28298: 修复了一个bug，该bug阻止了数组'Q'、'L'和'I'接受大整数（具有__int__方法的对象）作为元素。由Oren Milman提供补丁。

- bpo-28231: zipfile模块现在接受路径类对象作为外部路径。

- bpo-26915: collections.abc.Sequence的index()和count()方法在进行比较时现在在检查相等性之前检查身份。

- bpo-29615: SimpleXMLRPCDispatcher 不再将 KeyError（或任何其他异常）链接到调度方法中引发的异常。由 Petr Motejlek 提供补丁。

- bpo-30177: path.resolve(strict=False)不再在文件系统中不存在的第一个元素后截断路径。补丁由Antoine Pietri提供。

### IDLE

- bpo-15786: 修复IDLE自动完成框的几个问题。现在以下功能应该可以正常工作：点击选择框中的项目；使用滚动条；通过按回车键选择项目。MacOSX上的挂起问题应该不会再发生。补丁由Louie Lu提供。

- bpo-25514: 添加关于IDLE启动失败的文档子节。无连接弹出消息会引导用户查看此部分。

- bpo-30642: 修复IDLE测试中的引用泄露。由Louie Lu和Terry Jan Reedy提供补丁。

- bpo-30495: 为textview.py添加文档字符串并使用PEP8命名。由Cheryl Sabella和Terry Jan Reedy提供补丁。

- bpo-30290: 帮助-关于：使用pep8命名并添加测试。将覆盖率提高到100%。由Louie Lu、Cheryl Sabella和Terry Jan Reedy提供补丁。

- bpo-30303: 向textview添加_utest选项；添加新测试。将覆盖率提高到100%。由Louie Lu和Terry Jan Reedy提供补丁。

### C API

- bpo-27867: 如果未设置Py_LIMITED_API，函数PySlice_GetIndicesEx()不再被宏替换。

### 构建

- bpo-29941: 添加 `--with-assertions` 配置标志以明确启用C `assert()` 检查。默认为关闭。`--with-pydebug``意味着 ``--with-assertions`。

- bpo-28787: 修复使用 `--with--dtrace` 配置时Python的树外构建。

- bpo-29243: 在配置为 `--enable-optimizations` 时，防止在 `make test`、``make install``和一些其他make目标期间不必要的Python重新构建。

- bpo-23404: 不再基于文件修改时间重新生成已生成的文件：该操作现在是显式的。用``make regen-all``替换 `make touch`。

- bpo-29643: 修复 `--enable-optimization` 不起作用的问题。

### 文档

- bpo-30176: 在curses文档中添加缺失的属性相关常量。

- bpo-30052: `bytes()` 和 `bytearray()` 的链接目标现在是它们各自的类型定义，而不是相应的内置函数条目。使用 bytes 和 bytearray 来引用后者。为了确保这一及未来的交叉引用更新能自动应用，每日文档构建现在禁用了Sphinx中的默认输出缓存功能。

- bpo-26985: 在inspect文档中添加缺失的代码对象信息。

### 工具/示例

- bpo-29367: python-gdb.py现在也支持 `method-wrapper` (`wrapperobject`) 对象。

### 测试

- bpo-30357: test_thread: setUp() 现在使用 support.threading_setup() 和 support.threading_cleanup() 来等待线程完成，以避免对后续测试产生随机副作用。初始补丁由 Grzegorz Grzywacz 编写。

- bpo-30197: 增强了 test.support 模块中的 swap_attr() 和 swap_item() 函数。它们现在可以在 with 语句内部删除替换的属性或项目时工作。属性或项目的旧值（如果不存在则为 None）现在将被赋值给 "as" 子句的目标，如果有的话。

### Windows

- bpo-30687: 在Windows上构建时定位msbuild.exe而不是vcvarsall.bat。

- bpo-30450: Windows 上的构建过程不再依赖于 Subversion，而是通过 Python 脚本从 GitHub 拉取外部代码。如果系统中未找到 Python 3.6（通过 `py -3.6`），则使用 NuGet 下载 32 位 Python 的副本。

## Python 3.6.1 正式版

发布日期: 2017-03-21

### 核心与内置函数

- bpo-29723: bpo-29139 中对 `sys.path[0]` 初始化的更改导致了一个回归问题，暴露了在执行来自 zip 文件、目录或其他导入位置的 `__main__` 时 `sys.path` 初始化方式的不一致性。解释器现在一致避免将导入位置的父目录添加到 `sys.path` 中，并确保在插入命令行中指定的导入位置时不会无意中修改其他 `sys.path` 条目。

### 构建

- bpo-27593: 修复了sys.version中使用的git信息格式。

- 修复python.h中不兼容的注释。

## Python 3.6.1 rc1

发布日期: 2017-03-04

### 核心与内置函数

- bpo-28893: 为从 __aiter__ 和 __anext__ 返回的无效可等待对象引发的错误设置了正确的 __cause__。

- bpo-29683: 修复了 _PyCode_SetExtra 中的内存分配问题。由 Brian Coleman 提供补丁。

- bpo-29684: 修复了 PyEval_CallObjectWithKeywords 的一个小回归问题。当 kwargs 不是字典时，它应该引发 TypeError。但当 args=NULL 且 kwargs 不是字典时，可能会导致段错误。

- bpo-28598: 支持在调用 str.__mod__ 之前调用 str 子类的 __rmod__。由 Martijn Pieters 提供补丁。

- bpo-29607: 修复了 CALL_FUNCTION_EX 的 stack_effect 计算。补丁由 Matthieu Dartiailh 提供。

- bpo-29602: 修复了在复杂子类的构造函数和具有 __complex__ 方法的输入中对有符号零的错误处理。由 Serhiy Storchaka 提供补丁。

- bpo-29347: 修复了在创建弱引用对象时可能解引用未定义指针的问题。

- bpo-29438: 修复了key sharing dict中的use-after-free问题。

- bpo-29319: 防止RunMainFromImporter覆盖sys.path[0]。

- bpo-29337: 修复了比较代码对象时可能出现的BytesWarning。警告可能在编译时发出。

- bpo-29327: 修复了将可迭代关键字参数传递给sorted()时崩溃的问题。

- bpo-29034: 修复了os模块(path_converter)中的内存泄漏和use-after-free问题。

- bpo-29159: 修复了当x.__index__()引发异常时bytes(x)的回归问题。

- bpo-28932: 如果不存在<sys/random.h>，则不包含它。

- bpo-25677: 修正了缩进块语法错误提示符的位置。基于Michael Layzell的补丁。

- bpo-29000: 修复了八进制数在交替形式下零填充的bytes格式化。

- bpo-26919: 在Android上，操作系统数据现在总是以UTF-8编码/解码，而不是使用区域设置编码，以避免与已经使用UTF-8的os.fsencode()和os.fsdecode()不一致。

- bpo-28991: functools.lru_cache()容易受到一个由猴子补丁len()函数触发的晦涩的重入错误的影响。

- bpo-28739: f字符串表达式不再被接受为文档字符串和由ast.literal_eval()处理，即使它们不包含表达式。

- bpo-28512: 修复了通过PyErr_SyntaxLocationEx()和PyErr_SyntaxLocationObject()设置SyntaxError的offset属性。

- bpo-28918: 修复了当Python使用Py_DEBUG定义构建时，xxlimited的交叉编译问题。

- bpo-28731: 优化_PyDict_NewPresized()以创建正确大小的字典。将具有常量键的字典字面量的速度提高至30%。

### 库

- bpo-29169: 将 zlib 更新至 1.2.11。

- bpo-29623: 允许在 ConfigParser.read() 中使用路径类对象作为单一参数。由 David Ellis 提供补丁。

- bpo-28963: 修复了在 C 中实现的 asyncio.Future.remove_done_callback 中的越界迭代。

- bpo-29704: asyncio.subprocess.SubprocessStreamProtocol 在所有管道关闭之前不再关闭。

- bpo-29271: 修复 Task.current_task 和 Task.all_tasks 在 C 中的实现，使其能够接受 None 参数，如同它们的纯 Python 实现一样。

- bpo-29703: 修复 asyncio，支持在子进程中实例化新的事件循环。

- bpo-29376: 修复 threading._DummyThread.is_alive() 中的断言错误。

- bpo-28624: 添加一个测试，检查 Popen() 的 cwd 参数是否接受 PathLike 对象。由 Sayan Chowdhury 提供补丁。

- bpo-28518: 在 DML 语句之前隐式开始一个事务。由 Aviv Palivoda 提供补丁。

- bpo-29532: 修改传递给 functools.partial() 的 kwarg 字典不再影响创建后的 partial 对象。

- bpo-29110: 修复 aifc.open() 中当文件作为文件系统路径给出且不是有效的 AIFF 格式时的文件对象泄漏问题。由 Anthony Zhang 提供补丁。

- bpo-28556: 对 typing 模块进行了多项更新：typing.Counter、typing.ChainMap、改进的 ABC 缓存等。原始 PR 由 Jelle Zijlstra、Ivan Levkivskyi、Manuel Krebber 和 Łukasz Langa 提供。

- bpo-29100: 修复了 Python 3.6.0 中引入的 datetime.fromtimestamp() 的回归问题：检查最小和最大年份。

- bpo-29519: 修复了在与multiprocessing和自定义编解码器的罕见组合使用时，weakref在解释器关闭期间抛出异常的问题。

- bpo-29416: 防止 pathlib.Path.mkdir 中的无限循环。

- bpo-29444: 修复了 match 对象的 group() 方法中的越界缓冲区访问。基于 WGH 的补丁。

- bpo-29335: 修复了当子进程已退出到停止状态而不是终止状态（例如：在 ptrace 下）时的 subprocess.Popen.wait()。

- bpo-29290: 修复了 argparse 中帮助消息会在非断行空格处换行的回归问题。

- bpo-28735: 修复了 mock.MagickMock 与 mock.ANY 的比较。

- bpo-29316: 恢复typing模块的临时状态，向文档添加相应说明。由Ivan L.提供补丁。

- bpo-29219: 修复了未初始化的 ctypes.CDLL 实例的 repr 中的无限递归。

- bpo-29011: 通过向typing模块添加Deque来修复一个重要的遗漏。

- bpo-28969: 修复了functools.lru_cache的C实现中的竞态条件。当缓存函数满时，如果同时从不同线程以相同的未缓存参数调用，可能会引发KeyError。

- bpo-29142: 在urllib.request中，no_proxy环境变量中带有前导点的后缀可以再次匹配相关的主机名（例如.b.c匹配a.b.c）。由Milan Oberkirch提供补丁。

- bpo-28961: 修复unittest.mock._Call辅助函数：不再忽略name参数。由Jiajun Huang提供补丁。

- bpo-29203: functools.lru_cache()现在尊重 PEP 468 并保留关键字参数的顺序。f(a=1, b=2)现在与f(b=2, a=1)分开缓存，因为这两个调用可能产生不同的结果。

- bpo-15812: inspect.getframeinfo()现在正确显示上下文的第行。由Sam Breese提供补丁。

- bpo-29094: 使用外部文件对象和模式"w"和"x"创建的ZIP文件中的偏移量现在相对于文件的开始位置。

- bpo-29085: 允许random.Random.seed()使用高质量的OS随机性，而不是pid和时间。

- bpo-29061: 修复了secrets.randbelow()中的一个bug，该bug在给定负输入时会挂起。由Brendan Donegan提供补丁。

- bpo-29079: 防止pathlib.resolve()在Windows上陷入无限循环。

- bpo-13051: 修复了大型或调整大小的curses.textpad.Textbox中的递归错误。基于Tycho Andersen的补丁。

- bpo-29119: 修复collections.OrderedDict move_to_end()方法的纯Python版本中的weakrefs。由Andra Bogildea贡献。

- bpo-9770: curses.ascii谓词现在正确处理负整数。

- bpo-28427: 当从另一个线程收集时，旧键不应从WeakValueDictionary中移除新值。

- bpo-28923: 从Tix.py中移除编辑器工件。

- bpo-29055: 通过抑制上游异常，清理了random.choice()上的空种群错误。

- bpo-28871: 修复了在深度ElementTree释放时的崩溃。

- bpo-19542: 修复WeakValueDictionary.setdefault()和WeakValueDictionary.pop()中的bug，这些bug在另一个线程发生GC收集时出现。

- bpo-20191: 修复了resource.prlimit()中的崩溃，当传递一个不拥有其元素的序列作为限制时。

- bpo-28779: 如果预加载的模块实例化了某些多处理对象（如锁），multiprocessing.set_forkserver_preload()会使forkserver进程崩溃。

- bpo-28847: dbm.dumb现在支持读取只读文件，并且在索引文件未更改时不再写入索引文件。

- bpo-26937: tarfile.TarFile 类的 chown() 方法现在在无法导入 grp 模块时不会失败，例如在 Android 平台上。

### IDLE

- bpo-29071: IDLE为f-字符串前缀着色（但不包括无效的ur前缀）。

- bpo-28572: 将IDLE的test_configdialog覆盖率提高10%。更新并增强配置系统的描述。

### Windows

- bpo-29579: 从安装程序中移除readme.txt

- bpo-29326: 忽略._pth文件中的空行（由Alexey Izbyshev提供补丁）

- bpo-28164: 正确处理特殊的控制台文件名（由Eryk Sun提供补丁）

- bpo-29409: 为 io.FileIO 实现 PEP 529 (由 Eryk Sun 提供的补丁)

- bpo-29392: 防止将无效参数传递到 msvcrt 模块时崩溃。

- bpo-25778: winreg 未正确截断字符串（由 Eryk Sun 提供补丁）

- bpo-28896: 弃用 WindowsRegistryFinder 并默认禁用它。

### C API

- bpo-27867: 如果未设置 Py_LIMITED_API 或其值设置在 0x03050400 和 0x03060000（不包括）之间或 0x03060100 或更高，则函数 PySlice_GetIndicesEx() 将被宏替换。

- bpo-29083: 修正了一些公共API函数的声明。PyArg_VaParse()和PyArg_VaParseTupleAndKeywords()在有限API中不可用。当定义了PY_SSIZE_T_CLEAN时，PyArg_ValidateKeywordArguments()、PyArg_UnpackTuple()和Py_BuildValue()在版本<3.3的有限API中不可用。

- bpo-29058: 所有在 Python 3.2 之后添加的稳定 API 扩展现在只有在 Py_LIMITED_API 设置为支持此 API 的最低 Python 版本的 PY_VERSION_HEX 值时才可用。

### 文档

- bpo-28929: 将文档链接到其在GitHub上的源文件。

- bpo-25008: 将smtpd.py文档标记为实际上已弃用，并添加指向aiosmtpd的指针，这是一个基于asyncio的第三方替代品。

- bpo-26355: 在每个页面上添加指向相应主要版本文档的规范头部链接。由Matthias Bussonnier提供补丁。

- bpo-29349: 修复构建文档代码中的Python 2语法。

### 测试

- bpo-28087: 在 macOS 上跳过 test_asyncore 和 test_eintr 的 poll 失败。由于某些 macOS 版本上底层系统 poll 函数的未解决问题，在 macOS 上运行时跳过 select.poll 的一些测试。

- bpo-29571: 为了匹配 `re.LOCALE` 标志的行为，test_re.test_locale_flag 现在使用 `locale.getpreferredencoding(False)` 来确定测试正则表达式的候选编码（允许它在默认区域编码是多字节编码时正确跳过测试）

- bpo-28950: 在 regrtest 命令行参数中禁止将 -j0 与 -T/-l 结合使用。

- bpo-28683: 修复在Android上为非root用户绑定Unix socket并引发PermissionError的测试。

- bpo-26939: 添加support.setswitchinterval()函数以修复在Android armv7 qemu模拟器上挂起的test_functools。

### 构建

- bpo-27593: 当从仓库构建时，sys.version和platform模块的python_build()、python_branch()和python_revision()函数现在使用git信息而不是hg。

- bpo-29572: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2k。

- bpo-26851: 设置Android编译和链接标志。

- bpo-28768: 修复函数_setmode的隐式声明。由Masayuki Yamamoto提供补丁

- bpo-29080: 从PCBuild/build.bat中移除对hg.exe的硬依赖

- bpo-23903: 向PC/python3.def添加遗漏的名称。

- bpo-28762: lockf()在Android API level 24上可用，但F_LOCK宏在android-ndk-r13中未定义。

- bpo-28538: 修复因if_nameindex()在Android API level 24上可用但if_nameindex结构未定义而导致的编译错误。

- bpo-20211: 不要将安装C头文件的目录和安装对象代码库的目录添加到交叉编译搜索路径中。原始由Thomas Petazzoni提供补丁。

- bpo-28849: 不要在Android上定义sys.implementation._multiarch。

## Python 3.6.0 正式版

发布日期: 2016-12-23

自rc2起没有更改

## Python 3.6.0 rc2

发布日期: 2016-12-16

### 核心与内置函数

- bpo-28147: 修复了分割表字典中的内存泄漏：setattr()不能将合并表转换为分割表。补丁由INADA Naoki编写。

- bpo-28990: 修复 asyncio SSL 在握手完成前连接关闭时的挂起问题。（由 HoHo-Ho 提供的补丁）

### 工具/示例

- bpo-28770: 修复 python-gdb.py 以支持 fastcalls。

### Windows

- bpo-28896: 弃用 WindowsRegistryFinder。

### 构建

- bpo-28898: 防止由于 HAVE_LONG_LONG 重定义导致的 gdb 构建错误。

## Python 3.6.0 rc1

发布日期: 2016-12-06

### 核心与内置函数

- bpo-23722: 而不是无声地产生一个不支持方法中零参数 `super()` 的类，未能将新的``__classcell__``命名空间条目传递给 `type.__new__` 现在会导致一个 `DeprecationWarning` 和一个支持零参数 `super()` 的类。

- bpo-28797: 修改类__dict__在一个描述符的__set_name__方法内部，该描述符在那个类内部使用，不再阻止调用其他描述符的__set_name__方法。

- bpo-28782: 修复了在检查下一条指令是否为YIELD_FROM时 `yield from` 实现中的一个错误。由WORDCODE(bpo-26647)引入的回归问题。

### 库

- bpo-27030: 再次允许 re.sub() 替换模板中的未知转义。但它们仍然被弃用，并将在 3.7 中禁用。

- bpo-28835: 修复了 warnings.catch_warnings() 中引入的一个回归问题：如果在上下文管理器内部覆盖了 warnings.showwarning()，则调用它。

- bpo-27172: 为了协助从 2.7 版本升级，之前文档中关于 `inspect.getfullargspec()` 的弃用已被撤销。在 Python 2.7 分支不再官方支持后，可能会重新考虑这一决定。

- bpo-26273: Add new `socket.TCP_CONGESTION` (Linux 2.6.13) and `socket.TCP_USER_TIMEOUT` (Linux 2.6.37) constants. Patch written by Omar Sandoval.

- bpo-24142: 读取损坏的配置文件会使configparser处于无效状态。原始补丁由Florian Höch提供。

- bpo-28843: 修复 asyncio C Task 以处理异常的 __traceback__。

### C API

- bpo-28808: PyUnicode_CompareWithASCIIString() 现在永远不会引发异常。

### 文档

- bpo-23722: 数据模型参考和 What's New 指南中的移植部分现在涵盖了自定义元类为了完全支持 PEP 487 和零参数 `super()` 所需的额外 `__classcell__` 处理。

### 工具/示例

- bpo-28023: 修复python-gdb.py不支持新字典实现的问题。

## Python 3.6.0 beta 4

发布日期: 2016-11-21

### 核心与内置函数

- bpo-28532: 当提供-V选项两次时显示sys.version。

- bpo-27100: with语句现在在检查__exit__之前先检查__enter__。当两种方法都缺失时，这会给出不那么令人困惑的错误信息。由Jonathan Ellington提供补丁。

- bpo-28746: 在没有ioctl FIOCLEX和FIONCLEX命令的平台上修复set_inheritable()文件描述符方法。

- bpo-26920: 在没有langinfo的平台上修复初始化解释器时未获取区域设置的字符集的问题。

- bpo-28648: 修复了在Mac OS X上调试版本中解码星体字符时Py_DecodeLocale()崩溃的问题。补丁由Xiang Zhang提供。

- bpo-19398: 在编译时PYTHONPATH组件为空的情况下，不再向sys.path组件添加额外的斜杠。

- bpo-28665: 将STORE_DEREF操作码的速度提高40%。

- bpo-28583: PyDict_SetDefault在需要时未合并分割表。由Xiang Zhang提供补丁。

- bpo-27243: 将 PendingDeprecationWarning 改为 DeprecationWarning。如问题中达成的共识，__aiter__ 返回一个可等待对象应在 3.5 中导致 PendingDeprecationWarning，在 3.6 中导致 DeprecationWarning。

- bpo-26182: 修复在引发DeprecationWarning的代码中的内存泄漏。

- bpo-28721: 修复异步生成器的aclose()和athrow()以正确处理StopAsyncIteration传播。

### 库

- bpo-28752: 恢复了 datetime 对象的 __reduce__() 方法。

- bpo-28727: 正则表达式模式，由 re.compile() 创建的 _sre.SRE_Pattern 对象，现在可以比较（仅限 x==y 和 x!=y 操作符）。这一更改应该修复了 bpo-18383：当 warnings 模块重新加载时不要重复警告过滤器（通常只在单元测试中这样做）。

- bpo-20572: subprocess.Popen.wait 方法的未记录参数 endtime 现在会引发 DeprecationWarning。

- bpo-25659: 在 ctypes 中，防止在抽象类（如 Array）上调用 from_buffer() 和 from_buffer_copy() 方法时崩溃。

- bpo-19717: 使Path.resolve()在不存在的路径上也能成功。由Vajrasky Kok提供补丁。

- bpo-28563: 修复了在gettext模块中处理复数形式选择时可能导致的DoS和任意代码执行问题。表达式解析器现在支持GNU gettext所支持的精确语法。

- bpo-28387: 修复了当垃圾收集器在其他线程中调用时，_io.TextIOWrapper解构器可能崩溃的问题。基于Sebastian Cufre的补丁。

- bpo-28600: 优化 loop.call_soon。

- bpo-28613: 修复 get_event_loop() 在协程/回调中调用时返回当前循环的问题。

- bpo-28634: 修复 asyncio.isfuture() 以支持 unittest.Mock。

- bpo-26081: 修复 _asyncio.Future.__iter__().throw 中的 refleak。

- bpo-28639: 修复 inspect.isawaitable 始终返回布尔值，由 Justin Mayfield 提供补丁。

- bpo-28652: 使循环方法拒绝它们不支持的套接字类型。

- bpo-28653: 修复 functools.lru_cache 中的 refleak。

- bpo-28703: 修复 asyncio.iscoroutinefunction 以处理 Mock 对象。

- bpo-28704: 修复 create_unix_server 以支持类路径对象 (PEP 519)。

- bpo-28720: 添加 collections.abc.AsyncGenerator。

### 文档

- bpo-28513: 记录了 zipfile 的命令行接口。

### 测试

- bpo-28666: 现在test.support.rmtree能够删除不可写或不可读的目录。

- bpo-23839: 现在在运行每个测试文件之前清除各种缓存。

### 构建

- bpo-10656: 修复AIX上的树外构建。由Tristan Carel和Michael Haubenwallner提供补丁。

- bpo-26359: 将--with-optimiations重命名为--enable-optimizations。

- bpo-28676: 防止在macOS上出现缺失'getentropy'声明的警告。由Gareth Rees提供补丁。

## Python 3.6.0 beta 3

发布日期: 2016-10-31

### 核心与内置函数

- bpo-28128: 无效的str和byte转义序列的弃用警告现在会打印出关于错误发生位置的更好信息。由Serhiy Storchaka和Eric Smith提供补丁。

- bpo-28509: dict.update()不再分配不必要的大内存。

- bpo-28426: 修复了调试版本中PyUnicode_AsDecodedObject()潜在的崩溃问题。

- bpo-28517: 修复了窥孔优化器中的一个偏移错误，该错误导致保留无法到达的代码。

- bpo-28214: 改进了对有问题的 __set_name__ 属性的异常报告。

- bpo-23782: 修复了 _PyTraceback_Add() 中可能的内存泄漏和 PyTraceBack_Here() 中的异常丢失问题。

- bpo-28471: 修复 socket.setblocking 中“Python 内存分配器在未持有 GIL 的情况下被调用”的崩溃问题。

### 库

- bpo-27517: LZMA压缩器和解压器在两次接收到空数据时不再抛出异常。补丁由Benjamin Fogle提供。

- bpo-28549: 修复了curses的addch()在使用ncurses6时的段错误。

- bpo-28449: tarfile.open()以模式"r"或"r:"现在会先尝试以压缩方式打开tar文件，再尝试无压缩方式打开。否则在使用ignore_zeros=True时有50%的几率失败。

- bpo-23262: webbrowser模块现在支持Firefox 36+及衍生浏览器。基于Oleg Broytman的补丁。

- bpo-27939: 修复了tkinter.ttk.LabeledScale和tkinter.Scale中由于在Tk内部将比例表示为浮点值而导致的错误。如果底层Tk变量设置为浮点值，tkinter.IntVar现在可以正常工作。

- bpo-18844: random.choices() 中指定权重的各种方式现在产生相同的结果序列。

- bpo-28255: calendar.TextCalendar().prmonth() 在打印月历后不再在新行的开头打印空格。由 Xiang Zhang 提供补丁。

- bpo-20491: textwrap.TextWrapper 类现在支持不换行空格。基于 Kaarle Ritvanen 的补丁。

- bpo-28353: os.fwalk() 不再因损坏的链接而失败。

- bpo-28430: 修复了 C 实现的 asyncio.Future 迭代器不接受非 None 值传递给 it.send(val) 的问题。

- bpo-27025: 为提升可读性，Tkinter 部件的生成名称现在以 "!" 前缀开头。

- bpo-25464: 通过为 Tix 库的 bug 添加变通方法，修复了 tkinter.tix 模块中的 HList.header_exists()。

- bpo-28488: shutil.make_archive() 不再向 ZIP 归档添加 "./" 条目。

- bpo-25953: re.sub() 现在即使在字符串中未找到模式，也会为替换模板中的无效数字组引用引发错误。无效组引用的错误消息现在包括组索引和引用的位置。基于 SilentGhost 的补丁。

- bpo-18219: 为大量列优化 csv.DictWriter。Mariatta Wijaya 的补丁。

- bpo-28448: 修复了 C 实现的 asyncio.Future 在 Windows 上不工作的问题。

- bpo-28480: 修复在禁用多线程时构建 socket 模块时的错误。

- bpo-24452: 使 webbrowser 支持 Mac OS X 上的 Chrome。

- bpo-20766: 修复了 pdb 在处理 SIGINT 处理器时的引用泄漏问题。

- bpo-28492: 修复 _asyncio.Future 中如何引发 StopIteration 异常。

- bpo-28500: 修复 asyncio 以处理来自另一个线程的异步生成器 GC。

- bpo-26923: 修复 asyncio.Gather 一旦所有子项完成就拒绝被取消的问题。由 Johannes Ebke 提供补丁。

- bpo-26796: 不要为默认的线程池执行器配置工作线程数量。初始由 Hans Lawrenz 提供补丁。

- bpo-28544: 用 C 实现 asyncio.Task。

### Windows

- bpo-28522: 修复 getpathp.c 中错误处理的缓冲区重新分配

### 构建

- bpo-28444: 修复交叉编译时缺少扩展模块的问题。

- bpo-28208: 更新Windows构建和OS X安装程序以使用SQLite 3.14.2。

- bpo-28248: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2j。

### 测试

- bpo-26944: 修复Android上的test_posix，其中'id -G'完全错误或缺少有效的gid。

- bpo-28409: regrtest: 修复命令行参数的解析器。

## Python 3.6.0 beta 2

发布日期: 2016-10-10

### 核心与内置函数

- bpo-28183: 优化并清理了字典迭代。

- bpo-26081: 添加了 asyncio.Future 的 C 实现。原始由 Yury Selivanov 提供补丁。

- bpo-28379: 为 PyUnicode_CopyCharacters() 添加了健全性检查和测试。由 Xiang Zhang 提供补丁。

- bpo-28376: 长范围迭代器的类型现在注册为 Iterator。由 Oren Milman 提供补丁。

- bpo-28376: 现在不推荐通过调用 range_iterator 类型来创建 range_iterator 实例。由 Oren Milman 提供补丁。

- bpo-28376: range_iterator 的构造函数现在检查步长不为 0。由 Oren Milman 提供补丁。

- bpo-26906: 现在解析未初始化类型的特殊方法会导致类型的隐式初始化而不是失败。

- bpo-18287: PyType_Ready() 现在检查 tp_name 是否为 NULL。原始由 Niklas Koep 提供补丁。

- bpo-24098: 修复了在编译过程中 AST 被更改时可能发生的崩溃。

- bpo-28201: 当哈希值具有相同的低位时，字典减少了哈希表中第二次冲突的可能性。

- bpo-28350: 不再对含有空字符的字符串常量进行内部化。

- bpo-26617: 修复了在弱引用回调过程中运行垃圾收集时发生的崩溃。

- bpo-27942: 现在在元组和冻结集合中递归内部化字符串常量。

- bpo-21578: 修复了当 ImportError 使用无效关键字参数调用时误导性的错误消息。

- bpo-28203: 修复了 complex(1.0, {2:3}) 错误消息中的不正确类型。补丁由 Soumya Sharma 提供。

- bpo-28086: 元组子类型的单个可变位置参数现在被转换为确切的元组，而不是原封不动地传递给 C 定义的函数。

- bpo-28214: 现在 __set_name__ 是在类上查找而不是在实例上查找。

- bpo-27955: 当 getrandom() 系统调用因 EPERM 失败时（例如被 SECCOMP 阻止时），回退读取 /dev/urandom 设备。

- bpo-28192: 在隔离模式下不导入readline。

- 升级内部unicode数据库至Unicode 9.0.0版本。

- bpo-28131: 修复zipimport的compile_source()中的回归问题。zipimport应使用与解释器相同的优化级别。

- bpo-28126: 用memcpy()替换Py_MEMCPY。Visual Studio能正确优化memcpy()。

- bpo-28120: Fix dict.pop() for splitted dictionary when trying to remove a "pending key" (Not yet inserted in split-table). Patch by Xiang Zhang.

- bpo-26182: 当async和await关键字被用作变量/属性/类/函数名时，发出DeprecationWarning。

### 库

- bpo-27998: 修复了 Windows 上 os.scandir() 对字节路径的支持。由 Eryk Sun 提供补丁。

- bpo-28317: 反汇编器现在解码 FORMAT_VALUE 参数。

- bpo-26293: 修复了不从文件开头开始写入 ZIP 文件的问题。ZIP 文件中的偏移量现在相对于存档的开始，以符合规范。

- bpo-28380: unittest.mock 的 Mock autospec 函数现在正确支持 assert_called、assert_not_called 和 assert_called_once。

- bpo-27181: 移除 statistics.geometric_mean 并推迟至 3.7 版本。

- bpo-28229: lzma 模块现在支持 pathlib。

- bpo-28321: 修复了在 plistlib 中使用二进制格式写入非 BMP 字符的问题。

- bpo-28225: bz2 模块现在支持 pathlib。初始由 Ethan Furman 提供补丁。

- bpo-28227: gzip 现在支持 pathlib。由 Ethan Furman 提供补丁。

- bpo-27358: 优化了合并可变关键字参数的过程，并改进了当传递非映射作为可变关键字参数时的错误信息。

- bpo-28257: 改进了当传递非可迭代对象作为可变位置参数时的错误信息。添加了操作码 BUILD_TUPLE_UNPACK_WITH_CALL。

- bpo-28322: 修复了当从错误的 pickle 数据反序列化 itertools 对象时可能发生的崩溃。基于 John Leitch 的补丁。

- bpo-28228: imghdr 现在支持 pathlib。

- bpo-28226: compileall 现在支持 pathlib。

- bpo-28314: 修复了 xml.etree.ElementTree.Element 的 getiterator() 方法的函数声明（C 标志）。

- bpo-28148: 停止在 time 模块中使用 localtime() 和 gmtime()。引入了平台无关的 _PyTime_localtime API，该 API 类似于 POSIX 的 localtime_r，但在所有平台上都可用。由 Ed Schouten 提供补丁。

- bpo-28253: 修复了极端月份（0001-01和9999-12）的日历功能。重新实现了itermonthdays()和itermonthdays2()方法，使其不再调用可能导致datetime.date下溢/溢出的itermonthdates()。

- bpo-28275: 修复了LZMADecompressor和BZ2Decompressor类中decompress()方法可能存在的释放后使用问题。原始由John Leitch提供补丁。

- bpo-27897: 修复了如果传递无效的字符串类似对象作为名称时，sqlite3.Connection.create_collation()可能崩溃的问题。由Xiang Zhang提供补丁。

- bpo-18844: random.choices()现在将k作为仅关键字参数，以提高常见情况的可读性，并与其他语言中使用的签名保持一致。

- bpo-18893: 修复了Lib/ctypes/macholib/dyld.py中无效的异常处理。由Madison May提供补丁。

- bpo-27611: 修复了tkinter.tix模块中对默认根窗口的支持。在DisplayStyle构造函数中添加了master参数。

- bpo-27348: 在traceback模块中，恢复了类似于"Exception: None"的异常消息的格式化。这修复了3.5a2中引入的回归问题。

- bpo-25651: Allow falsy values to be used for msg parameter of subTest().

- bpo-27778: 修复了当getrandom()被信号中断且信号处理程序引发Python异常时，os.getrandom()中的内存泄漏问题。

- bpo-28200: 修复了Windows上os模块中的内存泄漏问题（修复了path_converter()函数）。

- bpo-25400: RobotFileParser现在正确返回crawl_delay和request_rate的默认值。初始由Peter Wirtz提供补丁。

- bpo-27932: 防止win32_ver()中的内存泄漏。

- 修复socket._sendfile_use_sendfile中的UnboundLocalError。

- bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。

- bpo-22493: 现在，通过在正则表达式中间使用内联标志发出的警告消息包含（截断的）正则表达式模式。由Tim Graham提供补丁。

- bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。

- bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。

- bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。

- bpo-28114: 修复当env包含字节字符串时parse_envlist()崩溃的问题。由Eryk Sun提供补丁。

- bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。

- bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。

- bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。

- bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。

- bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。

- bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。

- bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。

- bpo-28368: 如果子监视器没有附加循环，则拒绝监视进程。由Vincent Michel提供补丁。

- bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。

- bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。

- bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。

- bpo-28372: 修复asyncio以支持非python协程的格式化。

- bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。

- bpo-27972: 禁止Tasks等待自身。

### Windows

- bpo-28402: 为 Windows 上的标准库添加签名目录文件。

- bpo-28333: 为 ps1/ps2 和 input() 提示启用 Unicode。（由 Eryk Sun 提供补丁）

- bpo-28251: 改进 Windows 上的帮助手册。

- bpo-28110: launcher.msi 在 32 位和 64 位之间有不同的产品代码

- bpo-28161: 以写权限打开 CON 失败

- bpo-28162: 如果第一行以 Ctrl+Z 开头，WindowsConsoleIO readall() 失败

- bpo-28163: WindowsConsoleIO fileno() 将错误的标志传递给 _open_osfhandle

- bpo-28164: 对于各种路径，_PyIO_get_console_type 失败

- bpo-28137: 将 Windows 路径文件重命名为 ._pth

- bpo-28138: Windows ._pth 文件应允许导入站点

### C API

- bpo-28426: 已弃用未记录的函数 PyUnicode_AsEncodedObject()、PyUnicode_AsDecodedObject()、PyUnicode_AsDecodedUnicode() 和 PyUnicode_AsEncodedUnicode()。

### 构建

- bpo-28258: 修复了在爱沙尼亚语言环境下构建的问题（Makefile中的python-config和distclean目标）。由Arfrever Frehtes Taifersar Arahesis提供补丁。

- bpo-26661: setup.py现在可以检测到带有multiarch包装的系统libffi。

- bpo-15819: 移除了为在源码树外构建而冗余的包含搜索目录选项。

### 测试

- bpo-28217: 添加_testconsole模块以测试控制台输入。

## Python 3.6.0 beta 1

发布日期： 2016-09-12

### 核心与内置函数

- bpo-23722: 由零参数 super() 使用的 __class__ 单元现在从 type.__new__ 而不是 __build_class__ 初始化，因此在类创建期间从元类方法调用时，依赖于此的类方法现在将正常工作。由 Martin Teichmann 提供补丁。

- bpo-25221: 当 Python 编译时设置 NSMALLPOSINTS = 0 时，修复 PyLong_FromLong(0) 的损坏结果。

- bpo-27080: 实现 PEP 515 的格式化支持。初始由 Chris Angelico 提供补丁。

- bpo-27199: 在 tarfile 中，公开 copyfileobj 的 bufsize 以提高吞吐量。由 Jason Fried 提供补丁。

- bpo-27948: 在 f-字符串中，仅允许在花括号内（表达式所在处）使用反斜杠。这是与 3.6 alpha 版本的破坏性变更，其中反斜杠允许在 f-字符串的任何地方使用。同时，要求 f-字符串内的表达式必须包围在字面花括号内，而不是像 `f'\x7b"hi"\x7d'` 这样的转义。

- bpo-28046: 从 sys.path 中移除平台特定的目录。

- bpo-28071: 为与空集的差异添加早期退出。

- bpo-25758: 防止 zipimport 不必要地编码文件名（由 Eryk Sun 提供补丁）

- bpo-25856: 扩展类和函数的 __module__ 属性现在被 interned。这导致协议 4 的 pickle 数据更加紧凑。

- bpo-27213: 重做 CALL_FUNCTION* 操作码以产生更短更高效的字节码。补丁由 Demur Rumed 提供，设计由 Serhiy Storchaka 完成，由 Serhiy Storchaka 和 Victor Stinner 审核。

- bpo-26331: 实现 PEP 515 的词法分析支持。由 Georg Brandl 提供补丁。

- bpo-27999: 将“使用后全局”设为 SyntaxError，同样适用于 nonlocal。由 Ivan Levkivskyi 提供补丁。

- bpo-28003: 实现 PEP 525 -- 异步生成器。

- bpo-27985: 实现 PEP 526 -- 变量注解语法。由 Ivan Levkivskyi 提供补丁。

- bpo-26058: 为内置字典类型添加一个新的私有版本，每次字典创建和每次字典更改时递增。PEP 509的实现。

- bpo-27364: 现在，不是一个有效转义序列的反斜杠字符对会生成一个DeprecationWarning。补丁由Emanuel Barry提供。

- bpo-27350: `dict` implementation is changed like PyPy. It is more compact and preserves insertion order. (Concept developed by Raymond Hettinger and patch by Inada Naoki.)

- bpo-27911: 移除 `exec_builtin_or_dynamic()` 中不必要的错误检查。

- bpo-27078: 添加了BUILD_STRING操作码。优化了f-字符串的评估。

- bpo-17884: Python现在要求系统支持inttypes.h和stdint.h。

- bpo-27961: 要求平台支持 `long long`。Python多年来已不再编译不支持 `long long` 的版本，因此这基本上是一个形式上的要求。

- bpo-27355: 移除了对Windows CE的支持。它从未完成，而且Windows CE不再是Python的相关平台。

- 实现 PEP 523。

- bpo-27870: 零的大整数左移不再尝试分配大量内存。

- bpo-25402: 在整数到十进制字符串的转换中，改进了对所需中间内存的估计，并移除了一个不必要的严格溢出检查。由Serhiy Storchaka提供补丁。

- bpo-27214: 在long_invert中，更加小心地修改由long_add返回的对象，并移除了对小long的不必要检查。感谢Oren Milman的分析和补丁。

- bpo-27506: 支持通过关键字传递bytes/bytearray.translate()的"delete"参数。

- bpo-27812: 正确清除生成器帧对生成器的反向引用，以防止frame.clear()中的崩溃。

- bpo-27811: 修复了一个在启用警告即错误时，未等待的协程被最终化时崩溃的问题。

- bpo-27587: 修复了PVS-Studio发现的另一个问题：在_PyState_AddModule()中使用'def'后的空指针检查。初始由Christian Heimes提供补丁。

- bpo-27792: 现在对 `bool` 和其他 `int` 子类应用的模运算总是返回一个 `int`。以前返回类型依赖于输入值。由 Xiang Zhang 提供补丁。

- bpo-26984: int() 现在总是返回一个精确的 int 实例。

- bpo-25604: 修复了整数真除法中的一个次要错误；这个错误可能导致在具有不可靠 ldexp 实现的平台上出现 off-by-one-ulp 结果。

- bpo-24254: 默认情况下，使类定义命名空间有序。

- bpo-27662: 修复了 `List_New` 中的一个溢出检查：原始代码检查的是 `Py_SIZE_MAX` 而不是正确的上限 `Py_SSIZE_T_MAX`。由 Xiang Zhang 提供补丁。

- bpo-27782: 多阶段扩展模块导入现在正确地允许使用 `m_methods` 字段来向 `Py_create_mod` 返回的非模块类型实例添加模块级函数。由 Xiang Zhang 提供补丁。

- bpo-27936: round() 函数对某些类型接受第二个 None 参数，但对其他类型不接受。通过接受所有数值类型的 None 来修复这种不一致性。

- bpo-27487: 如果在导入父包之后但在执行子模块之前，在 sys.modules 中找到了 "python -m" 或 runpy.run_module() 的子模块参数，则发出警告。

- bpo-27157: 使只有 type() 本身接受单参数形式。由 Eryk Sun 和 Emanuel Barry 提供补丁。

- bpo-27558: 修复 "raise" 语句实现中的一个 SystemError。在一个全新的线程中，引发一个 RuntimeError，因为没有活动的异常可以重新引发。补丁由 Xiang Zhang 编写。

- bpo-28008: 实现 PEP 530 -- 异步推导式。

- bpo-27942: 修复 codeobject.c 中的内存泄漏

### 库

- bpo-28732: 修复 os.spawnv() 在 args 中没有元素时的崩溃

- bpo-28485: 对于 compileall.compile_dir(workers=...) 参数的负值，即使多线程不可用，也总是引发 ValueError。

- bpo-28037: 使用 sqlite3_get_autocommit() 而不是手动设置 Connection->inTransaction。

- bpo-25283: 现在，在所有平台上，time.localtime() 和 time.gmtime() 的返回值中都提供了属性 tm_gmtoff 和 tm_zone。

- bpo-24454: 现在可以使用 __getitem__ 访问正则表达式匹配对象组。"mo[x]" 等同于 "mo.group(x)"。

- bpo-10740: sqlite3 不再在 DDL 语句之前隐式提交一个打开的事务。

- bpo-17941: 向 collections.namedtuple() 添加了一个 module 参数。

- bpo-22493: 内联标志现在应该只在正则表达式的开头使用。如果在正则表达式的中间使用它们，则会发出弃用警告。

- bpo-26885: xmlrpc 现在支持解组 Apache XML-RPC 实现用于数字和 None 的附加数据类型。

- bpo-28070: 修复了正则表达式中解析内联详细标志的问题。

- bpo-19500: 向 ssl 模块添加了客户端 SSL 会话恢复功能。

- bpo-28022: 弃用有利于 SSLContext 的 ssl 相关参数。弃用包括在 ftplib、httplib、imaplib、smtplib、poplib 和 urllib 中手动创建 SSLSocket 和 certfile/keyfile（或类似）。

- bpo-28043: SSLContext 改进了默认设置：OP_NO_SSLv2、OP_NO_SSLv3、OP_NO_COMPRESSION、OP_CIPHER_SERVER_PREFERENCE、OP_SINGLE_DH_USE、OP_SINGLE_ECDH_USE 和没有 MD5 的 HIGH 密码。

- bpo-24693: 将 zipfile 模块中的一些 RuntimeError 更改为更合适的类型。改进了一些错误消息和调试输出。

- bpo-17909: `json.load` 和 `json.loads` 现在支持以 UTF-8、UTF-16 或 UTF-32 编码的二进制输入。由 Serhiy Storchaka 提供补丁。

- bpo-27137: `functools.partial` 的纯 Python 回退实现现在在子类化、pickling 和文本表示目的方面与其加速的 C 对应物行为匹配。由 Emanuel Barry 和 Serhiy Storchaka 提供补丁。

- 修复了 mmap 模块中在异常使用模式下可能出现的整数溢出和崩溃问题。

- bpo-1703178: 修复了向distutils的build_ext命令传递--link-objects选项的功能。

- bpo-28019: itertools.count()不再将1.0到2.0之间的非整数步长四舍五入为1。

- bpo-18401: Pdb现在支持'readrc'关键字参数，以控制是否应读取.pdbrc文件。由Martin Matusiak和Sam Kimbrel提供的补丁。

- bpo-25969: 更新lib2to3语法以处理3.5中添加的解包泛化。

- bpo-14977: mailcap现在遵循mailcap文件中的行顺序（“首次匹配”），符合RFC 1542的要求。由Michael Lazar提供的补丁。

- bpo-28082: 将re标志常量转换为IntFlag。

- bpo-28025: 将所有ssl模块常量转换为IntEnum和IntFlags。SSLContext属性现在返回标志和枚举。

- bpo-23591: 向enum模块添加Flag、IntFlag和auto()。

- bpo-433028: 增加了对正则表达式中修饰符跨度的支持。

- bpo-24594: 在打开MSI数据库时验证persist参数。

- bpo-17582: xml.etree.ElementTree现在保留属性中的空白（由Duane Griffin提供补丁。由Stefan Behnel审查和批准。）。

- bpo-28047: 修复了用于新电子邮件策略中base64 CTE的行长度计算。

- bpo-27576: 修复OrderedDict.__init__()中的调用顺序。

- email.generator.DecodedGenerator现在支持policy关键字。

- bpo-28027: 从 `Lib/plat-*` 中移除未记录的模块：IN、CDROM、DLFCN、TYPES、CDIO和STROPTS。

- bpo-27445: 不将str(_charset)传递给MIMEText.set_payload()。由Claude Paroz提供的补丁。

- bpo-24277: 新的电子邮件API不再是临时的，文档已经重新组织和重写以强调新API。

- bpo-22450: urllib现在在默认头中包括一个 `Accept: */*` 头。这使得REST API请求的结果更加一致和可预测，尤其是在涉及代理服务器时。

- lib2to3.pgen3.driver.load_grammar() 现在在相同的Grammar.txt输入下，无论哈希随机化设置如何，都会创建一个稳定的缓存文件。

- bpo-28005: 允许编码实现中的ImportErrors传播。

- bpo-26667: 在importlib.util中支持路径类对象。

- bpo-27570: 在“ctypes”和“array”模块中避免使用空源指针进行零长度memcpy()等调用。

- bpo-22233: 仅在RFC指定的CR和LF字符上断开电子邮件标题行，而不是在任意Unicode换行符上。这也修复了HTTP标题解析中的一个错误。

- bpo-27331: email.mime类现在都接受一个可选的policy关键字。

- bpo-27988: 修复email iter_attachments对payload列表的错误修改。

- bpo-16113: 向hashlib模块添加SHA-3和SHAKE支持。

- 消除_scproxy.c中的一个同义指针比较警告。

- bpo-27776: `os.urandom()` 函数现在在Linux 3.17及更新版本上会阻塞，直到系统urandom熵池初始化以提高安全性。这一变更是 PEP 524 的一部分。

- bpo-27778: 将Linux的 `getrandom()` 系统调用作为一个新的 `os.getrandom()` 函数公开。这一变更是 PEP 524 的一部分。

- bpo-27691: 修复ssl模块对X.509证书中GEN_RID主题替代名字段的解析。

- bpo-18844: 添加random.choices()。

- bpo-25761: 改进了关于C实现解pickler中截断pickle数据的错误报告。在某些情况下，现在会抛出UnpicklingError而不是AttributeError和ValueError。

- bpo-26798: 向hashlib添加BLAKE2（blake2b和blake2s）。

- bpo-26032: 通过使用os.scandir()优化了pathlib中的globing；现在大约快了1.5到4倍。

- bpo-25596: 优化了glob模块中的glob()和iglob()函数；现在大约快了3到6倍。

- bpo-27928: 向hashlib模块添加scrypt（基于密码的密钥派生函数）（需要OpenSSL 1.1.0）。

- bpo-27850: Remove 3DES from ssl module's default cipher list to counter measure sweet32 attack (CVE-2016-2183).

- bpo-27766: 向ssl模块的默认加密列表中添加ChaCha20 Poly1305。（需要OpenSSL 1.1.0或LibreSSL）。

- bpo-25387: 检查winsound.MessageBeep的返回值。

- bpo-27866: 添加SSLContext.get_ciphers()方法以获取所有启用的加密列表。

- bpo-27744: 向socket模块添加AF_ALG（Linux内核加密）。

- bpo-26470: 将ssl和hashlib模块移植到OpenSSL 1.1.0。

- bpo-11620: 修复winsound.PlaySound中对SND_MEMORY的支持。基于Tim Lesher的补丁。

- bpo-11734: 向struct模块添加对IEEE 754半精度浮点数的支持。基于Eli Stevens的补丁。

- bpo-27919: 弃用distutils打包中的 `extra_path` 分发选项。

- bpo-23229: 添加新的 `cmath``常量：``cmath.inf``和 ``cmath.nan` 以匹配 `math.inf` 和``math.nan``，以及 `cmath.infj` 和 `cmath.nanj` 以匹配复数repr使用的格式。

- bpo-27842: csv.DictReader现在返回OrderedDict类型的行。（由Steve Holden贡献。）

- 移除对传递文件描述符给os.access的支持。它从未工作过，但以前不会引发错误。

- bpo-12885: 修复distutils遇到符号链接时的错误。

- bpo-27881: 修复了设置sqlite3.Connection.isolation_level时可能的错误。基于Xiang Zhang的补丁。

- bpo-27861: 修复了当工厂创建的不是游标时sqlite3.Connection.cursor()中的崩溃。由Xiang Zhang提供补丁。

- bpo-19884: 避免在OS X上使用Gnu Readline时产生虚假输出。

- bpo-27706: 恢复random.Random().seed()对于使用种子版本1的字符串种子的确定性行为。允许random()的调用序列与Python 2中完全匹配。由Nofar Schnider提供补丁。

- bpo-10513: 修复Connection.commit()中的回归问题。提交后不应重置语句。

- bpo-12319: 在http.client.HTTPConnection请求中添加了分块传输编码支持。urllib.request.AbstractHTTPHandler类不再强制要求Content-Length头部。如果一个HTTP请求有一个文件或可迭代体，但没有Content-Length头部，库现在会转而使用分块传输编码。

- 来自https://github.com/python/typing的typing.py新版本：- Collection（仅适用于3.6）(bpo-27598) - 将FrozenSet添加到__all__（上游#261） - 修复_get_type_vars()中的崩溃（上游#259） - 移除ForwardRef._eval_type中的字典约束（上游#252）

- bpo-27832: 使 `_normalize` 参数成为 `Fraction` 构造器的仅关键字参数，这样``Fraction(2, 3, 4)``现在会引发 `TypeError`。

- bpo-27539: 修复了在负指数和负基数情况下未归一化的 `Fraction.__pow__` 结果。

- bpo-21718: 现在，使用CTEs的查询可以使用cursor.description了。

- bpo-27819: 在distutils的sdists中，除非提供了"formats"，否则简单地在所有平台上生成"gztar"（gzip压缩的tar格式）分发。

- bpo-2466: posixpath.ismount现在能正确识别用户没有权限访问的挂载点。

- bpo-9998: 在Linux上，ctypes.util.find_library现在会在LD_LIBRARY_PATH中查找共享库。

- bpo-27573: code.interact的退出消息现在可以配置。

- bpo-27930: 改进了logging.handlers.QueueListener的行为。感谢Paulo Andrade和Petr Viktorin的分析和补丁。

- bpo-6766: 向multiprocessing添加了分布式引用计数以支持共享值/代理对象的嵌套。

- bpo-21201: 提高了multiprocessing错误消息的可读性。感谢Wojciech Walczak的补丁。

- asyncio: 在各Transport类中添加了 set_protocol / get_protocol 方法

- bpo-27456: asyncio：默认设置TCP_NODELAY。

### IDLE

- bpo-15308: 向Shell菜单添加了'中断执行'(^C)。由Roger Serwy提供补丁，由Bayard Randel更新。

- bpo-27922: 停止IDLE测试在屏幕上'闪烁'gui小部件。

- bpo-27891: 在idlelib模块中一致地分组和排序导入。

- bpo-17642: 为教室投影添加更大的字体大小。

- 在 IDLE 帮助窗口的标题中加入版本号

- bpo-25564: 在IDLE与控制台差异的部分，提到使用exec意味着每个语句都定义了__builtins__。

- bpo-27821: 修复3.6.0a3回归，该回归阻止在没有定义自定义主题时选择自定义键集。

### C API

- bpo-26900: 从有限API中排除下划线名称和其他私有API。

- bpo-26027: 在PyUnicode_FSConverter()和PyUnicode_FSDecoder()中添加对路径类对象的支持。

### 测试

- bpo-27427: 为数学模块添加额外测试。由Francisco Couzo提供补丁。

- bpo-27953: 跳过在OS X 10.4上由于tan函数的libm实现不佳而失败的数学和cmath测试。

- bpo-26040: 提高test_math和test_cmath的覆盖范围和严谨性。由Jeff Allen提供补丁。

- bpo-27787: 在检查每个测试的“悬挂线程”之前调用gc.collect()，因为悬挂线程是弱引用。

### 构建

- bpo-27566: 修复冻结makefile中的clean目标（Lisa Roach提供补丁）

- bpo-27705: 更新validate_ucrtbase.py中的消息

- bpo-27976: 弃用在非OSX UNIX平台上使用捆绑的libffi副本构建_ctypes。

- bpo-27983: 当启用 `--with-optimizations` 时，将使用clang作为PGO链接所需的llvm-profdata工具的缺失变为配置时错误，而不是制作时。同时提高我们在MacOS和一些Linux上找到llvm-profdata工具的能力。

- bpo-21590: 支持DTrace和SystemTap探针。

- bpo-26307: profile-opt构建现在将PGO应用于内置模块。

- bpo-26359: 添加--with-optimizations标志以在可用时开启LTO和PGO构建支持。

- bpo-27917: 为Android构建设置平台三元组。

- bpo-25825: 更新AIX上对$(LIBPL)安装路径的引用。此路径在3.2a4中更改。

- 更新 OS X 安装包，使用SQLite 3.14.1 和 XZ 5.2.2版本。

- bpo-21122: 修复OS X上的LTO构建。

- bpo-17128: 构建带有OpenSSL私有副本的OS X安装程序。同时提供一个安装证书命令脚本示例，用于从第三方certifi模块安装一组根证书。

### 工具/示例

- bpo-27952: 使Tools/scripts/fixcid.py能够在Python 3和当前的"re"模块下工作，避免无效的Python反斜杠转义，并修复解析转义C引号符号时的错误。

### Windows

- bpo-28065: 将xz依赖更新至5.2.2版本并从源代码构建。

- bpo-25144: 确保在继续自定义安装之前设置TargetDir。

- bpo-1602: Windows控制台不支持输入或打印Unicode（PEP 528）。

- bpo-27781: 在Windows上将文件系统编码更改为UTF-8（PEP 529）。

- bpo-27731: 在Windows 10上选择退出MAX_PATH限制。

- bpo-6135: 向subprocess添加encoding和errors参数。

- bpo-27959: 添加oem编码，将ansi别名设为mbcs，将aliasmbcs移动到编解码器查找。

- bpo-27982: winsound模块的函数现在接受关键字参数。

- bpo-20366: 在Windows上构建SQLite的全文搜索支持。

- bpo-27756: 为Windows上的Python文件和进程添加新图标。设计由Cherry Wang提供。

- bpo-27883: 在Windows上将sqlite更新至3.14.1.0版本。

## Python 3.6.0 alpha 4

发布日期: 2016-08-15

### 核心与内置函数

- bpo-27704: 优化从字节类对象和可迭代对象创建bytes和bytearray。对于短对象速度提升可达3倍。原始由Naoki Inada提供补丁。

- bpo-26823: 回溯中大量重复的行现在被内置回溯渲染缩写为"[Previous line repeated {count} more times]"。由Emanuel Barry提供补丁。

- bpo-27574: 减少了在使用Argument Clinic实现的函数中解析关键字参数的开销。

- bpo-22557: 现在导入已经导入的模块速度提升可达2.5倍。

- bpo-17596: 包含<wincrypt.h>以帮助Min GW构建。

- bpo-17599: 在Windows上，重命名私有定义的REPARSE_DATA_BUFFER结构以避免与Min GW的定义冲突。

- bpo-27507: 在bytearray.extend()中添加整数溢出检查。由张翔提供补丁。

- bpo-27581: 在PySequence_Tuple()中不依赖包装进行溢出检查。由张翔提供补丁。

- bpo-1621: 避免在列表和元组操作中出现有符号整数溢出。由张翔提供补丁。

- bpo-27419: 标准的__import__()不再在全局或内置变量中查找"__import__"以导入子模块或"from import"。修复了如果从__spec__或__package__无法解析包时发出警告导致崩溃的问题。

- bpo-27083: 在Windows下尊重PYTHONCASEOK环境变量。

- bpo-27514: 将静态嵌套块过多的情况改为SyntaxError而非SystemError。

- bpo-27366: 实现了 PEP 487 (类创建的简化定制) 。在子类化时，__init_subclass__类方法会在基类上调用。描述符在类创建后通过__set_name__初始化。

### 库

- bpo-26027: 向os和os.path模块添加 PEP 519/__fspath__()支持。包含来自Jelle Zijlstra的代码。（另见 bpo-27524）

- bpo-27598: 将Collections添加到collections.abc。由Ivan Levkivskyi提供补丁，文档由Neil Girdhar提供。

- bpo-25958: 支持从各种ABC中"反注册"特殊方法，如__hash__、__iter__或__len__。所有这些（以及更多）可以在实现类中设置为None，行为将如同方法根本未定义。（以前，这种机制仅存在于__hash__，以使可变类不可哈希。）代码由Andrew Barnert和Ivan Levkivskyi贡献。

- bpo-16764: 支持zlib.decompress()的关键字参数。由张翔提供补丁。

- bpo-27736: 防止由于在3.6.0a3中为 bpo-27038 引入的代码导致的引用计数问题在解释器重新初始化后出现段错误。由张翔提供补丁。

- bpo-25628: collections.namedtuple的 verbose 和 rename 参数现在仅为关键字参数。

- bpo-12345: 向 math 和 cmath 添加数学常数 tau。另见 PEP 628。

- bpo-26823: traceback.StackSummary.format 现在将重复行的大段缩写为 "[前一行重复了 {count} 次]"（这一变化进一步影响了模块中的其他 traceback 显示操作）。由 Emanuel Barry 提供补丁。

- bpo-27664: 向 concurrent.futures.thread.ThreadPoolExecutor() 添加了指定线程名前缀的能力。

- bpo-27181: 向 statistics 模块添加 geometric_mean 和 harmonic_mean。

- bpo-27573: code.interact 现在在退出时打印一条消息。

- bpo-6422: 向 timeit.Timer 对象添加 autorange 方法。

- bpo-27773: 更正 _ssl.wrap_socket() 中 server_hostname 的一些内存管理错误。

- bpo-26750: unittest.mock.create_autospec() 现在可以正确用于 property() 和其他数据描述符的子类。移除从未公开使用、从未文档化的 unittest.mock.DescriptorTypes 元组。

- bpo-26754: 现在弃用 compile() 及类似函数中未文档化的对一般 bytes-like 对象作为路径的支持。

- bpo-26800: 现在弃用 os 函数中未文档化的对一般 bytes-like 对象作为路径的支持。

- bpo-26981: 向 enum.Enum 添加 _order_ 兼容性垫片，用于 Python 2/3 代码库。

- bpo-27661: 向 datetime.combine 添加 tzinfo 关键字参数。

- 在 curses 模块中，如果向 window.getstr() 或 window.instr() 传递负值，则引发错误。

- bpo-27783: 修复 operator.methodcaller 中可能使用未初始化内存的问题。

- bpo-27774: 修复 _sre 中可能对未拥有对象进行 Py_DECREF 的问题。

- bpo-27760: 修复 binascii.b2a_qp 中可能的整数溢出。

- bpo-27758: 修复 _csv 模块中对于大记录长度可能的整数溢出。

- bpo-27568: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates that the script is in CGI mode.

- bpo-7063: 从“array”模块的切片处理中移除无用代码。由Chuck提交补丁。

- bpo-27656: 不再假设sched.h定义了任何SCHED_*常量。

- bpo-27130: 在“zlib”模块中，修复了压缩和解压缩大缓冲区（通常为4 GiB）时的处理问题。之前，输入被限制在4 GiB，压缩和解压缩操作未能正确处理4 GiB的结果。

- bpo-24773: 实现了 PEP 495 (本地时间歧义消除) 。

- 在select模块中公开EPOLLEXCLUSIVE常量（当它被定义时）。

- bpo-27567: 在select模块中公开EPOLLRDHUP和POLLRDHUP常量。

- bpo-1621: 在“audioop”模块中避免有符号整数否定溢出。

- bpo-27533: 在nt._isdir中释放GIL。

- bpo-17711: 修复了使用协议0的持久ID进行反序列化的问题。原始补丁由Alexandre Vassalotti提交。

- bpo-27522: 避免在email.feedparser中无意中创建的引用循环。

- bpo-27512: 修复了当os.fspath()调用一个引发异常的__fspath__()方法时的段错误。补丁由Xiang Zhang提交。

### IDLE

- bpo-27714: text_textview和test_autocomplete现在在同一个进程中重新运行时通过。这发生在test_idle使用-w选项运行但未使用-jn选项时失败时。修复test_config的警告。

- bpo-27621: 将查询响应验证错误消息放在查询框本身中，而不是放在单独的消息框中。重做测试以匹配。添加Mac OSX改进。原始补丁由Mark Roseman提交。

- bpo-27620: 现在按Esc键会取消关闭查询框。

- bpo-27609: IDLE：在初始空白后按Tab键应制表，而不是自动完成。这解决了至少两次缩进编写文档字符串的问题。

- bpo-27609: 当也有非None返回时，显式返回None。在少数情况下，反转条件并消除返回。

- bpo-25507: IDLE不再因为其tkinter导入而运行有bug的代码。用户必须包含直接在Python中运行所需的相同导入。

- bpo-27173: 将'IDLE Modern Unix'添加到内置键集中。使默认键集依赖于平台。为配置模块的更改添加测试。

- bpo-27452: 在IDLE configHandler测试转储中添加行计数器和crc。

### 测试

- bpo-25805: 在test_pkgutil中根据需要跳过不适用于当 `__name__ == __main__` 时的测试。补丁由SilentGhost提供。

- bpo-27472: 添加test.support.unix_shell作为默认shell的路径。

- bpo-27369: 在test_pyexpat中，避免测试在Expat 2.2.0中已更改的错误消息详情。

- bpo-27594: 防止在启用覆盖时运行test_ast时出现断言错误：确保代码对象具有有效的首行号。补丁由Ivan Levkivskyi建议。

### Windows

- bpo-27647: 更新捆绑的Tcl/Tk至8.6.6。

- bpo-27610: 向Windows安装程序添加 PEP 514 元数据。

- bpo-27469: 向启动器添加shell扩展，以便拖放操作能正确工作。

- bpo-27309: 在python[w].exe清单中启用正确的Windows样式。

### 构建

- bpo-27713: 在更新importlib的引导文件时抑制虚假的构建警告。由Xiang Zhang提供补丁。

- bpo-25825: 更正对Modules/python.exp的引用，这在AIX上是必需的。这些引用在3.5.0a1中意外被更改。

- bpo-27453: 配置中的CPP调用必须使用CPPFLAGS。由Chi Hsuan Yen提供补丁。

- bpo-27641: 配置脚本现在在makefile中插入注释，以防止pgen和_freeze_importlib可执行文件被交叉编译。

- bpo-26662: 在配置中设置PYTHON_FOR_GEN作为构建期间用于文件生成的Python程序。

- bpo-10910: 避免在FreeBSD和OS X上出现C++编译错误。同时更新FreedBSD版本检查以应对原始的ctype UTF-8变通方案。

## Python 3.6.0 alpha 3

发布日期: 2016-07-11

### 安全性

- bpo-27278: 修复在Linux上使用getrandom()实现的os.urandom()。将大小截断为INT_MAX，并循环直到收集足够的随机字节，而不是直接将Py_ssize_t转换为int。

- bpo-22636: 避免 ctypes.util.find_library() 的 shell 注入问题。

### 核心与内置函数

- bpo-27473: 修复了 bytes 和 bytearray 连接中可能的整数溢出问题。补丁由 Xiang Zhang 提供。

- bpo-23034: 现在默认关闭了定义了 COUNT_ALLOCS、SHOW_ALLOC_COUNT 或 SHOW_TRACK_COUNT 宏的特殊 Python 构建的输出。可以通过 "-X showalloccount" 选项重新启用。现在输出到 stderr 而不是 stdout。

- bpo-27443: bytearray 迭代器的 __length_hint__() 不再为调整大小的 bytearray 返回负整数。

- bpo-27007: bytes 和 bytearray 子类的 fromhex() 类方法现在返回相应子类的实例。

### 库

- bpo-26844: 修复 imp.find_module() 的错误消息，使其引用 'path' 而不是 'name'。由 Lev Maximov 提供补丁。

- bpo-23804: 修复 SSL 零长度 recv() 调用，使其不阻塞且不引发关于不干净 EOF 的错误。

- bpo-27466: 更改 http.cookie.time2netscape 返回的时间格式，确认 netscape cookie 格式并使其与文档一致。

- bpo-21708: 弃用了 dbm.dumb 与常见 dbm 行为不同的行为：在 'r' 和 'w' 模式下创建数据库以及在 'r' 模式下修改数据库。

- bpo-26721: 将 socketserver.StreamRequestHandler.wfile 属性更改为实现 BufferedIOBase。特别是，write() 方法不再进行部分写入。

- bpo-22115: 在 tkinter.Variable 类中添加了 trace_add、trace_remove 和 trace_info 方法。它们取代了使用过时 Tcl 命令的旧方法 trace_variable、trace、trace_vdelete 和 trace_vinfo，这些旧方法在未来的 Tcl 版本中可能不起作用。修复了旧跟踪方法：trace_vdelete() 在模式错误时不再中断跟踪，trace_vinfo() 现在总是返回字符串对的列表，"u" 模式的跟踪现在正常工作。

- bpo-26243: 现在 zlib.compress() 只有 level 参数是关键字参数。第一个参数是仅位置参数。

- bpo-27038: 将DirEntry类型公开为os.DirEntry。代码由Jelle Zijlstra提供补丁。

- bpo-27186: 更新os.fspath()/PyOS_FSPath()以检查__fspath__()的返回值为str或bytes。

- bpo-18726: json模块中的dump()、dumps()、load()和loads()函数以及JSONEncoder和JSONDecoder类构造函数的所有可选参数现在仅为关键字参数。

- bpo-27319: ttk.TreeView的selection_set()、selection_add()、selection_remove()和selection_toggle()方法现在允许将多个项作为多个参数传递，而不是将它们作为元组传递。弃用了selection()方法带参数调用的未记录功能。

- bpo-27079: 修复了curses.ascii函数isblank()、iscntrl()和ispunct()。

- bpo-27294: Tkinter事件对象的repr中的数值状态现在表示为已知标志的组合。

- bpo-27177: re模块中的Match对象现在支持类似索引的对象作为组索引。基于Jeroen Demeyer和Xiang Zhang的补丁。

- bpo-26754: 一些函数（如compile()等）接受以整数可迭代对象编码的文件名参数。现在只接受字符串和字节类对象。

- bpo-26536: socket.ioctl现在支持SIO_LOOPBACK_FAST_PATH。由Daniel Stokes提供补丁。

- bpo-27048: 防止distutils在Windows上因环境变量包含非ASCII字符而失败。

- bpo-27330: 修复了ctypes模块中可能的泄漏。

- bpo-27238: 移除了turtle模块中的裸except。原始由Jelle Zijlstra提供补丁。

- bpo-27122: 当在由contextlib.ExitStack()管理的上下文中引发异常，并且退出堆栈生成器之一捕获并在链中引发它时，退出时不再重新引发原始异常，而是让新的链式异常通过。这避免了issue25782中描述的 PEP 479 错误。

- bpo-16864: sqlite3.Cursor.lastrowid现在支持REPLACE语句。初始补丁由Alex LordThorsen提供。

- bpo-26386: 修复了 ttk.TreeView 选中操作中项目 ID 包含空格的问题。

- bpo-8637: 优先使用环境变量 MANPAGER 设置的页面浏览程序（而非环境变量 PAGER 设置的）。

- bpo-16182: 修复 "readline" 模块中的多个函数以使用区域设置编码，并修复 get_begidx() 和 get_endidx() 返回代码点索引。

- bpo-27392: 添加 loop.connect_accepted_socket()。由 Jim Fulton 提供补丁。

### IDLE

- bpo-27477: IDLE 搜索对话框现在使用 ttk 部件。

- bpo-27173: 将'IDLE Modern Unix'添加到内置键集中。使默认键集依赖于平台。为配置模块的更改添加测试。

- bpo-27452: 使命令行 "idle-test> python test_help.py" 正常工作。当 python 在文件目录中启动时，__file__ 是相对的。

- bpo-27452: 在IDLE configHandler测试转储中添加行计数器和crc。

- bpo-27380: IDLE：添加 query.py 包含基本查询对话框和 ttk 部件。模块有子类 SectionName、ModuleName 和 HelpSource，用于通过 configdialog 和 file =>Load Module 从用户获取信息。每个子类有其自己的有效性检查。使用 ModuleName 允许用户编辑错误的模块名而不是重新开始。添加测试并删除合并到新文件中的两个文件。

- bpo-27372: Test_idle 不再更改区域设置。

- bpo-27365: 允许在 IDLE NEWS.txt 中使用非 ASCII 字符，用于贡献者姓名。

- bpo-27245: IDLE：干净地删除自定义主题和键绑定。以前，当 IDLE 从控制台或通过导入启动时，会发出一系列警告。由 Serhiy Storchaka 提供补丁。

- bpo-24137: 运行 IDLE、test_idle 和 htest 时禁用 tkinter 默认根。修复因此限制而失败的代码和测试。修复 htests 不创建第二个冗余的根和主循环。

- bpo-27310: 修复 IDLE.app 在 OS X 上因遗留导入而无法启动的问题。

### C API

- bpo-26754: PyUnicode_FSDecoder() 接受以整数迭代形式编码的文件名参数。现在只接受字符串和类字节对象。

### 构建

- bpo-28066: 修复在源代码树外构建时搜索构建目录中生成的包含文件的逻辑。

- bpo-27442: 在sysconfig.get_config_vars()中暴露Python构建所针对的Android API级别，作为'ANDROID_API_LEVEL'。

- bpo-27434: 运行交叉构建的解释器，位于PATH中，现在必须与正在构建的源代码具有相同的特性版本（例如3.6）。

- bpo-26930: 更新Windows构建以使用OpenSSL 1.0.2h。

- bpo-23968: 将平台目录从plat-$(MACHDEP)重命名为plat-$(PLATFORM_TRIPLET)。将配置目录(LIBPL)从config-$(LDVERSION)重命名为config-$(LDVERSION)-$(PLATFORM_TRIPLET)。将特定于平台的_sysconfigdata模块安装到平台目录，并重命名以包含ABIFLAGS。

- 在 GNU/Hurd 系统中不使用大文件支持。

### 工具/示例

- bpo-27332: 修复了由Argument Clinic生成的模块级函数的第一个参数的类型。由Petr Viktorin提供补丁。

- bpo-27418: 修复了Tools/importbench/importbench.py。

### 文档

- bpo-19489: 将搜索框从侧边栏移动到每个页面的页眉和页脚。由Ammar Askar提供补丁。

- bpo-27285: 更新文档以反映 `pyvenv` 的弃用，并统一使用术语“虚拟环境”。由Steve Piercy提供补丁。

### 测试

- bpo-27027: 添加了test.support.is_android，当这是一个Android构建时为True。

## Python 3.6.0 alpha 2

发布日期: 2016-06-13

### 安全性

- bpo-26556: Update expat to 2.1.1, fixes CVE-2015-1283.

- Fix TLS stripping vulnerability in smtplib, CVE-2016-0772. Reported by Team Oststrom.

- bpo-26839: 在Linux上，`os.urandom()` 现在调用 `getrandom()` 与 `GRND_NONBLOCK`，如果urandom熵池尚未初始化，则回退到读取 `/dev/urandom`。补丁由Colm Buckley编写。

### 核心与内置函数

- bpo-27095: 简化了MAKE_FUNCTION并移除了MAKE_CLOSURE操作码。由Demur Rumed提供补丁。

- bpo-27190: 如果sqlite3版本低于3.3.1，则引发NotSupportedError。由Dave Sawyer提供补丁。

- bpo-27286: 修复了编译BUILD_MAP_UNPACK_WITH_CALL操作码的问题。使用广义解包（PEP 448）和冲突的关键字名称调用函数可能导致未定义行为。

- bpo-27140: 添加了BUILD_CONST_KEY_MAP操作码。

- bpo-27186: 为 open() 添加对 os.PathLike 对象的支持（PEP 519 的一部分）。

- bpo-27066: 修复了如果自定义 opener（为 open()）返回一个负数而没有设置异常时的 SystemError。

- bpo-26983: float() 现在总是返回一个精确的 float 实例。如果 __float__ 返回一个 float 的严格子类的实例，将发出弃用警告。在 Python 的未来版本中，这可能是一个错误。

- bpo-27097: Python 解释器现在由于优化的指令解码而大约快了 7%。基于 Demur Rumed 的补丁。

- bpo-26647: Python 解释器现在使用 16 位字码代替字节码。由 Demur Rumed 提供补丁。

- bpo-23275: 允许在圆括号中赋值给空的目标列表：() = iterable。

- bpo-27243: 更新 __aiter__ 协议：异步迭代器应该直接返回，而不是返回一个解析为异步迭代器的 awaitable。执行前者将触发 PendingDeprecationWarning。

### 库

- 注释掉在 API 上暴露的未在 GNU/Hurd 上实现的 socket (SO_REUSEPORT) 和 posix (O_SHLOCK, O_EXLOCK) 常量。无论如何，它们在运行时都不会工作。

- bpo-27025: 现在 Tkinter 小部件生成的名称更有意义且更易于识别。

- bpo-25455: 修复了递归 ElementTree.Element 和 functools.partial 对象的 repr 中的崩溃。

- bpo-27294: 改进了 Tkinter 事件对象的 repr。

- bpo-20508: 改进了 IPv{4,6}Network.__getitem__ 的异常消息。由 Gareth Rees 提供补丁。

- bpo-21386: 实现了缺失的 IPv4Address.is_global 属性。自 07a5610bae9d 以来已有文档记录。初始由 Roger Luethi 提供补丁。

- bpo-27029: 从 ZipFile.open() 中移除了对通用换行模式的已弃用支持。

- bpo-27030: 现在，由 `'\'` 和一个 ASCII 字母组成的未知转义在正则表达式中是错误。re.LOCALE 标志现在只能用于字节模式。

- bpo-27186: 向 DirEntry 添加 os.PathLike 支持（作为 PEP 519 的一部分）。初始由 Jelle Zijlstra 提供补丁。

- bpo-20900: distutils register 命令现在能正确解码 HTTP 响应。初始由 ingrid 提供补丁。

- bpo-27186: 向 pathlib 添加 os.PathLike 支持，移除其临时状态（作为 PEP 519 的一部分）。初始由 Dusty Phillips 提供补丁。

- bpo-27186: 向 os.fsencode() 和 os.fsdecode() 添加对 os.PathLike 对象的支持（作为 PEP 519 的一部分）。

- bpo-27186: 引入 os.PathLike 和 os.fspath()（作为 PEP 519 的一部分）。

- 新版本的 typing.py 提供了几个新类和特性：stubs 外的 @overload、Reversible、DefaultDict、Text、ContextManager、Type[]、NewType()、TYPE_CHECKING，以及众多错误修复（注意，一些新特性尚未在 mypy 或其他静态分析器中实现）。同时，为 PEP 492 (Awaitable、AsyncIterable、AsyncIterator) 添加的类也已加入（实际上它们已在 3.5.1 中实现，但从未被提及）。

- bpo-25738: 停止 http.server.BaseHTTPRequestHandler.send_error() 为 205 Reset Content 发送消息体。同时，不在没有正文的响应中发送 Content 头字段。由 Susumu Koshiba 提供补丁。

- bpo-21313: 修复 "platform" 模块以容忍 sys.version 包含截断的构建信息。

- bpo-23883: 向 __all__ 添加缺失的 API 以匹配以下模块的文档化 API：cgi、mailbox、mimetypes、plistlib 和 smtpd。由 Jacek Kołodziej 提供补丁。

- bpo-27164: 在 zlib 模块中，允许使用预定义的 zdict 解压原始 Deflate 流。基于 Xiang Zhang 的补丁。

- bpo-24291: 修复 wsgiref.simple_server.WSGIRequestHandler 以完全向客户端写入数据。之前它可能进行部分写入并截断数据。同时，wsgiref.handler.ServerHandler 现在可以处理 stdout 进行部分写入，但此功能已被弃用。

- bpo-21272: 使用 _sysconfigdata.py 初始化 distutils.sysconfig。

- bpo-19611: `inspect` 现在将编译器为推导式和生成器表达式作用域生成的隐式 `.0` 参数报告为名为 `implicit0` 的位置参数。由 Jelle Zijlstra 提供补丁。

- bpo-26809: 向 `string` 添加了 `__all__`。由 Emanuel Barry 提供补丁。

- bpo-26373: subprocess.Popen.communicate 现在在更多/所有情况下，当子进程在调用 .communicate() 之前死亡时，正确地忽略 BrokenPipeError。

- signal、socket 和 ssl 模块的 IntEnum 常量名称查找现在为具有多个名称的值返回一致的名称。例如：signal.Signals(6) 现在自称为 signal.SIGALRM，而不是根据解释器的哈希随机化种子在 signal.SIGALRM 和 signal.SIGIOT 之间切换。

- bpo-27167: 当子进程因信号死亡时，澄清 subprocess.CalledProcessError 错误消息文本。

- bpo-25931: 在像 Windows 这样不支持 os.fork() 的平台上不定义 socketserver.Forking* 名称。

- bpo-21776: distutils.upload 现在正确处理 HTTPError。初始由 Claudiu Popa 提供补丁。

- bpo-26526: 用简单的 DFA 验证器替换解析器模块中的自定义解析树验证。

- bpo-27114: 修复 SSLContext._load_windows_store_certs 因 PermissionError 失败的问题。

- bpo-18383: 避免在使用 filterwarnings 和 simplefilter 时创建重复的过滤器。基于 Alex Shkop 的补丁。

- bpo-23026: winreg.QueryValueEx() 现在为 REG_QWORD 类型返回一个整数。

- bpo-26741: 如果子进程仍在运行，subprocess.Popen 析构函数现在会发出 ResourceWarning 警告。

- bpo-27056: 优化 pickle.load() 和 pickle.loads()，反序列化大量小对象时速度提高高达 10%。

- bpo-21271: reset_mock 调用中的新关键字参数。

### IDLE

- bpo-5124: 在 X11 上，现在粘贴选中的文本会替换选中内容。这匹配了 Windows、Mac、大多数现代 Linux 应用和 ttk 小部件上的粘贴工作方式。原始由 Serhiy Storchaka 提供补丁。

- bpo-24750: 将 IDLE 中的所有滚动条切换为 ttk 版本。必要时，添加最小测试以覆盖更改。

- bpo-24759: IDLE 需要 tk 8.5 及 ttk 小部件的可用性。删除现在不再需要的 tk 版本测试和旧版本代码。添加 IDLE 语法着色器的测试。

- bpo-27239: idlelib.macosx.isXyzTk 函数按需初始化。

- bpo-27262: 将 Aqua 解绑代码（启用上下文菜单）移至 macosx。

- bpo-24759: 在 idlelib.idle_test.__init__ 中明确表示该目录是 test.test_idle 的私有实现和维护者的工具。

- bpo-27196: 在运行 IDLE 测试时停止 'ThemeChanged' 警告。这些警告在其他警告被 #20567 抑制后仍然存在。将 Serhiy Storchaka 的 update_idletasks 解决方案应用于四个测试文件。在 idle_test/README.txt 中记录这一额外建议。

- bpo-20567: 修改 idle_test/README.txt，提供避免测试中 tk 警告信息的建议。将建议应用于几个 IDLE 测试。

- bpo-24225: 使用新文件名和事件处理程序更新 idlelib/README.txt。

- bpo-27156: 移除 IDLE 未使用的过时代码。

- bpo-27117: 使颜色器 htest 和 turtledemo 支持深色主题。将配置文本小部件颜色的代码移至新函数。

- bpo-24225: Rename many `idlelib/*.py` and `idle_test/test_*.py` files. Edit files to replace old names with new names when the old name referred to the module rather than the class it contained. See the issue and IDLE section in What's New in 3.6 for more.

- bpo-26673: 当 tk 报告字体大小为 0 时，更改为大小 10。Linux 上的此类字体阻止了配置对话框的打开。

- bpo-21939: 添加 IDLE 的渗滤器测试。原始由 Saimadhav Heblikar 提供补丁。

- bpo-21676: 添加 IDLE 的替换对话框测试。原始由 Saimadhav Heblikar 提供补丁。

- bpo-18410: 添加 IDLE 的搜索对话框测试。原始由 Westley Martínez 提供补丁。

- bpo-21703: 添加撤销委托器的测试。补丁主要由 Saimadhav Heblikar 提供。

- bpo-27044: 添加ConfigDialog.remove_var_callbacks以防止内存泄漏。

- bpo-23977: 在test_delegator中添加更多断言。

### 文档

- bpo-16484: 将默认的PYTHONDOCS URL更改为"https:"，并修复结果链接以使用小写。由Sean Rodman提供补丁，测试由Kaushik Nadikuditi进行。

- bpo-24136: 文档化新的 PEP 448 解包语法（3.5版本）。

- bpo-22558: 将剩余的文档链接添加到Python编码模块的源代码中。由Yoni Lavi提供补丁。

### 测试

- bpo-25285: 当使用-j1命令行选项时，regrtest现在使用子进程：每个测试文件在一个新的子进程中运行。之前，-j1选项被忽略。

- bpo-25285: Tools/buildbot/test.bat脚本现在默认使用-j1来在每个新的子进程中运行测试文件。

### Windows

- bpo-27064: py.exe启动器现在默认使用Python 3。Windows启动器 `py.exe` 在交互使用时不再默认优先选择已安装的Python 2版本而不是Python 3。

- bpo-17500: 移除未使用和过时的图标。（另见：https://github.com/python/pythondotorg/issues/945）

### 构建

- bpo-27229: 修复树内构建的交叉编译pgen规则。由Xavier de Gaye提供补丁。

- bpo-26930: 更新OS X 10.5+ 32位仅安装程序以构建并与OpenSSL 1.0.2h链接。

### C API

- bpo-27186: 添加PyOS_FSPath()函数（PEP 519 的一部分）。

- bpo-26282: PyArg_ParseTupleAndKeywords()现在支持仅位置参数。

### 工具/示例

- bpo-26282: Argument Clinic现在支持在同一函数中的仅位置和关键字参数。

## Python 3.6.0 alpha 1

发布日期: 2016-05-16

### 安全性

- bpo-26657: 修复Windows上http.server的目录遍历漏洞。这修复了在3.3.4rc1和3.4.0rc1中引入的回归问题。基于Philipp Hagemeister的补丁。

- bpo-26313: 如果windows证书存储为空，ssl.py _load_windows_store_certs失败。由Baji提供补丁。

- bpo-25939: 在Windows上以只读方式打开证书存储于ssl.enum_certificates中。

### 核心与内置函数

- bpo-20041: 修复当frame.f_trace被设置为None时的TypeError。由Xavier de Gaye提供补丁。

- bpo-26168: 修复了在使用 "N" 格式化单元时 Py_BuildValue() 失败可能导致的内存泄漏问题。

- bpo-26991: 修复了创建带有注解的函数时可能出现的内存泄漏问题。

- bpo-27039: 修复了 bytearray.remove() 对于大于127的值的处理。基于 Joe Jevnik 的补丁。

- bpo-23640: int.from_bytes() 不再绕过子类的构造函数。

- bpo-27005: 优化了 float.fromhex() 类方法对于精确浮点数的处理。现在速度提高了2倍。

- bpo-18531: 单一的可变关键字参数如果是字典子类，将不再原封不动地传递给C定义的函数。现在会被转换为确切的字典。

- bpo-26811: gc.get_objects() 不再包含带有 NULL 指针的损坏元组。

- bpo-20120: 使用 RawConfigParser 来解析 .pypirc 文件，移除了无意中随着迁移到 Python 3 而添加的插值支持。现在的行为不会再在 .pypirc 文件中进行任何插值，与 Python 2.7 和 Setuptools 19.0 的行为一致。

- bpo-26249: Memory functions of the `PyMem_Malloc()` domain (`PYMEM_DOMAIN_MEM`) now use the pymalloc allocator rather than system `malloc()`. Applications calling `PyMem_Malloc()` without holding the GIL can now crash: use `PYTHONMALLOC=debug` environment variable to validate the usage of memory allocators in your application.

- bpo-26802: 优化了仅使用解包的函数调用，如 `func(*tuple)` (没有其他位置参数，没有关键字参数) ：避免复制元组。补丁由 Joe Jevnik 编写。

- bpo-26659: 使内置的 slice 类型支持循环回收。

- bpo-26718: super.__init__ 如果被多次调用，将不再泄露内存。注意：不推荐直接调用 super.__init__！

- bpo-27138: 修正了 FileFinder.find_spec() 的文档注释。

- bpo-27147: 在 importlib 文档中提到了 PEP 420。

- bpo-25339: 现在在设置 stdin 和 stdout 的错误处理器时，PYTHONIOENCODING 优先于 locale。

- bpo-26494: 修复了在迭代耗尽迭代器时的崩溃问题。受影响的类包括通用序列迭代器、str、bytes、bytearray、list、tuple、set、frozenset、dict、OrderedDict的迭代器，相应的视图以及os.scandir()迭代器。

- bpo-26574: 优化了 `bytes.replace(b'', b'.')` 和 `bytearray.replace(b'', b'.')`。补丁由Josh Snider编写。

- bpo-26581: 如果在Python源代码文件中一行内多次指定编码声明，只有第一个会被考虑。

- bpo-19711: 为重新加载命名空间包添加了测试。

- bpo-21099: 将适用的importlib测试切换到使用 PEP 451 API。

- bpo-26563: 如果调用 `PyMem_Malloc()` 系列函数时没有持有GIL，Python内存分配器的调试钩子现在会引发致命错误。

- bpo-26564: 在错误时，Python内存分配器的调试钩子现在使用 `tracemalloc` 模块来获取内存块分配时的回溯。

- bpo-26558: Python内存分配器 `PyObject_Malloc()` 的调试钩子现在可以检测到在没有持有GIL时调用函数的情况。

- bpo-26516: 添加了 `PYTHONMALLOC` 环境变量来设置Python内存分配器和/或安装调试钩子。

- bpo-26516: `PyMem_SetupDebugHooks()` 函数现在也可以在发布模式下编译的Python中使用。

- bpo-26516: `PYTHONMALLOCSTATS` 环境变量现在也可以在发布模式下编译的Python中使用。如果设置为空字符串，则现在无效。

- bpo-26516: 在调试模式下，当Python配置为不使用pymalloc时，调试钩子现在也会安装在Python内存分配器上。

- bpo-26464: 修复了当字符串为ASCII且第一个替换移除了字符，但下一个替换使用非ASCII字符或长度超过1个字符的字符串时str.translate()的问题。这是在Python 3.5.0中引入的回归问题。

- bpo-22836: 确保即使格式化产生次要错误时，PyErr_Display()和PyErr_WriteUnraisable()产生的异常报告也是合理的。这影响sys.__excepthook__()产生的报告以及__del__()引发异常时的情况。

- bpo-26302: 修正行为，拒绝将逗号作为cookie名称的合法字符。

- bpo-26136: 当生成器引发StopIteration时，将警告从PendingDeprecationWarning升级为DeprecationWarning。由Anish Shah提供补丁。

- bpo-26204: 编译器现在忽略所有常量语句：bytes、str、int、float、complex、名称常量（None、False、True）、Ellipsis和ast.Constant；不仅仅是str和int。例如，``1.0``现在在``def f(): 1.0``中被忽略。

- bpo-4806: 在函数调用中使用星号（`*`）解包时，避免掩盖原始的TypeError异常。基于Hagen Fürstenau和Daniel Urban的补丁。

- bpo-26146: 添加一种新的AST节点：`ast.Constant`。它可以被外部AST优化器使用，但编译器不直接发出这样的节点。

- bpo-23601: 通过使用Python的小对象分配器，加速了字典键对象的分配。（由Julian Taylor贡献。）

- bpo-18018: 如果尝试在没有已知父包的情况下进行相对导入，导入将引发ImportError而不是SystemError。

- bpo-25843: 编译代码时，如果常量相等但类型不同，则不合并它们。例如，`f1, f2 = lambda: 1, lambda: 1.0``现在被正确编译为两个不同的函数：``f1()``返回 ``1` (`int`) 和``f2()``返回 `1.0` (`float`) ，即使 `1` 和 `1.0` 相等。

- bpo-26107: 代码对象的 `co_lnotab` 属性的格式更改以支持负行号增量。

- bpo-26154: 新增一个私有函数_PyThreadState_UncheckedGet()用于获取当前Python线程状态，但如果其为NULL时不发出致命错误。必须使用此新函数而非直接访问_PyThreadState_Current变量。自Python 3.5.1起，该变量不再暴露以隐藏原子C类型的精确实现，避免编译器问题。

- bpo-25791: 如果__package__ != __spec__.parent或既未定义__package__也未定义__spec__，则引发ImportWarning。

- bpo-22995: [更新] 由于在基于Cython的项目中观察到的回归问题，注释掉_PyObject_GetState()中的一个可pickle性测试。

- bpo-25961: 类型名称中不允许空字符。

- bpo-25973: 修复当无效的非局部语句绑定一个以两个下划线开头的名称时导致的段错误。

- bpo-22995: 不是列表或字典的子类且未实现任何与pickle相关的方法（__reduce__、__reduce_ex__、__getnewargs__、__getnewargs_ex__或__getstate__）的扩展类型实例，包括memoryview，将不能再被pickle。

- bpo-20440: 大量替换不安全的属性设置代码为特殊宏Py_SETREF。

- bpo-25766: 特殊方法__bytes__()现在在str子类中工作。

- bpo-25421: 内置类型的__sizeof__方法现在使用动态基本大小。这使得sys.getsize()能够正确工作于定义了__slots__的子类。

- bpo-25709: 修复了原地字符串连接和utf-8缓存的问题。

- bpo-5319: 新增Py_FinalizeEx() API，允许Python在刷新缓冲流失败时设置退出状态为120。

- bpo-25485: telnetlib.Telnet现在是一个上下文管理器。

- bpo-24097: 修复了如果槽名称在__getattr__内部被释放时object.__reduce__()中的崩溃问题。

- bpo-24731: 修复了在将具有特殊方法 __bytes__、__trunc__ 和 __float__ 的对象转换为 bytes、int 和 float 的子类时，返回这些子类实例导致的崩溃问题。

- bpo-25630: 修复了在接受文件系统路径的函数中，参数解析时可能发生的段错误。

- bpo-23564: 修复了 _posixsubprocess 内部关于如何将 fds_to_pass 传递给子进程的部分损坏的健全性检查。由于 subprocess.py 已经避免了这个问题，这个错误没有实际影响。

- bpo-25388: 修复了在处理包含空字节的不可解码源代码时，分词器崩溃的问题。

- bpo-25462: 在 OrderedDict 的 C 实现中，大多数操作现在只计算一次键的哈希值。

- bpo-22995: __reduce__ 和 __reduce_ex__ 的默认实现现在拒绝那些未定义 __new__ 的内置类型。

- bpo-24802: 当 int()、float()、compile()、exec() 和 eval() 传递类似字节的对象时，避免缓冲区过度读取。这些对象不一定以空字节终止，但函数假设它们是。

- bpo-25555: 修复解析器和 AST：当从 Python 对象编译 AST 时，填充 "arg" 节点的 lineno 和 col_offset。

- bpo-24726: 修复了 OrderedDict 在直接调用 dict 方法后被 repr() 时崩溃和泄漏 NULL 的问题。

- bpo-25449: 现在在 C 实现和 Python 实现中，迭代具有不稳定哈希键的 OrderedDict 都会引发 KeyError。

- bpo-25395: 修复了在垃圾回收高度嵌套的 OrderedDict 结构时崩溃的问题。

- bpo-25395: 优化了 bytes.fromhex() 和 bytearray.fromhex()：它们现在快了 2 到 3.5 倍。

- bpo-25399: 使用新的私有 _PyBytesWriter API 优化了 bytearray % args 操作。格式化现在快了 2.5 到 5 倍。

- bpo-25274: sys.setrecursionlimit() 现在如果新的递归限制根据当前递归深度太低会引发 RecursionError。同时修改“低水位标记”公式使其单调。这个标记用于决定何时重置线程状态的溢出标志。

- bpo-24402: 修复 input() 在 sys.stdout.fileno() 失败时提示重定向的 stdout。

- bpo-25349: 使用新的私有 _PyBytesWriter API 优化 bytes % args。格式化现在快达2倍。

- bpo-24806: 防止不允许被继承的内置类型通过多重继承被继承。

- bpo-25301: UTF-8 解码器现在对于错误处理程序 `ignore`、`replace` 和 `surrogateescape` 快达15倍。

- bpo-24848: 修复了UTF-7解码畸形数据时的一些错误。

- bpo-25267: UTF-8 编码器现在对于错误处理程序 `ignore`、`replace`、`surrogateescape`、`surrogatepass` 快达75倍。补丁与Serhiy Storchaka共同编写。

- bpo-25280: 在详细模式(-v)下发出的导入跟踪消息不再格式化两次。

- bpo-25227: 使用 `surrogateescape` 错误处理程序优化ASCII和latin1编码器：编码器现在快达3倍。初始补丁由Serhiy Storchaka编写。

- bpo-25003: 在Solaris 11.3或更新版本上，os.urandom() 现在使用 getrandom() 函数而不是 getentropy() 函数。getentropy() 函数为了生成非常高质量的熵是阻塞的，os.urandom() 不需要如此高质量的熵。

- bpo-9232: 修改Python的语法以允许函数声明的参数列表中的尾随逗号。例如，“def f(*, a = 3,): pass”现在是合法的。补丁来自Mark Dickinson。

- bpo-24965: 实现 PEP 498 "字面字符串插值"。这允许你在f-字符串中嵌入表达式，这些表达式在运行时被转换为普通字符串。给定x=3，那么 f'value={x}' == 'value=3'。由Eric V. Smith提供补丁。

- bpo-26478: 修复在使用二进制运算符与字典视图和元组时的语义错误。

- bpo-26171: 修复zipimporter.get_data()中可能的整数溢出和堆损坏问题。

- bpo-25660: 修复REPL中使用readline时的TAB键行为。

- bpo-26288: 优化PyLong_AsDouble。

- bpo-26289: 优化单数字长整数的地板除和模除运算。微基准测试显示有2-2.5倍的提升。内置的'divmod'函数现在也快了约10%。（另见：bpo-26315）

- bpo-25887: 当协程对象被多次等待时，抛出RuntimeError。

### 库

- bpo-27057: 修复Android上的os.set_inheritable()，ioctl()被SELinux阻止并因EACCESS失败。该函数现在回退到使用fcntl()。补丁由Michał Bednarski编写。

- bpo-27014: 修复使用typing.py时的无限递归问题。感谢Kalle Tuure！

- bpo-27031: 移除了Tkinter小部件类中的虚拟方法：tk_menuBar()和tk_bindForTraversal()。

- bpo-14132: 修复urllib.request在目标仅有查询字符串时的重定向处理。原始修复由Ján Janech提供。

- bpo-17214: "urllib.request"模块现在对重定向目标URL中的非ASCII字节进行百分比编码。一些服务器发送含有非ASCII字节的Location头字段，但"http.client"要求请求目标必须可ASCII编码，否则会抛出UnicodeEncodeError。基于Christian Heimes的补丁。

- bpo-27033: smtpd.SMTPChannel和smtpd.SMTPServer构造函数的decode_data参数的默认值更改为False。

- bpo-27034: 移除了已弃用的类asynchat.fifo。

- bpo-26870: 添加了readline.set_auto_history()，可以阻止条目自动添加到历史列表中。基于Tyler Crompton的补丁。

- bpo-26039: zipfile.ZipFile.open()现在可用于向ZIP文件中写入数据，以及提取数据。由Thomas Kluyver提供补丁。

- bpo-26892: 在urllib.request.HTTPHandler中尊重debuglevel标志。补丁由Chi Hsuan Yen贡献。

- bpo-22274: 在subprocess模块中，即使stdout未被重定向，也允许将stderr重定向到stdout。补丁由Akira Li提供。

- bpo-26807: mock_open 'files' 在文件末尾的readline操作不再报错。补丁由Yolanda Robla提供。

- bpo-25745: 修复了curses panel析构函数中userptr的泄漏问题。

- bpo-26977: 在statistics.pvariance中移除了不必要且被忽略的平方和辅助函数调用。

- bpo-26002: 在statistics.median中使用二分查找替代线性搜索。由Upendra Kuma提供补丁。

- bpo-25974: 在统计模块中利用了新的Decimal.as_integer_ratio()方法。补丁由Stefan Krah提供。

- bpo-26996: 添加了如 PEP 506 所述的secrets模块。

- bpo-26881: modulefinder模块现在支持扩展的操作码参数。

- bpo-23815: 修复了直接创建_tkinter和curses.panel模块中类型实例相关的崩溃问题。

- bpo-17765: weakref.ref()不再默默忽略关键字参数。由Georg Brandl提供补丁。

- bpo-26873: xmlrpc现在会在遇到不支持的类型标签时抛出ResponseError，而不是默默返回错误结果。

- bpo-26915: collections ABCs中的__contains__方法现在在检查相等性之前先检查标识。这更好地匹配了具体类的行为，允许合理处理NaNs，并使容器不变量的推理更加容易。

- bpo-26711: 修复了plistlib.Data与其他类型的比较问题。

- bpo-24114: Fix an uninitialized variable in `ctypes.util`. The bug only occurs on SunOS when the ctypes implementation searches for the `crle` program. Patch by Xiang Zhang. Tested on SunOS by Kees Bos.

- bpo-26864: 在urllib.request中，将代理绕过主机检查对no_proxy的匹配改为不区分大小写，并且不匹配那些恰好以后缀形式包含被绕过主机名的无关主机名。由Xiang Zhang提供补丁。

- bpo-24902: 在http.server启动时打印服务器URL。初始由Felix Kaiser提供补丁。

- bpo-25788: fileinput.hook_encoded() 现在支持传递一个 "errors" 参数给 open。原始补丁由 Joseph Hackman 提供。

- bpo-26634: recursive_repr() 现在设置包装器的 __qualname__。由 Xiang Zhang 提供补丁。

- bpo-26804: urllib.request 现在会优先选择小写的代理环境变量，而不是大写或混合大小写的。补丁由 Hans-Peter Jansen 贡献。

- bpo-26837: assertSequenceEqual() 现在能正确输出非字符串化的不同项（如 -b 模式下的字节）。这影响了 assertListEqual() 和 assertTupleEqual()。

- bpo-26041: 从 platform.dist() 和 platform.linux_distribution() 的弃用消息中移除了 "将在 Python 3.7 中移除"。由 Kumaripaba Miyurusara Athukorala 提供补丁。

- bpo-26822: itemgetter、attrgetter 和 methodcaller 对象不再静默忽略关键字参数。

- bpo-26733: 反汇编一个类现在会反汇编类和静态方法。由 Xiang Zhang 提供补丁。

- bpo-26801: 修复 `shutil.get_terminal_size()` 中的错误处理，捕获 `AttributeError` 而不是 `NameError`。补丁由 Emanuel Barry 编写。

- bpo-24838: tarfile 的 ustar 和 gnu 格式现在能正确计算多字节字符编码（如 utf-8）的名称和链接字段限制。

- bpo-26717: 停止用 UTF-8 编码拉丁-1 化的 WSGI 路径。由 Anthony Sottile 提供补丁。

- bpo-26782: 在 Windows 上向 subprocess.__all__ 添加 STARTUPINFO。

- bpo-26404: 向 socketserver 添加上下文管理器。由 Aviv Palivoda 提供补丁。

- bpo-26735: 修复 Solaris 11.3 及更新版本上 `os.urandom()` 当读取超过 1,024 字节时的问题：多次调用 `getrandom()`，每次调用限制为 1024 字节。

- bpo-26585: 移除 http.server._quote_html() 并使用 html.escape(quote=False)。由 Xiang Zhang 提供补丁。

- bpo-26685: 如果关闭套接字失败，则引发 OSError。

- bpo-16329: 向 mimetypes.types_map 添加 .webm。由 Giampaolo Rodola' 提供补丁。

- bpo-13952: 向 mimetypes.types_map 添加 .csv。由 Geoff Wilson 提供补丁。

- bpo-26587: 站点模块现在允许 .pth 文件指定要添加到 sys.path 的文件（例如 zip 文件）。

- bpo-25609: 引入了 contextlib.AbstractContextManager 和 typing.ContextManager。

- bpo-26709: 修复了加载二进制 PLists 时的 Y2038 问题。

- bpo-23735: 通过安装我们自己的 SIGWINCH 处理程序，处理 Readline 6.3+ 的终端调整大小。由 Eric Price 提供补丁。

- bpo-25951: 将 SSLSocket.sendall() 更改为返回 None，如明文套接字对象文档中明确所述。补丁由 Aviv Palivoda 提供。

- bpo-26586: 在 http.server 中，如果头字段太多无法解析，则响应 "413 请求头字段太大"，而不是终止连接并引发未处理的异常。由 Xiang Zhang 提供补丁。

- bpo-26676: 将缺失的 XMLPullParser 添加到 ElementTree.__all__。

- bpo-22854: 将 BufferedReader.writable() 和 BufferedWriter.readable() 更改为总是返回 False。

- bpo-26492: array.array 的耗尽迭代器现在与其他可变序列的迭代器行为一致：即使迭代的数组被扩展，它也会保持耗尽状态。

- bpo-26641: doctest.DocFileTest and doctest.testfile() now support packages (module splitted into multiple directories) for the package parameter.

- bpo-25195: 修复了 mock.MagicMock 中的一个回归问题。_Call 是 tuple 的子类（changeset 3603bae63c13 仅适用于类），所以我们需要自己实现 __ne__。由 Andrew Plummer 提供补丁。

- bpo-26644: 当向 SSLSocket.recv() 或 read() 传递负长度时，引发 ValueError 而不是 SystemError。

- bpo-23804: 修复 SSL recv(0) 和 read(0) 方法返回零字节而不是最多 1024 字节的问题。

- bpo-26616: 修复了 datetime.astimezone() 方法中的一个错误。

- bpo-26637: 现在，如果在 Python 关闭过程中尝试 `__import__()` 但 `sys.path` 已经被清除（设置为 `None`），`importlib` 模块会发出 `ImportError` 而不是 `TypeError`。

- bpo-21925: `warnings.formatwarning()` 现在在调用 `linecache.getline()` 和 `tracemalloc.get_object_traceback()` 时会捕获异常，以便能够记录在Python关闭过程中晚期发出的 `ResourceWarning`。

- bpo-23848: 在Windows上，faulthandler.enable() 现在也会安装一个异常处理器，以在任何Windows异常（不仅仅是UNIX信号（SIGSEGV、SIGFPE、SIGABRT））上转储所有Python线程的跟踪信息。

- bpo-26530: Add C functions `_PyTraceMalloc_Track()` and `_PyTraceMalloc_Untrack()` to track memory blocks using the `tracemalloc` module. Add `_PyTraceMalloc_GetTraceback()` to get the traceback of an object.

- bpo-26588: _tracemalloc 现在支持跟踪多个地址空间（域）的内存分配。

- bpo-24266: 在编译时使用Readline 7的情况下，Readline历史搜索期间的Ctrl+C现在会取消搜索模式。

- bpo-26590: 为_socket.socket类型实现了一个安全的终结器。它现在会释放GIL来关闭套接字。

- bpo-18787: 如果用户没有权限，spwd.getspnam() 现在会引发一个PermissionError。

- bpo-26560: 避免BaseHandler.start_response中潜在的ValueError。初始由Peter Inglesby提供补丁。

- bpo-26567: 添加一个新函数 `PyErr_ResourceWarning()` 来传递被销毁的对象。向 `warnings.WarningMessage` 添加一个 source 属性。添加warnings._showwarnmsg()，它使用tracemalloc来获取源对象分配时的跟踪信息。

- bpo-26569: 修复 `pyclbr.readmodule()` 和 `pyclbr.readmodule_ex()` 以支持导入包。

- bpo-26499: 在HTTPResponse.readline()和read1()中考虑剩余的Content-Length。基于Silent Ghost的补丁。同时记录HTTPResponse现在支持这些方法。

- bpo-25320: 处理unittest发现扫描的目录中的套接字。补丁来自Victor van den Elzen。

- bpo-16181: 现在如果年份高于datetime.MAXYEAR，cookiejar.http2time()会返回None。

- bpo-26513: 修复了平台模块对Windows Server的检测。

- bpo-23718: 修复了在1月1日前的第0周解析时间的问题。原始由Tamás Bence Gedai提供补丁。

- bpo-26323: 向unittest.mock添加了Mock.assert_called()和Mock.assert_called_once()方法。补丁由Amit Saha编写。

- bpo-20589: 在Windows上调用Path.owner()和Path.group()现在会引发NotImplementedError而不是ImportError。

- bpo-26177: 修复了Canvas和Scrollbar小部件的keys()方法。

- bpo-15068: 消除了fileinput中过度的缓冲。bufsize参数现在已被弃用并被忽略。

- bpo-19475: 向datetime的isoformat()方法添加了一个可选参数timespec，用于选择时间组件的精度。

- bpo-2202: 修复了AbstractDigestAuthHandler.get_algorithm_impls中的UnboundLocalError。初始由Mathieu Dupuy提供补丁。

- bpo-26167: 最小化了copy.copy()和copy.deepcopy()的开销。优化了bytearrays、NotImplemented、slices、短列表、元组、字典和集合的复制和深复制。

- bpo-25718: 修复了当total为None时，对accumulate()迭代器的pickling和复制。

- bpo-26475: 修复了带有(?x)标志的正则表达式的调试输出。

- bpo-26482: 允许pickling递归的dequeues。

- bpo-26335: 使mmap.write()像其他write方法一样返回写入的字节数。补丁由Jakub Stasiak提供。

- bpo-26457: 修复了当结果前缀长度等于最大前缀长度时，IP网络类中的subnets()方法。基于Xiang Zhang的补丁。

- bpo-26385: 如果NamedTemporaryFile()中的内部open()调用失败，则删除文件。由Silent Ghost提供补丁。

- bpo-26402: 修复了XML-RPC客户端在服务器关闭持久连接时重试的问题。这是与3.5.0a4中的新http.client.RemoteDisconnected异常相关的回归问题。

- bpo-25913: 在adobe=True时，base64.a85decode()中前导的 `<~` 现在是可选的。由Swati Jaiswal提供补丁。

- bpo-26186: 移除importlib.util.LazyLoader中的一个无效类型检查。

- bpo-26367: 当指定了 `level` 但没有指定相应的包时，importlib.__import__()会像builtins.__import__()一样引发ImportError。

- bpo-26309: 在"socketserver"模块中，当verify_request()返回false时，关闭请求（关闭连接的套接字）。由Aviv Palivoda提供补丁。

- bpo-23430: 更改socketserver模块，只捕获源自Exception（而不是BaseException）的请求处理程序引发的异常。因此，SystemExit和KeyboardInterrupt不再触发handle_error()方法，现在将停止单线程服务器。

- bpo-25995: os.walk()不再使用与树深度成比例的FDs。

- bpo-25994: 为os.scandir()迭代器添加了close()方法和上下文管理器协议的支持。

- bpo-23992: multiprocessing：使MapResult在异常时不快速失败。

- bpo-26243: 支持zlib.compress()的关键字参数。由Aviv Palivoda提供补丁。

- bpo-26117: os.scandir()迭代器现在不仅在迭代完成时关闭文件描述符，而且在因错误失败时也关闭。

- bpo-25949: OrderedDict实例的__dict__现在只在需要时创建。

- bpo-25911: 恢复了在Windows上os.walk()中对字节路径的支持。

- bpo-26045: 在使用http.client发布非Latin-1字符串时，向错误消息添加UTF-8建议。

- bpo-26039: 添加了zipfile.ZipInfo.from_file()和zipinfo.ZipInfo.is_dir()。由Thomas Kluyver提供补丁。

- bpo-12923: 即使有异常也重置FancyURLopener的重定向计数器。基于Brian Brazil和Daniel Rocco的补丁。

- bpo-25945: 修复了解除 pickle functools.partial 对象时状态错误导致的崩溃问题。修复了 functools.partial 构造函数失败时的内存泄漏。functools.partial 的 "args" 和 "keywords" 属性现在总是分别具有 tuple 和 dict 类型。

- bpo-26202: copy.deepcopy() 现在能正确复制具有非原子属性的 range() 对象。

- bpo-23076: Path.glob() 现在在调用无效模式时会引发 ValueError。补丁由 Thomas Nyberg 提供。

- bpo-19883: 修复了 zipimport 中可能的整数溢出问题。

- bpo-26227: 在 Windows 上，socket 模块的 getnameinfo()、gethostbyaddr() 和 gethostbyname_ex() 函数现在从 ANSI 代码页而非 UTF-8 解码主机名。

- bpo-26099: site 模块现在会在 sitecustomize 模块可以导入但执行该模块时引发 ImportError 时，向 stderr 写入错误信息。对 usercustomize 做了相同的更改。

- bpo-26147: xmlrpc 现在可以处理无法用所使用的非 UTF-8 编码编码的字符串。

- bpo-25935: 垃圾回收器现在可以打破 OrderedDict 的引用循环。

- bpo-16620: 修复了 msilib.Directory.glob() 中的 AttributeError。

- bpo-26013: 增加了对旧 Python 3 版本（3.4.3 及以下）创建的损坏协议 2 pickle 的兼容性。

- bpo-26129: 废弃了在 grp.getgrgid() 中接受非整数。

- bpo-25850: 默认使用交叉编译为 64 位 Windows。

- bpo-25822: 向 urllib.parse 结果的字段添加了文档字符串。由 Swati Jaiswal 提供补丁。

- bpo-22642: 将 trace 模块的选项解析机制转换为 argparse。由 SilentGhost 提供补丁。

- bpo-24705: 修复了 sysconfig._parse_makefile 不扩展出现在 $() 变量之前的 ${} 变量的问题。

- bpo-26069: 移除了 trace 模块中已弃用的 API。

- bpo-22138: 修复了 mock.patch 在修补描述符时的行为。修补后恢复原始值。由 Sean McCully 提供补丁。

- bpo-25672: 在 ssl 模块中，如果安全的话，启用 SSL_MODE_RELEASE_BUFFERS 模式选项。

- bpo-26012: 在 pathlib.Path.[r]glob() 中不对符号链接进行 `**` 模式的遍历。

- bpo-24120: 在使用 pathlib.Path.[r]glob() 遍历树时忽略 PermissionError。由 Ulrich Petri 提供补丁。

- bpo-21815: 在 imap 响应的数据部分接受 ] 字符，以处理由 gmail 等服务器接受和产生的带有方括号的标志。

- bpo-25447: 如果 sys.stdin 没有缓冲区属性，fileinput 现在会直接使用它（恢复了向后兼容性）。

- bpo-25971: 通过 2 倍的速度优化了从浮点数创建 Fractions，通过 3 倍的速度优化了从 Decimals 创建 Fractions。

- bpo-25802: 将 importlib.abc.Loader.load_module() 的剩余实现文档化为已弃用。

- bpo-25928: 添加了 Decimal.as_integer_ratio()。

- bpo-25447: 复制 lru_cache() 包装器对象现在总是有效，与被包装对象的类型无关（通过返回未更改的原始对象）。

- bpo-25768: 使 compileall 中的函数返回布尔值而不是整数，并为返回值添加了适当的文档和测试。

- bpo-24103: 修复了 ElementTree.XMLPullParser 中可能的使用后释放问题。

- bpo-25860: os.fwalk() 在发生错误时不再跳过剩余的目录。原始由 Samson Lee 提供补丁。

- bpo-25914: 修复并简化了 OrderedDict.__sizeof__。

- bpo-25869: 优化了 ElementTree 的深拷贝；现在速度快了 20 倍。

- bpo-25873: 优化了 ElementTree 的迭代。迭代元素 Element.iter() 现在快了 40%，迭代文本 Element.itertext() 现在快了最多 2.5 倍。

- bpo-25902: 修复了 ElementTree 迭代中的各种引用计数问题。

- bpo-22227: TarFile 迭代器使用生成器重新实现。这个实现比使用类更简单。

- bpo-25638: 优化了 ElementTree.iterparse()；现在快了 2 倍。优化了 ElementTree 解析；现在快了 10%。

- bpo-25761: 改进了对损坏的 pickle 数据中错误的检测。

- bpo-25717: 恢复在打开文件时容忍大多数fstat()错误的先前行为。这是3.5a1版本中的一个回归问题，阻止了匿名临时文件在特殊情况下的工作。

- bpo-24903: 修复了当指定'-d'时compileall接受的参数数量的回归问题。对参数数量的检查已被完全删除，因为它从未正确工作过。

- bpo-25764: 在subprocess模块中，当使用preexec_fn时，保留由fork()失败引起的任何异常。

- bpo-25771: 当'package'未指定但必要时，调整importlib.util.resolve_name()的异常消息。

- bpo-6478: 在更改时区后，_strptime的正则表达式缓存现在会被time.tzset()重置。

- bpo-14285: 当使用"python -m package"选项执行包且包初始化失败时，现在会报告正确的回溯。"runpy"模块现在让包初始化的异常传递回调用者，而不是引发ImportError。

- bpo-19771: 同样在runpy和"-m"选项中，如果包甚至无法初始化（例如由于坏的 `*.pyc` 文件），则省略不相关的消息"...是一个包，不能直接执行"。

- bpo-25177: 修复了非常小和非常大的数字的平均值问题。作为副作用，statistics.mean和statistics.variance应该会显著更快。

- bpo-25718: 修复了复制状态为布尔值false的对象的问题。

- bpo-10131: 修复了minidom文档的深拷贝问题。基于Marian Ganisin的补丁。

- bpo-7990: ElementTree.Element上的dir()现在列出属性："tag", "text", "tail"和"attrib"。原始由Santoso Wijaya提供补丁。

- bpo-25725: 修复了在解包含元组指令的无效数据时pickle.loads()中的引用泄漏问题。

- bpo-25663: 在Readline completer中，避免列出重复的全局名称，并在搜索内置名称之前搜索全局命名空间。

- bpo-25688: 修复了ElementTree.iterparse()在引发错误时的文件泄露问题。

- bpo-23914: 修复了解pickle数据损坏时unpickler引发的SystemError。

- bpo-25691: 修复了删除ElementTree.Element属性时的崩溃问题。

- bpo-25624: ZipFile现在总是为目录条目写入ZIP_STORED头。由王定远提供补丁。

- bpo-25626: 修改了三个zlib函数以接受适合Py_ssize_t的大小，但在内部将这些大小限制为UINT_MAX。这解决了3.5版本中GzipFile.read()无法读取大于2或4 GiB块的回归问题。此更改影响zlib.Decompress.decompress()的max_length参数、zlib.decompress()的bufsize参数和zlib.Decompress.flush()的length参数。

- bpo-25583: 当操作系统优先考虑如EACCES这样的错误而不是EEXIST时，避免os.makedirs(exist_ok=True)引发错误。

- bpo-25593: 修改了asyncio中EventLoop.stop()的语义。

- bpo-6973: 当我们知道一个subprocess.Popen进程已经死亡时，不允许send_signal()、terminate()或kill()方法执行任何操作，因为它们可能会信号到不同的进程。

- bpo-23883: 添加了缺失的API到__all__以匹配以下模块的文档API：calendar、csv、enum、fileinput、ftplib、logging、optparse、tarfile、threading和wave。还添加了一个test.support.check__all__()辅助函数。由Jacek Kołodziej、Mauro S. M. Rodrigues和Joel Taddei提供补丁。

- bpo-25590: 在Readline completer中，每个属性只调用一次getattr()。同时完成如属性和槽这样的属性名称，这些属性由dir()列出但尚未在实例上创建。

- bpo-25498: 修复了在垃圾回收由包装memoryview创建的ctypes对象时的崩溃问题。这是3.5a1中的一个回归。基于Eryksun的补丁。

- bpo-25584: 将"escape"添加到glob模块的__all__列表中。

- bpo-25584: 修复了以 `**` 开头的递归glob()模式。

- bpo-25446: 修复 smtplib 的 AUTH LOGIN 支持中的回归问题。

- bpo-18010: 修复 pydoc web 服务器的模块搜索功能，以处理导入包时的异常。

- bpo-25554: 消除了正则表达式解析中的循环引用。

- bpo-18973: 日历模块的命令行界面现在使用 argparse 而不是 optparse。

- bpo-25510: 如果 FileInput 以二进制模式打开，fileinput.FileInput.readline() 现在在末尾返回 b'' 而不是 ''。由 Ryosuke Ito 提供补丁。

- bpo-25503: 修复了 inspect.getdoc() 对于属性的继承文档字符串的处理。原始由 John Mark Vandenberg 提供补丁。

- bpo-25515: 在 uuid.uuid4 中始终使用 os.urandom 作为随机性来源。

- bpo-21827: 修复了 textwrap.dedent() 当最大公共空白是最小前导空白的子字符串时的情况。基于 Robert Li 的补丁。

- bpo-25447: lru_cache() 包装器对象现在可以被复制和 pickle（通过返回未更改的原始对象）。

- bpo-25390: typing: 不因 Union[str, Pattern] 而崩溃。

- bpo-25441: asyncio: 当套接字关闭时从 drain() 引发错误。

- bpo-25410: 清理并修复了 OrderedDict 的 C 实现中的小错误。

- bpo-25411: 通过更好地使用 email 包，改进了 SMTPHandler 中的 Unicode 支持。感谢用户 simon04 的补丁。

- 将 imp 模块从 PendingDeprecationWarning 移动到 DeprecationWarning。

- bpo-25407: 移除了关于 formatter 模块在 Python 3.6 中被移除的提及。

- bpo-25406: 修复了 OrderedDict.move_to_end() 的 C 实现中的一个错误，该错误导致在将几个项目移动到有序字典的开头后在迭代中出现分段错误或挂起。

- bpo-25382: pickletools.dis() 现在为 MEMOIZE 操作码输出隐式备忘录索引。

- bpo-25357: 向 binascii.b2a_base64() 添加了一个可选的新行参数。base64.b64encode() 使用它来避免内存拷贝。

- bpo-24164: 需要使用关键字参数调用 `__new__` 的对象，现在可以使用低于协议版本4的pickle协议进行序列化。

- bpo-25364: zipfile 现在可以在禁用线程的构建中工作。

- bpo-25328: 如果 decode_data 和 enable_SMTPUTF8 都被设置为 true，smtpd 的 SMTPChannel 现在会正确地引发 ValueError。

- bpo-16099: RobotFileParser 现在支持 Crawl-delay 和 Request-rate 扩展。由 Nikolay Bogoychev 提供补丁。

- bpo-25316: 当未安装 MSVC 时，distutils 会引发 OSError 而不是 DistutilsPlatformError。

- bpo-25380: 修复了 pickletools.opcodes 中 STACK_GLOBAL 操作码的协议。

- bpo-23972: 更新了 asyncio 的数据报创建方法，允许在绑定套接字之前设置 reuseport 和 reuseaddr 套接字选项。与现有的 asyncio create_server 方法类似，如果操作系统是 'posix'（除非平台是 Cygwin），数据报套接字的 reuseaddr 选项默认为 True。由 Chris Laws 提供补丁。

- bpo-25304: 添加了 asyncio.run_coroutine_threadsafe()。这让你可以从另一个线程向循环提交一个协程，返回一个 concurrent.futures.Future。由 Vincent Michel 提供。

- bpo-25232: 修复 CGIRequestHandler，使其在第一个问号 (?) 处而不是最后一个问号处将查询与 URL 分开。补丁来自 Xiang Zhang。

- bpo-24657: 防止 CGIRequestHandler 像处理路径一样在 URL 的查询部分折叠斜杠。补丁来自 Xiang Zhang。

- bpo-25287: 如果不支持 crypt.METHOD_CRYPT，则不要将其添加到 crypt.methods 中。检查是否支持，例如在 OpenBSD 上可能不支持。

- bpo-23600: tzinfo.fromutc() 的默认实现在某些情况下返回了错误的结果。

- bpo-25203: 失败的 readline.set_completer_delims() 不再使模块处于不一致状态。

- bpo-25011: rlcompleter 现在会省略私有和特殊属性名称，除非前缀以下划线开头。

- bpo-25209: rlcompleter 现在可以在完成的关键字后添加空格或冒号。

- bpo-22241: timezone.utc 名称现在是简单的 'UTC'，而不是 'UTC-00:00'。

- bpo-23517: datetime.datetime 的 fromtimestamp() 和 utcfromtimestamp() 方法现在将微秒四舍五入到最近的偶数整数（ROUND_HALF_EVEN），如同 round(float)，而不是向负无穷方向舍入（ROUND_FLOOR）。

- bpo-23552: Timeit 现在在最佳和最差时间之间存在显著（4倍）差异时发出警告。补丁来自 Serhiy Storchaka。

- bpo-24633: site-packages/README -> README.txt。

- bpo-24879: help() 和 pydoc 现在可以按照命名元组字段定义的顺序而非字母顺序列出它们。排序由 _fields 属性（如果存在）决定。

- bpo-24874: 提高 itertools.cycle() 的速度并使其 pickle 更加紧凑。

- 修复了当第一个参数不是列表时 itertools.cycle.__setstate__() 的崩溃问题。

- bpo-20059: urllib.parse 在所有无效端口上引发 ValueError。补丁来自 Martin Panter。

- bpo-24360: 为无效标识符改进 argparse.Namespace() 的 __repr__。补丁来自 Matthias Bussonnier。

- bpo-23426: distutils 中的 run_setup 被破坏。补丁来自 Alexander Belopolsky。

- bpo-13938: 2to3 将 StringTypes 转换为元组。补丁来自 Mark Hammond。

- bpo-2091: open() 接受包含 '+' 的 'U' 模式字符串，但 'U' 只能与 'r' 一起使用。补丁来自 Jeff Balogh 和 John O'Connor。

- bpo-8585: 改进了 zipimporter2 的测试。补丁来自 Mark Lawrence。

- bpo-18622: unittest.mock.mock_open().reset_mock 会无限递归。补丁来自 Nicola Palumbo 和 Laurent De Buyst。

- bpo-24426: 正则表达式中的快速搜索优化现在适用于以捕获组开始的模式。快速搜索优化现在不能在编译时禁用。

- bpo-23661: unittest.mock 的 side_effects 现在可以再次是异常。这是对 Python 3.4 的一个回归。补丁来自 Ignacio Rossi

- bpo-13248: 移除已弃用的 inspect.getmoduleinfo 函数。

- bpo-25578: 修复 SSLSocket.getpeercer() 中的另一个内存泄漏问题。

- bpo-25530: 默认情况下，在创建 ssl.SSLContext 时禁用易受攻击的 SSLv3 协议。

- bpo-25569: 修复 SSLSocket.getpeercert() 中的内存泄漏问题。

- bpo-25471: 从 accept() 返回的套接字不应显示为非阻塞。

- bpo-25319: 当 threading.Event 被重新初始化时，底层条件应使用常规锁而不是递归锁。

- 如果主机已解析，则跳过 getaddrinfo。由 A. Jesse Jiryu Davis 提供补丁。

- bpo-26050: 添加 asyncio.StreamReader.readuntil() 方法。由 Марк Коренберг 提供补丁。

- bpo-25924: 在 OS X 10.5 或更高版本上避免不必要的 getaddrinfo(3) 调用序列化。原始补丁由 A. Jesse Jiryu Davis 提供。

- bpo-26406: 在当前版本的 OpenBSD 和 NetBSD 上避免不必要的 getaddrinfo(3) 调用序列化。由 A. Jesse Jiryu Davis 提供补丁。

- bpo-26848: 修复 asyncio/subprocess.communicate() 以处理空输入。由 Jack O'Connor 提供补丁。

- bpo-27040: 添加 loop.get_exception_handler 方法

- bpo-27041: asyncio: 添加 loop.create_future 方法

### IDLE

- bpo-20640: 为 idlelib.configHelpSourceEdit 添加测试。由 Saimadhav Heblikar 提供补丁。

- 在 IDLE 文档的 'IDLE-控制台差异' 部分，澄清使用 IDLE 运行如何影响 sys.modules 和标准流。

- bpo-25507: 修复 IOBinding 中阻止打印的错误更改。增强 IOBinding htest 以包括所有主要 IOBinding 功能。

- bpo-25905: 恢复 README.txt 中 ' 到 ’ 右单引号的不必要转换，并用 'ascii' 打开此文件和 NEWS.txt。将 CREDITS.txt 重新编码为 utf-8 并用 'utf-8' 打开。

- bpo-15348: 在关闭调试器窗口（在 IDLE 进程中运行）之前停止调试器引擎（通常在用户进程中）。这防止了被捕获并忽略的 RuntimeErrors。

- bpo-24455: 防止IDLE在以下情况下挂起：a) 当调试器处于活动状态时关闭shell（15347）；b) 使用[X]按钮关闭调试器（15348）；以及c) 当调试器已经处于活动状态时再次激活（24455）。Mark Roseman的补丁通过两个更改来实现这一点。1. 使用为此目的设计的tcl vwait机制（而不是root.mainloop & .quit）暂停和恢复gui.interaction方法。2. 在gui.run中，允许任何现有的交互首先终止。

- 在IDLE的'终止程序？'消息中，将'程序'改为'您的程序'，以更清楚地表明所指的是当前运行的用户程序，而不是IDLE本身。

- bpo-24750: 改善IDLE编辑器窗口状态栏的外观。Patch by Mark Roseman。

- bpo-25313: 更改新内置文本颜色主题的处理，以更好地解决由IDLE Dark的添加引入的兼容性问题。在idlelib中一致地使用修订后的idleConf.CurrentTheme。

- bpo-24782: 扩展配置现在是IDLE首选项对话框中的一个标签，而不是一个单独的对话框。原来的标签现在是一个排序列表。Patch by Mark Roseman。

- bpo-22726: 重新激活配置对话框帮助按钮，包含一些关于其他按钮和新IDLE Dark主题的内容。

- bpo-24820: IDLE现在有一个'IDLE Dark'内置文本颜色主题。它或多或少是IDLE Classic的反转，背景为钴蓝色。字符串、注释、关键字等仍然是绿色、红色、橙色等。要在2015年11月之前发布的IDLEs中使用它，点击'保存为新的自定义主题'按钮并输入一个新名称，如'Custom Dark'。自定义主题适用于任何IDLE版本，并且可以修改。

- bpo-25224: README.txt现在是IDLE开发者和好奇用户的idlelib索引。以前的用户内容现在在IDLE文档章节中。'IDLE'现在意味着'集成开发和学习环境'。

- bpo-24820: 用户现在可以在设置->自定义高亮中设置断点颜色。原始由Mark Roseman提供补丁。

- bpo-24972: 非活动选择背景现在在所有系统上都与用户配置的活动选择背景相匹配。在Windows上，找到的项目现在总是高亮显示。初始由Mark Roseman提供补丁。

- bpo-24570: Idle：在受tk回归影响的Mac上显示调用提示和完成框。初始补丁由Mark Roseman提供。

- bpo-24988: Idle ScrolledList上下文菜单（在调试器中使用）现在在Mac Aqua上工作。由Mark Roseman提供补丁。

- bpo-24801: 使右键点击上下文菜单在Mac Aqua上工作。由Mark Roseman提供补丁。

- bpo-25173: 将tkinter消息框与特定小部件关联。对于Mac OSX，使它们成为'表单'。由Mark Roseman提供补丁。

- bpo-25198: 增强现在用于Idle Help的初始html查看器。正确缩进固定间距文本（由Mark Roseman提供补丁）。给代码片段一个非常类似Sphinx的浅蓝灰色背景。重用用户为shell和编辑器设置的初始宽度和高度。当使用目录（TOC）菜单时，将部分标题放在屏幕顶部。

- bpo-25225: 压缩并重写Idle文档中关于文本颜色的部分。

- bpo-21995: 解释IDLE和控制台Python之间的一些差异。

- bpo-22820: 解释在从Idle编辑器运行文件时需要 print 的原因。

- bpo-25224: 文档：增加Idle功能列表和无子进程部分。

- bpo-25219: 更新Idle命令行选项的文档。有些选项缺失，注释也不正确。

- bpo-24861: 大多数idlelib是私有的，可能会更改。使用idleib.idle.*来启动Idle。参见idlelib.__init__.__doc__。

- bpo-25199: Idle：为未来的维护者添加同步注释。

- bpo-16893: 将 Idle 文档显示的 help.txt 替换为 help.html。新的 idlelib/help.html 是去除右侧空格的 Doc/build/html/library/idle.html。它看起来比 help.txt 更好，并将更好地记录发布的 Idle。适用于此文件的 tkinter html 查看器是由 Rose Roseman 编写的。现在未使用的 EditorWindow.HelpDialog 类和 helt.txt 文件已被弃用。

- bpo-24199: 弃用未使用的 idlelib.idlever，可能在 3.6 中移除。

- bpo-24790: 移除多余的代码（这也造成了 2 和 3 的冲突）。

### 文档

- bpo-26736: 尽可能在文档中使用 HTTPS 作为外部链接。

- bpo-6953: 重新组织 Readline 模块文档，将相关函数分组，并添加更多细节，如访问哪些底层的 Readline 函数和变量。

- bpo-23606: 向 ctypes 文档添加关于 cdll.msvcrt 的注释。

- bpo-24952: 阐明 "threading" 和 "_thread" 模块中 stack_size() 的默认 size 参数。来自 Mattip 的补丁。

- bpo-26014: 更新 3.x 打包文档：* 现在在旧版页面中提供了指向新文档的 "参见" 链接 * 更新了指向 setuptools 文档的链接

### 测试

- bpo-21916: 为 turtle 模块添加了测试。由 ingrid、Gregory Loyse 和 Jelle Zijlstra 提供补丁。

- bpo-26295: 当使用 "python3 -m test --testdir=TESTDIR" 时，regrtest 不会给测试模块名添加 "test." 前缀。

- bpo-26523: 多进程线程池（multiprocessing.dummy.Pool）未经测试。

- bpo-26015: 为可变序列的迭代器的 pickle 操作添加了新测试。

- bpo-26325: 添加了 test.support.check_no_resource_warning() 来检查是否未发出 ResourceWarning。

- bpo-25940: 更改 test_ssl 以更多地使用其内部本地服务器。这避免依赖 svn.python.org，后者最近更改了根证书。

- bpo-25616: OrderedDict 的测试从 test_collections 中提取出来，放入单独的文件 test_ordered_dict 中。

- bpo-25449: 为 OrderedDict 的子类添加了测试。

- bpo-25188: 添加 -P/--pgo 到 test.regrtest，以在运行测试套件用于PGO构建时抑制错误输出。初始由Alecsandru Patrascu提供补丁。

- bpo-22806: 添加 `python -m test --list-tests` 命令以列出测试。

- bpo-18174: `python -m test --huntrleaks ...` 现在也会检查文件描述符的泄漏。补丁由Richard Oudkerk编写。

- bpo-25260: 修复 `python -m test --coverage` 在Windows上的问题。移除忽略目录的列表。

- `PCbuild\rt.bat` 现在可以接受无限数量的参数传递给regrtest.py。之前有9个的限制。

- bpo-26583: 如果无法写入字节码文件，则在test_import中跳过test_timestamp_overflow测试。

### 构建

- bpo-21277: 不要试图将_ctypes与ffi_convenience库链接。

- bpo-26884: 修复交叉构建中扩展模块的链接问题。由Xavier de Gaye提供补丁。

- bpo-26932: 修复了对定义为枚举值而非宏的RTLD_*常量的支持（特别是在Android上）。由Chi Hsuan Yen提供补丁。

- bpo-22359: 在交叉编译时禁用运行_freeze_importlib和pgen的规则。这些程序的输出通常与源代码一起保存，并且在本地构建时仍会重新生成。由Xavier de Gaye提供补丁。

- bpo-21668: 将audioop、_datetime、_ctypes_test模块链接到libm，除了Mac OS X。补丁由Chi Hsuan Yen编写。

- bpo-25702: 添加了一个--with-lto配置选项，该选项将在make profile-opt期间启用构建时的链接时间优化。已知一些编译器和工具链在使用LTO时不会产生稳定的代码，因此在依赖它之前确保彻底测试。它可以比仅使用profile-opt提供几个%的速度提升。

- bpo-26624: 添加了对ucrtbase[d].dll版本的验证，并对旧版本发出警告。

- bpo-17603: 通过使用struct stat中st_blocks的低级检查，避免关于不存在的fileblocks.o文件的错误。

- bpo-26079: 修复 tix-8.4.3.6 的构建输出文件夹。由 Bjoern Thiel 提交补丁。

- bpo-26465: 更新 Windows 构建以使用 OpenSSL 1.0.2g。

- bpo-25348: 添加了 `--pgo` 和 `--pgo-job` 参数到 `PCbuild\build.bat` 以便使用 Profile-Guided Optimization 构建。旧的 `PCbuild\build_pgo.bat` 脚本已被移除。

- bpo-25827: 向 `configure` 添加了对使用 ICC 构建的支持，包括一个新的 `--with-icc` 标志。

- bpo-25696: 修复了在 UNIX 上使用 make -j9 安装 Python 的问题。

- bpo-24986: 现在可以在 Windows 上构建 Python 而不会在没有外部库的情况下出现错误。

- bpo-24421: 在构建扩展之前，先编译 Modules/_math.c 一次。之前如果数学和 cmath 构建同时进行，可能会导致编译失败。

- bpo-26465: 更新 OS X 10.5+ 仅 32 位安装程序，以构建和链接 OpenSSL 1.0.2g。

- bpo-26268: 更新 Windows 构建以使用 OpenSSL 1.0.2f。

- bpo-25136: 支持 Apple Xcode 7 的新文本 SDK stub 库。

- bpo-24324: 当使用 gcc 时不启用不可达代码警告，因为该选项在旧版本的 gcc 中不起作用，并且在 gcc-4.5 之后已被静默移除。

### Windows

- bpo-27053: 更新 make_zip.py 以正确生成库 ZIP 文件。

- bpo-26268: 更新 prepare_ssl.py 脚本以处理不包含 include 目录内容的 OpenSSL 版本（即 1.0.2e 及更高版本）。

- bpo-26071: bdist_wininst 创建的二进制文件无法启动并找到 32 位 Python

- bpo-26073: 更新启动器中的魔法数字列表

- bpo-26065: 在生成可嵌入发行版时从库中排除 venv。

- bpo-25022: 删除了非常过时的 PC/example_nt/ 目录。

### 工具/示例

- bpo-26799: 修复 python-gdb.py：不要在 Python 代码加载时一次性获取 C 类型，而是按需获取 C 类型。如果在 Python 可执行文件之前加载 python-gdb.py，C 类型可以改变。补丁由 Thomas Ilsche 编写。

- bpo-26271: 修复Freeze工具以正确使用通过configure传递的标志。补丁由Daniel Shaulov提供。

- bpo-26489: 向Tools/parser/unparse.py添加字典解包支持。由Guo Ci Teo提供补丁。

- bpo-26316: 修复Argument Clinic中的变量名拼写错误。

- bpo-25440: 修复python-config --extension-suffix的输出。

- bpo-25154: The pyvenv script has been deprecated in favour of `python3 -m venv`.

### C API

- bpo-26312: 现在在所有使用PyArg_ParseTupleAndKeywords()的编程错误中都会引发SystemError。之前在某些编程错误中会引发RuntimeError。

- bpo-26198: 现在在解析"es#"和"et#"格式单元时发生缓冲区溢出会引发ValueError而不是TypeError。在解析格式字符串时发生编程错误会引发SystemError而不是TypeError。

## Python 3.5.5 正式版

发布日期e: 2018-02-04

在 3.5.5 版本中没有新的更改。

## Python 3.5.5 rc1

发布日期: 2018-01-23

### 安全性

- bpo-32551: bpo-29139 中对 `sys.path[0]` 初始化的更改导致了一个回归问题，揭示了在执行来自zipfile、目录或其他导入位置的 `__main__` 时sys.path初始化的不一致性。这被认为是一个潜在的安全问题，因为在之前不会出现的情况下，可能导致特权进程从用户控制的目录意外加载代码。解释器现在一致地避免将导入位置的父目录添加到 `sys.path` 中，并确保在插入命令行指定的导入位置时不会无意中修改其他 `sys.path` 条目。（最初作为 bpo-29723 针对Python 3.6rc1报告，但当时忽略了即将发布的Python 3.5.4也会受到影响）

- bpo-30657: Fixed possible integer overflow in PyBytes_DecodeEscape, CVE-2017-1000158. Original patch by Jay Bosamiya; rebased to Python 3 by Miro Hrončok.

- bpo-30947: 将内嵌的 libexpat 从版本 2.2.1 升级到 2.2.3 以获取安全修复。

### 核心与内置函数

- bpo-31095: 修复由未调用 `PyObject_GC_UnTrack()` 的 `tp_dealloc` 引起的GC期间潜在崩溃问题。

### 库

- bpo-32072: 修复了二进制 plists 的问题：修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。

- bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题（libexpat bug 115）：https://github.com/libexpat/libexpat/issues/115

## Python 3.5.4 正式版

发布日期: 2017-08-07

### 库

- bpo-30119: ftplib.FTP.putline() now throws ValueError on commands that contains CR or LF. Patch by Dong-hee Na.

## Python 3.5.4 rc1

发布日期: 2017-07-23

### 安全性

- bpo-30730: 在 Windows 上防止子进程中的环境变量注入。防止传递其他环境变量和命令参数。

- bpo-30694: Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes of multiple security vulnerabilities including: CVE-2017-9233 (External entity infinite loop DoS), CVE-2016-9063 (Integer overflow, re-fix), CVE-2016-0718 (Fix regression bugs from 2.2.0's fix to CVE-2016-0718) and CVE-2012-0876 (Counter hash flooding with SipHash). Note: the CVE-2016-5300 (Use os-specific entropy sources like getrandom) doesn't impact Python, since Python already gets entropy from the OS to set the expat secret using `XML_SetHashSalt()`.

- bpo-30500: 修复 urllib.parse.splithost() 正确解析片段。例如，`splithost('//127.0.0.1#@evil.com/')` 现在正确返回 `127.0.0.1` 主机，而不是将 `@evil.com` 视为认证中的主机（`login@host`）。

- bpo-29591: Update expat copy from 2.1.1 to 2.2.0 to get fixes of CVE-2016-0718 and CVE-2016-4472. See https://sourceforge.net/p/expat/bugs/537/ for more information.

### 核心与内置函数

- bpo-30876: 从未加载的包中进行相对导入现在会重新导入包，而不是因SystemError失败。从非包中进行相对导入现在会因ImportError而非SystemError失败。

- bpo-30765: 当PyThread_acquire_lock()被要求不阻塞时，避免在pthread_mutex_lock()中阻塞。

- bpo-27945: 修复了在搜索、插入或比较过程中输入集合被修改时，字典的各种段错误。基于 Duane Griffin 和 Tim Mitchell 的补丁。

- bpo-25794: 修复了 type.__setattr__() 和 type.__delattr__() 对于非 interned 属性名称的问题。基于 Eryk Sun 的补丁。

- bpo-29935: 修复了在传递错误类型的索引时，tuple、list 和 deque 的 index() 方法中的错误消息。

- bpo-28876: 即使 `len(range)` 引发 `OverflowError`，`bool(range)` 也能正常工作。

- bpo-29600: 修复在StopIteration中包装协程返回值的问题。

- bpo-29537: 恢复与由 CPython 3.5.0 至 3.5.2 生成的字节码文件的运行时兼容性，并调整 eval 循环以避免可能由它们可能包含的 BUILD_MAP_UNPACK_WITH_CALL 操作码的错误变体引起的问题。由 Petr Viktorin、Serhiy Storchaka 和 Nick Coghlan 提供补丁。

- bpo-28598: 支持在调用 str.__mod__ 之前调用 str 子类的 __rmod__。由 Martijn Pieters 提供补丁。

- bpo-29602: 修复了在复杂子类的构造函数和具有 __complex__ 方法的输入中对有符号零的错误处理。由 Serhiy Storchaka 提供补丁。

- bpo-29347: 修复了在创建弱引用对象时可能解引用未定义指针的问题。

- bpo-29438: 修复了key sharing dict中的use-after-free问题。

- bpo-29319: 防止RunMainFromImporter覆盖sys.path[0]。

- bpo-29337: 修复了比较代码对象时可能出现的BytesWarning。警告可能在编译时发出。

- bpo-29478: 在使用Compat32策略时，如果指定了max_line_length=None，它将不再被忽略。补丁由Mircea Cosbuc提供。

### 库

- bpo-29403: 修复``unittest.mock``模块的autospec功能，使其不再对绑定到方法的内置函数报错。由Aaron Gallagher提供补丁。

- bpo-30961: 修复了tracemalloc中借用引用的递减问题。

- bpo-30886: 修复 multiprocessing.Queue.join_thread()：现在即使线程是由创建队列的同一进程启动的，它也会等待线程完成。

- bpo-29854: 修复使用 readline 的 history-size 选项时 readline 中的段错误。由 Nir Soffer 提供补丁。

- bpo-30807: 当传递一个极小的值时，signal.setitimer() 可能会禁用计时器。极小的值（如 1e-6）是 setitimer() 有效的非零值，它被指定为采取微秒级间隔。然而，在某些平台上，我们的转换例程可能将 1e-6 转换为零间隔，从而禁用计时器而不是（重新）调度它。

- bpo-30441: 修复在迭代 os.environ 时修改它导致的错误。

- bpo-30532: 修复电子邮件头值解析器在某些情况下丢弃折叠空白的问题。

- bpo-29169: 将 zlib 更新至 1.2.11。

- bpo-30879: os.listdir() 和 os.scandir() 现在在使用字节类参数调用时会发出字节名称。

- bpo-30746: 禁止在 `os.putenv()` 和 `os.spawn*()` 的环境变量名中使用 '=' 字符。

- bpo-29755: 修复了 gettext 模块中的 lgettext() 系列函数。它们现在总是返回字节。

- bpo-30645: 修复imp.load_package()中的路径计算，修复仅随字节码一起提供包的情况。由Alexandru Ardelean提供补丁。

- bpo-23890: unittest.TestCase.assertRaises() 现在手动打破引用循环，以避免对象存活时间超过预期。

- bpo-30149: inspect.signature() now supports callables with variable-argument parameters wrapped with partialmethod. Patch by Dong-hee Na.

- bpo-29931: 修复了 ipaddress.ip_interface 对象的比较检查。补丁由 Sanjay Sundaresan 提供。

- bpo-24484: 避免多进程清理中的竞争条件。

- bpo-28994: 对于由 atexit 注册的回调中引发的 SystemExit，不再显示回溯。

- bpo-30508: 如果调用了 Task/Future 的 "cancel()" 方法，则不记录异常。

- bpo-28556: typing 模块的更新：添加通用的 AsyncContextManager，为所有版本添加对 ContextManager 的支持。原始 PR 由 Jelle Zijlstra 和 Ivan Levkivskyi 提供。

- bpo-29870: 修复 asyncio/ssl 实现中当连接被中止时 SSL 套接字的泄漏问题。由 Michaël Sghaïer 提供补丁。

- bpo-29743: 在握手过程中关闭传输会导致打开的套接字泄漏。由 Nikolay Kim 提供补丁。

- bpo-27585: 修复 asyncio.Lock 中的等待者取消问题。由 Mathieu Sornay 提供补丁。

- bpo-30418: 在 Windows 上，如果子进程仍在运行但关闭了管道，subprocess.Popen.communicate() 现在也会忽略 stdin.write() 上的 EINVAL。

- bpo-30378: 修复 logging.handlers.SysLogHandler 无法处理 IPv6 地址的问题。

- bpo-29960: 当_random.Random.setstate()引发异常时，保留生成器状态。补丁由Bryan Olson提供。

- bpo-30414: multiprocessing.Queue._feed 后台运行线程在异常时不从主循环中中断。

- bpo-30003: 修复HZ编解码器中转义字符的处理。基于Ma Lin的补丁。

- bpo-30301: 修复在 spawn 和 forkserver 启动方法下使用SimpleQueue.empty()时的AttributeError。

- bpo-30329: imaplib和poplib现在在shutdown(SHUT_RDWR)时捕获Windows socket WSAEINVAL错误（代码10022）：尝试了无效操作。此错误有时发生在SSL连接上。

- bpo-30375: 编译正则表达式时发出的警告现在总是指向用户代码中的行。之前如果从组或条件内部发出，它们可能指向re模块的内部。

- bpo-30048: 修复了当任务运行协程且协程返回而没有任何更多 `await` 时，``Task.cancel()``可能被忽略的问题。

- bpo-29990: 修复GB18030解码器中的范围检查。原由Ma Lin提供补丁。

- bpo-26293: 由于zipfile损坏导致的变更。（另见：bpo-29094）

- bpo-30243: 移除了_json的扫描器和编码器的__init__方法。误用它们可能导致内存泄漏或崩溃。现在扫描器和编码器对象在__new__方法中完全初始化。

- bpo-30185: 在收到Ctrl-C时，避免forkserver辅助进程中的KeyboardInterrupt回溯。

- bpo-28556: 对typing模块的各种更新：添加typing.NoReturn类型，使用WrapperDescriptorType，小错误修复。原PR由Jim Fasarakis-Hilliard和Ivan Levkivskyi提供。

- bpo-30205: 修复Linux上未绑定的AF_UNIX套接字的getsockname()。

- bpo-30070: 修复了解析模块中错误处理的内存泄漏和崩溃问题。

- bpo-30061: 修复了当readline()或__next__()分别返回不可大小化的对象时，IOBase方法__next__()和readlines()中的崩溃。修复了由不检查PyObject_Size()、PySequence_Size()或PyMapping_Size()的结果可能引起的其他错误。

- bpo-30068: 当存在hint时，_io._IOBase.readlines将首先检查是否关闭。

- bpo-29694: 修复了pathlib mkdir与flags parents=True时的竞争条件。补丁由Armin Rigo提供。

- bpo-29692: 修复了contextlib.contextmanager中RuntimeError异常的任意解链。由Siddharth Velankar提供补丁。

- bpo-29998: Pickling和复制ImportError现在保留name和path属性。

- bpo-29942: 修复了在遇到长串空可迭代对象时，itertools.chain.from_iterable 的崩溃问题。

- bpo-27863: 修复了由竞争条件和错误类型引起的 ElementTree 中的多个崩溃问题。

- bpo-28699: 修复了 multiprocessing.pool 中池的一个 bug，即在可迭代对象的最开始引发异常可能会吞掉异常或使程序挂起。由 Davin Potts 和 Xiang Zhang 提供补丁。

- bpo-25803: 当操作系统优先考虑如 EACCES 而不是 EEXIST 的错误时，避免 Path.mkdir(exist_ok=True) 引发不正确的错误。

- bpo-29861: 在 multiprocessing.Pool 中，任务、它们的参数和结果一旦完成就释放引用。

- bpo-29884: faulthandler: 在拆卸期间恢复旧的sigaltstack。由Christophe Zeitouny提供补丁。

- bpo-25455: 修复了递归缓冲文件类对象repr中的崩溃。

- bpo-29800: 修复了如果partial.keywords的键不是字符串时partial.__repr__的崩溃。由Michael Seifert提供补丁。

- bpo-29742: 如果 get_extra_info() 在关闭的 ssl 传输上调用，将引发异常。由 Nikolay Kim 提供补丁。

- bpo-8256: 修复了如果sys.stdin或sys.stdout的属性"encoding"或"errors"未设置或不是字符串时可能导致的input()失败或崩溃。

- bpo-28298: 修复了一个bug，该bug阻止了数组'Q'、'L'和'I'接受大整数（具有__int__方法的对象）作为元素。由Oren Milman提供补丁。

- bpo-29615: SimpleXMLRPCDispatcher 不再将 KeyError（或任何其他异常）链接到调度方法中引发的异常。由 Petr Motejlek 提供补丁。

- bpo-29704: asyncio.subprocess.SubprocessStreamProtocol 在所有管道关闭之前不再关闭。

- bpo-29703: 修复 asyncio，支持在子进程中实例化新的事件循环。

- bpo-29376: 修复 threading._DummyThread.is_alive() 中的断言错误。

- bpo-29110: 修复 aifc.open() 中当文件作为文件系统路径给出且不是有效的 AIFF 格式时的文件对象泄漏问题。由 Anthony Zhang 提供补丁。

- bpo-28961: 修复unittest.mock._Call辅助函数：不再忽略name参数。由Jiajun Huang提供补丁。

- bpo-29532: 修改传递给 functools.partial() 的 kwarg 字典不再影响创建后的 partial 对象。

- bpo-28556: 对 typing 模块进行了多项更新：typing.Counter、typing.ChainMap、改进的 ABC 缓存等。原始 PR 由 Jelle Zijlstra、Ivan Levkivskyi、Manuel Krebber 和 Łukasz Langa 提供。

- bpo-29100: 修复了 Python 3.6.0 中引入的 datetime.fromtimestamp() 的回归问题：检查最小和最大年份。

- bpo-29519: 修复了在与multiprocessing和自定义编解码器的罕见组合使用时，weakref在解释器关闭期间抛出异常的问题。

- bpo-29416: 防止 pathlib.Path.mkdir 中的无限循环。

- bpo-29444: 修复了 match 对象的 group() 方法中的越界缓冲区访问。基于 WGH 的补丁。

- bpo-29335: 修复了当子进程已退出到停止状态而不是终止状态（例如：在 ptrace 下）时的 subprocess.Popen.wait()。

- bpo-29290: 修复了 argparse 中帮助消息会在非断行空格处换行的回归问题。

- bpo-28735: 修复了 mock.MagickMock 与 mock.ANY 的比较。

- bpo-29011: 通过向typing模块添加Deque来修复一个重要的遗漏。

- bpo-29219: 修复了未初始化的 ctypes.CDLL 实例的 repr 中的无限递归。

- bpo-28969: 修复了functools.lru_cache的C实现中的竞态条件。当缓存函数满时，如果同时从不同线程以相同的未缓存参数调用，可能会引发KeyError。

- bpo-29142: 在urllib.request中，no_proxy环境变量中带有前导点的后缀可以再次匹配相关的主机名（例如.b.c匹配a.b.c）。由Milan Oberkirch提供补丁。

### 文档

- bpo-30176: 在curses文档中添加缺失的属性相关常量。

- bpo-26985: 在inspect文档中添加缺失的代码对象信息。

- bpo-28929: 将文档链接到其在GitHub上的源文件。

- bpo-25008: 将smtpd.py文档标记为实际上已弃用，并添加指向aiosmtpd的指针，这是一个基于asyncio的第三方替代品。

- bpo-26355: 在每个页面上添加指向相应主要版本文档的规范头部链接。由Matthias Bussonnier提供补丁。

- bpo-29349: 修复构建文档代码中的Python 2语法。

### 测试

- bpo-30822: 修复 regrtest 命令行解析器以允许传递 -u extralargefile 来运行 test_zipfile64。

- bpo-30383: regrtest: 增强 regrtest 并从主分支回传功能。添加选项：--coverage、--testdir、--list-tests（列出测试文件，不运行它们）、--list-cases（列出测试标识符，不运行它们，bpo-30523）、--matchfile（从文本文件加载测试过滤器列表，bpo-30540）、--slowest（--slow 的别名）。增强输出：添加时间戳、测试结果、当前运行的测试、“Tests result: xxx”总结与总持续时间等。修复 regrtest 中的引用泄漏狩猎，--huntrleaks：regrtest 现在预热缓存，显式创建所有按需创建的内部单例以防止在检查引用泄漏时出现假阳性。(bpo-30675)。

- bpo-30357: test_thread: setUp() 现在使用 support.threading_setup() 和 support.threading_cleanup() 来等待线程完成，以避免对后续测试产生随机副作用。初始补丁由 Grzegorz Grzywacz 编写。

- bpo-28087: 在 macOS 上跳过 test_asyncore 和 test_eintr 的 poll 失败。由于某些 macOS 版本上底层系统 poll 函数的未解决问题，在 macOS 上运行时跳过 select.poll 的一些测试。

- bpo-30197: 增强了 test.support 模块中的 swap_attr() 和 swap_item() 函数。它们现在可以在 with 语句内部删除替换的属性或项目时工作。属性或项目的旧值（如果不存在则为 None）现在将被赋值给 "as" 子句的目标，如果有的话。

- bpo-29571: 为了匹配 `re.LOCALE` 标志的行为，test_re.test_locale_flag 现在使用 `locale.getpreferredencoding(False)` 来确定测试正则表达式的候选编码（允许它在默认区域编码是多字节编码时正确跳过测试）

### 构建

- bpo-29243: 在配置为 `--enable-optimizations` 时，防止在 `make test`、``make install``和一些其他make目标期间不必要的Python重新构建。

- bpo-23404: 不再基于文件修改时间重新生成已生成的文件：该操作现在是显式的。用``make regen-all``替换 `make touch`。

- bpo-29643: 修复 `--enable-optimization` 不起作用的问题。

### Windows

- bpo-30687: 在Windows上构建时定位msbuild.exe而不是vcvarsall.bat。

- bpo-29392: 防止将无效参数传递到 msvcrt 模块时崩溃。

### C API

- bpo-27867: 如果 Py_LIMITED_API 设置为介于 0x03050400 和 0x03060000（不包括）或 0x03060100 或更高之间的值，则函数 PySlice_GetIndicesEx() 被替换为宏。

- bpo-29083: 修正了一些公共API函数的声明。PyArg_VaParse()和PyArg_VaParseTupleAndKeywords()在有限API中不可用。当定义了PY_SSIZE_T_CLEAN时，PyArg_ValidateKeywordArguments()、PyArg_UnpackTuple()和Py_BuildValue()在版本<3.3的有限API中不可用。

## Python 3.5.3 正式版

发布日期: 2017-01-17

在 3.5.3rc1 和 3.5.3 最终版之间没有代码更改。

## Python 3.5.3 rc1

发布日期: 2017-01-02

### 安全性

- bpo-27278: 修复在Linux上使用getrandom()实现的os.urandom()。将大小截断为INT_MAX，并循环直到收集足够的随机字节，而不是直接将Py_ssize_t转换为int。

- bpo-22636: 避免 ctypes.util.find_library() 的 shell 注入问题。

### 核心与内置函数

- bpo-29073: bytearray 格式化不再在第一个空字节处截断。

- bpo-28932: 如果不存在<sys/random.h>，则不包含它。

- bpo-28147: 修复 split-table 字典中的内存泄漏：setattr() 不得将组合表转换为分裂表。

- bpo-25677: 修正了缩进块语法错误提示符的位置。基于Michael Layzell的补丁。

- bpo-29000: 修复了八进制数在交替形式下零填充的bytes格式化。

- bpo-28512: 修复了通过PyErr_SyntaxLocationEx()和PyErr_SyntaxLocationObject()设置SyntaxError的offset属性。

- bpo-28991: functools.lru_cache() 容易受到由猴子补丁 len() 函数引起的隐蔽重入错误的影响。

- bpo-28648: 修复了在Mac OS X上调试版本中解码星体字符时Py_DecodeLocale()崩溃的问题。补丁由Xiang Zhang提供。

- bpo-19398: 在编译时PYTHONPATH组件为空的情况下，不再向sys.path组件添加额外的斜杠。

- bpo-28426: 修复了调试版本中PyUnicode_AsDecodedObject()潜在的崩溃问题。

- bpo-23782: 修复了 _PyTraceback_Add() 中可能的内存泄漏和 PyTraceBack_Here() 中的异常丢失问题。

- bpo-28379: 为 PyUnicode_CopyCharacters() 添加了健全性检查和测试。由 Xiang Zhang 提供补丁。

- bpo-28376: 长范围迭代器的类型现在注册为 Iterator。由 Oren Milman 提供补丁。

- bpo-28376: range_iterator 的构造函数现在检查步长不为 0。由 Oren Milman 提供补丁。

- bpo-26906: 现在解析未初始化类型的特殊方法会导致类型的隐式初始化而不是失败。

- bpo-18287: PyType_Ready() 现在检查 tp_name 是否为 NULL。原始由 Niklas Koep 提供补丁。

- bpo-24098: 修复了在编译过程中 AST 被更改时可能发生的崩溃。

- bpo-28350: 不再对含有空字符的字符串常量进行内部化。

- bpo-26617: 修复了在弱引用回调过程中运行垃圾收集时发生的崩溃。

- bpo-27942: 现在在元组和冻结集合中递归内部化字符串常量。

- bpo-21578: 修复了当 ImportError 使用无效关键字参数调用时误导性的错误消息。

- bpo-28203: 修复来自 `complex(1.0, {2:3})` 的错误消息中的错误类型。由 Soumya Sharma 提供补丁。

- bpo-27955: 当 getrandom() 系统调用因 EPERM 失败时（例如被 SECCOMP 阻止时），回退读取 /dev/urandom 设备。

- bpo-28131: 修复zipimport的compile_source()中的回归问题。zipimport应使用与解释器相同的优化级别。

- bpo-25221: 当 Python 编译时设置 NSMALLPOSINTS = 0 时，修复 PyLong_FromLong(0) 的损坏结果。

- bpo-25758: 防止 zipimport 不必要地编码文件名（由 Eryk Sun 提供补丁）

- bpo-28189: dictitems_contains 不再吞下比较错误。（由 Xiang Zhang 提供补丁）

- bpo-27812: 正确清除生成器帧对生成器的反向引用，以防止frame.clear()中的崩溃。

- bpo-27811: 修复了一个在启用警告即错误时，未等待的协程被最终化时崩溃的问题。

- bpo-27587: 修复了PVS-Studio发现的另一个问题：在_PyState_AddModule()中使用'def'后的空指针检查。初始由Christian Heimes提供补丁。

- bpo-26020: 集合字面量评估顺序与文档行为不匹配。

- bpo-27782: 多阶段扩展模块导入现在正确地允许使用 `m_methods` 字段来向 `Py_create_mod` 返回的非模块类型实例添加模块级函数。由 Xiang Zhang 提供补丁。

- bpo-27936: round() 函数对某些类型接受第二个 None 参数，但对其他类型不接受。通过接受所有数值类型的 None 来修复这种不一致性。

- bpo-27487: 如果在导入父包之后但在执行子模块之前，在 sys.modules 中找到了 "python -m" 或 runpy.run_module() 的子模块参数，则发出警告。

- bpo-27558: 修复 "raise" 语句实现中的一个 SystemError。在一个全新的线程中，引发一个 RuntimeError，因为没有活动的异常可以重新引发。补丁由 Xiang Zhang 编写。

- bpo-27419: 标准 __import__() 不再在全局或内置中查找 "__import__" 以导入子模块或 "from import"。修复了非字符串包名错误的处理。

- bpo-27083: 在Windows下尊重PYTHONCASEOK环境变量。

- bpo-27514: 将静态嵌套块过多的情况改为SyntaxError而非SystemError。

- bpo-27473: 修复了 bytes 和 bytearray 连接中可能的整数溢出问题。补丁由 Xiang Zhang 提供。

- bpo-27507: 在bytearray.extend()中添加整数溢出检查。由张翔提供补丁。

- bpo-27581: 在PySequence_Tuple()中不依赖包装进行溢出检查。由张翔提供补丁。

- bpo-27443: bytearray 迭代器的 __length_hint__() 不再为调整大小的 bytearray 返回负整数。

- bpo-27942: 修复 codeobject.c 中的内存泄漏

### 库

- bpo-15812: inspect.getframeinfo()现在正确显示上下文的第行。由Sam Breese提供补丁。

- bpo-29094: 使用外部文件对象和模式"w"和"x"创建的ZIP文件中的偏移量现在相对于文件的开始位置。

- bpo-13051: 修复了大型或调整大小的curses.textpad.Textbox中的递归错误。基于Tycho Andersen的补丁。

- bpo-29119: 修复collections.OrderedDict move_to_end()方法的纯Python版本中的weakrefs。由Andra Bogildea贡献。

- bpo-9770: curses.ascii谓词现在正确处理负整数。

- bpo-28427: 当从另一个线程收集时，旧键不应从WeakValueDictionary中移除新值。

- bpo-28923: 从Tix.py中移除编辑器工件。

- bpo-28871: 修复了在深度ElementTree释放时的崩溃。

- bpo-19542: 修复WeakValueDictionary.setdefault()和WeakValueDictionary.pop()中的bug，这些bug在另一个线程发生GC收集时出现。

- bpo-20191: 修复了当传递一个不拥有其元素的序列作为限制时，resource.prlimit() 崩溃的问题。

- bpo-28779: 如果预加载的模块实例化了某些多处理对象（如锁），multiprocessing.set_forkserver_preload()会使forkserver进程崩溃。

- bpo-28847: dbm.dumb现在支持读取只读文件，并且在索引文件未更改时不再写入索引文件。

- bpo-25659: 在 ctypes 中，防止在抽象类（如 Array）上调用 from_buffer() 和 from_buffer_copy() 方法时崩溃。

- bpo-28732: 修复 os.spawnv() 在 args 中没有元素时的崩溃

- bpo-28485: 对于 compileall.compile_dir(workers=...) 参数的负值，即使多线程不可用，也总是引发 ValueError。

- bpo-28387: 修复了当垃圾收集器在其他线程中调用时，_io.TextIOWrapper解构器可能崩溃的问题。基于Sebastian Cufre的补丁。

- bpo-27517: LZMA压缩器和解压器在两次接收到空数据时不再抛出异常。补丁由Benjamin Fogle提供。

- bpo-28549: 修复了curses的addch()在使用ncurses6时的段错误。

- bpo-28449: tarfile.open()以模式"r"或"r:"现在会先尝试以压缩方式打开tar文件，再尝试无压缩方式打开。否则在使用ignore_zeros=True时有50%的几率失败。

- bpo-23262: webbrowser模块现在支持Firefox 36+及衍生浏览器。基于Oleg Broytman的补丁。

- bpo-27939: 修复了tkinter.ttk.LabeledScale和tkinter.Scale中由于在Tk内部将比例表示为浮点值而导致的错误。如果底层Tk变量设置为浮点值，tkinter.IntVar现在可以正常工作。

- bpo-28255: calendar.TextCalendar().prmonth() 在打印月历后不再在新行的开头打印空格。由 Xiang Zhang 提供补丁。

- bpo-20491: textwrap.TextWrapper 类现在支持不换行空格。基于 Kaarle Ritvanen 的补丁。

- bpo-28353: os.fwalk() 不再因损坏的链接而失败。

- bpo-25464: 通过为 Tix 库的 bug 添加变通方法，修复了 tkinter.tix 模块中的 HList.header_exists()。

- bpo-28488: shutil.make_archive() 不再向 ZIP 存档添加条目 "./"。

- bpo-24452: 使 webbrowser 支持 Mac OS X 上的 Chrome。

- bpo-20766: 修复了 pdb 在处理 SIGINT 处理器时的引用泄漏问题。

- bpo-26293: 修复了不从文件开头开始写入 ZIP 文件的问题。ZIP 文件中的偏移量现在相对于存档的开始，以符合规范。

- bpo-28321: 修复了在 plistlib 中使用二进制格式写入非 BMP 字符的问题。

- bpo-28322: 修复了当从错误的 pickle 数据反序列化 itertools 对象时可能发生的崩溃。基于 John Leitch 的补丁。

- 修复了 mmap 模块中在异常使用模式下可能出现的整数溢出和崩溃问题。

- bpo-1703178: 修复了向distutils的build_ext命令传递--link-objects选项的功能。

- bpo-28253: 修复了极端月份（0001-01和9999-12）的日历功能。重新实现了itermonthdays()和itermonthdays2()方法，使其不再调用可能导致datetime.date下溢/溢出的itermonthdates()。

- bpo-28275: 修复了LZMADecompressor和BZ2Decompressor类中decompress()方法可能存在的释放后使用问题。原始由John Leitch提供补丁。

- bpo-27897: 修复了如果传递无效的字符串类似对象作为名称时，sqlite3.Connection.create_collation()可能崩溃的问题。由Xiang Zhang提供补丁。

- bpo-18893: 修复了Lib/ctypes/macholib/dyld.py中无效的异常处理。由Madison May提供补丁。

- bpo-27611: 修复了 tkinter.tix 模块中默认根窗口的支持。

- bpo-27348: 在traceback模块中，恢复了类似于"Exception: None"的异常消息的格式化。这修复了3.5a2中引入的回归问题。

- bpo-25651: Allow falsy values to be used for msg parameter of subTest().

- bpo-27932: 防止win32_ver()中的内存泄漏。

- 修复socket._sendfile_use_sendfile中的UnboundLocalError。

- bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。

- bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。

- bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。

- bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。

- bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。

- bpo-19003: email.generator 现在按照 RFC，仅替换 `\r` 和/或 `\n` 行结束符，而不是所有的 Unicode 行结束符。

- bpo-28019: itertools.count()不再将1.0到2.0之间的非整数步长四舍五入为1。

- bpo-25969: 更新lib2to3语法以处理3.5中添加的解包泛化。

- bpo-14977: mailcap现在遵循mailcap文件中的行顺序（“首次匹配”），符合RFC 1542的要求。由Michael Lazar提供的补丁。

- bpo-24594: 在打开MSI数据库时验证persist参数。

- bpo-17582: xml.etree.ElementTree现在保留属性中的空白（由Duane Griffin提供补丁。由Stefan Behnel审查和批准。）。

- bpo-28047: 修复了用于新电子邮件策略中base64 CTE的行长度计算。

- bpo-27445: 不将str(_charset)传递给MIMEText.set_payload()。由Claude Paroz提供的补丁。

- bpo-22450: urllib现在在默认头中包括一个 `Accept: */*` 头。这使得REST API请求的结果更加一致和可预测，尤其是在涉及代理服务器时。

- lib2to3.pgen3.driver.load_grammar() 现在在相同的Grammar.txt输入下，无论哈希随机化设置如何，都会创建一个稳定的缓存文件。

- bpo-27570: 在“ctypes”和“array”模块中避免使用空源指针进行零长度memcpy()等调用。

- bpo-22233: 仅在RFC指定的CR和LF字符上断开电子邮件标题行，而不是在任意Unicode换行符上。这也修复了HTTP标题解析中的一个错误。

- bpo-27988: 修复email iter_attachments对payload列表的错误修改。

- bpo-27691: 修复ssl模块对X.509证书中GEN_RID主题替代名字段的解析。

- bpo-27850: Remove 3DES from ssl module's default cipher list to counter measure sweet32 attack (CVE-2016-2183).

- bpo-27766: 向ssl模块的默认加密列表中添加ChaCha20 Poly1305。（需要OpenSSL 1.1.0或LibreSSL）。

- bpo-26470: 将ssl和hashlib模块移植到OpenSSL 1.1.0。

- 移除对传递文件描述符给os.access的支持。它从未工作过，但以前不会引发错误。

- bpo-12885: 修复distutils遇到符号链接时的错误。

- bpo-27881: 修复了设置sqlite3.Connection.isolation_level时可能的错误。基于Xiang Zhang的补丁。

- bpo-27861: 修复了当工厂创建的不是游标时sqlite3.Connection.cursor()中的崩溃。由Xiang Zhang提供补丁。

- bpo-19884: 避免在OS X上使用Gnu Readline时产生虚假输出。

- bpo-27706: 恢复random.Random().seed()对于使用种子版本1的字符串种子的确定性行为。允许random()的调用序列与Python 2中完全匹配。由Nofar Schnider提供补丁。

- bpo-10513: 修复Connection.commit()中的回归问题。提交后不应重置语句。

- 来自 https://github.com/python/typing 的 typing.py 新版本：Collection（仅适用于 3.6）(bpo-27598)。将 FrozenSet 添加到 __all__（上游 #261）。修复 _get_type_vars() 中的崩溃（上游 #259）。移除 ForwardRef._eval_type 中的字典约束（上游 #252）。

- bpo-27539: 修复了在负指数和负基数情况下未归一化的 `Fraction.__pow__` 结果。

- bpo-21718: 现在，使用CTEs的查询可以使用cursor.description了。

- bpo-2466: posixpath.ismount现在能正确识别用户没有权限访问的挂载点。

- bpo-27773: 更正 _ssl.wrap_socket() 中 server_hostname 的一些内存管理错误。

- bpo-26750: unittest.mock.create_autospec() 现在能正确处理 property() 及其他数据描述符的子类。

- 在 curses 模块中，如果向 window.getstr() 或 window.instr() 传递负值，则引发错误。

- bpo-27783: 修复 operator.methodcaller 中可能使用未初始化内存的问题。

- bpo-27774: 修复 _sre 中可能对未拥有对象进行 Py_DECREF 的问题。

- bpo-27760: 修复 binascii.b2a_qp 中可能的整数溢出。

- bpo-27758: 修复 _csv 模块中对于大记录长度可能的整数溢出。

- bpo-27568: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates that the script is in CGI mode.

- bpo-27656: 不再假设sched.h定义了任何SCHED_*常量。

- bpo-27130: 在“zlib”模块中，修复了压缩和解压缩大缓冲区（通常为4 GiB）时的处理问题。之前，输入被限制在4 GiB，压缩和解压缩操作未能正确处理4 GiB的结果。

- bpo-27533: 在nt._isdir中释放GIL。

- bpo-17711: 修复了使用协议0的持久ID进行反序列化的问题。原始补丁由Alexandre Vassalotti提交。

- bpo-27522: 避免在email.feedparser中无意中创建的引用循环。

- bpo-26844: 修复 imp.find_module() 的错误消息，使其引用 'path' 而不是 'name'。由 Lev Maximov 提供补丁。

- bpo-23804: 修复 SSL 零长度 recv() 调用，使其不阻塞且不引发关于不干净 EOF 的错误。

- bpo-27466: 更改 http.cookie.time2netscape 返回的时间格式，确认 netscape cookie 格式并使其与文档一致。

- bpo-26664: 通过移除 `$` 的错误使用修复 activate.fish。

- bpo-22115: 修复了跟踪 Tkinter 变量的功能：trace_vdelete() 使用错误的模式不再破坏跟踪，trace_vinfo() 现在总是返回字符串对的列表，"u" 模式下的跟踪现在可以工作。

- 修复了 importlib.util.LazyLoader 中的一个作用域问题，该问题在懒加载一个已经被放入 sys.modules 的模块时会触发 UnboundLocalError。

- bpo-27079: 修复了curses.ascii函数isblank()、iscntrl()和ispunct()。

- bpo-26754: 一些函数（如compile()等）接受以整数可迭代对象编码的文件名参数。现在只接受字符串和字节类对象。

- bpo-27048: 防止distutils在Windows上因环境变量包含非ASCII字符而失败。

- bpo-27330: 修复了ctypes模块中可能的泄漏。

- bpo-27238: 移除了turtle模块中的裸except。原始由Jelle Zijlstra提供补丁。

- bpo-27122: 当在由contextlib.ExitStack()管理的上下文中引发异常，并且退出堆栈生成器之一捕获并在链中引发它时，退出时不再重新引发原始异常，而是让新的链式异常通过。这避免了issue25782中描述的 PEP 479 错误。

- bpo-26386: 修复了 ttk.TreeView 选中操作中项目 ID 包含空格的问题。

- bpo-16182: 修复 "readline" 模块中的多个函数以使用区域设置编码，并修复 get_begidx() 和 get_endidx() 返回代码点索引。

- bpo-27392: 添加 loop.connect_accepted_socket()。由 Jim Fulton 提供补丁。

- bpo-27930: 改进了logging.handlers.QueueListener的行为。感谢Paulo Andrade和Petr Viktorin的分析和补丁。

- bpo-21201: 提高了multiprocessing错误消息的可读性。感谢Wojciech Walczak的补丁。

- bpo-27456: asyncio：默认设置TCP_NODELAY。

- bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。

- bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。

- bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。

- bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。

- bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。

- bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。

- bpo-28368: 如果子监视器没有附加循环，则拒绝监视进程。由Vincent Michel提供补丁。

- bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。

- bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。

- bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。

- bpo-28372: 修复asyncio以支持非python协程的格式化。

- bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。

- bpo-27972: 禁止Tasks等待自身。

- bpo-26923: 修复 asyncio.Gather 一旦所有子项完成就拒绝被取消的问题。由 Johannes Ebke 提供补丁。

- bpo-26796: 不要为默认的线程池执行器配置工作线程数量。初始由 Hans Lawrenz 提供补丁。

- bpo-28600: 优化 loop.call_soon()。

- bpo-28613: 修复 get_event_loop() 在协程/回调中调用时返回当前循环的问题。

- bpo-28639: 修复 inspect.isawaitable 始终返回布尔值，由 Justin Mayfield 提供补丁。

- bpo-28652: 使循环方法拒绝它们不支持的套接字类型。

- bpo-28653: 修复 functools.lru_cache 中的 refleak。

- bpo-28703: 修复 asyncio.iscoroutinefunction 以处理 Mock 对象。

- bpo-24142: 读取损坏的配置文件会使解析器处于无效状态。原始由 Florian Höch 提供补丁。

- bpo-28990: 修复了如果在握手完成前关闭连接会导致 SSL 挂起的问题。（补丁由 HoHo-Ho 提供）

### IDLE

- bpo-15308: 向Shell菜单添加了'中断执行'(^C)。由Roger Serwy提供补丁，由Bayard Randel更新。

- bpo-27922: 停止IDLE测试在屏幕上'闪烁'gui小部件。

- 在 IDLE 帮助窗口的标题中加入版本号

- bpo-25564: 在IDLE与控制台差异的部分，提到使用exec意味着每个语句都定义了__builtins__。

- bpo-27714: text_textview和test_autocomplete现在在同一个进程中重新运行时通过。这发生在test_idle使用-w选项运行但未使用-jn选项时失败时。修复test_config的警告。

- bpo-25507: IDLE不再因为其tkinter导入而运行有bug的代码。用户必须包含直接在Python中运行所需的相同导入。

- bpo-27452: 在IDLE configHandler测试转储中添加行计数器和crc。

- bpo-27365: 允许在 IDLE NEWS.txt 中使用非 ASCII 字符，用于贡献者姓名。

- bpo-27245: IDLE：干净地删除自定义主题和键绑定。以前，当 IDLE 从控制台或通过导入启动时，会发出一系列警告。由 Serhiy Storchaka 提供补丁。

### C API

- bpo-28808: PyUnicode_CompareWithASCIIString() 现在永远不会引发异常。

- bpo-26754: PyUnicode_FSDecoder() 接受一个编码为整数迭代的文件名参数。现在只接受字符串和类字节对象。

### 文档

- bpo-28513: 记录了 zipfile 的命令行接口。

### 测试

- bpo-28950: 在 regrtest 命令行参数中禁止将 -j0 与 -T/-l/-M 组合使用。

- bpo-28666: 现在test.support.rmtree能够删除不可写或不可读的目录。

- bpo-23839: 现在在运行每个测试文件之前清除各种缓存。

- bpo-28409: regrtest: 修复命令行参数的解析器。

- bpo-27787: 在检查每个测试的“悬挂线程”之前调用gc.collect()，因为悬挂线程是弱引用。

- bpo-27369: 在test_pyexpat中，避免测试在Expat 2.2.0中已更改的错误消息详情。

### 工具/示例

- bpo-27952: 使Tools/scripts/fixcid.py能够在Python 3和当前的"re"模块下工作，避免无效的Python反斜杠转义，并修复解析转义C引号符号时的错误。

- bpo-27332: 修复了由Argument Clinic生成的模块级函数的第一个参数的类型。由Petr Viktorin提供补丁。

- bpo-27418: 修复了Tools/importbench/importbench.py。

### Windows

- bpo-28251: 改进 Windows 上的帮助手册。

- bpo-28110: launcher.msi 在 32 位和 64 位之间有不同的产品代码

- bpo-25144: 确保在继续自定义安装之前设置TargetDir。

- bpo-27469: 向启动器添加shell扩展，以便拖放操作能正确工作。

- bpo-27309: 在 python[w].exe 清单中启用了适当的 Windows 样式。

### 构建

- bpo-29080: 从PCBuild/build.bat中移除对hg.exe的硬依赖

- bpo-23903: 向PC/python3.def添加遗漏的名称。

- bpo-10656: 修复AIX上的树外构建。由Tristan Carel和Michael Haubenwallner提供补丁。

- bpo-26359: 将--with-optimiations重命名为--enable-optimizations。

- bpo-28444: 修复交叉编译时缺少扩展模块的问题。

- bpo-28248: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2j。

- bpo-28258: 修复了在爱沙尼亚语言环境下构建的问题（Makefile中的python-config和distclean目标）。由Arfrever Frehtes Taifersar Arahesis提供补丁。

- bpo-26661: setup.py现在可以检测到带有multiarch包装的系统libffi。

- bpo-28066: 修复在源代码树外构建时搜索构建目录中生成的包含文件的逻辑。

- bpo-15819: 移除了为在源码树外构建而冗余的包含搜索目录选项。

- bpo-27566: 修复冻结makefile中的clean目标（Lisa Roach提供补丁）

- bpo-27705: 更新validate_ucrtbase.py中的消息

- bpo-27983: 当使用clang作为PGO链接所需工具时，由于缺少llvm-profdata工具，在启用--with-optimizations时将配置时错误变为make时错误。同时提高我们在MacOS和一些Linux上找到llvm-profdata工具的能力。

- bpo-26307: profile-opt构建现在将PGO应用于内置模块。

- bpo-26359: 添加--with-optimizations配置标志。

- bpo-27713: 在更新importlib的引导文件时抑制虚假的构建警告。由Xiang Zhang提供补丁。

- bpo-25825: 更正对Modules/python.exp和ld_so_aix的引用，这些在AIX上是必需的。这更新了对在3.2a4中更改的安装路径的引用，并撤销了在3.5.0a1中对构建树的引用更改。

- bpo-27453: 配置中的CPP调用必须使用CPPFLAGS。由Chi Hsuan Yen提供补丁。

- bpo-27641: 配置脚本现在在makefile中插入注释，以防止pgen和_freeze_importlib可执行文件被交叉编译。

- bpo-26662: 在配置中设置PYTHON_FOR_GEN作为构建期间用于文件生成的Python程序。

- bpo-10910: 避免在FreeBSD和OS X上出现C++编译错误。同时更新FreedBSD版本检查以应对原始的ctype UTF-8变通方案。

- bpo-28676: 防止在macOS上出现缺失'getentropy'声明的警告。由Gareth Rees提供补丁。

## Python 3.5.2 正式版

发布日期: 2016-06-26

### 核心与内置函数

- bpo-26930: 更新Windows构建以使用OpenSSL 1.0.2h。

### 测试

- bpo-26867: Ubuntu的openssl OP_NO_SSLv3默认强制开启；修复测试。

### IDLE

- bpo-27365: 允许在idlelib/NEWS.txt中使用非ASCII字符 - 3.5.2的最小部分。

## Python 3.5.2 rc1

发布日期: 2016-06-12

### 安全性

- bpo-26556: Update expat to 2.1.1, fixes CVE-2015-1283.

- Fix TLS stripping vulnerability in smtplib, CVE-2016-0772. Reported by Team Oststrom

- bpo-26839: 在Linux上，`os.urandom()` 现在调用 `getrandom()` 与 `GRND_NONBLOCK`，如果urandom熵池尚未初始化，则回退到读取 `/dev/urandom`。补丁由Colm Buckley编写。

- bpo-26657: 修复Windows上http.server的目录遍历漏洞。这修复了在3.3.4rc1和3.4.0rc1中引入的回归问题。基于Philipp Hagemeister的补丁。

- bpo-26313: 如果windows证书存储为空，ssl.py _load_windows_store_certs失败。由Baji提供补丁。

- bpo-25939: 在Windows上以只读方式打开证书存储于ssl.enum_certificates中。

### 核心与内置函数

- bpo-27066: 修复了如果自定义 opener（为 open()）返回一个负数而没有设置异常时的 SystemError。

- bpo-20041: 修复当frame.f_trace被设置为None时的TypeError。由Xavier de Gaye提供补丁。

- bpo-26168: 修复了在使用 "N" 格式化单元时 Py_BuildValue() 失败可能导致的内存泄漏问题。

- bpo-26991: 修复了创建带有注解的函数时可能出现的内存泄漏问题。

- bpo-27039: 修复了bytearray.remove()对于大于127的值的问题。由Joe Jevnik提供补丁。

- bpo-23640: int.from_bytes() 不再绕过子类的构造函数。

- bpo-26811: gc.get_objects() 不再包含带有 NULL 指针的损坏元组。

- bpo-20120: 使用 RawConfigParser 来解析 .pypirc 文件，移除了无意中随着迁移到 Python 3 而添加的插值支持。现在的行为不会再在 .pypirc 文件中进行任何插值，与 Python 2.7 和 Setuptools 19.0 的行为一致。

- bpo-26659: 使内置的 slice 类型支持循环回收。

- bpo-26718: super.__init__ 如果被多次调用，将不再泄露内存。注意：不推荐直接调用 super.__init__！

- bpo-25339: 现在在设置 stdin 和 stdout 的错误处理器时，PYTHONIOENCODING 优先于 locale。

- bpo-26494: 修复了在迭代耗尽迭代器时的崩溃问题。受影响的类包括通用序列迭代器、str、bytes、bytearray、list、tuple、set、frozenset、dict、OrderedDict的迭代器，相应的视图以及os.scandir()迭代器。

- bpo-26581: 如果在Python源代码文件中一行内多次指定编码声明，只有第一个会被考虑。

- bpo-26464: 修复了当字符串为ASCII且第一个替换移除了字符，但下一个替换使用非ASCII字符或长度超过1个字符的字符串时str.translate()的问题。这是在Python 3.5.0中引入的回归问题。

- bpo-22836: 确保即使格式化产生次要错误时，PyErr_Display()和PyErr_WriteUnraisable()产生的异常报告也是合理的。这影响sys.__excepthook__()产生的报告以及__del__()引发异常时的情况。

- bpo-26302: 修正行为，拒绝将逗号作为cookie名称的合法字符。

- bpo-4806: 在函数调用中使用星号（`*`）解包时，避免掩盖原始的TypeError异常。基于Hagen Fürstenau和Daniel Urban的补丁。

- bpo-27138: 修正了 FileFinder.find_spec() 的文档注释。

- bpo-26154: 新增一个私有函数_PyThreadState_UncheckedGet()用于获取当前Python线程状态，但如果其为NULL时不发出致命错误。必须使用此新函数而非直接访问_PyThreadState_Current变量。自Python 3.5.1起，该变量不再暴露以隐藏原子C类型的精确实现，避免编译器问题。

- bpo-26194: Deque.insert()对于已达到最大大小的有界deque给出了奇怪的结果。现在当尝试向一个已满的deque插入时会引发IndexError。

- bpo-25843: 编译代码时，如果常量相等但类型不同，则不合并它们。例如，`f1, f2 = lambda: 1, lambda: 1.0``现在被正确编译为两个不同的函数：``f1()``返回 ``1` (`int`) 和``f2()``返回 `1.0` (`float`) ，即使 `1` 和 `1.0` 相等。

- bpo-22995: [更新] 由于在基于Cython的项目中观察到的回归问题，注释掉_PyObject_GetState()中的一个可pickle性测试。

- bpo-25961: 类型名称中不允许空字符。

- bpo-25973: 修复当无效的非局部语句绑定一个以两个下划线开头的名称时导致的段错误。

- bpo-22995: 不是列表或字典的子类且未实现任何与pickle相关的方法（__reduce__、__reduce_ex__、__getnewargs__、__getnewargs_ex__或__getstate__）的扩展类型实例，包括memoryview，将不能再被pickle。

- bpo-20440: 大量替换不安全的属性设置代码为特殊宏Py_SETREF。

- bpo-25766: 特殊方法__bytes__()现在在str子类中工作。

- bpo-25421: 内置类型的__sizeof__方法现在使用动态基本大小。这使得sys.getsize()能够正确工作于定义了__slots__的子类。

- bpo-25709: 修复了原地字符串连接和utf-8缓存的问题。

- bpo-27147: 在 importlib 文档中提到了 PEP 420。

- bpo-24097: 修复了如果槽名称在__getattr__内部被释放时object.__reduce__()中的崩溃问题。

- bpo-24731: 修复了在将具有特殊方法 __bytes__、__trunc__ 和 __float__ 的对象转换为 bytes、int 和 float 的子类时，返回这些子类实例导致的崩溃问题。

- bpo-26478: 修复在使用二进制运算符与字典视图和元组时的语义错误。

- bpo-26171: 修复zipimporter.get_data()中可能的整数溢出和堆损坏问题。

- bpo-25660: 修复REPL中使用readline时的TAB键行为。

- bpo-25887: 当协程对象被多次等待时，抛出RuntimeError。

- bpo-27243: 更新 __aiter__ 协议：异步迭代器应该直接返回，而不是返回一个解析为异步迭代器的 awaitable。执行前者将触发 PendingDeprecationWarning。

### 库

- bpo-21386: 实现了缺失的 IPv4Address.is_global 属性。自 07a5610bae9d 以来已有文档记录。初始由 Roger Luethi 提供补丁。

- bpo-20900: distutils register 命令现在能正确解码 HTTP 响应。初始由 ingrid 提供补丁。

- 新版本的 typing.py 提供了几个新类和特性：stubs 外的 @overload、Reversible、DefaultDict、Text、ContextManager、Type[]、NewType()、TYPE_CHECKING，以及众多错误修复（注意，一些新特性尚未在 mypy 或其他静态分析器中实现）。同时，为 PEP 492 (Awaitable、AsyncIterable、AsyncIterator) 添加的类也已加入（实际上它们已在 3.5.1 中实现，但从未被提及）。

- bpo-25738: 停止 http.server.BaseHTTPRequestHandler.send_error() 为 205 Reset Content 发送消息体。同时，不在没有正文的响应中发送 Content 头字段。由 Susumu Koshiba 提供补丁。

- bpo-21313: 修复 "platform" 模块以容忍 sys.version 包含截断的构建信息。

- bpo-27164: 在 zlib 模块中，允许使用预定义的 zdict 解压原始 Deflate 流。基于 Xiang Zhang 的补丁。

- bpo-24291: 修复 wsgiref.simple_server.WSGIRequestHandler 以完全向客户端写入数据。之前它可能进行部分写入并截断数据。同时，wsgiref.handler.ServerHandler 现在可以处理 stdout 进行部分写入，但此功能已被弃用。

- bpo-26809: 向 `string` 添加了 `__all__`。由 Emanuel Barry 提供补丁。

- bpo-26373: subprocess.Popen.communicate 现在在更多/所有情况下，当子进程在调用 .communicate() 之前死亡时，正确地忽略 BrokenPipeError。

- bpo-21776: distutils.upload 现在正确处理 HTTPError。初始由 Claudiu Popa 提供补丁。

- bpo-27114: 修复 SSLContext._load_windows_store_certs 因 PermissionError 失败的问题。

- bpo-18383: 避免在使用 filterwarnings 和 simplefilter 时创建重复的过滤器。基于 Alex Shkop 的补丁。

- bpo-27057: 修复Android上的os.set_inheritable()，ioctl()被SELinux阻止并因EACCESS失败。该函数现在回退到使用fcntl()。补丁由Michał Bednarski编写。

- bpo-27014: 修复使用typing.py时的无限递归问题。感谢Kalle Tuure！

- bpo-14132: 修复urllib.request在目标仅有查询字符串时的重定向处理。原始修复由Ján Janech提供。

- bpo-17214: "urllib.request"模块现在对重定向目标URL中的非ASCII字节进行百分比编码。一些服务器发送含有非ASCII字节的Location头字段，但"http.client"要求请求目标必须可ASCII编码，否则会抛出UnicodeEncodeError。基于Christian Heimes的补丁。

- bpo-26892: 在urllib.request.HTTPHandler中尊重debuglevel标志。补丁由Chi Hsuan Yen贡献。

- bpo-22274: 在subprocess模块中，即使stdout未被重定向，也允许将stderr重定向到stdout。补丁由Akira Li提供。

- bpo-26807: mock_open 'files' 在文件末尾的readline操作不再报错。补丁由Yolanda Robla提供。

- bpo-25745: 修复了curses panel析构函数中userptr的泄漏问题。

- bpo-26977: 在statistics.pvariance中移除了不必要且被忽略的平方和辅助函数调用。

- bpo-26881: modulefinder模块现在支持扩展的操作码参数。

- bpo-23815: 修复了直接创建_tkinter和curses.panel模块中类型实例相关的崩溃问题。

- bpo-17765: weakref.ref()不再默默忽略关键字参数。由Georg Brandl提供补丁。

- bpo-26873: xmlrpc现在会在遇到不支持的类型标签时抛出ResponseError，而不是默默返回错误结果。

- bpo-26711: 修复了plistlib.Data与其他类型的比较问题。

- bpo-24114: Fix an uninitialized variable in `ctypes.util`. The bug only occurs on SunOS when the ctypes implementation searches for the `crle` program. Patch by Xiang Zhang. Tested on SunOS by Kees Bos.

- bpo-26864: 在urllib.request中，将代理绕过主机检查对no_proxy的匹配改为不区分大小写，并且不匹配那些恰好以后缀形式包含被绕过主机名的无关主机名。由Xiang Zhang提供补丁。

- bpo-26634: recursive_repr() 现在设置包装器的 __qualname__。由 Xiang Zhang 提供补丁。

- bpo-26804: urllib.request 现在会优先选择小写的代理环境变量，而不是大写或混合大小写的。补丁由 Hans-Peter Jansen 贡献。

- bpo-26837: assertSequenceEqual() 现在能正确输出非字符串化的不同项（如 -b 模式下的字节）。这影响了 assertListEqual() 和 assertTupleEqual()。

- bpo-26041: 从 platform.dist() 和 platform.linux_distribution() 的弃用消息中移除了 "将在 Python 3.7 中移除"。由 Kumaripaba Miyurusara Athukorala 提供补丁。

- bpo-26822: itemgetter、attrgetter 和 methodcaller 对象不再静默忽略关键字参数。

- bpo-26733: 反汇编一个类现在会反汇编类和静态方法。由 Xiang Zhang 提供补丁。

- bpo-26801: 修复 `shutil.get_terminal_size()` 中的错误处理，捕获 `AttributeError` 而不是 `NameError`。补丁由 Emanuel Barry 编写。

- bpo-24838: tarfile 的 ustar 和 gnu 格式现在能正确计算多字节字符编码（如 utf-8）的名称和链接字段限制。

- bpo-26717: 停止用 UTF-8 编码拉丁-1 化的 WSGI 路径。由 Anthony Sottile 提供补丁。

- bpo-26735: 修复 Solaris 11.3 及更新版本上 `os.urandom()` 当读取超过 1,024 字节时的问题：多次调用 `getrandom()`，每次调用限制为 1024 字节。

- bpo-16329: 向 mimetypes.types_map 添加 .webm。由 Giampaolo Rodola' 提供补丁。

- bpo-13952: 向 mimetypes.types_map 添加 .csv。由 Geoff Wilson 提供补丁。

- bpo-26709: 修复了加载二进制 PLists 时的 Y2038 问题。

- bpo-23735: 通过安装我们自己的 SIGWINCH 处理程序，处理 Readline 6.3+ 的终端调整大小。由 Eric Price 提供补丁。

- bpo-26586: 在 http.server 中，如果头字段太多无法解析，则响应 "413 请求头字段太大"，而不是终止连接并引发未处理的异常。由 Xiang Zhang 提供补丁。

- bpo-22854: 将 BufferedReader.writable() 和 BufferedWriter.readable() 更改为总是返回 False。

- bpo-25195: 修复了 mock.MagicMock 中的一个回归问题。_Call 是 tuple 的子类（changeset 3603bae63c13 仅适用于类），所以我们需要自己实现 __ne__。由 Andrew Plummer 提供补丁。

- bpo-26644: 当向 SSLSocket.recv() 或 read() 传递负长度时，引发 ValueError 而不是 SystemError。

- bpo-23804: 修复 SSL recv(0) 和 read(0) 方法返回零字节而不是最多 1024 字节的问题。

- bpo-26616: 修复了 datetime.astimezone() 方法中的一个错误。

- bpo-21925: `warnings.formatwarning()` 现在捕获 `linecache.getline(...)` 上的异常，以便能够记录在Python关闭过程后期发出的 `ResourceWarning`。

- bpo-24266: 在编译时使用Readline 7的情况下，Readline历史搜索期间的Ctrl+C现在会取消搜索模式。

- bpo-26560: 避免BaseHandler.start_response中潜在的ValueError。初始由Peter Inglesby提供补丁。

- bpo-26569: 修复 `pyclbr.readmodule()` 和 `pyclbr.readmodule_ex()` 以支持导入包。

- bpo-26499: 在HTTPResponse.readline()和read1()中考虑剩余的Content-Length。基于Silent Ghost的补丁。同时记录HTTPResponse现在支持这些方法。

- bpo-25320: 处理unittest发现扫描的目录中的套接字。补丁来自Victor van den Elzen。

- bpo-16181: 现在如果年份高于datetime.MAXYEAR，cookiejar.http2time()会返回None。

- bpo-26513: 修复了平台模块对Windows Server的检测。

- bpo-23718: 修复了在1月1日前的第0周解析时间的问题。原始由Tamás Bence Gedai提供补丁。

- bpo-20589: 在Windows上调用Path.owner()和Path.group()现在会引发NotImplementedError而不是ImportError。

- bpo-26177: 修复了Canvas和Scrollbar小部件的keys()方法。

- bpo-15068: 在fileinput模块中去掉了过度的缓冲。bufsize参数不再使用。

- bpo-2202: 修复了AbstractDigestAuthHandler.get_algorithm_impls中的UnboundLocalError。初始由Mathieu Dupuy提供补丁。

- bpo-25718: 修复了当total为None时，对accumulate()迭代器的pickling和复制。

- bpo-26475: 修复了带有(?x)标志的正则表达式的调试输出。

- bpo-26457: 修复了当结果前缀长度等于最大前缀长度时，IP网络类中的subnets()方法。基于Xiang Zhang的补丁。

- bpo-26385: 如果NamedTemporaryFile()中的内部open()调用失败，则删除文件。由Silent Ghost提供补丁。

- bpo-26402: 修复了XML-RPC客户端在服务器关闭持久连接时重试的问题。这是与3.5.0a4中的新http.client.RemoteDisconnected异常相关的回归问题。

- bpo-25913: 在adobe=True时，base64.a85decode()中前导的 `<~` 现在是可选的。由Swati Jaiswal提供补丁。

- bpo-26186: 移除importlib.util.LazyLoader中的一个无效类型检查。

- bpo-26367: 当指定了 `level` 但没有指定相应的包时，importlib.__import__()像builtins.__import__()一样引发SystemError。

- bpo-26309: 在"socketserver"模块中，当verify_request()返回false时，关闭请求（关闭连接的套接字）。由Aviv Palivoda提供补丁。

- bpo-25995: os.walk()不再使用与树深度成比例的FDs。

- bpo-26117: os.scandir()迭代器现在不仅在迭代完成时关闭文件描述符，而且在因错误失败时也关闭。

- bpo-25911: 恢复了在Windows上os.walk()中对字节路径的支持。

- bpo-26045: 在使用http.client发布非Latin-1字符串时，向错误消息添加UTF-8建议。

- bpo-12923: 即使有异常也重置FancyURLopener的重定向计数器。基于Brian Brazil和Daniel Rocco的补丁。

- bpo-25945: 修复了解除 pickle functools.partial 对象时状态错误导致的崩溃问题。修复了 functools.partial 构造函数失败时的内存泄漏。functools.partial 的 "args" 和 "keywords" 属性现在总是分别具有 tuple 和 dict 类型。

- bpo-26202: copy.deepcopy() 现在能正确复制具有非原子属性的 range() 对象。

- bpo-23076: Path.glob() 现在在调用无效模式时会引发 ValueError。补丁由 Thomas Nyberg 提供。

- bpo-19883: 修复了 zipimport 中可能的整数溢出问题。

- bpo-26227: 在 Windows 上，socket 模块的 getnameinfo()、gethostbyaddr() 和 gethostbyname_ex() 函数现在从 ANSI 代码页而非 UTF-8 解码主机名。

- bpo-26147: xmlrpc 现在可以处理无法用所使用的非 UTF-8 编码编码的字符串。

- bpo-25935: 垃圾回收器现在可以打破 OrderedDict 的引用循环。

- bpo-16620: 修复了 msilib.Directory.glob() 中的 AttributeError。

- bpo-26013: 增加了对旧 Python 3 版本（3.4.3 及以下）创建的损坏协议 2 pickle 的兼容性。

- bpo-25850: 默认使用交叉编译为 64 位 Windows。

- bpo-17633: 改进zipimport对命名空间包的支持。

- bpo-24705: 修复了 sysconfig._parse_makefile 不扩展出现在 $() 变量之前的 ${} 变量的问题。

- bpo-22138: 修复了 mock.patch 在修补描述符时的行为。修补后恢复原始值。由 Sean McCully 提供补丁。

- bpo-25672: 在 ssl 模块中，如果安全的话，启用 SSL_MODE_RELEASE_BUFFERS 模式选项。

- bpo-26012: 在 pathlib.Path.[r]glob() 中不对符号链接进行 `**` 模式的遍历。

- bpo-24120: 在使用 pathlib.Path.[r]glob() 遍历树时忽略 PermissionError。由 Ulrich Petri 提供补丁。

- bpo-25447: 如果 sys.stdin 没有缓冲区属性，fileinput 现在会直接使用它（恢复了向后兼容性）。

- bpo-25447: 复制 lru_cache() 包装器对象现在总是有效，与被包装对象的类型无关（通过返回未更改的原始对象）。

- bpo-24103: 修复了 ElementTree.XMLPullParser 中可能的使用后释放问题。

- bpo-25860: os.fwalk() 在发生错误时不再跳过剩余的目录。原始由 Samson Lee 提供补丁。

- bpo-25914: 修复并简化了 OrderedDict.__sizeof__。

- bpo-25902: 修复了 ElementTree 迭代中的各种引用计数问题。

- bpo-25717: 恢复在打开文件时容忍大多数fstat()错误的先前行为。这是3.5a1版本中的一个回归问题，阻止了匿名临时文件在特殊情况下的工作。

- bpo-24903: 修复了当指定'-d'时compileall接受的参数数量的回归问题。对参数数量的检查已被完全删除，因为它从未正确工作过。

- bpo-25764: 在subprocess模块中，当使用preexec_fn时，保留由fork()失败引起的任何异常。

- bpo-6478: 在更改时区后，_strptime的正则表达式缓存现在会被time.tzset()重置。

- bpo-14285: 当使用"python -m package"选项执行包且包初始化失败时，现在会报告正确的回溯。"runpy"模块现在让包初始化的异常传递回调用者，而不是引发ImportError。

- bpo-19771: 同样在runpy和"-m"选项中，如果包甚至无法初始化（例如由于坏的 `*.pyc` 文件），则省略不相关的消息"...是一个包，不能直接执行"。

- bpo-25177: 修复了非常小和非常大的数字的平均值问题。作为副作用，statistics.mean和statistics.variance应该会显著更快。

- bpo-25718: 修复了复制状态为布尔值false的对象的问题。

- bpo-10131: 修复了minidom文档的深拷贝问题。基于Marian Ganisin的补丁。

- bpo-25725: 修复了在解包含元组指令的无效数据时pickle.loads()中的引用泄漏问题。

- bpo-25663: 在Readline completer中，避免列出重复的全局名称，并在搜索内置名称之前搜索全局命名空间。

- bpo-25688: 修复了ElementTree.iterparse()在引发错误时的文件泄露问题。

- bpo-23914: 修复了解pickle数据损坏时unpickler引发的SystemError。

- bpo-25691: 修复了删除ElementTree.Element属性时的崩溃问题。

- bpo-25624: ZipFile现在总是为目录条目写入ZIP_STORED头。由王定远提供补丁。

- 如果主机已解析，则跳过 getaddrinfo。由 A. Jesse Jiryu Davis 提供补丁。

- bpo-26050: 添加 asyncio.StreamReader.readuntil() 方法。由 Марк Коренберг 提供补丁。

- bpo-25924: 在 OS X 10.5 或更高版本上避免不必要的 getaddrinfo(3) 调用序列化。原始补丁由 A. Jesse Jiryu Davis 提供。

- bpo-26406: 在当前版本的 OpenBSD 和 NetBSD 上避免不必要的 getaddrinfo(3) 调用序列化。由 A. Jesse Jiryu Davis 提供补丁。

- bpo-26848: 修复 asyncio/subprocess.communicate() 以处理空输入。由 Jack O'Connor 提供补丁。

- bpo-27040: 添加 loop.get_exception_handler 方法

- bpo-27041: asyncio: 添加 loop.create_future 方法

- bpo-27223: asyncio: 修复_read_ready和_write_ready以尊重_conn_lost。由Łukasz Langa提供补丁。

- bpo-22970: asyncio：修复取消Condition.wait时的不一致性。由David Coles提供补丁。

### IDLE

- bpo-5124: 在 X11 上，现在粘贴选中的文本会替换选中内容。这匹配了 Windows、Mac、大多数现代 Linux 应用和 ttk 小部件上的粘贴工作方式。原始由 Serhiy Storchaka 提供补丁。

- bpo-24759: 在 idlelib.idle_test.__init__ 中明确表示该目录是 test.test_idle 的私有实现和维护者的工具。

- bpo-27196: 在运行 IDLE 测试时停止 'ThemeChanged' 警告。这些警告在其他警告被 #20567 抑制后仍然存在。将 Serhiy Storchaka 的 update_idletasks 解决方案应用于四个测试文件。在 idle_test/README.txt 中记录这一额外建议。

- bpo-20567: 修改 idle_test/README.txt，提供避免测试中 tk 警告信息的建议。将建议应用于几个 IDLE 测试。

- bpo-27117: 使颜色器 htest 和 turtledemo 支持深色主题。将配置文本小部件颜色的代码移至新函数。

- bpo-26673: 当 tk 报告字体大小为 0 时，更改为大小 10。Linux 上的此类字体阻止了配置对话框的打开。

- bpo-21939: 添加 IDLE 的渗滤器测试。原始由 Saimadhav Heblikar 提供补丁。

- bpo-21676: 添加 IDLE 的替换对话框测试。原始由 Saimadhav Heblikar 提供补丁。

- bpo-18410: 添加 IDLE 的搜索对话框测试。原始由 Westley Martínez 提供补丁。

- bpo-21703: 为IDLE的撤销委托器添加测试。原始由Saimadhav Heblikar提供补丁。

- bpo-27044: 添加ConfigDialog.remove_var_callbacks以防止内存泄漏。

- bpo-23977: 在test_delegator中添加更多断言。

- bpo-20640: 为 idlelib.configHelpSourceEdit 添加测试。由 Saimadhav Heblikar 提供补丁。

- 在 IDLE 文档的 'IDLE-控制台差异' 部分，澄清使用 IDLE 运行如何影响 sys.modules 和标准流。

- bpo-25507: 修复 IOBinding 中阻止打印的错误更改。增强 IOBinding htest 以包括所有主要 IOBinding 功能。

- bpo-25905: 恢复 README.txt 中 ' 到 ’ 右单引号的不必要转换，并用 'ascii' 打开此文件和 NEWS.txt。将 CREDITS.txt 重新编码为 utf-8 并用 'utf-8' 打开。

### 文档

- bpo-19489: 将搜索框从侧边栏移动到每个页面的页眉和页脚。由Ammar Askar提供补丁。

- bpo-24136: 文档化新的 PEP 448 解包语法（3.5版本）。

- bpo-26736: 尽可能在文档中使用 HTTPS 作为外部链接。

- bpo-6953: 重新组织 Readline 模块文档，将相关函数分组，并添加更多细节，如访问哪些底层的 Readline 函数和变量。

- bpo-23606: 向 ctypes 文档添加关于 cdll.msvcrt 的注释。

- bpo-25500: 修正文档，不再声称__import__在全局范围内搜索。

- bpo-26014: 更新 3.x 打包文档：* 现在在旧版页面中提供了指向新文档的 "参见" 链接 * 更新了指向 setuptools 文档的链接

### 测试

- bpo-21916: 为 turtle 模块添加了测试。由 ingrid、Gregory Loyse 和 Jelle Zijlstra 提供补丁。

- bpo-26523: 多进程线程池（multiprocessing.dummy.Pool）未经测试。

- bpo-26015: 为可变序列的迭代器的 pickle 操作添加了新测试。

- bpo-26325: 添加了 test.support.check_no_resource_warning() 来检查是否未发出 ResourceWarning。

- bpo-25940: 将test_ssl改为使用self-signed.pythontest.net。这避免了对svn.python.org的依赖，该网站最近更改了根证书。

- bpo-25616: OrderedDict 的测试从 test_collections 中提取出来，放入单独的文件 test_ordered_dict 中。

- bpo-26583: 如果无法写入字节码文件，则在test_import中跳过test_timestamp_overflow测试。

### 构建

- bpo-26884: 修复交叉构建中扩展模块的链接问题。由Xavier de Gaye提供补丁。

- bpo-22359: 在交叉编译时禁用运行_freeze_importlib和pgen的规则。这些程序的输出通常与源代码一起保存，并且在本地构建时仍会重新生成。由Xavier de Gaye提供补丁。

- bpo-27229: 修复树内构建的交叉编译pgen规则。由Xavier de Gaye提供补丁。

- bpo-21668: 将audioop、_datetime、_ctypes_test模块链接到libm，Mac OS X除外。补丁由Xavier de Gaye编写。

- bpo-25702: 添加了一个--with-lto配置选项，该选项将在make profile-opt期间启用构建时的链接时间优化。已知一些编译器和工具链在使用LTO时不会产生稳定的代码，因此在依赖它之前确保彻底测试。它可以比仅使用profile-opt提供几个%的速度提升。

- bpo-26624: 添加了对ucrtbase[d].dll版本的验证，并对旧版本发出警告。

- bpo-17603: 通过使用struct stat中st_blocks的低级检查，避免关于不存在的fileblocks.o文件的错误。

- bpo-26079: 修复 tix-8.4.3.6 的构建输出文件夹。由 Bjoern Thiel 提交补丁。

- bpo-26465: 更新 Windows 构建以使用 OpenSSL 1.0.2g。

- bpo-24421: 在构建扩展之前，先编译 Modules/_math.c 一次。之前如果数学和 cmath 构建同时进行，可能会导致编译失败。

- bpo-25348: 向 `PCbuild\build.bat``添加了 ``--pgo` 和 `--pgo-job` 参数，用于构建时进行配置文件引导优化。旧的 `PCbuild\build_pgo.bat` 脚本现已弃用，仅调用``PCbuildbuild.bat --pgo %*``。

- bpo-25827: 向 `configure` 添加了对使用 ICC 构建的支持，包括一个新的 `--with-icc` 标志。

- bpo-25696: 修复了在 UNIX 上使用 make -j9 安装 Python 的问题。

- bpo-26930: 更新OS X 10.5+ 32位仅安装程序以构建并与OpenSSL 1.0.2h链接。

- bpo-26268: 更新 Windows 构建以使用 OpenSSL 1.0.2f。

- bpo-25136: 支持 Apple Xcode 7 的新文本 SDK stub 库。

- bpo-24324: 当使用 gcc 时不启用不可达代码警告，因为该选项在旧版本的 gcc 中不起作用，并且在 gcc-4.5 之后已被静默移除。

### Windows

- bpo-27053: 更新 make_zip.py 以正确生成库 ZIP 文件。

- bpo-26268: 更新 prepare_ssl.py 脚本以处理不包含 include 目录内容的 OpenSSL 版本（即 1.0.2e 及更高版本）。

- bpo-26071: bdist_wininst 创建的二进制文件无法启动并找到 32 位 Python

- bpo-26073: 更新启动器中的魔法数字列表

- bpo-26065: 在生成可嵌入发行版时从库中排除 venv。

- bpo-17500: 移除未使用和过时的图标。（另见：https://github.com/python/pythondotorg/issues/945）

### 工具/示例

- bpo-26799: 修复 python-gdb.py：不要在 Python 代码加载时一次性获取 C 类型，而是按需获取 C 类型。如果在 Python 可执行文件之前加载 python-gdb.py，C 类型可以改变。补丁由 Thomas Ilsche 编写。

- bpo-26271: 修复Freeze工具以正确使用通过configure传递的标志。补丁由Daniel Shaulov提供。

- bpo-26489: 向Tools/parser/unparse.py添加字典解包支持。由Guo Ci Teo提供补丁。

- bpo-26316: 修复Argument Clinic中的变量名拼写错误。

## Python 3.5.1 正式版

发布日期: 2015-12-06

### 核心与内置函数

- bpo-25709: 修复了原地字符串连接和utf-8缓存的问题。

### Windows

- bpo-25715: Python 3.5.1安装程序显示错误的升级路径和启动器检测逻辑。

## Python 3.5.1 rc1

发布日期: 2015-11-22

### 核心与内置函数

- bpo-25630: 修复了在接受文件系统路径的函数中，参数解析时可能发生的段错误。

- bpo-23564: 修复了 _posixsubprocess 内部关于如何将 fds_to_pass 传递给子进程的部分损坏的健全性检查。由于 subprocess.py 已经避免了这个问题，这个错误没有实际影响。

- bpo-25388: 修复了在处理包含空字节的不可解码源代码时，分词器崩溃的问题。

- bpo-25462: 在 OrderedDict 的 C 实现中，大多数操作现在只计算一次键的哈希值。

- bpo-22995: __reduce__ 和 __reduce_ex__ 的默认实现现在拒绝那些未定义 __new__ 的内置类型。

- bpo-25555: 修复解析器和 AST：当从 Python 对象编译 AST 时，填充 "arg" 节点的 lineno 和 col_offset。

- bpo-24802: 当 int()、float()、compile()、exec() 和 eval() 传递类似字节的对象时，避免缓冲区过度读取。这些对象不一定以空字节终止，但函数假设它们是。

- bpo-24726: 修复了 OrderedDict 在直接调用 dict 方法后被 repr() 时崩溃和泄漏 NULL 的问题。

- bpo-25449: 现在在 C 实现和 Python 实现中，迭代具有不稳定哈希键的 OrderedDict 都会引发 KeyError。

- bpo-25395: 修复了在垃圾回收高度嵌套的 OrderedDict 结构时崩溃的问题。

- bpo-25274: sys.setrecursionlimit() 现在如果新的递归限制根据当前递归深度太低会引发 RecursionError。同时修改“低水位标记”公式使其单调。这个标记用于决定何时重置线程状态的溢出标志。

- bpo-24402: 修复 input() 在 sys.stdout.fileno() 失败时提示重定向的 stdout。

- bpo-24806: 防止不允许被继承的内置类型通过多重继承被继承。

- bpo-24848: 修复了UTF-7解码畸形数据时的一些错误。

- bpo-25280: 在详细模式(-v)下发出的导入跟踪消息不再格式化两次。

- bpo-25003: 在Solaris 11.3或更新版本上，os.urandom() 现在使用 getrandom() 函数而不是 getentropy() 函数。getentropy() 函数为了生成非常高质量的熵是阻塞的，os.urandom() 不需要如此高质量的熵。

- bpo-25182: stdprinter（在启动时导入io模块之前用作sys.stderr）现在使用backslashreplace错误处理程序。

- bpo-25131: 使集合/字典字面量和推导式的行号和列偏移与开括号对应。

- bpo-25150: Hide the private _Py_atomic_xxx symbols from the public Python.h header to fix a compilation error with OpenMP. PyThreadState_GET() becomes an alias to PyThreadState_Get() to avoid ABI incompatibilities.

### 库

- bpo-25626: 修改了三个zlib函数以接受适合Py_ssize_t的大小，但在内部将这些大小限制为UINT_MAX。这解决了3.5版本中GzipFile.read()无法读取大于2或4 GiB块的回归问题。此更改影响zlib.Decompress.decompress()的max_length参数、zlib.decompress()的bufsize参数和zlib.Decompress.flush()的length参数。

- bpo-25583: 当操作系统优先考虑如EACCES这样的错误而不是EEXIST时，避免os.makedirs(exist_ok=True)引发错误。

- bpo-25593: 修改了asyncio中EventLoop.stop()的语义。

- bpo-6973: 当我们知道一个subprocess.Popen进程已经死亡时，不允许send_signal()、terminate()或kill()方法执行任何操作，因为它们可能会信号到不同的进程。

- bpo-25590: 在Readline completer中，每个属性只调用一次getattr()。

- bpo-25498: 修复了在垃圾回收由包装memoryview创建的ctypes对象时的崩溃问题。这是3.5a1中的一个回归。基于Eryksun的补丁。

- bpo-25584: 将"escape"添加到glob模块的__all__列表中。

- bpo-25584: 修复了以 `**` 开头的递归glob()模式。

- bpo-25446: 修复 smtplib 的 AUTH LOGIN 支持中的回归问题。

- bpo-18010: 修复 pydoc web 服务器的模块搜索功能，以处理导入包时的异常。

- bpo-25554: 消除了正则表达式解析中的循环引用。

- bpo-25510: 如果 FileInput 以二进制模式打开，fileinput.FileInput.readline() 现在在末尾返回 b'' 而不是 ''。由 Ryosuke Ito 提供补丁。

- bpo-25503: 修复了 inspect.getdoc() 对于属性的继承文档字符串的处理。原始由 John Mark Vandenberg 提供补丁。

- bpo-25515: 在 uuid.uuid4 中始终使用 os.urandom 作为随机性来源。

- bpo-21827: 修复了 textwrap.dedent() 当最大公共空白是最小前导空白的子字符串时的情况。基于 Robert Li 的补丁。

- bpo-25447: lru_cache() 包装器对象现在可以被复制和 pickle（通过返回未更改的原始对象）。

- bpo-25390: typing: 不因 Union[str, Pattern] 而崩溃。

- bpo-25441: asyncio: 当套接字关闭时从 drain() 引发错误。

- bpo-25410: 清理并修复了 OrderedDict 的 C 实现中的小错误。

- bpo-25411: 通过更好地使用 email 包，改进了 SMTPHandler 中的 Unicode 支持。感谢用户 simon04 的补丁。

- bpo-25407: 移除了关于 formatter 模块在 Python 3.6 中被移除的提及。

- bpo-25406: 修复了 OrderedDict.move_to_end() 的 C 实现中的一个错误，该错误导致在将几个项目移动到有序字典的开头后在迭代中出现分段错误或挂起。

- bpo-25364: zipfile 现在可以在禁用线程的构建中工作。

- bpo-25328: 如果 decode_data 和 enable_SMTPUTF8 都被设置为 true，smtpd 的 SMTPChannel 现在会正确地引发 ValueError。

- bpo-25316: 当未安装 MSVC 时，distutils 会引发 OSError 而不是 DistutilsPlatformError。

- bpo-25380: 修复了 pickletools.opcodes 中 STACK_GLOBAL 操作码的协议。

- bpo-23972: 更新了 asyncio 的数据报创建方法，允许在绑定套接字之前设置 reuseport 和 reuseaddr 套接字选项。与现有的 asyncio create_server 方法类似，如果操作系统是 'posix'（除非平台是 Cygwin），数据报套接字的 reuseaddr 选项默认为 True。由 Chris Laws 提供补丁。

- bpo-25304: 添加了 asyncio.run_coroutine_threadsafe()。这让你可以从另一个线程向循环提交一个协程，返回一个 concurrent.futures.Future。由 Vincent Michel 提供。

- bpo-25232: 修复 CGIRequestHandler，使其在第一个问号 (?) 处而不是最后一个问号处将查询与 URL 分开。补丁来自 Xiang Zhang。

- bpo-24657: 防止 CGIRequestHandler 像处理路径一样在 URL 的查询部分折叠斜杠。补丁来自 Xiang Zhang。

- bpo-24483: functools.lru_cache()的C实现现在只计算一次key的哈希。

- bpo-22958: weakref.WeakValueDictionary的构造函数和更新方法现在接受self和dict关键字参数。

- bpo-22609: collections.UserDict的构造函数现在接受self关键字参数。

- bpo-25111: 修复了traceback.FrameSummary的比较。

- bpo-25262: 在Python的解pickler实现中增加了对BINBYTES8操作码的支持。在C实现中，对于BINUNICODE8和BINBYTES8操作码的64位大小的高32位不再在32位平台上被静默忽略。

- bpo-25034: 修复了string.Formatter在自动编号和嵌套format_specs时的问题。由Anthon van der Neut提供补丁。

- bpo-25233: 重写了asyncio.Queue和asyncio.Semaphore的内部实现，使其更加易懂和正确。

- bpo-25203: 失败的 readline.set_completer_delims() 不再使模块处于不一致状态。

- bpo-23600: tzinfo.fromutc() 的默认实现在某些情况下返回了错误的结果。

- bpo-23329: 允许ssl模块与旧版本的LibreSSL一起构建。

- 防止_Unpickler_Read中的溢出。

- bpo-25047: Element Tree写入的XML编码声明现在尊重用户给出的大小写。这恢复了以大写形式写入编码名称（如“UTF-8”）的能力，这在Python 2中是可行的。

- bpo-25135: 通过在清除前清空deque来使deque_clear()更安全。这有助于避免可能的可重入性问题。

- bpo-19143: platform模块现在从kernel32.dll读取Windows版本以避免兼容性垫片。

- bpo-25092: 修复了当errno已经设置为EINVAL时datetime.strftime()失败的问题。

- bpo-23517: 修复了datetime.datetime的fromtimestamp()和utcfromtimestamp()方法中的舍入问题：微秒现在被舍入到最接近的偶数（ROUND_HALF_EVEN），而不是向负无穷舍入（ROUND_FLOOR）。重要的是，这些方法使用与datetime.timedelta相同的舍入模式，以保持属性：(datetime(1970,1,1) + timedelta(seconds=t)) == datetime.utcfromtimestamp(t)。这也是round(float)使用的舍入模式。

- bpo-25155: 修复了Windows上的datetime.datetime.now()和datetime.datetime.utcnow()以支持2038年之后的日期。这是在Python 3.5.0中引入的回归问题。

- bpo-25108: 在没有参数的情况下调用traceback函数print_stack()、format_stack()和extract_stack()时省略内部帧。

- bpo-25118: 修复了Python 3.5.0在Windows上os.waitpid()中的一个回归问题。

- bpo-24684: socket.socket.getaddrinfo() 现在调用 PyUnicode_AsEncodedString() 而不是调用主机的 encode() 方法，以正确处理具有不返回字节字符串的 encode() 方法的自定义字符串。现在直接调用 IDNA 编解码器的编码器，而不是调用字符串的 encode() 方法。

- bpo-25060: 正确计算 BUILD_MAP 操作码的堆栈使用情况。

- bpo-24857: 现在将 call_args 与长序列比较时正确返回布尔结果，而不是引发异常。由 A Kaptur 提供补丁。

- bpo-23144: 确保即使 convert_charrefs 为 True，HTMLParser.feed() 也能返回所有数据。

- bpo-24982: 使用 "zip" 格式的 shutil.make_archive() 现在在 ZIP 文件中为目录（包括空目录）添加条目。

- bpo-25019: 修复了由设置 expat 解析器的非字符串键引起的崩溃。基于 John Leitch 的补丁。

- bpo-16180: 如果文件有语法错误，退出 pdb，而不是将用户困在无限循环中。由 Xavier de Gaye 提供补丁。

- bpo-24891: 修复 Python 启动时如果标准输入（0）、标准输出（1）或标准错误（2）的文件描述符在 Python 创建 sys.stdin、sys.stdout 和 sys.stderr 对象时被关闭导致的竞态条件。如果对象创建失败，这些属性现在设置为 None，而不是引发 OSError 异常。初始补丁由 Marco Paolini 编写。

- bpo-24992: 修复 collections.OrderedDict 构造函数中的错误处理和与垃圾收集相关的竞态条件。

- bpo-24881: 在 Windows 和 Cygwin 上修复了 Python 实现的 FileIO 中设置二进制模式的问题。补丁来自 Akira Li。

- bpo-25578: 修复 SSLSocket.getpeercer() 中的另一个内存泄漏问题。

- bpo-25530: 默认情况下，在创建 ssl.SSLContext 时禁用易受攻击的 SSLv3 协议。

- bpo-25569: 修复 SSLSocket.getpeercert() 中的内存泄漏问题。

- bpo-25471: 从 accept() 返回的套接字不应显示为非阻塞。

- bpo-25319: 当 threading.Event 被重新初始化时，底层条件应使用常规锁而不是递归锁。

- bpo-21112: 修复 unittest.expectedFailure 在子类上的回归问题。补丁来自 Berker Peksag。

- bpo-24764: cgi.FieldStorage.read_multi() 现在忽略部分头中的 Content-Length 头。补丁由 Peter Landry 编写，Pierre Quentel 审阅。

- bpo-24913: 修复 deque.index() 中的溢出错误。由 John Leitch 和 Bryce Darling 发现。

- bpo-24774: 修复 http.server.test 中的文档字符串。补丁来自 Chiu-Hsiang Hsu。

- bpo-21159: 改进 configparser.InterpolationMissingOptionError 中的消息。补丁来自 Łukasz Langa。

- bpo-20362: 在 assertRegex 中正确遵循 TestCase.longMessage。补丁来自 Ilia Kurenkov。

- bpo-23572: Fixed functools.singledispatch on classes with falsy metaclasses. Patch by Ethan Furman.

- asyncio: ensure_future() 现在接受可等待对象。

### IDLE

- bpo-15348: 在关闭调试器窗口（在 IDLE 进程中运行）之前停止调试器引擎（通常在用户进程中）。这防止了被捕获并忽略的 RuntimeErrors。

- bpo-24455: 防止IDLE在以下情况下挂起：a) 当调试器处于活动状态时关闭shell（15347）；b) 使用[X]按钮关闭调试器（15348）；以及c) 当调试器已经处于活动状态时再次激活（24455）。Mark Roseman的补丁通过两个更改来实现这一点。1. 使用为此目的设计的tcl vwait机制（而不是root.mainloop & .quit）暂停和恢复gui.interaction方法。2. 在gui.run中，允许任何现有的交互首先终止。

- 在IDLE的'终止程序？'消息中，将'程序'改为'您的程序'，以更清楚地表明所指的是当前运行的用户程序，而不是IDLE本身。

- bpo-24750: 改善IDLE编辑器窗口状态栏的外观。Patch by Mark Roseman。

- bpo-25313: 更改新内置文本颜色主题的处理，以更好地解决由IDLE Dark的添加引入的兼容性问题。在idlelib中一致地使用修订后的idleConf.CurrentTheme。

- bpo-24782: 扩展配置现在是IDLE首选项对话框中的一个标签，而不是一个单独的对话框。原来的标签现在是一个排序列表。Patch by Mark Roseman。

- bpo-22726: 重新激活配置对话框帮助按钮，包含一些关于其他按钮和新IDLE Dark主题的内容。

- bpo-24820: IDLE现在有一个'IDLE Dark'内置文本颜色主题。它或多或少是IDLE Classic的反转，背景为钴蓝色。字符串、注释、关键字等仍然是绿色、红色、橙色等。要在2015年11月之前发布的IDLEs中使用它，点击'保存为新的自定义主题'按钮并输入一个新名称，如'Custom Dark'。自定义主题适用于任何IDLE版本，并且可以修改。

- bpo-25224: README.txt现在是IDLE开发者和好奇用户的idlelib索引。以前的用户内容现在在IDLE文档章节中。'IDLE'现在意味着'集成开发和学习环境'。

- bpo-24820: 用户现在可以在设置->自定义高亮中设置断点颜色。原始由Mark Roseman提供补丁。

- bpo-24972: 非活动选择背景现在在所有系统上都与用户配置的活动选择背景相匹配。在Windows上，找到的项目现在总是高亮显示。初始由Mark Roseman提供补丁。

- bpo-24570: Idle：在受tk回归影响的Mac上显示调用提示和完成框。初始补丁由Mark Roseman提供。

- bpo-24988: Idle ScrolledList上下文菜单（在调试器中使用）现在在Mac Aqua上工作。由Mark Roseman提供补丁。

- bpo-24801: 使右键点击上下文菜单在Mac Aqua上工作。由Mark Roseman提供补丁。

- bpo-25173: 将tkinter消息框与特定小部件关联。对于Mac OSX，使它们成为'表单'。由Mark Roseman提供补丁。

- bpo-25198: 增强现在用于Idle Help的初始html查看器。正确缩进固定间距文本（由Mark Roseman提供补丁）。给代码片段一个非常类似Sphinx的浅蓝灰色背景。重用用户为shell和编辑器设置的初始宽度和高度。当使用目录（TOC）菜单时，将部分标题放在屏幕顶部。

- bpo-25225: 压缩并重写Idle文档中关于文本颜色的部分。

- bpo-21995: 解释IDLE和控制台Python之间的一些差异。

- bpo-22820: 解释在从Idle编辑器运行文件时需要 print 的原因。

- bpo-25224: 文档：增加Idle功能列表和无子进程部分。

- bpo-25219: 更新Idle命令行选项的文档。有些选项缺失，注释也不正确。

- bpo-24861: 大多数idlelib是私有的，可能会更改。使用idleib.idle.*来启动Idle。参见idlelib.__init__.__doc__。

- bpo-25199: Idle：为未来的维护者添加同步注释。

- bpo-16893: 用 help.html 替换 help.txt 用于 Idle 文档显示。新的 idlelib/help.html 是从 Doc/build/html/library/idle.html 去除右侧空白的版本。它看起来比 help.txt 更好，并且能更好地记录发布的 Idle。为此文件工作的 tkinter html 查看器由 Mark Roseman 编写。现在未使用的 EditorWindow.HelpDialog 类和 helt.txt 文件已被弃用。

- bpo-24199: 弃用未使用的 idlelib.idlever，可能在 3.6 中移除。

- bpo-24790: 移除多余的代码（这也造成了 2 和 3 的冲突）。

### 文档

- bpo-22558: 将剩余的文档链接添加到Python编码模块的源代码中。由Yoni Lavi提供补丁。

- bpo-12067: 重写语言参考中表达式章节的比较部分。一些关于比较混合类型的细节不正确或含糊。NotImplemented 仅在比表达式章节更低的层次相关。增加了比较 range() 对象的细节，以及用户定义类的默认行为和一致性建议。补丁来自 Andy Maier。

- bpo-24952: 阐明 "threading" 和 "_thread" 模块中 stack_size() 的默认 size 参数。来自 Mattip 的补丁。

- bpo-23725: 彻底修改 tempfile 文档。注意 mktemp 的弃用状态。补丁来自 Zbigniew Jędrzejewski-Szmek。

- bpo-24808: 更新一些 PyTypeObject 字段的类型。补丁来自 Joseph Weston。

- bpo-22812: 修复 unittest 发现示例。补丁来自 Pam McA'Nulty。

### 测试

- bpo-25449: 为 OrderedDict 的子类添加了测试。

- bpo-25099: 使 test_compileall 在无法写入 sys.path 上的条目时不失败（在 Windows 的管理安装中常见）。

- bpo-23919: 防止测试套件中出现断言对话框。

- `PCbuild\rt.bat` 现在可以接受无限数量的参数传递给regrtest.py。之前有9个的限制。

### 构建

- bpo-24915: 为 PGO 构建添加 LLVM 支持，并使用测试套件生成配置文件数据。初始补丁来自 Intel 的 Alecsandru Patrascu。

- bpo-24910: Windows MSI 现在具有唯一的显示名称。

- bpo-24986: 现在可以在 Windows 上构建 Python 而不会在没有外部库的情况下出现错误。

### Windows

- bpo-25450: 更新快捷方式以在安装目录中启动 Python。

- bpo-25164: 将默认所有用户安装目录更改为与每用户目录匹配。

- bpo-25143: 改进了对不支持平台的安装程序错误消息。

- bpo-25163: 在使用非默认设置时，在安装程序中显示正确的目录。

- bpo-25361: 在Windows 32位构建中禁用SSE2指令的使用。

- bpo-25089: 在升级时未选择启动器的情况下，为安装程序添加日志记录。

- bpo-25165: 如果其他版本仍存在，Windows卸载不应移除启动器。

- bpo-25112: py.exe启动器缺少图标。

- bpo-25102: Windows安装程序未预编译-O或-OO。

- bpo-25081: 在升级时，使安装程序中的返回按钮返回到升级页面。

- bpo-25091: 增加安装程序的字体大小。

- bpo-25126: 澄清非Web安装程序将下载一些组件。

- bpo-25213: 恢复manifest中的requestedExecutionLevel以禁用UAC虚拟化。

- bpo-25022: 删除了非常过时的 PC/example_nt/ 目录。

### 工具/示例

- bpo-25440: 修复python-config --extension-suffix的输出。

## Python 3.5.0 正式版

发布日期: 2015-09-13

### 构建

- bpo-25071: Windows安装程序在静默安装时不应需要TargetDir参数。

## Python 3.5.0 rc4

发布日期: 2015-09-09

### 库

- bpo-25029: 修复test_strptime中的MemoryError。

### 构建

- bpo-25027: 恢复部分静态构建选项并将vcruntime140.dll添加到Windows安装中。

## Python 3.5.0 rc3

发布日期: 2015-09-07

### 核心与内置函数

- bpo-24305: 防止导入子系统堆栈帧被warnings.warn(stacklevel=)参数计数。

- bpo-24912: 防止__class__赋值给不可变的内置对象。

- bpo-24975: 修复AST编译为 PEP 448 语法。

### 库

- bpo-24917: time_strftime()缓冲区过度读取。

- bpo-24748: 为了解决与py2exe和pywin32发现的兼容性问题，imp.load_dynamic()再次忽略先前加载的模块，以支持Python模块用扩展模块替换自己。由Petr Viktorin提供补丁。

- bpo-24635: 修复了typing.py中的一个错误，其中isinstance([], typing.Iterable)会返回一次True，然后在后续调用中返回False。

- bpo-24989: 如果设置的位置超出大小，修复BytesIO.readline()中的缓冲区过度读取。基于John Leitch的补丁。

- bpo-24913: 修复 deque.index() 中的溢出错误。由 John Leitch 和 Bryce Darling 发现。

## Python 3.5.0 rc2

发布日期: 2015-08-25

### 核心与内置函数

- bpo-24769: 当动态加载被禁用时，解释器现在可以正常启动。由Petr Viktorin提供补丁。

- bpo-21167: 现在即使没有指定-fp-model strict，当Python用ICC编译时，NAN操作也能被正确处理。

- bpo-24492: 当尝试执行 `from .. import ...` 语句时，缺少__name__属性的“package”将触发ImportError而不是AttributeError。

### 库

- bpo-24847: 从Tcl/Tk中移除了vcruntime140.dll依赖。

- bpo-24839: platform._syscmd_ver现在会引发DeprecationWarning

- bpo-24867: 修复了'async def'协程的Task.get_stack()

## Python 3.5.0 rc1

发布日期: 2015-08-09

### 核心与内置函数

- bpo-24667: 在所有底层字典调整大小的情况下调整odict的大小。

### 库

- bpo-24824: codecs.encode()和codecs.decode()的签名现在与pydoc兼容。

- bpo-24634: 在Windows上导入uuid不应该尝试加载libc

- bpo-24798: _msvccompiler.py没有正确支持清单

- bpo-4395: 更好的二进制运算符测试和文档。由Martin Panter提供补丁。

- bpo-23973: 从GitHub仓库更新typing.py。

- bpo-23004: mock_open()现在当read_data的类型是bytes时能正确读取二进制数据。初始由Aaron Hill提供补丁。

- bpo-23888: 处理cookie过期时间中的小数时间。由ssh提供补丁。

- bpo-23652: 使得可以针对Linux标准基础的libc头文件编译select模块，这些头文件不包含一些EPOLL宏。由Matt Frank提供补丁。

- bpo-22932: 修复email.utils.formatdate中的时区问题。补丁来自Dmitry Shachnev。

- bpo-23779: 如果认证器尝试中止，imaplib会引发TypeError。补丁来自Craig Holmquist。

- bpo-23319: 修复ctypes.BigEndianStructure，正确交换字节。补丁由Matthieu Gautier编写。

- bpo-23254: 记录如何关闭TCPServer监听套接字。补丁来自Martin Panter。

- bpo-19450: 更新Windows和OS X安装程序构建以使用SQLite 3.8.11。

- bpo-17527: 向wsgiref.validator添加PATCH。补丁来自Luca Sbardella。

- bpo-24791: 修复调用语法 'g(*a or b)' 的语法回归问题。

### IDLE

- bpo-23672: 允许Idle编辑和运行名称中包含星体字符的文件。由Mohd Sanad Zaki Rizvi提供补丁。

- bpo-24745: Idle editor default font. Switch from Courier to platform-sensitive TkFixedFont. This should not affect current customized font selections. If there is a problem, edit $HOME/.idlerc/config-main.cfg and remove 'fontxxx' entries from [Editor Window]. Patch by Mark Roseman.

- bpo-21192: Idle编辑器。当运行文件时，将其名称放入重启栏。不打印虚假提示。原始由Adnan Umer提供补丁。

- bpo-13884: Idle菜单。移除撕裂线。由Roger Serwy提供补丁。

### 文档

- bpo-24129: 明确名称解析的参考文档。这包括移除读者会熟悉Python在引入函数命名空间的词法作用域之前使用的名称解析方案的假设。由Ivan Levkivskyi提供补丁。

- bpo-20769: 改进reload()文档。由Dorian Pula提供补丁。

- bpo-23589: 从FAQ中移除重复句子。由Yongzhi Pan提供补丁。

- bpo-24729: 更正IO教程以匹配关于open函数编码参数的实现。

### 测试

- bpo-24751: 当使用 `-w` 命令行选项运行regrtest时，如果所有测试在重新运行时成功，则不再将测试运行标记为失败。

## Python 3.5.0 beta 4

发布日期: 2015-07-26

### 核心与内置函数

- bpo-23573: 在Linux上恢复了bytes.rfind()和bytearray.rfind()对单字节参数的优化。

- bpo-24569: 使 PEP 448 字典评估更加一致。

- bpo-24583: 修复集合在被更新时发生突变导致的崩溃。

- bpo-24407: 修复字典在被更新时发生突变导致的崩溃。

- bpo-24619: 新的异步/等待标记化方法。因此，现在可以有一行的'async def foo(): await ..'函数。

- bpo-24687: 修复函数参数注释中SyntaxError的反射泄漏。

- bpo-15944: memoryview：在转换为字节时允许任意格式。由Martin Panter提供补丁。

### 库

- bpo-23441: rcompleter现在打印一个制表符而不是显示空字的可能完成项。初始由Martin Sekera提供补丁。

- bpo-24683: 修复了使用不适当类型的参数调用_json函数时的崩溃问题。

- bpo-21697: shutil.copytree()现在正确处理指向目录的符号链接。由Eduardo Seabra和Thomas Kluyver提供补丁。

- bpo-14373: 修复了在构建lru_cache（C实现）期间调用gc.collect()时出现的段错误。

- bpo-24695: 修复了traceback.print_exception()中的一个回归问题。如果exc_traceback为None，我们不应该像文档中描述的那样打印回溯头。

- bpo-24620: Random.setstate()现在验证state最后一个元素的值。

- bpo-22485: Fixed an issue that caused `inspect.getsource` to return incorrect results on nested functions.

- bpo-22153: 改进unittest文档。补丁来自Martin Panter和evilzero。

- bpo-24580: 在re模式中，现在明确禁止对开放组的符号组引用以及数字组引用。

- bpo-24206: 修复了inspect类的__eq__和__ne__方法。

- bpo-24631: 修复了timeit模块中多行设置的回归问题。

- bpo-18622: unittest.mock.mock_open().reset_mock 会无限递归。补丁来自 Nicola Palumbo 和 Laurent De Buyst。

- bpo-23661: unittest.mock 的 side_effects 现在可以再次是异常。这是对 Python 3.4 的一个回归。补丁来自 Ignacio Rossi

- bpo-24608: chunk.Chunk.read()现在总是返回字节，而不是str。

- bpo-18684: 修复了re模块中读取缓冲区的问题。

- bpo-24259: 如果存档在数据段内被截断，tarfile现在会引发ReadError。

- bpo-15014: SMTP.auth()和SMTP.login()现在支持RFC 4954中SMTP AUTH命令的可选初始响应参数。

- bpo-24669: 修复inspect.getsource()对于'async def'函数的问题。由Kai Groner提供补丁。

- bpo-24688: ast.get_docstring()对于'async def'函数。

### 构建

- bpo-24603: 更新Windows构建和OS X 10.5安装程序以使用OpenSSL 1.0.2d。

## Python 3.5.0 beta 3

发布日期: 2015-07-05

### 核心与内置函数

- bpo-24467: 修复了 bytearray 中可能的缓冲区越界读取问题。bytearray 对象现在总是为尾随的空字节分配空间，其缓冲区现在总是以空字符结尾。

- 升级到 Unicode 8.0.0。

- bpo-24345: 为稳定 ABI 添加 Py_tp_finalize 插槽。

- bpo-24400: 为 PEP 492 协程引入一个独特的类型；添加 types.CoroutineType, inspect.getcoroutinestate, inspect.getcoroutinelocals；协程不再使用 CO_GENERATOR 标志；sys.set_coroutine_wrapper 仅适用于 'async def' 协程；inspect.iscoroutine 不再使用 collections.abc.Coroutine，它旨在仅测试纯 'async def' 协程；添加新的操作码：GET_YIELD_FROM_ITER；修复 types.coroutine 中使用的生成器包装器为 collections.abc.Generator 的实例；collections.abc.Awaitable 和 collections.abc.Coroutine 不能再用于检测基于生成器的协程——请使用 inspect.isawaitable 代替。

- bpo-24450: 向生成器添加 gi_yieldfrom 和向协程添加 cr_await。由 Benno Leslie 和 Yury Selivanov 贡献。

- bpo-19235: 添加新的 RecursionError 异常。由 Georg Brandl 提供补丁。

### 库

- bpo-21750: mock_open.read_data 现在可以从每个实例中读取，就像在 Python 3.3 中一样。

- bpo-24552: 修复 _pickle 模块在错误情况下的释放后使用问题。

- bpo-24514: tarfile 现在容忍仅由空白组成的数字字段。

- bpo-19176: 修复了 ElementTree 的 C 实现中与 doctype() 相关的错误。XMLParser 子类不再发出带有默认 doctype() 方法的弃用警告。直接调用 doctype() 现在会发出警告。如果目标的 doctype() 被调用，解析器的 doctype() 现在不会被调用。基于 Martin Panter 的补丁。

- bpo-20387: 在 tab 缩进的块中恢复 tokenize/untokenize 的语义往返正确性。

- bpo-24456: 修复了 audioop 模块的 adpcm2lin() 和 lin2adpcm() 函数中可能的缓冲区越界读取问题。

- bpo-24336: contextmanager装饰器现在可以与名为"func"和"self"的关键字参数的函数一起工作。由Martin Panter提供补丁。

- bpo-24522: 修复json加速模块中可能的整数溢出问题。

- bpo-24489: 确保先前设置的C errno不会干扰cmath.polar()。

- bpo-24408: 修复了tkinter.Font的measure()和metrics()方法中的AttributeError。

- bpo-14373: functools.lru_cache()的C实现现在可以与方法一起使用。

- bpo-24347: 如果PyDict_GetItemWithError返回NULL，则设置KeyError。

- bpo-24348: 删除多余的incref/decref。

- bpo-24359: 在迭代期间检查OrderedDict大小的变化。

- bpo-24368: 支持OrderedDict方法中的关键字参数。

- bpo-24362: 简化C OrderedDict快速节点调整大小的逻辑。

- bpo-24377: 修复OrderedDict.__repr__中的引用泄漏。

- bpo-24369: 防御迭代期间的键变更。

### 测试

- bpo-24373: _testmultiphase和xxlimited现在使用tp_traverse和tp_finalize来避免当tp_dealloc与PyType_FromSpec结合时遇到的引用泄漏（详情见 bpo-16690）。

### 文档

- bpo-24458: 更新文档以涵盖扩展模块的多阶段初始化（PEP 489）。由Petr Viktorin提供补丁。

- bpo-24351: 澄清在string.Template实例上下文中“标识符”的含义。

### 构建

- bpo-24432: 更新Windows构建和OS X 10.5安装程序以使用OpenSSL 1.0.2c。

## Python 3.5.0 beta 2

发布日期: 2015-05-31

### 核心与内置函数

- bpo-24284: str类的startswith和endswith方法在找到空字符串且索引完全超出范围时不再返回True。

- bpo-24115: 更新PyObject_IsTrue()、PyObject_Not()、PyObject_IsInstance()、PyObject_RichCompareBool()和_PyDict_Contains()的使用，以正确检查和处错误。

- bpo-24328: 修复导入单字符扩展模块的问题。

- bpo-11205: 在字典显示中，先评估键再评估值。

- bpo-24285: 修复了阻止从包内导入扩展模块的回归问题。由Petr Viktorin提供补丁。

### 库

- bpo-23247: 修复了CJK编解码器中StreamWriter.reset()的崩溃问题。

- bpo-24270: 根据 PEP 485 添加了math.isclose()和cmath.isclose()函数。由Chris Barker和Tal Einat贡献。

- bpo-5633: 修复了当语句是字符串而设置不是时的timeit问题。

- bpo-24326: 修复了audioop.ratecv()使用非默认weightB参数的问题。原始补丁由David Moore提供。

- bpo-16991: 添加了OrderedDict的C实现。

- bpo-23934: 修复inspect.signature以正确失败于缺乏签名信息的内置类型。初始由James Powell提供补丁。

## Python 3.5.0 beta 1

发布日期: 2015-05-24

### 核心与内置函数

- bpo-24276: 修复了属性描述符getter的优化。

- bpo-24268: PEP 489: 多阶段扩展模块初始化。由Petr Viktorin提供补丁。

- bpo-23955: 添加pyvenv.cfg选项以抑制在Windows上生成sys.path时的注册表/环境查找。

- bpo-24257: 修复了伪造的types.SimpleNamespace比较中的系统错误。

- bpo-22939: 修复了迭代器对象中的整数溢出问题。由Clement Rouault提供补丁。

- bpo-23985: 修复了从bytearray前端删除一个切片后追加其他字节数据时可能发生的缓冲区溢出问题。

- bpo-24102: 修复了标准错误处理程序中的异常类型检查。

- bpo-15027: UTF-32编码器现在快3到7倍。

- bpo-23290: 为目标为空的情况优化了set_merge()。（由Serhiy Storchaka贡献。）

- bpo-2292: PEP 448: 额外的解包泛化。

- bpo-24096: 使warnings.warn_explicit对warnings.filters列表的突变更加健壮。

- bpo-23996: 避免当委托的生成器引发未标准化的StopIteration异常时崩溃。由Stefan Behnel提供补丁。

- bpo-23910: 优化property() getter调用。由Joe Jevnik提供补丁。

- bpo-23911: 将基于路径的importlib引导代码移动到一个单独的冻结模块。

- bpo-24192: 修复命名空间包的导入问题。

- bpo-24022: 修复处理不可解码源代码时标记器的崩溃问题。

- bpo-9951: 为bytes、bytearray和memoryview添加了hex()方法。

- bpo-22906: PEP 479: 改变生成器内部StopIteration的处理方式。

- bpo-24017: PEP 492: 使用async和await语法实现协程。

### 库

- bpo-14373: 添加了functools.lru_cache()的C实现。基于Matt Joiner和Alexey Kachayev的补丁。

- bpo-24230: tempfile模块现在接受prefix、suffix和dir参数的bytes类型，并在这种情况下返回bytes（与os模块的API相匹配）。

- bpo-22189: collections.UserString现在支持__getnewargs__()、__rmod__()、casefold()、format_map()、isprintable()和maketrans()。由Joe Jevnik提供补丁。

- bpo-24244: 防止在Windows上遇到无效格式字符串时strftime终止。

- bpo-23973: PEP 484: 添加typing模块。

- bpo-23086: collections.abc.Sequence()抽象基类为index()混入添加了 start 和 stop 参数。由Devin Jeanpierre提供补丁。

- bpo-20035: 将用于在Windows上设置Tcl/Tk环境的 `tkinter._fix` 模块替换为 `_tkinter` 模块中的私有函数，该函数不会对环境进行永久性更改。

- bpo-24257: 修复了使用伪造游标类型时sqlite3.Row构造函数中的段错误。

- bpo-15836: assertRaises()、assertRaisesRegex()、assertWarns()和assertWarnsRegex()断言现在检查第一个参数的类型以防止可能的用户错误。基于Daniel Wagner-Hall的补丁。

- bpo-9858: 为_io.RawIOBase添加缺失的方法存根。由Laura Rupprecht提供补丁。

- bpo-22955: operator模块中的attrgetter、itemgetter和methodcaller对象现在支持pickle。为这些对象添加了可读和可评估的repr。基于Josh Rosenberg的补丁。

- bpo-22107: tempfile.gettempdir() 和 tempfile.mkdtemp() 现在在 Windows 和 Unix 上都会在所选名称的目录已存在时重试。tempfile.mkstemp() 现在在 Windows 上如果父目录无效（不存在或是文件）时会提前失败。

- bpo-23780: 改进了 os.path.join() 在单个参数时的错误信息。

- bpo-6598: 提高了 email.utils.make_msgid() 中的时间精度和随机数范围，以增强消息 ID 的唯一性。

- bpo-24091: 修复了 ElementTree 的 C 实现中各种角落情况的崩溃问题。

- bpo-21931: msilib.FCICreate() 现在在参数错误的情况下会引发 TypeError 而不是带有虚假 FCI 错误号的 ValueError。由 Jeffrey Armstrong 提供补丁。

- bpo-13866: 为 urllib.parse.urlencode 添加了 quote_via 参数。

- bpo-20098: 为 email 添加了新的 mangle_from 策略选项，对于 compat32 默认为 True，但对于所有其他策略默认为 False。

- bpo-24211: email 库现在支持 RFC 6532：它可以生成使用 utf-8 而不是编码单词的头部。

- bpo-16314: 在 distutils 中添加了对 LZMA 压缩的支持。

- bpo-21804: poplib 现在支持 RFC 6856 (UTF8)。

- bpo-18682: 优化了内置标量类型的 pprint 函数。

- bpo-22027: smtplib 现在支持 RFC 6531 (SMTPUTF8)。

- bpo-23488: 随机生成器对象现在在 64 位系统上消耗的内存减少了一半。

- bpo-1322: platform.dist() 和 platform.linux_distribution() 函数现在已被弃用。初始补丁由 Vajrasky Kok 提供。

- bpo-22486: 添加了 math.gcd() 函数。fractions.gcd() 函数现在已被弃用。基于 Mark Dickinson 的补丁。

- bpo-24064: Property() 的文档字符串现在可写。（由 Berker Peksag 提供补丁。）

- bpo-22681: 添加了对 koi8_t 编码的支持。

- bpo-22682: 添加了对 kz1048 编码的支持。

- bpo-23796: BufferedReader 的 peek 和 read1 方法现在在对象已关闭时调用会引发 ValueError。由 John Hergenroeder 提供补丁。

- bpo-21795: 当新的 decode_data 构造函数参数设置为 False 时，smtpd 现在支持 8BITMIME 扩展。

- bpo-24155: 优化 heapq.heapify() 以提高在堆化大型列表时的缓存性能。

- bpo-21800: imaplib 现在支持 RFC 5161（启用）、RFC 6855（utf8/国际化邮件）并自动将非 ASCII 用户名和密码编码为 UTF8。

- bpo-20274: 当调用 _sqlite.Connection 时，如果传递了任何关键字参数，现在会报错。之前是默默地忽略它们。

- bpo-20274: 从 _sqlite.Connection 上的三个 METH_VARARGS 方法中移除被忽略和错误的 "kwargs" 参数。

- bpo-24134: assertRaises()、assertRaisesRegex()、assertWarns() 和 assertWarnsRegex() 检查现在当 callable 为 None 或在上下文管理器模式下传递了除 msg 外的关键字参数时，会发出弃用警告。

- bpo-24018: 添加 collections.abc.Generator 抽象基类。由 Stefan Behnel 贡献。

- bpo-23880: Tkinter 的 getint() 和 getdouble() 现在支持 Tcl_Obj。Tkinter 的 getdouble() 现在支持任何数字（特别是整数）。

- bpo-22619: 在 traceback 模块中添加了对负限制的支持。基于 Dmitry Kazakov 的补丁。

- bpo-24094: 修复了在 json.encode 中可能因为行为不良的字典子类而导致的崩溃。

- bpo-9246: 在 POSIX 上，os.getcwd() 现在支持超过 1025 字节的路径。补丁由 William Orr 编写。

- bpo-17445: 添加 difflib.diff_bytes() 以支持字节字符串的比较（修复了从 Python 2 开始的回归）。

- bpo-23917: 当 ProcessPoolExecutor 不存在时，回退到顺序编译。补丁由 Claudiu Popa 提供。

- bpo-23008: 修复了在 pydoc 中解析布尔值为 False 的属性时的错误。

- 修复 asyncio 问题 235：LifoQueue 和 PriorityQueue 的 put 没有增加未完成任务（这个错误是在 JoinableQueue 与 Queue 合并时引入的）。

- bpo-23908: os 函数现在在 Windows 上拒绝含有嵌入空字符的路径，而不是默默地截断它们。

- bpo-23728: 对于空数据，binascii.crc_hqx() 可能返回一个超出 0-0xffff 范围的整数。

- bpo-23887: urllib.error.HTTPError 现在有了一个正确的 repr() 表示。由 Berker Peksag 提供补丁。

- asyncio: 新增事件循环 API: set_task_factory() 和 get_task_factory()。

- asyncio: async() 函数已弃用，推荐使用 ensure_future()。

- bpo-24178: asyncio.Lock、Condition、Semaphore 和 BoundedSemaphore 支持新的 'async with' 语法。由 Yury Selivanov 贡献。

- bpo-24179: 为 asyncio.StreamReader 支持 'async for'。由 Yury Selivanov 贡献。

- bpo-24184: 将 AsyncIterator 和 AsyncIterable ABCs 添加到 collections.abc。由 Yury Selivanov 贡献。

- bpo-22547: 为 inspect.BoundArguments 实现信息丰富的 __repr__。由 Yury Selivanov 贡献。

- bpo-24190: 实现 inspect.BoundArgument.apply_defaults() 方法。由 Yury Selivanov 贡献。

- bpo-20691: 向 inspect.Signature.from_callable() 和 inspect.signature() 添加 'follow_wrapped' 参数。由 Yury Selivanov 贡献。

- bpo-24248: 弃用 inspect.Signature.from_function() 和 inspect.Signature.from_builtin()。

- bpo-23898: 修复 inspect.classify_class_attrs() 以支持具有重载 __eq__ 和 __bool__ 的属性。由 Mike Bayer 提供补丁。

- bpo-24298: 修复 inspect.signature() 以正确解包绑定方法的包装器。

### IDLE

- bpo-23184: 移除 idlelib 中未使用的名称和导入。初始由 Al Sweigart 提供补丁。

### 测试

- bpo-21520: 如果当前目录名称中出现 'bad' 单词，test_zipfile 不再失败。

- bpo-9517: 将 script_helper 移动到 support 包中。由 Christie Wilson 提供补丁。

### 文档

- bpo-22155: 在 tkinter 文档中添加文件处理程序子章节，包含 createfilehandler。从 FAQ 中移除过时的示例。由 Martin Panter 提供补丁。

- bpo-24029: 记录子模块导入的名称绑定行为。

- bpo-24077: 修复 -I 命令选项的手册页中的拼写错误：-s，不是 -S。

### 工具/示例

- bpo-24000: 改进了 Argument Clinic 对转换器到旧版“格式单元”的映射。更新了文档以匹配。

- bpo-24001: Argument Clinic 转换器现在使用 accept={type} 而不是 types={'type'} 来指定转换器接受的类型。

- bpo-23330: h2py 现在支持在 #include 中使用任意文件名。

- bpo-24031: make patchcheck 现在也支持 git 检出。

## Python 3.5.0 alpha 4

发布日期: 2015-04-19

### 核心与内置函数

- bpo-22980: 在 Linux、GNU/KFreeBSD 和 Hurd 下，C 扩展现在在扩展名中包括架构三元组，以便在同一工作树中轻松测试不同 ABI 的构建。在 OS X 下，扩展名现在包括 PEP 3149 风格的信息。

- bpo-22631: 添加了 Linux 特定的套接字常量 CAN_RAW_FD_FRAMES。由 Joe Jevnik 提供补丁。

- bpo-23731: 实现了 PEP 488: 移除了 .pyo 文件。

- bpo-23726: 对于没有添加任何新字段的非 GC 类型的用户子类，不启用 GC。由 Eugene Toder 提供补丁。

- bpo-23309: 如果在关闭时守护线程在被持有缓冲 I/O 对象的锁时被中止，并且主线程尝试使用相同的 I/O 对象（通常是 stdout 或 stderr），则避免死锁。相反，会发出致命错误。

- bpo-22977: 修复了在 Wine 上格式化 Windows 错误消息的问题。由 Martin Panter 提供补丁。

- bpo-23466: 在字节格式化中，%c、%o、%x 和 %X 现在对非整数输入引发 TypeError。

- bpo-24044: 修复了在内存不足情况下 list.sort 中可能的空指针解引用。

- bpo-21354: PyCFunction_New 函数再次由 python DLL 暴露。

### 库

- bpo-23840: tokenize.open() 现在在错误时关闭临时二进制文件以修复资源警告。

- bpo-16914: smtplib 中的新调试级别 2 在调试输出中添加了时间戳。

- bpo-7159: urllib.request 现在支持在第一次 401 后自动发送认证凭据。此增强是 bpo-19494 增强的超集，并取代了该更改。

- bpo-23703: 修复在901e4e52b20a中引入的urljoin()回归问题。由Demian Brecht提供补丁。

- bpo-4254: 添加_curses.update_lines_cols()。由Arnon Yaari提供补丁。

- bpo-19933: 为round提供ndigits的默认参数。由Vajrasky Kok提供补丁。

- bpo-23193: 向tarfile.TarFile.extract和tarfile.TarFile.extractall添加numeric_owner参数。由Michael Vogt和Eric Smith提供补丁。

- bpo-23342: 添加subprocess.run()函数，该函数返回CalledProcess实例，提供了比现有call*函数更一致的API。

- bpo-21217: inspect.getsourcelines()现在尝试从代码对象计算开始和结束行，修复了当lambda函数用作装饰器参数时的问题。由Thomas Ballinger和Allison Kaptur提供补丁。

- bpo-24521: 修复pickle模块中可能的整数溢出。

- bpo-22931: 允许cookie值中包含'['和']'。

- functools.partial的keywords属性现在总是一个字典。

- bpo-23811: 向PyCompileError错误消息添加缺失的换行符。由Alex Shkop提供补丁。

- bpo-21116: 避免在分配大于可用RAM 50%的多进程共享数组时耗尽内存。由Médéric Boquien提供补丁。

- bpo-22982: 改进在可写文本文件的多位置查找时的BOM处理。

- bpo-23464: 移除已弃用的asyncio JoinableQueue。

- bpo-23529: 限制从GzipFile、BZ2File或LZMAFile读取时的解压数据大小。这防止了使用压缩炸弹（即解压后尺寸巨大的压缩负载）的拒绝服务攻击。由Martin Panter和Nikolaus Rath提供补丁。

- bpo-21859: 添加了io.FileIO的Python实现。

- bpo-23865: 多个模块中的close()方法现在在关闭时是幂等的且更健壮。如果需要释放多个资源，即使发生错误，所有资源也会被释放。

- bpo-23400: 如果sem_open不可用，在Python 2和3上抛出相同的异常。由Davin Potts提供补丁。

- bpo-10838: subprocess模块现在在其导出的名称列表中包括SubprocessError和TimeoutError，以供那些大胆使用 `from subprocess import *` 的用户使用。

- bpo-23411: 将DefragResult、ParseResult、SplitResult、DefragResultBytes、ParseResultBytes和SplitResultBytes添加到urllib.parse.__all__中。由Martin Panter提供补丁。

- bpo-23881: urllib.request.ftpwrapper构造函数现在会在FTP连接失败时关闭套接字，以修复ResourceWarning。

- bpo-23853: `socket.socket.sendall()` 不再在每次数据成功发送时重置套接字超时。套接字超时现在是发送所有数据的最大总持续时间。

- bpo-22721: 包含可排序和不可排序元素的集合或多行pprint输出的字典的顺序不再依赖于集合或字典的迭代顺序。

- bpo-15133: _tkinter.tkapp.getboolean()现在支持Tcl_Obj并始终返回bool。tkinter.BooleanVar现在验证输入值（接受bool、int、str和Tcl_Obj）。tkinter.BooleanVar.get()现在始终返回bool。

- bpo-10590: xml.sax.parseString()现在支持字符串参数。

- bpo-23338: 修复了在Cygwin上格式化ctypes错误消息的问题。由Makoto Kato提供补丁。

- bpo-15582: inspect.getdoc()现在遵循继承链。

- bpo-2175: SAX解析器现在支持InputSource对象的字符流。

- bpo-16840: Tkinter现在支持Tcl 8.4中添加的64位整数和Tcl 8.5中添加的任意精度整数。

- bpo-23834: 修复socket.sendto()，使用C Py_ssize_t类型来存储sendto()的结果，而不是C int类型。

- bpo-23618: `socket.socket.connect()` 现在等待连接完成，而不是在连接被信号中断时抛出 `InterruptedError`，前提是信号处理程序没有抛出异常且套接字是阻塞的或具有超时。对于非阻塞套接字，`socket.socket.connect()` 仍然会抛出 `InterruptedError`。

- bpo-21526: Tkinter 现在支持 Tcl 8.5 中的新布尔类型。

- bpo-23836: 修复 faulthandler 模块以处理对其信号处理程序的可重入调用。

- bpo-23838: linecache 现在可以在 MemoryError 时清除缓存并返回空结果。

- bpo-10395: 添加了 os.path.commonpath()。在 posixpath 和 ntpath 中实现。基于 Rafik Draoui 的补丁。

- bpo-23611: 现在支持使用 pickle 协议 < 4 序列化更多“可查找”对象（如未绑定方法或嵌套类）。

- bpo-13583: sqlite3.Row 现在支持切片索引。

- bpo-18473: 修复了 2to3 和 3to2 兼容的 pickle 映射。修复了模糊的反向映射。添加了许多新映射。导入映射不再应用于已使用全名映射的模块。

- bpo-23485: select.select() 现在在被信号中断时会自动重试，并重新计算超时，除非信号处理程序引发异常。此变更是 PEP 475 的一部分。

- bpo-23752: 当从现有文件描述符构建时，io.FileIO() 现在只调用 fstat() 一次。之前 fstat() 被调用了两次，这是不必要的。

- bpo-23704: collections.deque() 对象现在支持 __add__, __mul__, 和 __imul__()。

- bpo-23171: csv.Writer.writerow() 现在支持任意可迭代对象。

- bpo-23745: 新的电子邮件头解析器现在可以无错误地处理重复的 MIME 参数名称，类似于 get_param 的行为。

- bpo-22117: 修复 os.utime()，现在它将时间戳向负无穷（-inf）舍入，而不是向零舍入。

- bpo-23310: 修复 MagicMock 的初始化器以与 __methods__ 一起工作，就像 configure_mock() 一样。由 Kasia Jachim 提供的补丁。

### 构建

- bpo-23817: FreeBSD 现在像其他操作系统一样在 SOVERSION 中使用 "1.0"，而不仅仅是 "1"。

- bpo-23501: Argument Clinic 现在默认将代码生成到单独的文件中。

### 测试

- bpo-23799: 添加了 test.support.start_threads() 用于运行和清理多个线程。

- bpo-22390: test.regrtest 现在会在测试运行后如果临时文件或目录未被清理时发出警告。

### 工具/示例

- bpo-18128: pygettext 现在在 POT-Creation-Date 头中使用标准的 +NNNN 格式。

- bpo-23935: Argument Clinic 现在对接受字节、字节数组和缓冲区的格式单元的理解与文档和实现一致。

- bpo-23944: Argument Clinic 现在在第78列换行长 impl 原型。

- bpo-20586: Argument Clinic 现在确保没有文档字符串的函数也有签名。

- bpo-23492: Argument Clinic 现在尽可能使用 PyArg_Parse 而不是 PyArg_ParseTuple 生成参数解析代码。

- bpo-23500: Argument Clinic 现在更智能地生成 methoddef 宏的“#ifndef”（空）定义：即使 Argument Clinic 多次处理相同的符号，它也只会生成一次，并且是在所有处理完成后而不是在第一次使用后立即发出。

### C API

- bpo-23998: PyImport_ReInitLock() 现在检查锁分配错误

## Python 3.5.0 alpha 3

发布日期: 2015-03-28

### 核心与内置函数

- bpo-23573: 提高了字符串搜索操作（str.find、str.index、str.count、in 操作符、str.split、str.partition）与不同类型参数（UCS1、UCS2、UCS4）的性能。

- bpo-23753: Python 不再支持没有 stat() 或 fstat() 的平台，这些函数现在总是必需的。

- bpo-23681: -b 选项现在影响 bytes 与 int 的比较。

- bpo-23632: Memoryviews 现在允许元组索引（包括多维 memoryviews）。

- bpo-23192: 修复了生成器 lambda。由 Bruno Cauet 提供补丁。

- bpo-23629: 修复了可变大小对象的默认 __sizeof__ 实现。

### 库

- bpo-14260: 正则表达式模式对象的 groupindex 属性现在是非可修改的映射。

- bpo-23792: 当 pydoc 分页器处于活动状态时忽略 KeyboardInterrupt。这模拟了标准 unix 分页器的行为，并防止 pipepager 在分页器本身仍在运行时关闭。

- bpo-23775: pprint() 现在输出的 OrderedDict 表示与 repr() 相同。

- bpo-23765: 移除了 ctypes 中的 IsBadStringPtr 调用。

- bpo-22364: 使用正则表达式提示改进了部分 re 错误消息。

- bpo-23742: ntpath.expandvars() 不再丢失不平衡的单引号。

- bpo-21717: zipfile.ZipFile.open 函数现在支持 'x'（独占创建）模式。

- bpo-21802: 现在，即使写入器关闭失败，BufferedRWPair.close() 中的读取器也会被关闭。

- bpo-23622: 现在，由 `'\'` 和 ASCII 字母组成的正则表达式中的未知转义将引发弃用警告，并将在 Python 3.6 中禁止使用。

- bpo-23671: string.Template 现在允许将 "self" 参数指定为关键字参数。string.Formatter 现在允许将 "self" 和 "format_string" 参数指定为关键字参数。

- bpo-23502: pprint 模块现在支持映射代理。

- bpo-17530: pprint 现在会换行显示长的 bytes 对象和 bytearrays。

- bpo-22687: 修复了 textwrap 中分割单词的一些极端情况。消除了分割长单词时的二次复杂度。

- bpo-4727: copy 模块现在使用 pickle 协议 4（PEP 3154），并支持复制其 __new__ 方法接受仅关键字参数的类实例。

- bpo-23491: 添加了一个 zipapp 模块以支持创建 Python 代码的可执行 zip 文件归档。为这些归档在 Windows 上注册了 ".pyz" 和 ".pyzw" 扩展名（PEP 441）。

- bpo-23657: 避免在 zipapp 中显式检查 str，增加了对 pathlib.Path 对象作为参数的支持。

- bpo-23688: 添加了对任意字节类对象的支持，并避免了在 gzip.GzipFile.write() 中不必要地复制 memoryview。原始由 Wolfgang Maier 提供补丁。

- bpo-23252: 添加了对将 ZIP 文件写入不可寻址流的支持。

- bpo-23647: 增加了 imaplib 的 MAXLINE 以适应现代邮箱大小。

- bpo-23539: 如果 body 为 None，http.client.HTTPConnection.request 现在会为 PUT、POST 和 PATCH 头设置 Content-Length 为 0，以避免某些 web 服务器返回 411 错误。

- bpo-22351: nntplib.NNTP 构造函数不再保持连接和 socket 打开直到垃圾回收器清理它们。补丁由 Martin Panter 提供。

- bpo-23704: collections.deque() 对象现在支持 index()、insert() 和 copy() 方法。这使得 deque 可以注册为 MutableSequence 并且提高了它们替代列表的能力。

- bpo-23715: `signal.sigwaitinfo()` 和 `signal.sigtimedwait()` 现在当被不在 sigset 参数中的信号中断时，如果信号处理器没有引发异常，会重试。signal.sigtimedwait() 在重试时使用单调时钟重新计算超时。

- bpo-23001: 在 mmap、ossaudiodev、socket、ssl 和 codecs 模块中，一些之前只接受只读 bytes-like 对象的函数现在也接受可写的 bytes-like 对象。

- bpo-23646: 如果 time.sleep() 被信号中断，现在会使用重新计算的延迟重试睡眠，除非信号处理器引发异常（PEP 475）。

- bpo-23136: _strptime 现在统一处理第 0 周的所有天，包括上一年的 12 月 30 日。基于 Jim Carroll 的补丁。

- bpo-23700: NamedTemporaryFile 的迭代器现在保持对 NamedTemporaryFile 实例的引用。补丁由 Bohuslav Kabrda 提供。

- bpo-22903: unittest.loader 在导入测试模块失败时创建的假测试用例现在可以 pickle。

- bpo-22181: 在 Linux 上，os.urandom() 现在如果可用会使用新的 getrandom() 系统调用，该系统调用在 Linux 内核 3.17 中引入。它更可靠也更安全，因为它避免了文件描述符的需要，并等待内核有足够的熵。

- bpo-2211: 更新了http.cookies.Morsel类的实现。现在直接设置属性key、value和coded_value已被弃用。update()和setdefault()现在会转换并检查键。比较相等性现在会考虑属性key、value和coded_value。copy()现在返回一个Morsel，而不是dict。repr()现在包含所有属性。优化了键的检查和值的引用。添加了新的测试。原始由Demian Brecht提供补丁。

- bpo-18983: 允许在timeit中选择输出单位。由Julian Gindi提供补丁。

- bpo-23631: 修复traceback.format_list当traceback被修改时的问题。

- bpo-23568: 向MagicMock()对象添加rdivmod支持。由Håkan Lövdahl提供补丁。

- bpo-2052: 向HtmlDiff.make_file()添加charset参数。

- bpo-23668: 在Windows上支持os.truncate和os.ftruncate。

- bpo-23138: 修复了在cookiejar中解析缺少键或值的cookie的问题。由Demian Brecht提供补丁。

- bpo-23051: multiprocessing.Pool方法imap()和imap_unordered()现在可以处理迭代器引发的异常。由Alon Diamant和Davin Potts提供补丁。

- bpo-23581: 向MagicMock添加matmul支持。由Håkan Lövdahl提供补丁。

- bpo-23566: faulthandler的enable()、register()、dump_traceback()和dump_traceback_later()函数现在接受文件描述符。由Wei Wu提供补丁。

- bpo-22928: 在http.client中禁用了HTTP头注入。原始由Demian Brecht提供补丁。

- bpo-23615: 模块bz2、tarfile和tokenize现在可以通过imp.reload()重新加载。由Thomas Kluyver提供补丁。

- bpo-23605: os.walk()现在调用os.scandir()而不是os.listdir()。使用os.scandir()减少了对os.stat()的调用次数。初始补丁由Ben Hoyt编写。

### 构建

- bpo-23585: make patchcheck将确保解释器被构建。

### 测试

- bpo-23583: 在IDLE中添加了标准IO流的测试。

- bpo-22289: 防止由于ftp连接超时导致的test_urllib2net失败。

### 工具/示例

- bpo-22826: Tools/freeze/bkfile.py 中的 open() 函数结果现在与常规文件更兼容（特别是现在支持上下文管理协议）。

## Python 3.5.0 alpha 2

发布日期: 2015-03-09

### 核心与内置函数

- bpo-23571: PyObject_Call() 和 PyCFunction_Call() 现在会在函数返回结果并引发异常时抛出 SystemError。SystemError 会被链接到前一个异常。

### 库

- bpo-22524: 新增 os.scandir() 函数，属于 PEP 471: "os.scandir() 函数 -- 一个更好更快的目录迭代器"。补丁由 Ben Hoyt 编写。

- bpo-23103: 减少了 IPv4Address 和 IPv6Address 的内存消耗。

- bpo-21793: BaseHTTPRequestHandler 再次将响应代码记录为数字，而不是字符串化的枚举。补丁由 Demian Brecht 提供。

- bpo-23476: 在 ssl 模块中，当可用时，在证书存储上启用 OpenSSL 的 X509_V_FLAG_TRUSTED_FIRST 标志。

- bpo-23576: 当 SSL 层已到达 EOF 但底层连接尚未关闭时，避免在 SSL 读取中停滞。

- bpo-23504: 在 types 模块中添加了 __all__。

- bpo-23563: 优化了 urllib.parse 中的实用函数。

- bpo-7830: 扁平化嵌套的 functools.partial。

- bpo-20204: 为 _tkinter 类添加了 __module__ 属性。

- bpo-19980: 改进了对非识别字符串的 help()。help('') 现在显示关于 str 的帮助。help('help') 现在显示关于 help() 的帮助。原始由 Mark Lawrence 提供补丁。

- bpo-23521: 更正了 timedelta 除法的纯 Python 实现。对于某些浮点数，消除了 `timedelta * float` 中的 OverflowError；更正了 timedelta 真除法中的舍入。

- bpo-21619: 如果管道已断开，Popen 对象在 with 语句退出后不再留下僵尸进程。由 Martin Panter 提供补丁。

- bpo-22936: 使得可以在 traceback 模块和 unittest 中显示跟踪回溯中的局部变量。

- bpo-15955: 在 bz2.decompress() 中添加了一个选项以限制输出大小。由 Nikolaus Rath 提供补丁。

- bpo-6639: 关闭窗口后，模块级的turtle函数不再引发TclError。

- bpo-814253: 现在，在正则表达式的后向断言中，组引用和条件组引用可以正常工作。（另见：bpo-9179）

- bpo-23215: 使用自定义错误处理程序的多字节编解码器在忽略错误时消耗了过多内存并引发了SystemError或MemoryError。原始由Aleksi Torhamo提供补丁。

- bpo-5700: io.FileIO()在关闭文件后调用了flush()。如果closefd=False，则在close()中不会调用flush()。

- bpo-23374: 修复了当标准输出编码与文件系统编码不同（例如在Mac OS上）时，pydoc处理非ASCII文件失败的问题。

- bpo-23481: 从SSL模块的默认密码列表中移除RC4。

- bpo-21548: 修复了pydoc.synopsis()和pydoc.apropos()在模块文档字符串为空时的行为。

- bpo-22885: 修复了dbm.dumb模块中的任意代码执行漏洞。原始由Claudiu Popa提供补丁。

- bpo-23239: ssl.match_hostname()现在支持IP地址的匹配。

- bpo-23146: 修复了pathlib中处理带有正斜杠的绝对Windows路径时的错误。

- bpo-23096: 现在，协议0下的浮点数的pickle表示在Python和C实现中是相同的。

- bpo-19105: pprint现在更有效地利用右侧的自由空间。

- bpo-14910: 向argparse.ArgumentParser添加了allow_abbrev参数。由Jonathan Paugh、Steven Bethard、paul j3和Daniel Eriksson提供补丁。

- bpo-21717: tarfile.open()现在支持'x'（独占创建）模式。

- bpo-23344: marshal.dumps()现在平均快了20-25%。

- bpo-20416: 使用协议3和4的marshal.dumps()现在平均快了40-50%。

- bpo-23421: 修复了tarfile CLI中的压缩问题。由wdv4758h提供补丁。

- bpo-23367: 修复了unicodedata模块中可能的溢出问题。

- bpo-23361: 修复了Windows子进程创建代码中可能的溢出问题。

- logging.handlers.QueueListener 现在接受一个 respect_handler_level 关键字参数，如果设置为 True，将会在考虑处理器级别的情况下将消息传递给处理器。

- bpo-19705: turtledemo 现在有一个视觉排序算法演示。原始补丁来自 Jason Yeo。

- bpo-23801: 修复了 cgi.FieldStorage 不总是忽略多部分主体的整个前导部分的问题。

### 构建

- bpo-23445: pydebug 构建现在尽可能使用 "gcc -Og"，以使生成的可执行文件更快。

- bpo-23686: 更新 OS X 10.5 安装程序构建以使用 OpenSSL 1.0.2a。

### C API

- bpo-20204: 现在对于没有 __module__ 属性的内置类型会发出弃用警告。

### Windows

- bpo-23465: 实现 PEP 486 - 使 Python 启动器感知虚拟环境。由 Paul Moore 提供补丁。

- bpo-23437: 在 Windows 上使用户脚本目录版本化。由 Paul Moore 提供补丁。

## Python 3.5.0 alpha 1

发布日期: 2015-02-08

### 核心与内置函数

- bpo-23285: PEP 475 - EINTR 处理。

- bpo-22735: 修复了许多涉及自定义 mro() 实现的边缘情况（包括崩溃）。

- bpo-22896: 避免使用 PyObject_AsCharBuffer(), PyObject_AsReadBuffer() 和 PyObject_AsWriteBuffer()。

- bpo-21295: 撤销了一些对 AST 行号和列偏移量的更改（bpo-16795），这些更改构成了回归。

- bpo-22986: 在某些情况下允许更改对象的 __class__ 在动态类型和静态类型之间。

- bpo-15859: PyUnicode_EncodeFSDefault(), PyUnicode_EncodeMBCS() 和 PyUnicode_EncodeCodePage() 现在如果对象不是 Unicode 对象则会引发异常。对于 PyUnicode_EncodeFSDefault()，在非 Windows 平台上已经是这种情况。补丁由 Campbell Barton 编写。

- bpo-21408: 默认的 __ne__() 现在如果 __eq__() 返回 NotImplemented 则返回 NotImplemented。原始由 Martin Panter 提供补丁。

- bpo-23321: 修复了当错误处理程序返回的替换字符串比畸形输入数据长时 str.decode() 中的崩溃。

- bpo-22286: "backslashreplace" 错误处理程序现在可以用于解码和转换。

- bpo-23253: 在Windows上延迟加载ShellExecute[AW]以减少os.startfile的启动开销。

- bpo-22038: pyatomic.h现在使用stdatomic.h或GCC内置函数进行原子内存访问（如果可用）。补丁由Vitor de Lima和Gustavo Temple编写。

- bpo-20284: 为bytes和bytearray添加了%-插值（即printf）格式化。

- bpo-23048: 修复了在pdb中跳出无限while循环的问题。

- bpo-20335: bytes构造函数现在在编码或错误与非字符串参数一起指定时引发TypeError。基于Renaud Blanch的补丁。

- bpo-22834: 如果当前工作目录最终被设置为不存在的目录，则导入将不再引发FileNotFoundError。

- bpo-22869: 将解释器启动和关闭代码移动到一个新的专用pylifecycle.c模块中。

- bpo-22847: 提高方法缓存的效率。

- bpo-22335: 修复在32位平台上尝试将bytearray扩大到0x7fffffff字节时的崩溃问题。

- bpo-22653: 修复在调试模式下进行可重入字典插入时的断言失败。

- bpo-22643: 修复Unicode大小写操作（大写、小写、标题、交换大小写、casefold）中的整数溢出问题。

- bpo-17636: 现在支持涉及相对导入的循环导入。

- bpo-22604: 修复在调试模式下将复数除以(nan+0j)时的断言错误。

- bpo-21052: 当sys.path_hooks或sys.meta_path设置为None时，不引发ImportWarning。

- bpo-16518: 在错误消息中使用'需要类似字节的对象'，而不是之前使用的更为晦涩的"'x'不支持缓冲区协议"。

- bpo-22470: 修复了"backslashreplace"、"xmlcharrefreplace"和"surrogatepass"错误处理程序中的整数溢出问题。

- bpo-22540: speed up `PyObject_IsInstance` and `PyObject_IsSubclass` in the common case that the second argument has metaclass `type`.

- bpo-18711: Add a new `PyErr_FormatV` function, similar to `PyErr_Format` but accepting a `va_list` argument.

- bpo-22520: 修复生成 unicode 对象 repr 时的溢出检查。

- bpo-22519: 修复 PyBytes_Repr 中的溢出检查。

- bpo-22518: 修复 latin-1 编码中的整数溢出问题。

- bpo-16324: MIMEText 的 _charset 参数现在也接受 email.charset.Charset 实例。初始补丁由 Claude Paroz 提供。

- bpo-1764286: 修复 inspect.getsource() 以支持装饰函数。由 Claudiu Popa 提供补丁。

- bpo-18554: os.__all__ 包括 posix 函数。

- bpo-21391: 在 shutil 模块中使用 os.path.abspath。

- bpo-11471: 避免在 if 块的末尾生成 JUMP_FORWARD 指令，如果没有 else 子句。原始由 Eugene Toder 提供补丁。

- bpo-22215: 现在当 str 或 bytes 参数包含不允许的空字符或字节时，会引发 ValueError 而不是 TypeError。

- bpo-22258: 修复 Illumos 上的内部函数 set_inheritable()。该平台暴露了函数 `ioctl(FIOCLEX)`，但调用它会失败，errno 是 ENOTTY: "Inappropriate ioctl for device"。set_inheritable() 现在回退到较慢的 `fcntl()` (`F_GETFD` 然后 `F_SETFD`)。

- bpo-21389: 在绑定方法的 repr 中显示底层函数的 __qualname__。

- bpo-22206: 使用 pthread 时，PyThread_create_key() 现在在整数溢出时将 errno 设置为 ENOMEM 并返回 -1（错误）。

- bpo-20184: 为 30 个内置函数添加了基于 Argument Clinic 的签名内省。

- bpo-22116: C 函数和方法（'builtin_function_or_method' 类型）现在可以被弱引用。由 Wei Wu 提供补丁。

- bpo-22077: 通过添加 'or slices' 改善 bytearrays、bytes、lists 和 tuples 的索引错误消息。为 bytearrays 添加了 ', not <typename>'。原始由 Claudiu Popa 提供补丁。

- bpo-20179: 将 Argument Clinic 应用于 bytes 和 bytearray。由 Tal Einat 提供补丁。

- bpo-22082: 清除 slotdefs 中的内部字符串。

- 升级 Unicode 数据库到 7.0.0 版本。

- bpo-21897: 修复当 frame.clear() 被调用时带有闭包变量的 f_locals 属性的崩溃问题。

- bpo-21205: 为生成器添加一个新的 `__qualname__` 属性，即限定名称，并在生成器的表示中使用它（`repr(gen)`）。生成器的默认名称（`__name__` 属性）现在从函数中获取，而不是从代码中获取。使用 `gen.gi_code.co_name` 获取代码的名称。

- bpo-21669: 借助 SyntaxError.__init__ 中的启发式方法，解析器现在尝试在“exec”和“print”被用作语句时生成更有意义（或至少更搜索引擎友好）的错误消息。

- bpo-21642: 在条件 if-else 表达式中，允许整数与 `else` 关键字之间没有空格（例如 `True if 42else False`）的写法作为有效语法。

- bpo-21523: 修复了编译器中一些操作码堆栈效应的过度悲观计算。这也修复了当编译包含大量“and”和“or”运算符的代码时明显的二次编译时间问题。

- bpo-21418: 修复了在没有参数且没有当前帧（例如嵌入式 Python）时调用内置函数 super() 时的崩溃问题。

- bpo-21425: 修复了交互式解释器中标准流的刷新问题。

- bpo-21435: 在极少数情况下，对循环垃圾中的对象运行终结器时，由于内部迭代逻辑的微妙缺陷，可能会发生错误的指针解引用。

- bpo-21377: PyBytes_Concat() 现在尝试在第一个参数的引用计数为1时原地连接。由 Nikolaus Rath 提供补丁。

- bpo-20355: -W 命令行选项现在比 PYTHONWARNINGS 环境变量具有更高的优先级。由 Arfrever 提供补丁。

- bpo-21274: 在 Python/pythonrun.c 中为 GNU/Hurd 定义 PATH_MAX。

- bpo-20904: 支持在 m68k 上设置 FPU 精度。

- bpo-21209: 修复使用 yield from 语法向自定义生成器对象发送元组的问题。

- bpo-21193: 当 b 为负数时，pow(a, b, c) 现在会引发 ValueError 而不是 TypeError。补丁由 Josh Rosenberg 提供。

- bpo-21176: PEP 465: 为矩阵乘法添加'@'运算符。

- bpo-21134: 修复在未初始化的UnicodeEncodeError、UnicodeDecodeError或UnicodeTranslateError对象上调用str时出现的段错误。

- bpo-19537: 修复m68k下PyUnicode_DATA()的对齐问题。由Andreas Schwab提供补丁。

- bpo-20929: 添加类型转换以避免负数移位。

- bpo-20731: 即使以文本模式打开，也能正确定位源代码文件中的位置。由Serhiy Storchaka提供补丁。

- bpo-20637: 键共享现在也适用于子类的实例字典。由Peter Ingebretson提供补丁。

- bpo-8297: 模块中缺失的属性现在在错误文本中包含模块名称。原始由ysj.ray提供补丁。

- bpo-19995: %c、%o、%x和%X现在对非整数输入引发TypeError。

- bpo-19655: ASDL解析器 - 用于构建过程中生成用于在C中管理Python AST的代码 - 被重写。新解析器是自包含的，不需要携带spark.py解析器生成器库；spark.py已从源代码库中移除。

- bpo-12546: 允许在使用str、int、float和complex的__format__方法时使用 `\x00` 作为填充字符。

- bpo-20480: 添加ipaddress.reverse_pointer。由Leon Weber提供补丁。

- bpo-13598: 修改string.Formatter以支持替换字段的自动编号。现在在这方面它与str.format()的行为相匹配。由Phil Elson和Ramchandra Apte提供补丁。

- bpo-8931: 使类型'c'的替代格式('#')引发异常。在3.5之前的版本中，'#'与'c'一起使用没有效果。现在指定它是一个错误。由Torsten Landschoff提供补丁。

- bpo-23165: 在_Py_char2wchar函数中分配内存之前执行溢出检查。

### 库

- bpo-23399: pyvenv尽可能创建相对符号链接。

- bpo-20289: cgi.FieldStorage()现在支持上下文管理协议。

- bpo-13128: 当debuglevel > 0时，打印CONNECT请求的响应头。由Demian Brecht提供补丁。

- bpo-15381: 优化了 io.BytesIO 以减少分配和复制操作。

- bpo-22818: 现在，对可能匹配空字符串的模式进行拆分时会发出警告。只能匹配空字符串的模式现已被拒绝。

- bpo-23099: 现在拒绝关闭带有导出缓冲区的 io.BytesIO，以防止损坏导出的缓冲区。

- bpo-23326: 移除了 __ne__ 实现。由于在 bpo-21408 中修复了默认的 __ne__ 实现，它们现在是多余的。

- bpo-23363: 修复了 itertools.permutations 中可能的溢出问题。

- bpo-23364: 修复了 itertools.product 中可能的溢出问题。

- bpo-23366: 修复了 itertools.combinations 中可能的整数溢出问题。

- bpo-23369: 修复了 _json.encode_basestring_ascii 中可能的整数溢出问题。

- bpo-23353: 修复了 PyEval_EvalFrameEx() 中生成器的异常处理。在入口处，即使 PyEval_EvalFrameEx() 以 throwflag=0 调用，也会保存或交换异常状态。在退出时，异常状态现在总是被恢复或交换，不仅当 why 是 WHY_YIELD 或 WHY_RETURN 时。补丁由 Antoine Pitrou 共同编写。

- bpo-14099: 恢复了对可定位但不可寻址流的 ZIP 文件写入支持。

- bpo-14099: 现在，写入 ZipFile 和读取多个 ZipExtFiles 是线程安全的。

- bpo-19361: JSON 解码器现在引发 JSONDecodeError 而不是 ValueError。

- bpo-18518: timeit 现在拒绝不能在函数或循环外编译的语句（例如 "return" 或 "break"）。

- bpo-23094: 修复了 pickle 的 Python 实现中带有帧的 readline 问题。

- bpo-23268: 修复了 ipaddress 类比较中的错误。

- bpo-21408: 移除了不正确的 __ne__() 实现，这些实现在 __eq__() 返回 NotImplemented 时没有返回 NotImplemented。现在默认的 __ne__() 工作正常。

- bpo-19996: `email.feedparser.FeedParser` 现在处理（格式错误的）没有键的头部，而不是假设主体已经开始。

- bpo-20188: 在ssl模块中支持应用层协议协商(ALPN)。

- bpo-23133: ipaddress对象的pickle现在生成更紧凑且可移植的表示。

- bpo-23248: 从最新的OpenSSL git master更新ssl错误代码。

- bpo-23266: 当存在许多非连续地址时，ipaddress.collapse_addresses()的实现速度大幅提升。

- bpo-23098: os模块现在支持64位的dev_t。

- bpo-21817: 当提交给ProcessPoolExecutor的任务中抛出异常时，现在会在父进程中显示远程回溯。由Claudiu Popa提供补丁。

- bpo-15955: 添加一个选项以限制解压LZMA数据时的输出大小。由Nikolaus Rath和Martin Panter提供补丁。

- bpo-23250: 在http.cookies模块中，将"HttpOnly"和"Secure"按照标准中的写法大写。

- bpo-23063: 在distutils的check命令中，修复带有code或code-block指令的reST的解析。

- bpo-23209: 如果选择器已关闭，selectors.BaseSelector.get_key()现在会抛出RuntimeError。并且selectors.BaseSelector.close()现在会清除其对选择器映射的内部引用以打破引用循环。初始补丁由Martin Richard编写。（另见：bpo-23225）

- bpo-17911: 提供一种方式来为PEP-302模块的linecache播种，而无需实际加载代码。

- bpo-17911: 为traceback提供一个新的对象API，包括能够不在回溯实际渲染之前查找行，且不保留原始对象的任何痕迹。

- bpo-19777: 在Path对象上提供一个home()类方法。由Victor Salgado和Mayank Tripathi贡献。

- bpo-23206: 使 `json.dumps(..., ensure_ascii=False)` 与默认情况 `ensure_ascii=True` 一样快。由Naoki Inada提供补丁。

- bpo-23185: 添加math.inf和math.nan常量。

- bpo-23186: 添加 ssl.SSLObject.shared_ciphers() 和 ssl.SSLSocket.shared_ciphers() 以获取客户端在握手时发送的加密套件列表。

- bpo-23143: 移除对早于0.9.8版本的OpenSSL的兼容性支持。

- bpo-23132: 改进由functool.total_ordering创建的比较方法的性能和内省支持。

- bpo-19776: 在Path对象上添加expanduser()方法。

- bpo-23112: 修复SimpleHTTPServer在重定向添加尾部斜杠时正确携带查询字符串和片段的问题。

- bpo-21793: 添加了http.HTTPStatus枚举（例如HTTPStatus.OK, HTTPStatus.NOT_FOUND）。补丁由Demian Brecht提供。

- bpo-23093: 在io模块中，允许更多操作在已分离的流上工作。

- bpo-23111: 在ftplib中，使ssl.PROTOCOL_SSLv23成为默认协议版本。

- bpo-22585: 在OpenBSD 5.6及更新版本上，os.urandom()现在调用getentropy()，而不是读取/dev/urandom，来获取伪随机字节。

- bpo-19104: pprint现在为包装的字符串生成可评估的输出。

- bpo-23071: 向codecs.__all__添加了缺失的名称。由Martin Panter提供补丁。

- bpo-22783: 如果可能，Pickling现在使用NEWOBJ操作码而不是NEWOBJ_EX操作码。

- bpo-15513: 为pickle类添加了__sizeof__实现。

- bpo-19858: pickletools.optimize()现在能够识别MEMOIZE操作码，可以生成更紧凑的结果，并且在输入数据包含与PUT或BINPUT操作码一起的MEMOIZE操作码时不再生成无效输出。

- bpo-22095: 修复了HTTPConnection.set_tunnel的默认端口问题。主机头中的端口值被设置为"None"。由Demian Brecht提供补丁。

- bpo-23016: 当程序使用pythonw.exe运行时，警告不再产生AttributeError。

- bpo-21775: shutil.copytree(): 修复在复制到VFAT时崩溃的问题。异常处理程序假设OSError对象总是有'winerror'属性。但事实并非如此，因此在Linux（以及任何其他非Windows操作系统）上运行时，异常处理程序本身会引发AttributeError。由Greg Ward提供补丁。

- bpo-1218234: 修复inspect.getsource()以加载重新加载模块的更新源代码。初始由Berker Peksag提供补丁。

- bpo-21740: 在doctest中支持包装的可调用对象。由Claudiu Popa提供补丁。

- bpo-23009: 确保selectors.EpollSelector.select()在没有FD注册时也能工作。

- bpo-22959: 在http.client.HTTPSConnection的构造函数中，优先使用上下文的check_hostname属性而不是 check_hostname 参数。

- bpo-22696: 添加函数 `sys.is_finalizing()` 以了解解释器关闭状态。

- bpo-16043: Add a default limit for the amount of data xmlrpclib.gzip_decode will return. This resolves CVE-2013-1753.

- bpo-14099: ZipFile.open()不再重新打开底层文件。ZipFile.open()返回的对象现在可以独立于ZipFile操作，即使ZipFile是通过将类似文件的对象作为构造函数的第一个参数传递而创建的。

- bpo-22966: 修复当pyc_compile被要求编译包含源文件名中多个点的源文件时，__pycache__ pyc文件名冲突的问题。

- bpo-21971: 更新turtledemo文档并将模块添加到索引中。

- bpo-21032: 修复如果HTTPConnection.getresponse()失败时的套接字泄漏问题。原始由Martin Panter提供补丁。

- bpo-22407: 弃用re.LOCALE标志与str模式或re.ASCII一起使用。它从未工作过。

- bpo-22902: 在 Linux 上现在会使用 "ip" 命令在 uuid.getnode() 中确定 MAC 地址。 由 Bruno Cauet 编写补丁。

- bpo-22960: 向xmlrpclib.ServerProxy构造函数添加上下文参数。

- bpo-22389: 添加contextlib.redirect_stderr()。

- bpo-21356: 使 ssl.RAND_egd() 成为可选项以支持 LibreSSL。该函数的可用性在编译期间进行检查。补丁由 Bernard Spil 编写。

- bpo-22915: SAX 解析器现在支持通过文件描述符或字节路径打开的文件。

- bpo-22609: collections 模块中的映射类的构造函数和更新方法现在接受 self 关键字参数。

- bpo-22940: 添加 readline.append_history_file。

- bpo-19676: 添加了 "namereplace" 错误处理程序。

- bpo-22788: 向 logging.handlers.HTTPHandler 添加 context 参数。

- bpo-22921: 允许 SSLContext 接受 hostname 参数，即使 OpenSSL 不支持 SNI。

- bpo-22894: TestCase.subTest() 在 failfast 模式下会导致测试套件停止，即使没有失败。

- bpo-22796: HTTP cookie 解析现在更加严格，以防范潜在的注入攻击。

- bpo-22370: pathlib 中的 Windows 检测现在更加健壮。

- bpo-22841: 在 asyncio add_signal_handler() 中拒绝协程。由 Ludovic.Gasc 提供补丁。

- bpo-19494: 添加了 urllib.request.HTTPBasicPriorAuthHandler。由 Matej Cepl 提供补丁。

- bpo-22578: 向 re.error 类添加了属性。

- bpo-22849: 修复了 io.TextIOWrapper 构造函数中可能的双重释放问题。

- bpo-12728: 现在在不区分大小写的正则表达式中匹配具有相同大写但不同小写的不同 Unicode 字符。

- bpo-22821: 修复了在 64 位大端平台上使用整数参数的 fcntl()。

- bpo-21650: Add an `--sort-keys` option to json.tool CLI.

- bpo-22824: 更新了 reprlib 中集合的输出格式以使用集合字面量。补丁由 Berker Peksag 贡献。

- bpo-22824: 更新了 reprlib 中数组的输出格式，以显示没有不必要空列表的空数组。建议由 Serhiy Storchaka 提出。

- bpo-22406: 修复了错误移植到 3.x 的 uu_codec 编解码器。基于 Martin Panter 的补丁。

- bpo-17293: uuid.getnode() 现在在 AIX 上使用 netstat 确定 MAC 地址。基于 Aivars Kalvāns 的补丁。

- bpo-22769: 修复了 ttk.Treeview.tag_has() 在没有参数调用时的问题。

- bpo-22417: 在 httplib 中默认验证证书 (PEP 476)。

- bpo-22775: 修复了使用协议 2 及以上版本对 http.cookies.SimpleCookie 的反序列化。补丁由 Tim Graham 提供。

- bpo-22776: 在 SysLogHandler.emit() 中将排除的代码移至 try 块的作用域内。

- bpo-22665: 将缺失的 get_terminal_size 和 SameFileError 添加到 shutil.__all__。

- bpo-6623: 移除了 ftplib 模块中已弃用的 Netrc 类。由 Matt Chaput 提供补丁。

- bpo-17381: 修复了正则表达式中不区分大小写范围的处理。

- bpo-22410: re 模块中的模块级函数现在会缓存考虑到区域的依赖于区域设置的编译后的正则表达式。

- bpo-22759: pathlib.Path() 上的查询方法 (exists(), is_dir() 等) 现在在底层 stat 调用引发 NotADirectoryError 时返回 False。

- bpo-8876: distutils 现在在硬链接不起作用时回退到复制文件。这允许使用如 VirtualBox 共享文件夹这样的特殊文件系统。

- bpo-22217: 实现了 zipfile 模块中类的 reprs。

- bpo-22457: 在发现的 start_dir 中尊重 load_tests。

- bpo-18216: gettext 现在在 .mo 文件有不受支持的主版本号时引发错误。由 Aaron Hill 提供补丁。

- bpo-13918: 提供了一个 locale.delocalize() 函数，可以从表示数字的字符串中移除区域特定的数字格式，而不将其转换为特定类型。由 Cédric Krier 提供补丁。

- bpo-22676: 使没有 __module__ 属性的全局对象的序列化不那么慢。

- bpo-18853: 修复了 shlex.__nain__ 中的 ResourceWarning。

- bpo-9351: 使用 set_defaults 在 argparse 子解析器上设置的默认值不再在父解析器上也设置时被忽略。

- bpo-7559: unittest 测试加载时的 ImportErrors 现在会在导入失败后作为导入异常报告，而不是属性错误。

- bpo-19746: Make it possible to examine the errors from unittest discovery without executing the test suite. The new `errors` attribute on TestLoader exposes these non-fatal errors encountered during discovery.

- bpo-21991: 使 email.headerregistry 的头 'params' 属性变为只读（MappingProxyType）。之前字典是可修改的，但每次访问属性时都会创建一个新的字典。

- bpo-22638: 现在整个标准库中 SSLv3 已被禁用。仍然可以通过手动实例化 SSLContext 来启用它。

- bpo-22641: 在 asyncio 中，客户端连接的默认 SSL 上下文现在使用 ssl.create_default_context() 创建，以提高安全性。

- bpo-17401: 在 io.FileIO 的 repr 中包含 closefd。

- bpo-21338: 为 compileall 添加静默模式。compile_{dir, file, path} 函数的 quiet 参数现在具有多级值。此外，CLI 的 -q 选项现在也具有多级值。由 Thomas Kluyver 提供补丁。

- bpo-20152: 将 array 和 cmath 模块转换为 Argument Clinic。

- bpo-18643: 在 Windows 上添加 socket.socketpair()。

- bpo-22435: 修复 socketserver 绑定失败时的文件描述符泄漏问题。

- bpo-13096: 修复了 CTypes POINTER 处理大值时出现的段错误。

- bpo-11694: 如文档所述，在 xdrlib 中引发 ConversionError。由 Filip Gruszczyński 和 Claudiu Popa 提供补丁。

- bpo-19380: 优化了正则表达式的解析。

- bpo-1519638: 现在在 re.sub() 和 re.subn() 中，未匹配的组将被空字符串替换。

- bpo-18615: sndhdr.what/whathdr 现在返回一个 namedtuple。

- bpo-22462: 修复 pyexpat 创建虚拟帧以使其出现在异常回溯中的问题。

- bpo-21965: 为 ssl 模块添加对内存中 SSL 的支持。由 Geert Jansen 提供补丁。

- bpo-21173: 修复了在调用.clear()时有迭代器存活时，对WeakKeyDictionary的len()操作的问题。

- bpo-11866: 消除了新线程名称计算中的竞态条件。

- bpo-21905: 在迭代过程中当sys.modules被修改时，避免pickle.whichmodule()中的RuntimeError。由Olivier Grisel提供补丁。

- bpo-11271: concurrent.futures.Executor.map()现在接受一个 chunksize 参数，允许在子进程中批量处理任务并提高ProcessPoolExecutor的性能。由Dan O'Reilly提供补丁。

- bpo-21883: os.path.join()和os.path.relpath()现在对于不支持或参数类型不匹配的情况，会抛出带有更有帮助的错误信息的TypeError。

- bpo-22219: zipfile模块的命令行接口现在为ZIP文件中的目录（包括空目录）添加条目。

- bpo-22449: 在ssl.SSLContext.load_default_certs中，在Windows上查询环境变量SSL_CERT_DIR和SSL_CERT_FILE。

- bpo-22508: 移除了email.__version__变量；email代码不再与标准库分开提供，并且__version__在多个版本中未更新。

- bpo-20076: 向语言环境别名表添加了非派生的UTF-8别名。

- bpo-20079: 向语言环境别名表添加了glibc 2.18支持的语言环境。

- bpo-20218: 向pathlib.Path对象添加了便利方法read_text/write_text和read_bytes/write_bytes。

- bpo-22396: 在32位AIX平台上，不暴露os.posix_fadvise()和os.posix_fallocate()，因为它们在系统头文件中的原型是错误的。

- bpo-22517: 当io.BufferedRWPair对象被析构时，清除其弱引用。

- bpo-22437: 正则表达式中的捕获组数量不再限制为100。

- bpo-17442: InteractiveInterpreter现在在其showtraceback方法中显示完整的链式回溯，以匹配内置的交互式解释器。

- bpo-23392: 添加了与FILE*一起工作的marshal C API的测试。

- bpo-10510: distutils的register和upload方法现在使用符合HTML标准的CRLF行尾。

- bpo-9850: 修复了macpath.join()对于空的第一组件的问题。由Oleg Oshmyan提供补丁。

- bpo-5309: distutils的build和build_ext命令现在接受一个 `-j` 选项以启用扩展模块的并行构建。

- bpo-22448: 改进取消的定时器句柄清理以防止无限制的内存使用。补丁由Joshua Moore-Oliva提供。

- bpo-22427: 当在生成器中使用with语句时，TemporaryDirectory不再尝试两次清理。

- bpo-22362: 禁止在正则表达式中使用超出0-0o377范围的模糊八进制转义。

- bpo-20912: 现在添加到ZIP文件的目录具有正确的Unix和MS-DOS目录属性。

- bpo-21866: 如果allowZip64为false，ZipFile.close()不再写入ZIP64中央目录记录。

- bpo-22278: 修复了urljoin在处理相对URL时的问题，这是在提交issue22118的更改后观察到的回归。

- bpo-22415: 修复了re模块中GROUPREF_EXISTS操作码的调试输出。移除了调试输出中的尾随空格。

- bpo-22423: 线程中的未处理异常不再导致当sys.stderr为None时未处理的AttributeError。

- bpo-21332: 确保subprocess.Popen()中的 `bufsize=1` 选择行缓冲，而不是块缓冲。由Akira Li提供补丁。

- bpo-21091: 修复API错误：email.message.EmailMessage.is_attachment现在是一个方法。

- bpo-21079: 修复email.message.EmailMessage.is_attachment以在头部既有参数又有值时返回正确的结果。

- bpo-22247: 将NNTPError添加到nntplib.__all__。

- bpo-22366: urllib.request.urlopen将接受一个上下文对象（SSLContext）作为参数，该对象将用于HTTPS连接。由Alex Gaynor提供补丁。

- bpo-4180: 当过滤器被修改时，警告注册表现在被重置。

- bpo-22419: 限制 wsgiref 服务器中传入 HTTP 请求的长度为 65536 字节，对于超出此长度的请求发送 414 错误代码。由 Devin Cook 提供补丁。

- Lax cookie parsing in http.cookies could be a security issue when combined with non-standard cookie handling in some Web browsers. Reported by Sergey Bobrov.

- bpo-20537: 日志记录方法现在接受异常实例以及布尔值或异常元组。感谢 Yury Selivanov 提供的补丁。

- bpo-22384: 当使用 pythonw.exe 运行时，Tkinter 回调中的异常不再导致程序崩溃。

- bpo-22168: 在 OS X 上使用非默认 Canvas 时防止 turtle 的 AttributeError。

- bpo-21147: 如果请求包含空字符，sqlite3 现在会引发异常而不是截断它。基于 Victor Stinner 的补丁。

- bpo-13968: glob 模块现在支持使用 `**` 模式在子目录中进行递归搜索。

- bpo-21951: 修复了在 AIX 上当使用空字符串或元组参数调用 Tcl 命令时 Tkinter 的崩溃问题。

- bpo-21951: 如果内存分配失败，Tkinter 现在更可能引发 MemoryError 而不是崩溃。

- bpo-22338: 修复了 json 模块在内存分配失败时的崩溃问题。

- bpo-12410: imaplib.IMAP4 现在支持上下文管理协议。原始由 Tarek Ziadé 提供补丁。

- bpo-21270: 我们现在在 mock.call 对象中覆盖元组方法，以便它们可以用作普通的调用属性。

- bpo-16662: load_tests() is now unconditionally run when it is present in a package's __init__.py. TestLoader.loadTestsFromModule() still accepts use_load_tests, but it is deprecated and ignored. A new keyword-only attribute `pattern` is added and documented. Patch given by Robert Collins, tweaked by Barry Warsaw.

- bpo-22226: Treeview.heading() 的结果中 "status" 键的第一个字母不再被剥离。

- bpo-19524: 修复了在接收到无效响应时HTTP连接的资源泄漏问题。由Martin Panter提供补丁。

- bpo-20421: 向SSL套接字添加了.version()方法，暴露实际使用的协议版本。

- bpo-19546: configparser异常不再暴露实现细节。移除了链式KeyErrors，使得跟踪回溯更加清晰。由Claudiu Popa提供补丁。

- bpo-22051: turtledemo不再重新加载示例来重新运行它们。变量初始化和GUI设置应该在main()中完成，每次运行演示时都会调用main()，但不会在导入时调用。

- bpo-21933: Turtledemo用户可以通过菜单选择或控制(command) '-'或'+'或控制鼠标滚轮来更改代码字体大小。原始由Lita Cho提供补丁。

- bpo-21597: 现在可以通过鼠标抓取和拖动turtledemo文本窗格和绘图画布之间的分隔符。可以加宽代码文本窗格以便轻松查看或复制文本的完整宽度。在小屏幕上可以加宽画布。原始由Jan Kanis和Lita Cho提供补丁。

- bpo-18132: 当窗口缩小时，Turtledemo按钮不再消失。原始由Jan Kanis和Lita Cho提供补丁。

- bpo-22043: time.monotonic()现在总是可用。`threading.Lock.acquire()`、``threading.RLock.acquire()``和套接字操作现在在使用超时时使用单调时钟，而不是系统时钟。

- bpo-21527: 向ThreadPoolExecutor添加了默认的工作线程数，等于CPU数量的5倍。由Claudiu Popa提供补丁。

- bpo-22216: smtplib现在在退出后更完全地重置其状态。之前行为的最明显后果是在connect/starttls/quit/connect/starttls序列中的STARTTLS失败。

- bpo-22098: ctypes的BigEndianStructure和LittleEndianStructure现在定义了一个空的__slots__，这样子类不会总是得到一个实例字典。由Claudiu Popa提供补丁。

- bpo-22185: 修复了threading.Condition.wait()中因不持有锁而修改等待队列导致的偶尔出现的RuntimeError。由Doug Zongker提供补丁。

- bpo-22287: 在UNIX上，_PyTime_gettimeofday()现在使用clock_gettime(CLOCK_REALTIME)（如果可用）。作为副作用，Python现在在Solaris和Linux上（仅glibc版本低于2.17时）依赖于librt库。

- bpo-22182: 在distutils.file_util.move_file中正确使用e.args来解包异常。由Claudiu Popa提供补丁。

- webbrowser模块现在使用subprocess的start_new_session=True，而不是潜在风险的preexec_fn=os.setsid调用。

- bpo-22042: 如果文件描述符处于阻塞模式，signal.set_wakeup_fd(fd)现在会引发异常。

- bpo-16808: inspect.stack()现在返回一个命名元组而不是元组。由Daniel Shahaf提供补丁。

- bpo-22236: 修复了在NoDefaultRoot模式下的Tkinter图像复制操作。

- bpo-2527: 向timeit函数添加了一个 globals 参数，以便覆盖执行定时代码的全局命名空间。补丁由Ben Roberts提供。

- bpo-22118: 将urllib.parse切换到使用RFC 3986语义解析相对URL，而不是RFCs 1808和2396。补丁由Demian Brecht提供。

- bpo-21549: 向TarFile.list()添加了“members”参数。

- bpo-19628: 允许通过-r选项指定compileall的递归深度。

- bpo-15696: 为Windows上的mmap对象添加了__sizeof__实现。

- bpo-22068: 避免了Tkinter中Variables和Fonts的引用循环。

- bpo-22165: SimpleHTTPRequestHandler现在支持不可解码的文件名。

- bpo-15381: 优化了io.BytesIO中的行读取。

- bpo-8797: 在基本认证失败时立即引发HTTPError。初始由Sam Bull提供补丁。

- bpo-20729: 恢复了mailbox模块中lazy iterkeys()/itervalues()/iteritems()的使用。

- bpo-21448: Changed FeedParser feed() to avoid O(N2) behavior when parsing long line. Original patch by Raymond Hettinger.

- bpo-22184: 当用户忘记必需的参数时，functools LRU Cache装饰器工厂现在会提供更早更清晰的错误信息。

- bpo-17923: 在AIX上，以斜杠结尾的glob()模式不再匹配非目录。基于Delhallt的补丁。

- bpo-21725: 在smtpd中添加了对RFC 6531（SMTPUTF8）的支持。

- bpo-22176: 将ctypes模块的libffi更新到v3.1。此版本增加了对Linux AArch64和POWERPC ELF ABIv2小端架构的支持。

- bpo-5411: 在shutil模块中添加了对"xztar"格式的支持。

- bpo-21121: 不再强制第三方C扩展使用-Werror=declaration-after-statement构建。

- bpo-21975: 修复了使用未初始化的sqlite3.Row（特别是在解pickle pickled sqlite3.Row时）时的崩溃问题。sqlite3.Row现在在__new__()方法中初始化。

- bpo-20170: 将posixmodule转换为使用Argument Clinic。

- bpo-21539: Add an exists_ok argument to `Pathlib.mkdir()` to mimic `mkdir -p` and `os.makedirs()` functionality. When true, ignore FileExistsErrors. Patch by Berker Peksag.

- bpo-22127: 在socket模块中绕过IDNA处理纯ASCII主机名（特别是数字IP）。

- bpo-21047: 将HTMLParser的 convert_charrefs 参数的默认值设置为True。由Berker Peksag提供补丁。

- 在 html.entities 包中增加 __all__ 变量。

- bpo-15114: HTMLParser的严格模式和参数，HTMLParser.error，以及HTMLParserError异常已被移除。

- bpo-22085: 在Tkinter中放弃了对Tk 8.3的支持。

- bpo-21580: 现在Tkinter正确处理传递给Tk的字节参数。特别是这允许从二进制数据初始化图像。

- bpo-22003: 当从字节对象初始化时，io.BytesIO()现在延迟复制直到它被修改，从而在某些用例中提高了性能和内存使用。由David Wilson提供补丁。

- bpo-22018: 在Windows上，signal.set_wakeup_fd()现在也支持套接字。一个副作用是Python依赖于WinSock库。

- bpo-22054: 添加 os.get_blocking() 和 os.set_blocking() 函数以获取和设置文件描述符的阻塞模式（如果设置了 O_NONBLOCK 标志则为 False，否则为 True）。这些函数在 Windows 上不可用。

- bpo-17172: 即使在通过子进程运行时，也使 turtledemo 在 OS X 上作为活动状态启动。补丁由 Lita Cho 提供。

- bpo-21704: 当信号量不可用时，修复 _multiprocessing 的构建错误。由 Arfrever Frehtes Taifersar Arahesis 提供补丁。

- bpo-20173: 将 sha1、sha256、sha512 和 md5 转换为 ArgumentClinic。由 Vajrasky Kok 提供补丁。

- 修复 Windows 64 位上的 repr(_socket.socket)：不要在关闭的套接字上因 OverflowError 而失败。repr(socket.socket) 已经工作良好。

- bpo-22033: 大多数 Python 实现的类的 repr 现在包含实际的类名而不是硬编码的名称。

- bpo-21947: dis 模块现在可以根据 generator-iterator 对象的 gi_code 属性对其进行反汇编。由 Clement Rouault 提供补丁。

- bpo-16133: asynchat.async_chat.handle_read() 方法现在忽略 BlockingIOError 异常。

- bpo-22044: 修复了 call_tzinfo_method 中的过早 DECREF。由 Tom Flanagan 提供补丁。

- bpo-19884: readline：如果标准输出不是终端，则禁用元修饰键，以避免将 ANSI 序列 `"\033[1034h"` 写入标准输出。此序列用于某些终端（例如：TERM=xterm-256color）以启用 8 位字符支持。

- bpo-4350: 移除了许多长期过时且不工作的 Tkinter 方法。

- bpo-6167: Scrollbar.activate() 现在在未指定参数时返回活动元素的名称。Scrollbar.set() 现在总是只接受 2 个参数。

- bpo-15275: 清理并加速 ntpath 模块。

- bpo-21888: plistlib 的 load() 和 loads() 现在在指定 fmt 参数时可以工作。

- bpo-22032: 现在总是使用 __qualname__ 而不是 __name__ 来格式化 Python 实现的类的完全限定类名。

- bpo-22031: 当包含形如" at 0x..."的id时，Reprs现在总是使用带有"0x"前缀的十六进制格式。

- bpo-22018: signal.set_wakeup_fd()现在在 `fstat()` 失败时引发OSError而不是ValueError。

- bpo-21044: tarfile.open()现在可以处理具有整数'name'属性的fileobj。基于Antoine Pietri的补丁。

- bpo-21966: 当运行代码模块时，尊重-q命令行选项。

- bpo-19076: 不再向self.error()传递冗余的'file'参数。

- bpo-16382: 改进了warnings.warn()对于错误类别的异常消息。初始由Phil Elson提供补丁。

- bpo-21932: os.read() now uses a `Py_ssize_t()` type instead of `int` for the size to support reading more than 2 GB at once. On Windows, the size is truncated to INT_MAX. As any call to os.read(), the OS may read less bytes than the number of requested bytes.

- bpo-21942: 修复了Windows上pydoc服务器模式下查看源文件的问题。

- bpo-11259: asynchat.async_chat().set_terminator()现在如果接收到的字节数为负值时会引发ValueError。

- bpo-12523: asynchat.async_chat.push()现在如果没有接收到字节字符串时会引发TypeError。

- bpo-21707: 向ModuleFinder.replace_paths_in_code()添加了缺失的kwonlyargcount参数。

- bpo-20639: 调用Path.with_suffix('')允许再次移除后缀。由July Tikhonov提供补丁。

- bpo-21714: 禁止使用Path.with_name()构造无效路径。原始由Antony Lee提供补丁。

- bpo-15014: 向smtplib添加了'auth'方法以使实现认证机制更简单，并在login方法内部使用它。

- bpo-21151: 修复了当向SetValueEx传递 `None` 作为 `REG_BINARY` 值时winreg模块中的段错误。由John Ehresman提供补丁。

- bpo-21090: io.FileIO.readall()不再忽略I/O错误。在此之前，如果至少第一次C调用read()成功，它会忽略I/O错误。

- bpo-5800: wsgiref.headers.Headers 的 headers 参数现在是可选的。初始由 Pablo Torres Navarrete 和 SilentGhost 提供补丁。

- bpo-21781: ssl.RAND_add() 现在支持超过 2 GB 的字符串。

- bpo-21679: 防止在 open() 过程中进行多余的 fstat() 调用。由 Bohuslav Kabrda 提供补丁。

- bpo-21863: cProfile 现在除了显示 C 扩展函数的名称外，还会显示其模块名。

- bpo-11453: asyncore: 当未关闭的 file_wrapper 对象被销毁时发出 ResourceWarning。现在析构函数会在需要时关闭文件。close() 方法现在可以被调用两次：第二次调用不做任何操作。

- bpo-21858: 在 sqlite3 模块中更好地处理 Python 异常。

- bpo-21476: 确保 email.parser.BytesParser TextIOWrapper 在解析后被丢弃，这样输入文件不会意外关闭。

- bpo-20295: imghdr 现在可以识别 OpenEXR 格式的图像。

- bpo-21729: 在 dbm.dumb 模块中使用 "with" 语句确保文件关闭。补丁由 Claudiu Popa 提供。

- bpo-21491: socketserver: 修复子进程回收中的一个竞争条件。

- bpo-21719: 在 Windows 上为 os.stat_result 添加了 `st_file_attributes` 字段。

- bpo-21832: 要求命名元组的输入必须是确切的字符串。

- bpo-21722: distutils 的 "upload" 命令现在在上传失败时以非零返回码退出。由 Martin Dengler 提供补丁。

- bpo-21723: asyncio.Queue: 支持任何类型的数字（例如浮点数）作为最大大小。补丁由 Vajrasky Kok 编写。

- bpo-21711: 现在已从 site 模块中移除了对 "site-python" 目录的支持（已在 3.4 中弃用）。

- bpo-17552: 新的 socket.sendfile() 方法允许通过 UNIX 上的高性能 os.sendfile() 发送文件。由 Giampaolo Rodola' 提供补丁。

- bpo-18039: dbm.dump.open() 现在当标志值为 'n' 时总是创建一个新的数据库。由 Claudiu Popa 提供补丁。

- bpo-21326: 向asyncio.BaseEventLoop添加了一个新的is_closed()方法。如果事件循环已关闭，asyncio.BaseEventLoop的run_forever()和run_until_complete()方法现在会抛出异常。

- bpo-21766: 通过在检查路径是否为CGI脚本之前对路径进行URL解码，防止了CGIHTTPServer中的安全漏洞。

- bpo-21310: 修复了在open()失败时可能发生的资源泄漏问题。

- bpo-21256: 在模拟函数调用中，关键字参数的打印输出现在按确定性顺序进行。这将有助于编写更好的文档测试。

- bpo-21677: 修复了在io close()方法中链接非规范化异常的问题。

- bpo-11709: 修复了pydoc.help函数在sys.stdin不是有效文件时不失败的问题。

- bpo-21515: tempfile.TemporaryFile现在在可用时使用os.O_TMPFILE标志。

- bpo-13223: 修复了pydoc.writedoc，使得在示例代码中使用'self'的方法的HTML文档能够正确生成。

- bpo-21463: 在urllib.request中，修复了FTP缓存的修剪问题。

- bpo-21618: subprocess模块现在能够关闭调用进程继承的打开文件描述符，即使这些描述符已经高于POSIX资源限制所允许的值。在具有正常工作的/proc/self/fd或/dev/fd接口的系统上，现在忽略最大值并关闭所有文件描述符。

- bpo-20383: 引入了importlib.util.module_from_spec()作为创建新模块的首选方式。

- bpo-21552: 修复了在64位平台上，tkinter模块中过长的字符串长度可能导致整数溢出的问题。

- bpo-14315: zipfile模块现在会忽略中央目录中太短而无法解析的额外字段，而不是让struct.unpack错误冒泡，因为这种“坏数据”在现实世界的许多zip文件中出现，并被其他zip工具忽略。

- bpo-13742: 向heapq.merge()添加了“key”和“reverse”参数。（补丁的第一版由Simon Sapin贡献。）

- bpo-21402: 当未设置默认根窗口时，tkinter.ttk现在可以正常工作。

- bpo-3015: _tkinter.create() now creates tkapp object with wantobject=1 by default.

- bpo-10203: sqlite3.Row 现在真正支持序列协议，特别是它支持 reverse() 和负索引。原始补丁由 Claudiu Popa 提供。

- bpo-18807: 如果为 venv 指定了复制（无符号链接），则现在通过复制而非符号链接创建 python 解释器别名（python, python3）。

- bpo-20197: 在 imghdr 模块中添加了对 WebP 图像类型的支持。由 Fabrice Aneche 和 Claudiu Popa 提供补丁。

- bpo-21513: 加速了 IP 地址（IPv4Address, IPv6Address）的一些属性，如 .is_private 或 .is_multicast。

- bpo-21137: 通过显示“锁定”或“未锁定”状态改进了 threading.Lock() 及其变体的 repr。补丁由 Berker Peksag 提供。

- bpo-21538: plistlib 模块现在支持在引用或偏移大小不是二的幂时加载二进制 plist 文件。

- bpo-21455: 为 socket.listen() 添加了一个默认的 backlog。

- bpo-21525: 大多数接受元组的 Tkinter 方法现在也接受列表。

- bpo-22166: 在新内部 _codecs._forget_codec 辅助函数的帮助下，test_codecs 现在清除编码缓存以避免出现引用泄露。

- bpo-22236: Tkinter 测试现在不再重用默认的根窗口。为每个测试类创建新的根窗口。

- bpo-10744: 修复具有非平凡形状的 ctypes 对象上的 PEP 3118 格式字符串。

- bpo-20826: 优化 ipaddress.collapse_addresses()。

- bpo-21487: 优化 ipaddress.summarize_address_range() 和 ipaddress.{IPv4Network,IPv6Network}.subnets()。

- bpo-21486: 优化 ipaddress.IPv4Network 和 ipaddress.IPv6Network 中网络掩码的解析。

- bpo-13916: 禁止了非 UTF-* 编码的 surrogatepass 错误处理器。

- bpo-20998: 修复了忽略大小写的重复单字符模式的 re.fullmatch()。原始由 Matthew Barnett 提供补丁。

- bpo-21075: 如果指定了二进制模式，fileinput.FileInput 现在可以从标准流中读取字节。由 Sam Kimbrel 提供补丁。

- bpo-19775: 向 pathlib Path 对象添加 samefile() 方法。初始由 Vajrasky Kok 提供补丁。

- bpo-21226: 在 PyImport_ExecCodeModuleObject（及其相关函数）中正确设置模块。

- bpo-21398: 修复 pydoc 分页器中的一个 unicode 错误，当文档包含无法编码为标准输出编码的字符时。

- bpo-16531: ipaddress.IPv4Network 和 ipaddress.IPv6Network 现在接受一个（地址，网络掩码）元组参数，以便从现有地址轻松构建网络对象。

- bpo-21156: importlib.abc.InspectLoader.source_to_code() 现在是一个静态方法。

- bpo-21424: 简化和优化了 heapq.nlargest() 和 nsmallest()，以减少元组比较的次数。

- bpo-21396: 修复 TextIOWrapper(..., write_through=True) 不强制底层二进制流 flush() 的问题。由 akira 提供补丁。

- bpo-18314: 在 Windows 上，Unlink 现在可以移除 junctions。由 Kim Gräsman 提供补丁。

- bpo-21088: 修复 curses.window.addch() 在 3.4.0 版本中的回归问题。在迁移到 Argument Clinic 时，前两个参数被反转了。

- bpo-21407: _decimal: 模块现在支持函数签名。

- bpo-10650: 从 Python 版本的 Decimal.quantize() 方法中移除了非标准的 'watchexp' 参数。它从未在 C 版本中出现过。

- bpo-21469: 通过检查确保 robots.txt 已被读取或不存在，在 can_fetch() 返回 True 之前，减少了 robotparser 中误报的风险。

- bpo-19414: 让 OrderedDict 将被删除的链接标记为不可用。如果在迭代过程中链接被删除，这会提前失败。

- bpo-21421: 向 MappingViews ABC 添加 __slots__。由 Josh Rosenberg 提供补丁。

- bpo-21101: 在 collections.Counter() 的 C 加速代码中消除双重哈希。

- bpo-21321: itertools.islice() 现在在切片耗尽时会释放对源迭代器的引用。由 Anton Afanasyev 提供补丁。

- bpo-21057: TextIOWrapper 现在允许底层的二进制流的 read() 或 read1() 方法返回任意的 bytes-like 对象（如 memoryview）。由 Nikolaus Rath 提供补丁。

- bpo-20951: 在非阻塞套接字上，如果操作会阻塞，SSLSocket.send() 现在会引发 SSLWantReadError 或 SSLWantWriteError。之前，它会返回 0。由 Nikolaus Rath 提供补丁。

- bpo-13248: 移除了之前弃用的 asyncore.dispatcher __getattr__ 廉价继承 hack。

- bpo-9815: assertRaises 现在尝试清除异常回溯中对局部变量的引用。

- bpo-19940: ssl.cert_time_to_seconds() 现在将给定的时间字符串解释为 UTC 时区（如 RFC 5280 所指定），而不是本地时区。

- bpo-13204: 调用 sys.flags.__new__ 会崩溃解释器，现在它会引发 TypeError。

- bpo-19385: 对已关闭的 dbm.dumb 数据库的操作现在总是引发相同的异常。

- bpo-21207: 检测 os.urandom 缓存的 fd 是否被关闭或替换，并重新打开它。

- bpo-21291: subprocess 的 Popen.wait() 现在是线程安全的，因此多个线程可以同时调用 Popen 实例的 wait() 或 poll() 而不会丢失 Popen.returncode 值。

- bpo-21127: Path 对象现在可以从 str 子类实例（如 `numpy.str_`）实例化。

- bpo-15002: urllib.response 对象使用 _TemporaryFileWrapper（和 _TemporaryFileCloser）设施。提供了一种更好的处理文件描述符关闭的方法。由 Christian Theune 提供补丁。

- bpo-12220: mindom 现在会引发一个自定义的 ValueError，指示它不支持 URI 中的空格，而不是让 'split' ValueError 冒泡。

- bpo-21068: ssl.PROTOCOL* 常量现在是枚举成员。

- bpo-21276: posixmodule: 不要在 KFreeBSD 和 Hurd 上定义 USE_XATTRS。

- bpo-21262: Mock 的新方法 assert_not_called。如果 mock 被调用过，它会引发 AssertionError。

- bpo-21238: New keyword argument `unsafe` to Mock. It raises `AttributeError` incase of an attribute startswith assert or assret.

- bpo-20896: ssl.get_server_certificate() 现在使用 PROTOCOL_SSLv23，而不是 PROTOCOL_SSLv3，以获得最大的兼容性。

- bpo-21239: 当同一个名字被多次 patch 时，patch.stopall() 没有确定性地工作。

- bpo-21203: 更新了 fileConfig 和 dictConfig 以消除不一致。感谢 Jure Koren 的补丁。

- bpo-21222: 现在，将 name 关键字参数传递给 mock.create_autospec 可以工作了。

- bpo-21197: 在 64 位非 OS X POSIX 上，venvs 中添加了 lib64 -> lib 的符号链接。

- bpo-17498: 一些 SMTP 服务器在特定错误后断开连接，违反了严格的 RFC 一致性。smtplib 现在返回错误代码，并在发出下一个命令时延迟引发 SMTPServerDisconnected 错误，而不是在我们发出后续 RSET 时丢失错误代码。

- bpo-17826: 现在，在由 create_autospec 创建的 mock 函数上设置可迭代的 side_effect 可以工作了。由 Kushal Das 提供的补丁。

- bpo-7776: 修复了在使用 http.client.HTTPConnection.set_tunnel() 时的 `Host:` 标头和重新连接。由 Nikolaus Rath 提供的补丁。

- bpo-20968: unittest.mock.MagicMock 现在支持除法。由 Johannes Baiter 提供的补丁。

- bpo-21529: Fix arbitrary memory access in JSONDecoder.raw_decode with a negative second parameter. Bug reported by Guido Vranken. (See also: CVE-2014-4616)

- bpo-21169: getpass 现在通过使用 replace 错误处理程序重新编码，处理输入流编码无法编码的非 ASCII 字符。

- bpo-21171: 修复了 rot13 编解码器未记录的过滤器 API。由 Berker Peksag 提供的补丁。

- bpo-20539: 改进了 math.factorial 对于大正数输入的错误消息，并更改了大负数输入的异常类型（OverflowError -> ValueError）。

- bpo-21172: isinstance 检查从 dict 放宽到 collections.Mapping。

- bpo-21155: asyncio.EventLoop.create_unix_server() 现在如果同时指定了 path 和 sock 会抛出 ValueError。

- bpo-21136: 避免了由于幂和其他操作导致的 Fractions 不必要的规范化。由 Raymond Hettinger 提供补丁。

- bpo-17621: 引入了 importlib.util.LazyLoader。

- bpo-21076: signal 模块的常量被转换为枚举。由 Giampaolo Rodola' 提供补丁。

- bpo-20636: 改进了 Tkinter 小部件的 repr。

- bpo-19505: OrderedDict 的 items、keys 和 values 视图现在支持使用 reversed() 进行反向迭代。

- bpo-21149: 改进了解释器关闭期间日志清理的线程安全性。感谢 Devin Jeanpierre 提供的补丁。

- bpo-21058: 修复了 `tempfile.NamedTemporaryFile()` 中的文件描述符泄漏问题，如果 `io.open()` 失败则关闭文件描述符。

- bpo-21200: 当 __spec__ 缺失时，从 pkgutil.get_loader() 返回 None。

- bpo-21013: 增强 ssl.create_default_context() 用于服务器端套接字时的默认安全性。

- bpo-20145: `assertRaisesRegex` and `assertWarnsRegex` now raise a TypeError if the second argument is not a string or compiled regex.

- bpo-20633: 用绝对导入替换相对导入。

- bpo-20980: 使用 ThreadPool 时停止包装异常。

- bpo-21082: 在 os.makedirs 中，不设置进程级的 umask。注意这改变了 makedirs 当 exist_ok=True 时的行为。

- bpo-20990: 修复了 pyflakes 为 multiprocessing 发现的问题。

- bpo-21015: SSL 上下文现在会在 OpenSSL 1.0.2 及更高版本上自动为 ECDH 密钥交换选择椭圆曲线，否则默认为 "prime256v1"。

- bpo-21000: 改进了 json.tool 的命令行界面。

- bpo-20995: 增强了 ssl 模块使用的默认密码，以实现更好的安全性并优先考虑完美前向保密。

- bpo-20884: 不假设 __file__ 在 importlib.__init__ 上有定义。

- bpo-21499: 在几个 test_importlib.test_api 测试中忽略 __builtins__。

- bpo-20627: xmlrpc.client.ServerProxy 现在是一个上下文管理器。

- bpo-19165: formatter 模块现在引发 DeprecationWarning 而不是 PendingDeprecationWarning。

- bpo-13936: 移除了 datetime.time 实例在布尔上下文中被视为假的能力。

- bpo-18931: selectors 模块现在支持 Solaris 上的 /dev/poll。补丁由 Giampaolo Rodola' 提供。

- bpo-19977: 当 `LC_TYPE` 语言环境是 POSIX 语言环境（`C` 语言环境）时，`sys.stdin` 和 `sys.stdout` 现在使用 `surrogateescape` 错误处理程序，而不是 `strict` 错误处理程序。

- bpo-20574: 为 cp65001 代码（Windows 代码页 65001，Microsoft UTF-8）实现增量解码器。

- bpo-20879: 延迟初始化 base64 模块中 base32、ascii85 和 base85 编解码器的编码和解码表，并延迟初始化 urllib.parse 模块的 unquote_to_bytes() 表，以避免在这些模块未使用时浪费内存。

- bpo-19157: 在 ipaddress 中为 IPv6 包括广播地址到可用主机中。

- bpo-11599: 当外部命令（例如编译器）失败时，如果设置了环境变量 DISTUTILS_DEBUG，distutils 现在会打印出整个命令行（而不仅仅是命令名称）。

- bpo-4931: distutils 不应再产生无帮助的“error: None”消息。distutils.util.grok_environment_error 被保留但文档标记为弃用。

- bpo-20875: 防止可能的 gzip "'read' is not defined" NameError。由 Claudiu Popa 提供补丁。

- bpo-11558: `email.message.Message.attach` 现在在 `is_multipart` 为 False 的消息上调用 `attach` 时返回更有用的错误消息。

- bpo-20283: RE 模式方法现在接受字符串关键字参数如文档所述。模式和源关键字参数作为弃用的别名保留。

- bpo-20778: 修复 modulefinder 以与仅字节码的模块一起工作。

- bpo-20791: copy.copy() 现在当输入是 bytes 对象时不再制作副本。初始由 Peter Otten 提供补丁。

- bpo-19748: 在 AIX 上，time.mktime() 现在对于超出范围 [1902; 2037] 的年份会引发 OverflowError。

- bpo-19573: inspect.signature: 使用枚举作为参数种类常量。

- bpo-20726: inspect.signature: 使 Signature 和 Parameter 可 pickle。

- bpo-17373: 添加 inspect.Signature.from_callable 方法。

- bpo-20378: 改进 inspect.Signature 和 inspect.Parameter 的 repr。

- bpo-20816: 修复 inspect.getcallargs() 以对缺少的关键字参数引发正确的 TypeError。补丁由 Jeremiah Lowin 提供。

- bpo-20817: 修复 inspect.getcallargs() 以在缺少超过 3 个参数时正确失败。由 Jeremiah Lowin 提供补丁。

- bpo-6676: 确保在尝试为每个 pyexpat xmlparser 实例解析多个 XML 文档时引发有意义的异常。（原始由 Hirokazu Yamamoto 和 Amaury Forgeot d'Arc 提供补丁，建议措辞由 David Gutteridge 提出）

- bpo-21117: 修复 inspect.signature 以更好地支持 functools.partial。由于 functools.partial 实现的特殊性，作为关键字参数传递的位置或关键字参数变为仅关键字。

- bpo-20334: inspect.Signature 和 inspect.Parameter 现在可哈希。感谢 Antony Lee 的错误报告和建议。

- bpo-15916: 如果 doctest.DocTestSuite 没有找到测试，则返回一个空的 unittest.TestSuite 而不是引发 ValueError。

- bpo-21209: 修复 asyncio.tasks.CoroWrapper 以解决在 CPython 3.4.1 之前的 yield-from 实现中的一个错误。

- asyncio: 向 CoroWrapper 添加 gi_{frame,running,code} 属性（上游 bpo-163）。

- bpo-21311: 避免在 _osx_support 中因非标准编译器配置而引发异常。由 John Szakmeister 提供补丁。

- bpo-11571: 确保在 OS X 上启动时 turtle 窗口成为最顶层窗口。

- bpo-21801: 验证 __signature__ 是否为 None 或 Signature 的实例。

- bpo-21923: 防止由于_config_vars可能未初始化而在distutils.sysconfig.customize_compiler中引发AttributeError。

- bpo-21323: 修复http.server再次处理CGI子目录中的脚本的问题，此功能因修复安全问题 bpo-19435 而损坏。由Zach Byrne提供补丁。

- bpo-22733: 修复ffi_prep_args在64位Windows上未能正确零扩展参数值的问题。

- bpo-23302: 在建立HTTPConnection时默认设置TCP_NODELAY=1。移除了对硬编码MSS的使用，因为这是一个在Nagle禁用后不再需要的优化。

### IDLE

- bpo-20577: FormatParagraph扩展的最大行长配置已从Idle偏好对话框的General标签页移动到Config Extensions对话框的FormatParagraph标签页。由Tal Einat提供补丁。

- bpo-16893: 更新Idle文档章节以匹配当前Idle并添加新信息。

- bpo-3068: 在Options菜单中添加Idle扩展配置对话框。更改将写入HOME/.idlerc/config-extensions.cfg。原始由Tal Einat提供补丁。

- bpo-16233: 模块浏览器（文件 : 类浏览器，Alt+C）需要一个有文件名的编辑器窗口。当从shell、输出窗口或'Untitled'编辑器请求类浏览器时，Idle不再显示错误框。现在会弹出一个打开模块框（Alt+M）。如果输入了一个有效的名称并打开了一个模块，相应的浏览器也会被打开。

- bpo-4832: 保存为Python文件时自动为你输入的名称添加.py扩展名（即使你的系统不显示它）。某些系统在类型为文本文件时会自动添加.txt。

- bpo-21986: 代码对象通常不被pickle模块pickle。为了匹配这一点，当在Idle下运行时，它们不再被pickle。

- bpo-17390: 调整编辑器窗口标题；移除'Python'，将版本号移至末尾。

- bpo-14105: 在插入或删除行时，Idle调试器的断点不再消失。

- bpo-17172: Turtledemo 现在可以从 Idle 运行。目前，该入口位于帮助菜单上，但可能会移至运行菜单。由 Ramchandra Apt 和 Lita Cho 提供的补丁。

- bpo-21765: 为 HyperParser 添加对非 ASCII 标识符的支持。

- bpo-21940: 为 WidgetRedirector 添加单元测试。初始由 Saimadhav Heblikar 提供补丁。

- bpo-18592: 为 SearchDialogBase 添加单元测试。由 Phil Webster 提供的补丁。

- bpo-21694: 为 ParenMatch 添加单元测试。由 Saimadhav Heblikar 提供的补丁。

- bpo-21686: 为 HyperParser 添加单元测试。原始由 Saimadhav Heblikar 提供补丁。

- bpo-12387: 为 Idle 添加默认 Windows 键绑定的大写(小写)版本，以便 Caps Lock 不会禁用它们。由 Roger Serwy 提供的补丁。

- bpo-21695: 在搜索仍在进行时关闭“在文件中查找”输出窗口不再关闭 Idle。

- bpo-18910: 为 textView 添加单元测试。由 Phil Webster 提供的补丁。

- bpo-18292: 为 AutoExpand 添加单元测试。由 Saihadhav Heblikar 提供的补丁。

- bpo-18409: 为 AutoComplete 添加单元测试。由 Phil Webster 提供的补丁。

- bpo-21477: htest.py - 改进框架，完成测试集。由 Saimadhav Heblikar 提供的补丁

- bpo-18104: 添加 idlelib/idle_test/htest.py，包含几个示例测试，开始整合和改进 Idle 的人工验证测试。根据需要更改其他文件以与 htest 协同工作。将模块作为 __main__ 运行会运行所有测试。

- bpo-21139: 将默认段落宽度更改为 72，这是 PEP 8 的推荐。

- bpo-21284: 用户更改重新格式化宽度后，段落重新格式化测试通过。

- bpo-17654: 确保在 OS X 上为非框架构建和所有 Tk 变体正确自定义 IDLE 菜单。

- bpo-23180: 将 IDLE 的“Windows”菜单项重命名为“Window”。由 Al Sweigart 提供的补丁。

### 构建

- bpo-15506: 在配置脚本中使用标准的 PKG_PROG_PKG_CONFIG autoconf 宏。

- bpo-22935: 如果 openssl 不支持 SSL 3，也允许编译 ssl 模块。

- bpo-22592: 放弃对使用 Borland C 编译器构建 Python 的支持。distutils 模块仍支持使用该编译器构建扩展。

- bpo-22591: 放弃对 MS-DOS 的支持，特别是 DJGPP 编译器（MS-DOS 版的 GCC）。

- bpo-16537: 在 setup.py 中检查 self.extensions 是否为空。由 Jonathan Hosmer 提供补丁。

- bpo-22359: 移除递归 make 的错误使用。由 Jonas Wagner 提供补丁。

- bpo-21958: 当使用 Visual Studio 2013 及以上版本构建时，定义 HAVE_ROUND。由 Zachary Turner 提供补丁。

- bpo-18093: 嵌入 CPython 运行时的程序现在放在单独的 "Programs" 目录中，而不是保留在 Modules 目录中。

- bpo-15759: 在 Doc/ 中的 "make suspicious"、"make linkcheck" 和 "make doctest" 现在仅在失败时显示特殊消息。

- bpo-21141: Windows 构建过程不再尝试查找 Perl，而是依赖已配置并准备好构建的 OpenSSL 源代码。`PCbuild\build_ssl.py` 脚本已被重写并重命名为 `PCbuild\prepare_ssl.py`，并负责为 32 位和 64 位平台配置 OpenSSL 源代码。从 svn.python.org 获取的 OpenSSL 源代码将始终预先配置并准备好构建。

- bpo-21037: 添加构建选项以启用 AddressSanitizer 支持。

- bpo-19962: Windows 构建过程现在在源代码树的根目录中创建 "python.bat"，它将所有参数传递给最近构建的解释器。

- bpo-21285: 重构并修复 curses 配置检查，始终在 ncursesw 目录中搜索。

- bpo-15234: 对于 BerkeleyDB 和 Sqlite，仅当未搜索到库和包含目录时才添加它们。这避免了显式的运行时库依赖。

- bpo-17861: Tools/scripts/generate_opcode_h.py 如果 Lib/opcode.py 有任何更改，会自动从 Lib/opcode.py 重新生成 Include/opcode.h。

- bpo-20644: OS X 安装程序构建支持3.4.1中文档构建的更改：假设外部提供的sphinx-build在/usr/bin中可用。

- bpo-20022: 在OS X构建中消除对已弃用的bundlebuilder的使用。

- bpo-15968: 将Tcl、Tk和Tix构建集成到Windows构建解决方案中。

- bpo-17095: 修复Modules/Setup shared 支持。

- bpo-21811: 预期修复以支持OS X版本 > 10.9。

- bpo-21166: 防止python --generate-posix-vars在pybuilddir.txt构建目标中可能出现的段错误和其他随机故障。

- bpo-18096: 修复python-config返回的库顺序。

- bpo-17219: 为Python扩展跨构建添加库构建目录。

- bpo-22919: Windows构建更新以支持VC 14.0（Visual Studio 2015），这将用于官方发布。

- bpo-21236: 使用cabinet.lib而非fci.lib构建_msi.pyd。

- bpo-17128: 为OS X 10.5+安装程序使用OpenSSL的私有版本。

### C API

- bpo-14203: 移除了对PyBuffer_FillInfo()、bytearray_getbuffer()、bytesiobuf_getbuffer()和array_buffer_getbuf()中view==NULL的过时支持。所有函数在那种情况下现在都会引发BufferError。

- bpo-22445: PyBuffer_IsContiguous()现在实现了精确的连续性测试，与NumPy的NPY_RELAXED_STRIDES_CHECKING编译标志兼容。之前该函数在角落案例中报告了假阴性。

- bpo-22079: PyType_Ready()现在检查静态分配的类型没有动态分配的基类。

- bpo-22453: 移除了未记录的宏PyObject_REPR()。

- bpo-18395: 将 `_Py_char2wchar()` 重命名为 `Py_DecodeLocale()`，将``_Py_wchar2char()`` 重命名为 `Py_EncodeLocale()`，并记录这些函数。

- bpo-21233: 添加新的C函数：PyMem_RawCalloc()、PyMem_Calloc()、PyObject_Calloc()、_PyObject_GC_Calloc()。bytes(int)现在对于大对象使用 `calloc()` 而非 `malloc()`，这样更快且使用更少的内存。

- bpo-20942: PyImport_ImportFrozenModuleObject() 不再设置 __file__ 以匹配 importlib 的行为；这影响了 _frozen_importlib 以及任何使用 imp.init_frozen() 加载的模块。

### 文档

- bpo-19548: 更新 codecs 模块文档，以更好地涵盖文本编码和其他编解码器之间的区别，以及其他一些澄清。由 Martin Panter 提供补丁。

- bpo-22394: Doc/Makefile 现在支持 `make venv PYTHON=../python` 来创建一个用于生成文档的 venv，例如，`make html PYTHON=venv/bin/python3`。

- bpo-21514: json 模块的文档现在引用新的 JSON RFC 7159 而不是过时的 RFC 4627。

- bpo-21777: bytes 和 bytearray 的二进制序列方法现在被明确文档化，而不是假设用户能够从相应的 str 方法的行为中推导出预期行为。

- bpo-6916: 取消文档中已弃用的 asynchat.fifo 类的记录。

- bpo-17386: 扩展了 `Doc/make.bat` 脚本的功能，使其更加接近 `Doc/Makefile`。

- bpo-21312: 更新 thread_foobar.h 模板文件，包括更新的线程 API。由 Jack McCracken 提供补丁。

- bpo-21043: 移除对特定 CA 组织的推荐，并提及加载操作系统证书的能力。

- bpo-20765: 添加 PurePath.with_name() 和 PurePath.with_suffix() 的缺失文档。

- bpo-19407: 基于 Python Packaging Authority 工具的新包安装和分发指南。现有的指南作为遗留链接保留在 distutils 文档中，因为它们仍然包含一些工具开发者所需的参考材料，这些材料在其他地方没有记录。

- bpo-19697: 文档化 __main__.__spec__ 为 None 的情况。

### 测试

- bpo-18982: 为 calendar 模块的 CLI 添加测试。

- bpo-19548: 向 test_codecs 添加了一些额外的检查，以确保更新后的文档中的陈述保持准确。由 Martin Panter 提供补丁。

- bpo-22838: 所有的test_re测试现在都可以通过unittest测试发现来运行。

- bpo-22173: 更新lib2to3测试以使用unittest测试发现。

- bpo-16000: 将test_curses转换为使用unittest。

- bpo-21456: 如果_ssl模块不存在，则跳过test_urllib2net.py中的两个测试。由Remi Pointel提供补丁。

- bpo-20746: 修复test_pdb以在refleak模式(-R)下运行。由Xavier de Gaye提供补丁。

- bpo-22060: test_ctypes已经进行了一定程度的清理和简化；现在它使用unittest测试发现来找到它的测试。

- bpo-22104: regrtest.py不再持有对从没有定义test_main()的测试模块加载的测试套件的引用。

- bpo-22111: 在test_imaplib中进行了一些清理。由Milan Oberkirch提供补丁。

- bpo-22002: 向test.support添加了 `load_package_tests` 函数，并用它在test_asyncio、test_email、test_importlib、test_json和test_tools中实现/增强测试发现。

- bpo-21976: 修复test_ssl以接受LibreSSL版本字符串。感谢William Orr。

- bpo-21918: 将test_tools从一个模块转换为一个包，包含每个测试脚本的单独测试文件。

- bpo-9554: 在test_argparse中使用现代的unittest特性。由Denver Coneybeare和Radu Voicilas提供初始补丁。

- bpo-20155: 更改test_httpservers中失败测试的HTTP方法名称，以便数据包过滤软件（特别是Windows基础过滤引擎）不会干扰测试预期的事务语义。

- bpo-19493: 重构了ctypes测试包，明确跳过测试而不是静默跳过。

- bpo-18492: 当测试不是由regrtest.py运行时，现在允许所有资源。

- bpo-21634: Fix pystone micro-benchmark: use floor division instead of true division to benchmark integers instead of floating point numbers. Set pystone version to 1.2. Patch written by Lennart Regebro.

- bpo-21605: 为Tkinter图像添加了测试。

- bpo-21493: 为ntpath.expanduser()添加了测试。原始由Claudiu Popa提供补丁。

- bpo-19925: 为spwd模块添加了测试。原始由Vajrasky Kok提供补丁。

- bpo-21522: 为Listbox.itemconfigure()、PanedWindow.paneconfigure()和Menu.entryconfigure()添加了Tkinter测试。

- bpo-17756: 修复从安装位置运行时的test_code测试。

- bpo-17752: 修复从安装位置运行时的distutils测试。

- bpo-18604: 合并了对GUI可用性的检查。现在所有平台在请求GUI资源时至少会检查是否可以实例化Tk。

- bpo-21275: 修复 KFreeBSD 上的一个套接字测试。

- bpo-21223: 当某些扩展作为内置模块编译时传入 test_site/test_startup_imports。

- bpo-20635: 添加了针对 Tk geometry 管理器的测试。

- 增加freeze包的测试用例。

- bpo-20743: 修复了 test_tcl 中的一个引用泄漏。

- bpo-21097: 将 test_namespace_pkgs 移至 test_importlib.

- bpo-21503: 在 test_importlib 中一致地使用 test_both()。

- bpo-20939: 避免由于新增从 http://www.python.org/ 到 https://www.python.org 的重定向导致的网络测试失败：改用 http://www.example.com。

- bpo-20668: asyncio 测试不再依赖 tests.txt 文件。 （由 Vajrasky Kok 编写补丁）

- bpo-21093: 在 OS X 上防止当 libz 的副本存在于 $HOME/lib 或 /usr/local/lib 中时 ctypes test_macholib 的失败。

- bpo-22770: 在 OS X 上防止当运行图形用户界面测试时的某些 Tk 段错误。

- bpo-23211: 在某些 OS X 10.6 系统上绕过 test_logging 失败

- bpo-23345: 防止较大 OpenSSL 补丁级别值 (如 0.9.8zc) 导致的 test_ssl 失败。

### 工具/示例

- bpo-22314: 现在当设置了 LINES 环境变量时 pydoc 将会可用。

- bpo-22615: Argument Clinic 现在支持 int 转换器的 "type" 参数。 这允许将 int 转换器用于枚举和 typedef。

- bpo-20076: makelocalealias.py 脚本将不再忽略 UTF-8 映射。

- bpo-20079: makelocalealias.py 脚本现在能够解析 glibc 源代码中的 SUPPORTED 文件并支持针对源代码路径的命令行选项。

- bpo-22201: zipfile 模块的命令行界面现在能正确地提取带有目录项的 ZIP 文件。 由 Ryan Wilson 编写补丁。

- bpo-22120: 对于使用无符号整数返回转换器的函数，现在 Argument Clinic 会在所生成的代码中为与 -1 的比较生成到该类型的强制转换。 （这将抑制一个编译警告。）

- bpo-18974: Tools/scripts/diff.py 现在将使用 argparse 而不是 optparse。

- bpo-21906: 让 Tools/scripts/md5sum.py 适用于 Python 3。 由 Zachary Ware 编写补丁。

- bpo-21629: 修复 Argument Clinic 的 "--converters" 特性。

- 为2to3添加 `yield from` 的支持。

- 为 2to3 添加对 PEP 465 矩阵乘法运算符的支持。

- bpo-16047: 修正冻结中的模块异常列表和 __file__ 处理。 由 Meador Inge 编写补丁。

- bpo-11824: 考虑冻结 ABI 标签。 由 Meador Inge 编写补丁。

- bpo-20535: PYTHONWARNING 不再影响 run_tests.py 脚本。 由 Arfrever Frehtes Taifersar Arahesis 编写补丁。

### Windows

- bpo-23260: 更新 Windows 安装器

- 捆绑的 Tcl/Tk 版本已被更新至 8.6.3。 这项改变最显示的结果是当在 Windows Vista 或更新版本上运行时增加了新的原生文件对话框。 请参阅 Tcl/Tk 的 TIP 432 了解详情。 此外，该 Tcl/Tk 版本还包括了对 Windows 10 的支持。

- bpo-17896: 现在 Windows 构建脚本将预期外部库源代码位于 `PCbuild\..\externals` 而不是 `PCbuild\..\..`。

- bpo-17717: 现在 Windows 构建脚本将使用来自 svn.python.org的 NASM 副本来构建 OpenSSL。

- bpo-21907: 改进了供构建 Python 的处理脚本。

- bpo-22644: 捆绑的 OpenSSL 版本已更新到 1.0.1j。

- bpo-10747: 在 Windows 开始菜单中使用带版本号的标签。 由 Olive Kilburn 编写补丁。

- bpo-22980: 带有版本号和平台标记的 .pyd 文件 (例如 ".cp35-win32.pyd") 现在将优先于不带标记的文件被加载。

（有关旧版本的信息，请参阅HISTORY文件。)