更新日志¶
Python 3.11.18 final¶
Release date: 2026-10-25
安全性¶
gh-160300: Fix
http.cookiejar.DefaultCookiePolicyaccepting and returning cookies with a negativeVersionattribute without checking their domain against the request host. Such cookies are now ignored.CVE-2026-114583, gh-160097:
tarfile.tar_filter()now rejects link members whose path resolves to the destination directory itself, astarfile.data_filter()already did.CVE-2026-115557, gh-160040:
sslnow rejects TLS certificate chains that contain any of a set of compromised eMudhra intermediate CA keys. This is an extraordinary measure and a last line of defense: removing trust is primarily the job of the platform root store, and the built-in denylist only blocks connections while that update has not yet reached the OS, a container image, or a bundled trust store in various Python packages. Entries are added to the denylist only under a very high threshold. The denylist matches on the public key (the SHA-256 digest of the RFC 5280SubjectPublicKeyInfo), so it also covers the cross-signed certificates that reuse one of the distrusted keys.gh-159428: 在 Windows 上
mimetypes默认不再读取在mimetypes.knownfiles中列出的文件,而仅使用注册表。
库¶
Python 3.11.17 正式版¶
发布日期:2026-10-01
安全性¶
gh-158446: 修复了在以接近平台
INT_MAX的精度格式化float或complex时可能发生的崩溃或不正确输出问题。 对于任何该数量级的精度PyOS_double_to_string()现在会引发ValueError,无论呈现类型或值是什么,这与格式字符串解析器对高于INT_MAX的精度所做的处理一致。gh-156793:
asyncio: 当传入了将 check_hostname 设为True的ssl.SSLContext时,loop.start_tls和loop.create_connection现在会验证 server_hostname 参数,如果缺少 server_hostname 则会发出DeprecationWarning。 (在 Python 3.13 及之后版本中这将引发ValueError。)gh-156793:
ssl.SSLContext.wrap_bio()现在会类似于ssl.SSLContext.wrap_socket()那样验证其 server_side、 server_hostname 和 session 参数,但出于向后兼容性的原因会发出DeprecationWarning而不是引发ValueError。特别地,当启用了
check_hostname的上下文未向wrap_bio()传入 server_hostname 时,现在会发出DeprecationWarning以指明未检查主机名。 (在 Python 3.13 及之后版本中,这将引发ValueError。)gh-157265: 在
tarfile中,将提取链接操作回退为提取归档中的成员时,将在调用附带替换为链接的被提取成员名称时函数返回 None 时跳过成员。gh-157190: 修复了
tarfile的data和tar提取过滤器中的一个漏洞,在该漏洞中,使用指向符号链接的硬链接精心构造的归档文件可能会更改目标目录之外文件的权限和修改时间,并在提取出的目录树内部暴露其内容。 这解决了 CVE 2026-82049。gh-156002: 限制
zipfile对以 bzip2, LZMA 或 Zstandard 压缩的成员的每次数据读取量,与现有的压缩限制相匹配。 在此之前一个小的归档成员即使小块地读取也有可能扩张至无限数据量。gh-155999: 修复了
tarfile的tar和data提取过滤器对于名称先离开目标目录再返回其中的成员(例如../evil/../dest/sub/file)会在目标目录之外创建目录的问题。 包含性检查使用了已解析的路径,但中间目录却是根据所给定的名称创建的。gh-156293: Fix a crash in
sslwhen ansni_callbackswitches a connection to anotherSSLContextand the context that carries the callback is no longer referenced by the application. Servers that keep theirsni_callbackcontext alive (the usual case when it wraps the listening socket or is stored on the server object) were not affected. This addresses:cve:`2026-19445<https://www.cve.org/CVERecord?id=:cve:2026-19445>`_.gh-155292: 将
stringprep模块和encodings.idna编解码器修改为不在 RFC 3454 已定义内容之上额外考虑 Unicode 码点属性。gh-155694: Fix
:cve:`2026-15806<https://www.cve.org/CVERecord?id=:cve:2026-15806>`_ by scopingHTTPPasswordMgrcredentials to the URL scheme, preventing credentials stored for an HTTPS URL from being used for a matching HTTP URL, while URIs without a scheme continue to match any scheme.
库¶
gh-156002:
zipfile再次支持通过给私有_get_decompressor()打猴子补丁所安装的第三方解压缩器来读取成员,该解压缩器返回一个仅实现了来自 Python 3.3 的旧版 BZ2Decompressor API 的对象。 请注意,不具备needs_input和双参数decompress()的解压缩器容易受到 CVE 2026-15310 的攻击。gh-156353: 修复了在 delimiters 中使用空白字符时
configparser的解析问题。
构建¶
gh-155757: 为 WASI 构建设置传给 wasmtime 的
--argv0参数以便测试套件通过。 否则,为冻结模块计算出的标准库路径是不正确的。
Python 3.11.16 正式版¶
发布日期:2026-08-13
macOS¶
gh-137586: 在
webbrowser和turtledemo使用绝对路径唤起 osascript。
测试¶
gh-149776: 在 Linux 内核 7.1 或更新版本上修复 test_socket。 在不支持的情况下跳过 UDP Lite 测试。 由 Victor Stinner 编写补丁。.
安全性¶
gh-155558: Update bundled libexpat to version 2.8.3 for the fix to
:cve:`2026-72522<https://www.cve.org/CVERecord?id=:cve:2026-72522>`_.gh-153030: 修复
html.parser.HTMLParser中对很长的未终止结构(如标签或注释 )进行增量解析时存在的二次方级时间复杂度问题,该问题可能被利用来发起拒绝服务攻击。gh-152674:
xml.etree.ElementTree.Element的findall(),iterfind()和find()等方法在带有大量同标签节点的 XML 文档上使用 XPath 索引谓词 ([1],[last()],[last()-N]) 时可避免出现平方级复杂度问题。gh-151987: 现在
tarfile.TarFile.extract()方法将在从归档提取链接目标作为回退方案时应用给定的过滤器。gh-151544:
Modules/Setup.local不再被用作发现 Python 是否在源代码树中运行的指标,因为它有可能影响实际的安装。pybuilddir.txt现在是运行在源代码树中唯一指示器。gh-151558: 修复
tarfile的data和tar解压缩过滤器中特殊制作的归档可能创建指向目标目录以外的符号链接的安全漏洞。 这绕过了 CVE-2025-4330。gh-150599: 修复
bz2中当发生解压缩错误后重用bz2.BZ2Decompressor时可能的栈缓冲区溢出问题。 解压缩器在 libbz2 报告错误后将不可用。gh-150743:
http.client现在将其读取的分块响应尾部行数量限制为 100,并将其跳过的临时 (1xx) 响应数量限制为 100。 之前,恶意或损坏的服务器可能会无休止地流式发送尾部行或100 Continue响应,即使在使用了套接字超时的情况下也会导致客户端挂起。 由@YLChen-007通过 GHSA-w4q2-g22w-6fr4 报告。gh-149698: 将捆绑的 libexpat 更新至 version 2.8.1 以修复 CVE-2026-45186。
gh-87451:
ftplib模块中未写入文档的ftpcp函数默认不再信任源服务器响应PASV命令返回的 IPv4 地址值,完成了对 CVE-2021-4189 的修复。 与ftplib.FTP一样,可以通过将源ftplib.FTP实例上的trust_server_pasv_ipv4_address属性设置为True来重新启用先前的行为。 感谢 Aurascape AI 的 Qi Deng 报告此问题。gh-149486: 现在
tarfile.data_filter()会使用与写入磁盘的相同的正规化值来验证链接目标,当解析符号链接目录时将去除成员名称末尾的分隔符,并会拒绝将替换目标目录本身的链接成员。 这将关闭data提取过滤器的几个路径遍历绕过漏洞。gh-149079: 修复了
unicodedata.normalize()中潜在的拒绝服务漏洞。 Unicode 规范化的标准排序步骤此前使用二次时间的插入排序来对组合字符进行重新排序,这可能会被包含大量非标准顺序组合字符的精心构造的输入所利用。 现已针对长连续序列替换为线性时间的计数排序。gh-149018: 当 Python 编译附带 libExpat 2.8.0 或更新版本时改进
xml.parsers.expat和xml.etree.ElementTree对 XML 哈希洪水攻击的防护。gh-148808: 在将
nbytes形参用于asyncio.AbstractEventLoop.sock_recvfrom_into()时会添加缓冲区边界检测。 仅对 Windows 和asyncio.ProactorEventLoop有意义。gh-148395: 修复了当内存分配失败并引发
MemoryError时lzma.LZMADecompressor和bz2.BZ2Decompressor中的悬空输入指针问题,该问题可能会导致后续的decompress()调用通过指向已释放调用方缓冲区的过期指针进行读写。gh-148169:
webbrowser中的一个旁路允许以%action为前缀的 URL 通过横线前缀安全检查。gh-146581: 修正 Windows 上
shutil.unpack_archive()中有关 ZIP 文件的漏洞,如果归档中的补丁包含 Windows 驱动器前缀则该漏洞允许在目标树之外写入文件。 现在此类无效路径将被跳过。 名称中包含 ".." 的文件(如 "foo..bar")不再会被跳过。gh-146333: 修复
configparser.RawConfigParser选项解析正则表达式 (OPTCREandOPTCRE_NV) 中的二次方级回溯问题。 精心设计有大量空格符的配置行可能导致过量的 CPU 使用。gh-146211: 在 HTTPConnection.set_tunnel() 方法的隧道请求头中拒绝 CR/LF 字符。
gh-145986:
xml.parsers.expat: Fixed a crash caused by unbounded C recursion when converting deeply nested XML content models withElementDeclHandler(). This addresses:cve:`2026-4224<https://www.cve.org/CVERecord?id=:cve:2026-4224>`_.gh-145599: Reject control characters in
http.cookies.Morselupdate()andjs_output(). This addresses:cve:`2026-3644<https://www.cve.org/CVERecord?id=:cve:2026-3644>`_.gh-145506: 通过确保
SourcelessFileLoader在打开.pyc文件时使用io.open_code()修复 CVE-2026-2297 问题。gh-144370: 不允许在
wsgiref.handlers的状态中使用控制字符以防止 HTTP 标头注入。 由 Benedikt Johannes 编写补丁。gh-143930: 拒绝传给
webbrowser.open()的 URL 中带有开头横杠符。gh-143927: 在写入多行 configparser 值时将所有行结束符 (CR, CRLF 和 LF) 正规化为 LF+TAB。
库¶
gh-109638: 修复了
csv.Sniffer.sniff()对于包含大量引号字符的样本耗时呈指数级增长的问题。 现在还会在包含分隔符或换行符的字段中检测双引号字符。gh-98820: 修复了
csv.Sniffer.sniff()对于包含带引号字段的样本(特别是带引号字段的单列)耗时呈二次方增长的问题。gh-141707: 在解析 GNU 长名称或链接标头时不会将
tarfile.TarInfo类型从AREGTYPE改为DIRTYPE。gh-90949: 向 xmlparser 对象添加了
SetBillionLaughsAttackProtectionActivationThreshold()和SetBillionLaughsAttackProtectionMaximumAmplification()以微调针对 billion laughs 攻击的防护。 补丁由 Bénédikt Tran 提供。gh-100372:
ssl.SSLContext.load_verify_locations()在解析DER时不再错误地接受某些尾随数据的情况。
构建¶
gh-153438: 更新了 Windows 构建和安装程序工具链及文档,以使用
nuget.exe的当前下载 URL。
Python 3.11.15 正式版¶
发布日期:2026-03-03
安全性¶
gh-144125:
BytesGenerator现在将拒绝序列化(写入)不安全折叠或分隔的标头;参见verify_generated_headers。(由 Bas Bloemsaat 和 Petr Viktorin 在 gh-121650 中贡献。)gh-143935: 修复了使用现代邮件策略扁平化电子邮件消息时注释折叠中的程序缺陷。由很长的不可折叠字符序列组成的注释可能会触发强制换行,而该换行会省略续行所需的前导空格,导致注释的剩余部分被解释为新的标头字段。这使得通过精心构造的输入实现标头注入成为可能。
gh-143925: 拒绝
data:URL 媒体类型中的控制字符。gh-143919: 拒绝
http.cookies.Morsel字段和值中的控制字符。gh-143916: 拒绝 wsgiref.headers.Headers 字段、值和参数之内的 C0 控制字符。
gh-142145: 移除了
xml.minidom节点 ID 缓存清理中的二次时间复杂度行为。 为了在不破坏现有用户代码的情况下做到这一点,我们还向通过直接实例化Element或Attr类所创建的xml.dom.minidom元素和属性添加了 ownerDocument 属性。 请注意,不支持以这种方式创建节点;应当改用像xml.dom.Document.documentElement()这样的创建器函数。gh-137836: 在
html.parser.HTMLParser中增加对“纯文本”元素, RAWTEXT 元素 "xmp", "iframe", "noembed" 和 "noframes",以及可选的 RAWTEXT 元素 "noscript" 的支持。gh-136063:
email.message: 确保旧式 HTTP 形参解析为线性复杂度。 由 Bénédikt Tran 编写补丁。gh-136065: 修复
os.path.expandvars()中的二次幂复杂度问题。gh-119451: 修正
http.client模块中一个潜在的内存拒绝服务问题。 当连接到一个恶意服务器时,它可能导致分配任意大小的内存。 这会造成多种问题包括MemoryError、消耗交换空间、内存不足(OOM)杀死进程或容器,甚至系统崩溃。gh-119452: 修正
http.server模块中一个潜在的内存拒绝服务问题。 当一个恶意用户连接到 Windows 上的 CGI 服务器时,它可能导致分配任意大小的内存。 这会造成多种问题包括MemoryError、消耗交换空间、内存不足(OOM)杀死进程或容器,甚至系统崩溃。gh-119342: 修正a potential memory denial of service in the
plistlib模块中一个潜在的内存拒绝服务问题。 当读取从不受信任的源接收的 Plist 文件时,它可能导致分配任意大小的内存。 这会造成多种问题包括MemoryError、消耗交换空间、内存不足(OOM)杀死进程或容器,甚至系统崩溃。
库¶
gh-144833: 修复在
ssl中当newPySSLSocket()的SSL_new()返回 NULL 时的一个释放后再使用的问题。 此错误是在对象已被释放后通过一个悬空指针来报告的。gh-90949: 为 xmlparser 对象添加
SetAllocTrackerActivationThreshold()和SetAllocTrackerMaximumAmplification()以防止在一个 Expat 解析器内部使用不适当大小的动态内存。 由 Bénédikt Tran 编写补丁。
核心与内置函数¶
Python 3.11.14 正式版¶
发布日期:2025-10-09
安全性¶
gh-139700: 检测 zip64 中央目录记录末尾的一致性。 在没有字节数据被附加到 ZIP 文件时支持使用 "zip64 可扩展数据" 的记录。
gh-139400:
xml.parsers.expat: 确保父级 Expat 解析器当其不再被ExternalEntityParserCreate()所创建的子解析器所引用时只会被作为垃圾回收一次。 由 Sebastian Pipping 编写补丁。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 提供补丁。
库¶
Python 3.11.13 正式版¶
发布日期: 2025-06-03
安全性¶
库¶
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 提交补丁。
Python 3.11.12 正式版¶
发布日期: 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 节 方括号仅适用于 IPv6 和 IPvFuture 主机。gh-121284: 修复了在使用现代电子邮件策略扁平化电子邮件消息时,rfc2047 编码词的折叠错误。以前,当一个编码词对于一行来说太长时,它会被解码、跨行分割并重新编码。但是原始文本中的逗号和其他特殊字符可能会被保留未编码和未引用。如果生成的渲染电子邮件被传输或重新解析,理论上可以利用精心构造的编码词来欺骗标题行。
gh-80222: 修复在使用现代电子邮件策略扁平化电子邮件消息时引用字符串折叠的错误。之前,当一个引用字符串被折叠以至于跨越多行时,周围的引号和内部转义将被省略。理论上,如果生成的渲染电子邮件被传输或重新解析,这可能会被用来使用精心构造的引用字符串欺骗标题行。
gh-119511: 修复
imaplib模块中潜在的拒绝服务问题。当连接到恶意服务器时,可能导致分配任意数量的内存。在许多系统上,这是无害的,因为未使用的虚拟内存只是一个映射,但如果这达到了虚拟地址大小限制,可能会导致MemoryError或其他进程崩溃。在不寻常的系统或构建中,所有分配的内存都被触及并由实际 RAM 或存储支持,这可能会消耗资源,直到类似崩溃。
库¶
文档¶
gh-121277: CPython 文档的作者现在可以使用
next作为versionchanged、versionadded、deprecated指令的版本。
C API¶
gh-106883: 在调用 _PyThread_CurrentFrames() 和 _PyThread_CurrentExceptions() 期间禁用垃圾回收 (GC) 以避免解释器死锁。
Python 3.11.11 正式版¶
发布日期: 2024-12-03
工具/示例¶
gh-123418: 更新 GitHub CI 工作流以使用 OpenSSL 3.0.15 和 multissltests 以使用 3.0.15、3.1.7 和 3.2.3。
测试¶
安全性¶
库¶
Python 3.11.10 正式版¶
发布日期:2024-09-07
Windows¶
安全性¶
gh-123678: 将libexpat升级到2.6.3版本
gh-121957: 修复了与交互式使用 Python 相关的缺失审计事件问题,现在对于
python -i以及python -m asyncio也会正确触发。 所涉及的事件是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: Windows 上的
os.mkdir()现在接受0o700的 mode 参数,将新目录限制为当前用户。这修复了 CVE-2024-4030,影响tempfile.mkdtemp()在基础临时目录比默认更宽松的情况下的问题。gh-116741: 更新捆绑的 libexpat 到 2.6.2
库¶
gh-123270: 对
zipfile.Path中导致无限循环的畸形负载应用了更为精确的修复(gh-122905),而不会破坏使用合法字符的内容。gh-123067: 通过
http.cookies修复解析带有反斜杠的"引号包围的 cookie 值时的二次复杂度问题。gh-122905:
zipfile.Path对象现在会对来自 zipfile 的名称进行清理。gh-121650: 现在,带有嵌入换行符的
email标题在输出时会被引用。generator现在会拒绝序列化(写入)不安全折叠或分隔的标题;参见verify_generated_headers。(由Bas Bloemsaat和Petr Viktorin在 gh-121650 中贡献。)gh-119506: 修复了在刷新内部缓冲区期间再次调用
io.TextIOWrapper.write()方法时会破坏内部缓冲区的问题。gh-118643: 修复
email模块在重新折叠长地址列表时的 AttributeError。同时修复地址列表中地址分隔符编码不正确的问题。gh-113171: 修复了以下属性判断中的各类误报(false positives)和漏报(false negatives)问题
ipaddress.IPv4Address.is_private(详见相关文档说明)
同样适用于相应的
ipaddress.IPv4Network和ipaddress.IPv6Network属性。gh-102988:
email.utils.getaddresses()andemail.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: usestrict=Falseto 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 的补丁。
核心与内置函数¶
Python 3.11.9 正式版¶
发布日期:2024-04-02
安全性¶
gh-115398: 允许通过添加五个新方法来控制 Expat >=2.6.0 的重新解析延迟 (CVE-2023-52425):
gh-115399: 将捆绑的 libexpat 更新到 2.6.0
gh-115243: 修复在并发修改时
collections.deque.index()可能崩溃的问题。gh-114572:
ssl.SSLContext.cert_store_stats()和ssl.SSLContext.get_ca_certs()现在在ssl.SSLContext被多个线程共享时正确锁定对证书存储的访问。
核心与内置函数¶
gh-116296: 修复
object.__reduce__()内部错误处理中可能的内存泄漏。gh-116034: 修复了断言失败时的错误位置。
gh-115823: 在由于无效字节序列引发
SyntaxError异常时,正确计算解析器中的错误范围。由 Pablo Galindo 提供补丁。gh-112087: 对于列表的空反向迭代器,现在将被归约为
reversed()。 补丁由 Donghee Na 提供。gh-115011: 现在,对于具有
__index__()方法的对象,无符号整数类型成员的设置器支持与int相同的有效值范围。gh-96497: 修复在理解中使用的赋值表达式中混淆的类变量的错误解析。
库¶
gh-117310: 修复了在创建新的
_ssl._SSLContext时,如果 CPython 被不合理地构建导致默认密码列表为空,或链接的 SSL 库报告其 CSSL_CTX_set_cipher_list()API 失败时,可能触发的早期及额外的Py_DECREF崩溃问题。gh-117110: 修复了一个阻止
typing.Any的子类用参数实例化的错误。由 Chris Fu 提供补丁。gh-90872: 在Windows上,
subprocess.Popen.wait()不再用负超时调用WaitForSingleObject():如果超时为负,则传递0毫秒。由Victor Stinner提供补丁。gh-116957: configparser: 在早期读取引发 DuplicateSectionError 或 DuplicateOptionError 后,不再将 ConfigParser 值保留在无效状态(存储为列表而不是字符串)。
gh-90095: 忽略
.pdbrc中的空行和注释。gh-116764: 恢复在
urllib.parse函数parse_qs()和parse_qsl()中对None和其他假值的支持。此外,现在它们会对非零整数和非空序列抛出 TypeError。gh-116811: 在
PathFinder.invalidate_caches中,委托给MetadataPathFinder.invalidate_caches。gh-116484: 修改自动生成的
tkinter.Checkbutton控件名称,以避免在同一父容器内与自动生成的tkinter.ttk.Checkbutton控件名称发生冲突。gh-116401: 修复了
os.fwalk()和shutil.rmtree()在打开命名管道时的阻塞问题。gh-116143: 修复 pydoc
_start_server中的竞争条件,消除_start_server返回一个 "serving" 但没有设置docserver的线程的窗口。gh-116325:
typing: 对前向引用为空字符串的情况,抛出SyntaxError而非AttributeError。gh-90535: 修复了在
logging.TimedRotatingFileHandler中对于when='MIDNIGHT'和when='Wx'时 interval 值 > 1 的支持。gh-115978: 在 WASI 上禁用 preadv()、readv()、pwritev() 和 writev()。
在 WASI 0.2 的 wasmtime 下,这些函数未能通过 test_posix 测试 (https://github.com/bytecodealliance/wasmtime/issues/7830)。
gh-88352: 修复
logging.TimedRotatingFileHandler处理程序中下一次滚动时间的计算。computeRollover()现在总是返回一个大于指定时间的时间戳,并且在 DST 变更时也能正确工作。doRollover()不再覆盖已经滚动过的文件,从而避免了在午夜或 DST 变更时重复运行导致的数据丢失。gh-76511: 修复
email.Message.as_string()中的 UnicodeEncodeError,该错误发生在消息声称使用 ascii 字符集但实际上包含非 ascii 字符时。现在,非 ascii 字符会被替换为 U+FFFD 替换字符,类似于replace错误处理器的行为。gh-75988: 修复
unittest.mock.create_autospec()以通过调用传递给包装对象来返回真实结果。gh-115881: 修复了当传递
feature_version=(3, 8)时,ast.parse()会错误地将条件上下文管理器(如with (x() if y else z()): ...)标记为无效语法的问题。这撤销了作为 gh-94949 一部分对语法所做的更改。gh-115886: 修复了
multiprocessing.shared_memory.SharedMemory中嵌入空字符的名称被静默截断的问题。gh-115809: 改进了
logging.TimedRotatingFileHandler中计算要删除哪些滚动日志文件的算法。现在对于没有namer和具有任意确定性namer(不修改文件名中的日期时间部分) 的处理程序来说是可靠的。gh-74668:
urllib.parse函数parse_qs()和parse_qsl()现在支持包含原始和百分比编码非 ASCII 数据的字节参数。gh-67044:
csv.writer()现在总是引用或转义'\r'和'\n',不管 lineterminator 的值如何。gh-115712: 当分隔符为空格且 skipinitialspace 为真值时,
csv.writer()现在会用引号包裹空字段,并在无法加引号时引发异常。gh-115618: 修复
property方法getter()、setter()和deleter()中对None参数引用计数不当减少的问题。gh-115570: 在访问已弃用的
typing.io和typing.re伪模块的__doc__属性时,不再遗漏DeprecationWarning。gh-112006: 修复了针对带有
__wrapper__数据描述器的类型的inspect.unwrap()。gh-101293: 在
inspect.Signature.from_callable()中支持带有__call__()方法的可调用对象,以及将__new__()和__init__()方法设置为类方法、静态方法、绑定方法、部分函数以及其他类型的方法和描述符的类型。gh-114563: 修复了使用
Decimal的 C 实现时的几个format()错误: * 在某些罕见情况下使用z格式选项(强制转换负 0)时的内存泄漏 * 将z格式选项应用于类型F(使用大写NAN/INF的定点数)时的错误输出 * 应用#格式选项(替代形式)时的错误输出gh-115197:
urllib.request在 macOS 和 Windows 上不再在检查系统代理绕过列表之前解析主机名。gh-115165: 现在在尝试为调用
typing泛型别名(包括使用typing.Annotated创建的泛型别名)返回的对象设置__orig_class__属性时,大多数异常会被忽略。 之前只有AttributeError被忽略。 由 Dave Shawley 提供补丁。gh-115133: 修复与Expat 2.6.0兼容的
XMLPullParser测试。gh-115059:
io.BufferedRandom.read1()现在会刷新底层写入缓冲区。gh-114763: 保护使用
importlib.util.LazyLoader加载的模块,防止在加载完成前多个线程尝试访问属性时出现竞争条件。gh-97959: 修复
pydoc中类方法、绑定方法、方法及函数别名的渲染问题。类方法不再显示“builtins.type实例的方法”注释。现在为类和未绑定方法添加了相应的注释。方法和函数别名现在如果原始定义与当前不同,会引用到定义原始内容的模块或类。绑定方法现在列在静态方法部分。内置类的方法现在和Python类的方法一样得到支持。gh-112281: 允许为
typing.Annotated创建 类型的联合,即使元数据不可哈希。gh-111775: 修复了
importlib.resources.simple.ResourceHandle.open()在文本模式下的问题,添加了遗漏的stream参数。gh-90095: 使 .pdbrc 和 -c 可以与任何有效的 pdb 命令一起工作。
gh-107155: 修复了
help(x)的错误输出,其中x是一个lambda函数,该函数有一个带有"return"键的__annotations__字典属性。gh-105866: 修复了
_get_slots的 bug,该 bug 在定义带有 slots 和 weakref_slot 的数据类时会导致错误。gh-60346: 修复 ArgumentParser 与 parse_known_args 不一致的问题。
gh-100985: 更新 HTTPSConnection 以在使用代理时一致地包装 IPv6 地址。
gh-100884: email: 修复在多行地址列表中结合 Unicode 编码时逗号的错误折叠问题。
gh-95782: 修复了
io.BufferedReader.tell()、io.BufferedReader.seek()、_pyio.BufferedReader.tell()、io.BufferedRandom.tell()、io.BufferedRandom.seek()和_pyio.BufferedRandom.tell()可能会返回负偏移量的问题。gh-93205: 修复
logging.handlers.TimedRotatingFileHandler中的一个错误,其中指向具有相同名称但不同扩展名的文件的多个旋转处理程序实例会冲突并且不会删除正确的文件。bpo-43952: 修复了
multiprocessing.connection.Listener.accept()以接受空字节串作为 authkey。 不接受空字节串作为密钥会导致它无限期挂起。bpo-42125: linecache: 如果可用,从
__spec__获取模块名称。这允许在使用自定义加载器时获取__main__模块的源代码。gh-66543: 使
mimetypes.guess_type()能够正确解析仅包含主机名的URL、包含片段或查询的URL以及Windows上仅包含UNC共享点的文件名。基于 Dong-hee Na 的补丁。bpo-33775: 在 argparse 中为本地化添加了 'default' 和 'version' 帮助文本。
文档¶
gh-115399: 在 "XML 漏洞" 下记录了 Expat <2.6.0 的 CVE-2023-52425。
gh-115233: 修复 Logging Cookbook 中
LoggerAdapter的一个例子。
测试¶
gh-83434: 在regrtest中搜索引用泄漏 (
-R选项) 时禁用 JUnit XML 输出 (--junit-xml=FILE命令行选项)。 由 Victor Stinner 提供补丁。gh-117187: 修复对 vanilla Expat <2.6.0 的XML测试。
gh-115979: 更新 test_importlib,使其在 WASI SDK 21 下通过。
gh-116307: 添加了导入辅助工具
isolated_modules,因为CleanImport不会移除在上下文期间导入的模块。gh-115720: 泄漏测试(
-R,--huntrleaks)现在显示每次迭代中发现泄漏数量的摘要。gh-115122: 为 regrtest 测试运行器添加
--bisect选项:使用test.bisect_cmd运行失败的测试以识别失败的测试。由 Victor Stinner 提供补丁。gh-115596: 修复
test_os中的ProgramPriorityTests永久改变进程优先级的问题。gh-115198: 修复了使用较新版本 Docutils 时 distutils 测试中的 test_check_metadata_deprecate。
构建¶
Windows¶
gh-116773: 修复
<_overlapped.Overlapped object at 0xXXX> 在释放时仍有挂起的操作,可能导致进程崩溃的实例。gh-91227: 修复asyncio ProactorEventLoop实现,以便向未监听的地址发送数据报不会阻止接收更多数据报。
gh-115554: 安装程序现在对于更新 适用于Windows的Python启动器 有更严格的规则。一般来说,大多数用户只安装了一个启动器,不会看到任何区别。当安装了多个启动器时,安装启动器的选项将被禁用,直到只剩下一个。降级启动器(从未允许)现在被更明显地阻止。
gh-115543: 适用于Windows的Python启动器 现在可以检测从 Microsoft Store 安装的 Python 3.13,并且在设置
PYLAUNCHER_ALLOW_INSTALL时默认安装 Python 3.12。gh-115009: 更新 Windows 安装程序以使用 SQLite 3.45.1。
IDLE¶
gh-88516: 在 macOS 上,在编辑器窗口的标题栏中显示代理图标以匹配平台行为。
工具/示例¶
gh-113516: 在构建WASI时不要设置
LDSHARED。
C API¶
gh-117021: 修复非 Windows 64 位平台上
PyLong_AsPid()中的整数溢出问题。
Python 3.11.8 正式版¶
发布日期:2024-02-06
安全性¶
gh-113659: 跳过名称以点开头或具有隐藏文件属性的
.pth文件。
核心与内置函数¶
gh-114887: 更改
create_datagram_endpoint()中的套接字类型验证,以接受所有非流套接字。这修复了与原始套接字兼容性的回归问题。gh-114388: 修复了在将不是
int实例的类整数值赋给对应于 T_UINT 和 T_ULONG 类型 C 结构体成员的属性时发出的RuntimeWarning。 修复了在将负整数值赋给对应于 T_UINT 类型 C 结构体成员的属性时发出的双重RuntimeWarning。gh-89811: 在执行依赖于此值可用的字节码特殊化之前,检查有效的
tp_version_tag。gh-113602: 修复了一个导致解析器尝试覆盖现有错误并在过程中崩溃的错误。由 Pablo Galindo 提供补丁
gh-106905: 使用每个 AST 解析器状态而非全局状态来跟踪 AST 解析器内的递归深度,以防止由于同时解析而导致的潜在竞争条件。
该问题主要在3.11版本中由
ast.parse()的多线程用户发现。在3.12版本中,对垃圾回收触发时机的更改防止了竞态条件的发生。gh-112716: 修复当
__builtins__不是字典时,import语句和内置类型的__reduce__()方法中的 SystemError。gh-105967: 解决Apple的macOS平台zlib库中的一个bug,其中
zlib.crc32()和binascii.crc32()在多GB输入上可能产生不正确的结果。包括在使用zipfile处理包含大数据的zip文件时。gh-94606: 修复当
email.message.get_payload()读取含有 Unicode 代理字符且消息内容不适合 surrogateescape 编码的消息时的 UnicodeEncodeError。由 Sidney Markowitz 提供补丁。
库¶
gh-114965: 更新捆绑的pip到24.0版本。
gh-110190: 通过在 stgdict 中将
MAX_STRUCT_SIZE设置为 32,修复 Windows ARM64 平台上带数组的 ctypes 结构体。由 Diego Russo 提供补丁。gh-113280: 修复在
ssl.SSLSocket创建过程中发生错误时,在罕见情况下出现的开放套接字泄漏问题。gh-77749:
email.policy.EmailPolicy.fold()现在如果utf8为 false,总是编码头部的非 ASCII 字符。gh-114492: 使
termios.tcgetattr()在Alpine Linux上的结果可重现。之前它可能会在某些字段留下随机垃圾。gh-75128: 在
asyncio.BaseEventLoop.create_server()中忽略OSError,当IPv6可用但接口实际上不支持它时。gh-114257: 在
ctypes.util.find_library()中忽略FileNotFound错误,在Linux上直接返回None。gh-101438: 避免在ElementTree.iterparse中出现引用循环。由
ElementTree.iterparse返回的迭代器可能会持有一个文件描述符。如果返回的迭代器未被耗尽,引用循环会阻止文件描述符的及时清理。gh-104522: 运行子进程时引发的
OSError现在仅在错误是由于尝试更改当前目录失败时,才会将 filename 属性设置为 cwd。gh-109534: 修复了
asyncio.selector_events.BaseSelectorEventLoop中SSL握手失败时的引用泄漏问题。由Jamie Phan提供补丁。gh-114077: 修复在 32 位平台上传递大于 2 GiB 的 count 时
socket.socket.sendfile()中可能出现的OverflowError。gh-114014: 修复了
fractions.Fraction中的一个 bug,该 bug 在使用d作为小数部分的无效字符串时,会生成与其他无效字母/字符不同的错误。由 Jeremiah Gabriel Pascual 提供补丁。gh-113951: 修复了
tkinter.Text和tkinter.Canvas类的tag_unbind()方法在三参数情况下的行为。以前,widget.tag_unbind(tag, sequence, funcid)会销毁 sequence 的当前绑定,使 sequence 变为未绑定状态,并删除 funcid 命令。现在它仅从 sequence 的绑定中移除 funcid,保留其他命令,并删除 funcid 命令。只有当 funcid 是最后一个绑定的命令时,才会使 sequence 变为未绑定状态。gh-113781: 在 Python 结束期间发出警告时,静默不可引发的 AttributeError。
gh-113594: 修复
email中当重新折叠包含 unknown-8bit 编码部分后跟非 unknown-8bit 编码部分的行时引发的UnicodeEncodeError。gh-113538: 在
asyncio.StreamReaderProtocol.connection_made()中,有一个回调函数,如果包装“连接回调”的任务失败,则会记录错误。如果任务被取消,这个回调本身会失败。通过首先检查任务是否被取消来防止这种情况。如果是,关闭传输但不记录错误。gh-85567: 修复
pickle和pickletools命令行界面中未关闭文件的资源警告。gh-101225: 增加由
multiprocessing.manager和multiprocessing.resource_sharer创建的multiprocessing.connection.Listener对象的积压,以显著降低在创建到它们的multiprocessing.connection.Connection时遇到连接拒绝错误的风险。gh-113543: 确保
webbrowser.MacOSXOSAScript发送webbrowser.open审计事件。gh-113028: 当字符串的第二个引用出现在
pickle的输入中,并且使用 Python 实现时,我们保证只有一个副本被 pickle,并且在重新加载时共享一个对象。以前,在协议 0 中,当字符串包含某些字符(如换行符)时,会导致对象重复。gh-113421: 修复多进程日志记录器对于
%(filename)s的问题。gh-113358: 修复了为具有损坏的
__getattr__的异常渲染回溯的问题。gh-113214: 修复了在 SSL-over-SSL 场景中 asyncio SSL 协议中止时出现的
AttributeError。gh-113246: 更新捆绑的 pip 到 23.3.2 版本。
gh-113199: 使得
http.client.HTTPResponse.read1和http.client.HTTPResponse.readline在知道内容长度时读取所有数据后关闭 IO。由 Illia Volochii 提供补丁。gh-113188: 修复了 Windows 上的
shutil.copymode()和shutil.copystat()。 之前,如果 dst 是符号链接,它们的工作方式有所不同:如果 follow_symlinks 为真值或 src 不是符号链接,它们会修改 dst 本身而不是它所指向的文件的权限位;而如果 follow_symlinks 为假值且 src 是符号链接,则它们不会修改权限位。gh-61648: 检测 doctests 中属性的行号。
gh-112559:
signal.signal()和signal.getsignal()不再对可调用的处理器调用repr。asyncio.run()和asyncio.Runner.run()不再对任务结果调用repr。由 Yilei Yang 提供补丁。gh-110190: 通过在 stgdict 中将
MAX_STRUCT_SIZE设置为 64,修复了 PPC64LE 平台上带有数组的 ctypes 结构体。由 Diego Russo 提供补丁。gh-79429: 在 multiprocessing 终结器中移除临时目录时忽略 FileNotFoundError。
gh-79325: 修复了 Windows 上
tempfile.TemporaryDirectory()清理过程中的无限递归错误。gh-110190: 通过在stgdict中将
MAX_STRUCT_SIZE设置为32,修复了Arm平台上带有数组的ctypes结构体问题。由Diego Russo提供补丁。gh-81194: 修复了
socket.if_indextoname()在特定值(UINT_MAX)下的崩溃问题。修复了64位非Windows平台上socket.if_indextoname()的整数溢出问题。gh-75666: 修复了
tkinter小部件的unbind()方法在两个参数下的行为。之前,widget.unbind(sequence, funcid)会销毁 sequence 的当前绑定,使 sequence 无绑定,并删除 funcid 命令。现在它只从 sequence 的绑定中移除 funcid,保留其他命令,并删除 funcid 命令。只有当 funcid 是最后一个绑定命令时,才会使 sequence 无绑定。gh-110345: 在
tkinter._test()中显示 Tcl/Tk 补丁级别(而非版本)。gh-109858: 保护
zipfile免受“引用覆盖”zip炸弹攻击。现在在尝试读取与其他条目或中央目录重叠的条目时会引发 BadZipFile。gh-38807: 修复了
trace中的竞态条件。不再检查目录是否存在并创建它,而是直接调用os.makedirs()并传递exist_ok=True关键字参数。gh-75705: 在
mailbox.mbox和mailbox.MMDF中设置 unixfrom 信封。gh-105102: 允许
ctypes.Union嵌套在ctypes.Structure中,当系统字节序与类的字节序相反时。gh-104282: 修复了由于对具有零长度属性的 BCJ 过滤器处理不当导致的
lzma._decode_filter_properties()中的空指针解引用。补丁由 Radislav Chugunov 提供。gh-102512: 当从外部线程(即
_DummyThread)调用os.fork()时,子进程中的线程类型更改为_MainThread。还更改了其名称和守护状态,现在可以加入了。gh-91133: 修复了
tempfile.TemporaryDirectory清理中的一个错误,现在在解决文件系统权限错误时不再解引用符号链接。bpo-43153: 在 Windows 上,
tempfile.TemporaryDirectory之前在目录清理过程中将PermissionError掩盖为NotADirectoryError。现在如果错误未被忽略,它会正确地引发PermissionError。由 Andrei Kulakov 和 Ken Jin 提供补丁。bpo-35332:
shutil.rmtree()函数现在在 ignore_errors 为True时忽略调用os.close()时的错误,并且os.close()在出错后不再重试。bpo-35928:
io.TextIOWrapper现在正确处理read()和write()后的解码缓冲区。bpo-26791:
shutil.move()现在当一个目录是符号链接的目标时,将符号链接移动到该目录中。这提供了与 mv shell 命令相同的行为。之前的行为会引发异常。由 Jeffrey Kintscher 提供补丁。bpo-36959: 修复了
strptime()中一些无效 ISO 格式字符串组合的错误消息,这些消息引用了格式字符串中不包含的指令。由 Gordon P. Hemsley 提供补丁。bpo-18060: 修复了一个类继承问题,当从 Structure 或 Union 的基类派生两个或更多级别的子类时,可能导致段错误。
文档¶
gh-110746: 改进了 ttk.treeview.column 和 ttk.treeview.heading 方法以及布局的有效选项/值的标记。
gh-95649: 文档说明
asyncio模块包含从 uvloop 项目的 v0.16.0 中获取的代码,以及所需的 MIT 许可信息。
测试¶
gh-109980: 在 macOS 上修复
test_shutil中的test_tarfile_vs_tar,其中系统 tar 可以在归档中包含比shutil.make_archive更多的信息。gh-112769: 现在,当
zlib.ZLIB_RUNTIME_VERSION包含非整数后缀时,测试正确比较 zlib 版本。例如,zlib-ng 将版本定义为1.3.0.zlib-ng。gh-105089: 在 AIX 上修复
test.test_zipfile.test_core.TestWithDirectory.test_create_directory_with_write测试,通过对模式进行 0xFFFF 的按位与操作,使其与zinfo.external_attr同步。bpo-40648: 测试 Windows 上文件可以通过 chmod() 获取的模式。
构建¶
gh-101778: 修复了当包含
ffi.h的目录中存在悬空符号链接时的构建错误。gh-112305: 修复了在树外构建上执行的
check-clean-src步骤,以检测错误的$(srcdir)/Python/frozen_modules/*.h文件,并建议适当的源树清理步骤以重新获得可工作的构建。bpo-11102:
os.major()、os.makedev()和os.minor()函数现在在 HP-UX v3 上可用。bpo-36351: 交叉编译时不设置 ipv6type。
Windows¶
gh-109991: 更新 Windows 构建以使用 OpenSSL 3.0.13。
gh-111239: 更新 Windows 构建以使用 zlib v1.3.1。
gh-100107:
py.exe启动器在启动包含/usr/bin/envshebang 的脚本时,将不再尝试运行 Microsoft Store 重定向器。gh-114096: 为创建目录连接激活的进程权限现在会在之后恢复,避免程序中其他部分的行为变化。
gh-113009:
multiprocessing: 在 Windows 上,修复了Process.terminate()中的一个竞态条件:不再将returncode属性设置为总是在Process.wait()中调用WaitForSingleObject()。之前,有时候即使GetExitCodeProcess()不是STILL_ACTIVE,进程在TerminateProcess()后仍在运行。由 Victor Stinner 提供补丁。gh-87868: 在
_winapi.CreateProcess()中正确排序并移除重复的环境变量。bpo-37308: 修复在 Windows 上使用非 ASCII tagname 参数时
mmap.mmap中的乱码问题。
macOS¶
gh-115009: 更新macOS安装程序以使用SQLite 3.45.1。
gh-109991: 更新macOS安装程序以使用OpenSSL 3.0.13。
gh-74573: 文档说明
dbm.ndbm在更新时超过未记录的平台限制时可能会静默损坏 DBM 文件,并且在读取此类损坏文件时可能会崩溃(段错误)。(FB8919203)gh-65701: freeze 工具不适用于 Python 的框架构建。文档说明这一点,并在使用此类构建运行工具时早期退出。
gh-102362: 确保
sysconfig.get_plaform()的结果至少包括主版本和次版本,即使在构建过程中MACOSX_DEPLOYMENT_TARGET仅设置为一个主版本以匹配 pip 预期的格式。gh-110017: 由于 macOS 中的一个错误 (FB13453490),在 macOS 上禁用信号处理压力测试。
gh-109981: 在 macOS 上使用
/dev/fd来确定test.support.os_helper.fd_count中打开的文件数量,以避免在探测打开的文件时因“受保护”的文件描述符而崩溃。
IDLE¶
gh-96905: 在idlelib代码中,停止重新定义内置的'dict'和'object'。
gh-72284: 改进 IDLE 文档中的功能列表、编辑器键绑定和 shell 键绑定。
gh-113903: 修复 test.test_idle 在 test_configdialog 中的罕见失败。
gh-113729: 修复 3.11.7 和 3.12.1 中的“帮助 -> IDLE 文档”菜单错误。
gh-113269: 修复 test_editor 在 macOS Catalina 上的挂起问题。
gh-112898: 修复在macOS上退出IDLE时处理未保存文件的问题。
gh-103820: 修改IDLE绑定,使得在非X11窗口系统(即Win32和Aqua)上来自鼠标按钮4/5的事件不会被误认为是滚动。
bpo-13586: 打开“替换”对话框时输入选中的文本。
工具/示例¶
gh-109991: 更新GitHub CI工作流以使用OpenSSL 3.0.13,并更新multissltests以使用1.1.1w、3.0.13、3.1.5和3.2.1。
gh-115015: 修复Argument Clinic中的一个bug,该bug会为没有参数但使用 METH_METHOD | METH_FASTCALL | METH_KEYWORDS 调用约定的方法生成错误的代码。之前只检查了位置参数的数量;任何传递的关键字参数都会被静默接受。
Python 3.11.7 正式版¶
发布日期:2023-12-04
核心与内置函数¶
gh-112625: 修复在
bytearray.join()方法中迭代参数时可能会清除bytearray对象,导致读取已释放内存的bug。gh-112388: 修复导致解析器尝试覆盖 tokenizer 错误的错误。由 Pablo Galindo 提供补丁。
gh-112387: 修复解码字符串中反向 tokenize 错误的错误位置。由 Pablo Galindo 提供补丁。
gh-109181: 通过惰性计算行号加快了
Traceback对象的创建速度。 补丁由 Pablo Galindo 提供。gh-102388: 修复
iso2022_jp_3和iso2022_jp_2004编解码器读取越界的错误gh-111366: 修复了
codeop中的一个问题,该问题导致在存在无效语法时引发的SyntaxError异常不包含精确的错误信息。由Pablo Galindo提供补丁。gh-111380: 修复了一个错误,该错误导致在解析时如果遇到无效语法,
SyntaxWarning会显示两次。由Pablo Galindo提供补丁。gh-88116: 涉及宽 unicode 字符(如表情符号和亚洲字符)的回溯位置范围现在能够被正确高亮显示。 补丁由 Batuhan Taskaya 和 Pablo Galindo 提供。
gh-94438: 修复了一个回归问题,该问题在调试时阻止了跨
is None和is not None的跳转。由Savannah Ostrowski提供补丁。gh-110696: 修复了无效参数解包的错误消息。由Pablo Galindo提供补丁
gh-110237: 修复在
_PyEval_MatchClass中对PyList_Append调用缺少错误检查的问题。
库¶
gh-112618: 修复了与
typing.Annotated相关的缓存错误。Annotated[str, True]不再与Annotated[str, 1]相同。gh-112509: 修复了可能导致键同时出现在
typing.TypedDict的__required_keys__和__optional_keys__属性中的边缘情况。 由 Jelle Zijlstra 提供补丁。gh-94722: 修复了一个错误,即当其中一个实例的 lineno 为
None时,DocTest实例之间的比较会失败。gh-112105: 使
readline.set_completer_delims()与 libedit 一起工作。gh-111942: 在非调试模式下修复 TextIOWrapper 构造器中使用不可编码的“errors”参数时的 SystemError。
gh-109538: 当事件循环在
StreamWriter.__del__()中已经关闭时,显示警告信息而不是显示RuntimeError。gh-111942: 修复在
io.TextIOWrapper.reconfigure()中传递无效参数(例如非字符串编码)时导致的崩溃。gh-111804: 在 WASI 下移除 posix.fallocate(),因为底层的 posix_fallocate() 在 WASI preview2 中不可用。
gh-111841: 修复在 Windows 上的
os.putenv()和os.unsetenv()中在嵌入的空字符处截断参数的问题。gh-111541: 修复
doctest对于非内置子类的SyntaxError的处理。gh-110894: 为
asyncio.start_server()的client_connected_cb中的异常调用循环异常处理器,以便应用程序可以处理它。由 Kumar Aditya 提供补丁。gh-111531: 修复
tkinter小部件的bind_class()和bind_all()方法中的引用泄漏问题。gh-111356: 将
io.text_encoding()、io.DEFAULT_BUFFER_SIZE和io.IncrementalNewlineDecoder添加到了io.__all__中。gh-68166: 在
tkinter.ttk.Style.element_create()中移除了对不支持的 "vsapi" 元素类型的提及。为element_create()和其他ttk.Style方法添加了测试。在文档中为element_create()添加了示例。gh-111251: 修复了
_blake2在初始化时未检查错误的问题。gh-111174: 修复在为空 BytesIO 重复调用
io.BytesIO.getbuffer()时的崩溃问题。gh-111187: 将 locale.getdefaultlocale() 的移除版本推迟到 Python 3.15。
gh-110910: 修复
asyncio.TaskGroup和asyncio.Timeout中的无效状态处理。如果使用不当,现在会正确抛出 RuntimeError,并在之后保持状态一致。gh-111092: 使 turtledemo 在没有启用默认根的情况下运行。
gh-110590: 修复
_sre.compile()中的一个bug,当 code 参数是非整数列表时,TypeError会被OverflowError覆盖。gh-110519:
gettext中关于非整数数字的弃用警告现在总是会指向用户代码中使用 gettext 函数或方法的那一行。 之前它可能会指向gettext代码中的某一行。gh-110378:
contextmanager()和asynccontextmanager()上下文管理器现在会关闭一个产生多个值的无效底层生成器对象。gh-110365: 修复了
termios.tcsetattr()在从term列表解析整数期间会覆盖现有错误的缺陷。gh-110196: 向
IPv6Address添加__reduce__方法以保留scope_id。gh-109747: 改进对不支持的后视模式的错误提示。现在对于后视模式宽度过大的情况,会抛出 re.error 而不是 OverflowError 或 RuntimeError。
gh-109786: 修复了重新进入
itertools.pairwise的__next__()方法时可能出现的引用泄漏和崩溃问题。gh-73561: 当
http.client使用IPv6地址作为Host头时,省略接口范围。gh-86826:
zipinfo现在支持RFC 8536确定的TZ字符串中的全部值范围,并检测所有无效格式。Python和C实现现在在无效数据上抛出相同类型的异常。bpo-41422: 修复了
pickle.Pickler和pickle.Unpickler通过内部备忘录映射涉及循环引用的内存泄漏。bpo-40262:
ssl.SSLSocket.recv_into()方法不再要求 buffer 参数实现__len__,并且支持具有任意项目大小的缓冲区。bpo-35191: 修复了
socket.setblocking()中意外的整数截断问题,该问题曾导致它将2**32的倍数解释为False。
文档¶
测试¶
gh-110367: 使 regrtest 的
--verbose3选项与--huntrleaks -jN选项兼容。./python -m test -j1 -R 3:3 --verbose3命令现在按预期工作。 由 Victor Stinner 提供补丁。gh-111165: 从
test.support模块中移除了不再使用的函数run_unittest()和run_doctest()以及类BasicTestRunner。gh-110932: 如果定义了
SOURCE_DATE_EPOCH环境变量,修复regrtest:使用变量值作为随机种子。由Victor Stinner提供补丁。gh-110995: test_gdb: 修复对未构建Python脚本支持的gdb的检测。由Victor Stinner提交的补丁。
gh-110918: 现在按照指定的顺序测试由选项
--match、--ignore、--matchfile和--ignorefile指定的测试用例匹配模式,最后一个匹配决定测试用例是否运行或被忽略。gh-110647: 修复 test_signal 的 test_stress_modifying_handlers()。由Victor Stinner提供补丁。
gh-103053: 在FreeBSD上修复 test_tools.test_freeze:在复制的源代码目录中运行"make distclean"而不是"make clean"以同时删除"python"程序。由Victor Stinner提供补丁。
gh-110167: 修复 test_socket 中的死锁问题,当服务器因超时失败但客户端仍在自己的线程中运行时。不要在 doCleanups() 中持有锁调用清理函数。其中一个清理函数会等待客户端完成,而如果客户端在这种情况下调用 addCleanup(),可能会导致死锁。由 Victor Stinner 提供补丁。
gh-110267: 添加对 PyStructSequence 对象的 pickle 和 copy 操作的测试。由 Xuehai Pan 提供补丁。
gh-109974: 修复 test_threading 锁测试中的竞态条件。等待条件满足,而不是使用带有硬编码秒数的
time.sleep()。由 Victor Stinner 提供补丁。gh-109972: 将 test_gdb.py 文件拆分为由多个测试组成的 test_gdb 包,现在可以并行运行测试。由 Victor Stinner 提供补丁。
gh-104736: 修复在 Linux ppc64le 上用 LLVM clang 16 构建的 Python 上的 test_gdb(例如 Fedora 38)。在 gdb "bt" 命令输出中搜索模式以检测 gdb 是否未能检索到回溯。例如,如果找到
Backtrace stopped: frame did not save the PC则跳过测试。补丁由 Victor Stinner 提供。gh-108927: 修复了在同一进程中运行测试时的顺序依赖问题,当一个具有子模块的测试(如 test_importlib)跟随一个导入其子模块的测试(如 test_importlib.util)并先于一个使用该子模块的测试(如 test_unittest 或 test_compileall)时。
构建¶
Windows¶
macOS¶
gh-110950: 更新 macOS 安装程序,包含上游 Tcl/Tk 的修复,解决在 macOS 14 Sonoma 上 Tkinter 中遇到的
Secure coding is not enabled for restorable state!警告问题。gh-111015: 确保在 macOS 构建中,IDLE.app 和 Python Launcher.app 以适当的权限安装。
gh-109286: 更新macOS安装程序以使用SQLite 3.43.1。
gh-71383: 更新 macOS 安装程序,包含上游 Tcl/Tk 的修复,解决在 Tkinter 中遇到的
ttk::ThemeChanged错误。gh-92603: 更新 macOS 安装程序,包含上游 Tcl/Tk 接受的修复,解决在第一个
tkinter.Tk()实例被销毁后遇到的崩溃问题。gh-99834: 将 macOS 安装程序更新至 Tcl/Tk 8.6.13。
IDLE¶
bpo-35668: 为 IDLE 调试器模块添加了文档字符串。 修复了两个错误:初始化 Idb.botframe (应当在 Bdb 中);在 Idb.in_rpc_code 中,在尝试使用 prev_frame 之前检查它是否为 None。 大幅扩展了 test_debugger。
C API¶
gh-112438: 修复在
PyArg_ParseTuple()类似函数中嵌套元组中格式单元"es"、"et"、"es#"和"et#"的支持。gh-109521:
PyImport_GetImporter()现在在无法获取sys.path_hooks或sys.path_importer_cache,或者它们不是对应的列表和字典时设置 RuntimeError。以前在模糊的情况下可能返回 NULL 而不设置错误,如果这些属性类型错误,可能崩溃或抛出 SystemError。
Python 3.11.6 正式版¶
发布日期:2023-10-02
核心与内置函数¶
gh-109351: 修复编译涉及命名(海象)表达式的无效AST时崩溃的错误。
gh-109207: 修复符号表条目对象的
__repr__中的SystemError。gh-109179: 修复C回溯显示中从
SyntaxError中删除注释的错误。gh-88943: 改进跟随数字文字的非ASCII字符的语法错误。现在它指向无效的非ASCII字符,而不是有效的数字文字。
gh-108959: 修复涉及非语义括号和空格的下标和二元操作的错误位置的光标放置。由Pablo Galindo提供补丁。
gh-108520: 修复了
multiprocessing.synchronize.SemLock.__setstate__()以正确初始化multiprocessing.synchronize.SemLock._is_fork_ctx。 这修复了跨嵌套进程传递 SemLock 时的回归问题。将
multiprocessing.synchronize.SemLock.is_fork_ctx重命名为multiprocessing.synchronize.SemLock._is_fork_ctx,以避免将其暴露为公共API。
库¶
gh-110036: 在 Windows 上,multiprocessing 的
Popen.terminate()现在会捕获PermissionError并获取进程退出码。 如果进程仍在运行,则再次引发PermissionError。 否则,进程已按预期终止:保存其退出码。 补丁由 Victor Stinner 提供。gh-110038: 修复了一个问题,该问题导致
KqueueSelector.select()在某些情况下当文件描述符被同时注册为读和写时,不返回所有就绪的事件。gh-109631: 现在可以中断执行短重复匹配的
re函数,如re.findall(),re.split(),re.search()和re.sub()。gh-109593: 避免在多进程资源跟踪器的重入调用上死锁。虽然不太可能,但如果GC传递调用了如SemLock这样的多进程对象的终结器,就可能发生这种重入调用。
gh-109613: 修复
os.stat()和os.DirEntry.stat():检查异常。以前,在Python调试模式下构建时,当函数成功但设置了异常时,这些函数可能会触发致命的Python错误(并中止进程)。由Victor Stinner提供补丁。gh-107219: 修复了
concurrent.futures中的竞争条件。当进程池中的进程被突然终止时(而 future 正在运行或挂起),关闭连接的写入端。如果调用队列在发送字节到工作进程时被阻塞,关闭连接的写入端会中断发送,因此队列可以被关闭。由 Victor Stinner 提供补丁。gh-50644: 现在尝试 pickle 或创建
codecs流的浅拷贝或深拷贝会引发 TypeError。之前,复制会因 RecursionError 失败,而 pickle 会产生错误的结果,最终导致解 pickle 时因 RecursionError 失败。gh-108987: 修复
_thread.start_new_thread()的竞争条件。如果在 Python 终止过程中创建了一个线程,新生成的线程现在会立即退出,而不是尝试访问已释放的内存并导致崩溃。由 Victor Stinner 提供补丁。gh-108843: 修复
ast.unparse()在反解析包含多种引号类型的 f-字符串时的问题。gh-108682: 枚举:如果从自定义
__new__调用super().__new__(),则引发TypeError。gh-105829: 修复 concurrent.futures.ProcessPoolExecutor 死锁
gh-64662: 修复
sqlite3.Connection.iterdump()中对虚拟表的支持。由 Aviv Palivoda 提交的补丁。gh-107913: 修复在创建异常对象之前如果清理代码清除或修改了
errno和winerror值,OSError异常中可能丢失这些值的问题。gh-104372: 在Linux上,
subprocess可以使用vfork()系统调用来更快地生成子进程,通过在其等待vfork的子进程exec()结果时释放GIL,防止父进程阻塞其他线程。这可以防止从慢速文件系统生成二进制文件时阻塞应用程序的其余部分。gh-84867:
unittest.TestLoader不再从确切的unittest.TestCase和unittest.FunctionTestCase类加载测试用例。
文档¶
测试¶
gh-110031: 如果 Python 是用地址消毒剂 (ASAN) 构建的,跳过使用 thread+fork 的 test_threading 测试。由 Victor Stinner 提供补丁。
gh-110088: 修复 test_asyncio 超时:不测量最大持续时间,测试不应测量 CI 性能。仅在有任务有超时或延迟时测量最小持续时间。向
test_asyncio.utils添加CLOCK_RES。由 Victor Stinner 提供补丁。gh-110033: 修复
test_signal的test_interprocess_signal()。确保在信号处理程序中引发异常之前删除subprocess.Popen对象。否则,Popen.__del__()可能会获取到被记录为Exception ignored in: ...的异常,导致测试失败。由 Victor Stinner 提供补丁。gh-109594: 修复了 test_concurrent_futures.test_wait 的 test_timeout()。 移除根据耗时是否超过超时时间而可能完成也可能不完成的期物 (future)。 保留在 wait() 超时前不会完成的第二个期物。 补丁由 Victor Stinner 提供。
gh-109748: 修复 test_venv 的
test_zippath_from_non_installed_posix():不复制__pycache__/子目录,因为它们可能被并行运行的其他 Python 测试修改。由 Victor Stinner 提供补丁。gh-103053: 如果 Python 是用
./configure --enable-optimizations构建的(意味着启用了 Profile Guided Optimization (PGO)),则跳过 test_tools.test_freeze 的 test_freeze_simple_script():这只会使测试变得太慢。冻结工具由许多其他 CI 使用其他(更快的)编译器标志进行测试。由 Victor Stinner 提供补丁。gh-109396: 修复 FIPS 模式下的
test_socket.test_hmac_sha1()。使用更长的密钥:FIPS 模式要求至少 112 位。之前的密钥只有 32 位。由 Victor Stinner 提供补丁。gh-104736: 修复在 Linux ppc64le 上用 LLVM clang 16 构建的 Python 上的 test_gdb(例如 Fedora 38)。在 gdb "bt" 命令输出中搜索模式以检测 gdb 是否未能检索到回溯。例如,如果找到
Backtrace stopped: frame did not save the PC则跳过测试。补丁由 Victor Stinner 提供。gh-109237: 修复当工作目录包含至少一个非ASCII字符时的
test_site.test_underpth_basic():将._pth文件编码为UTF-8,并启用UTF-8模式以在子进程的标准输出中使用UTF-8。由Victor Stinner提供补丁。gh-109230: 修复
test_pyexpat.test_exception():现在可以从不同于Python源代码目录的目录运行。在此之前,测试在这种情况下会失败。如果Modules/pyexpat.c源不可用,则跳过测试。也在非CPython的Python实现上跳过测试。由Victor Stinner提供补丁。gh-109015: 如果启用了TCP黑洞 (
sysctl net.inet.tcp.blackhole),在 FreeBSD 上修复 test_asyncio、test_imaplib 和 test_socket 测试。 跳过在这种非标准配置下失败的少数测试,这些测试会返回ETIMEDOUT。 目前,FreeBSD GCP 镜像启用了 TCP 和 UDP 黑洞 (sysctl net.inet.tcp.blackhole=2和sysctl net.inet.udp.blackhole=1)。 由 Victor Stinner 提供补丁。gh-91960: 如果 gdb 无法检索 Python 帧对象(即如果帧为
<optimized out>),则跳过test_gdb。 当使用 "clang -Og" 构建 Python 时,gdb 可能会无法检索_PyEval_EvalFrameDefault()的 frame 参数。 在这种情况下,像py_bt()这样的测试很可能会失败。 如果无法访问 Python 帧,python-gdb.py基本上无从获取 Python 回溯。 此外,如果使用 Clang 构建 Python,在 macOS 上将不再跳过test_gdb。 补丁由 Victor Stinner 提供。gh-108962: 如果
chflags()失败并提示"OSError: [Errno 45] Operation not supported"(例如在FreeBSD 13上),则跳过test_tempfile.test_flags()。由Victor Stinner提供补丁。gh-89392: 移除了测试中对
test_main()函数的支持。现在它们总是使用正常的 unittest 测试运行器。gh-108851: 修复 WASI 构建机器上
test_tomllib的递归测试:减少递归限制并根据当前可用的递归限制计算最大嵌套数组/字典。由 Victor Stinner 提供补丁。gh-108851: 在
test.support模块中添加get_recursion_available()和get_recursion_depth()函数。由 Victor Stinner 提供补丁。gh-108822:
regrtest现在计算所有测试的统计信息:成功、失败和跳过。test_netrc、test_pep646_syntax和test_xml_etree现在在其test_main()函数中返回结果。补丁由 Victor Stinner 和 Alex Waygood 提供。gh-108388: 将 test_concurrent_futures 转换为包含 7 个子测试的包。由 Victor Stinner 提供补丁。
gh-108388: 将test_multiprocessing_fork、test_multiprocessing_forkserver和test_multiprocessing_spawn拆分为测试包。每个包由4个子测试组成:processes、threads、manager和misc。这样可以并行运行更多测试,从而减少总测试时间。由Victor Stinner提供补丁。
gh-101634: 当使用
-jN选项运行Python测试套件时,如果工作进程的stdout无法从区域编码解码,则报告测试失败,因此退出码为非零。由Victor Stinner提供补丁。gh-100086: Python 测试运行器 (libregrtest) 现在会记录 Python 构建信息,如“debug”与“release”构建,或 LTO 和 PGO 优化。由 Victor Stinner 提供补丁。
gh-98903: 如果没有运行任何测试,Python 测试套件现在会以退出码 4 失败。 这有助于检测测试名称和测试方法中的拼写错误。
gh-95027: 在 Windows 上,当 Python 测试套件使用
-jN选项运行时,现在将 ANSI 代码页用作 stdout 临时文件的编码,而不是使用可能导致解码错误的 UTF-8。补丁由 Victor Stinner 提供。gh-93353: regrtest 现在在运行 -jN 选项时会检查测试是否泄漏临时文件或目录。由 Victor Stinner 提供补丁。
构建¶
Windows¶
macOS¶
gh-109991: 更新macOS安装程序以使用OpenSSL 3.0.11。
工具/示例¶
gh-109991: 更新GitHub CI工作流以使用OpenSSL 3.0.11,并使multissltests使用1.1.1w、3.0.11和3.1.3版本。
Python 3.11.5 正式版¶
发布日期:2023-08-24
安全性¶
gh-108310: Fixed an issue where instances of
ssl.SSLSocketwere 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<https://cve.mitre.org/cgi-bin/cvename.cgi?name=:cve:2023-40217>`_ by Aapo Oksman. Patch by Gregory P. Smith.
核心与内置函数¶
gh-104432: 修复了在
grp和socket模块中涉及返回char *指针序列的C API中潜在的非对齐内存访问。这些是在ARM macOS上使用-fsaniziter=alignment构建时发现的。由Christopher Chavez提供补丁。gh-77377: 确保在fork上下文中创建的多进程同步对象不会被发送到在spawn上下文中创建的不同进程。这将在父进程中将段错误更改为可操作的RuntimeError。
gh-106092: 修复了在垃圾回收延迟释放
PyFrameObject时,由于 use-after-free 错误导致的段错误。gh-106719: 不再在类型和模块类型的
__annotations__getter 和 setter 中抑制任意错误。gh-106723: 将
frozen_modules传播到多进程生成的进程解释器中。gh-105979: 修复了
_imp.get_frozen_object()中由于异常处理不当导致的崩溃。gh-105840: 修复了在专门化函数调用时
__defaults__过多可能导致崩溃的问题。gh-105375: 修复了编译器中的一个错误,其中异常可能被覆盖。
gh-105375: 改进了
PyUnicode_BuildEncodingMap()中的错误处理,其中异常可能被覆盖。gh-105235: 防止在
mmap.find()调用期间发生越界内存访问。
库¶
gh-105736: 统一了 OrderedDict 的纯 Python 版本与 C 版本。 现在,两个版本都会在
__new__中设置其内部状态。 之前,纯 Python 版本是在__init__中进行设置的。gh-107963: 修复
multiprocessing.set_forkserver_preload()以检查给定的模块名称列表。修补由Donghee Na提供。gh-106242: 修复
os.path.normpath()以处理嵌入的空字符而不截断路径。gh-107845:
tarfile.data_filter()现在在确定符号链接的目标时会考虑其位置,因此不再会因LinkOutsideDestinationError拒绝一些有效的 tarball。gh-107715: 修复在类名包含特殊字符时
doctest.DocTestFinder.find()的行为。由 Gertjan van Zwieten 提供补丁。gh-100814: 现在,将可调用对象作为选项值传递给 Tkinter 图像时会引发预期的 TclError,而不是 AttributeError。
gh-106684: 当应用程序未关闭
asyncio.StreamWriter从而导致内存泄漏时将其关闭。 补丁由 Kumar Aditya 提供。gh-107077: 在某些情况下,当证书验证失败时,OpenSSL 似乎会返回
SSL_ERROR_SYSCALL而不是SSL_ERROR_SSL,但错误参数仍会包含ERR_LIB_SSL和SSL_R_CERTIFICATE_VERIFY_FAILED。 我们现在会检测这种情况并引发适当的ssl.SSLCertVerificationError。 补丁由 Pablo Galindo 提供。gh-107396: tarfiles; 修复了gzip解压中self.exception的赋值前使用问题。
gh-62519: 使
gettext.pgettext()在找不到翻译时搜索复数定义。gh-83006: 文档化
shutil.disk_usage()在Unix上非挂载文件系统的行为。gh-106186: 当使用
email.parser.Parser类解析headersonly=True的邮件时,不报告MultipartInvariantViolationDefect缺陷。gh-106831: 修复了
_ssl.c中d2i_SSL_SESSION结果可能缺少NULL检查的问题。gh-106774: 更新捆绑的 pip 到版本 23.2.1。
gh-106752: 修复了当不存在文件名且 Path 不位于 zipfile 根目录时 zipfile.Path 在
name/suffix/suffixes/stem操作中的若干错误。gh-106530: 撤销了对
colorsys.rgb_to_hls()的更改,该更改导致对某些几乎白色的输入进行除零操作。由Terry Jan Reedy提供补丁。gh-106510: 改进正则表达式中原子组的调试输出。
gh-105497: 修复存在未命名标志时的标志掩码反转问题。
gh-90876: 防止
multiprocessing.spawn在sys.executable为None的环境中 导入 失败。这个问题在3.11版本中随着对多处理中路径类对象的支持而出现倒退。gh-106350: 检测
_tkinter模块使用的 libtommath 函数mp_init()中可能的内存分配失败。gh-102541: 使 pydoc.doc 在输出流不为 None 时捕获损坏模块的 ImportError。
gh-106263: 修复了在调用
repr时手动构造的 SignalDict 对象导致的崩溃。由 Charlie Zhao 提供补丁。gh-105375: 修复
_Unpickler_SetInputStream()中的一个 bug,该 bug 在失败时可能导致异常被覆盖。gh-105605: 在模块初始化期间加强
pyexpat的错误处理,以防止异常可能被覆盖,以及对象被两次解引用。gh-105375: 修复
_datetime模块中在模块初始化失败时异常可能被覆盖的错误。gh-105375: 修复
_ssl初始化过程中可能导致引用泄漏和异常被覆盖的错误。gh-105375: 修复
array.array类中可能导致异常被覆盖的错误。gh-105375: 修复了
_ctypes中异常最终可能会被覆盖的错误。gh-105375: 修复
_elementtree模块中可能导致异常被覆盖的错误。gh-105497: 修复存在别名/掩码成员时的标志反转问题。
gh-103171: 恢复了 Python 3.11 中与使用
typing.final()装饰的可在运行时检查的协议相关的未记录行为更改。 该行为更改曾意味着除非对象具有__final__属性,否则在运行时不会被视为这些协议的实例。 补丁由 Alex Waygood 提供。gh-105332: 将 pickling 方法从按名称恢复为按值。
gh-104554: 在 urllib.parse 中添加 RTSPS 方案支持。
gh-100061: 修复了一个导致带有占有限定符的正则表达式错误匹配的错误。
gh-99203: 恢复 CPython <= 3.10.5 的
shutil.make_archive()行为:如果root_dir不是目录,则不创建空存档,并且在这种情况下,无论format选择如何,都会引发FileNotFoundError或NotADirectoryError。除了恢复的行为外,该函数现在也可能在dry_run模式下引发这些异常。gh-94777: 修复
multiprocessingProcessPoolExecutor在子进程崩溃且数据正被写入调用队列时的挂起问题。bpo-18319: 确保
gettext(msg)即使存在复数形式也能检索翻译。换句话说:gettext(msg) == ngettext(msg, '', 1)。
文档¶
测试¶
构建¶
gh-107814: 当使用
-q参数调用find_python.bat时,未能正确静默 nuget 的输出。此问题现已修复。gh-106881: 在
Modules/posixmodule.c中包含linux/limits.h之前先检查其是否存在。gh-104692: 将
commoninstall作为bininstall的先决条件包含在内这确保了在使用并行构建(
make -j install)时,commoninstall会在bininstall开始之前完成,因此python3符号链接只会在所有标准库模块安装完成后才被安装。gh-100340: 允许 wasm-sdk 17 及更高版本使用 -Wno-int-conversion,从而能够针对最新 sdk 构建 WASI 构建。
Windows¶
gh-106242: 修复了在Windows上传递包含嵌入空字符的路径时
realpath()的行为,使其表现一致。在严格模式下,现在会抛出OSError而不是意外的ValueError,在非严格模式下会使路径变为绝对路径。gh-106844: 修复了
_winapi.LCMapStringEx()中影响ntpath.normcase()的整数溢出问题。gh-99079: 更新 Windows 构建以使用 OpenSSL 3.0.9
gh-105436: 确保空环境块以两个空字符终止,这是Windows所要求的。
macOS¶
工具/示例¶
gh-107565: 更新 multissltests 和 GitHub CI 工作流以使用 OpenSSL 1.1.1v、3.0.10 和 3.1.2。
gh-95065: Argument Clinic 现在支持使用指令
@text_signature覆盖自动生成的签名。请参阅 Argument Clinic 文档。gh-106970: 修复Argument Clinic中
destination <name> clear命令的bug;目的地缓冲区永远不会被清除,且destination指令解析器在处理命令后会直接继续到错误处理器。由Erlend E. Aasland提供补丁。
C API¶
gh-107916: C API 函数
PyErr_SetFromErrnoWithFilename(),PyErr_SetExcFromWindowsErrWithFilename()和PyErr_SetFromWindowsErrWithFilename()现在在调用PyUnicode_DecodeFSDefault()之前保存错误代码。gh-107915: 诸如
PyErr_SetString(),PyErr_Format(),PyErr_SetFromErrnoWithFilename()等 C API 函数,如果格式化错误消息或解码文件名失败,将不再崩溃或忽略错误。相反,它们会保留相应的错误。gh-107226:
PyModule_AddObjectRef()现在仅在有限 API 版本 3.10 或更高版本中可用。gh-105375: 修复
PyErr_WarnExplicit()中的一个错误,其中如果API内部失败,异常可能会被覆盖。gh-99612: 修复
PyUnicode_DecodeUTF8Stateful()对于仅ASCII数据的问题:*consumed未被设置。
Python 3.11.4 最终版¶
发布日期:2023-06-06
安全性¶
gh-103142: 二进制构建中使用的 OpenSSL 版本已升级至 1.1.1u,以修复多个 CVE。
gh-99889: 修复了
uu.decode()中的一个安全漏洞,该漏洞在未指定out_file时可能允许基于输入进行目录遍历。gh-104049: 在
http.client.SimpleHTTPRequestHandler生成的目录索引中不暴露本地的磁盘位置。gh-102153:
urllib.parse.urlsplit()现在根据WHATWG定义的URL规范,去除前导C0控制和空格字符,以响应 CVE-2023-24329。由Illia Volochii提供补丁。
核心与内置函数¶
gh-105164: 确保如果一个块中唯一的注解位于
match块内,则正确设置注解。由Jelle Zijlstra提供补丁。gh-104615: 修复了类似
a, a = x, y代码中的赋值顺序错误。由Carl Meyer贡献。gh-104482: 修复了ast.c中验证模式匹配语句时的三个错误处理bug。
gh-102818: 不在
sys.setprofile和sys.settrace的蹦床函数中添加帧到回溯中。这确保了如果回调函数中引发异常,帧不会被重复,并且确保如果使用C回调且该回调不添加帧时,帧不会被省略。gh-104018: 在字节对象的 %-格式化中禁止使用 "z" 格式说明符。
gh-103971: 修复了
case块之后的代码可能被分配错误位置编号的问题。gh-102310: 更改了无效字节文字的错误范围。
gh-103590: 不要将
try-except*构造中抛出的单个异常包装在ExceptionGroup中。gh-103242: 迁移
set_ecdh_curve()方法以不使用已弃用的 OpenSSL API。Donghee Na 的补丁。gh-102700: 允许内置模块成为子模块。这允许子模块静态链接到 CPython 二进制文件中。
gh-101857: 通过将检查范围扩大到linux而不仅仅是glibc来修复Linux系统上的xattr支持检测。这修复了对musl的支持。
gh-99184: 在
weakref.ref的repr中绕过__name__的实例属性访问。gh-96670: 解析器现在会在解析包含空字节的源代码时引发
SyntaxError。自aab01e3回移植。补丁由 Pablo Galindo 提供。bpo-31821: 修复
pause_reading()在被asyncio中的connection_made()调用时工作的问题。
库¶
gh-105080: 修复了
inspect.signature()在派生类上的不一致签名问题gh-104874: 记录了
typing.NewType的__name__和__supertype__属性。补丁由 Jelle Zijlstra 提供。gh-104340: 当
asyncio管道协议由于错误失去连接,并且调用者没有在相应的StreamWriter上等待wait_closed()时,不要记录关于未检索到的异常的警告。毕竟,根据StreamWriter.close()文档,wait_closed()调用是可选的(“非强制性”)。gh-104372: 重构了
_posixsubprocess的内部实现,以避免在标记pass_fds=文件描述符为可继承时在 fork 和 exec 之间使用 Python C API。gh-75367: 修复了
inspect.getattr_static()中的数据描述符检测问题。gh-104536: 修复了内部
multiprocessing.process清理逻辑中的一个竞态条件,该条件可能在调用process.close()时表现为意外的AttributeError。gh-104399: 准备
_tkinter模块以通过必要时替换弃用的函数mp_to_unsigned_bin_n()和mp_unsigned_bin_size()来构建与Tcl 9.0和未来的libtommath。gh-104307:
socket.getnameinfo()现在在联系 DNS 服务器时会释放 GIL。gh-87695: 修复了
pathlib.Path.glob()在遇到指向过长路径的符号链接时引发OSError的问题。gh-104265: 通过禁止实例化
_csv.Reader和_csv.Writer类型来防止可能的崩溃。这个回归是在3.10.0a4版本中由PR 23224引入的 (bpo-14935)。由Radislav Chugunov提供补丁。gh-104035: 不忽略用户定义的
__getstate__和__setstate__方法对于有槽的冻结数据类。gh-103935: 对要执行的文件使用
io.open_code()而不是原始的open()。gh-100370: 修复了在32位构建中
sqlite3.Connection.blobopen()可能引发的OverflowError。由 Erlend E. Aasland 提供补丁。gh-103848: 添加检查以确保
urllib.parse.urlsplit()找到的[括号]主机是 IPv6 或 IPvFuture 格式。gh-103872: 将捆绑的 pip 更新至版本 23.1.2。
gh-103861: 修复了
zipfile.Zipfile在使用force_zip64向其中添加文件时创建无效 zip 文件的问题。由 Carey Metcalfe 提供补丁。gh-103685: 为 Tk 8.7 准备
tkinter.Menu.index(),使其在应该返回None时不会引发TclError: expected integer but got ""。gh-81403:
urllib.request.CacheFTPHandler不再在重用缓存的 FTP 实例时引发URLError。ftplib 的 endtransfer 方法调用 voidresp 来排空连接,以正确处理 FTP 实例的重用。gh-103578: 通过将
io.open()替换为io.open_code(),修复了pdb在读取具有不同编码的源文件时崩溃的错误。新方法还会调用由PyFile_SetOpenCodeHook()设置的钩子。gh-103556: 现在创建
inspect.Signature对象时,带有默认值的位置参数后面跟着没有默认值的位置或关键字参数是不可能的。gh-103559: 将捆绑的 pip 更新到版本 23.1.1。
gh-103365: 将默认的 Flag 边界设置为
STRICT并修复位操作。gh-103472: 通过显式关闭代理/隧道的 CONNECT 响应,避免
http.client.HTTPConnection中潜在的ResourceWarning。gh-103449: 修复了
dataclasses.dataclass()中文档字符串生成的一个错误。gh-103256: 修复了一个导致
hmac在请求的哈希算法虽然作为hashlib本身的一部分单独可用但在 OpenSSL 中不可用时引发异常的程序缺陷。 现在它将正确地回退至内置算法。 举例来说,这种情况可能发生在你的 OpenSSL 不包括 SHA3 支持而你希望计算hmac.digest(b'K', b'M', 'sha3_256')的时候。gh-93910: 移除对枚举
memmber.member访问的弃用。gh-102978: 修复当以
autospec=True调用时,unittest.mock.patch()不强制执行用@classmethod或@staticmethod装饰的方法的函数签名的问题。gh-103204: 修复
http.server接受HTTP版本号前带有'+'或'-',或带有数字分隔'_'字符的HTTP请求的问题。版本号的长度也受到限制。gh-102953:
tarfile中的提取方法,以及shutil.unpack_archive(),新增了一个 filter 参数,允许限制可能令人惊讶或危险的tar特性,例如在目标目录之外创建文件。详情请见 解压缩过滤器。gh-101640:
argparse.ArgumentParser现在会在写入消息时捕获错误,例如当sys.stderr为None时。由 Oleg Iarygin 提供的补丁。gh-96522: 修复 pty.spawn() 中潜在的僵局问题。
gh-87474: 修复
subprocess.Popen中潜在的文件描述符泄露问题。
文档¶
gh-89455: 为
traceback.TracebackException类的max_group_depth和max_group_width参数以及exceptions属性添加缺失的文档。gh-89412: 为
traceback.TracebackException类的end_lineno和end_offset属性添加缺失的文档。gh-104943: 在
typing.NamedTuple中删除对旧Python版本的提及。gh-48241: 澄清了关于 urllib.request.urlopen 和 urllib.request.Requst 的 url 形参需要正确编码的文档说明。
测试¶
构建¶
Windows¶
macOS¶
IDLE¶
Python 3.11.3 最终版¶
发布日期:2023-04-04
安全性¶
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-101975: 修复了跟踪条目上的
stacktop值,以避免垃圾收集时的损坏。gh-102701: 修复创建非常大的字典时的溢出问题。
gh-102416: 不记忆解析器中自动生成的错误循环规则。由 Pablo Galindo 提供补丁。
gh-102356: 修复了一个在释放深度嵌套的过滤器对象时导致崩溃的 bug。由 Marta Gómez Macías 提供补丁。
gh-102397: 修复垃圾收集过程中信号处理竞争条件导致的段错误。由 Kumar Aditya 提供补丁。
gh-102281: 修复fileutils中潜在的nullptr解引用和未初始化内存使用问题。由Max Bachmann提交补丁。
gh-102126: 修复在关闭时清除线程状态时如果任何终结器尝试获取运行时头锁导致的死锁。由Kumar Aditya提供补丁。
gh-102027: 修复
_blake2内部模块中的SSE2和SSE3检测。由Max Bachmann提交补丁。gh-101967: 修复在
positional_only_passed_as_keyword函数中创建新列表时可能发生的段错误。gh-101765: 修复在迭代
__reduce__中当builtins.__dict__键的内部访问改变迭代对象时的SystemError / 段错误。gh-101696: 在
_PyStaticType_Dealloc中使静态类型的类型版本标签无效,避免因虚假缓存命中导致解释器崩溃的错误。由 Kumar Aditya 提供补丁。
库¶
gh-102549: 不再忽略成员类型创建中的异常。
gh-102947: 当在非数据类上调用
dataclasses.fields()时,改进回溯。由Alex Waygood提交补丁。gh-102780:
asyncio.Timeout上下文管理器现在即使在由于任务取消而执行清理时也能可靠工作。之前在这种情况下它可能会引发CancelledError而不是TimeoutError。gh-88965: typing: 修复了与自定义类中基于
ParamSpec泛型的替换相关的 bug。之前,如果ParamSpec被替换为一个自身包含TypeVar的参数列表,参数列表中的TypeVar将无法被后续替换。现在这个问题已经修复。由 Nikita Sobolev 提供补丁。
gh-101979: 修复了一个错误,其中
argparse.ArgumentParser.add_argument()的metavar参数中的括号被丢弃。由 Yeojin Kim 提供补丁。gh-101961: 对于二进制模式,
fileinput.hookcompressed()即使值为None也不设置encoding值。由 Gihwan Kim 提供补丁。gh-101936: 如果
HTTPError初始化时没有指定fp参数,则fp的默认值变为io.BytesIO。由 Long Vo 提供补丁。gh-102069: 修复自定义数据类的
__weakref__描述符生成。gh-101566: 在 zipfile 中,当底层 zipfile 被包装在
Path中后,对其应用针对 extractall 的修复。gh-101892: 可调用迭代器在可调用对象耗尽迭代器但忘记返回哨兵值或引发
StopIteration时不再引发SystemError。gh-97786: 修复浮点数到时间转换在极端情况下潜在的未定义行为。
gh-101517: 修复了
bdb使用lineno=None与linecache查找源代码行时导致未处理异常失败的 bug。gh-96931: 修复了
ssl.SSLSocket.shared_ciphers()返回不正确结果的问题。gh-88233: 无论 "extra" 字段相对于 zip64 "extra" 的顺序如何,都能正确保留
zipfile中的 "extra" 字段。gh-96127:
inspect.signature之前在使用模拟对象调用时会引发TypeError。现在它会正确返回(*args, **kwargs)作为推断签名。gh-95495: 在针对 OpenSSL 3.0 构建时
ssl模块存在一个错误,会将未认证的 EOF(即没有 close_notify)报告为正常的 TLS 级 EOF。现在它会引发SSLEOFError,与早期版本 OpenSSL 中的行为保持一致。此外SSLContext上的options属性默认也不再包含OP_IGNORE_UNEXPECTED_EOF。可以设置此选项以指定先前的 OpenSSL 3.0 行为。gh-94440: 修复了
concurrent.futures.process中的一个错误,即在快速提交并取消一个 future 后,ProcessPoolExecutor关闭可能会挂起。
文档¶
gh-103112: 向
http.client.HTTPResponse.read()添加了文档字符串以修复pydoc输出。gh-97725: 修复
asyncio.Task.print_stack()对于file=None的描述。由Oleg Iarygin提供补丁。
测试¶
构建¶
gh-102711: 修复
-Wstrict-prototypes编译器警告。
Windows¶
macOS¶
Python 3.11.2 最终版¶
发布日期:2023-02-07
核心与内置函数¶
gh-92173: 修复
PyEval_EvalCodeEx()中的defs和kwdefs参数以及该函数中的引用泄漏问题。gh-101400: 修复不在循环中的
continue或break异常消息中的错误行号。由 Donghee Na 提供补丁。gh-101372: 修复
is_normalized()以正确处理 UCD 3.2.0 的情况。由 Donghee Na 提供补丁。gh-101046: 修复解析器在引发
MemoryError时可能的内存泄漏。由 Pablo Galindo 提供补丁。gh-100942: 修复了当属性子类覆盖
__new__方法以返回非属性实例时,在 property.getter/setter/deleter 中发生的段错误。gh-100892: 修复在清除
threading.local时迭代线程状态的竞争。由 Kumar Aditya 提供补丁。gh-100637: 修复
int.__sizeof__()的计算,使其包含 0 和 False 的含 1 个元素的 ob_digit 数组。gh-100649: 在fork后更新PyThreadState的native_thread_id字段。
gh-100374: 修正了
socket.getfqdn()的错误结果和延迟。由Dominic Socular提供的补丁。gh-99110: 在 frameobject.c 中初始化 frame->previous,以修复访问由
PyFrame_New()创建的帧时的段错误。gh-100050: 在标记器中搜索不匹配的括号时,尊重现有的错误。由 Pablo Galindo 提供补丁
bpo-32782: 从
ctypes长度为0的数组构建memoryview时,现在会报告正确的itemsize,而不是总是给出0的值。
库¶
gh-101541: [Enum] - 修复伪标志创建。
gh-101326: 修复了在将
None作为第二个或第三个参数传递给FutureIter.throw时的回归问题。gh-100795: 在
socket中避免潜在的意外freeaddrinfo调用(双重释放),当 libc 的getaddrinfo()实现在返回错误时在输出指针中留下垃圾时。原始由 Sergey G. Brester 提供补丁。gh-101143: 在
asyncio.base_events.BaseEventLoop._add_callback中移除对TimerHandle的未使用引用。gh-101144: 使
zipfile.Path.open()和zipfile.Path.read_text()也接受encoding作为位置参数。这是 Python 3.9 及更早版本的行为。3.10 引入了回归,将其作为位置参数提供会导致TypeError。gh-101015: 修复
typing.get_type_hints()在'*tuple[...]'和*tuple[...]上的问题。它不应该丢弃Unpack部分。gh-100573: 修复 Windows 上
asyncio的一个关于命名管道的 bug,其中客户端对管道执行os.stat()会导致服务器中禁用未来请求服务的错误。gh-100805: 修改
random.choice()实现,使其再次与NumPy数组一起工作。gh-90104: 如果数据类字段定义有循环引用,则在
repr上避免 RecursionError。gh-100750: 在平台中将 encoding 关键字参数传递给子进程
gh-100689: 通过静态分配
PyExpat_CAPI胶囊来修复pyexpat中的崩溃。gh-100740: 修复
unittest.mock.Mock不尊重以assert前缀开头的属性名的规范。gh-86508: 修复
asyncio.open_connection()跳过绑定到不同族的本地地址。由 Kumar Aditya 提供补丁。gh-100287: 修复了
unittest.mock.seal()与unittest.mock.AsyncMock的交互问题。gh-100474:
http.server现在在尝试提供索引页面之前会检查它是否确实是一个常规文件。这避免了名为index.html的目录引起的问题。gh-100160: 移除
asyncio.get_event_loop()中的所有弃用警告。它们被推迟到 Python 3.12。gh-96290: 修复
ntpath.splitdrive()中部分和无效 UNC 驱动器的处理,以及在非 Windows 系统上的ntpath.normpath()。现在splitdrive()认为诸如 '\server' 和 '\' 的路径仅包含驱动器,因此在非 Windows 系统上不会被normpath()修改。Windows 系统上normpath()的行为不受影响,因为使用的是原生 OS API。由 Eryk Sun 提供补丁,Barney Gale 有贡献。gh-78878: 修复了创建
_ctypes.CField实例时崩溃的问题。gh-99952: 修复
ctypes.Structure中from_param()结果大于 C 指针时的引用计数不足问题。gh-100098: 修复了
tuple子类在被用作枚举值时被强制转换为tuple的问题。gh-98778: 更新
HTTPError,使其即使在fp为None时也能正确初始化。由 Donghee Na 提供补丁。gh-83035: 修复
inspect.getsource()对带有嵌套括号的装饰器调用的处理。gh-99576: 修复
LWPCookieJar和MozillaCookieJar的.save()方法:在重复保存时未截断保存的文件。gh-99433: 修复模块中对
types.MethodWrapperType的doctest失败。gh-99240: 通过将内存清理提取到新的
post_parsing部分来修复 Argument Clinic 的str_converter中的双重释放错误。gh-64490: 修复 Argument Clinic 中参数被打包到元组时的引用计数错误。
gh-85267: 对
inspect.signature()处理__text_signature__的多项改进。 - 修复了inspect.signature()丢弃参数的情况 - 修复了inspect.signature()引发tokenize.TokenError的情况 - 允许inspect.signature()理解涉及常量二元运算的默认值 -inspect.signature()文档说明仅引发TypeError或ValueError,但有时会引发RuntimeError。这些情况现在会引发ValueError- 移除了一个死代码路径gh-95882: 修复了
asynccontextmanager()中的3.11回归问题,该问题导致它传播带有不正确回溯的异常;并修复了contextmanager()中的3.11回归问题,该问题导致它为StopIteration传播带有不正确回溯的异常。bpo-44817: 在使用 ntpath.realpath() 时忽略 WinError 53 (ERROR_BAD_NETPATH)、65 (ERROR_NETWORK_ACCESS_DENIED) 和 161 (ERROR_BAD_PATHNAME)。
bpo-40447: 在
compileall.compile_file()和compileall.compile_dir()的stripdir参数中接受os.PathLike(如pathlib.Path) 。bpo-36880: 修复了当
ctypes回调返回类型为py_object且返回None时的引用计数问题,该问题可能导致崩溃。
文档¶
gh-100616: 在
curses模块中,为curses.window.vline()函数记录现有的attr参数。gh-100472: 从文档中移除关于
compileall.compile_dir()和compileall.compile_file()函数的stripdir、prependdir和limit_sl_dest参数可以是bytes类型的声明。
测试¶
构建¶
gh-101522: 允许使用 MSBuild 属性覆盖 Windows 依赖项的版本和路径。
Windows¶
gh-101543: 确保注册表中的安装路径仅在标准库尚未通过任何其他方式定位时使用。
gh-101467:
py.exe启动器现在在仅安装单个运行时正确过滤。它还正确处理标签上的前缀匹配,以便-3.1不匹配3.11,但仍然匹配3.1-32。gh-101135: 恢复从
py.exe启动器启动旧版 32 位版本的能力,当同一版本的 32 位和 64 位安装都可用时。gh-82052: 修复了向控制台屏幕一次性写入超过 32K Unicode 输出可能导致乱码的问题。
gh-100320: 确保在从依赖现有安装提供其模块和标准库副本的不同 Python 副本启动时,使用安装中的
PythonPath注册表键。gh-100247: 恢复对
py.exe启动器在其配置文件中使用完整命令名查找 shebang 命令的支持。gh-100180: 将 Windows 安装程序更新至 OpenSSL 1.1.1s。
bpo-43984: 现在,
winreg.SetValueEx()在转换错误的情况下会保持目标值不变。此前,此类错误会写入-1。
macOS¶
gh-100180: 将 macOS 安装程序更新至 OpenSSL 1.1.1s
工具/示例¶
bpo-45256: 修复了一个在
python-gdb.py中当py-locals在没有帧的情况下使用时会导致抛出AttributeError的 bug。gh-100342: 在 Argument Clinic 的
*args解析中添加了对可能分配失败的缺失NULL检查。gh-64490: Argument Clinic varargs 错误修复
修复
_PyArg_UnpackKeywordsWithVararg()中的越界错误。修复了允许在clinic.py中有多个varargs的错误检查。
修复生成代码中
noptargs的错误计算。当存在vararg参数但没有可选参数时,不生成
noptargs。
C API¶
gh-99240: 在参数解析中,释放新分配的内存后,将其指针重置为 NULL。
Python 3.11.1 最终版¶
发布日期:2022-12-06
安全性¶
gh-100001:
python -m http.server不再允许垃圾请求中发送的终端控制字符被打印到 stderr 服务器日志中。这是通过修改
http.serverBaseHTTPRequestHandler的.log_message方法,在打印前将控制字符替换为\xHH十六进制转义序列来实现的。gh-98433: 由
socket或asyncio相关名称解析函数在 DNS 主机名上使用的 IDNA 编解码器解码器不再涉及二次方复杂度算法。这防止了在解码包含双向字符且超出规范的超长主机名时潜在的 CPU 拒绝服务攻击。某些协议(例如urllib的 http3xx重定向)可能允许攻击者提供此类名称。gh-98739: 更新捆绑的 libexpat 到 2.5.0
gh-97612: 修复了
get-remote-certificate.py示例脚本中的 shell 代码注入漏洞。该脚本不再使用 shell 来运行openssl命令。问题由 Caleb Shortt 报告并提供初步修复。补丁由 Victor Stinner 提供。
核心与内置函数¶
gh-99886: 修复了没有字典的对象释放其实例值时发生的崩溃。
gh-99891: 修复了分词器中的一个 bug,该 bug 在显示源代码第一行发生的语法警告时可能导致无限递归。由 Pablo Galindo 提供补丁。
gh-99729: 修复一个问题,该问题可能导致帧在销毁时对 Python 代码可见,可能引发内存损坏或解释器硬崩溃。
gh-99578: 修复了在创建第一个子解释器后
_imp.create_builtin()中针对模块builtins和sys的引用错误。补丁由 Victor Stinner 提供。gh-99581: 修复了一个错误,即当分词器从长度等于可用分词器缓冲区大小的文件中复制缺少换行符的行时会导致缓冲区溢出。补丁由 Pablo galindo 提供。
gh-99553: 修复
ExceptionGroup子类可以包装BaseException的 bug。gh-99370: 为从非安装的 python 在 POSIX 平台上创建的 venv 修复 zip 路径。
gh-99298: 修复可能导致某些字节码指令错误处理的问题。
gh-99205: 修复了阻止
PyThreadState和PyInterpreterState内存被正确释放的问题。gh-99204: 修复当在POSIX虚拟环境中使用python二进制副本且基础安装未提供venv使用的可执行名称时,
sys._base_executable的计算问题。计算将回退到替代名称("python<MAJOR>", "python<MAJOR>.<MINOR>")。gh-96055: 更新
faulthandler以发出包含正确意外信号号的错误消息。由Donghee Na提供补丁。gh-99153: 修复同时包含
except和except*的try块的SyntaxError位置。gh-99103: 修复当源代码行包含Unicode字符时,专用回溯锚点的错误报告位置。
gh-98852: 修复包含裸泛型类型或类似
TypeVar类型的类型别名的订阅:例如tuple[A, T][int]和tuple[TypeVar, T][int],其中A是泛型类型,T是类型变量。gh-98925: 降低 WASI 上 marshal 的递归深度以支持 wasmtime 2.0/main。
gh-98783: 修复在调试模式下使用
str子类而不是str本身时的多次崩溃。gh-99257: 修复了一个问题,即当通过无效类型的实例访问时,成员描述符(如
__slots__的描述符)可能会行为不正确或崩溃,而不是引发TypeError。gh-98374: 抑制help()命令无效查询时的ImportError。由Donghee Na提供补丁。
gh-96078:
os.sched_yield()现在在调用 sched_yield(2) 时释放 GIL。由 Donghee Na 提供补丁。gh-97943: 错误修复:
PyFunction_GetAnnotations()应当返回借入引用,而之前返回的是新引用。gh-97779: 确保所有Python框架对象都由“完整”框架支持。
gh-97591: 修复了
Exception.__setstate__()中缺少的incref/decref对。补丁由Ofey Chan提供。gh-94526: 修复用于初始化Python启动时
sys.path的Python路径配置。路径不再编码为UTF-8/strict以避免如果包含代理字符时出现编码错误(字节路径使用surrogateescape错误处理程序解码)。由Victor Stinner提供补丁。gh-95921: 修复用作分支条件的链式比较的过于宽泛的源位置信息。
gh-96387: 在 Python 退出时,有时持有 GIL 的线程会永远等待一个(通常是守护线程)请求放弃 GIL 的线程,而该线程已经退出。为了修复这个竞态条件,请求放弃 GIL 的线程现在在退出前重置其请求。问题由 Mingliang ZHAO 发现并分析。由 Victor Stinner 提供补丁。
gh-96864: 修复当操作码跟踪启用时,行跟踪事件引发异常可能导致断言失败、致命错误或
SystemError的问题。gh-96678: 修复 C 代码中的空指针算术未定义行为。
gh-96754: 确保所有创建的帧对象都是从有效的解释器帧创建的。防止回溯和信号处理程序中出现无效帧的可能性。
gh-95196: 禁用对 C 实现的类方法描述符的错误 pickling。
gh-96005: 在 WASI 上
ENOTCAPABLE现在被映射到PermissionError。该errno模块公开了这个新的错误号。当无法打开标志文件pybuilddir.txt和pyenv.cfg时,getpath.py现在会忽略PermissionError。bpo-31718: 当调用未初始化的
io.IncrementalNewlineDecoder对象的方法时,抛出ValueError而不是SystemError。由 Oren Milman 提供补丁。
库¶
gh-100001: 在 http.server BaseHTTPRequestHandler.log_message 中同样对 进行 转义,从而在技术上可以解析该行并重构原始数据。如果不这样做,xHH 会产生歧义,无法区分它是我们填入的十六进制替换还是原始请求行中传入的字符 r"x"。
gh-93453:
asyncio.get_event_loop()现在仅在隐式创建新事件循环时发出弃用警告。如果当前事件循环已设置,则不再发出弃用警告。gh-51524: 修复在调用 trace.CoverageResults 时使用有效的 infile 时的错误。
gh-99645: 修复
unittest.TestCase中处理类清理时的错误。现在addClassCleanup()为不同的TestCase子类使用单独的列表,而doClassCleanups()只清理特定的类。gh-97001: 在调用 termios API 时释放 GIL 以避免阻塞线程。
gh-99341: 修复
ast.increment_lineno(),使其在更改行号时也能覆盖ast.TypeIgnore。gh-99418: 修复
urllib.parse.urlparse()中的错误,该错误会导致以数字、加号或减号开头的 URL 方案被错误解析。gh-99382: 在包含
TypeVarTuple和一个或多个TypeVar的用户泛型中检查替换中的参数数量。gh-99379: 修复泛型别名中
ParamSpec后跟TypeVarTuple的替换问题。gh-99344: 修复用户泛型中
TypeVarTuple和ParamSpec一起替换的问题。gh-74044: 修复了
inspect.signature()报告装饰方法参数不正确的问题。gh-99275: 修复
ctypes中的SystemError,当__initsubclass__期间未设置异常时。gh-99277: 移除
asyncio.sslproto中旧版本的_SSLProtocolTransport.get_write_buffer_limits。gh-99248: 修复 verify() 中负数失败的问题。
gh-99155: 修复
statistics.NormalDist使用0和1协议时的 pickle 问题。gh-93464:
enum.auto()现在与其他赋值值结合使用时能正确激活。例如,ONE = auto(), 'some text'现在会评估为(1, 'some text')。gh-99134: 将捆绑的 pip 更新到版本 22.3.1。
gh-83004: 清理
_zoneinfo中模块初始化失败时的引用泄漏gh-83004: 清理
_pickle中模块初始化失败时的引用泄漏gh-83004: 清理
_io中模块初始化失败时的引用泄漏。gh-98897: 修复当两个点不具有相同维度时
math.dist()中的内存泄漏。由 Kumar Aditya 提供补丁。gh-98706: [3.11] 应用了来自 importlib_metadata 4.11.4 至 4.13 的更改,包括针对没有
_normalized_name的Distribution对象的兼容性和健壮性修复、禁止向Distribution.from_name传入无效输入,以及改进PathDistribution._name_from_stem和PathDistribution._normalized_name的行为。gh-98793: 修复
_overlapped.WSAConnect()和_overlapped.Overlapped.WSASendTo()函数中的参数类型检查。gh-98740: 修复
re模块中的内部错误,该错误在极少数情况下阻止编译包含 条件表达式 而没有 "else" 分支的正则表达式。gh-98703: 修复
asyncio.StreamWriter.drain()以在 Windows 上仅调用protocol.connection_lost回调一次。gh-98624: 向 unittest.mock.NonCallableMock 添加互斥锁以保护对模拟属性的并发访问。
gh-89237: 修复了在 Windows 上使用
ProactorEventLoop时,asyncio中subprocess.wait_closed()的挂起问题。由 Kumar Aditya 提供补丁。gh-98458: 修复 unittest 中当引发自引用链式异常时的无限循环问题
gh-97928:
tkinter.Text.count()现在会对以 "-" 开头的选项抛出异常,而不是静默忽略它们。gh-97966: 在
uname_result上,恢复了_fields和_asdict包括所有六个属性(包括processor)的期望。gh-98307: 向
SysLogHandler添加了一个createSocket()方法。gh-96035: 修复了
urllib.parse.urlparse()中的一个错误,该错误导致某些包含空格、下划线、加号和减号或非ASCII数字的端口号被错误地接受。gh-98178: 在 macOS 上,修复
syslog.syslog()在多线程应用程序中的崩溃问题。在 macOS 上,libcsyslog()函数不是线程安全的,因此syslog.syslog()不再释放 GIL 来调用它。由 Victor Stinner 提供补丁。gh-96151: 允许
BUILTINS作为冻结数据类的有效字段名。gh-87730: 在 urllib FTP 支持中一致地包装网络错误,因此当网络可用但无法访问公共互联网时,测试套件不会失败。
gh-98086: 确保
patch.dict()可以应用于异步函数。gh-90985: 在 3.11 早期版本中,我们弃用了
asyncio.Task.cancel("message")。我们意识到我们过于严厉,因此取消了弃用。gh-97837: 更改
unittest中的弃用警告消息,从返回一个值!=None 已被弃用to
从测试用例返回一个非 None 的值已被弃用gh-97825: 修复了当
subprocess.check_output()与参数input=None以及 encoding 或 errors 参数一起使用时引发的AttributeError。gh-82836: 修复
ipaddress模块中的is_private属性。此前非私有网络 (0.0.0.0/0) 从该方法返回 True;现在它们会正确返回 False。gh-96827: 当默认执行器清理被延迟到事件循环关闭之后(例如,由于键盘中断的结果)时,避免来自
asyncio的虚假回溯。gh-97592: 当传递恶意参数时,避免 C 版本的
asyncio.Future.remove_done_callback()崩溃。gh-73588: 修复
tkinter.Checkbutton的默认名称生成。以前,如果未指定参数 "name" 和 "variable",不同父部件中的复选框可以有相同的短名称并共享相同的状态。现在它们是全局唯一的。gh-97005: 将捆绑的 libexpat 更新到 2.4.9
gh-85760: 修复
asyncio中的竞争条件,其中process_exited()在pipe_data_received()之前被调用,导致输出不一致。补丁由 Kumar Aditya 提供。gh-96819: 修复
multiprocessing.resource_tracker中的检查,确保写入管道的长度不大于PIPE_BUF。gh-96741: 修正了数据类属性
pstats.FunctionProfile.ncalls的类型注解为str。gh-95987: 修复
Any子类的repr。gh-96052: 在
codeop.compile_command()中检查不完整输入时修复处理编译器警告(SyntaxWarning 和 DeprecationWarning)的问题。以前它会发出警告并引发 SyntaxError。现在对于不完整输入,它总是返回None,而不发出任何警告。gh-88863: 为了避免
asyncio.open_connection()引发时出现明显的内存泄漏,打破由局部异常和 future 实例(其成员变量为异常实例)生成的引用循环。由 Dong Uk, Kang 提供补丁。gh-91212: 修复当追踪器关闭时 turtle 窗口的闪烁问题。由 Shin-myoung-serp 提供补丁。
gh-88050: 修复
asyncio子进程传输,以便在进程被阻塞时干净地杀死进程,并避免在循环关闭时出现RuntimeError。由 Kumar Aditya 提供补丁。gh-93858: 防止在嵌套的 fish 实例中激活 venv 时出错。
gh-91078:
TarFile.next()现在在调用空的 tarfile 时返回None。bpo-47220: 文档化
WeakMethod的可选 callback 参数。由 Géry Ogam 提供补丁。bpo-38523:
shutil.copytree()现在递归应用 ignore_dangling_symlinks 参数。bpo-36267: 修复了当
store_true动作被赋予显式参数时,在argparse.ArgumentParser中出现的 IndexError。
文档¶
gh-92892: 文档说明在 macOS/arm64(以及其他可能的平台)上使用 ctypes 调用可变参数函数需要特别注意。
gh-85525: 移除额外的行
gh-95588: 澄清了
ast文档中关于ast.literal_eval()对不可信输入“安全”使用的冲突建议,同时警告它可能会崩溃进程。后一种说法是正确的,并且被认为在不适合 bugfix 的大量工作下无法修复。因此我们保留警告,不再声称literal_eval是安全的。bpo-41825: 重构了
os.wait*系列函数的文档,并通过更多解释可能的参数常量改进了os.waitid()的文档。
测试¶
gh-99892: 如果无法从 pythontest.net 下载 NormalizationTest.txt 文件,则跳过 test_unicodedata 的 test_normalization()。由 Victor Stinner 提供补丁。
gh-99934: 在(32 位)x86 上修正 test_marsh:test_deterministic sets 失败。
gh-99659:
test_sqlite3中的可选大内存测试现在在传递过大的字符串和/或 blob 时捕获正确的sqlite.DataError异常类型。gh-98713: 修复了
typing测试中的一个错误,该错误中一个依赖 CPython 特定实现细节的测试未被装饰为@cpython_only,也未在其他实现上跳过。gh-87390: 为 PEP 646 添加了星号解包测试,以及其他一些杂项 PEP 646 测试。
gh-96853: 将
Py_Initialize(以及Py_InitializeEx) 的显式覆盖添加回嵌入测试(Python 3.11 中所有其他嵌入测试已迁移到Py_InitializeFromConfig)。bpo-34272: 一些 C API 测试被移到了新的 Lib/test/test_capi/ 目录。
构建¶
gh-99086: 修复 configure 检查中的
-Wimplicit-int、-Wstrict-prototypes和-Wimplicit-function-declaration编译器警告。gh-99337: 修复在 macOS 上使用 GCC 12 时的编译问题。
gh-99086: 修复了在 configure 检查
PTHREAD_SCOPE_SYSTEM时的-Wimplicit-int编译器警告。gh-98872: 修复了Python 3.11中
Programs/_freeze_module.c可能存在的文件描述符泄漏问题。gh-99016: 修复了使用
PYTHON_FOR_REGEN=python3.8时的构建问题。gh-97731: 为
make docclean指定了源位置的完整路径(跨构建所需)。gh-98707: 如果向 configure 传入了
--with-system-libmpdec,则不使用自带的libmpdec头文件。如果向 !configure 传入了--with-system-expat,则不使用自带的libexpat头文件。gh-96761: 修复 _bootstrap_python 的 clang 编译器构建过程,如果应用了 LTO 优化。由 Matthias Görgens 和 Donghee Na 提供补丁。
gh-96883: 浏览器的
wasm32-emscripten构建现在包括concurrent.futures用于asyncio和unittest.mock。gh-84461:
wasm32-emscripten平台不再构建resource模块,getresuid(),getresgid(),以及它们的设置器。这些 API 是存根且不可用。gh-94280: 在Windows上更新了pegen重新生成脚本,以查找并使用Python 3.9或更高版本。在此之前,pegen重新生成已经要求3.9或更高版本,但脚本可能使用了较低版本的Python。
Windows¶
gh-99345: 使用更快的初始化函数来检测Windows Store包的安装位置
gh-98629: 修复Windows上
sys.version和sys._git的初始化问题gh-99442: 修复当
argv[0]不包含文件扩展名时 适用于Windows的Python启动器 中的处理问题。gh-98689: 将Windows构建更新至zlib v1.2.13。v1.2.12有 CVE-2022-37434,但Python未使用易受攻击的
inflateGetHeaderAPI。gh-98790: 假设缺失的
DLLs目录意味着标准扩展模块位于可执行文件的目录中。gh-98745: 更新
py.exe启动器,默认安装3.11,按请求安装3.12。gh-98692: 修复 适用于Windows的Python启动器 忽略无法识别的shebang行而不是将它们视为本地路径的问题。
gh-94328: 更新Windows安装程序以使用SQLite 3.39.4。
gh-97728: 修复了在Windows上
os.system()和Windows特定模块(如winreg)中传递无效参数时使用未初始化变量可能导致的崩溃。gh-96965: 将libffi更新至3.4.3。
gh-94781: 修复 Windows 上的
pcbuild.proj以清理Python\deepfreeze和Python\frozen_modules目录中先前生成的输出文件实例。补丁由 Charlie Zhao 提供。bpo-40882: 修复Windows上
multiprocessing.shared_memory.SharedMemory中的内存泄漏问题。
macOS¶
IDLE¶
gh-97527: 修复了之前的一个 bug,该 bug 导致在运行 3.10.8、3.12.0a1 和至少 Microsoft Python 3.10.2288.0 且未安装 Lib/test 包时,IDLE 无法启动。3.11.0 从未受到影响。
工具/示例¶
C API¶
gh-98680:
PyBUF_*常量被标记为Python 3.11+的有限API的一部分。这些在3.11.0版本中可用,定义了Py_LIMITED_API为3.11,并且是使用缓冲区API所必需的。gh-98978: 修复在
Py_SetPythonHome(NULL)、Py_SetProgramName(NULL)和_Py_SetProgramFullPath(NULL)函数调用中的释放后使用问题。 问题由 Benedikt Reinartz 报告,由 Victor Stinner 提供补丁。gh-96853:
Py_InitializeEx现在在初始化解释器后正确调用PyConfig_Clear(遗漏没有导致内存泄漏只是因为包装函数没有填充任何动态分配的配置字段)
Python 3.11.0 最终版¶
发布日期:2022-10-24
安全性¶
gh-97616: 修复列表乘以整数(
list *= int)的问题:当新分配的长度接近最大大小时检测整数溢出。问题由Jordan Limor报告,由Victor Stinner提供补丁。gh-97514: 在Linux系统上,
multiprocessing模块恢复使用基于文件系统的Unix域套接字与 forkserver 进程通信,而不是使用Linux抽象套接字命名空间。只有选择使用 "forkserver"启动方法 的代码会受到影响。抽象套接字没有权限设置,可能允许同一 network namespace (通常是整个系统) 内的任何用户向 multiprocessing 的 forkserver 进程注入代码。 这是一个潜在的特权提升风险。基于文件系统的套接字权限将这一行为限制为 forkserver 进程的用户,这是 Python 3.8 及更早版本的默认行为。
This prevents Linux
:cve:`2022-42919<https://cve.mitre.org/cgi-bin/cvename.cgi?name=:cve:2022-42919>`_.
核心与内置函数¶
gh-97002: 修复了一个问题,其中多个帧对象可能由同一个解释器帧支持,可能导致内存损坏和解释器的硬崩溃。
gh-97752: 修复访问新创建的生成器或协程框架的
f_back成员时可能出现的数据损坏或崩溃问题。gh-96975: 修复当调用
PyEval_GetFrame()时最顶层的Python框架处于部分初始化状态时发生的崩溃。gh-96848: 修复命令行解析:当
PYTHONINTMAXSTRDIGITS环境变量设置为有效限制时,拒绝没有值的-X int_max_str_digits选项(无效)。由Victor Stinner提供补丁。gh-96821: 修复
_testcapimodule.c中的未定义行为。gh-95778: 当整数超过限制时引发
ValueError时,在错误消息中提到sys.set_int_max_str_digits()函数。由 Victor Stinner 提供补丁。gh-96587: 在 Python 3.11 之前的版本中,正确地针对异常组 (PEP 654) 抛出
SyntaxError。bpo-42316: 记录一些需要括号的赋值表达式的地方。
库¶
gh-98331: 将捆绑的 pip 和 setuptools 的副本分别更新到 22.3 和 65.5.0 版本。
gh-90985: 在 3.11 早期版本中,我们弃用了
asyncio.Task.cancel("message")。我们意识到我们过于严厉,因此取消了弃用。gh-97545: 使 Semaphore 运行得更快。
gh-96865: 修复 Flag 以使用边界 CONFORM
这恢复了 Flag 以前的行为,即允许组合具有非顺序值的标志;例如。
class Skip(Flag): TWO = 2 EIGHT = 8
Skip.TWO | Skip.EIGHT -> <Skip.TWO|EIGHT: 10>
gh-90155: 修复当获取被取消时损坏的
asyncio.Semaphore。
文档¶
测试¶
gh-95027: 在 Windows 上,当 Python 测试套件使用
-jN选项运行时,现在将 ANSI 代码页用作 stdout 临时文件的编码,而不是使用可能导致解码错误的 UTF-8。补丁由 Victor Stinner 提供。
构建¶
gh-96729: 确保使用
Tools\msi\buildrelease.bat构建的 Windows 版本可以升级到官方 Python 版本,也可以从官方 Python 版本升级。
Windows¶
gh-98360: 修复了
multiprocessing在Windows上从虚拟环境生成子进程的问题,以确保同样使用multiprocessing生成更多子进程的子进程能够识别它们处于虚拟环境中。gh-98414: 修复在环境变量或配置文件中设置了默认首选项时
py.exe启动器对-V:<company>/选项的处理。gh-90989: 澄清了 Windows 安装程序中的部分文本。
macOS¶
gh-97897: macOS 13 SDK 包含对
mkfifoat和mknodat系统调用的支持。如果在使用 macOS 13 SDK 构建的 cpython 但在较早版本的 macOS 上运行时,使用dir_fd选项与os.mkfifo()或os.mknod()可能导致段错误。通过添加对这些系统调用的运行时支持检测(“弱链接”)来防止这种情况,就像在 macOS 上对其他更新的系统调用所做的那样。
Python 3.11.0 候选发布版 2¶
发布日期:2022-09-11
安全性¶
gh-95778: Converting between
intandstrin bases other than 2 (binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal) now raises aValueErrorif 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<https://cve.mitre.org/cgi-bin/cvename.cgi?name=:cve:2020-10735>`_.此新限制可以通过环境变量、命令行标志或
sysAPI 进行配置或禁用。请参阅 整数字符串转换长度限制 文档。默认限制为字符串形式下的 4300 位数字。补丁由 Gregory P. Smith [Google] 和 Christian Heimes [Red Hat] 提供,并获得了 Victor Stinner、Thomas Wouters、Steve Dower、Ned Deily 和 Mark Dickinson 的反馈。
核心与内置函数¶
gh-96678: 修复 ceval.c 中的未定义行为情况。
gh-96641: 不在
_functools中公开KeyWrapper。gh-96636: 确保跟踪
sys.setrace()立即开启。在 3.11 的预发布版本中,当在__del__方法或中断中开启跟踪时,可能会丢失一些跟踪事件。gh-96572: 修复跟踪引用构建模式中的释放后使用问题。由 Kumar Aditya 提供补丁。
gh-96611: 当在多行字符串中加载包含无效 UTF-8 的文件时,会发出正确的 SyntaxError。
gh-96612: 确保不完整的帧不会出现在 tracemalloc 跟踪中。
gh-96569: 通过添加 NULL 检查,移除两种未定义行为的情况。
gh-96582: 修复
_PyThread_CurrentFrames中可能的NULL指针解引用问题。由 Kumar Aditya 提供补丁。gh-96352: 修复
AttributeError在object.__getattribute__()中缺少name和obj属性的问题。由 Philip Georgi 提供补丁。gh-96268: 加载包含无效 UTF-8 编码的文件现在会在正确的位置报告损坏的字符。
gh-96187: 修复了一个导致
_PyCode_GetExtra对于负索引返回垃圾值的 bug。由 Pablo Galindo 提供补丁gh-96071: 修复了在分配新线程状态时
PyGILState_Ensure()中的死锁问题。由 Kumar Aditya 提供补丁。gh-96046:
PyType_Ready()现在初始化ht_cached_keys并执行额外检查以确保类型对象正确配置。这避免了不使用常规 API 创建新类型的第三方包中的崩溃。gh-95818: 在
PyThreadState_GetFrame()中跳过不完整的帧。gh-95876: 修复
_PyPegen_raise_error_known_location中的格式字符串,该字符串在某些64位系统上可能导致内存损坏。该函数在为Py_ssize_t参数构建元组时使用了i(int) 而不是n(Py_ssize_t) 。gh-94996:
ast.parse()在传递的feature_version小于(3, 8)时,将不再解析带有位置唯一参数(positional-only params)的函数定义。由 Shantanu Jain 提供补丁。
库¶
gh-96652: 如果
sigaction()函数不可用,则修复faulthandler.register(signal, chain=True)的 faulthandler 实现:如果之前的信号处理器为 NULL,则不调用它。由 Victor Stinner 提供补丁。gh-68163: 修正
numbers.Rational到float的转换。gh-96385: 修复
TypeVarTuple.__typing_prepare_subst__。在使用多个TypeVarTuple时,如类型别名替换中的[*T, *V],未引发TypeError。gh-90467: 修复
asyncio.streams.StreamReaderProtocol以保持对创建的任务的强引用,从而避免被垃圾回收。gh-96159: 修复日志 TimedRotatingFileHandler 中的性能回归问题。仅在滚动时间过去时检查特殊文件。
gh-96175: 修复
xml.dom.minidom中Attr类未使用的localName参数。gh-96125: 修复导致
sys.thread_info.name在 pthread 平台上错误的错误条件。gh-95463: 移除来自 bpo-28080 的不兼容更改,该更改导致了一个回归问题,即忽略了
ZipInfo.flag_bits中的 utf8。由 Pablo Galindo 提供补丁。gh-95899: 修复
asyncio.Runner使其只调用asyncio.set_event_loop()一次,以避免在子监视器上多次调用attach_loop()。由 Kumar Aditya 提供补丁。gh-95736: 修复
unittest.IsolatedAsyncioTestCase在调用设置函数之前设置事件循环。由 Kumar Aditya 提供补丁。gh-95704: 当一个任务捕获
asyncio.CancelledError并引发其他错误时,其他错误通常不应被静默抑制。gh-95231: 如果在加载
crypt方法时引发EPERM或ENOSYS,则会优雅地失败。当尝试在启用了 FIPS 的 Linux 内核上加载MD5时可能会发生这种情况。gh-74116: 允许
asyncio.StreamWriter.drain()被多个任务并发等待。由 Kumar Aditya 提供补丁。gh-92986: 修复当
ImportFrom.level为 None 时的ast.unparse()
文档¶
测试¶
gh-95243: 通过在失败前尝试多次找到未使用的端口,缓解了在 testSockName() 中使用 find_unused_port() 固有的竞态条件。由 Ross Burton 提供补丁。
构建¶
gh-94682: 使用 OpenSSL 1.1.1q 进行构建和测试
Windows¶
Python 3.11.0 候选发布版 1¶
发布日期:2022-08-05
核心与内置函数¶
gh-95150: 更新代码对象的哈希和相等性考虑,以考虑所有调试和异常处理表。这修复了在编译过程中某些非相同代码对象可能被"去重"的问题。
gh-95355:
_PyPegen_Parser_New现在能正确检测令牌内存分配错误。补丁由Honglin Zhu提供。gh-90081: 在追踪器/分析器函数中以全速运行Python代码。修复了早期3.11版本中的速度下降问题。
gh-95324: 在调试模式下,如果对象在释放前未调用
PyObject_GC_UnTrack(),则发出警告。由Pablo Galindo提供补丁。gh-95185: 防止在编译一些极长表达式如
"+0"*1000000时AST构造器崩溃。现在会改为抛出RecursionError。由Pablo Galindo提供补丁。gh-93351: 现在,当向
compile()和其他相关函数提供ast.AST节点位置时,会验证这些位置。如果检测到无效位置,将抛出ValueError。gh-94938: 修复当关键字参数名称是重载了
__eq__和__hash__的 str 子类实例时,某些内置函数中的错误检测。之前这可能导致 SystemError 或其他不希望的行为。
库¶
gh-95609: 更新捆绑的 pip 到 22.2.2 版本。
gh-95289: 修复
asyncio.TaskGroup,使其在asyncio.CancelledError被上下文管理器替换为另一个异常时传播异常。补丁由 Kumar Aditya 和 Guido van Rossum 提供。gh-95339: 更新捆绑的 pip 到 22.2.1。
gh-95045: 通过在调用任何回调之前取消跟踪,修复在释放
_lsprof.Profiler时的 GC 崩溃。由 Kumar Aditya 提供补丁。gh-95097: 为没有
uncancel()方法的asyncio.Task实现修复asyncio.run()。由 Kumar Aditya 提供补丁。gh-93899: 修复在不存在
os.EFD_CLOEXEC、os.EFD_NONBLOCK和os.EFD_SEMAPHORE标志的旧版内核上对这些标志是否存在的检查。补丁由 Kumar Aditya 提供。gh-95166: 修复
concurrent.futures.Executor.map(),使其在错误(例如 TimeoutError 或 KeyboardInterrupt)时取消当前等待的 future。gh-95109: 确保已过期的时间调度(使用
asyncio.Timeout)能够被及时传递。gh-91810: 在使用
encoding='unicode'和xml_declaration=None的ElementTree.write()中,抑制在打开的文件中写入 XML 声明。gh-91447: 修复 xml 模块中的 findtext,使其仅在 text 属性设为 None 时才返回空字符串。
文档¶
gh-91207: 修复了 Windows CHM htmlhelp 文档中样式表不起作用的问题,并添加了它们已被弃用的警告。由 C.A.M. Gerlach 贡献。
gh-95451: 更新了库文档,添加了关于 WebAssembly 平台
wasm32-emscripten和wasm32-wasi的 availability information。gh-95415: 对平台可用性使用一致的语法。该指令现在支持内容体,并在遇到未知平台时发出警告。
gh-86128: 文档化 ThreadPoolExecutor 中的一个限制,即其退出处理程序在任何 atexit 处理程序之前执行。
测试¶
gh-95573: Lib/test/test_asyncio/test_ssl.py 暴露了 macOS 内核中的一个 bug,其中非阻塞套接字上的高强度并发负载偶尔会导致
errno.ENOBUFS(“无缓冲区空间可用”) 被发出。已向 Apple 提交 FB11063974,同时作为一种临时解决方案,减少在 macOS 上测试中使用的缓冲区大小以避免间歇性失败。由 Fantix King 提供补丁。gh-95280: 修复了在需要完美前向保密(PFS)密码的系统上
test_ssltest_get_ciphers的问题。
构建¶
gh-94801: 修复
configure脚本中的一个回归,该回归导致某些头文件检查忽略自定义的CPPFLAGS。该回归在 gh-94802 中引入。gh-95145: wasm32-wasi 构建不再依赖 WASIX 的 pthread 存根。Python 现在有自己的存根 pthread API。
gh-95174: Python 现在检测 WASI 中缺失的
dup函数,并解决一些缺失的errno,select,和socket常量。gh-95174: Python 现在在 WASI 上跳过缺失的
socket函数和方法。WASI 只能从现有的 fd 创建套接字 / accept 并且没有 netdb。gh-95085: 平台
wasm32-unknown-emscripten和wasm32-unknown-wasi已被提升为 PEP 11 第3层平台支持。
Windows¶
gh-95656: 启用
enable_load_extension()sqlite3API。gh-95587: 修复了 Windows 安装程序在升级时错误检测现有安装的某些功能的问题。
gh-94399: 恢复了 适用于Windows的Python启动器 对于
/usr/bin/envshebang 行的行为,现在将在PATH中搜索与给定命令匹配的可执行文件。如果没有找到,则使用通常的搜索过程。gh-95445: 修复了在使用 Windows msi 卸载时未能成功删除 HTML 文档目录的问题。
gh-95359: 修复 适用于Windows的Python启动器 对
py.ini命令的处理(它错误地期望键上有py_前缀)以及在读取每用户配置文件时的崩溃问题。gh-95285: 修复 适用于Windows的Python启动器 处理仅传递短可执行名称的命令行的问题。
IDLE¶
C API¶
gh-92678: 恢复了 3.10 的行为,对于在结构体末尾存储字典的 C 扩展类支持多重继承。
gh-94936: 添加了
PyCode_GetVarnames()、PyCode_GetCellvars()和PyCode_GetFreevars(),用于通过 C API 分别访问co_varnames、co_cellvars和co_freevars。
Python 3.11.0 beta 5¶
发布日期:2022-07-25
核心与内置函数¶
gh-93351: 现在,当向
compile()和其他相关函数提供ast.AST节点位置时,会验证这些位置。如果检测到无效位置,将抛出ValueError。gh-94438: 修复了一个问题,该问题导致在计算对帧对象的
f_lineno属性赋值的有效跳转目标时,忽略扩展操作码参数和一些条件弹出。在某些情况下,这可能导致内部状态不一致,导致解释器硬崩溃。gh-95060: 未记录的
PyCode_Addr2Location函数现在在addrq参数小于零时正确返回。gh-95113: 在非快速化代码中,将所有
EXTENDED_ARG_QUICK指令替换为基本的EXTENDED_ARG指令。非自适应字节码的使用者应该能够以与CPython 3.10及更早版本相同的方式处理扩展参数。gh-91409: 修复由字节码编译器中的某些优化引起的错误源代码位置信息。
gh-94036: 修复一些多行属性访问和方法调用的错误源代码位置信息。
gh-94739: 允许在调试器中跳入、跳出以及跨异常处理器跳转。
gh-94949:
ast.parse()在传递的feature_version小于(3, 9)时,将不再解析带括号的上下文管理器。由 Shantanu Jain 提供补丁。gh-94947:
ast.parse()在传递的feature_version小于(3, 8)时,将不再解析赋值表达式。由 Shantanu Jain 提供补丁。gh-91256: 确保解释器启动期间帮助文本的程序名称是已知的。
gh-94822: 修复当类本身也存在同名属性时,元类描述符的查找可能被忽略的问题。
gh-91153: 修复
bytearray项赋值在通过新值的__index__()方法调整大小时可能崩溃的问题。gh-90699: 修复
bool.__repr__()中的引用计数错误。由 Kumar Aditya 提供补丁。
库¶
gh-95199: 更新捆绑的 setuptools 到 63.2.0。
gh-95194: 更新捆绑的 pip 到 22.2。
gh-95132: 修复了
sqlite3的一个回归问题,即*args和**kwds被错误地从connect()转发给Connection工厂函数。该回归问题是在 3.11a1 中由 PR 24421 (gh-85128) 引入的。补丁由 Erlend E. Aasland 提供。gh-93157: 修复
fileinput模块在inplace为 true 时不支持errors选项的问题。gh-95105:
wsgiref.types.InputStream.__iter__()应返回Iterator[bytes],而不是Iterable[bytes]。由 Shantanu Jain 提供补丁。gh-94857: 修复
_io.TextIOWrapper.reconfigure中的内存泄漏。补丁由 Kumar Aditya 提供。gh-94821: 修复 Linux 上 Unix 套接字绑定到空地址时使用抽象命名空间中的可用地址,而不是 "0"。
gh-89988: 修复
pickle.Pickler在查找dispatch_table时的内存泄漏。补丁由 Kumar Aditya 提供。
测试¶
gh-95212: 使多进程测试用例
test_shared_memory_recreate并行安全。
构建¶
gh-94847: 修复了在 GCC 使用 LTO 和 pydebug 编译时
_decimal模块的构建问题。调试构建不再强制内联函数。gh-94841: 修复了使用 MSVC 版本 1932 编译的
PyObject_Free()可能的性能回归。gh-94801:
configure现在在搜索头文件和库时使用自定义标志如ZLIB_CFLAGS和ZLIB_LIBS。gh-94773:
deepfreeze.py现在支持包含不兼容、不可排序类型的 frozensets 的代码对象。
Windows¶
C API¶
gh-92678: 添加了不稳定的 C-API 函数
_PyObject_VisitManagedDict和_PyObject_ClearManagedDict,允许 C 扩展让虚拟机管理它们的对象字典。gh-94930: 修复了当
PyArg_ParseTupleAndKeywords()与#在(...)中一起使用但未定义PY_SSIZE_T_CLEAN时引发的SystemError。gh-94864: 修复使用已弃用格式单元 "u" 和 "Z" 的
PyArg_Parse*。此前当警告被转为异常时它会返回 1(成功)。gh-94731: Python 在使用 C++ 编译时,再次对大多数类型转换操作使用 C 风格的转换。这可能会触发编译器警告,如果它们是通过例如
g++的-Wold-style-cast或-Wzero-as-null-pointer-constant选项启用的。
Python 3.11.0 beta 4¶
发布日期:2022-07-11
安全性¶
gh-87389:
http.server: 修复了HTTP服务器中当URI路径以//开头时的开放重定向漏洞。漏洞由Hamza Avvan发现并提出了初步修复方案。gh-79096: LWPCookieJar和MozillaCookieJar创建的文件模式改为600而非644(Microsoft Windows不受影响)
gh-92888: 修复了在某些情况下访问底层缓冲区时的
memoryview释放后使用问题。gh-68966: 已弃用的mailcap模块现在拒绝将不安全的文本(文件名、MIME类型、参数)注入到shell命令中。它将发出警告并视为未找到匹配(或对于测试命令,视为测试失败),而不是使用此类文本。
核心与内置函数¶
gh-94694: 修复可能导致具有多行方法查找的代码具有误导性或错误的列偏移信息的问题。在某些情况下(当编译手动构建的 AST 时),这可能导致解释器硬崩溃。
gh-93252: 修复导致内部帧在失败的 Python 函数调用后仍然存活的问题,可能导致内存泄漏或解释器硬崩溃。
gh-94215: 修复了一个问题,即由行追踪事件引发的异常会导致帧处于无效状态,可能导致解释器硬崩溃。
gh-92228: 对于与源代码行相关联的退出块,禁用编译器的内联小退出块优化。这修复了一个bug,即调试器无法区分异常处理器的结束和后续代码块的开始。
gh-94438: 在设置帧中的行号时,考虑可以推NULL到堆栈的指令。防止一些(不太可能的)崩溃。
gh-91719: 在解释器主循环中引发
unknown opcode error时重新加载opcode,以便C编译器独立生成调度代码。gh-94329: 编译并运行具有极大序列(1000多个元素)解包的代码。此类代码之前无法编译。现在可以正确编译并运行。
gh-94360: 修复了当从
stdin读取带有语法错误的非utf-8编码文本文件时,分词器崩溃的问题。由Pablo Galindo提供补丁。gh-88116: 修复了当从代码对象读取行号时,如果编码的行号接近
INT_MIN时的问题。由Pablo Galindo提供补丁。gh-94262: 不为不完整的帧创建帧对象。防止Python和C扩展可以观察到生成器和闭包的创建,恢复了3.10及更早版本的行为。
gh-94192: 修复了字典字面量中值表达式无效时的错误。
gh-93883: 修订了回溯增强错误位置的显示策略。指示器仅在位置不跨越整行时显示。
gh-94021: 修复
Python/specialize.c中不可达代码的警告。gh-93516: 在代码对象中存储第一个可跟踪指令的偏移量,以避免在跟踪时对每个指令重新计算。
gh-93516: 延迟创建将字节码偏移量映射到行号的表,以加快跟踪时行号的计算速度。
gh-89828:
types.GenericAlias不再中继__class__属性。例如,isinstance(list[int], type)不再返回True。gh-93671: 修复在匹配语句中深度嵌套序列模式时发生的一些指数回溯情况。由 Pablo Galindo 提供补丁。
gh-93662: 确保在多行方法调用中结束列偏移是正确的。以前,结束列可能会在列偏移之前。
gh-93461:
importlib.invalidate_caches()现在会从sys.path_importer_cache中删除以相对路径为名称的条目。这解决了进程改变其当前工作目录时的缓存问题。FileFinder不再在路径中插入点,例如/egg/./spam现在是/egg/spam。gh-93418: 修复了一个断言错误,其中 f-string 在表达式后有一个等号 '=',但没有尾随的大括号。例如,f"{i="。
gh-93382: 缓存
PyCode_GetCode()函数的结果,以恢复co_code属性的 O(1) 查找。gh-93354: 在解释器中对专门化计数器使用指数退避。可以显著减少失败专门化的数量,并避免对程序中不适合专门化的部分造成减速。
gh-93021: 修复了在 C 中实现的
__get__()方法的__text_signature__。补丁由 Jelle Zijlstra 提供。gh-92930: 修复了在
__reduce__或persistent_id期间修改集合导致的_pickle.c崩溃。gh-92914: 总是将列表的分配大小向上舍入到最近的偶数。
gh-92858: 改进在 ':' 之前有语法错误的某些套件的错误消息。
bpo-46142: 通过将一些信息移至新的命令行选项
--help-env和--help-xoptions,使--help输出更简短。同时添加--help-all选项以打印完整用法。
库¶
gh-94736: 修复在释放
_multiprocessing.SemLock子类实例时的崩溃问题。由 Kumar Aditya 提供补丁。gh-94637:
SSLContext.set_default_verify_paths()现在在SSL_CTX_set_default_verify_paths调用周围释放 GIL。该函数调用执行 I/O 和 CPU 密集型工作。gh-94607: 修复在
typing中使用类型变量子类化复杂泛型的问题。之前会显示错误消息Some type variables ... are not listed in Generic[...]。typing不再用 Python 类的__parameters__填充__parameters__。gh-93910: 恢复了访问枚举上其他值的能力(例如
Color.RED.BLUE),以修复性能回归问题。gh-93896: 修复
asyncio.run()和unittest.IsolatedAsyncioTestCase以始终设置事件循环,如同在 Python 3.10 及更早版本中所做的那样。由 Kumar Aditya 提供补丁。gh-94510: 对
sys.setprofile()和sys.settrace()的重新进入调用现在会引发RuntimeError。由 Pablo Galindo 提供补丁。gh-92336: 修复了
linecache.getline()在坏文件上因UnicodeDecodeError或SyntaxError而失败的错误。根据文档,现在它返回一个空字符串。gh-94398: 一旦
asyncio.TaskGroup开始关闭(即,至少一个任务失败并且任务组开始取消剩余任务),就不应再向任务组添加新任务。gh-94207: 使
_struct.Struct接受垃圾回收跟踪,以修复_struct模块中的引用泄漏。gh-94101: 不再允许手动实例化
ssl.SSLSession对象,因为这会导致配置错误的实例,在访问其属性时解释器崩溃。gh-84753:
inspect.iscoroutinefunction()、inspect.isgeneratorfunction()和inspect.isasyncgenfunction()现在能正确地为鸭子类型的函数式对象(如unittest.mock.AsyncMock的实例)返回True。这使得
inspect.iscoroutinefunction()的行为与asyncio.iscoroutinefunction()保持一致。由 Mehdi ABAAKOUK 提供补丁。gh-94028: 修复
sqlite3中的一个回归问题,其中语句对象在游标迭代器使用后未被正确清除和重置。该回归问题由 Python 3.11a1 中的 PR 27884 引入。由 Erlend E. Aasland 提供补丁。gh-93847: 修复泛型别名枚举的 repr。
gh-93820: 修复了一个回归问题,当
copy.copy()-ing 带有多个标志成员的enum.Flag时。gh-79512: 修复了
weakref模块中ReferenceType、ProxyType、CallableProxyType类的名称和__module__值,使它们可以被 pickle。gh-93626: 将
__future__.annotations的NonemandatoryRelease 设置为表示当前为“待定”。gh-90494: 如果
__reduce__()返回长度为6的元组,copy.copy()和copy.deepcopy()现在总是会引发 TypeError,而不是静默忽略第6项或产生不正确的结果。gh-90549: 修复了一个多进程错误,其中在创建子进程(与 fork 相对)时,全局命名资源(如信号量)可能会泄漏。
gh-93521: 修复了一个情况,其中数据类会尝试将
__weakref__添加到已经在其基类中定义了weakref_slot=True的数据类的__slots__中。这会导致在创建新类时引发TypeError。gh-79579:
sqlite3现在能正确检测带有前导注释的 DML 查询。由 Erlend E. Aasland 提供补丁。gh-93421: 当 DML 语句运行完成时更新
sqlite3.Cursor.rowcount。这修复了像UPDATE ... RETURNING这样的 SQL 查询的行计数。由 Erlend E. Aasland 提供补丁。gh-91162: 支持在
TypeVar和TypeVarTuple参数上解包任意长度的元组拆分。例如:A[T, *Ts][*tuple[int, ...]]->A[int, *tuple[int, ...]]A[*Ts, T][*tuple[int, ...]]->A[*tuple[int, ...], int]
gh-93353: 修复
importlib.resources.as_file()上下文管理器,在Python最终化过程中如果被延迟销毁则删除临时文件:保留对os.remove()函数的本地引用。由 Victor Stinner 提供补丁。gh-83658: 如果
maxtasksperchild不是None或正整数,则使multiprocessing.Pool抛出异常。gh-93156: 使用负索引值访问绝对路径的
pathlib.PurePath.parents序列会产生不正确的结果。gh-74696:
shutil.make_archive()在创建标准.zip或 tar 归档文件时不再临时更改当前工作目录。gh-89973: 修复了如果在模式中包含上限低于下限的字符范围(例如
[c-a])时fnmatch中引发的re.error。现在这样的范围被解释为空范围。gh-92932: 现在
dis()和get_instructions()处理以EXTENDED_ARG_QUICK为前缀的指令的操作数值。补丁由 Sam Gross 和 Donghee Na 提交。gh-91577: 将
SharedMemory方法中的导入移动到模块级别,以便它们可以在Python终止的后期执行。gh-91456: 弃用当前的默认auto()行为:在3.13版本中,auto()的默认行为将始终返回最大成员值加1,并在使用不兼容的值类型时引发错误。
bpo-47231: 修复了tarfile长名字目录中不一致的尾部斜杠问题。
bpo-46755: 在
QueueHandler中,清除LogRecord中的stack_info以防止堆栈跟踪被写入两次。bpo-45924: 修复了
asyncio在多次引发 future 的异常时的错误回溯。由 Kumar Aditya 提供补丁。bpo-34828:
sqlite3.Connection.iterdump()现在可以处理在一个或多个表中使用AUTOINCREMENT的数据库。
文档¶
gh-94321: 文档化 PEP 246 风格的协议类型
sqlite3.PrepareProtocol。gh-61162: 澄清
sqlite3在 如何使用连接上下文管理器 时的行为。gh-86986: 构建文档所需的最低 Sphinx 版本现在是 3.2。
gh-88831: 扩充了 asyncio.create_task() 的文档。阐明了保持对任务的强引用的必要性,并添加了一个详细介绍如何执行此操作的代码片段。
bpo-47161: 文档说明
pathlib.PurePath不会合并开头的双斜杠,因为它们表示 UNC 路径。
测试¶
gh-91330: 为
dataclasses添加了更多测试,以覆盖基于数据描述符的字段的行为。gh-94208:
test_ssl现在在更多测试中检查支持的 TLS 版本和协议。gh-94315: 测试现在检查 DAC 覆盖能力,而不是依赖于
os.geteuid()。gh-93951: 在 test_bdb.StateTestCase.test_skip 中,避免包括辅助导入器。
gh-93957: 在 test_venv.EnsurePipTest.test_with_pip 中提供来自子进程的更友好的错误报告。
gh-84461:
run_tests.py现在正确处理交叉编译环境变量,并将HOSTRUNNER传递给回归测试。gh-93616:
test_modulefinder现在在ModuleFinderTest.setUp()中创建临时目录,而不是在模块范围内。gh-93575: 修复 test_unicode test_raiseMemError 的问题。测试用例现在使用
test.support.calcobjsize来计算 PyUnicode 结构的大小。sys.getsizeof()在字符串具有 UTF-8 内存时可能返回不同的大小。gh-90473: WASI 没有
chmod(2)系统调用。os.chmod()现在在 WASI 上是一个虚拟函数。跳过所有依赖于os.chmod()正常工作的测试。gh-90473: 在 WASI 上跳过需要绝对路径符号链接的测试。
gh-57539: 增加
calendar.LocaleTextCalendar.formatweekday()的日历测试覆盖率。gh-90473: 在 WASI 上跳过符号链接测试。wasmtime 使用
openat2(2)和RESOLVE_BENEATH标志,这阻止了具有绝对路径的符号链接。gh-89858: 为树外构建修复
test_embed。由 Kumar Aditya 提供补丁。gh-92886: 修复在
test_imaplib.py中使用优化 (-O) 运行时失败的测试。gh-92886: 修复在
test_zipimport.py中使用优化 (-O) 运行时失败的测试。bpo-47016: 创建一个 GitHub Actions 工作流用于验证捆绑的 pip 和 setuptools。由 Illia Volochii 和 Adam Turner 提供补丁。
构建¶
Windows¶
gh-93824: 对于 Windows ARM64,已启用将文件拖放到 Windows 资源管理器中的 Python 文件上。
bpo-42658: 通过在
ntpath.normcase()中使用LCMapStringEx代替str.lower(),支持原生 Windows 不区分大小写的路径比较。将LCMapStringEx添加到_winapi模块中。
工具/示例¶
C API¶
gh-93937: 以下帧函数和类型现在可以直接通过
#include <Python.h>使用,不再需要添加#include <frameobject.h>:由Victor Stinner提供补丁。
gh-91321: 修复了 Python C API 与 C++11 之前版本的兼容性。由 Victor Stinner 提供补丁。
gh-91731: 在使用 C++11 编译时避免定义
static_assert,因为在 C++11 中这是一个关键字,重新定义它可能导致未定义行为。由 Pablo Galindo 提供补丁。gh-93442: 为 _Py_CAST_impl() 添加 C++ 重载以处理 0/NULL。这将允许传递 0 或 NULL 到使用 _Py_CAST() 的宏的 C++ 扩展继续编译。
Python 3.11.0 beta 3¶
发布日期:2022-06-01
核心与内置函数¶
构建¶
gh-69093: 修复了
Modules/Setup.stdlib.in中_sqlite3扩展的规则。
Python 3.11.0 beta 2¶
发布日期:2022-05-30
核心与内置函数¶
gh-84694: 配置选项
--experimental-isolated-subinterpreters和宏EXPERIMENTAL_ISOLATED_SUBINTERPRETERS已被移除。gh-91924: 修复了当标准输出编码不是 UTF-8 时的
__lltrace__调试功能。由 Victor Stinner 提供补丁。gh-93061:
async for循环后的向后跳转不再赋予可疑的行号。gh-93065: 修复了 contextvars HAMT 实现以处理对深树的迭代。
该错误由 Eli Libman 发现并修复。更多详情请见 MagicStack/immutables#84。
gh-90473: 在 WASI 上降低默认递归限制以解决有限的调用栈大小问题。
gh-92804: 修复
memoryview迭代器中的内存泄漏,因为它未在退出时完成。由 Kumar Aditya 提供补丁。gh-92236: 移除在启动生成器或协程时可见的虚假 "LINE" 事件,这些事件在 C 中实现的追踪函数中可见。
gh-92619: 使编译器仅在退出块中的指令都没有行号时才复制退出块(之前仅检查块中的第一条指令,导致不必要的块复制)。
gh-92261: 修复尝试迭代
typing.Union时的挂起问题。
库¶
gh-93297: 使 asyncio 任务组阻止子任务被垃圾回收。
gh-90817:
locale.resetlocale()函数已被弃用,并将在 Python 3.13 中移除。请改用locale.setlocale(locale.LC_ALL, "")。由 Victor Stinner 提交补丁。gh-92728:
re.template()函数及对应的re.TEMPLATE和re.T标志在 3.11.0b1 中被移除后已恢复,但它们现在已被弃用,因此可能会在 Python 3.13 中移除。gh-93044: 不再在将数据库参数传递给工厂之前将其转换为字节。
gh-93010: 在一种非常特殊的情况下,email 包尝试将不存在的
InvalidHeaderError添加到缺陷列表中。应该是InvalidHeaderDefect。gh-92675: 修复
venv.ensure_directories()以接受pathlib.Path参数以及str路径。补丁由 David Foster 提交。gh-87901: 从
os.popen()中移除了在 3.11b1 中添加的encoding参数。gh-91922: 修复了在非UTF-8语言环境下
sqlite.connect()函数和sqlite.Connection构造函数的问题。此外,它们现在支持无法用当前文件系统编码解码的字节路径。gh-92839: 修复了在 key 参数不等于 None 的情况下调用 bisect.insort() 或 bisect.insort_left() 导致的崩溃。
gh-90473:
subprocess现在在Emscripten和WASI平台上早期失败,以解决WASI上缺少os.pipe()的问题。gh-92671: 修复了在赋值目标上下文中
ast.unparse()对于空元组的问题。gh-91581:
utcfromtimestamp()在纯Python实现中不再尝试解析fold,因为在UTC中fold永远不会是1。除了在常见情况下稍微快一些之外,这还防止了当时间戳接近datetime.min时的一些错误。由Paul Ganssle提供补丁。gh-92550: 修复了
pathlib.Path.rglob()对于空模式的问题。gh-92530: 修复了在中断
threading.Condition.notify()后出现的问题。gh-92531: statistics.median_grouped() 函数现在总是返回一个浮点数。以前,对于长度为1的序列,它不会转换输入类型。
gh-91810:
ElementTree方法write()和函数tostring()现在在指定encoding="unicode"时使用文本文件的编码(如果不可用则为 "UTF-8")而不是 XML 声明中的区域设置编码。gh-90622: 当多进程上下文启动方法为
"fork"时,concurrent.futures.ProcessPoolExecutor的工作进程不再按需生成(这是 3.9 版本中添加的特性),因为这可能会导致子进程中的死锁,因为在线程运行时发生了 fork。gh-91581: 移除了在调用没有时区的
datetime.fromtimestamp的C实现中未处理的错误情况(即从epoch时间戳获取本地时间)。这除了在调用落在本地时间10000-01-01的时间戳时可能给出更准确的错误消息外,应该不会对用户产生影响。由Paul Ganssle提供补丁。bpo-39064:
zipfile.ZipFile现在在读取损坏的 zip 文件时,如果中央目录偏移为负,会引发zipfile.BadZipFile而不是ValueError。bpo-28249: 当对象没有
__doc__时,将doctest.DocTest.lineno设为None。bpo-45046: 在
unittest中添加对上下文管理器的支持:类TestCase的方法enterContext()和enterClassContext(),类IsolatedAsyncioTestCase的方法enterAsyncContext()以及函数unittest.enterModuleContext()。bpo-42627: 修复了 Windows 注册表代理设置的错误解析。
文档¶
gh-86438: 澄清了在
warnings中,-W和PYTHONWARNINGS是字面匹配且不区分大小写的,而不是作为正则表达式匹配。gh-92240: 为 "Python 3.X 中的新特性" 添加了 3.0、3.1、3.2、3.8 和 3.10 版本的发布日期。
bpo-40838: 文档说明
inspect.getdoc()、inspect.getmodule()和inspect.getsourcefile()可能会返回None。bpo-13553: 文档说明 tkinter.Tk 的参数。
测试¶
gh-92670: 在 AIX 上跳过
test_shutil.TestCopy.test_copyfile_nonexistent_dir测试,因为测试使用尾部斜杠强制操作系统将路径视为目录,但在 AIX 上尾部斜杠没有效果,被视为文件。
构建¶
Windows¶
C API¶
gh-92898: 修复将函数参数转换为
PyObject*时产生的 C++ 编译器警告。由 Serge Guelton 提供补丁。gh-92913: 确保除非设置了
PyConfig.module_search_paths_set,否则对PyConfig.module_search_paths的更改将被忽略gh-92781: 避免在 C API 中混合声明和代码以修复编译器警告:"ISO C90 禁止混合声明和代码" [-Werror=declaration-after-statement]。由 Victor Stinner 提供补丁。
Python 3.11.0 beta 1¶
发布日期:2022-05-06
安全性¶
gh-57684: 添加
-P命令行选项和PYTHONSAFEPATH环境变量,以避免将可能不安全的路径前置到sys.path。由 Victor Stinner 提供补丁。
核心与内置函数¶
gh-89519: 链式 classmethod 描述符(在 bpo-19072 中引入)已被弃用。它不能再用于包装其他描述符,如 property()。此功能的核心设计存在缺陷,并导致了一系列下游问题。
gh-92345:
pymain_run_python()现在在 sys.path 被扩展以包括交互式解释器的当前工作目录之前导入readline和rlcompleter。非交互式解释器不受影响。bpo-43857: 当删除一个缺失的属性时,改进
AttributeError消息。由 Géry Ogam 提供补丁。gh-92245: 确保在所有情况下都遵循 PEP 523。在 3.11a7 中,专业化可能阻止了 Python 到 Python 的调用遵循 PEP 523。
gh-92203: 为 exec() 添加仅限关键字形参 closure。它只能在执行使用自由变量的代码对象时指定。指定时,它必须是一个元组,其元素数量必须恰好等于代码对象所引用的单元变量数量。closure 的默认值为 None,且如果代码对象未引用任何自由变量,则它必须为 None。
gh-91173: 在调试构建中禁用冻结模块。由 Kumar Aditya 提供补丁。
gh-92114: 当使用设置为
None的__class_getitem__下标类型时,改进错误消息。gh-92112: 修复由元类上的恶意自定义
mro()触发的崩溃。gh-92063:
PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS指令现在确保方法仅在正确类型的对象上调用。gh-92031: 在
Py_FINALIZE()期间静态分配的代码对象进行去优化,以便未来的_PyCode_Quicken调用总是从未优化的代码开始。gh-92036: 修复了与垃圾收集器相关的子解释器崩溃问题。当删除子解释器时,取消跟踪其垃圾收集器跟踪的所有对象。为了防止在期望对象被垃圾收集器跟踪的析构函数中崩溃,有意泄露这些对象的强引用,这样它们就永远不会被删除,它们的析构函数也不会被调用。由Victor Stinner提供补丁。
gh-92032: 解释器现在可以自动完成软关键字,截至目前包括来自 PEP 634 的
match、case和_(通配符模式) 。gh-87999: Python解析器对于紧跟在关键字后的数字字面量发出的警告已从弃用警告更改为语法警告。
gh-91869: 修复了一个问题,即带有扩展参数的专业操作码可能产生不正确的跟踪输出或导致断言失败。
gh-91603: 加速
types.UnionType的实例化。基于Yurii Karabas提供的补丁。gh-89373: 如果Python在调试模式下构建,Python现在确保析构函数不会改变当前异常。由Victor Stinner提供补丁。
gh-91632: 修复了一个退出时的轻微内存泄漏:释放
generic_alias_iterator类型的内存。由Donghee Na提供补丁。gh-81548: 值大于
0o377的八进制转义现在会产生DeprecationWarning。在未来的Python版本中,它们将变为SyntaxWarning,最终变为SyntaxError。bpo-43950: 使用单个紧凑表来表示行的开始、结束和列偏移。将位置信息的内存消耗减少了一半。
gh-91102: 对
EncodingMap使用Argument Clinic。由Oleg Iarygin提供补丁。gh-91636: 修复了垃圾回收边缘情况下的崩溃问题,其中
PyFunction_Type.tp_clear函数可能让Python函数对象处于不一致状态。gh-91603: 加速
isinstance()和issubclass()对types.UnionType的检查。由Yurii Karabas提供补丁。gh-91625: 修复了一个在自适应操作码特化失败时忽略任何前置
EXTENDED_ARG的错误。gh-78607: LLTRACE特殊构建现在查找模块全局中定义的名称
__lltrace__,而不是之前因拼写错误引入的名称__ltrace__。gh-91576: 通过Kumar Aditya的补丁,将ASCII字符串的迭代速度提高了50%。
gh-89279: 通过内联几个特定的宏来提高Windows上解释器的性能。
gh-91502: 添加新的
_PyFrame_IsEntryFrame()API 函数,用于检查PyFrameObject是否为入口帧。补丁由 Pablo Galindo 提供。gh-91266: 重构
bytearray的去除方法strip、lstrip和rstrip,以使用共同的实现。gh-91479: 将
BaseException的__note__字段(在3.11的早期版本中添加)替换为 PEP 678 的最终设计。即BaseException获得一个add_note()方法,其__notes__字段在必要时创建。gh-46055: 通过移除不必要的临时创建,加速负整数的右移操作。原始由Xinhang Xu提供补丁,由Mark Dickinson重新设计。
gh-91462: 通过显示操作码名称(而不仅仅是数字)和每个操作码前的堆栈内容,使解释器的低级跟踪(lltrace)功能输出更易读。
gh-91421: 修复了 _Py_DecodeUTF8Ex 中潜在的整数溢出问题。
gh-91428: 在调试版本的
opcode.h中添加static const char *const _PyOpcode_OpName[256] = {...};,以帮助调试Python解释器。现在,通过包含操作码名称而不仅仅是相应的十进制数字,使得各种形式的调试输出更便于人类阅读变得更加方便。bpo-47120: 使
POP_JUMP_IF_TRUE、POP_JUMP_IF_FALSE、POP_JUMP_IF_NONE和POP_JUMP_IF_NOT_NONE虚拟化,映射到新的相对跳转操作码。bpo-45317: 添加内部文档,解释新的(针对3.11版本)帧栈的设计。
bpo-47197: ctypes 过去错误处理
void返回类型,例如,像ctypes.CFUNCTYPE(None, ctypes.c_int)这样声明的函数会以int f(int)的签名被调用,而不是void f(int)。Wasm 目标要求以正确的签名调用函数指针,因此这导致了崩溃。现在这个问题已经修复。bpo-47120: 使操作码
JUMP_IF_TRUE_OR_POP和JUMP_IF_FALSE_OR_POP成为相对跳转而非绝对跳转。bpo-47177: 将内部
_PyInterpreterFrame结构体的f_lasti成员替换为prev_instr指针,这减少了主解释器循环的开销。 Python 层面框架对象的f_lasti属性被保留用于向下兼容。bpo-46962: 类和函数不再无视
--without-doc-strings编译标志无条件声明它们的文档字符串。受影响的类有
ctypes.UnionType、pickle.PickleBuffer、testcapi.RecursingInfinitelyError和types.GenericAlias。受影响的函数是
ctypes中的24个方法。由 Oleg Iarygin 提供补丁。
bpo-46942: 使用 Argument Clinic 为
types.MethodType构造函数。由 Oleg Iarygin 提供补丁。bpo-46764: 修复使用 @classmethod 包装绑定方法的问题。
bpo-43464: 为非集合参数优化
set.intersection()。bpo-46721: 为非集合参数优化
set.issuperset()。bpo-46509: 添加
Py_DECREF()的类型特化版本,并为float、int、str、bool和None使用它们,以避免在运行时类型已知的情况下进行指针追踪。bpo-46045: 在 NetBSD 上不使用 POSIX 信号量。
bpo-36819: 修复内置编码器中错误处理程序返回的位置小于或等于不可编码字符起始位置时的崩溃问题。
bpo-34093:
marshal.dumps()对所有内部字符串使用FLAG_REF。这使得输出更加确定性,有助于可重现的构建。bpo-26579: 添加了
object.__getstate__,提供了__getstate__()方法的默认实现。现在复制和腌制内置类型 bytearray、set、frozenset、collections.OrderedDict、collections.deque、weakref.WeakSet 和 datetime.tzinfo 的子类实例时,会复制和腌制作为槽实现的实例属性。
库¶
gh-87901: 向
os.popen()添加 encoding 参数。gh-92332: 弃用
typing.Text(目前未计划移除该类) 。由 Alex Waygood 提供补丁。gh-78157: 弃用枚举定义中成为成员的嵌套类——在 3.13 中它们将成为普通类;添加
member和nonmember函数以允许现在控制结果。gh-92356: 修复了 ctypes 函数调用中的性能回归问题。
gh-92301: 在
subprocess模块中,优先使用close_range()而非遍历procfs来关闭文件描述符,以获得更好的性能。gh-67248: 在Cmd.do_help()中对杂项主题进行排序。
gh-92210: 将
socket.__init__移植到Argument Clinic。由Cinder提供补丁。gh-80010: 为
datetime.datetime.fromisoformat()、datetime.date.fromisoformat()和datetime.time.fromisoformat()添加对广义ISO 8601解析的支持。由Paul Ganssle提供补丁。gh-92118: 修复了
contextmanager()在3.11版本中的一个回归问题,该问题导致异常传播时跟踪信息不正确。gh-90887: 为 macOs 上的
os.fcopyfile()添加COPYFILE_STAT、COPYFILE_ACL和COPYFILE_XATTR常量。gh-91215: 为 @dataclass 添加 weakref_slot。默认值为 False。如果为 True 且 slots=True,则会添加一个名为 "__weakref__" 的槽位,从而允许对实例进行弱引用。由 Eric V. Smith 贡献。
gh-85984: 为Unix新增函数os.login_tty()。
gh-92128: 向
logging.LoggerAdapter和logging.StreamHandler添加__class_getitem__()方法,允许它们在运行时被参数化。由Alex Waygood提供补丁。gh-92049: 禁止pickling常量
re._constants.SUCCESS等。之前,pickling不会失败,但结果无法被unpickle。gh-92062: 如果
name是一个关键字,除了现有的检查它是标识符外,inspect.Parameter现在会引发ValueError。gh-87390: 向
types.GenericAlias添加一个__unpacked__属性。由Jelle Zijlstra提供补丁。gh-88089: 添加对泛型
typing.NamedTuple的支持。gh-91996: 新增http.HTTPMethod枚举,以方便的方式表示所有可用的HTTP请求方法
gh-91984: 修改test_argparse.py中的测试字符串,使其在行尾不包含尾随空格。
gh-91952: 向
TextIOWrapper.reconfigure()添加encoding="locale"支持。gh-91954: 向
subprocess.getoutput()和subprocess.getstatusoutput()添加 encoding 和 errors 参数。bpo-47029: 在向管道的写入端最后一次写入缓冲数据 之后,始终关闭
multiprocessing.Queue使用的管道的读取端,以避免在垃圾回收和调用multiprocessing.Queue.close()时出现BrokenPipeError。 补丁由 Géry Ogam 提供。gh-91928: 为
datetime.timezone.utc添加datetime.UTC别名。由 Kabir Kwatra 提供补丁。
gh-68966:
mailcap模块现已弃用,并将在 Python 3.13 中移除。有关原因请参阅 PEP 594,替代方案请参阅mimetypes模块。补丁由 Victor Stinner 提供。gh-91401: 提供一种方法来禁用
subprocess使用vfork(),以防万一需要,并记录posix_spawn()的现有机制。gh-64783: 修复 FreeBSD 上的
signal.NSIG值,以接受大于 32 的信号编号,如signal.SIGRTMIN和signal.SIGRTMAX。由 Victor Stinner 提供补丁。gh-91910: 在
multiprocessing和asyncio模块的错误消息中,为 f-字符串添加缺失的 f 前缀。gh-91860: 添加
typing.dataclass_transform(),实现 PEP 681。由 Jelle Zijlstra 提供补丁。gh-91832: 在
argparse.Action的 repr 输出中添加required属性。gh-91827: 在
tkinter模块中添加方法info_patchlevel(),该方法返回 Tcl 库的确切版本,作为一个类似于sys.version_info的命名元组。gh-84461: 添加
--enable-wasm-pthreads以启用 WASM 构建的 pthreads 支持。Emscripten/node不再默认启用线程。包括额外的文件系统。gh-91821: 修复
test_decimal.py中不稳定的test_from_tuple测试。gh-91217: 弃用 xdrlib 模块。
gh-91217: 弃用 uu 模块。
gh-91760: 在正则表达式中,对数值组引用和组名将应用更严格的规则。目前,对于未来Python版本中将变为错误的组引用和组名,会发出弃用警告。
gh-84461: 添加临时的
sys._emscripten_info命名元组,包含有关Emscripten平台的构建时和运行时信息。gh-90623:
signal.raise_signal()和os.kill()现在会立即检查挂起的信号。由Victor Stinner提交的补丁。gh-91734: 修复Solaris上的OSS音频支持。
gh-90633: 在由
typing.assert_never()抛出的异常中包含传递的值。由Jelle Zijlstra提交的补丁。gh-91700: 现在,包含条件表达式
(?(group)...)的正则表达式的编译,如果组号引用未定义的组,将引发适当的re.error。之前会引发内部RuntimeError。gh-91231: 向
multiprocessing.BaseManager构造函数添加一个可选的关键字参数 shutdown_timeout。如果terminate()操作超过超时时间,则终止进程。由Victor Stinner提交的补丁。gh-91621: 修复
typing.get_type_hints()对collections.abc.Callable的支持。由Shantanu Jain提交的补丁。gh-90568: 在
regular expression中解析Unicode命名字符序列的\N转义现在会引发re.error而不是TypeError。gh-91217: 弃用telnetlib模块。
gh-91217: 弃用sunau模块。
gh-91217: 弃用spwd模块。
gh-91217: 弃用sndhdr模块,以及为
email.mime.MIMEAudio内联所需的功能。gh-91616:
re模块,修复使用原子分组或占有量词时的fullmatch()不匹配问题。gh-91217: 弃用'pipes'模块。
gh-91217: 弃用ossaudiodev模块。
gh-91217: 弃用 nis 模块。
gh-91595: 修复
Tools.gdb.libpython.write_repr()中字符和整数的比较。由 Yu Liu 提交的补丁。gh-74166: 添加选项以在
create_connection()无法建立连接时将所有错误以ExceptionGroup的形式抛出。默认行为仍然是仅抛出尝试多个地址时发生的最后一个错误。gh-91487: 优化 asyncio UDP 速度,传输大文件时速度提升超过100倍。
gh-90622: 在
concurrent.futures.process.ProcessPoolExecutor中,当使用新的max_tasks_per_child特性时,禁止使用 "fork" 多进程启动方法,因为线程+fork 的混合会导致子进程挂起。在这种情况下,如果没有提供mp_context,默认使用安全的 "spawn" 启动方法。gh-89022: 在
sqlite3中,SQLITE_MISUSE结果代码现在映射到InterfaceError而不是ProgrammingError。此外,当绑定参数失败时,会抛出更准确的异常。由 Erlend E. Aasland 提交的补丁。gh-91526: 停止在
TextIOWrapper中调用os.device_encoding(file.fileno())。它复杂,从未被文档化,并且在大多数情况下不起作用。(由 Inada Naoki 提交的补丁。)gh-88116: 将
inspect模块中与帧相关的函数更改为返回一个常规对象(与旧的类似元组的接口向后兼容),该对象包括扩展的 PEP 657 位置信息(结束行号、列和结束列)。受影响的函数有:inspect.getframeinfo()、inspect.getouterframes()、inspect.getinnerframes()、inspect.stack()和inspect.trace()。由 Pablo Galindo 提交的补丁。gh-69093: 为
sqlite3.Blob添加索引和切片支持。由 Aviv Palivoda 和 Erlend E. Aasland 提交补丁。gh-69093: 为
sqlite3.Blob添加 context manager 支持。 由 Aviv Palivoda 和 Erlend E. Aasland 编写补丁。gh-91217: 废弃 nntplib。
gh-91217: 废弃 msilib。
gh-91217: 废弃 imghdr 模块。
gh-91217: 废弃 crypt 模块。
bpo-47000: 当指定
encoding="locale"时,即使处于 UTF-8 模式,TextIOWrapper也使用区域编码。gh-91230:
warnings.catch_warnings()现在接受warnings.simplefilter()的参数,提供了一种更简洁的方式来本地忽略警告或将它们转换为错误。gh-91217: 废弃 chunk 模块。
bpo-47260: 修复
os.closerange()在 Linux seccomp 沙箱中可能不执行任何操作的问题。bpo-47087: 实现
typing.Required和typing.NotRequired(PEP 655)。由 David Foster 和 Jelle Zijlstra 提交补丁。bpo-47061: 废弃 cgi 和 cgitb。
bpo-47061: 废弃 audioop。
bpo-47000: 添加
locale.getencoding()以获取当前区域编码。它类似于locale.getpreferredencoding(False),但忽略 Python UTF-8 模式。bpo-42012: 添加
wsgiref.types,包含用于静态类型检查的 WSGI 特定类型。bpo-47211: 移除未文档化且从未工作的函数
re.template()和标志re.TEMPLATE。这在 3.11.0b2 中被撤销并改为废弃。bpo-47135:
decimal.localcontext()现在通过关键字参数接受上下文属性。bpo-46841: 快速代码的反汇编。
bpo-46681: 将 gzip.compress() 的 compresslevel 参数传递给 zlib。
bpo-45100: 添加
typing.get_overloads()和typing.clear_overloads()。由 Jelle Zijlstra 提供补丁。bpo-44807:
typing.Protocol不再静默替换子类上定义的__init__()方法。由 Adrian Garcia Badaracco 提供补丁。bpo-46787: 修复
concurrent.futures.ProcessPoolExecutor异常内存泄漏bpo-46720: 为 Windows 添加对路径类对象的支持到
multiprocessing.set_executable(),以与类 Unix 系统保持一致。由 Géry Ogam 提供补丁。bpo-46053: 修复 NetBSD 上的 OSS 音频支持。
bpo-46285: 为模块
http.server添加命令行选项-p/--protocol,指定服务器符合的 HTTP 版本(HTTP/1.1 兼容的服务器现在可以从模块http.server的命令行界面运行)。由 Géry Ogam 提供补丁。bpo-44791: 接受省略号作为
typing.Concatenate的最后一个参数。bpo-46547: 移除泄漏到
pydoc.Helper类命名空间的变量。bpo-46415: 修复 ipaddress.ip_{address,interface,network} 在给定无效元组作为地址参数时抛出 TypeError 而不是 ValueError 的问题。
bpo-46075: 带有
DefaultCookiePolicy的CookieJar现在可以处理来自 localhost 的 cookie,这些 cookie 在 Set-Cookie 头中明确指定了 domain=localhost。bpo-45995: 在字符串格式化规范中添加 "z" 选项,该选项在四舍五入到格式精度后,将负零浮点值强制转换为正零。由 John Belmonte 贡献。
bpo-26175: 为
tempfile.SpooledTemporaryFile对象完全实现io.BufferedIOBase或io.TextIOBase接口。这使得它们能与更高层次的模块(如压缩模块)正确协作。由 Carey Metcalfe 提供补丁。bpo-45138: 修复
sqlite3跟踪回调中的一处回归问题,其中绑定参数未在传递的语句字符串中展开。此回归问题由 Python 3.10 中的 bpo-40318 引入。补丁由 Erlend E. Aasland 提供。bpo-44863: 允许
TypedDict子类在基于类的语法中也包含Generic作为基类。从而允许用户定义一个泛型TypedDict,就像用户定义的泛型一样,但具有TypedDict语义。bpo-44587: 修复 BooleanOptionalAction 不自动添加默认字符串的问题。如果需要默认字符串,使用格式化程序添加。
bpo-43827:
ABCMeta.__new__的所有位置或关键字参数现在都是仅位置的,以避免与要传递给__init_subclass__()的关键字参数冲突。bpo-43218: 防止创建路径包含 PATH 分隔符的 venv。这可能会影响激活脚本的使用。由 Dustin Rodrigues 提供补丁。
bpo-38435: 向
subprocess.Popen添加一个process_group参数,以帮助将更多内容从不安全的preexec_fn参数中移出。bpo-42066: 修复
CookieJar.__iter__()中对 cookie 进行排序的问题,这是一个额外的行为,且在 RFC 2965 或 Netscape cookie 协议中未提及。现在CookieJar中的 cookie 遵循Set-Cookie头的顺序。由 Iman Kermani 提供补丁。bpo-40617: 向
sqlite3.Connection添加create_window_function()用于创建聚合窗口函数。由 Erlend E. Aasland 提供补丁。bpo-40676: 将
csv模块的csv.field_size_limit()、csv.get_dialect()、csv.unregister_dialect()和csv.list_dialects()转换为使用 Argument Clinic。bpo-39716: 当相同的子解析器名称被两次添加到
argparse.ArgumentParser时,引发一个ArgumentError。这与当相同的选项字符串被两次添加到ArgumentParser时的(默认)行为一致。bpo-36073: 在
sqlite3转换器中递归使用游标时,引发ProgrammingError而不是段错误。由 Sergey Fedoseev 提供补丁。bpo-34975: 向
StreamWriter添加了一个start_tls()方法,该方法使用给定的SSLContext升级连接为 TLS。bpo-22276:
Path的方法glob()和rglob()如果 pattern 以路径名组件分隔符(/或sep)结尾,则仅返回目录。由 Eisuke Kawashima 提供补丁。bpo-24905: 向
sqlite3.Connection添加了blobopen()。sqlite3.Blob允许对 blob 进行增量 I/O 操作。由 Aviv Palivoda 和 Erlend E. Aasland 提供补丁。
文档¶
gh-91888: 向文档添加一个新的
gh角色,以链接到 GitHub 问题。gh-91783: 记录关于使用函数
shutil.unpack_archive()的安全问题。gh-91547: 移除“未记录模块”页面。
gh-91298: 在
importlib.resources.abc中,完善了 Traversable 协议的文档,应用了从 importlib_resources 5.7.1 的更改。bpo-44347: 澄清了 dirs_exist_ok 的含义,这是
shutil.copytree()的一个关键字参数。bpo-36329: 移除 'make -C Doc serve',支持 'make -C Doc htmlview'。
bpo-47189: 为 Faster CPython 项目添加 Python 3.11 新特性条目。文档由 Ken Jin 和 Kumar Aditya 提供。
bpo-38668: 更新
os.path文档的引言,移除在实现了 PEP 383 和 PEP 529 后变得无关紧要的警告。bpo-47115: 文档现在列出了C结构体的哪些成员是 Limited API/Stable ABI 的一部分。
bpo-46962: 代码片段中的所有文档字符串现在都包装在
PyDoc_STR中,以遵循 PEP 7 的文档字符串段落 的准则。补丁由 Oleg Iarygin 提供。bpo-26792: 改进
runpy.run_module()和runpy.run_path()的文档字符串。原始补丁由Andrew Brezovsky提供。
测试¶
gh-92169: 在测试中统一使用
warnings_helper.import_deprecated()来导入已弃用的模块。补丁由Hugo van Kemenade提供。gh-84461: 当启用多进程时,libregrtest现在可以通过
--python标志使用除sys.executable之外的Python可执行文件。gh-91904: 修复
PYTHONREGRTEST_UNICODE_GUARD的初始化,该问题阻止了在非UTF-8语言环境下运行回归测试。gh-91752: 在test.test_tools.test_freeze.TestFreeze中添加了@requires_zlib。
gh-91607: 修复
test_concurrent_futures,在测试逻辑混淆的情况下测试正确的多进程启动方法上下文。bpo-40280: 现在在没有pthread支持的WASM目标上跳过线程测试。
bpo-47109: 将
ctypes.macholib.dyld、ctypes.macholib.dylib和ctypes.macholib.framework的测试从手动的前unittest时代带到ctypes.test的位置和结构。由Oleg Iarygin提供补丁。bpo-29890: 为
ipaddress.IPv4Interface和ipaddress.IPv6Interface添加了使用元组参数构造的测试。原始补丁和测试由louisom提供。
构建¶
Windows¶
bpo-46907: 更新 Windows 安装程序以使用 SQLite 3.38.3。
bpo-47239: 修复了在活动虚拟环境中使用 适用于Windows的Python启动器 时的 --list 和 --list-paths 输出。
bpo-46907: 更新 Windows 安装程序以使用 SQLite 3.38.2。
bpo-46785: 通过适当在
win32_xstat_impl中使用FindFirstFileW()返回的错误代码,修复了 Windows 上os.stat()和取消链接文件之间的竞态条件。bpo-40859: 更新 Windows 构建以使用 xz-5.2.5。
macOS¶
bpo-46907: 更新 macOS 安装程序以使用 SQLite 3.38.4。
工具/示例¶
gh-91583: 修复了 Argument Clinic 为带有
defining_class参数的函数生成的代码中的回归问题。gh-91575: 添加脚本
Tools/scripts/generate_re_casefix.py和 make 目标regen-re,用于根据当前 Unicode 版本生成用于大小写不敏感匹配的额外数据。gh-91551: 移除了古老的 Pynche 颜色编辑器。它已经迁移到 https://gitlab.com/warsaw/pynche。
C API¶
gh-88279: 弃用以下 C 函数:
PySys_SetArgv()、PySys_SetArgvEx()、PySys_SetPath()。补丁由 Victor Stinner 提供。gh-92154: 添加了
PyCode_GetCode()函数。此函数执行等同于 Python 代码getattr(code_object, 'co_code')的操作。gh-92173: 修复了
PyEval_EvalCodeEx()的closure参数。gh-91320: 修复了关于 Python C API 中“旧式转换”(
g++ -Wold-style-cast)的 C++ 编译器警告。在 C++ 中使用 Python C API 时,使用 C++ 的reinterpret_cast<>和static_cast<>转换。由 Victor Stinner 提供补丁。gh-80527: 通过 PEP 623 将以下函数标记为弃用 :
PyUnicode_AS_DATA(),PyUnicode_AS_UNICODE(),PyUnicode_GET_DATA_SIZE(),PyUnicode_GET_SIZE()。由 Victor Stinner 提供补丁。gh-91768:
Py_REFCNT(),Py_TYPE(),Py_SIZE()和Py_IS_TYPE()函数的参数类型现在为PyObject*而不是const PyObject*。补丁由 Victor Stinner 提供。gh-91020: 添加
PyBytes_Type.tp_alloc来为 bytes 子类初始化PyBytesObject.ob_shash。bpo-40421: 添加
PyFrame_GetLastiC-API 函数以安全地从 C 代码访问帧对象的f_lasti属性。bpo-35134: 移除
Include/code.h头文件。C 扩展应仅包含主<Python.h>头文件。补丁由 Victor Stinner 提供。bpo-47169:
PyOS_CheckStack()现在在 Windows 上的稳定 ABI 中导出。bpo-47169:
PyThread_get_thread_native_id()在不存在的平台(如 Solaris)上被排除在稳定 ABI 之外。bpo-46343: 添加
PyErr_GetHandledException()和PyErr_SetHandledException()作为PyErr_GetExcInfo()和PyErr_SetExcInfo()的更简单替代。它们被包含在稳定 ABI 中。
Python 3.11.0 alpha 7¶
发布日期: 2022-04-05
核心与内置函数¶
bpo-47212: 对于没有后续缩进的裸
except,抛出IndentationError而不是SyntaxError。对于用作参数的无括号生成器,改进SyntaxError的位置。由 Matthieu Dartiailh 提供补丁。bpo-47186: 用
CHECK_EG_MATCH+ 跳转替换JUMP_IF_NOT_EG_MATCH。bpo-47176: 由于平台限制,Emscripten 构建不能以通常的方式处理信号。Python 现在可以处理信号。要使用,设置 Module.Py_EmscriptenSignalBuffer 为单个字节的 SharedArrayBuffer 并设置 Py_EMSCRIPTEN_SIGNAL_HANDLING 为 1。向 SharedArrayBuffer 写入一个数字将导致相应的信号被提升到 Python 线程中。
bpo-47186: 用
CHECK_EXC_MATCH+ jump 替换JUMP_IF_NOT_EXC_MATCH。bpo-47120: 用相对的
JUMP_BACKWARD_NO_INTERRUPT替换绝对跳转操作码JUMP_NO_INTERRUPT。bpo-46841: 比较代码对象时避免不必要的分配。
bpo-47182: 修复在主解释器第二次初始化后使用命名Unicode字符如
"\N{digit nine}"时崩溃的问题。bpo-47162: WebAssembly 无法处理错误的函数指针转换(参数数量或类型不同)。Python 现在可以使用调用蹦床来缓解这个问题。定义
PY_CALL_TRAMPOLINE来启用调用蹦床。bpo-46775: 现在一些Windows系统错误代码(>= 10000)被正确映射到errno,并可能引发
OSError的子类。由Donghee Na提供补丁。bpo-47129: 改进关于空表达式的f-string语法错误消息。
bpo-47117: 修复在交互模式下如果分词器缓冲区未初始化时解码字符失败导致的崩溃。由Pablo Galindo提供补丁。
bpo-47127: 通过特殊化,将带有关键字参数的c函数调用速度提高25%。由Kumar Aditya提供补丁。
bpo-47120: 用相对跳转
JUMP_BACKWARD替换JUMP_ABSOLUTE。bpo-42197:
PyFrame_FastToLocalsWithError()和PyFrame_LocalsToFast()在性能分析或跟踪期间不再被调用。C代码可以通过调用PyFrame_GetLocals()来访问PyFrameObject的f_locals属性。bpo-47070: 通过减少
memcpy的调用次数来提高array_inplace_repeat的性能。重构array,bytes,bytearray和unicodeobject的repeat和原地repeat方法以使用共同的_PyBytes_Repeat。bpo-47053: 减少专业化的
BINARY_OP_INPLACE_ADD_UNICODE操作码中的去优化。bpo-47045: 从 _PyInterpreterFrame 结构中移除
f_state字段。向 _PyInterpreterFrame 结构添加owner字段,以明确所有权,简化帧和生成器的清理和释放。bpo-46968: 在
faulthandler中检查 "sys/auxv.h" 头文件的存在,以避免在不存在此头文件的系统中出现编译问题。由 Pablo Galindo 提供补丁。bpo-46329: 使用
LOAD_GLOBAL的低位来指示是否在全局变量之前推送一个NULL。有助于稍微简化调用序列。bpo-46841: 通过将快速字节码存储为相应的
PyCodeObject的一部分,原地快速化字节码。bpo-47012: 通过 Kumar Aditya 的补丁,将
bytes和bytearray的迭代速度提高了 30%。bpo-47009: 通过针对无需调整大小的常见情况进行优化,提升了
list.append()和列表推导式的性能。补丁由 Dennis Sweeney 提供。bpo-47005: 通过减少
memcpy的调用次数,提高了bytearray_repeat和bytearray_irepeat的性能。bpo-46829: 弃用在
asyncio.Future.cancel()和asyncio.Task.cancel()中传递消息的做法。bpo-46993: 通过 Kumar Aditya 的补丁,将
bytearray从list和tuple创建的速度提高了 40%。bpo-39829: 移除了初始化列表时的
__len__()调用,并将初始化移至list_extend。由 Jeremiah Pascual 提供补丁。bpo-46944: 通过
METH_FASTCALL调用约定,加快了在生成器中抛出异常的速度。补丁由 Kumar Aditya 提供。bpo-46841: 修改
STORE_SUBSCR以使用内联缓存条目(而非其操作数)作为自适应计数器。bpo-46841: 对
PRECALL和CALL使用内联缓存,并移除用于管理(现已不再使用的)非内联缓存的内部机制。bpo-46881: 静态分配并初始化 latin1 字符。
bpo-46838: 改进不正确函数定义的语法错误。由Pablo Galindo提供补丁。
bpo-43721: 修复
getter,setter, 和deleter的文档字符串,以明确它们创建属性的新副本。bpo-43224: 为PEP 646做出所需的语法更改。
库¶
bpo-47208: 允许供应商覆盖
CTYPES_MAX_ARGCOUNT。bpo-47167: 允许在
asyncio.Task中覆盖未来的合规性检查。bpo-47151: 当子进程尝试使用vfork时,如果vfork返回错误,现在会回退到fork。这允许在操作系统内核不允许vfork的情况下使用。
bpo-47152: 将
re模块转换为包。弃用模块sre_compile,sre_constants和sre_parse。bpo-4833: 添加
ZipFile.mkdir()bpo-27929: 修复
asyncio.loop.sock_connect()仅解析socket.AF_INET或socket.AF_INET6家族的名称。对于其他家族,如socket.AF_BLUETOOTH和socket.AF_UNIX,解析可能没有意义。bpo-14265: 将完全限定的测试名称添加到unittest输出中
bpo-47061: 弃用aifc模块。
bpo-39622: 在asyncio程序中处理Ctrl+C以中断主任务。
bpo-47101:
hashlib.algorithms_available现在仅列出由OpenSSL 3.0上激活的加密提供者提供的算法。除非将遗留提供者加载到默认的OSSL上下文中,否则不会列出遗留算法。bpo-47099:
urllib.request.URLopener中引发的所有URLError异常消息现在在ftp error和消息的其余部分之间包含冒号。之前,open_ftp()缺少冒号。由Oleg Iarygin提供补丁。bpo-47099: 异常链的机制从
Exception.with_traceback()/sys.exc_info()更改为 PEP 3134。由 Oleg Iarygin 提供补丁。bpo-47095:
hashlib的内部_blake2模块现在优先使用来自 https://www.blake2.net/ 的libb2而不是 Python 自带的 blake2 副本。bpo-47098:
hashlib内部_sha3模块的 Keccak 代码包已被替换为 tiny_sha3。该模块在 Python 构建时不带 OpenSSL 时作为回退使用。bpo-47088: 实现了
typing.LiteralString,这是 PEP 675 的一部分。由 Jelle Zijlstra 提供补丁。bpo-42885: 对以
\A或^开始的正则表达式优化了re.search()、re.split()、re.findall()、re.finditer()和re.sub()。bpo-23691: 保护
re.finditer()迭代器不被重新进入。bpo-47067: 通过使用 PEP 590
vectorcall并用PyObject_SetAttr替换PyObject_SetAttrString,优化了对GenericAlias对象的调用。bpo-28080: 在
zipfile.ZipFile构造函数中添加了 metadata_encoding 参数,并在zipfileCLI 中添加了--metadata-encoding选项,以允许使用非标准编解码器读取压缩包中的文件名。bpo-47000: 当启用 UTF-8 模式时,使
io.text_encoding()返回 "utf-8"。bpo-42369: 修复
zipfile._SharedFile.tell()的线程安全性,以避免在多线程读取ZipFile时出现 "zipfile.BadZipFile: Bad CRC-32 for file" 异常。bpo-38256: 修复了当编译使用 zlib 的 crc32 时的
binascii.crc32(),使其正确处理长度超过 4GiB 的输入而不是返回错误结果。在此之前的解决方法是始终以小于 4GiB 的增量向函数提供数据,或直接调用 zlib 模块函数。我们还让
binascii.crc32()在处理较大输入时释放 GIL,就像zlib.crc32()和hashlib所做的那样。这也提升了Windows上的性能,因为现在
binascii.crc32()使用了zlib crc32实现,速度提升了2-3倍。标准库在两个模块中都有crc32 API是一个已知的历史遗留问题。这使我们更接近于它们背后的单一实现。
bpo-47066: 全局内联标志(例如
(?i))现在只能在正则表达式的开头使用。从Python 3.6开始,不在表达式开头使用它们已被弃用。bpo-39394: 关于不在正则表达式开头的内联标志的警告现在包含标志的位置。
bpo-433030: 在
正则表达式中添加了对原子分组((?>...))和占有量词(*+,++,?+,{m,n}+)的支持。bpo-47062: 实现
asyncio.Runner上下文管理器。bpo-46382:
dataclass()slots=True现在正确地省略了基类中已经定义的槽。由Arie Bovenberg提供补丁。bpo-47057: 对
FutureIter.throw()使用FASTCALL约定。bpo-47061: 弃用 PEP 594 中列出的各种模块:
aifc, asynchat, asyncore, audioop, cgi, cgitb, chunk, crypt, imghdr, msilib, nntplib, nis, ossaudiodev, pipes, smtpd, sndhdr, spwd, sunau, telnetlib, uu, xdrlib
bpo-34790: 移除将协程对象传递给
asyncio.wait()。bpo-47039: 标准化asyncio future和task对象的
repr()。bpo-2604: 修复了使用全局变量的doctests在多次运行时失败的bug。
bpo-45150: 添加
hashlib.file_digest()辅助函数,用于高效哈希文件对象。bpo-34861: 使cumtime成为cProfile的默认排序键。
bpo-45997: 修复
asyncio.Semaphore重新获取FIFO顺序的问题。bpo-47022:
asynchat、asyncore和smtpd模块至少自 Python 3.6 起就已弃用。它们的文档和弃用警告现已更新,以指明它们将在 Python 3.12 中移除 (PEP 594)。bpo-43253: 修复在Proactor事件循环中关闭传输时底层套接字句柄已无效导致的崩溃问题。
bpo-40280:
select.select()现在对每个空的fdset传递NULL给select。bpo-47004: 应用来自importlib_metadata 4.11.3的错误修复,包括修复EntryPoint.extras返回匹配对象而非额外字符串的问题。
bpo-46998: 允许对
typing.Any进行子类化。由Shantanu Jain提供补丁。bpo-46995: 弃用第三方任务实现中缺失的
asyncio.Task.set_name(),计划在Python 3.13中使其成为强制要求。bpo-46994: 在
asyncio.create_task()和asyncio.loop.create_task()中接受显式的contextvars.Context。bpo-46981:
typing.get_args(typing.Tuple[()])现在返回()而不是((),)。bpo-46968: 添加
os.sysconf_names['SC_MINSIGSTKSZ']。bpo-46985: 升级与ensurepip捆绑的pip wheel(pip 22.0.4)。
bpo-46968:
faulthandler: 在Linux 5.14及更新版本上,动态确定CPython使用getauxval(AT_MINSIGSTKSZ)分配的信号处理程序堆栈大小。这一变化允许Python扩展请求Linux内核在Sapphire Rapids Xeon处理器上使用AMX_TILE指令集成功,解除了该ISA在框架中使用的阻碍。bpo-46955: 将
asyncio.base_events.Server作为asyncio.Server公开。由Stefan Zabka提供补丁。bpo-46932: 更新捆绑的libexpat到2.4.7版本。
bpo-46933:
pwd模块现在是可选的。当pwd模块不可用时,os.path.expanduser()返回路径。bpo-464471: 添加了
asyncio.timeout()和asyncio.timeout_at()上下文管理器。由Tin Tvrtković和Andrew Svetlov提交的补丁。bpo-46805: 为asyncio添加了原始数据报套接字函数:
sock_sendto()、sock_recvfrom()和sock_recvfrom_into()。bpo-46644: 不再要求有效的类型形式必须是可调用的。这允许
typing.Annotated包装typing.ParamSpecArgs和dataclasses.InitVar。由Gregory Beauregard提交的补丁。bpo-46581: 使
GenericAlias的ParamSpec传播与Concatenate(及其他) 保持一致。bpo-45413: 定义了 posix_venv 和 nt_venv sysconfig安装方案,用于引导新的虚拟环境。 添加了 venv sysconfig安装方案以获取上述适当的方案。这些方案与预先存在的 posix_prefix 和 nt 安装方案相同。
venv模块现在使用 venv 方案来创建新的虚拟环境,而不是仅根据平台硬编码路径。 鼓励以与虚拟环境中使用的安装方案不兼容的方式定制 posix_prefix 或 nt 安装方案的下游 Python 分发者不要定制 venv 方案。 当 Python 本身在虚拟环境中运行时,sysconfig.get_default_scheme()和sysconfig.get_preferred_scheme()与key="prefix"返回 venv。bpo-43224: 在typing.py中实现了对PEP 646的支持。
bpo-43224: 允许解包types.GenericAlias对象,例如
*tuple[int, str]。bpo-46557: 现在,由logging模块捕获的警告将不带有格式字符串记录,以防止通过msg参数分组日志的系统将捕获的警告分组在一起。
bpo-41370:
typing.get_type_hints()现在支持在 PEP 585 泛型别名 中将字符串作为前向引用进行评估。bpo-46607: 为自 Python 3.2 起已在文档字符串中弃用的
LegacyInterpolation添加DeprecationWarning。它将在 Python 3.13 中移除。请改用BasicInterpolation或ExtendedInterpolation。bpo-46480: 添加
typing.assert_type()。由 Jelle Zijlstra 提供补丁。bpo-46421: 修复了一个 unittest 问题,即如果命令以
python -m unittest形式调用且文件名以点(.)开头,会返回ValueError。bpo-46245: 在
shutil.rmtree()中添加可选参数 dir_fd。bpo-22859:
usageExit()已被标记为弃用,将在 3.13 中移除。bpo-46170: 当你尝试子类化一个
typing.NewType的实例时,改进了错误信息。bpo-20392: 修复
MimeTypes.guess_type()中大写文件扩展名的不一致问题。由 Kumar Aditya 提供补丁。bpo-46030: 将
LOCAL_CREDS、LOCAL_CREDS_PERSISTENT和SCM_CREDS2FreeBSD 常量添加到 socket 模块中。bpo-44439: 修复
ZipFile中成员文件的.write()方法,当输入数据是支持缓冲协议的对象时,文件长度可能错误的问题。bpo-45171: 修复
logging模块中处理stacklevel参数的问题,使其在所有日志记录函数中一致,并且如广告中所说,类似于warn()中使用的stacklevel参数。bpo-44859: 在
sqlite3中引发更准确且符合 PEP 249 的异常。对于
SQLITE_MISUSE错误,抛出InterfaceError而非ProgrammingError。当转换为 BLOB 失败时,不要用
ValueError覆盖BufferError。如果用户尝试通过
execute()执行多条 SQL 语句,则引发ProgrammingError而不是Warning。如果 SQL 查询包含空字符,抛出
ProgrammingError而非ValueError。
bpo-44493: 在 sockaddr_un 的长度中添加缺失的终止 NUL。
当使用非抽象的 AF_UNIX 数据报套接字与用另一种编程语言编写的进程通信时,这个问题可能被观察到。
bpo-41930: 向
sqlite3添加serialize()和deserialize()支持。由 Erlend E. Aasland 提供补丁。bpo-33178: 添加了
ctypes.BigEndianUnion和ctypes.LittleEndianUnion类,这些类最初在库文档中有所记载但尚未实现。bpo-43352: 在 asyncio 库的同步原语中添加 Barrier 对象,以与 threading 和 multiprocessing 库中的 Barrier 保持一致。
bpo-35859:
re模块,修复了几个关于捕获组的 bug。在极少数情况下,捕获组会得到一个不正确的字符串。由马林提供补丁。
文档¶
bpo-47040: 澄清了
binascii.crc32()/zlib.adler32()/zlib.crc32()函数的旧 Python 版本兼容性说明。bpo-46033: 在其文档中澄清
for语句的执行。bpo-45790: 调整 自定义扩展类型:教程 中关于
ob_base字段和用于访问其内容的宏的不准确措辞。bpo-42340: 记录在某些情况下
KeyboardInterrupt可能导致代码进入不一致状态。如果需要,提供了一个示例解决方法以避免这种情况。bpo-41233: 将
Doc/library/exceptions.rst中引用的 errnos 链接到它们在Doc/library/errno.rst中的相应部分,反之亦然。之前这仅对 EINTR 和 InterruptedError 进行了操作。由 Yan "yyyyyyyan" Orestes 提供补丁。
测试¶
bpo-47205: 在 FreeBSD 上跳过
sched_getaffinity()和sched_setaffinity()错误情况的测试。bpo-46126: 在内部运行测试时恢复 'descriptions'。
bpo-47104: 重写
asyncio.to_thread()测试以使用unittest.IsolatedAsyncioTestCase。bpo-40280: 测试套件现在可以在 Emscripten 平台上运行。所有基于 fork、socket 和 subprocess 的测试都被跳过。
bpo-47037: 在 Windows 上跳过
strftime("%4Y")功能测试。它可能会在调试构建中引起断言错误。bpo-46587: 如果平台的
strftime不支持非可移植的 glibc 扩展,则跳过测试。bpo-47015:
os.sendfile()的一个测试用例已从已弃用的asyncore(参见 PEP 594 )转换为asyncio。补丁由 Oleg Iarygin 提供。
构建¶
bpo-40280: 添加配置选项
--enable-wasm-dynamic-linking以在wasm32-emscripten上启用dlopen和 MAIN_MODULE / SIDE_MODULE。bpo-46023:
makesetup现在可以检测并跳过所有重复的模块定义。第一个条目胜出。bpo-40280: 为 Emscripten 添加 SOABI
wasm32-emscripten,为 WASI 在 32bit WASM 上添加wasm32-wasi,以及wasm64对应物。bpo-47032: 确保当构建的一部分失败时,Windows 安装构建能够正确地以非零退出码失败。
bpo-47024: 为 macOS 安装程序和所有 Windows 构建更新 OpenSSL 到 1.1.1n。
bpo-46973: 添加
regen-configuremake 目标以使用 Christian 的容器镜像quay.io/tiran/cpython_autoconf:269重新生成配置脚本。bpo-46917: 构建 Python 现在需要支持 IEEE 754 浮点数。补丁由 Victor Stinner 提供。
bpo-45774:
configure现在验证所有sqlite3扩展模块所需的 SQLite C API 是否都已找到。
Windows¶
bpo-47194: 更新
zlib到 v1.2.12 以解决 CVE-2018-25032。bpo-47171: 支持在 Windows ARM64 上安装
py.exe启动器。bpo-46566: 升级 适用于Windows的Python启动器 以支持新的
-V:company/tag参数,实现完整的 PEP 514 支持,并检测 ARM64 安装。参数中的-64后缀已被弃用,但仍会选择任何非 32 位的安装。设置PYLAUNCHER_ALLOW_INSTALL并指定未安装的版本将尝试从 Microsoft Store 安装请求的版本。bpo-47086: Windows 安装程序现在包含的文档是松散的 HTML 文件,而不是一个单一的编译
.chm文件。bpo-46907: 更新 Windows 安装程序,使用 SQLite 3.38.1。
bpo-44549: Update bzip2 to 1.0.8 in Windows builds to mitigate CVE-2016-3189 and CVE-2019-12900
bpo-46948: 通过确保 Windows 安装程序中的“添加到 PATH”选项在修复时使用正确的路径,防止 CVE-2022-26488。
macOS¶
工具/示例¶
bpo-40280: 用 Katie Bell 的 python-wasm 项目中的 browser-ui REPL 替换 Emscripten 的有限 shell。
C API¶
bpo-40421: 添加
PyFrame_GetBuiltins、PyFrame_GetGenerator和PyFrame_GetGlobalsC-API 函数,以便从 C 代码安全地访问帧对象属性。bpo-46850: 将私有的
_PyFrameEvalFunction类型,以及私有的_PyInterpreterState_GetEvalFrameFunc()和_PyInterpreterState_SetEvalFrameFunc()函数移至内部 C API。_PyFrameEvalFunction回调函数类型现在使用属于内部 C API 的_PyInterpreterFrame类型。由 Victor Stinner 提供补丁。bpo-46850: 将未公开的私有函数
_PyEval_EvalFrameDefault()移至内部 C API。该函数现在使用属于内部 C API 的_PyInterpreterFrame类型。由 Victor Stinner 提供补丁。bpo-46850: 从 C API 中移除未公开的私有函数
_PyEval_CallTracing()。改为调用公开的sys.call_tracing()函数。由 Victor Stinner 提供补丁。bpo-46850: 从 C API 中移除未公开的私有函数
_PyEval_GetCoroutineOriginTrackingDepth()。改为调用公开的sys.get_coroutine_origin_tracking_depth()函数。由 Victor Stinner 提供补丁。bpo-46850: 从 C API 中移除以下未公开的私有函数:
_PyEval_GetAsyncGenFirstiter()_PyEval_GetAsyncGenFinalizer()_PyEval_SetAsyncGenFirstiter()_PyEval_SetAsyncGenFinalizer()
改为调用公开的
sys.get_asyncgen_hooks()和sys.set_asyncgen_hooks()函数。补丁由 Victor Stinner 提供。bpo-46987: 移除私有函数
_PySys_GetObjectId()和_PySys_SetObjectId()。由 Donghee Na 提供补丁。bpo-46906: 添加新的函数来打包和解包 C 双精度(序列化和反序列化):
PyFloat_Pack2(),PyFloat_Pack4(),PyFloat_Pack8(),PyFloat_Unpack2(),PyFloat_Unpack4()和PyFloat_Unpack8()。由 Victor Stinner 提供补丁。
Python 3.11.0 alpha 6¶
发布日期:2022-03-07
核心与内置函数¶
bpo-46940: 避免覆盖嵌套属性访问调用的
AttributeError元数据信息。由 Pablo Galindo 提供补丁。bpo-46927: 在非泛型类型下标错误消息中包含类型的名称。
bpo-46921: 支持
super()的 vectorcall。由 Ken Jin 提供补丁。bpo-46841: 使用 oparg 来简化
GET_AWAITABLE中有用错误消息的构造。bpo-46903: 确保 str 子类可以作为具有虚拟字典的实例的属性名。修复了 3.11alpha 中的回归问题。
bpo-46841: 为
COMPARE_OP后跟EXTENDED_ARG添加更详细的专门化失败统计信息。bpo-46891: 修复了 3.11alpha 中引入的 bug,其中带有
__slots__的types.ModuleType子类未正确初始化,导致解释器崩溃。bpo-46841: 对
LOAD_ATTR、LOAD_METHOD和STORE_ATTR使用内联缓存。bpo-46841: 对
BINARY_SUBSCR使用内联缓存。bpo-46841: 对
COMPARE_OP使用内联缓存。bpo-46864: 弃用
PyBytesObject.ob_shash。它将在 Python 3.13 中被移除。bpo-46841: 对
UNPACK_SEQUENCE使用内联缓存。bpo-46845: 当所有插入的键都是 Unicode 时,通过从哈希表中移除哈希值来减小字典大小。例如,在 64 位平台上,
sys.getsizeof(dict.fromkeys("abcdefg"))从 352 字节变为 272 字节。bpo-46841: 对
LOAD_GLOBAL使用内联缓存。bpo-46852: 将私有的未文档化的
float.__set_format__()方法重命名为float.__setformat__(),以修复 Python 3.7 中引入的拼写错误。该方法仅由 test_float 使用。由 Victor Stinner 提供补丁。bpo-46852: 移除未文档化的私有
float.__set_format__()方法,该方法在 Python 3.7 中曾被称为float.__setformat__()。其文档字符串说明:"您可能不想使用此函数。它主要存在于 Python 的测试套件中使用。" 由 Victor Stinner 提供补丁。bpo-40116: 修复了当 other 是键共享字典时,dict.update(other) 可能不尊重 other 的迭代顺序的回归问题。
bpo-46712: 在深度冻结模块中共享全局字符串标识符。
bpo-46430: 修复深度冻结模块中内部字符串的内存泄漏问题。
bpo-45107: 为具有字典的实例专门化
LOAD_METHOD。bpo-44337: 减少专门化的
LOAD_ATTR和STORE_ATTR指令的内存使用。bpo-46729: 在
BaseException.__str__()中添加子异常的数量。bpo-45885: 在收集专门化统计信息时不要取消适配
COMPARE_OP。bpo-46794: 将 libexpat 版本提升至 2.4.6。
bpo-46823: 实现一个专门的组合操作码
LOAD_FAST__LOAD_ATTR_INSTANCE_VALUE。由 Dennis Sweeney 提供补丁。bpo-46820: 修复在数字字面量后紧跟着(无空格)"not in" 关键字时的解析问题,例如
1not in x。现在解析器仅发出警告,而非语法错误。bpo-46329: 在调用序列中将
KW_NAMES移动到PRECALL指令之前。更改CALL的operand以匹配PRECALL,便于专门化。bpo-46808: 从 compile.c 中移除
NEXT_BLOCK宏,并使编译器在需要时自动生成隐式块。bpo-46329: 添加
PUSH_NULL指令。这在评估可调用对象时用作前缀,以便堆栈对于方法和其他调用具有相同的形状。PRECALL_FUNCTION和PRECALL_METHOD被合并为单一的PRECALL指令。语义上没有变化。
bpo-46762: 修复在调试版本中,当 '<'、'>' 或 '=' 是 f 字符串中缺失右大括号的最后一个字符时的断言失败。
bpo-46730: 由于获取、设置或删除没有相应函数的属性而导致的 AttributeError 消息现在会提到该属性实际上是一个属性,并且还指定了它所属的类的类型。
bpo-46724: 确保所有向后跳转都使用
JUMP_ABSOLUTE指令,而不是使用参数为(2**32)+offset的JUMP_FORWARD。bpo-46732: 更正
__bool__()方法的文档字符串。补丁由 Jelle Zijlstra 提供。bpo-46707: 避免在产生涉及大量括号的某些语法错误时可能出现的指数级回溯。由 Pablo Galindo 提供补丁。
bpo-46323:
ctypes现在在调用 Python 回调函数时在栈上而非堆上分配内存以传递参数。由 Donghee Na 提供补丁。bpo-46702: 为
tuple和list解包特化UNPACK_SEQUENCE。bpo-46072: 现在使用
--enable-pystats收集操作码对统计信息。定义DYNAMIC_EXECUTION_PROFILE或DXPAIRS不再有任何效果。bpo-46675: 允许拆分字典在合并前包含超过 16 个项目。现在限制为 254 个。
bpo-40479: 在
Modules/_hashopenssl.c中添加一个遗漏的va_end()调用。bpo-46323: 调用 ctypes 回调函数时使用
PyObject_Vectorcall()。由 Donghee Na 提供补丁。bpo-46615: 在
setobject.c中内部迭代集合时,对集合中的结果项获取强引用。这防止了在各种集合操作的边角情况下集合被修改导致的崩溃。bpo-45828: 字节码编译器现在尝试在编译时应用运行时栈操作(只要这样做是可行的)。
bpo-30496: 修复了
PyLong_FromLong()实现中的一个小的可移植性问题,并为PyLong_FromLongLong()添加了单数字整数的快速路径。
库¶
bpo-25707: 修复了
xml.etree.ElementTree.iterparse()中当迭代器未被耗尽时的文件泄露问题。由 Jacob Walls 提供补丁。bpo-46877: 在
unittest中导出unittest.doModuleCleanups()。由 Kumar Aditya 提供补丁。bpo-46848: 出于性能考虑,使用来自
find()和rfind()的优化字符串搜索实现替代find()和rfind()。bpo-46736:
SimpleHTTPRequestHandler现在使用 HTML5 语法。由 Donghee Na 提供补丁。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-46786: xml.etree.ElementTree 中的 HTML 序列化现在将
embed、source、track和wbr写为空标签,符合 HTML5 的定义。bpo-39327:
shutil.rmtree()现在可以在客户操作系统中运行时与 VirtualBox 共享文件夹一起工作。bpo-45390: 将
asyncio.CancelledError消息从内部任务传播到外部等待者。bpo-46756: 修复了
urllib.request.HTTPPasswordMgr.find_user_password()和urllib.request.HTTPPasswordMgrWithPriorAuth.is_authenticated()中的一个漏洞,该漏洞允许绕过授权。例如,如果用户被授权访问 URIexample.org/foo,则允许访问 URIexample.org/foobar。bpo-46737:
random.gauss()和random.normalvariate()现在有默认参数。bpo-46752: 向 asyncio 添加任务组(结构化并发,灵感来自 Trio 的 nurseries)。这也引入了任务取消的变化,其中被取消的任务在调用 .uncancel() 之前不能被再次取消。
bpo-46333: 当设置
module参数时,typing.ForwardRef的__repr__()方法现在会包含typing.ForwardRef的module参数。bpo-46643: 在
typing.get_type_hints()中,支持评估字符串化的ParamSpecArgs和ParamSpecKwargs注解。由 Gregory Beauregard 提供补丁。bpo-45863: 当
tarfile模块创建 pax 格式的存档时,它会在 ustar 头中放置时间戳的整数表示(如果可能的话),以便于旧的解档工具使用,此外还会在 pax 扩展头中放置现有的全精度时间戳。bpo-46066: 弃用基于 kwargs 的
typing.TypedDict定义语法。在指定完全性时它有着令人困惑的语义,并且很大程度上未被使用。由 Jingchen Ye 提供补丁。bpo-46676: 使
typing.ParamSpec的 args 和 kwargs 等于它们自己。由 Gregory Beauregard 提供补丁。bpo-46323:
ctypes.CFUNCTYPE()和ctypes.WINFUNCTYPE()现在会在其_argtypes_成员包含太多参数时创建类型失败。以前,错误仅在调用函数时引发。由 Victor Stinner 提供补丁。bpo-46672: 修复
asyncio.gather()中初始类型检查失败时的NameError。bpo-46659: 如果未指定区域设置,
calendar.LocaleTextCalendar和calendar.LocaleHTMLCalendar类现在会使用locale.getlocale(),而不是使用locale.getdefaultlocale()。由 Victor Stinner 提供补丁。bpo-46659:
locale.getdefaultlocale()函数已被弃用,并将在 Python 3.13 中移除。请使用locale.setlocale()、locale.getpreferredencoding(False)和locale.getlocale()函数代替。由 Victor Stinner 提供补丁。bpo-46655: 在
typing.get_type_hints()中,支持评估裸字符串化的TypeAlias注解。由 Gregory Beauregard 提供补丁。bpo-45948: 修复了
xml.etree.ElementTree模块 C 实现中的一个不一致之处。现在,实例化xml.etree.ElementTree.XMLParser时使用target=None关键字参数会像 Python 实现一样提供一个默认的xml.etree.ElementTree.TreeBuilder目标。bpo-46626: 在
socket中公开了 Linux 的IP_BIND_ADDRESS_NO_PORT选项。bpo-46521: 修复了
codeop模块中的一个 bug,该 bug 错误地将涉及字符串引号的无效代码识别为有效代码。bpo-46571: 改进了
typing.no_type_check()。现在它不会修改外部的类和函数。我们还正确地标记了类方法为不被类型检查。
bpo-46400: expat: 将 libexpat 从 2.4.1 更新至 2.4.4
bpo-46556: 弃用将
pathlib.Path对象用作上下文管理器的未文档化支持。bpo-46534: 实现了 PEP 673
typing.Self。由 James Hilton-Balfe 提供补丁。bpo-46522: 使多个模块的
__getattr__AttributeErrors 更接近典型的 AttributeErrorbpo-46475: 添加了
typing.Never和typing.assert_never()。由 Jelle Zijlstra 提供补丁。bpo-46333:
typing.ForwardRef的__eq__()和__hash__()方法现在尊重typing.ForwardRef的module参数。现在可以区分来自不同模块的前向引用。bpo-46246: 为
importlib.metadata.DeprecatedList添加了缺失的__slots__。由 Arie Bovenberg 提供补丁。bpo-46195:
typing.get_type_hints()不再为默认值为None的参数添加Optional。这与 PEP 484 在 https://github.com/python/peps/pull/689 中的更改一致。bpo-31369: 将
RegexFlag添加到re.__all__并进行了文档化。添加NOFLAG以表示没有设置任何标志。bpo-45898:
ctypes不再在cfield.c中定义ffi_type_*符号。这些符号由 libffi 提供已有十余年。bpo-44953: 调用
operator.itemgetter对象和operator.attrgetter对象现在更快,因为使用了 vectorcall 调用约定。bpo-44289: 修复了
is_tarfile()方法在使用 fileobj 参数时的一个问题:fileobj 中的位置被向前推进,使得它无法通过tarfile.TarFile.open()读取。bpo-44011: 在 asyncio 中重新实现 SSL/TLS 支持,借用 uvloop 库的实现。
bpo-41086: 如果
interpolation参数不是configparser.Interpolation类型,configparser.ConfigParser构造函数将引发TypeError。bpo-29418: 实现
inspect.ismethodwrapper()并修复inspect.isroutine()对于给定 methodwrapper 的情况。由 Hakan Çelik 提供补丁。bpo-14156: argparse.FileType 现在支持二进制模式下的 '-' 参数,根据情况返回 sys.stdin/sys.stdout 的 .buffer 属性。当参数为 '-' 时,包含 'x' 和 'a' 的模式被视为等同于 'w'。补丁由 Josh Rosenberg 贡献
文档¶
bpo-42238:
Doc/tools/rstlint.py已移至其自己的仓库,现在在 PyPI 上打包为sphinx-lint。
测试¶
bpo-46913: 如果 Python 是用未定义行为消毒剂 (UBSAN) 构建的,修复 test_faulthandler.test_sigfpe():在 faulthandler_sigfpe() 函数上禁用 UBSAN。由 Victor Stinner 提供补丁。
bpo-46760: 从 test.test_dis 模块中的期望值中移除字节码偏移。减少修改虚拟机或编译器的障碍。
bpo-46708: 防止
test_asyncio执行后默认 asyncio 事件循环策略修改警告。bpo-46678:
Lib/test/support/import_helper.py中的函数make_legacy_pyc不再在PYTHONPYCACHEPREFIX设置为与存储临时文件不同的设备上的目录时失败。bpo-46623: 在s390x上跳过test_zlib的test_pair()和test_speech128()测试,因为如果zlib使用s390x硬件加速器,这些测试会失败。由Victor Stinner提供补丁。
构建¶
bpo-46860: 在大小写不敏感的文件系统上构建时,尊重
--with-suffix选项。bpo-46656: 现在构建Python需要一个C11编译器。不需要可选C11功能。补丁由Victor Stinner提供。
bpo-46656: 构建 Python 现在需要支持浮点数非数字 (NaN):移除
Py_NO_NAN宏。补丁由 Victor Stinner 提供。bpo-46640: 现在构建 Python 需要一个提供
NAN常量的C99<math.h>头文件,或者__builtin_nan()内置函数。 由 Victor Stinner 提供补丁。bpo-46608: 如果深度冻结,排除已封装的冻结数据以节省300 KB磁盘空间。这包括向
_frozen添加一个新的is_package字段。由Kumar Aditya提供补丁。bpo-40280: 修复 wasm32-emscripten 测试失败和平台问题。 - 禁用不支持或无法工作的系统调用,例如 wait、getrusage、prlimit、mkfifo、mknod、setres[gu]id、setgroups。 - 使用 fd_count 统计打开的文件描述符数量。 - 为 subprocess 和 fork 添加更多检查。 - 为缺失的 _multiprocessing 和失败的 socket.accept() 添加变通方案。 - 启用 bzip2。 - 禁用大文件支持。 - 禁用 signal.alarm。
bpo-46430: 在深度冻结的模块中内部化字符串。由Kumar Aditya提供补丁。
Windows¶
IDLE¶
C API¶
bpo-46748: Python 的公共头文件不再导入
<stdbool.h>,从而使嵌入/扩展 Python 的代码可以自由定义bool、true和false。bpo-46836: 将
PyFrameObject类型定义(struct _frame)移动到内部 C APIpycore_frame.h头文件中。由 Victor Stinner 提供补丁。bpo-45459: 将
Include/buffer.h头文件重命名为Include/pybuffer.h,以避免与已有buffer.h头文件的项目发生冲突。补丁由 Victor Stinner 提供。bpo-45412: 移除
HAVE_PY_SET_53BIT_PRECISION宏(已移至内部 C API)。由 Victor Stinner 提供补丁。bpo-46613: 新增函数
PyType_GetModuleByDef(),允许在方法的定义类不可用时访问模块状态。
Python 3.11.0 第 5 个 alpha 版本¶
发布日期:2022-02-03
核心与内置函数¶
bpo-45773: 从字节码编译器中移除两个无效的 "peephole" 优化。
bpo-45885: 关于
COMPARE_OP字节码,添加了更细粒度的特化失败统计。bpo-44977:
int()委托给__trunc__()的做法现在已被弃用。当type(a)实现了__trunc__()但没有实现__int__()或__index__()时,调用int(a)现在会引发DeprecationWarning。bpo-46458: 重新排序编译器为
try-except块生成的代码,使得else块的代码紧随try体之后(无需跳转)。这对快乐路径更优。bpo-46527: 再次允许将
iterable作为关键字参数传递给enumerate()。由 Jelle Zijlstra 提供补丁。bpo-46528: 用新的
COPY和SWAP指令替换多个堆栈操作指令(DUP_TOP、DUP_TOP_TWO、ROT_TWO、ROT_THREE、ROT_FOUR和ROT_N)。bpo-46329: 使用两个或三个字节码来实现大多数调用。
没有命名参数的调用作为两个指令的序列实现:
PRECALL; CALL。有命名参数的调用作为三个指令的序列实现:PRECALL; KW_NAMES; CALL。有两种不同的PRECALL指令:PRECALL_FUNTION和PRECALL_METHOD。后者与LOAD_METHOD配对使用。这种将调用分为预调用和调用的分区允许更好的专门化,从而最终获得更好的性能。
语义上没有变化。
bpo-46503: 修复在解析 f-strings 中一些无效的 N 转义序列时的断言。
bpo-46431: 改进对无效调用
BaseExceptionGroup.__new__()时的错误消息。bpo-46476: 修复由 deepfreeze 生成的代码对象中的内存泄漏。由 Kumar Aditya 提供补丁。
bpo-46481: 通过使用 PEP 590
vectorcall调用约定加速对weakref.ref.__call__()的调用。由 Donghee Na 提供补丁。bpo-46417: 修复设置类型
__bases__属性时的竞争条件:内部函数add_subclass()现在在调用PyWeakref_NewRef()后获取PyTypeObject.tp_subclasses成员,这可以触发垃圾回收,间接修改PyTypeObject.tp_subclasses。由 Victor Stinner 提供补丁。bpo-46417:
python -X showrefcount现在在清除并销毁主 Python 解释器后显示总引用计数。之前是在之前显示的。由 Victor Stinner 提供补丁。bpo-43683: 添加 ASYNC_GEN_WRAP 操作码来包装异步生成器中要产生的值。移除了在
YIELD_VALUE指令中特殊处理异步生成器的需要。bpo-46407: 优化
Objects/longobject.c中的一些模运算。补丁由 Jeremiah Vivian 提供。bpo-46409: 添加新的
RETURN_GENERATOR字节码以生成器。简化了在虚拟机中调用Python函数的过程,因为它们不再需要特别处理生成器函数。同时添加
JUMP_NO_INTERRUPT字节码,其行为类似于JUMP_ABSOLUTE,但不检查中断。bpo-46406: 整数除法
//的实现已优化,以便编译器更好地理解其约束。在amd64平台上,当除以小于2**30的值时,速度可以提高20%。bpo-46383: 修复
_zoneinfo的module_free函数的无效签名,以解决wasm32-emscripten平台上的崩溃问题。bpo-46361: 确保通过
int.from_bytes()和decimal.Decimal创建的“小”整数被正确缓存。bpo-46161: 修复当参数为常量且使用 CALL_FUNCTION_EX 时的类构建错误。
bpo-46028: 修复在虚拟环境中使用与基础环境提供的不同二进制名称的符号链接时
sys._base_executable的计算。bpo-46091: 正确计算以行继续字符结尾的带有空白字符的行的缩进级别。由Pablo Galindo提供补丁。
bpo-30512: 为NetBSD添加CAN Socket支持。
bpo-46045: 在 NetBSD 上不使用 POSIX 信号量。
bpo-44024: 改进内置函数
getattr()和hasattr()传递非字符串第二个参数时的TypeError消息。由Géry Ogam提供补丁。
库¶
bpo-46624: 恢复对
random.randrange()和random.randint()非整数参数的支持。bpo-46591: 使About IDLE对话框中的IDLE文档URL可点击。
bpo-46565: 移除泄漏到模块命名空间中的循环变量。
bpo-46553: 在
typing.get_type_hints()中,支持评估裸字符串化的ClassVar注解。由Gregory Beauregard提供补丁。bpo-46544: 不要在
textwrap.TextWrapper中泄漏x和uspace中间变量。bpo-46487: 在
asyncio.transports.WriteTransport和 SSL 传输中添加get_write_buffer_limits方法。bpo-45173: 注意 configparser 的弃用将在 Python 3.12 中移除。
bpo-45162: 在 3.11a1 中移除的已弃用的
unittestAPI 已被临时恢复,将在外部项目清理完成后于 3.12 中移除。bpo-46539: 在
typing.get_type_hints()中,支持在Annotated内部评估字符串化的ClassVar和Final注解。由 Gregory Beauregard 提供补丁。bpo-46510: 添加
types.TracebackType和types.FrameType的缺失测试。直接从捕获的异常中计算它们,而不调用sys.exc_info()。bpo-46491: 允许
typing.Annotated包装typing.Final和typing.ClassVar。由 Gregory Beauregard 提供补丁。bpo-46483: 从
pathlib.PurePath中移除__class_getitem__(),因为该类不应是泛型的。bpo-46436: 修复模块
http.server中的命令行选项-d/--directory,当与命令行选项--cgi结合使用时被忽略的问题。由 Géry Ogam 提供补丁。bpo-41403: 使
mock.patch()在无效参数上引发带有相关错误信息的TypeError。之前它允许一个难以理解的AttributeError逃逸。bpo-46474: 在
importlib.metadata.EntryPoint.pattern中,通过限制连续空白字符的歧义性来避免潜在的 REDoS。bpo-46474: 从
importlib.metadata.Path中移除了私有方法。与 importlib_metadata 4.10.0 同步。bpo-46470: 从
typing._remove_dups_flatten中移除未使用的分支。bpo-46469:
asyncio泛型类现在在__class_getitem__中返回types.GenericAlias而不是同一个类。bpo-41906: 支持在传递给
logging.config.dictConfig()的字典中的handlers和loggers的filters值中传递过滤器实例。bpo-46422: 在
dis.Instruction中使用dis.Positions而不是常规的tuple。bpo-46434: 当缺少
__doc__时(例如使用预生成的优化.pyc文件运行时),pdb现在能够妥善处理help。bpo-43869: Python 在所有平台上使用相同的时间纪元。添加一个明确的单元测试以确保这一点。由 Victor Stinner 提供补丁。
bpo-46414: 添加
typing.reveal_type()。由 Jelle Zijlstra 提供补丁。bpo-40280:
subprocess现在在有msvcrt模块可用时导入特定于 Windows 的导入,在所有其他平台上导入特定于 POSIX 的导入。这提供了一个干净的异常当_posixsubprocess不可用时(例如 Emscripten 浏览器目标)。bpo-40066:
IntEnum,IntFlag, 和StrEnum使用混合类型作为它们的str()和format()输出。bpo-46316: 通过移除对特殊条目不必要的检查来优化
pathlib.Path.iterdir()。bpo-29688: 记录
pathlib.Path.absolute()(一直存在) 。bpo-43012: pathlib 模块中过时且内部的
_Accessor类已被移除,为模块即将到来的增强做准备。bpo-46258: 通过用查找表替换两个除法步骤来加速小正整数的
math.isqrt()。bpo-46242: 当使用
enum.Enum.__call__()创建一个新的enum.Enum类型,该类型继承了一个带有_member_names_的现有Enum时,改进错误消息。bpo-43118: 修复
inspect.signature()中的一个 bug,该 bug 导致它在某些引用模块全局的__text_signature__的类的子类上失败。由 Weipeng Hong 提供补丁。bpo-26552: 修复了
asyncio.ensure_future()失败时未关闭协程的情况。由 Kumar Aditya 提供补丁。bpo-21987: 修复
tarfile.TarFile.getmember()获取带有尾随斜杠的目录名的问题。bpo-46103: 现在
inspect.getmembers()仅从类类型获取__bases__属性。补丁由 Weipeng Hong 提供。bpo-46080: 修复了如果
argparse.BooleanOptionalAction参数的默认值为argparse.SUPPRESS并且指定了help时,在 argparse 帮助文本生成中出现的异常。补丁由 Felix Fontein 提供。bpo-44791: 修复了在不同参数表达式中
ParamSpec在Concatenate中的替换问题。现在用类型列表替换会返回一个类型元组。用Concatenate替换现在会返回一个带有连接参数列表的Concatenate。
文档¶
bpo-46463: 修复了构建 CHM 文档文件时使用的
escape4chm.py脚本。
测试¶
bpo-43478: Mock 不能再作为其他 Mock 的规范提供。因此,已经 mock 的对象不能传递给
mock.Mock()。这可以揭示测试中的错误,因为这些 Mock 派生的 Mock 总是会通过某些测试(例如 isinstance),并且内置的断言函数(例如 assert_called_once_with)将无条件通过。bpo-46616: 确保
test_importlib.test_windows在完成后清理注册表键。bpo-44359: test_ftplib 现在默默地忽略套接字错误,以防止记录未处理的线程异常。由 Victor Stinner 提供补丁。
bpo-46600: 修复了使用
clang -Og构建的 Python 的 test_gdb.test_pycfunction()。在 gdb 回溯中容忍内联函数。由 Victor Stinner 提供补丁。bpo-46542: 修复了在使用调试模式构建的 Python 中 test_lib2to3 的 Python 崩溃:限制递归限制。由 Victor Stinner 提供补丁。
bpo-46576: test_peg_generator 现在在测试其自己的 C 扩展的编译时禁用编译器优化,以显著加快在 CPython 的非调试构建上的测试速度。
bpo-46542: 修复
test_json测试中对RecursionError的检查:修改这些测试以使用support.infinite_recursion()。由 Victor Stinner 提供补丁。bpo-13886: 如果加载了 readline 模块,则跳过针对非 ASCII 字符的 test_builtin PTY 测试。readline 模块会改变 input() 的行为,但 test_builtin 的目的并不是测试 readline 模块。补丁由 Victor Stinner 提供。
bpo-40280: 添加
test.support.requires_fork()装饰器以标记需要os.fork()正常工作的测试。bpo-40280: 添加
test.support.requires_subprocess()装饰器以标记需要subprocess模块或os.spawn*正常工作的测试。wasm32-emscripten 平台不支持进程。bpo-46126: 在内部运行测试时禁用 'descriptions'。
构建¶
bpo-46602: 整理 configure.ac 使得 conftest.c 被截断而非追加。这在 'rm' conftest.c 在测试之间未能发生时有所帮助。可能导致诸如 SOABI 被破坏的下游问题。
bpo-46600: 修复
./configure脚本中检查 C 编译器是否支持-Og选项的测试,以同样在支持-Og的 clang 上使用该选项。由 Victor Stinner 提供补丁。bpo-38472: 修复交叉编译时 setup.py 中的 GCC 检测。现在 C 编译器以 LC_ALL=C 运行。之前,检测在德语环境下会失败。
bpo-46513: configure 不再使用
AC_C_CHAR_UNSIGNED宏,且pyconfig.h不再定义保留符号__CHAR_UNSIGNED__。bpo-46471: 在 deepfreeze 中使用全局单例作为单字节 bytes 对象。
bpo-46443: Deepfreeze 现在使用缓存的小整数,因为它为常见的小整数节省了一些空间。
bpo-46429: 将所有深度冻结文件合并为一个以节省空间。由 Kumar Aditya 提供补丁。
bpo-45569: Python 整数的构建现在默认使用 30 位数字。之前会根据平台选择 15 位或 30 位数字。仍然可以通过在
configure脚本中使用--enable-big-digits=15选项,或在pyconfig.h中定义PYLONG_BITS_IN_DIGIT来选择 15 位数字。bpo-45925: 更新 Windows 安装程序以使用 SQLite 3.37.2。
bpo-43112: 检测 musl libc 作为一个单独的 SOABI(标记为
linux-musl)。
Windows¶
macOS¶
bpo-45925: 更新 macOS 安装程序到 SQLite 3.37.2。
IDLE¶
bpo-45296: 在 IDLE 中明确了关闭、退出和退出的区别。在文件菜单中,'关闭' 和 '退出' 现在是 '关闭窗口'(当前窗口)和 '退出 IDLE'(通过关闭所有窗口)。在 Shell 中,'quit()' 和 'exit()' 意思是 '关闭 Shell'。如果没有其他窗口,这也将退出 IDLE。
C API¶
bpo-40170: 移除了
PyHeapType_GET_MEMBERS()宏。它被错误地暴露在公共 C API 中,必须仅由 Python 内部使用。使用PyTypeObject.tp_members成员代替。由 Victor Stinner 提供的补丁。bpo-40170: 将 _Py_GetAllocatedBlocks() 和 _PyObject_DebugMallocStats() 私有函数移动到内部 C API。由 Victor Stinner 提供的补丁。
bpo-46433: 内部函数 _PyType_GetModuleByDef 现在正确处理涉及静态类型的继承模式。
bpo-45459:
Py_buffer和各种Py_buffer相关函数现在是有限 API 和稳定 ABI 的一部分。bpo-14916: 修复了 tokenizer 中的一个错误,该错误阻止了
PyRun_InteractiveOne从提供的 FD 解析。
Python 3.11.0 alpha 4¶
发布日期: 2022-01-13
核心与内置函数¶
bpo-46070:
Py_EndInterpreter()现在会显式取消追踪当前由垃圾回收器追踪的所有对象。在此之前,如果某个对象之后被另一个解释器使用,当PyGC_Head结构体的前一个或后一个对象变成悬垂指针时,对该对象调用PyObject_GC_UnTrack()会导致崩溃。补丁由 Victor Stinner 提供。bpo-46347: 修复PyEval_EvalCodeEx中的内存泄漏。
bpo-46339: 修复解析器在检索多行f-strings表达式的错误文本时崩溃的问题,这些表达式不在字符串的第一行开始。由Pablo Galindo提供补丁。
bpo-46331: 不要设置存储文档字符串的指令的行号。修复了在3.11 alpha中引入的回归问题。
bpo-46314: 移除在创建lambda函数时意外引入的虚假“call”事件,该事件是在3.11a4中意外引入的。
bpo-46289:
FormattedValue的ASDL声明已更改,以反映conversion字段不是可选的。bpo-46297: 修复了在启动时在Windows注册表中设置多个PythonPaths时解释器崩溃的问题。补丁由Derzsi Dániel提供。
bpo-46237: 修复f-strings内部标记器错误的行号。由Pablo Galindo提供补丁。
bpo-46263: 我们现在总是期望“use_frozen_modules”配置被设置,因为getpath.c已经在纯Python中重写并且逻辑得到了改进。
bpo-46006: 修复当类型方法如
__init__()在子解释器中被修改时的回归问题。修复_PyUnicode_EqualToASCIIId()和类型update_slot()中的回归问题。恢复使Unicode内部字符串字典与子解释器兼容的更改:内部内部字符串字典再次由所有解释器共享。由Victor Stinner提供补丁。bpo-45923: 添加RESUME操作码。这是一个逻辑上的无操作。它由编译器在可以进入Python函数的任何地方发出。它被解释器用于执行跟踪和优化器检查。
bpo-46208: 修复 os.path.normpath("A/../../B") 未返回预期的 "../B" 而是返回 "B" 的回归问题。
bpo-46240: 当错误报告时,如果标记器未到达源代码的末尾,则修正未闭合括号的错误消息。补丁由 Pablo Galindo 提供。
bpo-46009: 移除
GEN_START操作码。bpo-46235: 由于引用计数优化,现在某些序列乘法操作如
[0] * 1_000更快了。由 Dennis Sweeney 提供补丁。bpo-46221:
PREP_RERAISE_STAR不再将lasti压入栈中。bpo-46202: 移除
POP_EXCEPT_AND_RERAISE并用其他操作码的等价序列替代。bpo-46085: 修复
OrderedDict的迭代器缓存机制。bpo-46055: 加速涉及小于
PyLong_BASE的整数的移位操作。补丁由 Xinhang Xu 提供。bpo-46110: 向 PEG 解析器添加最大递归检查以避免堆栈溢出。由 Pablo Galindo 提供补丁。
bpo-46107: 修复
ExceptionGroup.split()和ExceptionGroup.subgroup()未将异常组的__note__字段复制到部分的错误。bpo-45711: 解释器状态的处理异常表示(又称 exc_info 或 _PyErr_StackItem)现在只有
exc_value字段,exc_type和exc_traceback已被移除,因为它们的值可以从exc_value派生。bpo-44525: 用一个预调用指令和两个调用指令替换四个调用字节码指令。
移除
CALL_FUNCTION,CALL_FUNCTION_KW,CALL_METHOD和CALL_METHOD_KW。添加
CALL_NO_KW和CALL_KW调用指令,以及PRECALL_METHOD前缀与LOAD_METHOD配对。bpo-46039: 移除
YIELD_FROM指令并用执行相同操作但不带循环的SEND指令替代。bpo-45635: 重构了从
_PyErr_Display()调用的代码以改进错误处理。它现在会在遇到不可恢复的错误时立即退出。bpo-46054: 修复解析源文件中非utf8字符时的解析器错误。由Pablo Galindo提供补丁。
bpo-46042: 改进符号表发出的
SyntaxError异常中插入符号的位置。由Pablo Galindo提供补丁。bpo-46049: 确保
._pth文件在非Windows平台上按预期工作。bpo-46048: 修复启动时
._pth文件的解析,以便正确读取单字符路径。bpo-37971: 修复一个错误,该错误导致装饰器应用引发异常时,回溯中给出的行号错误。
bpo-46031: 添加
POP_JUMP_IF_NOT_NONE和POP_JUMP_IF_NONE操作码以加速条件跳转。bpo-46025: 修复
atexit模块中的一个崩溃问题,涉及在引发异常前自行注销的函数。由Pablo Galindo提供补丁。bpo-44525: 为调用带单一参数的内置类型专门化CALL_FUNCTION指令。加速
range(x),list(x),特别是type(obj)。bpo-42918: 修复内置
compile()函数在'single'模式下传递多个语句时并不总是引发SyntaxError的错误。由Weipeng Hong提供补丁。bpo-45953: _PyRuntimeState.interpreters中的主解释器现在是静态分配的(作为_PyRuntime的一部分)。每个解释器的初始线程状态也是如此。这意味着运行时初始化期间分配更少,以及这些关键状态对象更好的内存局部性。
bpo-43413: 恢复
set.__init__中的更改。set的子类如果定义了带有额外关键字参数的__new__()方法,那么它需要定义一个__init__()方法。bpo-43931: 添加了
Py_Version常量,其值与PY_VERSION_HEX相同。由 Gabriele N. Tornetta 提供补丁。
库¶
bpo-46342:
@typing.final装饰器现在会在被装饰的对象上设置__final__属性,以允许运行时内省。由 Jelle Zijlstra 提供补丁。bpo-46328: 添加了
sys.exception()方法,该方法返回活动的异常实例。bpo-46307: 添加
string.Template.is_valid()和string.Template.get_identifiers()方法。bpo-46306: 在
doctest中假设types.CodeType总是有types.CodeType.co_firstlineno。bpo-40479: 修复
hashlibusedforsecurity 选项,使其在 FIPS 模式下与 OpenSSL 3.0.0 正确工作。bpo-46070: 修复了从不同的子解释器并行导入
asyncio模块时可能出现的段错误。补丁由 Erlend E. Aasland 提供。bpo-46244: 从
typing.ParamSpec和typing.TypeVar中移除了__slots__。它们没有任何作用。由 Arie Bovenberg 提供补丁。bpo-46278: 在
AbstractEventLoop.call_*()方法中反映context参数。循环实现已经支持它。bpo-46269: 在
enum.Enum.__dir__()中移除了对__new__的特殊处理。-
现在所有常量(
MONDAY...SUNDAY)都已文档化、测试并添加到__all__中。 bpo-46257: 优化了 statistics 模块中的 mean、variance 和 stdev 函数。如果输入是一个迭代器,它将在单次遍历中被消耗,而不是通过转换为列表来消耗内存。单次遍历算法比之前的两遍代码快大约两倍。
bpo-41011: 在由
venv模块生成的 pyvenv.cfg 中新增了两个变量:executable 用于可执行文件,command 用于创建环境时使用的命令行。bpo-46239: 在非 Windows 系统上导入
asyncio.windows_events时改进了错误消息。bpo-46238: 在
asyncio.windows_events中重用_winapi常量。bpo-46222: 为 posixmodule 添加 FreeBSD 的
SF_NOCACHEsendfile 常量。bpo-37295: 为
math.comb()添加0 <= k <= n <= 67的快速路径。bpo-46176: 为 mmap 模块添加
MAP_STACK常量。bpo-43424: 弃用
webbrowser.MacOSXOSAScript._name,改用name。bpo-45321: 向模块
xml.parsers.expat.errors添加了缺失的错误代码。bpo-46125: 重构测试以直接测试可遍历 API。包括来自 importlib 5.4.0 的更改。
bpo-46118: 将 importlib.resources 及其相关功能移动到一个包中。
bpo-37578: 向
glob()和iglob()添加 include_hidden 参数,以在使用特殊字符如*,**,?和[]时匹配隐藏文件和目录。bpo-20369: 当给定重复的 Futures 时,
concurrent.futures.wait()不再永远阻塞。由 Kumar Aditya 提供补丁。bpo-46105: 在使用 URL 和 extras 生成需求规范时遵循规范(importlib_metadata 4.8.3)。
bpo-44893: EntryPoint 对象不再是元组。推荐的访问方式是通过属性('.name', '.group')或访问器('.load()')。通过索引访问已弃用,并将引发弃用警告。
bpo-22815: 在
unittest.TextTestResult的摘要中打印未预期的成功与失败和错误。bpo-22047: 弃用在参数组上调用
add_argument_group()。弃用在互斥组上调用add_argument_group()或add_mutually_exclusive_group()。这些功能从未被支持,且并不总是能正确工作。这些函数通过继承偶然存在于API中,将在未来被移除。
bpo-26952:
argparse在尝试为一个空的互斥组渲染用法时,会抛出一个带有清晰消息的ValueError。之前它抛出一个难以理解的IndexError。bpo-45615: 当异常参数不是
BaseException类型时,traceback模块中的函数会抛出TypeError而不是AttributeError。bpo-16594: 在 socketserver 中添加 allow_reuse_port 标志。
bpo-27718: 修复
signal模块的帮助文档。一些函数(例如signal()和getsignal())被遗漏了。bpo-46032:
functools.singledispatch()函数的registry()方法现在会检查第一个参数或第一个参数注解,并在不支持时抛出 TypeError。之前不支持的“类型”被忽略(例如typing.List[int])或在调用时引发错误(例如list[int])。bpo-46014: 添加使用
typing.Union和types.UnionType作为functools.singledispatch的调度参数的能力。由 Yurii Karabas 提供补丁。bpo-46018: 确保
math.expm1()在下溢时不抛出异常。bpo-46016: 将来自 FreeBSD 的
F_DUP2FD和F_DUP2FD_CLOEXEC常量添加到 fcntl 模块中。bpo-45755: 现在,当传递给
dir()时,typing泛型别名会显示原始泛型类的类属性。这是 Python 3.6 之前的行为,但在 3.7-3.9 中有所改变。bpo-45874: 现在,
urllib.parse.parse_qsl正确处理了不包含任何查询参数的空查询字符串。这在之前启用严格解析时会引发问题。bpo-44674: 修改数据类如何禁止可变默认值的方式。过去是使用一系列已知类型(列表、字典、集合)。现在则禁止不可哈希的对象作为默认值。这是用不可哈希性作为可变性的代理。由Eric V. Smith提供补丁,想法来自Raymond Hettinger。
bpo-23882: 从unittest发现中移除命名空间包(PEP 420)的支持。这一功能在Python 3.4中引入,但自Python 3.7以来已经损坏。
bpo-25066: 为
multiprocessing.Event对象添加了__repr__()方法,由Kumar Aditya提供补丁。bpo-45643: 在定义了这个信号的平台上添加了
signal.SIGSTKFLT。bpo-44092: 跨回滚的获取不再引发
InterfaceError。相反,我们让SQLite库来处理这些情况。由Erlend E. Aasland提供补丁。bpo-42413: 用内置的
TimeoutError替换concurrent.futures.TimeoutError和asyncio.TimeoutError,保留这些名称作为已弃用的别名。
文档¶
测试¶
bpo-46296: 为
enum添加一个测试用例,条件是_use_args_ == True和_member_type_ == object。bpo-46205: 修复由于竞态条件导致的runtest_mp中的挂起问题。
bpo-46263: 在FreeBSD 14-dev上修复test_capi:指示jemalloc不要用垃圾字节填充释放的内存。
bpo-46262: 在
enum.Flag._missing_()的测试中覆盖ValueError路径。bpo-46150: 现在检查
test_pathlib.PosixPathTest.test_expanduser中的fakename是否不存在。bpo-46129: 使用
unittest.IsolatedAsyncioTestCase重写asyncio.locks测试。bpo-46114: 修复针对 OpenSSL 3.0.1 版本的测试用例。OpenSSL 3.0 使用
0xMNN00PP0L。
构建¶
bpo-44133: 当 Python 配置了
--without-static-libpython时,不再构建 Python 静态库(libpython.a)。由 Victor Stinner 提供补丁。bpo-44133: 当 Python 构建时未使用
--enable-shared,python程序现在链接到对象文件,而不是 Python 静态库(libpython.a),以确保所有符号都被导出。之前,链接器省略了一些符号,如Py_FrozenMain()函数。由 Victor Stinner 提供补丁。bpo-40280:
configure脚本新增了一个选项--with-emscripten-target,用于选择浏览器或 node 作为 Emscripten 构建目标。bpo-46315: 添加并修复了
#ifdef HAVE_FEATURE检查,针对 WASI 平台上不可用的功能。bpo-45723: 修复了
configure对select.epoll()检查的回归问题。bpo-46263:
configure不再在 FreeBSD 平台上设置MULTIARCH。bpo-46106: 在 Windows 构建、macOS 安装包构建和 CI 中更新 OpenSSL 到 1.1.1m。由 Kumar Aditya 提供补丁。
bpo-46088: 从 Visual Studio 构建时自动检测或安装引导 Python 运行时。
bpo-46072: 添加一个 --with-pystats 配置选项,用于开启内部统计收集。
bpo-40280: 新增一个目录
Tools/wasm,包含 WebAssembly 相关的辅助工具,如针对 wasm32-emscripten 的config.site覆盖、用于打包标准库的 wasm 资源生成器,以及一个 README。bpo-46023: makesetup 不再构建标记为 disabled 的扩展。这允许用户在
Modules/Setup.local中禁用模块。bpo-45949: 对除 importlib 引导文件外的所有文件使用纯 Python
freeze_module。交叉构建不再需要--with-freeze-moduleconfigure 选项。
Windows¶
bpo-46217: 移除了在Windows 8.1和早期Windows 10上不受支持且可能导致构建或运行时失败的参数。
macOS¶
bpo-40477: macOS的Python启动器应用程序现在能正确启动脚本,并在必要时在最近的macOS版本上运行终端应用程序。
C API¶
bpo-46236: 修复了
PyFunction_GetAnnotations()中的一个错误,该错误导致它返回一个tuple而不是dict。bpo-46140:
PyBuffer_GetPointer(),PyBuffer_FromContiguous(),PyBuffer_ToContiguous()和PyMemoryView_FromBuffer()现在通过const Py_buffer *而不是Py_buffer *获取缓冲区信息,因为它们不需要可变性。PyBuffer_FromContiguous()现在还将源缓冲区作为const void *,类似地,PyBuffer_GetPointer()将步幅作为const Py_ssize_t *。bpo-45855: 在文档中写明
PyCapsule_Import()的 no_block 参数现在是一个空操作。bpo-45855: 在stdlib模块中,用
PyImport_ImportModule()替换了已弃用的PyImport_ImportModuleNoBlock()的使用。由Kumar Aditya提供补丁。bpo-46007:
PyUnicode_CHECK_INTERNED()宏已被排除在有限的C API之外。它在那里从来不可用,因为它使用了在有限的C API中不可用的内部结构。由Victor Stinner提供补丁。
Python 3.11.0 alpha 3¶
发布日期: 2021-12-08
核心与内置函数¶
bpo-46009: 恢复 3.9 及更早版本中向新启动的生成器发送非 None 时的行为。 在 3.9 中,这不影响生成器的状态。 在 3.10.0 和 3.10.1 中,
gen_func().send(0)等同于gen_func().throw(TypeError(...),这会耗尽生成器。 在 3.10.2 及以后版本中,行为已恢复到 3.9 的状态。bpo-46004: 修复了涉及带有无效目标的for循环的
SyntaxError位置错误。由Pablo Galindo提供补丁。bpo-45711:
_PyErr_ChainStackItem()不再规范化exc_info(包括在异常实例上设置回溯信息),因为exc_info始终是已规范化的。bpo-45607: 向
BaseException添加了__note__字段。默认情况下为None,但可以设置为字符串,该字符串将添加到异常的跟踪信息中。bpo-45947: 将指向字典和值的指针立即放置在GC头之前。这将访问字典或值时的依赖内存加载次数从3次减少到1次。
bpo-45915: 在Linux、macOS和Windows上,
is_valid_fd现在使用更快的fcntl(fd, F_GETFD)。bpo-44530: 恢复了对
code.__new__audit event 的早期预发布版本的更改。bpo-42268: 如果所选编译器不支持内存清理器,则配置步骤失败。由Pablo Galindo提供补丁
bpo-45711:
exc_info的三个值现在总是相互一致。特别是,type和traceback字段现在是从异常实例派生的。这会影响sys.exc_info()和PyErr_GetExcInfo()的返回值,如果在处理异常时修改了异常实例,以及PyErr_SetExcInfo(),现在它会忽略提供给它的type和traceback参数。bpo-45727: 改进了自定义语法错误,只有当表达式在括号或方括号之间被检测到时,才触发可能缺少逗号的建议。由Pablo Galindo提供补丁
bpo-45885: 使用PEP 659机制专门化了
COMPARE_OP操作码。bpo-45786: 在帧对象中为解释器帧分配空间,以避免当帧对象比帧激活更持久时进行额外的分配。
bpo-45813: 修复了在协程被释放后调用 coro.cr_frame.clear() 时的崩溃问题。
bpo-45811: 改进解析器在遇到不可见控制字符时的分词器错误。由Pablo Galindo提供补丁
bpo-45848: 允许解析器直接从编码文件中获取错误行。由Pablo Galindo提供补丁
bpo-45709: 恢复3.10版本中追踪在with语句内引发的异常时的行为。
bpo-44525: 新增
COPY_FREE_VARS操作码,使从函数到框架的自由变量复制变得明确。有助于优化Python函数的调用。bpo-45829: 为类中实现
__getitem__方法的BINARY_SUBSCR操作码进行特化bpo-45826: 修复了在
NameError上调用.with_traceback(None)时发生的崩溃。这内部发生在unittest.TestCase.assertRaises()中。bpo-45822: 修复了解析器中的一个错误,该错误导致在没有提供标志时不尊重 PEP 263 编码声明。由Pablo Galindo提供补丁
bpo-45820: 修复了当解析器在未读取任何输入时失败时的段错误。由Pablo Galindo提供补丁
bpo-45738: 修复解析器中无效连续字符错误位置的计算。由Pablo Galindo提供补丁。
bpo-45636: 移除旧式字符串格式化的现有“快速路径”,因为它不再有任何可测量的影响。
bpo-45753: 通过跟踪溢出前的调用次数,使递归检查更加高效。
bpo-45773: 修复尝试优化某些跳转模式时的编译器挂起问题。
bpo-45764: 现在,当在
def语句后省略开括号(时,解析器会给出更好的错误信息:>>> def f: File "<stdin>", line 1 def f: ^ SyntaxError: expected '('
bpo-45609: 使用PEP 659机制专门化了
STORE_SUBSCR操作码。bpo-45636: 将所有数字型的
BINARY_*和INPLACE_*指令替换为单一的BINARY_OP实现。bpo-45582: 路径计算(称为
getpath)已被重新实现为一个冻结的Python模块。这应该不会有可见的影响,但可能会影响sys和sysconfig中引用的所有路径的计算。bpo-45450: 为带括号的参数改进了语法错误消息。由Pablo Galindo提供补丁。
库¶
bpo-27946: 修复了在替换
attrib字典的同时获取xml.etree.ElementTree.Element属性时可能发生的崩溃。bpo-45711: 让
asyncio在通过PyErr_Fetch()捕获异常后立即规范化异常,并在它们被存储为exc_info三元组之前。这使得asyncio与代码库的其余部分保持一致,其中exc_info三元组总是被规范化的。bpo-23819: 在asyncio中用异常替换了断言,由Kumar Aditya提供补丁。
bpo-13236:
unittest.TextTestResult和unittest.TextTestRunner现在更频繁地刷新输出流。bpo-45917: 添加了
math.exp2(),它返回2的x次幂。bpo-37658: 修复了在某些条件下
asyncio.wait_for()可能允许协程成功完成,但未能返回结果,可能导致内存泄漏或其他问题的问题。bpo-45876: 提高了statistics模块中stdev()和pstdev()的准确性。当输入是浮点数或分数时,输出是一个正确舍入的浮点数
bpo-44649: 处理了dataclass(slots=True)与一个字段有默认值,但init=False的情况。
bpo-45803: 向dataclasses.make_dataclass()添加了缺失的kw_only参数。
bpo-45837:
turtle.RawTurtle.settiltangle()自 Python 3.1 起已弃用,它现在会发出弃用警告,并将在 Python 3.13 中移除。请使用
turtle.RawTurtle.tiltangle()代替。turtle.RawTurtle.tiltangle()之前被错误地标记为弃用,其文档字符串已被更正。由 Hugo van Kemenade 提供补丁。
bpo-45831:
faulthandler现在可以在转储回溯时,通过一次 write() 系统调用写入仅包含 ASCII 的字符串(如文件名和函数名)。这减少了当两个线程或两个进程同时向同一文件(如 stderr)转储回溯时,产生不可读转储的风险。由 Victor Stinner 提供补丁。bpo-45828:
sqlite的 C 回调现在在启用回调回溯时使用不可引发异常。由 Erlend E. Aasland 提供补丁。bpo-41735: 在
PyObject_GetBuffer之前修复了zlib.Decompress.flush()方法中的线程锁。bpo-45235: 恢复了 argparse 的一个错误修复,该修复导致了处理子解析器默认参数时的回归。这防止了叶级参数优先于根级参数。
bpo-45754: 修复了 Python 3.11a1 和 3.11a2 中的一个回归问题,其中
sqlite3在检查 SQL 语句长度时会错误地使用SQLITE_LIMIT_LENGTH。现在使用SQLITE_LIMIT_SQL_LENGTH。由 Erlend E. Aasland 提供补丁。bpo-45766: 向
statistics.linear_regression()添加了 proportional 选项。bpo-45765: 在 importlib.metadata 中,修复了对于空路径的发行版发现。
bpo-45757: 修复了一个 bug,其中
dis在EXTENDED_ARG后跟一个不使用其参数的操作码时会产生错误的 oparg。bpo-45644: 使用
python3 -m json.tool infile infile进行原地 JSON 文件格式化现在可以正常工作,之前会导致文件为空。由 Chris Wesseling 提供补丁。bpo-45703: 当在程序运行时,一个命名空间包在另一个来自同一命名空间的模块被创建/安装在不同的
sys.path位置之前被导入时,调用importlib.invalidate_caches()函数现在也能保证新模块被注意到。bpo-45535: 改进
dir()对枚举的输出。bpo-45664: 修复
types.resolve_bases()和types.new_class()对于作为基类的types.GenericAlias实例的处理。bpo-45663: 修复
dataclasses.is_dataclass()对于是types.GenericAlias子类的数据类的处理。bpo-45662: 修复
dataclasses.InitVar与内置类类型别名的 repr,例如InitVar[list[int]]。bpo-43137: 通过 gio 工具而非过时的 gvfs-open 启动 GNOME 网页浏览器。
bpo-45429: 在 Windows 上,
time.sleep()现在使用支持高分辨率计时器的可等待计时器。由 Donghee Na 和 Eryk Sun 提供补丁。bpo-37295: 优化
math.comb()和math.perm()。bpo-45514: 弃用
importlib.resources中的旧函数。bpo-45507: 为 gzip.decompress 实现添加截断/缺失尾部的测试。
bpo-44733: 向
concurrent.futures.ProcessPoolExecutor添加max_tasks_per_child。这允许用户指定单个进程在执行前需要重启之前应执行的最大任务数。bpo-28806: 改进 netrc 库。netrc 文件不再需要包含所有令牌。如果登录名是匿名的,不再需要安全检查。
bpo-43498: 避免在调整
ProcessPoolExecutor的进程计数时可能出现的 “RuntimeError: dictionary changed size during iteration”。bpo-42158: 向
mimetypes添加 N-quads、N-triples、Notation3 和 TriG 的 MIME 类型。bpo-30533: 添加
inspect.getmembers_static(),它返回所有成员而不通过描述符协议触发动态查找。由 Weipeng Hong 提供补丁。
文档¶
bpo-42238:
make -C Doc suspicious将很快被make -C Doc check取代,标记为已弃用。bpo-45840: 改进数据模型文档中的交叉引用。
bpo-45640: 文档中正确标记的语法标记现在可点击,并带你到给定语法部分的定义。由Arthur Milchior提供补丁。
bpo-45788: 将sys.prefix的文档链接到sysconfig文档的安装路径部分。
bpo-45772:
socket.socket的文档被从函数更正为类。bpo-45250: 更新文档以说明CPython不总是要求迭代器定义
__iter__。bpo-25381: 在扩展文档的扩展章节中,更新了一段关于包含异常信息的全局变量的段落。
bpo-43905: 扩展了
astuple()和asdict()的文档,警告应用了deepcopy并提供了解决方法。
测试¶
bpo-45695: 现在CI测试了使用只读源目录的树外构建。
bpo-19460: 为
Lib/email/mime/nonmultipart.py::MIMENonMultipart添加新测试。bpo-45835: 修复了test_queue测试中多个“feeder”线程的竞态条件。
bpo-45783: 冻结工具的测试现在处理文件的移动和删除。
bpo-45745: 移除了regrtest的
--findleaks命令行选项:改用--fail-env-changed选项。自Python 3.7起,它已被弃用作为--fail-env-changed选项的别名。bpo-45701: 在
test_functools中添加了使用functools.lru_cache()的tuple类型的测试。
构建¶
bpo-44035: CI现在验证autoconf文件是否已使用当前且未打补丁的autoconf包重新生成。
bpo-45950: 构建系统现在再次使用 _bootstrap_python 解释器进行冻结和深度冻结。为了加快构建过程,构建工具 _bootstrap_python 和 _freeze_module 不再使用LTO构建。
bpo-45881: configure 脚本现在接受
--with-build-python和--with-freeze-module选项,使交叉编译更容易。bpo-40280: Emscripten 平台现在默认使用
.wasm后缀。bpo-40280: 在 WASM/Emscripten 目标上禁用不可用的核心扩展模块。
bpo-40280:
configure现在检查 socketshutdown函数。该检查使得可以在 CONFIG_SITE 中用ac_cv_func_shutdown=no禁用SYS_shutdown。bpo-40280:
configure现在检查函数fork1, getegid, geteuid, getgid, getppid, getuid, opendir, pipe, system, wait, ttyname。bpo-33393: 更新
config.guess至 2021-06-03 和config.sub至 2021-08-14。Makefile现在有一个update-config目标,使更新更加方便。bpo-45866:
make regen-all现在在源树之外的目录运行时产生相同的输出:当在源树之外构建 Python 时。pegen 现在去除 "generated by pygen from <FILENAME>" 头部的目录。由 Victor Stinner 提供的补丁。bpo-40280:
configure现在接受机器wasm32或wasm64和操作系统wasi或emscripten以进行交叉构建,例如wasm32-unknown-emscripten、wasm32-wasi或wasm32-unknown-wasi。bpo-41498: Python 现在可以在没有
sigset_t的平台上编译。当sigset_t缺失时,signal中的几个函数不可用。基于 Roman Yurchak 为 pyodide 提供的补丁。
bpo-45881:
setup.py现在首先使用环境中的CC来发现多架构和交叉编译路径。bpo-45886:
_freeze_module程序的路径现在可以在命令行中覆盖,例如make FREEZE_MODULE=../x86_64/Program/_freeze_module。bpo-45873: 去除
_bootstrap_python构建步骤。deepfreeze.py 脚本现在使用$(PYTHON_FOR_REGEN)运行,可以是 Python 3.7 或更新版本(在 Windows 上,3.8 或更新版本)。bpo-45847: 将内置的 hashlib 扩展移植到
PY_STDLIB_MOD宏和addext()。bpo-45723: 为保存和恢复环境变量添加
autoconf助手:SAVE_ENV: 保存$CFLAGS、$LDFLAGS、$LIBS和$CPPFLAGS。RESTORE_ENV: 恢复$CFLAGS、$LDFLAGS、$LIBS和$CPPFLAGS。WITH_SAVE_ENV([SCRIPT]): 使用SAVE_ENV和RESTORE_ENV包装运行SCRIPT。
由 Erlend E. Aasland 提交的补丁。
bpo-45573: 启动 Python 所需的强制核心模块现在位于
Modules/Setup.bootstrap中。bpo-45573:
configure现在创建Modules/Setup.stdlib,其中包含有条件启用/禁用的扩展模块行。该文件尚未使用。bpo-45573:
configure现在使用统一的格式来设置 Makefile 中的状态、编译器标志和链接器标志。新的宏PY_STDLIB_MOD设置了三个变量,由Modules/Setup和setup.py使用。bpo-45816: Python 现在支持使用 Visual Studio 2022 (MSVC v143, VS 版本 17.0) 构建。补丁由 Jeremiah Vivian 提供。
bpo-45800:
pyexpatC 扩展的设置现在由configure检测。捆绑的expat库在Makefile中构建。bpo-45798:
decimal内部 C 扩展的设置现在由configure检测。捆绑的libmpdec库在Makefile中构建。bpo-45723: configure 有一个新选项
--with-pkg-config来禁用或要求 pkg-config。bpo-45774:
sqlite3的构建依赖现在由configure和pkg-config检测。补丁由 Erlend E. Aasland 提供。bpo-45747: gdbm 和 dbm 的构建依赖现在由
configure检测。bpo-45743: 在 macOS 上,构建系统不再向链接器传递
search_paths_first。自 Xcode 4 / macOS 10.6 以来,该标志已成为默认设置。bpo-45723:
configure.ac现在兼容 autoconf 2.71。已移除过时的检查STDC_HEADERS和AC_HEADER_TIME。bpo-45723:
configure现在会在 pkg-config 缺失时打印警告。bpo-45731:
configure --enable-loadable-sqlite-extensions现在由新的PY_SQLITE_ENABLE_LOAD_EXTENSION宏处理,而非 setup.py 中的逻辑。bpo-45723: configure.ac 现在使用自定义辅助宏和
AC_CACHE_CHECK来简化和加速 configure 运行。bpo-45696: 通过生成产生一组即用型代码对象的 C 代码,跳过冻结模块的 marshal 步骤。这使启动时间再加快 10% 或更多。
bpo-45561: 从 $(srcdir) 运行 smelly.py 工具。
Windows¶
bpo-45901: 当通过 Microsoft Store 安装并设置为
*.py文件的默认应用时,现在在调用脚本时无需显式启动 Python(即script.py args而非python script.py args)即可将命令行参数传递给 Python。bpo-45616: 修复了 Python Launcher 在明确请求时区分版本 3.1 和 3.10 的能力。之前,如果请求了 3.10 但未安装,会使用 3.1;如果请求了 3.1 但安装了 3.10,会使用 3.10。
bpo-45850: 实现在 Windows 上构建带有深度冻结模块的更改。注意,我们现在需要 Python 3.10 作为“引导”或“主机”Python。
bpo-45732: 更新捆绑的 Tcl/Tk 至 8.6.12。
bpo-45720: 移除了对
shlwapi.dll的内部引用以帮助提高启动时间。此 DLL 将不再在每个 Python 进程启动时加载。
macOS¶
bpo-45732: 更新 python.org macOS 安装程序以使用 Tcl/Tk 8.6.12。
C API¶
bpo-39026: 修复 Python.h 以使用 Xcode 构建 C 扩展:从
Include/cpython/pystate.h中移除一个相对包含。
Python 3.11.0 alpha 2¶
发布日期: 2021-11-05
核心与内置函数¶
bpo-45716: 改进在函数调用中使用
True、None或False作为关键字时的SyntaxError消息。由Pablo Galindo提供补丁。bpo-45688:
sys.stdlib_module_names现在包含 macOS 专属模块_scproxy。bpo-45379: 澄清当我们尝试显式导入一个冻结模块但冻结模块被禁用时的
ImportError消息。bpo-44525: 特化对 Python 函数的简单调用(无星号参数、关键字字典或闭包)
bpo-45530: 在某些情况下,使用元组作为键的排序现在可能显著更快。由Tim Peters提供补丁。
如果元组元素没有定义一个全序(关于全序的信息见 值比较),结果顺序可能与早期版本不同。一般来说,在没有对列表元素进行全序的情况下,排序的结果是不明确的。
bpo-45526: 在obmalloc中,设置ADDRESS_BITS不忽略任何位(之前忽略16位)。在内核给用户空间虚拟地址跨越大于48位的范围的情况下,这更安全。
bpo-30570: 修复了在搜索病态的
__bases__元组时issubclass()因无限递归而崩溃的问题。bpo-45521: 修复obmalloc基数树代码中的一个错误。在64位机器上,该错误导致树持有46位的虚拟地址,而不是预期的48位。
bpo-45494: 修复报告涉及无效延续字符错误时的解析器崩溃。由Pablo Galindo提供补丁。
bpo-45445: 如果Python在命令行中发现无效的
-X选项,现在将初始化失败。由Pablo Galindo提供补丁。bpo-45340: 对象属性现在保存在数组中而不是字典中。对象的字典是懒加载的,只有在需要时才创建。减少了典型Python对象的内存消耗约30%。由Mark Shannon提供补丁。
bpo-45408: 修复解析器在报告与未闭合括号同时发生的分词器错误时崩溃的问题。由Pablo Galindo提供补丁。
bpo-29410: 添加SipHash13作为字符串哈希算法并默认使用。
bpo-45385: 修复来自descr_check的引用泄漏。由Donghee Na提供补丁。
bpo-45367: 使用 PEP 659 机制将
BINARY_MULTIPLY操作码专门化为BINARY_MULTIPLY_INT和BINARY_MULTIPLY_FLOAT。bpo-21736: 冻结的标准库模块现在将
__file__设置为它们原本会从中加载的.py文件,如果可能的话。 对于包,__path__现在有了正确的条目,而不是空列表,这允许导入未冻结的子模块。 这些仅在运行时初始化时知道标准库目录的情况下设置。 注意,__file__处的文件不保证存在。 这些都不影响非标准库的冻结模块,目前也不影响使用PyImport_ImportFrozenModule()导入的冻结模块。 另外,目前模块的co_filename没有更新。bpo-45020: 对于冻结的标准库模块,将原始模块名称记录为
module.__spec__.loader_state.origname。 如果该值与module.__spec__.name不同,则该模块在 Tools/scripts/freeze_modules.py 中被定义为别名。 如果它是None,则该模块来自标准库之外的源文件。bpo-45324: 在FrozenImporter.find_spec()中,我们现在保留了在exec_module()中加载模块所需的信息。这一变化主要影响内部细节,而不是改变导入器的行为。
bpo-45292: 实现 PEP 654。添加
ExceptionGroup和BaseExceptionGroup。更新回溯显示代码。bpo-40116: 修改拆分字典的实现。实例在确切属性集或属性设置顺序上不同的类仍可共享键。这对Python或C-API的用户应无可见影响。由Mark Shannon提供补丁。
bpo-44050: 通过设置
m_size为-1来表明使用全局状态的扩展可以再次在多个解释器中使用。这恢复到Python 3.8的行为。bpo-44525: 为
CALL_FUNCTION操作码设置初始专业化基础设施。实现了C函数调用的初始专业化:CALL_FUNCTION_BUILTIN_O对应METH_O标志。CALL_FUNCTION_BUILTIN_FAST对应不包含关键字的METH_FASTCALL标志。CALL_FUNCTION_LEN对应len(o)。CALL_FUNCTION_ISINSTANCE对应isinstance(o, t)。
bpo-44511: 改进类和映射模式生成的字节码。
bpo-43706: 通过使用 PEP 590
vectorcall调用约定加速enumerate()的调用。由Donghee Na提供补丁。
库¶
bpo-45679: 修复多值
typing.Literal的缓存问题。Literal[True, 2]不再等于Literal[1, 2]。bpo-42064: 将
sqlite3转换为多阶段初始化(PEP 489)。由Erlend E. Aasland提供补丁。bpo-45438: 修复泛型内置类型的typing.Signature字符串表示。
bpo-45613:
sqlite3现在根据底层SQLite库编译时的默认线程模式设置sqlite3.threadsafety。由Erlend E. Aasland提供补丁。bpo-45574: 修复关于
print_escape未使用的警告。bpo-45581:
sqlite3.connect()现在在底层SQLite API发出内存错误信号时正确引发MemoryError。由Erlend E. Aasland提供补丁。bpo-45557: pprint.pprint() 现在能正确处理 underscore_numbers。在此之前它总是将其设为 False。
bpo-44019: 将
operator.call()添加到operator.__all__中。由 Kreusada 提供补丁。bpo-42174: 现在如果列数或行数为 0,
shutil.get_terminal_size()会回退到合理的值。bpo-35673: 改进了对命名空间包的
__loader__属性的内省能力。importlib.machinery.NamespaceLoader现在是公开的,并且实现了importlib.abc.InspectLoader接口。_NamespaceLoader保留以向后兼容。bpo-45515: 在
datetime文档中添加了对zoneinfo的引用,主要替换了对dateutil.tz的过时引用。由 Paul Ganssle 更改。bpo-45475: 撤回了对
gzip.GzipFile、bz2.BZ2File和lzma.LZMAFile迭代的优化(参见 bpo-43787),因为在用户迭代它们时没有保持它们的引用导致回归。由 Inada Naoki 提供补丁。bpo-45489: 更新
ForwardRef以支持|操作符。补丁由 Donghee Na 提供。bpo-42222: 移除了在 randrange() 中对浮点数参数的弃用支持。
bpo-45428: 修复了在从标准输入读取文件名时 py_compile 中的回归问题。
bpo-45467: 修复了 "raw-unicode-escape" 编解码器中的增量解码器和流读取器。之前如果转义序列被分割,它们会失败。
bpo-45461: 修复了 "unicode-escape" 编解码器中的增量解码器和流读取器。之前如果转义序列被分割,它们会失败。
bpo-45239: 修复了
email.utils.parsedate_tz()在某些无效输入上崩溃并抛出UnboundLocalError而不是返回None的问题。由 Ben Hoyt 提供补丁。bpo-45417: 修复了 enum 模块中的二次行为:创建具有大量条目的枚举类是二次的。
bpo-45249: 修复了当异常中的
end_offset设置为 0 时,traceback.print_exc()在显示插入符号时的行为。由 Pablo Galindo 提供补丁。bpo-45416: 修复了与显式
asyncio.Lock对象一起使用asyncio.Condition的问题,这是由于移除了显式循环参数导致的回归。由 Joongi Kim 提供补丁。bpo-20028: 初始化
csv.Dialect时不允许空的 escapechar/quotechar。由 Vajrasky Kok 和 Donghee Na 提供补丁。bpo-44904: 修复了
doctest模块中的一个错误,该错误会在文档字符串包含一个带有classmethodproperty的示例时导致失败。由 Alex Waygood 提供补丁。bpo-45406: 使
inspect.getmodule()捕获由inspect.getabsfile()引发的FileNotFoundError,并返回None表示无法确定模块。bpo-45411: 在 mimetypes.py 模块中添加了包含字幕的文件扩展名 - .srt 和 .vtt。
bpo-10716: 将 pydoc 迁移到 HTML5(不改变其外观)。副作用是更新了 xmlrpc 的
ServerHTMLDoc,现在也使用了 CSS。cgitb 现在较少依赖 pydoc(因为它不能使用 CSS 文件)。bpo-45262: 防止 asyncio 中的 use-after-free。确保缓存的运行循环持有人在释放时被清除,以防止在 get_running_loop 中出现 use-after-free。
bpo-45386: 使
xmlrpc.client对 C 运行时更加健壮,其中底层的 Cstrftime函数在测试年份格式化选项时会导致ValueError。bpo-20028: 改进
csv.Dialect初始化时的错误消息。由 Vajrasky Kok 和 Donghee Na 提供补丁。bpo-45343: 将捆绑的 pip 更新到 21.2.4,setuptools 更新到 58.1.0。
bpo-45328: 修复了
http.client.HTTPConnection在不支持TCP_NODELAY套接字选项的操作系统中正常工作的问题。bpo-45243: 向
sqlite3.Connection添加了setlimit()和getlimit()方法,用于基于连接设置和获取 SQLite 限制。由 Erlend E. Aasland 提供补丁。-
- 自 Python 3.0 起弃用的
getargspec函数;
- 自 Python 3.0 起弃用的
自 Python 3.5 起弃用的
formatargspec函数;直接使用inspect.signature()函数和Signature对象。未写入文档的
Signature.from_callable和Signature.from_function函数(自 Python 3.5 起已弃用);请改用Signature.from_callable方法。
由 Hugo van Kemenade 提供补丁。
bpo-45192: 修复
tempfile._infer_return_type函数,使得tempfile函数的dir参数接受实现os.PathLike协议的对象。由 Kyungmin Lee 提供补丁。
bpo-45160: 当追踪被 ttk OptionMenu 使用的 tkinter 变量时,回调不再被调用两次。
bpo-25625: 添加了非并行安全的
chdir()上下文管理器,用于改变当前工作目录并在退出时恢复。chdir()的简单包装。bpo-24139: 在
sqlite3.Error中添加对 SQLite 扩展结果代码的支持。由 Erlend E. Aasland 提供补丁。bpo-24444: 修复了
argparse帮助显示中当选项的帮助设置为 1+ 个空格或当 choices 参数为空容器时引发的错误。bpo-44547: 实现
Fraction.__int__,使得fractions.Fraction实例f通过isinstance(f, typing.SupportsInt)检查。bpo-40321: 在
urllib中添加对 HTTP 308 重定向的支持。详情见 RFC 7538。由 Jochem Schulenklopper 提供补丁。bpo-41374: 确保在 Cygwin 3.1.6 及更高版本中暴露
socket.TCP_*常量。bpo-35970: 向 base64 模块的命令行界面添加帮助标志。由 Robert Kuska 提供的补丁。
文档¶
bpo-45726: 改进
functools.singledispatch()和functools.singledispatchmethod的文档。bpo-45680: 修改关于
GenericAlias对象的文档,以澄清非容器类也可以实现__class_getitem__。 由 Alex Waygood 提供补丁。bpo-45618: 将用于构建文档的Sphinx版本更新至4.2.0。由Maciej Olko提供补丁。
bpo-45655: 在
typing模块文档的顶部新增一个“相关的 Python 增强提案(PEP)”部分。由Alex Waygood提供补丁。bpo-45604: 在
multiprocessing.log_to_stderr函数的文档中添加level参数。bpo-45516: 在
importlib.abc.TraversableResources文档中添加协议描述。bpo-45464: 在 Built-in Exceptions 文档中提到,由于可能存在内存布局不兼容问题,不建议在单个子类中继承多个异常类型。
bpo-45449: 在
collections.abc中添加关于 PEP 585 的说明。bpo-45516: 在
importlib.abc.Traversable文档中添加协议描述。bpo-20692: 添加编程FAQ条目,解释整数字面量属性访问需要在字面量后加空格或使用括号。
测试¶
bpo-45678: 添加测试场景,其中
functools.singledispatchmethod堆叠在已经被两个其他装饰器包装的方法上。由Alex Waygood提供补丁。bpo-45578: 为
dis.distb()添加测试。bpo-45678: 添加测试以确保
functools.singledispatchmethod正确包装目标函数的属性。bpo-45668: 现在,当Python在没有测试扩展模块的情况下构建时,PGO测试通过。
bpo-45577: 在
test_zoneinfo中为所有pickle协议添加子测试。bpo-45566: 修复
test_frozen_pickle在test_dataclasses中检查所有pickle版本的问题。bpo-43592:
test.libregrtest现在会在默认值对我们的测试套件来说太低时(如经常在macOS上的情况)提高文件描述符的最大数量的软资源限制。bpo-39679: 为与
@classmethod或@staticmethod结合使用的@functools.singledispatchmethod添加更多测试用例。bpo-45410: 当libregrtest生成工作进程时,现在将stderr写入stdout以保持消息顺序。使用单一管道处理stdout和stderr,而非两个管道。此前,消息顺序错乱,增加了分析buildbot日志的难度。由Victor Stinner提交的补丁。
bpo-45402: 修复当Python在树外构建时test_tools.test_sundry()的问题:修正freeze_modules.py工具如何定位_freeze_module程序。由Victor Stinner提交的补丁。
bpo-45403: 修复当Python在源代码树外构建时test_sys.test_stdlib_dir()的问题:比较规范化路径。由Victor Stinner提交的补丁。
bpo-45400: 如果目录名包含"a1"(如"Python-3.11.0a1"),修复test_exceptions中的test_name_error_suggestions_do_not_trigger_for_too_many_locals():使用更严格的正则表达式。由Victor Stinner提交的补丁。
bpo-10572: 将
sqlite3测试从test_sqlite重命名为test_sqlite3,并将其重新定位到Lib/test/test_sqlite3。由Erlend E. Aasland提交的补丁。
构建¶
bpo-43158:
setup.py现在使用来自配置脚本的值来构建_uuid扩展模块。配置现在也能检测util-linux的libuuid。bpo-45666: 修复
_testembed.c中swprintf和%s使用的警告bpo-45548:
Modules/Setup和Modules/makesetup已得到改进。Setup文件现在包含所有扩展的工作规则。 过时的评论已被移除。 由makesetup定义的规则正确跟踪依赖关系。bpo-45548:
math和cmath的实现现在需要C99兼容的libm,并且不再提供针对缺少acosh、asinh、atanh、expm1和log1p函数的变通方案。bpo-45595:
setup.py和makesetup现在跟踪所有Python头文件和模块特定头文件的构建依赖。bpo-45571:
Modules/Setup现在使用PY_CFLAGS_NODIST而不是PY_CFLAGS来编译共享模块。bpo-45570:
pyexpat和_elementtree不再定义已过时的宏HAVE_EXPAT_CONFIG_H和USE_PYEXPAT_CAPI。XML_POOR_ENTROPY现在在expat_config.h中定义。bpo-43974:
setup.py不再定义Py_BUILD_CORE_MODULE。相反,每个使用内部 API 的模块都会定义这个宏。bpo-45548: 填充 Modules/Setup 中缺失的条目。
bpo-45532: 更新
sys.version使用main作为后备信息。由 Jeong YunWon 提供补丁。bpo-45536:
configure脚本现在检查 OpenSSL 头文件和库是否提供所需的 API。大多数常见的 API 都经过验证。此检查能检测到过时或缺失的 OpenSSL。失败不会停止 configure。bpo-45221: 修复了处理
LDFLAGS和CPPFLAGS选项时的回归问题,其中argparse.parse_known_args()可能会将选项解释为内置命令行参数之一,例如-h寻求帮助。bpo-45440: 构建 Python 现在需要一个提供以下函数的 C99
<math.h>头文件:copysign(),hypot(),isfinite(),isinf(),isnan(),round()。补丁由 Victor Stinner 提供。bpo-45405: 防止在使用非 Apple clang 的近期版本运行
configure时出现internal configure error。由 David Bohman 提供补丁。bpo-45433: 避免将 libpython 与 libcrypt 链接。
Windows¶
macOS¶
bpo-44828: 避免在使用python.org macOS安装程序提供的Tk 8.6.11时,在macOS 12 Monterey上出现tkinter文件对话框失败的问题。由Tk项目的Marc Culler提供补丁。
IDLE¶
bpo-45495: 将上下文关键词'case'和'match'添加到补全列表中。
C API¶
bpo-29103:
PyType_FromSpec*现在将类名从规范复制到类拥有的缓冲区中,因此原始类名可以被安全地释放。由Petr Viktorin提供补丁。bpo-45522: 现在可以禁用帧、浮点数、列表、字典、异步生成器和上下文对象的内部自由列表。
bpo-35134: 从有限C API中排除
PyWeakref_GET_OBJECT()。由于PyWeakReference结构在有限C API中是不透明的,它从未工作过。bpo-35081: 将
interpreteridobject.h头文件从Include/移动到Include/internal/。 它仅提供私有函数。 由 Victor Stinner 提供补丁。bpo-35134: 非有限API文件
cellobject.h、classobject.h、context.h、funcobject.h、genobject.h和longintrepr.h已被移动到Include/cpython目录。 此外,eval.h头文件已被移除。 这些文件不应直接包含,因为它们已经被包含在Python.h中:参见 包含文件。 如果它们已被直接包含,考虑改为包含Python.h。 由 Victor Stinner 提供补丁。bpo-45474: 当定义
Py_LIMITED_API时,以下项目不再可用:Py_MARSHAL_VERSION宏
这些不是 受限 API 的组成部分。
由Victor Stinner提供补丁。
bpo-45434: 移除
pystrhex.h头文件。 它仅包含私有函数。 C 扩展应仅包含主要的<Python.h>头文件。 由 Victor Stinner 提供补丁。bpo-45440: 移除
Py_FORCE_DOUBLE()宏。它被Py_IS_INFINITY()宏使用。由Victor Stinner提供补丁。bpo-45434: 当
Py_LIMITED_API宏设置为0x030b0000(Python 3.11) 或更高时,<Python.h>不再包含头文件<stdlib.h>、<stdio.h>、<errno.h>和<string.h>。 C扩展应在#include <Python.h>之后显式包含这些头文件。 由 Victor Stinner 提供补丁。bpo-41123: 移除自 Python 3.3 起已弃用的
Py_UNICODE_COPY()和Py_UNICODE_FILL()宏。改用PyUnicode_CopyCharacters()或memcpy()(wchar_t*字符串) ,以及PyUnicode_Fill()函数。由 Victor Stinner 提供补丁。bpo-45412: 移除以下使用
errno变量的数学宏:Py_ADJUST_ERANGE1()Py_ADJUST_ERANGE2()Py_OVERFLOWED()Py_SET_ERANGE_IF_OVERFLOW()Py_SET_ERRNO_ON_MATH_ERROR()
由Victor Stinner提供补丁。
bpo-45395: 自定义冻结模块(设置为
PyImport_FrozenModules的数组)现在被视为添加项,而不是替换所有默认的冻结模块。通过将自定义数组条目的“code”字段设置为 NULL,仍可以禁用冻结的标准库模块。bpo-43760: 在有限的 C API 中添加新的
PyThreadState_EnterTracing()和PyThreadState_LeaveTracing()函数,以暂停和恢复跟踪和性能分析。由 Victor Stinner 提供补丁。bpo-44220:
PyStructSequence_UnnamedField被添加到稳定 ABI 中。
Python 3.11.0 alpha 1¶
发布日期:2021-10-05
安全性¶
bpo-42278: 将
tempfile.mktemp()的使用替换为TemporaryDirectory,以避免潜在的竞态条件。bpo-44600: 修复在 match 语句中跟踪某些失败模式时的错误行号。由 Charles Burkland 提供补丁。
bpo-41180: 向
marshal模块添加审计事件,并停止为每个解组的代码对象引发code.__init__事件。直接实例化的代码对象将继续引发事件,审计事件处理程序应检查或收集原始 marshal 数据。这减少了从.pyc文件加载时的显著性能开销。bpo-44394: 将打包的libexpat库从2.2.8更新至2.4.1版本,以修复 CVE-2013-0340 "Billion Laughs"漏洞。此版本主要用于Windows和macOS系统。
bpo-43124: 在
smtplib中的内部函数putcmd现在会对输入进行\r和\n字符的清理,以避免(不太可能的)命令注入。bpo-44022:
http.client现在在服务器返回100 Continue状态响应后,避免无限读取潜在的HTTP头部信息。
核心与内置函数¶
bpo-43760: 通过为追踪添加特殊指令,将每个指令分发的硬件分支数量从两个减少到一个。补丁由Mark Shannon提供。
bpo-45061: 为布尔类型添加了一个析构器,用于检测C扩展中错误调用Py_DECREF(Py_True)或Py_DECREF(Py_False)时的引用计数错误。同时检测当空元组单例或Unicode空字符串单例被错误销毁时的引用计数错误。由Victor Stinner提供补丁。
bpo-24076: sum()函数在求和单数字整数时进一步优化。
bpo-45190: 更新Unicode数据库至Unicode 14.0.0版本。
bpo-45167: 修复了
types.GenericAlias对象的深拷贝问题。bpo-45155:
int.to_bytes()和int.from_bytes()现在为byteorder参数提供了一个默认值"big"。int.to_bytes()还为length参数提供了一个默认值1。bpo-44219: 在执行任意文件描述符的
isatty系统调用时释放GIL。这特别影响了os.isatty()、os.device_encoding()和io.TextIOWrapper。间接地,文本模式下的io.open()也受到影响。此更改解决了os.isatty()中的一个死锁问题。由Vincent Michel在 bpo-44219 中提供补丁。bpo-44959: 在HP-UX系统上添加了对'.sl'后缀扩展模块的回退支持。
bpo-45121: 修复了当直接调用或通过
super()调用时,Protocol.__init__会引发RecursionError的问题。 由 Yurii Karabas 提供补丁。bpo-44348:
BaseException类型的析构函数现在使用trashcan机制来防止栈溢出。 例如,当一个RecursionError实例被引发时,它可以通过__context__属性或__traceback__属性链接到另一个 RecursionError,然后创建一系列异常。 当链被销毁时,如果链相对于可用栈内存来说太长,嵌套的析构函数调用可能会因栈溢出而崩溃。 由 Victor Stinner 提供补丁。bpo-45123: 修复PyAiter_Check仅检查__anext__的存在(不检查__aiter__)。将PyAiter_Check重命名为PyAIter_Check,PyObject_GetAiter -> PyObject_GetAIter。
bpo-1514420: 解释器在格式化异常时不再尝试打开带有尖括号中名称的文件(如"<string>"或"<stdin>")。
bpo-37330:
open()、io.open()、codecs.open()和fileinput.FileInput不再接受文件模式中的'U'("通用换行") 。此标志自Python 3.3起已被弃用。由Victor Stinner提供补丁。bpo-45083: 当解释器渲染异常时,其名称现在具有完整的限定名。以前只有类名被连接到模块名,这有时会导致显示的全名不正确。
(此问题仅影响C代码异常渲染,
traceback模块已经使用了限定名)。bpo-34561: 列表排序现在使用来自Munro和Wild的
powersort()的合并排序策略。与之前的策略不同,这在运行长度分布的熵方面被证明是接近最优的。大多数使用list.sort()的情况可能不会看到显著的时间差异,但在之前策略表现特别差的情况下可能会看到显著的改进。然而,由于这些都是对一个本质上最好情况下是二次时间解决的问题的快速线性时间近似,也有可能构造出之前策略表现更好的案例。bpo-45056: 编译器现在会从co_consts中移除未使用的尾随常量。
bpo-45020: 添加一个新的命令行选项"-X frozen_modules=[on|off]"来选择不使用(或使用)可选的冻结模块。这默认为"on"(或者如果它从源树运行则为"off")。
bpo-45012: 在
posix中,在os.DirEntry.stat()进行的stat()、lstat()和fstatat()系统调用期间释放GIL。由Stanisław Skonieczny提供补丁。bpo-45018: 修复了迭代超过
2**32次的范围迭代器的pickling问题。bpo-45000: 当尝试删除
__debug__时,现在会引发SyntaxError。由Donghee Na提供补丁。bpo-44963: 为
anext_awaitable对象实现send()和throw()方法。由Pablo Galindo提供补丁。bpo-44962: 修复了WeakKeyDictionary、WeakValueDictionary和WeakSet中当两个线程尝试提交最后一个待处理的移除时的竞争条件。这修复了asyncio.create_task并修复了asyncio.run中shutdown_asyncgens未运行导致的数据丢失问题。
bpo-24234: 在
bytes类型上实现__bytes__()特殊方法,因此一个 bytes 对象b能通过isinstance(b, typing.SupportsBytes)检查。bpo-24234: 在
complex类型上实现__complex__()特殊方法,因此一个复数z能通过isinstance(z, typing.SupportsComplex)检查。bpo-44954: 修复了一个边界情况下的bug,即
float.fromhex('0x.8p-1074')的结果错误地四舍五入。bpo-44947: 改进了导入语句中尾随逗号的语法错误提示。由Pablo Galindo提供补丁。
bpo-44945: 使用PEP 659机制专门化BINARY_ADD指令。新增了五个新指令:
BINARY_ADD_ADAPTIVE
BINARY_ADD_FLOAT
BINARY_ADD_INT
BINARY_ADD_UNICODE
BINARY_ADD_UNICODE_INPLACE_FAST
bpo-44929: 修复了
enum.Flag在REPL中字符串表示的一些边界情况。补丁由Pablo Galindo提供。bpo-44914: 类版本标签不再被回收利用。
这意味着版本标签作为类状态的唯一标识符。我们依靠这一点来有效专门化LOAD_ATTR和其他指令。
bpo-44895: 添加了一个调试变量
PYTHONDUMPREFSFILE,用于创建一个由--with-trace-refs生成的转储文件。由Donghee Na提供补丁。bpo-44900: 为PEP 659快速化添加了五个超级指令:
LOAD_FAST LOAD_FAST
STORE_FAST LOAD_FAST
LOAD_FAST LOAD_CONST
LOAD_CONST LOAD_FAST
STORE_FAST STORE_FAST
bpo-44889: 初步实现了
LOAD_METHOD的自适应专门化。添加了以下专门化形式:LOAD_METHOD_CACHEDLOAD_METHOD_MODULELOAD_METHOD_CLASS
bpo-44890: 在调试构建中总是收集专门化统计信息。
bpo-44885: 修正了带有格式规范和重复表达式的f字符串的ast位置。补丁由Pablo Galindo提供。
bpo-44878: 从字节码解释器中移除了循环。所有指令都以DISPATCH宏结束,因此循环现在是多余的。
bpo-44878: 当使用计算gotos时,移除解释器循环的switch语句。这确保了我们只在解释器中有一个分发表。
bpo-44874: 弃用旧的 trashcan 宏(
Py_TRASHCAN_SAFE_BEGIN/Py_TRASHCAN_SAFE_END)。它们应被新的宏Py_TRASHCAN_BEGIN和Py_TRASHCAN_END替换。bpo-44872: 在 frameobject.c 中使用新的 trashcan 宏(Py_TRASHCAN_BEGIN/END)代替旧的宏(Py_TRASHCAN_SAFE_BEGIN/END)。
bpo-33930: 修复了在清理方法对象时因深度递归导致的段错误。由 Augusto Goulart 和 Pablo Galindo 提供补丁。
bpo-25782: 修复了当当前异常的上下文链中存在循环时,
PyErr_SetObject挂起的错误。bpo-44856: 修复了
update_bases()和__build_class__错误路径中的引用泄漏问题。由 Pablo Galindo 提供补丁。bpo-44826: STORE_ATTR 的自适应特化的初始实现
增加了 STORE_ATTR 的三种特化形式:
STORE_ATTR_SLOT
STORE_ATTR_SPLIT_KEYS
STORE_ATTR_WITH_HINT
bpo-44838: 修复了一个导致解析器为无效的 'if' 表达式引发不正确自定义
SyntaxError的错误。由 Pablo Galindo 提供补丁。bpo-44821: 提前创建实例字典(__dict__),以改善对象布局的规则性并辅助特化。
bpo-44792: 为 if 表达式改进语法错误。由 Miguel Brito 提供补丁
bpo-34013: 将无效的旧版语句自定义错误消息(如调用 "print" 时未加括号生成的消息)泛化,以包含更通用的表达式。由 Pablo Galindo 提供补丁
bpo-44732: 将
types.Union重命名为types.UnionType。bpo-44725: 在 Python 中通过
_opcode.get_specialization_stats()暴露特化统计信息。bpo-44717: 改进子模块循环导入时的 AttributeError。
bpo-44698: 修复复杂对象求幂中的未定义行为。
bpo-44676: 增加序列化
types.Union对象的能力。由 Yurii Karabas 提供补丁。bpo-44633: 现在,联合类型参数替换为错误类型时会引发
TypeError,而不是返回NotImplemented。bpo-44661: 更新
property_descr_set以尽可能使用 vectorcall。由 Donghee Na 提供补丁。bpo-44662: 向
types.Union添加__module__。这也修复了types.Union与typing.Annotated的问题。由 Yurii Karabas 提供补丁。bpo-44655: 在未设置的 __slots__ 属性错误中包括类型名称。由 Pablo Galindo 提供补丁。
bpo-44655: 当为缺失属性提供建议时,不包括与失败属性同名的缺失属性。由 Pablo Galindo 提供补丁。
bpo-44646: 修复联合类型的哈希值:它不再依赖于参数的顺序。
bpo-44636: 合并相同类型的联合。例如,
int | int的结果现在是int。修复与非可哈希对象的联合类型比较。例如,int | str == {}不再引发 TypeError。bpo-44611: 在 Windows 上,
os.urandom(): 使用 BCryptGenRandom API 而不是已被 Microsoft Windows API 弃用的 CryptGenRandom API。由 Donghee Na 提供补丁。bpo-44635: 在联合类型构造函数中将
None转换为type(None)。bpo-26280: 为 BINARY_SUBSCR 实现自适应专门化。
添加了 BINARY_SUBSCR 的三种专门化形式:
BINARY_SUBSCR_LIST_INT
BINARY_SUBSCR_TUPLE_INT
BINARY_SUBSCR_DICT
bpo-44589:
match语句中具有两个或更多相等字面键的映射模式现在会在编译时引发SyntaxError。bpo-44606: 修复联合类型的
__instancecheck__和__subclasscheck__。bpo-42073:
@classmethod装饰器现在可以包装其他类似 classmethod 的描述符。bpo-41972: 调整了 fastsearch.h 的字符串搜索算法,使其在大多数情况下具有更短的内循环。
bpo-44590: 现在,执行Python函数所需的所有数据(局部变量、栈等)都保存在每线程栈中。帧对象是按需延迟分配的。这使得标准基准测试套件的性能提高了约7%。自省和调试不受影响,因为帧对象在需要时总是可用的。由Mark Shannon提供补丁。
bpo-44584: 线程调试 (
PYTHONTHREADDEBUG环境变量) 在 Python 3.10 中已弃用,并将在 Python 3.12 中移除。此特性需要调试版本的 Python。补丁由 Victor Stinner 提供。bpo-43895: 1995年添加的一个过时的共享对象文件句柄内部缓存已被从dynload_shlib.c中移除。该缓存尝试(但未保证)不会对同一.so文件执行两次dlopen,以解决1990年代中期posix类操作系统的缺陷。
bpo-44490:
typing现在会在types.Union对象中搜索类型参数。get_type_hints也将正确解析带有嵌套types.Union对象的注解。 由 Yurii Karabas 提供补丁。bpo-43950: 代码对象现在可以在可用时提供指令的列信息。这在回溯打印过程中被利用,以显示导致错误的表达式。
由Pablo Galindo、Batuhan Taskaya和Ammar Askar作为 PEP 657 的一部分贡献。
bpo-44562: 在初始化
types.GenericAlias时,错误路径中移除PyObject_GC_Del()的使用。bpo-41486: 修复了早期3.10 beta版本中,如果有人在输入数据扩展超过4GiB时使用大于4GiB的输出缓冲区与zlib.decompress一起使用时出现的内存消耗和复制性能回归。
bpo-43908: 带有
Py_TPFLAGS_IMMUTABLETYPE标志的堆类型现在可以继承 PEP 590 向量调用协议。以前,该特性仅支持 static types 。由Erlend E. Aasland提供补丁。bpo-44553: 为
types.Union实现 GC 方法以打破引用循环并防止内存泄漏。bpo-44490: 向
types.Union添加__parameters__属性和__getitem__操作符。由 Yurii Karabas 提供补丁。bpo-44523: 移除
hash()对weakref.proxy对象的透传,以防止当原始引用对象死亡而代理是可哈希对象的一部分时产生意外后果。由 Pablo Galindo 提供补丁。bpo-44483: 修复在创建具有不良
__module__字段的对象的联合时types.Union对象的崩溃问题。bpo-44486: 模块即使是通过
types.ModuleType.__new__()创建的也将始终拥有一个字典。bpo-44472: 修复当异常被抛出时的 ltrace 功能。由 Pablo Galindo 提供补丁。
bpo-12022: 在
with和async with语句中现在会分别对不支持 context manager 或 asynchronous context manager 协议的对象引发TypeError而不是AttributeError。bpo-44297: 确保在进入推导式作用域时设置行号。这能确保包含生成器表达式的回溯信息显示正确的行号。
bpo-44456: 改进当混合位置和关键字模式时的语法错误。由 Pablo Galindo 提供补丁。
bpo-44409: 修复在初始化分词器时抛出的分词器错误的位置信息。补丁由 Pablo Galindo 提供。
bpo-44396: 修复分词器在抛出未闭合字符串的语法错误时可能崩溃的问题。由 Pablo Galindo 提供补丁。
bpo-44376: 对于小指数的精确整数指数运算(如
i**2或pow(i, 2)),由于减少了此类情况下的开销,运算速度大大提高。bpo-44313: 直接导入的对象和模块(通过 import 和 from import 语句)不会为它们命名空间上直接访问的对象生成
LOAD_METHOD/CALL_METHOD。现在它们使用常规的LOAD_ATTR/CALL_FUNCTION。bpo-44338: 为 LOAD_GLOBAL 实现自适应专业化
增加了两种 LOAD_GLOBAL 的专业化形式:
LOAD_GLOBAL_MODULE
LOAD_GLOBAL_BUILTIN
bpo-44368: 改进无效 "as" 目标的语法错误。由 Pablo Galindo 提供补丁
bpo-44349: 修复在显示编码文件中的文本时语法错误的一个边缘情况。由 Pablo Galindo 提供补丁。
bpo-44337: LOAD_ATTR 的自适应专业化的初步实现
增加了四种 LOAD_ATTR 的专业化形式:
LOAD_ATTR_SLOT
LOAD_ATTR_SPLIT_KEYS
LOAD_ATTR_WITH_HINT
LOAD_ATTR_MODULE
bpo-44335: 修复识别语法错误中不正确字符时的回归问题。由 Pablo Galindo 提供补丁
bpo-43693: 单元格变量的偏移量计算在编译器中完成,而不是在运行时。这减少了处理单元格和自由变量的开销,特别是在变量既是参数又是单元格变量的情况下。
bpo-44317: 使用改进的位置信息改进分词器错误。由 Pablo Galindo 提供补丁。
bpo-44304: 修复
sqlite3模块中垃圾回收器清除sqlite.Statement对象时发生的崩溃。由 Pablo Galindo 提供补丁bpo-44305: 为没有
except或finally块的try块改进错误消息。由 Pablo Galindo 提供补丁。bpo-43413: 一些内置类(如
tuple,list,frozenset)的子类的构造函数不再接受任意关键字参数。[在 3.11a4 中恢复]set的子类现在可以定义一个带有额外关键字参数的__new__()方法,而无需同时覆盖__init__()。bpo-43667: 在 Oracle Solaris 上的非 UTF 语言环境中改进 Unicode 支持。此问题不影响其他 Solaris 系统。
bpo-43693: 新增了一个操作码 MAKE_CELL,该操作码有效地将函数入口处完成的部分工作转移到编译器和评估循环中。除了创建所需的单元对象外,新操作码还在函数入口处将相关参数(及其他局部变量)转换为单元变量。
bpo-44232: 修复了当元类引发异常时
type()的回归问题。C 函数type_new()必须在元类构造函数引发异常且获胜类不是元类时正确报告异常。由 Victor Stinner 提供补丁。bpo-44201: 避免在 REPL 中检查特殊语法错误时的副作用,这些副作用导致在检测到语法错误后要求额外的标记。由 Pablo Galindo 提供补丁。
bpo-43693:
PyCodeObject增加了co_fastlocalnames和co_fastlocalkinds作为快速局部变量信息的权威来源。序列化的代码对象也相应发生了变化。bpo-44184: 修复了当解构函数移除堆类型最后一个强引用时 Python 退出的崩溃问题。由 Victor Stinner 提供补丁。
bpo-44187: 在解释器中实现了快速化。目前这没有任何优势,但为未来的优化奠定了基础。完整解释请参见 PEP 659。
bpo-44180: 解析器不再报告在首次到达位置更远处发生的通用语法错误。由 Pablo Galindo 提供补丁。
bpo-44168: 修复了解析器中涉及带有无效表达式的关键字参数的错误消息。由 Pablo Galindo 提供补丁。
bpo-44156:
compile.c中的字符串缓存现在与子解释器兼容。bpo-44143: 修复了当存在现有异常时引发标记化错误时出现的解析器崩溃问题。由 Pablo Galindo 提供补丁。
bpo-44032: 将 'fast' 局部变量和其他变量从帧对象移动到每线程的数据栈。
bpo-44114: 修复 C 代码中错误的 dictkeys_reversed 和 dictitems_reversed 函数签名,这破坏了 webassembly 构建。
bpo-44110: 改进
str.__getitem__()的错误信息bpo-26110: 添加
CALL_METHOD_KW操作码以加速带有关键字参数的方法调用。想法源自 PyPy。一个副作用是在评估循环中执行CALL_METHOD现在是无分支的。bpo-28307: 编译器现在通过将简单的 C 风格格式化转换为 f-string 表达式来优化仅包含格式代码 %s、%r 和 %a 的文字格式。
bpo-43149: 更正关于多种异常类型的语法错误消息,不再提及“异常组”。由 Pablo Galindo 提供补丁
bpo-43822: 当引发异常时,解析器将优先考虑分词器错误而非自定义语法错误。由 Pablo Galindo 提供补丁。
bpo-40222: “零成本”异常处理。
使用查找表来确定如何处理异常。
移除 SETUP_FINALLY 和 POP_TOP 块指令,消除了 try 语句的运行时开销。
将帧对象的大小减少了约 60%。
由 Mark Shannon 提供补丁
bpo-43918: 在新的
anext内置函数的文档字符串中记录签名和default参数。bpo-43833: 如果数字字面量紧跟着关键字之一:and、else、for、if、in、is、or,则发出弃用警告。如果紧跟着其他关键字或标识符,则引发带有更丰富信息的语法错误。
bpo-43879: 向 PyThreadState 添加 native_thread_id。由 Gabriele N. Tornetta 提供补丁。
bpo-43693: 在编译器中计算相对于局部变量的单元格偏移量。允许解释器将局部变量和单元格视为单个数组,这稍微提高了效率。同时使 LOAD_CLOSURE 操作码成为 LOAD_FAST 的别名。保留 LOAD_CLOSURE 有助于使字节码更具可读性。
bpo-17792: 为未绑定的局部变量或自由变量的访问提供更准确的错误消息。
bpo-28146: 修复
str.format()中一个令人困惑的错误信息。bpo-11105: 当通过
compile()编译带有递归引用的ast.AST对象时,解释器不再崩溃,而是引发RecursionError。bpo-39091: 修复向生成器的
throw()方法传递非异常对象时导致的崩溃。由 Noah Oxer 提供补丁。bpo-33346: 现在允许在异步函数的推导式中使用异步推导式。外部推导式隐式变为异步。
库¶
bpo-45371: 修复
distutils中的 clang rpath 问题。UnixCCompiler 现在使用正确的 clang 选项向共享库添加运行时库目录 (rpath)。bpo-45329: 修复当使用已安装的 expat 库 <= 2.2.0 构建
pyexpat.xmlparser时访问已释放内存的问题。bpo-41710: 在 Unix 上,如果 C 库(glibc 2.30 及更新版本)中可用
sem_clockwait()函数,threading.Lock.acquire()方法现在使用单调时钟 (time.CLOCK_MONOTONIC) 来处理超时,而不是使用系统时钟 (time.CLOCK_REALTIME),以避免受系统时钟变化影响。由 Victor Stinner 提供补丁。bpo-1596321: 修复当
threading模块首次从非主线程导入时threading._shutdown()函数的问题:在 Python 退出时不再记录错误。bpo-45274: 修复
threading模块中Thread.join()方法的竞态条件。如果函数被信号中断并且信号处理程序引发异常,确保线程保持在一个一致的状态以防止死锁。由 Victor Stinner 提供补丁。bpo-21302: 在 Unix 操作系统中,如果
clock_nanosleep()不可用但nanosleep()可用,time.sleep()现在使用nanosleep()函数。nanosleep()允许以纳秒精度睡眠。bpo-21302: 在Windows上,
time.sleep()现在使用了一个可等待的计时器,其分辨率为100纳秒(10-7 秒)。之前,它的分辨率为1毫秒(10-3 秒)。由Benjamin Szőke和Victor Stinner提供补丁。bpo-45238: 修复
unittest.IsolatedAsyncioTestCase.debug():现在可以运行异步方法和回调。bpo-36674:
unittest.TestCase.debug()现在如果类或测试方法被跳过装饰器装饰,会引发unittest.SkipTest。bpo-45235: 修复了一个问题,即当使用带有默认值的子解析器时,argparse不会保留提供的命名空间中的值。
bpo-45183: 让 zipimport.zipimporter.find_spec() 在底层的zip文件已被删除且内部缓存已通过 invalidate_cache() 重置时不抛出异常。
bpo-45234: 修复了
copyfile(),copy(),copy2()中的一个回归问题,当源是目录时不应抛出FileNotFoundError而应抛出IsADirectoryError。bpo-45228: 修复解析J1939网络地址时的栈缓冲区溢出问题。
bpo-45225: 在capwords中使用map函数代替genexpr。
bpo-42135: 修复拼写错误:
importlib.find_loader实际上计划在Python 3.12中移除,而不是3.10,与PR 25169中的其他内容一样。由 Hugo van Kemenade 提供补丁。
bpo-20524: 改进了
.format()操作对于str,float,int, 和complex的错误消息。新的格式现在显示有问题的模式和对象类型。bpo-45168: 更改
dis.dis()输出,以省略由于没有提供co_consts,co_names等而无法解析的操作参数值。之前操作参数本身会在值字段中重复,这不仅没有用而且可能会造成混淆。bpo-21302: 在Unix操作系统中,
time.sleep()现在使用clock_nanosleep()函数(如果可用),该函数允许以纳秒精度指定的间隔睡眠。bpo-45173: 从
configparser模块中移除:SafeConfigParser类、ParsingError类的filename属性、ConfigParser类的readfp()方法,这些自 Python 3.2 起已被弃用。由 Hugo van Kemenade 提供补丁。
bpo-44987: 纯 ASCII 字符串现在通过
unicodedata.normalize()在常数时间内完成规范化。由 Donghee Na 提供补丁。bpo-35474: 使用
strict=False调用mimetypes.guess_all_extensions()不再影响后续使用strict=True调用的结果。同时,修改返回的列表不再影响全局状态。bpo-45166:
typing.get_type_hints()现在可以与Final包裹在ForwardRef中的情况一起工作。bpo-45162: 移除许多旧的已弃用的
unittest功能:TestCase方法的 "fail*" 和 "assert*" 别名。从一开始就损坏的
TestCase方法assertDictContainsSubset()。被忽略的
<unittest.TestLoader.loadTestsFromModule> TestLoader.loadTestsFromModule()参数 use_load_tests。TextTestResult的旧别名_TextTestResult。
bpo-38371: 移除
_tkinter.TkappType中已弃用的split()方法。补丁由 Erlend E. Aasland 提供。bpo-20499: 提高 statistics.pvariance() 的速度和准确性。
bpo-45132: 移除
xml.dom.pulldom.DOMEventStream、wsgiref.util.FileWrapper和fileinput.FileInput的__getitem__()方法,这些自 Python 3.9 起已被弃用。由 Hugo van Kemenade 提供补丁。
bpo-45129: 由于重大的安全隐患,
asyncio.loop.create_datagram_endpoint()的 reuse_address 参数在 Python 3.9 中被禁用,现在已被完全移除。这是因为 UDP 中 socket 选项SO_REUSEADDR的行为。由 Hugo van Kemenade 提供补丁。
bpo-45124: 在 Python 3.9 中弃用的
bdist_msi命令现已被移除。请改用
bdist_wheel(wheel 包) 。由 Hugo van Kemenade 提供补丁。
bpo-30856:
unittest.TestResult的方法addFailure(),addError(),addSkip()和addSubTest()现在会在测试中引发异常或完成子测试后立即调用。之前它们仅在完成测试清理后被调用。bpo-45034: 修改了
struct.pack在'H'和'h'模式下对于过大/过小数字的错误格式化方式。现在它会显示实际的数字限制,而之前显示的是算术表达式。bpo-25894:
unittest现在总是单独报告跳过的和失败的子测试:默认模式下为单独的字符,详细模式下为单独的行。同时,现在在测试方法、类和模块清理的错误中也会输出测试描述。bpo-45081: 修复了继承自
typing.Protocol子类的数据类具有错误__init__的问题。由 Yurii Karabas 提供补丁。bpo-45085: 在 Python 3.9 中已弃用的
binhex模块现已被移除。以下在 Python 3.9 中已弃用的binascii函数现在也被移除了:a2b_hqx(),b2a_hqx();rlecode_hqx(),rledecode_hqx().
binascii.crc_hqx()函数仍然可用。由Victor Stinner提供补丁。
bpo-40360:
lib2to3包现已弃用,并且可能无法解析 Python 3.10 或更新版本的代码。请参阅 PEP 617 (CPython 的新 PEG 解析器)。补丁由 Victor Stinner 提供。bpo-45075: 将
traceback.StackSummary.format_frame()重命名为traceback.StackSummary.format_frame_summary()。此方法是为 3.11 添加的,因此尚未发布。更新了代码和文档以更好地区分 frame 和 FrameSummary。
bpo-31299: 添加了通过从
format_frame()覆盖返回None来完全从回溯中删除帧的选项。bpo-41620:
run()现在总是返回一个TestResult实例。之前如果测试类或方法使用了跳过装饰器,它会返回None。bpo-45021: 修复了在使用
concurrent.futures模块时,fork 的子进程在关闭时可能出现的死锁问题。bpo-43913: 修复了在
unittest中清理类和模块时的错误:使用
addModuleCleanup()注册的函数不会被调用,除非用户在测试模块中定义了tearDownModule()。如果
tearDownClass设置为None,使用addClassCleanup()注册的函数不会被调用。TestResult中的缓冲功能对使用addClassCleanup()和addModuleCleanup()注册的函数无效。在缓冲和调试模式下,使用
addClassCleanup()和addModuleCleanup()注册的函数中的错误未被正确处理。setUpModule()和使用addModuleCleanup()注册的函数中的错误以错误的顺序报告。以及几个较小的错误。
bpo-45030: 修复了在序列化和复制 range 迭代器时的整数溢出问题。
bpo-45001: 使电子邮件日期解析对格式错误的输入更加健壮,特别是针对仅包含空白的
Date:头。由 Wouter Bolsterlee 提供补丁。bpo-45010: 移除了
unittest.mock中对特殊方法__div__的支持。它在 Python 3 中未使用。bpo-39218: 通过使用
x*x而非x**2来提高方差计算的准确性。bpo-43613: 通过一次性在内存中压缩和解压缩,而不是流式处理,提高了
gzip.compress()和gzip.decompress()的速度。bpo-37596: 确保
set和frozenset对象总是可以重复marshalled。bpo-44019: 新增了一个函数
operator.call,使得operator.call(obj, *args, **kwargs) == obj(*args, **kwargs)。bpo-42255:
webbrowser.MacOSX已弃用并将在 Python 3.13 中移除。它未经测试且未写入文档,同时 webbrowser 本身也没有使用它。补丁由 Donghee Na 提供。bpo-44955: 对于
run()中隐式创建的TestResult对象,方法stopTestRun()现在总是与方法startTestRun()成对调用。之前,对于使用跳过装饰器装饰的测试方法和类,它不会被调用。bpo-44935: Solaris 上的
subprocess现在也使用os.posix_spawn()以获得更好的性能。bpo-44911:
IsolatedAsyncioTestCase在取消泄漏任务时将不再抛出异常。由 Bar Harel 提供补丁。bpo-41322: 为返回值!=None 的测试和异步测试添加了
DeprecationWarning(因为这可能表明测试编写不当,例如将测试编写为生成器函数) 。bpo-44524: 当从 typing 特殊形式别名子类化时,使异常消息更有用。由 Yurii Karabas 提供补丁。
bpo-38956: 当与
argparse.ArgumentDefaultsHelpFormatter一起使用时,argparse.BooleanOptionalAction的默认值不再打印两次。bpo-44860: 修复
sysconfig中的posix_user方案,使其不依赖于sys.platlibdir。bpo-44859: 改进
sqlite3中的错误处理,并引发更准确的异常。在
Connection.__call__()和Cursor.execute()中,当内存不足以将语句编码为 UTF-8 时,现在会引发MemoryError而不是sqlite3.Warning。在
Connection.__call__()和Cursor.execute()中,当语句包含代理字符时,现在会引发UnicodEncodeError而不是sqlite3.Warning。在
Cursor.executescript()中,对于非字符串脚本参数,现在会引发TypeError而不是ValueError。在
Cursor.executescript()中,对于包含空字符的脚本,现在会引发ValueError而不是截断它。正确处理获取进度处理器结果的布尔值时引发的异常。
添加了许多测试,覆盖了不同的边缘情况。
bpo-44581: 将捆绑的 pip 升级到 21.2.3 和 setuptools 到 57.4.0。
bpo-44849: 修复 FreeBSD 14 上
os.set_inheritable()函数对于以O_PATH标志打开的文件描述符的问题:忽略ioctl()上的EBADF错误,回退到fcntl()实现。由 Victor Stinner 提供补丁。bpo-44605: @functools.total_ordering() 装饰器现在可以与元类一起工作。
bpo-44524: 修复了一个问题,其中订阅的特殊形式的
__name__和__qualname__属性可能是None。bpo-44839: 在用户定义函数中引发的
MemoryError现在会在sqlite3中产生一个MemoryError。OverflowError现在会被转换为DataError。以前在这些情况下会产生OperationalError。bpo-44822:
sqlite3用户定义的函数和聚合器返回带有嵌入 NUL 字符的strings不再被截断。由 Erlend E. Aasland 提供补丁。bpo-44801: 确保 Callable 中的
ParamSpec变量只能被参数表达式(类型列表、省略号、ParamSpec 或 Concatenate)替换。bpo-44806:
typing.Protocol的非协议子类现在会忽略从协议基类继承的__init__方法。bpo-27275:
collections.OrderedDict.popitem()和collections.OrderedDict.pop()不再调用 OrderedDict 子类的__getitem__和__delitem__方法。bpo-44793: 修复在订阅带有
ParamSpec参数的泛型类型时检查参数数量的问题。bpo-44784: 在 importlib.metadata 测试中,覆盖在预期的 DeprecationWarnings 下的警告行为(importlib_metadata 4.6.3)。
bpo-44667:
tokenize.tokenize()不会在源代码不以换行符结束但最后一行是注释时错误地生成NEWLINE令牌,因为该函数已经生成了一个NL令牌。由 Pablo Galindo 提供补丁。bpo-44771: 添加了
importlib.simple模块,实现了从低级资源读取器接口到TraversableResources接口的适配器。旧版 API(path、contents等)现在完全由.files()API 支持,并为不具备该功能的资源加载器提供了兼容性垫片。与importlib_resources5.2 功能对等。bpo-44752:
rcompleter不在property对象上调用getattr()以避免评估相应方法的副作用。bpo-44747: 重构
typing模块中sys._getframe的使用。补丁由 Yurii Karabas 提供。bpo-42378: 修复了当
logging.FileHandler在atexit中使用且 filemode 设置为'w'时日志文件被覆盖的问题。注意,如果日志流由于日志关闭已经关闭,这将导致 atexit 中的消息不被记录。bpo-44720:
weakref.proxy对象引用非迭代器现在会引发TypeError,而不是解引用空的tp_iternext槽并崩溃。bpo-44704:
collections.abc.Set._hash()的实现现在与frozenset.__hash__()的实现匹配。bpo-44666: 修复了当
sys.stdout被重定向时compileall.compile_file()的问题。由 Stefan Hölzl 提供补丁。bpo-44688:
sqlite3.Connection.create_collation()现在接受非 ASCII 排序名称。补丁由 Erlend E. Aasland 提供。bpo-44690: 在 base64.b64decode 中采用 binacii.a2b_base64 的严格模式。
bpo-42854: 修复了
_ssl模块中的一个 bug,该 bug 会在对较大的len参数值使用_ssl._SSLSocket.write()和_ssl._SSLSocket.read()时抛出OverflowError。补丁由 Pablo Galindo 提供。bpo-44686: 使用
pkgutil.resolve_name替换unittest.mock._importer。bpo-44353: 通过在C中实现
NewType.__call__来提高其速度。由Yurii Karabas提供补丁。bpo-44353: 将
typing.NewType从函数重构为可调用类。由Yurii Karabas提供补丁。bpo-44678: 在 binascii.a2b_base64 的严格模式下,为不连续的填充添加了单独的错误消息。
bpo-44524: 为
typing模块类添加缺失的__name__和__qualname__属性。补丁由Yurii Karabas提供。bpo-40897: 在
inspect.signature()中优先使用当前类的构造函数。由Weipeng Hong提供补丁。bpo-44638: 添加对zipp项目的引用以及如何使用它的提示。
bpo-44648: 修复了
inspect.getsource()在检查交互式会话中的类时抛出的错误。应该是带有适当错误消息的OSError,而不是TypeError。bpo-44608: 修复使用序列或集合(但不是列表或元组)调用
_tkinter._flatten()时的内存泄漏。bpo-44594: 修复了
ExitStack和AsyncExitStack异常链的一个边缘情况。当异常在传播过程中__context__被显式设置为None时,它们现在将匹配with块的行为。bpo-42799: 在
fnmatch中,编译的正则表达式模式的缓存大小(functools.lru_cache())从 256 增加到 32768,影响的函数包括:fnmatch.fnmatch()、fnmatch.fnmatchcase()、fnmatch.filter()。bpo-41928: 更新
shutil.copyfile(),当以os.path.sep结尾的路径不存在时,抛出FileNotFoundError而不是混淆的IsADirectoryError;shutil.copy()和shutil.copy2()也会受到影响。bpo-44569: 在
traceback中添加了StackSummary.format_frame()函数。这使得用户能够自定义回溯中单行的格式化方式,而无需重新实现处理递归回溯的逻辑。bpo-44566: 处理由 @contextlib.contextmanager 生成器引发的 StopIteration 子类。
bpo-44558: 使
indexOf()在 C 和 Python 版本中的实现保持一致。由 Donghee Na 提供补丁。bpo-41249: 修正
TypedDict以使其能与typing.get_type_hints()和跨模块的注解延迟求值一起工作。bpo-44554: 重构
pdb.main()中的参数处理,以简化输入加载错误的检测,并澄清模块或脚本调用时的行为。bpo-34798: 拆分关于
pprint.PrettyPrinter构造参数的段落,使其更易于阅读。bpo-44539: 添加了对识别没有 JFIF 或 Exif 标记的 JPEG 文件的支持。
bpo-43625: 修复
csv.Sniffer.has_header()检测 CSV 文件头时的 bug,并改进相关文档。bpo-44516: 将捆绑的 pip 更新至 21.1.3 版本。
bpo-42892: 修复
email.message.EmailMessage在解析格式错误的多部分邮件时抛出的异常。bpo-44468:
typing.get_type_hints()现在可以在类和基类中查找带有意外__module__的注解。之前,它会跳过这些MRO元素。bpo-44491: 允许通过向
set_authorizer()传递None来清除sqlite3授权器回调。由Erlend E. Aasland提供补丁。bpo-43977: 对于在父类被注册为
collections.abc.Mapping或collections.abc.Sequence之前创建的子类,设置正确的Py_TPFLAGS_MAPPING和Py_TPFLAGS_SEQUENCE标志。bpo-44466:
faulthandler模块现在能检测到在垃圾回收器收集期间是否发生致命错误。由Victor Stinner提供补丁。bpo-44471: 在
contextlib.ExitStack.enter_context()和contextlib.AsyncExitStack.enter_async_context()中,对于不支持相应 context manager 或 asynchronous context manager 协议的对象,现在会引发TypeError而不是AttributeError。bpo-44458:
BUFFER_BLOCK_SIZE现在被声明为静态的,以避免在bz2、lmza或zlib被静态链接时发生链接冲突。bpo-44464: 在弃用的importlib.metadata接口中移除对flake8的异常。与importlib_metadata 4.6同步。
bpo-44446: 在
traceback.FrameSummary中考虑lineno可能为None的情况。bpo-44439: 修复
bz2.BZ2File.write()/lzma.LZMAFile.write()方法,当输入数据是支持缓冲协议的对象时,文件长度可能错误的问题。bpo-44434: _thread.start_new_thread() 不再在线程退出时显式调用 PyThread_exit_thread(),该调用是多余的。在 Linux 上使用 glibc 时,如果 dlopen() 无法打开 libgcc_s.so 文件(例如:EMFILE 错误),pthread_exit() 会中止整个进程。由 Victor Stinner 提供补丁。
bpo-42972: _thread.RLock 类型现在完全实现了 GC 协议:添加了一个遍历函数和
Py_TPFLAGS_HAVE_GC标志。由 Victor Stinner 提供补丁。bpo-44422:
threading.enumerate()函数现在使用可重入锁以防止在可重入调用上挂起。由 Victor Stinner 提供补丁。bpo-38291: 导入 typing.io 或 typing.re 现在会打印一个
DeprecationWarning。bpo-37880: 当未提供
const关键字参数时,argparse 的 store_const 和 append_const 动作现在都会收到默认值 None。在此之前,这会引发TypeError。bpo-44389: 修复
ssl.OP_NO_TLSv1_3的弃用问题bpo-27827:
pathlib.PureWindowsPath.is_reserved()现在能识别更多保留文件名,包括那些带有尾部空格或冒号的文件名。bpo-44395: 修复
as_string()以正确传递 unixfrom。补丁由 Donghee Na 提供。bpo-44342: [Enum] 将 pickle 从按值改为按名称。
bpo-44356: [Enum] 如果所有数据类型混合都是相同的,则允许多个数据类型混合。
bpo-44351: 在
distutils.sysconfig中恢复parse_makefile(),因为它的行为与sysconfig中的类似实现不同。bpo-35800:
smtpd.MailmanProxy现已移除,因为在没有外部模块mailman的情况下它无法使用。补丁由 Donghee Na 提供。bpo-44357: 添加了一个返回给定数字的立方根的函数
math.cbrt()bpo-44339: 将
math.pow(±0.0, -math.inf)的返回值从抛出ValueError改为返回inf。这使得math.pow的特殊情况处理符合 IEEE 754 标准。bpo-44242: 从 Enum 创建中移除缺失标志检查,并将其移至
verify装饰器中。bpo-44246: 在
importlib.metadata中,恢复Distribution.entry_points(EntryPoints) 结果的兼容性,以符合旧实现的期望,并对以下情况发出弃用警告:A.EntryPoints对象再次可变,允许sort()和其他基于列表的变异操作。通过转换为可变序列(例如list(dist.entry_points).sort())避免弃用警告。B.EntryPoints结果再次允许通过索引访问。为避免弃用警告,首先将结果转换为 Sequence(例如tuple(dist.entry_points)[0])。bpo-44246: 在 importlib.metadata.entry_points 中,去重分布不再需要为 PathDistribution 对象加载完整的元数据,将入口点加载性能提高了约10倍。
bpo-43858: 添加了一个返回日志级别字典副本的函数:
logging.getLevelNamesMapping()bpo-44260:
random.Random构造函数不再无谓地读取系统熵。bpo-44254: 在 Mac 上,为 turtledemo 按钮文本提供一种在亮或暗背景下都能工作的颜色。程序员无法控制后者。
bpo-44258: 支持从字符串初始化 Fraction 的 PEP 515。
bpo-38693: 在 importlib.resources 中优先使用 f-strings 而非
.format。bpo-33693: Importlib.metadata 现在优先使用 f-strings 而非 .format。
bpo-44241: 从 importlib_metadata 4.1 中引入小调整:SimplePath 协议,支持 Metadata 2.2。
bpo-43216: 移除
@asyncio.coroutinedecorator,该装饰器使得基于生成器的旧式协程能够与async/await代码兼容;移除asyncio.coroutines.CoroWrapper,该包装器用于在调试模式下包装旧式协程对象。此装饰器自Python 3.8起已被弃用,原计划在Python 3.10中移除。由Illia Volochii提供补丁。bpo-44210: 将importlib.metadata._meta.PackageMetadata公开。
bpo-43643: 根据规范,将readers.MultiplexedPath.name声明为属性。
bpo-27334:
sqlite3上下文管理器现在在提交失败时执行回滚(从而释放数据库锁)。补丁由Luca Citi和Erlend E. Aasland提供。bpo-4928: 记录了POSIX上的现有行为:当创建进程被SIGKILL杀死时,NamedTemporaryFiles不会被删除。
bpo-44154: 优化
fractions.Fraction对大型组件的pickling操作。bpo-33433: 对于IPv4映射的IPv6地址(RFC 4291 第2.5.5.2节),
ipaddress.IPv6Address.is_private检查被推迟到映射的IPv4地址。这解决了一个bug,其中公共映射的IPv4地址被IPv6检查视为私有地址。bpo-44150: 向statistics.fmean()添加了可选的 weights 参数。
bpo-44142:
ast.unparse()现在将在元组用作赋值目标时(例如在for循环中)删除冗余的括号。bpo-44145:
hmac计算在调用OpenSSLHMAC_UpdateC API时(3.9中的新功能)没有释放GIL。这无意中阻止了并行计算,而其他hashlib算法支持并行计算。bpo-44095:
zipfile.Path现在支持zipfile.Path.stem、zipfile.Path.suffixes和zipfile.Path.suffix属性。bpo-44077: 现在可以通过
socket.IP_RECVTOS接收服务类型(ToS),也称为区分服务(DS),或区分服务代码点(DSCP)和显式拥塞通知(ECN)IP头字段。bpo-37788: 修复了一个当 Thread 对象从未被 join 时的引用泄漏问题。
bpo-38908: 只有数据变量声明的
typing.Protocol子类现在在被isinstance检查时会抛出TypeError,除非它们被runtime_checkable()装饰。之前,这些检查会静默通过。由 Yurii Karabas 提供补丁。bpo-44098:
typing.ParamSpec将不再出现在大多数typing泛型的__parameters__中,除非是在 PEP 612 指定的有效使用位置。这防止了像typing.List[P][int]这样的错误用法。这一变化意味着在 3.10 beta 1 及更早版本中可能静默通过的错误用法现在会报错。bpo-44089: 在 3.10 中允许继承
csv.Error(在 3.9 及更早版本中是被允许的,但在 3.10 的早期版本中被禁止)。bpo-44081:
ast.unparse()现在如果lambda没有参数,不会使用多余的空格来分隔lambda和:。bpo-44061: 修复了之前版本中当使用
pathlib.Path对象的列表调用pkgutil.iter_modules()时的回归问题。bpo-44059: 在
webbrowser模块中注册 SerenityOS 浏览器。bpo-40465: 移除了在 Python 3.9 中废弃的 random 模块特性。
bpo-44018: random.seed() 不再改变 bytearray 输入。
bpo-38352: 将
IO,BinaryIO,TextIO,Match, 和Pattern添加到typing.__all__。由 Jelle Zijlstra 提供补丁。bpo-44002:
urllib.parse现在使用functool.lru_cache()作为其内部 URL 分割和引用缓存,而不是像 90 年代那样自己实现。未公开的内部模块
urllib.parse的Quoted类 API 现已弃用,将在 3.14 版本中移除。bpo-43972: 当
http.server.SimpleHTTPRequestHandler为不以/结尾的目录路径发送301 (Moved Permanently)时,添加Content-Length: 0头部。这改善了某些客户端的行为。bpo-28528: 修复
pdb中的一个错误,其中checkline()如果在reset()之后调用会引发AttributeError。bpo-43853: 改进了
sqlite3用户定义函数和聚合函数的字符串处理:现在可以将含有嵌入空字符的字符串传递给 UDFs
转换失败现在会正确引发
MemoryError
由 Erlend E. Aasland 提交的补丁。
bpo-43666: AIX:
Lib/_aix_support.get_platform()在 AIX WPAR 中可能会失败。文件集 bos.rte 似乎在 LPAR 和 WPAR 中都有 builddate,因此查询此文件集而不是 bos.mp64。为了防止类似情况(ODM 中没有 builddate),提供了一个足够完成构建的值(9988)。由 M Felt 提供补丁。bpo-43650: 修复
shutil.unpack_archive()中的MemoryError,该错误在shutil._unpack_zipfile()处理大文件时发生。由 Igor Bolshakov 提供补丁。bpo-43612:
zlib.compress()现在接受一个 wbits 参数,允许用户在不带 zlib 头部和尾部的原始 deflate 块中一次性压缩数据。以前这需要实例化一个zlib.compressobj。当 wbits=31 时,它还提供了一种比gzip.compress更快的替代方案。bpo-43392:
importlib._bootstrap._find_and_load()现在实现了一个两步检查,以避免在模块已经导入并准备就绪时锁定。这提高了重复调用importlib.import_module()和importlib.__import__()的性能。bpo-43234: 在Python 3.8中弃用后,禁止将非
concurrent.futures.ThreadPoolExecutor执行器传递给loop.set_default_executor()。由Illia Volochii提供补丁。bpo-43232: 禁止对
asyncio.trsock.TransportSocket进行之前已弃用的可能破坏性操作。由Illia Volochii提供补丁。bpo-30077: 添加了对苹果aifc/sowt伪压缩的支持
bpo-42971: 为定义了此常量(如macOS)的平台添加了
errno.EQFULL的定义。bpo-43086: 为 binascii.a2b_base64 添加了一个新的可选参数
strict_mode。当scrict_mode设置为True时,a2b_base64 函数将只接受有效的base64内容。关于什么是"有效的base64内容"的更多细节,可以在函数的文档中找到。bpo-43024: 改进了
traceback.print_exception()、traceback.format_exception()和traceback.format_exception_only()的帮助签名。bpo-33809: 添加了
traceback.TracebackException.print()方法,用于打印格式化的异常信息。bpo-42862:
sqlite3现在利用functools.lru_cache()来实现连接语句缓存。作为一个小优化,默认的语句缓存大小从100增加到了128。由Erlend E. Aasland提供补丁。bpo-41818: Soumendra Ganguly:添加了termios.tcgetwinsize()和termios.tcsetwinsize()。
bpo-40497: 当用户代码传递了无效的关键字参数 check 时,
subprocess.check_output()现在会引发ValueError。之前这样的使用会在后期失败,并引发TypeError。由Rémi Lapeyre提供补丁。bpo-37449:
ensurepip现在使用importlib.resources.files()可遍历APIbpo-40956: 在
sqlite3中使用Argument Clinic。由Erlend E. Aasland提供补丁。bpo-41730: 当导入
tkinter.tix时,现在会引发DeprecationWarning,该模块自Python 3.6以来在文档中已被弃用。bpo-20684: 从
inspect模块中移除未使用的_signature_get_bound_param函数 - 由 Anthony Sottile 提交。bpo-41402: 修复
email.message.EmailMessage.set_content()当使用二进制数据和7bit内容传输编码调用时的问题。bpo-32695:
tarfile.open()的 compresslevel 和 preset 关键字参数现在都已记录并测试。bpo-41137: 在读取 .pdbrc 文件时使用 utf-8 编码。由 Srinivas Reddy Thatiparthy 提供补丁。
bpo-24391: 改进了
threading同步对象的 reprs:Semaphore、BoundedSemaphore、Event和Barrier。bpo-5846: 弃用了以下
unittest函数,计划在 Python 3.13 中移除:findTestCases()makeSuite()getTestCaseNames()
请改用
TestLoader方法:由 Erlend E. Aasland 提交的补丁。
bpo-40563: 支持 dbm/shelve 上的 pathlike 对象。由 Hakan Çelik 和 Henry-Joseph Audéoud 提供补丁。
bpo-34990: 修复了 compileall 模块中的一个 Y2k38 错误,该错误会导致在 2038 年后修改的文件编译失败。
bpo-39549: 之前 reprlib.Repr 的代码使用了一个硬编码的字符串值 '...',这个 PR 更新为使用一个“fillvalue”属性,其值默认为 '...',并且可以在单个 reprlib.Repr 实例或其子类中重置。
bpo-38840: 在没有共享内存实现的平台上修复
test___all__。bpo-39359: 添加了一个缺失的检查,确保密码是一个 bytes 对象,用于加密的 zipfile。
bpo-38741:
configparser:在节标题中使用 ']' 将不再在 ']' 处截断节名称。bpo-38415: 添加了
contextlib.asynccontextmanager()缺失的行为以匹配contextlib.contextmanager(),使得装饰的函数本身可以作为装饰器使用。bpo-30256: 通过AutoProxy传递multiprocessing BaseProxy参数
manager_owned。bpo-27513:
email.utils.getaddresses()现在接受email.header.Header对象以及字符串值。由Zackery Spytz提供补丁。bpo-16379: 将SQLite错误代码和名称添加到
sqlite3异常中。由Aviv Palivoda、Daniel Shahaf和Erlend E. Aasland提供补丁。bpo-26228: pty.spawn在FreeBSD、macOS和Solaris上不再挂起。
bpo-33349: lib2to3现在在任何地方都能识别异步生成器。
bpo-29298: 修复没有
dest的必需子解析器未接收到参数时的TypeError。由Anthony Sottile提供补丁。
文档¶
bpo-45216: 移除
difflib中额外的方法文档列表。它在pydoc中渲染两次,并且在某些地方已经过时。bpo-45024:
collections.abc文档已扩展,明确涵盖实例和子类检查的工作原理,添加了额外的doctest示例和一个详尽的ABC列表,这些ABC仅通过存在正确的 special methods来测试成员资格。由Raymond Hettinger提供补丁。bpo-44957: 尽可能使用 PEP 604 联合语法来推广它。 此外,在关于
Union的部分更突出地提到X | Y,并在关于Optional的部分提到X | None。bpo-16580: 为:int.to_bytes:和:int.from_bytes:方法添加了代码等价物,以及确保这些代码等价物有效的测试。
bpo-44903: 移除了
othergui.rst文件、对其的任何引用以及FAQ中的GUI框架列表。取而代之的是,我添加了指向Python Wiki 页面上的GUI框架 的链接。bpo-33479: Tkinter文档大幅扩展,新增了“架构”和“线程模型”部分。
bpo-36700:
base64RFC引用已更新指向 RFC 4648;新增了一个部分指向用户RFC的新“安全考虑”部分。bpo-44740: 根据2016年修订的美联社样式手册,将大写的"Web"和"Internet"替换为小写版本。
bpo-44693: 通过替换混淆的词汇"伪模块"为更准确的描述,更新了术语表中__future__的定义。
bpo-35183: 向os.path.splitext文档添加典型示例
bpo-30511: 澄清由于依赖改变当前工作目录,
shutil.make_archive()不是线程安全的。bpo-44561: 更新Doc/distributing/index.rst中三个过期的超链接:"项目结构"、"构建和打包项目"以及"将项目上传到Python包索引"。
bpo-44651: 删除Doc/glossary.rst中"强制"条目因其过时的定义。
bpo-42958: 更新了
filecmp.cmp()的文档字符串和文档,使其更加准确且不易混淆,特别是关于 shallow 参数的部分。bpo-44631: 重构了
_Environ(os模块) 的repr()代码。bpo-44613: importlib.metadata不再处于临时状态。
bpo-44544: 列出
textwrap.wrap()、textwrap.fill()和textwrap.shorten()的所有kwargs。现在,有导航链接指向TextWrap的属性,这使得在文档中导航更加容易,同时最小化了重复。bpo-38062: 澄清atexit在内部使用相等比较。
bpo-40620: 将教程controlflow.rst第4.3节中的示例转换为解释器演示样式。
bpo-43066: 向
zipfile文档添加警告:带有前导斜杠的文件名参数可能导致在Windows系统上无法打开存档。bpo-39452: 重写了
Doc/library/__main__.rst。扩大了文档的范围,明确讨论并区分了包中的__main__.py与__name__ == '__main__'表达式(及其周围的惯用法)。bpo-13814: 在设计FAQ中,回答了“为什么生成器不支持with语句?”
bpo-27752: csv.Dialect的文档更加描述性。
bpo-44453: 修复了
sysconfig.get_path()返回类型的文档。bpo-44392: 在 C API 文档中新增了一个关于类型提示中使用的类型的部分。 记录了
Py_GenericAlias和Py_GenericAliasType。bpo-38291: 在文档中标记
typing.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-44025: 澄清了在match语句中,何时'_'是关键字,何时不是。
bpo-41706: 修正了关于如何调用像
__add__这样的方法来评估操作符表达式的文档。bpo-41621: 在文档中说明
collections.defaultdict的参数default_factory默认为 None 且为仅限位置参数。bpo-41576: 记录了BaseException优于裸except
bpo-21760: 修复了 __file__ 的描述。Furkan Onder 提供的补丁。
bpo-39498: 添加一个“安全考虑”索引,链接到有明确记录安全考虑的标准库模块。
bpo-33479: 移除了关于 tkinter 线程安全的未经证实的声明。这一说法已经多年不成立,可能从来就不是真的。关于什么是真的解释可能会在更多的讨论之后,甚至可能在修补 _tkinter.c 之后添加。
测试¶
bpo-40173: 修复
test.support.import_helper.import_fresh_module()。bpo-45280: 为空的
typing.NamedTuple添加测试用例。bpo-45269: 覆盖当向
c_make_encoder提供无效markers类型的情况。bpo-45128: 修复由于
test_logging和sys.modules操作导致的test_multiprocessing_fork失败。bpo-45209: 修复
_test_multiprocessing._TestSharedMemory.test_shared_memory_cleaned_after_process_termination中的UserWarning: resource_tracker警告。bpo-45185: 在
test_ssl套件中启用TestEnumerations测试用例。bpo-45195: 修复 test_readline.test_nonascii():有时,换行符不会在末尾写入,因此不要期望在输出中看到它。Victor Stinner 提供的补丁。
bpo-45156: 修复了由
create_autospec()创建的模拟在unittest.mock.seal()上的无限循环问题。bpo-45125: 改进了
SharedMemory和SharableList对象的序列化测试和文档。bpo-44860: 为 posix_user 方案更新
test_sysconfig.test_user_similar():platlib不使用sys.platlibdir。Victor Stinner 提供的补丁。bpo-45052:
WithProcessesTestSharedMemory.test_shared_memory_basics测试被忽略,因为self.assertEqual(sms.size, sms2.size)行失败。现在这一行被移除,测试不再跳过。从测试中移除这一行的主要动机是
SharedMemory的size并不保证总是相同。它由平台决定。bpo-44895: libregrtest 现在更晚清除类型缓存,以减少在检查引用泄漏时产生误报的风险。之前,类型缓存清除得太早,libregrtest 在非常特定的条件下会关于引用泄漏产生误报。由 Irit Katriel 和 Victor Stinner 提供补丁。
bpo-45042: 修复了使用
@hashlib_helper.requires_hashdigest装饰的测试类总是被跳过的问题。bpo-25130: 在测试中添加
gc.collect()的调用以支持 PyPy。bpo-45011: 使依赖于
_asyncioC 扩展模块的测试成为可选测试,以便允许在其他 Python 实现上运行。补丁由 Serhiy Storchaka 提供。bpo-44949: 修复 test_readline 的自动历史测试:有时,换行符不会在末尾写入,因此不要期望它在输出中出现。
bpo-44891: 添加了测试以澄清当在
str和bytes对象上使用obj * 1时id()被保留。由 Nikita Sobolev 提供补丁。bpo-44852: 添加了在运行回归测试套件时全面静默 DeprecationWarnings 的能力。
bpo-40928: 通知在 macOS 上运行 test_decimal 回归测试的用户,test_decimal 可能会输出无害的“malloc can't allocate region”消息。
bpo-44734: 修复了 turtle 测试中的浮点数精度问题。
bpo-44708: 回归测试现在在使用 -w 运行时,仅重新运行受影响的测试方法,而不是重新运行整个测试文件。
bpo-42095: 添加了 Apple plists 的互操作性测试:用 Python plistlib 生成 plist 文件并用 Apple plutil 解析;反之亦然。
bpo-44647: 向回归测试添加了一个永久的 Unicode 值环境变量,以确保它们将来能处理这种用例。如果您的测试环境因此中断,请向我们报告错误,并在测试环境中临时设置 PYTHONREGRTEST_UNICODE_GUARD=0。
bpo-44515: 调整最近添加的contextlib测试,避免假设使用引用计数的垃圾回收。
bpo-44287: 通过使用更长的超时时间来修复asyncio的test_popen()测试_windows_utils。使用军用级经过实战检验的
test.support.SHORT_TIMEOUT超时而不是硬编码的10秒超时:默认为30秒,但在慢速构建机器人上会更长。由Victor Stinner提供补丁。bpo-44451: 在
test.test_importlib.test_metadata_api.APITests.test_entry_points_by_index中重置DeprecationWarning过滤器,以避免如果DeprecationWarnings被忽略时出现StopIteration错误。bpo-44363: 在test_capi中考虑地址消毒器。当运行GCC地址消毒器时,test_capi现在可以通过。
bpo-44364: 为
math.sqrt()函数添加非整数测试。bpo-43921: 修复test_ssl.test_wrong_cert_tls13():使用
suppress_ragged_eofs=False,因为在Windows上read()可能会引发ssl.SSLEOFError。由Victor Stinner提供补丁。bpo-43921: 修复 test_ssl 的 test_pha_required_nocert():捕获另外两种 EOF 情况(当
recv()方法返回一个空字符串时)。 由 Victor Stinner 提供补丁。bpo-44131: 在test_embed中添加test_frozenmain以测试
Py_FrozenMain()C函数。补丁由Victor Stinner提供。bpo-31904: 在test_file_not_exists()中忽略错误字符串的大小写。
bpo-42083: 添加测试以检查
PyStructSequence_NewType是否接受doc字段设置为NULL的PyStructSequence_Desc。bpo-35753: 通过跳过那些函数来修复doctest在解析包含不可包装函数的模块时的崩溃。
bpo-30256: 添加嵌套队列的测试,当在
ListProxy和DictProxy中使用multiprocessing共享对象AutoProxy[Queue]时。
构建¶
bpo-45220: 避免自动使用 Windows 11 SDK 预览版构建。 可以通过在构建前设置
DefaultWindowsSDKVersion环境变量来覆盖此设置。bpo-45020: 冻结在启动期间导入的标准库模块。这显著提高了启动性能。如有需要,可使用之前添加的"-X frozen_modules=off"命令行选项强制导入源代码模块。
bpo-45188: Windows构建现在将重新生成冻结模块作为构建的第一部分。之前重新生成是在构建的后期进行的,如果任何模块发生了变化,就需要重新开始构建。
bpo-45163: 修复Haiku平台构建。
bpo-45067: ncurses函数extended_color_content是在2017年引入的
(https://invisible-island.net/ncurses/NEWS.html#index-t20170401)。
CentOS 7中的ncurses-devel包有一个较旧版本的ncurses,导致编译错误。为了编译支持扩展颜色的ncurses,我们验证ncurses库的版本>=20170401。
bpo-45019: 为冻结模块在相关文件中生成行。直到现在,每个文件都必须手动编辑。这一变化使得添加和修改冻结模块变得更加容易。
bpo-44340: 添加支持通过--with-lto=thin/full使用clang thin lto构建。由Donghee Na和Brett Holman提供补丁。
bpo-44535: 支持在Windows上使用Visual Studio 2022安装进行构建。
bpo-43298: 改进了在没有安装Windows SDK时构建的错误消息。
bpo-44381: Windows构建现在接受
EnableControlFlowGuard设置为guard以启用CFG。bpo-41282: 修复了导致标准库扩展模块在 cpython 的安装阶段不必要且错误地重新构建的
make install问题。
Windows¶
bpo-45375: 修复了由于在非规范化路径中搜索标准库而导致的断言失败。
bpo-45022: 更新Windows版本以包含libffi 3.4.2
bpo-45007: 在Windows构建中更新到OpenSSL 1.1.1l
bpo-44848: 升级Windows安装程序以使用SQLite 3.36.0。
bpo-41299: 修复在
threading模块中使用超时功能(如threading.Lock.acquire()或threading.Condition.wait())时出现的16毫秒抖动问题。bpo-40263: 这是 https://bugs.python.org/issue26903 的后续错误。一旦应用了该修复,我们会遇到一个差一的断言问题。该断言不正确。
macOS¶
bpo-45007: 更新 macOS 安装程序构建以使用 OpenSSL 1.1.1l。
bpo-34602: 在 macOS 上使用
./configure --with-undefined-behavior-sanitizer --with-pydebug构建 CPython 时,现在将栈大小翻两番以允许整个测试套件通过。bpo-44848: 更新 macOS 安装程序以使用 SQLite 3.36.0。
bpo-44689:
ctypes.util.find_library()现在在 macOS 11 Big Sur 上即使是在旧版 macOS 上构建的 Python 也能正确工作。之前,当在旧版 macOS 系统上构建时,由于系统库存储方式的改变,find_library在 Big Sur 上运行时无法找到 macOS 系统库。bpo-41972: 修改框架构建在 sysconfig 中的用户头文件路径,添加 'pythonX.Y' 组件以匹配 distutils 的行为。
bpo-43109: 允许 --with-lto 配置选项与 Apple 提供的 Xcode 或 Command Line Tools 一起工作。
bpo-34932: 为 macOS 添加 socket.TCP_KEEPALIVE 支持。由 Shane Harvey 提供补丁。
IDLE¶
bpo-45296: 在 Windows 上,将退出/退出的提示信息改为建议使用 Ctrl-D(这是有效的),而不是 <Ctrl-Z Return>(在 IDLE 中无效)。
bpo-45193: 使完成框在 Ubuntu 上再次出现。
bpo-40128: 主要修复在 macOS 上不使用 tcl/tk 8.6.11(如 3.9 版本)时的补全问题。添加的 update_idletask 调用应该是无害的,可能在其他情况下也有帮助。
bpo-33962: 将缩进空格设置从字体选项卡移至新的Windows选项卡。由Mark Roseman和Terry Jan Reedy提供补丁。
bpo-40468: 将设置对话框的常规选项卡拆分为Windows和Shell/ED选项卡。将扩展帮助菜单的帮助源移至扩展选项卡。为新选项腾出空间并缩短对话框。后者使对话框更好地适应小屏幕。
bpo-41611: 避免在
AutoCompleteWindow.winconfig_event()中出现未捕获的异常。bpo-41611: 修复在macOS上有时因标签补全导致IDLE冻结的问题。
bpo-44010: 高亮显示新的 match 语句的 soft keywords:
match、case和_。然而,这种高亮显示并不完美,在某些罕见情况下会不正确,包括一些case模式中的_。bpo-44026: 在NameErrors和AttributeErrors的消息行中包含解释器的拼写修正建议。由E. Paine提供补丁。
工具/示例¶
bpo-44786: 修复c-analyzer脚本中正则表达式的警告。
bpo-44967: 当模块无法找到时,pydoc现在返回非零状态码。
bpo-44978: 允许Argument Clinic工具处理
__complex__特殊方法。bpo-43425: 删除了'demo2to3'演示项目,该项目演示了在distutils包中使用lib2to3支持Python 2.x和Python 3.x的单一源。由Donghee Na提供补丁。
bpo-44074: 使patchcheck自动检测正确的基础分支名称(之前硬编码为'master')
bpo-20291: 在Argument Clinic中添加了对可变位置参数的支持。
C API¶
bpo-41710: PyThread_acquire_lock_timed()函数现在会在超时时间过长时进行钳制,而不是中止进程。由Victor Stinner提供补丁。
bpo-44687:
BufferedReader.peek()在文件已全部缓冲时不再引发ValueError。bpo-45116: 添加
Py_ALWAYS_INLINE宏以请求编译器始终内联一个静态内联函数。编译器可以忽略此请求并决定不内联该函数。由 Victor Stinner 提供补丁。bpo-45094: 添加
Py_NO_INLINE宏以禁用函数的内联。补丁由 Victor Stinner 提供。bpo-45061: 为
bool类型添加一个析构器,以检测 C 扩展中错误调用Py_DECREF(Py_True);或Py_DECREF(Py_False);的引用计数错误。由 Victor Stinner 提供补丁。bpo-42035: 添加一个新的
PyType_GetQualName()函数以获取类型的限定名称。bpo-41103: 恢复旧缓冲区协议的移除,因为它们是稳定 ABI 的一部分。
bpo-44751: 从公共
Python.h头文件中移除crypt.h包含。bpo-42747:
Py_TPFLAGS_HAVE_VERSION_TAG类型标志现在不做任何事情。Py_TPFLAGS_HAVE_AM_SEND标志(在 3.10 中添加)被移除。这两者都是不必要的,因为不可能有相关字段缺失的类型对象。bpo-44530: 向
PyCodeObject结构添加co_qualname,以将限定名称从编译器传播到代码对象。由 Gabriele N. Tornetta 提供补丁
bpo-44441: 现在
Py_RunMain()会在退出时将PyImport_Inittab重围为其初始值。 必须能够在每次 Python 初始化时调用PyImport_AppendInittab()或PyImport_ExtendInittab()。 由 Victor Stinner 编写补丁。bpo-39947: 移除 4 个私有的 trashcan C API 函数,这些函数仅为了保持与 Python 3.8 及更早版本的稳定 ABI 的向后兼容性而保留,因为在 Python 3.8 及更早版本中,trashcan API 无法与有限的 C API 一起使用。trashcan API 在 Python 3.9 中被排除在有限的 C API 之外。
已移除的函数:
_PyTrash_deposit_object()
_PyTrash_destroy_chain()
_PyTrash_thread_deposit_object()
_PyTrash_thread_destroy_chain()
垃圾回收C API从未能与有限的C API一起使用,因为旧的垃圾回收宏直接访问了
PyThreadState成员如_tstate->trash_delete_nesting,而PyThreadState结构在有限的C API中是不透明的。同时从C API中排除
PyTrash_UNWIND_LEVEL常量。由Victor Stinner提供补丁。
bpo-40939: 移除了关于已移除的
PyParser_*C API的文档。bpo-43795: 受限 API 的内容 中的列表现在显示公共名称
PyFrameObject而非_frame。列表中不再出现不存在的条目_node。bpo-44378:
Py_IS_TYPE()不再使用Py_TYPE()以避免编译器警告:不再将const PyObject*强制转换为PyObject*。 由 Victor Stinner 提供补丁。bpo-39573: 将
Py_TYPE()和Py_SIZE()宏转换为静态内联函数。现在必须使用Py_SET_TYPE()和Py_SET_SIZE()函数来设置对象类型和大小。由Victor Stinner提供补丁。bpo-44263: 如果类型定义时设置了
Py_TPFLAGS_HAVE_GC标志但没有遍历函数(PyTypeObject.tp_traverse),PyType_Ready()函数现在会引发错误。由Victor Stinner提供补丁。bpo-43795: 未记录的函数
Py_FrozenMain()已从有限API中移除。bpo-44113: 弃用以下用于配置Python初始化的函数:
PySys_AddWarnOptionUnicode()PySys_AddWarnOption()PySys_AddXOption()PySys_HasWarnOptions()Py_SetPath()Py_SetProgramName()Py_SetPythonHome()Py_SetStandardStreamEncoding()_Py_SetProgramFullPath()
请改用 Python 初始化配置 中新增的
PyConfigAPI(参见 PEP 587)。bpo-44094: 移除
PyErr_SetFromErrnoWithUnicodeFilename()、PyErr_SetFromWindowsErrWithUnicodeFilename()和PyErr_SetExcFromWindowsErrWithUnicodeFilename()。 这些函数未被写入文档并且自 Python 3.3 以来已被弃用。bpo-43795:
PyCodec_Unregister()现在作为Windows稳定ABI DLL中的函数被正确导出。bpo-44029: 移除已弃用的
Py_UNICODEAPI:PyUnicode_Encode、PyUnicode_EncodeUTF7、PyUnicode_EncodeUTF8、PyUnicode_EncodeUTF16、PyUnicode_EncodeUTF32、PyUnicode_EncodeLatin1、PyUnicode_EncodeMBCS、PyUnicode_EncodeDecimal、PyUnicode_EncodeRawUnicodeEscape、PyUnicode_EncodeCharmap、PyUnicode_EncodeUnicodeEscape、PyUnicode_TransformDecimalToASCII、PyUnicode_TranslateCharmap、PyUnicodeEncodeError_Create、PyUnicodeTranslateError_Create。参考 PEP 393 和 PEP 624。bpo-42035: 新增
PyType_GetName()函数以获取类型的短名称。
Python 3.10.0 beta 1¶
发布日期: 2021-05-03
安全性¶
bpo-43434: 现在创建
sqlite3.Connection对象时也会产生sqlite3.connect和sqlite3.connect/handleauditing events。之前这些事件仅由sqlite3.connect()调用产生。由 Erlend E. Aasland 提供补丁。bpo-43998:
ssl模块设置了更安全的密码套件默认值。默认禁用不具有前向保密性和使用 SHA-1 MAC 的密码。安全级别 2 禁止使用安全性低于 112 位的弱 RSA、DH 和 ECC 密钥。SSLContext默认最低协议版本为 TLS 1.2。设置基于 Hynek Schlawack 的研究。bpo-43882: URL 部分中存在的换行符或制表符可能允许某些形式的攻击。
遵循 WHATWG 定义的 URL 控制规范,
urllib.parse()现在从 URL 中移除 ASCII 换行符和制表符,防止此类攻击。bpo-43472: 确保解释器级审计钩子在通过
_xxsubinterpreters模块调用时接收到cpython.PyInterpreterState_New事件。bpo-43362: 修复 _sha3 模块中的无效释放。此问题在 3.10.0a1 中引入。Python 3.9 及更早版本不受影响。
bpo-43762: 为
sqlite3.connect/handle()、sqlite3.Connection.enable_load_extension()和sqlite3.Connection.load_extension()添加审计事件。由 Erlend E. Aasland 提供补丁。bpo-43756: 添加新的审计事件
glob.glob/2以包含新增的 root_dir 和 dir_fd 参数,这些参数已添加到glob.glob()和glob.iglob()中。bpo-36384:
ipaddress模块不再接受 IPv4 地址字符串中的任何前导零。前导零是模糊的,并被一些库解释为八进制表示法。例如,旧函数socket.inet_aton()将前导零视为八进制表示法。现代inet_pton()的 glibc 实现不接受任何前导零。ipaddress模块曾一度接受模糊的前导零。bpo-43075: 修复
urllib.request.AbstractBasicAuthHandler中的正则表达式拒绝服务(ReDoS)漏洞。易受 ReDoS 攻击的正则表达式具有二次最坏情况复杂度,当识别精心制作的无效 RFC 时,它可能导致拒绝服务。此 ReDoS 问题位于客户端,需要远程攻击者控制 HTTP 服务器。bpo-42800: 现在为 frame.f_code、traceback.tb_frame 和生成器代码/帧属性访问触发审计钩子。
bpo-37363: 向
http.client模块添加审计事件。
核心与内置函数¶
bpo-43977: 防止类在模式匹配时同时是序列和映射。
bpo-43977: 在模式匹配时,使用
tp_flags在类对象上确定主题是序列还是映射。避免在模式匹配时需要导入collections.abc。bpo-43892: 在解析
match块时,恢复对复杂字面值模式的正确验证。bpo-43933: 在执行
__exit__调用时,将 frame.f_lineno 设置为 'with' 关键字的行号。bpo-43933: 如果帧中的当前位置没有行号,则将 f_lineno 属性设置为 None,而不是 -1,以符合 PEP 626。这通常不应该发生,但在一些不寻常的情况下可能会出现。
bpo-43963: 在子解释器中导入
_signal模块不再产生副作用。bpo-42739: 行号表的内部表示已更改为不使用哨兵,并且向进程外 API 函数
PyLineTable_InitAddressRange添加了一个显式的长度参数。这使得在某些情况下处理行号表更加健壮。bpo-43908: 使
array.array类型不可变。由 Erlend E. Aasland 提供补丁。bpo-43901: 更改类和模块对象以按需延迟创建空的注释字典。为了向后兼容,注释字典存储在对象的 __dict__ 中。
bpo-43892: 匹配模式现在使用新的专用 AST 节点(
MatchValue、MatchSingleton、MatchSequence、MatchStar、MatchMapping、MatchClass),而不是重用表达式 AST 节点。MatchAs和MatchOr现在被定义为模式节点而不是表达式节点。由 Nick Coghlan 提供补丁。bpo-42725: 当 PEP 563 被激活时,现在禁止在注释中使用
await/yield/yield from和命名表达式。bpo-42737: 对于复杂目标(除了简单名称之外的所有内容)的注释,在使用
from __future__ import annotations时不再产生任何运行时效果。bpo-43914: 解释器引发的
SyntaxError异常现在会高亮显示构成语法错误本身的表达式的完整错误范围,而不再仅仅是检测到问题的位置。补丁由 Pablo Galindo 提供。bpo-38605: 撤销将
from __future__ import annotations设为默认值。这一决定遵循了指导委员会的决定,将 PEP 563 的更改推迟到至少 Python 3.11。有关该决定的更多信息,请参阅原始邮件:https://mail.python.org/archives/list/python-dev@python.org/thread/CLVXXPQ2T2LQ5MP2Y53VVQFCXYWQJHKZ/。由 Pablo Galindo 提供补丁。bpo-43475: NaN 值的哈希现在依赖于对象身份。以前,它们总是哈希为 0,即使 NaN 值彼此不相等。为不相等的值使用相同的哈希会导致哈希表中的堆积。
bpo-43859: 改进了
IndentationError异常的错误消息。由 Pablo Galindo 提供补丁。bpo-41323: 字节码优化器中的常量元组折叠现在重用常量表中的元组。
bpo-43846: 对于大型字面量和调用表达式,数据堆栈的使用大大减少。
bpo-38530: 当打印解释器引发的
NameError时,PyErr_Display()将提供函数中相似变量名的建议。由 Pablo Galindo 提供补丁。bpo-43823: 改进了无效字典字面量的语法错误。由 Pablo Galindo 提供补丁。
bpo-43822: 改进了解析器中表达式间缺少逗号的语法错误。由 Pablo Galindo 提供补丁。
bpo-43797: 改进了无效比较的
SyntaxError错误消息。由 Pablo Galindo 提供补丁。bpo-43760: 将检查是否启用跟踪的标志从堆移动到 C 堆栈。应该可以加速解释器中的调度。
bpo-43682: 静态方法 (
@staticmethod) 和类方法 (@classmethod) 现在继承方法属性 (__module__,__name__,__qualname__,__doc__,__annotations__) 并有一个新的__wrapped__属性。由 Victor Stinner 提交的补丁。bpo-43751: 修复了
anext(ait, default)错误返回 None 的 bug。bpo-42128:
__match_args__不再允许为列表。bpo-43683: 添加 GEN_START 操作码。标记生成器的开始,包括异步或协程,并处理向新创建的生成器或协程发送值。
bpo-43105: Importlib 现在在从文件位置创建模块规范对象时解析相对路径。
bpo-43682: 静态方法 (
@staticmethod) 现在可以像常规函数一样调用。由 Victor Stinner 提交的补丁。bpo-42609: 防止在编译某些极端长的表达式如
"+0"*1000000时 AST 验证器和优化器崩溃。现在会抛出RecursionError。bpo-38530: 当打印
AttributeError时,PyErr_Display()将提供引发异常的对象的相似属性名称的建议。由 Pablo Galindo 提交的补丁
库¶
bpo-44015: 在 @dataclass() 中,如果多次指定 KW_ONLY,则抛出 TypeError。
bpo-25478: 为 collections.Counter() 添加了一个 total() 方法,用于计算计数的总和。
bpo-43733: 修改
netrc.netrc在使用区域设置编码之前使用 UTF-8 编码。bpo-43979: 从
urllib.parse.parse_qsl()中移除了循环前不必要的列表推导。由 Christoph Zwerschke 和 Donghee Na 提交的补丁。bpo-43993: 更新捆绑的 pip 到 21.1.1。
bpo-43957: [枚举] 弃用当非成员用于包含检查时抛出
TypeError的行为;在 3.12 版本中,将返回True或False,如果该值是枚举的成员或其成员的值之一,则包含检查将返回True。bpo-42904: 为了与之前次要版本的 Python 向后兼容,如果
typing.get_type_hints()没有接收到命名空间字典参数,typing.get_type_hints()将在评估类中字符串化的类型注释(字符串前向引用)时搜索全局然后局部命名空间。bpo-43945: [枚举] 弃用非标准的混合格式()行为:在 3.12 版本中,将使用枚举成员而非成员的值进行 format() 调用。
bpo-41139: 弃用未记录的
cgi.log()API。bpo-43930: 更新捆绑的 pip 到 21.1 和 setuptools 到 56.0.0
bpo-43907: 修复了在使用协议 5 时纯 Python pickle 实现中的一个 bug,其中在 pickled 对象图中多次出现的 bytearray 实例会错误地 unpickle 为 bytearray 对象的重复副本。
bpo-43926: 在
importlib.metadata中,为Description提供统一接口,允许任何字段编码为多行值,从多行值中移除续行,并添加.json属性以便轻松访问 PEP 566 JSON 兼容形式。与importlib_metadata 4.0同步。bpo-43920: OpenSSL 3.0.0: 当 cadata 不包含有效证书时,
load_verify_locations()现在返回一致的错误消息。bpo-43817: 添加
inspect.get_annotations(),该函数安全地计算对象上定义的注解。它解决了从各类对象访问注解时的怪癖,并对传入的对象做出极少假设。inspect.get_annotations()还能正确反字符串化字符串化的注解。inspect.signature()、inspect.from_callable()和inspect.from_function()现在调用inspect.get_annotations()来检索注解。这意味着inspect.signature()和inspect.from_callable()现在也能反字符串化字符串化的注解。bpo-43284: platform.win32_ver 从 sys.getwindowsversion().platform_version 派生 Windows 版本,而后者又从 kernel32.dll 派生版本(可能与 Windows 本身的版本不同)。因此,更改 platform.win32_ver 以使用平台模块的 _syscmd_ver 私有函数来确定版本,以返回准确的版本。
bpo-42854:
ssl模块现在内部使用SSL_read_ex和SSL_write_ex。这些函数支持读写大于 2 GB 的数据。写入零长度数据不再因协议违规错误而失败。bpo-42333: 将
_ssl扩展模块移植到多阶段初始化。bpo-43880:
ssl现在对 OP_NO_SSL/TLS* 选项、旧 TLS 版本、旧协议以及自 Python 3.6、3.7 或 OpenSSL 1.1.0 以来已弃用的其他功能发出 DeprecationWarning。bpo-41559: PEP 612 现在仅在 Python 中实现;内置的
types.GenericAlias对象不再在__parameters__中包含typing.ParamSpec(除了collections.abc.Callable的GenericAlias)。 这意味着之前无效的ParamSpec使用 (如list[P]) 在 Python 3.10 alpha 早期版本中有效,现在在替换过程中会引发TypeError。bpo-43867:
multiprocessing的Server类现在明确捕获SystemExit并在这种情况下关闭客户端连接。当Server.serve_client()方法到达文件末尾 (EOF) 时会发生这种情况。bpo-40443: 移除未使用的导入:pyclbr 不再使用 copy,typing 不再使用 ast。由 Victor Stinner 提供补丁。
bpo-43820: 移除了传递给 dataclasses.make_dataclass() 的命名空间的一个不需要的副本。
bpo-43787: 向
bz2.BZ2File、gzip.GzipFile和lzma.LZMAFile添加了__iter__()方法。这使得迭代它们快约 2 倍。由 Inada Naoki 提供补丁。bpo-43680: 弃用 io.OpenWrapper 和 _pyio.OpenWrapper:改用 io.open 和 _pyio.open。在 Python 3.9 之前,_pyio.open 不是一个静态方法,而 builtins.open 被设置为 OpenWrapper,以避免在设置为类变量时成为绑定方法。_io.open 是一个内置函数,而 _pyio.open 是一个 Python 函数。在 Python 3.10 中,_pyio.open() 现在是一个静态方法,builtins.open() 现在是 io.open()。
bpo-43680: Python
_pyio.open()函数变为静态方法,使其行为与内置函数io.open()一致:在存储为类变量时不会变为绑定方法。由于静态方法在 Python 3.10 中已成为可调用对象,因此这一改变得以实现。此外,_pyio.OpenWrapper()变为指向_pyio.open()的简单别名。补丁由 Victor Stinner 提供。bpo-41515: 修复了由于不显示在
sys.modules中的合成模块而在typing.get_type_hints()中引发的KeyError。bpo-43776: 当
subprocess.Popen的参数以字符串或pathlib.Path形式提供时,Popen 实例的 repr 现在显示正确的内容。bpo-42248: [枚举] 确保在
_missing__中引发的异常被释放bpo-43744: 修复了枚举成员名称与私有变量名称开头匹配的问题
bpo-43772: 修复了
TypeVar.__ror__的返回值。由 Jelle Zijlstra 提供补丁。bpo-43764: 为@dataclass装饰器添加match_args参数以允许抑制__match_args__的生成。
bpo-43799: OpenSSL 3.0.0:定义
OPENSSL_API_COMPAT为1.1.1以抑制弃用警告。Python需要OpenSSL 1.1.1的API。bpo-43478: Mock 对象不能再作为其他 Mock 对象的 specs 使用。 因此,已经 mock 的对象不能使用
autospec=True来 mock 一个属性,也不能成为create_autospec(...)调用的对象。 这可能会在测试中暴露出 bug,因为这些由 Mock 派生的 Mock 总是能通过某些测试 (例如isinstance()),并且内置的断言函数(例如 assert_called_once_with)将无条件通过。bpo-43794: 添加
ssl.OP_IGNORE_UNEXPECTED_EOF常量(OpenSSL 3.0.0)bpo-43785: 通过从BZ2File中移除RLock来提高
bz2.BZ2File的性能。这使得BZ2File在面对多个同时进行的读取或写入操作时线程不安全,就像gzip和lzma中的等效类一直以来那样。由Inada Naoki提供补丁。bpo-43789: OpenSSL 3.0.0:当第一次调用已经发出错误信号时,不再第二次调用密码回调函数。
bpo-43788:
ssl错误代码的头文件现在是特定于 OpenSSL 版本的。 异常现在会显示正确的原因和库代码。make_ssl_data.py脚本已被重写,以使用 OpenSSL 带有错误代码的文本文件。bpo-25264:
os.path.realpath()现在接受一个仅限关键词的 strict 参数。 当设置为True时,如果路径不存在或遇到符号链接循环,将引发OSError。bpo-43780: 在
importlib.metadata中,整合了importlib_metadata 3.10的更改:在分发发现期间添加基于mtime的缓存。标记使用entry_points()返回的字典结果为已弃用。gh-47383:
typing.ParamSpec的P.args和P.kwargs属性现在是新类typing.ParamSpecArgs和typing.ParamSpecKwargs的实例,这使得repr()更加有用。由 Jelle Zijlstra 提供补丁。bpo-43731: 为
logging.fileConfig()添加encoding参数。bpo-43712: 为
fileinput.input()和fileinput.FileInput添加了encoding和errors参数。bpo-38659: 向
enum模块添加了一个simple_enum装饰器,用于将普通类转换为 Enum。添加了test_simple_enum来测试简单枚举与相应的普通枚举。更新了标准库模块以使用simple_enum。bpo-43764: 修复了某些
dataclasses中__match_args__生成可能失败的问题。bpo-43752: 修复了带有转换器的零大小 blob 的
sqlite3回归问题,其中返回了b""而不是None。这个回归是由 PR 24723 引入的。由 Erlend E. Aasland 提供补丁。bpo-43723: 以下
threading方法现在已被弃用,应替换为:currentThread=>threading.current_thread()activeCount=>threading.active_count()Condition.notifyAll=>threading.Condition.notify_all()Event.isSet=>threading.Event.is_set()Thread.setName=>threading.Thread.namethread.getName=>threading.Thread.nameThread.isDaemon=>threading.Thread.daemonThread.setDaemon=>threading.Thread.daemon
由 Jelle Zijlstra 提供补丁。
bpo-2135: 弃用了 importlib 和 zipimport 中的 find_module() 和 find_loader() 实现。
bpo-43534:
turtle.textinput()和turtle.numinput()现在创建了一个代表画布窗口工作的瞬态窗口。bpo-43532: 添加了为数据类指定仅关键字字段的功能。这些字段将成为生成的 __init__ 方法的仅关键字参数。
bpo-43522: 修复了
hostname_checks_common_name的问题。OpenSSL 不会将主机标志从 struct SSL_CTX 复制到 struct SSL。bpo-8978: 当
lzma/bz2不可用时,改进了tarfile.open()的错误消息。由 Anthony Sottile 提供补丁。bpo-42967: 在解析
str查询字符串时,允许bytesseparator参数在urllib.parse.parse_qs和urllib.parse.parse_qsl中使用。之前这会引发TypeError。bpo-43296: 改进了
sqlite3的错误处理:设置SQLITE_NOMEM的sqlite3_value_blob()错误现在会引发MemoryError。补丁由 Erlend E. Aasland 提供。bpo-43312: 新增函数
sysconfig.get_preferred_scheme()和sysconfig.get_default_scheme(),用于查询平台的首选“用户”、“家”和“前缀”(默认)方案名称。bpo-43265: 改进了
sqlite3.Connection.backup()的错误处理。现在对于不存在的目标数据库名称的错误消息是unknown database <database name>而不是SQL logic error。补丁由 Erlend E. Aasland 提供。bpo-41282:
distutils.command.install中的安装方案现在从sysconfig加载。bpo-41282:
distutils.sysconfig已合并到sysconfig中。bpo-43176: 修复了继承自无字段冻结数据类的数据类的处理。现在能正确检测为错误。
bpo-43080:
pprint现在支持dataclasses.dataclass。由 Lewis Gaul 提供补丁。bpo-39950: 新增
pathlib.Path.hardlink_to()方法,取代link_to()。新方法的参数顺序与symlink_to()相同。bpo-42904:
typing.get_type_hints()现在在评估类中的 PEP 563 注解时会检查该类的本地命名空间。bpo-42269: 向
dataclasses.dataclass装饰器添加slots参数以自动为类生成__slots__。由 Yurii Karabas 提供补丁。bpo-39529: 弃用在未运行事件循环的情况下使用
asyncio.get_event_loop()。对于asyncio模块中在没有运行事件循环且未传递显式 loop 参数时隐式创建Future或Task对象的函数发出弃用警告:ensure_future()、wrap_future()、gather()、shield()、as_completed()以及Future、Task、StreamReader、StreamReaderProtocol的构造函数。bpo-18369: 向 ssl 模块添加了 Certificate 和 PrivateKey 类。现在也可以从内存缓冲区加载证书和密钥。
bpo-41486: 为
bz2/lzma/zlib模块使用新的输出缓冲区管理代码,并向_compression.DecompressReader类添加.readall()函数。这些带来了一些性能改进。由 Ma Lin 提供补丁。bpo-31870:
ssl.get_server_certificate()函数现在有一个 timeout 参数。bpo-41735: 修复 zlib 模块中的线程锁在极少数情况下可能出错的问题。由 Ma Lin 提供补丁。
bpo-36470: 修复包含
InitVar的数据类与replace()的配合问题。补丁由 Claudiu Popa 提供。bpo-40849: 公开 X509_V_FLAG_PARTIAL_CHAIN ssl 标志
bpo-35114:
ssl.RAND_status()现在返回一个布尔值(如文档所述)而不是1或0。bpo-39906:
pathlib.Path.stat()和chmod()现在接受一个仅关键字参数 follow_symlinks 以与os模块中的相应函数保持一致。bpo-39899: 如果当前用户主目录的基本名称与其用户名不匹配,
os.path.expanduser()现在会拒绝猜测 Windows 主目录。当无法解析主目录时,
pathlib.Path.expanduser()和home()现在会一致地引发RuntimeError异常。在此之前,当 Windows 上未设置"USERNAME"环境变量时,可能会引发KeyError异常。bpo-36076: 为
ssl.get_server_certificate()添加了 SNI 支持。bpo-38490: 向 statistics 模块添加了协方差、皮尔逊相关系数和简单线性回归功能。由 Tymoteusz Wołodźko 提供补丁。
bpo-33731: 提供了一个 locale.localize() 函数,用于将规范化的数字字符串转换为区域格式。
bpo-32745: 修复了处理 ctypes 的
ctypes.c_wchar_p类型时的一个回归问题:嵌入的空字符会导致抛出ValueError。由 Zackery Spytz 提供补丁。
文档¶
bpo-43987: 添加“注释最佳实践”文档作为新的 HOWTO。
bpo-43977: 记录了新的
Py_TPFLAGS_MAPPING和Py_TPFLAGS_SEQUENCE类型标志。bpo-43959: 澄清了关于 PyContextVar C-API 的文档。
bpo-43938: 更新 dataclasses 文档以表达 FrozenInstanceError 派生自 AttributeError。
bpo-43778: 修复 Sphinx glossary_search 扩展:如果 _static/ 子目录不存在则创建它。
bpo-43755: 更新文档以反映自 Python 3.9 起,无括号的 lambda 表达式不能再作为理解和生成器表达式中
if子句的表达式部分。bpo-43739: 修复 Doc/extending/extending.rst 中的示例代码,声明并初始化 pmodule 变量为正确的类型。
测试¶
bpo-43961: 在 Windows 上修复 test_logging.test_namer_rotator_inheritance():使用
os.replace()而不是os.rename()。由 Victor Stinner 提供补丁。bpo-43842: 修复test_logging的SMTP测试中的竞态条件。不要在asyncore.loop()轮询文件描述符时,从另一个线程关闭文件描述符(套接字)。由Victor Stinner提供补丁。
bpo-43843:
test.libregrtest现在如果一个线程抛出异常但没有捕获它,则将测试标记为ENV_CHANGED(改变了执行环境)。它在threading.excepthook()上设置了一个钩子。 使用--fail-env-changed选项将测试标记为失败。 由 Victor Stinner 提供补丁。bpo-43811: 在GitHub Actions上测试多个OpenSSL版本。使用ccache加速测试。
bpo-43791: OpenSSL 3.0.0:禁用对旧协议TLS 1.0和1.1的测试。测试因TLSV1_ALERT_INTERNAL_ERROR而失败。
构建¶
Windows¶
bpo-35306: 向
os.startfile()函数添加额外的参数。bpo-43538: 避免在传入无效文件名时从
pathlib.Path.exists()引发错误。bpo-38822: 修复了
os.stat()在无法访问的目录(带有尾部斜杠)上失败的问题,而不是回退到父目录的元数据。这隐式影响了os.path.exists()和os.path.isdir()。bpo-26227: 修复了
socket.gethostbyaddr()和socket.gethostbyname_ex()中主机名的解码。bpo-40432: 更新了Windows上的pegen再生脚本,以查找并使用Python 3.8或更高版本。在此之前,pegen再生已经需要3.8或更高版本,但脚本可能使用了较低版本的Python。
bpo-43745: 实际上将Windows版本更新到OpenSSL 1.1.1k。早期的版本被错误标记,实际上再次包含了1.1.1i。
bpo-43652: 在Windows安装程序中更新Tcl和Tk到8.6.11版本。
bpo-43492: 升级Windows安装程序以使用SQLite 3.35.5。
bpo-30555: 修复在存在文件描述符重定向时的
WindowsConsoleIO错误。由Segev Finer提供补丁。
macOS¶
bpo-42119: 修复构建 Python 时对 macOS SDK 路径的检查。 缩小搜索范围以匹配SDKs的内容,即仅包括
/System/Library、/System/IOSSupport和/usr中除/usr/local外的文件。 之前,任何在/System下的内容都被假定为在SDK中,这在 10.15+ 的新文件系统布局中会导致问题,因为用户文件系统可能看似挂载在/System下。/Library中的路径也被错误地视为SDK位置。bpo-43568: 放弃对MACOSX_DEPLOYMENT_TARGET < 10.3的支持
bpo-44009: 提供"python3.x-intel64"可执行文件,以便在Apple Silicon Mac上可靠地强制macOS universal2框架构建在Rosetta 2 Intel-64仿真下运行。这对于测试或当universal2 wheel尚不可用时非常有用。
bpo-43851: 在macOS上使用
SQLITE_OMIT_AUTOINIT构建SQLite。由Erlend E. Aasland提供补丁。bpo-43492: 更新macOS安装程序以使用SQLite 3.35.4。
bpo-42235:
Mac/BuildScript/build-installer.py现在在macOS 10.15或更高版本上构建时将使用"--enable-optimizations"和--with-lto。
IDLE¶
bpo-37903: 向shell侧边栏添加鼠标操作。左键点击和可选拖动选择一个或多个行,与编辑器行号侧边栏相同。选择后右键点击会弹出一个带有'copy with prompts'的上下文菜单。这将侧边栏的提示与所选文本的行压缩在一起。
bpo-43981: 修复test_sidebar和test_squeezer中的引用泄漏。由Terry Jan Reedy和Pablo Galindo提供补丁
bpo-37892: 使用空格而非制表符缩进IDLE Shell输入
bpo-43655: IDLE对话框窗口现在被macOS和X Window的窗口管理器识别为对话框。
bpo-37903: IDLE的shell现在在一个单独的侧边栏中显示提示。
C API¶
bpo-43916: 添加一个新的
Py_TPFLAGS_DISALLOW_INSTANTIATION类型标志,以禁止创建类型实例。由Victor Stinner提供补丁。bpo-43774: 移除现在未使用的
PYMALLOC_DEBUG宏。如果Python是以调试模式构建的(如果定义了Py_DEBUG宏),现在默认安装内存分配器的调试钩子。此外,它们现在可以在发布模式的Python构建中使用(例如:使用PYTHONMALLOC=debug环境变量)。bpo-43962: _PyInterpreterState_IDIncref() 现在调用 _PyInterpreterState_IDInitref() 并且总是增加 id_refcount。之前,调用 _xxsubinterpreters.get_current() 在 _xxsubinterpreters.InterpreterID 对象被释放时可能会创建一个 id_refcount 不一致。由Victor Stinner提供补丁。
bpo-28254: 添加新的C-API函数来控制垃圾收集器的状态:
PyGC_Enable()、PyGC_Disable()、PyGC_IsEnabled(),对应于gc模块中的函数。bpo-43908: 为不可变类型对象引入
Py_TPFLAGS_IMMUTABLETYPE标志,并修改PyType_Ready()为静态类型设置它。由Erlend E. Aasland提供补丁。bpo-43795:
PyMem_Calloc()现在在有限C API(Py_LIMITED_API)中可用。bpo-43868:
PyOS_ReadlineFunctionPointer()不再由有限C API头文件和Windows上的python3.dll导出。像任何接受FILE*的函数一样,它不是稳定ABI的一部分。bpo-43753: 添加
Py_Is(x, y)函数来测试 x 对象是否为 y 对象,等同于Python中的x is y。还添加了Py_IsNone()、Py_IsTrue()、Py_IsFalse()函数来分别测试对象是否为None单例、True单例或False单例。由Victor Stinner提供补丁。
Python 3.10.0 alpha 7¶
发布日期: 2021-04-05
安全性¶
bpo-42988: CVE-2021-3426: 移除
pydoc模块的getfile功能,该功能可能被滥用来读取磁盘上的任意文件(目录遍历漏洞)。此外,即使是 Python 模块的源代码也可能包含敏感数据,如密码。漏洞由 David Schwörer 报告。bpo-43285:
ftplib默认不再信任服务器响应 PASV 命令返回的 IP 地址值。这可以防止恶意 FTP 服务器利用响应探测客户端网络的 IPv4 地址和端口组合。需要之前易受攻击行为的代码可以在它们的
ftplib.FTP实例上设置trust_server_pasv_ipv4_address属性为True以重新启用它。bpo-43439: 为
gc.get_objects()、gc.get_referrers()和gc.get_referents()添加审计钩子。由 Pablo Galindo 提供补丁。
核心与内置函数¶
bpo-27129: 更新 CPython 字节码魔法数字。
bpo-43672: 当调用 find_loader() 时,发出 ImportWarning。
bpo-43660: 修复在替换
sys.stderr为一个可在打印异常时删除对象的可调用对象时发生的崩溃。由 Pablo Galindo 提供补丁。bpo-27129: 字节码解释器内部使用指令偏移而非字节偏移。这减少了所需的 EXTENDED_ARG 指令数量并稍微简化了指令分发。
bpo-40645: 修复
_hashopenssl扩展中的引用泄漏。补丁由 Pablo Galindo 提供。bpo-42134: 导入系统对 find_module() 的调用现在会发出 ImportWarning。
bpo-41064: 改进了在 f-strings 中无效使用双星号元素('**')的语法错误提示。由 Pablo Galindo 提供补丁。
bpo-43575: 通过使用 PEP 590
vectorcall调用约定,加速map()调用。由 Donghee Na 提供补丁。bpo-42137: 导入系统现在更倾向于使用
__spec__而非module_repr()来进行ModuleType.__repr__。bpo-43452: 对
_PyType_Lookup()进行了微优化,以提高缓存命中的常见情况下的查找性能。bpo-43555: 为无效的行继续字符报告
SyntaxError的列偏移。由 Pablo Galindo 提供补丁。bpo-43517: 修复了在使用
from pkg.mod import attr时循环导入的错误检测,这导致了非平凡的多线程代码中的假阳性。bpo-43497: 对带有元组常量的断言发出 SyntaxWarnings,这是在 python3.7 中引入的回归问题。
bpo-39316: 当属性位于对象的另一行时,跟踪现在具有正确的行号。改进了多行方法链的调试和分析。
bpo-35883: 如果命令行参数包含无效的 Unicode 字符,Python 不再在启动时以致命错误失败。
Py_DecodeLocale()函数现在会转义将被解码为 [U+0000; U+10ffff] 范围之外的 Unicode 字符的字节序列。bpo-43410: 修复了一个在从标准输入读取输入时发出语法错误导致解析器崩溃的错误。由 Pablo Galindo 提供补丁。
bpo-43406: 修复了一个可能的竞态条件,其中
PyErr_CheckSignals尝试执行非 Python 信号处理程序。bpo-42128: 向 struct sequence objects 添加了
__match_args__。由 Pablo Galindo 提供补丁。bpo-43390: CPython 现在在
PyOS_setsig中为 VM 的默认信号处理程序设置了SA_ONSTACK标志。这对于扩展模块或嵌入使用可能引入的其他进程内代码(如 Golang 的 cgo)更为友好,其中小线程栈是常态,并且使用了sigaltstack()来为信号处理程序提供支持。对于绝大多数不使用 sigaltstack 的进程来说,这是一个无操作更改。bpo-43287: 通过使用 PEP 590
vectorcall调用约定,加快了对filter()的调用。由 Donghee Na 提供补丁。bpo-37448:添加基于基数树的内存映射来跟踪使用中的obmalloc竞技场。用于替换旧的address_in_range()实现。基数树方法使得可以轻松将池大小增加到超过操作系统页面大小。增加池和竞技场大小使得obmalloc能够从其超快速路径处理显著更高比例的请求。
它还有消除之前address_in_range()的内存不卫生行为的优势。旧的address_in_range()被标记为_Py_NO_SANITIZE_ADDRESS、_Py_NO_SANITIZE_THREAD和_Py_NO_SANITIZE_MEMORY注释。这些注释不再需要。
要禁用基数树映射,设置如下预处理器标志:
-DWITH_PYMALLOC_RADIX_TREE=0。合著者:Tim Peters <tim.peters@gmail.com>
bpo-29988:仅在从调用返回或循环的后边缘时处理异步异常和请求放弃GIL。确保在with语句中总是调用
__exit__(),即使对于中断也是如此。
库¶
bpo-43720:记录imp、pkgutil和importlib.util中各种标准库的弃用,计划在Python 3.12中移除。
bpo-43433:
xmlrpc.client.ServerProxy不再忽略服务器URL中的查询和片段。bpo-31956:
array.array的index()方法现在有可选的 start 和 stop 形参。bpo-40066: Enum:调整
repr()仅显示枚举和成员名称(不显示值,也不显示尖括号),str()仅显示成员名称。 更新并改进文档以匹配。bpo-42136:弃用importlib中找到的所有module_repr()方法,因为它们的使用将在Python 3.12中逐步淘汰。
bpo-35930:在“future”实例中引发的异常将创建引用循环。
bpo-41369:完成更新vendored libmpdec到版本2.5.1。由Stefan Krah提供补丁。
bpo-43577: 修复了在使用
ssl.SSLContext调试回调与ssl.SSLContext.sni_callback()时出现的死锁问题。bpo-43571: 现在可以使用 IPPROTO_MPTCP 创建 MPTCP 套接字。
bpo-40645: 当 digestmod 参数是哈希名称或内置哈希函数时,
hmac模块现在使用 OpenSSL 的 HMAC 实现。bpo-43510: 实现了 PEP 597: 添加了
EncodingWarning警告,-X warn_default_encoding选项,PYTHONWARNDEFAULTENCODING环境变量和encoding="locale"参数值。bpo-43521:
ast.unparse现在可以渲染 NaNs 和空集。bpo-42914:
pprint.pprint()新增了一个布尔型underscore_numbers可选参数,用于输出用下划线分隔千位的整数以提高可读性(例如1_000_000而不是1000000)。bpo-43423: 在 Windows 上超时期间,当 stdout 或 stderr IO 缓冲区为空时,
subprocess.communicate()不再引发 IndexError。bpo-27820: 修复了 smtplib.SMTP 的一个长期存在的 bug,即在 initial_response_ok=False 时进行 AUTH LOGIN 会失败。
原因是 SMTP.auth_login _总是_ 在提供挑战字符串时返回密码,因此不符合 AUTH LOGIN 的标准。
同时修复了 smtpd 的测试中的 bug。
bpo-43445: 将冻结模块添加到
sys.stdlib_module_names。例如,添加"_frozen_importlib"和"_frozen_importlib_external"名称。bpo-43245: 向
ChainMap.new_child()添加了关键字参数支持。bpo-29982: 向
tempfile.TemporaryDirectory()添加了可选参数 ignore_cleanup_errors,并允许多次cleanup()尝试。由 C.A.M. Gerlach 贡献。bpo-43428: 包含来自 importlib_metadata 3.7 的更改:
性能优化以改进发行版发现。
entry_points现在只返回唯一的发行版。引入了新的
EntryPoints对象,用于包含一组入口点,并提供了便捷方法来按组或名称选择入口点。如果提供了选择参数,entry_points现在会返回此对象,但为了兼容性,继续返回字典对象。鼓励用户依赖选择接口。字典对象的结果将来可能会被弃用。添加了 packages_distributions 函数,返回包到提供它们的发行版的映射。
bpo-43332: 通过
set_tunnel()使用代理时,提高了http.client的网络效率。在连接设置过程中减少了小发送调用的次数。bpo-43420: 提高
fractions.Fraction对大组件的算术性能。由 Sergey B. Kirpichev 贡献。bpo-43356: 允许传递信号编号给
_thread.interrupt_main()。bpo-43399: 修复
ElementTree.extend在使用 Python 实现时不适用于迭代器的问题。bpo-43369: 改进
sqlite3错误处理:如果sqlite3_column_text()和sqlite3_column_blob()设置SQLITE_NOMEM,现在会引发MemoryError。由 Erlend E. Aasland 提供补丁。bpo-43368: 修复 PR 24562 引入的回归问题,其中在
sqlite3中,空字节串被获取为None而不是b''。由 Mariusz Felisiak 提供补丁。bpo-41282: 修复了从
import distutils发出的DeprecationWarning的堆栈级别。bpo-42129:
importlib.resources现在尊重命名空间包,合并来自命名空间中每个位置的资源,如importlib_resources3.2 中引入的,包括通过 5.0.3 的附带更改。bpo-43295:
datetime.datetime.strptime()现在在匹配'z'和%z格式说明符时引发ValueError而不是IndexError。bpo-43125: 如果 base64mime.body_encode 接收到空字节,返回空字符串。
bpo-43084:
curses.window.enclose()现在返回True或False(如文档所述) 而不是1或0。bpo-42994: 为 opus、AAC、3gpp 和 3gpp2 添加 MIME 类型。
bpo-14678: 向 zipimport.zipimporter 类添加 invalidate_caches() 方法以支持 importlib.invalidate_caches()。由 Desmond Cheong 提供补丁。
bpo-42782: 在
shutil.move()中快速失败,以避免在失败时创建目标目录。bpo-40066: Enum 的
repr()和str()已更改:repr()现在是 EnumClass.MemberName,而str()是 MemberName。此外,标准库中 Enum 的内容可作为模块属性使用,例如RegexFlag.IGNORECASE,其repr()为 module.name,例如re.IGNORECASE。bpo-26053: 修复了
pdb交互式运行命令回显 shell 命令行参数的错误,即使这些参数已在 pdb 提示符下被覆盖。bpo-40701: 当全局变量
tempfile.tempdir被设为 bytes 类型的值时,现在能够一致地进行处理。在此之前,当该目录尚不存在时,某些 tempfile API 可能会在这种情况下引发异常。同时还确保了tempfile.gettempdir()和tempfile.gettempdirb()函数分别 始终 返回str和bytes。bpo-39342: 将
X509_V_FLAG_ALLOW_PROXY_CERTS暴露为VERIFY_ALLOW_PROXY_CERTS,以允许如 https://www.openssl.org/docs/man1.1.1/man7/proxy-certificates.html 中所解释的代理证书验证。bpo-31861: 添加 builtins.aiter 和 builtins.anext。由 Joshua Bronson (@jab)、Daniel Pope (@lordmauve) 和 Justin Wang (@justin39) 提供补丁。
文档¶
bpo-43199: 在设计与历史常见问题中回答“为什么没有 goto?”。
bpo-43407: 明确了
time.monotonic()、time.perf_counter()、time.process_time()或time.thread_time()的结果可以与任何后续调用同一函数的结果进行比较 - 不仅仅是下一个立即调用。bpo-43354: 修复
Fault.faultCode的类型文档;类型必须是int而不是str。bpo-41933: 澄清了 Common Sequence Operations 中 s * n 的措辞。
测试¶
构建¶
bpo-43179: 在优化字符串例程的对齐相关代码中引入并正确使用 ALIGNOF_X 代替 SIZEOF_X。补丁由 Jessica Clarke 提供。
bpo-43631: 将 macOS、Windows 和 CI 更新至 OpenSSL 1.1.1k。
bpo-43617: 改进 configure.ac:检查 autoconf-archive 包的存在并移除我们拷贝的 M4 宏。
bpo-43466:
configure脚本现在支持--with-openssl-rpath选项。bpo-43372: 使用
_freeze_importlib为__hello__模块生成代码。这种方法确保代码与解释器版本匹配。之前使用 PYTHON_FOR_REGEN 生成代码,可能是错误的。代码对象的 marshal 格式已随 bpo-42246,提交 877df851 更改。更新代码和 ctypes test_frozentable 中的预期代码大小。
Windows¶
IDLE¶
bpo-42225: 文档说明 IDLE 在 Unix 上可能因配置错误的 IP 伪装规则或无法显示复杂的彩色(非 ASCII)字符而失败。
C API¶
bpo-43688: 如果 Python 是以调试模式构建的(如果定义了
Py_DEBUG宏),现在支持有限的 C API。在有限的 C API 中,如果 Python 是以调试模式构建的,并且Py_LIMITED_API宏的目标是 Python 3.10 或更新版本,Py_INCREF()和Py_DECREF()函数现在被实现为不透明的函数调用,而不是直接访问PyObject.ob_refcnt成员。之所以能够在调试模式下支持有限的 C API,是因为从 Python 3.8 开始,PyObject结构在发布和调试模式下是相同的(见 bpo-36465)。在
--with-trace-refs特殊构建(Py_TRACE_REFS宏)中,仍然不支持有限的 C API。由Victor Stinner提供补丁。
bpo-43244: 移除
pyarena.h头文件及其函数:PyArena_New()PyArena_Free()PyArena_Malloc()PyArena_AddPyObject()
这些函数未被文档化,被排除在有限的 C API 之外,并且仅由编译器内部使用。由 Victor Stinner 提供补丁。
bpo-43244: 移除使用
struct _mod类型的编译器和解析器函数,因为公共的 AST C API 已被移除:PyAST_Compile()PyAST_CompileEx()PyAST_CompileObject()PyFuture_FromAST()PyFuture_FromASTObject()PyParser_ASTFromFile()PyParser_ASTFromFileObject()PyParser_ASTFromFilename()PyParser_ASTFromString()PyParser_ASTFromStringObject()
这些函数未被文档化,并且被排除在有限的 C API 之外。由 Victor Stinner 提供补丁。
bpo-43244: 移除
ast.h、asdl.h和Python-ast.h头文件。这些函数未被文档化,并且被排除在有限的 C API 之外。这些头文件定义的大多数名称没有以Py为前缀,因此可能会造成名称冲突。例如,Python-ast.h定义了一个Yield宏,与 Windows<winbase.h>头文件中使用的Yield名称冲突。请使用 Python 的ast模块代替。由 Victor Stinner 提供补丁。bpo-43541: 修复
PyEval_EvalCodeEx()的回归问题:修正内置函数的引用计数。由 Victor Stinner 提供补丁。bpo-43244: 移除
symtable.h头文件及未文档化的函数:PyST_GetScope()PySymtable_Build()PySymtable_BuildObject()PySymtable_Free()Py_SymtableString()Py_SymtableStringObject()
Py_SymtableString()函数误为稳定版 ABI 却无法使用,因为symtable.h头文件不属于受限 C API。Python 的
symtable模块仍然可用且未改变。由Victor Stinner提供补丁。
bpo-43244: 移除
PyAST_Validate()函数。现在已无法通过公共C API构建AST对象(mod_ty类型)。该函数已被排除在有限C API(PEP 384)之外。补丁由Victor Stinner提供。
Python 3.10.0 alpha 6¶
发布日期: 2021-03-01
安全性¶
bpo-42967: 通过默认将查询参数分隔符设置为
&,并允许用户选择自定义分隔符,修复了web缓存中毒漏洞。
核心与内置函数¶
bpo-43321: 修复了当
PyArg_Parse*()与#一起使用但未定义PY_SSIZE_T_CLEAN时引发的SystemError。bpo-36346: 当使用
u或Z格式时,PyArg_Parse*()函数现在会发出DeprecationWarning。详情见 PEP 623。bpo-43277: 向C-API添加了一个新的
PySet_CheckExact()函数,用于检查对象是否是set的实例而非子类型的实例。由Pablo Galindo提供补丁。bpo-42990: 现在,如果 globals 字典中没有
"__builtins__"键,types.FunctionType构造函数会继承当前的builtins,而不是使用{"None": None}作为builtins:与eval()和exec()函数的行为相同。在Python中使用def function(...): ...定义函数不受影响,无法通过此语法覆盖globals:它也会继承当前的builtins。由Victor Stinner提供补丁。bpo-42990: 函数现在有一个新的
__builtins__属性,用于在执行函数时查找内置符号,而不是查找__globals__['__builtins__']。由Mark Shannon和Victor Stinner提供补丁。bpo-43149: 改进了解析器中对于没有括号的异常组的错误消息。由Pablo Galindo提供补丁。
bpo-43121: 修复了字面量中缺少逗号时的错误
SyntaxError消息。由Pablo Galindo提供补丁。bpo-42819: 在交互式解释器中明确禁用
readline模块的括号粘贴功能,即使它在 inputrc 中被设置、默认启用(例如 GNU Readline 8.1)或用户调用了readline.read_init_file()。 Python REPL 尚未实现括号粘贴支持。 此外,括号模式会将"\x1b[?2004h"转义序列写入 stdout,导致不支持该功能的应用程序测试失败。 用户仍可通过调用readline.parse_and_bind("set enable-bracketed-paste on")显式启用该功能。 由 Dustin Rodrigues 提供补丁。bpo-42808: 由于采用了
vectorcall调用约定,现在对type(object)的简单调用更快了。 补丁由 Dennis Sweeney 提供。bpo-42217: 使编译器像已经对 co_consts 做的那样,合并模块中相同的 co_code 和 co_linetable 对象。
bpo-41972: 子字符串搜索函数如
str1 in str2和str2.find(str1)现在有时会使用"双向"字符串比较算法,以避免在长字符串上出现二次行为。bpo-42128: 实现了PEP 634(结构化模式匹配)。由Brandt Bucher提供补丁。
bpo-40692: 在
concurrent.futures.ProcessPoolExecutor中,验证multiprocess.synchronize()在给定平台上是否可用,并在concurrent.futures测试套件中依赖该检查,以便我们可以在这些平台上运行与ProcessPoolExecutor无关的测试。bpo-38302: 如果
object.__ipow__()返回NotImplemented,操作符将如预期正确回退到object.__pow__()和object.__rpow__()。
库¶
bpo-43316:
python -m gzip命令行应用程序现在在检测到不支持的扩展时会正确失败。 它会以非零退出码退出,并向 stderr 打印错误消息。bpo-43317: 将
gzip模块主函数的块大小设置为io.DEFAULT_BUFFER_SIZE。这比之前使用的1024字节常量略快。bpo-43146: 在
print_exception()和format_exception()的单参数版本中处理None。bpo-43260: 修复在写入非常大的文本后,TextIOWrapper无法永远刷新内部缓冲区的问题。
bpo-43258: 防止在没有行匹配聚合查询时无谓地分配
sqlite3聚合函数上下文。由Erlend E. Aasland提供补丁。bpo-43251: 改进
sqlite3错误处理:sqlite3_column_name()失败现在会导致MemoryError。由Erlend E. Aasland提供补丁。bpo-40956: 修复在未提供参数时
sqlite3.Connection.backup()中的段错误。该回归由PR 23838引入。由Erlend E. Aasland提供补丁。bpo-43172: readline模块现在在直接针对libedit构建时通过其测试。基于libreadline与libedit使用的
readline.get_begidx()和readline.get_endidx()行为中现有的不可调和的API差异仍然存在。bpo-43163: 修复
codeop中的一个bug,该bug导致它在多行片段有未闭合的括号时不请求更多输入。由Pablo Galindo提供补丁。bpo-43162: 弃用不支持的能力,即访问枚举成员作为其他枚举成员的属性。
bpo-43102: namedtuple __new__方法的__builtins__设置为None而不是实际的字典。这给内省工具带来了问题。
bpo-43106: 为macOS添加了
O_EVTONLY、O_FSYNC、O_SYMLINK和O_NOFOLLOW_ANY。由Donghee Na提供补丁。bpo-42960: 将FreeBSD的
resource.RLIMIT_KQUEUES常量添加到resource模块。bpo-42151: 使
xml.etree.ElementTree的纯 Python 实现在默认属性值方面的行为与 C 实现 (_elementree) 保持一致(通过不设置specified_attributes=1)。bpo-29753: 在ctypes中,现在正确计算了打包位字段,并且打包位字段的第一项现在正确地缩小了。
文档¶
测试¶
bpo-43288: 修复了test_importlib,如果文件系统不支持Unicode文件测试,则正确跳过。
构建¶
bpo-43174: Windows构建现在使用
/utf-8编译器选项。bpo-43103: 添加了一个新的配置选项
--without-static-libpython,用于不构建libpythonMAJOR.MINOR.a静态库且不安装python.o对象文件。bpo-13501: 配置脚本现在可以使用命令行选项
--with-readline=editline来使用 libedit 代替 readline。bpo-42603: 使配置脚本使用pkg-config来检测Tcl/Tk头文件和库的位置,用于构建tkinter。
在macOS上,由pkg-config提供的Tcl/Tk配置将优先于安装在
/{System/,}Library/Frameworks中的Tcl/Tk框架。如果两者都存在且后者优先,则需要明确设置适当的--with-tcltk-*配置选项。bpo-39448: 添加了“regen-frozen”makefile目标,用于重新生成冻结的
__hello__模块的代码。
Windows¶
bpo-43155:
PyCMethod_New()现在存在于python3.lib中。
macOS¶
bpo-41837: 更新macOS安装程序构建以使用OpenSSL 1.1.1j。
IDLE¶
bpo-43283: 文档说明了为什么打印到IDLE的Shell通常比打印到系统终端慢,以及通过打印前预格式化单个字符串可以使其更快。
C API¶
bpo-43278: 始终将编译器和系统信息放在REPL欢迎消息的第一行。
bpo-43270: 移除了私有的
_PyErr_OCCURRED()宏:改用公共的PyErr_Occurred()函数。bpo-35134: 将odictobject.h、parser_interface.h、picklebufobject.h、pydebug.h和pyfpe.h移动到cpython/目录中。它们不应被直接包含,因为这些文件已经被Python.h包含:参见 包含文件。
bpo-35134: 将pyarena.h、pyctype.h和pytime.h移动到cpython/目录中。它们不应被直接包含,因为这些文件已经被Python.h包含:参见 包含文件。
bpo-40170:
PyExceptionClass_Name()现在总是被声明为一个函数,以隐藏实现细节。该宏直接访问了PyTypeObject.tp_name。由Erlend E. Aasland提供补丁。bpo-43239: 当使用
-fvisibility=hidden编译时,PyCFunction_New()函数现在被导出到ABI中。bpo-40170:
PyIter_Check()现在总是被声明为一个函数,以隐藏实现细节。该宏直接访问了PyTypeObject.tp_iternext。由Erlend E. Aasland提供补丁。bpo-40170: 将
PyDescr_IsData()宏转换为函数以隐藏实现细节:该宏直接访问了PyTypeObject.tp_descr_set。由Erlend E. Aasland提供补丁。bpo-43181: 将
PyObject_TypeCheck()宏转换为静态内联函数。由Erlend E. Aasland提供补丁。
Python 3.10.0 alpha 5¶
发布日期: 2021-02-02
安全性¶
bpo-42938: 在计算
ctypes.c_double和ctypes.c_longdouble值的repr时避免使用静态缓冲区。
核心与内置函数¶
bpo-42990: 重构
PyEval_系列函数。新增函数
_PyEval_Vector以简化从C调用Python的过程。_PyEval_EvalCodeWithName已被移除PyEval_EvalCodeEx作为 API 的一部分被保留,但在内部未被使用
bpo-38631: 将编译器中的
Py_FatalError()调用替换为常规的SystemError异常。由Victor Stinner提供补丁。bpo-42997: 为块前缺少的":"改进错误信息。由Pablo Galindo提供补丁。
bpo-43017: 在解析器中使用未加括号的元组时改善了错误信息。由Pablo Galindo提供补丁。
bpo-42986: 修复了在报告包含换行符的f字符串中的语法错误时解析器崩溃的问题。由Pablo Galindo提供补丁。
bpo-40176: 现在,对于未终止的字符串字面量的语法错误会指向字符串的开始,而不是报告EOF/EOL。
bpo-42927:
LOAD_ATTR的内联缓存现在也优化了对通过__slots__定义的属性的访问。这使得读取此类属性的速度提高了30%。bpo-42864: 当括号未关闭时,改善了解析器中的错误信息。由Pablo Galindo提供补丁。
bpo-42924: 修复了
bytearray重复错误地从缓冲区开始复制数据的问题,即使数据在缓冲区中偏移(例如,在将bytearray开始的切片重新分配给较短的字节字符串后)。bpo-42882: 修复多次调用
Py_Initialize()/Py_Finalize()时的_PyUnicode_FromId()函数 (_Py_IDENTIFIER(var) API):保留_PyRuntime.unicode_ids.next_index的值。bpo-42827: 修复了在某些多行表达式中处理
SyntaxError的错误行时崩溃的问题。bpo-42823: 即使frame.f_trace被设置为True,frame.f_lineno也是正确的
bpo-37324: 从
collections模块中移除了对 容器抽象基类 的废弃别名。bpo-41994: 当
sys.modules不是dict时,修复了import中可能的泄漏。bpo-27772: 在字符串格式化中,在 width 字段前加
'0'不再影响字符串的默认对齐方式。
库¶
bpo-43077: 将捆绑的pip更新到21.0.1,setuptools更新到52.0.0。
bpo-41282: 在文档中弃用
distutils并在导入时添加警告。bpo-42323: 修复 AIX 上
math.nextafter()对于 NaN 的处理。bpo-42955: 添加
sys.stdlib_module_names,包含标准库模块名称的列表。由 Victor Stinner 提交补丁。bpo-42944: 修复
random.Random.sample当counts参数不为None时的问题。bpo-42934: 在
TestResult中使用TracebackException的新compact参数,以减少回溯格式化消耗的时间和内存。bpo-42931: 将
randbytes()添加到random.__all__中。bpo-38250: [Enum] 由单个位组成的标志现在被认为是规范的,并且将是唯一从 Flag 类或 Flag 成员的列表和迭代中返回的标志。多位标志被认为是别名;它们将从查找和操作中返回,这些操作导致了它们的值。Flag 和 Flag 成员的迭代都是按照定义顺序进行的。
bpo-42877: 向
traceback.TracebackException的构造函数添加了compact参数,以减少仅需要调用TracebackException.format()和TracebackException.format_exception_only()的使用情况下的时间和内存消耗。bpo-42923:
Py_FatalError()函数和faulthandler模块现在会在致命错误时转储扩展模块列表。bpo-42848: 从
TracebackException中移除了递归,以允许其处理长的异常链。bpo-42901: [Enum] 将成员创建从
EnumMeta.__new__移动到_proto_member.__set_name__,允许成员在__init_subclass__中被创建并可见。bpo-42780: 修复 Linux 上 O_PATH 文件描述符的 os.set_inheritable()。
bpo-42866: 修复 CJK 编解码器的
getcodec()函数中的一个引用泄漏。由 Victor Stinner 提交补丁。bpo-42846: 将 6 个 CJK 编解码器扩展模块(_codecs_cn, _codecs_hk, _codecs_iso2022, _codecs_jp, _codecs_kr 和 _codecs_tw)转换为多阶段初始化 API (PEP 489)。由 Victor Stinner 提交补丁。
bpo-42851: 移除对枚举成员的
__init_subclass__支持bpo-42834: 使
_json模块的内部缓存与子解释器兼容bpo-41748: 修复 HTMLParser 解析包含逗号和空格的元素属性的规则。补丁由 Karl Dubost 提供
bpo-40810: 要求 SQLite 3.7.15 或更新版本。由 Erlend E. Aasland 提供补丁
bpo-1635741: 将 _multibytecodec 扩展模块(CJK 编解码器)转换为多阶段初始化(PEP 489)。由 Erlend E. Aasland 提供补丁
bpo-42802: Python 3.8 中弃用的 distutils
bdist_wininst命令已被移除。现在推荐使用 distutilsbdist_wheel命令在 Windows 上分发二进制包bpo-24464: 未记录的 built-in 函数
sqlite3.enable_shared_cache现已弃用,计划在 Python 3.12 中移除。SQLite3 文档强烈反对使用该函数。由 Erlend E. Aasland 提供补丁bpo-42384: 使 pdb 填充 sys.path[0] 的方式与常规 python 执行完全相同
bpo-42383: 修复 pdb:如果调试目标使用相对路径指定且当前目录发生变化,pdb 将无法重新启动调试目标的问题
bpo-42005: 修复
cProfile和profile的 CLI 以捕获BrokenPipeErrorbpo-41604: 当 set_panel_userptr 失败时,不减少先前 user_ptr 的引用计数
bpo-41149: 允许执行传递给
Threading.thread作为目标的可调用对象,即使其布尔值为False。由 Barney Stratford 提供补丁bpo-38307: 为 pyclbr 函数返回的树中出现的类和函数对象添加 'end_lineno' 属性。此属性与现有的 'lineno' 属性共同定义类和 def 语句的范围。由 Aviral Srivastava 提供补丁
bpo-33289: 修正对
tkinter.colorchooser的调用,使其返回整型RGB三元组而非浮点数。由 Cheryl Sabella 提供补丁。
文档¶
测试¶
构建¶
bpo-43031: 将
--timeout=$(TESTTIMEOUT)选项传递给默认配置文件任务./python -m test --pgo命令。bpo-36143:
make regen-all现在也会运行regen-keyword。由 Victor Stinner 提供补丁。bpo-42874: 在配置脚本的 tzpath 验证部分移除了 grep -q 和 -E 标志,以更好地适应某些平台(特别是 Solaris 10)的用户。
bpo-31904: 为 VxWorks 在 add_cross_compiling_paths() 中添加库搜索路径,由 wr-cc 提供。
bpo-42856: 向
./configure脚本添加--with-wheel-pkg-dir=PATH选项。如果指定,ensurepip模块会在此目录中查找setuptools和pip轮包:如果两者都存在,则使用这些轮包而非 ensurepip 捆绑的轮包。某些 Linux 发行版的打包策略建议不要绑定依赖关系。比如 Fedora 在
/usr/share/python-wheels/目录下安装 wheel 包,而不安装ensurepip._bundled包。
Windows¶
macOS¶
bpo-42504: 确保 sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') 的值始终为字符串,即使在值可解析为整数时也是如此。
IDLE¶
bpo-43008: 使 IDLE 在正常的双进程模式下调用
sys.excepthook()。由 Ken Hilton 提供补丁。bpo-33065: 修复调试带有 __repr__ 方法的用户类时的问题。
bpo-23544: 当用户代码正在运行或调试器处于活动状态时,禁用 Debug=>Stack Viewer,以防止挂起或崩溃。由 Zackery Spytz 提供补丁。
bpo-32631: 完成zzdummy示例扩展模块:使菜单条目正常工作;添加文档字符串和覆盖率为100%的测试。
C API¶
bpo-42979: 当Python在调试模式下构建(带有C断言)时,调用类型槽如
sq_length(Python 中的__len__()) 现在如果槽成功但设置了异常,或失败但未设置异常,会以致命错误失败。 错误消息包含槽、类型名称和当前异常(如果设置了异常)。由 Victor Stinner 提供补丁。bpo-43030: 修复了在带有符号
wchar_t的平台上的Py_UNICODE_ISSPACE()中的编译器警告。
Python 3.10.0 alpha 4¶
发布日期: 2021-01-04
核心与内置函数¶
bpo-42814: 修复
Objects/genericaliasobject.c中的未定义行为。bpo-42806: 修复被括号包围的f-字符串
ast节点和跨越多行节点的列偏移。由Pablo Galindo提供补丁。bpo-40631: 修复回归,其中单个括号包围的星号表达式是有效的赋值目标。
bpo-27794: 改进对属性对象写入/删除失败的错误消息。在可能的情况下,现在会显示属性名称。由Yurii Karabas提供补丁。
bpo-42745: 使类型属性查找缓存为每个解释器。由Victor Stinner提供补丁。
bpo-42246: 当会破坏PEP 626时,不会消除跳转到跳转。
bpo-42246: 确保在引发或重新引发异常时,帧的
f_lasti和f_lineno属性设置正确。PEP 626所需。bpo-32381: 现在在传递给
-c命令行选项的命令中忽略编码cookie(例如:# coding: latin1)。由Victor Stinner提供补丁。bpo-30858: 改进包含赋值的表达式中的错误位置。由Pablo Galindo和Lysandros Nikolaou提供补丁。
bpo-42615: 删除由于删除不可达字节码块而变得冗余的跳转命令。
bpo-42639: 使
atexit模块状态为每个解释器独立。现在可以安全地拥有多个atexit模块实例。由 Donghee Na 和 Victor Stinner 提供补丁。bpo-32381: 修复在 Windows 上运行
.pyc文件时的编码名称问题:PyRun_SimpleFileExFlags()现在使用正确的编码来解码文件名。bpo-42195:
typing.Callable和collections.abc.Callable的参数化泛型的__args__现在保持一致。collections.abc.Callable的__args__现在被扁平化,而typing.Callable的则保持不变。为了允许这一变化,types.GenericAlias现在可以被继承,并且collections.abc.Callable的__class_getitem__现在会返回一个types.GenericAlias的子类。类型测试也被更新,不再继承像Callable[..., T]这样的东西,因为那不是有效的基类。最后,两个Callable都不再验证它们的argtypes,在Callable[[argtypes], resulttype]中,为 PEP 612 做准备。由 Ken Jin 提供补丁。bpo-40137: 将 functools 模块转换为使用
PyType_FromModuleAndSpec()。bpo-42008: 修复 _random.Random() 的种子设置。
bpo-1635741: 将
pyexpat扩展模块移植到多阶段初始化(PEP 489)。bpo-40521: 使内联字符串的 Unicode 字典与子解释器兼容。由 Victor Stinner 提供补丁。
bpo-39465: 使
_PyUnicode_FromId()函数与子解释器兼容。每个解释器现在都拥有一个标识符对象(从 UTF-8 解码的驻留字符串)数组。补丁由 Victor Stinner 提供。
库¶
bpo-42257: 在 platform.libc_ver() 中处理变量可执行文件中的空字符串
bpo-42772: randrange() 现在在指定步长而没有停止参数时引发 TypeError。以前,它会默默地忽略步长参数。
bpo-42759: 修复了
tkinter.Variable和tkinter.font.Font的相等比较问题。现在,属于不同 Tcl 解释器的对象即使名称相同也会被视为不同。bpo-42756: 当未明确提供超时时间时,配置 LMTP Unix 域套接字使用套接字全局默认超时。
bpo-23328: 允许在 _PROXY 环境变量的用户名和密码字段中使用 / 字符。
bpo-42740:
typing.get_args()和typing.get_origin()现在支持 PEP 604 联合类型和 PEP 612 对Callable的补充。bpo-42655:
subprocess的 extra_groups 现在正确地传递到 setgroups() 系统调用中。bpo-42727:
EnumMeta.__prepare__现在接受**kwds以正确支持__init_subclass__。bpo-38308: 向 statistics.harmonic_mean() 添加了可选的 weights 参数。
bpo-42721: 当创建简单查询对话框 (
tkinter.simpledialog)、消息框 (tkinter.messagebox) 或颜色选择对话框 (tkinter.colorchooser) 时,如果没有提供 master 和 parent 参数,且默认根窗口尚未创建,并且未调用NoDefaultRoot(),将自动创建一个新的临时隐藏根窗口。它不会被设置为默认根窗口,并在对话框窗口关闭后立即销毁。这将有助于在不需要其他 GUI 的程序中使用这些简单对话框窗口。bpo-35728: 向
tkinter.font.nametofont()添加了一个 root 参数。bpo-42685: 改进了 Tkinter 中简单查询窗口(如
tkinter.simpledialog.askinteger())的放置位置。如果指定了父窗口并显示,则现在将窗口居中于父窗口的中心,否则居中于屏幕中心。bpo-9694: Argparse 帮助不再使用令人困惑的短语“可选参数”,而是使用“选项”。
bpo-1635741: 将
_thread扩展模块移植到多阶段初始化 API (PEP 489),并将其静态类型转换为堆类型。bpo-37961: 修复
tracemalloc.Traceback.__repr__()中的崩溃问题(在 Python 3.9 中回归)。bpo-42630: 需要默认根窗口的
tkinter函数和构造函数现在会引发带有描述性消息的RuntimeError,而不是晦涩的AttributeError或NameError,如果它尚未创建或无法自动创建。bpo-42639:
atexit._run_exitfuncs()现在使用sys.unraisablehook记录回调异常,而不是直接将它们记录到sys.stderr并引发最后一个异常。bpo-42644:
logging.disable现在会验证其参数的类型和值。它现在还接受表示级别的字符串(如同loging.setLevel一样),而不再仅接受数值。bpo-42639: 在 Python 退出时,如果使用
atexit.register()注册的回调失败,现在会记录其异常。以前,只有一些异常被记录,最后一个异常总是被默默忽略。bpo-36541: 修复了 lib2to3.pgen2 能够解析 PEP-570 仅位置参数语法的问题。
bpo-42382: 在
importlib.metadata中: -EntryPoint对象现在在从Distribution构造时公开一个.dist对象引用Distribution。 - 添加了对包发现规则下的包发现的支持。 - 由metadata()返回的对象现在有一个正式定义的协议,称为PackageMetadata,并声明支持.get_all()方法。 - 与 importlib_metadata 3.3 同步。bpo-41877: 添加了对拼写错误的 autospect、auto_spec 和 set_spec 作为参数传递给 patch、patch.object 和 create_autospec 的检查。
bpo-39717: [tarfile] 更新嵌套异常抛出,使用
from None或from ebpo-41877: 对于模拟对象上疑似断言拼写错误的 AttributeError,现在会指出原因是拼写错误的断言,并说明如果拼写实际上是预期的属性名时应该怎么做。unittest.mock 文档也已更新,以反映当前识别出的拼写错误集合。
bpo-41559: 实现了 PEP 612:将
ParamSpec和Concatenate添加到typing模块。由 Ken Jin 提供补丁。bpo-42385: StrEnum:修复 _generate_next_value_ 方法以返回字符串
bpo-31904: 为 VxWorks 定义 THREAD_STACK_SIZE。
bpo-34750: [Enum] 现在支持
_EnumDict.update()方法。bpo-42517: Enum:私有名称不会成为成员/不会生成错误——它们保持为普通属性
bpo-42678:
Enum:在成员被添加后调用__init_subclass__方法bpo-28964:
ast.literal_eval()为格式错误的节点在错误消息中添加行号信息(如果可用)。bpo-42470:
random.sample()不再对同时也是集合的序列发出警告。bpo-31904:
posixpath.expanduser()如果用户主目录在 VxWorks 上为 None,则返回输入 path 不变。bpo-42388: 修复 subprocess.check_output(..., input=None) 当 text=True 时的行为,使其与文档和 universal_newlines=True 的行为一致。
bpo-34463: 修复了
traceback和解释器在格式化未设置 lineno 的 SyntaxError 时的不一致(traceback被更改为匹配解释器)。bpo-42393: 在
socket.ntohs()和socket.htons()中抛出OverflowError而不是静默截断。静默截断在 Python 3.7 中已被弃用。由 Erlend E. Aasland 提供补丁bpo-42222: 统一
random.randrange()的参数处理以匹配range()。randrange()中的整数测试和转换现在使用operator.index()。randrange()函数的非整数参数已被弃用。ValueError已被弃用,改为使用TypeError。现在它比以前运行得更快一些。
(由 Raymond Hettinger 和 Serhiy Storchaka 贡献。)
bpo-42163: 恢复
uname_result在 deepcopy 和 _replace 时的兼容性。bpo-42090:
zipfile.Path.joinpath现在接受任意参数,与pathlib.Path.joinpath相同。bpo-1635741: 将 _csv 模块移植到多阶段初始化 API (PEP 489)。
bpo-42059: 使用替代调用样式语法创建的
typing.TypedDict类型现在在设置其__required_keys__和__optional_keys__类属性时正确尊重total关键字参数。bpo-41960: 向
inspect.signature()和inspect.Signature.from_callable()添加globalns和localns参数。bpo-41907: 修复
IntFlag的format()行为bpo-41891: 确保 asyncio.wait_for 等待任务完成
bpo-24792: 修复了
zipimporter有时报告导入错误错误原因的 bug。bpo-31904: 为没有主目录的 VxWorks RTOS 修复 site 和 sysconfig 模块。
bpo-41462: 为 VxWorks RTOS 添加
os.set_blocking()支持。bpo-40219: 降低
tkinter.ttk.LabeledScale虚拟小部件以防止隐藏部分内容标签。bpo-37193: 修复了 Python 3.7 中引入的
socketserver.ThreadingMixIn内存泄漏。bpo-39068: 修复
base64中a85encode()和b85encode()的初始化竞争条件。由 Brandon Stansbury 提供补丁。
文档¶
bpo-17140: 为
multiprocessing.pool.ThreadPool类添加文档。bpo-34398: 在文档搜索结果中突出显示词汇表中的列表。由 Ammar Askar 提供补丁。
测试¶
bpo-42794: 更新 test_nntplib 以使用 news.aioe.org 的官方组名进行测试。由 Donghee Na 提供补丁。
bpo-31904: 在 VxWorks 上跳过一些 asyncio 测试。
bpo-42641: 增强
test_select.test_select():现在只需500毫秒而非10秒。使用Python而非shell使测试更具可移植性。bpo-31904: 在VxWorks上跳过 _test_all_chown_common() 中的一些测试。
bpo-42199: 修复字节码助手 assertNotInBytecode。
bpo-41443: 在 test_posix.py 中添加更多属性检查。
bpo-31904: 在VxWorks上禁用 os.popen 和受影响的测试。
bpo-41439: 将 test_ssl 和 test_uuid 移植到VxWorks RTOS。
构建¶
bpo-42692: 修复旧编译器上的 __builtin_available 检查。由Joshua Root提供补丁。
bpo-27640: 向
configure脚本添加--disable-test-modules选项:不构建也不安装测试模块。由Xavier de Gaye、Thomas Petazzoni和Peixing Xin提供补丁。bpo-42604: 现在所有平台都使用基于SOABI的"EXT_SUFFIX"构建变量值(例如在freeBSD中,"EXT_SUFFIX"现在是".cpython-310d.so"而非".so")。之前只有Linux、Mac和VxWorks使用的"EXT_SUFFIX"值包含"SOABI"。
bpo-42598: 修复configure中的隐式函数声明,这可能导致错误的配置检查。由Joshua Root提供补丁。
bpo-31904: 为VxWorks启用 libpython3.so。
bpo-29076: 向macOS安装程序添加fish shell支持。
macOS¶
工具/示例¶
C API¶
bpo-42591: 导出
Py_FrozenMain()函数:修复Python 3.9.0的回归问题。Python 3.9使用-fvisibility=hidden并且该函数未被显式导出,因此未被导出。bpo-32381: 移除不再需要的私有函数
_Py_fopen()。请改用_Py_wfopen()或_Py_fopen_obj()。补丁由 Victor Stinner 提供。bpo-1635741: 将
resource扩展模块移植到模块状态bpo-42111: 更新
xxlimited模块,使其成为如何使用有限 C API 的更好示例。bpo-40052: 修复函数
PyVectorcall_Function()中的对齐构建警告/错误。补丁由 Andreas Schneider、Antoine Pitrou 和 Petr Viktorin 提交。
Python 3.10.0 alpha 3¶
发布日期: 2020-12-07
安全性¶
bpo-40791: 在
hmac.compare_digest中为累加器变量添加volatile,减少破坏恒定时间优化的可能性。
核心与内置函数¶
bpo-42576:
types.GenericAlias现在会在尝试使用关键字参数初始化时引发TypeError。之前,如果解释器编译时包含调试符号,这将导致解释器崩溃。这不影响为发布编译的解释器。补丁由 Ken Jin 提交。bpo-42536: 现在,几个内置和标准库类型确保它们的内部结果元组总是被 垃圾收集器 跟踪:
之前,它们可能会被前一次垃圾回收取消追踪。 由 Brandt Bucher 提供补丁。
bpo-42500: 改进递归限制附近的异常处理。将一些致命错误转换为 RecursionErrors。
bpo-42246: PEP 626: 在返回后,帧的 f_lineno 属性总是最后执行的行。
bpo-42435: 当指定选项
-b时,加快 bytes 对象与非 bytes 对象的比较速度。加快 bytearray 对象与非缓冲对象的比较速度。bpo-1635741: 将
_warnings扩展模块移植到多阶段初始化 API (PEP 489)。补丁由 Victor Stinner 提交。bpo-41686: 在 Windows 上,即使 Python 配置为不安装信号处理程序(如果
PyConfig.install_signal_handlers等于 0,或Py_InitializeEx(0)),现在也会创建SIGINT事件_PyOS_SigintEvent()。bpo-42381: 根据PEP 572,允许在集合字面量和集合推导式中使用赋值表达式。由Pablo Galindo提供补丁。
bpo-42202: 将函数参数注解的内部表示更改为字符串元组。由Yurii Karabas提供补丁。
bpo-42374: 修复了新解析器引入的一个回归问题,即在生成器表达式中不允许使用未加括号的海象运算符。
bpo-42316: 允许在下标索引中使用未加括号的海象运算符。
bpo-42349: 确保编译器前端生成格式良好的控制流图。在编译器后端采取更激进的优化,因为现在这样做是安全的。
bpo-42296: 在Windows上,修复了信号处理中的一个回归问题,该问题阻止了使用CTRL+C中断程序。信号处理程序可以在与Python线程不同的线程中运行,在这种情况下,判断线程是否可以处理信号的测试是错误的。
bpo-42332:
types.GenericAlias对象现在可以作为弱引用的目标。bpo-42282: 优化作为命名表达式一部分出现的常量子表达式(之前AST优化器没有深入到命名表达式中)。由Nick Coghlan提供补丁。
bpo-42266: 修复了LOAD_ATTR操作码缓存的一个错误,该错误没有尊重将一个类级别属性猴子补丁为描述符。由Pablo Galindo提供补丁。
bpo-42246: 提高了行跟踪事件和Frame对象的f_lineno属性的准确性。详见PEP 626。
bpo-42233: 允许
GenericAlias对象使用 union type expressions。这使得像list[int] | dict[float, str]这样的表达式成为可能,而之前会抛出TypeError。这也修复了联合类型表达式未去重GenericAlias对象的问题。(由Ken Jin在 bpo-42233 中贡献。)bpo-26131: 当导入系统回退到使用
load_module()时,会触发ImportWarning。
库¶
bpo-5054: CGIHTTPRequestHandler.run_cgi() 中 HTTP_ACCEPT 解析不当。用通用的 get_all 方法替换特殊用途的 getallmatchingheaders,并添加相关测试。
原始由 Martin Panter 提供补丁,由 Senthil Kumaran 修改。
bpo-42562: 修复了当 dis 无法解析没有行号的函数时的问题。由 Yurii Karabas 提供补丁。
bpo-17735:
inspect.findsource()现在在代码对象的co_lineno大于文件长度时,会引发OSError而不是IndexError。例如,当文件在导入后被编辑时可能会发生此情况。PR 由 Irit Katriel 提供。bpo-42116: 修复了
inspect.getsource()处理尾部注释的问题。bpo-42532: 当向 Mock 传递
spec_arg参数时,移除了对__bool__的意外调用。bpo-38200: 添加了 itertools.pairwise()
bpo-41818: 修复了 test_master_read(),使其在所有平台上都能成功,这些平台在从主设备读取时要么引发 OSError,要么返回 b""。
bpo-42487: ChainMap.__iter__ 不再调用底层映射的 __getitem__
bpo-42482:
TracebackException不再持有对异常回溯对象的引用。因此,对于等效但不相等的异常,TracebackException 的实例现在比较为相等。bpo-41818: 使 test_openpty() 避免由于行数和/或列数 == 0 而导致的意外成功。
bpo-42392: 从
asyncio.subprocess和asyncio.tasks函数中移除 loop 参数。补丁由 Yurii Karabas 提供。bpo-42392: 从
asyncio.open_connection和asyncio.start_server函数中移除 loop 参数。由 Yurii Karabas 提供补丁。bpo-28468: 添加了
platform.freedesktop_os_release()函数以解析 freedesktop.org 的os-release文件。bpo-42299: 移除了在Python 3.4中已弃用的
formatter模块。该模块有些过时,使用较少,且未经测试。原计划在Python 3.6中移除,但此类移除被推迟到Python 2.7 EOL之后。现有用户应将其使用的任何类复制到自己的代码中。由Donghee Na和Terry J. Reedy提供补丁。bpo-26131: 弃用zipimport.zipimporter.load_module(),推荐使用exec_module()。
bpo-41818: 更新了pty库的测试。test_basic()已改为test_openpty();此外还检查了slave termios和slave winsize是否被pty.openpty()正确设置。为了增加对FreeBSD、NetBSD、OpenBSD和Darwin的支持,还增加了test_master_read(),演示了pty.spawn()不应依赖于OSError从其复制循环中退出。
bpo-42392: 从所有
asyncio.locks和asyncio.Queue类的__init__中移除loop参数。 由 Yurii Karabas 提供补丁。bpo-15450: 使
filecmp.dircmp尊重子类化。现在filecmp.dircmp.subdirs在子类化dircmp时的行为符合预期。bpo-42413: 异常
socket.timeout现在是TimeoutError的别名。bpo-31904: 在VxWorks上支持signal模块。
bpo-42406: 我们修复了
pickle.whichmodule中的一个问题,其中导入multiprocessing可能会改变 pickle 如何识别对象属于哪个模块,潜在地破坏这些对象的 unpickling。bpo-42403: 简化
importlib外部引导代码:importlib._bootstrap_external现在使用常规导入来导入内置模块。当它被导入时,内置的__import__()函数已经完全可用,因此可用于导入如sys等内置模块。补丁由 Victor Stinner 提供。bpo-1635741: 将_sre模块类型转换为堆类型(PEP 384)。由Erlend E. Aasland提供补丁。
bpo-42375: subprocess 模块更新以支持 DragonFlyBSD。
bpo-41713: 将
_signal扩展模块移植到多阶段初始化 API (PEP 489)。由 Victor Stinner 和 Mohamed Koubaa 提供补丁。bpo-37205:
time.time()、time.perf_counter()和time.monotonic()函数不再会因 Python 致命错误而失败,而是在失败时引发常规的 Python 异常。bpo-42328: 修复了
tkinter.ttk.Style.map()。该函数现在接受默认状态的表示为空序列(由Style.map()返回)。结果的结构现在在所有平台上都是相同的,不依赖于wantobjects的值。bpo-42345: 修复了
typing.Literal参数处理中的各种问题(扁平化、去重、使用类型缓存键)。由 Yurii Karabas 提供补丁。bpo-37205: Windows 上的
time.perf_counter()和 macOS 上的time.monotonic()现在是系统范围的。在此之前,它们使用在启动时计算的偏移量来减少由 float 类型引起的精度损失。请使用在 Python 3.7 中添加的time.perf_counter_ns()和time.monotonic_ns()来避免这种精度损失。bpo-42350: 修复了
threading.Thread类在 fork 时的问题:如果线程已经停止(例如:在 Python 退出时调用 fork),则不执行任何操作。以前,在子进程中会记录一个错误。bpo-42333: 将 _ssl 扩展模块移植到堆类型。
bpo-42014: 现在,当
os.open失败时,shutil.rmtree的onerror回调会接收到正确的函数。bpo-42237: 在 illumos 上修复了
os.sendfile()。bpo-42308: 添加
threading.__excepthook__以允许在threading.excepthook()被设置为损坏或不同的值时检索其原始值。由 Mario Corchero 提供补丁。bpo-42131: 在 zipimport.zipimporter 上实现 PEP 451/规范方法:find_spec()、create_module() 和 exec_module()。
这也允许了对find_loader()、find_module()和load_module()的文档化弃用。
bpo-41877:非不安全的Mock对象现在如果访问带有前缀asert、aseert或assrt的属性,将引发AttributeError,此外,对于前缀assert或assret,这种情况已经发生。
bpo-42264:
sqlite3.OptimizedUnicode自 Python 3.3 起已无文档且过时,当时它被设为str的别名。 现在它已被弃用,计划在 Python 3.12 中移除。bpo-42251:添加了
threading.gettrace()和threading.getprofile()以分别获取由threading.settrace()和threading.setprofile()设置的函数。由Mario Corchero提供的补丁。bpo-42249:修复了写入大于4 GiB的二进制Plist文件的问题。
bpo-42236:在Unix上,如果启用了 Python UTF-8模式,
os.device_encoding()函数现在返回'UTF-8'而不是设备编码。bpo-41754: webbrowser:调用
xdg-settings时忽略 NotADirectoryError。bpo-42183:修复了asyncio任务或Future的repr()导致的堆栈溢出错误。
在 Task 或 Future 递归返回自身的情形下会导致栈溢出。
bpo-42140:改进asyncio.wait函数,使其仅创建一次futures集合。
bpo-42133: 更新标准库中的各个模块,以便在模块上未定义
__loader__时回退到__spec__.loader。bpo-26131: 现在在
importlib中找到的load_module()方法会触发DeprecationWarning。bpo-39825: Windows:将
sysconfig.get_config_var('EXT_SUFFIX')更改为预期的完整platform_tag.extension格式。 之前它被硬编码为.pyd,现在它与distutils.sysconfig兼容,将产生类似.cp38-win_amd64.pyd的结果。 这使 Windows 与其他平台一致。bpo-26389:
traceback.format_exception()、traceback.format_exception_only()和traceback.print_exception()函数现在可以接受异常对象作为仅位置参数。bpo-41889: Enum: 修复涉及继承多重继承枚举的回归问题
bpo-41861: 将
sqlite3转换为使用堆类型(PEP 384)。由Erlend E. Aasland提供补丁。bpo-40624: 在xml.etree中增加了对XPath
!=操作符的支持bpo-28850: 修复
pprint.PrettyPrinter.format()对小容器内容的覆盖被忽略的问题。pprint._safe_repr()函数已被移除。bpo-41625: 将
splice()作为os.splice()暴露在os模块中。由Pablo Galindo提供补丁。bpo-34215: 当
expected为None时,澄清asyncio.IncompleteReadError的错误消息。bpo-41543: 为contextlib.nullcontext添加异步上下文管理器支持。
bpo-21041:
pathlib.PurePath.parents现在支持负索引。补丁由Yaroslav Pankovych贡献。bpo-41332: 向
asyncio.AbstractEventLoop添加了缺失的connect_accepted_socket()方法。bpo-12800: 从tarball中提取符号链接应该成功,并在符号链接已存在时覆盖它。修复方法是在提取前移除现有的文件或符号链接。基于Chris AtLee、Jeffrey Kintscher和Senthil Kumaran的补丁。
bpo-40968:
urllib.request和http.client现在在没有提供自定义上下文时,在TLS握手期间发送http/1.1ALPN扩展。bpo-41001: 添加
os.eventfd()以提供Linux事件通知文件描述符的低级接口。bpo-40816: 向contextlib添加AsyncContextDecorator以支持异步上下文管理器作为装饰器。
bpo-40550: 修复subprocess.Popen.send_signal中的检查时间/动作时间问题。
bpo-39411: 向
pyclbr的Function对象添加一个is_async标识符。由Batuhan Taskaya提供补丁。bpo-35498: 为
pathlib.PurePath.parents添加切片支持。
文档¶
测试¶
bpo-41473: 在gdb 9.2及更新版本上重新启用test_gdb:https://bugzilla.redhat.com/show_bug.cgi?id=1866884 在gdb 10.1中修复。
bpo-42553: 修复
test_asyncio.test_call_later()的竞争条件:不在call_later()单元测试中测量asyncio性能。测试在CI上随机失败。bpo-31904: 在VxWorks上修复test_netrc:使用temp_cwd()创建临时目录。
bpo-31904: 在VxWorks上跳过test_getaddrinfo_ipv6_scopeid_symbolic和test_getnameinfo_ipv6_scopeid_symbolic。
bpo-31904: 在VxWorks上跳过test_test的test_mailcap。
bpo-31904: 为test_pipes添加shell要求。
bpo-31904: 在VxWorks上跳过一些与fifo相关的测试。
bpo-31904: 修复VxWorks的test_doctest.py失败。
bpo-40754: 在Windows安装程序中包含
_testinternalcapi模块用于测试套件。bpo-41561: test_ssl:当TLS 1.0不可用时跳过test_min_max_version_mismatch。
bpo-31904: 修复VxWorks RTOS的os模块失败。
bpo-31904: 修复VxWorks RTOS的fifo测试用例。
构建¶
bpo-31904: 为VxWorks的detect_socket()移除libnet依赖。
bpo-42398: 当使用make -jN选项并行运行作业时,修复"make regen-all"中的竞争条件。clinic.py脚本现在仅使用原子写入来写入文件。此外,如果内容未更改,则生成的文件现在保持不变,以不更改文件修改时间。
bpo-41617: 修复在旧版 clang(如 Mac OS X 10.7 上的 Xcode 4.6.3)没有
__builtin_bswap16()时构建pycore_bitutils.h内部头文件的问题。由 Joshua Root 和 Victor Stinner 提供补丁。bpo-38823: 现在没有
wchar_t类型就无法构建_ctypes扩展模块:移除了CTYPES_UNICODE宏。无论如何,构建 Python 需要wchar_t类型。由 Victor Stinner 提供补丁。bpo-40998: 解决了未定义行为消毒器(ubsan)发现的三个编译器警告。
Windows¶
macOS¶
bpo-42504: 修复了在 MACOSX_DEPLOYMENT_TARGET=11 时在 macOS Big Sur 上的构建问题。
bpo-41116: 确保 distutils.unixxcompiler.find_library_file 可以在 macOS 11 上找到系统提供的库。
bpo-41100: 添加了对 macOS 11 和 Apple Silicon 系统的支持。
现在可以使用 "--enable-universalsdk --with-universal-archs=universal2" 构建 "Universal 2" 二进制文件。
当使用正确的部署目标时,可以在较旧的 macOS 版本(测试到 macOS 10.9)上部署在较新的 macOS 版本上构建的二进制文件。这是使用 Xcode 11 及更高版本测试的。
bpo-42232: 向 mmap 模块添加了 Darwin 特定的 madvise 选项。
bpo-38443: 配置脚本的
--enable-universalsdk和--with-universal-archs选项现在检查指定的架构是否可以使用。
IDLE¶
工具/示例¶
C API¶
bpo-42423:
PyType_FromSpecWithBases()和PyType_FromModuleAndSpec()函数现在接受单个类作为 bases 参数。bpo-1635741: 将
select扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将 _posixsubprocess 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-1635741: 将 _posixshmem 扩展模块移植到多阶段初始化 (PEP 489)
bpo-1635741: 将 _struct 扩展模块移植到多阶段初始化 (PEP 489)
bpo-1635741: 将
spwd扩展模块移植到多阶段初始化 (PEP 489)bpo-1635741: 将
gc扩展模块移植到多阶段初始化 (PEP 489)bpo-1635741: 将 _queue 扩展模块移植到多阶段初始化 (PEP 489)
bpo-39573: 将
Py_TYPE()和Py_SIZE()转换回宏,以允许将它们用作左值。许多第三方 C 扩展模块依赖于使用 Py_TYPE() 和 Py_SIZE() 来设置对象类型和大小的能力:Py_TYPE(obj) = type;和Py_SIZE(obj) = size;。bpo-1635741: 将
symtable扩展模块移植到多阶段初始化 (PEP 489)bpo-1635741: 将
grp和pwd扩展模块移植到多阶段初始化 (PEP 489)bpo-1635741: 将 _random 扩展模块移植到多阶段初始化 (PEP 489)
bpo-1635741: 将 _hashlib 扩展模块移植到多阶段初始化 (PEP 489)
bpo-41713: 移除了未文档化的
PyOS_InitInterrupts()函数。初始化 Python 已经隐式安装了信号处理器:参见PyConfig.install_signal_handlers。由 Victor Stinner 提供补丁。bpo-40170:
Py_TRASHCAN_BEGIN宏不再访问 PyTypeObject 属性,而是现在可以通过调用隐藏了实现细节的新私有函数_PyTrash_cond()来获取条件。bpo-42260: 如果在
Py_Initialize()之前(即 Python 初始化之前)调用Py_GetPath()、Py_GetPrefix()、Py_GetExecPrefix()、Py_GetProgramFullPath()、Py_GetPythonHome()和Py_GetProgramName()函数,这些函数现在会返回NULL。使用新的 Python 初始化配置 API 来获取 Python 路径配置。由 Victor Stinner 提供补丁。bpo-42260:
PyConfig_Read()函数现在只解析PyConfig.argv参数一次:参数解析后PyConfig.parse_argv被设为2。由于 Python 参数已从PyConfig.argv中剥离,解析参数两次会将应用程序选项作为 Python 选项解析。bpo-42262: 添加了
Py_NewRef()和Py_XNewRef()函数,用于增加对象的引用计数并返回该对象。由 Victor Stinner 提供补丁。bpo-42260: 当
Py_Initialize()被调用两次时,第二次调用现在会更新更多配置相关的sys属性,而不仅仅是sys.argv。由 Victor Stinner 提供补丁。bpo-41832:
PyType_FromModuleAndSpec()函数现在接受 NULLtp_doc槽。bpo-1635741: 添加了
PyModule_AddObjectRef()函数:类似于PyModule_AddObject(),但在成功时不窃取对值的引用。由 Victor Stinner 提供补丁。bpo-42171:
METH_FASTCALL调用约定被添加到有限 API 中。函数PyModule_AddType()、PyType_FromModuleAndSpec()、PyType_GetModule()和PyType_GetModuleState()被添加到 Windows 上的有限 API 中。bpo-42085: 为发送值添加了 PyAsyncMethods 的专用条目
bpo-41073:
PyType_GetSlot()现在可以接受静态类型。bpo-30459:
PyList_SET_ITEM(),PyTuple_SET_ITEM()和PyCell_SET()宏不能再被用作左值或右值。例如,x = PyList_SET_ITEM(a, b, c)和PyList_SET_ITEM(a, b, c) = x现在会引发编译器错误。这防止了像if (PyList_SET_ITEM (a, b, c) < 0) ...这样的测试。由 Zackery Spytz 和 Victor Stinner 提供补丁。
Python 3.10.0 alpha 2¶
发布日期: 2020-11-03
安全性¶
核心与内置函数¶
bpo-42236: 如果
nl_langinfo(CODESET)函数返回空字符串,Python现在使用UTF-8作为文件系统编码。由 Victor Stinner 提供补丁。bpo-42218: 修复了PEG解析器中导致调试模式下崩溃的一个错误。现在在左递归规则中检查错误,以避免这些错误未能及时处理并在其他地方表现为长距离崩溃的情况。
bpo-42214: 修复了在
barry_as_flufl规则中检查 '!=' 标记时PEG解析器可能崩溃的问题。由 Pablo Galindo 提供补丁。bpo-42206: 在解析器中传播并引发由
PyAST_Validate()引起的错误。bpo-42143: 修复了在创建
PyFunctionObject过程中错误处理的问题,该问题导致了对未初始化内存的操作。由 Yonatan Goldschmidt 提供补丁。bpo-41659: 修复解析器中的一个错误,其中在
primary后跟随一个大括号时未立即失败。这导致像a {b}这样的无效表达式抛出SyntaxError时带有错误的偏移量,或者像a {这样以大括号结尾的无效表达式在 REPL 中未立即失败。bpo-42150: 修复新解析器在检查续行时可能出现的缓冲区溢出。由 Pablo Galindo 提供补丁。
bpo-42123: 运行解析器两次。第一次运行时,禁用所有仅生成更好错误消息的规则以提高性能。如果解析失败,则第二次运行时启用这些规则。
bpo-42093:
LOAD_ATTR指令现在使用新的“每个操作码缓存”机制,速度提高了约 36%。补丁由 Pablo Galindo 和 Yury Selivanov 提供。bpo-42030: 移除了对旧版 AIX 特定共享库加载的支持。自 4.3 版本以来,所有 AIX 版本都支持并默认使用通用的 Unix 机制。
bpo-41984: 垃圾收集器现在跟踪所有用户定义的类。由 Brandt Bucher 提供补丁。
bpo-41993: 修复了在导入失败时从
sys.modules中删除未完全初始化的模块可能引发的问题。bpo-41979: PEG 解析器现在允许在 with 项目的目标中使用星号解包。
bpo-41974: 移除了
complex类的特殊方法__int__,__float__,__floordiv__,__mod__,__divmod__,__rfloordiv__,__rmod__和__rdivmod__。这些方法总是抛出TypeError。bpo-41902: 在计算
range的sq_item和mp_subscript时进行了微优化。由 Donghee Na 提供补丁。bpo-41894: 在加载本地模块并且加载失败时,防止在不使用 UTF-8 语言环境运行时可能出现的 UnicodeDecodeError,通过使用当前语言环境的编码解码加载错误消息。
bpo-41902: 如果步长为1,对range.index进行微优化。由Donghee Na提供补丁。
bpo-41435: 添加
sys._current_exceptions()函数,用于检索一个字典,该字典将每个线程的标识符映射到调用该函数时该线程中当前活动的顶层异常。bpo-38605: 默认启用
from __future__ import annotations(PEP 563)。__annotations__字典中的值现在是字符串,例如{"x": "int"}而不是{"x": int}。
库¶
bpo-35455: 在Solaris上,
thread_time()现在通过gethrvtime()实现,因为clock_gettime(CLOCK_THREAD_CPUTIME_ID)并不总是可用。 由 Jakub Kulik 提供补丁。bpo-42233:对于包含 Generic Alias Types 的
typing类型,其repr()表示形式此前不会在GenericAlias中显示参数化类型。现在这一行为已调整为会显示参数化类型。bpo-29566:
binhex.binhex()一致地写入macOS 9行结束符。bpo-26789:
logging.FileHandler类现在保留对内置open()函数的引用,以便在Python终止期间能够打开或重新打开文件。修复如NameError: name 'open' is not defined的错误。由Victor Stinner提供补丁。bpo-42157: 移除了
unicodedata.ucnhash_CAPI属性,这是一个内部的PyCapsule对象。相关的私有_PyUnicode_Name_CAPI结构被移动到内部C API。由Victor Stinner提供补丁。bpo-42157: 将
unicodedata扩展模块转换为多阶段初始化 API (PEP 489),并将unicodedata.UCD静态类型转换为堆类型。 由 Mohamed Koubaa 和 Victor Stinner 提供补丁。bpo-42146: 修复
subprocess.Popen()在user(group,extra_groups) 中指定的 uid(gid) 溢出uid_t(gid_t) 时的内存泄漏问题。bpo-42103:
InvalidFileException和RecursionError现在是加载损坏的二进制 Plist 文件时仅会引发的错误(在之前的一些特定情况下可能会引发 ValueError 和 TypeError)。bpo-41490: 在
importlib.resources中,.path方法更加积极地提前释放对 zipfile 对象的句柄,使得像 certifi 这样的用例可以在保持上下文打开的同时删除底层的 zip 文件。bpo-41052: 现在,使用协议 0 和 1 对 C 中实现的堆类型进行 Pickle 操作会引发错误,而不是产生不正确的数据。
bpo-42089: 在
importlib.metadata.PackageNotFoundError中,引用缺失的包元数据以改善用户体验。bpo-41491: plistlib: 修复解析带有十六进制整数值的 XML plists 的问题
bpo-42065: 修复在使用超出有效 Unicode 码位范围的映射值调用
_codecs.charmap_decode()时错误格式不正确的问题。PR 由 Max Bernstein 提供。bpo-41966: 修复纯 Python
datetime.time子类的 Pickle 操作。由 Dean Inwood 提供的补丁。bpo-19270: 如果两个具有相同优先级的事件被安排在同一时间,
sched.scheduler.cancel()现在会取消正确的事件。补丁由 Bar Harel 提供。bpo-28660:
textwrap.wrap()现在在break_long_words=True和break_on_hyphens=True时尝试在连字符后断开长单词。bpo-35823: 在 Linux 上为
subprocess.Popen()使用vfork()替代fork(),以提高在认为安全的情况下的性能。bpo-42043: 添加对
zipfile.Path继承的支持。zipfile.Path.is_file()现在对于不存在的名称返回 False。zipfile.Path对象现在暴露一个.filename属性,并依赖该属性在Path对象位于 zipfile 根目录时解析.name和.parent。bpo-39101: 修复了使用 IsolatedAsyncioTestCase 的测试在遇到 BaseExceptions 时挂起的问题。
bpo-41976: 修复了一个导致
ctypes.util.find_library()在尝试在 gcc>=9 可用但ldconfig不可用的环境中定位库时返回None的 bug。由 Pablo Galindo 提供补丁。bpo-41943: 修复了 TestCase.assertLogs 不能正确按级别过滤消息的 bug。
bpo-41923: 实现了 PEP 613,引入了
typing.TypeAlias注解。bpo-41905: 在 abc 中添加了一个新函数 update_abstractmethods 以重新计算抽象类的抽象状态。此外,dataclass 已被修改为调用此函数。
bpo-23706: 为
pathlib.Path.write_text()添加了 newline 参数。bpo-41876: Tkinter 字体类的 repr 使用字体名称。
bpo-41831:
tkinter.Event对象的type属性的str()现在总是返回由 Tk 返回的数字代码,而不是事件类型的名称。bpo-39337:
encodings.normalize_encoding()现在忽略非 ASCII 字符。bpo-41747: 确保所有由
dataclasses.dataclass()对象生成的方法现在都有正确的__qualname__属性,引用它们所属的类。由 Batuhan Taskaya 提供补丁。bpo-30681: 在使用 email "default" 策略时处理由不可解析的日期头引起的异常。由 Tim Bell 和 Georges Toth 提供补丁。
bpo-41586: 向 fcntl 模块添加 F_SETPIPE_SZ 和 F_GETPIPE_SZ。允许在 subprocess.Popen 上设置管道大小。
bpo-41229: 添加
contextlib.aclosing用于异步生成器的确定性清理,类似于contextlib.closing对于非异步生成器的作用。由 Joongi Kim 和 John Belmonte 提供补丁。bpo-16396: 允许在非 Windows 系统上导入
ctypes.wintypes。bpo-4356: 向 bisect 模块添加一个键函数。
bpo-40592:
shutil.which()现在忽略PATHEXT中的空条目,而不是将它们视为匹配项。bpo-40492: 修复当被分析的程序更改工作目录时,
cProfile/profile的--outfile不在原始目录中写入输出文件的问题。PR由Anthony Sottile提供。bpo-34204:
shelve模块现在默认使用pickle.DEFAULT_PROTOCOL而不是pickle协议3。bpo-27321: 修复了将电子邮件扁平化为字符串时尝试替换不存在的Content-Transfer-Encoding头时引发的KeyError异常。
bpo-38976:
http.cookiejar模块现在支持在所有平台上通过MozillaCookieJar解析CURL样式的cookiejar文件中的cookie。之前,加载包含此类条目的cookiejar时会静默忽略此类cookie条目。此外,HTTP Only属性在对象中持续存在,并且如果随后转储MozillaCookieJar对象,将正确写入文件。
文档¶
测试¶
构建¶
bpo-38980: 在使用
--enable-optimizations构建时,将-fno-semantic-interposition添加到编译和链接行。 由 Victor Stinner 和 Pablo Galindo 提供补丁。
Windows¶
macOS¶
bpo-41471: 忽略系统代理排除中的无效前缀长度。
IDLE¶
C API¶
bpo-42157: PyCapsule API
unicodedata.ucnhash_CAPI的私有_PyUnicode_Name_CAPI结构已移至内部C API。由Victor Stinner提供补丁。bpo-42015: 修复了在动态分配的
PyMethodDef的生命周期通过PyCFunction的self参数管理时,释放方法对象时可能发生的崩溃。bpo-40423:
subprocess模块和os.closerange现在将在可用时使用close_range(low, high, flags)系统调用来更高效地关闭描述符范围。bpo-41845:
PyObject_GenericGetDict()在针对3.10或更高版本时再次在有限API中可用。bpo-40422: 添加
_Py_closerange函数以提供高效关闭一系列文件描述符的能力。bpo-41986:
Py_FileSystemDefaultEncodeErrors和Py_UTF8Mode在受限 API 中再次可用。bpo-41756: 添加
PyIter_Send函数,允许向生成器/协程/迭代器发送值而不抛出 StopIteration 异常来信号返回。bpo-41784: 将
PyUnicode_AsUTF8AndSize添加到有限的 C API 中。
Python 3.10.0 alpha 1¶
发布日期: 2020-10-05
安全性¶
bpo-41304: 修复了在 Windows 上
python3x._pth被忽略的问题,该问题由对 bpo-29778 的修复引起 (CVE-2020-15801)。bpo-41162: 审计钩子现在在最终化过程的后期被清除,以避免错过事件。
bpo-29778: 确保当 Python 被嵌入时
python3.dll从正确的位置加载 (CVE-2020-15523)。bpo-41004: ipaddress.IPv4Interface 和 ipaddress.IPv6Interface 的 __hash__() 方法错误地生成了分别为 32 和 128 的常量哈希值。这导致了总是发生哈希冲突。修复使用 hash() 来为 (地址, 掩码长度, 网络地址) 的元组生成哈希值。
bpo-39603: 通过拒绝 http.client.putrequest(...) 中的控制字符来防止 http 头注入。
核心与内置函数¶
bpo-41909: 修复了在
issubclass()和isinstance()中当获取__bases__属性导致无限递归时的堆栈溢出问题。bpo-41922: 通过使用 PEP 590
vectorcall调用约定来加速对reversed()的调用。由 Donghee Na 提供补丁。bpo-41873: 由于
vectorcall调用约定,对float()的调用现在更快。由 Dennis Sweeney 提供补丁。bpo-41870: 通过使用 PEP 590
vectorcall调用约定来加速对bool()的调用。补丁由 Donghee Na 提供。bpo-1635741: 将
_bisect模块移植到多阶段初始化 API (PEP 489)。bpo-39934: 在编译器中正确计算 'except' 中的控制块。确保对于深层嵌套的命名异常处理程序产生语法错误而非致命错误。
bpo-41780: 修复
types.GenericAlias的__dir__()方法。由 Batuhan Taskaya 提供补丁。bpo-1635741: 将
_lsprof扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将
cmath扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将
_scproxy扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将
termios扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将
_sha256扩展模块的类型转换为堆类型。bpo-41690: 修复解析器在解析具有大量参数的函数和类时可能出现的栈溢出问题。由 Pablo Galindo 提供补丁。
bpo-1635741: 将
_overlapped扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将
_curses_panel扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将
_opcode扩展模块移植到多阶段初始化 (PEP 489)。bpo-41681: 修复在 f-string 和
str.format()中使用两个,时引发的错误描述错误的问题。bpo-41675:
signal.siginterrupt()的实现现在使用sigaction()(如果系统中可用) 而非已弃用的siginterrupt()。由 Pablo Galindo 提供补丁。bpo-41670: 防止在未编译
USE_COMPUTED_GOTOS的平台上跳过行跟踪。修复了 Windows 上 try-except 块内某些行未被跟踪的问题。bpo-41654: 修复销毁
MemoryError子类时发生的崩溃问题。由 Pablo Galindo 提供补丁。bpo-1635741: 将
zlib扩展模块移植到多阶段初始化 (PEP 489)。bpo-41631:
_ast模块再次使用了全局状态。每个模块实例使用模块状态会导致一些微妙的实际问题。例如,Mercurial 项目替换了__import__()函数以实现延迟导入,而 Python 期望import _ast总是返回一个完全初始化的_ast模块。bpo-40077: 将
_operator转换为使用PyType_FromSpec()。bpo-1653741: 将
_sha3移植到多阶段初始化。将静态类型转换为堆类型。bpo-1635741: 将
_blake2扩展模块移植到多阶段初始化 API (PEP 489)。bpo-41533: 如果
do_mkstack失败且堆栈不是small_stack,则释放va_build_stack中分配的堆栈。bpo-41531: 修复了一个在编译包含超过 0xFFFF 个元素的字典字面量时会丢失键的错误。由 Pablo Galindo 提供补丁。
bpo-41525:
python --help的输出现在仅包含 ASCII 字符。bpo-1635741: 将
_sha1、_sha512和_md5扩展模块移植到多阶段初始化 API (PEP 489)。bpo-41431: 为复制字典(例如
dict(d)和{}.update(d))优化dict_merge()。bpo-41428: 实现 PEP 604。这支持使用 (int | str) 等替代 Union[str, int]。
bpo-41340: 移除了
strdup的回退实现。bpo-38156: 正确处理在
PyOS_StdioReadline中 EOF 之后到来的中断。bpo-41334: 构造函数
str()、bytes()和bytearray()现在更快(对于小对象大约快 30--40%)。bpo-41295: 解决了 CPython 3.8.4 中的一个回归问题,即在多重继承设置中定义 "__setattr__" 并调用层次链时,如果基类型涉及内置/扩展类型,可能会失败。
bpo-41323: 字节码优化直接在控制流图上执行。这将在某些情况下使代码对象稍微更紧凑。
bpo-41247: 运行
asyncio.set_running_loop时,始终缓存运行循环持有者。bpo-41252: 修复 _ssl.c 中
_servername_callback()的错误引用计数。bpo-1635741: 将
multiprocessing移植到多阶段初始化。bpo-1635741: 将
winapi移植到多阶段初始化。bpo-41215: 在 PEG 解析器的关键字列表中使用非 NULL 默认值,以克服在使用 XLC 编译器时阻止 Python 正确编译的错误。由 Pablo Galindo 提供补丁。
bpo-41218: Python 3.8.3 有一个回归问题,即使用 ast.PyCF_ALLOW_TOP_LEVEL_AWAIT 编译时,会激进地将列表推导标记为 CO_COROUTINE。现在只有使用 async/await 的列表推导才会被这样标记。
bpo-1635741: 将
faulthandler移植到多阶段初始化。bpo-1635741: 将
sha256移植到多阶段初始化。bpo-41175: 防止
bytearray() + bytearray()操作触发的 bytearrayobject 内的 NULL 指针解引用。bpo-41100: 在 mpdecimal.h 中将 arm64 添加到允许的 Mac OS 架构中。
bpo-41094: 修复在非 UTF-8 语言环境下打开非 ASCII 名称文件时的解码错误。
bpo-39960: 防止通过调用超类方法绕过类型的 __setattr__() 的“hackcheck”被重写,以允许 C 实现的堆类型。
bpo-41084: 在解析抛出
SyntaxError的 f-string 表达式时,在错误消息前加上 'f-string: '。bpo-40521: 空的 frozensets 不再是单例。
bpo-41076: 预填充解析器时提供 f-string 表达式的位置,而不是 f-string 本身,这允许我们在解析完成后跳过 AST 节点位置的移动。
bpo-41056: 修复了在启动时通过 -c 提供代码时,涉及相对符号链接构造 sys.path 过程中引用已释放堆栈空间的问题。(通过 Coverity 发现)
bpo-41061: 修复了哈希表代码和测试中的错误表达式和断言。
bpo-41052: 为 _random.Random 选择退出序列化/反序列化。
bpo-40939: 将
PyPegen*函数重命名为PyParser*,以便我们可以移除使用旧解析器的那组PyParser*函数,但保持一切向后兼容。bpo-35975: Stefan Behnel 报告称,即使 PyCF_ONLY_AST 未设置,也会使用 cf_feature_version。这与意图和文档行为相违背,因此已修复。
bpo-40939: 移除旧解析器和
symbol模块的剩余文件。bpo-40077: 将
_bz2转换为使用PyType_FromSpec()。bpo-41006:
encodings.latin_1模块不再在启动时导入。现在仅当它是文件系统编码或 stdio 编码时才导入。bpo-40636:
zip()现在支持 PEP 618 的strict参数,如果参数长度不同,则会引发ValueError。由 Brandt Bucher 提供补丁。bpo-1635741: 将
_gdbm移植到多阶段初始化。bpo-40985: 修复了一个导致文件以行继续字符(即反斜杠)结尾时,
SyntaxError文本为空的错误。错误文本应包含最后一行的文本。bpo-40958: 修复了 PEG 解析器在收集信息以发出语法错误时可能存在的缓冲区溢出。由 Pablo Galindo 提供补丁。
bpo-1635741: 将
_dbm移植到多阶段初始化。bpo-40957: 修复 _Py_fopen_obj() 在 PySys_Audit() 失败时的反射泄漏
bpo-40950: 为
nis模块添加状态 (PEP 3121) 并应用多阶段初始化。补丁由 Donghee Na 提供。bpo-40947: Python 的 Path Configuration 现在考虑了
PyConfig.platlibdir。bpo-40939: 移除了旧解析器、
parser模块以及所有相关的支持代码、命令行选项和环境变量。由 Pablo Galindo 提供补丁。bpo-40847: 修复了一个错误,即在分词器级别,仅包含行继续符的行不被视为空行。在这种情况下,会发出多个
NEWLINE令牌。旧解析器绕过了这个问题,但新解析器因此对有效输入抛出了SyntaxError。例如,行继续符后的空行被解释为SyntaxError。bpo-40890: 现在每个字典视图都有一个
mapping属性,该属性提供了一个包装原始字典的types.MappingProxyType。补丁由 Dennis Sweeney 贡献。bpo-40889: 改进了字典项视图上对称差异操作的性能。由 Dennis Sweeney 提供补丁。
bpo-40904: 修复了在解析包含无值 yield 语句的 f-string(如
f"{yield}")时,新的 PEG 解析器可能出现的段错误。由 Pablo Galindo 提供补丁。bpo-40903: 修复了新的 PEG 解析器在为形式如
p=p=的无效赋值生成错误消息时可能出现的段错误。由 Pablo Galindo 提供补丁。bpo-40880: 修复了在检查字符串字面量中的换行符时,新解析器中的无效内存读取问题。补丁由 Pablo Galindo 提供。
bpo-40883: 修复了在新解析器中解析 f-strings 时的内存泄漏问题。补丁由 Pablo Galindo 提供。
bpo-40870: 在验证自定义 AST 时,如果常量
True、False和None在ast.Name节点中使用,则抛出ValueError。bpo-40854: 允许通过新的环境变量
PYTHONPLATLIBDIR覆盖sys.platlibdir。bpo-40826: 修复
PyOS_Readline()中的GIL使用:锁定GIL以设置异常,并在检查是否有待处理信号时传递Python线程状态。bpo-1635741: 将
fcntl移植到多阶段初始化。bpo-19468: 删除 importlib.reload() 中不必要的实例检查。由Furkan Önder提供补丁。
bpo-40824: 在
in操作符和operator模块的函数contains()、indexOf()和countOf()中,调用__iter__方法时不再因TypeError而掩盖意外错误。bpo-40792:
range对象的属性start、stop和step现在总是具有确切的int类型。之前,它们可能是int子类的实例。bpo-40780: 修复了浮点数g风格字符串格式化未能移除尾部零的一个边缘情况。
bpo-38964: 当fstring的表达式部分出现
SyntaxError时,SyntaxError的filename属性现在被正确设置为fstring所在文件的名称。bpo-40750: 在新的PEG解析器中支持 "-d" 调试标志。由Pablo Galindo提供补丁
bpo-40217: 使用
PyType_FromSpecWithBases()创建的类型实例在垃圾收集器中遍历引用时将不再自动访问其类对象。用户需要手动访问对象的类。由Pablo Galindo提供补丁。bpo-40696: 修复了由于异常上下文链中的循环而在
generator.throw()后可能出现的挂起问题。bpo-40521: 每个解释器现在都有自己的空闲列表、单例和缓存:
空闲列表:float、tuple、list、dict、frame、context、异步生成器、MemoryError。
单例:空元组、空字节字符串、空Unicode字符串、单字节字符、单个Unicode(latin1)字符。
切片缓存。
它们不再被所有解释器共享。
bpo-40679: 某些关于缺少或多余参数的
TypeError消息现在包括函数的 qualified name。由 Dennis Sweeney 提供补丁。bpo-29590: 在生成器上调用
generator.throw()后,使堆栈跟踪正确,该生成器已经从yield from中产出。bpo-4022: 通过不引发内部 StopIteration 来提高生成器的性能。
bpo-1635741: 将
mmap移植到多阶段初始化。bpo-1635741: 将
_lzma移植到多阶段初始化。bpo-37999: 接受整数参数的内置和扩展函数不再接受
Decimals、Fractions 和其他只能以损失方式转换为整数的对象(例如,具有__int__()方法但不具有__index__()方法的对象)。bpo-29882: 添加
int.bit_count(),用于计算整数的二进制表示中 1 的个数。补丁由 Niklas Fiekas 提供。bpo-36982: 当可用时使用 ncurses 扩展颜色功能以支持具有256色的终端,并添加新函数
curses.has_extended_color_support()以指示底层 ncurses 库是否提供扩展颜色支持。bpo-19569: 添加私有宏
_Py_COMP_DIAG_PUSH、_Py_COMP_DIAG_IGNORE_DEPR_DECLS和_Py_COMP_DIAG_POP。bpo-26680: int 类型现在支持 x.is_integer() 方法以与 float 兼容。
库¶
bpo-41900: 在 xml.etree.ElementTree 中的 C14N 2.0 序列化在定义了默认命名空间时,对于未加前缀的属性失败。
bpo-41887: 在
ast.literal_eval()上移除前导空格和制表符。同时记录eval()对空格和制表符的移除。bpo-41773: 在文档中注明
random.choices()不支持非有限权重,当给定非有限权重时引发ValueError。bpo-41840: 修复
symtable模块中的一个 bug,该 bug 导致模块作用域的全局变量未被同时报告为局部和全局。由 Pablo Galindo 提供补丁。bpo-41842: 添加
codecs.unregister()函数以注销编解码器搜索函数。bpo-40564: 在
zipfile.Path中,改变传递的 ZipFile 对象类型而不是制作副本。防止本地副本和调用者的副本尝试关闭同一个文件句柄时出现问题。bpo-40670: 对
timeit.Timer中的语句进行更可靠的验证。现在接受“空”语句(仅空白和注释)并拒绝缩进错误的语句。bpo-41833:
threading.Thread构造函数现在在指定 target 参数但省略 name 参数时使用目标名称。bpo-41817: 修复
tkinter.EventType枚举,使所有成员都是字符串,没有元组。bpo-41810: 重新引入了
types.EllipsisType、types.NotImplementedType和types.NoneType,提供了一组新的类型,静态类型检查器可以轻松解释。bpo-41815: 修复 SQLite3 在备份已关闭数据库时的段错误。补丁由 Peter David McCormick 提供。
bpo-41816: 添加了 StrEnum:确保所有成员已经是字符串或字符串候选。
bpo-41517: 修复允许通过多重继承扩展枚举的 bug。
bpo-39587: 在构造枚举时使用正确的混合数据类型。
bpo-41792: 在 typing.py 中添加 is_typeddict 函数以检查类型是否为 TypedDict 类。
以前没有不使用私有 API 的方法来检查这一点。参见 python/typing 中的相关问题。
bpo-41789: 在
Enum类创建中尊重object覆盖(特别是__str__、__repr__、__format__和__reduce_ex__)。bpo-32218:
enum.Flag和enum.IntFlag成员现在是可迭代的。bpo-39651: 修复了
asyncio.ProactorEventLoop的call_soon_threadsafe()方法中的一个竞态条件:如果自管道套接字已关闭,则不执行任何操作。bpo-1635741: 将
mashal扩展模块移植到多阶段初始化API (PEP 489)。bpo-1635741: 将
_string扩展模块移植到多阶段初始化API (PEP 489)。bpo-41732: 为
memoryview添加了一个 iterator。bpo-41720: 修复
turtle.Vec2D.__rmul__()对于非 int 或 float 参数的处理。bpo-41696: 修复了在
asyncio.run()中调试模式的处理。 现在可以通过设置PYTHONASYNCIODEBUG或-X dev来在使用asyncio.run()时启用 asyncio 调试模式。bpo-41687: 修复了sendfile的实现以兼容Solaris。
bpo-41662: 不再覆盖在
sqlite3中参数序列的__len__()中引发的异常,而是使用ProgrammingError。bpo-39010: 在Windows上重启
ProactorEventLoop不再记录虚假的ConnectionResetErrors。bpo-41638: 当参数以字典形式提供时,
sqlite3中对于缺少参数的ProgrammingError消息现在包含参数名称而不是其索引。bpo-41513: 提高了math.hypot()的准确性。内部每一步计算都使用额外的精度,因此结果现在几乎总是正确舍入。
bpo-41609: pdb的whatis命令现在正确地将实例方法报告为'Method'而不是'Function'。
bpo-39994: 修复了pprint对于重写__repr__的dict子类的处理。
bpo-32751: 当由于超时取消任务时,
asyncio.wait_for()现在也会在 timeout <= 0 的情况下等待取消完成,就像对正超时那样。bpo-37658:
asyncio.wait_for()现在正确处理了自身取消与包装的可等待对象完成之间的竞争条件。bpo-40782: 将方法 asyncio.AbstractEventLoop.run_in_executor 改为不是协程。
bpo-41528: turtle 使用数学模块函数来转换度与弧度,以及计算向量范数。
bpo-41513: 对 math.hypot() 和 math.dist() 进行了小的算法改进,略微提高了速度和准确性。
bpo-41503: 修复了 logging.handlers.MemoryHandler 中 setTarget 和 flush 之间的竞争条件。
bpo-41497: 修复 dis 模块中潜在的 UnicodeDecodeError。
bpo-41467: 在 Windows 上,修复 asyncio
recv_into()当套接字/管道关闭时的返回值 (BrokenPipeError): 返回0而不是空字节串 (b'')。bpo-41425: 使 tkinter 文档示例可运行。
bpo-41421: 对 random.paretovariate() 进行了代数简化。现在它略微减少了舍入误差,速度也略有提升。之前导致 ZeroDivisionError 的输入现在会导致 OverflowError。
bpo-41440: 为 VxWorks RTOS 添加
os.cpu_count()支持。bpo-41384: 当向 tkinter.OptionMenu 传递未知选项时,抛出 TclError 而不是 TypeError。
bpo-41317: 在 asyncio.loop.sock_accept() 中使用 add_done_callback() 以在取消时尽早取消订阅读取器。
bpo-41341: 在
get_type_hints中递归评估typing.ForwardRef。bpo-41344: 防止创建
size=0的shared_memory.SharedMemory对象。bpo-41333:
collections.OrderedDict.pop()现在速度提高了 2 倍。bpo-41288: 使用C实现时,反序列化无效的NEWOBJ_EX操作码现在会引发UnpicklingError,而不是崩溃。
bpo-39017: 避免在使用 tarfile 模块读取特制的 TAR 文件时出现无限循环 (CVE-2019-20907)。
bpo-41273: 通过调用
recv_into而非recv,加快使用_ProactorReadPipeTransport的任何传输速度,从而不在传输的读取循环中为每次recv调用创建新缓冲区。bpo-41235: 修复了
ssl.SSLContext.load_dh_params()中的错误处理。bpo-41207: 在distutils.spawn中,恢复了当命令未找到时引发DistutilsExecError的预期行为。
bpo-29727: 将
array.array注册为MutableSequence。由Pablo Galindo提供补丁。bpo-39168: 移除了
typing.Generic的__new__方法。bpo-41194: 修复了
_ast模块中的崩溃问题:它现在不能被多次加载。它现在使用全局状态而非模块状态。bpo-41195: 添加了只读的ssl.SSLContext.security_level属性,用于检索上下文的安全级别。
bpo-41193: readline completer的
write_history()atexit函数现在忽略任何OSError,以在文件系统为只读时忽略错误,而不仅仅是忽略FileNotFoundError和PermissionError。bpo-41182: selector: 根据实现使用DefaultSelector
bpo-41161: decimal模块现在需要libmpdec-2.5.0。使用--with-system-libmpdec的用户应更新其系统库。
bpo-40874: decimal模块现在需要libmpdec-2.5.0。
bpo-31082: 在
functools.reduce()的文档字符串中使用术语“可迭代对象”。bpo-40521: 从collections.deque()中移除freelist。
bpo-41068: 修复了直接从ZIP存档中读取非ASCII名称文件后立即写入的问题。
bpo-41058:
pdb.find_function()现在能正确确定源文件的编码。bpo-41056: 现在阻止将无效的文件描述符值传递给os.fpathconf。(由Coverity发现)
bpo-41056: 修复了ssl模块中在keylog回调中发生MemoryError时的NULL指针解引用问题。(由Coverity发现)
bpo-41056: 修复了zoneinfo模块中MemoryError可能未被报告或未在其源头报告的情况。(由Coverity发现)
bpo-41048:
mimetypes.read_mime_types()函数现在使用UTF-8编码而非本地编码读取规则文件。由Srinivas Reddy Thatiparthy提供补丁。bpo-41025: 修复了阻止
zoneinfo.ZoneInfo的C实现被子类化的问题。bpo-35018: 添加了其他SAX XML实现中存在的
xml.sax.handler.LexicalHandler类。bpo-41002: 提高了HTTPResponse.read在给定数量下的性能。由Bruce Merry提供补丁。
bpo-40448:
ensurepip现在在安装捆绑版本的pip和setuptools时禁用pip缓存。由Krzysztof Konopko提供补丁。bpo-40967: 移除了
asyncio.Task.current_task()和asyncio.Task.all_tasks()。补丁由 Rémi Lapeyre 贡献。bpo-40924: 确保
importlib.resources.path为SourceFileLoader的资源阅读器返回一个存在的路径。在制定长期解决方案的同时避免了在主分支中发现的回归。bpo-40955: 修复了
subprocess模块中在指定extra_groups时的一个小内存泄漏。bpo-40855: statistics模块中的标准差和方差函数忽略了它们的mu和xbar参数。
bpo-23427: 添加
sys.orig_argv属性:传递给Python可执行文件的原始命令行参数列表。bpo-33689: 忽略.pth文件中的空行或仅包含空白的行。这与文档中描述的行为相匹配。在此之前,空行会导致site-packages目录在sys.path中多次出现。由Ido Michael贡献,贡献者包括Malcolm Smith和Tal Einat。
bpo-40884: 向
logging.Formatter添加了一个defaults参数,允许为自定义字段指定默认值。由Asaf Alon和Bar Harel提供补丁。bpo-39791: 从importlib_metadata 1.6.1刷新importlib.metadata。
bpo-40807: 停止codeop._maybe_compile(由code.InteractiveInterpreter(和IDLE)使用)每次发出三次警告。
bpo-39791: 内置加载器(SourceFileLoader和ZipImporter)现在为
ResourceReader提供TraversableResources实现,并且移除了回退函数。bpo-39314:
rlcompleter.Completer和标准Python shell现在为不带参数的函数闭合括号。由Rémi Lapeyre提供补丁。bpo-17005: 最初在
functools模块中引入的拓扑排序功能已被移动到一个新的graphlib模块,以更好地适应新工具并保持functools模块的原始范围。由Pablo Galindo提供补丁bpo-40834: 修复在发送str对象时使用_xxsubinterpreters.channel_send的截断问题。
bpo-40755: 向collections.Counter()添加富比较方法。
bpo-26407: 在
csv.reader(),csv.writer.writerow()和csv.writer.writerows()中调用__iter__方法时不再因TypeError掩盖意外错误。bpo-39384: 修复了email.contentmanager,允许set_content()设置空字符串。
bpo-40744:
sqlite3模块使用了需要SQLite v3.7.3或更高版本的SQLite API函数。此补丁移除了对旧版本SQLite的支持,并在构建、编译和运行时明确要求SQLite 3.7.3。由Sergey Fedoseev和Erlend E. Aasland提供补丁。bpo-40777: 在运行时初始化PyDateTime_IsoCalendarDateType.tp_base,以避免在某些编译器上出现错误。
bpo-38488: 更新ensurepip以安装pip 20.1.1和setuptools 47.1.0。
bpo-40792:
operator.index()的结果现在总是具有确切的int类型。以前,结果可能是int子类的实例。bpo-40767:
webbrowser现在通过检查WAYLAND_DISPLAY环境变量,在纯Wayland系统中正确找到默认浏览器。补丁由Jérémy Attali贡献。bpo-40791: 当OpenSSL可用时,
hashlib.compare_digest()使用 OpenSSL 的CRYPTO_memcmp()函数。bpo-40795:
ctypes模块:如果ctypes未能转换回调的结果,或者如果ctypes回调函数引发异常,现在会调用带有异常设置的sys.unraisablehook。以前,错误由PyErr_Print()记录到stderr。bpo-16995: 添加
base64.b32hexencode()和base64.b32hexdecode()以支持使用扩展十六进制字母表的Base32编码。bpo-30008: 修复
ssl代码以兼容使用no-deprecated和--api=1.1.0构建的OpenSSL 1.1.x。bpo-30064: 修复asyncio
loop.sock_*竞争条件问题bpo-40759: 弃用
symbol模块。bpo-40756:
LoggerAdapter.__init__的第二个参数(extra)现在默认为None。bpo-37129: 为
os.pwritev()添加一个新的os.RWF_APPEND标志。bpo-40726: 处理在
ast.increment_lineno()中end_lineno为None的情况。bpo-40698:
distutilsupload 会创建 SHA2-256 和 Blake2b-256 摘要。如果平台阻止 MD5,则会跳过 MD5 摘要。bpo-9216:
hashlib.new()将usedforsecurity传递给 OpenSSL EVP 构造函数_hashlib.new()。test_hashlib 和 test_smtplib 更好地处理严格的安全策略。bpo-40614:
ast.parse()在传递的feature_version小于(3, 8)时不会解析 f-strings 中的自文档化表达式。bpo-40626: 根据 HDF Group 对 HDF5 格式化数据文件的建议,添加 h5 文件扩展名作为 MIME 类型 application/x-hdf5。补丁由 Mark Schwab 贡献。
bpo-25920: 在 macOS 上,当为 macOS 10.4 及更早版本构建 Python 时(这不是 python.org macOS 安装程序的情况),
socket.getaddrinfo()不再使用内部锁来防止在调用getaddrinfo()时出现竞争条件,因为自 macOS 10.5 起它就是线程安全的。Python 3.9 需要 macOS 10.6 或更新版本。当另一个线程调用socket.getaddrinfo()时,内部锁会导致 fork 时随机挂起。该锁也用于比 5.3 旧的 FreeBSD,比 201311 旧的 OpenBSD 和比 4 旧的 NetBSD。bpo-40671: 为 PEP 489 准备
_hashlib并使用PyModule_AddType()。bpo-32309: 添加了一个新的 coroutine
asyncio.to_thread()。它主要用于在单独的线程中运行 IO 密集型函数以避免阻塞事件循环,本质上是一个可以直接接受关键字参数的高级版本的run_in_executor()。bpo-36543: 恢复了已弃用的
xml.etree.cElementTree模块。bpo-40611:
MAP_POPULATE常量已被添加到导出的mmap模块标志列表中。bpo-39881: 在测试套件中使用PEP 554。(由Joannah Nanjekye提供补丁)
bpo-13097:
ctypes现在在回调函数被调用时传递超过1024个参数时会引发ArgumentError。bpo-39385: 一个新的测试断言上下文管理器
unittest.assertNoLogs()将确保给定的代码块不产生任何使用日志模块的日志消息。由Kit Yan Choi贡献。bpo-23082: 更新了PurePath.relative_to()的错误信息和文档,以更好地反映函数行为。
bpo-40318: 如果可用,使用SQLite3跟踪v2 API。
bpo-40105: 在附加("a")模式下提供较短的注释时,ZipFile会截断文件以避免损坏。由Jan Mazur提供补丁。
bpo-40084: 修复了
Enum.__dir__: dir(Enum.member) 现在包括属性和方法。bpo-31122: ssl.wrap_socket() 现在在TLS协商期间对等方关闭连接时引发ssl.SSLEOFError而不是OSError。
bpo-39728: 修复默认的
_missing_以便重复的ValueError不会被设置为原始ValueError的__context__。bpo-39244: 修复了
multiprocessing.context.get_all_start_methods,以在macOS上正确首先返回默认方法。bpo-39040: 通过折叠裸引号字符串中编码字词之间的空白,修复了无效mime头参数的解析。
bpo-38731: 向
py_compile的命令行界面添加了--quiet选项。由Gregory Schevchenko提供补丁。bpo-35714: 如果
struct格式字符串中有空字符,现在会引发struct.error。bpo-38144: 在
glob.glob()中添加了 root_dir 和 dir_fd 参数。bpo-26543: 修复在启用调试模式(例如:
imaplib.Debug = 3)时的IMAP4.noop()。bpo-12178:
csv.writer()现在在输入包含 escapechar 时正确转义 escapechar。补丁由Catalin Iacob、Berker Peksag和Itay Elbirt提供。bpo-33944: 在详细模式下增加了site.py对site-packages的追踪。
bpo-35078: 重构calendar模块中LocaleHTMLCalendar和LocaleTextCalendar类的formatweekday、formatmonthname方法,以调用基类方法。这使得LocaleHTMLCalendar的CSS类可定制。由Srinivas Reddy Thatiparthy提供补丁。
bpo-29620:
assertWarns()在访问模块的__warningregistry__导致新模块导入或另一线程中导入新模块时不再引发RuntimeException。 由 Kernc 提供补丁。bpo-31844: 从私有的、未文档化的
_markupbase模块中移除ParserBase.error()方法。html.parser.HTMLParser是ParserBase的唯一子类,其error()实现在Python 3.4中被弃用,在Python 3.5中被移除。bpo-34226: 修复
cgi.parse_multipart在没有content_length时的问题。由Roger Duran提供补丁。bpo-33660: 修复pathlib.PosixPath正确解析位于根目录的相对路径。
bpo-28557: 改进
rawio.readinto行为异常时的错误信息。bpo-26680: 为Decimal类型添加d.is_integer()方法,以与其他数字类型兼容。
bpo-26680: 将x.is_integer()方法纳入数字塔的抽象类型Real、Rational和Integral中,并提供适当的默认实现。
文档¶
bpo-41774: 在编程FAQ的“序列(元组/列表)”部分添加“如何从列表中删除多个项目”。
bpo-35293: 修复构建文档时的RemovedInSphinx40Warning。由Donghee Na提供补丁。
bpo-37149: 将Shipman tkinter文档链接从archive.org更改为TkDocs。(该文档已从NMT服务器移除。)新链接响应更快,并包含简短说明。
bpo-41726: 更新
PyType_FromModuleAndSpec的引用计数信息。bpo-41624: 修正
typing.Coroutine的签名。bpo-40204: 启用Sphinx 3.2的
c_allow_pre_v3选项并禁用c_warn_on_allowed_pre_v3选项,使文档兼容Sphinx 2和Sphinx 3。bpo-41045: 添加f-strings调试功能的文档。
bpo-41314: 将
from __future__ import annotations成为默认的发布版本从4.0改为3.10(遵循PEP 563的变更) 。bpo-40979: 重构typing.rst,将超过70个类、函数和装饰器安排到新的子章节中。
bpo-40552: 修正教程4.2节的代码片段,现在代码正确。
bpo-39883: 使Python文档中的代码、示例和配方除了现有的Python 2.0许可证外,还采用更宽松的BSD0许可证。
bpo-37703: 更新文档,全面阐述gather.cancel()的行为。
测试¶
bpo-41939: 修复 test_site.test_license_exists_at_url(): 调用
urllib.request.urlcleanup()以重置全局urllib.request._opener。 由 Victor Stinner 提供补丁。bpo-41731: 使test_cmd_line_script在使用选项'-vv'时通过。
bpo-41602: 为runpy模块中的SIGINT处理添加测试。
bpo-41521:
test.support: 将check__all__()的blacklist参数重命名为not_exported。bpo-41477: 在test_genericalias中使ctypes可选。
bpo-41085: 在64位Windows上修复
array.array.index()方法对于大于2**31的索引的整数溢出问题。bpo-41069:
test.support.TESTFN和通过test.regrtest运行测试时的当前目录现在尽可能包含非ASCII字符。bpo-38377: 在Linux上,如果当前用户无法在
/dev/shm/目录中创建文件,则跳过使用多进程的测试。将skip_if_broken_multiprocessing_synchronize()函数添加到test.support模块中。bpo-41009: 修复了将
support.require_{linux|mac|freebsd}_version()装饰器用作类装饰器时的问题。bpo-41003: 修复了当安装
numpy时test_copyreg的问题:test.pickletester现在在导入numpy时保存/恢复警告过滤器,以忽略由numpy安装的过滤器。bpo-40927: 修复了test_binhex在运行两次时的问题:现在使用import_fresh_module()确保每次都引发DeprecationWarning。
bpo-17258: 当MD5哈希摘要被阻止时,跳过一些
multiprocessing测试。bpo-31904: 为VxWorks RTOS将LOOPBACK_TIMEOUT增加到10。
bpo-38169: 增加SharedMemory和ShareableList的代码覆盖率
bpo-34401: 使test_gdb在HP-UX上正确运行。由Michael Osipov提供补丁。
构建¶
bpo-38249: 更新
Py_UNREACHABLE以使用__builtin_unreachable(),如果编译器能够使用它。由Donghee Na提供补丁。bpo-41617: 修复
pycore_bitutils.h头文件以支持旧版本的 clang:__builtin_bswap16()在 LLVM clang 3.0 中不可用。bpo-40204: 在
Doc/Makefile中将Sphinx版本固定为2.3.1。bpo-36020: 现在构建Python需要C99函数
snprintf()和vsnprintf()。bpo-40684:
make install现在在使用./configure --with-platlibdir时,为目标lib-dynload/目录使用PLATLIBDIR变量。
Windows¶
bpo-41744: 修复使用Nuget包时props文件的自动导入问题。
bpo-41627: 32位用户站点目录现在包含一个
-32后缀,以区别于64位解释器的目录。bpo-41526: 通过移除对Mark Hammond的特别感谢(获得他的许可),修复了安装程序最后一页的布局问题。
bpo-41492: 修复了出现在UAC提示中的描述。
bpo-40948: 改进安装后消息,引导人们使用"py"命令。
bpo-41412: 安装程序现在将无法在Windows 7和Windows 8上安装。此外,UCRT依赖现在总是按需下载。
bpo-40741: 更新Windows版本,包括SQLite 3.32.3。
bpo-41142:
msilib现在支持使用非 ASCII 文件路径创建 CAB 文件,以及向其中添加具有非 ASCII 文件路径的文件。bpo-41074: 修复了函数
msilib.OpenDatabase()和msilib.init_database()中对非 ASCII 名称的支持,以及方法msilib.Database.OpenView()中对非 ASCII SQL 的支持。bpo-41039: 稳定的ABI重定向DLL(python3.dll)现在使用
#pragma comment(linker)进行重新导出。bpo-40164: 将Windows上的OpenSSL更新至1.1.1g。
bpo-39631: 将Windows上
.py文件的注册MIME类型更改为text/x-python,而不是text/plain。bpo-40677: 手动定义IO_REPARSE_TAG_APPEXECLINK,以防某些旧的Windows SDK没有它。
bpo-37556: 扩展py.exe帮助,提及通过venv、shebang、环境变量和ini文件进行的覆盖。
macOS¶
bpo-41557: 更新macOS安装程序,使用SQLite 3.33.0。
bpo-39580: 如果从命令行运行安装程序,避免打开Finder窗口。补丁由Rick Heil贡献。
bpo-41100: 修复在macOS 11上构建时的配置错误。请注意,当前的Python版本是在macOS 11(Big Sur)的第一个开发者预览版发布后不久发布的;在开发者预览版上构建和运行还有其他已知问题。预计在Python 3.8.x的未来错误修复版本和3.9.0中完全支持Big Sur。
bpo-40741: 更新 macOS 安装程序以使用 SQLite 3.32.3。
bpo-41005: 修复了 webbrowser.py 中不允许 macOS 打开浏览器的 XDG 设置问题。
bpo-40741: 更新 macOS 安装程序以使用 SQLite 3.32.2。
IDLE¶
bpo-41775: 使用 'IDLE Shell' 作为 shell 标题。
bpo-35764: 重写 Calltips 文档部分。
bpo-40181: 在 calltips 中,停止提醒 '/' 标记仅位置参数的结束。
bpo-41468: 改进 IDLE 运行崩溃错误消息(用户应该永远不会看到)。
bpo-41373: 通过将其行结束符设置为系统默认值,保存没有行结束符加载的文件,如空白或不同行结束符。修复 3.8.4 和 3.9.0b4 中的回归。
bpo-41300: 保存含有非 ASCII 字符的文件。修复 3.9.0b4 和 3.8.4 中发布的回归。
bpo-37765: 将关键字添加到模块名称完成列表。重写 IDLE 文档的 Completions 部分。
bpo-41152: IDLE 中
stdin、stdout和stderr的编码现在始终为 UTF-8。bpo-41144: 使 Open Module 可以打开特殊模块如 os.path。
bpo-39885: 使上下文菜单中的剪切和复制在右击选择内容时再次工作。
bpo-40723: 使 test_idle 在导入后运行时通过。
C API¶
bpo-41936: 移除了未文档化的宏
Py_ALLOW_RECURSION和Py_END_ALLOW_RECURSION以及PyInterpreterState结构的recursion_critical字段。bpo-41692:
PyUnicode_InternImmortal()函数现在已被弃用,并将在 Python 3.12 中移除:改用PyUnicode_InternInPlace()。由 Victor Stinner 提供补丁。bpo-41842: 添加
PyCodec_Unregister()函数以取消注册一个编解码器搜索函数。bpo-41834: 移除
_Py_CheckRecursionLimit变量:它已被PyInterpreterState结构的ceval.recursion_limit取代。由 Victor Stinner 提供补丁。bpo-41689: 使用
PyType_FromSpec()创建的类型现在可以从__text_signature__访问其tp_doc槽中的任何签名。bpo-41524: 修复 PyOS_mystrnicmp 和 PyOS_mystricmp 中增加指针超出字符串末尾的 bug。
bpo-41324: 添加一个最小的十进制胶囊 API。该 API 支持最多 38 位数字的 Decimal 与其作为 C 结构体的三元表示之间的快速转换。
bpo-30155: 添加
PyDateTime_DATE_GET_TZINFO()和PyDateTime_TIME_GET_TZINFO()宏,用于访问datetime.datetime和datetime.time对象的tzinfo属性。bpo-40170: 回滚
PyType_HasFeature()更改:当不使用有限的 C API 时,它再次直接读取PyTypeObject.tp_flags成员,而不是总是调用隐藏实现细节的PyType_GetFlags()。bpo-41123: 移除
PyUnicode_AsUnicodeCopy。bpo-41123: 移除
PyLong_FromUnicode()。bpo-41123: 移除
PyUnicode_GetMax()。bpo-41123: 移除操作
Py_UNICODE*字符串的Py_UNICODE_str*函数。bpo-41103: 移除
PyObject_AsCharBuffer()、PyObject_AsReadBuffer()、PyObject_CheckReadBuffer()和PyObject_AsWriteBuffer()。请迁移到新的缓冲区协议;PyObject_GetBuffer()和PyBuffer_Release()。bpo-36346: 对于
PyUnicode_FromUnicode(NULL, size)和PyUnicode_FromStringAndSize(NULL, size)当size > 0时引发 DeprecationWarning。bpo-36346: 在 C 中标记
Py_UNICODE_COPY、Py_UNICODE_FILL、PyUnicode_WSTR_LENGTH、PyUnicode_FromUnicode、PyUnicode_AsUnicode和PyUnicode_AsUnicodeAndSize为弃用。移除自 Python 3.3 以来已被弃用且损坏的Py_UNICODE_MATCH。bpo-40989:
PyObject_INIT()和PyObject_INIT_VAR()宏分别成为PyObject_Init()和PyObject_InitVar()函数的别名。bpo-36020: 在 Windows 上,
#include "pyerrors.h"不再定义snprintf和vsnprintf宏。bpo-40943: 现在必须定义
PY_SSIZE_T_CLEAN宏才能使用PyArg_ParseTuple()和Py_BuildValue()格式,这些格式使用#:es#、et#、s#、u#、y#、z#、U#和Z#。参见 Parsing arguments and building values 和 PEP 353。bpo-40910: 显式地将
Py_GetArgcArgv()函数导出到 C API 并记录该函数。之前,它是隐式导出的,由于 Python 是用-fvisibility=hidden构建的,这种方式不再有效。bpo-40724: 允许在类型规范中定义缓冲区槽。
bpo-40679: 修复了如果 qualname 参数为 NULL 时
_PyEval_EvalCode()的崩溃问题。bpo-40839: 由于历史原因,允许在不持有 GIL 的情况下调用
PyDict_GetItem()。现在不再允许这样做。bpo-40826: 现在如果在 GIL 释放的情况下调用
PyOS_InterruptOccurred(),将会失败并产生致命错误。bpo-40792:
PyNumber_Index()的结果现在总是具有确切的int类型。以前,结果可能是int的子类的实例。bpo-39573: 将
Py_REFCNT()和Py_SIZE()宏转换为静态内联函数。它们不能再被用作左值:使用Py_SET_REFCNT()和Py_SET_SIZE()来设置对象的引用计数和大小。这一变化是有意为之的不兼容更改,目的是为 C API 准备一个不透明的PyObject结构。bpo-40703: PyType_FromSpec*() 函数不再覆盖类型的 "__module__" 属性,如果该属性是通过 "Py_tp_members" 或 "Py_tp_getset" 设置的。
bpo-39583: 从
Include/cpython/*.h中删除了多余的 "extern C" 声明。
Python 3.9.0 beta 1¶
发布日期: 2020-05-19
安全性¶
核心与内置函数¶
bpo-40663: 正确生成省略了括号但需要的地方的注释(例如:
Type[(str, int, *other))])。bpo-40596: 修复了 Windows 上
str.isidentifier()对于包含非 BMP 字符的非规范化字符串的处理。bpo-40593: 改进了源代码中无效字符的语法错误提示。
bpo-40585: 修复了使用
codeop.compile_command()时的一个 bug,该 bug 导致新解析器吞没了异常。由 Pablo Galindo 提供补丁。bpo-40502: 初始化
n->n_col_offset。(由 Joannah Nanjekye 提供补丁)bpo-40527: 修复命令行参数解析:不再多次将错误写入 stderr。
bpo-1635741: 将
errno移植到多阶段初始化 (PEP 489)。bpo-40523: 为
weakref.proxy对象添加hash()和reversed()的透传。由 Pablo Galindo 提供补丁。bpo-1635741: 将
syslog移植到多阶段初始化 (PEP 489)。bpo-40246: 由于向后兼容性的考虑,对于紧跟在保留关键字后且两者之间没有空格的字符串,撤销了在 bpo-40246 中引入的针对无效字符串前缀的专门错误消息报告。像
bg="#d00" if clear else"#fca"这样的构造无法解析,这在如此短的通知时间内是不可接受的破坏。bpo-40417: 修复了当调用 PyImport_ReloadModule 时 imp 模块的弃用警告。由 Robert Rouhani 提供补丁。
bpo-40408: 修复了在 GenericAlias 中嵌套类型变量(如
list[list[T]])的支持。bpo-1635741: 将 _stat 模块移植到多阶段初始化 (PEP 489)。
bpo-29587: 在调用
generator.throw()时启用隐式异常链。bpo-40328: 为 CJKCodecs 添加生成映射头文件的工具。
bpo-40228: 现在设置 frame.f_lineno 对于源代码到字节码编译器的变化是健壮的。
bpo-38880: 在内置子解释器模块中添加了列出与通道端相关联的解释器的能力。
bpo-37986: 对于适合 long 的值,提高
PyLong_FromDouble()的性能。
库¶
bpo-40662: 修复了
ast.get_source_segment()对于具有不完整位置信息的 ast 节点的问题。由 Irit Katriel 提供补丁。bpo-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-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-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: 更新
nntplib以合并nntplib.NNTP和nntplib._NNTPBase。补丁由 Donghee Na 提供。bpo-32494: 更新
dbm.gnu在调用len()时尽可能使用 gdbm_count。由 Donghee Na 提供补丁。bpo-40453: 添加
isolated=True关键字参数到_xxsubinterpreters.create()。一个孤立的子解释器不能生成线程、生成子进程或调用os.fork()。bpo-40286: 移除
_random.Random.randbytes():randbytes()的 C 实现。为实现子类化,该方法现在直接在 Python 中实现:randbytes()现在直接重用getrandbits()。bpo-40394: 为
difflib.SequenceMatcher.find_longest_match()添加了默认参数。bpo-39995: 修复 concurrent.futures._ThreadWakeup 中的竞争条件:现在对 _ThreadWakeup 的访问受到关闭锁的保护。
bpo-30966:
concurrent.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()。由 Donghee Na 提供补丁。bpo-40389:
repr()现在当被调用于typing.Union两个类型之一为NoneType时返回typing.Optional[T]。bpo-40291: 添加对 CAN_J1939 套接字的支持(Linux 5.4+ 可用)
bpo-40273:
types.MappingProxyType现在是可逆的。bpo-39075:
types.SimpleNamespace的 repr 现在是插入顺序而非字母顺序。bpo-40192: 在AIX上,
thread_time()现在通过具有纳秒级分辨率的thread_cputime()实现,而非之前具有 10 毫秒分辨率的clock_gettime(CLOCK_THREAD_CPUTIME_ID)。 由 Batuhan Taskaya 提供补丁。bpo-40025: 当_generate_next_value_在成员之后定义时,抛出TypeError。由Ethan Onstott提供补丁。
bpo-39058: 在argparse模块中,Namespace()和其他参数持有者的repr现在按照属性添加的顺序显示。以前,尽管模块的用户可见部分保留了参数顺序,但它是按字母顺序显示的。
bpo-24416:
datetime.date和datetime.datetime的isocalendar()方法现在返回一个 named tuple 而不是tuple。
文档¶
bpo-34790: 在
asyncio.wait()的文档中添加了显式传递coros的移除版本说明。bpo-40561: 为webbrowser的open函数提供文档字符串。
bpo-40499: 提到
asyncio.wait()需要一个非空的awaitables集合。bpo-39705: 在循环技术部分,为sorted()的教程示例提供了更好的解释。还包括一个新示例来解释sorted()的基本行为。
bpo-39435: 修正了文档中
pickle.loads()的错误签名。
测试¶
构建¶
Windows¶
macOS¶
工具/示例¶
C API¶
bpo-39465: 从C API中移除
_PyUnicode_ClearStaticStrings()函数。bpo-38787: 添加PyCFunction_CheckExact()宏用于精确类型检查,现在我们允许PyCFunction的子类型,以及PyCMethod_CheckExact()和PyCMethod_Check()用于新的PyCMethod子类型。
bpo-40545: 使用
PyAPI_FUNC()声明_PyErr_GetTopmostException()以在C API中正确导出函数。 该函数保持私有 (_Py) 前缀。bpo-40412: 在最终化期间将inittab_copy置空,防止在嵌入式情况下未来的解释器初始化崩溃。由Gregory Szorc提供补丁。
bpo-40429:
PyThreadState_GetFrame()函数现在返回一个对帧的强引用。bpo-40428: 从C API中移除以下函数。显式调用
PyGC_Collect()以释放所有自由列表。PyAsyncGen_ClearFreeLists()PyContext_ClearFreeList()PyDict_ClearFreeList()PyFloat_ClearFreeList()PyFrame_ClearFreeList()PyList_ClearFreeList()PySet_ClearFreeList()PyTuple_ClearFreeList()
bpo-40421: 新增
PyFrame_GetBack()函数:获取外层框架的下一个框架。bpo-40421: 新增
PyFrame_GetCode()函数:返回框架代码的一个借用引用。bpo-40217: 确保使用
PyType_FromSpecWithBases()创建的类型实例在垃圾收集器中遍历引用时会访问其类对象(作为提供的tp_traverse的扩展实现)。由 Pablo Galindo 提供补丁。bpo-38787: 现在可以从C定义的堆类型方法访问模块C状态(PEP 573)。由 Marcel Plch 和 Petr Viktorin 提供补丁。
Python 3.9.0 alpha 6¶
发布日期: 2020-04-27
安全性¶
bpo-40121: 修复了在创建新套接字时引发的审计事件。
bpo-39073: 禁止在 email.headerregistry.Address 参数中使用 CR 或 LF,以防止头部注入攻击。
bpo-39503: CVE-2020-8492:
urllib.request模块的AbstractBasicAuthHandler类使用了一个低效的正则表达式,攻击者可以利用此漏洞导致拒绝服务。修复正则表达式以防止灾难性回溯。漏洞由 Ben Caller 和 Matt Schwager 报告。
核心与内置函数¶
bpo-40313: 提高 bytes.hex() 的性能。
bpo-40334: 切换到基于 PEG 的新解析器。更多详情见 PEP 617。要暂时切换回旧解析器,使用
-X oldparser或PYTHONOLDPARSER=1。在 Python 3.10 中,我们将完全移除旧解析器,包括parser模块(已弃用)以及依赖于它的任何内容。bpo-40267: 修复了分词器以显示正确的错误消息,当最后一个输入字符上有
SyntaxError且没有换行符时。过去显示的是unexpected EOF while parsing,而应该是invalid syntax。bpo-39522: 当激活注释的延迟评估时,正确反解析字符串的显式
u前缀。由 Batuhan Taskaya 提供补丁。bpo-40246: 当标记器遇到带有无效前缀的字符串时,报告专门的错误消息“无效字符串前缀”。
bpo-40082: 修复信号处理程序:现在总是使用主解释器,而不是尝试获取当前的Python线程状态。
bpo-37388: str.encode()和str.decode()在开发模式或Python终止期间的调试模式下不再检查编码和错误。编解码器机制在非常晚调用str.encode()和str.decode()时不再工作。
bpo-40077: 修复
_json中潜在的引用泄漏,应当遍历 PyScannerObject 的 memo。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-40138: 修复了
os.waitpid()在Windows上对于退出码大于INT_MAX >> 8的实现。退出状态现在被解释为一个无符号数。bpo-39942: 当
typing.TypeVar中缺少 "__name__" 时,将 "__main__" 设置为默认模块名。由Weipeng Hong提供补丁。bpo-40275: 现在,
logging包在unittest中仅当使用assertLogs()断言时才会被延迟导入。bpo-40275: 现在,
asyncio包在unittest中仅当使用IsolatedAsyncioTestCase类时才会被延迟导入。bpo-40330: 在
ShareableList.__setitem__()中,检查新字符串项的大小是在将其编码为 utf-8 之后,而不是之前。bpo-40148: 添加了
pathlib.Path.with_stem()以创建替换了主干名称 (stem) 的新 Path。bpo-40325: 弃用了在 random.sample() 中对集合对象的支持。
bpo-40257: 改进了
typing模块的帮助信息。现在所有特殊形式和特殊泛型别名(如Union和List)的文档字符串都会被显示。使用help()查看像List[int]这样的泛型别名时,会显示相应具体类型(在这个例子中是list)的帮助信息。bpo-40257:
inspect.getdoc()不再返回从对象类型或父类继承的文档字符串,如果这些文档字符串不是在对象本身定义的。在pydoc中,现在不仅对类、函数、方法等显示文档字符串,对任何拥有自己的__doc__属性的对象也会显示。bpo-40287: 修复了
SpooledTemporaryFile.seek()返回位置的问题。bpo-40290: 在 statistics.NormalDist() 中添加了 zscore() 方法。
bpo-40282: 允许
random.getrandbits(0)成功执行并返回 0。bpo-40286: 新增了
random.randbytes()函数和random.Random.randbytes()方法来生成随机字节。bpo-40277:
collections.namedtuple()现在为其字段访问器提供了一个人类可读的 repr。bpo-40270: 现在 Windows 上包含的 sqlite3 编译时带有 json 扩展。这使得可以使用诸如
json_object这样的函数。bpo-29255: 在
KqueueSelector.select中,当没有注册的 fds 时等待。bpo-40260: 确保
modulefinder使用io.open_code()并遵守编码注释。bpo-40234: 再次允许在子解释器中生成守护线程(撤销之前禁止它们的更改)。
bpo-39207: 现在
ProcessPoolExecutor中的工作器是按需生成的,只有在没有可用的空闲工作器可以重用时才会生成。这优化了启动开销并减少了因空闲工作器而损失的CPU时间。由Kyle Stanley提供补丁。bpo-40091: 修复了日志模块中的fork挂起问题:现在使用新的私有方法 _at_fork_reinit() 在子进程中fork时重新初始化锁。
bpo-40149: 在 _abc._abc_data 类型中实现了遍历和清除槽。
bpo-40208: 移除已弃用的
symtable.SymbolTable.has_exec()。bpo-40196: 修复了
symtable模块中的一个错误,该错误导致错误地将全局变量报告为局部变量。由Pablo Galindo提供补丁。bpo-40190: 向
posix.sysconf()添加了对_SC_AIX_REALMEM的支持。bpo-40182: 移除了
typing.NamedTuple类的_field_types属性。bpo-36517: 现在使用
typing.NamedTuple进行多重继承时会引发错误,而不是静默忽略其他类型。bpo-40126: 修复了在unittest.mock中还原多个补丁的问题。如果补丁的
__enter__()失败,其__exit__()现在永远不会被调用。现在从__exit__()返回true会静默异常。bpo-40094: http.server的CGIHTTPRequestHandler现在记录CGI脚本的退出代码,而不是os.waitpid()的CGI脚本退出状态。例如,如果脚本被信号11杀死,现在会记录:“CGI脚本退出代码 -11。”
bpo-40108: 改进了尝试使用
runpy导入模块并在模块名称末尾错误地使用了 ".py" 扩展名时的错误消息。补丁由 Pablo Galindo 提供。bpo-40094: 添加了
os.waitstatus_to_exitcode()函数:将等待状态转换为退出代码。bpo-40089: 修复 threading._after_fork(): 如果 fork 不是由 threading.Thread 生成的线程调用的,threading._after_fork() 现在会为 _main_thread 创建一个 _MainThread 实例,而不是 _DummyThread 实例。
bpo-40089: 为
_thread.Lock、_thread.RLock、threading.RLock和threading.Condition类添加了私有方法_at_fork_reinit():在 fork 时于子进程中重新初始化锁,并将锁重置为未锁定状态。同时将threading.Event的私有方法_reset_internal_locks()重命名为_at_fork_reinit()。bpo-25780: 在
socket模块中公开CAN_RAW_JOIN_FILTERS。bpo-39503:
urllib.request的AbstractBasicAuthHandler现在解析所有 WWW-Authenticate HTTP 头部,并接受每个头部多个挑战:使用第一个 Basic 挑战的领域。bpo-39812: 通过添加一个内部的
threading._register_atexit(),从concurrent.futures中移除了守护线程,该函数在加入所有非守护线程之前调用注册的函数。这允许与不支持守护线程的子解释器兼容。bpo-40050: 修复
importlib._bootstrap_external: 如果winreg内置模块已经在sys.modules中可用,避免创建新的winreg内置模块,并移除冗余导入。bpo-40014: 修复
os.getgrouplist(): 如果getgrouplist()函数因为组列表太小而失败,尝试使用更大的组列表。在失败时,glibc 实现的getgrouplist()将ngroups设置为组的总数。对于其他实现,将组列表大小加倍。bpo-40017: 如果操作系统支持,添加
time.CLOCK_TAI常量。bpo-40016: 在 re 文档字符串中,阐明内联和参数编译标志之间的关系。
bpo-39953: 更新
ssl模块中 OpenSSL 错误代码的内部表。bpo-36144: 在
weakref.WeakValueDictionary中添加了 PEP 584 运算符。bpo-36144: 在
weakref.WeakKeyDictionary中添加了 PEP 584 运算符。bpo-38891: 修复了
multiprocessing.shared_memory.ShareableList中__getitem__和__setitem__方法的线性运行时行为。这避免了在迭代ShareableList时的二次性能问题。由 Thomas Krennwallner 提供补丁。bpo-39682: 移除了通过上下文管理器 关闭
pathlib.Path对象的未文档化支持。 上下文管理器的魔术方法仍然保留,但它们现在是无操作的,使得Path对象不可变。bpo-36144: 在
collections.ChainMap中添加了 PEP 584 运算符(|和|=)。bpo-39011: 移除了 ElementTree 属性中的行尾规范化,因为被实体编号替换的行尾应保留其原始形式。
bpo-38410: 在
sys.set_asyncgen_hooks()中正确处理sys.audit()失败。bpo-36541: lib2to3 现在可以识别命名赋值表达式(海象运算符,
:=)。bpo-35967: 在平台中,延迟调用 'uname -p' 直到请求处理器属性。
bpo-35113:
inspect.getsource()现在为与模块级别类同名的内部类返回正确的源代码。装饰器也作为类源代码的一部分返回。由 Karthikeyan Singaravelan 提供补丁。bpo-33262: 弃用将 None 作为参数传递给
shlex.split()的s形参的做法。补丁由 Zackery Spytz 提供。bpo-31758: 防止使用未初始化的
_elementtree.XMLParser对象时崩溃。由 Oren Milman 提供补丁。
文档¶
测试¶
bpo-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 提供补丁。
构建¶
Windows¶
macOS¶
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: 将
PyGC_Head结构体移至内部 C API。bpo-40170: 将
PyObject_IS_GC()宏转换为函数以隐藏实现细节。bpo-40241: 向公共API添加函数
PyObject_GC_IsTracked()和PyObject_GC_IsFinalized(),以分别查询Python对象是否正在被跟踪或已经被垃圾收集器终结。由Pablo Galindo提供补丁。bpo-40170: 为隐藏实现细节,
PyObject_NEW()宏成为PyObject_New()宏的别名,而PyObject_NEW_VAR()宏成为PyObject_NewVar()宏的别名。它们不再直接访问PyTypeObject.tp_basicsize成员。bpo-40170:
PyType_HasFeature()现在总是调用PyType_GetFlags()以隐藏实现细节。以前,当不使用有限C API时,它直接访问PyTypeObject.tp_flags成员。bpo-40170: 将
PyObject_GET_WEAKREFS_LISTPTR()宏转换为函数以隐藏实现细节:该宏此前直接访问了PyTypeObject.tp_weaklistoffset成员。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: 在 http.client 中禁止主机名中的控制字符,解决 CVE-2019-18348。此类潜在的恶意头部注入 URL 现在会引发 InvalidURL。
核心与内置函数¶
bpo-40010: 优化多线程应用中的待处理调用。如果非主线程调度了一个待处理调用(
Py_AddPendingCall()),字节码评估循环不再在每条字节码指令处中断以检查无法执行的待处理调用。只有主线程可以执行待处理调用。此前,字节码评估循环在每条指令处中断,直到主线程执行待处理调用。
bpo-1635741: 将_weakref扩展模块移植到多阶段初始化(PEP 489)。
bpo-1635741: 将 _collections 模块移植到多阶段初始化(PEP 489)。
bpo-40010: 优化多线程应用中的信号处理。如果非主线程接收到信号,字节码评估循环不再在每条字节码指令处中断以检查无法处理的待处理信号。只有主解释器的主线程可以处理信号。
此前,字节码评估循环在每条指令处中断,直到主线程处理信号。
bpo-39984: 如果在子解释器中调用
Py_AddPendingCall(),现在该函数将被安排从子解释器调用,而不是从主解释器调用。每个子解释器现在都有自己预定的调用列表。bpo-1635741: 将 _heapq 模块移植到多阶段初始化。
bpo-1635741: 将 itertools 模块移植到多阶段初始化(PEP 489)。
bpo-37207: 通过使用 PEP 590
vectorcall调用约定,加速对frozenset()的调用。由 Donghee Na 提供补丁。bpo-39984: 子解释器:将
_PyRuntimeState.ceval.tracing_possible移动到PyInterpreterState.ceval.tracing_possible:每个解释器现在拥有自己的变量。bpo-37207: 通过使用 PEP 590
vectorcall调用约定,加速对set()的调用。补丁由 Donghee Na 提供。bpo-1635741: 将 _statistics 模块移植到多阶段初始化 (PEP 489)。
bpo-39968: 使用内联函数替换扩展模块的 get_module_state 宏。
bpo-39965: 如果在非异步函数内部使用 await 并且设置了
PyCF_ALLOW_TOP_LEVEL_AWAIT(如在 asyncio REPL 中),则正确引发SyntaxError。 由 Pablo Galindo 提供补丁。bpo-39562: 当给定
PyCF_ALLOW_TOP_LEVEL_AWAIT标志时,允许在顶层执行异步推导式。补丁由 Batuhan Taskaya 提供。bpo-37207: 通过使用 PEP 590
vectorcall调用约定,加速对tuple()的调用。补丁由 Donghee Na 提供。bpo-38373: 更改了列表的超额分配策略。如果新大小更接近超额分配的大小而不是旧大小,并且添加了填充,则不再进行超额分配。
bpo-39926: 将 Unicode 数据库更新到 Unicode 版本 13.0.0。
bpo-19466: 在 Python 关闭期间更早地清除守护线程的帧以调用对象析构函数。因此,现在可以更可靠地为守护线程发出“未关闭文件”资源警告。
bpo-38894: 修复了一个错误,该错误在存在指向用户没有读取权限的文件的符号链接时,调用
pathlib.Path.glob会导致结果不完整。由 Pablo Galindo 和 Matt Wozniski 提供补丁。bpo-39877: 修复
PyEval_RestoreThread()在退出时由于守护线程导致的随机崩溃问题。现在直接访问_PyRuntime变量,而不是使用tstate->interp->runtime,因为在调用Py_Finalize()后tstate可能成为悬垂指针。此外,守护线程现在在尝试获取 GIL 之前退出。bpo-39871: 修复
math.{atan2,copysign,remainder}()中当第一个参数无法转换为float时可能出现的SystemError。由 Zackery Spytz 提供补丁。bpo-39776: 修复由 PyGILState_Ensure() 创建的线程可能获得重复 ID 的竞态条件。
这影响了像 contextvar 缓存机制这样的 tstate->id 的消费者,在高线程负载下(在嵌入场景中观察到)可能返回无效的缓存对象。
bpo-39778: 修复了由于
collections.OrderedDict类中弱引用处理不当导致的崩溃。补丁由 Pablo Galindo 提供。bpo-1635741: 将 audioop 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-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()不再输出具有默认值的可选字段和属性。AST 节点的可选字段和属性的默认值现在被设为类属性(例如Constant.kind被设为None)。bpo-39889: 修复了
ast.unparse()对于包含单个元素的扩展切片(例如a[i:j,])的问题。当使用元组索引时(例如a[i, j]),移除冗余的元组。bpo-39828: 修复
json.tool以捕获BrokenPipeError。由 Donghee Na 提供补丁。bpo-13487: 避免了当
inspect.getmodule()尝试遍历sys.modules时可能出现的 "RuntimeError: dictionary changed size during iteration"。bpo-39674: 恢复 "bpo-37330: open() 不再接受文件模式中的 'U'"。为了便于从 Python 2.7 过渡,Python 3.9 中保留了 open() 的 "U" 模式,但将在 Python 3.10 中移除。
bpo-28577: 32位前缀长度的 IPv4Networks 和 128位前缀的 IPv6Networks 的 hosts 方法现在返回包含单个 Address 的列表,而不是空列表。
bpo-39826: 向 logging HTTPHandler 添加 getConnection 方法,以启用自定义连接。
bpo-39763: 使用
subprocess模块重新实现了distutils.spawn.spawn()函数。bpo-39794: 添加 --without-decimal-contextvar 构建选项。这启用了线程本地而非协程本地的上下文。
bpo-36144:
collections.defaultdict现在实现了|操作符 (PEP 584)。bpo-39517: 修复 runpy.run_path() 在使用路径类对象时的问题。
bpo-39775: 将
inspect.Signature.parameters改回collections.OrderedDict。在 Python 3.9.0a4 中,这被改为dict。bpo-39678: 重构
concurrent.futures.ProcessPoolExecutor中的 queue_manager,使其更易于维护。bpo-39764: 修复在 PyAsyncGenObject Task 上调用 get_stack 时的 AttributeError。
bpo-39769:
compileall.compile_dir()函数的 ddir 参数和 compileall 命令行标志-d不再为正在编译的目录树根下的子模块生成错误的路径名到 pyc 文件中。这修复了自 Python 3.5 引入的回归问题。bpo-36144:
types.MappingProxyType对象现在支持来自 PEP 584 的合并 (|) 操作符。bpo-38691: 当使用
-E或-I命令行选项时,importlib模块现在忽略PYTHONCASEOK环境变量。bpo-39719: 移除
tempfile.SpooledTemporaryFile.softspace(),因为文件在 Python 3 中不再有softspace属性。由 Shantanu 提供补丁。bpo-39667: 提升zipfile.Path与pathlib.Path的兼容性,并修复zipp 3.0中发现的性能下降问题。
bpo-39638: 保留
AST节点文档字符串中的ASDL签名。由Batuhan Taskaya提供补丁。bpo-39639: 弃用
ast.Suite节点类,因为它不再被使用。由Batuhan Taskaya提供补丁。bpo-39609: 向默认的asyncio执行器添加thread_name_prefix。
bpo-39548: 修复
urllib.request.AbstractDigestAuthHandler中当可选参数qop不存在时的头部处理问题。bpo-39509: HTTP状态码
103 EARLY_HINTS和425 TOO_EARLY被添加到http.HTTPStatus中。由Donghee Na提供补丁。bpo-39507: 向http库的HTTPStatus添加HTTP状态418 "I'm a Teapot"。由Ross Rhodes提供补丁。
bpo-39495: 为保持Python和C实现之间的一致性,移除
xml.etree.ElementTree.TreeBuilder.start()中 attrs 参数的默认值。bpo-38971: BPO中的开放问题表明希望使codecs.open()的实现与io.open()保持一致,后者实现了try/except以确保在引发异常之前关闭文件流。
bpo-38641: 向
lib2to3添加了对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-39761: 修复了在没有额外DFLAGS的情况下使用DTrace构建的问题。
bpo-39763: 如果
subprocess模块不可用,setup.py 现在使用subprocess模块的基本实现:在构建所需的C扩展模块之前。bpo-1294959: 在配置脚本中添加
--with-platlibdir选项:平台特定的库目录名称,存储在新的sys.platlibdir属性中。它用于构建平台特定的扩展模块路径和标准库路径。在大多数平台上,它等于"lib"。在 Fedora 和 SuSE 上,64位平台上它等于"lib64"。补丁由 Jan Matějek、Matěj Cepl、Charalampos Stratakis 和 Victor Stinner 提供。
Windows¶
bpo-39930: 确保安装包中包含所需的
vcruntime140.dll。bpo-39847: 避免在计算机休眠时等待互斥锁(用于来自
threading的锁相关对象)时挂起,大约49天的运行时间。bpo-38597: 当可再发行版本不可用时,
distutils将不再静态链接vcruntime140.dll。CPython 未来的所有发行版都将包含此 DLL 的副本,以确保分发的扩展能够继续加载。bpo-38380: 更新 Windows 构建以使用 SQLite 3.31.1。
bpo-39789: 更新 Windows 发布构建机器到 Visual Studio 2019 (MSVC 14.2)。
bpo-34803: 现在为 nuget.org 提供的包包括存储库引用和捆绑的图标图像。
macOS¶
bpo-38380: 更新 macOS 构建以使用 SQLite 3.31.1。
IDLE¶
工具/示例¶
C API¶
bpo-40024: 添加
PyModule_AddType()辅助函数:将类型添加到模块。由 Donghee Na 提供补丁。bpo-39946: 移除
_PyRuntime.getframe钩子并移除作为_PyRuntime.getframe别名的_PyThreadState_GetFrame宏。它们仅由内部 C API 暴露。同时移除PyThreadFrameGetter类型。bpo-39947: 添加
PyThreadState_GetFrame()函数:获取 Python 线程状态的当前帧。bpo-37207: 添加 _PyArg_NoKwnames 辅助函数。由 Donghee 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: 弃用
PyEval_InitThreads()和PyEval_ThreadsInitialized()。现在调用PyEval_InitThreads()不执行任何操作。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-39382: 修复了
issubclass()单继承路径中的一个释放后使用问题,当对象的__bases__有一个单一引用时,其第一个项目也是如此。由 Yonatan Goldschmidt 提供补丁。bpo-39573: 更新 clinic 工具以使用
Py_IS_TYPE()。由 Donghee Na 提供补丁。bpo-39619: 在 HP-UX 系统上启用
os.chroot()的使用。bpo-39573: 添加
Py_IS_TYPE()静态内联函数,用于检查对象 o 的类型是否为 type。bpo-39606: 修复由 bpo-39386 的修复引起的回归问题,该问题阻止了对已经关闭或耗尽的异步生成器调用
aclose。bpo-39579: 更改
ast_for_dotted_name中构造的Attribute节点的结束列偏移量,使其指向当前节点的末尾,而不是最后一个NAME节点的末尾。bpo-1635741: 将 _crypt 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-1635741: 将 _contextvars 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-39510: 修复在已关闭的 BufferedReader 上的
readinto()方法中的段错误。bpo-39502: 修复 64 位 AIX 上的
time.localtime(),以支持 1902 年之前和 2038 年之后的年份。由 M Felt 提供补丁。bpo-39492: 修复 C Pickler 中的一个引用循环,该循环阻止了被删除、腌制的对象的垃圾回收。
bpo-39453: 修复了
list.__contains__()中在比较项目时列表被更改可能导致的崩溃。由 Donghee Na 提供补丁。bpo-39434: floor division 浮点运算现在有更好的性能。同时,更新了此操作的
ZeroDivisionError消息。由 Donghee Na 提供补丁。bpo-1635741: 将 _codecs 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-1635741: 将 _bz2 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-1635741: 将 _abc 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-39320: 用两个更简单的字节码替换构建字典的两个复杂字节码。添加了新的字节码
DICT_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: 移除
bdb.Bdb.format_stack_entry中对__args__的过时检查。bpo-39648: 扩展
math.gcd()和math.lcm()以处理多个参数。bpo-39681: 修复一个回归问题,即 C pickle 模块不允许从没有暴露 readinto() 方法的类文件对象中反序列化。
bpo-35950: 在只读的
io.BufferedReader实例上调用io.BufferedReader.truncate()时抛出io.UnsupportedOperation。bpo-39479: 添加
math.lcm()函数:最小公倍数。bpo-39674: 撤销“不在 collections 模块中暴露抽象集合类”的更改(bpo-25988)。像 collections.Mapping 这样的 ABC 别名在 Python 3.9 中保留以方便从 Python 2.7 过渡,但将在 Python 3.10 中移除。
bpo-39104: 修复当任务序列化失败时
shutdown(wait=False)上的 ProcessPoolExecutor 挂起问题。bpo-39627: 修复了 TypedDict 对继承键的总体验证。
bpo-39474: 修复了像
(a)(b)、(a)[b]和(a).b这类表达式的 AST 起始位置。bpo-21016:
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: 提高了 zipfile.Path 对于包含大量条目的文件的性能。同时提高了性能并修复了与 importlib_metadata 1.5 发布的小问题。
bpo-39350: 修复了
fractions.Fraction如果分子和/或分母是int子类时的回归问题。现在使用math.gcd()函数来规范化 分子 和 分母。math.gcd()总是返回int类型。以前,GCD 类型依赖于 分子 和 分母。bpo-39567: 为
os.walk()、os.fwalk()、pathlib.Path.glob()和pathlib.Path.rglob()添加了审计。bpo-39559: 从
uuid.getnode()中移除了未使用的、未记录的参数getters。bpo-38149: 现在每次调用
glob.glob()和glob.iglob()时,sys.audit()只被调用一次。bpo-39546: 修复了
ArgumentParser中的一个回归问题,其中allow_abbrev=False对于使用除 "-" 之外的前缀字符的长选项被忽略。bpo-39450: 在从
unittest.case.shortDescription()返回之前,去除了文档字符串中的空白。bpo-12915: 在
pkgutil模块中添加了一个新函数resolve_name。该函数将形如'a.b.c.d'或'a.b:c.d'的字符串解析为一个对象。在示例中,a.b是一个包/模块,而c.d是通过递归属性访问到达的该包/模块内的一个对象。bpo-39353:
binascii.crc_hqx()函数不再被弃用。bpo-39493: 将
typing.IO.closed标记为属性bpo-39491: 添加
typing.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字段,实现与 GNUtar(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和inspect.BoundArguments.arguments现在是字典而不是有序字典。由Rémi Lapeyre贡献的补丁。bpo-35727: 修复了在multiprocessing.Process中使用sys.exit()和sys.exit(None)时的退出代码传播问题。
bpo-32173: * 将
lazycache函数添加到__all__中。 * 使用dict.clear来清除缓存。 * 重构getline函数和checkcache函数。
文档¶
bpo-17422: 语言参考现在指定了对类命名空间的限制。基于Ethan Furman的补丁改编。
bpo-39572: 更新了
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: Windows 上的
home()和expanduser()现在优先使用USERPROFILE而不再使用HOME(常规用户账户通常不会设置该变量)。这使得它们的行为再次与os.path.expanduser()保持一致,后者在 3.8 中已改为忽略HOME,参见 bpo-36264。bpo-39185: build.bat脚本新增了非常安静的输出选项(-q)和非常详细的输出选项(-vv)。
IDLE¶
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-39386: 防止异步迭代器的双重等待。
bpo-17005: 向
functools模块添加functools.TopologicalSorter,以提供执行图拓扑排序的功能。由 Pablo Galindo、Tim Peters 和 Larry Hastings 提供补丁。bpo-39320: 用三个更简单的字节码替换四个用于构建序列的复杂字节码。
以下四个字节码已被移除:
BUILD_LIST_UNPACK
BUILD_TUPLE_UNPACK
BUILD_SET_UNPACK
BUILD_TUPLE_UNPACK_WITH_CALL
新增了以下三个字节码:
LIST_TO_TUPLE
LIST_EXTEND
SET_UPDATE
bpo-39336: 发布不可变模块对象的导入加载器现在除了可以发布单个模块外,还可以发布不可变包。
bpo-39322: 新增了一个函数
gc.is_finalized()用于检查对象是否已被垃圾收集器终结。由Pablo Galindo提供补丁。bpo-39048: 通过查找
__aenter__()特殊方法在__aexit__()特殊方法之前进入异步上下文管理器时,改进了当传递错误类型给async with语句时显示的错误消息。由Géry Ogam提供补丁。bpo-39235: 修复了函数调用中单独生成器表达式的AST结束位置,例如 f(i for i in a)。
bpo-39209: 正确处理交互模式下的多行令牌。由Pablo Galindo提供补丁。
bpo-1635741: 将_json扩展模块移植到多阶段初始化(PEP 489)。
bpo-39216: 修复了仅位置参数的常量折叠优化 - 由Anthony Sottile提供。
bpo-39215: 修复了当嵌套函数在仅位置参数上有注释时引发的
SystemError- 由Anthony Sottile提供。bpo-39200: 修正了在没有参数的情况下调用
min()或max()时的错误消息。补丁由Donghee Na提供。bpo-39200: 修正了尝试在没有参数的情况下构造
range对象时的错误消息。由Pablo Galindo提供补丁。bpo-39166: 修复了在跟踪异步for循环的最后一次迭代时,跟踪函数中错误的行执行报告。补丁由Pablo Galindo提供。
bpo-39114: 修复了在跟踪带有名称绑定的异常处理程序时,跟踪函数中错误的行执行报告。补丁由Pablo Galindo提供。
bpo-39156: 将COMPARE_OP字节码指令拆分成四个不同的指令。
用于富比较的COMPARE_OP
用于'is'和'is not'测试的IS_OP
用于'in'和'is not'测试的CONTAINS_OP
JUMP_IF_NOT_EXC_MATCH 用于在 'try-except' 语句中检查异常。
这提高了解释器的清晰度,并应提供适度的加速。
bpo-38588: 修复了在调用
PyObject_RichCompareBool()时 dict 和 list 可能崩溃的问题。bpo-13601: 默认情况下,
sys.stderr现在是行缓冲的,即使stderr被重定向到文件。你仍然可以通过传递-u命令行选项或设置PYTHONUNBUFFERED环境变量来使sys.stderr无缓冲。(由 Jendrik Seipp 在 bpo-13601 中贡献。)
bpo-38610: 通过在调用
PyObject_RichCompareBool()时保持对列表元素的强引用,修复了几个列表方法可能崩溃的问题。bpo-32021: 在 mimetypes encodings_map 中包括 brotli .br 编码。
库¶
bpo-39413:
os.unsetenv()函数现在在 Windows 上也可用。bpo-39390: 修复了
shutil.copytree()的ignore回调的一个回归问题。参数类型现在再次为str和List[str]。bpo-39395:
os.putenv()和os.unsetenv()函数现在总是可用。bpo-39406: 如果
setenv()C 函数可用,os.putenv()现在用setenv()而不是putenv()实现,因此 Python 不必处理环境变量内存。bpo-39396: 在 AIX 7.1 上修复
math.nextafter(-0.0, +0.0)。bpo-29435: 允许
tarfile.is_tarfile()与文件和类文件对象一起使用,就像zipfile.is_zipfile()一样。由 William Woodruff 提供补丁。bpo-39377: 从
json.loads()中移除了encoding选项。自 Python 3.1 起已被弃用。bpo-39366: 已移除
nntplib.NNTP中此前已弃用的xpath()和xgtitle()方法。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-39313: 为
RefactoringTool添加一个新的exec_function选项(CLI 中的 --exec-function)以使exec成为函数。由 Batuhan Taskaya 提供补丁。bpo-39259:
FTP_TLS和FTP_TLS现在如果构造函数的给定超时为零,则会引发ValueError,以防止创建非阻塞套接字。由 Donghee Na 提供补丁。bpo-39259:
SMTP和SMTP_SSL现在如果构造函数的给定超时为零,则会引发ValueError,以防止创建非阻塞套接字。由 Donghee Na 提供补丁。bpo-39310: 添加
math.ulp():返回一个浮点数的最低有效位的值。bpo-39297: 提高了 importlib.metadata 分发发现的性能以及对无法访问的 sys.path 条目的恢复能力(importlib_metadata v1.4.0)。
bpo-39259: 如果传给其构造器的超时时间为零,
NNTP和NNTP_SSL现在会引发ValueError,以防止创建非阻塞套接字。补丁由 Donghee Na 提供。bpo-38901: 当您指定prompt='.'或等效地使用python -m venv --prompt . ...时,当前目录的basename将被用来设置创建的venv在激活时的提示符。
bpo-39288: 添加
math.nextafter(): 返回 x 向 y 方向的下一个浮点数值。bpo-39259: 现在,如果给
POP3和POP3_SSL的构造函数的超时时间为零,它们会抛出一个ValueError,以防止创建非阻塞套接字。补丁由Donghee Na提供。bpo-39242: 将用于
NNTP新闻阅读器服务器示例和 nntplib 测试的 Gmane 域名从 news.gmane.org 更新为 news.gmane.io。bpo-35292: 将
SimpleHTTPRequestHandler.guess_type代理到mimetypes.guess_type,以便mimetypes.init被延迟调用,避免在导入http.server模块时产生不必要的开销。bpo-39239:
select.epoll.unregister()方法不再忽略EBADF错误。bpo-38907: 在http.server脚本中,恢复在Windows上绑定到IPv4。
bpo-39152: 修复ttk.Scale.configure([name])返回名称或所有选项的配置元组。Giovanni Lombardo贡献了部分补丁。
bpo-39198: 如果在
Logger.isEnabledFor中抛出异常(例如,由于 asyncio 超时或 stopit),logging全局锁可能不会被适当释放,导致死锁。 此更改用try...finally包装该代码块,以确保锁被释放。bpo-39191: 在
loop.run_until_complete()中开始新任务前检查是否有运行循环,以快速失败;它防止在引发异常之前新任务产生的副作用。bpo-38871: 在
lib2to3中正确地为包含 lambda 表达式的基于 filter 的语句加上括号。补丁由 Donghee Na 提供。bpo-39142:对 logging.config.dictConfig 进行了更改,以避免将具名元组的实例转换为 ConvertingTuple。假设命名元组过于专门化,不能像普通元组那样处理;如果具名元组的用户需要 ConvertingTuple 的功能,他们必须自己在具名元组类中实现。
bpo-39158:ast.literal_eval() 现在支持空集合。
bpo-39129:修复了
asyncio.TimeoutError的导入路径。bpo-39057:
urllib.request.proxy_bypass_environment()现在忽略前导点,并且不再忽略尾随换行符。bpo-39056:修复了在 -W 选项中处理无效警告类别的问题。如果不需要,不再导入 re 模块。
bpo-39055:当输入以单个
\n结尾时,带有validate=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和IMAP4_SSL现在在其构造函数中有一个可选的 timeout 参数。此外,open()方法现在也有一个可选的 timeout 参数。这一变更也应用到了IMAP4_SSL和IMAP4_stream的重写方法上。由 Donghee Na 提供补丁。bpo-35182: 修复了当子进程已经关闭了任何管道标准流但仍然继续运行时,
Popen.communicate()后续调用崩溃的问题。由 Andriy Maletsky 提供补丁。bpo-38630: 在 Unix 上,
subprocess.Popen.send_signal()现在会轮询进程状态。轮询减少了在进程已完成但subprocess.Popen.returncode属性仍为None且 pid 已被重新分配(回收)给一个新的不同进程时向错误进程发送信号的风险。bpo-38536: 移除了在使用
international=True和符号跟随值的区域设置时格式化货币中的尾部空格。例如,locale.currency(12.34, international=True)返回'12,34 EUR '而不是'12,34 EUR'。bpo-38473: 对通过
unittest.mock.attach_mock()附加的自动指定方法使用内部模拟的签名。由 Karthikeyan Singaravelan 提供补丁。bpo-38361: 修复了一个问题,即在没有参数调用
syslog.openlog()时,ident可能包含前导路径分隔符。bpo-38293: 向
property()对象添加copy.copy()和copy.deepcopy()支持。bpo-37958: 添加了 pstats.Stats.get_profile_dict() 方法,以 StatsProfile 实例的形式返回分析数据。
bpo-28367: 以下波特率的 Termios 魔法常量: - B500000 - B576000 - B921600 - B1000000 - B1152000 - B1500000 - B2000000 - B2500000 - B3000000 - B3500000 - B4000000 由 Andrey Smirnov 提供补丁。
文档¶
构建¶
IDLE¶
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-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() 不适当地使用了在异常处理程序中定义的令牌,这会在解析无效值时引发
UnboundLocalError。由Claudiu Popa提供补丁。bpo-38927: 在venv中使用
python -m pip而不是pip来升级依赖。bpo-26730: 修复
SpooledTemporaryFile.rollover()在文本模式下可能会损坏文件的问题。由Serhiy Storchaka提供补丁。bpo-38881: 当所有权重为零时,random.choices() 现在会引发 ValueError。
bpo-38876: 当从memo加载无效输入的项时,引发pickle.UnpicklingError。
之前的代码在Python和C实现中都引发了
KeyError。这是由于指定的无效输入索引在memo结构中不存在,而pickle在此结构中存储了它所见过的对象。格式错误的输入会导致从memo中进行BINGET或LONG_BINGET加载,由于确定的索引是伪造的,因此会引发KeyError。由Claudiu Popa提供补丁。bpo-38688: 调用函数
shutil.copytree将目录树从一个目录复制到另一个子目录会导致无限循环和RecursionError。添加了一个修复,消耗迭代器并创建要复制的条目列表,避免对新创建的目录进行递归。由Bruno P. Kinoshita提供补丁。bpo-38863: 改进
http.server中的is_cgi()函数,使其能够处理cgi目录是除根目录外的另一个目录的子目录的情况。bpo-37838:
typing.get_type_hints()正确处理了用functools.wraps()装饰的函数。bpo-38870: 将
ast.unparse()作为ast模块的一个函数公开,可用于反解析一个ast.AST对象,并生成一个字符串,该字符串在被解析时会生成一个等效的ast.AST对象。由 Pablo Galindo 和 Batuhan Taskaya 提供补丁。bpo-38859: AsyncMock 现在在 side_effects 可迭代对象耗尽时返回 StopAsyncIteration。由于 PEP-479,从协程中引发 StopIteration 异常是不可能的。
bpo-38857: AsyncMock 修复了返回值为可等待类型的问题。这还包括了那些恰好是可等待的 side_effect 可迭代值,并包装了返回可等待类型的可调用对象。在此之前,这些可等待对象是被等待而不是原样返回。
bpo-38834:
typing.TypedDict子类现在使用__required_keys__和__optional_keys__属性来跟踪哪些键是可选的,以便下游项目进行运行时验证。由 Zac Hatfield-Dodds 提供补丁。bpo-38821: 修复了
argparse在国际化错误消息时对于nargs设置为特殊(非整数)值的参数未处理的异常。由 Federico Bond 提供补丁。bpo-38820: 使 Python 与 OpenSSL 3.0.0 兼容。
ssl.SSLSocket.getpeercert()不再返回带有尾随换行符的 IPv6 地址。bpo-38811: 修复了
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.toolCLI 添加格式化 JSON 的空格选项。现在支持以下互斥选项:--indent用于设置空格缩进级别;--tab用于使用制表符缩进;--no-indent用于抑制换行;--compact用于抑制所有空格。默认行为仍与--indent=4相同。
文档¶
bpo-38928: 更正 venv 的
upgrade_dependencies()和--upgrade-deps的添加时机。bpo-38899: 更新文档,说明在 fish 下激活虚拟环境应使用
source,而非.,如 https://fishshell.com/docs/current/cmds/source.html 所述。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: 当使用
ssl.SSLSocket套接字调用不兼容的方法时,asyncio现在会引发TyperError。补丁由 Ido Michael 提供。bpo-36500: 在 Visual Studio 解决方案中添加了一个可选的 "regen" 项目,该项目将重新生成所有语法、标记和操作码。
Windows¶
macOS¶
bpo-37931: 修复了 OSX 动态构建中的一个崩溃问题,该问题发生在 Py_Finalize 后重新初始化 posix 模块时,如果环境自上次
import posix以来发生了变化。补丁由 Benoît Hudson 提供。
IDLE¶
C API¶
Python 3.9.0 alpha 1¶
发布日期: 2019-11-19
安全性¶
bpo-38722:
runpy现在使用io.open_code()来打开代码文件。由 Jason Killen 提供补丁。bpo-38418: 修复
os.system()的审计事件名称为os.system。bpo-38243: 在将文档页面渲染为 HTML 时,对
xmlrpc.server.DocXMLRPCServer的服务器标题进行转义。(由 Donghee Na 在 bpo-38243 中贡献。)bpo-38174: 将供应商化的 expat 库版本更新至 2.2.8,解决了 CVE-2019-15903。
bpo-37764: 修复了 email._header_value_parser.get_unstructured 在特定情况下进入无限循环的问题,这些情况包括电子邮件头部没有尾随空白,以及包含无效编码字的情况。由 Ashwin Ramaswami 提供补丁。
bpo-37461: 修复解析特别构造的电子邮件头部时出现的无限循环问题。补丁由 Abhilash Raj 提供。
bpo-37463: ssl.match_hostname() 不再接受 IPv4 地址后面附加额外文本,且仅接受不带尾随空格的四点表示法。某些 inet_aton() 实现会忽略空格及空格后的所有数据,例如 '127.0.0.1 whatever'。
bpo-37363: 为
ensurepip、ftplib、glob、imaplib、nntplib、pdb、poplib、shutil、smtplib、sqlite3、subprocess、telnetlib、tempfile和webbrowser以及os.listdir()、os.scandir()和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: 针对浮点数优化了
math.floor()、math.ceil()和math.trunc()。bpo-38640: 修复了编译器中的一个bug,该bug在总是为假的while循环中存在break语句和continue语句时会引发错误。由Pablo Galindo提供补丁。
bpo-38613: 优化了
dict_keys的一些集合操作 (例如|、^、和-)。d.keys() | other之前比set(d) | other慢,但现在它们的性能几乎相同。bpo-28029:
"".replace("", s, n)现在对于所有非零n返回s而不是空字符串。bytes和bytearray对象也有类似的更改。bpo-38535: 修复了装饰器中无参数调用的AST节点的行号和列偏移。
bpo-38525: 修复了在使用空
dict对象的反向迭代器时出现的段错误。由Donghee Na和Inada Naoki提供补丁。bpo-38469: 修复了一个bug,即在存在 global 关键字时,命名表达式的作用域未被正确解析。由Pablo Galindo提供补丁。
bpo-38437: 为解释器的调试版本(当设置
Py_DEBUG时)激活GC_DEBUG宏。由Pablo Galindo提供补丁。bpo-38379: 当垃圾回收器进行回收时,其中一些对象复活(在执行完终结器后可以从隔离的循环外部访问),不要阻止回收所有仍然无法访问的对象。由Pablo Galindo和Tim Peters提供补丁。
bpo-38379: 当循环垃圾回收(gc)运行终结器使无法访问的对象复活时,当前的 gc 运行结束,不收集任何循环垃圾。 然而,
collect()和get_stats()报告的统计信息声称所有发现的循环垃圾都被回收了,并且复活的对象也被回收了。 更改了统计信息以报告没有收集到任何对象。bpo-38392: 在调试模式下,
PyObject_GC_Track()现在会调用对象类型的tp_traverse()以确保对象有效:测试被tp_traverse()访问的对象是否有效。bpo-38210: 移除字典视图与空集之间不必要的交集和更新集操作。(由 Donghee Na 在 bpo-38210 中贡献。)
bpo-38402: 检查系统底层
crypt或crypt_r的错误。bpo-37474: 在 FreeBSD 上,Python 启动时不再调用
fedisableexcept()来控制浮点控制模式。该调用自 FreeBSD 6 起已无用处:它已成为默认模式。bpo-38006: 修复了一个由于弱引用和循环垃圾收集器交互导致的错误。我们必须清除垃圾中的任何弱引用,以防止它们的回调执行并导致崩溃。
bpo-38317: 修复警告选项的优先级:
PyConfig.warnoptions拥有最高优先级,如 PEP 587 所述。bpo-38310: 在主解释器循环中预测
BUILD_MAP_UNPACK_WITH_CALL->CALL_FUNCTION_EX操作码对。由 Brandt Bucher 提供补丁。bpo-36871: 改进了对模拟的 assert_has_calls 和 assert_has_awaits 方法的错误处理。修复了一个错误,其中在将预期调用绑定到模拟的规范时遇到的任何错误都被静默吞噬,导致误导性的错误输出。
bpo-11410: 通过使用 gcc >= 4.0 中可用的可见性属性,在 POSIX 和 Windows 上以统一的方式提供了更好的符号可见性控制。POSIX 构建文件已更新,以使用 -fvisibility=hidden 编译,最小化导出的符号。
bpo-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_VectorcallMethodC 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-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-38761: WeakSet现在被注册为collections.abc.MutableSet。
bpo-38716: logging: 将RotatingHandler的namer和rotator更改为类级别属性。这会阻止__init__在子类用同名方法定义它们的情况下将它们设置为None。
bpo-38713: 添加
os.P_PIDFD常量,可以传递给os.waitid()以等待Linux进程文件描述符。bpo-38692: 添加
asyncio.PidfdChildWatcher,一个特定于Linux的子监视器实现,它轮询进程文件描述符。bpo-38692: 将Linux的
pidfd_open系统调用暴露为os.pidfd_open()。bpo-38602: 向
fcntl模块添加常量F_OFD_GETLK、F_OFD_SETLK和F_OFD_SETLKW。由Donghee Na提供补丁。bpo-38334: 修复了在加密的
zipfile.ZipExtFile上向后查找的问题。bpo-38312: 添加
curses.get_escdelay()、curses.set_escdelay()、curses.get_tabsize()和curses.set_tabsize()函数 - 由 Anthony Sottile 提供。bpo-38586: 现在
fileConfig()正确设置了加载的处理程序的 .name。bpo-38565: 为 functools.lru_cache() 添加新的 cache_parameters() 方法,以更好地支持 pickle。
bpo-34679: asynci.ProactorEventLoop.close() 现在只在主线程中调用 signal.set_wakeup_fd()。
bpo-31202:
pathlib.WindowsPath.glob()的结果现在匹配字面部分的大小写。bpo-36321: 移除拼写错误的属性。3.8 的变更日志指出这将在 3.9 中移除。
bpo-38521: 修复了 statistics.NormalDist() 中的错误等式比较。
bpo-38493: 为
si_code添加了CLD_KILLED和CLD_STOPPED。由 Donghee Na 提供补丁。bpo-38478: 修复了
inspect.signature.bind()中的一个 bug,该 bug 导致处理与位置唯一参数同名的关键字参数时失败。由 Pablo Galindo 提供补丁。bpo-33604: 修复了
hmac.new和hmac.HMAC,当省略了 3.8 中现在必需的 digestmod 参数时,抛出 TypeError 而不是 ValueError。同时澄清了 hmac 模块的文档和文档字符串。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: 在 Python 的
stat模块实现中添加缺失的stat.S_IFDOOR,stat.S_IFPORT,stat.S_IFWHT,stat.S_ISDOOR(),stat.S_ISPORT(), 和stat.S_ISWHT()值。bpo-38422: 澄清 pathlib 后缀(es) 的文档字符串。
bpo-38405: 现在
typing.NamedTuple的嵌套子类可以被 pickle。bpo-38332: 防止在给定具有无效 content-type 编码的编码字 (encoded-word) 时由
_encoded_words.decode()抛出的KeyError一路传播到email.message.get()。bpo-38371: 弃用了
_tkinter.TkappType中的split()方法,转而推荐使用行为更加一致且可预测的splitlist()方法。bpo-38341: 将
smtplib.SMTPNotSupportedError添加到smtplib的导出名称中。bpo-38319: 在 socket 和 shutil 模块中使用的 sendfile() 在 32 位架构上对于 >= 2GiB 的文件会引发 OverflowError。(由 Giampaolo Rodola 提供补丁)
bpo-38242: 回滚新的 asyncio Streams API
bpo-13153: 现在使用操作系统原生编码在 Python 字符串和 Tcl 对象之间进行转换。这允许显示、复制和粘贴到剪贴板的 emoji 和其他非 BMP 字符。从现在开始,从 Tcl 到 Python 以及反向的字符串转换永远不会失败(除了 MemoryError)。
bpo-38019: 正确处理已关闭的 asyncio unix 管道的暂停/恢复读取。
bpo-38163: 子 mock 现在会检测它们的类型是同步还是异步的,异步子 mock 将是 AsyncMocks,同步子 mock 将是 MagicMock 或 Mock(取决于它们的父类型)。
bpo-38161: 从 AsyncMock 中移除 _AwaitEvent。
bpo-38216: 允许那些罕见的代码从
http.client库发送无效的 http 请求。bpo-30458 的修复导致了一些项目在测试它们在面对错误请求时的行为时依赖此能力的项目出现问题。bpo-38108: 现在,AsyncMock 上的任何同步魔术方法都返回一个 MagicMock。MagicMock 上的任何异步魔术方法都返回一个 AsyncMock。
bpo-38265: 更新
os.pread()的 length 参数,接受Py_ssize_t而不是 int。bpo-38112:
compileall具有更高的默认递归限制和新的命令行参数,用于路径操作、符号链接处理和多级优化。bpo-38248: asyncio: 修复了立即任务取消不一致的问题
bpo-38237: 内置 pow 函数的参数更具描述性。现在也可以通过关键字传递这些参数。
bpo-34002: 通过将 while-pop 改为 for 循环,使用 isdisjoint 而不是集合交集,提高了 email 包中部分的效率。
bpo-38191:
NamedTuple和TypedDict类型的构造函数现在接受任意关键字参数名称,包括 "cls"、"self"、"typename"、"_typename"、"fields" 和 "_fields"。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-38142: _hashlib OpenSSL包装器扩展模块现在符合PEP-384标准。
bpo-9216: hashlib构造函数现在支持usedforsecurity标志,以指示哈希算法不用于安全上下文。
bpo-36991: 修复了在某些不支持的输入错误情况下,ZipFile.extract()可能错误地抛出AttributeError异常的问题。
bpo-38134: 移除了过时的PBKDF2_HMAC_fast副本。所有支持的OpenSSL版本都包含快速实现。
bpo-38132: OpenSSL的hashlib包装器使用了更简单的实现。几个宏和无用的缓存已被移除。哈希名称现在来自OpenSSL的EVP。算法名称保持不变,除了现在总是小写。
bpo-38008: 修复了协议中的父类检查,以正确识别提供内置协议的模块,而不是假设它们都来自
collections.abc模块。bpo-34037: 对于
asyncio,添加了一个新的协程loop.shutdown_default_executor()。这个新协程提供了一个API来安排执行器的关闭,等待线程池关闭完成。此外,asyncio.run()已被更新以利用这个新协程。补丁由Kyle Stanley提供。bpo-37405: 通过返回1元组而不是字符串,修复了非CAN_ISOTP AF_CAN地址族套接字的socket.getsockname()的回归错误。
bpo-38121: 更新了importlib.metadata中函数的参数名称,与importlib_metadata 0.22版本的更改相匹配。
bpo-38110: os.closewalk() 实现现在在可用平台上使用 libc fdwalk() API。
bpo-38093: 修复 AsyncMock,使其在使用 AsyncContextManagers 或 AsyncIterators 时不会崩溃。
bpo-37488: 向
datetime.utctimetuple(),datetime.utcnow()和datetime.utcfromtimestamp()添加警告。bpo-35640: 允许将 path-like object 作为
directory参数传递给http.server.SimpleHTTPRequestHandler类。由 Géry Ogam 提供的补丁。bpo-38086: 使用来自 importlib_metadata 0.21 的更改更新 importlib.metadata。
bpo-37251: 移除 AsyncMock 中的
__code__检查,该检查错误地将函数规范评估为异步对象,但未能评估定义了__await__但没有__code__属性的类为异步对象。bpo-38066: 隐藏 asyncio.Stream 的内部方法:feed_eof(), feed_data(), set_exception() 和 set_transport()。
bpo-38059: inspect.py 现在使用 sys.exit() 而不是 exit()。
bpo-37953: 在
typing中,改进了ForwardReferences的__hash__和__eq__方法。bpo-38026: 修复了
inspect.getattr_static()在使用isinstance时应避免动态查找的问题。bpo-35923: 更新
importlib.machinery.BuiltinImporter以使用loader._ORIGIN而不是硬编码值。由 Donghee Na 提供的补丁。bpo-38010: 在
importlib.metadata中与importlib_metadata0.20 同步,澄清files()的行为并修复requires()在dist-info包上只返回一个要求的问题。bpo-38006: weakref.WeakValueDictionary 定义了一个局部 remove() 函数,用作弱引用的回调。这个函数是通过闭包创建的。修改实现以避免闭包。
bpo-37995: 向
ast.dump()添加了 indent 选项,允许其产生多行缩进的输出。bpo-34410: 修复了重新进入
tee()迭代器时的崩溃问题。现在在这种情况下会抛出 RuntimeError。bpo-37140: 修复了 Python 3.8 的一个 ctypes 回归问题。当 ctypes.Structure 通过拷贝传递给函数时,ctypes 内部创建了一个临时对象,这个临时对象的副作用是调用了结构体的终结器(__del__)两次。Python 语义要求终结器只被调用一次。修复 ctypes 内部不再两次调用终结器。
bpo-37587: 当 JSON 字符串中有许多反斜杠转义字符时,
_json.scanstring现在快了多达 3 倍。bpo-37834: 防止在没有 fd 系统调用支持的非 Windows 系统(如旧版本的 macOS)上构建时 shutil.rmtree 抛出异常。
bpo-10978: 信号量和 BoundedSemaphores 现在可以一次释放多个等待的线程。
bpo-37972:
unittest.mock.call对象的下标现在接收与其他自定义属性相同的链式机制,因此以下用法不再引发TypeError:call().foo().__getitem__('bar')由 blhsing 提供补丁
bpo-37965: 修复由 distutils.ccompiler.CCompiler.has_function 引起的 C 编译器警告。
bpo-37960: 缓冲流和文本流的
repr()现在在获取 "name" 和 "mode" 属性值时只静默预期的异常。bpo-37961: 向 tracemalloc 模块收集的跟踪添加一个
total_nframe字段。这个字段表示在被截断之前的原始帧数。bpo-37951: subprocess 模块的大部分功能现在在子解释器中再次可用。 仅在子解释器中限制了 preexec_fn。
bpo-36205: 修复time.process_time()的rusage实现,正确报告系统和用户CPU时间的总和。
bpo-37950: 修复
ast.dump()在调用未完全初始化的节点时的行为。bpo-34679: 恢复从非主线程实例化Windows IOCP事件循环的能力。
bpo-36917: 添加
ast.NodeVisitor.visit_Constant()方法的默认实现,该方法发出弃用警告并调用相应的方法visit_Num()、visit_Str()等。bpo-37798: 更新test_statistics.py以验证statistics模块在C和Python实现中都能良好工作。由Donghee Na提供补丁。
bpo-26589: 向http模块添加了一个新的状态码:451 UNAVAILABLE_FOR_LEGAL_REASONS。
bpo-37915: 修复在比较
datetime.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: 为 statistics.NormalDist.inv_cdf() 添加 C 快速路径。由 Donghee Na 提供补丁。
bpo-37804: 移除已弃用的方法
threading.Thread.isAlive()。由 Donghee Na 提供补丁。bpo-37819: 添加 Fraction.as_integer_ratio() 以匹配 bool、int、float 和 decimal 中的相应方法。
bpo-14465: 为美化打印 XML 树添加 xml.etree.ElementTree.indent() 函数。由 Stefan Behnel 贡献。
bpo-37810: 修复
difflib在处理制表符时 diff 输出中的?提示。由 Anthony Sottile 提供补丁。bpo-37772: 在
zipfile.Path中,添加隐式目录时,确保添加祖先目录并排除重复项。bpo-18578: 将
test.bytecode_helper重命名为并记录为test.support.bytecode_helper。由 Joannah Nanjekye 提供补丁。bpo-34488:
io.BytesIO的writelines()方法在传递许多小行时现在稍微快一些。由 Sergey Fedoseev 提供补丁。bpo-37449:
ensurepip现在使用importlib.resources.read_binary()而不是pkgutil.get_data()来读取数据。由 Joannah Nanjekye 提供补丁。bpo-28292: 将calendar.py中的辅助函数标记为私有。这遵循了PEP 8的指导原则,保持了模块中的风格约定,并解决了一个已知的用户困惑案例。
bpo-18049: 在Python/thread_pthread.h中为AIX添加THREAD_STACK_SIZE的定义。默认的线程堆栈大小导致了在默认递归限制下的崩溃。由M Felt提供补丁。
bpo-37742: logging.getLogger() API现在在传递名称'root'时返回根日志记录器,而之前它返回一个名为'root'的非根日志记录器。这可能会影响那些明确需要一个名为'root'的非根日志记录器,或者在某些名为'root.py'的顶级模块中使用logging.getLogger(__name__)实例化日志记录器的用户代码。
bpo-37738: 修复 curses
addch(str, color_pair)的实现:将颜色对传递给setcchar(),而不是总是传递 0 作为颜色对。bpo-37723: 修复了在解析包含巨大字符集的正则表达式时的性能回归。补丁由Yann Vaginay提供。
bpo-35943: 函数
PyImport_GetModule()现在确保它返回的任何模块都已完全初始化。补丁由Joannah Nanjekye提供。bpo-37268:
parser模块已被弃用,并将在Python的未来版本中移除。bpo-37685: 修复了
datetime.timedelta和datetime.timezone的比较。bpo-37697: 将
importlib.metadata与 importlib_metadata 0.19 同步,改进了对 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-36324: 将 statistics.NormalDist() 的内部属性设为私有。
bpo-37555: 修复
NonCallableMock._call_matcher当self._spec_signature存在时返回元组而不是_Call对象的问题。由 Elizabeth Uselton 提供补丁。bpo-29446: 使
from tkinter import *仅导入预期的对象。bpo-16970: 当传递无效值给 nargs 时添加一个值错误。由 Robert Leenders 提供补丁。
bpo-34443:
enum的异常现在在异常消息中使用枚举类的__qualname__而不是__name__。bpo-37491: 修复在解析具有意外结束的裸引用字符串值的电子邮件头时出现的
IndexError。由 Abhilash Raj 提供补丁。bpo-37587: 使 json.loads 对长字符串的处理更快。(由 Marco Paolini 提供补丁)
bpo-18378: 将 "UTF-8" 识别为 locale._parse_localename 中 LC_CTYPE 的有效值。
bpo-37579: 在Python的
__eq__实现中,当比较的对象不是同一类型时,对于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: 修复了在使用
subprocess.run()进行超时设置并捕获输出时可能出现的挂起问题。如果子进程生成了自己的子进程或以其他方式将其stdout或stderr句柄与另一个进程连接,我们可能会在达到超时并杀死子进程后,在尝试从管道读取最终输出时挂起。bpo-37421: 修复
multiprocessing.util.get_temp_dir()的终结器:同时清除当前进程的'tempdir'配置,以便下次调用get_temp_dir()时将创建新的临时目录,而不是重用已删除的临时目录。bpo-37481: Python 3.8中已弃用distutils的
bdist_wininst命令,改用bdist_wheel(wheel包) 。bpo-37479: 当在派生类中重写
Enum.__str__时,无论是否存在混入类,Enum.__format__都将使用该重写。bpo-37440: http.client 现在为默认上下文或如果向 HTTPSConnection 传递了 cert_file,则启用 TLS 1.3 握手后认证。
bpo-37437: 更新了供应商化的 expat 版本到 2.2.7。
bpo-37428: SSLContext.post_handshake_auth = True 不再为客户端连接设置 SSL_VERIFY_POST_HANDSHAKE 验证标志。虽然该选项被记录为对客户端忽略,但当该标志设置时,OpenSSL 隐式启用了证书链验证。
bpo-37420:
os.sched_setaffinity()现在正确处理了在其mask参数迭代过程中出现的错误。由 Brandt Bucher 提供补丁。bpo-37412:
os.getcwdb()函数现在在 Windows 上使用 UTF-8 编码,而不是 ANSI 代码页:参见 PEP 529 的理由。该函数在 Windows 上不再被弃用。bpo-37406: 如果操作参数类型不是 str,sqlite3 模块现在会抛出 TypeError,而不是 ValueError:execute()、executemany() 和调用连接时。
bpo-29412: 修复了在解析意外结束的头值时引发的 IndexError。由 Abhilash Raj 提供补丁。
bpo-36546: statistics.quantiles() 的 dist 参数现在仅为位置参数。当前名称没有反映该参数可以是数据集或分布。将参数标记为位置参数避免了混淆,并使得以后可以更改名称。
bpo-37394: 修复了一个导致
queue模块在加速器模块不可用时失败的 bug。由 Pablo Galindo 提供补丁。bpo-37376:
pprint现在支持types.SimpleNamespace。由 Carl Bordum Hansen 提供补丁。bpo-26967: 一个带有
allow_abbrev=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: 为 UDPLITE 套接字添加正式支持。之前已有支持,但现在更容易通过
hasattr(socket, 'IPPROTO_UDPLITE')检测支持,并为每个需要的值定义了常量:socket.IPPROTO_UDPLITE、UDPLITE_SEND_CSCOV和UDPLITE_RECV_CSCOV。由 Gabe Appleton 提交的补丁。bpo-37358: 通过使用 vectorcall 优化了
functools.partial。bpo-37347: 如果
sqlite3.Connection.create_aggregate()、sqlite3.Connection.create_function()、sqlite3.Connection.set_authorizer()、sqlite3.Connection.set_progress_handler()和sqlite3.Connection.set_trace_callback()方法被用相同的对象但不是同一个对象调用两次,会导致段错误。现在回调的存储更加谨慎。由 Aleksandr Balezin 提交的补丁。bpo-37163:
dataclasses.replace()的 obj 参数现在是仅位置参数。bpo-37085: 在 socket 模块中添加了可选的 Linux SocketCAN 广播管理器常量,用作配置 BCM 行为的标志。由 Karl Ding 提交的补丁。
bpo-37328:
HTMLParser.unescape已被移除。它自 Python 3.4 起未记录且被弃用。bpo-37305: 将 .webmanifest -> application/manifest+json 添加到识别的文件类型和内容类型头列表中。
bpo-37320:
aifc.openfp()到aifc.open()的别名、sunau.openfp()到sunau.open()的别名、以及wave.openfp()到wave.open()的别名已被移除。它们自 Python 3.7 起被弃用。bpo-37315: 弃用在
math.factorial()中接受整数值的浮点数(如5.0)。bpo-37312:
_dummy_thread和dummy_threading模块已被移除。这些模块自 Python 3.7 起已被弃用,因为 Python 3.7 需要线程支持。bpo-33972: 对于设置为
multipart/*但只有单一部分的电子邮件,不再引发 AttributeError。bpo-37280: 在 sendfile 后备模式中,使用线程池从文件读取。
bpo-37279: 修复在 sendfile 后备模式中发送额外数据时的 asyncio sendfile 支持。
bpo-19865: 在具有 16 位
wchar_t的平台(例如 Windows 和 AIX)上,ctypes.create_unicode_buffer()现在也支持非 BMP 字符。bpo-37266: 在子解释器中,现在尝试生成守护线程会引发异常。子解释器从未支持守护线程。之前,如果守护线程仍在运行,子解释器终止时会因 Python 致命错误而崩溃。
bpo-37210: 允许
pickle的纯 Python 实现即使在 C_pickle模块不可用时也能正常工作。bpo-21872: 修复
lzma模块解压数据不完整的问题。当解压 FORMAT_ALONE 格式的文件且没有结束标记时,有时最后的一些字节无法输出。由马林提供补丁。bpo-35922: 修复
RobotFileParser.crawl_delay()和RobotFileParser.request_rate(),当 robots.txt 文件中没有定义相关规则时返回None而不是引发AttributeError。由 Rémi Lapeyre 提供补丁。bpo-35766: 将 feature_version 的格式更改为 (major, minor) 元组。
bpo-36607: 消除了当内部任务弱集合在迭代期间被另一线程修改时由
asyncio.all_tasks()引发的RuntimeError。bpo-18748: 如果获取
closed属性失败,_pyio.IOBase析构函数现在不执行任何操作,以便更好地模拟_io.IOBase终结器。bpo-36402: 修复 Python 关闭时等待线程的竞争条件。等待所有非守护线程的 Python 线程状态被删除(加入所有非守护线程),而不仅仅是等待非守护 Python 线程完成。
bpo-37206: 无法表示为 Python 对象的默认值不再在函数签名中错误地表示为
None。bpo-37111: 向
logging.basicConfig添加了encoding和errors关键字参数。bpo-12144: 确保在
CookieJar.make_cookies()中处理带有expires属性的 cookies。bpo-34886: 修复
subprocess.run()在检查 input 和 stdin 或 capture_output 和 stdout 或 stderr 参数冲突时,当它们被显式提供但值为None时无意中引发的 ValueError,这些值是通过传入的**kwargs字典而非直接通过名称传递的。由 Rémi Lapeyre 提供补丁。bpo-37173:
inspect.getfile()的异常消息现在正确地报告传递的类而非 builtins 模块。bpo-37178: 给 math.perm() 添加了一个单参数形式,其含义与 math.factorial() 相同。
bpo-37178: 对于 math.perm(n, k),让 k 默认为 n,给出与阶乘相同的结果。
bpo-37165: 将 _collections._count_elements 转换为使用 Argument Clinic。
bpo-34767: 不在
asyncio.Lock中总是创建一个collections.deque。bpo-37158: 通过从函数切换到生成器来加速 statistics.fmean()。
bpo-34282: 移除
Enum._convert方法,已在 3.8 版本中弃用。bpo-37150:
argparse._ActionsContainer.add_argument现在会在有人意外传递 FileType 类对象而非 FileType 实例作为type参数时抛出错误。bpo-28724: socket 模块现在有
socket.send_fds()和socket.recv.fds()方法。由 Joannah Nanjekye、Shinya Okano 和 Victor Stinner 贡献。bpo-35621: 支持在UNIX上线程中运行事件循环时执行asyncio子进程。
bpo-36520: 现在,带有UTF-8字符的长电子邮件头在折叠时能够正确编码。由Jeffrey Kintscher提供补丁。
bpo-30835: 修复了电子邮件解析中的一个错误,其中多部分消息中内容传输编码含有无效字节可能导致AttributeError。由Andrew Donnellan提供补丁。
bpo-31163: pathlib.Path实例的rename和replace方法现在返回新的Path实例。
bpo-25068:
urllib.request.ProxyHandler现在将传递的字典的键转换为小写。bpo-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提供补丁
bpo-36564: 修复了当邮件策略的 max_line_length 不足以包含所需标记和消息中的任何值时触发的电子邮件头折叠逻辑中的无限循环。 由 Paul Ganssle 提供补丁。
bpo-36543: 移除了 Element.getchildren()、Element.getiterator() 和 ElementTree.getiterator() 方法以及 xml.etree.cElementTree 模块。
bpo-36409: 移除了在 Python 3.4 中已弃用的旧 plistlib API。
bpo-36302: distutils 对源文件列表进行排序,使得默认情况下 Extension .so 文件的构建更具可重复性。
bpo-36250: 在非主线程中,忽略来自
signal与interaction的ValueError。bpo-36046: 向 subprocess.Popen 构造器添加了
user、group和extra_groups参数。由 Patrick McLean 提供补丁。bpo-32627: 修复了当包含冲突的
_uuid头时导致的编译错误。bpo-35800: 弃用
smtpd.MailmanProxy并准备在未来移除。bpo-35168:
shlex.shlex.punctuation_chars现在是一个只读属性。bpo-8538: 向 argparse 添加了对布尔型动作的支持,如
--foo和--no-foo。 由 Rémi Lapeyre 提供补丁。bpo-20504: 修复了
cgi模块中当 multipart/form-data 请求没有Content-Length标头时的一个程序错误。bpo-25988:
collections.abc中的抽象基类不再暴露在常规的collections模块中。bpo-11122: Distutils 不会仅在指定的路径中检查 rpmbuild。
bpo-34775: 当传递的不是 str 或 PurePath 的实例时,PurePath 的除法处理现在返回 NotImplemented 而不是引发 TypeError。 由 Roger Aiudi 提供补丁。
bpo-34749:
binascii.a2b_base64()现在快了 2 倍。 由 Sergey Fedoseev 提供补丁。bpo-34519: 为 HP Roman 8 添加了额外的别名。 由 Michael Osipov 提供补丁。
bpo-28009: 修复在MAC地址分隔符为'.'的平台以及MAC地址值中省略前导0的MAC地址格式情况下uuid.getnode()的问题。目前,AIX是唯一已知具有这些设置的平台。由Michael Felt提供补丁。
bpo-30618: 添加
readlink()。由Girts Folkmanis提供补丁。bpo-32498: 使
urllib.parse.unquote()除了接受字符串外还能接受字节串。补丁由 Stein Karlsen 提供。bpo-33348: lib2to3现在可以识别在
*和**之后的表达式,例如f(*[] or [])。bpo-32689: 更新
shutil.move()函数以允许使用Path对象作为源参数。由Emily Morehouse和Maxwell "5.13b" McKinnon提供补丁。bpo-32820: 为IPv4和IPv6类添加了
__format__。总是输出一个完全零填充的字符串。支持b/x/n修饰符(bin/hex/native格式)。IPv4的本机格式是bin,IPv6的本机格式是hex。还支持'#'和'_'修饰符。bpo-27657: 修复带有数字路径的urllib.parse.urlparse()。像"path:80"这样的字符串不再被解析为路径,而是被解析为方案("path")和路径("80")。
bpo-4963: 修复了与mimetypes扩展映射和模块重新初始化相关的非确定性行为。
文档¶
bpo-21767: 在functools.singledispatch中明确提及abc支持。
bpo-38816: 提供了关于
fork()与CPython运行时之间交互的更多细节,仅关注C-API。这包括关于在何处应该和不应该调用fork()的警告。bpo-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-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: 修复
importlib示例,通过 importlib.util.module_from_spec() 立即将新创建的模块插入 sys.modules,而不是在调用 loader.exec_module() 之后。感谢 Benjamin Mintz 发现这个错误。
bpo-37456: 斜杠 ('/') 现在成为语法的一部分。
bpo-37487: 修正 PyList_GetItem 索引描述以包含 0。
bpo-37149: 将死链接 Tkinter 8.5 参考(作者:John Shipman, New Mexico Tech)替换为 archive.org 的副本链接。
bpo-37478: 在 os.chdir() 的描述中添加了可能的异常。
bpo-34903: 在文档中说明了
datetime.datetime.strptime()中某些两位数字格式的前导零是可选的。补丁由 Mike Gleen 提供。bpo-36260: 在 zipfile 模块文档中添加了解压缩的陷阱。
bpo-37004: 在 difflib 的文档中,添加了一个明确警告,指出 SequenceMatcher 的 ratio 方法的结果可能依赖于输入字符串的顺序。
bpo-36960: 重构了
datetime文档,旨在使其更加用户友好并提高可读性。由 Brad Solomon 提供补丁。bpo-36487: 在 C-API 文档中明确了“主”解释器的含义。
bpo-23460: 更新了使用
:g说明符进行十进制字符串格式化的文档,以反映正确的指数表示法截止点。原始由 Tuomas Suutari 提供补丁。bpo-35803: 记录并测试了
tempfile函数可能接受一个 path-like object 作为dir参数。由 Anthony Sottile 提供补丁。bpo-33944: 添加了关于 .pth 文件中代码预期用途的说明。
bpo-34293: 修复了 Doc/Makefile 关于 PAPER 环境变量和 PDF 构建的问题。
bpo-25237: 为 tkinter 模块添加文档。
测试¶
bpo-38614: 修复了 test_asyncio.test_subprocess 的 test_communicate():使用
support.LONG_TIMEOUT(5 分钟) 而不是仅 1 分钟。bpo-38614: 向
test.support添加超时常量:LOOPBACK_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: 为 json.dump(..., skipkeys=True) 添加测试。由 Donghee Na 提供补丁。
bpo-37531: 增强 regrtest 多进程超时功能:在终止工作进程时写入消息,捕获 popen.kill() 和 popen.wait() 异常,对第二次调用 popen.communicate() 设置超时。
bpo-37876: 为 ROT-13 编解码器添加测试。
bpo-36833: 为
datetime模块的 C API 中的PyDateTime_xxx_GET_xxx()宏添加测试。由 Joannah Nanjekye 提供补丁。bpo-37558: 修复 test_shared_memory_cleaned_after_process_termination 名称处理
bpo-37526: 添加
test.support.catch_threading_exception():使用threading.excepthook()捕获threading.Thread异常的上下文管理器。bpo-37421: test_concurrent_futures 现在如果 ForkServer 实例正在运行,则明确停止它。
bpo-37421: 多进程测试现在如果 ForkServer 实例正在运行,则停止它:关闭“alive”文件描述符以请求服务器停止,然后移除其 UNIX 地址。
bpo-37421: test_distutils.test_build_ext() 现在能够在 Windows 上移除临时目录:不在当前进程中导入新构建的 C 扩展(“xx”),而是在一个单独的进程中测试它。
bpo-37421: test_concurrent_futures 现在清理多进程以立即移除由 multiprocessing.util.get_temp_dir() 创建的临时目录。
bpo-37421: test_winconsoleio 不再泄漏临时文件:使用 tempfile.TemporaryFile() 在测试完成时移除它。
bpo-37421: 多进程测试现在明确调用
_run_finalizers()以立即移除测试创建的临时目录。bpo-37421: urllib.request 测试现在调用
urlcleanup()来移除由urlretrieve()测试创建的临时文件,并清除由urlopen()和间接调用urlopen()的函数设置的_opener全局变量。bpo-37472: 移除
Lib/test/outstanding_bugs.py。bpo-37199: 修复当 IPv6 不可用或禁用时的测试失败问题。
bpo-19696: 在 "test_pkg_import.py" 中用 "random.choice" 替换已弃用的方法 "random.choose"。
bpo-37335: 从 c 语言环境强制测试中移除不再必要的代码。
bpo-37421: 修复 test_shutil 以不再泄漏临时文件。
bpo-37411: 修复 test_wsgiref.testEnviron() 以不再依赖环境变量(如果设置了 "X" 变量也不会失败)。
bpo-37400: 修复 test_os.test_chown():使用 os.getgroups() 而不是 grp.getgrall() 来获取组。同时将测试重命名为 test_chown_gid()。
bpo-37359: 向 python3 -m test 添加 --cleanup 选项以移除之前失败作业的
test_python_*目录。添加 "make cleantest" 以运行python3 -m test --cleanup。bpo-37362: 如果 test_gdb 在 stderr 上接收到“意外”消息,它不再失败:现在它会忽略 stderr。test_gdb 的目的是测试 python-gdb.py 命令是否按预期工作,而不是测试 gdb。
bpo-35998: 在 test_asyncio: test_start_tls_server_1() 中避免 TimeoutError。
bpo-37278: 修复 test_asyncio ProactorLoopCtrlC:加入线程以防止泄漏运行中的线程和引用。
bpo-37261: 修复
test.support.catch_unraisable_exception():它的 __exit__() 方法现在忽略在清除其unraisable属性时引发的不可捕获异常。bpo-37069: regrtest 现在使用
sys.unraisablehook()来标记测试为“环境已更改”(ENV_CHANGED),如果它发出了“不可捕获的异常”。此外,regrtest 在这种情况下会记录一个警告。使用
python3 -m test --fail-env-changed来捕获测试中的不可捕获异常。bpo-37252: 修复devpoll测试中
test_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现在对所有仍存在的
sysconfig.get_config_var()调用使用getvar()。由Joannah Nanjekye提供补丁。bpo-37415: 修复ICC编译器的stdatomic.h头文件检查:ICC实现缺少Python所需的atomic_uintptr_t类型。
bpo-38301: 在Solaris系列中,我们必须确保使用
-D_REENTRANT。由Jesús Cea Avión提供补丁。bpo-36002: 使用
AC_PATH_TOOL而非AC_PATH_TARGET_TOOL定位llvm-profdata和llvm-ar二进制文件。bpo-37936:
.gitignore文件系统地“根植”所有规则,规则末尾不带斜杠,这些规则旨在应用于仓库中特定位置的文件。以前,当要忽略的文件恰好在仓库的根目录时,我们经常会意外地忽略树中任何地方同名的文件和目录。bpo-37760: 用于将Unicode字符数据库中的信息转换为由
str方法和unicodedata模块使用的生成代码和数据的脚本Tools/unicode/makeunicodedata.py,现在将每个字符的数据作为一个具有命名属性的dataclass处理,而不是一个长度为18的不同字段列表。bpo-37936:
.gitignore文件不再适用于实际上在Git仓库中被跟踪的任何文件。由Greg Price提供补丁。bpo-37725: 更改“clean”makefile目标,以同时清除程序引导优化(PGO)数据。以前,您必须使用“make clean”和“make profile-removal”,或者“make clobber”。
bpo-37707: 标记一些单独的测试在使用--pgo时跳过。标记的测试显著增加PGO任务时间,并且可能无助于改进最终可执行文件的优化。
bpo-36044: 减少为PGO生成任务运行的单元测试数量。这使任务速度提高了约15倍。运行完整的单元测试套件很慢。这一变化可能导致构建稍微不那么优化,因为不会执行那么多代码分支。如果您愿意等待更慢的构建,可以使用'./configure [..] PROFILE_TASK="-m test --pgo-extended"'恢复旧行为。我们不保证哪个PGO任务集会产生更快的构建。关心的用户应该运行自己的相关基准测试,因为结果可能依赖于环境、工作负载和编译器工具链。
bpo-37468:
make install不再安装distutils bdist_wininst使用的wininst-*.exe文件:bdist_wininst仅在Windows上工作。bpo-37189: 许多
PyRun_XXX()函数如PyRun_String()不再错误地导出在libpython38.dll中。 再次导出它们以修复 ABI 兼容性。bpo-25361: 在Windows 32位构建中启用SSE2指令的使用。
bpo-36210: 更新AIX的可选扩展模块检测。osssaudiodev和spwd不适用于AIX,不再报告为缺失。第三方打包的ncurses(支持ASIS)与官方支持的AIX curses库冲突,因此配置AIX使用libcurses.a。但是,跳过尝试构建_curses_panel。
由M Felt提供补丁
Windows¶
bpo-38589: 修复当Windows未安装在C盘时的HTML帮助快捷方式
bpo-38453: 确保ntpath.realpath()正确解析相对路径。
bpo-38519: 恢复nuget.org和Microsoft Store包中缺失的内部C头文件。
bpo-38492: 移除
pythonw.exe对Microsoft C++运行时的依赖。bpo-38344: 修复activate.bat中的错误消息
bpo-38359: 确保
pyw.exe启动器读取正确的注册表键。bpo-38355: 修复
ntpath.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-38020: 修复在调用
os.readlink()(或间接通过realpath()) 时,如果文件不是支持的链接可能导致崩溃的问题。bpo-37705: 改进
winerror_to_errno()的实现。bpo-1311: Windows 上的
nul文件现在从exists()返回 True,并从os.stat()返回一个有效结果,设置了S_IFCHR。bpo-9949: 在
os.realpath()中启用对符号链接的支持。bpo-37834: 在
os.lstat()中将 Windows 上的所有名称代理重解析点和其他重解析点在os.stat()中视为常规文件。bpo-36266: 在
_PyImport_FindSharedFuncptrWindows()中模块导入期间发生 DLL 加载失败时,在格式化的错误消息中添加模块名称。由 Srinivas Nyayapati 提供补丁。bpo-25172: 尝试在 Windows 上导入
crypt模块将导致ImportError,并附带一条解释该模块在 Windows 上不受支持的消息。在其他平台上,如果底层的_crypt模块不可用,ImportError 将包含一条解释该问题的消息。bpo-37778: 修复用于 Microsoft Store 包的文件关联的图标。
bpo-37734: 修复使用注册表值从 Microsoft Store 应用启动 Python 的问题。
bpo-37702: 修复在 Windows 上创建 SSLContext 对象或运行
urllib.request.urlopen('https://...')时的内存泄漏。bpo-37672: 将 Windows Store 包的 pip 切换到使用捆绑的
pip.ini而不是PIP_USER变量。bpo-10945: 正式放弃在非 Windows 系统上创建 bdist_wininst 安装程序的支持。
bpo-37445: 在
FormatMessageW()调用中包含FORMAT_MESSAGE_IGNORE_INSERTS标志。bpo-37369: 修复从 Microsoft Store 运行时
sys.executable的路径。bpo-37380: 在Windows上,不再通过
subprocess._active收集未完成的进程以供后续清理。由Ruslan Kuprieiev提供补丁。bpo-37351: 从标准的Windows发行版中移除libpython38.a。
bpo-35360: 更新Windows构建以使用SQLite 3.28.0。
bpo-36779: 确保在活动代码页设置为CP_UTF7或CP_UTF8时,Windows上的
time.tzname是正确的。bpo-32587: 使
winreg.REG_MULTI_SZ支持零长度字符串。bpo-28269: 将对
strcasecmp()的使用替换为系统函数_stricmp()。补丁由 Minmin Gong 提供。bpo-36590: 向socket模块添加原生蓝牙RFCOMM支持。
macOS¶
bpo-38117: 在macOS安装程序中更新OpenSSL至1.1.1d。
bpo-38089: 将Azure Pipelines迁移至最新的VM版本,并使macOS测试变为可选。
bpo-18049: 在macOS上将线程的默认堆栈大小从5MB增加到16MB,以匹配主线程的堆栈大小。这避免了线程深度递归时的崩溃。
bpo-34602: 通过在运行时不再调用resource.setrlimit来增加进程堆栈大小限制,避免在macOS上的测试套件失败。由于解释器正在构建为更大的默认堆栈大小,运行时更改不再需要。
bpo-35360: 更新macOS安装程序以使用SQLite 3.28.0。
bpo-34631: 在macOS安装程序中更新OpenSSL至1.1.1c。
IDLE¶
bpo-26353: 停止在保存IDLE shell窗口时添加新行。
bpo-4630: 添加一个选项来切换IDLE的shell、编辑器和输出窗口的光标闪烁。参见设置、常规、窗口首选项、光标闪烁。由Zackery Spytz提供补丁。
bpo-38598: 不尝试编译IDLE shell或输出窗口
bpo-36698: IDLE在向stderr写入不可编码的字符时不再失败。现在它会像常规的Python解释器一样用反斜杠转义它们。添加了标准流的
errors字段。bpo-35379: 退出IDLE时,捕获任何AttributeError。当EditorWindow.close被调用两次时会发生一次。当IDLE从终端运行时,打印回溯是无用且烦人的。
bpo-38183: 为避免问题,test_idle忽略用户配置目录。它不再尝试创建或访问.idlerc或其中的任何文件。用户必须运行IDLE来发现保存设置时的问题。
bpo-38077: IDLE在初始化用户命名空间时不再添加'argv'。此错误仅影响3.7.4和3.8.0b2至3.8.0b4版本。
bpo-38041: Shell重启行现在填满窗口宽度,始终以'='开头,并避免不必要的换行。如果包含的文件名相对于宽度较长,行仍会换行。
bpo-35771: 为避免在较慢的机器上偶尔出现的虚假 test_idle 失败,增加 test_tooltip 中的
hover_delay。bpo-37824: 正确处理IDLE shell中的用户输入警告。停止将SyntaxWarnings转为SyntaxErrors。
bpo-37929: 当没有shell窗口时,IDLE设置对话框现在能正确关闭。
bpo-37902: 为IDLE模块、路径和堆栈浏览器添加鼠标滚轮滚动。由George Zhang提供补丁。
bpo-37849: 修复了补全列表在当前行上方显示时过高或过低的问题。
bpo-36419: 重构IDLE自动补全并改进测试。
bpo-37748: 重新排序运行菜单。将最常见的选择,运行模块,放在顶部。
bpo-37692: 通过示例shell交互和改进的shell元素标签来改善高亮配置示例。
bpo-37628: 设置对话框不再随字体大小扩展。
bpo-37627: 使用最近一次输入的命令行参数初始化自定义运行对话框。用户可以在提交前选择编辑。
bpo-33610: 修复首次切换时代码上下文未显示正确上下文的问题。
bpo-37530: 优化代码上下文以减少不必要的后台活动。字体和高亮更改现在与文本更改同时进行,而不是在随机延迟后。
bpo-27452: 通过内联
RemoveFile和简化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()现在将sys.executable设置为程序完整路径 (Py_GetProgramFullPath()) 而不是程序名称 (Py_GetProgramName())。bpo-38234: Python忽略了传递给
Py_SetPath()、Py_SetPythonHome()和Py_SetProgramName()的参数:修复Python初始化以使用指定的参数。bpo-38205:
Py_UNREACHABLE()宏现在调用Py_FatalError()。bpo-38140: 通过PyMemberDef传递偏移量,使dict和weakref的偏移量对于C堆类型变得不透明。
bpo-15088: C函数
PyGen_NeedsFinalizing已被移除。它没有被记录、测试或在CPython中任何地方使用,在 PEP 442 的实现之后。由Joannah Nanjekye提供补丁。(由Joannah Nanjekye提供补丁)bpo-36763: 由
PySys_AddXOption()添加的选项现在与PyConfig.xoptions和命令行-X选项以相同的方式处理。bpo-37926: 修复
PySys_SetArgvEx(0, NULL, 0)中的崩溃。bpo-37879: 修复subtype_dealloc以在基类型为C堆类型时抑制类型递减引用计数。
bpo-37645: 添加了
_PyObject_FunctionStr()以获取类函数对象的用户友好字符串表示形式。补丁由 Jeroen Demeyer 提供。bpo-29548: 函数
PyEval_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-37337: 添加了用于调用方法的快速函数:
_PyObject_VectorcallMethod()、_PyObject_CallMethodNoArgs()和_PyObject_CallMethodOneArg()。bpo-28805: 已记录
METH_FASTCALL调用约定。bpo-37221: 新函数
PyCode_NewWithPosOnlyArgs()允许像PyCode_New()一样创建代码对象,但带有一个额外的 posonlyargcount 形参用于指明仅限位置形参的数量。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: 在实例化具有未重写的抽象方法的抽象类时,在错误消息中使用单数/复数名词。
Python 3.8.0 beta 1¶
发布日期: 2019-06-04
安全性¶
bpo-35907: CVE-2019-9948: 通过禁止在
urllib.request的URLopener().open()和URLopener().retrieve()中使用local-file://和local_file://URL 方案来避免文件读取。bpo-33529: 防止在电子邮件头编码中使用的fold函数在头中有太多非ASCII字符时进入无限循环。
bpo-33164: 更新了blake2实现,使用平台提供的安全memset实现。
核心与内置函数¶
bpo-35814: 允许在带注释的赋值的右侧进行解包。 特别是,现在允许
t: Tuple[int, ...] = x, y, *z。bpo-37126: 现在所有structseq对象都由垃圾收集器跟踪。由Pablo Galindo提交的补丁。
bpo-37122: 使代码对象的 co_argcount 属性表示位置参数的总数(包括仅限位置参数)。co_posonlyargcount 的值可用于区分哪些参数是仅限位置的,而差值(co_argcount - co_posonlyargcount)是位置或关键字参数的数量。由Pablo Galindo提交的补丁。
bpo-20092:
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:
bytes.hex、bytearray.hex和memoryview.hex方法以及binascii.hexlify和b2a_hex函数现在能够在十六进制字节之间包含可选的分隔符。 这一功能受到 MicroPython 的 hexlify 实现的启发。bpo-37032: 向代码类型(
types.CodeType)添加了新的replace()方法。bpo-37007: 在 Windows 上实现了
socket.if_nameindex()、socket.if_nametoindex()和socket.if_indextoname()。bpo-36829:
PyErr_WriteUnraisable()现在在没有当前回溯的情况下创建一个回溯对象。此外,调用PyErr_NormalizeException()和PyException_SetTraceback()以规范化异常值。忽略任何错误。bpo-36878: 仅当第一个字符是ASCII时才接受
# type: ignore之后的文本。这是为了不允许像# type: ignoreé这样的东西。bpo-36878: 将出现在
# type: ignore注释之后的文本存储在 AST 中。 例如,像# type: ignore[E1000]这样的类型忽略将在其 AST 节点中存储字符串"[E1000]"。bpo-2180: 由Anthony Sottile处理的,将EOF处的行延续视为
SyntaxError。bpo-36907: 修复了在调用带有关键字字典 (
f(**kwargs)) 的 C 函数并在该函数运行时更改字典kwargs时崩溃的问题。bpo-36946: 修复处理切片时可能出现的带符号整数溢出。
bpo-36826: 向ast_unparse.c添加NamedExpression种类支持。
bpo-1875: 如果将被优化掉的代码块(例如总是为假的if条件)包含语法错误,现在会引发
SyntaxError。由Pablo Galindo提供补丁。bpo-36027: 允许通过三参数
pow计算模逆:现在在第一个和第三个参数互质的情况下,允许第二个参数为负数。bpo-36861: 更新Unicode数据库至版本12.1.0。
bpo-28866: 避免缓存类型定义了mro()的类的属性,以避免硬缓存无效问题。
bpo-36851: 如果执行以返回结束且堆栈不为空,现在会正确清理
FrameType堆栈。bpo-34616:
compile()内置函数现在支持ast.PyCF_ALLOW_TOP_LEVEL_AWAIT标志,该标志允许编译包含顶层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()现在为异步函数前缀async。bpo-36084: 向threading.Thread对象添加原生线程ID(TID)(支持的平台:Windows、FreeBSD、Linux、macOS)
bpo-36035: 添加了针对与pathlib组合使用的损坏符号链接的修复。
bpo-35983: 添加了新的trashcan宏来处理当子类的
tp_dealloc调用基类的tp_dealloc且该基类使用trashcan机制时可能发生的双重释放问题。由Jeroen Demeyer提供补丁。bpo-20602: 在关闭期间不清除
sys.flags和sys.float_info。由Zackery Spytz提供补丁。bpo-32388: 移除tp_flags中的跨版本二进制兼容性要求。
bpo-31862: 将binascii移植到PEP 489多阶段初始化。由Marcel Plch提供补丁。
库¶
bpo-37128: 添加了
math.perm()。bpo-37120: 添加SSLContext.num_tickets以控制TLSv1.3会话票证的数量。
bpo-12202: 修复了
msilib.SummaryInformation.GetProperty()中的错误处理。补丁由 Zackery Spytz 提供。bpo-26835: fcntl 模块现在包含了用于 memfd 密封的文件密封常量。
bpo-29262: 向
typing模块添加了get_origin()和get_args()内省辅助函数。bpo-12639: 如果 keyfile 不为
None,msilib.Directory.start_component()不再失败。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: 修复了
_pyio.BytesIO和_pyio.TextIOWrapper的析构函数:尽早(在类体中)初始化它们的_buffer属性,因为调用close()的__del__()会使用该属性。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 命令
args现在显示仅位置参数。由 Rémi Lapeyre 提供补丁。bpo-36969: PDB 命令
args现在显示仅关键字参数。由 Rémi Lapeyre 提供补丁。bpo-36983: 向
typing.__all__添加缺失的名称:ChainMap、ForwardRef、OrderedDict- 由 Anthony Sottile 提供。bpo-36972: 向 typing 模块添加 SupportsIndex 协议,以允许类型检查检测可以传递给
hex()、oct()和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: 当在
ast.parse中使用type_comments=True时,将# type: ignore后跟非字母数字字符和任意文本的情况视为类型忽略,而不是仅允许空白或其他注释。这是为了允许像# type: ignore[E1000]这样的形式。bpo-36778:
cp65001编码(Windows 代码页 65001)成为utf_8编码的别名。bpo-36867: multiprocessing.resource_tracker 替换了 multiprocessing.semaphore_tracker 模块。除了信号量,resource_tracker 还跟踪 shared_memory 段。
bpo-30262:
sqlite3模块的Cache和Statement对象不向用户公开。由 Aviv Palivoda 提供补丁。bpo-24538: 在
shutil.copystat()中,首先复制扩展文件属性,然后复制文件权限,因为扩展属性只能在目标仍然可写时设置。bpo-36829: 新增
sys.unraisablehook()函数,可被重写以控制如何处理“无法处理的异常”。当异常发生但 Python 无法处理时调用该函数。例如,当析构函数引发异常或垃圾回收期间(gc.collect())。bpo-36832: 引入
zipfile.Path,一个兼容 pathlib 的包装器,用于遍历 zip 文件。bpo-36814: 修复 os.posix_spawnp() 在 file_actions 为 None 时错误地引发 TypeError 的问题。
bpo-33110: 当 Future 已经完成时,正确处理由 concurrent.futures 的 add_done_callback 添加的函数引发的异常。
bpo-26903: 将
ProcessPoolExecutor中的max_workers限制为 61,以绕过 WaitForMultipleObjects 的限制。bpo-36813: 修复
QueueListener在停止时调用queue.task_done()的问题。由 Bar Harel 提供补丁。bpo-36806: 禁止在asyncio包之外创建像StreamReader、StreamWriter、Process这样的异步流对象及其协议。
bpo-36802: 为StreamWriter.write()和StreamWriter.close()提供同步和异步调用。
bpo-36801: 在asyncio StreamWriter.drain()调用中正确处理SSL连接的关闭。
bpo-36785: 实现PEP 574(带有带外缓冲区的pickle协议5)。
bpo-36772: functools.lru_cache()现在可以直接用作装饰器,除了它现有的作为返回装饰器的函数的用法。
bpo-6584: 在
gzip模块中添加一个BadGzipFile异常。bpo-36748: 在
TextIOWrapper的 C 实现中优化了写缓冲。 使用 ascii、latin1 或 utf-8 编码向TextIOWrapper写入 ASCII 字符串的速度提高了约 20%。 由 Inada Naoki 提供补丁。bpo-8138: 不要将
wsgiref.simple_server.SimpleServer标记为多线程,因为wsgiref.simple_server.WSGIServer是单线程的。bpo-22640:
py_compile.compile()现在支持静默模式。由Joannah Nanjekye提供补丁。bpo-29183: 通过仅在未引发异常时调用
close()方法,修复了wsgiref.handlers.BaseHandler中的双重异常。bpo-36548: 改进了正则表达式标志的repr。
bpo-36542: 现在可以通过指定
__text_signature__属性来覆盖Python函数的签名。bpo-36533: 在fork的子进程中重新初始化logging.Handler锁,而不是尝试在父进程中获取所有锁,仅在子进程中释放。获取/释放模式导致在实现了任何形式的相互依赖的链式日志处理程序的代码中出现死锁,因为无法保证锁的获取顺序。
bpo-35252: 当使用singledispatch时,如果类型注释无效,抛出TypeError而不是AssertionError。
bpo-35900: 允许缩减方法返回一个6项元组,其中第6项指定一个自定义的状态设置方法,该方法将被调用以替代常规的
__setstate__方法。bpo-35900: 在 _pickle.c 中为函数和类启用自定义缩减回调注册,使用新的 Pickler 属性
reducer_overridebpo-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: 修复了当以
stdin=subprocess.PIPE调用且Popen失败时asyncio.SelectorEventLoop.subprocess_exec()泄漏文件描述符的问题。补丁由 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: 增加了关于
pty.spawn函数的文档细节。bpo-35397: 移除弃用并记录urllib.parse.unwrap()。由Rémi Lapeyre提供补丁。
bpo-32995: 在词汇表中添加了上下文变量。
bpo-33519: 澄清
copy()不是MutableSequenceABC的一部分。bpo-33482: 使
codecs.StreamRecoder.writelines接受字节列表。bpo-25735: 为func factorial添加了文档,以表明返回整数值。
bpo-20285: 扩展object.__doc__(文档字符串)以使其更清晰。修改pydoc.py,以便help(object)列出对象方法(对于其他类,help省略了object基类的方法)。
测试¶
bpo-37069: 修改test_coroutines、test_cprofile、test_generators、test_raise、test_ssl和test_yield_from,使用
test.support.catch_unraisable_exception()而非test.support.captured_stderr()。bpo-37098: 修复旧版Linux内核上的test_memfd_create。
bpo-37081: 使用OpenSSL 1.1.1c进行测试。
bpo-36829: 添加
test.support.catch_unraisable_exception(): 使用sys.unraisablehook()捕获不可报告异常的上下文管理器。bpo-36915: 主regrtest进程现在即使工作进程崩溃或在KeyboardInterrupt(CTRL+c)时被杀死,也会始终移除所有工作进程的临时目录。
bpo-36719: "python3 -m test -jN ..."现在在工作者进程崩溃(CHILD_ERROR状态)时继续执行下一个测试。以前,测试套件会立即停止。使用--failfast在第一个错误处停止。
bpo-36816: 更新Lib/test/selfsigned_pythontestdotnet.pem以匹配self-signed.pythontest.net的新TLS证书。
bpo-35925: 当现代操作系统或发行版默认的OpenSSL策略拒绝连接到证书较弱的服务器时,跳过httplib和nntplib的网络测试。
bpo-36782: 为
datetime模块中的几个C API函数添加测试。补丁由Edison Abahurire提供。bpo-36342: 如果平台缺少可正常工作的sem_open,则在test_venv中修复test_multiprocessing。
构建¶
bpo-36721: 要将 Python 嵌入到应用程序中,必须向
python3-config --libs --embed传递一个新的--embed选项以获取-lpython3.8(将应用程序链接到 libpython) 。 为了同时支持 3.8 及更早版本,首先尝试python3-config --libs --embed,如果前一个命令失败,则回退到python3-config --libs(不带--embed) 。增加一个 pkg-config
python-3.8-embed模块用来将 Python 嵌入到一个应用中:pkg-config python-3.8-embed --libs包含-lpython3.8。 要同时支持 3.8 和旧版本,请先尝试pkg-config python-X.Y-embed --libs并在此命令失败时回退到pkg-config python-X.Y --libs(即不带--embed) (请将X.Y替换为 Python 版本号)。另一方面,
pkg-config python3.8 --libs不再包含-lpython3.8。 C 扩展不应该链接到 libpython(除了在 Android 上,这种情况由脚本处理);这一变化是有意为之的向后不兼容。bpo-36786: "make install"现在并行运行compileall。
Windows¶
bpo-36965: 包含STATUS_CONTROL_C_EXIT而不依赖于MSC编译器
bpo-35926: 为Windows更新到OpenSSL 1.1.1b。
bpo-29883: 为Proactor Event Loop添加对UDP传输的Windows支持。由Adam Meily提供补丁。
bpo-33407: 对MSVC实现了
Py_DEPRECATED()宏。
macOS¶
bpo-36231: 支持在macOS上在没有安装/usr/include的情况下构建Python。从macOS 10.14开始,系统头文件仅通过Command Line Tools或Xcode应用程序提供的SDK可用。
IDLE¶
工具/示例¶
bpo-37053: 在Tools/parser/unparse.py中正确处理像u"bar"这样的字符串。由Chih-Hsuan Yen提供补丁。
C API¶
bpo-36379: 修复当在C中实现
__ipow__时尝试使用 modulo 参数导致的崩溃。bpo-37107: 更新
PyObject_CallMethodObjArgs()和_PyObject_CallMethodIdObjArgs以使用_PyObject_GetMethod,避免在许多情况下创建绑定方法对象。由 Michael J. Sullivan 提供补丁。bpo-36974: 实现 PEP 590: Vectorcall: CPython的快速调用协议。这是一个新的协议,用于优化自定义可调用对象的调用。
bpo-36763:
Py_Main()现在在调用PyErr_Print()时如果当前异常类型是SystemExit则返回退出码而不是调用Py_Exit(exitcode)。bpo-36922: 为行为类似于未绑定方法的对象添加新的类型标志
Py_TPFLAGS_METHOD_DESCRIPTOR。 这些对象支持由LOAD_METHOD/CALL_METHOD操作码给出的优化。 参见 PEP 590。bpo-36728:
PyEval_ReInitThreads()函数已从C API中移除。不应显式调用它:应改用PyOS_AfterFork_Child()。
Python 3.8.0 alpha 4¶
发布日期: 2019-05-06
安全性¶
bpo-36742: 修复urlsplit()中预规范化字符的处理错误。
bpo-30458: 通过不允许带有嵌入空格或控制字符的URL路径进入底层http客户端请求来解决 CVE-2019-9740。此类潜在的恶意头部注入URL现在会导致抛出http.client.InvalidURL异常。
bpo-35755:
shutil.which()现在如果可用且PATH环境变量未设置时,会使用os.confstr("CS_PATH")。同时从posixpath.defpath中移除当前目录。在 Unix 上,如果PATH环境变量未设置,shutil.which()和subprocess模块不再在当前目录中搜索可执行文件。
核心与内置函数¶
bpo-36722: 在调试构建中,导入现在也会查找以发布模式编译的 C 扩展和以稳定 ABI 编译的 C 扩展。
bpo-32849: 修复 FreeBSD 上的 Python 初始化代码,以正确检测 stdin 文件描述符(fd 0)何时无效。
bpo-36623: 移除解析器头部和移除 pgen 后缺乏实现的函数声明。
bpo-20180: 由于 Argument Clinic 的贡献,
dict.pop()现在快了 33%。由 Inada Naoki 提供补丁。bpo-36611: 调试内存分配器:默认从 Python 内存分配器的调试钩子中禁用 serialno 字段,以减少内存占用 5%。当记录致命内存错误时,启用
tracemalloc以获取内存块分配的跟踪信息,以决定在哪里放置断点。编译 Python 时定义PYMEM_DEBUG_SERIALNO以恢复该字段。bpo-36588: 在 AIX 上,
sys.platform不再包含主版本号。总是返回'aix',而不是'aix3'..'aix7'。由于旧的 Python 版本包含版本号,建议总是使用sys.platform.startswith('aix')。由 M. Felt 贡献。bpo-36549: 将 str.capitalize 改为对第一个字符使用标题大小写而不是大写。
bpo-36475:
PyEval_AcquireLock()和PyEval_AcquireThread()现在如果解释器正在终止时被调用,将终止当前线程,使其与PyEval_RestoreThread()、Py_END_ALLOW_THREADS()和PyGILState_Ensure()保持一致。bpo-36504: 修复了 _ctypes.c 中
PyCArrayType_new()的有符号整数溢出问题。bpo-20844: 修复了在 Windows 上运行带有编码 cookie 和 LF 行结尾的脚本可能失败的问题。
bpo-24214: 修复了 UTF-8 增量解码器中 surrogatpass 错误处理程序的支持。
bpo-36452: 在迭代字典自身、
keys()、values()或items()时更改dict键,现在在某些键被删除/添加的情况下会被检测到,因此键的数量没有改变。在len(dict)次迭代后将引发RuntimeError。由 Thomas Perl 贡献。bpo-36459: 修复了 tokenizer.c 的
tok_nextc()可能导致的双重PyMem_FREE()问题。bpo-36433: 修复了 classmethoddescr_call 中的 TypeError 消息。
bpo-36430: 修复了
itertools.count()中可能存在的引用泄漏问题。bpo-36440: 在
ParserError消息中包含节点名称,而不是数字 ID。由 A. Skrobov 提供补丁。bpo-36143: 使用 pgen 从 Grammar 和 Tokens 文件重新生成
keyword。由 Pablo Galindo 提供补丁。bpo-18372: 在
pickle模块中添加缺失的PyObject_GC_Track()调用。由 Zackery Spytz 提供补丁。
库¶
bpo-35952: 修复了当编译器缺失时的 pythoninfo。
bpo-28238: xml.etree.ElementTree 的
.find*()方法现在可以搜索像{*}tag和{ns}*这样的通配符,它们可以匹配任何命名空间中的标签或命名空间中的所有标签。由 Stefan Behnel 提供补丁。bpo-26978:
pathlib.path.link_to()现在已实现。它创建一个指向路径的硬链接。bpo-1613500: 当向构造函数传递
inplace=True时,fileinput.FileInput现在使用输入文件模式来正确设置输出文件模式(之前是硬编码为'w')。bpo-36734: 修复在 HP-UX 上编译
faulthandler.c的问题。使用memset()将stack_t current_stack初始化为零。bpo-13611: xml.etree.ElementTree 包增加了对 C14N 2.0 序列化的支持。由 Stefan Behnel 提供补丁。
bpo-36669: 向 weakref.proxy 添加缺失的矩阵乘法运算符支持。
bpo-36676: 如果解析器目标定义了回调方法 "start_ns()" 和/或 "end_ns()",xml.etree.ElementTree 中的 XMLParser() 会向解析器目标提供命名空间前缀上下文。由 Stefan Behnel 提供补丁。
bpo-36673: xml.etree.ElementTree 中的 TreeBuilder 和 XMLPullParser 增加了对解析注释和处理指令的支持。由 Stefan Behnel 提供补丁。
bpo-36650: functools.lru_cache() 的 C 版本将带有空
**kwargs字典的调用视为与完全没有关键字的调用不同。这不会导致错误的答案,但确实会触发意外的缓存未命中。bpo-28552: 修复了当
sys.executable为None或空字符串时的distutils.sysconfig:使用os.getcwd()初始化project_base。同时修复了 distutils 的 build 命令:如果sys.executable为None或空字符串,则不使用它。bpo-35755: 如果未设置
PATH环境变量,shutil.which()和distutils.spawn.find_executable()现在会在可用时使用os.confstr("CS_PATH")而不是os.defpath。此外,如果PATH环境变量被设为空字符串,则既不使用os.confstr("CS_PATH")也不使用os.defpath。bpo-25430: 提高
IPNetwork.__contains__()的性能。bpo-30485: xml.etree.ElementTree中的路径表达式现在可以通过传递一个空字符串前缀的默认命名空间,避免为标签使用显式的命名空间前缀(或“{命名空间}标签”符号)。
bpo-36598: 修复当代码在追踪下执行时,Mock对象与spec的
isinstance检查。由Karthikeyan Singaravelan提供补丁。bpo-18748: 在开发模式(
-Xdev)和调试版本中,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: 在未启动或已停止的
unittest.mock.patch()对象上调用stop()现在会返回None而不是引发RuntimeError,使该方法幂等。补丁由Karthikeyan Singaravelan提供。bpo-36348:
imap.IMAP4.logout()方法不再静默忽略任意异常。bpo-31904: 为 VxWorks 添加了 time 模块支持并修复了 test_time 失败问题。
bpo-36227: 在函数
ElementTree.tostring()和ElementTree.tostringlist()中添加了对关键字参数default_namespace和xml_declaration的支持。bpo-36004: 新增了替代构造函数
datetime.date.fromisocalendar()和datetime.datetime.fromisocalendar(),这些函数可以从ISO年、周数和工作日构建日期对象;这些是每个类的isocalendar方法的逆操作。由Paul Ganssle提供补丁。bpo-35936:
modulefinder不再依赖于已弃用的imp模块,并且modulefinder.ModuleFinder的初始化器现在具有不可变的默认参数。由Brandt Bucher提供补丁。bpo-35376:
modulefinder正确处理了与错误包同名的模块。由Brandt Bucher提供补丁。bpo-17396:
modulefinder在遇到跟随导入中的语法错误时不再崩溃。由Brandt Bucher提供补丁。bpo-35934: 添加了
create_server()和has_dualstack_ipv6()便捷函数,以自动完成创建服务器套接字时通常涉及的必要任务,包括在同一套接字上同时接受 IPv4 和 IPv6 连接。(由 Giampaolo Rodola 在 bpo-17561 中贡献。)bpo-23078: 向
unittest.mock.create_autospec()添加了对classmethod()和staticmethod()的支持。初始由Felipe Ochoa提供补丁。bpo-35416: 修复了distutils中潜在的资源警告。由Mickaël Schoentgen提供补丁。
bpo-25451: 向
tkinter.PhotoImage添加了透明度方法。由Zackery Spytz提供补丁。bpo-35082: 在调用
unittest.mock.Mock上的dir时不再返回已删除的属性。bpo-34547:
wsgiref.handlers.BaseHandler现在能够优雅地处理客户端连接的突然终止。由Petter Strandmark提供补丁。bpo-31658:
xml.sax.parse()现在支持 路径类对象。由Mickaël Schoentgen提供补丁。bpo-34139: 在绑定前移除旧的unix数据报套接字。
bpo-33530: 在
asyncio.create_connection()中实现了Happy Eyeballs。新增了两个参数 happy_eyeballs_delay 和 interleave,用于指定 Happy Eyeballs 的行为。bpo-33291: 当在由任意可调用对象创建的方法上调用inspect函数isgeneratorfunction、iscoroutinefunction、isasyncgenfunction时,不再抛出AttributeError。而是返回False。
bpo-31310: 修复multiprocessing.semaphore_tracker,使其被子进程重用。
bpo-31292: 修复
setup.py check --restructuredtext对于包含include指令的文件的支持。
文档¶
bpo-36625: 从fractions.Fraction的文档字符串中移除过时的注释。
bpo-30840: 文档化相对导入。
bpo-36523: 为io.IOBase.writelines()添加文档字符串。
bpo-36345: 避免在
wsgiref文档中使用literalinclude指令时从Tools/scripts/serve.py复制代码。由 Stéphane Wirtel 贡献。bpo-36345: 在
wsgiref文档中使用Tools/scripts/serve.py脚本的代码作为示例。由Stéphane Wirtel贡献。bpo-36157: 为 PyInterpreterState_Main() 添加了文档。
bpo-33043: 更新docs.python.org页面,在页面末尾(在'Reporting Bugs'和'About Documentation'之间)添加了一个'Contributing to Docs'链接。在'Found a Bug'页面的文档错误部分添加了额外的链接和信息。
bpo-35581: @typing.type_check_only现在允许类型存根标记在运行时不可用的函数和类。
bpo-33832: 在术语表中添加了'magic method'条目。
bpo-32913: 在正则表达式HOWTO中添加了re.Match.groupdict示例。
测试¶
bpo-36719: regrtest 现在总是检测不可回收的对象。之前,这个检查只在
--findleaks启用时才进行。现在这个检查也能与-jN/--multiprocess N一起工作。--findleaks成为--fail-env-changed的一个弃用别名。bpo-36725: 当使用多进程模式 (-jN) 时,regrtest 现在能更好地报告工作进程失败的错误,并且在工作者线程失败或被中断时立即退出。
bpo-36454: 将 test_time.test_monotonic() 改为仅测试睡眠命令后经过时间的下限而非上限。这避免了在慢速构建机器人上不必要的测试失败。由 Victor Stinner 提供补丁。
bpo-32424: 提高 xml.etree.ElementTree 的测试覆盖率。由 Gordon P. Hemsley 提供补丁。
bpo-32424: 修复 xml.etree.ElementTree 中 test_cyclic_gc() 测试的拼写错误。由 Gordon P. Hemsley 提供补丁。
bpo-36635: 添加了一个新的
_testinternalcapi模块用于测试内部 C API。bpo-36629: 修复
test_imaplib的test_imap4_host_default_value():同时捕获errno.ENETUNREACH错误。bpo-36611: 当
tracemalloc启用时,修复test_sys.test_getallocatedblocks()。bpo-36560: 修复 regrtest 中的引用泄漏检测:在热身期间也计算(引用计数、分配的内存块、文件描述符计数的)增量,以确保在开始检测引用泄漏前一切均已初始化。
bpo-36565: 当 Python 没有内置的 abc 模块时,修复引用检测(
python3 -m test -R 3:3)。bpo-31904: 将 test_resource 移植到 VxWorks:跳过设置 RLIMIT_FSIZE 和 RLIMIT_CPU 的测试用例。
bpo-31904: 修复 VxWorks 上的 test_tabnanny:调整 ENOENT 错误消息。
bpo-36436: 修复
_testcapi.pymem_buffer_overflow():处理内存分配失败。bpo-31904: 修复 VxWorks 上的 test_utf8_mode:Python 在 VxWorks 上总是使用 UTF-8。
bpo-36341: 修复可能在调用 AF_UNIX 套接字的 bind() 时因 PermissionError 而失败的测试。
构建¶
bpo-36747: 移除陈旧的scriptsinstall Makefile目标。
bpo-21536: 在Unix上,除了Android和Cygwin,C扩展不再链接到libpython。
通过共享库的 Python 构建的 C 扩展现在可以被静态链接的 Python 加载了。
当Python被嵌入时,
libpython必须不被RTLD_LOCAL加载,而应使用RTLD_GLOBAL。之前,使用RTLD_LOCAL时,已经无法加载未链接到libpython的C扩展,例如由Modules/Setup的*shared*部分构建的标准库的C扩展。distutils,python-config 和 python-config.py 已被修改。
bpo-36707:
./configure --with-pymalloc不再向SOABI(sys.implementation.cache_tag)添加m标志。启用或禁用pymalloc对ABI没有影响。bpo-36635: 当定义
Py_BUILD_CORE_MODULE时,更改pyport.h的PyAPI_FUNC(type)、PyAPI_DATA(type)和PyMODINIT_FUNC宏。现在必须使用Py_BUILD_CORE_MODULE定义来构建作为动态库访问Python内部的C扩展:在Windows上的DLL导出中导出PyInit_xxx()函数。bpo-31904: 不在VxWorks上构建
_crypt扩展。bpo-36618: 当检测到clang编译器时,向CFLAGS添加
-fmax-type-align=8。pymalloc内存分配器将内存对齐于8字节。在x86-64上,clang默认期望对齐于16字节,因此使用MOVAPS指令,这可能导致分段错误。指示clang Python限制对齐于8字节以使用MOVUPS指令代替:虽然较慢,但如果内存未对齐于16字节,则不会触发SIGSEGV。遗憾的是,该标志必须添加到CFLAGS而不仅仅是CFLAGS_NODIST,因为第三方C扩展也可能有相同的问题。bpo-36605:
make 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-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¶
IDLE¶
bpo-36429: 修复启动IDLE时使用pyshell的问题。在顶部添加idlelib.pyshell别名;移除底部的pyshell别名。移除过时的__name__=='__main__'命令。
工具/示例¶
bpo-14546: 修复Tools/scripts/lll.py中的参数处理问题。
C API¶
bpo-36763: 修复了
Py_SetStandardStreamEncoding()中的内存泄漏:如果该函数被调用两次则释放内存。bpo-36641: PyDoc_VAR(name) 和 PyDoc_STRVAR(name, str) 现在创建的是
static const char name[]而非static char name[]。 由 Inada Naoki 提供补丁。bpo-36389: 更改 Python 内存分配器调试钩子 (
PyMem_SetupDebugHooks()函数) 中使用的内部常量CLEANBYTE、DEADDYTE和FORBIDDENBYTE的值。 字节模式0xCB、0xDB和0xFB已被替换为0xCD、0xDD和0xFD,以使用与 Windows CRT 调试malloc()和free()相同的值。bpo-36443: 自 Python 3.7.0 起,如果强制转换了
LC_CTYPE语言区域和/或由用户配置启用了 UTF-8 模式,则在Py_Initialize()之前调用Py_DecodeLocale()会产生乱码。LC_CTYPE 强制转换和 UTF-8 模式现在默认禁用以修复乱码问题。现在必须使用带有_PyPreConfig的新_Py_PreInitialize()API 显式启用(主动选择)它们。bpo-36025: 修复了datetime C API中的一个意外更改,其中
PyDate_FromTimestamp()函数的参数被错误地解释为单个时间戳而非参数元组,这导致现有代码开始引发TypeError。这一不向后兼容的更改仅出现在Python 3.8的alpha版本中。由Paul Ganssle提供的补丁。bpo-35810: 修改
PyObject_Init以正确增加堆分配类型对象的引用计数。同时修复那些要么手动执行此操作,要么未在tp_dealloc中减少类型引用计数的堆分配类型的引用计数。
Python 3.8.0 alpha 3¶
发布日期: 2019-03-25
安全性¶
bpo-36216: 修改 urlsplit(),当 URL 包含在 IDNA 编码(NFKC 规范化)下分解为影响 URL 解析方式的字符时抛出 ValueError。
bpo-35121: 在使用带有
http.cookiejar.DefaultCookiePolicy策略的 cookiejar 时,不要将没有 Domain 属性的域 A 的 cookies 发送到域 B,当域 A 是域 B 的后缀匹配时。补丁由 Karthikeyan Singaravelan 提供。
核心与内置函数¶
bpo-36421: 修复 _ctypes.c 的
PyCArrayType_new()中可能出现的双重递减引用。bpo-36412: 修复创建新字典时可能发生的崩溃。
bpo-36398: 修复
structseq_repr()中可能发生的崩溃。bpo-36256: 修复 parsermodule 在解析 DFA 中具有两个或更多相同类型标签弧的状态时的错误。由 Pablo Galindo 提供补丁。
bpo-36365: repr(structseq) 不再限制为 512 字节。
bpo-36374: 修复
merge_consts_recursive()中可能的空指针解引用。由 Zackery Spytz 提供补丁。bpo-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-36324: 向 statistics.NormalDist 添加计算逆累积正态分布的方法。
bpo-36321: collections.namedtuple() 错误拼写了一个属性名。为了与 typing.NamedTuple 保持一致,属性名应为 "_field_defaults" 而非 "_fields_defaults"。为了向后兼容,现在两种拼写都会创建。错误的拼写未来可能会被移除。
bpo-36297: "unicode_internal" 编解码器已被移除。 自 Python 3.3 起已弃用。 由 Inada Naoki 编写补丁。
bpo-36298: 在 pyclbr 中当模块无法找到时抛出 ModuleNotFoundError。感谢 'mental' 的 bug 报告。
bpo-36268: 将
tarfile用于写入 tar 的默认格式从供应商特定的 GNU 切换到现代的 POSIX.1-2001 pax 标准。由 C.A.M. Gerlach 贡献。bpo-36285: 修复 array 模块中的整数溢出问题。由 Stephan Hohe 提供补丁。
bpo-31904: 为 VxWorks 添加 _signal 模块支持。
bpo-36272:
logging不再静默忽略 RecursionError。补丁由 Rémi Lapeyre 贡献。bpo-36280: 向 ast.Constant 添加一个 kind 字段。如果字面量有 'u' 前缀(即 Python 2 风格的 unicode 字面量),则为 'u',否则为 None。
bpo-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-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: 确保自定义的
warnings.formatwarning()函数可以接收line作为位置参数。基于Tashrif Billah的补丁。bpo-36106: 解决与libm的sinpi()潜在的名称冲突。由Dmitrii Pasechnik提供补丁。
bpo-36091: 清理Lib/types中对异步生成器的引用。由Henry Chen提供补丁。
bpo-36043:
FileCookieJar支持 path-like object。由Stéphane Wirtel贡献。bpo-35899: 修复Enum以正确处理空字符串和非拉丁字符(如'α'、'א')而不会崩溃。原始补丁由Maxwell贡献。由Stéphane Wirtel协助。
bpo-21269: 向模拟调用对象添加
args和kwargs属性。由Kumar Akshay贡献。bpo-30670: 添加了
pprint.pp以默认按插入顺序排序字典键的方式漂亮打印对象。 向pprint.pprint、pprint.pformat和pprint.PrettyPrinter添加了参数 sort_dicts。 由 Rémi Lapeyre 贡献。bpo-35843: 为
_NamespacePath实现__getitem__。由Anthony Sottile提供补丁。bpo-35802: 清理检查
os.stat/os.lstat/os.chmod存在的代码,这些始终存在。由 Anthony Sottile 提供补丁。bpo-35715: 在不再需要后释放 ProcessPoolExecutor _process_worker 的返回值以释放内存。
bpo-35493: 在
multiprocessing.Pool中使用multiprocessing.connection.wait()而不是每 0.2 秒轮询一次工作更新。由 Pablo Galindo 提供补丁。bpo-35661: 将 venv 提示存储在 pyvenv.cfg 中。
bpo-35121: 当请求路径是 cookie 路径属性的前缀匹配但不以 "/" 结尾时,不为请求设置 cookie。由 Karthikeyan Singaravelan 提供补丁。
bpo-21478: 对使用
unittest.mock.create_autospec()创建的子函数的调用应传播到父函数。由 Karthikeyan Singaravelan 提供补丁。bpo-35198: 修复 AIX 上的 C++ 扩展编译。
文档¶
测试¶
构建¶
Windows¶
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 提供补丁。
工具/示例¶
C API¶
Python 3.8.0 alpha 2¶
发布日期: 2019-02-25
核心与内置函数¶
bpo-36052: 当使用赋值运算符给
__debug__赋值时,抛出SyntaxError。由 Stéphane Wirtel 和 Pablo Galindo 贡献。bpo-36012: 类变量写入速度提高了一倍。当更新非双下划线属性时,减少了一次不必要的更新槽的调用。
bpo-35942: 改进了在允许传递
PathLike对象的接口中,从__fspath__返回无效类型时发出的错误信息,现在它会解释错误的来源。bpo-36016:
gc.get_objects现在可以接收一个可选参数,指定从哪个代获取对象。由 Pablo Galindo 提供补丁。bpo-1054041: 当主解释器由于未捕获的 KeyboardInterrupt 退出时,进程现在会以适当的方式退出,以便其父进程能够检测到是由于 SIGINT 或 ^C 终止的进程。这使得 shell 和批处理脚本能够理解用户要求它们停止。
bpo-35992: 修复了在具有自定义不可下标元类的类上不调用
__class_getitem__()的问题。bpo-35993: 修复了在使用子解释器时 fork 导致的崩溃。由 Stéphane Wirtel 贡献。
bpo-35991: 修复了 Modules/_randommodule.c 中的潜在双重释放问题。
bpo-35961: 修复了 slice_richcompare() 中的崩溃:对两个临时内部元组使用强引用而非偷取的引用。
bpo-35911: 通过添加
cell.__new__方法启用 cell 对象的创建,并在Lib/types.py中以 CellType 的名称公开cell类型。由 Pierre Glaser 提供补丁。bpo-12822: 当
pthread_condattr_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: 添加了 statistics.fmean(),作为现有 mean() 函数的更快浮点数变体。
bpo-35918: 从 multiprocessing.managers.SyncManager.dict 中移除了损坏的
has_key方法。由 Rémi Lapeyre 贡献。bpo-18283: 添加对 bytes 的支持到
shutil.which()。bpo-35960: 修复
dataclasses.field()丢弃作为元数据传递的空映射对象的问题。bpo-35500: 在
unittest.mock.Mock.assert_called_with()断言错误中,将预期和实际的调用参数分别写在单独的行上。由 Susan Su 贡献。bpo-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: 修复 pickle.loads 的 C 实现以使用 importlib 的锁定机制,从而避免使用部分加载的模块。由 Tim Burgess 提供补丁。
文档¶
测试¶
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¶
IDLE¶
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: 当生成子进程时,
-I命令行选项(以隔离模式运行 Python)现在也会被multiprocessing和distutils模块复制。此前仅复制了-E和-s选项 (由-I启用)。bpo-34791: 当sys.flags.ignore_environment由-E或-I参数设置时,xml.sax和xml.dom.domreg不再使用环境变量来覆盖解析器实现。
bpo-17239: xml.sax和xml.dom.minidom解析器默认不再处理外部实体。外部DTD和ENTITY声明不再加载文件或创建网络连接。
bpo-34623: CVE-2018-14647: C加速的_elementtree模块现在从_Py_HashSecret初始化哈希随机化盐,而不是libexpat的默认CSPRNG。
bpo-34405: 更新Windows构建的OpenSSL至1.1.0i版本。
bpo-33871: 修复在macOS上
os.sendfile()中发送文件部分的问题。使用 trailers 参数可能导致从输入文件发送的字节数多于指定数量。bpo-32533: 修复_ssl中错误处理的线程安全性。
bpo-33136: 加固ssl模块以抵御LibreSSL的 CVE-2018-8970。调用X509_VERIFY_PARAM_set1_host()时使用明确的namelen。新增测试确保不允许NULL字节。
bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。
bpo-32981: difflib 和 poplib 中的正则表达式容易受到灾难性回溯的影响。这些正则表达式构成了潜在的 DOS 向量(REDOS)。它们已被重构。这解决了 CVE-2018-1060 和 CVE-2018-1061。由 Jamie Davis 提供补丁。
bpo-28414: ssl 模块现在允许用户在使用 SNI 时,自行执行 IDN 的编码与解码操作。
核心与内置函数¶
bpo-35877: 允许在 while 语句中的赋值表达式中省略圆括号。补丁由 Karthikeyan Singaravelan 提交。
bpo-35814: 允许注解赋值中的右侧表达式与普通赋值中的相同。特别是,
x: Tuple[int, int] = 1, 2(右侧不带括号) 现在是被允许的。bpo-35766: 在 ast 模块中添加了解析 PEP 484 类型注释的选项。(默认关闭)本更改合并了第三方分支项目 [typed_ast](https://github.com/python/typed_ast) 的关键功能。
bpo-35713:重新组织 Python 的初始化流程,以便更早地启用异常处理机制和 sys.stderr。
bpo-33416: 向 Python AST 节点添加结束行和结束列位置信息。这是一个 C 级别的向后不兼容的更改。
bpo-35720: 修复了 Modules/main.c 中 pymain_parse_cmdline_impl 函数的一个小内存泄漏。
bpo-35634:
func(**kwargs)现在会在kwargs是一个包含多个相同键的映射时引发错误。自 Python 3.6 起,当其他关键字参数在**kwargs之前传递时,已经会引发错误。bpo-35623: 修复了排序非常长的列表时的一个崩溃。由 Stephan Hohe 提供补丁。
bpo-35214: 添加了 clang Memory Sanitizer 构建工具,以解决来自 posix、socket、time、test_io 和 test_faulthandler 的误报。
bpo-35560: 修复了调试构建中
format()在使用 "n" 格式、零填充和较小宽度进行浮点数格式化时的断言错误。发布构建不受影响。补丁由 Karthikeyan Singaravelan 提供。bpo-35552: 在
PyUnicode_FromFormat()中的格式字符%s和%V以及PyBytes_FromFormat()中的%s不再读取超过 precision 指定限制的内存。bpo-35504: 修复了删除某些属性时的段错误和
SystemErrors。由 Zackery Spytz 提供补丁。bpo-35504: 修复了删除 OSError 的 characters_written 属性时出现的 SystemError。
bpo-35494: 改进了 f-string 中括号不匹配的语法错误消息。
bpo-35444: 修复了在无法查找内置 "getattr" 时,pickling 方法中的错误处理。加快了 pickling 迭代器的速度。
bpo-35436: 修复了内存分配错误处理中的多个问题。由 Zackery Spytz 提供补丁。
bpo-35423: 将 eval 循环中的信号处理触发器与 "pending calls" 机制分离。没有语义上的变化,性能差异也不显著。
bpo-35357: unittest.mock._Call 和 unittest.mock.MagicProxy 的内部属性名(name, parent & from_kall)现在以 _mock_ 为前缀,以防止与广泛使用的对象属性冲突。修复了测试函数名称中的小错字。
bpo-35372: 修复了对于长度超过 2 GiB 且包含不可解码字节的输入的代码页解码器。
bpo-35336: 修复 PYTHONCOERCECLOCALE=1 环境变量:仅当 LC_CTYPE 区域设置为 "C" 时才强制使用 C 区域设置。
bpo-31241: 列表推导式、生成器表达式和元组的 AST 节点的 lineno 和 col_offset 属性现在指向开括号或方括号。对于没有括号的元组,它们指向第一个项目的位置。
bpo-33954: 对于
str.format()、float.__format__()和complex.__format__()方法,当使用 "n" 格式化器时处理非 ASCII 小数点。bpo-35269: 修复了涉及新创建的协程的可能段错误。由 Zackery Spytz 提供补丁。
bpo-32492: 通过为名称描述符使用C快速路径,将
namedtuple()属性访问速度提高了1.6倍。由Pablo Galindo提供补丁。bpo-35214: 修复了在解析字符串末尾被截断的Unicode转义序列(如
'\N')时超出边界的内存访问问题。它会读取超出内存分配末尾的一个字节。bpo-35214: 解释器和扩展模块已添加注释,以便它们在clang的内存清理器下正常工作。新增了一个配置标志--with-memory-sanitizer,使得执行此类测试构建更加容易。
bpo-35193: 修复了字节码窥孔优化器中的一个偏差一个错误,该错误在移除不可达代码时可能会读取数组边界之外的字节。这个错误在Python 3.6和3.7的每个版本中都存在,直到现在。
bpo-35169: 改进了禁止赋值的错误消息。
bpo-34022: 修复了在
zipimport中处理基于哈希的字节码文件的问题。由Elvis Pranskevichus提供补丁。bpo-28401: 调试构建将不再尝试导入为ABI构建的扩展模块,因为它们从一开始就不兼容。补丁由Stefano Rivera提供。
bpo-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-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: C 函数
property_descr_get()使用一个“缓存”元组来优化函数调用。但该元组在调试模式下可通过sys.getobjects()被发现。移除了这项优化,它实际上得不偿失,并且在过去几年中引发了 3 次不同的崩溃。bpo-34762: 修复contextvars C API以使用PyObject*指针类型。
bpo-34751: 元组的哈希函数现在基于xxHash,这在(以前的)病态情况下提供了更好的碰撞结果。此外,在64位系统上,它总体上改善了元组的哈希。由Jeroen Demeyer提供补丁,Tim Peters做出了重要贡献。
bpo-34735: 修复Modules/timemodule.c中的内存泄漏。由Zackery Spytz提供补丁。
bpo-34683: 修复了一个错误,其中一些SyntaxError错误指向了位置偏移一位的位置。
bpo-34651: 只允许主解释器进行fork。这避免了影响主解释器的可能性,这对运行时的操作至关重要。
bpo-34653: 移除未使用的函数PyParser_SimpleParseStringFilename。
bpo-34641: 进一步限制函数调用中关键字参数左侧的语法。 特别是,
f((keyword)=arg)现在是不允许的。bpo-34637: 使 sum() 的 start 参数作为关键字参数可见。
bpo-1621: 在执行集合哈希表调整大小时,不假定有符号整数溢出行为(C未定义行为)。
bpo-34588: 修复回溯格式化中递归调用修剪特性的一个偏移一位的错误。
bpo-34485: 在Windows上,LC_CTYPE现在在启动时设置为用户首选区域设置。以前,LC_CTYPE区域设置在启动时为"C",但在调用setlocale(LC_CTYPE, "")或setlocale(LC_ALL, "")时会更改。
bpo-34485: 在POSIX区域设置(当C区域未被强制且UTF-8模式被禁用时),像sys.stdout这样的标准流现在使用"surrogateescape"错误处理程序,而不是"strict"。
bpo-34485: 修复像sys.stdout这样的标准流的错误处理程序:PYTHONIOENCODING=":"现在被忽略,而不是将错误处理程序设置为"strict"。
bpo-34485: Python现在使用C代码获取区域编码,以初始化像sys.stdout这样的标准流的编码。此外,编码现在初始化为Python编解码器名称,以获取规范化的编码名称并确保编解码器被加载。这一改变默认避免了在启动时导入_bootlocale和_locale模块。
bpo-34527: 在FreeBSD上,如果LC_CTYPE区域是"POSIX",Py_DecodeLocale()和Py_EncodeLocale()现在也会强制使用ASCII编码,而不仅仅是当LC_CTYPE区域是"C"时。
bpo-34527: UTF-8模式现在也由"POSIX"区域启用,而不仅仅是"C"区域。
bpo-34403: 在HP-UX上,如果使用C或POSIX区域设置,sys.getfilesystemencoding()现在返回"ascii"而不是"roman8"(当UTF-8模式被禁用且C区域未被强制时)。
bpo-34523: Python文件系统编码现在在Python初始化期间更早地读取。
bpo-12458: 回溯现在显示多行表达式中子表达式的正确行号。回溯现在显示多行表达式的第一行的行号,而不是最后一个子表达式的行号。
bpo-34408: 防止
PyInterpreterState_New()中的空指针解引用和资源泄漏。bpo-34400: 修复parsetok.c中的未定义行为。由Zackery Spytz提供补丁。
bpo-33073: 向ints添加了as_integer_ratio,以使它们更易于与floats互操作。
bpo-34377: 更新 valgrind 抑制列表,使用
_PyObject_Free/_PyObject_Realloc代替PyObject_Free/PyObject_Realloc。bpo-34353: 在Python实现的
stat.filemode()中添加了"socket"选项以匹配C实现。bpo-34320: 修复了
dict(od)未复制OrderedDict的迭代顺序的问题。bpo-34113: 修复了在调试版本中,当操作码堆栈被调整为负数时崩溃的问题。由Constantin Petrisor提供补丁。
bpo-34100: 编译器现在递归合并元组和冻结集合中的常量。代码属性如
co_names也被合并。bpo-34151: 列表连接、重复和切片操作的性能略有提升。由Sergey Fedoseev提供补丁。
bpo-34170: -X dev: 现在即使启用了开发者模式,也可以使用PYTHONMALLOC覆盖内存分配器。
bpo-33237: 改进了部分初始化模块的
AttributeError消息。bpo-34149: 修复min和max函数在key为None时获取默认行为的问题。
bpo-34125: 当给出
**kwargs时,现在可以对未绑定的内置方法进行性能分析。bpo-34141: 优化了原子类型(None, bool, int, float, bytes, str)的pickling。
bpo-34126: 修复了在分析某些无效调用的未绑定方法时的崩溃问题。由Jeroen Demeyer提供补丁。
bpo-24618: 修复了在创建代码对象时,当varnames元组过小或参数计数过大时读取无效内存的问题。
bpo-34068: 在
io.IOBase.close()中,确保在存在活动异常时不设置closed属性。由Zackery Spytz和Serhiy Storchaka提供补丁。bpo-34087: 修复了将unicode转换为数值时的缓冲区溢出问题。
bpo-34080: 修复了编译器在词法分析过程中引发一些不常见错误时的内存泄漏问题。
bpo-34066: 在
with open()中,禁止在调用open()和进入 with 块之间通过Ctrl-C中断。bpo-34042: 修复dict.copy()以维持正确的总引用计数(如sys.gettotalrefcount()报告的那样)。
bpo-33418: 修复了函数对象在创建引用循环时潜在的内存泄漏问题。
bpo-33985: 实现 contextvars.ContextVar.name 属性。
bpo-33956: 将集成的 Expat 库更新至版本 2.2.5。
bpo-24596: 在调用
PyErr_Print()之前,先在PyRun_SimpleFileExFlags()中减少模块对象的引用计数。由 Zackery Spytz 提供补丁。bpo-33451: 在调用
PyEval_EvalCode()之前关闭直接执行的 pyc 文件。bpo-1617161:
BuiltinMethodType实例(内置类的方法)的哈希现在依赖于 __self__ 的身份哈希而非其值。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环境变量和-Xpycache_prefix命令行选项,用于设置写入模块字节码缓存文件的备用根目录。bpo-33509: 修复了 warnings.warn_explicit() 的 module_globals 参数:如果 module_globals 不是字典,不会崩溃。
bpo-31849: 修复了 pyhash.c 中的有符号/无符号比较警告。
bpo-33475: 修复了将注释转换为字符串时的杂项错误,并优化了字符串表示中的括号。
bpo-20104: 添加了对
posix_spawn的setpgroup、resetids、setsigmask、setsigdef和scheduler参数的支持。由 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-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: 修复当类型参数是 ctypes 结构化数据类型时,
ctypes.cast()中的崩溃问题。由 Eryk Sun 和 Oren Milman 提供补丁。bpo-31577: 修复在
os.utime()中当 ns 参数不正确时的崩溃问题。 由 Oren Milman 编写补丁。bpo-29832: 从各种socket错误消息中移除对'getsockaddrarg'的引用。补丁由Oren Milman提供。
库¶
bpo-35845: 向memoryview.tobytes()添加'order'参数。
bpo-35864: collections.namedtuple的_asdict()方法现在返回一个常规的dict而不是OrderedDict。
bpo-35537: 现在subprocess.Popen内部使用ExitStack来清理管道文件句柄。在正常操作中没有行为变化。但如果关闭一个句柄时引发异常,其他句柄现在会被关闭而不是泄露。(由Giampaolo Rodola提供补丁)
bpo-35847: RISC-V需要CTYPES_PASS_BY_REF_HACK。修复了ctypes Structure的test_pass_by_value测试。
bpo-35813: 向multiprocessing添加了共享内存子模块,以避免进程间需要序列化。
bpo-35780: 修复在递归、可重入或多线程代码中出现的lru_cache()错误。这些错误可能导致孤儿链接和缓存被捕获在指定最大链接数更少的状态中。修复了负maxsize的处理,应该被当作零处理。修复了切换“满”状态标志时的错误。修复了遇到错误时链接的错误排序。同步了C代码和纯Python代码,针对具有单个位置参数的函数的空间节省路径。在这种常见情况下,lru缓存条目的空间开销减少了近一半。修复了缓存未命中的计数。在错误情况下,未命中计数与实际调用底层用户函数的次数不同步。
bpo-35537:
os.posix_spawn()和os.posix_spawnp()现在有一个 setsid 参数。bpo-23846:
asyncio.ProactorEventLoop现在捕获并记录当自管道满时的发送错误。bpo-34323:
asyncio: 增强IocpProactor.close()日志: 在第一次日志前等待1秒,然后每秒记录一次。同时记录自close()调用以来的秒数。bpo-35674: 新增
os.posix_spawnp()函数。由 Joannah Nanjekye 提供补丁。bpo-35733:
ast.Constant(boolean)不再是ast.Num的实例。由 Anthony Sottile 提供补丁。bpo-35726: QueueHandler.prepare() 现在在修改和入队之前复制记录,以避免影响链中的其他处理程序。
bpo-35719: 通过 1.3--2.5 倍加速了多参数
math函数 atan2(), copysign(), remainder() 和 hypot()。bpo-35717: 修复了在使用枚举和编译时引发的 KeyError 异常。由 Rémi Lapeyre 提供补丁。
bpo-35699: 修复了 distutils 中对 Visual Studio Build Tools 2017 的检测。
bpo-32710: 修复了 asyncio ProactorEventLoop 在重叠操作失败时的内存泄漏。
bpo-35702: 现在 macOS 10.12 可以使用
time.CLOCK_UPTIME_RAW常量。bpo-32710: 修复了 asyncio 中 ProactorEventLoop 在
ReadFile()或WSASend()重叠操作立即失败时的内存泄漏:释放内部缓冲区。bpo-35682: 修复
asyncio.ProactorEventLoop.sendfile(): 如果内部 future 已经完成,不再尝试设置其结果。bpo-35283: 为
threading.Thread.isAlive()方法添加了弃用警告。由 Donghee Na 提供补丁。bpo-35664: 通过优化参数处理和为元组中单个非负整数索引的常见情况添加快速路径(这是标准库中的典型用例),将 operator.itemgetter() 的性能提高了 33%。
bpo-35643: 修复了 Modules/_sha3/cleanup.py 中的 SyntaxWarning: 无效的转义序列。补丁由 Mickaël Schoentgen 提供。
bpo-28503:
crypt模块现在在可用时内部使用crypt_r()库函数而不是crypt()。bpo-35614: 修复了 metaclasses 上的 help()。由 Sanyam Khurana 提供补丁。
bpo-35568: 将
raise(signum)作为raise_signal公开bpo-35588:
fractions.Fraction类型上的地板除法和模运算以及divmod()函数速度提高了 2--4 倍。由 Stefan Behnel 提供补丁。bpo-35585: 通过值构建枚举的速度提升,例如 http.HTTPStatus(200)。
bpo-30561: random.gammavariate(1.0, beta) 现在计算的结果与 random.expovariate(1.0 / beta) 相同。这同步了两种算法并消除了旧实现中的一些特性。然而,它确实产生了与以前不同的随机变量流。
bpo-35537:
subprocess模块现在在某些情况下可以使用os.posix_spawn()函数以获得更好的性能。bpo-35526: 将 barry_as_FLUFL.mandatory 的'笑话'延迟到 Python 4.0 版本
bpo-35523: 移除
ctypes回调的变通方法:不再在启动时创建回调。避免在import 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: 当
Mock实例用于包装对象时,如果side_effect用于其方法的 mock 之一,则不调用原始实现并返回使用 side effect 的结果,与使用 return_value 的方式相同。bpo-35346: 从
platform模块中删除对 Mac OS 9 和 Rhapsody 的支持。Rhapsody 的最后一个版本发布于 2000 年。Mac OS 9 的最后一个版本发布于 2001 年。bpo-10496:
distutils.utils的check_environ()现在会在调用pwd.getpwuid()时捕获KeyError:在这种情况下不创建HOME环境变量。bpo-10496:
posixpath.expanduser()现在在HOME环境变量未设置且当前用户没有家目录(如果当前用户标识在密码数据库中不存在)时,返回输入的 path 不变。这一更改修复了site模块在当前用户在密码数据库中不存在(如果用户没有家目录)时的问题。bpo-35389:
platform.libc_ver()现在在可用且未设置 executable 参数时使用os.confstr('CS_GNU_LIBC_VERSION')。bpo-35394: 向 asyncio 抽象协议添加空槽。
bpo-35310: 修复
select.select()中的一个错误,在某些情况下,文件描述符序列在信号中断后未修改返回,即使文件描述符可能尚未准备就绪。现在,如果发生超时,select.select()将始终返回空列表。由 Oran Avraham 提供补丁。bpo-35380: 为 proactor asyncio 事件循环在 Windows 上启用 TCP_NODELAY。
bpo-35341: 向
typing模块添加collections.OrderedDict的通用版本。由 Ismo Toijala 提供补丁。bpo-35371: 修复了在 Windows 上传递不正确参数时
os.utime()可能崩溃的问题。bpo-35346:
platform.uname()现在在运行外部程序(如cmd /c ver)时将stderr重定向到os.devnull。bpo-35066: 之前,在格式字符串中带有尾随 '%' 的 datetime 对象上调用 strftime() 方法会导致异常。然而,这仅在 datetime C 模块被使用时发生;Python 实现不匹配此行为。现在 datetime 符合 PEP-399,不会在尾随 '%' 上抛出异常。
bpo-35345: 函数
platform.popen已被移除,自 Python 3.3 起已弃用:请改用os.popen()。bpo-35344: 在 macOS 上,
platform.platform()现在使用platform.mac_ver(),如果它返回一个非空的发布字符串,以获取 macOS 版本而非 darwin 版本。bpo-35312: 使
lib2to3.pgen2.parse.ParseError可往返 pickle。由 Anthony Sottile 提供补丁。bpo-35308: 修复
webbrowser中的回归问题,其中默认浏览器可能优先于BROWSER环境变量中的浏览器。bpo-24746: 避免在 doctest 花式差异中去除尾部空格。原始由 R. David Murray 和 Jairo Trad 提供补丁。由 Sanyam Khurana 增强。
bpo-28604:
locale.localeconv()现在如果两个区域设置不同且货币字符串非 ASCII,会临时将LC_CTYPE区域设置改为LC_MONETARY区域设置。这一临时更改会影响其他线程。bpo-35277: 更新 ensurepip 以安装 pip 18.1 和 setuptools 40.6.2。
bpo-24209: 直接调用 http.server 时增加 IPv6 支持。
bpo-35226: 在测试
unittest.mock.call对象相等性时递归检查参数,并添加说明,在mock_calls中追踪用于创建模拟祖先的参数是不可能的。bpo-29564: warnings 模块现在建议如果指定了源,tracemalloc 模块可用但 tracemalloc 未跟踪内存分配时启用 tracemalloc。
bpo-35189: 修改以下 fnctl 函数,在信号中断 (EINTR) 时重试:flock, lockf, fnctl
bpo-30064: 在 sock_* asyncio API 中使用 add_done_callback() 以在取消时早期取消订阅 reader/writer。
bpo-35186: 移除当
setup.py upload与bdist_rpm或bdist_dumb一起使用时添加的“built with”注释。bpo-35152: 允许在非 Windows 系统上的多进程连接中一次发送超过 2 GB 的数据。
bpo-35062: 修复了对
_io.IncrementalNewlineDecoder的 translate 参数的错误解析。bpo-35065: 移除了
StreamReaderProtocol._untrack_reader。 当前对_untrack_reader的调用执行得过早,导致协议在connection_lost能够运行并将 EOF 传递给读取器之前就忘记了读取器。bpo-34160: ElementTree和minidom现在保留了用户指定的属性顺序。
bpo-35079: 通过添加'non-overlapping'和将'!='改为'<'来改进difflib.SequenceManager.get_matching_blocks的文档。
bpo-33710: 弃用了
gettext模块中的l*gettext()函数和方法。它们返回编码的字节而不是Unicode字符串,是Python 2时代的产物。同时也弃用了与设置l*gettext()函数和方法字符集相关的函数和方法。bpo-35017: 现在如果
socketserver.BaseServer.serve_forever()的shutdown()方法在轮询新事件时被调用,它会立即退出。bpo-35024:
importlib不再在(created|could not create) <bytecode path>已经被记录后冗余地记录wrote <bytecode path>。由Quentin Agren提供的补丁。bpo-35047: 现在,如果
assert_not_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:
mailbox.mbox.get_string函数的 from_ 参数现在可以成功设置为非默认值。bpo-34970: 在
asyncio.all_tasks()中保护任务弱集操作。bpo-34969: gzip:在 gzip CLI 上添加 --fast、--best 参数,这些参数将用于快速压缩方法(quick)或最佳压缩方法(较慢,但文件更小)。同时,将默认压缩级别更改为 6(折中)。
bpo-16965: 2to3 的
execfile修复器现在使用'rb'模式打开文件。补丁由 Zackery Spytz 提供。bpo-34966:
pydoc现在不仅支持对最终类中定义的方法的别名,还支持对继承的方法的别名。文档字符串不会为别名重复。bpo-34926:
mimetypes.MimeTypes.guess_type()现在除了接受 URL 字符串外,还接受 path-like object。由 Mayank Asthana 提供补丁。bpo-23831: 向
tkinter.Canvas小部件添加moveto()方法。由 Juliette Monsel 提供补丁。bpo-34941:
xml.etree.ElementTree模块中Element类的find()、findtext()和findall()方法现在能够查找Element子类实例的子元素。bpo-32680: 现在
smtplib.SMTP对象始终有一个sock属性。bpo-34769: 修复了当事件循环处于调试模式且垃圾收集器在另一个线程中运行时异步生成器未完成的问题。
bpo-34936: 修复
tkinter.Spinbox.selection_element()中的TclError。由 Juliette Monsel 提供补丁。bpo-34829: 为了与
tkinter.Entry组件保持一致,向tkinter.Spinbox添加了selection_from、selection_range、selection_present和selection_to方法。由 Juliette Monsel 提供补丁。bpo-34911: 向 http.cookiejar.DefaultCookiePolicy 添加了 secure_protocols 参数,以允许调整协议,并默认支持 wss,即安全的 websocket 协议。
bpo-34922: 修复了
hashlib模块中 SHAKE 算法的digest()和hexdigest()方法中的整数溢出问题。bpo-34925: bisect 模块中函数的参数解析速度提高了 25%。
bpo-34900: 修复了
unittest.TestCase.debug()在调用带有子测试的测试方法时的问题。由 Bruno Oliveira 提供补丁。bpo-34844: logging.Formatter 增强 - 确保 logging.Formatter 中的样式和 fmt 匹配 - 在每个格式样式类(StrFormatStyle、PercentStyle、StringTemplateStyle)中添加了 validate 方法。 - 此方法在 logging.Formatter 类的构造函数中调用 - 同时在每个样式类的 format 方法中重新引发 KeyError,以便更清楚地表明这是无效格式字段的错误。
bpo-34897: 调整 test.support.missing_compiler_executable 检查,以便忽略名义命令名为 "" 的情况。由 Michael Felt 提供补丁。
bpo-34871: 修复 inspect 模块在解析可调用对象的
__text_signature__时污染sys.modules的问题。bpo-34898: 向
gzip.compress添加mtime参数以实现可重现的输出。由 Guo Ci Teo 提交补丁。bpo-28441: 在 Cygwin 和 MinGW 上,确保
sys.executable始终包含路径中的完整文件名,包括.exe后缀(除非它是符号链接)。bpo-34866: 向
cgi.FieldStorage添加max_num_fields,通过限制FieldStorage创建的MiniFieldStorage对象数量来增加 DOS 攻击的难度。bpo-34711: http.server 确保当本地路径以 "/" 结尾且不是目录时报告 HTTPStatus.NOT_FOUND,即使底层操作系统(如 AIX)接受此类路径作为有效文件引用。由 Michael Felt 提交补丁。
bpo-34872: 修复 asyncio.Task 的 C 实现中的自我取消问题。
bpo-34849: 不在 asyncio 循环迭代中记录等待
selector.select。等待对于任何 asyncio 程序来说都是非常正常的,记录其时间只会给日志添加噪音而不提供任何有用信息。bpo-34022: 环境变量
SOURCE_DATE_EPOCH不再覆盖py_compile.compile()的 invalidation_mode 参数的值,而是决定其默认值。bpo-34819: 在
Executor.map()和as_completed()中使用单调时钟计算超时,以防止系统时钟调整时超时偏离。bpo-34758: 将 .wasm -> application/wasm 添加到识别的文件类型和内容类型头列表中。
bpo-34789:
xml.sax.make_parser()现在接受任何可迭代对象作为其 parser_list 参数。由 Andrés Delfino 提交补丁。bpo-34334: 在
QueueHandler中,清除LogRecord中的exc_text以防止追踪信息被写入两次。bpo-34687: 在 Windows 上,asyncio 现在默认使用 ProactorEventLoop,而不是 SelectorEventLoop。
bpo-32892: 解析器现在将所有常量表示为
ast.Constant,而不是使用特定的常量 AST 类型(Num、Str、Bytes、NameConstant和Ellipsis)。这些类被视为已弃用,将在未来的 Python 版本中移除。bpo-34728: 当在方法
asyncio.sleep、asyncio.wait和asyncio.wait_for中使用loop时,添加弃用警告。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_: 如果返回 None 则抛出ValueError,如果返回非成员则抛出TypeError。bpo-34636: 加快对字节对象中s w和d的多次不匹配字符的重新扫描。(微优化)
bpo-24412: 向 unittest 添加了
addModuleCleanup()和addClassCleanup(),以支持针对setUpModule()和setUpClass()的清理操作。补丁由 Lisa Roach 提供。bpo-34630: 不在asyncio代码中记录SSL证书错误(连接错误记录已被跳过)。
bpo-32490: 防止在
subprocess异常消息中文件名重复。由Zackery Spytz提供补丁。bpo-34363: dataclasses.asdict()和.astuple()现在能正确处理命名元组。
bpo-34625: 更新供应商化的expat库版本至2.2.6。
bpo-32270: subprocess模块不再错误地关闭被重定向的文件描述符,即使它们在pass_fds中且不在默认的{0, 1, 2}集合内。
bpo-34622: 创建专用的
asyncio.CancelledError、asyncio.InvalidStateError和asyncio.TimeoutError异常类。 使它们继承自concurrent.futures包中对应的异常。将asyncio异常提取到一个单独的文件中。bpo-34610: 修复了
multiprocessing.managers.DictProxy的迭代器。bpo-34421: 修复distutils对非ASCII字符串的日志记录。这曾导致Windows上的安装问题。
bpo-34604: 修复了由于不可见字符或尾部空格导致的
pwd.getpwnam和grp.getgrnam错误消息中可能的乱码问题,通过使用字符串表示。由William Grzybowski提供补丁。bpo-30977: 使uuid.UUID使用
__slots__以减少其内存占用。基于Wouter Bolsterlee的原始补丁。bpo-34574: OrderedDict迭代器在pickling时不再耗尽。由Sergey Fedoseev提供补丁。
bpo-8110: 重构
subprocess以检查 Windows 特定模块,而非sys.platform == 'win32'。bpo-34530:
distutils.spawn.find_executable()现在在没有设置PATH环境变量时回退到os.defpath。bpo-34563: 在Windows上,修复multiprocessing.Connection对于非常大的读取的修复:修复_winapi.PeekNamedPipe()和_winapi.ReadFile()对于大于INT_MAX(通常是
2**31-1)的读取。bpo-34558: 修正Lib/ctypes/_aix.py中的拼写错误。
bpo-34282: 将
Enum._convert移动到EnumMeta._convert_并修复枚举成员被父属性遮蔽的问题。bpo-22872: 当队列关闭时,
multiprocessing.Queue.put()和multiprocessing.Queue.get()现在分别抛出ValueError而不是AssertionError和OSError。由Zackery Spytz提供补丁。bpo-34515: 修复
lib2to3.pgen2.tokenize中解析非ASCII标识符的问题(PEP 3131)。bpo-13312: 避免时间模块的年处理代码在传递非常低的负年值时可能出现的整数下溢(未定义行为)。
bpo-34472: 提高
zipfile中流式文件的兼容性。之前未写入可选签名,不支持某些ZIP应用程序。由Silas Sewell提供补丁。bpo-34454: 修复datetime类型的.fromisoformat()方法在给定非UTF-8可编码的Unicode时崩溃的问题。具体来说,datetime.fromisoformat()现在接受用作分隔符的代理Unicode码点。报告和测试由Alexey Izbyshev提供,由Paul Ganssle提供补丁。
bpo-6700: 修复inspect.getsourcelines对于模块级别的帧/回溯的问题。由Vladimir Matveev提供补丁。
bpo-34441: 修复了将具有无效
__subclasses__的ABC派生类作为第二个参数传给issubclass()时的崩溃问题。补丁由 Alexey Izbyshev 提供。bpo-34427: 修复
MutableSequence子类中a.extend(a)导致的无限循环问题。bpo-34412: 使
signal.strsignal()在 HP-UX 上工作。由 Michael Osipov 提供补丁。bpo-20849: shutil.copytree 现在接受一个新的
dirs_exist_ok关键字参数。由 Josh Bronson 提供补丁。bpo-31715: 将
.mjs文件扩展名与application/javascriptMIME 类型关联。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: 弃用
xml.dom.pulldom.DOMEventStream、wsgiref.util.FileWrapper和fileinput.FileInput的__getitem__()方法。bpo-33613: 修复
multiprocessing.semaphore_tracker中的竞态条件,该条件发生在追踪器接收到 SIGINT 信号但尚未注册信号处理程序以忽略它之前。bpo-34248: 当由于操作系统相关错误
dbm.gnu.open()和dbm.ndbm.open()无法打开数据库文件时,在引发的异常中报告文件名。由 Zsolt Cserna 提供补丁。bpo-33089: 添加 math.dist() 以计算两点之间的欧几里得距离。
bpo-34246:
smtplib.SMTP.send_message()不再修改 mail_options 参数的内容。补丁由 Pablo S. Blum de Aguiar 提供。bpo-31047: 修复 Windows 上无效路径的
ntpath.abspath。由 Franz Woellert 提供补丁。bpo-32321: 为 functools.reduce 添加纯 Python 回退。由 Robert Wright 提供补丁。
bpo-34270: 默认的 asyncio 任务类现在始终具有名称,可以使用两个新方法 (
get_name()和set_name()) 来获取或设置,并且会在repr()输出中显示。也可以使用asyncio.create_task()或事件循环的create_task()方法的新name关键字参数来设置初始名称。如果未设置初始名称,默认的 Task 实现会使用单调计数器生成类似Task-1的名称。bpo-34263: asyncio 的事件循环不会将超过一天的超时传递给 epoll/select 等。
bpo-34035: 修复 zipfile seek() 方法中的几个 AttributeError。由 Mickaël Schoentgen 提供补丁。
bpo-34075: 弃用将非 ThreadPoolExecutor 实例传递给
AbstractEventLoop.set_default_executor()。bpo-34251: 恢复
msilib.Win64以保持向后兼容性,因为它已被distutils的bdist_msi命令使用。bpo-19891: 在交互式会话退出时写入历史记录时,忽略由于主目录缺失或不可写导致的错误。补丁由 Anthony Sottile 提供。
bpo-33089: 增强了 math.hypot() 以支持超过两个维度。
bpo-34228: tracemalloc: PYTHONTRACEMALLOC=0 环境变量和 -X tracemalloc=0 命令行选项现在可以用来在启动时显式禁用 tracemalloc。
bpo-13041: 使用
shutil.get_terminal_size()在argparse.HelpFormatter类中正确计算终端宽度。初始由 Zbyszek Jędrzejewski-Szmek 提供补丁。bpo-34213: 允许冻结的数据类有一个名为“object”的字段。之前这与内部使用的“object”冲突。
bpo-34052:
sqlite3.Connection.create_aggregate(),sqlite3.Connection.create_function(),sqlite3.Connection.set_authorizer(),sqlite3.Connection.set_progress_handler()方法在传递不可哈希对象作为可调用对象时抛出 TypeError。这些方法现在不会将这样的对象传递给 SQLite API。之前的行为可能导致段错误。由 Sergey Fedoseev 提供补丁。bpo-34197:
csv读取器的 dialect 属性的 skipinitialspace, doublequote 和 strict 属性现在是bool实例,而不是整数 0 或 1。bpo-32788: 在
sqlite3模块中的__adapt__()和__conform__()方法中引发的除TypeError以外的错误现在会传播给用户。bpo-21446:
reload修复器现在使用importlib.reload()而不是已弃用的imp.reload()。bpo-940286: pydoc 的
Helper.showtopic()方法现在正确打印主题的交叉引用。bpo-34164:
base64.b32decode()可能会因错误的填充引发 UnboundLocalError 或 OverflowError。现在在这些情况下总是引发base64.Error。bpo-34097: ZipFile 现在可以通过新的
strict_timestamps参数压缩早于 1980-01-01 和晚于 2107-12-31 的文件,代价是将时间戳设置为限制值。bpo-34108: 在 2to3 重构中移除了多余的 CR。
bpo-34070: 确保在打开文件时
buffering=-1的情况下,仅检查句柄是否为 tty。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函数 (exists()、lexists()、isdir()、isfile()、islink()和ismount()) 以及返回布尔结果的pathlib.Path方法 (exists()、is_dir()、is_file()、is_mount()、is_symlink()、is_block_device()、is_char_device()、is_fifo()、is_socket()) 现在会返回False,而不是引发ValueError或其子类UnicodeEncodeError和UnicodeDecodeError。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: 如果这些函数的可重入变体可用,则在
grp.getgrnam、grp.getgrgid、pwd.getpwnam和pwd.getpwuid上释放 GIL。由 William Grzybowski 提供补丁。bpo-33623: 修复在 __del__ 中创建 asyncio.Future 时可能出现的 SIGSGV。
bpo-11874: 当将用法分解为可包装部分时使用更好的正则表达式。避免来自自定义 metavar 字符串的错误断言错误。
bpo-30877: 修复了 JSON 解码器 Python 实现中的一个错误,该错误阻止了在完成解码后清除已解析字符串的缓存。基于 c-fos 的补丁。
bpo-33604: 移除标记为在 3.8 中移除的 HMAC 默认 md5(原计划在 3.6 中移除,PR 7062 中推迟到 3.8)。
bpo-33582: 为 inspect.formatargspec 发出弃用警告。
bpo-21145: 添加
functools.cached_property装饰器,用于计算属性,这些属性在实例的生命周期内被缓存。bpo-33570: 更改 TLS 1.3 密码套件设置,以兼容 OpenSSL 1.1.1-pre6 及更新版本。OpenSSL 1.1.1 将默认启用 TLS 1.3 密码。
bpo-28556: 不再简化
typing.Union的参数。现在Union[Manager, Employee]在运行时不会简化为Employee。之前的简化导致了一些错误,并限制了内省的可能性。bpo-12486:
tokenize.generate_tokens()现在被记录为一个公共 API,用于对 Unicode 字符串进行分词。它之前存在但未被记录。bpo-33540: 向
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: 修复 Windows proactor 事件循环中
ReadTransport.resume_reading的竞争条件。修复当 ClassVar 作为字符串前向引用提供时
typing.get_type_hints()的失败。bpo-33516:
unittest.mock.MagicMock现在支持__round__魔术方法。bpo-28612: 向 urllib 的
RobotFileParser添加了对站点地图的支持,作为RobotFileParser.site_maps()。补丁由 Lady Red 提供,基于 Peter Wirtz 的补丁。bpo-28167: 移除自3.5版起已弃用的platform.linux_distribution。
bpo-33504: 将
configparser的默认字典实现从collections.OrderedDict切换为标准dict类型。bpo-33505: 通过重新排序if检查优化asyncio.ensure_future():速度提升1.17倍。
bpo-33497: 向cgi.parse_multipart添加errors参数,并使FieldStorage中的编码使用给定的errors(Twisted所需)。由Amber Brown提供补丁。
bpo-29235:
cProfile.Profile类现在可用作上下文管理器。补丁由Scott Sanderson提供。bpo-33495: 更改dataclasses.Fields的repr以使用其每个成员的repr,而非str。这使得每个字段实际代表的内容更加清晰。这对于'type'成员尤为明显。
bpo-26103: 修正
inspect.isdatadescriptor以查找__set__或__delete__。由Aaron Hall提供补丁。bpo-29209: 移除了
XMLParser构造函数的doctype()方法和 html 参数。子类中定义的doctype()方法将不再被调用。ElementTree模块中已弃用的方法getchildren()和getiterator()现在发出DeprecationWarning而非PendingDeprecationWarning。bpo-33453: 修复dataclasses以在使用字面字符串类型注解或使用PEP 563“推迟的注解评估”时工作。仅为ClassVar("ClassVar"和"typing.ClassVar")和InitVar("InitVar"和"dataclasses.InitVar")检测特定的字符串前缀。
bpo-28556: typing 模块中的小修复:向
NamedTuple.__new__添加注解,在Generic.__new__中传递*args和**kwds。 原始 PR 由 Paulius Šarka 和 Chad Dombrova 提供。bpo-33365: 如果在
http.client中将 debuglevel 设置为>0,除了头键外还打印头值。补丁由Marco Strigl提供。bpo-20087: 更新了支持glibc 2.27地区设置的别名映射。
bpo-33422: 修复在pydoc上查找字节/字符串字面量时尾随引号被删除的问题。由Andrés Delfino提供补丁。
bpo-28167: 函数
platform.linux_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-33197: 更新构造无效inspect.Parameters时的错误信息。由Donghee Na提供补丁。
bpo-33375: warnings模块现在从代码对象而非帧的全局命名空间找到与警告相关联的Python文件。这与tracebacks和pdb如何查找文件名一致,应该能更好地处理动态执行的代码。
bpo-33336:
imaplib现在允许在IMAP4.uid()中使用MOVE命令(RFC 6851: IMAP MOVE 扩展)并可能作为IMAP4对象支持的方法名称。bpo-32455: 向
dis.stack_effect()添加了 jump 参数。bpo-27485: 重命名并弃用
urllib.parse()中未文档化的函数。bpo-33332: 添加
signal.valid_signals()以暴露POSIX sigfillset()功能。bpo-33251: 修复了
ConfigParser.items(),使其不再将通过vars()传递的键值对包含在结果输出中。bpo-33329: 修复了在新版 glibc 上的多进程回归问题。
bpo-33334:
dis.stack_effect()现在支持所有定义的 opcode,包括 NOP 和 EXTENDED_ARG。bpo-991266: 修复了
http.cookies.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: 修复了
_SelectorSocketTransport中的文件描述符泄漏问题。由 Vlad Starostin 提供补丁。bpo-33256: 修复了
cgitb.html()生成的 html 中<module>调用的显示问题。补丁由 Stéphane Blondon 提供。bpo-33144: 优化了
random.Random()及其子类机制,仅在类/子类实例化时检查一次其getrandbits()方法是否可以被其他方法(包括randrange())依赖,用于生成任意大的随机整数。由 Wolfgang Maier 提供补丁。bpo-33185: 修复了使用
-m开关运行 pydoc 时的回归问题。(此回归问题由解决 bpo-33053 在 3.7.0b3 版本引入)此修复还改变了 pydoc,使其在必要时将
os.getcwd()添加到sys.path中,而不是添加"."。bpo-29613: 在
http.cookies模块中添加了对SameSitecookie 标志的支持。bpo-33169: 当调用
importlib.machinery.invalidate_caches()时,删除sys.path_importer_cache中的None条目。bpo-33203:
random.Random.choice()现在对于空序列会一致地引发IndexError,即使是从没有getrandbits()实现的子类中调用也是如此。bpo-33224: 为 PEP 479 更新 difflib.mdiff()。将生成器中未捕获的 StopIteration 转换为 return 语句。
bpo-33209: 在
pickle.Pickler.dump()的 C 实现结束时结束帧。bpo-32861: urllib.robotparser 的
__str__表示现在包括通配符条目和 "Crawl-delay" 和 "Request-rate" 字段。还移除了被附加到字符串末尾的额外换行符。由 Michael Lazar 提供补丁。bpo-23403:
pickle中的DEFAULT_PROTOCOL被提升到 4。协议 4 在 PEP 3154 中有描述,自 Python 3.4 起可用。与 Python 3.0 中引入的协议 3 相比,它提供了更好的性能和更小的尺寸。bpo-20104: 改进了
os.posix_spawn()中的错误处理并修复了一处引用泄漏。bpo-33106: 从只读 dbm 数据库中删除键会引发模块特定的错误,而不是 KeyError。
bpo-33175: 在数据类中,Field.__set_name__ 现在查找默认值的类上的 __set_name__ 特殊方法,而不是实例上的。
bpo-32380: 创建 functools.singledispatchmethod 以支持对描述符和方法的通用单分派。
bpo-33141: 如果 Field 对象有自己的 __set_name__,则让它们将 __set_name__ 传递给它们的默认值。
bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。
bpo-32873: 通过复制和pickle操作将类型变量和特殊类型形式视为不可变。这修复了几个小问题和不一致性,并提高了与Python 3.6的向后兼容性。
bpo-33134: 在计算数据类的__hash__时,使用查找表包含返回__hash__值的函数。这比查找字符串然后测试该字符串以决定做什么有所改进。
bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。
bpo-32505: 如果数据类的成员变量是Field类型但没有类型注解,则抛出TypeError。
bpo-33078: 修复了由于测试依赖sem_getvalue而在OSX上导致的失败。
bpo-33116: 将'Field'添加到dataclasses.__all__中。
bpo-32896: 修复了一个错误,即当子类化一个使用default_factory字段的数据类时会生成一个不正确的类。
bpo-33100: 数据类:如果一个字段有一个默认值是MemberDescriptorType,那么它是因为该字段在__slots__中,而不是一个实际的默认值。
bpo-32953: 如果一个非数据类继承自一个冻结的数据类,允许向派生类添加属性。只有来自冻结数据类的属性不能被赋值。要求层次结构中的所有数据类要么全部冻结,要么全部非冻结。
bpo-33097: 在解释器关闭期间调用
executor.submit时抛出RuntimeError。bpo-32968: 涉及Fraction和float的模和地板除法应返回float。
bpo-33061: 在typing.py的
__all__中添加缺失的NoReturn。bpo-33078: 修复当发生pickling错误时multiprocessing.Queue中的大小处理。
bpo-33064: lib2to3现在正确支持函数签名中
*args和**kwargs后的尾随逗号。bpo-33056: 修复concurrent.futures.ProcessPoolExecutor中泄漏的文件描述符未正确关闭的问题。
bpo-33021: 在fstat()调用期间释放GIL,避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。
bpo-31804: 避免在标准流在退出时被关闭或为None时,multiprocessing.Process失败。
bpo-33034: 当使用
urlparse()和urlsplit()将port属性转换为非整数值时,提供明确的错误消息。由Matt Eaton提供补丁。bpo-30249: 改进struct.unpack_from()在缓冲区大小和偏移量问题上的异常消息。
bpo-33037: 在SSL传输关闭后跳过发送/接收数据。
bpo-27683: 修复
ipaddress中的一个回归问题,当网络由包含整数掩码且仅剩1位地址的元组构造时,hosts()的结果为空。bpo-22674: 在signal模块中添加strsignal()函数,该函数返回给定信号的系统描述,如同strsignal(3)返回的那样。
bpo-32999: 修复
ABC.__subclasscheck__(cls, subclass)的C实现,在subclass不是类型对象时崩溃的问题。bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。
bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。
bpo-32056: 改进了在模块
aifc、wave和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: 修复了
asyncio.Condition问题,该问题在通知并取消条件锁后默默忽略了取消。由Bar Harel提供补丁。bpo-32819: ssl.match_hostname() 已被简化,不再依赖 re 和 ipaddress 模块处理通配符和IP地址。对于无效通配符的错误报告已改进。
bpo-19675: 如果初始化失败,
multiprocessing.Pool不再泄漏进程。bpo-32394: socket: 在旧版本Windows运行时移除TCP_FASTOPEN、TCP_KEEPCNT、TCP_KEEPIDLE、TCP_KEEPINTVL标志。
bpo-31787: 修复了多个模块中
__init__()方法的内存泄漏问题。(由Oren Milman贡献)bpo-30157: 修复了在只有最后一个字段被引用时,csv.Sniffer.sniff() 中猜测引用和分隔符的问题。由Jake Davis提供补丁。
bpo-30688: 在正则表达式中添加了对
\N{name}转义的支持。基于Jonathan Eunice的补丁。bpo-32792: collections.ChainMap() 保留了底层映射的顺序。
bpo-32775:
fnmatch.translate()不再生成包含集合运算的模式。以 '[' 开头或包含 '--'、'&&'、'~~' 或 '||' 的集合在未来版本的正则表达式中将会有不同的解释。目前它们会发出警告。fnmatch.translate() 现在可避免意外生成包含此类集合的模式。bpo-32622: 为Windows proactor事件循环实现原生快速发送文件功能。
bpo-32777: 修复了在POSIX系统的子进程中,当标记文件描述符为可继承时,subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。
bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在,在支持dl的平台上,共享扩展已明确链接到libdl。
bpo-32749: 使用'r'标志打开的
dbm.dumb数据库现在变为只读。使用'r'和'w'标志的dbm.dumb.open()如果数据库不存在,将不再创建数据库。bpo-32741: 实现
asyncio.TimerHandle.when()方法。bpo-32691: 在使用pdb运行模块时使用mod_spec.parent。
bpo-32734: 修复了
asyncio.Lock()的安全问题,该问题允许多次获取和锁定同一个锁,而锁并未释放。由Bar Harel提供补丁。bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。
bpo-31453: 添加TLSVersion常量和SSLContext.maximum_version / minimum_version属性。新API封装了OpenSSL 1.1 https://web.archive.org/web/20180309043602/https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html 的特性。
bpo-24334: 清理了ssl模块的内部实现细节。SSLSocket减少了一层间接引用。所有者与会话信息现在由SSLSocket和SSLObject的构造函数处理。通道绑定实现已被简化。
bpo-31848: 修复Aifc_read.initfp()中当SSND块未找到时的错误处理。补丁由Zackery Spytz提供。
bpo-32585: 向
tkinter.ttk添加Ttk spinbox小部件。由Alan D Moore提供补丁。bpo-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-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-31508: 移除了
tkinter.ttk.Treeview.selection中对参数的支持。这在3.6中已被弃用。使用像selection_set这样的专门方法来更改选择。bpo-29456: 修复韩文音节标准化中的漏洞:u1176、u11a7和u11c3。
文档¶
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: 修复了关于frame对象中不存在的
f_restricted属性的文档。由Stéphane Wirtel提供补丁。bpo-35042: 用pep角色替换PEP XYZ,并允许直接链接到PEPs。
bpo-35044: 修复了文档中使用
exc角色指向适当异常的错误。由Stéphane Wirtel提供补丁。bpo-35035: 将
email.utils的文档重命名为email.utils.rst。bpo-34967: 使用app.add_object_type()代替已弃用的Sphinx函数app.description_unit()。
bpo-34913: 添加了关于gzip模块新命令行界面的文档。
bpo-32174: chm 文档现在可以在某些 MBCS Windows 系统上正确显示非 ASCII 字符。
bpo-11233: 为文档创建可用性指令。原始由Georg Brandl提供补丁。
bpo-34790: 文档说明将协程传递给 asyncio.wait() 可能会引起混淆。
bpo-34552: 明确说明
==操作符有时等同于is。<、<=、>和>=操作符仅在它们有意义的地方定义。bpo-28617: 修复了 stdtypes 文档中关于支持成员资格测试的类型的错误信息。
bpo-20177: 将 datetime.date.fromtimestamp 迁移到 Argument Clinic。由 Tim Hoffmann 提供补丁。
bpo-34065: 修复了 basicConfig 文档标记语法的错误写法。
bpo-33460: 在教程第3章中,用正确的错误代码替换了省略号。
bpo-33847: 在索引中添加 '@' 操作符条目。
bpo-33409: 澄清了 PEP 538 的 PYTHONCOERCECLOCALE 和 PEP 540 的 PYTHONUTF8 模式之间的关系。
bpo-33197: 在 ParameterKind.description 的文档中添加了 versionadded 标签。
bpo-17045: 改进了 PyTypeObject 的 C-API 文档。包括添加了几个快速参考表和许多缺失的槽/类型定义条目。现有的条目也被清理,格式更加一致。
bpo-33736: 改进了
asyncio.open_connection()、asyncio.start_server()及其 UNIX 套接字对应函数的文档。bpo-23859: 文档说明
asyncio.wait()在超时时不会取消它的 futures。bpo-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-18802: ipaddress 的文档更改。由 Jon Foster 和 Berker Peksag 提供补丁。
bpo-27428: 更新文档以澄清
WindowsRegistryFinder实现了MetaPathFinder。(补丁由 Himanshu Lakhara 提供)bpo-28124: ssl 模块函数 ssl.wrap_socket() 已被弱化并弃用,推荐使用更安全高效的 SSLContext.wrap_socket() 方法。
bpo-17232: 澄清 -O 和 -OO 的文档。由 Terry Reedy 提供补丁。
bpo-32436: 为 contextvars 模块(PEP 567)添加文档。
bpo-32800: 更新 xml 默认命名空间的 w3c 文档链接。
bpo-11015: 更新
test.support文档。bpo-32613: 更新 faq/windows.html,使用 PEP 397 中的 py 命令而非 python。
bpo-8722: 文档化当属性
get()方法引发AttributeError时__getattr__()的行为。bpo-32614: 修改文档中的正则表达式示例,使用原始字符串以防止
DeprecationWarning,并在正则表达式 HOWTO 中添加文本以突出弃用。bpo-20709: 删除解释 os.utime() 在 Windows 下不支持目录作为路径的段落。由 Jan-Philip Gehrcke 提供补丁。
bpo-32722: 移除生成器表达式教程中的不良示例。由 Stéphane Wirtel 提供补丁。
bpo-31972: 改进
pathlib.PurePath子类的文档字符串。bpo-30607: 在构建文档时使用外部化的
python-docs-theme包。bpo-8243: 添加关于 curses.addch 和 curses.addstr 在窗口或 pad 外部写入时的异常行为的注释。
bpo-32337: 更新与
dict顺序相关的文档。bpo-31432: 澄清 ssl.SSLContext.verify_mode 的 CERT_NONE、CERT_OPTIONAL 和 CERT_REQUIRED 标志的含义。
测试¶
bpo-35772: 在 ppc64 上使用 tmpfs 文件系统修复 test_tarfile 的稀疏文件测试。修复测试文件系统是否支持稀疏文件的函数:创建一个包含数据和“空洞”的文件,而不是创建一个不包含数据的文件。tmpfs 的有效块大小是一个页面大小(tmpfs 存在于页面缓存中)。RHEL 在 aarch64、ppc64、ppc64le 上使用 64 KiB 页面,只有 s390x 和 x86_64 使用 4 KiB 页面,而测试打孔的是 4 KiB。
bpo-35045: 使 ssl 测试不那么严格,也接受 TLSv1 作为系统默认值。这些更改修复了 Fedora 29 上的 test_min_max_version。
bpo-32710:
test_asyncio/test_sendfile.py现在像其他测试一样使用tearDownModule()重置事件循环策略,以防止在 Windows 上运行测试时出现警告。bpo-33717: test.pythoninfo 现在记录所有时钟的信息,而不仅仅是 time.time() 和 time.perf_counter()。
bpo-35488: 向 pathlib 的 Path.match() 添加一个测试,以验证它不支持 glob 风格的 ** 递归模式匹配。
bpo-31731: 修复 test_io 的
check_interrupted_write()中的竞争条件:直接创建带有 SIGALRM 信号阻塞的线程,而不是稍后从线程中阻塞信号。以前,有可能线程在信号被阻塞之前就收到了信号。bpo-35424: 修复 test_multiprocessing_main_handling:使用
multiprocessing.Pool与上下文管理器,然后显式加入池。bpo-35519: 将
test.bisect模块重命名为test.bisect_cmd,以避免在直接运行测试如./python Lib/test/test_xmlrpc.py时与bisect模块冲突。bpo-35513: 在测试中用
time.monotonic()替换time.time()来测量时间差。bpo-34279:
test.support.run_unittest()不再在测试结果包含跳过的测试时引发TestDidNotRun异常。现在只有在没有运行任何测试且没有跳过任何测试时才会引发该异常。bpo-35412: 向
test_future4添加测试用例:检查 unicode 字面量。bpo-26704: 添加了演示实例方法双重修补的测试。由 Anthony Sottile 提供补丁。
bpo-33725: 在 macOS 的较新版本上,test_multiprocessing_fork 可能会崩溃。在问题解决之前,在 macOS 上跳过该测试。
bpo-35352: 修改 test_asyncio 以使用测试目录中的证书集。
bpo-35317: 修复
test_email中的mktime()溢出错误:在特定时区下运行test_localtime_daylight_true_dst_true()和test_localtime_daylight_false_dst_true()。bpo-21263: 在多次报告 test_gdb 在 macOS 上无法正常工作后,并且由于 gdb 不再默认附带,当使用 LLVM Clang 编译 Python 时,现在在 macOS 上跳过 test_gdb。由 Lysandros Nikolaou 提供补丁
bpo-34279: 当在特定测试文件中没有执行任何测试时,regrtest 发出警告。此外,如果在所有测试文件中没有执行任何测试,则发出新的最终结果状态。由 Pablo Galindo 提供补丁。
bpo-34962: Doc 中的 docstest 现在通过了,并且在 CI 中强制执行。
bpo-23596: 为 gzip 模块的命令行使用 argparse。由 Antony Lee 提供补丁
bpo-34537: 当
LC_ALL=C且 GDB 是用 Python 3.6 或更早版本编译时,修复test_gdb.test_strings()。bpo-34587: test_socket: 移除RDSTest.testCongestion()。该测试试图填满接收者的套接字缓冲区并期望出现错误。但RDS协议并不要求这一点。此外,RDS的Linux实现期望消息的生产者降低其速率,触发错误不是接收者的角色。该测试在Fedora 28上按设计失败,因此直接移除它。
bpo-34661: 如果unzip不支持-t,修复test_shutil。
bpo-34200: 通过不使用可怕的test.support.module_cleanup()逻辑来保存和恢复测试用例之间的sys.modules内容,修复了test_pkg的非确定性波动。
bpo-34569: 实验性的PEP 554数据通道现在在32位系统上正确地在子解释器之间传递负的PyLong对象。由Michael Felt提供补丁。
bpo-34594: 修复测试中硬编码的
errno值的使用。bpo-34579: 为AIX修复test_embed,由Michael Felt提供补丁
bpo-34542: 使用3072位的RSA密钥和SHA-256签名用于测试证书和密钥。
bpo-11193: 移除
test_subprocess.test_undecodable_env中对AIX的特殊条件bpo-34347: 为AIX修复
test_utf8_mode.test_cmd_linebpo-34490: 在AIX上,使用AF_UNIX家族套接字的getsockname()不提供'sockname',因此跳过对transport.get_extra_info('sockname')的调用
bpo-34391: 通过从数据套接字读取,为TLS 1.3修复ftplib测试。
bpo-11192: 在 AIX 6.1 及更高版本上修复
test_socket,IPv6 区域 ID 仅由inet_pton6_zone()支持。 切换到基于运行时的platform.system()来确定当前平台,而不是基于构建时的sys.platform()bpo-34399: 更新所有RSA密钥和DH参数以使用至少2048位。
bpo-34373: 为 AIX 修复
test_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: 确保
test_smtplib.py中的SMTPUTF8SimTests测试类被运行。bpo-27643: Test_C 测试用例需要“有符号短”位字段,但 IBM XLC 编译器(在 AIX 上)不支持此功能,当使用 AIX 和 XLC 时跳过代码和测试
适用于 Python2-2.7 及以后版本
bpo-19417: 添加 test_bdb.py。
bpo-31809: 添加测试以验证与 secp ECDH 曲线的连接。
构建¶
bpo-34691: _contextvars 模块现在被内置到 Windows 上的核心 Python 库中。
bpo-35683: 改进了 Azure Pipelines 构建步骤,现在正确验证布局
bpo-35642: 从 pythoncore.vcxproj 中移除 asynciomodule.c
bpo-35550: 修复编译时错误的 Solaris #ifdef 检查,改为查找 __sun && __SVR4 而不是 sun。
bpo-35499:
make profile-opt不再用CFLAGS替换CFLAGS_NODIST。现在它将配置文件引导优化(PGO)标志添加到CFLAGS_NODIST中:原有的CFLAGS_NODIST标志被保留。bpo-35257: 在编译 C 扩展时,避免将链接时间优化(LTO)的链接器标志泄漏到 distutils 中。
bpo-35351: 当使用 clang 和 LTO 构建 Python 时,不再将 LTO 标志传递到 CFLAGS 中,以通过 distutils 构建第三方 C 扩展。
bpo-35139: 修复在
Modules/Setup中静态链接pyexpat时的编译器错误。bpo-35059: PCbuild:在 Debug 模式下将 InlineFunctionExpansion 设置为 OnlyExplicitInline("/Ob1" 选项)在 pyproject.props 中,以展开标记为内联的函数。这一变化应该会使在 Windows 上以 Debug 模式编译的 Python 稍微快一些。
bpo-35011: 恢复使用 pyexpatns.h 来隔离我们嵌入的 expat C 库副本,以便其符号在链接或动态加载时不会与嵌入应用程序或其他带有自己版本 libexpat 的扩展模块冲突。
bpo-28015: 使 --with-lto 与 clang 正确工作。
bpo-34765: 将过时的 install-sh 文件更新至 automake v1.16.1 的最新修订版。
bpo-34585: 在 configure.ac 中使用编译测试而不是执行代码来检查浮点字节顺序,以便这些检查在交叉编译构建中工作。
bpo-34710: 修复了使用 OpenSSL 和严格 CFLAGS 构建 SSL 模块的问题。
bpo-34582: 为回归测试添加 JUnit XML 输出并更新 Azure DevOps 构建。
bpo-34081: 在 Docs Makefile 中将 Sphinx 警告视为错误。
bpo-34555: 修复了无法同时未定义
HAVE_LINUX_VM_SOCKETS_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: 默认情况下,配置在
Modules/Setup中的模块不再使用-DPy_BUILD_CORE构建。相反,特别需要该预处理器定义的模块在其单独条目中包含它。bpo-33182: 嵌入测试可以再次用clang 6.0构建。
bpo-33163: 将pip升级到9.0.3,setuptools升级到v39.0.1。
bpo-33012: gcc 8 新增了一个警告启发式方法来检测无效的函数转换,而标准的 Python 构建似乎经常触发该警告。最常见的是将 METH_NOARGS 函数(仅使用一个参数)转换为 PyCFunction。通过为所有实现 METH_NOARGS 的函数添加一个虚拟参数来解决这个问题。
bpo-32898: 修复了在使用 COUNT_ALLOCS 时的 Python 调试构建问题。
bpo-29442: 在 setup.py 中用 argparse 替换 optparse。
Windows¶
bpo-35890: 修复 GetVersionEx 和 wcstok 的 API 调用一致性。
bpo-32560:
py启动器现在将其STARTUPINFO结构转发给子进程。bpo-35854: 在 Windows 上修复 EnvBuilder 和 --symlinks 在 venv 中的问题。
bpo-35811: 避免在通过 py.exe 启动时传播 venv 设置。
bpo-35797: 修复 multiprocessing 模块使用的默认可执行文件。
bpo-35758: 允许在 ARM 上使用 MSVC 进行构建。
bpo-29734: 修复 Windows 上 os.stat 中的句柄泄漏问题。
bpo-35596: 为嵌入式发行版使用未检查的 PYC,以避免 zipimport 限制。
bpo-35596: 修复 vcruntime140.dll 被多次添加到嵌入式发行版的问题。
bpo-35402: 更新 Windows 构建以使用 Tcl 和 Tk 8.6.9。
bpo-35401: 将 Windows 构建更新至 OpenSSL 1.1.0j。
bpo-34977: Windows 上的 venv 现在将使用 python.exe 重定向器,而不是从基础环境中复制实际的二进制文件。
bpo-34977: 添加了对构建 Windows 应用商店包的支持。
bpo-35067: 移除 _distutils_findvs 模块并改用 vswhere.exe。
bpo-32557: 允许 shutil.disk_usage 在 Windows 上接受文件路径。
bpo-34770: 修复 pyshellext.cpp 中可能的空指针解引用问题。
bpo-34603: 修复由 MSVC 生成的函数返回结构体的问题。
bpo-34581: 在 socketmodule.c 中使用
#ifdef _MSC_VER保护 MSVC 特定代码。bpo-34532: 修复了 py.exe 的列表版本参数的退出代码。
bpo-34062: 修复了 py.exe 启动器的 '--list' 和 '--list-paths' 参数。
bpo-34225: 确保INCLUDE和LIB目录不以反斜杠结尾。
bpo-34011: 一套代码已被更改,这些代码从运行的Python位置复制DLLs和init.tcl到正在创建的venv中。这些复制仅在从Python源代码构建运行时需要,现在复制代码仅在这种情况下运行,而不是在创建venv时总是运行。
bpo-34006: 恢复Windows帮助文档的行长度限制。行长度限制不需要,因为页面显示在单独的应用程序中而不是浏览器标签中。它也可能与DPI设置产生不良互动。
bpo-31546: 恢复在提示符等待用户输入时运行PyOS_InputHook。这恢复了交互式GUI窗口(如Matplotlib图形)与Windows上提示符的集成。
bpo-30237: 当ReadConsole被CancelSynchronousIo取消时输出错误而不是崩溃。
bpo-33895: 在调用获取Windows加载器锁的函数时释放GIL。
bpo-33720: 减少发布版本上的最大marshal递归深度。
bpo-29097: 修复
datetime.fromtimestamp()在Windows上对0到86400之间的值错误抛出OSError的bug。由Ammar Askar提供补丁。bpo-33316: PyThread_release_lock总是失败
bpo-33184: 更新Windows安装程序以使用OpenSSL 1.1.0h。
bpo-32890: 修复os.execve()和os.truncate()中使用GetLastError()而不是errno的问题。
bpo-33016: 修复nt._getfinalpathname中潜在使用未初始化内存的问题。
bpo-32903: 修复如果当前目录设置为UNC路径时Windows上os.chdir()的内存泄漏。
bpo-32901: 将Tcl和Tk版本更新到8.6.8
bpo-31966: 修复WindowsConsoleIO.write()写入空数据的问题。
bpo-32409: 确保activate.bat可以处理Unicode内容。
bpo-32457: 改进启动Python时对非规范化可执行路径的处理。
bpo-32370: 在uuid模块中为ipconfig输出使用正确的编码。由Segev Finer提交补丁。
bpo-29248: 修复 Windows 上的
os.readlink(),它错误地将重新解析数据缓冲区的PrintNameOffset字段视为字符数而非字节数。 由 Craig Holmquist 和 SSE4 提交补丁。bpo-1104: 正确处
msilib.SummaryInfo.GetProperty()中的字符串长度,以防止其截断最后一个字符。
macOS¶
bpo-35401: 更新macOS安装程序以使用OpenSSL 1.1.0j。
bpo-35025: 在macOS上正确保护
timemodule中使用CLOCK_GETTIME等宏。bpo-24658: 在macOS上,修复从大小超过2 GiB的文件读取和写入的问题。
bpo-34405: 为macOS安装程序构建更新至OpenSSL 1.1.0i。
bpo-33635: 在macOS上,某些文件描述符(例如/dev/fd/3)的stat将导致坏文件描述符OSError。在is_dir、is_file及类似方法中添加了对这一异常的防护。DirEntry.is_dir也可能抛出此异常,因此_RecursiveWildcardSelector._iterate_directories也扩展了相同的错误忽略模式。
bpo-13631: 在macOS上通过editline模拟初始化readline时,现在可以正确处理用户主目录中的.editrc文件。
bpo-33184: 更新macOS安装程序构建以使用OpenSSL 1.1.0h。
bpo-32726: 为macOS 10.6+安装程序构建并链接Tcl/Tk 8.6的私有副本。10.9+安装程序变体已经这样做了。这意味着python.org macOS安装程序提供的Python 3.7不再需要或使用任何外部版本的Tcl/Tk,无论是系统提供的还是用户安装的,如ActiveTcl。
bpo-32901: 将macOS 10.9+安装程序更新至Tcl/Tk 8.6.8。
bpo-31903: 在
_scproxy中,调用SystemConfiguration时释放 GIL 以避免死锁。
IDLE¶
bpo-35770: IDLE在macosx上删除了选项 => 配置IDLE。之前错误地删除了窗口 => 缩放高度(缩放高度现在在选项菜单中)。在Mac上,设置对话框通过IDLE菜单中的偏好设置访问。
bpo-35769: 将IDLE的新文件名从'Untitled'改为'untitled'。
bpo-35660: 修复idlelib.window中的导入。
bpo-35641: 当函数没有文档字符串时,正确格式化
calltip。bpo-33987: 为ttk小部件使用ttk框架。
bpo-34055: 修复IDLE Shell中错误的'智能'缩进和换行。
bpo-35591: 现在,当未找到选择时,查找选择也能工作。
bpo-35196: 加速squeezer的行计数。
bpo-35598: 更新config_key:使用PEP 8命名和ttk小部件,使一些对象全局化,并添加测试。
bpo-28097: 在Shell菜单中添加上一个/下一个历史记录条目。
bpo-35208: Squeezer现在在新行之前正确计算换行。
bpo-35555: 当代码上下文菜单条目不适用时,将其置灰。
bpo-35521: 记录IDLE编辑器代码上下文功能。在IDLE文档中添加一些内部引用。
bpo-22703: 代码上下文菜单标签现在在显示/隐藏代码上下文之间切换。缩放高度菜单现在在缩放/恢复高度之间切换。缩放高度已从窗口菜单移动到选项菜单。
bpo-35213: 在适当的地方,在idlelib中使用'macOS'。
bpo-34864: 在macOS上,如果系统偏好设置“打开文档时偏好标签页”设置为“总是”,则发出警告。
bpo-34864: 记录两个在MacOS上的IDLE问题。系统偏好设置Dock“总是偏好标签页”设置禁用了一些IDLE功能。菜单与Windows和Linux的描述有些不同。
bpo-35202: 从lib/idlelib中移除未使用的导入。
bpo-33000: 记录IDLE的Shell没有行限制。一个无限运行的程序可能会耗尽内存。
bpo-23220: 解释IDLE的Shell如何显示输出。
bpo-35099: 改进关于IDLE运行用户代码的文档。该部分从“IDLE -- 控制台差异”更名为“运行用户代码”。主要涵盖了使用自定义
sys.stdxxx对象的影响。bpo-35097: 在IDLE文档中添加解释编辑器窗口的子章节。主题包括打开、标题和状态栏、.py*扩展名以及运行。
bpo-35093: 在IDLE文档中记录IDLE文档查看器。在“帮助和偏好设置”中的“帮助来源”子部分添加一段。
bpo-35088: 更新idlelib.help.copy_string的文档字符串。我们现在使用git和后向移植而不是hg和前向合并。
bpo-35087: 为当前文档构建更新idlelib帮助文件。主要变化是消除了章节-节号。
bpo-34548: 为只读文本视图使用配置的颜色主题。
bpo-1529353: 启用shell中长输出的“压缩”,以避免性能下降并在不丢失历史记录的情况下清理历史。压缩的输出可以复制、在单独窗口中查看并“解压”。
bpo-34047: 修复了macOS上鼠标滚轮的滚动方向。
bpo-34275: 使IDLE的调用提示在Mac上始终可见。某些MacOS-tk组合需要.update_idletasks()。由Kevin Walzer提供的补丁。
bpo-34120: 修复关闭某些窗口和对话框后的无响应问题。
bpo-33975: 在运行htests时避免小字体。由于人类查看测试的部分目的是确定小部件看起来是否正确,因此重要的是它们在测试时看起来与运行IDLE时相同。
bpo-33905: 为idlelib.stackview.StackBrowser添加测试。
bpo-33924: 将mainmenu.menudefs键'windows'更改为'window'。每个其他menudef键都是主菜单项的小写版本。
bpo-33906: 将idlelib.windows重命名为window,以匹配主菜单上的Window,并移除最后一个复数模块名称。
bpo-33917: 修复并记录idlelib/idle_test/template.py。修订后的文件编译、运行和测试均正常。idle_test/README.txt说明了如何使用它来创建新的IDLE测试文件。
bpo-33904: IDLE:在rstrip中,将类RstripExtension重命名为Rstrip
bpo-33907: 为了保持一致性和清晰度,重命名一个IDLE模块和类。模块calltips及其类CallTips现在更名为calltip和Calltip。在模块calltip_w中,类CallTip现在更名为CalltipWindow。
bpo-33856: 在IDLE的欢迎消息中添加“帮助”
bpo-33839: IDLE:重构ToolTip和CallTip并添加文档和测试
bpo-33855: 对所有IDLE模块进行最小化测试。添加缺失的文件,导入模块,实例化类,并检查覆盖率。检查现有文件。
bpo-33656: 在Windows上,添加API调用表明tk针对DPI进行缩放。在Windows 8.1+或10上,Python二进制文件的DPI兼容性属性未更改,且显示器分辨率大于96 DPI时,这应使文本和线条更清晰。否则应无影响。
bpo-33768: 点击上下文行将该行移动到编辑器窗口的顶部。
bpo-33763: IDLE:使用只读文本小部件代替标签小部件作为代码上下文。
bpo-33664: 按行滚动IDLE编辑器文本。之前,鼠标滚轮和滚动条滑块以固定像素数移动文本,导致编辑器盒顶部出现部分行。此更改也适用于shell和grep输出窗口,但不适用于只读文本视图。
bpo-33679: 启用代码上下文的主题特定颜色配置。使用“高亮”选项卡查看内置主题的设置或为自定义主题添加设置。
bpo-33642: 为代码上下文显示最多maxlines非空行。如果没有当前上下文,则显示单个空行。
bpo-33628: IDLE:清理codecontext.py及其测试。
bpo-33564: IDLE的代码上下文现在能识别async作为一个块的开头。
bpo-21474: 将单词/标识符的定义从ASCII更新为Unicode。在文本和输入框中,这会影响通过双击选择、通过control-left/right左右移动以及通过control-BACKSPACE/DEL左右删除。
bpo-33204: IDLE:一致地着色无效的字符串前缀。'u'字符串前缀不能与'r'或'f'配对。从右边开始,尽可能多地着色有效的部分。修订并扩展颜色化器测试。
bpo-32984: 在运行启动文件时设置
__file__。 与 Python 一样,IDLE 在展示第一个交互式输入提示之前,可选地在 Shell 窗口中运行一个启动文件。对于 IDLE,-s运行环境变量IDLESTARTUP或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:
PyByteArray_Init()和PyByteArray_Fini()函数已被移除。自 Python 2.7.4 和 Python 3.2.0 以来,它们什么也不做,被排除在有限 API(稳定 ABI)之外,并且没有文档记录。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 有条件地声明
Py_FinalizeEx()(3.6 新增)。 补丁由 Arthur Neufeld 提供。bpo-35081:
_PyObject_GC_TRACK()和_PyObject_GC_UNTRACK()宏已从公共 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-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: 在 3.7.0b1 中添加的新
os.posix_spawn已被移除,因为我们仍在研究 API 应该是什么样子。预计将在 3.8 中提供。bpo-33475: 修复了将注释转换为字符串时的杂项错误,并优化了字符串表示中的括号。
bpo-33391: 修复了 set_symmetric_difference() 中的内存泄漏。
bpo-28055: 修复了 siphash24() 中的未对齐访问。由 Rolf Eike Beer 提供补丁。
bpo-32911: 由于在下游beta测试期间发现的意外兼容性问题,恢复了 bpo-29463。 从 Module、ClassDef、FunctionDef 和 AsyncFunctionDef ast 节点中移除了在 3.7a1 中添加的
docstring字段。 docstring 表达式被恢复为其主体的第一条语句。 基于 Inada Naoki 的补丁。bpo-21983: 修复当类型参数是 ctypes 结构化数据类型时,
ctypes.cast()中的崩溃问题。由 Eryk Sun 和 Oren Milman 提供补丁。
库¶
bpo-32751: 当由于超时取消任务时,
asyncio.wait_for()现在将等待直到取消完成。bpo-32684: 修复 gather 即使在 return_exceptions 的情况下也能传播自身的取消。
bpo-33654: 在 SSLTransport.set_protocol() 中支持协议类型切换。
bpo-33674: 尽早暂停传输,以进一步降低在 connection_made() 之前调用 data_received() 的风险。
bpo-33674: 修复 asyncio.sslproto 中 SSLProtocol.connection_made() 的竞态条件:立即开始握手而不是使用 call_soon()。之前,data_received() 可能在握手开始前被调用,导致握手挂起或失败。
bpo-31647: 修复了在 _SelectorSocketTransport 已经关闭后调用 write_eof() 会引发 AttributeError 的错误。
bpo-32610: 使 asyncio.all_tasks() 仅返回待处理的任务。
bpo-32410: 在 sendfile 回退代码中避免阻塞文件 IO。
bpo-33469: 修复了使用 run_in_executor 后关闭循环时引发的 RuntimeError。
bpo-33672: 修复 Task.__repr__ 与 Cython 的虚假协程一起使用时崩溃的问题。
bpo-33654: 修复 transport.set_protocol() 以支持在 asyncio.Protocol 和 asyncio.BufferedProtocol 之间切换。修复 loop.start_tls() 以支持 asyncio.BufferedProtocols。
bpo-33652: 类型变量和下标泛型的 pickle 现在具有未来兼容性,并与旧版 Python 兼容。
bpo-32493: 修复了 FreeBSD 上的
uuid.uuid1()。bpo-33618: 完成并记录与 OpenSSL 1.1.1 的初步和实验性 TLS 1.3 支持。
bpo-33623: 修复在 __del__ 中创建 asyncio.Future 时可能出现的 SIGSGV。
bpo-30877: 修复了 JSON 解码器 Python 实现中的一个错误,该错误阻止了在完成解码后清除已解析字符串的缓存。基于 c-fos 的补丁。
bpo-33570: 更改 TLS 1.3 密码套件设置,以兼容 OpenSSL 1.1.1-pre6 及更新版本。OpenSSL 1.1.1 将默认启用 TLS 1.3 密码。
bpo-28556: 不再简化
typing.Union的参数。现在Union[Manager, Employee]在运行时不会简化为Employee。之前的简化导致了一些错误,并限制了内省的可能性。bpo-33540: 向
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: 修复 Windows proactor 事件循环中
ReadTransport.resume_reading的竞争条件。修复当 ClassVar 作为字符串前向引用提供时
typing.get_type_hints()的失败。bpo-33505: 通过重新排序if检查优化asyncio.ensure_future():速度提升1.17倍。
bpo-33497: 向cgi.parse_multipart添加errors参数,并使FieldStorage中的编码使用给定的errors(Twisted所需)。由Amber Brown提供补丁。
bpo-33495: 更改dataclasses.Fields的repr以使用其每个成员的repr,而非str。这使得每个字段实际代表的内容更加清晰。这对于'type'成员尤为明显。
bpo-33453: 修复dataclasses以在使用字面字符串类型注解或使用PEP 563“推迟的注解评估”时工作。仅为ClassVar("ClassVar"和"typing.ClassVar")和InitVar("InitVar"和"dataclasses.InitVar")检测特定的字符串前缀。
bpo-28556: typing 模块中的小修复:向
NamedTuple.__new__添加注解,在Generic.__new__中传递*args和**kwds。 原始 PR 由 Paulius Šarka 和 Chad Dombrova 提供。bpo-20087: 更新了支持glibc 2.27地区设置的别名映射。
bpo-33422: 修复在pydoc上查找字节/字符串字面量时尾随引号被删除的问题。由Andrés Delfino提供补丁。
bpo-28167: 函数
platform.linux_distribution和platform.dist现在触发DeprecationWarning,并已被标记为在 Python 3.8 中移除。bpo-33197: 更新构造无效inspect.Parameters时的错误信息。由Donghee Na提供补丁。
bpo-33263: 修复了
_SelectorSocketTransport中的文件描述符泄漏问题。由 Vlad Starostin 提供补丁。bpo-32861: urllib.robotparser 的
__str__表示现在包括通配符条目以及 "Crawl-delay" 和 "Request-rate" 字段。由 Michael Lazar 提供补丁。bpo-32257: ssl模块现在包含OP_NO_RENEGOTIATION常量,适用于OpenSSL 1.1.0h或1.1.1版本。
文档¶
测试¶
构建¶
macOS¶
bpo-13631: 在macOS上通过editline模拟初始化readline时,现在可以正确处理用户主目录中的.editrc文件。
IDLE¶
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-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: 改进了
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()。
构建¶
Windows¶
bpo-33184: 更新Windows安装程序以使用OpenSSL 1.1.0h。
macOS¶
bpo-33184: 更新macOS安装程序构建以使用OpenSSL 1.1.0h。
IDLE¶
工具/示例¶
Python 3.7.0 beta 3¶
发布日期: 2018-03-29
安全性¶
bpo-33136: 加固ssl模块以抵御LibreSSL的 CVE-2018-8970。调用X509_VERIFY_PARAM_set1_host()时使用明确的namelen。新增测试确保不允许NULL字节。
bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。
bpo-32981: difflib 和 poplib 中的正则表达式容易受到灾难性回溯的影响。这些正则表达式构成了潜在的 DOS 向量(REDOS)。它们已被重构。这解决了 CVE-2018-1060 和 CVE-2018-1061。由 Jamie Davis 提供补丁。
核心与内置函数¶
bpo-33053: 当使用-m开关时,sys.path[0]现在明确扩展为 起始 工作目录,而不是保留为空路径(允许在导入时从当前工作目录导入)。
bpo-33018: 提高了当
issubclass()的第一个参数是非类而第二个参数是抽象基类时引发错误的一致性。由Josh Bronson提供补丁。bpo-33041: 修复了当函数包含
async for循环时的跳转问题。bpo-33026: 通过设置f_lineno修复了跳出“with”块的问题。
bpo-33005: 修复了在使用自定义内存分配器(例如:使用PYTHONMALLOC环境变量)时fork导致的崩溃。_PyGILState_Reinit()和_PyInterpreterState_Enable()现在使用默认的RAW内存分配器在fork时分配新的解释器互斥锁。
bpo-17288: 防止从'return'和'exception'跟踪事件跳转。
bpo-32836: 在列表/字典/集合推导式的情况下不使用临时变量。
库¶
bpo-33141: 如果 Field 对象有自己的 __set_name__,则让它们将 __set_name__ 传递给它们的默认值。
bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。
bpo-32873: 通过复制和pickle操作将类型变量和特殊类型形式视为不可变。这修复了几个小问题和不一致性,并提高了与Python 3.6的向后兼容性。
bpo-33134: 在计算数据类的__hash__时,使用查找表包含返回__hash__值的函数。这比查找字符串然后测试该字符串以决定做什么有所改进。
bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。
bpo-32505: 如果数据类的成员变量是Field类型但没有类型注解,则抛出TypeError。
bpo-33078: 修复了由于测试依赖sem_getvalue而在OSX上导致的失败。
bpo-33116: 将'Field'添加到dataclasses.__all__中。
bpo-32896: 修复了一个错误,即当子类化一个使用default_factory字段的数据类时会生成一个不正确的类。
bpo-33100: 数据类:如果一个字段有一个默认值是MemberDescriptorType,那么它是因为该字段在__slots__中,而不是一个实际的默认值。
bpo-32953: 如果一个非数据类继承自一个冻结的数据类,允许向派生类添加属性。只有来自冻结数据类的属性不能被赋值。要求层次结构中的所有数据类要么全部冻结,要么全部非冻结。
bpo-33061: 在typing.py的
__all__中添加缺失的NoReturn。bpo-33078: 修复当发生pickling错误时multiprocessing.Queue中的大小处理。
bpo-33064: lib2to3现在正确支持函数签名中
*args和**kwargs后的尾随逗号。bpo-33056: 修复concurrent.futures.ProcessPoolExecutor中泄漏的文件描述符未正确关闭的问题。
bpo-33021: 在fstat()调用期间释放GIL,避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。
bpo-31804: 避免在标准流在退出时被关闭或为None时,multiprocessing.Process失败。
bpo-33037: 在SSL传输关闭后跳过发送/接收数据。
bpo-27683: 修复
ipaddress中的一个回归问题,当网络由包含整数掩码且仅剩1位地址的元组构造时,hosts()的结果为空。bpo-32999: 修复
ABC.__subclasscheck__(cls, subclass)的C实现,在subclass不是类型对象时崩溃的问题。bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。
bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。
bpo-32056: 改进了在模块
aifc、wave和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-33163: 将pip升级到9.0.3,setuptools升级到v39.0.1。
Windows¶
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运行环境变量IDLESTARTUP或PYTHONSTARTUP中命名的文件;-r file运行file。 Python 在运行文件之前将__file__设置为启动文件名,并在第一个提示之前取消设置。 IDLE 现在在没有-n选项的情况下正常运行时也会这样做。bpo-32940: 在pyparse中简化并重命名StringTranslatePseudoMapping。
工具/示例¶
bpo-32885: 为
Tools/scripts/pathfix.py添加-n标志以禁用自动备份创建(带有~后缀的文件)。
C API¶
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: 修复了
asyncio.Condition问题,该问题在通知并取消条件锁后默默忽略了取消。由Bar Harel提供补丁。bpo-32819: ssl.match_hostname() 已被简化,不再依赖 re 和 ipaddress 模块处理通配符和IP地址。对于无效通配符的错误报告已改进。
bpo-32394: socket: 在旧版本Windows运行时移除TCP_FASTOPEN、TCP_KEEPCNT、TCP_KEEPIDLE、TCP_KEEPINTVL标志。
bpo-31787: 修复了多个模块中
__init__()方法的内存泄漏问题。(由Oren Milman贡献)bpo-30157: 修复了在只有最后一个字段被引用时,csv.Sniffer.sniff() 中猜测引用和分隔符的问题。由Jake Davis提供补丁。
bpo-32792: collections.ChainMap() 保留了底层映射的顺序。
bpo-32775:
fnmatch.translate()不再生成包含集合运算的模式。以 '[' 开头或包含 '--'、'&&'、'~~' 或 '||' 的集合在未来版本的正则表达式中将会有不同的解释。目前它们会发出警告。fnmatch.translate() 现在可避免意外生成包含此类集合的模式。bpo-32622: 为Windows proactor事件循环实现原生快速发送文件功能。
bpo-32777: 修复了在POSIX系统的子进程中,当标记文件描述符为可继承时,subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。
bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在,在支持dl的平台上,共享扩展已明确链接到libdl。
bpo-32741: 实现
asyncio.TimerHandle.when()方法。bpo-32691: 在使用pdb运行模块时使用mod_spec.parent。
bpo-32734: 修复了
asyncio.Lock()的安全问题,该问题允许多次获取和锁定同一个锁,而锁并未释放。由Bar Harel提供补丁。bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。
bpo-31453: 添加TLSVersion常量和SSLContext.maximum_version / minimum_version属性。新API封装了OpenSSL 1.1 https://web.archive.org/web/20180309043602/https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html 的特性。
bpo-24334: 清理了ssl模块的内部实现细节。SSLSocket减少了一层间接引用。所有者与会话信息现在由SSLSocket和SSLObject的构造函数处理。通道绑定实现已被简化。
bpo-31848: 修复Aifc_read.initfp()中当SSND块未找到时的错误处理。补丁由Zackery Spytz提供。
bpo-32585: 向
tkinter.ttk添加Ttk spinbox小部件。由Alan D Moore提供补丁。bpo-32221: 现在,返回包含IPv6地址的元组的各种函数省略了
%scope部分,因为相同的信息已经在 scopeid 元组项中编码。特别是这加快了socket.recvfrom()在接收多播数据包时的速度,因为省略了无用的网络接口名称解析。bpo-30693: TarFile类现在以一种可重复的方式递归目录。
bpo-30693: ZipFile类现在以一种可重复的方式递归目录。
文档¶
bpo-28124: ssl 模块函数 ssl.wrap_socket() 已被弱化并弃用,推荐使用更安全高效的 SSLContext.wrap_socket() 方法。
bpo-17232: 澄清 -O 和 -OO 的文档。由 Terry Reedy 提供补丁。
bpo-32436: 为 contextvars 模块(PEP 567)添加文档。
bpo-32800: 更新 xml 默认命名空间的 w3c 文档链接。
bpo-11015: 更新
test.support文档。bpo-8722: 文档化当属性
get()方法引发AttributeError时__getattr__()的行为。bpo-32614: 修改文档中的正则表达式示例,使用原始字符串以防止
DeprecationWarning,并在正则表达式 HOWTO 中添加文本以突出弃用。bpo-31972: 改进
pathlib.PurePath子类的文档字符串。
测试¶
bpo-31809: 添加测试以验证与 secp ECDH 曲线的连接。
构建¶
bpo-32898: 修复了在使用 COUNT_ALLOCS 时的 Python 调试构建问题。
Windows¶
bpo-32901: 将Tcl和Tk版本更新到8.6.8
bpo-31966: 修复WindowsConsoleIO.write()写入空数据的问题。
bpo-32409: 确保activate.bat可以处理Unicode内容。
bpo-32457: 改进启动Python时对非规范化可执行路径的处理。
bpo-32370: 在uuid模块中为ipconfig输出使用正确的编码。由Segev Finer提交补丁。
bpo-29248: 修复 Windows 上的
os.readlink(),它错误地将重新解析数据缓冲区的PrintNameOffset字段视为字符数而非字节数。 由 Craig Holmquist 和 SSE4 提交补丁。
macOS¶
bpo-32901: 将macOS 10.9+安装程序更新至Tcl/Tk 8.6.8。
IDLE¶
bpo-32916: 在pyparse中将
str更改为code。bpo-32905: 移除pyparse模块中未使用的代码。
bpo-32874: 为pyparse添加测试。
bpo-32837: 对于IDLE的系统和位置无关文件,使用系统和位置相关的默认编码对于open()来说是一个坏主意。
bpo-32826: 在IDLE的test_help_about的open()中添加"encoding=utf-8"。GUI测试test_file_buttons()仅查看初始的ascii-only行,但在open()默认为'ascii'的系统上失败,因为readline()内部读取和解码足够远,以在CREDITS.txt中遇到非ascii字符。
bpo-32765: 更新configdialog General标签的文档字符串,将新部件添加到部件列表中。
工具/示例¶
bpo-32222: 修复 pygettext 不提取带有类型注释参数的函数的文档字符串的问题。由 Toby Harradine 提供的补丁。
Python 3.7.0 beta 1¶
发布日期: 2018-01-30
核心与内置函数¶
bpo-32703: 修复了协程在最终化时存在活动错误集时的 ResourceWarning 问题。
bpo-32650: Pdb 和其他依赖于 bdb.py 的调试器现在能够正确地单步跳过(next 命令)原生协程。由 Pablo Galindo 提供补丁。
bpo-28685: 通过尽可能使用类型专用比较,优化了 list.sort() 和 sorted()。
bpo-32685: 改进了当 Python 2 形式的 print 语句出现在复合语句的同一行或以分号而非换行符终止时的建议。由 Nitish Chandra 提供补丁。
bpo-32697: Python 现在明确保留了仅关键字参数的定义顺序。虽然之前总是保留其顺序,但这一行为从未得到保证;现在这一行为得到了保证和测试。
bpo-32690: locals() 字典现在按照变量定义的词法顺序显示。之前顺序是相反的。
bpo-32677: 向
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-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_outputbpo-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: 添加了
importlib.resources和importlib.abc.ResourceReader作为读取包内所含资源的统一 API。希望支持资源读取的加载器必须实现get_resource_reader()方法。基于文件和基于 zipimport 的加载器均已实现这些 API。importlib.abc.ResourceLoader已弃用,转而推荐使用这些新 API。bpo-32320: collections.namedtuple() 现在支持默认值。
bpo-29302: 添加了 contextlib.AsyncExitStack。由 Alexander Mohr 和 Ilya Kulakov 提供补丁。
bpo-31961: 已在 Python 3.7.0b2 中移除。 subprocess.Popen 的 args 参数现在可以是 path-like object。如果 args 以序列形式给出,其第一个元素现在也可以是 path-like object。
bpo-31900: 现在
locale.localeconv()函数会临时将LC_CTYPE语言区域设为LC_NUMERIC语言区域以解码decimal_point和thousands_sep字节串,如果它们是非 ASCII 或长度超过 1 字节,并且LC_NUMERIC语言区域与LC_CTYPE语言区域不同的话。 这一临时变更会影响其他线程。 相同的更改也将应用于str.format()方法,如果格式化数字 (int,float,float及其子类) 使用了n类型的话 (例如:'{: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-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¶
macOS¶
C API¶
Python 3.7.0 alpha 4¶
发布日期: 2018-01-08
核心与内置函数¶
bpo-31975: 默认的警告过滤器列表现在以 "default::DeprecationWarning:__main__" 条目开始,因此在单文件脚本和交互式提示符中,弃用警告默认再次显示。
bpo-32226:
__class_getitem__现在是一个自动类方法。bpo-32399: 使用 libc.a 中的 uuid_create() 为 AIX 添加 RFC4122 uuid 库支持。
bpo-32390: 修复在 os.statvfs() 返回的对象中添加 f_fsid 字段后在 AIX 上的编译失败问题 (bpo-32143)。原始由 Michael Felt 提供补丁。
bpo-32379: 当一个类继承自单一基类时,使 MRO 计算更快。
bpo-32259: 解包不可迭代对象时引发的 TypeError 错误消息现在更加具体。
bpo-32329: 当
PYTHONHASHSEED环境变量设置为0时,-R选项现在会开启哈希随机化。之前,该选项被忽略。此外,当哈希随机化被PYTHONHASHSEED=0关闭时,sys.flags.hash_randomization现在被正确设置为 0。bpo-30416: 优化器现在受到保护,不会花费大量时间进行复杂计算和在常量折叠中创建大常量时消耗大量内存。增加了在常量折叠中可以产生的常量的限制。
bpo-32282: 修复 Windows 上 socketmodule 中 VersionHelpers.h 包含的不必要的 ifdef。
bpo-30579: 实现 TracebackType.__new__ 以允许在 Python 级别创建回溯对象,并使 TracebackType.tb_next 可变。
bpo-32260: 不要在大端平台上对 SipHash 算法的输入键进行字节交换。这应确保 siphash 在不同平台上给出一致的结果。
bpo-31506: 改进 object.__new__ 和 object.__init__ 的错误消息逻辑。由 Sanyam Khurana 提供补丁。
bpo-20361:
-b和-bb现在会在sys.warnoptions中注入'default::BytesWarning'和error::BytesWarning条目,确保它们优先于通过-W选项或PYTHONWARNINGS环境变量配置的任何其他警告过滤器。bpo-32230:
-X dev现在会在sys.warnoptions中注入一个'default'条目,确保其行为与在命令行中实际传递-Wdefault相同。bpo-32226: PEP 560: 添加对
__mro_entries__和__class_getitem__的支持。由 Ivan Levkivskyi 实现。bpo-32225: PEP 562: 添加对模块
__getattr__和__dir__的支持。由 Ivan Levkivskyi 实现。bpo-31901:
atexit模块现在每个解释器都有其回调存储。bpo-31650: 实现 PEP 552 (确定性 pycs) 。Python 现在支持基于源内容哈希而非源最后修改时间使字节码缓存文件失效。
bpo-29469: 将常量折叠从字节码层移动到 AST 层。原始由 Eugene Toder 提供补丁。
库¶
bpo-32506: 既然 dict 被定义为保持插入顺序,那么放弃 OrderedDict,直接使用普通 dict。
bpo-32279: 向 dataclasses.make_dataclasses() 添加参数:init、repr、eq、order、hash 和 frozen。将它们传递给 dataclass()。
bpo-32278: 使 dataclasses.make_dataclass() 上的类型信息可选。如果省略,则使用字符串 'typing.Any'。
bpo-32499: 添加 dataclasses.is_dataclass(obj),如果 obj 是数据类或其实例,则返回 True。
bpo-32468: 改进 frame repr() 以提及文件名、代码名称和当前行号。
bpo-23749: asyncio: 实现 loop.start_tls()
bpo-32441: 从
os.dup2返回新的文件描述符(即第二个参数)。以前总是返回None。bpo-32422:
functools.lru_cache使用更少的内存(每个缓存键3个单词)并且循环GC时间大约减少到1/3。bpo-31721: 防止当Future._log_traceback被手动设置为True时Python崩溃。现在它只能被设置为False,否则会引发ValueError。
bpo-32415: asyncio: 添加Task.get_loop()和Future.get_loop()
bpo-26133: 在解释器关闭时不要在asyncio UNIX事件循环中取消订阅信号。
bpo-32363: 使asyncio.Task.set_exception()和set_result()引发NotImplementedError。Task._step()和Future.__await__()在无效状态时引发适当的异常,而不是AssertionError。
bpo-32357: 为非原生协程(如用Cython编译的async/await)优化asyncio.iscoroutine()和loop.create_task()。'loop.create_task(python_coroutine)'过去比'loop.create_task(cython_coroutine)'快20%。现在,后者一样快。
bpo-32356: asyncio.transport.resume_reading()和pause_reading()现在是幂等的。新增transport.is_reading()方法。
bpo-32355: 优化asyncio.gather(); 现在快达15%。
bpo-32351: 如果delay<0,在asyncio.sleep中使用fastpath(2倍加速)
bpo-32348: 优化asyncio.Future schedule/add/remove回调。该优化显示async/await代码性能提升3-6%。
bpo-32331: 修复socket.settimeout()和socket.setblocking()以保持socket.type不变。修复socket.socket()构造函数以重置应用于socket类型的任何位标志。此更改仅影响具有SOCK_NONBLOCK和/或SOCK_CLOEXEC的操作系统。
bpo-32248: 添加
importlib.abc.ResourceReader作为加载器的ABC,为读取包中包含的资源提供统一的API。同时添加importlib.resources作为importlib_resources的端口。bpo-32311: 实现asyncio.create_task(coro)快捷方式
bpo-32327: 将文档中标记为协程的asyncio函数转换为协程。受影响的函数包括:loop.sock_sendall、loop.sock_recv、loop.sock_accept、loop.getaddrinfo、loop.getnameinfo。
bpo-32323: 对于主机名中带作用域的 IPv6 地址,
urllib.parse.urlsplit()现在不会将区域 ID (scope) 转换为小写。bpo-32302: 修复了distutils的bdist_wininst对于CRT v142的支持:它二进制兼容于CRT v140。
bpo-29711: 修复了asyncio proactor循环中的
stop_serving会杀死所有监听服务器的问题。bpo-29970: 如果握手在10秒内未完成,则中止asyncio SSLProtocol连接。
bpo-32314: 实现了asyncio.run()。
bpo-17852: 基于对_Py_PyAtExit()语义的误解,撤销了不正确的修复。
bpo-32296: 在C中实现了asyncio._get_running_loop()和get_event_loop()。这使得它们的速度提高了4倍。
bpo-32250: 实现了
asyncio.current_task()和asyncio.all_tasks()。 添加了旨在供替代任务实现使用的助手:asyncio._register_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: 内置类型的所有类方法和静态方法现在都能被 inspect.classify_class_attrs() 正确分类并在 pydoc 输出中分组。为内置类型的未绑定类方法添加了 types.ClassMethodDescriptorType。
bpo-32253: 弃用
yield from lock,await lock,with (yield from lock)和with await lock用于 asyncio 同步原语。bpo-22589: 将 .bmp 的 MIME 类型从 'image/x-ms-bmp' 改为 'image/bmp'。
bpo-32193: 将 asyncio 转换为使用 async/await 语法。旧式的
yield from仍然支持。bpo-32206: 添加支持以使用 pdb 运行模块。
bpo-32227:
functools.singledispatch现在支持使用类型注释注册实现。bpo-15873: 添加了新的替代构造函数
datetime.datetime.fromisoformat(),datetime.time.fromisoformat()和datetime.date.fromisoformat()作为各自类isoformat方法的逆操作。bpo-32199: getnode() ip 获取器现在使用 'ip link' 而不是 'ip link list'。
bpo-32143: os.statvfs() 包含来自 statvfs(2) 的 f_fsid 字段。
bpo-26439: 通过实现 ctypes._aix.find_library() 修复 ctypes.util.find_library() 在 AIX 上的问题。补丁由:Michael Felt
bpo-31993: 当将大的 bytes 和 str 对象序列化到文件时,pickler 现在使用更少的内存。使用协议 4 创建的 pickle 将需要更少的内存来反序列化大的 bytes 和 str 对象。
bpo-27456: 确保在 Linux 上设置 TCP_NODELAY。测试由 Victor Stinner 完成。
bpo-31778: 现在ast.literal_eval()更加严格。不再允许任意数字的加减法。
bpo-31802: 即使
os模块尚未导入,导入原生路径模块(posixpath,ntpath)现在也能正常工作。bpo-30241: 添加contextlib.AbstractAsyncContextManager。由Jelle Zijlstra提供补丁。
bpo-31699: 修复了当任务参数或结果导致pickling或unpickling错误时
concurrent.futures.ProcessPoolExecutor中的死锁问题。这应确保对ProcessPoolExecutorAPI的调用最终总能返回。bpo-15216:
TextIOWrapper.reconfigure()支持更改 encoding, errors, 和 newline。
文档¶
bpo-32418: 向Server和AbstractServer类添加get_loop()方法。
测试¶
Windows¶
bpo-19764: 在Windows上实现支持
subprocess.Popen(close_fds=True)。由Segev Finer提供补丁。
工具/示例¶
bpo-24960: 2to3和lib2to3现在可以使用pkgutil.get_data()读取pickled语法文件,而不是探测文件系统。这使得2to3和lib2to3在从zipfile运行时也能工作。
C API¶
bpo-32030: 如果未设置
PYTHONMALLOC环境变量,Py_Initialize()不会将内存分配器重置为默认值。bpo-29084: OrderedDict的未记录C API已从有限C API中排除。它是被错误添加的,实际上在有限C API中从未工作过。
bpo-32264: 将pygetopt.h头文件移动到internal/,因为它没有公共API。
bpo-32241:
Py_SetProgramName()和Py_SetPythonHome()现在接受const wchar *参数而不是wchar *。
Python 3.7.0 alpha 3¶
发布日期: 2017-12-05
核心与内置函数¶
bpo-32176: 现在,代码对象构造函数会根据freevars和cellvars正确设置co_flags.CO_NOFREE,而不是需要调用者正确设置。这确保了当额外的cell引用被注入到修改后的代码对象和函数中时,它会自动清除。
bpo-10544: 现在在推导式和生成器表达式中不推荐使用yield表达式。它们仍然允许在最外层可迭代对象的定义中使用,因为那是在封闭作用域中直接评估的。
bpo-32137: 现在,深度嵌套字典的repr会引发RecursionError,而不是因为堆栈溢出而崩溃。
bpo-32096: 在C API中恢复内存分配器的更改:将结构体从_PyRuntime移回Objects/obmalloc.c。内存分配器再次静态初始化,因此PyMem_RawMalloc()和Py_DecodeLocale()可以在_PyRuntime_Initialize()之前调用。
bpo-32043: 添加了一个新的“开发者模式”:新的“-X dev”命令行选项,用于在运行时启用调试检查。
bpo-32023: 现在,当在类定义中使用没有括号的生成器表达式代替继承列表时,会正确引发SyntaxError。只有在调用时可以省略括号的重复。
bpo-32012: 现在,当传递一个没有括号的生成器表达式作为参数,但后面跟着一个尾随逗号时,会正确引发SyntaxError。生成器表达式总是需要直接在一组括号内,并且不能在两边有任何逗号。
bpo-28180: 添加了一个新的内部
_Py_SetLocaleFromEnv(category)辅助函数,以提高不同libc实现之间行为的一致性(例如,Android 默认不支持从环境设置区域设置)。bpo-31949: 修复了打印回溯(PyTraceBack_Print())中的若干问题。现在将sys.tracebacklimit设置为0或更小会抑制回溯的打印。将sys.tracebacklimit设置为None现在会导致使用默认限制。将sys.tracebacklimit设置为大于LONG_MAX的整数现在意味着使用LONG_MAX限制而不是默认限制。修复了Windows上超过
2**31个回溯项时的整数溢出问题。修复了输出错误处理。bpo-30696: 修复了在没有内存时交互式解释器无限循环的问题。
bpo-20047: Bytearray方法partition()和rpartition()现在仅接受类似字节的对象作为分隔符,如文档所述。特别是,现在当传递整数作为分隔符时,它们会引发TypeError而不是返回一个虚假的结果。
bpo-21720: 当
__import__()的 fromlist 参数或模块的__all__属性包含bytes实例时,不再发出BytesWarning。bpo-31845: 环境变量在解释器启动时再次被正确读取。
bpo-28936: 确保在给定范围内首先检测到涉及参数和
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()现在会清除可能由_PySys_SetObjectId()引发的忽略异常,例如在没有内存时。
库¶
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: 当属性的值为
VT_EMPTY时,使msilib.SummaryInformation.GetProperty()返回None。初始补丁由 Mark Mc Mahon 提供。bpo-28334: 在
netrc.netrc中使用os.path.expanduser()来查找~/.netrc文件。如果文件不存在,则抛出FileNotFoundError。由 Dimitri Merejkowsky 提供补丁。bpo-32121: 使
tracemalloc.Traceback的行为更类似于 traceback 模块,将帧从最旧到最新排序。Traceback.format()现在接受负的 limit 参数,将结果截断为abs(limit)个最旧的帧。要获得旧的行为,可以使用Traceback.format()的新参数 most_recent_first。(补丁由 Jesse Bakker 提供。)bpo-31325: 修复了
RobotFileParser.parse()方法中collections.namedtuple()的错误用法。初始由 Robin Wellner 提供补丁。bpo-12382: 当无法打开或创建 MSI 文件时,
msilib.OpenDatabase()现在会引发具有更佳异常消息的异常。初始补丁由 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: 更新2to3,将operator.isCallable(obj)转换为callable(obj)。由Donghee Na提供补丁。
bpo-32018: inspect.signature应遵循 PEP 8,如果参数有注解和默认值。由Donghee Na提供补丁。
bpo-32025: 添加time.thread_time()和time.thread_time_ns()
bpo-32037: 适应有符号32位整数的整数现在将使用协议0的INT操作码进行pickle。这将减少pickle的大小,加快pickle和unpickle的速度,并使这些整数在Python 2中作为int实例被unpickle。
bpo-32034: 使asyncio.IncompleteReadError和LimitOverrunError可pickle。
bpo-32015: 修复了在等待异步读写套接字期间重新连接套接字时asyncio的循环问题。
bpo-32011: 恢复了对加载带有TYPE_INT64代码的marshal文件的支持。这些文件可以在Python 2.7中生成。
bpo-28369: 增强add_reader/writer检查,确保套接字未被某些传输使用。之前,仅支持使用int FD调用add_reader/writer的情况。现在,对所有类文件对象都正确实现了检查。
bpo-31976: 修复了当文件刷新缓慢时可能导致的竞态条件,如果从另一个线程关闭文件可能会导致段错误。
bpo-31985: 正式弃用aifc.openfp、sunau.openfp和wave.openfp。自1993年的变更7bc817d5ba917528e8bd07ec461c635291e7b06a以来,这三个模块中的openfp作为向后兼容性问题,一直指向该模块的open函数,尽管它既未经测试也无文档记录。
bpo-21862: cProfile命令行现在接受
-m module_name作为脚本路径的替代方案。由Sanyam Khurana提供补丁。bpo-31970: 降低asyncio调试模式的性能开销。
bpo-31843: sqlite3.connect()的 database 参数现在接受一个 path-like object,而不仅仅是一个字符串。
bpo-31945: 为
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: 添加3个新的时钟标识符:
time.CLOCK_BOOTTIME、time.CLOCK_PROF和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: 向
ipaddress.IPv6Network和ipaddress.IPv4Network添加subnet_of和superset_of包含测试。由 Michel Albert 和 Cheryl Sabella 提供补丁。bpo-31827: 移除 os.stat_float_times() 函数。该函数在 Python 2.3 中引入,用于向后兼容 Python 2.2,并从 Python 3.1 开始弃用。
bpo-31756: 向
subprocess函数添加一个subprocess.Popen(text=False)关键字参数,以更明确地指示库何时应尝试将输出解码为文本。由 Andrew Clegg 提供补丁。bpo-31819: 添加 AbstractEventLoop.sock_recv_into()。
bpo-31457: 如果使用嵌套的日志适配器,内部
process()方法不再被省略。bpo-31457: LoggerAdapter 对象的
manager属性现在可以正确设置了。bpo-31806: 修复 time.sleep(), threading.Lock.acquire() 和 socket.socket.settimeout() 中的超时舍入,以正确舍入 -1.0 和 0.0 之间的负超时。这些函数现在会按预期阻塞等待事件。之前,调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。
bpo-31803: time.clock() 和 time.get_clock_info('clock') 现在会发出 DeprecationWarning 警告。
bpo-31800: 扩展了对解析 UTC 偏移的支持。strptime '%z' 现在可以解析由 datetime.isoformat 生成的输出,包括秒和微秒。
bpo-28603: traceback: 修复了在打印异常回溯时,当当前异常或其上下文/原因链中的异常不可哈希时发生的 TypeError。由 Zane Bitter 提供补丁。
bpo-30541: 添加新功能以密封模拟对象并防止自动创建子模拟对象。由 Mario Corchero 提供补丁。
bpo-31784: 实现 PEP 564,向
time模块添加 6 个具有纳秒分辨率的新函数:clock_gettime_ns(),clock_settime_ns(),monotonic_ns(),perf_counter_ns(),process_time_ns(),time_ns()。bpo-30143: 2to3 现在生成的代码使用 collections.abc 中的抽象集合类而不是 collections。
bpo-31770: 防止多次调用
sqlite3.Cursor对象的__init__()方法时崩溃。由 Oren Milman 提供补丁。bpo-31764: 防止在
sqlite3.Cursor.close()中当Cursor对象未初始化时发生崩溃。补丁由 Oren Milman 提供。bpo-31752: 修复在调用自定义整数的 timedelta 构造函数时可能发生的崩溃。
bpo-31620: 空的 asyncio.Queue 现在在队列获取轮询超时时不会泄漏内存。
bpo-31690: 允许将 re.ASCII、re.LOCALE 和 re.UNICODE 标志用作正则表达式的组标志。
bpo-30349: 如果正则表达式包含将来会语义变化的字符集构造(嵌套集和集操作),现在会发出 FutureWarning。
bpo-31664: 在 crypt 模块中添加了对 Blowfish 哈希的支持。
bpo-31632: 修复 asyncio 模块中 _SSLProtocolTransport 类的 set_protocol() 方法。此方法之前修改了错误的协议引用。
bpo-15037: 为 ncurses 5.7 及更早版本的 curses 中的 getkey() 添加了一个变通方案。
bpo-31307: 允许使用字节对象作为
configparser.ConfigParser.read()的参数。补丁由 Vincent Michel 提供。bpo-31334: 修复
select模块中的poll.poll([timeout]),在所有操作系统上对于任意的负超时值,现在可以仅接受非负整数或 -1。由 Riccardo Coccioli 提供补丁。bpo-31310: 如果崩溃,multiprocessing 的信号量跟踪器应该重新启动。
bpo-31308: 使 multiprocessing 的 forkserver 进程免受 Ctrl-C 和其他用户中断的影响。如果崩溃,必要时重启它。
bpo-31245: 在 asyncio 的
create_datagram_endpoint中添加了对 AF_UNIX 套接字的支持。bpo-30553: 将 HTTP/2 状态码 421(Misdirected Request)添加到
http.HTTPStatus。由 Vitor Pereira 提供补丁。
文档¶
bpo-32105: 添加了 asyncio.BaseEventLoop.connect_accepted_socket 的 versionadded 标记。
测试¶
bpo-31380: 在 macOS 上跳过 test_httpservers 的 test_undecodable_file 测试:在 APFS 上失败。
bpo-31705: 在早于4.5版本的Linux内核上跳过test_socket.test_sha256()测试。该测试在内核3.10(ppc64le架构)上会因ENOKEY而失败。此问题已在4.5内核中修复。
bpo-32138: 在Android上跳过引发SIGSEGV的test_faulthandler测试,并移除test.support.requires_android_level装饰器。
bpo-32136: 运行时嵌入测试已从
Lib/test/test_capi.py分离出来,移至新文件Lib/test/test_embed.py。bpo-28668: 移除了test.support.requires_multiprocessing_queue。当信号量实现损坏或缺失时,改用test.support.import_module('multiprocessing.synchronize')跳过测试。
bpo-32126: 当sem_open()功能不正常时,跳过test.test_asyncio.test_events中的test_get_event_loop_new_process测试。
bpo-31174: 修复test_tools.test_unparse:DirectoryTestCase现在存储样本名称以始终测试相同的文件。这避免了在查找引用泄漏时产生误报。
构建¶
bpo-28538: 撤销之前的更改,if_nameindex结构由统一头文件定义。
bpo-28762: 撤销最后一次提交,F_LOCK宏由Android统一头文件定义。
bpo-29040: 支持使用统一头文件构建Android。首个支持统一头文件的NDK版本是android-ndk-r14。
bpo-32059:
setup.py中的detect_modules()现在在交叉编译时也会搜索sysroot路径。bpo-31957: 修复为Windows构建时的Windows SDK版本检测。
bpo-31609: 修复PCbuild/clean.bat中的引号问题。
bpo-31934: 当构建源树不干净时中止构建。
bpo-31926: 修复了当.c文件中有多个同名函数和/或方法时,Argument Clinic有时会导致编译错误的问题。
bpo-28791: 更新Windows构建以使用SQLite 3.21.0。
bpo-28791: 更新OS X安装程序以使用SQLite 3.21.0。
bpo-28643: 使用stamp文件记录profile-opt构建进度。
bpo-31866: 完成移除对AtheOS的支持。
Windows¶
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和编辑器中可能会看到的内容。为了给扩展后的示例腾出空间,字体标签页上的框架被重新排列。字体/标签帮助文档对这些新增内容进行了一些说明。
工具/示例¶
C API¶
bpo-20891: 修复PyGILState_Ensure()。当PyGILState_Ensure()在非Python线程中且在PyEval_InitThreads()之前被调用时,仅在调用PyThreadState_New()之后调用PyEval_InitThreads(),以修复崩溃问题。
bpo-32125: 已移除
Py_UseClassExceptionsFlag标志。该标志自Python 2.0以来已被弃用且不再使用。bpo-25612: 将当前的异常状态从帧对象移动到协程。这简化了解释器,并修复了一些由于在进入或退出生成器时交换异常状态而导致的晦涩错误。
bpo-23699: 添加Py_RETURN_RICHCOMPARE宏以减少富比较函数中的样板代码。
bpo-30697: 移除了
PyExc_RecursionErrorInst单例,PyErr_NormalizeException()也不再使用它。这个单例是持久的,其成员从未被清除可能会导致解释器在最终化期间出现段错误。另见 bpo-22898。
Python 3.7.0 alpha 2¶
发布日期: 2017-10-16
核心与内置函数¶
bpo-31558:
gc.freeze()是一个新的API,它允许将垃圾收集器当前跟踪的所有对象移动到永久代,从而有效地将它们从未来的收集事件中移除。这可以用来保护这些对象的PyGC_Head不被改变。实际上,这为fork()提供了极佳的写时复制稳定性。bpo-31642: 通过将sys.modules["package.module"]设置为None,恢复了阻塞的"from package import module"。
bpo-31708: 允许在同步函数中使用异步生成器表达式。
bpo-31709: 放弃对异步__aiter__的支持。
bpo-30404: -u选项现在使stdout和stderr流变为无缓冲而非行缓冲。
bpo-31619: 修复了将带有大量下划线的字符串转换为二进制基数整数时的ValueError。
bpo-31602: 修复了在
zlib.decompress()出错时zipimporter.get_source()中的断言失败。由Oren Milman提供补丁。bpo-31592: 修复了在
unicodedata.normalize()出错时Python解析器中的断言失败。由Oren Milman提供补丁。bpo-31588: 当类创建由于元类的
__prepare__()方法出错而失败时,抛出一个带有有用错误信息的TypeError。由Oren Milman提供补丁。bpo-31574: 为importlib装备了两个dtrace探针以分析导入时间。
bpo-31566: 修复了在
__name__全局变量出错时_warnings.warn()中的断言失败。由Oren Milman提供补丁。bpo-31506: 改进了
object.__new__和object.__init__的错误消息逻辑。bpo-31505: 修复了在
_json.make_encoder()接收到错误的encoder()参数时json中的断言失败。 由 Oren Milman 提供补丁。bpo-31492: 修复了在从具有错误
__name__属性的模块导入失败时,以及在访问此类模块的属性失败时的断言失败。由Oren Milman提供补丁。bpo-31478: 修复
_random.Random.seed()中当参数有坏的__abs__()方法时的断言失败。由 Oren Milman 提供补丁。bpo-31336: 通过减少必要的特殊方法查找的开销,加快类创建速度10-20%。由 Stefan Behnel 提供补丁。
bpo-31415: 添加
-X importtime选项以显示每个导入花费的时间。可用于优化应用程序的启动时间。支持使用PYTHONPROFILEIMPORTTIME作为启用此功能的等效方式。bpo-31410: 优化了调用包装器和类方法描述符。
bpo-31353: PEP 553 - 添加一个名为
breakpoint()的新内置函数,它会调用sys.breakpointhook()。默认情况下,这会导入pdb并调用pdb.set_trace(),但用户可以覆盖sys.breakpointhook()来调用他们想要的任何调试器。钩子的原始值保存在sys.__breakpointhook__中。bpo-17852: 维护一个打开的缓冲文件列表,在退出解释器之前刷新它们。基于 Armin Rigo 的补丁。
bpo-31315: 修复 imp.create_dynamic() 中当 spec.name 不是字符串时的断言失败。由 Oren Milman 提供补丁。
bpo-31311: 修复
ctypes._CData的__setstate__()方法在__dict__有问题时的崩溃。由 Oren Milman 提供补丁。bpo-31293: 修复 timedelta 对象与具有坏的 as_integer_ratio() 方法的浮点数进行真除法和乘法时的崩溃。由 Oren Milman 提供补丁。
bpo-31285: 修复
warnings.warn_explicit中当接收的加载器的get_source()的返回值有坏的splitlines()方法时的断言失败。由 Oren Milman 提供补丁。
库¶
bpo-30058: 修复 select.kqueue.control() 中的缓冲区溢出。
bpo-31672:
string.Template中的idpattern匹配了一些非ASCII字符。现在它使用-i正则表达式本地标志来避免非ASCII字符。bpo-31701: 在Windows上,faulthandler.enable()现在会忽略MSC和COM异常。
bpo-31728: 防止由于
Element.text和Element.tail的不安全清理导致的_elementtree崩溃。 由 Oren Milman 提供补丁。bpo-31671: 现在
re.compile()在编译前将传递的RegexFlag转换为普通的int对象。bm_regex_compile基准测试显示性能提升了14%。bpo-30397: 编译的正则表达式对象和匹配对象的类型现在暴露为
re.Pattern和re.Match。 这为re模块的 pydoc 输出增加了信息。bpo-31675: 修复了Tkinter的splitlist()和split()方法在传递大于2 GiB的字符串时的内存泄漏问题。
bpo-31673: 修复了Tkinter方法adderrorinfo()名称中的拼写错误。
bpo-31648: 对ElementTree中的路径谓词进行了改进:允许谓词部分周围有空格,例如"[a = 'text']",而不是要求不太可读的"[a='text']"。添加了对当前节点文本比较的支持,如"[.='text']"。由Stefan Behnel提供补丁。
bpo-30806: 修复了netrc对象的字符串表示。
bpo-31638: 向
zipapp.create_archive添加可选参数compressed,并向zipapp的命令行界面添加选项--compress。bpo-25351: 避免venv激活时因未定义变量而失败。
bpo-20519: 尽可能避免使用ctypes并提高uuid的导入时间。
bpo-28293: 当正则表达式缓存满时,不再完全清空。
bpo-31596: 向time模块添加了pthread_getcpuclockid()。
bpo-27494: 使 2to3 接受生成器表达式中的尾随逗号。 例如,现在允许
set(x for x in [],)。bpo-30347: 修复了在并发迭代itertools.groupby()迭代器时的崩溃问题。
bpo-30346: 由itertools.groupby()迭代器生成的迭代器现在在推进groupby迭代器后会耗尽。
bpo-31556: 如果超时<=0,则更快地取消asyncio.wait_for未来。
bpo-31540: 允许在
concurrent.futures.ProcessPoolExecutor构造函数中传递上下文对象。同时,提前释放concurrent.futures.ProcessPoolExecutor中的作业资源,以改善工作线程等待新作业时的内存使用情况。bpo-31516:
threading.current_thread()在关闭时不应返回一个虚拟线程。bpo-31525: 在 sqlite 模块中,要求 sqlite3_prepare_v2 API。因此,sqlite 模块现在要求 sqlite 版本至少为 3.3.9。
bpo-26510: argparse 子解析器现在默认是必需的。这与 Python 2 的行为一致。对于可选的子解析器,使用新参数
add_subparsers(required=False)。由 Anthony Sottile 提供补丁。(截至 3.7.0rc1,默认值更改为非必需,这是自 Python 3.3 以来的情况。)bpo-27541: 一些集合和迭代器类的子类(
bytearray、array.array、collections.deque、collections.defaultdict、itertools.count、itertools.repeat)的 repr 现在包含实际的类型名,而不是基类的硬编码名称。bpo-31351: 如果 pip 引导失败,python -m ensurepip 现在会以非零退出代码退出。
bpo-31389:
pdb.set_trace()现在接受一个可选的关键字参数header。如果提供,这将在调试开始前打印到控制台。
文档¶
构建¶
IDLE¶
bpo-31460: 简化IDLE模块浏览器的API。传递一个小部件而不是带有根部件的flist,开启了创建一个仅是窗口一部分的浏览器框架的可能性。传递一个完整的文件名而不是假定来自.py文件的片段,开启了浏览不以.py结尾的python文件的可能性。
bpo-31649: IDLE - 使_htest, _utest参数仅关键字。
bpo-31559: 在idle_test.test_browser中移除测试顺序依赖。
bpo-31459: 将IDLE的模块浏览器从类浏览器重命名为模块浏览器。原始的模块级类和方法浏览器多年前就变成了一个模块浏览器,增加了模块级函数。昨天又增加了嵌套类和函数。为了向后兼容,设置对话框的键标签上出现的虚拟事件<<open-class-browser>>没有被更改。补丁由Cheryl Sabella提供。
bpo-31500: 现在默认字体在高DPI显示器上会进行缩放。
bpo-1612262: IDLE模块浏览器现在显示嵌套类和函数。代码和测试的原始补丁分别由Guilherme Polo和Cheryl Sabella提供。
C API¶
bpo-28280: 使
PyMapping_Keys()、PyMapping_Values()和PyMapping_Items()总是返回一个list(而不是一个list或一个tuple) 。由Oren Milman提供补丁。bpo-31532: 修复由于在getpath.c中Py_GetPath()和Py_SetPath()之间的分配器混合导致的内存损坏。
bpo-25658: 实现线程特定存储(TSS)API的 PEP 539:这是CPython的一个新的线程本地存储(TLS)API,将取代CPython解释器中现有的TLS API的使用,同时弃用现有的API。PEP由Erik M. Bray撰写,由Masayuki Yamamoto提供补丁。
Python 3.7.0 alpha 1¶
发布日期: 2017-09-19
安全性¶
bpo-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: 将 expat 从 2.2.0 升级到 2.2.1 以修复多个安全漏洞,包括:CVE-2017-9233 (外部实体无限循环 DoS)、CVE-2016-9063 (整数溢出,重新修复)、CVE-2016-0718 (修复 2.2.0 对 CVE-2016-0718 的修复引起的回归错误) 和 CVE-2012-0876 (使用 SipHash 抵御哈希洪水攻击)。 注意: CVE-2016-5300 (使用操作系统特定的熵源如 getrandom) 不影响 Python,因为 Python 已经通过
XML_SetHashSalt()从操作系统获取熵来设置 expat 的密钥。bpo-30500: 修复 urllib.parse.splithost() 正确解析片段。例如,
splithost('//127.0.0.1#@evil.com/')现在正确返回127.0.0.1主机,而不是将@evil.com视为认证中的主机(login@host)。bpo-29591: 将 expat 从 2.1.1 更新到 2.2.0 以修复 CVE-2016-0718 和 CVE-2016-4472。更多信息请见 https://sourceforge.net/p/expat/bugs/537/。
核心与内置函数¶
bpo-31490: 修复
ctypes类定义中的断言失败,当类有一个属性其名称在_anonymous_中指定但不在_fields_中时。由 Oren Milman 提供补丁。bpo-31471: 修复 Windows 上
subprocess.Popen()中的断言失败,当 env 参数有一个坏的keys()方法时。由 Oren Milman 提供补丁。bpo-31418: 修复
PyErr_WriteUnraisable()中的断言失败,当异常有一个坏的__module__属性时。由 Oren Milman 提供补丁。bpo-31416: 修复当warnings.filters或warnings.defaultaction错误时的断言失败。由Oren Milman提供补丁。
bpo-28411: 将直接使用PyInterpreterState.modules改为使用PyImport_GetModuleDict()。同时,在处理sys.modules的其他代码中引入更多一致性。这有助于减少在处理sys.modules时的复杂性。
bpo-28411: 在处理
PyInterpreterState.modules时切换到抽象API。这为以后支持所有字典子类和其他映射实现提供了可能。同时添加了一个PyImport_GetModule()函数以减少大量重复代码。bpo-31411: 当warnings.onceregistry不是字典时,抛出TypeError而不是SystemError。由Oren Milman提供补丁。
bpo-31344: 为了更精细地控制测试解释器时的跟踪行为,添加了两个新的帧属性来控制特定跟踪事件的发出:
f_trace_lines(默认为True) 用于关闭每行跟踪事件;f_trace_opcodes(默认为False) 用于开启每操作码跟踪事件。bpo-31373: 修复了几个由于浮点降级可能导致的未定义行为实例。
bpo-30465: f-字符串中的位置信息 (
lineno和col_offset) 现在(大部分)正确。 这修复了像 flake8 这样的工具在错误的行(通常是文件的第一行)显示警告的问题。bpo-30860: 将CPython的全局运行时状态整合到一个结构体中。这提高了运行时状态的可发现性。
bpo-31347: 修复了_PyObject_FastCall_Prepend中可能存在的未定义行为。
bpo-31343: 为 major()、minor() 和 makedev() 引入 sys/sysmacros.h。GNU C 函数库计划从 sys/types.h 中移除这些函数。
bpo-31291: 修复了 Windows 上
zipimport.zipimporter.get_data中的一个断言失败,当pathname.replace('/','\\')的返回值不是字符串的时候。 由 Oren Milman 提供补丁。bpo-31271: 修复当编码器未返回字节对象时,
io.TextIOWrapper的write()方法中的断言失败。 由 Oren Milman 提供补丁。bpo-31243: 修复当解码器状态无效时,
io.TextIOWrapper的某些方法中的崩溃问题。 由 Oren Milman 提供补丁。bpo-30721:
print现在显示使用Python 2重定向语法的正确用法提示。由Sanyam Khurana提供补丁。bpo-31070: 修复importlib中_get_module_lock()的竞态条件。
bpo-30747: 在MSVC上添加_Py_atomic_store和_Py_atomic_load的非虚拟实现。
bpo-31095: 修复由未调用
PyObject_GC_UnTrack()的tp_dealloc引起的GC期间潜在崩溃问题。bpo-31071: 当传递其他参数时,避免在使用*解包调用中掩盖原始TypeError。
bpo-30978: str.format_map()现在传递键查找异常。之前任何异常都被替换为KeyError异常。
bpo-30808: 对并发敏感的信号状态使用_Py_atomic API。
bpo-30876: 从未加载的包中进行相对导入现在会重新导入包,而不是因SystemError失败。从非包中进行相对导入现在会因ImportError而非SystemError失败。
bpo-30703: 改进信号传递。避免在信号处理程序中使用Py_AddPendingCall,以避免调用信号不安全函数。这里添加的测试在没有补丁的其他部分的情况下,在Linux和OS X上失败。这意味着我们的信号传递逻辑存在缺陷(某些信号可能会丢失)。
bpo-30765: 当PyThread_acquire_lock()被要求不阻塞时,避免在pthread_mutex_lock()中阻塞。
bpo-31161: 确保'Missing parentheses'语法错误消息仅应用于SyntaxError,而不是子类。补丁由Martijn Pieters提供。
bpo-30814: 修复从包中导入子模块时的竞态条件。
bpo-30736: 内部unicodedata数据库已升级到Unicode 10.0。
bpo-30604: 将 co_extra_freefuncs 从每线程转移到每解释器以避免崩溃。
bpo-30597:
print现在在作为 Python 2 语句使用时,自定义错误消息中显示预期的输入。由 Sanyam Khurana 提供补丁。bpo-30682: 移除了对某些 f-字符串过于严格的断言,例如 eval("f'\n'") 和 eval("f'\r'")。
bpo-30501: 编译器现在为 "if"、"while" 和 "assert" 语句、"if" 表达式、生成器表达式和推导式中的复杂条件表达式生成更优化的代码。
bpo-28180: 实现 PEP 538 (传统 C 语言环境强制)。 这意味着当有合适的强制目标区域设置可用时,核心解释器和区域设置感知的 C 扩展将假定使用 UTF-8 作为默认文本编码,而不是 ASCII。
bpo-30486: 允许为 __closure__ 设置单元格值。由 Lisa Roach 提供补丁。
bpo-30537: itertools.islice 现在接受类似整数的对象(具有 __index__ 方法)作为开始、停止和切片参数
bpo-25324: Python 解析所需的令牌已移至 C。
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() 在代码对象上现在返回的大小包括代码结构及其引用对象的大小。由 Donghee Na 提交的补丁。
bpo-29839: 如果 __len__() 返回一个大的负整数,len() 现在会引发 ValueError 而不是 OverflowError。
bpo-11913: README.rst 现在被包含在 distutils 标准 README 列表中,因此也包含在源代码分发中。
bpo-29914: 修复了 __reduce__ 和 __reduce_ex__() 的默认实现。object.__reduce__() 不再接受参数,object.__reduce_ex__() 现在需要一个参数。
bpo-29949: 修复了 set 和 frozenset 对象的内存使用回归问题。
bpo-29935: 修复了在传递错误类型的索引时,tuple、list 和 deque 的 index() 方法中的错误消息。
bpo-29816: 移位操作现在引发 OverflowError 的机会更少。对于负计数,总是引发 ValueError 而不是 OverflowError。用非负计数移位零总是返回零。
bpo-24821: 修复了在某些不幸的 Unicode 字符搜索中减慢到 25 倍的问题。
bpo-29102: 向 PyInterpreterState 添加了一个唯一 ID。这使得更容易识别每个子解释器。
bpo-29894: 如果 __complex__ 返回一个严格子类的实例,则会发出弃用警告。在 Python 的未来版本中,这可能是一个错误。
bpo-29859: 当 thread_pthread.h 中的任何 pthread_* 调用失败时,显示正确的错误消息。
bpo-29849: 修复了在从导入期间引发 ImportError 时的内存泄漏。
bpo-28856: 修复了一个疏忽,即 %b 格式的字节应支持遵循缓冲区协议的对象。
bpo-29723: bpo-29139 中对
sys.path[0]初始化的更改导致了一个回归问题,暴露了在执行来自 zip 文件、目录或其他导入位置的__main__时sys.path初始化方式的不一致性。解释器现在一致避免将导入位置的父目录添加到sys.path中,并确保在插入命令行中指定的导入位置时不会无意中修改其他sys.path条目。bpo-29568: 经典字符串格式化格式字符串中的转义百分号 "%%" 不再允许两个百分号之间存在任何字符。
bpo-29714: 修复了一个回归问题,即当包含零字节时,字节格式可能会失败。
bpo-29695: bool()、float()、list() 和 tuple() 不再接受关键字参数。int() 的第一个参数现在只能作为位置参数传递。
bpo-28893: 为从 __aiter__ 和 __anext__ 返回的无效可等待对象引发的错误设置了正确的 __cause__。
bpo-28876: 即使
len(range)引发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字段。 文档不再是它们语句体中的第一条语句。 这影响了模块和类的代码对象的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-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: 修复了拆分字典在尝试移除“待定键”(尚未插入拆分表中)时的 dict.pop()。补丁由 Xiang Zhang 提供。
bpo-26182: 当async和await关键字被用作变量/属性/类/函数名时,发出DeprecationWarning。
bpo-26182: 修复在引发DeprecationWarning的代码中的内存泄漏。
bpo-28721: 修复异步生成器的aclose()和athrow()以正确处理StopAsyncIteration传播。
bpo-26110: 加速方法调用:添加LOAD_METHOD和CALL_METHOD操作码。
库¶
bpo-31499: xml.etree:修复当解析器是引用循环的一部分时的崩溃问题。
bpo-31482:
random.seed()现在在version=1时可以与bytes一起工作。bpo-28556: typing.get_type_hints现在默认(当调用者未指定
globalns时)为类和模块找到正确的globalns。bpo-28556: 对
typing模块的速度改进。原始PR由Ivan Levkivskyi和Mitar提供。bpo-31544: ElementTree的C加速器模块忽略了在XMLParser()中查找TreeBuilder目标方法时引发的异常。
bpo-31234: socket.create_connection()现在手动修复了一个引用循环:成功时清除存储最后一个异常的变量。
bpo-31457: LoggerAdapter对象现在可以嵌套。
bpo-31431: SSLContext.check_hostname现在自动将SSLContext.verify_mode设置为ssl.CERT_REQUIRED,而不是以ValueError失败。
bpo-31233: socketserver.ThreadingMixIn 现在维护一个非守护线程列表,在 server_close() 中等待所有这些线程完成。
bpo-28638: 改变了 collections.namedtuple() 的实现策略,大幅减少了 exec() 的使用,转而采用预计算的方法。因此,不再支持 verbose 参数和 _source 属性。这一变化带来了以下好处:1) 对于使用多个命名元组的应用程序,内存占用更小;2) 命名元组类的创建速度更快(大约快 4 到 6 倍,具体取决于测量方式);3) 使用 __new__、_make 和 _replace 创建实例时的速度略有提升。(主要补丁贡献者是 Jelle Zijlstra,INADA Naoki、Serhiy Storchaka 和 Raymond Hettinger 进一步改进。)
bpo-31400: 改进了 SSL 错误处理,避免丢失错误编号。
bpo-27629: 使 SSLContext.wrap_bio() 和 SSLContext.wrap_socket() 的返回类型可定制。
bpo-28958: ssl.SSLContext() 现在在无法实例化上下文时使用 OpenSSL 错误信息。
bpo-28182: 当 OpenSSL 无法验证对等证书时,SSL 模块现在会引发 SSLCertVerificationError 异常。该异常包含更多关于错误的信息。
bpo-27340: SSLSocket.sendall() 现在使用 memoryview 来创建数据切片。这修复了对所有类似于字节对象的支持。同时,这也更高效,避免了昂贵的复制。
bpo-14191: 新增函数
argparse.ArgumentParser.parse_intermixed_args提供了解析命令行中用户混合选项和位置参数的能力。bpo-31178: 修复了 subprocess 模块中在罕见错误路径下的字符串连接错误
bpo-31350: 对
asyncio._get_running_loop()进行微优化,使其速度提升高达 10%。bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题(libexpat bug 115):https://github.com/libexpat/libexpat/issues/115
bpo-29136: 添加 TLS 1.3 密码套件和 OP_NO_TLSv1_3。
bpo-1198569:
string.Template子类可以选择性地定义braceidpattern,如果它们想要在花括号内外指定不同的占位符模式。如果为 None(默认值),则回退到idpattern。bpo-31326: concurrent.futures.ProcessPoolExecutor.shutdown() 现在显式关闭调用队列。此外,shutdown(wait=True) 现在也会加入调用队列线程,以防止泄漏悬挂线程。
bpo-27144:
concurrent.futures中的map()和as_completed()迭代器现在避免保留对生成对象的引用。bpo-31281: 修复
fileinput.FileInput(files, inplace=True)当files包含pathlib.Path对象时的问题。bpo-27584:
AF_VSOCK已被添加到套接字接口中,允许虚拟机与其主机之间的通信。bpo-22536: 在 POSIX 系统上由于找不到可执行文件或 cwd 而引发 FileNotFoundError 时,子进程模块现在会设置文件名。
bpo-29741: 更新 _pyio 模块中的一些方法,以也接受整数类型。由 Oren Milman 提供补丁。
bpo-31249: concurrent.futures: ThreadPoolExecutor 使用的 WorkItem.run() 现在打破了异常对象和 WorkItem 对象之间的循环引用。
bpo-31247: xmlrpc.server 现在在处理异常的代码中使用 sys.exc_info() 时显式地打破循环引用。
bpo-23835: configparser: 现在在
ConfigParser()构造器中读取默认值使用read_dict(),使其行为与解析器的其余部分一致。默认字典中的非字符串键和值现在被隐式转换为字符串。由 James Tocknell 提供补丁。bpo-31238: pydoc: 私有 ServerThread 类的 stop() 方法现在会等待 DocServer.serve_until_quit() 完成,然后显式将其 docserver 属性设置为 None 以打破循环引用。
bpo-5001:
multiprocessing中的许多断言现在提供了更多信息,并且一些错误类型已更改为更具体的类型。bpo-31109: 将 zipimport 转换为使用 Argument Clinic。
bpo-30102: ssl 和 hashlib 模块现在在 OpenSSL < 1.1.0 时调用 OPENSSL_add_all_algorithms_noconf()。该函数检测 CPU 特性并在一些 CPU 架构(如 POWER8)上启用优化。补丁基于 Gustavo Serra Scalet 的研究。
bpo-18966: 由 multiprocessing.Process 创建的非守护线程现在在子进程退出时被 join。
bpo-31183:
dis现在可以与异步生成器和协程对象一起工作。由 George Collins 提供补丁,基于 Luciano Ramalho 的诊断。bpo-5001: 如问题 5001 所述,
multiprocessing模块中有许多不提供信息的断言。此更改修复了其中两个最有可能造成问题的断言,因为它们位于错误报告代码中,在multiprocessing.managers.convert_to_error函数中。(它还使 ValueError 消息更具信息性。)唯一可能造成问题的变化是 AssertionError 现在是一个 TypeError;然而,这也应该有助于将其与函数/其调用者报告的 AssertionError 区分开来(如问题 31169 中)。 - 由 Allen W. Smith(github 上的 drallensmith)提供补丁。bpo-31185: 修复了 asyncio 加速模块中的杂项错误。
bpo-31151: socketserver.ForkingMixIn.server_close() 现在会等待所有子进程完成,以防止僵尸进程泄漏。
bpo-31072: 向
zipapp.create_archive()添加一个include_file形参。bpo-24700: 优化 array.array 比较。当比较持有相同整数类型值的数组时,现在速度提高了 10 倍到 70 倍。
bpo-31135: ttk:修复LabeledScale和OptionMenu类的destroy()方法。即使使用的属性不存在,也调用父类的destroy()方法。LabeledScale.destroy()方法现在还显式清除了label和scale属性,以帮助垃圾回收器销毁所有小部件。
bpo-31107: 修复
copyreg._slotnames()对于名称以下划线开头的类的损坏属性计算。由Shane Harvey提供补丁。bpo-31080: 允许
logging.config.fileConfig接受kwargs和/或args。bpo-30897:
pathlib.Path对象现在包含一个is_mount()方法(仅在POSIX上实现)。这与os.path.ismount(p)类似。由Cooper Ry Lees提供补丁。bpo-31061: 修复了在使用asyncio和线程时的崩溃问题。
bpo-30987: 在socket模块中增加了对CAN ISO-TP协议的支持。
bpo-30522: 向
logging.StreamHandler添加了一个setStream方法,允许在创建后设置流。bpo-30502: 修复了ssl中长oids的处理。基于Christian Heimes的补丁。
bpo-5288: 支持具有不足一分钟偏移的tzinfo对象。
bpo-30919: 修复了Python 3.x版本中多进程模块(multiprocessing)的共享内存性能回归问题。在Python 2.x中,共享内存使用匿名内存映射实现,而Python 3.x则改为映射实际文件。本次修复尝试尽可能减少磁盘I/O操作以提升性能。
bpo-26732: 修复了使用“forkserver”方法启动的进程中fd过多的问题。子进程会继承与仍在运行的子进程数量一样多的fd。
bpo-29403: 修复
unittest.mock模块的 autospec 功能,使其不再对绑定到方法的内置函数报错。 由 Aaron Gallagher 提供补丁。bpo-30961: 修复了tracemalloc中借用引用的递减问题。
bpo-19896: 修复multiprocessing.sharedctypes以识别类型码
'q'和'Q'。bpo-30946: 移除了readline模块中对于GNU readline版本低于2.1或select()不可用平台的过时代码。
bpo-25684: 修改
ttk.OptionMenu单选按钮,使其在不同OptionMenu实例间保持唯一。bpo-30886: 修复 multiprocessing.Queue.join_thread():现在即使线程是由创建队列的同一进程启动的,它也会等待线程完成。
bpo-29854: 修复使用 readline 的 history-size 选项时 readline 中的段错误。由 Nir Soffer 提供补丁。
bpo-30794: 在 Unix 上添加了 multiprocessing.Process.kill 方法,用于使用 SIGKILL 信号终止。
bpo-30319: socket.close() 现在忽略 ECONNRESET 错误。
bpo-30828: 修复
asyncio.CFuture.remove_done_callback()中的越界写入问题。bpo-30302: 在
datetime.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() 现在会在命令包含 CR 或 LF 时抛出 ValueError。由 Donghee Na 提供补丁。
bpo-30879: os.listdir() 和 os.scandir() 现在在使用字节类参数调用时会发出字节名称。
bpo-30746: 禁止在
os.putenv()和os.spawn*()的环境变量名中使用 '=' 字符。bpo-30664: unittest 子测试的描述现在会保留 TestCase.subTest() 的关键字参数的顺序。
bpo-29212: 修复 concurrent.futures.thread.ThreadPoolExecutor 线程在没有提供 thread_name_prefix 时默认使用非 repr() 基础的线程名。它们现在会自称为 "ThreadPoolExecutor-y_n"。
bpo-29755: 修复了 gettext 模块中的 lgettext() 系列函数。它们现在总是返回字节。
bpo-30616: enum 的功能 API 允许创建空的枚举。由 Donghee Na 提供补丁
bpo-30038: 修复了信号传递和唤醒文件描述符之间的竞争条件。补丁由 Nathaniel Smith 提供。
bpo-23894: lib2to3 现在能识别
rb'...'和f'...'字符串。bpo-24744: pkgutil.walk_packages 函数现在会在 path 是字符串时抛出 ValueError。补丁由 Sanyam Khurana 提供。
bpo-24484: 避免多进程清理中的竞争条件。
bpo-30589: 修复 multiprocessing.Process.exitcode 在使用 "forkserver" 方法时,当进程被信号杀死时返回信号数的相反数(而不是 255)。
bpo-28994: 对于由 atexit 注册的回调中引发的 SystemExit,不再显示回溯。
bpo-30508: 如果调用了 Task/Future 的 "cancel()" 方法,则不记录异常。
bpo-30645: 修复
imp.load_package()中的路径计算,修复了当包仅随字节码提供时的情况。由 Alexandru Ardelean 提供补丁。bpo-11822: dis.dis() 函数现在能够反汇编嵌套的代码对象。
bpo-30624: selectors 没有考虑到 KeyboardInterrupt 和 SystemExit,导致在出错时文件描述符处于不良状态。由 Giampaolo Rodola' 提供补丁。
bpo-30595: multiprocessing.Queue.get() 现在在非阻塞模式下轮询其读取器,如果成功获取锁但获取时间超过了超时时间。
bpo-28556: typing 模块的更新:添加通用的 AsyncContextManager,为所有版本添加对 ContextManager 的支持。原始 PR 由 Jelle Zijlstra 和 Ivan Levkivskyi 提供。
bpo-30605: re.compile() 在编译带有错误放置的内联修饰符的 bytes 实例时不再引发 BytesWarning。由 Roy Williams 提供补丁。
bpo-29870: 修复 asyncio/ssl 实现中当连接被中止时 SSL 套接字的泄漏问题。由 Michaël Sghaïer 提供补丁。
bpo-29743: 在握手过程中关闭传输会导致打开的套接字泄漏。由 Nikolay Kim 提供补丁。
bpo-27585: 修复 asyncio.Lock 中的等待者取消问题。由 Mathieu Sornay 提供补丁。
bpo-30014: selectors 模块中基于 poll()、epoll() 和 devpoll() 的类的 modify() 方法现在快了约 10%。由 Giampaolo Rodola' 提供补丁。
bpo-30418: 在 Windows 上,如果子进程仍在运行但关闭了管道,subprocess.Popen.communicate() 现在也会忽略 stdin.write() 上的 EINVAL。
bpo-30463: 向 abc.ABC 添加了空的 __slots__。这允许子类禁止创建 __dict__ 和 __weakref__。补丁由 Aaron Hall 提供。
bpo-30520: 现在 Logger 可以被 pickle 序列化。
bpo-30557: faulthandler 现在能够正确过滤和显示 Windows 上的异常代码。
bpo-30526: 添加了 TextIOWrapper.reconfigure() 和 TextIOWrapper.write_through 属性。
bpo-30245: 修复在组织 struct.pack_into 错误消息时可能出现的溢出问题。由 Yuan Liu 提供补丁。
bpo-30378: 修复 logging.handlers.SysLogHandler 无法处理 IPv6 地址的问题。
bpo-16500: 允许注册 at-fork 处理程序。
bpo-30470: 弃用 Windows 上的无效 ctypes 调用保护。由 Mariatta Wijaya 提供补丁。
bpo-30414: multiprocessing.Queue._feed 后台运行线程在异常时不从主循环中中断。
bpo-30003: 修复HZ编解码器中转义字符的处理。基于Ma Lin的补丁。
bpo-30149: inspect.signature() 现在支持带有被partialmethod包装的可变参数参数的可调用对象。由Donghee Na提供补丁。
bpo-30436: 如果指定的父模块不是一个包(即缺少__path__属性),importlib.find_spec() 现在会引发ModuleNotFoundError而不是AttributeError。
bpo-30301: 修复在 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: os.makedirs()的mode参数不再影响新创建的中间级别目录的文件权限位。
bpo-29884: faulthandler: 在拆卸期间恢复旧的sigaltstack。由Christophe Zeitouny提供补丁。
bpo-25455: 修复了递归缓冲文件类对象repr中的崩溃。
bpo-29800: 修复了如果partial.keywords的键不是字符串时partial.__repr__的崩溃。由Michael Seifert提供补丁。
bpo-8256: 修复了如果sys.stdin或sys.stdout的属性"encoding"或"errors"未设置或不是字符串时可能导致的input()失败或崩溃。
bpo-28692: 现在弃用使用非整数值在gettext中选择复数形式。
bpo-26121: 使用C库实现math函数erf()和erfc()。
bpo-29619: os.stat()和os.DirEntry.inode()现在使用无符号整数转换inode(st_ino)。
bpo-28298: 修复了一个阻止数组'Q'、'L'和'I'接受大整数(具有__int__的对象)作为元素的错误。
bpo-29645: 加快了导入webbrowser模块的速度。webbrowser.register()现在是线程安全的。
bpo-28231: zipfile模块现在接受路径类对象作为外部路径。
bpo-26915: collections.abc.Sequence的index()和count()方法在进行比较时现在在检查相等性之前检查身份。
bpo-28682: 在 os.fwalk() 中添加了对字节路径的支持。
bpo-29728: 添加新的
socket.TCP_NOTSENT_LOWAT(Linux 3.12) 常量。由 Nathaniel J. Smith 提供补丁。bpo-29623: 允许在 ConfigParser.read() 中使用路径类对象作为单一参数。由 David Ellis 提供补丁。
bpo-9303: 将sqlite3模块迁移到 _v2 API。由 Aviv Palivoda 提供补丁。
bpo-28963: 修复了在 C 中实现的 asyncio.Future.remove_done_callback 中的越界迭代。
bpo-29704: asyncio.subprocess.SubprocessStreamProtocol 在所有管道关闭之前不再关闭。
bpo-29271: 修复 Task.current_task 和 Task.all_tasks 在 C 中的实现,使其能够接受 None 参数,如同它们的纯 Python 实现一样。
bpo-29703: 修复 asyncio,支持在子进程中实例化新的事件循环。
bpo-29615: SimpleXMLRPCDispatcher 不再将 KeyError(或任何其他异常)链接到调度方法中引发的异常。由 Petr Motejlek 提供补丁。
bpo-7769: xmlrpc.server.SimpleXMLRPCDispatcher 及其子类的 register_function() 方法现在可以用作装饰器。
bpo-29376: 修复 threading._DummyThread.is_alive() 中的断言错误。
bpo-28624: 添加一个测试,检查 Popen() 的 cwd 参数是否接受 PathLike 对象。由 Sayan Chowdhury 提供补丁。
bpo-28518: 在 DML 语句之前隐式开始一个事务。由 Aviv Palivoda 提供补丁。
bpo-29742: 如果 get_extra_info() 在关闭的 ssl 传输上调用,将引发异常。由 Nikolay Kim 提供补丁。
bpo-16285: urllib.parse.quote 现在基于 RFC 3986,因此默认情况下不引用 '~' 字符。补丁由 Christian Theune 和 Ratnadeep Debnath 提供。
bpo-29532: 修改传递给 functools.partial() 的 kwarg 字典不再影响创建后的 partial 对象。
bpo-29110: 修复 aifc.open() 中当文件作为文件系统路径给出且不是有效的 AIFF 格式时的文件对象泄漏问题。由 Anthony Zhang 提供补丁。
bpo-22807: 添加 uuid.SafeUUID 和 uuid.UUID.is_safe,以传递平台关于生成的 UUID 是否使用多进程安全方法生成的信息。
bpo-29576: 改进了 importlib 中的一些弃用。一些弃用的方法现在会发出 DeprecationWarnings,并有更好的描述性消息。
bpo-29534: 修复了 Decimal.from_float() 在 _decimal 和 _pydecimal 中的不同行为。感谢 Andrew Nester。
bpo-10379: locale.format_string 现在支持 'monetary' 关键字参数,而 locale.format 已被弃用。
bpo-29851: importlib.reload() 现在会在模块缺少 spec 时抛出 ModuleNotFoundError。
bpo-28556: 对 typing 模块进行了多项更新:typing.Counter、typing.ChainMap、改进的 ABC 缓存等。原始 PR 由 Jelle Zijlstra、Ivan Levkivskyi、Manuel Krebber 和 Łukasz Langa 提供。
bpo-29100: 修复了 Python 3.6.0 中引入的 datetime.fromtimestamp() 的回归问题:检查最小和最大年份。
bpo-29416: 防止 pathlib.Path.mkdir 中的无限循环。
bpo-29444: 修复了 match 对象的 group() 方法中的越界缓冲区访问。基于 WGH 的补丁。
bpo-29377: 将 WrapperDescriptorType、MethodWrapperType 和 MethodDescriptorType 内置类型添加到 types 模块。原始由 Manuel Krebber 提供补丁。
bpo-29218: 现在移除了未使用的 install_misc 命令。自 2000 年以来,它已被记录为未使用。由 Eric N. Vander Weele 提供补丁。
bpo-29368: 现在在反序列化 collections.deque 和其他类似列表的对象时,调用 extend() 方法而不是 append() 方法。这可以将反序列化速度提高至 2 倍。
bpo-29338: 现在,如果为类提供了 __text_signature__,内置或扩展类的帮助信息会包括构造函数签名。
bpo-29335: 修复了当子进程已退出到停止状态而不是终止状态(例如:在 ptrace 下)时的 subprocess.Popen.wait()。
bpo-29290: 修复了 argparse 中帮助消息会在非断行空格处换行的回归问题。
bpo-28735: 修复了 mock.MagickMock 与 mock.ANY 的比较。
bpo-29197: 移除了已弃用的函数 ntpath.splitunc()。
bpo-29210: 移除了对 tarfile.TarFile.add() 中已弃用参数 "exclude" 的支持。
bpo-29219: 修复了未初始化的 ctypes.CDLL 实例的 repr 中的无限递归。
bpo-29192: 移除了 http.cookies 模块中已弃用的功能。
bpo-29193: string.Formatter.format() 的格式字符串参数现在仅为位置参数。
bpo-29195: 移除了对正则表达式对象方法中已弃用的未记录关键字参数的支持。
bpo-28969: 修复了functools.lru_cache的C实现中的竞态条件。当缓存函数满时,如果同时从不同线程以相同的未缓存参数调用,可能会引发KeyError。
bpo-20804: unittest.mock.sentinel属性现在在复制或pickle时保持其身份。
bpo-29142: 在urllib.request中,no_proxy环境变量中带有前导点的后缀可以再次匹配相关的主机名(例如.b.c匹配a.b.c)。由Milan Oberkirch提供补丁。
bpo-28961: 修复unittest.mock._Call辅助函数:不再忽略name参数。由Jiajun Huang提供补丁。
bpo-15812: inspect.getframeinfo()现在正确显示上下文的第行。由Sam Breese提供补丁。
bpo-28985: 更新sqlite3模块中的授权者常量。由Dingyuan Wang提供补丁。
bpo-29079: 防止pathlib.resolve()在Windows上陷入无限循环。
bpo-13051: 修复了大型或调整大小的curses.textpad.Textbox中的递归错误。基于Tycho Andersen的补丁。
bpo-9770: curses.ascii谓词现在正确处理负整数。
bpo-28427: 当从另一个线程收集时,旧键不应从WeakValueDictionary中移除新值。
bpo-28923: 从Tix.py中移除编辑器工件。
bpo-28871: 修复了在深度ElementTree释放时的崩溃。
bpo-19542: 修复WeakValueDictionary.setdefault()和WeakValueDictionary.pop()中的bug,这些bug在另一个线程发生GC收集时出现。
bpo-20191: 修复了resource.prlimit()中的崩溃,当传递一个不拥有其元素的序列作为限制时。
bpo-16255: subprocess.Popen在Android上使用/system/bin/sh作为shell,而不是/bin/sh。
bpo-28779: 如果预加载的模块实例化了某些多处理对象(如锁),multiprocessing.set_forkserver_preload()会使forkserver进程崩溃。
bpo-26937: tarfile.TarFile 类的 chown() 方法现在在无法导入 grp 模块时不会失败,例如在 Android 平台上。
bpo-28847: dbm.dumb 现在支持读取只读文件,并且在索引文件未更改时不再写入。如果在 'r' 和 'w' 模式下索引文件丢失并重新创建,现在会发出弃用警告(在未来的 Python 版本中将会是错误)。
bpo-27030: 在 re.sub() 替换模板正则表达式中,由
'\'和一个 ASCII 字母组成的未知转义现在会引发错误。bpo-28835: 修复了 warnings.catch_warnings() 中引入的一个回归问题:如果在上下文管理器内部覆盖了 warnings.showwarning(),则调用它。
bpo-27172: 为了协助从 2.7 版本升级,之前文档中关于
inspect.getfullargspec()的弃用已被撤销。在 Python 2.7 分支不再官方支持后,可能会重新考虑这一决定。bpo-28740: 添加 sys.getandroidapilevel():返回 Android 的构建时 API 版本作为整数。此函数仅在 Android 上可用。
bpo-26273: 新增
socket.TCP_CONGESTION(Linux 2.6.13) 和socket.TCP_USER_TIMEOUT(Linux 2.6.37) 常量。补丁由 Omar Sandoval 编写。bpo-28752: 恢复了 datetime 对象的 __reduce__() 方法。
bpo-28727: 正则表达式模式,由 re.compile() 创建的 _sre.SRE_Pattern 对象,现在可以比较(仅限 x==y 和 x!=y 操作符)。这一更改应该修复了 bpo-18383:当 warnings 模块重新加载时不要重复警告过滤器(通常只在单元测试中这样做)。
bpo-20572: 移除了 subprocess.Popen.wait 的 endtime 参数。它在 3.4 版本中被弃用,在此之前也未在文档中记录。
bpo-25659: 在 ctypes 中,防止在抽象类(如 Array)上调用 from_buffer() 和 from_buffer_copy() 方法时崩溃。
bpo-28548: 在"http.server"模块中,尽可能解析协议版本,以避免在某些错误响应中使用HTTP 0.9。
bpo-19717: 使Path.resolve()在不存在的路径上也能成功。由Vajrasky Kok提供补丁。
bpo-28563: 修复了在gettext模块中处理复数形式选择时可能导致的DoS和任意代码执行问题。表达式解析器现在支持GNU gettext所支持的精确语法。
bpo-28387: 修复了当垃圾收集器在其他线程中调用时,_io.TextIOWrapper解构器可能崩溃的问题。基于Sebastian Cufre的补丁。
bpo-27517: LZMA压缩器和解压器在两次接收到空数据时不再抛出异常。补丁由Benjamin Fogle提供。
bpo-28549: 修复了curses的addch()在使用ncurses6时的段错误。
bpo-28449: tarfile.open()以模式"r"或"r:"现在会先尝试以压缩方式打开tar文件,再尝试无压缩方式打开。否则在使用ignore_zeros=True时有50%的几率失败。
bpo-23262: webbrowser模块现在支持Firefox 36+及衍生浏览器。基于Oleg Broytman的补丁。
bpo-24241: 在X环境下,webbrowser现在更倾向于直接使用默认浏览器。此外,webbrowser的register()函数现在有一个文档化的'preferred'参数,用于指定无参数调用get()时返回的浏览器。补丁由David Steele提供。
bpo-27939: 修复了tkinter.ttk.LabeledScale和tkinter.Scale中由于在Tk内部将比例表示为浮点值而导致的错误。如果底层Tk变量设置为浮点值,tkinter.IntVar现在可以正常工作。
bpo-28255: calendar.TextCalendar.prweek()不再在周历后打印空格。calendar.TextCalendar.pryear()不再在年历后打印多余的换行符。基于Xiang Zhang的补丁。
bpo-28255: calendar.TextCalendar.prmonth()在打印月历后的新行开头不再打印空格。由Xiang Zhang提供补丁。
bpo-20491: textwrap.TextWrapper 类现在支持不换行空格。基于 Kaarle Ritvanen 的补丁。
bpo-28353: os.fwalk() 不再因损坏的链接而失败。
bpo-28430: 修复了 C 实现的 asyncio.Future 迭代器不接受非 None 值传递给 it.send(val) 的问题。
bpo-27025: 为提升可读性,Tkinter 部件的生成名称现在以 "!" 前缀开头。
bpo-25464: 通过为 Tix 库的 bug 添加变通方法,修复了 tkinter.tix 模块中的 HList.header_exists()。
bpo-28488: shutil.make_archive() 不再向 ZIP 归档添加 "./" 条目。
bpo-25953: re.sub() 现在即使在字符串中未找到模式,也会为替换模板中的无效数字组引用引发错误。无效组引用的错误消息现在包括组索引和引用的位置。基于 SilentGhost 的补丁。
bpo-28469: timeit 现在使用 1, 2, 5, 10, 20, 50,... 序列代替 1, 10, 100,... 进行自动范围调整。
bpo-28115: zipfile 模块的命令行界面现在使用 argparse。添加了对长选项的支持。
bpo-18219: 为大量列优化 csv.DictWriter。Mariatta Wijaya 的补丁。
bpo-28448: 修复了 C 实现的 asyncio.Future 在 Windows 上不工作的问题。
bpo-23214: 在 "io" 模块中,BufferedReader 和 BytesIO 的 read1() 方法的参数现在是可选的,并且可以是 -1,以匹配 BufferedIOBase 的规范。
bpo-28480: 修复在禁用多线程时构建 socket 模块时的错误。
bpo-28240: timeit: 移除自 Python 3.3 以来已弃用的
-c/--clock和-t/--time命令行选项。bpo-28240: timeit 现在将基准测试重复 5 次而非仅 3 次,以使基准测试更加可靠。
bpo-28240: 如果基准测试耗时少于 10 秒,timeit 自动范围调整现在使用单次循环迭代而非 10 次迭代。"python3 -m timeit -s 'import time' 'time.sleep(1)'" 现在耗时 4 秒而非 40 秒。
Distutils.sdist 现在对 README 和 setup.py 文件的查找区分大小写。这一行为与 Setuptools 6.0 及以后版本中的行为一致。理由参见 setuptools 100。
bpo-24452: 使 webbrowser 支持 Mac OS X 上的 Chrome。由 Ned Batchelder 提供补丁。
bpo-20766: 修复了 pdb 在处理 SIGINT 处理器时的引用泄漏问题。
bpo-27998: 修复了 Windows 上 os.scandir() 对字节路径的支持。由 Eryk Sun 提供补丁。
bpo-28317: 反汇编器现在解码 FORMAT_VALUE 参数。
bpo-28380: unittest.mock 的 Mock autospec 函数现在正确支持 assert_called、assert_not_called 和 assert_called_once。
bpo-28229: lzma 模块现在支持 pathlib。
bpo-28321: 修复了在 plistlib 中使用二进制格式写入非 BMP 字符的问题。
bpo-28225: bz2 模块现在支持 pathlib。初始由 Ethan Furman 提供补丁。
bpo-28227: gzip 现在支持 pathlib。由 Ethan Furman 提供补丁。
bpo-28332: 弃用了 socket.htons 和 socket.ntohs 中的静默截断。原始由 Oren Milman 提供补丁。
bpo-27358: 优化了合并可变关键字参数的过程,并改进了当传递非映射作为可变关键字参数时的错误信息。
bpo-28257: 改进了当传递非可迭代对象作为可变位置参数时的错误信息。添加了操作码 BUILD_TUPLE_UNPACK_WITH_CALL。
bpo-28322: 修复了当从错误的 pickle 数据反序列化 itertools 对象时可能发生的崩溃。基于 John Leitch 的补丁。
bpo-28228: imghdr 现在支持 pathlib。
bpo-28226: compileall 现在支持 pathlib。
bpo-28314: 修复了 xml.etree.ElementTree.Element 的 getiterator() 方法的函数声明(C 标志)。
bpo-28148: 停止在 time 模块中使用 localtime() 和 gmtime()。引入了平台无关的 _PyTime_localtime API,该 API 类似于 POSIX 的 localtime_r,但在所有平台上都可用。由 Ed Schouten 提供补丁。
bpo-28253: 修复了极端月份(0001-01和9999-12)的日历功能。重新实现了itermonthdays()和itermonthdays2()方法,使其不再调用可能导致datetime.date下溢/溢出的itermonthdates()。
bpo-28275: 修复了LZMADecompressor和BZ2Decompressor类中decompress()方法可能存在的释放后使用问题。原始由John Leitch提供补丁。
bpo-27897: 修复了如果传递无效的字符串类似对象作为名称时,sqlite3.Connection.create_collation()可能崩溃的问题。由Xiang Zhang提供补丁。
bpo-18844: random.choices()现在将k作为仅关键字参数,以提高常见情况的可读性,并与其他语言中使用的签名保持一致。
bpo-18893: 修复了Lib/ctypes/macholib/dyld.py中无效的异常处理。由Madison May提供补丁。
bpo-27611: 修复了tkinter.tix模块中对默认根窗口的支持。在DisplayStyle构造函数中添加了master参数。
bpo-27348: 在traceback模块中,恢复了类似于"Exception: None"的异常消息的格式化。这修复了3.5a2中引入的回归问题。
bpo-25651: 允许将假值 (falsy value) 用于 subTest() 的 msg 形参。
bpo-27778: 修复了当getrandom()被信号中断且信号处理程序引发Python异常时,os.getrandom()中的内存泄漏问题。
bpo-28200: 修复了Windows上os模块中的内存泄漏问题(修复了path_converter()函数)。
bpo-25400: RobotFileParser现在正确返回crawl_delay和request_rate的默认值。初始由Peter Wirtz提供补丁。
bpo-27932: 防止win32_ver()中的内存泄漏。
修复socket._sendfile_use_sendfile中的UnboundLocalError。
bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。
bpo-22493: 现在,通过在正则表达式中间使用内联标志发出的警告消息包含(截断的)正则表达式模式。由Tim Graham提供补丁。
bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。
bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。
bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。
bpo-28114: 修复当env包含字节字符串时parse_envlist()崩溃的问题。由Eryk Sun提供补丁。
bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。
bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。
bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。
bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。
bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。
bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。
bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。
bpo-28325: 移除遗留的MacOS 9 macurl2path模块及其测试。
bpo-28368: 如果子监视器没有附加循环,则拒绝监视进程。由Vincent Michel提供补丁。
bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。
bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。
bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。
bpo-28372: 修复asyncio以支持非python协程的格式化。
bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。
bpo-27972: 禁止Tasks等待自身。
bpo-24142: 读取损坏的配置文件会使configparser处于无效状态。原始补丁由Florian Höch提供。
bpo-29581: ABCMeta.__new__现在接受
**kwargs,允许抽象基类在__init_subclass__中使用关键字参数。由Nate Soares提供补丁。bpo-25532: inspect.unwrap()现在只会尝试解包对象sys.getrecursionlimit()次,以防止在每次属性访问时创建新对象的对象。
bpo-30177: path.resolve(strict=False)不再在文件系统中不存在的第一个元素后截断路径。补丁由Antoine Pietri提供。
文档¶
bpo-31294: 修复ZeroMQSocketListener和ZeroMQSocketHandler示例中的不完整代码片段,并将它们适配到Python 3。
bpo-21649: 在SSL文档中添加RFC 7525和Mozilla服务器端TLS链接。
bpo-31128: 允许pydoc服务器绑定到任意主机名。
bpo-30803: 澄清关于真值测试的文档。原始由Peter Thomassen提供补丁。
bpo-30176: 在curses文档中添加缺失的属性相关常量。
bpo-30052:
bytes()和bytearray()的链接目标现在是它们各自的类型定义,而不是相应的内置函数条目。使用 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: 向
_testcapi模块添加了set_nomemory(start, stop)和remove_mem_hooks()函数。bpo-30357: test_thread: setUp() 现在使用 support.threading_setup() 和 support.threading_cleanup() 来等待线程完成,以避免对后续测试产生随机副作用。初始补丁由 Grzegorz Grzywacz 编写。
bpo-30197: 增强了 test.support 模块中的 swap_attr() 和 swap_item() 函数。它们现在可以在 with 语句内部删除替换的属性或项目时工作。属性或项目的旧值(如果不存在则为 None)现在将被赋值给 "as" 子句的目标,如果有的话。
bpo-24932: 在 _testembed 中使用正确的命令行解析。
bpo-28950: 在 regrtest 命令行参数中禁止将 -j0 与 -T/-l 结合使用。
bpo-28683: 修复在Android上为非root用户绑定Unix socket并引发PermissionError的测试。
bpo-26936: 修复Android上的test_socket失败 - getservbyname()、getservbyport()和getaddrinfo()在某些Android API级别上被破坏。
bpo-28666: 现在test.support.rmtree能够删除不可写或不可读的目录。
bpo-23839: 现在在运行每个测试文件之前清除各种缓存。
bpo-26944: 修复Android上的test_posix,其中'id -G'完全错误或缺少有效的gid。
bpo-28409: regrtest: 修复命令行参数的解析器。
bpo-28217: 添加_testconsole模块以测试控制台输入。
bpo-26939: 添加support.setswitchinterval()函数以修复在Android armv7 qemu模拟器上挂起的test_functools。
构建¶
bpo-31354: 允许
--with-lto用于所有构建,而不仅仅是make profile-opt。bpo-31370: 移除对构建--without-threads的支持。在21世纪,这个选项已经不再真正有用。移除大量条件路径允许我们简化代码库,包括难以维护的低级内部代码。
bpo-30854: 修复编译--without-threads时的编译错误。由Masayuki Yamamoto提供补丁。
bpo-30687: 在Windows上构建时定位msbuild.exe而不是vcvarsall.bat。
bpo-20210: 支持Setup文件中的 disabled 标记。在此标记之后列出的扩展模块完全不被构建,无论是通过Makefile还是setup.py。
bpo-29941: 添加
--with-assertions配置标志以明确启用 Cassert()检查。 默认为关闭。--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:使用
inspect.signature代替inspect.getfullargspec生成调用提示。这将改进使用Argument Clinic转换的内置函数的调用提示。由Louie Lu提供补丁。bpo-31083: IDLE - 在configdialog中添加TabPage类的概要。更新现有类以匹配概要。初始补丁由Cheryl Sabella提供。
bpo-31050: 从ConfigDialog中提取GenPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。
bpo-31004: IDLE - 从ConfigDialog中提取FontPage(Frame)类。经过轻微修改的测试仍然通过。修复通用测试。补丁主要由Cheryl Sabella提供。
bpo-30781: IDLE - 在ConfigDialog中使用ttk部件。由Terry Jan Reedy和Cheryl Sabella提供补丁。
bpo-31060: IDLE - 完成ConfigDialog中方法的重新排列。将与每个标签页和按钮相关的方法分组有助于编写测试和改进标签页,并将使这些组能够分割成类。
bpo-30853: IDLE -- 从ConfigDialog中提取VarTrace类。实例跟踪器管理由tk变量和回调函数组成的对。当跟踪开启时,设置变量会调用函数。新类的测试覆盖率为100%。
bpo-31003: IDLE:为通用标签页添加更多测试。
bpo-30993: IDLE - 改进配置对话框字体页面及测试。在配置对话框中:在create_font_tab文档字符串中记录因果路径。简化一些属性名称。将set_samples调用移至var_changed_font(来自Cheryl Sabella的想法)。将相关函数移动到创建小部件函数之后的位置。在test_configdialog中:修复test_font_set使其不依赖于顺序。修复重命名的test_indent_scale以测试小部件。调整测试以适应set_samples调用的移动。为加载函数添加测试。将所有字体测试放在一个类中,将标签缩进测试放在另一个类中。除了两行代码外,这些测试完全覆盖了相关函数。
bpo-30981: IDLE -- 为配置对话框字体页面添加更多测试。
bpo-28523: IDLE:在配置对话框中将'colour'替换为'color'。
bpo-30917: 为idlelib.config.IdleConf添加测试。将覆盖率从46%提高到96%。由Louie Lu提供补丁。
bpo-30934: 记录idlelib测试的覆盖率详情。在idlelib/idle-test/README.txt中添加部分内容。包括检查分支是否双向执行。排除在单元测试期间不运行的IDLE特定代码。
bpo-30913: IDLE:在文档字符串中记录ConfigDialog的tk变量、方法和部件。这将有助于改进对话框和分割类。原始由Cheryl Sabella提供补丁。
bpo-30899: IDLE:为config中的ConfigParser子类添加测试。由Louie Lu提供补丁。
bpo-30881: IDLE:为browser.py添加文档字符串。由Cheryl Sabella提供补丁。
bpo-30851: IDLE:移除configdialog中未使用的变量。一个是重复的,一个是设置但用户无法更改的。由Cheryl Sabella提供补丁。
bpo-30870: IDLE:在设置对话框中,使用上下键以及鼠标选择字体。初始由Louie Lu提供补丁。
bpo-8231: IDLE:仅调用config.IdleConf.GetUserCfgDir一次。
bpo-30779: IDLE:从configdialog中提取ConfigChanges类,放入config;测试。* 在config中,将转储测试代码放入一个函数;运行它和'unittest'在'if __name__ == '__main__'中。* 基于bpo问题上的changes_class_v4.py添加config.ConfigChanges类。* 添加test_config.ChangesTest类,部分使用configdialog_tests_v1.py。* 修改configdialog以使用ConfigChanges;参见tracker msg297804。* 修改test_configdialog以匹配configdialog的更改。* 移除未使用或已移至ConfigChanges的configdialog函数。Cheryl Sabella贡献了部分补丁。
bpo-30777: IDLE:configdialog - 添加文档字符串并修复注释。由Cheryl Sabella提供补丁。
bpo-30495: IDLE:通过添加文档字符串、PEP8命名和更多测试来改进textview。由Cheryl Sabella提供补丁。
bpo-30723: IDLE:对parenmatch进行多项改进。添加'parens'风格以同时高亮开启和关闭符号。使'default'风格(非默认)成为'opener'的同义词。使时间延迟在所有风格中工作方式相同。为配置对话框扩展标签添加帮助,包括parenmatch的帮助。添加新测试。原始补丁由Charles Wohlganger提供。
bpo-30674: IDLE:向grep模块添加文档字符串。由Cheryl Sabella提供补丁。
bpo-21519: IDLE的基本自定义键输入对话框现在能正确检测重复项。原始由Saimadhav Heblikar提供补丁。
bpo-29910: IDLE 不再通过快捷键注释掉一个区域后删除一个字符。 为此添加
return 'break'以及 IDLE 和默认键绑定之间的其他潜在冲突。bpo-30728: 审查并更改idlelib.configdialog的名称。将方法和属性名称小写。将'colour'替换为'color',扩展过于隐晦的名称,删除不需要的下划线。用特定的导入替换
import *。由Cheryl Sabella提供补丁。bpo-6739: IDLE:通过尝试用tk绑定用户输入的键序列来验证它们。为所有3个验证函数添加测试。原始由G Polo提供补丁。测试由Cheryl Sabella添加。
bpo-15786: 修复IDLE自动完成框的几个问题。现在以下功能应该可以正常工作:点击选择框中的项目;使用滚动条;通过按回车键选择项目。MacOSX上的挂起问题应该不会再发生。补丁由Louie Lu提供。
bpo-25514: 添加关于IDLE启动失败的文档子节。无连接弹出消息会引导用户查看此部分。
bpo-30642: 修复IDLE测试中的引用泄露。由Louie Lu和Terry Jan Reedy提供补丁。
bpo-30495: 为textview.py添加文档字符串并使用PEP8命名。由Cheryl Sabella和Terry Jan Reedy提供补丁。
bpo-30290: 帮助-关于:使用pep8命名并添加测试。将覆盖率提高到100%。由Louie Lu、Cheryl Sabella和Terry Jan Reedy提供补丁。
bpo-30303: 向textview添加_utest选项;添加新测试。将覆盖率提高到100%。由Louie Lu和Terry Jan Reedy提供补丁。
bpo-29071: IDLE为f-字符串前缀着色(但不包括无效的ur前缀)。
bpo-28572: 将IDLE的test_configdialog覆盖率提高10%。更新并增强配置系统的描述。
工具/示例¶
bpo-30983: gdb集成命令(py-bt等)现在也可以在优化的共享构建上工作了。PEP 523 引入了_PyEval_EvalFrameDefault,它在非调试共享构建上内联了PyEval_EvalFrameEx。这破坏了使用py-bt、py-up和其他一些Python特定的gdb集成的能力。问题通过在python-gdb.py中仅查找_PyEval_EvalFrameDefault帧来修复。原始由Bruno "Polaco" Penteado提供补丁。
bpo-29748: 在Argument Clinic中添加了切片索引转换器。
bpo-24037: Argument Clinic现在使用转换器
bool(accept={int})而不是int来表示语义布尔值。这避免了为Python和C重复默认值,并将有助于未来转换为bool。bpo-29367: python-gdb.py现在也支持
method-wrapper(wrapperobject) 对象。bpo-28023: 修复python-gdb.py不支持新字典实现的问题。
bpo-15369: pybench和pystone微基准测试已从Tools中移除。请使用新的Python基准测试套件https://github.com/python/pyperformance,它更可靠,并包含一个可在Python 2和Python 3上工作的pybench便携版本。
bpo-28102: zipfile模块的CLI现在将用法打印到stderr。由Stephen J. Turnbull提供补丁。
C API¶
bpo-31338: 添加了
Py_UNREACHABLE()宏,用于永远不会预期到达的代码路径。这个和其他一些有用的宏现在已在C API手册中记录。bpo-30832: 移除了线程本地存储的自实现。CPython在Python/thread.c中提供了线程本地存储(TLS)的自实现,用于平台没有提供原生TLS的情况。然而,当前所有支持的平台(Windows和pthreads)都已提供原生TLS,并且在任何情况下都无条件定义了Py_HAVE_NATIVE_TLS宏。
bpo-30708: 如果第二个参数为NULL且wchar_t*字符串包含空字符,PyUnicode_AsWideCharString()现在会引发ValueError。
bpo-16500: 弃用PyOS_AfterFork()并添加PyOS_BeforeFork()、PyOS_AfterFork_Parent()和PyOS_AfterFork_Child()。
bpo-6532: PyThread_start_new_thread()和PyThread_get_thread_ident()的结果类型,以及PyThreadState_SetAsyncExc()的id参数类型从"long"改为"unsigned long"。
bpo-27867: 函数PySlice_GetIndicesEx()被弃用,如果Py_LIMITED_API未设置或设置为0x03050400到0x03060000(不包括)或0x03060100或更高的值,则替换为宏。添加了函数PySlice_Unpack()和PySlice_AdjustIndices()。
bpo-29083: 修正了一些公共API函数的声明。PyArg_VaParse()和PyArg_VaParseTupleAndKeywords()在有限API中不可用。当定义了PY_SSIZE_T_CLEAN时,PyArg_ValidateKeywordArguments()、PyArg_UnpackTuple()和Py_BuildValue()在版本<3.3的有限API中不可用。
bpo-28769: PyUnicode_AsUTF8AndSize() 和 PyUnicode_AsUTF8() 的结果现在是
const char *类型,而不是char *。bpo-29058: 所有在 Python 3.2 之后添加的稳定 API 扩展现在只有在 Py_LIMITED_API 设置为支持此 API 的最低 Python 版本的 PY_VERSION_HEX 值时才可用。
bpo-28822: PyUnicode_FindChar() 的索引参数 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: 修复当类型参数是 ctypes 结构化数据类型时,
ctypes.cast()中的崩溃问题。由 Eryk Sun 和 Oren Milman 提供补丁。
库¶
bpo-30167: 如果设置了PYTHONSTARTUP,防止site.main()异常。由Steve Weber提供补丁。
bpo-33812: 对于tzinfo非None但d.tzinfo.utcoffset(d)返回None的Datetime实例d,现在astimezone()方法将其视为naive。
bpo-30805: 避免调试日志记录中的竞态条件
bpo-33767: 在
mmap.mmap对象上执行时,连接(+)和重复(*)序列操作现在会引发TypeError而不是SystemError。由 Zackery Spytz 提供补丁。bpo-32684: 修复 gather 即使在 return_exceptions 的情况下也能传播自身的取消。
bpo-33674: 修复 asyncio.sslproto 中 SSLProtocol.connection_made() 的竞态条件:立即开始握手而不是使用 call_soon()。之前,data_received() 可能在握手开始前被调用,导致握手挂起或失败。
bpo-31647: 修复了在 _SelectorSocketTransport 已经关闭后调用 write_eof() 会引发 AttributeError 的错误。
bpo-33672: 修复 Task.__repr__ 与 Cython 的虚假协程一起使用时崩溃的问题。
bpo-33469: 修复了使用 run_in_executor 后关闭循环时引发的 RuntimeError。
bpo-11874: 当将用法分解为可包装部分时使用更好的正则表达式。避免来自自定义 metavar 字符串的错误断言错误。
bpo-30877: 修复了 JSON 解码器 Python 实现中的一个错误,该错误阻止了在完成解码后清除已解析字符串的缓存。基于 c-fos 的补丁。
bpo-33548: tempfile._candidate_tempdir_list 应考虑常见的 TEMP 位置
bpo-33542: 防止
uuid.get_node在 Windows 上使用 DUID 而不是 MAC。由 Zvi Effron 提供补丁bpo-26819: 修复 Windows proactor 事件循环中
ReadTransport.resume_reading的竞争条件。bpo-28556: typing 模块中的小修复:向
NamedTuple.__new__添加注解,在Generic.__new__中传递*args和**kwds。 原始 PR 由 Paulius Šarka 和 Chad Dombrova 提供。bpo-20087: 更新了支持glibc 2.27地区设置的别名映射。
bpo-33422: 修复在pydoc上查找字节/字符串字面量时尾随引号被删除的问题。由Andrés Delfino提供补丁。
bpo-33197: 更新构造无效inspect.Parameters时的错误信息。由Donghee Na提供补丁。
bpo-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: 修复了
_SelectorSocketTransport中的文件描述符泄漏问题。由 Vlad Starostin 提供补丁。bpo-33256: 修复了
cgitb.html()生成的 html 中<module>调用的显示问题。补丁由 Stéphane Blondon 提供。bpo-33203:
random.Random.choice()现在对于空序列会一致地引发IndexError,即使是从没有getrandbits()实现的子类中调用也是如此。bpo-33224: 为 PEP 479 更新 difflib.mdiff()。将生成器中未捕获的 StopIteration 转换为 return 语句。
bpo-33209: 在
pickle.Pickler.dump()的 C 实现结束时结束帧。bpo-32861: urllib.robotparser 的
__str__表示现在包括通配符条目以及 "Crawl-delay" 和 "Request-rate" 字段。由 Michael Lazar 提供补丁。bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。
bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。
bpo-33021: 在fstat()调用期间释放GIL,避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。
bpo-27683: 修复
ipaddress中的一个回归问题,当网络由包含整数掩码且仅剩1位地址的元组构造时,hosts()的结果为空。bpo-32844: 修复在subprocess中如果另一个低描述符被关闭时,将低描述符(0或1)错误重定向到stderr的问题。
bpo-31908: 修复了
trace模块命令行工具的封面文件输出。之前仅在使用了--missing选项时才会发出封面文件。由Michael Selik提供补丁。bpo-31457: 如果使用嵌套的日志适配器,内部
process()方法不再被省略。bpo-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-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-5755: 将
-Wstrict-prototypes选项从OPT移到CFLAGS_NODIST。此选项在用C++编写扩展模块时会产生烦人的警告。bpo-33614: 确保Windows上稳定ABI的模块定义文件被正确重新生成。
bpo-33522: 在https://python.visualstudio.com/cpython上启用Visual Studio Team Services的CI构建。
bpo-33012: 为 gcc 8 添加
-Wno-cast-function-type以静默关于函数类型转换的警告,如在方法定义列表中转换为 PyCFunction 的警告。bpo-33394: 当GNU make在命令行上传递宏时,为扩展模块启用详细构建。
Windows¶
bpo-33184: 将 Windows 安装程序更新到 OpenSSL 1.0.2o。
macOS¶
bpo-33184: 将 macOS 安装程序构建更新为使用 OpenSSL 1.0.2o。
IDLE¶
bpo-33656: 在Windows上,添加API调用表明tk针对DPI进行缩放。在Windows 8.1+或10上,Python二进制文件的DPI兼容性属性未更改,且显示器分辨率大于96 DPI时,这应使文本和线条更清晰。否则应无影响。
bpo-33768: 点击上下文行将该行移动到编辑器窗口的顶部。
bpo-33763: IDLE:使用只读文本小部件代替标签小部件作为代码上下文。
bpo-33664: 按行滚动IDLE编辑器文本。之前,鼠标滚轮和滚动条滑块以固定像素数移动文本,导致编辑器盒顶部出现部分行。此更改也适用于shell和grep输出窗口,但不适用于只读文本视图。
bpo-33679: 启用代码上下文的主题特定颜色配置。使用“高亮”选项卡查看内置主题的设置或为自定义主题添加设置。
bpo-33642: 为代码上下文显示最多maxlines非空行。如果没有当前上下文,则显示单个空行。
bpo-33628: IDLE:清理codecontext.py及其测试。
bpo-33564: IDLE的代码上下文现在能识别async作为一个块的开头。
bpo-29706: IDLE 现在在 3.6 版本中将 async 和 await 作为关键字着色。它们在 3.7 版本中成为完全的关键字。
bpo-21474: 将单词/标识符的定义从ASCII更新为Unicode。在文本和输入框中,这会影响通过双击选择、通过control-left/right左右移动以及通过control-BACKSPACE/DEL左右删除。
bpo-33204: IDLE:一致地着色无效的字符串前缀。'u'字符串前缀不能与'r'或'f'配对。从右边开始,尽可能多地着色有效的部分。修订并扩展颜色化器测试。
bpo-32831: 为codecontext添加文档字符串和测试。
工具/示例¶
bpo-33189: pygettext.py 现在只识别字面字符串作为文档字符串和可翻译字符串,并拒绝字节字面量和 f-string 表达式。
bpo-31920: 修复了
pygettext脚本中将目录作为参数处理的问题。基于 Oleg Krasnikov 的补丁。bpo-29673: 修复 pystackv 和 pystack gdbinit 宏。
bpo-32885: 为
Tools/scripts/pathfix.py添加-n标志以禁用自动备份创建(带有~后缀的文件)。bpo-31583: 修复 2to3 在使用 --add-suffix 选项但没有 --output-dir 选项时对当前目录中文件的相对路径的处理。
C API¶
bpo-32374: 文档说明多阶段初始化模块的 m_traverse 可以在 m_state=NULL 时调用,并添加健全性检查
Python 3.6.5 正式版¶
发布日期: 2018-03-28
测试¶
bpo-32872: 避免 regrtest 与命名空间包的兼容性问题。
构建¶
bpo-33163: 将pip升级到9.0.3,setuptools升级到v39.0.1。
Python 3.6.5 rc1¶
发布日期: 2018-03-13
安全性¶
bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。
bpo-32981: difflib 和 poplib 中的正则表达式容易受到灾难性回溯的影响。这些正则表达式构成了潜在的 DOS 向量(REDOS)。它们已被重构。这解决了 CVE-2018-1060 和 CVE-2018-1061。由 Jamie Davis 提供补丁。
核心与内置函数¶
bpo-33026: 通过设置f_lineno修复了跳出“with”块的问题。
bpo-17288: 防止从'return'和'exception'跟踪事件跳转。
bpo-32889: 更新 Valgrind 抑制列表,以考虑
Py_ADDRESS_IN_RANG重命名为address_in_range的情况。bpo-32650: Pdb 和其他依赖于 bdb.py 的调试器现在能够正确地单步跳过(next 命令)原生协程。由 Pablo Galindo 提供补丁。
bpo-32685: 改进了当 Python 2 形式的 print 语句出现在复合语句的同一行或以分号而非换行符终止时的建议。由 Nitish Chandra 提供补丁。
bpo-32583: 修复在使用自定义解码错误处理程序时,内置 Unicode 解码器可能因越界写入错误而崩溃的问题。
bpo-26163: 改进了 frozenset() 的哈希函数,当面对包含许多相似值的数据集时,能生成更多不同的哈希值。
bpo-32329: 当通过
PYTHONHASHSEED=0关闭哈希随机化时,sys.flags.hash_randomization现在被正确设置为 0。bpo-30416: 优化器现在受到保护,不会花费大量时间进行复杂计算和在常量折叠中创建大常量时消耗大量内存。
bpo-18533:
repr()在包含其自身的values()或items()的字典上不再引发RecursionError;OrderedDict 同理。相反,像其他递归结构一样使用...。由 Ben North 提供补丁。bpo-32028: 在为将 Py2 打印语句转换为 Py3 内置打印函数调用生成建议时,现在正确地忽略了前导空白。由 Sanyam Khurana 提供补丁。
bpo-32137: 现在,深度嵌套字典的repr会引发RecursionError,而不是因为堆栈溢出而崩溃。
库¶
bpo-33064: lib2to3现在正确支持函数签名中
*args和**kwargs后的尾随逗号。bpo-31804: 避免在标准流在退出时被关闭或为None时,multiprocessing.Process失败。
bpo-33037: 在SSL传输关闭后跳过发送/接收数据。
bpo-30353: 修复 64 位 Cygwin/MinGW 上结构体的 ctypes 按值传递问题。
bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。
bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。
bpo-32713: 修复tarfile.itn对超出界限的浮点值的处理。由Joffrey Fuhrer提供补丁。
bpo-30622: ssl模块现在能检测到LibreSSL中缺少的NPN支持。
bpo-32922: dbm.open()现在使用文件系统编码而不是默认编码对文件名进行编码。
bpo-32859: 在
os.dup2中,不再每次调用时检查dup3系统调用是否存在。bpo-21060: 将setup.py upload中令人困惑的消息从"No dist file created in earlier command"重写为更有帮助的"Must create and upload files in one command"。
bpo-32857: 在
tkinter中,after_cancel(None)现在会引发ValueError异常,而不是取消第一个预定的函数。由Cheryl Sabella提供补丁。bpo-32852: 确保在运行trace时sys.argv保持为列表。
bpo-32841: 修复了
asyncio.Condition问题,该问题在通知并取消条件锁后默默忽略了取消。由Bar Harel提供补丁。bpo-31787: 修复了多个模块中
__init__()方法的内存泄漏问题。(由Oren Milman贡献)bpo-30157: 修复了在只有最后一个字段被引用时,csv.Sniffer.sniff() 中猜测引用和分隔符的问题。由Jake Davis提供补丁。
bpo-32394: socket: 在运行时移除旧版本 Windows 上的 TCP_FASTOPEN、TCP_KEEPCNT 标志。
bpo-32777: 修复了在POSIX系统的子进程中,当标记文件描述符为可继承时,subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。
bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在,在支持dl的平台上,共享扩展已明确链接到libdl。
bpo-32734: 修复了
asyncio.Lock()的安全问题,该问题允许多次获取和锁定同一个锁,而锁并未释放。由Bar Harel提供补丁。bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。
bpo-27931: 修复当用户名为空引号字符串时的电子邮件地址头解析错误。由Xiang Zhang提供补丁。
bpo-32304: distutils的上传命令不再损坏以CR字节结尾的tar文件,并且不再尝试在上传的任何文本字段中将CR转换为CRLF。
bpo-32502: 当遇到64位硬件地址时,uuid.uuid1不再抛出异常。
bpo-31848: 修复Aifc_read.initfp()中当SSND块未找到时的错误处理。补丁由Zackery Spytz提供。
bpo-32555: 在 FreeBSD 和 Solaris 上,os.strerror() 现在总是从当前区域设置编码解码字节字符串,而不是在某些情况下使用 ASCII/替代转义。
bpo-32521: nis 模块现在与新的 libnsl 和头文件位置兼容。
bpo-32473: 提高 ABCMeta._dump_registry() 输出的可读性
bpo-32521: glibc 已移除 Sun RPC。在 nis 模块中使用替代的 libtirpc 头文件和库。
bpo-32228: 确保
truncate()在写入长度超过缓冲区大小后保留文件位置(由tell()报告)。bpo-26133: 在解释器关闭时不要在asyncio UNIX事件循环中取消订阅信号。
bpo-32185: 在装有OpenSSL 1.0.2+或inet_pton的平台上,SSL模块不再在SNI TLS扩展中发送IP地址。
bpo-32323: 对于主机名中带作用域的 IPv6 地址,
urllib.parse.urlsplit()现在不会将区域 ID (scope) 转换为小写。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()方法,如果格式化数字 (int,float,float及其子类) 使用了n类型的话 (例如:'{:n}'.format(1234))。bpo-31802: 即使
os模块尚未导入,导入原生路径模块(posixpath,ntpath)现在也能正常工作。
文档¶
bpo-17232: 澄清 -O 和 -OO 的文档。由 Terry Reedy 提供补丁。
bpo-32800: 更新 xml 默认命名空间的 w3c 文档链接。
bpo-8722: 文档化当属性
get()方法引发AttributeError时__getattr__()的行为。bpo-32614: 修改文档中的正则表达式示例,使用原始字符串以防止
DeprecationWarning,并在正则表达式 HOWTO 中添加文本以突出弃用。bpo-31972: 改进
pathlib.PurePath子类的文档字符串。bpo-17799: 解释了sys.settrace和sys.setprofile及其C-API对应项的实际行为,关于在每个函数中接收哪些类型的事件。由Pablo Galindo Salgado提供补丁。
测试¶
bpo-32517: 修复由于
KqueueSelector循环的传输未被关闭而在 macOS 10.12.2+ 上失败的test_asyncio。bpo-32721: 修复test_hashlib,使其在未构建_md5模块时不会失败。
bpo-32252: 修复用于在测试崩溃时防止核心转储文件的faulthandler_suppress_crash_report()。getrlimit()在成功时返回零。
bpo-31518: Debian Unstable已为SSLv23_METHOD()禁用了TLS 1.0和1.1。将一些测试的TLS/SSL协议更改为PROTOCOL_TLS或PROTOCOL_TLSv1_2,以使它们在Debian上通过。
构建¶
bpo-32635: 修复当系统提供的是 libxcrypt 而不是 libcrypt 时 crypt 模块的段错误。
Windows¶
bpo-33016: 修复nt._getfinalpathname中潜在使用未初始化内存的问题。
bpo-32903: 修复如果当前目录设置为UNC路径时Windows上os.chdir()的内存泄漏。
bpo-31966: 修复WindowsConsoleIO.write()写入空数据的问题。
bpo-32409: 确保activate.bat可以处理Unicode内容。
bpo-32457: 改进启动Python时对非规范化可执行路径的处理。
bpo-32370: 在uuid模块中为ipconfig输出使用正确的编码。由Segev Finer提交补丁。
bpo-29248: 修复 Windows 上的
os.readlink(),它错误地将重新解析数据缓冲区的PrintNameOffset字段视为字符数而非字节数。 由 Craig Holmquist 和 SSE4 提交补丁。bpo-32588: 创建独立的_distutils_findvs模块。
macOS¶
bpo-32726: 提供一个额外的、更现代的macOS安装程序变体,仅支持64位模式的macOS 10.9+系统。将提供的第三方库升级到OpenSSL 1.0.2n、XZ 5.2.3和SQLite 3.22.0。10.9+安装程序现在链接并提供其自己的Tcl/Tk 8.6.8副本。
IDLE¶
bpo-32984: 在运行启动文件时设置
__file__。 与 Python 一样,IDLE 在展示第一个交互式输入提示之前,可选地在 Shell 窗口中运行一个启动文件。对于 IDLE,-s运行环境变量IDLESTARTUP或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标签的文档字符串,将新部件添加到部件列表中。
工具/示例¶
C API¶
bpo-29084: OrderedDict的未记录C API已从有限C API中排除。它是被错误添加的,实际上在有限C API中从未工作过。
Python 3.6.4 正式版¶
发布日期: 2017-12-18
从 3.6.4 rc1 到 3.6.4 正式版中没有新的代码更改。
Python 3.6.4 rc1¶
发布日期: 2017-12-05
核心与内置函数¶
bpo-32176: 现在,代码对象构造函数会根据freevars和cellvars正确设置co_flags.CO_NOFREE,而不是需要调用者正确设置。这确保了当额外的cell引用被注入到修改后的代码对象和函数中时,它会自动清除。
bpo-31949: 修复了打印回溯(PyTraceBack_Print())中的若干问题。现在将sys.tracebacklimit设置为0或更小会抑制回溯的打印。将sys.tracebacklimit设置为None现在会导致使用默认限制。将sys.tracebacklimit设置为大于LONG_MAX的整数现在意味着使用LONG_MAX限制而不是默认限制。修复了Windows上超过
2**31个回溯项时的整数溢出问题。修复了输出错误处理。bpo-30696: 修复了在没有内存时交互式解释器无限循环的问题。
bpo-20047: Bytearray方法partition()和rpartition()现在仅接受类似字节的对象作为分隔符,如文档所述。特别是,现在当传递整数作为分隔符时,它们会引发TypeError而不是返回一个虚假的结果。
bpo-31852: 修复由async软关键字和续行组合引起的段错误。
bpo-21720: 当
__import__()的 fromlist 参数或模块的__all__属性包含bytes实例时,不再发出BytesWarning。bpo-31825: 修复了在解码转义的非ascii字节时'unicode-escape'编解码器和codecs.escape_decode()中的OverflowError。
bpo-28603: 在解释器退出时打印异常的完整上下文/原因链,即使链中的异常不可哈希或与后面的异常相等。由Zane Bitter提供补丁。
bpo-31786: 修复 select 模块中负超时时间在 -1.0 和 0.0 之间的正确舍入问题。现在函数会按预期阻塞等待事件。此前,调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。
bpo-31642: 通过将sys.modules["package.module"]设置为None,恢复了阻塞的"from package import module"。
bpo-31626: 修复了调试内存分配器中的一个错误。在缩小内存块后存在对已释放内存的写入。
bpo-31619: 修复了将带有大量下划线的字符串转换为二进制基数整数时的ValueError。
bpo-31592: 修复了在
unicodedata.normalize()出错时Python解析器中的断言失败。由Oren Milman提供补丁。bpo-31588: 当类创建由于元类的
__prepare__()方法出错而失败时,抛出一个带有有用错误信息的TypeError。由Oren Milman提供补丁。bpo-31566: 修复了在
__name__全局变量出错时_warnings.warn()中的断言失败。由Oren Milman提供补丁。bpo-31505: 修复了在
_json.make_encoder()接收到错误的encoder()参数时json中的断言失败。 由 Oren Milman 提供补丁。bpo-31492: 修复了在从具有错误
__name__属性的模块导入失败时,以及在访问此类模块的属性失败时的断言失败。由Oren Milman提供补丁。bpo-31490: 修复
ctypes类定义中的断言失败,当类有一个属性其名称在_anonymous_中指定但不在_fields_中时。由 Oren Milman 提供补丁。bpo-31478: 修复
_random.Random.seed()中当参数有坏的__abs__()方法时的断言失败。由 Oren Milman 提供补丁。bpo-31315: 修复 imp.create_dynamic() 中当 spec.name 不是字符串时的断言失败。由 Oren Milman 提供补丁。
bpo-31311: 修复
ctypes._CData的__setstate__()方法在__dict__有问题时的崩溃。由 Oren Milman 提供补丁。bpo-31293: 修复 timedelta 对象与具有坏的 as_integer_ratio() 方法的浮点数进行真除法和乘法时的崩溃。由 Oren Milman 提供补丁。
bpo-31285: 修复
warnings.warn_explicit中当接收的加载器的get_source()的返回值有坏的splitlines()方法时的断言失败。由 Oren Milman 提供补丁。bpo-30817:
PyErr_PrintEx()现在会清除可能由_PySys_SetObjectId()引发的忽略异常,例如在没有内存时。
库¶
bpo-28556: 对
typing模块的两项小修复:允许浅复制泛型类的实例,改进__init_subclass__与泛型的交互。原始 PR 由 Ivan Levkivskyi 提供。bpo-27240: 新电子邮件策略的头部折叠算法已被重写,这也修复了 bpo-30788、bpo-31831 和 bpo-32182。特别是,现在可以正确进行 RFC2231 折叠。
bpo-32186: io.FileIO.readall() 和 io.FileIO.read() 现在在获取文件大小时释放 GIL。修复了所有线程因无法访问的 NFS 服务器而挂起的问题。由 Nir Soffer 提供补丁。
bpo-12239: 当属性的值为
VT_EMPTY时,使msilib.SummaryInformation.GetProperty()返回None。初始补丁由 Mark Mc Mahon 提供。bpo-31325: 修复了
RobotFileParser.parse()方法中collections.namedtuple()的错误用法。初始由 Robin Wellner 提供补丁。bpo-12382: 当无法打开或创建 MSI 文件时,
msilib.OpenDatabase()现在会引发具有更佳异常消息的异常。初始补丁由 William Tisäter 提供。bpo-32110:
codecs.StreamReader.read(n)现在对于非负的 n,返回不超过 n 个字符/字节。这使得它与其他类似文件对象的read()方法兼容。bpo-32072: 修复了二进制 plists 的问题:修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。
bpo-32034: 使asyncio.IncompleteReadError和LimitOverrunError可pickle。
bpo-32015: 修复了在等待异步读写套接字期间重新连接套接字时asyncio的循环问题。
bpo-32011: 恢复了对加载带有TYPE_INT64代码的marshal文件的支持。这些文件可以在Python 2.7中生成。
bpo-31970: 降低asyncio调试模式的性能开销。
bpo-9678: 修复了uuid模块中确定MAC地址的问题:在NetBSD和OpenBSD上使用ifconfig。在Linux、FreeBSD、NetBSD和OpenBSD上使用arp。基于Takayuki Shimizukawa的补丁。
bpo-30057: 修复了signal.signal()中潜在的信号丢失问题。
bpo-31933: 修复Blake2参数leaf_size和node_offset在大端平台上的问题。由Jack O'Connor提供补丁。
bpo-31927: 修复了socket模块在NetBSD 8上的编译问题。修复了在NetBSD和DragonFly BSD上解析AF_BLUETOOTH地址时的断言失败或读取任意数据的问题。
bpo-27666: 修复了当类型chtype或mmask_t的大小小于C long的大小时,curses.box()和curses.ungetmouse()中的堆栈损坏问题。curses.box()现在接受字符作为参数。基于Steve Fink的补丁。
bpo-31897: plistlib现在在读取二进制plist时会捕获更多错误,并抛出InvalidFileException而不是意外的异常。
bpo-25720: 修复了检查curses WINDOW填充状态的方法。由Masayuki Yamamoto提供补丁。
bpo-31893: 修复了OpenBSD和NetBSD上kqueue_event结构的布局。修复了kqueue_event对象的比较。
bpo-31891: 修复了在NetBSD上构建curses模块的问题。
bpo-28416: 具有 persistent_id() 方法的 pickle.Pickler 子类和具有 persistent_load() 方法的 pickle.Unpickler 子类的实例不再创建引用循环。
bpo-28326: 修复当 stdout 和/或 stderr 关闭或为 None 时的 multiprocessing.Process。
bpo-31457: 如果使用嵌套的日志适配器,内部
process()方法不再被省略。bpo-31457: LoggerAdapter 对象的
manager属性现在可以正确设置了。bpo-31806: 修复 time.sleep(), threading.Lock.acquire() 和 socket.socket.settimeout() 中的超时舍入,以正确舍入 -1.0 和 0.0 之间的负超时。这些函数现在会按预期阻塞等待事件。之前,调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。
bpo-28603: traceback: 修复了在打印异常回溯时,当当前异常或其上下文/原因链中的异常不可哈希时发生的 TypeError。由 Zane Bitter 提供补丁。
bpo-30058: 修复 select.kqueue.control() 中的缓冲区溢出。
bpo-31770: 防止多次调用
sqlite3.Cursor对象的__init__()方法时崩溃。由 Oren Milman 提供补丁。bpo-31672:
string.Template中的idpattern匹配了一些非ASCII字符。现在它使用-i正则表达式本地标志来避免非ASCII字符。bpo-31764: 防止在
sqlite3.Cursor.close()中当Cursor对象未初始化时发生崩溃。补丁由 Oren Milman 提供。bpo-31752: 修复在调用自定义整数的 timedelta 构造函数时可能发生的崩溃。
bpo-31701: 在Windows上,faulthandler.enable()现在会忽略MSC和COM异常。
bpo-31728: 防止由于
Element.text和Element.tail的不安全清理导致的_elementtree崩溃。 由 Oren Milman 提供补丁。bpo-31620: 空的 asyncio.Queue 现在在队列获取轮询超时时不会泄漏内存。
bpo-31632: 修复 asyncio 模块中 _SSLProtocolTransport 类的 set_protocol() 方法。此方法之前修改了错误的协议引用。
bpo-31675: 修复了Tkinter的splitlist()和split()方法在传递大于2 GiB的字符串时的内存泄漏问题。
bpo-31673: 修复了Tkinter方法adderrorinfo()名称中的拼写错误。
bpo-30806: 修复了netrc对象的字符串表示。
bpo-15037: 为 ncurses 5.7 及更早版本的 curses 中的 getkey() 添加了一个变通方案。
bpo-25351: 避免venv激活时因未定义变量而失败。
bpo-25532: inspect.unwrap()现在只会尝试解包对象sys.getrecursionlimit()次,以防止在每次属性访问时创建新对象的对象。
bpo-30347: 修复了在并发迭代itertools.groupby()迭代器时的崩溃问题。
bpo-31516:
threading.current_thread()在关闭时不应返回一个虚拟线程。bpo-31351: 如果 pip 引导失败,python -m ensurepip 现在会以非零退出代码退出。
bpo-31482:
random.seed()现在在version=1时可以与bytes一起工作。bpo-31334: 修复
select模块中的poll.poll([timeout]),在所有操作系统上对于任意的负超时值,现在可以仅接受非负整数或 -1。由 Riccardo Coccioli 提供补丁。bpo-31310: 如果崩溃,multiprocessing 的信号量跟踪器应该重新启动。
bpo-31308: 使 multiprocessing 的 forkserver 进程免受 Ctrl-C 和其他用户中断的影响。如果崩溃,必要时重启它。
文档¶
测试¶
bpo-31380: 在 macOS 上跳过 test_httpservers 的 test_undecodable_file 测试:在 APFS 上失败。
bpo-31705: 在早于4.5版本的Linux内核上跳过test_socket.test_sha256()测试。该测试在内核3.10(ppc64le架构)上会因ENOKEY而失败。此问题已在4.5内核中修复。
bpo-31174: 修复test_tools.test_unparse:DirectoryTestCase现在存储样本名称以始终测试相同的文件。这避免了在查找引用泄漏时产生误报。
bpo-30695: 向
_testcapi模块添加了set_nomemory(start, stop)和remove_mem_hooks()函数。
构建¶
bpo-32059:
setup.py中的detect_modules()现在在交叉编译时也会搜索sysroot路径。bpo-31957: 修复为Windows构建时的Windows SDK版本检测。
bpo-31609: 修复PCbuild/clean.bat中的引号问题。
bpo-31934: 当构建源树不干净时中止构建。
bpo-31926: 修复了当.c文件中有多个同名函数和/或方法时,Argument Clinic有时会导致编译错误的问题。
bpo-28791: 更新Windows构建以使用SQLite 3.21.0。
bpo-28791: 更新OS X安装程序以使用SQLite 3.21.0。
bpo-22140: 防止在 python-config.sh 中双重替换前缀。
bpo-31536: 如果没有任何更改,避免在
make regen-all后进行全面重建。
Windows¶
macOS¶
bpo-31392: 更新macOS安装程序以使用OpenSSL 1.0.2m。
IDLE¶
bpo-32207: 在IDLE中改进tk事件异常回溯。当tk事件处理由IDLE的运行循环驱动时,不再向tk事件异常回溯中添加令人困惑和分散注意力的queue.EMPTY回溯上下文。现在,回溯与事件处理由用户代码驱动时相同。基于Serhiy Storchaka的建议的补丁。
bpo-32164: 删除未使用的文件idlelib/tabbedpages.py。在configdialog中使用TabbedPageSet已被ttk.Notebook替代。
bpo-32100: IDLE: 修复pathbrowser中的旧错误和新错误;改进测试。补丁主要由Cheryl Sabella提供。
bpo-31858: IDLE -- 将shell提示符操作限制在shell中。编辑器和输出窗口仅看到一个空的最后提示行。这简化了代码并修复了插入换行时的一个小错误。如果存在Sys.ps1,则在Shell启动时读取,但不设置或更改。
bpo-31860: IDLE配置对话框中的字体样本现在可编辑。更改在IDLE保持打开时持续存在。
bpo-31836: 现在如果在设置ps1的test_idle之后运行,Test_code_module将通过。代码模块如果存在则使用sys.ps1,如果不存在则设置为'>>> '。Test_code_module现在正确测试了这两种行为。ps2同理。
bpo-28603: 修复了一个TypeError,该错误在打印包含不可哈希异常的追溯时导致shell重启。补丁由Zane Bitter提供。
bpo-13802: 在IDLE的字体设置样本中使用非拉丁字符。即使选择定义Unicode基本多语言平面有限子集的字体,tcl/tk也会使用定义字符的其他字体。扩展的示例为非拉丁字符用户提供了更好的了解他们在IDLE的shell和编辑器中可能会看到的内容。为了给扩展的样本腾出空间,字体标签上的框架被重新排列。字体/标签帮助解释了关于添加的一些内容。
bpo-31460: 简化IDLE模块浏览器的API。传递一个小部件而不是带有根部件的flist,开启了创建一个仅是窗口一部分的浏览器框架的可能性。传递一个完整的文件名而不是假定来自.py文件的片段,开启了浏览不以.py结尾的python文件的可能性。
bpo-31649: IDLE - 使_htest, _utest参数仅关键字。
bpo-31559: 在idle_test.test_browser中移除测试顺序依赖。
bpo-31459: 将IDLE的模块浏览器从类浏览器重命名为模块浏览器。原始的模块级类和方法浏览器多年前就变成了一个模块浏览器,增加了模块级函数。昨天又增加了嵌套类和函数。为了向后兼容,设置对话框的键标签上出现的虚拟事件<<open-class-browser>>没有被更改。补丁由Cheryl Sabella提供。
bpo-31500: 现在默认字体在高DPI显示器上会进行缩放。
bpo-1612262: IDLE模块浏览器现在显示嵌套类和函数。代码和测试的原始补丁分别由Guilherme Polo和Cheryl Sabella提供。
工具/示例¶
bpo-30722: 使redemo能够在Python 3.6及更新版本中工作。同时,移除
LOCALE选项,因为它不适用于Python 3中的字符串模式。由Christoph Sarnowski提供补丁。
C API¶
bpo-20891: 修复PyGILState_Ensure()。当PyGILState_Ensure()在非Python线程中且在PyEval_InitThreads()之前被调用时,仅在调用PyThreadState_New()之后调用PyEval_InitThreads(),以修复崩溃问题。
bpo-31532: 修复由于在getpath.c中Py_GetPath()和Py_SetPath()之间的分配器混合导致的内存损坏。
bpo-30697: 移除了
PyExc_RecursionErrorInst单例,PyErr_NormalizeException()也不再使用它。这个单例是持久的,其成员从未被清除可能会导致解释器在最终化期间出现段错误。另见 bpo-22898。
Python 3.6.3 正式版¶
发布日期: 2017-10-03
库¶
bpo-31641: 重新允许在
concurrent.futures.as_completed()中使用任意可迭代对象。修复3.6.3rc1中的回归。
构建¶
Python 3.6.3 rc1¶
发布日期: 2017-09-18
安全性¶
核心与内置函数¶
bpo-31471: 修复 Windows 上
subprocess.Popen()中的断言失败,当 env 参数有一个坏的keys()方法时。由 Oren Milman 提供补丁。bpo-31418: 修复
PyErr_WriteUnraisable()中的断言失败,当异常有一个坏的__module__属性时。由 Oren Milman 提供补丁。bpo-31416: 修复当warnings.filters或warnings.defaultaction错误时的断言失败。由Oren Milman提供补丁。
bpo-31411: 当warnings.onceregistry不是字典时,抛出TypeError而不是SystemError。由Oren Milman提供补丁。
bpo-31373: 修复了几个由于浮点降级可能导致的未定义行为实例。
bpo-30465: f-字符串中的位置信息 (
lineno和col_offset) 现在(大部分)正确。 这修复了像 flake8 这样的工具在错误的行(通常是文件的第一行)显示警告的问题。bpo-31343: 为 major()、minor() 和 makedev() 引入 sys/sysmacros.h。GNU C 函数库计划从 sys/types.h 中移除这些函数。
bpo-31291: 修复了 Windows 上
zipimport.zipimporter.get_data中的一个断言失败,当pathname.replace('/','\\')的返回值不是字符串的时候。 由 Oren Milman 提供补丁。bpo-31271: 修复当编码器未返回字节对象时,
io.TextIOWrapper的write()方法中的断言失败。 由 Oren Milman 提供补丁。bpo-31243: 修复当解码器状态无效时,
io.TextIOWrapper的某些方法中的崩溃问题。 由 Oren Milman 提供补丁。bpo-30721:
print现在显示使用Python 2重定向语法的正确用法提示。由Sanyam Khurana提供补丁。bpo-31070: 修复importlib中_get_module_lock()的竞态条件。
bpo-31095: 修复由未调用
PyObject_GC_UnTrack()的tp_dealloc引起的GC期间潜在崩溃问题。bpo-31071: 当传递其他参数时,避免在使用*解包调用中掩盖原始TypeError。
bpo-30978: str.format_map()现在传递键查找异常。之前任何异常都被替换为KeyError异常。
bpo-30808: 对并发敏感的信号状态使用_Py_atomic API。
bpo-30876: 从未加载的包中进行相对导入现在会重新导入包,而不是因SystemError失败。从非包中进行相对导入现在会因ImportError而非SystemError失败。
bpo-30703: 改进信号传递。避免在信号处理程序中使用Py_AddPendingCall,以避免调用信号不安全函数。这里添加的测试在没有补丁的其他部分的情况下,在Linux和OS X上失败。这意味着我们的信号传递逻辑存在缺陷(某些信号可能会丢失)。
bpo-30765: 当PyThread_acquire_lock()被要求不阻塞时,避免在pthread_mutex_lock()中阻塞。
bpo-31161: 确保'Missing parentheses'语法错误消息仅应用于SyntaxError,而不是子类。补丁由Martijn Pieters提供。
bpo-30814: 修复从包中导入子模块时的竞态条件。
bpo-30597:
print现在在作为 Python 2 语句使用时,自定义错误消息中显示预期的输入。由 Sanyam Khurana 提供补丁。
库¶
bpo-31499: xml.etree:修复当解析器是引用循环的一部分时的崩溃问题。
bpo-28556: typing.get_type_hints现在默认(当调用者未指定
globalns时)为类和模块找到正确的globalns。bpo-28556: 对
typing模块的速度改进。原始PR由Ivan Levkivskyi和Mitar提供。bpo-31544: ElementTree的C加速器模块忽略了在XMLParser()中查找TreeBuilder目标方法时引发的异常。
bpo-31234: socket.create_connection()现在手动修复了一个引用循环:成功时清除存储最后一个异常的变量。
bpo-31457: LoggerAdapter对象现在可以嵌套。
bpo-31400: 改进了 SSL 错误处理,避免丢失错误编号。
bpo-28958: ssl.SSLContext() 现在在无法实例化上下文时使用 OpenSSL 错误信息。
bpo-27340: SSLSocket.sendall() 现在使用 memoryview 来创建数据切片。这修复了对所有类似于字节对象的支持。同时,这也更高效,避免了昂贵的复制。
bpo-31178: 修复了 subprocess 模块中在罕见错误路径下的字符串连接错误
bpo-31350: 对
asyncio._get_running_loop()进行微优化,使其速度提升高达 10%。bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题(libexpat bug 115):https://github.com/libexpat/libexpat/issues/115
bpo-29136: 添加 TLS 1.3 密码套件和 OP_NO_TLSv1_3。
bpo-29212: 修复 concurrent.futures.thread.ThreadPoolExecutor 线程在没有提供 thread_name_prefix 时默认使用非 repr() 基础的线程名。它们现在会自称为 "ThreadPoolExecutor-y_n"。
bpo-9146: 修复 _hashopenssl 在链接的 OpenSSL 库中不可用标准哈希函数(如 md5)时的段错误。如在某些特殊的 FIPS-140 构建环境中。
bpo-27144:
concurrent.futures中的map()和as_completed()迭代器现在避免保留对生成对象的引用。bpo-22536: 在 POSIX 系统上由于找不到可执行文件或 cwd 而引发 FileNotFoundError 时,子进程模块现在会设置文件名。
bpo-31249: concurrent.futures: ThreadPoolExecutor 使用的 WorkItem.run() 现在打破了异常对象和 WorkItem 对象之间的循环引用。
bpo-31247: xmlrpc.server 现在在处理异常的代码中使用 sys.exc_info() 时显式地打破循环引用。
bpo-30102: ssl 和 hashlib 模块现在在 OpenSSL < 1.1.0 时调用 OPENSSL_add_all_algorithms_noconf()。该函数检测 CPU 特性并在一些 CPU 架构(如 POWER8)上启用优化。补丁基于 Gustavo Serra Scalet 的研究。
bpo-31185: 修复了 asyncio 加速模块中的杂项错误。
bpo-31135: ttk:修复LabeledScale和OptionMenu类的destroy()方法。即使使用的属性不存在,也调用父类的destroy()方法。LabeledScale.destroy()方法现在还显式清除了label和scale属性,以帮助垃圾回收器销毁所有小部件。
bpo-31107: 修复
copyreg._slotnames()对于名称以下划线开头的类的损坏属性计算。由Shane Harvey提供补丁。bpo-31061: 修复了在使用asyncio和线程时的崩溃问题。
bpo-30502: 修复了ssl中长oids的处理。基于Christian Heimes的补丁。
bpo-30119: ftplib.FTP.putline() 现在会在命令包含 CR 或 LF 时抛出 ValueError。由 Donghee Na 提供补丁。
bpo-30595: multiprocessing.Queue.get() 现在在非阻塞模式下轮询其读取器,如果成功获取锁但获取时间超过了超时时间。
bpo-29403: 修复
unittest.mock模块的 autospec 功能,使其不再对绑定到方法的内置函数报错。 由 Aaron Gallagher 提供补丁。bpo-30961: 修复了tracemalloc中借用引用的递减问题。
bpo-25684: 修改
ttk.OptionMenu单选按钮,使其在不同OptionMenu实例间保持唯一。bpo-30886: 修复 multiprocessing.Queue.join_thread():现在即使线程是由创建队列的同一进程启动的,它也会等待线程完成。
bpo-29854: 修复使用 readline 的 history-size 选项时 readline 中的段错误。由 Nir Soffer 提供补丁。
bpo-30319: socket.close() 现在忽略 ECONNRESET 错误。
bpo-30828: 修复
asyncio.CFuture.remove_done_callback()中的越界写入问题。bpo-30807: 当传递一个极小的值时,signal.setitimer() 可能会禁用计时器。极小的值(如 1e-6)是 setitimer() 有效的非零值,它被指定为采取微秒级间隔。然而,在某些平台上,我们的转换例程可能将 1e-6 转换为零间隔,从而禁用计时器而不是(重新)调度它。
bpo-30441: 修复在迭代 os.environ 时修改它导致的错误。
bpo-30532: 修复电子邮件头值解析器在某些情况下丢弃折叠空白的问题。
bpo-30879: os.listdir() 和 os.scandir() 现在在使用字节类参数调用时会发出字节名称。
bpo-30746: 禁止在
os.putenv()和os.spawn*()的环境变量名中使用 '=' 字符。bpo-29755: 修复了 gettext 模块中的 lgettext() 系列函数。它们现在总是返回字节。
文档¶
测试¶
bpo-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¶
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:使用
inspect.signature代替inspect.getfullargspec生成调用提示。这将改进使用Argument Clinic转换的内置函数的调用提示。由Louie Lu提供补丁。bpo-31083: IDLE - 在configdialog中添加TabPage类的概要。更新现有类以匹配概要。初始补丁由Cheryl Sabella提供。
bpo-31050: 从ConfigDialog中提取GenPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。
bpo-31004: IDLE - 从ConfigDialog中提取FontPage(Frame)类。经过轻微修改的测试仍然通过。修复通用测试。补丁主要由Cheryl Sabella提供。
bpo-30781: IDLE - 在ConfigDialog中使用ttk部件。由Terry Jan Reedy和Cheryl Sabella提供补丁。
bpo-31060: IDLE - 完成ConfigDialog中方法的重新排列。将与每个标签页和按钮相关的方法分组有助于编写测试和改进标签页,并将使这些组能够分割成类。
bpo-30853: IDLE -- 从ConfigDialog中提取VarTrace类。实例跟踪器管理由tk变量和回调函数组成的对。当跟踪开启时,设置变量会调用函数。新类的测试覆盖率为100%。
bpo-31003: IDLE:为通用标签页添加更多测试。
bpo-30993: IDLE - 改进配置对话框字体页面及测试。在配置对话框中:在create_font_tab文档字符串中记录因果路径。简化一些属性名称。将set_samples调用移至var_changed_font(来自Cheryl Sabella的想法)。将相关函数移动到创建小部件函数之后的位置。在test_configdialog中:修复test_font_set使其不依赖于顺序。修复重命名的test_indent_scale以测试小部件。调整测试以适应set_samples调用的移动。为加载函数添加测试。将所有字体测试放在一个类中,将标签缩进测试放在另一个类中。除了两行代码外,这些测试完全覆盖了相关函数。
bpo-30981: IDLE -- 为配置对话框字体页面添加更多测试。
bpo-28523: IDLE:在配置对话框中将'colour'替换为'color'。
bpo-30917: 为idlelib.config.IdleConf添加测试。将覆盖率从46%提高到96%。由Louie Lu提供补丁。
bpo-30934: 记录idlelib测试的覆盖率详情。在idlelib/idle-test/README.txt中添加部分内容。包括检查分支是否双向执行。排除在单元测试期间不运行的IDLE特定代码。
bpo-30913: IDLE:在文档字符串中记录ConfigDialog的tk变量、方法和部件。这将有助于改进对话框和分割类。原始由Cheryl Sabella提供补丁。
bpo-30899: IDLE:为config中的ConfigParser子类添加测试。由Louie Lu提供补丁。
bpo-30881: IDLE:为browser.py添加文档字符串。由Cheryl Sabella提供补丁。
bpo-30851: IDLE:移除configdialog中未使用的变量。一个是重复的,一个是设置但用户无法更改的。由Cheryl Sabella提供补丁。
bpo-30870: IDLE:在设置对话框中,使用上下键以及鼠标选择字体。初始由Louie Lu提供补丁。
bpo-8231: IDLE:仅调用config.IdleConf.GetUserCfgDir一次。
bpo-30779: IDLE:从configdialog中提取ConfigChanges类,放入config;测试。* 在config中,将转储测试代码放入一个函数;运行它和'unittest'在'if __name__ == '__main__'中。* 基于bpo问题上的changes_class_v4.py添加config.ConfigChanges类。* 添加test_config.ChangesTest类,部分使用configdialog_tests_v1.py。* 修改configdialog以使用ConfigChanges;参见tracker msg297804。* 修改test_configdialog以匹配configdialog的更改。* 移除未使用或已移至ConfigChanges的configdialog函数。Cheryl Sabella贡献了部分补丁。
bpo-30777: IDLE:configdialog - 添加文档字符串并修复注释。由Cheryl Sabella提供补丁。
bpo-30495: IDLE:通过添加文档字符串、PEP8命名和更多测试来改进textview。由Cheryl Sabella提供补丁。
bpo-30723: IDLE:对parenmatch进行多项改进。添加'parens'风格以同时高亮开启和关闭符号。使'default'风格(非默认)成为'opener'的同义词。使时间延迟在所有风格中工作方式相同。为配置对话框扩展标签添加帮助,包括parenmatch的帮助。添加新测试。原始补丁由Charles Wohlganger提供。
bpo-30674: IDLE:向grep模块添加文档字符串。由Cheryl Sabella提供补丁。
bpo-21519: IDLE的基本自定义键输入对话框现在能正确检测重复项。原始由Saimadhav Heblikar提供补丁。
bpo-29910: IDLE 不再通过快捷键注释掉一个区域后删除一个字符。 为此添加
return 'break'以及 IDLE 和默认键绑定之间的其他潜在冲突。bpo-30728: 审查并更改idlelib.configdialog的名称。将方法和属性名称小写。将'colour'替换为'color',扩展过于隐晦的名称,删除不需要的下划线。用特定的导入替换
import *。由Cheryl Sabella提供补丁。bpo-6739: IDLE:通过尝试用tk绑定用户输入的键序列来验证它们。为所有3个验证函数添加测试。原始由G Polo提供补丁。测试由Cheryl Sabella添加。
工具/示例¶
Python 3.6.2 正式版¶
发布日期: 2017-07-17
自rc2起没有更改
Python 3.6.2 rc2¶
发布日期: 2017-07-07
安全性¶
bpo-30730: 在 Windows 上防止子进程中的环境变量注入。防止传递其他环境变量和命令参数。
bpo-30694: 将 expat 从 2.2.0 升级到 2.2.1 以修复多个安全漏洞,包括:CVE-2017-9233 (外部实体无限循环 DoS)、CVE-2016-9063 (整数溢出,重新修复)、CVE-2016-0718 (修复 2.2.0 对 CVE-2016-0718 的修复引起的回归错误) 和 CVE-2012-0876 (使用 SipHash 抵御哈希洪水攻击)。 注意: CVE-2016-5300 (使用操作系统特定的熵源如 getrandom) 不影响 Python,因为 Python 已经通过
XML_SetHashSalt()从操作系统获取熵来设置 expat 的密钥。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: 将 expat 从 2.1.1 更新到 2.2.0 以修复 CVE-2016-0718 和 CVE-2016-4472。更多信息请见 https://sourceforge.net/p/expat/bugs/537/。
核心与内置函数¶
bpo-30682: 移除了对某些 f-字符串过于严格的断言,例如 eval("f'\n'") 和 eval("f'\r'")。
bpo-30604: 将co_extra_freefuncs移动到非每线程以避免崩溃
bpo-29104: 修复了 f-字符串中反斜杠的解析。
bpo-27945: 修复了在搜索、插入或比较过程中输入集合被修改时,字典的各种段错误。基于 Duane Griffin 和 Tim Mitchell 的补丁。
bpo-25794: 修复了 type.__setattr__() 和 type.__delattr__() 对于非 interned 属性名称的问题。基于 Eryk Sun 的补丁。
bpo-30039: 如果解释器在恢复一系列嵌套的 'yield from' 或 'await' 调用过程中发生 KeyboardInterrupt,现在会正确地传递到最内层的帧。
bpo-12414: sys.getsizeof() 在代码对象上现在返回的大小包括代码结构及其引用对象的大小。由 Donghee Na 提交的补丁。
bpo-29949: 修复了 set 和 frozenset 对象的内存使用回归问题。
bpo-29935: 修复了在传递错误类型的索引时,tuple、list 和 deque 的 index() 方法中的错误消息。
bpo-29859: 当 thread_pthread.h 中的任何 pthread_* 调用失败时,显示正确的错误消息。
bpo-28876: 即使
len(range)引发OverflowError,bool(range)也能正常工作。bpo-29600: 修复在StopIteration中包装协程返回值的问题。
bpo-28856: 修复了一个疏忽,即 %b 格式的字节应支持遵循缓冲区协议的对象。
bpo-29714: 修复了一个回归问题,即当包含零字节时,字节格式可能会失败。
bpo-29478: 在使用Compat32策略时,如果指定了max_line_length=None,它将不再被忽略。补丁由Mircea Cosbuc提供。
库¶
bpo-30616: enum 的功能 API 允许创建空的枚举。由 Donghee Na 提供补丁
bpo-30038: 修复了信号传递和唤醒文件描述符之间的竞争条件。补丁由 Nathaniel Smith 提供。
bpo-23894: lib2to3 现在能识别
rb'...'和f'...'字符串。bpo-23890: unittest.TestCase.assertRaises() 现在手动打破引用循环,以避免对象存活时间超过预期。
bpo-30149: inspect.signature() 现在支持带有被partialmethod包装的可变参数参数的可调用对象。由Donghee Na提供补丁。
bpo-30645: 修复imp.load_package()中的路径计算,修复仅随字节码一起提供包的情况。由Alexandru Ardelean提供补丁。
bpo-29931: 修复了 ipaddress.ip_interface 对象的比较检查。补丁由 Sanjay Sundaresan 提供。
bpo-30605: re.compile() 在编译带有错误放置的内联修饰符的 bytes 实例时不再引发 BytesWarning。由 Roy Williams 提供补丁。
bpo-24484: 避免多进程清理中的竞争条件(#2159)
bpo-28994: 对于由 atexit 注册的回调中引发的 SystemExit,不再显示回溯。
bpo-30508: 如果调用了 Task/Future 的 "cancel()" 方法,则不记录异常。
bpo-28556: typing 模块的更新:添加通用的 AsyncContextManager,为所有版本添加对 ContextManager 的支持。原始 PR 由 Jelle Zijlstra 和 Ivan Levkivskyi 提供。
bpo-29870: 修复 asyncio/ssl 实现中当连接被中止时 SSL 套接字的泄漏问题。由 Michaël Sghaïer 提供补丁。
bpo-29743: 在握手过程中关闭传输会导致打开的套接字泄漏。由 Nikolay Kim 提供补丁。
bpo-27585: 修复 asyncio.Lock 中的等待者取消问题。由 Mathieu Sornay 提供补丁。
bpo-30418: 在 Windows 上,如果子进程仍在运行但关闭了管道,subprocess.Popen.communicate() 现在也会忽略 stdin.write() 上的 EINVAL。
bpo-29822: inspect.isabstract()现在在__init_subclass__期间工作。补丁由Nate Soares提供。
bpo-29581: ABCMeta.__new__现在接受
**kwargs,允许抽象基类在__init_subclass__中使用关键字参数。由Nate Soares提供补丁。bpo-30557: faulthandler 现在能够正确过滤和显示 Windows 上的异常代码。
bpo-30378: 修复 logging.handlers.SysLogHandler 无法处理 IPv6 地址的问题。
bpo-29960: 当_random.Random.setstate()引发异常时,保留生成器状态。补丁由Bryan Olson提供。
bpo-30414: multiprocessing.Queue._feed 后台运行线程在异常时不从主循环中中断。
bpo-30003: 修复HZ编解码器中转义字符的处理。基于Ma Lin的补丁。
bpo-30301: 修复在 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-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配置标志以明确启用 Cassert()检查。 默认为关闭。--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-29367: python-gdb.py现在也支持
method-wrapper(wrapperobject) 对象。
测试¶
Windows¶
Python 3.6.1 正式版¶
发布日期: 2017-03-21
核心与内置函数¶
构建¶
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¶
Windows¶
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-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-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: 新增
socket.TCP_CONGESTION(Linux 2.6.13) 和socket.TCP_USER_TIMEOUT(Linux 2.6.37) 常量。补丁由 Omar Sandoval 编写。bpo-24142: 读取损坏的配置文件会使configparser处于无效状态。原始补丁由Florian Höch提供。
bpo-28843: 修复 asyncio C Task 以处理异常的 __traceback__。
C API¶
bpo-28808: PyUnicode_CompareWithASCIIString() 现在永远不会引发异常。
文档¶
工具/示例¶
bpo-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 的命令行接口。
测试¶
构建¶
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 中错误处理的缓冲区重新分配
构建¶
测试¶
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: 修复了拆分字典在尝试移除“待定键”(尚未插入拆分表中)时的 dict.pop()。补丁由 Xiang Zhang 提供。
bpo-26182: 当async和await关键字被用作变量/属性/类/函数名时,发出DeprecationWarning。
库¶
bpo-27998: 修复了 Windows 上 os.scandir() 对字节路径的支持。由 Eryk Sun 提供补丁。
bpo-28317: 反汇编器现在解码 FORMAT_VALUE 参数。
bpo-26293: 修复了不从文件开头开始写入 ZIP 文件的问题。ZIP 文件中的偏移量现在相对于存档的开始,以符合规范。
bpo-28380: unittest.mock 的 Mock autospec 函数现在正确支持 assert_called、assert_not_called 和 assert_called_once。
bpo-27181: 移除 statistics.geometric_mean 并推迟至 3.7 版本。
bpo-28229: lzma 模块现在支持 pathlib。
bpo-28321: 修复了在 plistlib 中使用二进制格式写入非 BMP 字符的问题。
bpo-28225: bz2 模块现在支持 pathlib。初始由 Ethan Furman 提供补丁。
bpo-28227: gzip 现在支持 pathlib。由 Ethan Furman 提供补丁。
bpo-27358: 优化了合并可变关键字参数的过程,并改进了当传递非映射作为可变关键字参数时的错误信息。
bpo-28257: 改进了当传递非可迭代对象作为可变位置参数时的错误信息。添加了操作码 BUILD_TUPLE_UNPACK_WITH_CALL。
bpo-28322: 修复了当从错误的 pickle 数据反序列化 itertools 对象时可能发生的崩溃。基于 John Leitch 的补丁。
bpo-28228: imghdr 现在支持 pathlib。
bpo-28226: compileall 现在支持 pathlib。
bpo-28314: 修复了 xml.etree.ElementTree.Element 的 getiterator() 方法的函数声明(C 标志)。
bpo-28148: 停止在 time 模块中使用 localtime() 和 gmtime()。引入了平台无关的 _PyTime_localtime API,该 API 类似于 POSIX 的 localtime_r,但在所有平台上都可用。由 Ed Schouten 提供补丁。
bpo-28253: 修复了极端月份(0001-01和9999-12)的日历功能。重新实现了itermonthdays()和itermonthdays2()方法,使其不再调用可能导致datetime.date下溢/溢出的itermonthdates()。
bpo-28275: 修复了LZMADecompressor和BZ2Decompressor类中decompress()方法可能存在的释放后使用问题。原始由John Leitch提供补丁。
bpo-27897: 修复了如果传递无效的字符串类似对象作为名称时,sqlite3.Connection.create_collation()可能崩溃的问题。由Xiang Zhang提供补丁。
bpo-18844: random.choices()现在将k作为仅关键字参数,以提高常见情况的可读性,并与其他语言中使用的签名保持一致。
bpo-18893: 修复了Lib/ctypes/macholib/dyld.py中无效的异常处理。由Madison May提供补丁。
bpo-27611: 修复了tkinter.tix模块中对默认根窗口的支持。在DisplayStyle构造函数中添加了master参数。
bpo-27348: 在traceback模块中,恢复了类似于"Exception: None"的异常消息的格式化。这修复了3.5a2中引入的回归问题。
bpo-25651: 允许将假值 (falsy value) 用于 subTest() 的 msg 形参。
bpo-27778: 修复了当getrandom()被信号中断且信号处理程序引发Python异常时,os.getrandom()中的内存泄漏问题。
bpo-28200: 修复了Windows上os模块中的内存泄漏问题(修复了path_converter()函数)。
bpo-25400: RobotFileParser现在正确返回crawl_delay和request_rate的默认值。初始由Peter Wirtz提供补丁。
bpo-27932: 防止win32_ver()中的内存泄漏。
修复socket._sendfile_use_sendfile中的UnboundLocalError。
bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。
bpo-22493: 现在,通过在正则表达式中间使用内联标志发出的警告消息包含(截断的)正则表达式模式。由Tim Graham提供补丁。
bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。
bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。
bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。
bpo-28114: 修复当env包含字节字符串时parse_envlist()崩溃的问题。由Eryk Sun提供补丁。
bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。
bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。
bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。
bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。
bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。
bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。
bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。
bpo-28368: 如果子监视器没有附加循环,则拒绝监视进程。由Vincent Michel提供补丁。
bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。
bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。
bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。
bpo-28372: 修复asyncio以支持非python协程的格式化。
bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。
bpo-27972: 禁止Tasks等待自身。
Windows¶
bpo-28402: 为 Windows 上的标准库添加签名目录文件。
bpo-28333: 为 ps1/ps2 和 input() 提示启用 Unicode。(由 Eryk Sun 提供补丁)
bpo-28251: 改进 Windows 上的帮助手册。
bpo-28110: launcher.msi 在 32 位和 64 位之间有不同的产品代码
bpo-28161: 以写权限打开 CON 失败
bpo-28162: 如果第一行以 Ctrl+Z 开头,WindowsConsoleIO readall() 失败
bpo-28163: WindowsConsoleIO fileno() 将错误的标志传递给 _open_osfhandle
bpo-28164: 对于各种路径,_PyIO_get_console_type 失败
bpo-28137: 将 Windows 路径文件重命名为 ._pth
bpo-28138: Windows ._pth 文件应允许导入站点
C API¶
bpo-28426: 已弃用未记录的函数 PyUnicode_AsEncodedObject()、PyUnicode_AsDecodedObject()、PyUnicode_AsDecodedUnicode() 和 PyUnicode_AsEncodedUnicode()。
构建¶
测试¶
bpo-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-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-27999: 将“使用后全局”设为 SyntaxError,同样适用于 nonlocal。由 Ivan Levkivskyi 提供补丁。
bpo-26058: 为内置字典类型添加一个新的私有版本,每次字典创建和每次字典更改时递增。PEP 509的实现。
bpo-27364: 现在,不是一个有效转义序列的反斜杠字符对会生成一个DeprecationWarning。补丁由Emanuel Barry提供。
bpo-27350:
dict的实现改为类似PyPy的方式。它更紧凑并保持插入顺序。(概念由Raymond Hettinger开发,由Inada Naoki提供补丁。)bpo-27911: 移除
exec_builtin_or_dynamic()中不必要的错误检查。bpo-27078: 添加了BUILD_STRING操作码。优化了f-字符串的评估。
bpo-17884: Python现在要求系统支持inttypes.h和stdint.h。
bpo-27961: 要求平台支持
long long。Python多年来已不再编译不支持long long的版本,因此这基本上是一个形式上的要求。bpo-27355: 移除了对Windows CE的支持。它从未完成,而且Windows CE不再是Python的相关平台。
实现 PEP 523。
bpo-27870: 零的大整数左移不再尝试分配大量内存。
bpo-25402: 在整数到十进制字符串的转换中,改进了对所需中间内存的估计,并移除了一个不必要的严格溢出检查。由Serhiy Storchaka提供补丁。
bpo-27214: 在long_invert中,更加小心地修改由long_add返回的对象,并移除了对小long的不必要检查。感谢Oren Milman的分析和补丁。
bpo-27506: 支持通过关键字传递bytes/bytearray.translate()的"delete"参数。
bpo-27812: 正确清除生成器帧对生成器的反向引用,以防止frame.clear()中的崩溃。
bpo-27811: 修复了一个在启用警告即错误时,未等待的协程被最终化时崩溃的问题。
bpo-27587: 修复了PVS-Studio发现的另一个问题:在_PyState_AddModule()中使用'def'后的空指针检查。初始由Christian Heimes提供补丁。
bpo-27792: 现在对
bool和其他int子类应用的模运算总是返回一个int。以前返回类型依赖于输入值。由 Xiang Zhang 提供补丁。bpo-26984: int() 现在总是返回一个精确的 int 实例。
bpo-25604: 修复了整数真除法中的一个次要错误;这个错误可能导致在具有不可靠 ldexp 实现的平台上出现 off-by-one-ulp 结果。
bpo-24254: 默认情况下,使类定义命名空间有序。
bpo-27662: 修复了
List_New中的一个溢出检查:原始代码检查的是Py_SIZE_MAX而不是正确的上限Py_SSIZE_T_MAX。由 Xiang Zhang 提供补丁。bpo-27782: 多阶段扩展模块导入现在正确地允许使用
m_methods字段来向Py_create_mod返回的非模块类型实例添加模块级函数。由 Xiang Zhang 提供补丁。bpo-27936: round() 函数对某些类型接受第二个 None 参数,但对其他类型不接受。通过接受所有数值类型的 None 来修复这种不一致性。
bpo-27487: 如果在导入父包之后但在执行子模块之前,在 sys.modules 中找到了 "python -m" 或 runpy.run_module() 的子模块参数,则发出警告。
bpo-27157: 使只有 type() 本身接受单参数形式。由 Eryk Sun 和 Emanuel Barry 提供补丁。
bpo-27558: 修复 "raise" 语句实现中的一个 SystemError。在一个全新的线程中,引发一个 RuntimeError,因为没有活动的异常可以重新引发。补丁由 Xiang Zhang 编写。
bpo-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: 从 ssl 模块的默认加密列表中移除 3DES 以应对 sweet32 攻击 (CVE-2016-2183)。
bpo-27766: 向ssl模块的默认加密列表中添加ChaCha20 Poly1305。(需要OpenSSL 1.1.0或LibreSSL)。
bpo-25387: 检查winsound.MessageBeep的返回值。
bpo-27866: 添加SSLContext.get_ciphers()方法以获取所有启用的加密列表。
bpo-27744: 向socket模块添加AF_ALG(Linux内核加密)。
bpo-26470: 将ssl和hashlib模块移植到OpenSSL 1.1.0。
bpo-11620: 修复winsound.PlaySound中对SND_MEMORY的支持。基于Tim Lesher的补丁。
bpo-11734: 向struct模块添加对IEEE 754半精度浮点数的支持。基于Eli Stevens的补丁。
bpo-27919: 弃用distutils打包中的
extra_path分发选项。bpo-23229: 添加新的
cmath常量:cmath.inf和cmath.nan以匹配math.inf和math.nan,以及cmath.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¶
C API¶
测试¶
构建¶
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-26823: traceback.StackSummary.format 现在将重复行的大段缩写为 "[前一行重复了 {count} 次]"(这一变化进一步影响了模块中的其他 traceback 显示操作)。由 Emanuel Barry 提供补丁。
bpo-27664: 向 concurrent.futures.thread.ThreadPoolExecutor() 添加了指定线程名前缀的能力。
bpo-27181: 向 statistics 模块添加 geometric_mean 和 harmonic_mean。
bpo-27573: code.interact 现在在退出时打印一条消息。
bpo-6422: 向 timeit.Timer 对象添加 autorange 方法。
bpo-27773: 更正 _ssl.wrap_socket() 中 server_hostname 的一些内存管理错误。
bpo-26750: unittest.mock.create_autospec() 现在可以正确用于 property() 和其他数据描述符的子类。移除从未公开使用、从未文档化的 unittest.mock.DescriptorTypes 元组。
bpo-26754: 现在弃用 compile() 及类似函数中未文档化的对一般 bytes-like 对象作为路径的支持。
bpo-26800: 现在弃用 os 函数中未文档化的对一般 bytes-like 对象作为路径的支持。
bpo-26981: 向 enum.Enum 添加 _order_ 兼容性垫片,用于 Python 2/3 代码库。
bpo-27661: 向 datetime.combine 添加 tzinfo 关键字参数。
在 curses 模块中,如果向 window.getstr() 或 window.instr() 传递负值,则引发错误。
bpo-27783: 修复 operator.methodcaller 中可能使用未初始化内存的问题。
bpo-27774: 修复 _sre 中可能对未拥有对象进行 Py_DECREF 的问题。
bpo-27760: 修复 binascii.b2a_qp 中可能的整数溢出。
bpo-27758: 修复 _csv 模块中对于大记录长度可能的整数溢出。
bpo-27568: 防止 HTTPoxy 攻击 (CVE-2016-1000110)。当设置了 REQUEST_METHOD 环境变量时忽略 HTTP_PROXY 变量,这表明脚本处于 CGI 模式。
bpo-7063: 从“array”模块的切片处理中移除无用代码。由Chuck提交补丁。
bpo-27656: 不再假设sched.h定义了任何SCHED_*常量。
bpo-27130: 在“zlib”模块中,修复了压缩和解压缩大缓冲区(通常为4 GiB)时的处理问题。之前,输入被限制在4 GiB,压缩和解压缩操作未能正确处理4 GiB的结果。
在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。
测试¶
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-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-27027: 添加了test.support.is_android,当这是一个Android构建时为True。
Python 3.6.0 alpha 2¶
发布日期: 2016-06-13
安全性¶
bpo-26556: 将expat更新到2.1.1,修复了 CVE-2015-1283。
修复smtplib中的TLS剥离漏洞,CVE-2016-0772。由Team Oststrom报告。
bpo-26839: 在Linux上,
os.urandom()现在调用getrandom()与GRND_NONBLOCK,如果urandom熵池尚未初始化,则回退到读取/dev/urandom。补丁由Colm Buckley编写。
核心与内置函数¶
bpo-27095: 简化了MAKE_FUNCTION并移除了MAKE_CLOSURE操作码。由Demur Rumed提供补丁。
bpo-27190: 如果sqlite3版本低于3.3.1,则引发NotSupportedError。由Dave Sawyer提供补丁。
bpo-27286: 修复了编译BUILD_MAP_UNPACK_WITH_CALL操作码的问题。使用广义解包(PEP 448)和冲突的关键字名称调用函数可能导致未定义行为。
bpo-27140: 添加了BUILD_CONST_KEY_MAP操作码。
bpo-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 的一部分)。
新版本的 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-26373: subprocess.Popen.communicate 现在在更多/所有情况下,当子进程在调用 .communicate() 之前死亡时,正确地忽略 BrokenPipeError。
signal、socket 和 ssl 模块的 IntEnum 常量名称查找现在为具有多个名称的值返回一致的名称。例如:signal.Signals(6) 现在自称为 signal.SIGALRM,而不是根据解释器的哈希随机化种子在 signal.SIGALRM 和 signal.SIGIOT 之间切换。
bpo-27167: 当子进程因信号死亡时,澄清 subprocess.CalledProcessError 错误消息文本。
bpo-25931: 在像 Windows 这样不支持 os.fork() 的平台上不定义 socketserver.Forking* 名称。
bpo-21776: distutils.upload 现在正确处理 HTTPError。初始由 Claudiu Popa 提供补丁。
bpo-26526: 用简单的 DFA 验证器替换解析器模块中的自定义解析树验证。
bpo-27114: 修复 SSLContext._load_windows_store_certs 因 PermissionError 失败的问题。
bpo-18383: 避免在使用 filterwarnings 和 simplefilter 时创建重复的过滤器。基于 Alex Shkop 的补丁。
bpo-23026: winreg.QueryValueEx() 现在为 REG_QWORD 类型返回一个整数。
bpo-26741: 如果子进程仍在运行,subprocess.Popen 析构函数现在会发出 ResourceWarning 警告。
bpo-27056: 优化 pickle.load() 和 pickle.loads(),反序列化大量小对象时速度提高高达 10%。
bpo-21271: reset_mock 调用中的新关键字参数。
IDLE¶
bpo-5124: 在 X11 上,现在粘贴选中的文本会替换选中内容。这匹配了 Windows、Mac、大多数现代 Linux 应用和 ttk 小部件上的粘贴工作方式。原始由 Serhiy Storchaka 提供补丁。
bpo-24750: 将 IDLE 中的所有滚动条切换为 ttk 版本。必要时,添加最小测试以覆盖更改。
bpo-24759: IDLE 需要 tk 8.5 及 ttk 小部件的可用性。删除现在不再需要的 tk 版本测试和旧版本代码。添加 IDLE 语法着色器的测试。
bpo-27239: idlelib.macosx.isXyzTk 函数按需初始化。
bpo-27262: 将 Aqua 解绑代码(启用上下文菜单)移至 macosx。
bpo-24759: 在 idlelib.idle_test.__init__ 中明确表示该目录是 test.test_idle 的私有实现和维护者的工具。
bpo-27196: 在运行 IDLE 测试时停止 'ThemeChanged' 警告。这些警告在其他警告被 #20567 抑制后仍然存在。将 Serhiy Storchaka 的 update_idletasks 解决方案应用于四个测试文件。在 idle_test/README.txt 中记录这一额外建议。
bpo-20567: 修改 idle_test/README.txt,提供避免测试中 tk 警告信息的建议。将建议应用于几个 IDLE 测试。
bpo-24225: 使用新文件名和事件处理程序更新 idlelib/README.txt。
bpo-27156: 移除 IDLE 未使用的过时代码。
bpo-27117: 使颜色器 htest 和 turtledemo 支持深色主题。将配置文本小部件颜色的代码移至新函数。
bpo-24225: 重命名许多
idlelib/*.py和idle_test/test_*.py文件。编辑文件,当旧名称引用模块而非其包含的类时,用新名称替换旧名称。更多信息见问题和 IDLE 在 3.6 中的新功能部分。bpo-26673: 当 tk 报告字体大小为 0 时,更改为大小 10。Linux 上的此类字体阻止了配置对话框的打开。
bpo-21939: 添加 IDLE 的渗滤器测试。原始由 Saimadhav Heblikar 提供补丁。
bpo-21676: 添加 IDLE 的替换对话框测试。原始由 Saimadhav Heblikar 提供补丁。
bpo-18410: 添加 IDLE 的搜索对话框测试。原始由 Westley Martínez 提供补丁。
bpo-21703: 添加撤销委托器的测试。补丁主要由 Saimadhav Heblikar 提供。
bpo-27044: 添加ConfigDialog.remove_var_callbacks以防止内存泄漏。
bpo-23977: 在test_delegator中添加更多断言。
文档¶
测试¶
Windows¶
bpo-27064: py.exe启动器现在默认使用Python 3。Windows启动器
py.exe在交互使用时不再默认优先选择已安装的Python 2版本而不是Python 3。bpo-17500: 移除未使用和过时的图标。(另见:https://github.com/python/pythondotorg/issues/945)
构建¶
C API¶
工具/示例¶
bpo-26282: Argument Clinic现在支持在同一函数中的仅位置和关键字参数。
Python 3.6.0 alpha 1¶
发布日期: 2016-05-16
安全性¶
核心与内置函数¶
bpo-20041: 修复当frame.f_trace被设置为None时的TypeError。由Xavier de Gaye提供补丁。
bpo-26168: 修复了在使用 "N" 格式化单元时 Py_BuildValue() 失败可能导致的内存泄漏问题。
bpo-26991: 修复了创建带有注解的函数时可能出现的内存泄漏问题。
bpo-27039: 修复了 bytearray.remove() 对于大于127的值的处理。基于 Joe Jevnik 的补丁。
bpo-23640: int.from_bytes() 不再绕过子类的构造函数。
bpo-27005: 优化了 float.fromhex() 类方法对于精确浮点数的处理。现在速度提高了2倍。
bpo-18531: 单一的可变关键字参数如果是字典子类,将不再原封不动地传递给C定义的函数。现在会被转换为确切的字典。
bpo-26811: gc.get_objects() 不再包含带有 NULL 指针的损坏元组。
bpo-20120: 使用 RawConfigParser 来解析 .pypirc 文件,移除了无意中随着迁移到 Python 3 而添加的插值支持。现在的行为不会再在 .pypirc 文件中进行任何插值,与 Python 2.7 和 Setuptools 19.0 的行为一致。
bpo-26249:
PyMem_Malloc()域(PYMEM_DOMAIN_MEM)的内存函数现在使用 pymalloc allocator 而非系统的malloc()。应用程序在不持有 GIL 的情况下调用PyMem_Malloc()现在可能会崩溃:使用PYTHONMALLOC=debug环境变量来验证你的应用程序中内存分配器的使用情况。bpo-26802: 优化了仅使用解包的函数调用,如
func(*tuple)(没有其他位置参数,没有关键字参数) :避免复制元组。补丁由 Joe Jevnik 编写。bpo-26659: 使内置的 slice 类型支持循环回收。
bpo-26718: super.__init__ 如果被多次调用,将不再泄露内存。注意:不推荐直接调用 super.__init__!
bpo-27138: 修正了 FileFinder.find_spec() 的文档注释。
bpo-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-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-26881: modulefinder模块现在支持扩展的操作码参数。
bpo-23815: 修复了直接创建_tkinter和curses.panel模块中类型实例相关的崩溃问题。
bpo-17765: weakref.ref()不再默默忽略关键字参数。由Georg Brandl提供补丁。
bpo-26873: xmlrpc现在会在遇到不支持的类型标签时抛出ResponseError,而不是默默返回错误结果。
bpo-26915: collections ABCs中的__contains__方法现在在检查相等性之前先检查标识。这更好地匹配了具体类的行为,允许合理处理NaNs,并使容器不变量的推理更加容易。
bpo-26711: 修复了plistlib.Data与其他类型的比较问题。
bpo-24114: 修复了
ctypes.util中一个未初始化的变量问题。此bug仅在SunOS上,当ctypes实现搜索crle程序时出现。由Xiang Zhang提供补丁。在SunOS上由Kees Bos测试。bpo-26864: 在urllib.request中,将代理绕过主机检查对no_proxy的匹配改为不区分大小写,并且不匹配那些恰好以后缀形式包含被绕过主机名的无关主机名。由Xiang Zhang提供补丁。
bpo-24902: 在http.server启动时打印服务器URL。初始由Felix Kaiser提供补丁。
bpo-25788: fileinput.hook_encoded() 现在支持传递一个 "errors" 参数给 open。原始补丁由 Joseph Hackman 提供。
bpo-26634: recursive_repr() 现在设置包装器的 __qualname__。由 Xiang Zhang 提供补丁。
bpo-26804: urllib.request 现在会优先选择小写的代理环境变量,而不是大写或混合大小写的。补丁由 Hans-Peter Jansen 贡献。
bpo-26837: assertSequenceEqual() 现在能正确输出非字符串化的不同项(如 -b 模式下的字节)。这影响了 assertListEqual() 和 assertTupleEqual()。
bpo-26041: 从 platform.dist() 和 platform.linux_distribution() 的弃用消息中移除了 "将在 Python 3.7 中移除"。由 Kumaripaba Miyurusara Athukorala 提供补丁。
bpo-26822: itemgetter、attrgetter 和 methodcaller 对象不再静默忽略关键字参数。
bpo-26733: 反汇编一个类现在会反汇编类和静态方法。由 Xiang Zhang 提供补丁。
bpo-26801: 修复
shutil.get_terminal_size()中的错误处理,捕获AttributeError而不是NameError。补丁由 Emanuel Barry 编写。bpo-24838: tarfile 的 ustar 和 gnu 格式现在能正确计算多字节字符编码(如 utf-8)的名称和链接字段限制。
bpo-26717: 停止用 UTF-8 编码拉丁-1 化的 WSGI 路径。由 Anthony Sottile 提供补丁。
bpo-26782: 在 Windows 上向 subprocess.__all__ 添加 STARTUPINFO。
bpo-26404: 向 socketserver 添加上下文管理器。由 Aviv Palivoda 提供补丁。
bpo-26735: 修复 Solaris 11.3 及更新版本上
os.urandom()当读取超过 1,024 字节时的问题:多次调用getrandom(),每次调用限制为 1024 字节。bpo-26585: 移除 http.server._quote_html() 并使用 html.escape(quote=False)。由 Xiang Zhang 提供补丁。
bpo-26685: 如果关闭套接字失败,则引发 OSError。
bpo-16329: 向 mimetypes.types_map 添加 .webm。由 Giampaolo Rodola' 提供补丁。
bpo-13952: 向 mimetypes.types_map 添加 .csv。由 Geoff Wilson 提供补丁。
bpo-26587: 站点模块现在允许 .pth 文件指定要添加到 sys.path 的文件(例如 zip 文件)。
bpo-25609: 引入了 contextlib.AbstractContextManager 和 typing.ContextManager。
bpo-26709: 修复了加载二进制 PLists 时的 Y2038 问题。
bpo-23735: 通过安装我们自己的 SIGWINCH 处理程序,处理 Readline 6.3+ 的终端调整大小。由 Eric Price 提供补丁。
bpo-25951: 将 SSLSocket.sendall() 更改为返回 None,如明文套接字对象文档中明确所述。补丁由 Aviv Palivoda 提供。
bpo-26586: 在 http.server 中,如果头字段太多无法解析,则响应 "413 请求头字段太大",而不是终止连接并引发未处理的异常。由 Xiang Zhang 提供补丁。
bpo-26676: 将缺失的 XMLPullParser 添加到 ElementTree.__all__。
bpo-22854: 将 BufferedReader.writable() 和 BufferedWriter.readable() 更改为总是返回 False。
bpo-26492: array.array 的耗尽迭代器现在与其他可变序列的迭代器行为一致:即使迭代的数组被扩展,它也会保持耗尽状态。
bpo-26641: doctest.DocFileTest 和 doctest.testfile() 的 package 形参现在支持包(拆分为多个目录的模块)。
bpo-25195: 修复了 mock.MagicMock 中的一个回归问题。_Call 是 tuple 的子类(changeset 3603bae63c13 仅适用于类),所以我们需要自己实现 __ne__。由 Andrew Plummer 提供补丁。
bpo-26644: 当向 SSLSocket.recv() 或 read() 传递负长度时,引发 ValueError 而不是 SystemError。
bpo-23804: 修复 SSL recv(0) 和 read(0) 方法返回零字节而不是最多 1024 字节的问题。
bpo-26616: 修复了 datetime.astimezone() 方法中的一个错误。
bpo-26637: 现在,如果在 Python 关闭过程中尝试
__import__()但sys.path已经被清除(设置为None),importlib模块会发出ImportError而不是TypeError。bpo-21925:
warnings.formatwarning()现在在调用linecache.getline()和tracemalloc.get_object_traceback()时会捕获异常,以便能够记录在Python关闭过程中晚期发出的ResourceWarning。bpo-23848: 在Windows上,faulthandler.enable() 现在也会安装一个异常处理器,以在任何Windows异常(不仅仅是UNIX信号(SIGSEGV、SIGFPE、SIGABRT))上转储所有Python线程的跟踪信息。
bpo-26530: 添加了 C 函数
_PyTraceMalloc_Track()和_PyTraceMalloc_Untrack()以使用tracemalloc模块追踪内存块。添加了_PyTraceMalloc_GetTraceback()以获取对象的回溯信息。bpo-26588: _tracemalloc 现在支持跟踪多个地址空间(域)的内存分配。
bpo-24266: 在编译时使用Readline 7的情况下,Readline历史搜索期间的Ctrl+C现在会取消搜索模式。
bpo-26590: 为_socket.socket类型实现了一个安全的终结器。它现在会释放GIL来关闭套接字。
bpo-18787: 如果用户没有权限,spwd.getspnam() 现在会引发一个PermissionError。
bpo-26560: 避免BaseHandler.start_response中潜在的ValueError。初始由Peter Inglesby提供补丁。
bpo-26567: 添加一个新函数
PyErr_ResourceWarning()来传递被销毁的对象。向warnings.WarningMessage添加一个 source 属性。添加warnings._showwarnmsg(),它使用tracemalloc来获取源对象分配时的跟踪信息。bpo-26569: 修复
pyclbr.readmodule()和pyclbr.readmodule_ex()以支持导入包。bpo-26499: 在HTTPResponse.readline()和read1()中考虑剩余的Content-Length。基于Silent Ghost的补丁。同时记录HTTPResponse现在支持这些方法。
bpo-25320: 处理unittest发现扫描的目录中的套接字。补丁来自Victor van den Elzen。
bpo-16181: 现在如果年份高于datetime.MAXYEAR,cookiejar.http2time()会返回None。
bpo-26513: 修复了平台模块对Windows Server的检测。
bpo-23718: 修复了在1月1日前的第0周解析时间的问题。原始由Tamás Bence Gedai提供补丁。
bpo-26323: 向unittest.mock添加了Mock.assert_called()和Mock.assert_called_once()方法。补丁由Amit Saha编写。
bpo-20589: 在Windows上调用Path.owner()和Path.group()现在会引发NotImplementedError而不是ImportError。
bpo-26177: 修复了Canvas和Scrollbar小部件的keys()方法。
bpo-15068: 消除了fileinput中过度的缓冲。bufsize参数现在已被弃用并被忽略。
bpo-19475: 向datetime的isoformat()方法添加了一个可选参数timespec,用于选择时间组件的精度。
bpo-2202: 修复了AbstractDigestAuthHandler.get_algorithm_impls中的UnboundLocalError。初始由Mathieu Dupuy提供补丁。
bpo-26167: 最小化了copy.copy()和copy.deepcopy()的开销。优化了bytearrays、NotImplemented、slices、短列表、元组、字典和集合的复制和深复制。
bpo-25718: 修复了当total为None时,对accumulate()迭代器的pickling和复制。
bpo-26475: 修复了带有(?x)标志的正则表达式的调试输出。
bpo-26482: 允许pickling递归的dequeues。
bpo-26335: 使mmap.write()像其他write方法一样返回写入的字节数。补丁由Jakub Stasiak提供。
bpo-26457: 修复了当结果前缀长度等于最大前缀长度时,IP网络类中的subnets()方法。基于Xiang Zhang的补丁。
bpo-26385: 如果NamedTemporaryFile()中的内部open()调用失败,则删除文件。由Silent Ghost提供补丁。
bpo-26402: 修复了XML-RPC客户端在服务器关闭持久连接时重试的问题。这是与3.5.0a4中的新http.client.RemoteDisconnected异常相关的回归问题。
bpo-25913: 在adobe=True时,base64.a85decode()中前导的
<~现在是可选的。由Swati Jaiswal提供补丁。bpo-26186: 移除importlib.util.LazyLoader中的一个无效类型检查。
bpo-26367: 当指定了
level但没有指定相应的包时,importlib.__import__()会像builtins.__import__()一样引发ImportError。bpo-26309: 在"socketserver"模块中,当verify_request()返回false时,关闭请求(关闭连接的套接字)。由Aviv Palivoda提供补丁。
bpo-23430: 更改socketserver模块,只捕获源自Exception(而不是BaseException)的请求处理程序引发的异常。因此,SystemExit和KeyboardInterrupt不再触发handle_error()方法,现在将停止单线程服务器。
bpo-25995: os.walk()不再使用与树深度成比例的FDs。
bpo-25994: 为os.scandir()迭代器添加了close()方法和上下文管理器协议的支持。
bpo-23992: multiprocessing:使MapResult在异常时不快速失败。
bpo-26243: 支持zlib.compress()的关键字参数。由Aviv Palivoda提供补丁。
bpo-26117: os.scandir()迭代器现在不仅在迭代完成时关闭文件描述符,而且在因错误失败时也关闭。
bpo-25949: OrderedDict实例的__dict__现在只在需要时创建。
bpo-25911: 恢复了在Windows上os.walk()中对字节路径的支持。
bpo-26045: 在使用http.client发布非Latin-1字符串时,向错误消息添加UTF-8建议。
bpo-26039: 添加了zipfile.ZipInfo.from_file()和zipinfo.ZipInfo.is_dir()。由Thomas Kluyver提供补丁。
bpo-12923: 即使有异常也重置FancyURLopener的重定向计数器。基于Brian Brazil和Daniel Rocco的补丁。
bpo-25945: 修复了解除 pickle functools.partial 对象时状态错误导致的崩溃问题。修复了 functools.partial 构造函数失败时的内存泄漏。functools.partial 的 "args" 和 "keywords" 属性现在总是分别具有 tuple 和 dict 类型。
bpo-26202: copy.deepcopy() 现在能正确复制具有非原子属性的 range() 对象。
bpo-23076: Path.glob() 现在在调用无效模式时会引发 ValueError。补丁由 Thomas Nyberg 提供。
bpo-19883: 修复了 zipimport 中可能的整数溢出问题。
bpo-26227: 在 Windows 上,socket 模块的 getnameinfo()、gethostbyaddr() 和 gethostbyname_ex() 函数现在从 ANSI 代码页而非 UTF-8 解码主机名。
bpo-26099: site 模块现在会在 sitecustomize 模块可以导入但执行该模块时引发 ImportError 时,向 stderr 写入错误信息。对 usercustomize 做了相同的更改。
bpo-26147: xmlrpc 现在可以处理无法用所使用的非 UTF-8 编码编码的字符串。
bpo-25935: 垃圾回收器现在可以打破 OrderedDict 的引用循环。
bpo-16620: 修复了 msilib.Directory.glob() 中的 AttributeError。
bpo-26013: 增加了对旧 Python 3 版本(3.4.3 及以下)创建的损坏协议 2 pickle 的兼容性。
bpo-26129: 废弃了在 grp.getgrgid() 中接受非整数。
bpo-25850: 默认使用交叉编译为 64 位 Windows。
bpo-25822: 向 urllib.parse 结果的字段添加了文档字符串。由 Swati Jaiswal 提供补丁。
bpo-22642: 将 trace 模块的选项解析机制转换为 argparse。由 SilentGhost 提供补丁。
bpo-24705: 修复了 sysconfig._parse_makefile 不扩展出现在 $() 变量之前的 ${} 变量的问题。
bpo-26069: 移除了 trace 模块中已弃用的 API。
bpo-22138: 修复了 mock.patch 在修补描述符时的行为。修补后恢复原始值。由 Sean McCully 提供补丁。
bpo-25672: 在 ssl 模块中,如果安全的话,启用 SSL_MODE_RELEASE_BUFFERS 模式选项。
bpo-26012: 在 pathlib.Path.[r]glob() 中不对符号链接进行
**模式的遍历。bpo-24120: 在使用 pathlib.Path.[r]glob() 遍历树时忽略 PermissionError。由 Ulrich Petri 提供补丁。
bpo-21815: 在 imap 响应的数据部分接受 ] 字符,以处理由 gmail 等服务器接受和产生的带有方括号的标志。
bpo-25447: 如果 sys.stdin 没有缓冲区属性,fileinput 现在会直接使用它(恢复了向后兼容性)。
bpo-25971: 通过 2 倍的速度优化了从浮点数创建 Fractions,通过 3 倍的速度优化了从 Decimals 创建 Fractions。
bpo-25802: 将 importlib.abc.Loader.load_module() 的剩余实现文档化为已弃用。
bpo-25928: 添加了 Decimal.as_integer_ratio()。
bpo-25447: 复制 lru_cache() 包装器对象现在总是有效,与被包装对象的类型无关(通过返回未更改的原始对象)。
bpo-25768: 使 compileall 中的函数返回布尔值而不是整数,并为返回值添加了适当的文档和测试。
bpo-24103: 修复了 ElementTree.XMLPullParser 中可能的使用后释放问题。
bpo-25860: os.fwalk() 在发生错误时不再跳过剩余的目录。原始由 Samson Lee 提供补丁。
bpo-25914: 修复并简化了 OrderedDict.__sizeof__。
bpo-25869: 优化了 ElementTree 的深拷贝;现在速度快了 20 倍。
bpo-25873: 优化了 ElementTree 的迭代。迭代元素 Element.iter() 现在快了 40%,迭代文本 Element.itertext() 现在快了最多 2.5 倍。
bpo-25902: 修复了 ElementTree 迭代中的各种引用计数问题。
bpo-22227: TarFile 迭代器使用生成器重新实现。这个实现比使用类更简单。
bpo-25638: 优化了 ElementTree.iterparse();现在快了 2 倍。优化了 ElementTree 解析;现在快了 10%。
bpo-25761: 改进了对损坏的 pickle 数据中错误的检测。
bpo-25717: 恢复在打开文件时容忍大多数fstat()错误的先前行为。这是3.5a1版本中的一个回归问题,阻止了匿名临时文件在特殊情况下的工作。
bpo-24903: 修复了当指定'-d'时compileall接受的参数数量的回归问题。对参数数量的检查已被完全删除,因为它从未正确工作过。
bpo-25764: 在subprocess模块中,当使用preexec_fn时,保留由fork()失败引起的任何异常。
bpo-25771: 当'package'未指定但必要时,调整importlib.util.resolve_name()的异常消息。
bpo-6478: 在更改时区后,_strptime的正则表达式缓存现在会被time.tzset()重置。
bpo-14285: 当使用"python -m package"选项执行包且包初始化失败时,现在会报告正确的回溯。"runpy"模块现在让包初始化的异常传递回调用者,而不是引发ImportError。
bpo-19771: 同样在runpy和"-m"选项中,如果包甚至无法初始化(例如由于坏的
*.pyc文件),则省略不相关的消息"...是一个包,不能直接执行"。bpo-25177: 修复了非常小和非常大的数字的平均值问题。作为副作用,statistics.mean和statistics.variance应该会显著更快。
bpo-25718: 修复了复制状态为布尔值false的对象的问题。
bpo-10131: 修复了minidom文档的深拷贝问题。基于Marian Ganisin的补丁。
bpo-7990: ElementTree.Element上的dir()现在列出属性:"tag", "text", "tail"和"attrib"。原始由Santoso Wijaya提供补丁。
bpo-25725: 修复了在解包含元组指令的无效数据时pickle.loads()中的引用泄漏问题。
bpo-25663: 在Readline completer中,避免列出重复的全局名称,并在搜索内置名称之前搜索全局命名空间。
bpo-25688: 修复了ElementTree.iterparse()在引发错误时的文件泄露问题。
bpo-23914: 修复了解pickle数据损坏时unpickler引发的SystemError。
bpo-25691: 修复了删除ElementTree.Element属性时的崩溃问题。
bpo-25624: ZipFile现在总是为目录条目写入ZIP_STORED头。由王定远提供补丁。
bpo-25626: 修改了三个zlib函数以接受适合Py_ssize_t的大小,但在内部将这些大小限制为UINT_MAX。这解决了3.5版本中GzipFile.read()无法读取大于2或4 GiB块的回归问题。此更改影响zlib.Decompress.decompress()的max_length参数、zlib.decompress()的bufsize参数和zlib.Decompress.flush()的length参数。
bpo-25583: 当操作系统优先考虑如EACCES这样的错误而不是EEXIST时,避免os.makedirs(exist_ok=True)引发错误。
bpo-25593: 修改了asyncio中EventLoop.stop()的语义。
bpo-6973: 当我们知道一个subprocess.Popen进程已经死亡时,不允许send_signal()、terminate()或kill()方法执行任何操作,因为它们可能会信号到不同的进程。
bpo-23883: 添加了缺失的API到__all__以匹配以下模块的文档API:calendar、csv、enum、fileinput、ftplib、logging、optparse、tarfile、threading和wave。还添加了一个test.support.check__all__()辅助函数。由Jacek Kołodziej、Mauro S. M. Rodrigues和Joel Taddei提供补丁。
bpo-25590: 在Readline completer中,每个属性只调用一次getattr()。同时完成如属性和槽这样的属性名称,这些属性由dir()列出但尚未在实例上创建。
bpo-25498: 修复了在垃圾回收由包装memoryview创建的ctypes对象时的崩溃问题。这是3.5a1中的一个回归。基于Eryksun的补丁。
bpo-25584: 将"escape"添加到glob模块的__all__列表中。
bpo-25584: 修复了以
**开头的递归glob()模式。bpo-25446: 修复 smtplib 的 AUTH LOGIN 支持中的回归问题。
bpo-18010: 修复 pydoc web 服务器的模块搜索功能,以处理导入包时的异常。
bpo-25554: 消除了正则表达式解析中的循环引用。
bpo-18973: 日历模块的命令行界面现在使用 argparse 而不是 optparse。
bpo-25510: 如果 FileInput 以二进制模式打开,fileinput.FileInput.readline() 现在在末尾返回 b'' 而不是 ''。由 Ryosuke Ito 提供补丁。
bpo-25503: 修复了 inspect.getdoc() 对于属性的继承文档字符串的处理。原始由 John Mark Vandenberg 提供补丁。
bpo-25515: 在 uuid.uuid4 中始终使用 os.urandom 作为随机性来源。
bpo-21827: 修复了 textwrap.dedent() 当最大公共空白是最小前导空白的子字符串时的情况。基于 Robert Li 的补丁。
bpo-25447: lru_cache() 包装器对象现在可以被复制和 pickle(通过返回未更改的原始对象)。
bpo-25390: typing: 不因 Union[str, Pattern] 而崩溃。
bpo-25441: asyncio: 当套接字关闭时从 drain() 引发错误。
bpo-25410: 清理并修复了 OrderedDict 的 C 实现中的小错误。
bpo-25411: 通过更好地使用 email 包,改进了 SMTPHandler 中的 Unicode 支持。感谢用户 simon04 的补丁。
将 imp 模块从 PendingDeprecationWarning 移动到 DeprecationWarning。
bpo-25407: 移除了关于 formatter 模块在 Python 3.6 中被移除的提及。
bpo-25406: 修复了 OrderedDict.move_to_end() 的 C 实现中的一个错误,该错误导致在将几个项目移动到有序字典的开头后在迭代中出现分段错误或挂起。
bpo-25382: pickletools.dis() 现在为 MEMOIZE 操作码输出隐式备忘录索引。
bpo-25357: 向 binascii.b2a_base64() 添加了一个可选的新行参数。base64.b64encode() 使用它来避免内存拷贝。
bpo-24164: 需要使用关键字参数调用
__new__的对象,现在可以使用低于协议版本4的pickle协议进行序列化。bpo-25364: zipfile 现在可以在禁用线程的构建中工作。
bpo-25328: 如果 decode_data 和 enable_SMTPUTF8 都被设置为 true,smtpd 的 SMTPChannel 现在会正确地引发 ValueError。
bpo-16099: RobotFileParser 现在支持 Crawl-delay 和 Request-rate 扩展。由 Nikolay Bogoychev 提供补丁。
bpo-25316: 当未安装 MSVC 时,distutils 会引发 OSError 而不是 DistutilsPlatformError。
bpo-25380: 修复了 pickletools.opcodes 中 STACK_GLOBAL 操作码的协议。
bpo-23972: 更新了 asyncio 的数据报创建方法,允许在绑定套接字之前设置 reuseport 和 reuseaddr 套接字选项。与现有的 asyncio create_server 方法类似,如果操作系统是 'posix'(除非平台是 Cygwin),数据报套接字的 reuseaddr 选项默认为 True。由 Chris Laws 提供补丁。
bpo-25304: 添加了 asyncio.run_coroutine_threadsafe()。这让你可以从另一个线程向循环提交一个协程,返回一个 concurrent.futures.Future。由 Vincent Michel 提供。
bpo-25232: 修复 CGIRequestHandler,使其在第一个问号 (?) 处而不是最后一个问号处将查询与 URL 分开。补丁来自 Xiang Zhang。
bpo-24657: 防止 CGIRequestHandler 像处理路径一样在 URL 的查询部分折叠斜杠。补丁来自 Xiang Zhang。
bpo-25287: 如果不支持 crypt.METHOD_CRYPT,则不要将其添加到 crypt.methods 中。检查是否支持,例如在 OpenBSD 上可能不支持。
bpo-23600: tzinfo.fromutc() 的默认实现在某些情况下返回了错误的结果。
bpo-25203: 失败的 readline.set_completer_delims() 不再使模块处于不一致状态。
bpo-25011: rlcompleter 现在会省略私有和特殊属性名称,除非前缀以下划线开头。
bpo-25209: rlcompleter 现在可以在完成的关键字后添加空格或冒号。
bpo-22241: timezone.utc 名称现在是简单的 'UTC',而不是 'UTC-00:00'。
bpo-23517: datetime.datetime 的 fromtimestamp() 和 utcfromtimestamp() 方法现在将微秒四舍五入到最近的偶数整数(ROUND_HALF_EVEN),如同 round(float),而不是向负无穷方向舍入(ROUND_FLOOR)。
bpo-23552: Timeit 现在在最佳和最差时间之间存在显著(4倍)差异时发出警告。补丁来自 Serhiy Storchaka。
bpo-24633: site-packages/README -> README.txt。
bpo-24879: help() 和 pydoc 现在可以按照命名元组字段定义的顺序而非字母顺序列出它们。排序由 _fields 属性(如果存在)决定。
bpo-24874: 提高 itertools.cycle() 的速度并使其 pickle 更加紧凑。
修复了当第一个参数不是列表时 itertools.cycle.__setstate__() 的崩溃问题。
bpo-20059: urllib.parse 在所有无效端口上引发 ValueError。补丁来自 Martin Panter。
bpo-24360: 为无效标识符改进 argparse.Namespace() 的 __repr__。补丁来自 Matthias Bussonnier。
bpo-23426: distutils 中的 run_setup 被破坏。补丁来自 Alexander Belopolsky。
bpo-13938: 2to3 将 StringTypes 转换为元组。补丁来自 Mark Hammond。
bpo-2091: open() 接受包含 '+' 的 'U' 模式字符串,但 'U' 只能与 'r' 一起使用。补丁来自 Jeff Balogh 和 John O'Connor。
bpo-8585: 改进了 zipimporter2 的测试。补丁来自 Mark Lawrence。
bpo-18622: unittest.mock.mock_open().reset_mock 会无限递归。补丁来自 Nicola Palumbo 和 Laurent De Buyst。
bpo-24426: 正则表达式中的快速搜索优化现在适用于以捕获组开始的模式。快速搜索优化现在不能在编译时禁用。
bpo-23661: unittest.mock 的 side_effects 现在可以再次是异常。这是对 Python 3.4 的一个回归。补丁来自 Ignacio Rossi
bpo-13248: 移除已弃用的 inspect.getmoduleinfo 函数。
bpo-25578: 修复 SSLSocket.getpeercer() 中的另一个内存泄漏问题。
bpo-25530: 默认情况下,在创建 ssl.SSLContext 时禁用易受攻击的 SSLv3 协议。
bpo-25569: 修复 SSLSocket.getpeercert() 中的内存泄漏问题。
bpo-25471: 从 accept() 返回的套接字不应显示为非阻塞。
bpo-25319: 当 threading.Event 被重新初始化时,底层条件应使用常规锁而不是递归锁。
如果主机已解析,则跳过 getaddrinfo。由 A. Jesse Jiryu Davis 提供补丁。
bpo-26050: 添加 asyncio.StreamReader.readuntil() 方法。由 Марк Коренберг 提供补丁。
bpo-25924: 在 OS X 10.5 或更高版本上避免不必要的 getaddrinfo(3) 调用序列化。原始补丁由 A. Jesse Jiryu Davis 提供。
bpo-26406: 在当前版本的 OpenBSD 和 NetBSD 上避免不必要的 getaddrinfo(3) 调用序列化。由 A. Jesse Jiryu Davis 提供补丁。
bpo-26848: 修复 asyncio/subprocess.communicate() 以处理空输入。由 Jack O'Connor 提供补丁。
bpo-27040: 添加 loop.get_exception_handler 方法
bpo-27041: asyncio: 添加 loop.create_future 方法
IDLE¶
bpo-20640: 为 idlelib.configHelpSourceEdit 添加测试。由 Saimadhav Heblikar 提供补丁。
在 IDLE 文档的 'IDLE-控制台差异' 部分,澄清使用 IDLE 运行如何影响 sys.modules 和标准流。
bpo-25507: 修复 IOBinding 中阻止打印的错误更改。增强 IOBinding htest 以包括所有主要 IOBinding 功能。
bpo-25905: 恢复 README.txt 中 ' 到 ’ 右单引号的不必要转换,并用 'ascii' 打开此文件和 NEWS.txt。将 CREDITS.txt 重新编码为 utf-8 并用 'utf-8' 打开。
bpo-15348: 在关闭调试器窗口(在 IDLE 进程中运行)之前停止调试器引擎(通常在用户进程中)。这防止了被捕获并忽略的 RuntimeErrors。
bpo-24455: 防止IDLE在以下情况下挂起:a) 当调试器处于活动状态时关闭shell(15347);b) 使用[X]按钮关闭调试器(15348);以及c) 当调试器已经处于活动状态时再次激活(24455)。Mark Roseman的补丁通过两个更改来实现这一点。1. 使用为此目的设计的tcl vwait机制(而不是root.mainloop & .quit)暂停和恢复gui.interaction方法。2. 在gui.run中,允许任何现有的交互首先终止。
在IDLE的'终止程序?'消息中,将'程序'改为'您的程序',以更清楚地表明所指的是当前运行的用户程序,而不是IDLE本身。
bpo-24750: 改善IDLE编辑器窗口状态栏的外观。Patch by Mark Roseman。
bpo-25313: 更改新内置文本颜色主题的处理,以更好地解决由IDLE Dark的添加引入的兼容性问题。在idlelib中一致地使用修订后的idleConf.CurrentTheme。
bpo-24782: 扩展配置现在是IDLE首选项对话框中的一个标签,而不是一个单独的对话框。原来的标签现在是一个排序列表。Patch by Mark Roseman。
bpo-22726: 重新激活配置对话框帮助按钮,包含一些关于其他按钮和新IDLE Dark主题的内容。
bpo-24820: IDLE现在有一个'IDLE Dark'内置文本颜色主题。它或多或少是IDLE Classic的反转,背景为钴蓝色。字符串、注释、关键字等仍然是绿色、红色、橙色等。要在2015年11月之前发布的IDLEs中使用它,点击'保存为新的自定义主题'按钮并输入一个新名称,如'Custom Dark'。自定义主题适用于任何IDLE版本,并且可以修改。
bpo-25224: README.txt现在是IDLE开发者和好奇用户的idlelib索引。以前的用户内容现在在IDLE文档章节中。'IDLE'现在意味着'集成开发和学习环境'。
bpo-24820: 用户现在可以在设置->自定义高亮中设置断点颜色。原始由Mark Roseman提供补丁。
bpo-24972: 非活动选择背景现在在所有系统上都与用户配置的活动选择背景相匹配。在Windows上,找到的项目现在总是高亮显示。初始由Mark Roseman提供补丁。
bpo-24570: Idle:在受tk回归影响的Mac上显示调用提示和完成框。初始补丁由Mark Roseman提供。
bpo-24988: Idle ScrolledList上下文菜单(在调试器中使用)现在在Mac Aqua上工作。由Mark Roseman提供补丁。
bpo-24801: 使右键点击上下文菜单在Mac Aqua上工作。由Mark Roseman提供补丁。
bpo-25173: 将tkinter消息框与特定小部件关联。对于Mac OSX,使它们成为'表单'。由Mark Roseman提供补丁。
bpo-25198: 增强现在用于Idle Help的初始html查看器。正确缩进固定间距文本(由Mark Roseman提供补丁)。给代码片段一个非常类似Sphinx的浅蓝灰色背景。重用用户为shell和编辑器设置的初始宽度和高度。当使用目录(TOC)菜单时,将部分标题放在屏幕顶部。
bpo-25225: 压缩并重写Idle文档中关于文本颜色的部分。
bpo-21995: 解释IDLE和控制台Python之间的一些差异。
bpo-22820: 解释在从Idle编辑器运行文件时需要 print 的原因。
bpo-25224: 文档:增加Idle功能列表和无子进程部分。
bpo-25219: 更新Idle命令行选项的文档。有些选项缺失,注释也不正确。
bpo-24861: 大多数idlelib是私有的,可能会更改。使用idleib.idle.*来启动Idle。参见idlelib.__init__.__doc__。
bpo-25199: Idle:为未来的维护者添加同步注释。
bpo-16893: 将 Idle 文档显示的 help.txt 替换为 help.html。新的 idlelib/help.html 是去除右侧空格的 Doc/build/html/library/idle.html。它看起来比 help.txt 更好,并将更好地记录发布的 Idle。适用于此文件的 tkinter html 查看器是由 Rose Roseman 编写的。现在未使用的 EditorWindow.HelpDialog 类和 helt.txt 文件已被弃用。
bpo-24199: 弃用未使用的 idlelib.idlever,可能在 3.6 中移除。
bpo-24790: 移除多余的代码(这也造成了 2 和 3 的冲突)。
文档¶
bpo-26736: 尽可能在文档中使用 HTTPS 作为外部链接。
bpo-6953: 重新组织 Readline 模块文档,将相关函数分组,并添加更多细节,如访问哪些底层的 Readline 函数和变量。
bpo-23606: 向 ctypes 文档添加关于 cdll.msvcrt 的注释。
bpo-24952: 阐明 "threading" 和 "_thread" 模块中 stack_size() 的默认 size 参数。来自 Mattip 的补丁。
bpo-26014: 更新 3.x 打包文档:* 现在在旧版页面中提供了指向新文档的 "参见" 链接 * 更新了指向 setuptools 文档的链接
测试¶
bpo-21916: 为 turtle 模块添加了测试。由 ingrid、Gregory Loyse 和 Jelle Zijlstra 提供补丁。
bpo-26295: 当使用 "python3 -m test --testdir=TESTDIR" 时,regrtest 不会给测试模块名添加 "test." 前缀。
bpo-26523: 多进程线程池(multiprocessing.dummy.Pool)未经测试。
bpo-26015: 为可变序列的迭代器的 pickle 操作添加了新测试。
bpo-26325: 添加了 test.support.check_no_resource_warning() 来检查是否未发出 ResourceWarning。
bpo-25940: 更改 test_ssl 以更多地使用其内部本地服务器。这避免依赖 svn.python.org,后者最近更改了根证书。
bpo-25616: OrderedDict 的测试从 test_collections 中提取出来,放入单独的文件 test_ordered_dict 中。
bpo-25449: 为 OrderedDict 的子类添加了测试。
bpo-25188: 添加 -P/--pgo 到 test.regrtest,以在运行测试套件用于PGO构建时抑制错误输出。初始由Alecsandru Patrascu提供补丁。
bpo-22806: 添加
python -m test --list-tests命令以列出测试。bpo-18174:
python -m test --huntrleaks ...现在也会检查文件描述符的泄漏。补丁由Richard Oudkerk编写。bpo-25260: 修复
python -m test --coverage在Windows上的问题。移除忽略目录的列表。PCbuild\rt.bat现在可以接受无限数量的参数传递给regrtest.py。之前有9个的限制。bpo-26583: 如果无法写入字节码文件,则在test_import中跳过test_timestamp_overflow测试。
构建¶
bpo-21277: 不要试图将_ctypes与ffi_convenience库链接。
bpo-26884: 修复交叉构建中扩展模块的链接问题。由Xavier de Gaye提供补丁。
bpo-26932: 修复了对定义为枚举值而非宏的RTLD_*常量的支持(特别是在Android上)。由Chi Hsuan Yen提供补丁。
bpo-22359: 在交叉编译时禁用运行_freeze_importlib和pgen的规则。这些程序的输出通常与源代码一起保存,并且在本地构建时仍会重新生成。由Xavier de Gaye提供补丁。
bpo-21668: 将audioop、_datetime、_ctypes_test模块链接到libm,除了Mac OS X。补丁由Chi Hsuan Yen编写。
bpo-25702: 添加了一个--with-lto配置选项,该选项将在make profile-opt期间启用构建时的链接时间优化。已知一些编译器和工具链在使用LTO时不会产生稳定的代码,因此在依赖它之前确保彻底测试。它可以比仅使用profile-opt提供几个%的速度提升。
bpo-26624: 添加了对ucrtbase[d].dll版本的验证,并对旧版本发出警告。
bpo-17603: 通过使用struct stat中st_blocks的低级检查,避免关于不存在的fileblocks.o文件的错误。
bpo-26079: 修复 tix-8.4.3.6 的构建输出文件夹。由 Bjoern Thiel 提交补丁。
bpo-26465: 更新 Windows 构建以使用 OpenSSL 1.0.2g。
bpo-25348: 添加了
--pgo和--pgo-job参数到PCbuild\build.bat以便使用 Profile-Guided Optimization 构建。旧的PCbuild\build_pgo.bat脚本已被移除。bpo-25827: 向
configure添加了对使用 ICC 构建的支持,包括一个新的--with-icc标志。bpo-25696: 修复了在 UNIX 上使用 make -j9 安装 Python 的问题。
bpo-24986: 现在可以在 Windows 上构建 Python 而不会在没有外部库的情况下出现错误。
bpo-24421: 在构建扩展之前,先编译 Modules/_math.c 一次。之前如果数学和 cmath 构建同时进行,可能会导致编译失败。
bpo-26465: 更新 OS X 10.5+ 仅 32 位安装程序,以构建和链接 OpenSSL 1.0.2g。
bpo-26268: 更新 Windows 构建以使用 OpenSSL 1.0.2f。
bpo-25136: 支持 Apple Xcode 7 的新文本 SDK stub 库。
bpo-24324: 当使用 gcc 时不启用不可达代码警告,因为该选项在旧版本的 gcc 中不起作用,并且在 gcc-4.5 之后已被静默移除。
Windows¶
工具/示例¶
bpo-26799: 修复 python-gdb.py:不要在 Python 代码加载时一次性获取 C 类型,而是按需获取 C 类型。如果在 Python 可执行文件之前加载 python-gdb.py,C 类型可以改变。补丁由 Thomas Ilsche 编写。
bpo-26271: 修复Freeze工具以正确使用通过configure传递的标志。补丁由Daniel Shaulov提供。
bpo-26489: 向Tools/parser/unparse.py添加字典解包支持。由Guo Ci Teo提供补丁。
bpo-26316: 修复Argument Clinic中的变量名拼写错误。
bpo-25440: 修复python-config --extension-suffix的输出。
bpo-25154: pyvenv脚本已被弃用,推荐使用
python3 -m venv。
C API¶
Python 3.5.5 正式版¶
发布日期e: 2018-02-04
在 3.5.5 版本中没有新的更改。
Python 3.5.5 rc1¶
发布日期: 2018-01-23
安全性¶
bpo-32551: bpo-29139 中对
sys.path[0]初始化的更改导致了一个回归问题,揭示了在执行来自zipfile、目录或其他导入位置的__main__时sys.path初始化的不一致性。这被认为是一个潜在的安全问题,因为在之前不会出现的情况下,可能导致特权进程从用户控制的目录意外加载代码。解释器现在一致地避免将导入位置的父目录添加到sys.path中,并确保在插入命令行指定的导入位置时不会无意中修改其他sys.path条目。(最初作为 bpo-29723 针对Python 3.6rc1报告,但当时忽略了即将发布的Python 3.5.4也会受到影响)bpo-30657: 修复了PyBytes_DecodeEscape中可能的整数溢出,CVE-2017-1000158。原始补丁由Jay Bosamiya提供;由Miro Hrončok重新基于Python 3。
bpo-30947: 将内嵌的 libexpat 从版本 2.2.1 升级到 2.2.3 以获取安全修复。
核心与内置函数¶
bpo-31095: 修复由未调用
PyObject_GC_UnTrack()的tp_dealloc引起的GC期间潜在崩溃问题。
库¶
bpo-32072: 修复了二进制 plists 的问题:修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。
bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题(libexpat bug 115):https://github.com/libexpat/libexpat/issues/115
Python 3.5.4 正式版¶
发布日期: 2017-08-07
库¶
bpo-30119: ftplib.FTP.putline() 现在会在命令包含 CR 或 LF 时抛出 ValueError。由 Donghee Na 提供补丁。
Python 3.5.4 rc1¶
发布日期: 2017-07-23
安全性¶
bpo-30730: 在 Windows 上防止子进程中的环境变量注入。防止传递其他环境变量和命令参数。
bpo-30694: 将 expat 从 2.2.0 升级到 2.2.1 以修复多个安全漏洞,包括:CVE-2017-9233 (外部实体无限循环 DoS)、CVE-2016-9063 (整数溢出,重新修复)、CVE-2016-0718 (修复 2.2.0 对 CVE-2016-0718 的修复引起的回归错误) 和 CVE-2012-0876 (使用 SipHash 抵御哈希洪水攻击)。 注意: CVE-2016-5300 (使用操作系统特定的熵源如 getrandom) 不影响 Python,因为 Python 已经通过
XML_SetHashSalt()从操作系统获取熵来设置 expat 的密钥。bpo-30500: 修复 urllib.parse.splithost() 正确解析片段。例如,
splithost('//127.0.0.1#@evil.com/')现在正确返回127.0.0.1主机,而不是将@evil.com视为认证中的主机(login@host)。bpo-29591: 将 expat 从 2.1.1 更新到 2.2.0 以修复 CVE-2016-0718 和 CVE-2016-4472。更多信息请见 https://sourceforge.net/p/expat/bugs/537/。
核心与内置函数¶
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() 现在支持带有被partialmethod包装的可变参数参数的可调用对象。由Donghee Na提供补丁。
bpo-29931: 修复了 ipaddress.ip_interface 对象的比较检查。补丁由 Sanjay Sundaresan 提供。
bpo-24484: 避免多进程清理中的竞争条件。
bpo-28994: 对于由 atexit 注册的回调中引发的 SystemExit,不再显示回溯。
bpo-30508: 如果调用了 Task/Future 的 "cancel()" 方法,则不记录异常。
bpo-28556: typing 模块的更新:添加通用的 AsyncContextManager,为所有版本添加对 ContextManager 的支持。原始 PR 由 Jelle Zijlstra 和 Ivan Levkivskyi 提供。
bpo-29870: 修复 asyncio/ssl 实现中当连接被中止时 SSL 套接字的泄漏问题。由 Michaël Sghaïer 提供补丁。
bpo-29743: 在握手过程中关闭传输会导致打开的套接字泄漏。由 Nikolay Kim 提供补丁。
bpo-27585: 修复 asyncio.Lock 中的等待者取消问题。由 Mathieu Sornay 提供补丁。
bpo-30418: 在 Windows 上,如果子进程仍在运行但关闭了管道,subprocess.Popen.communicate() 现在也会忽略 stdin.write() 上的 EINVAL。
bpo-30378: 修复 logging.handlers.SysLogHandler 无法处理 IPv6 地址的问题。
bpo-29960: 当_random.Random.setstate()引发异常时,保留生成器状态。补丁由Bryan Olson提供。
bpo-30414: multiprocessing.Queue._feed 后台运行线程在异常时不从主循环中中断。
bpo-30003: 修复HZ编解码器中转义字符的处理。基于Ma Lin的补丁。
bpo-30301: 修复在 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-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-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)来确定测试正则表达式的候选编码(允许它在默认区域编码是多字节编码时正确跳过测试)
构建¶
Windows¶
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-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: 允许将假值 (falsy value) 用于 subTest() 的 msg 形参。
bpo-27932: 防止win32_ver()中的内存泄漏。
修复socket._sendfile_use_sendfile中的UnboundLocalError。
bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。
bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。
bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。
bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。
bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。
bpo-19003: email.generator 现在按照 RFC,仅替换
\r和/或\n行结束符,而不是所有的 Unicode 行结束符。bpo-28019: itertools.count()不再将1.0到2.0之间的非整数步长四舍五入为1。
bpo-25969: 更新lib2to3语法以处理3.5中添加的解包泛化。
bpo-14977: mailcap现在遵循mailcap文件中的行顺序(“首次匹配”),符合RFC 1542的要求。由Michael Lazar提供的补丁。
bpo-24594: 在打开MSI数据库时验证persist参数。
bpo-17582: xml.etree.ElementTree现在保留属性中的空白(由Duane Griffin提供补丁。由Stefan Behnel审查和批准。)。
bpo-28047: 修复了用于新电子邮件策略中base64 CTE的行长度计算。
bpo-27445: 不将str(_charset)传递给MIMEText.set_payload()。由Claude Paroz提供的补丁。
bpo-22450: urllib现在在默认头中包括一个
Accept: */*头。这使得REST API请求的结果更加一致和可预测,尤其是在涉及代理服务器时。lib2to3.pgen3.driver.load_grammar() 现在在相同的Grammar.txt输入下,无论哈希随机化设置如何,都会创建一个稳定的缓存文件。
bpo-27570: 在“ctypes”和“array”模块中避免使用空源指针进行零长度memcpy()等调用。
bpo-22233: 仅在RFC指定的CR和LF字符上断开电子邮件标题行,而不是在任意Unicode换行符上。这也修复了HTTP标题解析中的一个错误。
bpo-27988: 修复email iter_attachments对payload列表的错误修改。
bpo-27691: 修复ssl模块对X.509证书中GEN_RID主题替代名字段的解析。
bpo-27850: 从 ssl 模块的默认加密列表中移除 3DES 以应对 sweet32 攻击 (CVE-2016-2183)。
bpo-27766: 向ssl模块的默认加密列表中添加ChaCha20 Poly1305。(需要OpenSSL 1.1.0或LibreSSL)。
bpo-26470: 将ssl和hashlib模块移植到OpenSSL 1.1.0。
移除对传递文件描述符给os.access的支持。它从未工作过,但以前不会引发错误。
bpo-12885: 修复distutils遇到符号链接时的错误。
bpo-27881: 修复了设置sqlite3.Connection.isolation_level时可能的错误。基于Xiang Zhang的补丁。
bpo-27861: 修复了当工厂创建的不是游标时sqlite3.Connection.cursor()中的崩溃。由Xiang Zhang提供补丁。
bpo-19884: 避免在OS X上使用Gnu Readline时产生虚假输出。
bpo-27706: 恢复random.Random().seed()对于使用种子版本1的字符串种子的确定性行为。允许random()的调用序列与Python 2中完全匹配。由Nofar Schnider提供补丁。
bpo-10513: 修复Connection.commit()中的回归问题。提交后不应重置语句。
来自 https://github.com/python/typing 的 typing.py 新版本:Collection(仅适用于 3.6)(bpo-27598)。将 FrozenSet 添加到 __all__(上游 #261)。修复 _get_type_vars() 中的崩溃(上游 #259)。移除 ForwardRef._eval_type 中的字典约束(上游 #252)。
bpo-27539: 修复了在负指数和负基数情况下未归一化的
Fraction.__pow__结果。bpo-21718: 现在,使用CTEs的查询可以使用cursor.description了。
bpo-2466: posixpath.ismount现在能正确识别用户没有权限访问的挂载点。
bpo-27773: 更正 _ssl.wrap_socket() 中 server_hostname 的一些内存管理错误。
bpo-26750: unittest.mock.create_autospec() 现在能正确处理 property() 及其他数据描述符的子类。
在 curses 模块中,如果向 window.getstr() 或 window.instr() 传递负值,则引发错误。
bpo-27783: 修复 operator.methodcaller 中可能使用未初始化内存的问题。
bpo-27774: 修复 _sre 中可能对未拥有对象进行 Py_DECREF 的问题。
bpo-27760: 修复 binascii.b2a_qp 中可能的整数溢出。
bpo-27758: 修复 _csv 模块中对于大记录长度可能的整数溢出。
bpo-27568: 防止 HTTPoxy 攻击 (CVE-2016-1000110)。当设置了 REQUEST_METHOD 环境变量时忽略 HTTP_PROXY 变量,这表明脚本处于 CGI 模式。
bpo-27656: 不再假设sched.h定义了任何SCHED_*常量。
bpo-27130: 在“zlib”模块中,修复了压缩和解压缩大缓冲区(通常为4 GiB)时的处理问题。之前,输入被限制在4 GiB,压缩和解压缩操作未能正确处理4 GiB的结果。
bpo-27533: 在nt._isdir中释放GIL。
bpo-17711: 修复了使用协议0的持久ID进行反序列化的问题。原始补丁由Alexandre Vassalotti提交。
bpo-27522: 避免在email.feedparser中无意中创建的引用循环。
bpo-26844: 修复 imp.find_module() 的错误消息,使其引用 'path' 而不是 'name'。由 Lev Maximov 提供补丁。
bpo-23804: 修复 SSL 零长度 recv() 调用,使其不阻塞且不引发关于不干净 EOF 的错误。
bpo-27466: 更改 http.cookie.time2netscape 返回的时间格式,确认 netscape cookie 格式并使其与文档一致。
bpo-26664: 通过移除
$的错误使用修复 activate.fish。bpo-22115: 修复了跟踪 Tkinter 变量的功能:trace_vdelete() 使用错误的模式不再破坏跟踪,trace_vinfo() 现在总是返回字符串对的列表,"u" 模式下的跟踪现在可以工作。
修复了 importlib.util.LazyLoader 中的一个作用域问题,该问题在懒加载一个已经被放入 sys.modules 的模块时会触发 UnboundLocalError。
bpo-27079: 修复了curses.ascii函数isblank()、iscntrl()和ispunct()。
bpo-26754: 一些函数(如compile()等)接受以整数可迭代对象编码的文件名参数。现在只接受字符串和字节类对象。
bpo-27048: 防止distutils在Windows上因环境变量包含非ASCII字符而失败。
bpo-27330: 修复了ctypes模块中可能的泄漏。
bpo-27238: 移除了turtle模块中的裸except。原始由Jelle Zijlstra提供补丁。
bpo-27122: 当在由contextlib.ExitStack()管理的上下文中引发异常,并且退出堆栈生成器之一捕获并在链中引发它时,退出时不再重新引发原始异常,而是让新的链式异常通过。这避免了issue25782中描述的 PEP 479 错误。
bpo-26386: 修复了 ttk.TreeView 选中操作中项目 ID 包含空格的问题。
bpo-16182: 修复 "readline" 模块中的多个函数以使用区域设置编码,并修复 get_begidx() 和 get_endidx() 返回代码点索引。
bpo-27392: 添加 loop.connect_accepted_socket()。由 Jim Fulton 提供补丁。
bpo-27930: 改进了logging.handlers.QueueListener的行为。感谢Paulo Andrade和Petr Viktorin的分析和补丁。
bpo-21201: 提高了multiprocessing错误消息的可读性。感谢Wojciech Walczak的补丁。
bpo-27456: asyncio:默认设置TCP_NODELAY。
bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。
bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。
bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。
bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。
bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。
bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。
bpo-28368: 如果子监视器没有附加循环,则拒绝监视进程。由Vincent Michel提供补丁。
bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。
bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。
bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。
bpo-28372: 修复asyncio以支持非python协程的格式化。
bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。
bpo-27972: 禁止Tasks等待自身。
bpo-26923: 修复 asyncio.Gather 一旦所有子项完成就拒绝被取消的问题。由 Johannes Ebke 提供补丁。
bpo-26796: 不要为默认的线程池执行器配置工作线程数量。初始由 Hans Lawrenz 提供补丁。
bpo-28600: 优化 loop.call_soon()。
bpo-28613: 修复 get_event_loop() 在协程/回调中调用时返回当前循环的问题。
bpo-28639: 修复 inspect.isawaitable 始终返回布尔值,由 Justin Mayfield 提供补丁。
bpo-28652: 使循环方法拒绝它们不支持的套接字类型。
bpo-28653: 修复 functools.lru_cache 中的 refleak。
bpo-28703: 修复 asyncio.iscoroutinefunction 以处理 Mock 对象。
bpo-24142: 读取损坏的配置文件会使解析器处于无效状态。原始由 Florian Höch 提供补丁。
bpo-28990: 修复了如果在握手完成前关闭连接会导致 SSL 挂起的问题。(补丁由 HoHo-Ho 提供)
IDLE¶
bpo-15308: 向Shell菜单添加了'中断执行'(^C)。由Roger Serwy提供补丁,由Bayard Randel更新。
bpo-27922: 停止IDLE测试在屏幕上'闪烁'gui小部件。
在 IDLE 帮助窗口的标题中加入版本号
bpo-25564: 在IDLE与控制台差异的部分,提到使用exec意味着每个语句都定义了__builtins__。
bpo-27714: text_textview和test_autocomplete现在在同一个进程中重新运行时通过。这发生在test_idle使用-w选项运行但未使用-jn选项时失败时。修复test_config的警告。
bpo-25507: IDLE不再因为其tkinter导入而运行有bug的代码。用户必须包含直接在Python中运行所需的相同导入。
bpo-27452: 在IDLE configHandler测试转储中添加行计数器和crc。
bpo-27365: 允许在 IDLE NEWS.txt 中使用非 ASCII 字符,用于贡献者姓名。
bpo-27245: IDLE:干净地删除自定义主题和键绑定。以前,当 IDLE 从控制台或通过导入启动时,会发出一系列警告。由 Serhiy Storchaka 提供补丁。
C API¶
文档¶
bpo-28513: 记录了 zipfile 的命令行接口。
测试¶
工具/示例¶
Windows¶
构建¶
bpo-29080: 从PCBuild/build.bat中移除对hg.exe的硬依赖
bpo-23903: 向PC/python3.def添加遗漏的名称。
bpo-10656: 修复AIX上的树外构建。由Tristan Carel和Michael Haubenwallner提供补丁。
bpo-26359: 将--with-optimiations重命名为--enable-optimizations。
bpo-28444: 修复交叉编译时缺少扩展模块的问题。
bpo-28248: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2j。
bpo-28258: 修复了在爱沙尼亚语言环境下构建的问题(Makefile中的python-config和distclean目标)。由Arfrever Frehtes Taifersar Arahesis提供补丁。
bpo-26661: setup.py现在可以检测到带有multiarch包装的系统libffi。
bpo-28066: 修复在源代码树外构建时搜索构建目录中生成的包含文件的逻辑。
bpo-15819: 移除了为在源码树外构建而冗余的包含搜索目录选项。
bpo-27566: 修复冻结makefile中的clean目标(Lisa Roach提供补丁)
bpo-27705: 更新validate_ucrtbase.py中的消息
bpo-27983: 当使用clang作为PGO链接所需工具时,由于缺少llvm-profdata工具,在启用--with-optimizations时将配置时错误变为make时错误。同时提高我们在MacOS和一些Linux上找到llvm-profdata工具的能力。
bpo-26307: profile-opt构建现在将PGO应用于内置模块。
bpo-26359: 添加--with-optimizations配置标志。
bpo-27713: 在更新importlib的引导文件时抑制虚假的构建警告。由Xiang Zhang提供补丁。
bpo-25825: 更正对Modules/python.exp和ld_so_aix的引用,这些在AIX上是必需的。这更新了对在3.2a4中更改的安装路径的引用,并撤销了在3.5.0a1中对构建树的引用更改。
bpo-27453: 配置中的CPP调用必须使用CPPFLAGS。由Chi Hsuan Yen提供补丁。
bpo-27641: 配置脚本现在在makefile中插入注释,以防止pgen和_freeze_importlib可执行文件被交叉编译。
bpo-26662: 在配置中设置PYTHON_FOR_GEN作为构建期间用于文件生成的Python程序。
bpo-10910: 避免在FreeBSD和OS X上出现C++编译错误。同时更新FreedBSD版本检查以应对原始的ctype UTF-8变通方案。
bpo-28676: 防止在macOS上出现缺失'getentropy'声明的警告。由Gareth Rees提供补丁。
Python 3.5.2 正式版¶
发布日期: 2016-06-26
核心与内置函数¶
bpo-26930: 更新Windows构建以使用OpenSSL 1.0.2h。
测试¶
bpo-26867: Ubuntu的openssl OP_NO_SSLv3默认强制开启;修复测试。
IDLE¶
bpo-27365: 允许在idlelib/NEWS.txt中使用非ASCII字符 - 3.5.2的最小部分。
Python 3.5.2 rc1¶
发布日期: 2016-06-12
安全性¶
bpo-26556: 将expat更新到2.1.1,修复了 CVE-2015-1283。
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-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-26373: subprocess.Popen.communicate 现在在更多/所有情况下,当子进程在调用 .communicate() 之前死亡时,正确地忽略 BrokenPipeError。
bpo-21776: distutils.upload 现在正确处理 HTTPError。初始由 Claudiu Popa 提供补丁。
bpo-27114: 修复 SSLContext._load_windows_store_certs 因 PermissionError 失败的问题。
bpo-18383: 避免在使用 filterwarnings 和 simplefilter 时创建重复的过滤器。基于 Alex Shkop 的补丁。
bpo-27057: 修复Android上的os.set_inheritable(),ioctl()被SELinux阻止并因EACCESS失败。该函数现在回退到使用fcntl()。补丁由Michał Bednarski编写。
bpo-27014: 修复使用typing.py时的无限递归问题。感谢Kalle Tuure!
bpo-14132: 修复urllib.request在目标仅有查询字符串时的重定向处理。原始修复由Ján Janech提供。
bpo-17214: "urllib.request"模块现在对重定向目标URL中的非ASCII字节进行百分比编码。一些服务器发送含有非ASCII字节的Location头字段,但"http.client"要求请求目标必须可ASCII编码,否则会抛出UnicodeEncodeError。基于Christian Heimes的补丁。
bpo-26892: 在urllib.request.HTTPHandler中尊重debuglevel标志。补丁由Chi Hsuan Yen贡献。
bpo-22274: 在subprocess模块中,即使stdout未被重定向,也允许将stderr重定向到stdout。补丁由Akira Li提供。
bpo-26807: mock_open 'files' 在文件末尾的readline操作不再报错。补丁由Yolanda Robla提供。
bpo-25745: 修复了curses panel析构函数中userptr的泄漏问题。
bpo-26977: 在statistics.pvariance中移除了不必要且被忽略的平方和辅助函数调用。
bpo-26881: modulefinder模块现在支持扩展的操作码参数。
bpo-23815: 修复了直接创建_tkinter和curses.panel模块中类型实例相关的崩溃问题。
bpo-17765: weakref.ref()不再默默忽略关键字参数。由Georg Brandl提供补丁。
bpo-26873: xmlrpc现在会在遇到不支持的类型标签时抛出ResponseError,而不是默默返回错误结果。
bpo-26711: 修复了plistlib.Data与其他类型的比较问题。
bpo-24114: 修复了
ctypes.util中一个未初始化的变量问题。此bug仅在SunOS上,当ctypes实现搜索crle程序时出现。由Xiang Zhang提供补丁。在SunOS上由Kees Bos测试。bpo-26864: 在urllib.request中,将代理绕过主机检查对no_proxy的匹配改为不区分大小写,并且不匹配那些恰好以后缀形式包含被绕过主机名的无关主机名。由Xiang Zhang提供补丁。
bpo-26634: recursive_repr() 现在设置包装器的 __qualname__。由 Xiang Zhang 提供补丁。
bpo-26804: urllib.request 现在会优先选择小写的代理环境变量,而不是大写或混合大小写的。补丁由 Hans-Peter Jansen 贡献。
bpo-26837: assertSequenceEqual() 现在能正确输出非字符串化的不同项(如 -b 模式下的字节)。这影响了 assertListEqual() 和 assertTupleEqual()。
bpo-26041: 从 platform.dist() 和 platform.linux_distribution() 的弃用消息中移除了 "将在 Python 3.7 中移除"。由 Kumaripaba Miyurusara Athukorala 提供补丁。
bpo-26822: itemgetter、attrgetter 和 methodcaller 对象不再静默忽略关键字参数。
bpo-26733: 反汇编一个类现在会反汇编类和静态方法。由 Xiang Zhang 提供补丁。
bpo-26801: 修复
shutil.get_terminal_size()中的错误处理,捕获AttributeError而不是NameError。补丁由 Emanuel Barry 编写。bpo-24838: tarfile 的 ustar 和 gnu 格式现在能正确计算多字节字符编码(如 utf-8)的名称和链接字段限制。
bpo-26717: 停止用 UTF-8 编码拉丁-1 化的 WSGI 路径。由 Anthony Sottile 提供补丁。
bpo-26735: 修复 Solaris 11.3 及更新版本上
os.urandom()当读取超过 1,024 字节时的问题:多次调用getrandom(),每次调用限制为 1024 字节。bpo-16329: 向 mimetypes.types_map 添加 .webm。由 Giampaolo Rodola' 提供补丁。
bpo-13952: 向 mimetypes.types_map 添加 .csv。由 Geoff Wilson 提供补丁。
bpo-26709: 修复了加载二进制 PLists 时的 Y2038 问题。
bpo-23735: 通过安装我们自己的 SIGWINCH 处理程序,处理 Readline 6.3+ 的终端调整大小。由 Eric Price 提供补丁。
bpo-26586: 在 http.server 中,如果头字段太多无法解析,则响应 "413 请求头字段太大",而不是终止连接并引发未处理的异常。由 Xiang Zhang 提供补丁。
bpo-22854: 将 BufferedReader.writable() 和 BufferedWriter.readable() 更改为总是返回 False。
bpo-25195: 修复了 mock.MagicMock 中的一个回归问题。_Call 是 tuple 的子类(changeset 3603bae63c13 仅适用于类),所以我们需要自己实现 __ne__。由 Andrew Plummer 提供补丁。
bpo-26644: 当向 SSLSocket.recv() 或 read() 传递负长度时,引发 ValueError 而不是 SystemError。
bpo-23804: 修复 SSL recv(0) 和 read(0) 方法返回零字节而不是最多 1024 字节的问题。
bpo-26616: 修复了 datetime.astimezone() 方法中的一个错误。
bpo-21925:
warnings.formatwarning()现在捕获linecache.getline(...)上的异常,以便能够记录在Python关闭过程后期发出的ResourceWarning。bpo-24266: 在编译时使用Readline 7的情况下,Readline历史搜索期间的Ctrl+C现在会取消搜索模式。
bpo-26560: 避免BaseHandler.start_response中潜在的ValueError。初始由Peter Inglesby提供补丁。
bpo-26569: 修复
pyclbr.readmodule()和pyclbr.readmodule_ex()以支持导入包。bpo-26499: 在HTTPResponse.readline()和read1()中考虑剩余的Content-Length。基于Silent Ghost的补丁。同时记录HTTPResponse现在支持这些方法。
bpo-25320: 处理unittest发现扫描的目录中的套接字。补丁来自Victor van den Elzen。
bpo-16181: 现在如果年份高于datetime.MAXYEAR,cookiejar.http2time()会返回None。
bpo-26513: 修复了平台模块对Windows Server的检测。
bpo-23718: 修复了在1月1日前的第0周解析时间的问题。原始由Tamás Bence Gedai提供补丁。
bpo-20589: 在Windows上调用Path.owner()和Path.group()现在会引发NotImplementedError而不是ImportError。
bpo-26177: 修复了Canvas和Scrollbar小部件的keys()方法。
bpo-15068: 在fileinput模块中去掉了过度的缓冲。bufsize参数不再使用。
bpo-2202: 修复了AbstractDigestAuthHandler.get_algorithm_impls中的UnboundLocalError。初始由Mathieu Dupuy提供补丁。
bpo-25718: 修复了当total为None时,对accumulate()迭代器的pickling和复制。
bpo-26475: 修复了带有(?x)标志的正则表达式的调试输出。
bpo-26457: 修复了当结果前缀长度等于最大前缀长度时,IP网络类中的subnets()方法。基于Xiang Zhang的补丁。
bpo-26385: 如果NamedTemporaryFile()中的内部open()调用失败,则删除文件。由Silent Ghost提供补丁。
bpo-26402: 修复了XML-RPC客户端在服务器关闭持久连接时重试的问题。这是与3.5.0a4中的新http.client.RemoteDisconnected异常相关的回归问题。
bpo-25913: 在adobe=True时,base64.a85decode()中前导的
<~现在是可选的。由Swati Jaiswal提供补丁。bpo-26186: 移除importlib.util.LazyLoader中的一个无效类型检查。
bpo-26367: 当指定了
level但没有指定相应的包时,importlib.__import__()像builtins.__import__()一样引发SystemError。bpo-26309: 在"socketserver"模块中,当verify_request()返回false时,关闭请求(关闭连接的套接字)。由Aviv Palivoda提供补丁。
bpo-25995: os.walk()不再使用与树深度成比例的FDs。
bpo-26117: os.scandir()迭代器现在不仅在迭代完成时关闭文件描述符,而且在因错误失败时也关闭。
bpo-25911: 恢复了在Windows上os.walk()中对字节路径的支持。
bpo-26045: 在使用http.client发布非Latin-1字符串时,向错误消息添加UTF-8建议。
bpo-12923: 即使有异常也重置FancyURLopener的重定向计数器。基于Brian Brazil和Daniel Rocco的补丁。
bpo-25945: 修复了解除 pickle functools.partial 对象时状态错误导致的崩溃问题。修复了 functools.partial 构造函数失败时的内存泄漏。functools.partial 的 "args" 和 "keywords" 属性现在总是分别具有 tuple 和 dict 类型。
bpo-26202: copy.deepcopy() 现在能正确复制具有非原子属性的 range() 对象。
bpo-23076: Path.glob() 现在在调用无效模式时会引发 ValueError。补丁由 Thomas Nyberg 提供。
bpo-19883: 修复了 zipimport 中可能的整数溢出问题。
bpo-26227: 在 Windows 上,socket 模块的 getnameinfo()、gethostbyaddr() 和 gethostbyname_ex() 函数现在从 ANSI 代码页而非 UTF-8 解码主机名。
bpo-26147: xmlrpc 现在可以处理无法用所使用的非 UTF-8 编码编码的字符串。
bpo-25935: 垃圾回收器现在可以打破 OrderedDict 的引用循环。
bpo-16620: 修复了 msilib.Directory.glob() 中的 AttributeError。
bpo-26013: 增加了对旧 Python 3 版本(3.4.3 及以下)创建的损坏协议 2 pickle 的兼容性。
bpo-25850: 默认使用交叉编译为 64 位 Windows。
bpo-17633: 改进zipimport对命名空间包的支持。
bpo-24705: 修复了 sysconfig._parse_makefile 不扩展出现在 $() 变量之前的 ${} 变量的问题。
bpo-22138: 修复了 mock.patch 在修补描述符时的行为。修补后恢复原始值。由 Sean McCully 提供补丁。
bpo-25672: 在 ssl 模块中,如果安全的话,启用 SSL_MODE_RELEASE_BUFFERS 模式选项。
bpo-26012: 在 pathlib.Path.[r]glob() 中不对符号链接进行
**模式的遍历。bpo-24120: 在使用 pathlib.Path.[r]glob() 遍历树时忽略 PermissionError。由 Ulrich Petri 提供补丁。
bpo-25447: 如果 sys.stdin 没有缓冲区属性,fileinput 现在会直接使用它(恢复了向后兼容性)。
bpo-25447: 复制 lru_cache() 包装器对象现在总是有效,与被包装对象的类型无关(通过返回未更改的原始对象)。
bpo-24103: 修复了 ElementTree.XMLPullParser 中可能的使用后释放问题。
bpo-25860: os.fwalk() 在发生错误时不再跳过剩余的目录。原始由 Samson Lee 提供补丁。
bpo-25914: 修复并简化了 OrderedDict.__sizeof__。
bpo-25902: 修复了 ElementTree 迭代中的各种引用计数问题。
bpo-25717: 恢复在打开文件时容忍大多数fstat()错误的先前行为。这是3.5a1版本中的一个回归问题,阻止了匿名临时文件在特殊情况下的工作。
bpo-24903: 修复了当指定'-d'时compileall接受的参数数量的回归问题。对参数数量的检查已被完全删除,因为它从未正确工作过。
bpo-25764: 在subprocess模块中,当使用preexec_fn时,保留由fork()失败引起的任何异常。
bpo-6478: 在更改时区后,_strptime的正则表达式缓存现在会被time.tzset()重置。
bpo-14285: 当使用"python -m package"选项执行包且包初始化失败时,现在会报告正确的回溯。"runpy"模块现在让包初始化的异常传递回调用者,而不是引发ImportError。
bpo-19771: 同样在runpy和"-m"选项中,如果包甚至无法初始化(例如由于坏的
*.pyc文件),则省略不相关的消息"...是一个包,不能直接执行"。bpo-25177: 修复了非常小和非常大的数字的平均值问题。作为副作用,statistics.mean和statistics.variance应该会显著更快。
bpo-25718: 修复了复制状态为布尔值false的对象的问题。
bpo-10131: 修复了minidom文档的深拷贝问题。基于Marian Ganisin的补丁。
bpo-25725: 修复了在解包含元组指令的无效数据时pickle.loads()中的引用泄漏问题。
bpo-25663: 在Readline completer中,避免列出重复的全局名称,并在搜索内置名称之前搜索全局命名空间。
bpo-25688: 修复了ElementTree.iterparse()在引发错误时的文件泄露问题。
bpo-23914: 修复了解pickle数据损坏时unpickler引发的SystemError。
bpo-25691: 修复了删除ElementTree.Element属性时的崩溃问题。
bpo-25624: ZipFile现在总是为目录条目写入ZIP_STORED头。由王定远提供补丁。
如果主机已解析,则跳过 getaddrinfo。由 A. Jesse Jiryu Davis 提供补丁。
bpo-26050: 添加 asyncio.StreamReader.readuntil() 方法。由 Марк Коренберг 提供补丁。
bpo-25924: 在 OS X 10.5 或更高版本上避免不必要的 getaddrinfo(3) 调用序列化。原始补丁由 A. Jesse Jiryu Davis 提供。
bpo-26406: 在当前版本的 OpenBSD 和 NetBSD 上避免不必要的 getaddrinfo(3) 调用序列化。由 A. Jesse Jiryu Davis 提供补丁。
bpo-26848: 修复 asyncio/subprocess.communicate() 以处理空输入。由 Jack O'Connor 提供补丁。
bpo-27040: 添加 loop.get_exception_handler 方法
bpo-27041: asyncio: 添加 loop.create_future 方法
bpo-27223: asyncio: 修复_read_ready和_write_ready以尊重_conn_lost。由Łukasz Langa提供补丁。
bpo-22970: asyncio:修复取消Condition.wait时的不一致性。由David Coles提供补丁。
IDLE¶
bpo-5124: 在 X11 上,现在粘贴选中的文本会替换选中内容。这匹配了 Windows、Mac、大多数现代 Linux 应用和 ttk 小部件上的粘贴工作方式。原始由 Serhiy Storchaka 提供补丁。
bpo-24759: 在 idlelib.idle_test.__init__ 中明确表示该目录是 test.test_idle 的私有实现和维护者的工具。
bpo-27196: 在运行 IDLE 测试时停止 'ThemeChanged' 警告。这些警告在其他警告被 #20567 抑制后仍然存在。将 Serhiy Storchaka 的 update_idletasks 解决方案应用于四个测试文件。在 idle_test/README.txt 中记录这一额外建议。
bpo-20567: 修改 idle_test/README.txt,提供避免测试中 tk 警告信息的建议。将建议应用于几个 IDLE 测试。
bpo-27117: 使颜色器 htest 和 turtledemo 支持深色主题。将配置文本小部件颜色的代码移至新函数。
bpo-26673: 当 tk 报告字体大小为 0 时,更改为大小 10。Linux 上的此类字体阻止了配置对话框的打开。
bpo-21939: 添加 IDLE 的渗滤器测试。原始由 Saimadhav Heblikar 提供补丁。
bpo-21676: 添加 IDLE 的替换对话框测试。原始由 Saimadhav Heblikar 提供补丁。
bpo-18410: 添加 IDLE 的搜索对话框测试。原始由 Westley Martínez 提供补丁。
bpo-21703: 为IDLE的撤销委托器添加测试。原始由Saimadhav Heblikar提供补丁。
bpo-27044: 添加ConfigDialog.remove_var_callbacks以防止内存泄漏。
bpo-23977: 在test_delegator中添加更多断言。
bpo-20640: 为 idlelib.configHelpSourceEdit 添加测试。由 Saimadhav Heblikar 提供补丁。
在 IDLE 文档的 'IDLE-控制台差异' 部分,澄清使用 IDLE 运行如何影响 sys.modules 和标准流。
bpo-25507: 修复 IOBinding 中阻止打印的错误更改。增强 IOBinding htest 以包括所有主要 IOBinding 功能。
bpo-25905: 恢复 README.txt 中 ' 到 ’ 右单引号的不必要转换,并用 'ascii' 打开此文件和 NEWS.txt。将 CREDITS.txt 重新编码为 utf-8 并用 'utf-8' 打开。
文档¶
bpo-19489: 将搜索框从侧边栏移动到每个页面的页眉和页脚。由Ammar Askar提供补丁。
bpo-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脚本现已弃用,仅调用PCbuild\build.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)
工具/示例¶
Python 3.5.1 正式版¶
发布日期: 2015-12-06
核心与内置函数¶
bpo-25709: 修复了原地字符串连接和utf-8缓存的问题。
Windows¶
bpo-25715: Python 3.5.1安装程序显示错误的升级路径和启动器检测逻辑。
Python 3.5.1 rc1¶
发布日期: 2015-11-22
核心与内置函数¶
bpo-25630: 修复了在接受文件系统路径的函数中,参数解析时可能发生的段错误。
bpo-23564: 修复了 _posixsubprocess 内部关于如何将 fds_to_pass 传递给子进程的部分损坏的健全性检查。由于 subprocess.py 已经避免了这个问题,这个错误没有实际影响。
bpo-25388: 修复了在处理包含空字节的不可解码源代码时,分词器崩溃的问题。
bpo-25462: 在 OrderedDict 的 C 实现中,大多数操作现在只计算一次键的哈希值。
bpo-22995: __reduce__ 和 __reduce_ex__ 的默认实现现在拒绝那些未定义 __new__ 的内置类型。
bpo-25555: 修复解析器和 AST:当从 Python 对象编译 AST 时,填充 "arg" 节点的 lineno 和 col_offset。
bpo-24802: 当 int()、float()、compile()、exec() 和 eval() 传递类似字节的对象时,避免缓冲区过度读取。这些对象不一定以空字节终止,但函数假设它们是。
bpo-24726: 修复了 OrderedDict 在直接调用 dict 方法后被 repr() 时崩溃和泄漏 NULL 的问题。
bpo-25449: 现在在 C 实现和 Python 实现中,迭代具有不稳定哈希键的 OrderedDict 都会引发 KeyError。
bpo-25395: 修复了在垃圾回收高度嵌套的 OrderedDict 结构时崩溃的问题。
bpo-25274: sys.setrecursionlimit() 现在如果新的递归限制根据当前递归深度太低会引发 RecursionError。同时修改“低水位标记”公式使其单调。这个标记用于决定何时重置线程状态的溢出标志。
bpo-24402: 修复 input() 在 sys.stdout.fileno() 失败时提示重定向的 stdout。
bpo-24806: 防止不允许被继承的内置类型通过多重继承被继承。
bpo-24848: 修复了UTF-7解码畸形数据时的一些错误。
bpo-25280: 在详细模式(-v)下发出的导入跟踪消息不再格式化两次。
bpo-25003: 在Solaris 11.3或更新版本上,os.urandom() 现在使用 getrandom() 函数而不是 getentropy() 函数。getentropy() 函数为了生成非常高质量的熵是阻塞的,os.urandom() 不需要如此高质量的熵。
bpo-25182: stdprinter(在启动时导入io模块之前用作sys.stderr)现在使用backslashreplace错误处理程序。
bpo-25131: 使集合/字典字面量和推导式的行号和列偏移与开括号对应。
bpo-25150: 从公共Python.h头文件中隐藏私有的
_Py_atomic_xxx符号,以修复与OpenMP的编译错误。PyThreadState_GET()成为PyThreadState_Get()的别名,以避免ABI不兼容。
库¶
bpo-25626: 修改了三个zlib函数以接受适合Py_ssize_t的大小,但在内部将这些大小限制为UINT_MAX。这解决了3.5版本中GzipFile.read()无法读取大于2或4 GiB块的回归问题。此更改影响zlib.Decompress.decompress()的max_length参数、zlib.decompress()的bufsize参数和zlib.Decompress.flush()的length参数。
bpo-25583: 当操作系统优先考虑如EACCES这样的错误而不是EEXIST时,避免os.makedirs(exist_ok=True)引发错误。
bpo-25593: 修改了asyncio中EventLoop.stop()的语义。
bpo-6973: 当我们知道一个subprocess.Popen进程已经死亡时,不允许send_signal()、terminate()或kill()方法执行任何操作,因为它们可能会信号到不同的进程。
bpo-25590: 在Readline completer中,每个属性只调用一次getattr()。
bpo-25498: 修复了在垃圾回收由包装memoryview创建的ctypes对象时的崩溃问题。这是3.5a1中的一个回归。基于Eryksun的补丁。
bpo-25584: 将"escape"添加到glob模块的__all__列表中。
bpo-25584: 修复了以
**开头的递归glob()模式。bpo-25446: 修复 smtplib 的 AUTH LOGIN 支持中的回归问题。
bpo-18010: 修复 pydoc web 服务器的模块搜索功能,以处理导入包时的异常。
bpo-25554: 消除了正则表达式解析中的循环引用。
bpo-25510: 如果 FileInput 以二进制模式打开,fileinput.FileInput.readline() 现在在末尾返回 b'' 而不是 ''。由 Ryosuke Ito 提供补丁。
bpo-25503: 修复了 inspect.getdoc() 对于属性的继承文档字符串的处理。原始由 John Mark Vandenberg 提供补丁。
bpo-25515: 在 uuid.uuid4 中始终使用 os.urandom 作为随机性来源。
bpo-21827: 修复了 textwrap.dedent() 当最大公共空白是最小前导空白的子字符串时的情况。基于 Robert Li 的补丁。
bpo-25447: lru_cache() 包装器对象现在可以被复制和 pickle(通过返回未更改的原始对象)。
bpo-25390: typing: 不因 Union[str, Pattern] 而崩溃。
bpo-25441: asyncio: 当套接字关闭时从 drain() 引发错误。
bpo-25410: 清理并修复了 OrderedDict 的 C 实现中的小错误。
bpo-25411: 通过更好地使用 email 包,改进了 SMTPHandler 中的 Unicode 支持。感谢用户 simon04 的补丁。
bpo-25407: 移除了关于 formatter 模块在 Python 3.6 中被移除的提及。
bpo-25406: 修复了 OrderedDict.move_to_end() 的 C 实现中的一个错误,该错误导致在将几个项目移动到有序字典的开头后在迭代中出现分段错误或挂起。
bpo-25364: zipfile 现在可以在禁用线程的构建中工作。
bpo-25328: 如果 decode_data 和 enable_SMTPUTF8 都被设置为 true,smtpd 的 SMTPChannel 现在会正确地引发 ValueError。
bpo-25316: 当未安装 MSVC 时,distutils 会引发 OSError 而不是 DistutilsPlatformError。
bpo-25380: 修复了 pickletools.opcodes 中 STACK_GLOBAL 操作码的协议。
bpo-23972: 更新了 asyncio 的数据报创建方法,允许在绑定套接字之前设置 reuseport 和 reuseaddr 套接字选项。与现有的 asyncio create_server 方法类似,如果操作系统是 'posix'(除非平台是 Cygwin),数据报套接字的 reuseaddr 选项默认为 True。由 Chris Laws 提供补丁。
bpo-25304: 添加了 asyncio.run_coroutine_threadsafe()。这让你可以从另一个线程向循环提交一个协程,返回一个 concurrent.futures.Future。由 Vincent Michel 提供。
bpo-25232: 修复 CGIRequestHandler,使其在第一个问号 (?) 处而不是最后一个问号处将查询与 URL 分开。补丁来自 Xiang Zhang。
bpo-24657: 防止 CGIRequestHandler 像处理路径一样在 URL 的查询部分折叠斜杠。补丁来自 Xiang Zhang。
bpo-24483: functools.lru_cache()的C实现现在只计算一次key的哈希。
bpo-22958: weakref.WeakValueDictionary的构造函数和更新方法现在接受self和dict关键字参数。
bpo-22609: collections.UserDict的构造函数现在接受self关键字参数。
bpo-25111: 修复了traceback.FrameSummary的比较。
bpo-25262: 在Python的解pickler实现中增加了对BINBYTES8操作码的支持。在C实现中,对于BINUNICODE8和BINBYTES8操作码的64位大小的高32位不再在32位平台上被静默忽略。
bpo-25034: 修复了string.Formatter在自动编号和嵌套format_specs时的问题。由Anthon van der Neut提供补丁。
bpo-25233: 重写了asyncio.Queue和asyncio.Semaphore的内部实现,使其更加易懂和正确。
bpo-25203: 失败的 readline.set_completer_delims() 不再使模块处于不一致状态。
bpo-23600: tzinfo.fromutc() 的默认实现在某些情况下返回了错误的结果。
bpo-23329: 允许ssl模块与旧版本的LibreSSL一起构建。
防止_Unpickler_Read中的溢出。
bpo-25047: Element Tree写入的XML编码声明现在尊重用户给出的大小写。这恢复了以大写形式写入编码名称(如“UTF-8”)的能力,这在Python 2中是可行的。
bpo-25135: 通过在清除前清空deque来使deque_clear()更安全。这有助于避免可能的可重入性问题。
bpo-19143: platform模块现在从kernel32.dll读取Windows版本以避免兼容性垫片。
bpo-25092: 修复了当errno已经设置为EINVAL时datetime.strftime()失败的问题。
bpo-23517: 修复了datetime.datetime的fromtimestamp()和utcfromtimestamp()方法中的舍入问题:微秒现在被舍入到最接近的偶数(ROUND_HALF_EVEN),而不是向负无穷舍入(ROUND_FLOOR)。重要的是,这些方法使用与datetime.timedelta相同的舍入模式,以保持属性:(datetime(1970,1,1) + timedelta(seconds=t)) == datetime.utcfromtimestamp(t)。这也是round(float)使用的舍入模式。
bpo-25155: 修复了Windows上的datetime.datetime.now()和datetime.datetime.utcnow()以支持2038年之后的日期。这是在Python 3.5.0中引入的回归问题。
bpo-25108: 在没有参数的情况下调用traceback函数print_stack()、format_stack()和extract_stack()时省略内部帧。
bpo-25118: 修复了Python 3.5.0在Windows上os.waitpid()中的一个回归问题。
bpo-24684: socket.socket.getaddrinfo() 现在调用 PyUnicode_AsEncodedString() 而不是调用主机的 encode() 方法,以正确处理具有不返回字节字符串的 encode() 方法的自定义字符串。现在直接调用 IDNA 编解码器的编码器,而不是调用字符串的 encode() 方法。
bpo-25060: 正确计算 BUILD_MAP 操作码的堆栈使用情况。
bpo-24857: 现在将 call_args 与长序列比较时正确返回布尔结果,而不是引发异常。由 A Kaptur 提供补丁。
bpo-23144: 确保即使 convert_charrefs 为 True,HTMLParser.feed() 也能返回所有数据。
bpo-24982: 使用 "zip" 格式的 shutil.make_archive() 现在在 ZIP 文件中为目录(包括空目录)添加条目。
bpo-25019: 修复了由设置 expat 解析器的非字符串键引起的崩溃。基于 John Leitch 的补丁。
bpo-16180: 如果文件有语法错误,退出 pdb,而不是将用户困在无限循环中。由 Xavier de Gaye 提供补丁。
bpo-24891: 修复 Python 启动时如果标准输入(0)、标准输出(1)或标准错误(2)的文件描述符在 Python 创建 sys.stdin、sys.stdout 和 sys.stderr 对象时被关闭导致的竞态条件。如果对象创建失败,这些属性现在设置为 None,而不是引发 OSError 异常。初始补丁由 Marco Paolini 编写。
bpo-24992: 修复 collections.OrderedDict 构造函数中的错误处理和与垃圾收集相关的竞态条件。
bpo-24881: 在 Windows 和 Cygwin 上修复了 Python 实现的 FileIO 中设置二进制模式的问题。补丁来自 Akira Li。
bpo-25578: 修复 SSLSocket.getpeercer() 中的另一个内存泄漏问题。
bpo-25530: 默认情况下,在创建 ssl.SSLContext 时禁用易受攻击的 SSLv3 协议。
bpo-25569: 修复 SSLSocket.getpeercert() 中的内存泄漏问题。
bpo-25471: 从 accept() 返回的套接字不应显示为非阻塞。
bpo-25319: 当 threading.Event 被重新初始化时,底层条件应使用常规锁而不是递归锁。
bpo-21112: 修复 unittest.expectedFailure 在子类上的回归问题。补丁来自 Berker Peksag。
bpo-24764: cgi.FieldStorage.read_multi() 现在忽略部分头中的 Content-Length 头。补丁由 Peter Landry 编写,Pierre Quentel 审阅。
bpo-24913: 修复 deque.index() 中的溢出错误。由 John Leitch 和 Bryce Darling 发现。
bpo-24774: 修复 http.server.test 中的文档字符串。补丁来自 Chiu-Hsiang Hsu。
bpo-21159: 改进 configparser.InterpolationMissingOptionError 中的消息。补丁来自 Łukasz Langa。
bpo-20362: 在 assertRegex 中正确遵循 TestCase.longMessage。补丁来自 Ilia Kurenkov。
bpo-23572: 修复了 functools.singledispatch 在具有假值 (falsy) 元类的类上的行为。补丁由 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。
测试¶
构建¶
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-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
核心与内置函数¶
库¶
Python 3.5.0 rc1¶
发布日期: 2015-08-09
核心与内置函数¶
bpo-24667: 在所有底层字典调整大小的情况下调整odict的大小。
库¶
bpo-24824: codecs.encode()和codecs.decode()的签名现在与pydoc兼容。
bpo-24634: 在Windows上导入uuid不应该尝试加载libc
bpo-24798: _msvccompiler.py没有正确支持清单
bpo-4395: 更好的二进制运算符测试和文档。由Martin Panter提供补丁。
bpo-23973: 从GitHub仓库更新typing.py。
bpo-23004: mock_open()现在当read_data的类型是bytes时能正确读取二进制数据。初始由Aaron Hill提供补丁。
bpo-23888: 处理cookie过期时间中的小数时间。由ssh提供补丁。
bpo-23652: 使得可以针对Linux标准基础的libc头文件编译select模块,这些头文件不包含一些EPOLL宏。由Matt Frank提供补丁。
bpo-22932: 修复email.utils.formatdate中的时区问题。补丁来自Dmitry Shachnev。
bpo-23779: 如果认证器尝试中止,imaplib会引发TypeError。补丁来自Craig Holmquist。
bpo-23319: 修复ctypes.BigEndianStructure,正确交换字节。补丁由Matthieu Gautier编写。
bpo-23254: 记录如何关闭TCPServer监听套接字。补丁来自Martin Panter。
bpo-19450: 更新Windows和OS X安装程序构建以使用SQLite 3.8.11。
bpo-17527: 向wsgiref.validator添加PATCH。补丁来自Luca Sbardella。
bpo-24791: 修复调用语法 'g(*a or b)' 的语法回归问题。
IDLE¶
bpo-23672: 允许Idle编辑和运行名称中包含星体字符的文件。由Mohd Sanad Zaki Rizvi提供补丁。
bpo-24745: Idle编辑器默认字体。从Courier切换到平台敏感的TkFixedFont。这不应影响当前自定义的字体选择。如果存在问题,请编辑$HOME/.idlerc/config-main.cfg并从[Editor Window]中移除'
fontxxx'条目。由Mark Roseman提供补丁。bpo-21192: Idle编辑器。当运行文件时,将其名称放入重启栏。不打印虚假提示。原始由Adnan Umer提供补丁。
bpo-13884: Idle菜单。移除撕裂线。由Roger Serwy提供补丁。
文档¶
测试¶
bpo-24751: 当使用
-w命令行选项运行regrtest时,如果所有测试在重新运行时成功,则不再将测试运行标记为失败。
Python 3.5.0 beta 4¶
发布日期: 2015-07-26
核心与内置函数¶
库¶
bpo-23441: rcompleter现在打印一个制表符而不是显示空字的可能完成项。初始由Martin Sekera提供补丁。
bpo-24683: 修复了使用不适当类型的参数调用_json函数时的崩溃问题。
bpo-21697: shutil.copytree()现在正确处理指向目录的符号链接。由Eduardo Seabra和Thomas Kluyver提供补丁。
bpo-14373: 修复了在构建lru_cache(C实现)期间调用gc.collect()时出现的段错误。
bpo-24695: 修复了traceback.print_exception()中的一个回归问题。如果exc_traceback为None,我们不应该像文档中描述的那样打印回溯头。
bpo-24620: Random.setstate()现在验证state最后一个元素的值。
bpo-22485: 修复了导致
inspect.getsource在嵌套函数上返回不正确结果的问题。bpo-22153: 改进unittest文档。补丁来自Martin Panter和evilzero。
bpo-24580: 在re模式中,现在明确禁止对开放组的符号组引用以及数字组引用。
bpo-24206: 修复了inspect类的__eq__和__ne__方法。
bpo-24631: 修复了timeit模块中多行设置的回归问题。
bpo-18622: unittest.mock.mock_open().reset_mock 会无限递归。补丁来自 Nicola Palumbo 和 Laurent De Buyst。
bpo-23661: unittest.mock 的 side_effects 现在可以再次是异常。这是对 Python 3.4 的一个回归。补丁来自 Ignacio Rossi
bpo-24608: chunk.Chunk.read()现在总是返回字节,而不是str。
bpo-18684: 修复了re模块中读取缓冲区的问题。
bpo-24259: 如果存档在数据段内被截断,tarfile现在会引发ReadError。
bpo-15014: SMTP.auth()和SMTP.login()现在支持RFC 4954中SMTP AUTH命令的可选初始响应参数。
bpo-24669: 修复inspect.getsource()对于'async def'函数的问题。由Kai Groner提供补丁。
bpo-24688: ast.get_docstring()对于'async def'函数。
构建¶
bpo-24603: 更新Windows构建和OS X 10.5安装程序以使用OpenSSL 1.0.2d。
Python 3.5.0 beta 3¶
发布日期: 2015-07-05
核心与内置函数¶
bpo-24467: 修复了 bytearray 中可能的缓冲区越界读取问题。bytearray 对象现在总是为尾随的空字节分配空间,其缓冲区现在总是以空字符结尾。
升级到 Unicode 8.0.0。
bpo-24345: 为稳定 ABI 添加 Py_tp_finalize 插槽。
bpo-24400: 为 PEP 492 协程引入一个独特的类型;添加 types.CoroutineType, inspect.getcoroutinestate, inspect.getcoroutinelocals;协程不再使用 CO_GENERATOR 标志;sys.set_coroutine_wrapper 仅适用于 'async def' 协程;inspect.iscoroutine 不再使用 collections.abc.Coroutine,它旨在仅测试纯 'async def' 协程;添加新的操作码:GET_YIELD_FROM_ITER;修复 types.coroutine 中使用的生成器包装器为 collections.abc.Generator 的实例;collections.abc.Awaitable 和 collections.abc.Coroutine 不能再用于检测基于生成器的协程——请使用 inspect.isawaitable 代替。
bpo-24450: 向生成器添加 gi_yieldfrom 和向协程添加 cr_await。由 Benno Leslie 和 Yury Selivanov 贡献。
bpo-19235: 添加新的 RecursionError 异常。由 Georg Brandl 提供补丁。
库¶
bpo-21750: mock_open.read_data 现在可以从每个实例中读取,就像在 Python 3.3 中一样。
bpo-24552: 修复 _pickle 模块在错误情况下的释放后使用问题。
bpo-24514: tarfile 现在容忍仅由空白组成的数字字段。
bpo-19176: 修复了 ElementTree 的 C 实现中与 doctype() 相关的错误。XMLParser 子类不再发出带有默认 doctype() 方法的弃用警告。直接调用 doctype() 现在会发出警告。如果目标的 doctype() 被调用,解析器的 doctype() 现在不会被调用。基于 Martin Panter 的补丁。
bpo-20387: 在 tab 缩进的块中恢复 tokenize/untokenize 的语义往返正确性。
bpo-24456: 修复了 audioop 模块的 adpcm2lin() 和 lin2adpcm() 函数中可能的缓冲区越界读取问题。
bpo-24336: contextmanager装饰器现在可以与名为"func"和"self"的关键字参数的函数一起工作。由Martin Panter提供补丁。
bpo-24522: 修复json加速模块中可能的整数溢出问题。
bpo-24489: 确保先前设置的C errno不会干扰cmath.polar()。
bpo-24408: 修复了tkinter.Font的measure()和metrics()方法中的AttributeError。
bpo-14373: functools.lru_cache()的C实现现在可以与方法一起使用。
bpo-24347: 如果PyDict_GetItemWithError返回NULL,则设置KeyError。
bpo-24348: 删除多余的incref/decref。
bpo-24359: 在迭代期间检查OrderedDict大小的变化。
bpo-24368: 支持OrderedDict方法中的关键字参数。
bpo-24362: 简化C OrderedDict快速节点调整大小的逻辑。
bpo-24377: 修复OrderedDict.__repr__中的引用泄漏。
bpo-24369: 防御迭代期间的键变更。
测试¶
文档¶
构建¶
bpo-24432: 更新Windows构建和OS X 10.5安装程序以使用OpenSSL 1.0.2c。
Python 3.5.0 beta 2¶
发布日期: 2015-05-31
核心与内置函数¶
库¶
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 提供补丁。
测试¶
文档¶
工具/示例¶
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-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-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-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 不总是忽略多部分主体的整个前导部分的问题。
构建¶
C API¶
bpo-20204: 现在对于没有 __module__ 属性的内置类型会发出弃用警告。
Windows¶
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-22986: 在某些情况下允许更改对象的 __class__ 在动态类型和静态类型之间。
bpo-15859: PyUnicode_EncodeFSDefault(), PyUnicode_EncodeMBCS() 和 PyUnicode_EncodeCodePage() 现在如果对象不是 Unicode 对象则会引发异常。对于 PyUnicode_EncodeFSDefault(),在非 Windows 平台上已经是这种情况。补丁由 Campbell Barton 编写。
bpo-21408: 默认的 __ne__() 现在如果 __eq__() 返回 NotImplemented 则返回 NotImplemented。原始由 Martin Panter 提供补丁。
bpo-23321: 修复了当错误处理程序返回的替换字符串比畸形输入数据长时 str.decode() 中的崩溃。
bpo-22286: "backslashreplace" 错误处理程序现在可以用于解码和转换。
bpo-23253: 在Windows上延迟加载ShellExecute[AW]以减少os.startfile的启动开销。
bpo-22038: pyatomic.h现在使用stdatomic.h或GCC内置函数进行原子内存访问(如果可用)。补丁由Vitor de Lima和Gustavo Temple编写。
bpo-20284: 为bytes和bytearray添加了%-插值(即printf)格式化。
bpo-23048: 修复了在pdb中跳出无限while循环的问题。
bpo-20335: bytes构造函数现在在编码或错误与非字符串参数一起指定时引发TypeError。基于Renaud Blanch的补丁。
bpo-22834: 如果当前工作目录最终被设置为不存在的目录,则导入将不再引发FileNotFoundError。
bpo-22869: 将解释器启动和关闭代码移动到一个新的专用pylifecycle.c模块中。
bpo-22847: 提高方法缓存的效率。
bpo-22335: 修复在32位平台上尝试将bytearray扩大到0x7fffffff字节时的崩溃问题。
bpo-22653: 修复在调试模式下进行可重入字典插入时的断言失败。
bpo-22643: 修复Unicode大小写操作(大写、小写、标题、交换大小写、casefold)中的整数溢出问题。
bpo-17636: 现在支持涉及相对导入的循环导入。
bpo-22604: 修复在调试模式下将复数除以(nan+0j)时的断言错误。
bpo-21052: 当sys.path_hooks或sys.meta_path设置为None时,不引发ImportWarning。
bpo-16518: 在错误消息中使用'需要类似字节的对象',而不是之前使用的更为晦涩的"'x'不支持缓冲区协议"。
bpo-22470: 修复了"backslashreplace"、"xmlcharrefreplace"和"surrogatepass"错误处理程序中的整数溢出问题。
bpo-22540: 在第二个参数具有元类
type的常见情况下,加速PyObject_IsInstance和PyObject_IsSubclass。bpo-18711: 添加了一个新的
PyErr_FormatV函数,类似于PyErr_Format,但接受一个va_list参数。bpo-22520: 修复生成 unicode 对象 repr 时的溢出检查。
bpo-22519: 修复 PyBytes_Repr 中的溢出检查。
bpo-22518: 修复 latin-1 编码中的整数溢出问题。
bpo-16324: MIMEText 的 _charset 参数现在也接受 email.charset.Charset 实例。初始补丁由 Claude Paroz 提供。
bpo-1764286: 修复 inspect.getsource() 以支持装饰函数。由 Claudiu Popa 提供补丁。
bpo-18554: os.__all__ 包括 posix 函数。
bpo-21391: 在 shutil 模块中使用 os.path.abspath。
bpo-11471: 避免在 if 块的末尾生成 JUMP_FORWARD 指令,如果没有 else 子句。原始由 Eugene Toder 提供补丁。
bpo-22215: 现在当 str 或 bytes 参数包含不允许的空字符或字节时,会引发 ValueError 而不是 TypeError。
bpo-22258: 修复 Illumos 上的内部函数 set_inheritable()。该平台暴露了函数
ioctl(FIOCLEX),但调用它会失败,errno 是 ENOTTY: "Inappropriate ioctl for device"。set_inheritable() 现在回退到较慢的fcntl()(F_GETFD然后F_SETFD)。bpo-21389: 在绑定方法的 repr 中显示底层函数的 __qualname__。
bpo-22206: 使用 pthread 时,PyThread_create_key() 现在在整数溢出时将 errno 设置为 ENOMEM 并返回 -1(错误)。
bpo-20184: 为 30 个内置函数添加了基于 Argument Clinic 的签名内省。
bpo-22116: C 函数和方法('builtin_function_or_method' 类型)现在可以被弱引用。由 Wei Wu 提供补丁。
bpo-22077: 通过添加 'or slices' 改善 bytearrays、bytes、lists 和 tuples 的索引错误消息。为 bytearrays 添加了 ', not <typename>'。原始由 Claudiu Popa 提供补丁。
bpo-20179: 将 Argument Clinic 应用于 bytes 和 bytearray。由 Tal Einat 提供补丁。
bpo-22082: 清除 slotdefs 中的内部字符串。
升级 Unicode 数据库到 7.0.0 版本。
bpo-21897: 修复当 frame.clear() 被调用时带有闭包变量的 f_locals 属性的崩溃问题。
bpo-21205: 为生成器添加一个新的
__qualname__属性,即限定名称,并在生成器的表示中使用它(repr(gen))。生成器的默认名称(__name__属性)现在从函数中获取,而不是从代码中获取。使用gen.gi_code.co_name获取代码的名称。bpo-21669: 借助 SyntaxError.__init__ 中的启发式方法,解析器现在尝试在“exec”和“print”被用作语句时生成更有意义(或至少更搜索引擎友好)的错误消息。
bpo-21642: 在条件 if-else 表达式中,允许整数与
else关键字之间没有空格(例如True if 42else False)的写法作为有效语法。bpo-21523: 修复了编译器中一些操作码堆栈效应的过度悲观计算。这也修复了当编译包含大量“and”和“or”运算符的代码时明显的二次编译时间问题。
bpo-21418: 修复了在没有参数且没有当前帧(例如嵌入式 Python)时调用内置函数 super() 时的崩溃问题。
bpo-21425: 修复了交互式解释器中标准流的刷新问题。
bpo-21435: 在极少数情况下,对循环垃圾中的对象运行终结器时,由于内部迭代逻辑的微妙缺陷,可能会发生错误的指针解引用。
bpo-21377: PyBytes_Concat() 现在尝试在第一个参数的引用计数为1时原地连接。由 Nikolaus Rath 提供补丁。
bpo-20355: -W 命令行选项现在比 PYTHONWARNINGS 环境变量具有更高的优先级。由 Arfrever 提供补丁。
bpo-21274: 在 Python/pythonrun.c 中为 GNU/Hurd 定义 PATH_MAX。
bpo-20904: 支持在 m68k 上设置 FPU 精度。
bpo-21209: 修复使用 yield from 语法向自定义生成器对象发送元组的问题。
bpo-21193: 当 b 为负数时,pow(a, b, c) 现在会引发 ValueError 而不是 TypeError。补丁由 Josh Rosenberg 提供。
bpo-21176: PEP 465: 为矩阵乘法添加'@'运算符。
bpo-21134: 修复在未初始化的UnicodeEncodeError、UnicodeDecodeError或UnicodeTranslateError对象上调用str时出现的段错误。
bpo-19537: 修复m68k下PyUnicode_DATA()的对齐问题。由Andreas Schwab提供补丁。
bpo-20929: 添加类型转换以避免负数移位。
bpo-20731: 即使以文本模式打开,也能正确定位源代码文件中的位置。由Serhiy Storchaka提供补丁。
bpo-20637: 键共享现在也适用于子类的实例字典。由Peter Ingebretson提供补丁。
bpo-8297: 模块中缺失的属性现在在错误文本中包含模块名称。原始由ysj.ray提供补丁。
bpo-19995: %c、%o、%x和%X现在对非整数输入引发TypeError。
bpo-19655: ASDL解析器 - 用于构建过程中生成用于在C中管理Python AST的代码 - 被重写。新解析器是自包含的,不需要携带spark.py解析器生成器库;spark.py已从源代码库中移除。
bpo-12546: 允许在使用str、int、float和complex的__format__方法时使用
\x00作为填充字符。bpo-20480: 添加ipaddress.reverse_pointer。由Leon Weber提供补丁。
bpo-13598: 修改string.Formatter以支持替换字段的自动编号。现在在这方面它与str.format()的行为相匹配。由Phil Elson和Ramchandra Apte提供补丁。
bpo-8931: 使类型'c'的替代格式('#')引发异常。在3.5之前的版本中,'#'与'c'一起使用没有效果。现在指定它是一个错误。由Torsten Landschoff提供补丁。
bpo-23165: 在_Py_char2wchar函数中分配内存之前执行溢出检查。
库¶
bpo-23399: pyvenv尽可能创建相对符号链接。
bpo-20289: cgi.FieldStorage()现在支持上下文管理协议。
bpo-13128: 当debuglevel > 0时,打印CONNECT请求的响应头。由Demian Brecht提供补丁。
bpo-15381: 优化了 io.BytesIO 以减少分配和复制操作。
bpo-22818: 现在,对可能匹配空字符串的模式进行拆分时会发出警告。只能匹配空字符串的模式现已被拒绝。
bpo-23099: 现在拒绝关闭带有导出缓冲区的 io.BytesIO,以防止损坏导出的缓冲区。
bpo-23326: 移除了 __ne__ 实现。由于在 bpo-21408 中修复了默认的 __ne__ 实现,它们现在是多余的。
bpo-23363: 修复了 itertools.permutations 中可能的溢出问题。
bpo-23364: 修复了 itertools.product 中可能的溢出问题。
bpo-23366: 修复了 itertools.combinations 中可能的整数溢出问题。
bpo-23369: 修复了 _json.encode_basestring_ascii 中可能的整数溢出问题。
bpo-23353: 修复了 PyEval_EvalFrameEx() 中生成器的异常处理。在入口处,即使 PyEval_EvalFrameEx() 以 throwflag=0 调用,也会保存或交换异常状态。在退出时,异常状态现在总是被恢复或交换,不仅当 why 是 WHY_YIELD 或 WHY_RETURN 时。补丁由 Antoine Pitrou 共同编写。
bpo-14099: 恢复了对可定位但不可寻址流的 ZIP 文件写入支持。
bpo-14099: 现在,写入 ZipFile 和读取多个 ZipExtFiles 是线程安全的。
bpo-19361: JSON 解码器现在引发 JSONDecodeError 而不是 ValueError。
bpo-18518: timeit 现在拒绝不能在函数或循环外编译的语句(例如 "return" 或 "break")。
bpo-23094: 修复了 pickle 的 Python 实现中带有帧的 readline 问题。
bpo-23268: 修复了 ipaddress 类比较中的错误。
bpo-21408: 移除了不正确的 __ne__() 实现,这些实现在 __eq__() 返回 NotImplemented 时没有返回 NotImplemented。现在默认的 __ne__() 工作正常。
bpo-19996:
email.feedparser.FeedParser现在处理(格式错误的)没有键的头部,而不是假设主体已经开始。bpo-20188: 在ssl模块中支持应用层协议协商(ALPN)。
bpo-23133: ipaddress对象的pickle现在生成更紧凑且可移植的表示。
bpo-23248: 从最新的OpenSSL git master更新ssl错误代码。
bpo-23266: 当存在许多非连续地址时,ipaddress.collapse_addresses()的实现速度大幅提升。
bpo-23098: os模块现在支持64位的dev_t。
bpo-21817: 当提交给ProcessPoolExecutor的任务中抛出异常时,现在会在父进程中显示远程回溯。由Claudiu Popa提供补丁。
bpo-15955: 添加一个选项以限制解压LZMA数据时的输出大小。由Nikolaus Rath和Martin Panter提供补丁。
bpo-23250: 在http.cookies模块中,将"HttpOnly"和"Secure"按照标准中的写法大写。
bpo-23063: 在distutils的check命令中,修复带有code或code-block指令的reST的解析。
bpo-23209: 如果选择器已关闭,selectors.BaseSelector.get_key()现在会抛出RuntimeError。并且selectors.BaseSelector.close()现在会清除其对选择器映射的内部引用以打破引用循环。初始补丁由Martin Richard编写。(另见:bpo-23225)
bpo-17911: 提供一种方式来为PEP-302模块的linecache播种,而无需实际加载代码。
bpo-17911: 为traceback提供一个新的对象API,包括能够不在回溯实际渲染之前查找行,且不保留原始对象的任何痕迹。
bpo-19777: 在Path对象上提供一个home()类方法。由Victor Salgado和Mayank Tripathi贡献。
bpo-23206: 使
json.dumps(..., ensure_ascii=False)与默认情况ensure_ascii=True一样快。由Naoki Inada提供补丁。bpo-23185: 添加math.inf和math.nan常量。
bpo-23186: 添加 ssl.SSLObject.shared_ciphers() 和 ssl.SSLSocket.shared_ciphers() 以获取客户端在握手时发送的加密套件列表。
bpo-23143: 移除对早于0.9.8版本的OpenSSL的兼容性支持。
bpo-23132: 改进由functool.total_ordering创建的比较方法的性能和内省支持。
bpo-19776: 在Path对象上添加expanduser()方法。
bpo-23112: 修复SimpleHTTPServer在重定向添加尾部斜杠时正确携带查询字符串和片段的问题。
bpo-21793: 添加了http.HTTPStatus枚举(例如HTTPStatus.OK, HTTPStatus.NOT_FOUND)。补丁由Demian Brecht提供。
bpo-23093: 在io模块中,允许更多操作在已分离的流上工作。
bpo-23111: 在ftplib中,使ssl.PROTOCOL_SSLv23成为默认协议版本。
bpo-22585: 在OpenBSD 5.6及更新版本上,os.urandom()现在调用getentropy(),而不是读取/dev/urandom,来获取伪随机字节。
bpo-19104: pprint现在为包装的字符串生成可评估的输出。
bpo-23071: 向codecs.__all__添加了缺失的名称。由Martin Panter提供补丁。
bpo-22783: 如果可能,Pickling现在使用NEWOBJ操作码而不是NEWOBJ_EX操作码。
bpo-15513: 为pickle类添加了__sizeof__实现。
bpo-19858: pickletools.optimize()现在能够识别MEMOIZE操作码,可以生成更紧凑的结果,并且在输入数据包含与PUT或BINPUT操作码一起的MEMOIZE操作码时不再生成无效输出。
bpo-22095: 修复了HTTPConnection.set_tunnel的默认端口问题。主机头中的端口值被设置为"None"。由Demian Brecht提供补丁。
bpo-23016: 当程序使用pythonw.exe运行时,警告不再产生AttributeError。
bpo-21775: shutil.copytree(): 修复在复制到VFAT时崩溃的问题。异常处理程序假设OSError对象总是有'winerror'属性。但事实并非如此,因此在Linux(以及任何其他非Windows操作系统)上运行时,异常处理程序本身会引发AttributeError。由Greg Ward提供补丁。
bpo-1218234: 修复inspect.getsource()以加载重新加载模块的更新源代码。初始由Berker Peksag提供补丁。
bpo-21740: 在doctest中支持包装的可调用对象。由Claudiu Popa提供补丁。
bpo-23009: 确保selectors.EpollSelector.select()在没有FD注册时也能工作。
bpo-22959: 在http.client.HTTPSConnection的构造函数中,优先使用上下文的check_hostname属性而不是 check_hostname 参数。
bpo-22696: 添加函数
sys.is_finalizing()以了解解释器关闭状态。bpo-16043: 为xmlrpclib.gzip_decode返回的数据量添加默认限制。这解决了 CVE-2013-1753。
bpo-14099: ZipFile.open()不再重新打开底层文件。ZipFile.open()返回的对象现在可以独立于ZipFile操作,即使ZipFile是通过将类似文件的对象作为构造函数的第一个参数传递而创建的。
bpo-22966: 修复当pyc_compile被要求编译包含源文件名中多个点的源文件时,__pycache__ pyc文件名冲突的问题。
bpo-21971: 更新turtledemo文档并将模块添加到索引中。
bpo-21032: 修复如果HTTPConnection.getresponse()失败时的套接字泄漏问题。原始由Martin Panter提供补丁。
bpo-22407: 弃用re.LOCALE标志与str模式或re.ASCII一起使用。它从未工作过。
bpo-22902: 在 Linux 上现在会使用 "ip" 命令在 uuid.getnode() 中确定 MAC 地址。 由 Bruno Cauet 编写补丁。
bpo-22960: 向xmlrpclib.ServerProxy构造函数添加上下文参数。
bpo-22389: 添加contextlib.redirect_stderr()。
bpo-21356: 使 ssl.RAND_egd() 成为可选项以支持 LibreSSL。该函数的可用性在编译期间进行检查。补丁由 Bernard Spil 编写。
bpo-22915: SAX 解析器现在支持通过文件描述符或字节路径打开的文件。
bpo-22609: collections 模块中的映射类的构造函数和更新方法现在接受 self 关键字参数。
bpo-22940: 添加 readline.append_history_file。
bpo-19676: 添加了 "namereplace" 错误处理程序。
bpo-22788: 向 logging.handlers.HTTPHandler 添加 context 参数。
bpo-22921: 允许 SSLContext 接受 hostname 参数,即使 OpenSSL 不支持 SNI。
bpo-22894: TestCase.subTest() 在 failfast 模式下会导致测试套件停止,即使没有失败。
bpo-22796: HTTP cookie 解析现在更加严格,以防范潜在的注入攻击。
bpo-22370: pathlib 中的 Windows 检测现在更加健壮。
bpo-22841: 在 asyncio add_signal_handler() 中拒绝协程。由 Ludovic.Gasc 提供补丁。
bpo-19494: 添加了 urllib.request.HTTPBasicPriorAuthHandler。由 Matej Cepl 提供补丁。
bpo-22578: 向 re.error 类添加了属性。
bpo-22849: 修复了 io.TextIOWrapper 构造函数中可能的双重释放问题。
bpo-12728: 现在在不区分大小写的正则表达式中匹配具有相同大写但不同小写的不同 Unicode 字符。
bpo-22821: 修复了在 64 位大端平台上使用整数参数的 fcntl()。
bpo-21650: 向
json.toolCLI 添加了一个--sort-keys选项。bpo-22824: 更新了 reprlib 中集合的输出格式以使用集合字面量。补丁由 Berker Peksag 贡献。
bpo-22824: 更新了 reprlib 中数组的输出格式,以显示没有不必要空列表的空数组。建议由 Serhiy Storchaka 提出。
bpo-22406: 修复了错误移植到 3.x 的 uu_codec 编解码器。基于 Martin Panter 的补丁。
bpo-17293: uuid.getnode() 现在在 AIX 上使用 netstat 确定 MAC 地址。基于 Aivars Kalvāns 的补丁。
bpo-22769: 修复了 ttk.Treeview.tag_has() 在没有参数调用时的问题。
bpo-22417: 在 httplib 中默认验证证书 (PEP 476)。
bpo-22775: 修复了使用协议 2 及以上版本对 http.cookies.SimpleCookie 的反序列化。补丁由 Tim Graham 提供。
bpo-22776: 在 SysLogHandler.emit() 中将排除的代码移至 try 块的作用域内。
bpo-22665: 将缺失的 get_terminal_size 和 SameFileError 添加到 shutil.__all__。
bpo-6623: 移除了 ftplib 模块中已弃用的 Netrc 类。由 Matt Chaput 提供补丁。
bpo-17381: 修复了正则表达式中不区分大小写范围的处理。
bpo-22410: re 模块中的模块级函数现在会缓存考虑到区域的依赖于区域设置的编译后的正则表达式。
bpo-22759: pathlib.Path() 上的查询方法 (exists(), is_dir() 等) 现在在底层 stat 调用引发 NotADirectoryError 时返回 False。
bpo-8876: distutils 现在在硬链接不起作用时回退到复制文件。这允许使用如 VirtualBox 共享文件夹这样的特殊文件系统。
bpo-22217: 实现了 zipfile 模块中类的 reprs。
bpo-22457: 在发现的 start_dir 中尊重 load_tests。
bpo-18216: gettext 现在在 .mo 文件有不受支持的主版本号时引发错误。由 Aaron Hill 提供补丁。
bpo-13918: 提供了一个 locale.delocalize() 函数,可以从表示数字的字符串中移除区域特定的数字格式,而不将其转换为特定类型。由 Cédric Krier 提供补丁。
bpo-22676: 使没有 __module__ 属性的全局对象的序列化不那么慢。
bpo-18853: 修复了 shlex.__nain__ 中的 ResourceWarning。
bpo-9351: 使用 set_defaults 在 argparse 子解析器上设置的默认值不再在父解析器上也设置时被忽略。
bpo-7559: unittest 测试加载时的 ImportErrors 现在会在导入失败后作为导入异常报告,而不是属性错误。
bpo-19746: 使得无需执行测试套件即可检查 unittest 发现过程中的错误。
TestLoader的新errors属性暴露了在发现过程中遇到的这些非致命错误。bpo-21991: 使 email.headerregistry 的头 'params' 属性变为只读(MappingProxyType)。之前字典是可修改的,但每次访问属性时都会创建一个新的字典。
bpo-22638: 现在整个标准库中 SSLv3 已被禁用。仍然可以通过手动实例化 SSLContext 来启用它。
bpo-22641: 在 asyncio 中,客户端连接的默认 SSL 上下文现在使用 ssl.create_default_context() 创建,以提高安全性。
bpo-17401: 在 io.FileIO 的 repr 中包含 closefd。
bpo-21338: 为 compileall 添加静默模式。compile_{dir, file, path} 函数的 quiet 参数现在具有多级值。此外,CLI 的 -q 选项现在也具有多级值。由 Thomas Kluyver 提供补丁。
bpo-20152: 将 array 和 cmath 模块转换为 Argument Clinic。
bpo-18643: 在 Windows 上添加 socket.socketpair()。
bpo-22435: 修复 socketserver 绑定失败时的文件描述符泄漏问题。
bpo-13096: 修复了 CTypes POINTER 处理大值时出现的段错误。
bpo-11694: 如文档所述,在 xdrlib 中引发 ConversionError。由 Filip Gruszczyński 和 Claudiu Popa 提供补丁。
bpo-19380: 优化了正则表达式的解析。
bpo-1519638: 现在在 re.sub() 和 re.subn() 中,未匹配的组将被空字符串替换。
bpo-18615: sndhdr.what/whathdr 现在返回一个 namedtuple。
bpo-22462: 修复 pyexpat 创建虚拟帧以使其出现在异常回溯中的问题。
bpo-21965: 为 ssl 模块添加对内存中 SSL 的支持。由 Geert Jansen 提供补丁。
bpo-21173: 修复了在调用.clear()时有迭代器存活时,对WeakKeyDictionary的len()操作的问题。
bpo-11866: 消除了新线程名称计算中的竞态条件。
bpo-21905: 在迭代过程中当sys.modules被修改时,避免pickle.whichmodule()中的RuntimeError。由Olivier Grisel提供补丁。
bpo-11271: concurrent.futures.Executor.map()现在接受一个 chunksize 参数,允许在子进程中批量处理任务并提高ProcessPoolExecutor的性能。由Dan O'Reilly提供补丁。
bpo-21883: os.path.join()和os.path.relpath()现在对于不支持或参数类型不匹配的情况,会抛出带有更有帮助的错误信息的TypeError。
bpo-22219: zipfile模块的命令行接口现在为ZIP文件中的目录(包括空目录)添加条目。
bpo-22449: 在ssl.SSLContext.load_default_certs中,在Windows上查询环境变量SSL_CERT_DIR和SSL_CERT_FILE。
bpo-22508: 移除了email.__version__变量;email代码不再与标准库分开提供,并且__version__在多个版本中未更新。
bpo-20076: 向语言环境别名表添加了非派生的UTF-8别名。
bpo-20079: 向语言环境别名表添加了glibc 2.18支持的语言环境。
bpo-20218: 向pathlib.Path对象添加了便利方法read_text/write_text和read_bytes/write_bytes。
bpo-22396: 在32位AIX平台上,不暴露os.posix_fadvise()和os.posix_fallocate(),因为它们在系统头文件中的原型是错误的。
bpo-22517: 当io.BufferedRWPair对象被析构时,清除其弱引用。
bpo-22437: 正则表达式中的捕获组数量不再限制为100。
bpo-17442: InteractiveInterpreter现在在其showtraceback方法中显示完整的链式回溯,以匹配内置的交互式解释器。
bpo-23392: 添加了与FILE*一起工作的marshal C API的测试。
bpo-10510: distutils的register和upload方法现在使用符合HTML标准的CRLF行尾。
bpo-9850: 修复了macpath.join()对于空的第一组件的问题。由Oleg Oshmyan提供补丁。
bpo-5309: distutils的build和build_ext命令现在接受一个
-j选项以启用扩展模块的并行构建。bpo-22448: 改进取消的定时器句柄清理以防止无限制的内存使用。补丁由Joshua Moore-Oliva提供。
bpo-22427: 当在生成器中使用with语句时,TemporaryDirectory不再尝试两次清理。
bpo-22362: 禁止在正则表达式中使用超出0-0o377范围的模糊八进制转义。
bpo-20912: 现在添加到ZIP文件的目录具有正确的Unix和MS-DOS目录属性。
bpo-21866: 如果allowZip64为false,ZipFile.close()不再写入ZIP64中央目录记录。
bpo-22278: 修复了urljoin在处理相对URL时的问题,这是在提交issue22118的更改后观察到的回归。
bpo-22415: 修复了re模块中GROUPREF_EXISTS操作码的调试输出。移除了调试输出中的尾随空格。
bpo-22423: 线程中的未处理异常不再导致当sys.stderr为None时未处理的AttributeError。
bpo-21332: 确保subprocess.Popen()中的
bufsize=1选择行缓冲,而不是块缓冲。由Akira Li提供补丁。bpo-21091: 修复API错误:email.message.EmailMessage.is_attachment现在是一个方法。
bpo-21079: 修复email.message.EmailMessage.is_attachment以在头部既有参数又有值时返回正确的结果。
bpo-22247: 将NNTPError添加到nntplib.__all__。
bpo-22366: urllib.request.urlopen将接受一个上下文对象(SSLContext)作为参数,该对象将用于HTTPS连接。由Alex Gaynor提供补丁。
bpo-4180: 当过滤器被修改时,警告注册表现在被重置。
bpo-22419: 限制 wsgiref 服务器中传入 HTTP 请求的长度为 65536 字节,对于超出此长度的请求发送 414 错误代码。由 Devin Cook 提供补丁。
http.cookies 中的宽松 cookie 解析在与某些网页浏览器的非标准 cookie 处理结合使用时可能成为安全问题。由 Sergey Bobrov 报告。
bpo-20537: 日志记录方法现在接受异常实例以及布尔值或异常元组。感谢 Yury Selivanov 提供的补丁。
bpo-22384: 当使用 pythonw.exe 运行时,Tkinter 回调中的异常不再导致程序崩溃。
bpo-22168: 在 OS X 上使用非默认 Canvas 时防止 turtle 的 AttributeError。
bpo-21147: 如果请求包含空字符,sqlite3 现在会引发异常而不是截断它。基于 Victor Stinner 的补丁。
bpo-13968: glob 模块现在支持使用
**模式在子目录中进行递归搜索。bpo-21951: 修复了在 AIX 上当使用空字符串或元组参数调用 Tcl 命令时 Tkinter 的崩溃问题。
bpo-21951: 如果内存分配失败,Tkinter 现在更可能引发 MemoryError 而不是崩溃。
bpo-22338: 修复了 json 模块在内存分配失败时的崩溃问题。
bpo-12410: imaplib.IMAP4 现在支持上下文管理协议。原始由 Tarek Ziadé 提供补丁。
bpo-21270: 我们现在在 mock.call 对象中覆盖元组方法,以便它们可以用作普通的调用属性。
bpo-16662: 当
load_tests()存在于包的__init__.py中时,现在无条件运行。TestLoader.loadTestsFromModule()仍然接受 use_load_tests,但它已被弃用并被忽略。新增并文档化了一个仅关键字的属性pattern。由 Robert Collins 提供补丁,Barry Warsaw 进行了调整。bpo-22226: Treeview.heading() 的结果中 "status" 键的第一个字母不再被剥离。
bpo-19524: 修复了在接收到无效响应时HTTP连接的资源泄漏问题。由Martin Panter提供补丁。
bpo-20421: 向SSL套接字添加了.version()方法,暴露实际使用的协议版本。
bpo-19546: configparser异常不再暴露实现细节。移除了链式KeyErrors,使得跟踪回溯更加清晰。由Claudiu Popa提供补丁。
bpo-22051: turtledemo不再重新加载示例来重新运行它们。变量初始化和GUI设置应该在main()中完成,每次运行演示时都会调用main(),但不会在导入时调用。
bpo-21933: Turtledemo用户可以通过菜单选择或控制(command) '-'或'+'或控制鼠标滚轮来更改代码字体大小。原始由Lita Cho提供补丁。
bpo-21597: 现在可以通过鼠标抓取和拖动turtledemo文本窗格和绘图画布之间的分隔符。可以加宽代码文本窗格以便轻松查看或复制文本的完整宽度。在小屏幕上可以加宽画布。原始由Jan Kanis和Lita Cho提供补丁。
bpo-18132: 当窗口缩小时,Turtledemo按钮不再消失。原始由Jan Kanis和Lita Cho提供补丁。
bpo-22043: time.monotonic() 现在总是可用。
threading.Lock.acquire()、threading.RLock.acquire()和套接字操作现在在使用超时时使用单调时钟,而不是系统时钟。bpo-21527: 向ThreadPoolExecutor添加了默认的工作线程数,等于CPU数量的5倍。由Claudiu Popa提供补丁。
bpo-22216: smtplib现在在退出后更完全地重置其状态。之前行为的最明显后果是在connect/starttls/quit/connect/starttls序列中的STARTTLS失败。
bpo-22098: ctypes的BigEndianStructure和LittleEndianStructure现在定义了一个空的__slots__,这样子类不会总是得到一个实例字典。由Claudiu Popa提供补丁。
bpo-22185: 修复了threading.Condition.wait()中因不持有锁而修改等待队列导致的偶尔出现的RuntimeError。由Doug Zongker提供补丁。
bpo-22287: 在UNIX上,_PyTime_gettimeofday()现在使用clock_gettime(CLOCK_REALTIME)(如果可用)。作为副作用,Python现在在Solaris和Linux上(仅glibc版本低于2.17时)依赖于librt库。
bpo-22182: 在distutils.file_util.move_file中正确使用e.args来解包异常。由Claudiu Popa提供补丁。
webbrowser模块现在使用subprocess的start_new_session=True,而不是潜在风险的preexec_fn=os.setsid调用。
bpo-22042: 如果文件描述符处于阻塞模式,signal.set_wakeup_fd(fd)现在会引发异常。
bpo-16808: inspect.stack()现在返回一个命名元组而不是元组。由Daniel Shahaf提供补丁。
bpo-22236: 修复了在NoDefaultRoot模式下的Tkinter图像复制操作。
bpo-2527: 向timeit函数添加了一个 globals 参数,以便覆盖执行定时代码的全局命名空间。补丁由Ben Roberts提供。
bpo-22118: 将urllib.parse切换到使用RFC 3986语义解析相对URL,而不是RFCs 1808和2396。补丁由Demian Brecht提供。
bpo-21549: 向TarFile.list()添加了“members”参数。
bpo-19628: 允许通过-r选项指定compileall的递归深度。
bpo-15696: 为Windows上的mmap对象添加了__sizeof__实现。
bpo-22068: 避免了Tkinter中Variables和Fonts的引用循环。
bpo-22165: SimpleHTTPRequestHandler现在支持不可解码的文件名。
bpo-15381: 优化了io.BytesIO中的行读取。
bpo-8797: 在基本认证失败时立即引发HTTPError。初始由Sam Bull提供补丁。
bpo-20729: 恢复了mailbox模块中lazy iterkeys()/itervalues()/iteritems()的使用。
bpo-21448: 更改了 FeedParser 的 feed() 方法,以避免在解析长行时的 O(n2) 行为。 最初由 Raymond Hettinger 编写补丁。
bpo-22184: 当用户忘记必需的参数时,functools LRU Cache装饰器工厂现在会提供更早更清晰的错误信息。
bpo-17923: 在AIX上,以斜杠结尾的glob()模式不再匹配非目录。基于Delhallt的补丁。
bpo-21725: 在smtpd中添加了对RFC 6531(SMTPUTF8)的支持。
bpo-22176: 将ctypes模块的libffi更新到v3.1。此版本增加了对Linux AArch64和POWERPC ELF ABIv2小端架构的支持。
bpo-5411: 在shutil模块中添加了对"xztar"格式的支持。
bpo-21121: 不再强制第三方C扩展使用-Werror=declaration-after-statement构建。
bpo-21975: 修复了使用未初始化的sqlite3.Row(特别是在解pickle pickled sqlite3.Row时)时的崩溃问题。sqlite3.Row现在在__new__()方法中初始化。
bpo-20170: 将posixmodule转换为使用Argument Clinic。
bpo-21539: 向
Pathlib.mkdir()添加了一个 exists_ok 参数,以模拟mkdir -p和os.makedirs()的功能。 当为真时,忽略FileExistsErrors。 由 Berker Peksag 提供补丁。bpo-22127: 在socket模块中绕过IDNA处理纯ASCII主机名(特别是数字IP)。
bpo-21047: 将HTMLParser的 convert_charrefs 参数的默认值设置为True。由Berker Peksag提供补丁。
在 html.entities 包中增加 __all__ 变量。
bpo-15114: HTMLParser的严格模式和参数,HTMLParser.error,以及HTMLParserError异常已被移除。
bpo-22085: 在Tkinter中放弃了对Tk 8.3的支持。
bpo-21580: 现在Tkinter正确处理传递给Tk的字节参数。特别是这允许从二进制数据初始化图像。
bpo-22003: 当从字节对象初始化时,io.BytesIO()现在延迟复制直到它被修改,从而在某些用例中提高了性能和内存使用。由David Wilson提供补丁。
bpo-22018: 在Windows上,signal.set_wakeup_fd()现在也支持套接字。一个副作用是Python依赖于WinSock库。
bpo-22054: 添加 os.get_blocking() 和 os.set_blocking() 函数以获取和设置文件描述符的阻塞模式(如果设置了 O_NONBLOCK 标志则为 False,否则为 True)。这些函数在 Windows 上不可用。
bpo-17172: 即使在通过子进程运行时,也使 turtledemo 在 OS X 上作为活动状态启动。补丁由 Lita Cho 提供。
bpo-21704: 当信号量不可用时,修复 _multiprocessing 的构建错误。由 Arfrever Frehtes Taifersar Arahesis 提供补丁。
bpo-20173: 将 sha1、sha256、sha512 和 md5 转换为 ArgumentClinic。由 Vajrasky Kok 提供补丁。
修复 Windows 64 位上的 repr(_socket.socket):不要在关闭的套接字上因 OverflowError 而失败。repr(socket.socket) 已经工作良好。
bpo-22033: 大多数 Python 实现的类的 repr 现在包含实际的类名而不是硬编码的名称。
bpo-21947: dis 模块现在可以根据 generator-iterator 对象的 gi_code 属性对其进行反汇编。由 Clement Rouault 提供补丁。
bpo-16133: asynchat.async_chat.handle_read() 方法现在忽略 BlockingIOError 异常。
bpo-22044: 修复了 call_tzinfo_method 中的过早 DECREF。由 Tom Flanagan 提供补丁。
bpo-19884: readline:如果标准输出不是终端,则禁用元修饰键,以避免将 ANSI 序列
"\033[1034h"写入标准输出。此序列用于某些终端(例如:TERM=xterm-256color)以启用 8 位字符支持。bpo-4350: 移除了许多长期过时且不工作的 Tkinter 方法。
bpo-6167: Scrollbar.activate() 现在在未指定参数时返回活动元素的名称。Scrollbar.set() 现在总是只接受 2 个参数。
bpo-15275: 清理并加速 ntpath 模块。
bpo-21888: plistlib 的 load() 和 loads() 现在在指定 fmt 参数时可以工作。
bpo-22032: 现在总是使用 __qualname__ 而不是 __name__ 来格式化 Python 实现的类的完全限定类名。
bpo-22031: 当包含形如" at 0x..."的id时,Reprs现在总是使用带有"0x"前缀的十六进制格式。
bpo-22018: signal.set_wakeup_fd()现在在
fstat()失败时引发OSError而不是ValueError。bpo-21044: tarfile.open()现在可以处理具有整数'name'属性的fileobj。基于Antoine Pietri的补丁。
bpo-21966: 当运行代码模块时,尊重-q命令行选项。
bpo-19076: 不再向self.error()传递冗余的'file'参数。
bpo-16382: 改进了warnings.warn()对于错误类别的异常消息。初始由Phil Elson提供补丁。
bpo-21932: os.read()现在使用
Py_ssize_t()类型而不是 int 来支持一次性读取超过2GB的数据。在Windows上,大小被截断为INT_MAX。如同任何对os.read()的调用,操作系统可能读取的字节数少于请求的字节数。bpo-21942: 修复了Windows上pydoc服务器模式下查看源文件的问题。
bpo-11259: asynchat.async_chat().set_terminator()现在如果接收到的字节数为负值时会引发ValueError。
bpo-12523: asynchat.async_chat.push()现在如果没有接收到字节字符串时会引发TypeError。
bpo-21707: 向ModuleFinder.replace_paths_in_code()添加了缺失的kwonlyargcount参数。
bpo-20639: 调用Path.with_suffix('')允许再次移除后缀。由July Tikhonov提供补丁。
bpo-21714: 禁止使用Path.with_name()构造无效路径。原始由Antony Lee提供补丁。
bpo-15014: 向smtplib添加了'auth'方法以使实现认证机制更简单,并在login方法内部使用它。
bpo-21151: 修复了当向SetValueEx传递
None作为REG_BINARY值时winreg模块中的段错误。由John Ehresman提供补丁。bpo-21090: io.FileIO.readall()不再忽略I/O错误。在此之前,如果至少第一次C调用read()成功,它会忽略I/O错误。
bpo-5800: wsgiref.headers.Headers 的 headers 参数现在是可选的。初始由 Pablo Torres Navarrete 和 SilentGhost 提供补丁。
bpo-21781: ssl.RAND_add() 现在支持超过 2 GB 的字符串。
bpo-21679: 防止在 open() 过程中进行多余的 fstat() 调用。由 Bohuslav Kabrda 提供补丁。
bpo-21863: cProfile 现在除了显示 C 扩展函数的名称外,还会显示其模块名。
bpo-11453: asyncore: 当未关闭的 file_wrapper 对象被销毁时发出 ResourceWarning。现在析构函数会在需要时关闭文件。close() 方法现在可以被调用两次:第二次调用不做任何操作。
bpo-21858: 在 sqlite3 模块中更好地处理 Python 异常。
bpo-21476: 确保 email.parser.BytesParser TextIOWrapper 在解析后被丢弃,这样输入文件不会意外关闭。
bpo-20295: imghdr 现在可以识别 OpenEXR 格式的图像。
bpo-21729: 在 dbm.dumb 模块中使用 "with" 语句确保文件关闭。补丁由 Claudiu Popa 提供。
bpo-21491: socketserver: 修复子进程回收中的一个竞争条件。
bpo-21719: 在 Windows 上为 os.stat_result 添加了
st_file_attributes字段。bpo-21832: 要求命名元组的输入必须是确切的字符串。
bpo-21722: distutils 的 "upload" 命令现在在上传失败时以非零返回码退出。由 Martin Dengler 提供补丁。
bpo-21723: asyncio.Queue: 支持任何类型的数字(例如浮点数)作为最大大小。补丁由 Vajrasky Kok 编写。
bpo-21711: 现在已从 site 模块中移除了对 "site-python" 目录的支持(已在 3.4 中弃用)。
bpo-17552: 新的 socket.sendfile() 方法允许通过 UNIX 上的高性能 os.sendfile() 发送文件。由 Giampaolo Rodola' 提供补丁。
bpo-18039: dbm.dump.open() 现在当标志值为 'n' 时总是创建一个新的数据库。由 Claudiu Popa 提供补丁。
bpo-21326: 向asyncio.BaseEventLoop添加了一个新的is_closed()方法。如果事件循环已关闭,asyncio.BaseEventLoop的run_forever()和run_until_complete()方法现在会抛出异常。
bpo-21766: 通过在检查路径是否为CGI脚本之前对路径进行URL解码,防止了CGIHTTPServer中的安全漏洞。
bpo-21310: 修复了在open()失败时可能发生的资源泄漏问题。
bpo-21256: 在模拟函数调用中,关键字参数的打印输出现在按确定性顺序进行。这将有助于编写更好的文档测试。
bpo-21677: 修复了在io close()方法中链接非规范化异常的问题。
bpo-11709: 修复了pydoc.help函数在sys.stdin不是有效文件时不失败的问题。
bpo-21515: tempfile.TemporaryFile现在在可用时使用os.O_TMPFILE标志。
bpo-13223: 修复了pydoc.writedoc,使得在示例代码中使用'self'的方法的HTML文档能够正确生成。
bpo-21463: 在urllib.request中,修复了FTP缓存的修剪问题。
bpo-21618: subprocess模块现在能够关闭调用进程继承的打开文件描述符,即使这些描述符已经高于POSIX资源限制所允许的值。在具有正常工作的/proc/self/fd或/dev/fd接口的系统上,现在忽略最大值并关闭所有文件描述符。
bpo-20383: 引入了importlib.util.module_from_spec()作为创建新模块的首选方式。
bpo-21552: 修复了在64位平台上,tkinter模块中过长的字符串长度可能导致整数溢出的问题。
bpo-14315: zipfile模块现在会忽略中央目录中太短而无法解析的额外字段,而不是让struct.unpack错误冒泡,因为这种“坏数据”在现实世界的许多zip文件中出现,并被其他zip工具忽略。
bpo-13742: 向heapq.merge()添加了“key”和“reverse”参数。(补丁的第一版由Simon Sapin贡献。)
bpo-21402: 当未设置默认根窗口时,tkinter.ttk现在可以正常工作。
bpo-3015: _tkinter.create() 现在默认使用 wantobject=1 创建 tkapp 对象。
bpo-10203: sqlite3.Row 现在真正支持序列协议,特别是它支持 reverse() 和负索引。原始补丁由 Claudiu Popa 提供。
bpo-18807: 如果为 venv 指定了复制(无符号链接),则现在通过复制而非符号链接创建 python 解释器别名(python, python3)。
bpo-20197: 在 imghdr 模块中添加了对 WebP 图像类型的支持。由 Fabrice Aneche 和 Claudiu Popa 提供补丁。
bpo-21513: 加速了 IP 地址(IPv4Address, IPv6Address)的一些属性,如 .is_private 或 .is_multicast。
bpo-21137: 通过显示“锁定”或“未锁定”状态改进了 threading.Lock() 及其变体的 repr。补丁由 Berker Peksag 提供。
bpo-21538: plistlib 模块现在支持在引用或偏移大小不是二的幂时加载二进制 plist 文件。
bpo-21455: 为 socket.listen() 添加了一个默认的 backlog。
bpo-21525: 大多数接受元组的 Tkinter 方法现在也接受列表。
bpo-22166: 在新内部 _codecs._forget_codec 辅助函数的帮助下,test_codecs 现在清除编码缓存以避免出现引用泄露。
bpo-22236: Tkinter 测试现在不再重用默认的根窗口。为每个测试类创建新的根窗口。
bpo-20826: 优化 ipaddress.collapse_addresses()。
bpo-21487: 优化 ipaddress.summarize_address_range() 和 ipaddress.{IPv4Network,IPv6Network}.subnets()。
bpo-21486: 优化 ipaddress.IPv4Network 和 ipaddress.IPv6Network 中网络掩码的解析。
bpo-13916: 禁止了非 UTF-* 编码的 surrogatepass 错误处理器。
bpo-20998: 修复了忽略大小写的重复单字符模式的 re.fullmatch()。原始由 Matthew Barnett 提供补丁。
bpo-21075: 如果指定了二进制模式,fileinput.FileInput 现在可以从标准流中读取字节。由 Sam Kimbrel 提供补丁。
bpo-19775: 向 pathlib Path 对象添加 samefile() 方法。初始由 Vajrasky Kok 提供补丁。
bpo-21226: 在 PyImport_ExecCodeModuleObject(及其相关函数)中正确设置模块。
bpo-21398: 修复 pydoc 分页器中的一个 unicode 错误,当文档包含无法编码为标准输出编码的字符时。
bpo-16531: ipaddress.IPv4Network 和 ipaddress.IPv6Network 现在接受一个(地址,网络掩码)元组参数,以便从现有地址轻松构建网络对象。
bpo-21156: importlib.abc.InspectLoader.source_to_code() 现在是一个静态方法。
bpo-21424: 简化和优化了 heapq.nlargest() 和 nsmallest(),以减少元组比较的次数。
bpo-21396: 修复 TextIOWrapper(..., write_through=True) 不强制底层二进制流 flush() 的问题。由 akira 提供补丁。
bpo-18314: 在 Windows 上,Unlink 现在可以移除 junctions。由 Kim Gräsman 提供补丁。
bpo-21088: 修复 curses.window.addch() 在 3.4.0 版本中的回归问题。在迁移到 Argument Clinic 时,前两个参数被反转了。
bpo-21407: _decimal: 模块现在支持函数签名。
bpo-10650: 从 Python 版本的 Decimal.quantize() 方法中移除了非标准的 'watchexp' 参数。它从未在 C 版本中出现过。
bpo-21469: 通过检查确保 robots.txt 已被读取或不存在,在 can_fetch() 返回 True 之前,减少了 robotparser 中误报的风险。
bpo-19414: 让 OrderedDict 将被删除的链接标记为不可用。如果在迭代过程中链接被删除,这会提前失败。
bpo-21421: 向 MappingViews ABC 添加 __slots__。由 Josh Rosenberg 提供补丁。
bpo-21101: 在 collections.Counter() 的 C 加速代码中消除双重哈希。
bpo-21321: itertools.islice() 现在在切片耗尽时会释放对源迭代器的引用。由 Anton Afanasyev 提供补丁。
bpo-21057: TextIOWrapper 现在允许底层的二进制流的 read() 或 read1() 方法返回任意的 bytes-like 对象(如 memoryview)。由 Nikolaus Rath 提供补丁。
bpo-20951: 在非阻塞套接字上,如果操作会阻塞,SSLSocket.send() 现在会引发 SSLWantReadError 或 SSLWantWriteError。之前,它会返回 0。由 Nikolaus Rath 提供补丁。
bpo-13248: 移除了之前弃用的 asyncore.dispatcher __getattr__ 廉价继承 hack。
bpo-9815: assertRaises 现在尝试清除异常回溯中对局部变量的引用。
bpo-19940: ssl.cert_time_to_seconds() 现在将给定的时间字符串解释为 UTC 时区(如 RFC 5280 所指定),而不是本地时区。
bpo-13204: 调用 sys.flags.__new__ 会崩溃解释器,现在它会引发 TypeError。
bpo-19385: 对已关闭的 dbm.dumb 数据库的操作现在总是引发相同的异常。
bpo-21207: 检测 os.urandom 缓存的 fd 是否被关闭或替换,并重新打开它。
bpo-21291: subprocess 的 Popen.wait() 现在是线程安全的,因此多个线程可以同时调用 Popen 实例的 wait() 或 poll() 而不会丢失 Popen.returncode 值。
bpo-21127: Path 对象现在可以从 str 子类实例(如
numpy.str_)实例化。bpo-15002: urllib.response 对象使用 _TemporaryFileWrapper(和 _TemporaryFileCloser)设施。提供了一种更好的处理文件描述符关闭的方法。由 Christian Theune 提供补丁。
bpo-12220: mindom 现在会引发一个自定义的 ValueError,指示它不支持 URI 中的空格,而不是让 'split' ValueError 冒泡。
bpo-21068: ssl.PROTOCOL* 常量现在是枚举成员。
bpo-21276: posixmodule: 不要在 KFreeBSD 和 Hurd 上定义 USE_XATTRS。
bpo-21262: Mock 的新方法 assert_not_called。如果 mock 被调用过,它会引发 AssertionError。
bpo-21238: 用于 Mock 的新关键字参数
unsafe。 如果属性以 assert 或 assret 开头则它将引发AttributeError。bpo-20896: ssl.get_server_certificate() 现在使用 PROTOCOL_SSLv23,而不是 PROTOCOL_SSLv3,以获得最大的兼容性。
bpo-21239: 当同一个名字被多次 patch 时,patch.stopall() 没有确定性地工作。
bpo-21203: 更新了 fileConfig 和 dictConfig 以消除不一致。感谢 Jure Koren 的补丁。
bpo-21222: 现在,将 name 关键字参数传递给 mock.create_autospec 可以工作了。
bpo-21197: 在 64 位非 OS X POSIX 上,venvs 中添加了 lib64 -> lib 的符号链接。
bpo-17498: 一些 SMTP 服务器在特定错误后断开连接,违反了严格的 RFC 一致性。smtplib 现在返回错误代码,并在发出下一个命令时延迟引发 SMTPServerDisconnected 错误,而不是在我们发出后续 RSET 时丢失错误代码。
bpo-17826: 现在,在由 create_autospec 创建的 mock 函数上设置可迭代的 side_effect 可以工作了。由 Kushal Das 提供的补丁。
bpo-7776: 修复了在使用 http.client.HTTPConnection.set_tunnel() 时的
Host:标头和重新连接。由 Nikolaus Rath 提供的补丁。bpo-20968: unittest.mock.MagicMock 现在支持除法。由 Johannes Baiter 提供的补丁。
bpo-21529: 修复了 JSONDecoder.raw_decode 中第二个参数为负数时的任意内存访问。 由 Guido Vranken 报告的错误。 (另见: CVE-2014-4616)
bpo-21169: getpass 现在通过使用 replace 错误处理程序重新编码,处理输入流编码无法编码的非 ASCII 字符。
bpo-21171: 修复了 rot13 编解码器未记录的过滤器 API。由 Berker Peksag 提供的补丁。
bpo-20539: 改进了 math.factorial 对于大正数输入的错误消息,并更改了大负数输入的异常类型(OverflowError -> ValueError)。
bpo-21172: isinstance 检查从 dict 放宽到 collections.Mapping。
bpo-21155: asyncio.EventLoop.create_unix_server() 现在如果同时指定了 path 和 sock 会抛出 ValueError。
bpo-21136: 避免了由于幂和其他操作导致的 Fractions 不必要的规范化。由 Raymond Hettinger 提供补丁。
bpo-17621: 引入了 importlib.util.LazyLoader。
bpo-21076: signal 模块的常量被转换为枚举。由 Giampaolo Rodola' 提供补丁。
bpo-20636: 改进了 Tkinter 小部件的 repr。
bpo-19505: OrderedDict 的 items、keys 和 values 视图现在支持使用 reversed() 进行反向迭代。
bpo-21149: 改进了解释器关闭期间日志清理的线程安全性。感谢 Devin Jeanpierre 提供的补丁。
bpo-21058: 修复了
tempfile.NamedTemporaryFile()中的文件描述符泄漏问题,如果io.open()失败则关闭文件描述符。bpo-21200: 当 __spec__ 缺失时,从 pkgutil.get_loader() 返回 None。
bpo-21013: 增强 ssl.create_default_context() 用于服务器端套接字时的默认安全性。
bpo-20145:
assertRaisesRegex和assertWarnsRegex现在如果第二个参数不是字符串或编译的正则表达式会抛出TypeError。bpo-20633: 用绝对导入替换相对导入。
bpo-20980: 使用 ThreadPool 时停止包装异常。
bpo-21082: 在 os.makedirs 中,不设置进程级的 umask。注意这改变了 makedirs 当 exist_ok=True 时的行为。
bpo-20990: 修复了 pyflakes 为 multiprocessing 发现的问题。
bpo-21015: SSL 上下文现在会在 OpenSSL 1.0.2 及更高版本上自动为 ECDH 密钥交换选择椭圆曲线,否则默认为 "prime256v1"。
bpo-21000: 改进了 json.tool 的命令行界面。
bpo-20995: 增强了 ssl 模块使用的默认密码,以实现更好的安全性并优先考虑完美前向保密。
bpo-20884: 不假设 __file__ 在 importlib.__init__ 上有定义。
bpo-21499: 在几个 test_importlib.test_api 测试中忽略 __builtins__。
bpo-20627: xmlrpc.client.ServerProxy 现在是一个上下文管理器。
bpo-19165: formatter 模块现在引发 DeprecationWarning 而不是 PendingDeprecationWarning。
bpo-13936: 移除了 datetime.time 实例在布尔上下文中被视为假的能力。
bpo-18931: selectors 模块现在支持 Solaris 上的 /dev/poll。补丁由 Giampaolo Rodola' 提供。
bpo-19977: 当
LC_TYPE语言环境是 POSIX 语言环境(C语言环境)时,sys.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-21284: 用户更改重新格式化宽度后,段落重新格式化测试通过。
bpo-17654: 确保在 OS X 上为非框架构建和所有 Tk 变体正确自定义 IDLE 菜单。
bpo-23180: 将 IDLE 的“Windows”菜单项重命名为“Window”。由 Al Sweigart 提供的补丁。
构建¶
bpo-15506: 在配置脚本中使用标准的 PKG_PROG_PKG_CONFIG autoconf 宏。
bpo-22935: 如果 openssl 不支持 SSL 3,也允许编译 ssl 模块。
bpo-22592: 放弃对使用 Borland C 编译器构建 Python 的支持。distutils 模块仍支持使用该编译器构建扩展。
bpo-22591: 放弃对 MS-DOS 的支持,特别是 DJGPP 编译器(MS-DOS 版的 GCC)。
bpo-16537: 在 setup.py 中检查 self.extensions 是否为空。由 Jonathan Hosmer 提供补丁。
bpo-22359: 移除递归 make 的错误使用。由 Jonas Wagner 提供补丁。
bpo-21958: 当使用 Visual Studio 2013 及以上版本构建时,定义 HAVE_ROUND。由 Zachary Turner 提供补丁。
bpo-18093: 嵌入 CPython 运行时的程序现在放在单独的 "Programs" 目录中,而不是保留在 Modules 目录中。
bpo-15759: 在 Doc/ 中的 "make suspicious"、"make linkcheck" 和 "make doctest" 现在仅在失败时显示特殊消息。
bpo-21141: Windows 构建过程不再尝试查找 Perl,而是依赖已配置并准备好构建的 OpenSSL 源代码。
PCbuild\build_ssl.py脚本已被重写并重命名为PCbuild\prepare_ssl.py,并负责为 32 位和 64 位平台配置 OpenSSL 源代码。从 svn.python.org 获取的 OpenSSL 源代码将始终预先配置并准备好构建。bpo-21037: 添加构建选项以启用 AddressSanitizer 支持。
bpo-19962: Windows 构建过程现在在源代码树的根目录中创建 "python.bat",它将所有参数传递给最近构建的解释器。
bpo-21285: 重构并修复 curses 配置检查,始终在 ncursesw 目录中搜索。
bpo-15234: 对于 BerkeleyDB 和 Sqlite,仅当未搜索到库和包含目录时才添加它们。这避免了显式的运行时库依赖。
bpo-17861: Tools/scripts/generate_opcode_h.py 如果 Lib/opcode.py 有任何更改,会自动从 Lib/opcode.py 重新生成 Include/opcode.h。
bpo-20644: OS X 安装程序构建支持3.4.1中文档构建的更改:假设外部提供的sphinx-build在/usr/bin中可用。
bpo-20022: 在OS X构建中消除对已弃用的bundlebuilder的使用。
bpo-15968: 将Tcl、Tk和Tix构建集成到Windows构建解决方案中。
bpo-17095: 修复Modules/Setup shared 支持。
bpo-21811: 预期修复以支持OS X版本 > 10.9。
bpo-21166: 防止python --generate-posix-vars在pybuilddir.txt构建目标中可能出现的段错误和其他随机故障。
bpo-18096: 修复python-config返回的库顺序。
bpo-17219: 为Python扩展跨构建添加库构建目录。
bpo-22919: Windows构建更新以支持VC 14.0(Visual Studio 2015),这将用于官方发布。
bpo-21236: 使用cabinet.lib而非fci.lib构建_msi.pyd。
bpo-17128: 为OS X 10.5+安装程序使用OpenSSL的私有版本。
C API¶
bpo-14203: 移除了对PyBuffer_FillInfo()、bytearray_getbuffer()、bytesiobuf_getbuffer()和array_buffer_getbuf()中view==NULL的过时支持。所有函数在那种情况下现在都会引发BufferError。
bpo-22445: PyBuffer_IsContiguous()现在实现了精确的连续性测试,与NumPy的NPY_RELAXED_STRIDES_CHECKING编译标志兼容。之前该函数在角落案例中报告了假阴性。
bpo-22079: PyType_Ready()现在检查静态分配的类型没有动态分配的基类。
bpo-22453: 移除了未记录的宏PyObject_REPR()。
bpo-18395: 将
_Py_char2wchar()重命名为Py_DecodeLocale(),将_Py_wchar2char()重命名为Py_EncodeLocale(),并记录这些函数。bpo-21233: 添加新的C函数:PyMem_RawCalloc()、PyMem_Calloc()、PyObject_Calloc()、_PyObject_GC_Calloc()。bytes(int)现在对于大对象使用
calloc()而非malloc(),这样更快且使用更少的内存。bpo-20942: PyImport_ImportFrozenModuleObject() 不再设置 __file__ 以匹配 importlib 的行为;这影响了 _frozen_importlib 以及任何使用 imp.init_frozen() 加载的模块。
文档¶
bpo-19548: 更新 codecs 模块文档,以更好地涵盖文本编码和其他编解码器之间的区别,以及其他一些澄清。由 Martin Panter 提供补丁。
bpo-22394: Doc/Makefile 现在支持
make venv PYTHON=../python来创建一个用于生成文档的 venv,例如,make html PYTHON=venv/bin/python3。bpo-21514: json 模块的文档现在引用新的 JSON RFC 7159 而不是过时的 RFC 4627。
bpo-21777: bytes 和 bytearray 的二进制序列方法现在被明确文档化,而不是假设用户能够从相应的 str 方法的行为中推导出预期行为。
bpo-6916: 取消文档中已弃用的 asynchat.fifo 类的记录。
bpo-17386: 扩展了
Doc/make.bat脚本的功能,使其更加接近Doc/Makefile。bpo-21312: 更新 thread_foobar.h 模板文件,包括更新的线程 API。由 Jack McCracken 提供补丁。
bpo-21043: 移除对特定 CA 组织的推荐,并提及加载操作系统证书的能力。
bpo-20765: 添加 PurePath.with_name() 和 PurePath.with_suffix() 的缺失文档。
bpo-19407: 基于 Python Packaging Authority 工具的新包安装和分发指南。现有的指南作为遗留链接保留在 distutils 文档中,因为它们仍然包含一些工具开发者所需的参考材料,这些材料在其他地方没有记录。
bpo-19697: 文档化 __main__.__spec__ 为 None 的情况。
测试¶
bpo-18982: 为 calendar 模块的 CLI 添加测试。
bpo-19548: 向 test_codecs 添加了一些额外的检查,以确保更新后的文档中的陈述保持准确。由 Martin Panter 提供补丁。
bpo-22838: 所有的test_re测试现在都可以通过unittest测试发现来运行。
bpo-22173: 更新lib2to3测试以使用unittest测试发现。
bpo-16000: 将test_curses转换为使用unittest。
bpo-21456: 如果_ssl模块不存在,则跳过test_urllib2net.py中的两个测试。由Remi Pointel提供补丁。
bpo-20746: 修复test_pdb以在refleak模式(-R)下运行。由Xavier de Gaye提供补丁。
bpo-22060: test_ctypes已经进行了一定程度的清理和简化;现在它使用unittest测试发现来找到它的测试。
bpo-22104: regrtest.py不再持有对从没有定义test_main()的测试模块加载的测试套件的引用。
bpo-22111: 在test_imaplib中进行了一些清理。由Milan Oberkirch提供补丁。
bpo-22002: 向test.support添加了
load_package_tests函数,并用它在test_asyncio、test_email、test_importlib、test_json和test_tools中实现/增强测试发现。bpo-21976: 修复test_ssl以接受LibreSSL版本字符串。感谢William Orr。
bpo-21918: 将test_tools从一个模块转换为一个包,包含每个测试脚本的单独测试文件。
bpo-9554: 在test_argparse中使用现代的unittest特性。由Denver Coneybeare和Radu Voicilas提供初始补丁。
bpo-20155: 更改test_httpservers中失败测试的HTTP方法名称,以便数据包过滤软件(特别是Windows基础过滤引擎)不会干扰测试预期的事务语义。
bpo-19493: 重构了ctypes测试包,明确跳过测试而不是静默跳过。
bpo-18492: 当测试不是由regrtest.py运行时,现在允许所有资源。
bpo-21634: 修复了 pystone 微基准测试:使用向下取整除法而不是真除法来对整数而非浮点数进行基准测试。将 pystone 版本设为 1.2。补丁由 Lennart Regebro 编写。
bpo-21605: 为Tkinter图像添加了测试。
bpo-21493: 为ntpath.expanduser()添加了测试。原始由Claudiu Popa提供补丁。
bpo-19925: 为spwd模块添加了测试。原始由Vajrasky Kok提供补丁。
bpo-21522: 为Listbox.itemconfigure()、PanedWindow.paneconfigure()和Menu.entryconfigure()添加了Tkinter测试。
bpo-17756: 修复从安装位置运行时的test_code测试。
bpo-17752: 修复从安装位置运行时的distutils测试。
bpo-18604: 合并了对GUI可用性的检查。现在所有平台在请求GUI资源时至少会检查是否可以实例化Tk。
bpo-21275: 修复 KFreeBSD 上的一个套接字测试。
bpo-21223: 当某些扩展作为内置模块编译时传入 test_site/test_startup_imports。
bpo-20635: 添加了针对 Tk geometry 管理器的测试。
增加freeze包的测试用例。
bpo-20743: 修复了 test_tcl 中的一个引用泄漏。
bpo-21097: 将 test_namespace_pkgs 移至 test_importlib.
bpo-21503: 在 test_importlib 中一致地使用 test_both()。
bpo-20939: 避免由于新增从 http://www.python.org/ 到 https://www.python.org 的重定向导致的网络测试失败:改用 http://www.example.com。
bpo-20668: asyncio 测试不再依赖 tests.txt 文件。 (由 Vajrasky Kok 编写补丁)
bpo-21093: 在 OS X 上防止当 libz 的副本存在于 $HOME/lib 或 /usr/local/lib 中时 ctypes test_macholib 的失败。
bpo-22770: 在 OS X 上防止当运行图形用户界面测试时的某些 Tk 段错误。
bpo-23211: 在某些 OS X 10.6 系统上绕过 test_logging 失败
bpo-23345: 防止较大 OpenSSL 补丁级别值 (如 0.9.8zc) 导致的 test_ssl 失败。
工具/示例¶
bpo-22314: 现在当设置了 LINES 环境变量时 pydoc 将会可用。
bpo-22615: Argument Clinic 现在支持 int 转换器的 "type" 参数。 这允许将 int 转换器用于枚举和 typedef。
bpo-20076: makelocalealias.py 脚本将不再忽略 UTF-8 映射。
bpo-20079: makelocalealias.py 脚本现在能够解析 glibc 源代码中的 SUPPORTED 文件并支持针对源代码路径的命令行选项。
bpo-22201: zipfile 模块的命令行界面现在能正确地提取带有目录项的 ZIP 文件。 由 Ryan Wilson 编写补丁。
bpo-22120: 对于使用无符号整数返回转换器的函数,现在 Argument Clinic 会在所生成的代码中为与 -1 的比较生成到该类型的强制转换。 (这将抑制一个编译警告。)
bpo-18974: Tools/scripts/diff.py 现在将使用 argparse 而不是 optparse。
bpo-21906: 让 Tools/scripts/md5sum.py 适用于 Python 3。 由 Zachary Ware 编写补丁。
bpo-21629: 修复 Argument Clinic 的 "--converters" 特性。
为2to3添加
yield from的支持。为 2to3 添加对 PEP 465 矩阵乘法运算符的支持。
bpo-16047: 修正冻结中的模块异常列表和 __file__ 处理。 由 Meador Inge 编写补丁。
bpo-11824: 考虑冻结 ABI 标签。 由 Meador Inge 编写补丁。
bpo-20535: PYTHONWARNING 不再影响 run_tests.py 脚本。 由 Arfrever Frehtes Taifersar Arahesis 编写补丁。
Windows¶
bpo-23260: 更新 Windows 安装器
捆绑的 Tcl/Tk 版本已被更新至 8.6.3。 这项改变最显示的结果是当在 Windows Vista 或更新版本上运行时增加了新的原生文件对话框。 请参阅 Tcl/Tk 的 TIP 432 了解详情。 此外,该 Tcl/Tk 版本还包括了对 Windows 10 的支持。
bpo-17896: 现在 Windows 构建脚本将预期外部库源代码位于
PCbuild\..\externals而不是PCbuild\..\..。bpo-17717: 现在 Windows 构建脚本将使用来自 svn.python.org的 NASM 副本来构建 OpenSSL。
bpo-21907: 改进了供构建 Python 的处理脚本。
bpo-22644: 捆绑的 OpenSSL 版本已更新到 1.0.1j。
bpo-10747: 在 Windows 开始菜单中使用带版本号的标签。 由 Olive Kilburn 编写补丁。
bpo-22980: 带有版本号和平台标记的 .pyd 文件 (例如 ".cp35-win32.pyd") 现在将优先于不带标记的文件被加载。
(有关旧版本的信息,请参阅HISTORY文件。)