Changelog(更動日誌)¶
Python 3.11.14 final¶
Release date: 2025-10-09
安全性¶
gh-139700: Check consistency of the zip64 end of central directory record. Support records with "zip64 extensible data" if there are no bytes prepended to the ZIP file.
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 final¶
Release date: 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 final¶
发布日期: 2025-04-08
安全性¶
gh-131809: 将捆绑的 libexpat 更新至 2.7.1
gh-131261: 更新至 libexpat 2.7.0
gh-105704: 当使用
urllib.parse.urlsplit()
和urllib.parse.urlparse()
时主机解析将不会拒绝包含方括号 ([
和]
) 的主机名。 根据 `RFC 3986 第 3.2.2 节 <https://www.rfc-editor.org/rfc/rfc3986#section-3.2.2>`__方括号仅适用于 IPv6 和 IPvFuture 主机。gh-121284: 修复了在使用现代电子邮件策略扁平化电子邮件消息时,rfc2047 编码词的折叠错误。以前,当一个编码词对于一行来说太长时,它会被解码、跨行分割并重新编码。但是原始文本中的逗号和其他特殊字符可能会被保留未编码和未引用。如果生成的渲染电子邮件被传输或重新解析,理论上可以利用精心构造的编码词来欺骗标题行。
gh-80222: 修复在使用现代电子邮件策略扁平化电子邮件消息时引用字符串折叠的错误。之前,当一个引用字符串被折叠以至于跨越多行时,周围的引号和内部转义将被省略。理论上,如果生成的渲染电子邮件被传输或重新解析,这可能会被用来使用精心构造的引用字符串欺骗标题行。
gh-119511: 修复
imaplib
模块中潜在的拒绝服务问题。当连接到恶意服务器时,可能导致分配任意数量的内存。在许多系统上,这是无害的,因为未使用的虚拟内存只是一个映射,但如果这达到了虚拟地址大小限制,可能会导致MemoryError
或其他进程崩溃。在不寻常的系统或构建中,所有分配的内存都被触及并由实际 RAM 或存储支持,这可能会消耗资源,直到类似崩溃。
库¶
文档¶
C API¶
gh-106883: Disable GC during the _PyThread_CurrentFrames() and _PyThread_CurrentExceptions() calls to avoid the interpreter to deadlock.
Python 3.11.11 final¶
发布日期: 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 final¶
Release date: 2024-09-07
Windows¶
安全性¶
gh-123678: 将libexpat升级到2.6.3版本
gh-121957: Fixed missing audit events around interactive use of Python, now also properly firing for
python -i
, as well as forpython -m asyncio
. The event in question iscpython.run_stdin
.gh-122133: 在
AF_UNIX
不可用的平台(如Windows)上,为socket.socketpair()
后备方案验证套接字连接。由Gregory P. Smith <greg@krypto.org> 和 Seth Larson <seth@python.org>提供补丁。由Ellie <el@horse64.org>报告。
gh-121285: 在 tarfile 头解析中移除对
hdrcharset
、PAX 和 GNU 稀疏头的回溯。gh-118486:
os.mkdir()
on Windows now accepts mode of0o700
to restrict the new directory to the current user. This fixes CVE-2024-4030 affectingtempfile.mkdtemp()
in scenarios where the base temporary directory is more permissive than the default.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=False
to get the old behavior, accept malformed inputs.getattr(email.utils, 'supports_strict_parsing', False)
can be use to check if the strict paramater is available. Patch by Thomas Dwyer and Victor Stinner to improve the CVE-2023-27043 fix.gh-67693: 修复了
urllib.parse.urlunparse()
和urllib.parse.urlunsplit()
对于路径以多个斜杠开始且没有权限的 URI 的处理。基于 Ashwin Ramaswami 的补丁。
核心与内置函数¶
Python 3.11.9 final¶
Release date: 2024-04-02
安全性¶
gh-115398: Allow controlling Expat >=2.6.0 reparse deferral (CVE-2023-52425) by adding five new methods:
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: Fix location of the error on a failed assertion.
gh-115823: 在由于无效字节序列引发
SyntaxError
异常时,正确计算解析器中的错误范围。由 Pablo Galindo 提供补丁。gh-112087: For an empty reverse iterator for list will be reduced to
reversed()
. Patch by 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:
csv.writer()
now quotes empty fields if delimiter is a space and skipinitialspace is true and raises exception if quoting is not possible.gh-115618: 修复
property
方法getter()
、setter()
和deleter()
中对None
参数引用计数不当减少的问题。gh-115570: A
DeprecationWarning
is no longer omitted on access to the__doc__
attributes of the deprecatedtyping.io
andtyping.re
pseudo-modules.gh-112006: Fix
inspect.unwrap()
for types with the__wrapper__
data descriptor.gh-101293: 在
inspect.Signature.from_callable()
中支持带有__call__()
方法的可调用对象,以及将__new__()
和__init__()
方法设置为类方法、静态方法、绑定方法、部分函数以及其他类型的方法和描述符的类型。gh-114563: Fix several
format()
bugs when using the C implementation ofDecimal
: * memory leak in some rare cases when using thez
format option (coerce negative 0) * incorrect output when applying thez
format option to typeF
(fixed-point with capitalNAN
/INF
) * incorrect output when applying the#
format option (alternate form)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: Fix
io.BufferedReader.tell()
,io.BufferedReader.seek()
,_pyio.BufferedReader.tell()
,io.BufferedRandom.tell()
,io.BufferedRandom.seek()
and_pyio.BufferedRandom.tell()
being able to return negative offsets.gh-93205: 修复
logging.handlers.TimedRotatingFileHandler
中的一个错误,其中指向具有相同名称但不同扩展名的文件的多个旋转处理程序实例会冲突并且不会删除正确的文件。bpo-43952: Fix
multiprocessing.connection.Listener.accept()
to accept empty bytes as authkey. Not accepting empty bytes as key causes it to hang indefinitely.bpo-42125: linecache: 如果可用,从
__spec__
获取模块名称。这允许在使用自定义加载器时获取__main__
模块的源代码。gh-66543: 使
mimetypes.guess_type()
能够正确解析仅包含主机名的URL、包含片段或查询的URL以及Windows上仅包含UNC共享点的文件名。基于 Dong-hee Na 的补丁。bpo-33775: 在 argparse 中为本地化添加了 'default' 和 'version' 帮助文本。
文档¶
gh-115399: Document CVE-2023-52425 of Expat <2.6.0 under "XML vulnerabilities".
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: Added import helper
isolated_modules
asCleanImport
does not remove modules imported during the context.gh-115720: 泄漏测试(
-R
,--huntrleaks
)现在显示每次迭代中发现泄漏数量的摘要。gh-115122: 为 regrtest 测试运行器添加
--bisect
选项:使用test.bisect_cmd
运行失败的测试以识别失败的测试。由 Victor Stinner 提供补丁。gh-115596: 修复
test_os
中的ProgramPriorityTests
永久改变进程优先级的问题。gh-115198: Fix test_check_metadata_deprecate in distutils tests with a newer Docutils.
构建¶
Windows¶
gh-116773: 修复``<_overlapped.Overlapped object at 0xXXX> still has pending operation at deallocation, the process may crash``的实例。
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 final¶
Release date: 2024-02-06
安全性¶
gh-113659: 跳过名称以点开头或具有隐藏文件属性的
.pth
文件。
核心与内置函数¶
gh-114887: 更改
create_datagram_endpoint()
中的套接字类型验证,以接受所有非流套接字。这修复了与原始套接字兼容性的回归问题。gh-114388: Fix a
RuntimeWarning
emitted when assign an integer-like value that is not an instance ofint
to an attribute that corresponds to a C struct member of type T_UINT and T_ULONG. Fix a doubleRuntimeWarning
emitted when assign a negative integer value to an attribute that corresponds to a C struct member of type T_UINT.gh-89811: 在执行依赖于此值可用的字节码特殊化之前,检查有效的
tp_version_tag
。gh-113602: 修复了一个导致解析器尝试覆盖现有错误并在过程中崩溃的错误。由 Pablo Galindo 提供补丁
gh-113566: Fix a 3.11-specific crash when the
repr
of aFuture
is requested after the module has already been garbage-collected.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: Fix rendering tracebacks for exceptions with a broken
__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: Fix
shutil.copymode()
andshutil.copystat()
on Windows. Previously they worked differenly if dst is a symbolic link: they modified the permission bits of dst itself rather than the file it points to if follow_symlinks is true or src is not a symbolic link, and did not modify the permission bits if follow_symlinks is false and src is a symbolic link.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: Ignore FileNotFoundError when remove a temporary directory in the multiprocessing finalizer.
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: Fix build error when there's a dangling symlink in the directory containing
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/env
shebang 的脚本时,将不再尝试运行 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 final¶
Release date: 2023-12-04
核心与内置函数¶
gh-112625: 修复在
bytearray.join()
方法中迭代参数时可能会清除bytearray对象,导致读取已释放内存的bug。gh-112388: 修复导致解析器尝试覆盖 tokenizer 错误的错误。由 Pablo Galindo 提供补丁。
gh-112387: 修复解码字符串中反向 tokenize 错误的错误位置。由 Pablo Galindo 提供补丁。
gh-109181: Speed up
Traceback
object creation by lazily compute the line number. Patch by Pablo Galindogh-102388: 修复
iso2022_jp_3
和iso2022_jp_2004
编解码器读取越界的错误gh-111366: 修复了
codeop
中的一个问题,该问题导致在存在无效语法时引发的SyntaxError
异常不包含精确的错误信息。由Pablo Galindo提供补丁。gh-111380: 修复了一个错误,该错误导致在解析时如果遇到无效语法,
SyntaxWarning
会显示两次。由Pablo Galindo提供补丁。gh-88116: Traceback location ranges involving wide unicode characters (like emoji and asian characters) now are properly highlighted. Patch by Batuhan Taskaya and 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: Added
io.text_encoding()
,io.DEFAULT_BUFFER_SIZE
, andio.IncrementalNewlineDecoder
toio.__all__
.gh-68166: 在
tkinter.ttk.Style.element_create()
中移除了对不支持的 "vsapi" 元素类型的提及。为element_create()
和其他ttk.Style
方法添加了测试。在文档中为element_create()
添加了示例。gh-111251: Fix
_blake2
not checking for errors when initializing.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: Deprecation warning about non-integer number in
gettext
now alwais refers to the line in the user code where gettext function or method is used. Previously it could refer to a line ingettext
code.gh-110378:
contextmanager()
和asynccontextmanager()
上下文管理器现在会关闭一个产生多个值的无效底层生成器对象。gh-110365: Fix
termios.tcsetattr()
bug that was overwritting existing errors during parsing integers fromterm
list.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: Fix unexpected integer truncation in
socket.setblocking()
which caused it to interpret multiples of2**32
asFalse
.
文档¶
测试¶
gh-110367: 使regrtest的
--verbose3
选项与--huntrleaks -jN
选项兼容。``./python -m test -j1 -R 3:3 --verbose3``命令现在按预期工作。由Victor Stinner提供补丁。gh-111165: Remove no longer used functions
run_unittest()
andrun_doctest()
and classBasicTestRunner
from thetest.support
module.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: Add docstrings to the IDLE debugger module. Fix two bugs: initialize Idb.botframe (should be in Bdb); in Idb.in_rpc_code, check whether prev_frame is None before trying to use it. Greatly expand 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 final¶
Release date: 2023-10-02
核心与内置函数¶
gh-109351: 修复编译涉及命名(海象)表达式的无效AST时崩溃的错误。
gh-109207: 修复符号表条目对象的
__repr__
中的SystemError。gh-109179: 修复C回溯显示中从
SyntaxError
中删除注释的错误。gh-88943: 改进跟随数字文字的非ASCII字符的语法错误。现在它指向无效的非ASCII字符,而不是有效的数字文字。
gh-108959: 修复涉及非语义括号和空格的下标和二元操作的错误位置的光标放置。由Pablo Galindo提供补丁。
gh-108520: Fix
multiprocessing.synchronize.SemLock.__setstate__()
to properly initializemultiprocessing.synchronize.SemLock._is_fork_ctx
. This fixes a regression when passing a SemLock accross nested processes.将
multiprocessing.synchronize.SemLock.is_fork_ctx
重命名为multiprocessing.synchronize.SemLock._is_fork_ctx
,以避免将其暴露为公共API。
库¶
gh-110036: On Windows, multiprocessing
Popen.terminate()
now catchsPermissionError
and get the process exit code. If the process is still running, raise again thePermissionError
. Otherwise, the process terminated as expected: store its exit code. Patch by 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: Fix test_timeout() of test_concurrent_futures.test_wait. Remove the future which may or may not complete depending if it takes longer than the timeout ot not. Keep the second future which does not complete before wait() timeout. Patch by 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黑洞 <https://reviews.freebsd.org/D41751>`_(``sysctl net.inet.tcp.blackhole=2`
和sysctl net.inet.udp.blackhole=1
)。由Victor Stinner提供补丁。gh-91960: Skip
test_gdb
if gdb is unable to retrieve Python frame objects: if a frame is<optimized out>
. When Python is built with "clang -Og", gdb can fail to retrive the frame parameter of_PyEval_EvalFrameDefault()
. In this case, tests likepy_bt()
are likely to fail. Without getting access to Python frames,python-gdb.py
is mostly clueless on retrieving the Python traceback. Moreover,test_gdb
is no longer skipped on macOS if Python is built with Clang. Patch by 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: The Python test suite now fails wit exit code 4 if no tests ran. It should help detecting typos in test names and test methods.
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 final¶
Release date: 2023-08-24
安全性¶
gh-108310: Fixed an issue where instances of
ssl.SSLSocket
were vulnerable to a bypass of the TLS handshake and included protections (like certificate verification) and treating sent unencrypted data as if it were post-handshake TLS encrypted data. Security issue reported as CVE-2023-40217 by Aapo Oksman. Patch by Gregory P. Smith.
核心与内置函数¶
gh-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: Harmonized the pure Python version of OrderedDict with the C version. Now, both versions set up their internal state in
__new__
. Formerly, the pure Python version did the set up in__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: Close
asyncio.StreamWriter
when it is not closed by application leading to memory leaks. Patch by Kumar Aditya.gh-107077: Seems that in some conditions, OpenSSL will return
SSL_ERROR_SYSCALL
instead ofSSL_ERROR_SSL
when a certification verification has failed, but the error parameters will still containERR_LIB_SSL
andSSL_R_CERTIFICATE_VERIFY_FAILED
. We are now detecting this situation and raising the appropiatessl.SSLCertVerificationError
. Patch by Pablo Galindogh-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: Fixed several bug in zipfile.Path in
name
/suffix
/suffixes
/stem
operations when no filename is present and the Path is not at the root of the zipfile.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: Make pydoc.doc catch bad module ImportError when output stream is not None.
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: Fix bugs in
_ctypes
where exceptions could end up being overwritten.gh-105375: 修复
_elementtree
模块中可能导致异常被覆盖的错误。gh-105497: 修复存在别名/掩码成员时的标志反转问题。
gh-103171: Revert undocumented behaviour change with runtime-checkable protocols decorated with
typing.final()
in Python 3.11. The behaviour change had meant that objects would not be considered instances of these protocols at runtime unless they had a__final__
attribute. Patch by 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: 修复
multiprocessing
ProcessPoolExecutor
在子进程崩溃且数据正被写入调用队列时的挂起问题。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: Fix integer overflow in
_winapi.LCMapStringEx()
which affectsntpath.normcase()
.gh-99079: Update Windows build to use OpenSSL 3.0.9
gh-105436: 确保空环境块以两个空字符终止,这是Windows所要求的。
macOS¶
工具/示例¶
gh-107565: Update multissltests and GitHub CI workflows to use OpenSSL 1.1.1v, 3.0.10, and 3.1.2.
gh-95065: Argument Clinic now supports overriding automatically generated signature by using directive
@text_signature
. See the Argument Clinic docs.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 final¶
Release date: 2023-06-06
安全性¶
gh-103142: The version of OpenSSL used in our binary builds has been upgraded to 1.1.1u to address several CVEs.
gh-99889: Fixed a security in flaw in
uu.decode()
that could allow for directory traversal based on the input if noout_file
was specified.gh-104049: 在
http.client.SimpleHTTPRequestHandler
生成的目录索引中不暴露本地的磁盘位置。gh-102153:
urllib.parse.urlsplit()
now strips leading C0 control and space characters following the specification for URLs defined by WHATWG in response to CVE-2023-24329. Patch by Illia Volochii.
核心与内置函数¶
gh-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: Fix an issue where incorrect locations numbers could be assigned to code following
case
blocks.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: The parser now raises
SyntaxError
when parsing source code containing null bytes. Backported fromaab01e3
. Patch by Pablo Galindobpo-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: Fixed a bug where
pdb
crashes when reading source file with different encoding by replacingio.open()
withio.open_code()
. The new method would also call into the hook set byPyFile_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
在请求的哈希算法在OpenSSL中不可用(尽管在``hashlib``本身中作为单独部分可用)时引发异常的bug。现在它正确地回退到内置算法。这种情况可能发生在,例如,您的OpenSSL不包含SHA3支持而您想计算 ``hmac.digest(b'K', b'M', 'sha3_256')``时。gh-93910: Remove deprecation of enum
memmber.member
access.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: Clarifying documentation about the url parameter to urllib.request.urlopen and urllib.request.Requst needing to be encoded properly.
测试¶
构建¶
Windows¶
macOS¶
IDLE¶
Python 3.11.3 final¶
发布日期: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: In zipfile, apply fix for extractall on the underlying zipfile after being wrapped in
Path
.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
was raisingTypeError
on call with mock objects. Now it correctly returns(*args, **kwargs)
as infered signature.gh-95495: When built against OpenSSL 3.0, the
ssl
module had a bug where it reported unauthenticated EOFs (i.e. without close_notify) as a clean TLS-level EOF. It now raisesSSLEOFError
, matching the behavior in previous versions of OpenSSL. Theoptions
attribute onSSLContext
also no longer includesOP_IGNORE_UNEXPECTED_EOF
by default. This option may be set to specify the previous OpenSSL 3.0 behavior.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 final¶
发布日期: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: Fix
int.__sizeof__()
calculation to include the 1 element ob_digit array for 0 and False.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: Remove any deprecation warnings in
asyncio.get_event_loop()
. They are deferred to 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 final¶
发布日期:2022-12-06
安全性¶
gh-100001:
python -m http.server
不再允许垃圾请求中发送的终端控制字符被打印到 stderr 服务器日志中。This is done by changing the
http.server
BaseHTTPRequestHandler
.log_message
method to replace control characters with a\xHH
hex escape before printing.gh-98433: The IDNA codec decoder used on DNS hostnames by
socket
orasyncio
related name resolution functions no longer involves a quadratic algorithm. This prevents a potential CPU denial of service if an out-of-spec excessive length hostname involving bidirectional characters were decoded. Some protocols such asurllib
http3xx
redirects potentially allow for an attacker to supply such a name.gh-98739: 更新捆绑的 libexpat 到 2.5.0
gh-97612: Fix a shell code injection vulnerability in the
get-remote-certificate.py
example script. The script no longer uses a shell to runopenssl
commands. Issue reported and initial fix by Caleb Shortt. Patch by Victor Stinner.
核心与内置函数¶
gh-99886: Fix a crash when an object which does not have a dictionary frees its instance values.
gh-99891: 修复了分词器中的一个 bug,该 bug 在显示源代码第一行发生的语法警告时可能导致无限递归。由 Pablo Galindo 提供补丁。
gh-99729: 修复一个问题,该问题可能导致帧在销毁时对 Python 代码可见,可能引发内存损坏或解释器硬崩溃。
gh-99578: Fix a reference bug in
_imp.create_builtin()
after the creation of the first sub-interpreter for modulesbuiltins
andsys
. Patch by Victor Stinner.gh-99581: Fixed a bug that was causing a buffer overflow if the tokenizer copies a line missing the newline caracter from a file that is as long as the available tokenizer buffer. Patch by 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: Lower the recursion depth for marshal on WASI to support 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-93354: Fix an issue that could delay the specialization of
PRECALL
instructions.gh-97943: Bugfix:
PyFunction_GetAnnotations()
should return a borrowed reference. It was returning a new reference.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: On WASI
ENOTCAPABLE
is now mapped toPermissionError
. Theerrno
modules exposes the new error number.getpath.py
now ignoresPermissionError
when it cannot open landmark filespybuilddir.txt
andpyenv.cfg
.bpo-31718: 当调用未初始化的
io.IncrementalNewlineDecoder
对象的方法时,抛出ValueError
而不是SystemError
。由 Oren Milman 提供补丁。
库¶
gh-100001: Also escape s in the http.server BaseHTTPRequestHandler.log_message so that it is technically possible to parse the line and reconstruct what the original data was. Without this a xHH is ambiguious as to if it is a hex replacement we put in or the characters r"x" came through in the original request line.
gh-93453:
asyncio.get_event_loop()
now only emits a deprecation warning when a new event loop was created implicitly. It no longer emits a deprecation warning if the current event loop was set.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: Clean up refleak on failed module initialisation in
_zoneinfo
gh-83004: Clean up refleaks on failed module initialisation in in
_pickle
gh-83004: Clean up refleak on failed module initialisation in
_io
.gh-98897: 修复当两个点不具有相同维度时
math.dist()
中的内存泄漏。由 Kumar Aditya 提供补丁。gh-98706: [3.11] Applied changes from importlib_metadata 4.11.4 through 4.13, including compatibility and robustness fixes for
Distribution
objects without_normalized_name
, disallowing invalid inputs toDistribution.from_name
, and refined behaviors inPathDistribution._name_from_stem
andPathDistribution._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-98251: Allow
venv
to pass alongPYTHON*
variables toensurepip
andpip
when they do not impact path resolutiongh-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: Fix
is_private
properties in theipaddress
module. Previously non-private networks (0.0.0.0/0) would return True from this method; now they correctly return 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-96192: Fix handling of
bytes
path-like objects inos.ismount()
.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: Don't use vendored
libmpdec
headers if--with-system-libmpdec
is passed to configure. Don't use vendoredlibexpat
headers if--with-system-expat
is passed to !configure.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: Update Windows builds to zlib v1.2.13. v1.2.12 has CVE-2022-37434, but the vulnerable
inflateGetHeader
API is not used by Python.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: Fix
pcbuild.proj
to clean previous instances of ouput files inPython\deepfreeze
andPython\frozen_modules
directories on Windows. Patch by 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 final¶
Release date: 2022-10-24
安全性¶
gh-97616: 修复列表乘以整数(
list *= int
)的问题:当新分配的长度接近最大大小时检测整数溢出。问题由Jordan Limor报告,由Victor Stinner提供补丁。gh-97514: 在Linux系统上,
multiprocessing
模块恢复使用基于文件系统的Unix域套接字与 forkserver 进程通信,而不是使用Linux抽象套接字命名空间。只有选择使用 "forkserver"启动方法 的代码会受到影响。抽象套接字没有权限设置,可能允许同一`网络命名空间 <https://man7.org/linux/man-pages/man7/network_namespaces.7.html>`_(通常是整个系统)内的任何用户向multiprocessing的 forkserver 进程注入代码。这是一个潜在的特权提升风险。基于文件系统的套接字权限将这一行为限制为 forkserver 进程的用户,这是Python 3.8及更早版本的默认行为。
This prevents Linux 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: Fix
py.exe
launcher handling of-V:<company>/
option when default preferences have been set in environment variables or configuration files.gh-90989: Clarify some text in the Windows installer.
macOS¶
gh-97897: macOS 13 SDK 包含对
mkfifoat
和mknodat
系统调用的支持。如果在使用 macOS 13 SDK 构建的 cpython 但在较早版本的 macOS 上运行时,使用dir_fd
选项与os.mkfifo()
或os.mknod()
可能导致段错误。通过添加对这些系统调用的运行时支持检测(“弱链接”)来防止这种情况,就像在 macOS 上对其他更新的系统调用所做的那样。
Python 3.11.0 release candidate 2¶
Release date: 2022-09-11
安全性¶
gh-95778: Converting between
int
andstr
in bases other than 2 (binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal) now raises aValueError
if the number of digits in string form is above a limit to avoid potential denial of service attacks due to the algorithmic complexity. This is a mitigation for CVE-2020-10735.This new limit can be configured or disabled by environment variable, command line flag, or
sys
APIs. See the integer string conversion length limitation documentation. The default limit is 4300 digits in string form.Patch by Gregory P. Smith [Google] and Christian Heimes [Red Hat] with feedback from Victor Stinner, Thomas Wouters, Steve Dower, Ned Deily, and Mark Dickinson.
核心与内置函数¶
gh-96678: 修复 ceval.c 中的未定义行为情况。
gh-96641: Do not expose
KeyWrapper
in_functools
.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: Fail gracefully if
EPERM
orENOSYS
is raised when loadingcrypt
methods. This may happen when trying to loadMD5
on a Linux kernel with FIPS enabled.gh-74116: 允许
asyncio.StreamWriter.drain()
被多个任务并发等待。由 Kumar Aditya 提供补丁。gh-92986: Fix
ast.unparse()
whenImportFrom.level
is None
文档¶
测试¶
gh-95243: 通过在失败前尝试多次找到未使用的端口,缓解了在 testSockName() 中使用 find_unused_port() 固有的竞态条件。由 Ross Burton 提供补丁。
构建¶
gh-94682: 使用 OpenSSL 1.1.1q 进行构建和测试
Windows¶
Python 3.11.0 release candidate 1¶
Release date: 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: Fix
asyncio.TaskGroup
to propagate exception whenasyncio.CancelledError
was replaced with another exception by a context manger. Patch by Kumar Aditya and 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: Fix check for existence of
os.EFD_CLOEXEC
,os.EFD_NONBLOCK
andos.EFD_SEMAPHORE
flags on older kernel versions where these flags are not present. Patch by 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: Fix findtext in the xml module to only give an empty string when the text attribute is set to 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_ssl
test_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()
sqlite3
API。gh-95587: 修复了 Windows 安装程序在升级时错误检测现有安装的某些功能的问题。
gh-94399: 恢复了 适用于Windows的Python启动器 对于
/usr/bin/env
shebang 行的行为,现在将在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¶
Release date: 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: Fix a
sqlite3
regression where*args
and**kwds
were incorrectly relayed fromconnect()
to theConnection
factory. The regression was introduced in 3.11a1 with PR 24421 (gh-85128). Patch by 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: Fix
PyArg_Parse*
with deprecated format units "u" and "Z". It returned 1 (success) when warnings are turned into exceptions.gh-94731: Python 在使用 C++ 编译时,再次对大多数类型转换操作使用 C 风格的转换。这可能会触发编译器警告,如果它们是通过例如
g++
的-Wold-style-cast
或-Wzero-as-null-pointer-constant
选项启用的。
Python 3.11.0 beta 4¶
Release date: 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: Cache the result of
PyCode_GetCode()
function to restore the O(1) lookup of theco_code
attribute.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: Made
_struct.Struct
GC-tracked in order to fix a reference leak in the_struct
module.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
的None
mandatoryRelease 设置为表示当前为“待定”。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: Augmented documentation of asyncio.create_task(). Clarified the need to keep strong references to tasks and added a code snippet detailing how to to this.
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: Support native Windows case-insensitive path comparisons by using
LCMapStringEx
instead ofstr.lower()
inntpath.normcase()
. AddLCMapStringEx
to the_winapi
module.
工具/示例¶
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¶
Release date: 2022-06-01
核心与内置函数¶
构建¶
gh-69093: 修复了
Modules/Setup.stdlib.in
中_sqlite3
扩展的规则。
Python 3.11.0 beta 2¶
Release date: 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: Fixed crash resulting from calling bisect.insort() or bisect.insort_left() with the key argument not equal to None.
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: Set
doctest.DocTest.lineno
toNone
when object does not have__doc__
.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: Add a closure keyword-only parameter to exec(). It can only be specified when exec-ing a code object that uses free variables. When specified, it must be a tuple, with exactly the number of cell variables referenced by the code object. closure has a default value of None, and it must be None if the code object doesn't refer to any free variables.
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: Add a new
_PyFrame_IsEntryFrame()
API function, to check if aPyFrameObject
is an entry frame. Patch by 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: Make opcodes
JUMP_IF_TRUE_OR_POP
andJUMP_IF_FALSE_OR_POP
relative rather than absolute.bpo-47177: Replace the
f_lasti
member of the internal_PyInterpreterFrame
structure with aprev_instr
pointer, which reduces overhead in the main interpreter loop. Thef_lasti
attribute of Python-layer frame objects is preserved for backward-compatibility.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: For @dataclass, add weakref_slot. Default is False. If True, and if slots=True, add a slot named "__weakref__", which will allow instances to be weakref'd. Contributed by 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: The
mailcap
module is now deprecated and will be removed in Python 3.13. See PEP 594 for the rationale and themimetypes
module for an alternative. Patch by 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
添加 上下文管理器` 支持。由 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: All docstrings in code snippets are now wrapped into
PyDoc_STR
to follow the guideline of PEP 7's Documentation Strings paragraph. Patch by Oleg Iarygin.bpo-26792: 改进
runpy.run_module()
和runpy.run_path()
的文档字符串。原始补丁由Andrew Brezovsky提供。
测试¶
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: Deprecate the C functions:
PySys_SetArgv()
,PySys_SetArgvEx()
,PySys_SetPath()
. Patch by Victor Stinner.gh-92154: 添加了
PyCode_GetCode()
函数。此函数执行等同于 Python 代码getattr(code_object, 'co_code')
的操作。gh-92173: 修复了
PyEval_EvalCodeEx()
的closure
参数。gh-91320: 修复了关于 Python C API 中“旧式转换”(
g++ -Wold-style-cast
)的 C++ 编译器警告。在 C++ 中使用 Python C API 时,使用 C++ 的reinterpret_cast<>
和static_cast<>
转换。由 Victor Stinner 提供补丁。gh-80527: 通过 PEP 623 将以下函数标记为弃用 :
PyUnicode_AS_DATA()
,PyUnicode_AS_UNICODE()
,PyUnicode_GET_DATA_SIZE()
,PyUnicode_GET_SIZE()
。由 Victor Stinner 提供补丁。gh-91768:
Py_REFCNT()
,Py_TYPE()
,Py_SIZE()
和Py_IS_TYPE()
函数的参数类型现在为PyObject*
而不是const PyObject*
。补丁由 Victor Stinner 提供。gh-91020: 添加
PyBytes_Type.tp_alloc
来为 bytes 子类初始化PyBytesObject.ob_shash
。bpo-40421: 添加
PyFrame_GetLasti
C-API 函数以安全地从 C 代码访问帧对象的f_lasti
属性。bpo-35134: 移除
Include/code.h
头文件。C 扩展应仅包含主<Python.h>
头文件。补丁由 Victor Stinner 提供。bpo-47169:
PyOS_CheckStack()
现在在 Windows 上的稳定 ABI 中导出。bpo-47169:
PyThread_get_thread_native_id()
在不存在的平台(如 Solaris)上被排除在稳定 ABI 之外。bpo-46343: 添加
PyErr_GetHandledException()
和PyErr_SetHandledException()
作为PyErr_GetExcInfo()
和PyErr_SetExcInfo()
的更简单替代。它们被包含在稳定 ABI 中。
Python 3.11.0 alpha 7¶
发布日期: 2022-04-05
核心与内置函数¶
bpo-47212: 对于没有后续缩进的裸
except
,抛出IndentationError
而不是SyntaxError
。对于用作参数的无括号生成器,改进SyntaxError
的位置。由 Matthieu Dartiailh 提供补丁。bpo-47186: 用
CHECK_EG_MATCH
+ 跳转替换JUMP_IF_NOT_EG_MATCH
。bpo-47176: 由于平台限制,Emscripten 构建不能以通常的方式处理信号。Python 现在可以处理信号。要使用,设置 Module.Py_EmscriptenSignalBuffer 为单个字节的 SharedArrayBuffer 并设置 Py_EMSCRIPTEN_SIGNAL_HANDLING 为 1。向 SharedArrayBuffer 写入一个数字将导致相应的信号被提升到 Python 线程中。
bpo-47186: 用
CHECK_EXC_MATCH
+ jump 替换JUMP_IF_NOT_EXC_MATCH
。bpo-47120: 用相对的
JUMP_BACKWARD_NO_INTERRUPT
替换绝对跳转操作码JUMP_NO_INTERRUPT
。bpo-46841: 比较代码对象时避免不必要的分配。
bpo-47182: 修复在主解释器第二次初始化后使用命名Unicode字符如
"\N{digit nine}"
时崩溃的问题。bpo-47162: WebAssembly 无法处理错误的函数指针转换(参数数量或类型不同)。Python 现在可以使用调用蹦床来缓解这个问题。定义
PY_CALL_TRAMPOLINE
来启用调用蹦床。bpo-46775: 现在一些Windows系统错误代码(>= 10000)被正确映射到errno,并可能引发
OSError
的子类。由Donghee Na提供补丁。bpo-47129: 改进关于空表达式的f-string语法错误消息。
bpo-47117: 修复在交互模式下如果分词器缓冲区未初始化时解码字符失败导致的崩溃。由Pablo Galindo提供补丁。
bpo-47127: 通过特殊化,将带有关键字参数的c函数调用速度提高25%。由Kumar Aditya提供补丁。
bpo-47120: 用相对跳转
JUMP_BACKWARD
替换JUMP_ABSOLUTE
。bpo-42197:
PyFrame_FastToLocalsWithError()
和PyFrame_LocalsToFast()
在性能分析或跟踪期间不再被调用。C代码可以通过调用PyFrame_GetLocals()
来访问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: Improved the performance of
list.append()
and list comprehensions by optimizing for the common case, where no resize is needed. Patch by 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: Use inline caching for
PRECALL
andCALL
, and remove the internal machinery for managing the (now unused) non-inline caches.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 参数,并在zipfile
CLI 中添加了--metadata-encoding
选项,以允许使用非标准编解码器读取压缩包中的文件名。bpo-47000: 当启用 UTF-8 模式时,使
io.text_encoding()
返回 "utf-8"。bpo-42369: 修复
zipfile._SharedFile.tell()
的线程安全性,以避免在多线程读取ZipFile
时出现 "zipfile.BadZipFile: Bad CRC-32 for file" 异常。bpo-38256: 修复了当编译使用 zlib 的 crc32 时的
binascii.crc32()
,使其正确处理长度超过 4GiB 的输入而不是返回错误结果。在此之前的解决方法是始终以小于 4GiB 的增量向函数提供数据,或直接调用 zlib 模块函数。我们还让
binascii.crc32()
在处理较大输入时释放 GIL,就像zlib.crc32()
和hashlib
所做的那样。这也提升了Windows上的性能,因为现在
binascii.crc32()
使用了zlib crc32实现,速度提升了2-3倍。标准库在两个模块中都有crc32 API是一个已知的历史遗留问题。这使我们更接近于它们背后的单一实现。
bpo-47066: 全局内联标志(例如
(?i)
)现在只能在正则表达式的开头使用。从Python 3.6开始,不在表达式开头使用它们已被弃用。bpo-39394: 关于不在正则表达式开头的内联标志的警告现在包含标志的位置。
bpo-433030: 在
正则表达式
中添加了对原子分组((?>...)
)和占有量词(*+
,++
,?+
,{m,n}+
)的支持。bpo-47062: 实现
asyncio.Runner
上下文管理器。bpo-46382:
dataclass()
slots=True
现在正确地省略了基类中已经定义的槽。由Arie Bovenberg提供补丁。bpo-47057: 对
FutureIter.throw()
使用FASTCALL约定。bpo-47061: 弃用 PEP 594 中列出的各种模块:
aifc, asynchat, asyncore, audioop, cgi, cgitb, chunk, crypt, imghdr, msilib, nntplib, nis, ossaudiodev, pipes, smtpd, sndhdr, spwd, sunau, telnetlib, uu, xdrlib
bpo-34790: 移除将协程对象传递给
asyncio.wait()
。bpo-47039: 标准化asyncio future和task对象的
repr()
。bpo-2604: 修复了使用全局变量的doctests在多次运行时失败的bug。
bpo-45150: 添加
hashlib.file_digest()
辅助函数,用于高效哈希文件对象。bpo-34861: 使cumtime成为cProfile的默认排序键。
bpo-45997: 修复
asyncio.Semaphore
重新获取FIFO顺序的问题。bpo-47022: The
asynchat
,asyncore
andsmtpd
modules have been deprecated since at least Python 3.6. Their documentation and deprecation warnings and have now been updated to note they will removed in 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: Add
DeprecationWarning
toLegacyInterpolation
, deprecated in the docstring since Python 3.2. Will be removed in Python 3.13. UseBasicInterpolation
orExtendedInterpolation
instead.bpo-46480: 添加
typing.assert_type()
。由 Jelle Zijlstra 提供补丁。bpo-46421: 修复了一个 unittest 问题,即如果命令以
python -m unittest
形式调用且文件名以点(.)开头,会返回ValueError
。bpo-46245: 在
shutil.rmtree()
中添加可选参数 dir_fd。bpo-22859:
usageExit()
is marked deprecated, to be removed in 3.13.bpo-46170: 当你尝试子类化一个
typing.NewType
的实例时,改进了错误信息。bpo-20392: 修复
MimeTypes.guess_type()
中大写文件扩展名的不一致问题。由 Kumar Aditya 提供补丁。bpo-46030: 将
LOCAL_CREDS
、LOCAL_CREDS_PERSISTENT
和SCM_CREDS2
FreeBSD 常量添加到 socket 模块中。bpo-44439: 修复
ZipFile
中成员文件的.write()
方法,当输入数据是支持缓冲协议的对象时,文件长度可能错误的问题。bpo-45171: 修复
logging
模块中处理stacklevel
参数的问题,使其在所有日志记录函数中一致,并且如广告中所说,类似于warn()
中使用的stacklevel
参数。bpo-44859: 在
sqlite3
中引发更准确且符合 PEP 249 的异常。对于
SQLITE_MISUSE
错误,抛出InterfaceError
而非ProgrammingError
。当转换为 BLOB 失败时,不要用
ValueError
覆盖BufferError
。Raise
ProgrammingError
instead ofWarning
if user tries toexecute()
more than one SQL statement.如果 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: Add an Barrier object in synchronization primitives of asyncio Lib in order to be consistant with Barrier from threading and multiprocessing libs*
bpo-35859:
re
模块,修复了几个关于捕获组的 bug。在极少数情况下,捕获组会得到一个不正确的字符串。由马林提供补丁。
文档¶
bpo-47040: Clarified the old Python versions compatiblity note of
binascii.crc32()
/zlib.adler32()
/zlib.crc32()
functions.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: A test case for
os.sendfile()
is converted from deprecatedasyncore
(see PEP 594) toasyncio
. Patch by 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-configure
make 目标以使用 Christian 的容器镜像quay.io/tiran/cpython_autoconf:269
重新生成配置脚本。bpo-46917: Building Python now requires support of IEEE 754 floating point numbers. Patch by Victor Stinner.
bpo-45774:
configure
现在验证所有sqlite3
扩展模块所需的 SQLite C API 是否都已找到。
Windows¶
bpo-47194: Update
zlib
to v1.2.12 to resolve 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: Prevent CVE-2022-26488 by ensuring the Add to PATH option in the Windows installer uses the correct path when being repaired.
macOS¶
工具/示例¶
bpo-40280: 用 Katie Bell 的 python-wasm 项目中的 browser-ui REPL 替换 Emscripten 的有限 shell。
C API¶
bpo-40421: 添加
PyFrame_GetBuiltins
、PyFrame_GetGenerator
和PyFrame_GetGlobals
C-API 函数,以便从 C 代码安全地访问帧对象属性。bpo-46850: 将私有的
_PyFrameEvalFunction
类型,以及私有的_PyInterpreterState_GetEvalFrameFunc()
和_PyInterpreterState_SetEvalFrameFunc()
函数移至内部 C API。_PyFrameEvalFunction
回调函数类型现在使用属于内部 C API 的_PyInterpreterFrame
类型。由 Victor Stinner 提供补丁。bpo-46850: 将未公开的私有函数
_PyEval_EvalFrameDefault()
移至内部 C API。该函数现在使用属于内部 C API 的_PyInterpreterFrame
类型。由 Victor Stinner 提供补丁。bpo-46850: 从 C API 中移除未公开的私有函数
_PyEval_CallTracing()
。改为调用公开的sys.call_tracing()
函数。由 Victor Stinner 提供补丁。bpo-46850: 从 C API 中移除未公开的私有函数
_PyEval_GetCoroutineOriginTrackingDepth()
。改为调用公开的sys.get_coroutine_origin_tracking_depth()
函数。由 Victor Stinner 提供补丁。bpo-46850: 从 C API 中移除以下未公开的私有函数:
_PyEval_GetAsyncGenFirstiter()
_PyEval_GetAsyncGenFinalizer()
_PyEval_SetAsyncGenFirstiter()
_PyEval_SetAsyncGenFinalizer()
改为调用公开的
sys.get_asyncgen_hooks()
和sys.set_asyncgen_hooks()
函数。补丁由 Victor Stinner 提供。bpo-46987: 移除私有函数
_PySys_GetObjectId()
和_PySys_SetObjectId()
。由 Donghee Na 提供补丁。bpo-46906: 添加新的函数来打包和解包 C 双精度(序列化和反序列化):
PyFloat_Pack2()
,PyFloat_Pack4()
,PyFloat_Pack8()
,PyFloat_Unpack2()
,PyFloat_Unpack4()
和PyFloat_Unpack8()
。由 Victor Stinner 提供补丁。
Python 3.11.0 alpha 6¶
发布日期:2022-03-07
核心与内置函数¶
bpo-46940: 避免覆盖嵌套属性访问调用的
AttributeError
元数据信息。由 Pablo Galindo 提供补丁。bpo-46927: 在非泛型类型下标错误消息中包含类型的名称。
bpo-46921: 支持
super()
的 vectorcall。由 Ken Jin 提供补丁。bpo-46841: 使用 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-46329: Fix specialization stats gathering for
PRECALL
instructions.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: Building Python now requires support for floating point Not-a-Number (NaN): remove the
Py_NO_NAN
macro. Patch by Victor Stinner.bpo-46640: 现在构建Python需要一个提供
NAN
常量的C99<math.h>
头文件,或者``__builtin_nan()``内置函数。由Victor Stinner提供补丁。bpo-46608: 如果深度冻结,排除已封装的冻结数据以节省300 KB磁盘空间。这包括向
_frozen
添加一个新的is_package
字段。由Kumar Aditya提供补丁。bpo-40280: Fix wasm32-emscripten test failures and platform issues. - Disable syscalls that are not supported or don't work, e.g. wait, getrusage, prlimit, mkfifo, mknod, setres[gu]id, setgroups. - Use fd_count to cound open fds. - Add more checks for subprocess and fork. - Add workarounds for missing _multiprocessing and failing socket.accept(). - Enable bzip2. - Disable large file support. - Disable signal.alarm.
bpo-46430: 在深度冻结的模块中内部化字符串。由Kumar Aditya提供补丁。
Windows¶
IDLE¶
C API¶
bpo-46748: Python's public headers no longer import
<stdbool.h>
, leaving code that embedd/extends Python free to definebool
,true
andfalse
.bpo-46836: 将
PyFrameObject
类型定义(struct _frame
)移动到内部 C APIpycore_frame.h
头文件中。由 Victor Stinner 提供补丁。bpo-45459: Rename
Include/buffer.h
header file toInclude/pybuffer.h
to avoid conflits with projects having an existingbuffer.h
header file. Patch by Victor Stinner.bpo-45412: 移除
HAVE_PY_SET_53BIT_PRECISION
宏(已移至内部 C API)。由 Victor Stinner 提供补丁。bpo-46613: Added function
PyType_GetModuleByDef()
, which allows accesss to module state when a method's defining class is not available.
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 中移除的已弃用的
unittest
API 已被临时恢复,将在外部项目清理完成后于 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:
pdb
now gracefully handleshelp
when__doc__
is missing, for example when run with pregenerated optimized.pyc
files.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: Skip test_builtin PTY tests on non-ASCII characters if the readline module is loaded. The readline module changes input() behavior, but test_builtin is not intented to test the readline module. Patch by Victor Stinner.
bpo-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()
now explicitly untracks all objects currently tracked by the GC. Previously, if an object was used later by another interpreter, callingPyObject_GC_UnTrack()
on the object crashed if the previous or the next object of thePyGC_Head
structure became a dangling pointer. Patch by 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
no longer pusheslasti
to the stack.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: The code called from
_PyErr_Display()
was refactored to improve error handling. It now exits immediately upon an unrecoverable error.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: 修复
hashlib
usedforsecurity 选项,使其在 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_NOCACHE
sendfile 常量。bpo-37295: 为
math.comb()
添加0 <= k <= n <= 67
的快速路径。bpo-46176: 为 mmap 模块添加
MAP_STACK
常量。bpo-43424: 弃用
webbrowser.MacOSXOSAScript._name
,改用name
。bpo-45321: 向模块
xml.parsers.expat.errors
添加了缺失的错误代码。bpo-46125: 重构测试以直接测试可遍历 API。包括来自 importlib 5.4.0 的更改。
bpo-46118: 将 importlib.resources 及其相关功能移动到一个包中。
bpo-37578: 向
glob()
和iglob()
添加 include_hidden 参数,以在使用特殊字符如*
,**
,?
和[]
时匹配隐藏文件和目录。bpo-20369: 当给定重复的 Futures 时,
concurrent.futures.wait()
不再永远阻塞。由 Kumar Aditya 提供补丁。bpo-46105: 在使用 URL 和 extras 生成需求规范时遵循规范(importlib_metadata 4.8.3)。
bpo-44893: EntryPoint 对象不再是元组。推荐的访问方式是通过属性('.name', '.group')或访问器('.load()')。通过索引访问已弃用,并将引发弃用警告。
bpo-22815: 在
unittest.TextTestResult
的摘要中打印未预期的成功与失败和错误。bpo-22047: 弃用在参数组上调用
add_argument_group()
。弃用在互斥组上调用add_argument_group()
或add_mutually_exclusive_group()
。这些功能从未被支持,且并不总是能正确工作。这些函数通过继承偶然存在于API中,将在未来被移除。
bpo-26952:
argparse
在尝试为一个空的互斥组渲染用法时,会抛出一个带有清晰消息的ValueError
。之前它抛出一个难以理解的IndexError
。bpo-45615: 当异常参数不是
BaseException
类型时,traceback
模块中的函数会抛出TypeError
而不是AttributeError
。bpo-16594: 在 socketserver 中添加 allow_reuse_port 标志。
bpo-27718: 修复
signal
模块的帮助文档。一些函数(例如signal()
和getsignal()
)被遗漏了。bpo-46032:
functools.singledispatch()
函数的registry()
方法现在会检查第一个参数或第一个参数注解,并在不支持时抛出 TypeError。之前不支持的“类型”被忽略(例如typing.List[int]
)或在调用时引发错误(例如list[int]
)。bpo-46014: 添加使用
typing.Union
和types.UnionType
作为functools.singledispatch
的调度参数的能力。由 Yurii Karabas 提供补丁。bpo-46018: 确保
math.expm1()
在下溢时不抛出异常。bpo-46016: Adding
F_DUP2FD
andF_DUP2FD_CLOEXEC
constants from FreeBSD into the fcntl module.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-module
configure 选项。
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 *,类似地,:c:func:`PyBuffer_GetPointer` 将步幅作为 ``const Py_ssize_t *
。bpo-45855: 记录了 c:func:`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()
no longer normalizesexc_info
(including setting the traceback on the exception instance) becauseexc_info
is always normalized.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: The
turtle.RawTurtle.settiltangle()
is deprecated since Python 3.1, it now emits a deprecation warning and will be removed in 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:
pyexpat
C 扩展的设置现在由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
now contains the macOS-specific module_scproxy
.bpo-45379: 澄清当我们尝试显式导入一个冻结模块但冻结模块被禁用时的
ImportError
消息。bpo-44525: Specialize simple calls to Python functions (no starargs, keyowrd dict, or closure)
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() now handles underscore_numbers correctly. Previously it was always setting it to 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
模块中的一个错误,该错误会在文档字符串包含一个带有classmethod
property
的示例时导致失败。由 Alex Waygood 提供补丁。bpo-45406: 使
inspect.getmodule()
捕获由inspect.getabsfile()
引发的FileNotFoundError
,并返回None
表示无法确定模块。bpo-45411: 在 mimetypes.py 模块中添加了包含字幕的文件扩展名 - .srt 和 .vtt。
bpo-10716: 将 pydoc 迁移到 HTML5(不改变其外观)。副作用是更新了 xmlrpc 的
ServerHTMLDoc
,现在也使用了 CSS。cgitb 现在较少依赖 pydoc(因为它不能使用 CSS 文件)。bpo-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
对象。the undocumented
Signature.from_callable
andSignature.from_function
functions, deprecated since Python 3.5; use theSignature.from_callable()
method instead.
由 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
and_elementtree
no longer define obsolete macrosHAVE_EXPAT_CONFIG_H
andUSE_PYEXPAT_CAPI
.XML_POOR_ENTROPY
is now defined inexpat_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``中:参见 :ref:`包含文件 <api-includes>`。如果它们已被直接包含,考虑改为包含 ``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: Update the vendored copy of libexpat to 2.4.1 (from 2.2.8) to get the fix for the CVE-2013-0340 "Billion Laughs" vulnerability. This copy is most used on Windows and macOS.
bpo-43124: 在
smtplib
中的内部函数putcmd
现在会对输入进行\r
和\n
字符的清理,以避免(不太可能的)命令注入。bpo-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_CACHED
LOAD_METHOD_MODULE
LOAD_METHOD_CLASS
bpo-44890: 在调试构建中总是收集专门化统计信息。
bpo-44885: 修正了带有格式规范和重复表达式的f字符串的ast位置。补丁由Pablo Galindo提供。
bpo-44878: 从字节码解释器中移除了循环。所有指令都以DISPATCH宏结束,因此循环现在是多余的。
bpo-44878: 当使用计算gotos时,移除解释器循环的switch语句。这确保了我们只在解释器中有一个分发表。
bpo-44874: 弃用旧的 trashcan 宏(
Py_TRASHCAN_SAFE_BEGIN
/Py_TRASHCAN_SAFE_END
)。它们应被新的宏Py_TRASHCAN_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: Expose specialization stats in python via
_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: The threading debug (
PYTHONTHREADDEBUG
environment variable) is deprecated in Python 3.10 and will be removed in Python 3.12. This feature requires a debug build of Python. Patch by 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
语句中现在会抛出TypeError
而不是AttributeError
。bpo-44297: Make sure that the line number is set when entering a comprehension scope. Ensures that backtraces inclusing generator expressions show the correct line number.
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: Fix clang rpath issue in
distutils
. The UnixCCompiler now uses correct clang option to add a runtime library directory (rpath) to a shared library.bpo-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: Remove the deprecated
split()
method of_tkinter.TkappType
. Patch by 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: The
lib2to3
package is now deprecated and may not be able to parse Python 3.10 or newer. See the PEP 617 (New PEG parser for CPython). Patch by 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
is deprecated and will be removed in Python 3.13. It is untested and undocumented and also not used by webbrowser itself. Patch by Donghee Na.bpo-44955: 对于
run()
中隐式创建的TestResult
对象,方法stopTestRun()
现在总是与方法startTestRun()
成对调用。之前,对于使用跳过装饰器装饰的测试方法和类,它不会被调用。bpo-44935:
subprocess
on Solaris now also usesos.posix_spawn()
for better performance.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_resources
5.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: Fixed a bug in the
_ssl
module that was throwingOverflowError
when using_ssl._SSLSocket.write()
and_ssl._SSLSocket.read()
for a big value of thelen
parameter. Patch by Pablo Galindobpo-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: Fix memory leak in
_tkinter._flatten()
if it is called with a sequence or set, but not list or tuple.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: argparse actions store_const and append_const each receive a default value of None when the
const
kwarg is not provided. Previously, this raised aTypeError
.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: Restore back
parse_makefile()
indistutils.sysconfig
because it behaves differently than the similar implementation insysconfig
.bpo-35800:
smtpd.MailmanProxy
is now removed as it is unusable without an external module,mailman
. Patch by 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.coroutine
decorator,该装饰器使得基于生成器的旧式协程能够与async/await代码兼容;移除asyncio.coroutines.CoroWrapper
,该包装器用于在调试模式下包装旧式协程对象。此装饰器自Python 3.8起已被弃用,原计划在Python 3.10中移除。由Illia Volochii提供补丁。bpo-44210: 将importlib.metadata._meta.PackageMetadata公开。
bpo-43643: 根据规范,将readers.MultiplexedPath.name声明为属性。
bpo-27334:
sqlite3
上下文管理器现在在提交失败时执行回滚(从而释放数据库锁)。补丁由Luca Citi和Erlend E. Aasland提供。bpo-4928: 记录了POSIX上的现有行为:当创建进程被SIGKILL杀死时,NamedTemporaryFiles不会被删除。
bpo-44154: 优化
fractions.Fraction
对大型组件的pickling操作。bpo-33433: 对于IPv4映射的IPv6地址(RFC 4291 第2.5.5.2节),
ipaddress.IPv6Address.is_private
检查被推迟到映射的IPv4地址。这解决了一个bug,其中公共映射的IPv4地址被IPv6检查视为私有地址。bpo-44150: 向statistics.fmean()添加了可选的 weights 参数。
bpo-44142:
ast.unparse()
现在将在元组用作赋值目标时(例如在for循环中)删除冗余的括号。bpo-44145:
hmac
计算在调用OpenSSLHMAC_Update
C 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:
base64
RFC引用已更新指向 RFC 4648;新增了一个部分指向用户RFC的新“安全考虑”部分。bpo-44740: 根据2016年修订的美联社样式手册,将大写的"Web"和"Internet"替换为小写版本。
bpo-44693: 通过替换混淆的词汇"伪模块"为更准确的描述,更新了术语表中__future__的定义。
bpo-35183: 向os.path.splitext文档添加典型示例
bpo-30511: 澄清由于依赖改变当前工作目录,
shutil.make_archive()
不是线程安全的。bpo-44561: 更新Doc/distributing/index.rst中三个过期的超链接:"项目结构"、"构建和打包项目"以及"将项目上传到Python包索引"。
bpo-44651: 删除Doc/glossary.rst中"强制"条目因其过时的定义。
bpo-42958: 更新了
filecmp.cmp()
的文档字符串和文档,使其更加准确且不易混淆,特别是关于 shallow 参数的部分。bpo-44631: 重构了
_Environ
(os模块) 的repr()
代码。bpo-44613: importlib.metadata不再处于临时状态。
bpo-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: Document that
collections.defaultdict
parameterdefault_factory
defaults to None and is positional-only.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: Made tests relying on the
_asyncio
C extension module optional to allow running on alternative Python implementations. Patch by Serhiy Storchaka.bpo-44949: 修复 test_readline 的自动历史测试:有时,换行符不会在末尾写入,因此不要期望它在输出中出现。
bpo-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: Fixed floating point precision issue in turtle tests.
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()
now resetsPyImport_Inittab
to its initial value at exit. It must be possible to callPyImport_AppendInittab()
orPyImport_ExtendInittab()
at each Python initialization. Patch by Victor Stinner.bpo-39947: 移除 4 个私有的 trashcan C API 函数,这些函数仅为了保持与 Python 3.8 及更早版本的稳定 ABI 的向后兼容性而保留,因为在 Python 3.8 及更早版本中,trashcan API 无法与有限的 C API 一起使用。trashcan API 在 Python 3.9 中被排除在有限的 C API 之外。
已移除的函数:
_PyTrash_deposit_object()
_PyTrash_destroy_chain()
_PyTrash_thread_deposit_object()
_PyTrash_thread_destroy_chain()
垃圾回收C API从未能与有限的C API一起使用,因为旧的垃圾回收宏直接访问了
PyThreadState
成员如_tstate->trash_delete_nesting
,而PyThreadState
结构在有限的C API中是不透明的。同时从C API中排除
PyTrash_UNWIND_LEVEL
常量。由Victor Stinner提供补丁。
bpo-40939: 移除了关于已移除的
PyParser_*
C API的文档。bpo-43795: 受限 API 的內容 中的列表现在显示公共名称
PyFrameObject
而非_frame
。列表中不再出现不存在的条目_node
。bpo-44378:
Py_IS_TYPE()
不再使用Py_TYPE()
以避免编译器警告:不再将``const PyObject*``强制转换为PyObject*
。由Victor Stinner提供补丁。bpo-39573: 将
Py_TYPE()
和Py_SIZE()
宏转换为静态内联函数。现在必须使用Py_SET_TYPE()
和Py_SET_SIZE()
函数来设置对象类型和大小。由Victor Stinner提供补丁。bpo-44263: 如果类型定义时设置了
Py_TPFLAGS_HAVE_GC
标志但没有遍历函数(PyTypeObject.tp_traverse
),PyType_Ready()
函数现在会引发错误。由Victor Stinner提供补丁。bpo-43795: 未记录的函数
Py_FrozenMain()
已从有限API中移除。bpo-44113: 弃用以下用于配置Python初始化的函数:
PySys_AddWarnOptionUnicode()
PySys_AddWarnOption()
PySys_AddXOption()
PySys_HasWarnOptions()
Py_SetPath()
Py_SetProgramName()
Py_SetPythonHome()
Py_SetStandardStreamEncoding()
_Py_SetProgramFullPath()
请改用 Python 初始化配置 中新增的
PyConfig
API(参见 PEP 587)。bpo-44094: 移除
PyErr_SetFromErrnoWithUnicodeFilename()
、PyErr_SetFromWindowsErrWithUnicodeFilename()``和``PyErr_SetExcFromWindowsErrWithUnicodeFilename()
。这些函数未被记录,并且自Python 3.3以来已被弃用。bpo-43795:
PyCodec_Unregister()
现在作为Windows稳定ABI DLL中的函数被正确导出。bpo-44029: 移除已弃用的
Py_UNICODE
API:PyUnicode_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/handle
auditing events。之前这些事件仅由sqlite3.connect()
调用产生。由 Erlend E. Aasland 提供补丁。bpo-43998:
ssl
模块设置了更安全的密码套件默认值。默认禁用不具有前向保密性和使用 SHA-1 MAC 的密码。安全级别 2 禁止使用安全性低于 112 位的弱 RSA、DH 和 ECC 密钥。SSLContext
默认最低协议版本为 TLS 1.2。设置基于 Hynek Schlawack 的研究。bpo-43882: URL 部分中存在的换行符或制表符可能允许某些形式的攻击。
遵循 WHATWG 定义的 URL 控制规范,
urllib.parse()
现在从 URL 中移除 ASCII 换行符和制表符,防止此类攻击。bpo-43472: 确保解释器级审计钩子在通过
_xxsubinterpreters
模块调用时接收到cpython.PyInterpreterState_New
事件。bpo-43362: 修复 _sha3 模块中的无效释放。此问题在 3.10.0a1 中引入。Python 3.9 及更早版本不受影响。
bpo-43762: 为
sqlite3.connect/handle()
、sqlite3.Connection.enable_load_extension()
和sqlite3.Connection.load_extension()
添加审计事件。由 Erlend E. Aasland 提供补丁。bpo-43756: 添加新的审计事件
glob.glob/2
以包含新增的 root_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: Importing the
_signal
module in a subinterpreter has no longer side effects.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
exceptions raised by the interpreter will highlight the full error range of the expression that consistutes the syntax error itself, instead of just where the problem is detected. Patch by 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: The Python
_pyio.open()
function becomes a static method to behave asio.open()
built-in function: don't become a bound method when stored as a class variable. It becomes possible since static methods are now callable in Python 3.10. Moreover,_pyio.OpenWrapper()
becomes a simple alias to_pyio.open()
. Patch by 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: Add an
encoding
parameterlogging.fileConfig()
.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.name
thread.getName
=>threading.Thread.name
Thread.isDaemon
=>threading.Thread.daemon
Thread.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
查询字符串时,允许bytes
separator
参数在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: Install schemes in
distutils.command.install
are now loaded fromsysconfig
.bpo-41282:
distutils.sysconfig
has been merged tosysconfig
.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: Fix dataclasses with
InitVar
s andreplace()
. Patch by 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()
now refuses to guess Windows home directories if the basename of current user's home directory does not match their username.pathlib.Path.expanduser()
andhome()
now consistently raiseRuntimeError
exception when a home directory cannot be resolved. Previously aKeyError
exception could be raised on Windows when the"USERNAME"
environment variable was unset.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: Avoid raising errors from
pathlib.Path.exists()
when passed an invalid filename.bpo-38822: 修复了
os.stat()
在无法访问的目录(带有尾部斜杠)上失败的问题,而不是回退到父目录的元数据。这隐式影响了os.path.exists()
和os.path.isdir()
。bpo-26227: 修复了
socket.gethostbyaddr()
和socket.gethostbyname_ex()
中主机名的解码。bpo-40432: 更新了Windows上的pegen再生脚本,以查找并使用Python 3.8或更高版本。在此之前,pegen再生已经需要3.8或更高版本,但脚本可能使用了较低版本的Python。
bpo-43745: 实际上将Windows版本更新到OpenSSL 1.1.1k。早期的版本被错误标记,实际上再次包含了1.1.1i。
bpo-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: Remove the
getfile
feature of thepydoc
module which could be abused to read arbitrary files on the disk (directory traversal vulnerability). Moreover, even source code of Python modules can contain sensitive data like passwords. Vulnerability reported by David Schwörer.bpo-43285:
ftplib
默认不再信任服务器响应 PASV 命令返回的 IP 地址值。这可以防止恶意 FTP 服务器利用响应探测客户端网络的 IPv4 地址和端口组合。需要之前易受攻击行为的代码可以在它们的
ftplib.FTP
实例上设置trust_server_pasv_ipv4_address
属性为True
以重新启用它。bpo-43439: 为
gc.get_objects()
、gc.get_referrers()
和gc.get_referents()
添加审计钩子。由 Pablo Galindo 提供补丁。
核心与内置函数¶
bpo-27129: 更新 CPython 字节码魔法数字。
bpo-43672: 当调用 find_loader() 时,发出 ImportWarning。
bpo-43660: 修复在替换
sys.stderr
为一个可在打印异常时删除对象的可调用对象时发生的崩溃。由 Pablo Galindo 提供补丁。bpo-27129: 字节码解释器内部使用指令偏移而非字节偏移。这减少了所需的 EXTENDED_ARG 指令数量并稍微简化了指令分发。
bpo-40645: Fix reference leak in the
_hashopenssl
extension. Patch by 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-43422:恢复在问题编号`41324`中添加的_decimal C API。
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_resources
3.2 中引入的,包括通过 5.0.3 的附带更改。bpo-43295:
datetime.datetime.strptime()
现在在匹配'z'
和%z
格式说明符时引发ValueError
而不是IndexError
。bpo-43125: 如果 base64mime.body_encode 接收到空字节,返回空字符串。
bpo-43084:
curses.window.enclose()
现在返回True
或False
(如文档所述) 而不是1
或0
。bpo-42994: 为 opus、AAC、3gpp 和 3gpp2 添加 MIME 类型。
bpo-14678: 向 zipimport.zipimporter 类添加 invalidate_caches() 方法以支持 importlib.invalidate_caches()。由 Desmond Cheong 提供补丁。
bpo-42782: Fail fast in
shutil.move()
to avoid creating destination directories on failure.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: When the
tempfile.tempdir
global variable is set to a value of type bytes, it is now handled consistently. Previously exceptions could be raised from some tempfile APIs when the directory did not already exist in this situation. Also ensures that thetempfile.gettempdir()
andtempfile.gettempdirb()
functions always returnstr
andbytes
respectively.bpo-39342: Expose
X509_V_FLAG_ALLOW_PROXY_CERTS
asVERIFY_ALLOW_PROXY_CERTS
to allow proxy certificate validation as explained in 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提供补丁。问题`42819`:在交互式解释器中明确禁用`readline`模块的括号粘贴功能,即使它在inputrc中被设置、默认启用(例如GNU Readline 8.1)或用户调用了
readline.read_init_file()
。Python REPL尚未实现括号粘贴支持。此外,括号模式会将"\x1b[?2004h"
转义序列写入stdout,导致不支持该功能的应用程序测试失败。用户仍可通过调用``readline.parse_and_bind("set enable-bracketed-paste on")``显式启用该功能。由Dustin Rodrigues提供补丁。问题`42808`:由于采用了
vectorcall
调用约定,现在对type(object)
的简单调用更快了。补丁由Dennis Sweeney提供。问题`42217`:使编译器像已经对co_consts做的那样,合并模块中相同的co_code和co_linetable对象。
问题`41972`:子字符串搜索函数如
str1 in str2
和str2.find(str1)
现在有时会使用"双向"字符串比较算法,以避免在长字符串上出现二次行为。问题`42128`:实现了PEP 634(结构化模式匹配)。由Brandt Bucher提供补丁。
问题`40692`:在
concurrent.futures.ProcessPoolExecutor
中,验证multiprocess.synchronize()
在给定平台上是否可用,并在concurrent.futures
测试套件中依赖该检查,以便我们可以在这些平台上运行与ProcessPoolExecutor
无关的测试。问题`38302`:如果
object.__ipow__()
返回NotImplemented
,操作符将如预期正确回退到object.__pow__()
和object.__rpow__()
。
库¶
问题`43316`:``python -m gzip``命令行应用程序现在在检测到不支持的扩展时会正确失败。它会以非零退出码退出,并向stderr打印错误消息。
问题`43317`:将
gzip
模块主函数的块大小设置为io.DEFAULT_BUFFER_SIZE。这比之前使用的1024字节常量略快。bpo-43146: 在
print_exception()
和format_exception()
的单参数版本中处理None。bpo-43260: 修复在写入非常大的文本后,TextIOWrapper无法永远刷新内部缓冲区的问题。
bpo-43258: 防止在没有行匹配聚合查询时无谓地分配
sqlite3
聚合函数上下文。由Erlend E. Aasland提供补丁。bpo-43251: 改进
sqlite3
错误处理:sqlite3_column_name()
失败现在会导致MemoryError
。由Erlend E. Aasland提供补丁。bpo-40956: 修复在未提供参数时
sqlite3.Connection.backup()
中的段错误。该回归由PR 23838引入。由Erlend E. Aasland提供补丁。bpo-43172: readline模块现在在直接针对libedit构建时通过其测试。基于libreadline与libedit使用的
readline.get_begidx()
和readline.get_endidx()
行为中现有的不可调和的API差异仍然存在。bpo-43163: 修复
codeop
中的一个bug,该bug导致它在多行片段有未闭合的括号时不请求更多输入。由Pablo Galindo提供补丁。bpo-43162: 弃用不支持的能力,即访问枚举成员作为其他枚举成员的属性。
bpo-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: Make the pure Python implementation of
xml.etree.ElementTree
behave the same as the C implementation (_elementree
) regarding default attribute values (by not settingspecified_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_
系列函数。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: Fix the
_PyUnicode_FromId()
function (_Py_IDENTIFIER(var) API) whenPy_Initialize()
/Py_Finalize()
is called multiple times: preserve_PyRuntime.unicode_ids.next_index
value.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 以捕获BrokenPipeError
bpo-41604: 当 set_panel_userptr 失败时,不减少先前 user_ptr 的引用计数
bpo-41149: 允许执行传递给
Threading.thread
作为目标的可调用对象,即使其布尔值为False
。由 Barney Stratford 提供补丁bpo-38307: 为 pyclbr 函数返回的树中出现的类和函数对象添加 'end_lineno' 属性。此属性与现有的 'lineno' 属性共同定义类和 def 语句的范围。由 Aviral Srivastava 提供补丁
bpo-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: Make
_PyUnicode_FromId()
function compatible with subinterpreters. Each interpreter now has an array of identifier objects (interned strings decoded from UTF-8). Patch by 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: Port the
_thread
extension module to the multiphase initialization API (PEP 489) and convert its static types to heap types.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
will now validate the types and value of its parameter. It also now accepts strings representing the levels (as doesloging.setLevel
) instead of only the numerical values.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 e
bpo-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: Add
os.set_blocking()
support for VxWorks RTOS.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: Remove the private
_Py_fopen()
function which is no longer needed. Use_Py_wfopen()
or_Py_fopen_obj()
instead. Patch by 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: Make sure that the compiler front-end produces a well-formed control flow graph. Be be more aggressive in the compiler back-end, as it is now safe to do so.
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: Simplify the
importlib
external bootstrap code:importlib._bootstrap_external
now uses regular imports to import builtin modules. When it is imported, the builtin__import__()
function is already fully working and so can be used to import builtin modules likesys
. Patch by 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()
andtime.monotonic()
functions can no longer fail with a Python fatal error, instead raise a regular Python exception on failure.bpo-42328: 修复了
tkinter.ttk.Style.map()
。该函数现在接受默认状态的表示为空序列(由Style.map()
返回)。结果的结构现在在所有平台上都是相同的,不依赖于wantobjects
的值。bpo-42345: 修复了
typing.Literal
参数处理中的各种问题(扁平化、去重、使用类型缓存键)。由 Yurii Karabas 提供补丁。bpo-37205:
time.perf_counter()
on Windows andtime.monotonic()
on macOS are now system-wide. Previously, they used an offset computed at startup to reduce the precision loss caused by the float type. Usetime.perf_counter_ns()
andtime.monotonic_ns()
added in Python 3.7 to avoid this precision loss.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.1
ALPN扩展。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: Port
spwd
extension module to multiphase initialization (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: The
Py_TRASHCAN_BEGIN
macro no longer accesses PyTypeObject attributes, but now can get the condition by calling the new private_PyTrash_cond()
function which hides implementation details.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: Enable
from __future__ import annotations
(PEP 563) by default. The values found in__annotations__
dicts are now strings, e.g.{"x": "int"}
instead of{"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: Fix an incorrectly formatted error from
_codecs.charmap_decode()
when called with a mapped value outside the range of valid Unicode code points. PR by Max Bernstein.bpo-41966: 修复纯 Python
datetime.time
子类的 Pickle 操作。由 Dean Inwood 提供的补丁。bpo-19270:
sched.scheduler.cancel()
will now cancel the correct event, if two events with same priority are scheduled for the same time. Patch by 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-42061: 记录IP地址的__format__功能。
bpo-41910: 记录
object.__eq__
的默认实现。bpo-42010: 澄清订阅表达式对于标准库中的某些 类 也有效,并且如果提供了类方法
__class_getitem__()
,则对于用户定义的类和类型也有效。bpo-41805: 记录了 generic alias type 和
types.GenericAlias
。还在词汇表中添加了 泛型类型 的条目。bpo-39693: 修复tarfile的extractfile文档
bpo-39416: 记录一些关于数字类默认字符串表示的限制。
测试¶
构建¶
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
andPy_UTF8Mode
are available again in limited API.bpo-41756: 添加
PyIter_Send
函数,允许向生成器/协程/迭代器发送值而不抛出 StopIteration 异常来信号返回。bpo-41784: 将
PyUnicode_AsUTF8AndSize
添加到有限的 C API 中。
Python 3.10.0 alpha 1¶
发布日期: 2020-10-05
安全性¶
bpo-41304: Fixes
python3x._pth
being ignored on Windows, caused by the fix for bpo-29778 (CVE-2020-15801).bpo-41162: 审计钩子现在在最终化过程的后期被清除,以避免错过事件。
bpo-29778: Ensure
python3.dll
is loaded from correct locations when Python is embedded (CVE-2020-15523).bpo-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: Port the
_bisect
module to the multi-phase initialization API (PEP 489).bpo-39934: 在编译器中正确计算 'except' 中的控制块。确保对于深层嵌套的命名异常处理程序产生语法错误而非致命错误。
bpo-41780: 修复
types.GenericAlias
的__dir__()
方法。由 Batuhan Taskaya 提供补丁。bpo-1635741: Port the
_lsprof
extension module to multi-phase initialization (PEP 489).bpo-1635741: 将
cmath
扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: Port the
_scproxy
extension module to multi-phase initialization (PEP 489).bpo-1635741: 将
termios
扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: Convert the
_sha256
extension module types to heap types.bpo-41690: 修复解析器在解析具有大量参数的函数和类时可能出现的栈溢出问题。由 Pablo Galindo 提供补丁。
bpo-1635741: Port the
_overlapped
extension module to multi-phase initialization (PEP 489).bpo-1635741: Port the
_curses_panel
extension module to multi-phase initialization (PEP 489).bpo-1635741: Port the
_opcode
extension module to multi-phase initialization (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: Convert
_operator
to usePyType_FromSpec()
.bpo-1653741: Port
_sha3
to multi-phase init. Convert static types to heap types.bpo-1635741: Port the
_blake2
extension module to the multi-phase initialization API (PEP 489).bpo-41533: 如果
do_mkstack
失败且堆栈不是small_stack
,则释放va_build_stack
中分配的堆栈。bpo-41531: 修复了一个在编译包含超过 0xFFFF 个元素的字典字面量时会丢失键的错误。由 Pablo Galindo 提供补丁。
bpo-41525:
python --help
的输出现在仅包含 ASCII 字符。bpo-1635741: Port the
_sha1
,_sha512
, and_md5
extension modules to multi-phase initialization 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: Convert
_bz2
to usePyType_FromSpec()
.bpo-41006:
encodings.latin_1
模块不再在启动时导入。现在仅当它是文件系统编码或 stdio 编码时才导入。bpo-40636:
zip()
现在支持 PEP 618 的strict
参数,如果参数长度不同,则会引发ValueError
。由 Brandt Bucher 提供补丁。bpo-1635741: Port
_gdbm
to multiphase initialization.bpo-40985: 修复了一个导致文件以行继续字符(即反斜杠)结尾时,
SyntaxError
文本为空的错误。错误文本应包含最后一行的文本。bpo-40958: 修复了 PEG 解析器在收集信息以发出语法错误时可能存在的缓冲区溢出。由 Pablo Galindo 提供补丁。
bpo-1635741: Port
_dbm
to multiphase initialization.bpo-40957: 修复 _Py_fopen_obj() 在 PySys_Audit() 失败时的反射泄漏
bpo-40950: Add a state to the
nis
module (PEP 3121) and apply the multiphase initialization. Patch by 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: Port
_lzma
to multiphase initialization.bpo-37999: 接受整数参数的内置和扩展函数不再接受
Decimal
s、Fraction
s 和其他只能以损失方式转换为整数的对象(例如,具有__int__()
方法但不具有__index__()
方法的对象)。bpo-29882: Add
int.bit_count()
, counting the number of ones in the binary representation of an integer. Patch by 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
添加了一个迭代器`。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: Add
os.cpu_count()
support for VxWorks RTOS.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: Avoid infinite loop when reading specially crafted TAR files using the tarfile module (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: Removed
asyncio.Task.current_task()
andasyncio.Task.all_tasks()
. Patch contributed by 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:
distutils
upload creates SHA2-256 and Blake2b-256 digests. MD5 digests is skipped if platform blocks 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: Fix
IMAP4.noop()
when debug mode is enabled (ex:imaplib.Debug = 3
).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
now supports creating CAB files with non-ASCII file path and adding files with non-ASCII file path to them.bpo-41074: Fixed support of non-ASCII names in functions
msilib.OpenDatabase()
andmsilib.init_database()
and non-ASCII SQL in methodmsilib.Database.OpenView()
.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: Update
nntplib
to mergenntplib.NNTP
andnntplib._NNTPBase
. Patch by 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: Added default arguments to
difflib.SequenceMatcher.find_longest_match()
.bpo-39995: 修复 concurrent.futures._ThreadWakeup 中的竞争条件:现在对 _ThreadWakeup 的访问受到关闭锁的保护。
bpo-30966:
concurrent.futures
的Process.shutdown(wait=True)
现在显式关闭结果队列。bpo-30966: 为
SimpleQueue
类添加一个新的close()
方法以显式关闭队列。bpo-39966: 撤销 bpo-25597。设置了 wraps 的
unittest.mock.MagicMock
对魔术方法使用默认返回值。bpo-39791: 向 importlib.resources 添加了
files()
函数,支持包数据中的子目录,与 importlib_resources 1.5 中的回传匹配。bpo-40375: 添加了
imaplib.IMAP4.unselect()
。由 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: The
AbstractBasicAuthHandler
class of theurllib.request
module uses an inefficient regular expression which can be exploited by an attacker to cause a denial of service. Fix the regex to prevent the catastrophic backtracking. Vulnerability reported by Ben Caller and Matt Schwager.
核心与内置函数¶
bpo-40313: 提高 bytes.hex() 的性能。
bpo-40334: 切换到基于 PEG 的新解析器。更多详情见 PEP 617。要暂时切换回旧解析器,使用
-X oldparser
或PYTHONOLDPARSER=1
。在 Python 3.10 中,我们将完全移除旧解析器,包括parser
模块(已弃用)以及依赖于它的任何内容。bpo-40267: 修复了分词器以显示正确的错误消息,当最后一个输入字符上有
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: Fix possible refleaks in
_json
, memo of PyScannerObject should be traversed.bpo-40141: 向“ast.keyword”节点添加列和行信息。由Pablo Galindo提供补丁。
bpo-1635741: 将
resource
移植到多阶段初始化(PEP 489)。bpo-1635741: 将
math
移植到多阶段初始化(PEP 489)。bpo-1635741: 将_uuid模块移植到多阶段初始化(PEP 489)。
bpo-40077: 将json模块转换为使用
PyType_FromSpec()
。bpo-40067: 改进赋值中多个星号表达式的错误消息。由Furkan Onder提供补丁。
bpo-1635741: 将_functools模块移植到多阶段初始化(PEP 489)。由Paulo Henrique Silva提供补丁。
bpo-1635741: 将operator模块移植到多阶段初始化(PEP 489)。由Paulo Henrique Silva提供补丁。
bpo-20526: 修复
PyThreadState_Clear()
。“PyThreadState.frame”是一个借用引用,不是强引用:“PyThreadState_Clear()”不能调用“Py_CLEAR(tstate->frame)”。bpo-1635741: 将time模块移植到多阶段初始化(PEP 489)。由Paulo Henrique Silva提供补丁。
bpo-1635741: 将_weakref扩展模块移植到多阶段初始化(PEP 489)。
bpo-40020: 修复parsetok.c中由于在罕见代码路径上错误使用realloc导致的泄漏和随后的崩溃。
bpo-39939: 添加了str.removeprefix和str.removesuffix方法以及相应的bytes、bytearray和collections.UserString方法,用于移除字符串中可能存在的前缀和后缀。完整描述请参见 PEP 616。由Dennis Sweeney提供补丁。
bpo-39481: 实现了PEP 585。这支持了list[int]、tuple[str, ...]等类型注解。
bpo-32894: 支持在延迟注解中解析无穷大数。由Batuhan Taşkaya提供补丁。
bpo-37207: 通过使用 PEP 590
vectorcall
调用约定,加快了对list()
的调用速度。由Mark Shannon提供补丁。
库¶
bpo-40398:
typing.get_args()
现在对于特殊的通用别名总是返回一个空元组。bpo-40396: 函数
typing.get_origin()
、typing.get_args()
和typing.get_type_hints()
现在支持如list[int]
这样的通用别名。bpo-38061: 在FreeBSD上使用
closefrom()
优化了subprocess
模块。单个close(fd)
系统调用是廉价的,但当sysconf(_SC_OPEN_MAX)
很高时,循环调用close(fd)
在每个文件描述符上可能会花费几毫秒。在FreeBSD上提高性能的解决方法是加载并挂载fdescfs内核模块,但默认情况下未启用此功能。
初始由Ed Maste (emaste)、Conrad Meyer (cem)、Kyle Evans (kevans) 和 Kubilay Kocak (koobs) 提供补丁:https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274
bpo-38061: 在FreeBSD上,
os.closerange(fd_low, fd_high)
现在如果 fd_high 大于或等于sysconf(_SC_OPEN_MAX)
则调用closefrom(fd_low)
。初始由Ed Maste (emaste)、Conrad Meyer (cem)、Kyle Evans (kevans) 和 Kubilay Kocak (koobs) 提供补丁:https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274
bpo-40360: The
lib2to3
module is pending deprecation due to PEP 617.bpo-40138: 修复了
os.waitpid()
在Windows上对于退出码大于INT_MAX >> 8
的实现。退出状态现在被解释为一个无符号数。bpo-39942: 当
typing.TypeVar
中缺少 "__name__" 时,将 "__main__" 设置为默认模块名。由Weipeng Hong提供补丁。bpo-40275: 现在,
logging
包在unittest
中仅当使用assertLogs()
断言时才会被延迟导入。bpo-40275: 现在,
asyncio
包在unittest
中仅当使用IsolatedAsyncioTestCase
类时才会被延迟导入。bpo-40330: 在
ShareableList.__setitem__()
中,检查新字符串项的大小是在将其编码为 utf-8 之后,而不是之前。bpo-40148: Added
pathlib.Path.with_stem()
to create a new Path with the stem replaced.bpo-40325: 弃用了在 random.sample() 中对集合对象的支持。
bpo-40257: 改进了
typing
模块的帮助信息。现在所有特殊形式和特殊泛型别名(如Union
和List
)的文档字符串都会被显示。使用help()
查看像List[int]
这样的泛型别名时,会显示相应具体类型(在这个例子中是list
)的帮助信息。bpo-40257:
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: Remove deprecated
symtable.SymbolTable.has_exec()
.bpo-40196: 修复了
symtable
模块中的一个错误,该错误导致错误地将全局变量报告为局部变量。由Pablo Galindo提供补丁。bpo-40190: 向
posix.sysconf()
添加了对_SC_AIX_REALMEM
的支持。bpo-40182: 移除了
typing.NamedTuple
类的_field_types
属性。bpo-36517: 现在使用
typing.NamedTuple
进行多重继承时会引发错误,而不是静默忽略其他类型。bpo-40126: 修复了在unittest.mock中还原多个补丁的问题。如果补丁的
__enter__()
失败,其__exit__()
现在永远不会被调用。现在从__exit__()
返回true会静默异常。bpo-40094: http.server的CGIHTTPRequestHandler现在记录CGI脚本的退出代码,而不是os.waitpid()的CGI脚本退出状态。例如,如果脚本被信号11杀死,现在会记录:“CGI脚本退出代码 -11。”
bpo-40108: Improve the error message when triying to import a module using
runpy
and incorrently use the ".py" extension at the end of the module name. Patch by Pablo Galindo.bpo-40094: 添加了
os.waitstatus_to_exitcode()
函数:将等待状态转换为退出代码。bpo-40089: 修复 threading._after_fork(): 如果 fork 不是由 threading.Thread 生成的线程调用的,threading._after_fork() 现在会为 _main_thread 创建一个 _MainThread 实例,而不是 _DummyThread 实例。
bpo-40089: Add a private
_at_fork_reinit()
method to_thread.Lock
,_thread.RLock
,threading.RLock
andthreading.Condition
classes: reinitialize the lock at fork in the child process, reset the lock to the unlocked state. Rename also the private_reset_internal_locks()
method ofthreading.Event
to_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: Deprecate passing None as an argument for
shlex.split()
'ss
parameter. Patch by 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: Move the
PyGC_Head
structure to the internal C API.bpo-40170: 将
PyObject_IS_GC()
宏转换为函数以隐藏实现细节。bpo-40241: 向公共API添加函数
PyObject_GC_IsTracked()
和PyObject_GC_IsFinalized()
,以分别查询Python对象是否正在被跟踪或已经被垃圾收集器终结。由Pablo Galindo提供补丁。bpo-40170: The
PyObject_NEW()
macro becomes an alias to thePyObject_New()
macro, and thePyObject_NEW_VAR()
macro becomes an alias to thePyObject_NewVar()
macro, to hide implementation details. They no longer access directly thePyTypeObject.tp_basicsize
member.bpo-40170:
PyType_HasFeature()
现在总是调用PyType_GetFlags()
以隐藏实现细节。以前,当不使用有限C API时,它直接访问PyTypeObject.tp_flags
成员。bpo-40170: Convert the
PyObject_GET_WEAKREFS_LISTPTR()
macro to a function to hide implementation details: the macro accessed directly to thePyTypeObject.tp_weaklistoffset
member.bpo-40170: 将
PyObject_CheckBuffer()
宏转换为函数以隐藏实现细节:该宏直接访问PyTypeObject.tp_as_buffer
成员。bpo-40170: 始终将
PyIndex_Check()
声明为不透明函数以隐藏实现细节:移除PyIndex_Check()
宏。该宏直接访问了PyTypeObject.tp_as_number
成员。bpo-39947: 添加
PyThreadState_GetID()
函数:获取 Python 线程状态的唯一标识符。
Python 3.9.0 alpha 5¶
发布日期: 2020-03-23
安全性¶
bpo-38576: Disallow control characters in hostnames in http.client, addressing CVE-2019-18348. Such potentially malicious header injection URLs now cause a InvalidURL to be raised.
核心与内置函数¶
bpo-40010: 优化多线程应用中的待处理调用。如果非主线程调度了一个待处理调用(
Py_AddPendingCall()
),字节码评估循环不再在每条字节码指令处中断以检查无法执行的待处理调用。只有主线程可以执行待处理调用。此前,字节码评估循环在每条指令处中断,直到主线程执行待处理调用。
bpo-1635741: 将_weakref扩展模块移植到多阶段初始化(PEP 489)。
bpo-1635741: 将 _collections 模块移植到多阶段初始化(PEP 489)。
bpo-40010: 优化多线程应用中的信号处理。如果非主线程接收到信号,字节码评估循环不再在每条字节码指令处中断以检查无法处理的待处理信号。只有主解释器的主线程可以处理信号。
此前,字节码评估循环在每条指令处中断,直到主线程处理信号。
bpo-39984: 如果在子解释器中调用
Py_AddPendingCall()
,现在该函数将被安排从子解释器调用,而不是从主解释器调用。每个子解释器现在都有自己预定的调用列表。bpo-1635741: 将 _heapq 模块移植到多阶段初始化。
bpo-1635741: 将 itertools 模块移植到多阶段初始化(PEP 489)。
bpo-37207: 通过使用 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()
no longer outputs optional fields and attributes with default values. The default values for optional fields and attributes of AST nodes are now set as class attributes (e.g.Constant.kind
is set toNone
).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: Reimplement
distutils.spawn.spawn()
function with thesubprocess
module.bpo-39794: 添加 --without-decimal-contextvar 构建选项。这启用了线程本地而非协程本地的上下文。
bpo-36144:
collections.defaultdict
现在实现了|
操作符 (PEP 584)。bpo-39517: 修复 runpy.run_path() 在使用路径类对象时的问题。
bpo-39775: 将
inspect.Signature.parameters
改回collections.OrderedDict
。在 Python 3.9.0a4 中,这被改为dict
。bpo-39678: 重构
concurrent.futures.ProcessPoolExecutor
中的 queue_manager,使其更易于维护。bpo-39764: 修复在 PyAsyncGenObject Task 上调用 get_stack 时的 AttributeError。
bpo-39769:
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
will no longer statically linkvcruntime140.dll
when a redistributable version is unavailable. All future releases of CPython will include a copy of this DLL to ensure distributed extensions can continue to load.bpo-38380: 更新 Windows 构建以使用 SQLite 3.31.1。
bpo-39789: 更新 Windows 发布构建机器到 Visual Studio 2019 (MSVC 14.2)。
bpo-34803: 现在为 nuget.org 提供的包包括存储库引用和捆绑的图标图像。
macOS¶
bpo-38380: 更新 macOS 构建以使用 SQLite 3.31.1。
IDLE¶
工具/示例¶
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:
home()
andexpanduser()
on Windows now preferUSERPROFILE
and no longer useHOME
, which is not normally set for regular user accounts. This makes them again behave likeos.path.expanduser()
, which was changed to ignoreHOME
in 3.8, see 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: The previously deprecated
xpath()
andxgtitle()
methods ofnntplib.NNTP
have been removed.bpo-39357: 移除
bz2.BZ2File
的 buffering 参数。自 Python 3.0 起,该参数被忽略,使用它会发出DeprecationWarning
。传递一个已打开的文件对象以控制文件的打开方式。compresslevel 参数变为仅关键字参数。bpo-39353: 弃用 binhex4 和 hexbin4 标准。弃用
binhex
模块以及以下binascii
函数:b2a_hqx()
、a2b_hqx()
、rlecode_hqx()
、rledecode_hqx()
、crc_hqx()
。bpo-39351: 移除
base64.encodestring()
和base64.decodestring()
,这两个别名自 Python 3.1 起已被弃用:改用base64.encodebytes()
和base64.decodebytes()
。bpo-39350: 移除
fractions.gcd()
函数,该函数自 Python 3.5 起已被弃用 (bpo-22486):改用math.gcd()
。bpo-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
andNNTP_SSL
now raise aValueError
if the given timeout for their constructor is zero to prevent the creation of a non-blocking socket. Patch by 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: Updated the Gmane domain from news.gmane.org to news.gmane.io which is used for examples of
NNTP
news reader server and nntplib tests.bpo-35292: 将
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: Correctly parenthesize filter-based statements that contain lambda expressions in
lib2to3
. Patch by 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.tool
CLI 添加格式化 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:
asyncio
now raisesTyperError
when calling incompatible methods with anssl.SSLSocket
socket. Patch by 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: Update vendorized expat library version to 2.2.8, which resolves CVE-2019-15903.
bpo-37764: 修复了 email._header_value_parser.get_unstructured 在特定情况下进入无限循环的问题,这些情况包括电子邮件头部没有尾随空白,以及包含无效编码字的情况。由 Ashwin Ramaswami 提供补丁。
bpo-37461: 修复解析特别构造的电子邮件头部时出现的无限循环问题。补丁由 Abhilash Raj 提供。
bpo-37463: ssl.match_hostname() 不再接受 IPv4 地址后面附加额外文本,且仅接受不带尾随空格的四点表示法。某些 inet_aton() 实现会忽略空格及空格后的所有数据,例如 '127.0.0.1 whatever'。
bpo-37363: Adds audit events for
ensurepip
,ftplib
,glob
,imaplib
,nntplib
,pdb
,poplib
,shutil
,smtplib
,sqlite3
,subprocess
,telnetlib
,tempfile
andwebbrowser
, as well asos.listdir()
,os.scandir()
andbreakpoint()
.bpo-37364: 现在在读取
.pth
文件时使用io.open_code()
。bpo-34631: 在 Windows 安装程序中更新 OpenSSL 至 1.1.1c。
bpo-34155: 修复解析包含多个
@
的无效电子邮件地址(例如 a@b@c.com)时的问题,确保不会将第二个@
之前的部分作为有效电子邮件地址返回。由 maxking 和 jpic 提供补丁。
核心与内置函数¶
bpo-38631: 在
float.__getformat__()
中将Py_FatalError()
调用替换为常规的RuntimeError
异常。bpo-38639: Optimized
math.floor()
,math.ceil()
andmath.trunc()
for floats.bpo-38640: 修复了编译器中的一个bug,该bug在总是为假的while循环中存在break语句和continue语句时会引发错误。由Pablo Galindo提供补丁。
bpo-38613: 优化了
dict_keys
的一些集合操作(例如|
、^
、和-
)。d.keys() | other``之前比 ``set(d) | other
慢,但现在它们的性能几乎相同。bpo-28029:
"".replace("", s, n)``现在对于所有非零 ``n
返回s
而不是空字符串。bytes
和bytearray
对象也有类似的更改。bpo-38535: 修复了装饰器中无参数调用的AST节点的行号和列偏移。
bpo-38525: 修复了在使用空
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: On FreeBSD, Python no longer calls
fedisableexcept()
at startup to control the floating point control mode. The call became useless since FreeBSD 6: it became the default mode.bpo-38006: 修复了一个由于弱引用和循环垃圾收集器交互导致的错误。我们必须清除垃圾中的任何弱引用,以防止它们的回调执行并导致崩溃。
bpo-38317: 修复警告选项的优先级:
PyConfig.warnoptions
拥有最高优先级,如 PEP 587 所述。bpo-38310: 在主解释器循环中预测
BUILD_MAP_UNPACK_WITH_CALL
->CALL_FUNCTION_EX
操作码对。由 Brandt Bucher 提供补丁。bpo-36871: 改进了对模拟的 assert_has_calls 和 assert_has_awaits 方法的错误处理。修复了一个错误,其中在将预期调用绑定到模拟的规范时遇到的任何错误都被静默吞噬,导致误导性的错误输出。
bpo-11410: 通过使用 gcc >= 4.0 中可用的可见性属性,在 POSIX 和 Windows 上以统一的方式提供了更好的符号可见性控制。POSIX 构建文件已更新,以使用 -fvisibility=hidden 编译,最小化导出的符号。
bpo-38236: 如果 Python 无法导入文件系统和标准 IO 编码的 Python 编解码器,现在会转储路径配置。
bpo-38013: 允许为未启动的异步生成器助手调用
async_generator_athrow().throw(...)
。这修复了在asyncio.run()
调用结束时出现的烦人警告。bpo-38124: 修复了 PyState_AddModule 中的一个差一错误,该错误可能导致内存越界访问。
bpo-38116: select 模块现在符合 PEP-384 标准,不再有静态状态。
bpo-38113: ast 模块已更新至 PEP-384 标准,所有静态内容已被移除。
bpo-38076: struct 模块现在兼容 PEP-384。
bpo-38075: random 模块现在兼容 PEP-384。
bpo-38074: zlib 模块已兼容 PEP-384。
bpo-38073: 使 pwd 扩展模块兼容 PEP-384。
bpo-38072: grp 模块已兼容 PEP-384。
bpo-38069: 使 _posixsubprocess 兼容 PEP-384。
bpo-38071: 使 termios 扩展模块兼容 PEP-384。
bpo-38005: 修复了 InterpreterID 和 ChannelID 的比较和创建。
bpo-36946: 修复了处理切片时可能发生的有符号整数溢出。由 hongweipeng 提供补丁。
bpo-37994: 修复了在多个站点中如果属性查找失败时静默任意错误的问题。只有 AttributeError 应该被静默。
bpo-8425: 优化了当另一个集合远大于基础集合时的集合 difference_update 操作。(由 Evgeny Kapun 建议,Michele Orrù 贡献代码)。
bpo-37966:
is_normalized()
的实现对于未规范化的字符串已经大大加速,这是通过实现 Unicode 标准中的完整规范化快速检查算法完成的。bpo-37947: 正确调整了命名表达式符号表生成中的递归级别。由 Pablo Galindo 提供补丁。
bpo-37812:
Object/longobject.c
中使用的CHECK_SMALL_INT
宏已被替换为在每个调用站点显式的return
。bpo-37751: 修复
codecs.lookup()
以与encodings.normalize_encoding()
相同的方式标准化编码名称,除了codecs.lookup()
还将名称转换为小写。bpo-37830: 修复了当相应的
try
块包含带有非常量值的return
时,在finally
块中编译break
和continue
的问题。bpo-20490: 通过Anthony Sottile的贡献,改进了循环
from
导入时部分初始化模块的导入错误消息。bpo-37840: 修复了
bytearray
的sq_item
中负索引的处理。由Sergey Fedoseev提供补丁。bpo-37802: 略微提高了
PyLong_FromUnsignedLong()
、PyLong_FromUnsignedLongLong()
和PyLong_FromSize_t()
的性能。由Sergey Fedoseev提供补丁。bpo-37409: 确保在交互式会话和没有父包的脚本中,显式相对导入总是引发ImportError,而不是将当前模块视为包。由Ben Lewis提供补丁。
bpo-32912: 回退了 bpo-32912:对于字符串和字节字面量中的无效转义序列,现在发出
SyntaxWarning
而不是DeprecationWarning
。bpo-37757: PEP 572: 如PEP所述,当赋值表达式与理解作用域的交互导致目标作用域不明确时,现在会引发
SyntaxError
。最初由PEP提出的
TargetScopeError
子类已被移除,改为仅对不允许的情况引发常规语法错误。bpo-36279: 修复了
os.wait3()
中可能使用未初始化内存的问题。bpo-36311: 解码大于2GiB的字节对象更快,并且当多字节字符跨越块边界时不再失败。
bpo-34880: 如果
AssertionError
异常被遮蔽,assert
语句现在可以正常工作。由Zackery Spytz提供补丁。bpo-37340: 移除了绑定方法对象(
free_list
)的对象缓存。由于LOAD_METHOD
操作码和_PyObject_VectorcallMethod
C API 的存在,临时绑定方法对象的使用比以前少。bpo-37648: 修复了
list.__contains__()
、tuple.__contains__()
及其他几处的小不一致性。集合的项现在始终位于==
的左侧,而针位于右侧。bpo-37444: 更新了
builtins.__import__()
和importlib.__import__()
之间的异常差异。bpo-37619: 当将包装描述符从一个类添加到另一个类时(例如,在
int
子类上设置__add__ = str.__add__
),调用操作符时会正确引发异常。bpo-37593: 在
ast.parameters
节点的构造函数中交换了 posonlyargs 和 args 参数的位置。bpo-37543: 为非 PGO 构建优化了 pymalloc。
bpo-37537: 在 _Py_GetAllocatedBlocks() 内部计算分配的 pymalloc 块。这减慢了 _Py_GetAllocatedBlocks() 的速度,但为 _PyObject_Malloc() 和 _PyObject_Free() 带来了小幅加速。
bpo-37467: 修复了
sys.excepthook()
和PyErr_Display()
,如果文件名是字节字符串。例如,对于文件名属性是字节字符串的 SyntaxError 异常。bpo-37433: 修复了
SyntaxError
指示器在多行字符串中打印过多空格的问题 - 由 Anthony Sottile 提供。bpo-37417:
bytearray.extend()
现在正确处理了迭代过程中出现的错误。由 Brandt Bucher 提供补丁。bpo-37414: 未文档化的
sys.callstats()
函数已被移除。自 Python 3.7 起,它已被弃用,并总是返回None
。它需要一个特殊的构建选项CALL_PROFILE
,该选项已在 Python 3.7 中移除。bpo-37392: 移除
sys.getcheckinterval()
和sys.setcheckinterval()
函数。这两个函数自 Python 3.2 起已被弃用。请改用sys.getswitchinterval()
和sys.setswitchinterval()
。同时移除PyInterpreterState
结构中的check_interval
字段。bpo-37388: 在开发模式和调试构建中,现在会对字符串编码和解码操作的 encoding 和 errors 参数进行检查。例如:
open()
、str.encode()
和bytes.decode()
。默认情况下,为了获得最佳性能,errors 参数仅在第一次编码/解码错误时检查,encoding 参数有时会为空字符串忽略。
bpo-37348: 优化了使用 UTF-8 和 ASCII 编解码器解码短 ASCII 字符串的性能。
b"foo".decode()
大约快了 15%。由 Inada Naoki 提供补丁。bpo-24214: 改进了 UTF-8 和 UTF-16 增量解码器中对 surrogatepass 错误处理程序的支持。
bpo-37330:
open()
、io.open()
、codecs.open()
和fileinput.FileInput
不再接受文件模式中的'U'
("通用换行") 。此标志自 Python 3.3 起已被弃用。bpo-35224: 按照 PEP 572 的提议,反向评估字典推导式中 key: value 的求值顺序。即在
{k: v for ...}
中,k
将在v
之前被评估。bpo-37316: 修复了
mmap.mmap
中的PySys_Audit()
调用。bpo-37300: 移除了 classobject.c 中一个不必要的 Py_XINCREF。
bpo-37269: 修复了窥孔优化器中的一个错误,该错误未正确处理带有二元运算符的常量条件。补丁由 Pablo Galindo 提供。
bpo-20443: Python 现在获取命令行中指定的脚本文件名的绝对路径(例如:“python3 script.py”):__main__ 模块的 __file__ 属性和 sys.path[0] 现在变为绝对路径,而非相对路径。
bpo-37257: Python的小对象分配器(
obmalloc.c
)现在允许(不超过)一个空arena保持可用以便立即重用,而不将其返回给操作系统。这防止了在简单循环中可能每次迭代都创建和销毁一个新arena的颠簸现象。bpo-37231: 类型槽到特殊方法的派发(例如在执行
x * y
时调用__mul__
)已经变得更快。bpo-36974: 为内置函数和方法的所有调用约定实现了单独的vectorcall函数。这提高了调用的性能。
bpo-37213: 在窥孔优化器中正确处理负的行偏移。由Pablo Galindo提供补丁。
bpo-37219: 移除了空集差异的错误优化。
bpo-15913: 实现了
PyBuffer_SizeFromFormat()
函数(之前有文档记录但未实现):调用struct.calcsize()
。由Joannah Nanjekye提供补丁。bpo-36922: 槽函数优化了任何带有
Py_TPFLAGS_METHOD_DESCRIPTOR
的可调用对象,而不仅仅是function
的实例。bpo-36974: 槽
tp_vectorcall_offset
被无条件继承以支持当基类使用vectorcall时的``super().__call__()``。bpo-37160:
threading.get_native_id()
现在也支持NetBSD。bpo-37077: 为AIX添加了
threading.get_native_id()
支持。由M. Felt提供补丁bpo-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: Prevent
KeyError
thrown by_encoded_words.decode()
when given an encoded-word with invalid content-type encoding from propagating all the way toemail.message.get()
.bpo-38371: Deprecated the
split()
method in_tkinter.TkappType
in favour of thesplitlist()
method which has more consistent and predicable behavior.bpo-38341: 将
smtplib.SMTPNotSupportedError
添加到smtplib
的导出名称中。bpo-38319: 在 socket 和 shutil 模块中使用的 sendfile() 在 32 位架构上对于 >= 2GiB 的文件会引发 OverflowError。(由 Giampaolo Rodola 提供补丁)
bpo-38242: 回滚新的 asyncio Streams API
bpo-13153: 现在使用操作系统原生编码在 Python 字符串和 Tcl 对象之间进行转换。这允许显示、复制和粘贴到剪贴板的 emoji 和其他非 BMP 字符。从现在开始,从 Tcl 到 Python 以及反向的字符串转换永远不会失败(除了 MemoryError)。
bpo-38019: 正确处理已关闭的 asyncio unix 管道的暂停/恢复读取。
bpo-38163: 子 mock 现在会检测它们的类型是同步还是异步的,异步子 mock 将是 AsyncMocks,同步子 mock 将是 MagicMock 或 Mock(取决于它们的父类型)。
bpo-38161: 从 AsyncMock 中移除 _AwaitEvent。
bpo-38216: 允许那些罕见的代码从
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_metadata
0.20 同步,澄清files()
的行为并修复requires()
在dist-info
包上只返回一个要求的问题。bpo-38006: weakref.WeakValueDictionary 定义了一个局部 remove() 函数,用作弱引用的回调。这个函数是通过闭包创建的。修改实现以避免闭包。
bpo-37995: 向
ast.dump()
添加了 indent 选项,允许其产生多行缩进的输出。bpo-34410: 修复了重新进入
tee()
迭代器时的崩溃问题。现在在这种情况下会抛出 RuntimeError。bpo-37140: 修复了 Python 3.8 的一个 ctypes 回归问题。当 ctypes.Structure 通过拷贝传递给函数时,ctypes 内部创建了一个临时对象,这个临时对象的副作用是调用了结构体的终结器(__del__)两次。Python 语义要求终结器只被调用一次。修复 ctypes 内部不再两次调用终结器。
bpo-37587: 当 JSON 字符串中有许多反斜杠转义字符时,
_json.scanstring
现在快了多达 3 倍。bpo-37834: 防止在没有 fd 系统调用支持的非 Windows 系统(如旧版本的 macOS)上构建时 shutil.rmtree 抛出异常。
bpo-10978: 信号量和 BoundedSemaphores 现在可以一次释放多个等待的线程。
bpo-37972:
unittest.mock.call
对象的下标现在接收与其他自定义属性相同的链式机制,因此以下用法不再引发TypeError
:call().foo().__getitem__('bar')
由 blhsing 提供补丁
bpo-37965: 修复由 distutils.ccompiler.CCompiler.has_function 引起的 C 编译器警告。
bpo-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 <https://gitlab.com/python-devs/importlib_metadata/-/milestones/20>`_同步,改进了对EGG-INFO文件的处理,并修复了当入口点名称包含冒号时的崩溃问题。bpo-37695: 更正
curses.unget_wch()
的错误信息。由Anthony Sottile提供补丁。bpo-37689: 在
PurePath
中添加is_relative_to()
方法,以确定一个路径是否相对于另一个路径。bpo-29553: 修复了
argparse.ArgumentParser.format_usage()
对于互斥组的情况。补丁由 Andrew Nester 提供。bpo-37691: 让 math.dist() 接受序列(或可迭代对象)而不仅仅是元组作为坐标。
bpo-37685: 修复了一些类中的
__eq__
,__lt__
等实现。对于不支持的其他操作数类型,现在返回NotImplemented
。这允许其他操作数发挥作用(例如与ANY
的相等比较将返回True
)。bpo-37354: 将 Activate.ps1 Powershell 脚本设为静态,以允许对其进行签名。
bpo-37664: 更新了与 ensurepip 捆绑的 wheels(pip 19.2.3 和 setuptools 41.2.0)。
bpo-37663: 通过始终使用 __VENV_PROMPT__ 来使 venv shell 激活脚本保持一致。
bpo-37642: 允许
datetime.timezone
的纯 Python 实现在接近最小和最大边界时表示亚分钟偏移,特别是在 (23:59, 24:00) 和 (-23:59, 24:00) 的范围内。补丁由 Ngalim Siregar 提供。bpo-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:
ctypes.create_unicode_buffer()
now also supports non-BMP characters on platforms with 16-bitwchar_t
(for example, Windows and AIX).bpo-37266: 在子解释器中,现在尝试生成守护线程会引发异常。子解释器从未支持守护线程。之前,如果守护线程仍在运行,子解释器终止时会因 Python 致命错误而崩溃。
bpo-37210: Allow pure Python implementation of
pickle
to work even when the C_pickle
module is unavailable.bpo-21872: 修复
lzma
模块解压数据不完整的问题。当解压 FORMAT_ALONE 格式的文件且没有结束标记时,有时最后的一些字节无法输出。由马林提供补丁。bpo-35922: 修复
RobotFileParser.crawl_delay()
和RobotFileParser.request_rate()
,当 robots.txt 文件中没有定义相关规则时返回None
而不是引发AttributeError
。由 Rémi Lapeyre 提供补丁。bpo-35766: 将 feature_version 的格式更改为 (major, minor) 元组。
bpo-36607: Eliminate
RuntimeError
raised byasyncio.all_tasks()
if internal tasks weak set is changed by another thread during iteration.bpo-18748:
_pyio.IOBase
destructor now does nothing if getting theclosed
attribute fails to better mimic_io.IOBase
finalizer.bpo-36402: 修复 Python 关闭时等待线程的竞争条件。等待所有非守护线程的 Python 线程状态被删除(加入所有非守护线程),而不仅仅是等待非守护 Python 线程完成。
bpo-37206: 无法表示为 Python 对象的默认值不再在函数签名中错误地表示为
None
。bpo-37111: 向
logging.basicConfig
添加了encoding
和errors
关键字参数。bpo-12144: 确保在
CookieJar.make_cookies()
中处理带有expires
属性的 cookies。bpo-34886: 修复
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提供补丁
问题`36564`: 修复了当邮件策略的max_line_length不足以包含所需标记和消息中的任何值时触发的电子邮件头折叠逻辑中的无限循环。由Paul Ganssle提供补丁。
问题`36543`: 移除了Element.getchildren()、Element.getiterator()和ElementTree.getiterator()方法以及xml.etree.cElementTree模块。
问题`36409`: 移除了在Python 3.4中已弃用的旧plistlib API。
问题`36302`: distutils对源文件列表进行排序,使得默认情况下Extension .so文件的构建更具可重复性。
问题`36250`: 在非主线程中,忽略来自`signal`与`interaction`的`ValueError`。
问题`36046`: 向subprocess.Popen构造函数添加了`user`、`group`和`extra_groups`参数。由Patrick McLean提供补丁。
问题`32627`: 修复了当包含冲突的`_uuid`头时导致的编译错误。
问题`35800`: 弃用`smtpd.MailmanProxy`,为将来移除做准备。
问题`35168`:
shlex.shlex.punctuation_chars
现在是一个只读属性。问题`8538`: 向argparse添加了对布尔动作的支持,如`--foo`和`--no-foo`。由Rémi Lapeyre提供补丁。
bpo-20504: Fixes a bug in
cgi
module when a multipart/form-data request has noContent-Length
header.问题`25988`:
collections.abc
中的抽象基类不再暴露在常规的collections
模块中。问题`11122`: Distutils不会仅在指定的路径中检查rpmbuild。
问题`34775`: 当传递的不是str或PurePath的实例时,PurePath的除法处理现在返回NotImplemented而不是引发TypeError。由Roger Aiudi提供补丁。
问题`34749`:
binascii.a2b_base64()
现在快了2倍。由Sergey Fedoseev提供补丁。问题`34519`: 为HP Roman 8添加了额外的别名。由Michael Osipov提供补丁。
bpo-28009: 修复在MAC地址分隔符为'.'的平台以及MAC地址值中省略前导0的MAC地址格式情况下uuid.getnode()的问题。目前,AIX是唯一已知具有这些设置的平台。由Michael Felt提供补丁。
bpo-30618: 添加
readlink()
。由Girts Folkmanis提供补丁。bpo-32498: Made
urllib.parse.unquote()
accept bytes in addition to strings. Patch by Stein Karlsen.bpo-33348: lib2to3现在可以识别在
*
和**
之后的表达式,例如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: Documented that in
datetime.datetime.strptime()
, the leading zero in some two-digit formats is optional. Patch by Mike Gleen.bpo-36260: 在 zipfile 模块文档中添加了解压缩的陷阱。
bpo-37004: 在 difflib 的文档中,添加了一个明确警告,指出 SequenceMatcher 的 ratio 方法的结果可能依赖于输入字符串的顺序。
bpo-36960: 重构了
datetime
文档,旨在使其更加用户友好并提高可读性。由 Brad Solomon 提供补丁。bpo-36487: 在 C-API 文档中明确了“主”解释器的含义。
bpo-23460: 更新了使用
: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: Trying to import the
crypt
module on Windows will result in anImportError
with a message explaining that the module isn't supported on Windows. On other platforms, if the underlying_crypt
module is not available, the ImportError will include a message explaining the problem.bpo-37778: 修复用于 Microsoft Store 包的文件关联的图标。
bpo-37734: 修复使用注册表值从 Microsoft Store 应用启动 Python 的问题。
bpo-37702: 修复在 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: Replace use of
strcasecmp()
for the system function_stricmp()
. Patch by Minmin Gong.bpo-36590: 向socket模块添加原生蓝牙RFCOMM支持。
macOS¶
bpo-38117: 在macOS安装程序中更新OpenSSL至1.1.1d。
bpo-38089: 将Azure Pipelines迁移至最新的VM版本,并使macOS测试变为可选。
bpo-18049: 在macOS上将线程的默认堆栈大小从5MB增加到16MB,以匹配主线程的堆栈大小。这避免了线程深度递归时的崩溃。
bpo-34602: 通过在运行时不再调用resource.setrlimit来增加进程堆栈大小限制,避免在macOS上的测试套件失败。由于解释器正在构建为更大的默认堆栈大小,运行时更改不再需要。
bpo-35360: 更新macOS安装程序以使用SQLite 3.28.0。
bpo-34631: 在macOS安装程序中更新OpenSSL至1.1.1c。
IDLE¶
bpo-26353: 停止在保存IDLE shell窗口时添加新行。
bpo-4630: 添加一个选项来切换IDLE的shell、编辑器和输出窗口的光标闪烁。参见设置、常规、窗口首选项、光标闪烁。由Zackery Spytz提供补丁。
bpo-38598: 不尝试编译IDLE shell或输出窗口
bpo-36698: IDLE在向stderr写入不可编码的字符时不再失败。现在它会像常规的Python解释器一样用反斜杠转义它们。添加了标准流的
errors
字段。bpo-35379: 退出IDLE时,捕获任何AttributeError。当EditorWindow.close被调用两次时会发生一次。当IDLE从终端运行时,打印回溯是无用且烦人的。
bpo-38183: 为避免问题,test_idle忽略用户配置目录。它不再尝试创建或访问.idlerc或其中的任何文件。用户必须运行IDLE来发现保存设置时的问题。
bpo-38077: IDLE在初始化用户命名空间时不再添加'argv'。此错误仅影响3.7.4和3.8.0b2至3.8.0b4版本。
bpo-38041: Shell重启行现在填满窗口宽度,始终以'='开头,并避免不必要的换行。如果包含的文件名相对于宽度较长,行仍会换行。
bpo-35771: 为避免在较慢的机器上偶尔出现的虚假test_idle失败,增加test_tooltip中的``hover_delay``。
bpo-37824: 正确处理IDLE shell中的用户输入警告。停止将SyntaxWarnings转为SyntaxErrors。
bpo-37929: 当没有shell窗口时,IDLE设置对话框现在能正确关闭。
bpo-37902: 为IDLE模块、路径和堆栈浏览器添加鼠标滚轮滚动。由George Zhang提供补丁。
bpo-37849: 修复了补全列表在当前行上方显示时过高或过低的问题。
bpo-36419: 重构IDLE自动补全并改进测试。
bpo-37748: 重新排序运行菜单。将最常见的选择,运行模块,放在顶部。
bpo-37692: 通过示例shell交互和改进的shell元素标签来改善高亮配置示例。
bpo-37628: 设置对话框不再随字体大小扩展。
bpo-37627: 使用最近一次输入的命令行参数初始化自定义运行对话框。用户可以在提交前选择编辑。
bpo-33610: 修复首次切换时代码上下文未显示正确上下文的问题。
bpo-37530: 优化代码上下文以减少不必要的后台活动。字体和高亮更改现在与文本更改同时进行,而不是在随机延迟后。
bpo-27452: 通过内联
RemoveFile
和简化CreateConfigHandlers
中file
的处理来清理config.py
。bpo-37325: 修复帮助源和自定义运行对话框的标签焦点遍历顺序。
bpo-37321: 现在,两个子进程连接错误消息都指向IDLE文档的'启动失败'部分。
bpo-17535: 为IDLE编辑器窗口添加可选的行号。除非在配置对话框的常规标签中设置,否则窗口打开时不显示行号。
bpo-26806: 为了补偿由IDLE添加的堆栈帧并避免低递归限制可能带来的问题,用户代码执行过程中的限制增加了30。报告递归限制时减去30,使这一增加大部分透明。
bpo-37177: 正确地将搜索对话框'附加'到其主窗口,使其行为类似于其他对话框,并且不会隐藏在主窗口后面。
bpo-37039: 通过首次使用特定屏幕时暂时最大化窗口来调整“缩放高度”以适应单个屏幕。更改屏幕设置可能会使保存的高度无效。窗口最大化时,“缩放高度”无效。
bpo-35763: 通过仅在首行有空间时添加关于'/'仅表示位置的提示,使调用提示提醒不那么显眼。
bpo-5680: 在运行菜单中添加'运行...定制'以使用定制设置运行模块。输入的任何'命令行参数'都会添加到sys.argv。可以抑制正常的Shell主模块重启。
bpo-36390: 将格式菜单功能收集到format.py中。合并paragraph.py、rstrip.py和editor.py中的格式方法。
工具/示例¶
bpo-38118: 更新Valgrind抑制文件以忽略在使用GCC内置strcmp()时
PyUnicode_Decode()
中的误报。bpo-38347: pathfix.py:递归工作时,假设所有以'.py'结尾的文件都是Python脚本。
bpo-37803: pdb的
--help
和--version
长选项现在可以工作了。bpo-37942: 改进ArgumentClinic对浮点数的转换器。
bpo-37704: 移除
Tools/scripts/h2py.py
:使用cffi在Python中访问C API。bpo-37675: 2to3现在可以从压缩的标准库中运行。
bpo-37034: Argument Clinic现在在使用仅关键字参数的错误时使用参数名称而不是它们的位置。补丁由Rémi Lapeyre贡献。
bpo-37064: 向pathscript.py脚本添加选项-k:保留shebang标志。向pathscript.py脚本添加选项-a:添加标志。
C API¶
bpo-37633: 重新导出
pythonrun.h
中一些宏的函数兼容性包装器。bpo-38644: 为有限API提供
Py_EnterRecursiveCall()
和Py_LeaveRecursiveCall()
作为常规函数。之前,它们被定义为宏,但这些宏无法与有限API一起工作,因为有限API无法访问PyThreadState.recursion_depth
字段。从稳定ABI中移除``_Py_CheckRecursionLimit``。bpo-38650: 全局变量
PyStructSequence_UnnamedField
现在是一个常量,并引用一个常量字符串。bpo-38540: 修复了在未定义宏
PY_SSIZE_T_CLEAN
时,PyArg_Parse()
及类似函数对于格式单元"es#"
和"et#"
可能的内存泄漏。bpo-38395: 修复了由于在调用可能删除代理引用的对象的最后一个引用的某些关联方法时,
weakref.proxy
对象的生命周期管理不正确而导致的崩溃。由Pablo Galindo提供补丁。bpo-36389:
_PyObject_CheckConsistency()
函数现在在发布模式下也可用。例如,它可以用于调试GC中visit_decref()
函数的崩溃。bpo-38266: 恢复PyThreadState_DeleteCurrent()的移除,并附带文档。
bpo-38303: 更新audioop扩展模块以使用稳定的ABI(PEP-384)。由Tyler Kieft提供补丁。
bpo-38234:
Py_SetPath()
现在将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: Add
_PyObject_FunctionStr()
to get a user-friendly string representation of a function-like object. Patch by Jeroen Demeyer.bpo-29548: 函数
PyEval_CallObject
、PyEval_CallFunction
、PyEval_CallMethod
和PyEval_CallObjectWithKeywords
已被弃用。请改用PyObject_Call()
及其变体。bpo-37151:
PyCFunction_Call
现在是PyObject_Call()
的弃用别名。bpo-37540: vectorcall协议现在要求调用者仅将字符串作为关键字名称传递。
bpo-37207: vectorcall协议现在对
type
对象启用:将tp_vectorcall
设置为一个vectorcall函数,用于在调用类本身时替代tp_new
和tp_init
。bpo-21120: 将Python-ast.h、ast.h和asdl.h排除在有限API之外。
bpo-37483: 新增函数
_PyObject_CallOneArg
,用于调用带有一个位置参数的对象。bpo-37337: Add fast functions for calling methods:
_PyObject_VectorcallMethod()
,_PyObject_CallMethodNoArgs()
and_PyObject_CallMethodOneArg()
.bpo-28805: 已记录
METH_FASTCALL
调用约定。bpo-37221: The new function
PyCode_NewWithPosOnlyArgs()
allows to create code objects likePyCode_New()
, but with an extra posonlyargcount parameter for indicating the number of positonal-only arguments.bpo-37194: 向C API添加一个新的公共
PyObject_CallNoArgs()
函数:调用一个可调用的Python对象而不带任何参数。这是调用不带任何参数的回调函数的最有效方式。例如,在x86-64上,``PyObject_CallFunctionObjArgs(func, NULL)``每次调用在栈上分配960字节,而``PyObject_CallNoArgs(func)``每次调用仅分配624字节。bpo-37170: 修复
PyLong_AsUnsignedLongLongMask()
中的错误转换。bpo-35381: 将posixmodule.c中静态分配的类型
DirEntryType
和ScandirIteratorType
转换为堆分配类型。bpo-34331: Use singular/plural noun in error message when instantiating an abstract class with non-overriden abstract method(s).
Python 3.8.0 beta 1¶
发布日期: 2019-06-04
安全性¶
bpo-35907: CVE-2019-9948: Avoid file reading by disallowing
local-file://
andlocal_file://
URL schemes inURLopener().open()
andURLopener().retrieve()
ofurllib.request
.bpo-33529: 防止在电子邮件头编码中使用的fold函数在头中有太多非ASCII字符时进入无限循环。
bpo-33164: 更新了blake2实现,使用平台提供的安全memset实现。
核心与内置函数¶
bpo-35814: 允许在带注释的赋值的右侧进行解包。特别是,现在允许``t: Tuple[int, ...] = x, y, *z``。
bpo-37126: 现在所有structseq对象都由垃圾收集器跟踪。由Pablo Galindo提交的补丁。
bpo-37122: 使代码对象的 co_argcount 属性表示位置参数的总数(包括仅限位置参数)。co_posonlyargcount 的值可用于区分哪些参数是仅限位置的,而差值(co_argcount - co_posonlyargcount)是位置或关键字参数的数量。由Pablo Galindo提交的补丁。
bpo-20092:
int
、float
和complex
的构造函数现在将使用__index__()
特殊方法,如果可用且相应的__int__()
、__float__()
或__complex__()
方法不可用。bpo-37087: 向OpenBSD添加原生线程ID(TID)支持。
bpo-26219: 实现了每操作码缓存机制,``LOAD_GLOBAL``指令使用它。``LOAD_GLOBAL``现在快了约40%。由Yury Selivanov和Inada Naoki贡献。
bpo-37072: 当flags为NULL时,修复PyAST_FromNodeObject()中的崩溃。
bpo-37029: 由于使用线性搜索来保持
obmalloc.c
的可用的arena列表按空闲内存池数量的顺序排序,释放大量小对象可能需要与arena数量的平方成正比的时间。现在无需搜索即可完成,使最坏情况下的时间与arena数量成线性关系。对于这一点非常明显的程序(通常同时有超过10万个小对象存活),这可以大大减少释放其内存所需的时间。bpo-26423: 当
sizeof(long) < sizeof(Py_ssize_t)
(例如,64位Windows) 时,修复``wrap_lenfunc()``中可能的溢出。bpo-37050: 改进用于“调试”f字符串的AST,这些字符串使用'='来打印出正在评估的表达式的源代码。从FormattedValue节点中删除expr_text,转而使用一个Constant字符串节点(可能与f字符串内部的相邻常量表达式合并)。
bpo-22385:
bytes.hex
、bytearray.hex
和memoryview.hex
方法以及``binascii.hexlify``和b2a_hex
函数现在能够在十六进制字节之间包含可选的分隔符。这一功能受到MicroPython的hexlify实现的启发。bpo-37032: 向代码类型(
types.CodeType
)添加了新的replace()
方法。bpo-37007: Implement
socket.if_nameindex()
,socket.if_nametoindex()
, andsocket.if_indextoname()
on Windows.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: Fix the error handling in
msilib.SummaryInformation.GetProperty()
. Patch by Zackery Spytz.bpo-26835: fcntl 模块现在包含了用于 memfd 密封的文件密封常量。
bpo-29262: 向
typing
模块添加了get_origin()
和get_args()
内省辅助函数。bpo-12639:
msilib.Directory.start_component()
no longer fails if keyfile is notNone
.bpo-36999: 添加了
asyncio.Task.get_coro()
方法,以公开暴露任务的协程对象。bpo-35246: 使
asyncio.create_subprocess_exec()
接受路径类参数。bpo-35279: 将
ThreadPoolExecutor
的默认 max_workers 从cpu_count() * 5
改为min(32, cpu_count() + 4)
。之前的值在多核机器上不合理地大。bpo-37076:
_thread.start_new_thread()
现在使用sys.unraisablehook()
而非sys.excepthook()
记录函数抛出的未捕获异常,以便钩子能够访问抛出异常的函数。bpo-33725: 在 macOS 上,
multiprocessing
模块现在默认使用 spawn 启动方法。bpo-37054: Fix destructor
_pyio.BytesIO
and_pyio.TextIOWrapper
: initialize their_buffer
attribute as soon as possible (in the class body), because it's used by__del__()
which callsclose()
.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_override``
bpo-36368: 修复在交互式会话中发送ctrl-c(KeyboardInterrupt)后导致SharedMemoryManager实例崩溃的错误
bpo-31904: 修复VxWorks的mmap失败问题
bpo-27497:
csv.DictWriter.writeheader()
现在返回底层csv.Writer.writerow()
方法的返回值。补丁由Ashish Nitin Patil贡献。bpo-36239: 解析.mo文件时现在忽略以#-#-#-#-#开头和结尾的注释。
bpo-26707: 使plistlib能够读写作为KeyedArchive文件创建的二进制plist文件。具体来说,这允许plistlib处理0x80令牌作为UID对象。
bpo-31904: 为VxWorks添加posix模块支持。
bpo-35125: Asyncio: 在shield中移除外部取消时的内部回调
bpo-35721: Fix
asyncio.SelectorEventLoop.subprocess_exec()
leaks file descriptors ifPopen
fails and called withstdin=subprocess.PIPE
. Patch by Niklas Fiekas.bpo-31855:
unittest.mock.mock_open()
结果现在尊重read([size])的参数。补丁由Rémi Lapeyre贡献。bpo-35431: 实现
math.comb()
函数,返回二项式系数,计算从n个项目中无重复且无序地选择k个项目的方式数。由Yash Aggarwal和Keller Fuchs提供补丁。bpo-26660: 修复
TemporaryDirectory
清理中的权限错误。之前当在临时目录中创建了不可写或不可搜索的文件或目录时,``TemporaryDirectory.cleanup()``会失败。bpo-34271: 向ssl模块添加调试辅助功能。现在可以转储密钥材料并跟踪TLS协议。默认和stdlib上下文也支持SSLKEYLOGFILE环境变量。
bpo-26467: 添加了AsyncMock以支持使用unittest来模拟asyncio协程。由Lisa Roach提供补丁。
bpo-33569: dataclasses.InitVar: 暴露用于创建init变量的类型。
bpo-34424: 修复了当policy.linesep设置为多字符字符串时,包含编码字符串的消息的序列化问题。由Jens Troeger提供补丁。
bpo-34303:
functools.reduce()
的性能略有提升。由Sergey Fedoseev提供补丁。bpo-33361: 修复了
codecs.StreamRecoder
中的一个错误,其中搜索可能会在缓冲区中留下旧数据并破坏后续的读取调用。由Ammar Askar提供补丁。bpo-22454:
shlex
模块现在暴露了shlex.join()
,这是shlex.split()
的反向操作。由Bo Bayles提供补丁。bpo-31922:
asyncio.AbstractEventLoop.create_datagram_endpoint()
: 当允许广播时,不连接UDP套接字。这允许在UDP广播后接收回复。bpo-24882: 更改ThreadPoolExecutor以在创建新线程之前使用现有的空闲线程。
bpo-31961: 在Windows上的
subprocess.Popen()
中添加了对bytes和path-like对象的支持。如果 shell 为False
,args 参数现在接受一个 path-like object 和一个包含bytes和path-like对象的序列。executable 参数现在接受bytes和 path-like object。cwd 参数现在接受bytes对象。基于Anders Lorentsen的补丁。bpo-33123:
pathlib.Path.unlink
现在接受一个 missing_ok 参数以避免引发FileNotFoundError
。由Robert Buchholz提供补丁。bpo-32941: 允许
mmap.mmap
对象访问madvise()系统调用(通过mmap.mmap.madvise()
)。bpo-22102: 添加了对磁盘设置为0的ZIP文件的支持。这类文件通常由Windows上的内置工具在使用ZIP64扩展时创建。由Francisco Facioni提供补丁。
bpo-32515: trace.py现在可以通过python3 -m trace -t --module module_name来运行模块。
bpo-32299: 修改了
unittest.mock.patch.dict()
,使其作为上下文管理器使用时返回被修补的字典。由Vadim Tsander提供补丁。bpo-27141: 为
collections.UserList``和 ``collections.UserDict
添加了__copy__()
方法,以正确实现对象的浅拷贝。由Bar Harel提供补丁。bpo-31829: 现在在协议0的Unicode字符串pickle中,
\r
、\0``和 ``\x1a
(Windows上的文件结束符) 会被转义。这使得可以从Python 2中以文本模式打开的文件中无损失地加载它们。bpo-23395:
_thread.interrupt_main()
现在在SIGINT
信号被忽略或未被Python处理时避免设置Python错误状态。
文档¶
bpo-36896: 澄清了一些类型在Python版本间构造函数签名不稳定。
bpo-36686: 改进了
asyncio.subprocess_exec
函数stdin、stdout和stderr参数的文档,指定了哪些值受支持。同时提到不支持作为文本解码。添加了一些测试来验证传递给std*参数的各种值是否实际工作。
bpo-36984: 改进了
typing
模块中添加版本引用的说明 - 由Anthony Sottile提供。bpo-36868: 新变化现在提到SSLContext.hostname_checks_common_name而不是SSLContext.host_flags。
bpo-35924: 在
curses.addstr()
文档中添加了一条说明,警告由于ncurses的bug,多行字符串可能导致段错误。bpo-36783: 根据PEP 495,为Time_FromTimeAndFold和PyDateTime_FromDateAndTimeAndFold添加了C API文档。由Edison Abahurire提供补丁。
bpo-36797: 更多遗留的distutils文档已被删除,或者更明确地标记为仅在setuptools文档独立覆盖之前保留。
bpo-22865: 增加了关于
pty.spawn
函数的文档细节。bpo-35397: 移除弃用并记录urllib.parse.unwrap()。由Rémi Lapeyre提供补丁。
bpo-32995: 在词汇表中添加了上下文变量。
bpo-33519: 澄清
copy()
不是MutableSequence
ABC的一部分。bpo-33482: 使
codecs.StreamRecoder.writelines
接受字节列表。bpo-25735: 为func factorial添加了文档,以表明返回整数值。
bpo-20285: 扩展object.__doc__(文档字符串)以使其更清晰。修改pydoc.py,以便help(object)列出对象方法(对于其他类,help省略了object基类的方法)。
测试¶
bpo-37069: 修改test_coroutines、test_cprofile、test_generators、test_raise、test_ssl和test_yield_from,使用
test.support.catch_unraisable_exception()
而非test.support.captured_stderr()
。bpo-37098: 修复旧版Linux内核上的test_memfd_create。
bpo-37081: 使用OpenSSL 1.1.1c进行测试。
bpo-36829: 添加
test.support.catch_unraisable_exception()
: 使用sys.unraisablehook()
捕获不可报告异常的上下文管理器。bpo-36915: 主regrtest进程现在即使工作进程崩溃或在KeyboardInterrupt(CTRL+c)时被杀死,也会始终移除所有工作进程的临时目录。
bpo-36719: "python3 -m test -jN ..."现在在工作者进程崩溃(CHILD_ERROR状态)时继续执行下一个测试。以前,测试套件会立即停止。使用--failfast在第一个错误处停止。
bpo-36816: 更新Lib/test/selfsigned_pythontestdotnet.pem以匹配self-signed.pythontest.net的新TLS证书。
bpo-35925: 当现代操作系统或发行版默认的OpenSSL策略拒绝连接到证书较弱的服务器时,跳过httplib和nntplib的网络测试。
bpo-36782: 为
datetime
模块中的几个C API函数添加测试。补丁由Edison Abahurire提供。bpo-36342: 如果平台缺少可正常工作的sem_open,则在test_venv中修复test_multiprocessing。
构建¶
bpo-36721: 要将Python嵌入到应用程序中,必须向
python3-config --libs --embed
传递一个新的--embed
选项以获取-lpython3.8
(将应用程序链接到libpython) 。为了同时支持3.8及更早版本,首先尝试python3-config --libs --embed
,如果前一个命令失败,则回退到``python3-config --libs`` (不带--embed
) 。增加一个 pkg-config
python-3.8-embed
模块用来将 Python 嵌入到一个应用中:pkg-config python-3.8-embed --libs
包含-lpython3.8
。 要同时支持 3.8 和旧版本,请先尝试pkg-config python-X.Y-embed --libs
并在此命令失败时回退到pkg-config python-X.Y --libs
(即不带--embed
) (请将X.Y
替换为 Python 版本号)。另一方面,
pkg-config python3.8 --libs``不再包含 ``-lpython3.8
。C扩展不应该链接到libpython(除了在Android上,这种情况由脚本处理);这一变化是有意为之的向后不兼容。bpo-36786: "make install"现在并行运行compileall。
Windows¶
bpo-36965: 包含STATUS_CONTROL_C_EXIT而不依赖于MSC编译器
bpo-35926: 为Windows更新到OpenSSL 1.1.1b。
bpo-29883: 为Proactor Event Loop添加对UDP传输的Windows支持。由Adam Meily提供补丁。
bpo-33407: 对MSVC实现了
Py_DEPRECATED()
宏。
macOS¶
bpo-36231: 支持在macOS上在没有安装/usr/include的情况下构建Python。从macOS 10.14开始,系统头文件仅通过Command Line Tools或Xcode应用程序提供的SDK可用。
IDLE¶
工具/示例¶
bpo-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: Address CVE-2019-9740 by disallowing URL paths with embedded whitespace or control characters through into the underlying http client request. Such potentially malicious header injection URLs now cause an http.client.InvalidURL exception to be raised.
bpo-35755:
shutil.which()
现在如果可用且PATH
环境变量未设置时,会使用os.confstr("CS_PATH")
。同时从posixpath.defpath
中移除当前目录。在 Unix 上,如果PATH
环境变量未设置,shutil.which()
和subprocess
模块不再在当前目录中搜索可执行文件。
核心与内置函数¶
bpo-36722: 在调试构建中,导入现在也会查找以发布模式编译的 C 扩展和以稳定 ABI 编译的 C 扩展。
bpo-32849: 修复 FreeBSD 上的 Python 初始化代码,以正确检测 stdin 文件描述符(fd 0)何时无效。
bpo-36623: 移除解析器头部和移除 pgen 后缺乏实现的函数声明。
bpo-20180: 由于 Argument Clinic 的贡献,
dict.pop()
现在快了 33%。由 Inada Naoki 提供补丁。bpo-36611: 调试内存分配器:默认从 Python 内存分配器的调试钩子中禁用 serialno 字段,以减少内存占用 5%。当记录致命内存错误时,启用
tracemalloc
以获取内存块分配的跟踪信息,以决定在哪里放置断点。编译 Python 时定义PYMEM_DEBUG_SERIALNO
以恢复该字段。bpo-36588: 在 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: Fix
distutils.sysconfig
ifsys.executable
isNone
or an empty string: useos.getcwd()
to initializeproject_base
. Fix also the distutils build command: don't usesys.executable
if it isNone
or an empty string.bpo-35755:
shutil.which()
anddistutils.spawn.find_executable()
now useos.confstr("CS_PATH")
if available instead ofos.defpath
, if thePATH
environment variable is not set. Moreover, don't useos.confstr("CS_PATH")
noros.defpath
if thePATH
environment variable is set to an empty string.bpo-25430: 提高
IPNetwork.__contains__()
的性能。bpo-30485: xml.etree.ElementTree中的路径表达式现在可以通过传递一个空字符串前缀的默认命名空间,避免为标签使用显式的命名空间前缀(或“{命名空间}标签”符号)。
bpo-36598: 修复当代码在追踪下执行时,Mock对象与spec的
isinstance
检查。由Karthikeyan Singaravelan提供补丁。bpo-18748: 在开发模式(
-X
dev
)和调试版本中,io.IOBase
析构函数现在会记录close()
异常。在发布模式下,这些异常默认是静默的。bpo-36575:
_lsprof
模块现在默认使用与time.perf_counter()
相同的内部计时器。Unix上以前使用gettimeofday(2)
。新计时器在大多数Unix平台上具有更好的分辨率,并且由于``perf_counter()``是单调的,计时不再受系统时钟更新的影响。由Inada Naoki提供补丁。bpo-33461: 当指定
encoding
选项时,json.loads
现在会发出DeprecationWarning
。由Matthias Bussonnier提供补丁。bpo-36559: 为了优化导入时间,random模块现在在seed(version=2)时更倾向于使用精简的内部_sha512模块,而不是hashlib。
bpo-17561: 将backlog=None设置为socket.create_server的默认值。
bpo-34373: 修复
time.mktime()
在AIX上对1970年之前年份的错误处理。bpo-36232: 当尝试打开实际上不存在的现有DBM数据库时,改进错误消息。由Marco Rougeth提供补丁。
bpo-36546: 添加statistics.quantiles()
bpo-36050: 优化
http.client.HTTPResponse.read()
以处理大响应。补丁由Inada Naoki提供。bpo-36522: 如果在
http.client
中 debuglevel 设置为>0,打印同一头部名称下多个值的所有值。由Matt Houglum提供补丁。bpo-36492: 弃用在应接受任意关键字参数并将其传递给其他函数的函数中,将必需参数(如 func)作为关键字参数传递的做法。现在,如果必需参数作为位置参数传递,则可以向这些函数传递任意关键字参数(即使名称是"self"和"func")。
bpo-27181: 添加 statistics.geometric_mean()。
bpo-30427:
os.path.normcase()
依赖os.fspath()
来检查其参数的类型。其posixpath.normcase()
和ntpath.normcase()
实现中的冗余检查已被移除。由 Wolfgang Maier 提供补丁。bpo-36385: 停止因IPv4八位组可能为八进制而拒绝它们。前导零被忽略,不再假定为指定八进制八位组。八位组始终是十进制数字。八位组仍必须不超过三位数字,包括前导零。
bpo-36434: 写入ZIP文件时的错误不再阻止其正确关闭。
bpo-36407: 修复了xml.dom.minidom中CDATA部分写入时的错误缩进。由Vladimir Surjaninov提供补丁。
bpo-36326: inspect.getdoc()现在可以在__slots__是字典时为成员对象找到文档字符串。
bpo-36366: 在未启动或已停止的
unittest.mock.patch()
对象上调用stop()
现在会返回None
而不是引发RuntimeError
,使该方法幂等。补丁由Karthikeyan Singaravelan提供。bpo-36348:
imap.IMAP4.logout()
方法不再静默忽略任意异常。bpo-31904: Add time module support and fix test_time faiures for VxWorks.
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: Added
create_server()
andhas_dualstack_ipv6()
convenience functions to automate the necessary tasks usually involved when creating a server socket, including accepting both IPv4 and IPv6 connections on the same socket. (Contributed by Giampaolo Rodola in bpo-17561.)bpo-23078: 向
unittest.mock.create_autospec()
添加了对classmethod()
和staticmethod()
的支持。初始由Felipe Ochoa提供补丁。bpo-35416: 修复了distutils中潜在的资源警告。由Mickaël Schoentgen提供补丁。
bpo-25451: 向
tkinter.PhotoImage
添加了透明度方法。由Zackery Spytz提供补丁。bpo-35082: 在调用
unittest.mock.Mock
上的dir时不再返回已删除的属性。bpo-34547:
wsgiref.handlers.BaseHandler
现在能够优雅地处理客户端连接的突然终止。由Petter Strandmark提供补丁。bpo-31658:
xml.sax.parse()
现在支持 路径类对象。由Mickaël Schoentgen提供补丁。bpo-34139: 在绑定前移除旧的unix数据报套接字。
bpo-33530: 在
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: Added Documention for PyInterpreterState_Main().
bpo-33043: 更新docs.python.org页面,在页面末尾(在'Reporting Bugs'和'About Documentation'之间)添加了一个'Contributing to Docs'链接。在'Found a Bug'页面的文档错误部分添加了额外的链接和信息。
bpo-35581: @typing.type_check_only现在允许类型存根标记在运行时不可用的函数和类。
bpo-33832: 在术语表中添加了'magic method'条目。
bpo-32913: 在正则表达式HOWTO中添加了re.Match.groupdict示例。
测试¶
bpo-36719: regrtest 现在总是检测不可回收的对象。之前,这个检查只在
--findleaks
启用时才进行。现在这个检查也能与-jN/--multiprocess N
一起工作。--findleaks
成为--fail-env-changed
的一个弃用别名。bpo-36725: 当使用多进程模式 (-jN) 时,regrtest 现在能更好地报告工作进程失败的错误,并且在工作者线程失败或被中断时立即退出。
bpo-36454: 将 test_time.test_monotonic() 改为仅测试睡眠命令后经过时间的下限而非上限。这避免了在慢速构建机器人上不必要的测试失败。由 Victor Stinner 提供补丁。
bpo-32424: 提高 xml.etree.ElementTree 的测试覆盖率。由 Gordon P. Hemsley 提供补丁。
bpo-32424: 修复 xml.etree.ElementTree 中 test_cyclic_gc() 测试的拼写错误。由 Gordon P. Hemsley 提供补丁。
bpo-36635: Add a new
_testinternalcapi
module to test the internal C API.bpo-36629: 修复
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: Fix memory leak in
Py_SetStandardStreamEncoding()
: release memory if the function is called twice.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: Since Python 3.7.0, calling
Py_DecodeLocale()
beforePy_Initialize()
produces mojibake if theLC_CTYPE
locale is coerced and/or if the UTF-8 Mode is enabled by the user configuration. The LC_CTYPE coercion and UTF-8 Mode are now disabled by default to fix the mojibake issue. They must now be enabled explicitly (opt-in) using the new_Py_PreInitialize()
API with_PyPreConfig
.bpo-36025: 修复了datetime C API中的一个意外更改,其中
PyDate_FromTimestamp()
函数的参数被错误地解释为单个时间戳而非参数元组,这导致现有代码开始引发TypeError
。这一不向后兼容的更改仅出现在Python 3.8的alpha版本中。由Paul Ganssle提供的补丁。bpo-35810: 修改
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"。为了向后兼容,现在两种拼写都会创建。错误的拼写未来可能会被移除。
:issue:`36297": "unicode_internal" 编解码器已被移除。自 Python 3.3 起已弃用。由 Inada Naoki 提供补丁。
bpo-36298: 在 pyclbr 中当模块无法找到时抛出 ModuleNotFoundError。感谢 'mental' 的 bug 报告。
bpo-36268: 将
tarfile
用于写入 tar 的默认格式从供应商特定的 GNU 切换到现代的 POSIX.1-2001 pax 标准。由 C.A.M. Gerlach 贡献。bpo-36285: 修复 array 模块中的整数溢出问题。由 Stephan Hohe 提供补丁。
bpo-31904: 为 VxWorks 添加 _signal 模块支持。
bpo-36272:
logging
不再静默忽略 RecursionError。补丁由 Rémi Lapeyre 贡献。bpo-36280: 向 ast.Constant 添加一个 kind 字段。如果字面量有 'u' 前缀(即 Python 2 风格的 unicode 字面量),则为 'u',否则为 None。
bpo-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: Added statistics.fmean() as a faster, floating point variant of the existing mean() function.
bpo-35918: 从 multiprocessing.managers.SyncManager.dict 中移除了损坏的
has_key
方法。由 Rémi Lapeyre 贡献。bpo-18283: 添加对 bytes 的支持到
shutil.which()
。bpo-35960: 修复
dataclasses.field()
丢弃作为元数据传递的空映射对象的问题。bpo-35500: 在
unittest.mock.Mock.assert_called_with()
断言错误中,将预期和实际的调用参数分别写在单独的行上。由 Susan Su 贡献。bpo-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: The
-I
command line option (run Python in isolated mode) is now also copied by themultiprocessing
anddistutils
modules when spawning child processes. Previously, only-E
and-s
options (enabled by-I
) were copied.bpo-34791: 当sys.flags.ignore_environment由-E或-I参数设置时,xml.sax和xml.dom.domreg不再使用环境变量来覆盖解析器实现。
bpo-17239: xml.sax和xml.dom.minidom解析器默认不再处理外部实体。外部DTD和ENTITY声明不再加载文件或创建网络连接。
bpo-34623: CVE-2018-14647: The C accelerated _elementtree module now initializes hash randomization salt from _Py_HashSecret instead of libexpat's default CSPRNG.
bpo-34405: 更新Windows构建的OpenSSL至1.1.0i版本。
bpo-33871: 修复在macOS上
os.sendfile()
中发送文件部分的问题。使用 trailers 参数可能导致从输入文件发送的字节数多于指定数量。bpo-32533: 修复_ssl中错误处理的线程安全性。
bpo-33136: Harden ssl module against LibreSSL CVE-2018-8970. X509_VERIFY_PARAM_set1_host() is called with an explicit namelen. A new test ensures that NULL bytes are not allowed.
bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。
bpo-32981: Regexes in difflib and poplib were vulnerable to catastrophic backtracking. These regexes formed potential DOS vectors (REDOS). They have been refactored. This resolves CVE-2018-1060 and CVE-2018-1061. Patch by Jamie Davis.
bpo-28414: ssl 模块现在允许用户在使用 SNI 时,自行执行 IDN 的编码与解码操作。
核心与内置函数¶
bpo-35877: 允许在 while 语句中的赋值表达式中省略圆括号。补丁由 Karthikeyan Singaravelan 提交。
bpo-35814: 允许在带有类型注解的赋值中使用与普通赋值相同的右侧表达式。特别地,现在允许写作``x: Tuple[int, int] = 1, 2`` (右侧不必括号)。
bpo-35766: 在 ast 模块中添加了解析 PEP 484 类型注释的选项。(默认关闭)本更改合并了第三方分支项目 [typed_ast](https://github.com/python/typed_ast) 的关键功能。
bpo-35713:重新组织 Python 的初始化流程,以便更早地启用异常处理机制和 sys.stderr。
bpo-33416: 向 Python AST 节点添加结束行和结束列位置信息。这是一个 C 级别的向后不兼容的更改。
bpo-35720: 修复了 Modules/main.c 中 pymain_parse_cmdline_impl 函数的一个小内存泄漏。
bpo-35634:
func(**kwargs)
现在会在kwargs
是一个包含多个相同键的映射时引发错误。自 Python 3.6 起,当其他关键字参数在**kwargs
之前传递时,已经会引发错误。bpo-35623: 修复了排序非常长的列表时的一个崩溃。由 Stephan Hohe 提供补丁。
bpo-35214: 添加了 clang Memory Sanitizer 构建工具,以解决来自 posix、socket、time、test_io 和 test_faulthandler 的误报。
bpo-35560: Fix an assertion error in
format()
in debug build for floating point formatting with "n" format, zero padding and small width. Release build is not impacted. Patch by Karthikeyan Singaravelan.bpo-35552: 在
PyUnicode_FromFormat()
中的格式字符%s
和%V
以及PyBytes_FromFormat()
中的%s
不再读取超过 precision 指定限制的内存。bpo-35504: 修复了删除某些属性时的段错误和
SystemError
s。由 Zackery Spytz 提供补丁。bpo-35504: 修复了删除 OSError 的 characters_written 属性时出现的 SystemError。
bpo-35494: 改进了 f-string 中括号不匹配的语法错误消息。
bpo-35444: 修复了在无法查找内置 "getattr" 时,pickling 方法中的错误处理。加快了 pickling 迭代器的速度。
bpo-35436: 修复了内存分配错误处理中的多个问题。由 Zackery Spytz 提供补丁。
bpo-35423: 将 eval 循环中的信号处理触发器与 "pending calls" 机制分离。没有语义上的变化,性能差异也不显著。
bpo-35357: unittest.mock._Call 和 unittest.mock.MagicProxy 的内部属性名(name, parent & from_kall)现在以 _mock_ 为前缀,以防止与广泛使用的对象属性冲突。修复了测试函数名称中的小错字。
bpo-35372: 修复了对于长度超过 2 GiB 且包含不可解码字节的输入的代码页解码器。
bpo-35336: 修复 PYTHONCOERCECLOCALE=1 环境变量:仅当 LC_CTYPE 区域设置为 "C" 时才强制使用 C 区域设置。
bpo-31241: 列表推导式、生成器表达式和元组的 AST 节点的 lineno 和 col_offset 属性现在指向开括号或方括号。对于没有括号的元组,它们指向第一个项目的位置。
bpo-33954: 对于
str.format()
、float.__format__()
和complex.__format__()
方法,当使用 "n" 格式化器时处理非 ASCII 小数点。bpo-35269: 修复了涉及新创建的协程的可能段错误。由 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: The C function
property_descr_get()
uses a "cached" tuple to optimize function calls. But this tuple can be discovered in debug mode withsys.getobjects()
. Remove the optimization, it's not really worth it and it causes 3 different crashes last years.bpo-34762: 修复contextvars C API以使用PyObject*指针类型。
bpo-34751: 元组的哈希函数现在基于xxHash,这在(以前的)病态情况下提供了更好的碰撞结果。此外,在64位系统上,它总体上改善了元组的哈希。由Jeroen Demeyer提供补丁,Tim Peters做出了重要贡献。
bpo-34735: 修复Modules/timemodule.c中的内存泄漏。由Zackery Spytz提供补丁。
bpo-34683: 修复了一个错误,其中一些SyntaxError错误指向了位置偏移一位的位置。
bpo-34651: 只允许主解释器进行fork。这避免了影响主解释器的可能性,这对运行时的操作至关重要。
bpo-34653: 移除未使用的函数PyParser_SimpleParseStringFilename。
bpo-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
环境变量和-X
pycache_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: Change dict growth function from
round_up_to_power_2(used*2+hashtable_size/2)
toround_up_to_power_2(used*3)
. Previously, dict is shrinked only whenused == 0
. Now dict has more chance to be shrinked.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:
check_environ()
ofdistutils.utils
now catchesKeyError
on callingpwd.getpwuid()
: don't create theHOME
environment variable in this case.bpo-10496:
posixpath.expanduser()
现在在HOME
环境变量未设置且当前用户没有家目录(如果当前用户标识在密码数据库中不存在)时,返回输入的 path 不变。这一更改修复了site
模块在当前用户在密码数据库中不存在(如果用户没有家目录)时的问题。bpo-35389:
platform.libc_ver()
现在在可用且未设置 executable 参数时使用os.confstr('CS_GNU_LIBC_VERSION')
。bpo-35394: 向 asyncio 抽象协议添加空槽。
bpo-35310: 修复
select.select()
中的一个错误,在某些情况下,文件描述符序列在信号中断后未修改返回,即使文件描述符可能尚未准备就绪。现在,如果发生超时,select.select()
将始终返回空列表。由 Oran Avraham 提供补丁。bpo-35380: 为 proactor asyncio 事件循环在 Windows 上启用 TCP_NODELAY。
bpo-35341: 向
typing
模块添加collections.OrderedDict
的通用版本。由 Ismo Toijala 提供补丁。bpo-35371: 修复了在 Windows 上传递不正确参数时
os.utime()
可能崩溃的问题。bpo-35346:
platform.uname()
现在在运行外部程序(如cmd /c ver
)时将stderr
重定向到os.devnull
。bpo-35066: 之前,在格式字符串中带有尾随 '%' 的 datetime 对象上调用 strftime() 方法会导致异常。然而,这仅在 datetime C 模块被使用时发生;Python 实现不匹配此行为。现在 datetime 符合 PEP-399,不会在尾随 '%' 上抛出异常。
bpo-35345: 函数
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: Fix incorrect parsing of
_io.IncrementalNewlineDecoder
's translate argument.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: The 2to3
execfile
fixer now opens the file with mode'rb'
. Patch by Zackery Spytz.bpo-34966:
pydoc
现在不仅支持对最终类中定义的方法的别名,还支持对继承的方法的别名。文档字符串不会为别名重复。bpo-34926:
mimetypes.MimeTypes.guess_type()
现在除了接受 URL 字符串外,还接受 path-like object。由 Mayank Asthana 提供补丁。bpo-23831: 向
tkinter.Canvas
小部件添加moveto()
方法。由 Juliette Monsel 提供补丁。bpo-34941:
xml.etree.ElementTree
模块中Element
类的find()
、findtext()
和findall()
方法现在能够查找Element
子类实例的子元素。bpo-32680: 现在
smtplib.SMTP
对象始终有一个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: Fixed integer overflow in the
digest()
andhexdigest()
methods for the SHAKE algorithm in thehashlib
module.bpo-34925: bisect 模块中函数的参数解析速度提高了 25%。
bpo-34900: 修复了
unittest.TestCase.debug()
在调用带有子测试的测试方法时的问题。由 Bruno Oliveira 提供补丁。bpo-34844: logging.Formatter 增强 - 确保 logging.Formatter 中的样式和 fmt 匹配 - 在每个格式样式类(StrFormatStyle、PercentStyle、StringTemplateStyle)中添加了 validate 方法。 - 此方法在 logging.Formatter 类的构造函数中调用 - 同时在每个样式类的 format 方法中重新引发 KeyError,以便更清楚地表明这是无效格式字段的错误。
bpo-34897: 调整 test.support.missing_compiler_executable 检查,以便忽略名义命令名为 "" 的情况。由 Michael Felt 提供补丁。
bpo-34871: 修复 inspect 模块在解析可调用对象的
__text_signature__
时污染sys.modules
的问题。bpo-34898: 向
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-34738: ZIP files created by
distutils
will now include entries for directories.bpo-34659: 向 itertools.accumulate() 添加一个可选的 initial 参数。
bpo-29577: 支持在创建 Enums 时使用多个混合类。
bpo-34670: 为 TLS 1.3 的握手后认证功能添加 SSLContext.post_handshake_auth 和 SSLSocket.verify_client_post_handshake。
bpo-32718: venv 的 Activate.ps1 脚本现在可以与 PowerShell Core 6.1 一起使用,并且在所有操作系统下都可用。
bpo-31177: 修复了在使用
reset_mock
时,无法在删除属性的模拟实例上使用的问题。bpo-34672: 添加一个变通方法,使得在某些情况下,musl C 库上的
'Z'
time.strftime()
说明符可以工作。bpo-34666: 实现
asyncio.StreamWriter.awrite
和asyncio.StreamWriter.aclose()
协程。这些方法是为了提供一致的流 API,默认情况下开启控制流。bpo-6721: 在 fork() 过程中获取日志模块常用的内部锁,以避免子进程中的死锁。
bpo-34658: 修复了一个罕见的解释器未处理异常状态 SystemError,仅在以下情况下出现:使用 subprocess 与 preexec_fn 同时,os.register_at_fork 注册了 after_parent 处理程序,并且 fork 系统调用失败。
bpo-34652: 确保
os.lchmod()
永远不会在 Linux 上定义。bpo-34638: 存储对流读取器的弱引用,以打破读取器和协议之间的强引用循环。这允许在流被删除(垃圾回收)而未调用
close()
时检测并关闭套接字。bpo-34536:
Enum._missing_
: 如果返回None则抛出ValueError
,如果返回非成员则抛出``TypeError``。bpo-34636: 加快对字节对象中s w和d的多次不匹配字符的重新扫描。(微优化)
bpo-24412: Add
addModuleCleanup()
andaddClassCleanup()
to unittest to support cleanups forsetUpModule()
andsetUpClass()
. Patch by Lisa Roach.bpo-34630: 不在asyncio代码中记录SSL证书错误(连接错误记录已被跳过)。
bpo-32490: 防止在
subprocess
异常消息中文件名重复。由Zackery Spytz提供补丁。bpo-34363: dataclasses.asdict()和.astuple()现在能正确处理命名元组。
bpo-34625: 更新供应商化的expat库版本至2.2.6。
bpo-32270: subprocess模块不再错误地关闭被重定向的文件描述符,即使它们在pass_fds中且不在默认的{0, 1, 2}集合内。
bpo-34622: 创建专用的
asyncio.CancelledError
、asyncio.InvalidStateError
和``asyncio.TimeoutError``异常类。使它们继承自concurrent.futures
包中对应的异常。将``asyncio``异常提取到一个单独的文件中。bpo-34610: 修复了
multiprocessing.managers.DictProxy
的迭代器。bpo-34421: 修复distutils对非ASCII字符串的日志记录。这曾导致Windows上的安装问题。
bpo-34604: 修复了由于不可见字符或尾部空格导致的
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: Fix crash when an
ABC
-derived class with invalid__subclasses__
is passed as the second argument toissubclass()
. Patch by Alexey Izbyshev.bpo-34427: 修复
MutableSequence
子类中a.extend(a)
导致的无限循环问题。bpo-34412: 使
signal.strsignal()
在 HP-UX 上工作。由 Michael Osipov 提供补丁。bpo-20849: shutil.copytree 现在接受一个新的
dirs_exist_ok
关键字参数。由 Josh Bronson 提供补丁。bpo-31715: 将
.mjs
文件扩展名与application/javascript
MIME 类型关联。bpo-34384:
os.readlink()
现在在 Windows 上接受 路径类 和bytes
对象。bpo-22602: UTF-7 解码器现在对以 "+" 开头的不良序列(如 RFC 2152 中指定)引发
UnicodeDecodeError
。由 Zackery Spytz 提供补丁。bpo-2122:
mmap.flush()
方法现在在成功时返回None
,在所有平台上的错误时引发异常。bpo-34341: 使用 ZIP64 扩展附加到 ZIP 存档不再增加现有条目的额外字段的大小。
bpo-34333: 修复
pathlib.PurePath.with_suffix()
中格式化错误消息时的 %-格式化问题。bpo-18540:
imaplib.IMAP4
和imaplib.IMAP4_SSL
类现在在使用 host 参数的默认值(''
)时正确解析到本地主机 IP。bpo-26502: 实现
traceback.FrameSummary.__len__()
方法以保持与旧元组 API 的兼容性。bpo-34318:
assertRaises()
,assertRaisesRegex()
,assertWarns()
和assertWarnsRegex()
如果传递的可调用对象为 None 则不再成功。它们在上下文管理器模式下不再忽略未知关键字参数。自 Python 3.5 以来,在这些情况下会引发 DeprecationWarning。bpo-9372: 弃用
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: The default asyncio task class now always has a name which can be get or set using two new methods (
get_name()
andset_name()
) and is visible in therepr()
output. An initial name can also be set using the newname
keyword argument toasyncio.create_task()
or thecreate_task()
method of the event loop. If no initial name is set, the default Task implementation generates a name likeTask-1
using a monotonic counter.bpo-34263: asyncio 的事件循环不会将超过一天的超时传递给 epoll/select 等。
bpo-34035: 修复 zipfile seek() 方法中的几个 AttributeError。由 Mickaël Schoentgen 提供补丁。
bpo-34075: 弃用将非 ThreadPoolExecutor 实例传递给
AbstractEventLoop.set_default_executor()
。bpo-34251: Restore
msilib.Win64
to preserve backwards compatibility since it's already used bydistutils
'bdist_msi
command.bpo-19891: 在交互式会话退出时写入历史记录时,忽略由于主目录缺失或不可写导致的错误。补丁由 Anthony Sottile 提供。
bpo-33089: 增强了 math.hypot() 以支持超过两个维度。
bpo-34228: tracemalloc: PYTHONTRACEMALLOC=0 环境变量和 -X tracemalloc=0 命令行选项现在可以用来在启动时显式禁用 tracemalloc。
bpo-13041: 使用
shutil.get_terminal_size()
在argparse.HelpFormatter
类中正确计算终端宽度。初始由 Zbyszek Jędrzejewski-Szmek 提供补丁。bpo-34213: 允许冻结的数据类有一个名为“object”的字段。之前这与内部使用的“object”冲突。
bpo-34052:
sqlite3.Connection.create_aggregate()
,sqlite3.Connection.create_function()
,sqlite3.Connection.set_authorizer()
,sqlite3.Connection.set_progress_handler()
方法在传递不可哈希对象作为可调用对象时抛出 TypeError。这些方法现在不会将这样的对象传递给 SQLite API。之前的行为可能导致段错误。由 Sergey Fedoseev 提供补丁。bpo-34197:
csv
读取器的 dialect 属性的 skipinitialspace, doublequote 和 strict 属性现在是bool
实例,而不是整数 0 或 1。bpo-32788: 在
sqlite3
模块中的__adapt__()
和__conform__()
方法中引发的除TypeError
以外的错误现在会传播给用户。bpo-21446: The
reload
fixer now usesimportlib.reload()
instead of deprecatedimp.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
functions that return a boolean result likeexists()
,lexists()
,isdir()
,isfile()
,islink()
, andismount()
, andpathlib.Path
methods that return a boolean result likeexists()
,is_dir()
,is_file()
,is_mount()
,is_symlink()
,is_block_device()
,is_char_device()
,is_fifo()
,is_socket()
now returnFalse
instead of raisingValueError
or its subclassesUnicodeEncodeError
andUnicodeDecodeError
for paths that contain characters or bytes unrepresentable at the OS level.bpo-26544: 修正了
platform.libc_ver()
的实现。它几乎总是为glibc返回版本'2.9'。bpo-33843: 移除了已弃用的
cgi.escape
,cgi.parse_qs
和cgi.parse_qsl
。bpo-33842: 移除了自Python 3.3以来已弃用的
tarfile.filemode
。bpo-30167: 如果设置了PYTHONSTARTUP,防止site.main()异常。由Steve Weber提供补丁。
bpo-33805: 当未指定InitVar时,改进dataclasses.replace()的错误消息
bpo-33687: 如果给定或解码了模式,修复
uu.decode()
对os.chmod()
的调用。由Timo Furrer提供补丁。bpo-33812: 对于tzinfo非None但d.tzinfo.utcoffset(d)返回None的Datetime实例d,现在astimezone()方法将其视为naive。
bpo-32108: 在configparser中,当节被分配给自己时不清除它。
bpo-27397: 使email模块正确处理长度无效的base64字符串。
bpo-33578: 实现多字节编码器/解码器状态方法
bpo-30805: 避免调试日志记录中的竞态条件
bpo-33476: 当地址组缺少最后的';'时,修复_header_value_parser.py。由Enrique Perez-Terron贡献
bpo-33694: asyncio: 修复在使用ProactorEventLoop时,pause_reading()/resume_reading()导致数据丢失的竞态条件。
bpo-32493: 在
configure.ac
中更正对uuid_enc_be
可用性的测试。由Michael Felt提供补丁。bpo-33792: 添加asyncio.WindowsSelectorEventLoopPolicy和asyncio.WindowsProactorEventLoopPolicy。
bpo-33274: W3C DOM Level 1指定Element.removeAttributeNode()的返回值为"The Attr node that was removed." xml.dom.minidom现在符合这一要求。
bpo-33778: 更新
unicodedata
的数据库至Unicode版本11.0.0。bpo-33165: 为日志记录调用添加了stacklevel参数,以允许使用包装器/辅助函数进行日志记录API的调用。
bpo-33770: 针对长度无效的编码输入,改进base64异常消息
bpo-33769: asyncio/start_tls: 修复错误消息;在未处理错误的情况下取消回调;如果SSLTransport被中止,则标记为已关闭。
bpo-33767: 在
mmap.mmap
对象上执行时,连接(+
)和重复(*
)序列操作现在会引发TypeError
而不是SystemError
。由 Zackery Spytz 提供补丁。bpo-33734: asyncio/ssl:修复 AttributeError,增加默认的握手超时时间
bpo-31014: 修复了当用户在 BROWSER 环境变量中指定条目路径时为
webbrowser
创建控制器的问题。基于 John Still 的补丁。bpo-2504: 添加 gettext.pgettext() 及其变体。
bpo-33197: 为 _ParameterKind 添加描述属性
bpo-32751: 当由于超时取消任务时,
asyncio.wait_for()
现在将等待直到取消完成。bpo-32684: 修复 gather 即使在 return_exceptions 的情况下也能传播自身的取消。
bpo-33654: 在 SSLTransport.set_protocol() 中支持协议类型切换。
bpo-33674: 尽早暂停传输,以进一步降低在 connection_made() 之前调用 data_received() 的风险。
bpo-33671:
shutil.copyfile()
、shutil.copy()
、shutil.copy2()
、shutil.copytree()
和shutil.move()
在 Linux 和 macOS 上使用平台特定的快速复制系统调用,以更高效地复制文件。在 Windows 上,shutil.copyfile()
使用更大的默认缓冲区大小(1 MiB 而不是 16 KiB),并且使用了基于memoryview()
的shutil.copyfileobj()
变体。复制 512MiB 文件的速度在 Linux 上提高了约 +26%,在 macOS 上提高了 +50%,在 Windows 上提高了 +40%。同时,消耗的 CPU 周期大大减少。(由 Giampaolo Rodola' 在 bpo-25427 中贡献。)bpo-33674: 修复 asyncio.sslproto 中 SSLProtocol.connection_made() 的竞态条件:立即开始握手而不是使用 call_soon()。之前,data_received() 可能在握手开始前被调用,导致握手挂起或失败。
bpo-31647: 修复了在 _SelectorSocketTransport 已经关闭后调用 write_eof() 会引发 AttributeError 的错误。
bpo-32610: 使 asyncio.all_tasks() 仅返回待处理的任务。
bpo-32410: 在 sendfile 回退代码中避免阻塞文件 IO。
bpo-33469: 修复了使用 run_in_executor 后关闭循环时引发的 RuntimeError。
bpo-33672: 修复 Task.__repr__ 与 Cython 的虚假协程一起使用时崩溃的问题。
bpo-33654: 修复 transport.set_protocol() 以支持在 asyncio.Protocol 和 asyncio.BufferedProtocol 之间切换。修复 loop.start_tls() 以支持 asyncio.BufferedProtocols。
bpo-33652: 类型变量和下标泛型的 pickle 现在具有未来兼容性,并与旧版 Python 兼容。
bpo-32493: 修复了 FreeBSD 上的
uuid.uuid1()
。bpo-33238: 将
InvalidStateError
添加到concurrent.futures
。如果 futures 不是待处理或运行状态,Future.set_result
和Future.set_exception
现在会引发InvalidStateError
。由 Jason Haydaman 提供补丁。bpo-33618: 完成并记录与 OpenSSL 1.1.1 的初步和实验性 TLS 1.3 支持。
bpo-33625: 如果这些函数的可重入变体可用,则在
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
模块中添加了对SameSite
cookie 标志的支持。bpo-33169: 当调用
importlib.machinery.invalidate_caches()
时,删除sys.path_importer_cache
中的None
条目。bpo-33203:
random.Random.choice()
现在对于空序列会一致地引发IndexError
,即使是从没有getrandbits()
实现的子类中调用也是如此。bpo-33224: 为 PEP 479 更新 difflib.mdiff()。将生成器中未捕获的 StopIteration 转换为 return 语句。
bpo-33209: 在
pickle.Pickler.dump()
的 C 实现结束时结束帧。bpo-32861: urllib.robotparser 的
__str__
表示现在包括通配符条目和 "Crawl-delay" 和 "Request-rate" 字段。还移除了被附加到字符串末尾的额外换行符。由 Michael Lazar 提供补丁。bpo-23403:
pickle
中的DEFAULT_PROTOCOL
被提升到 4。协议 4 在 PEP 3154 中有描述,自 Python 3.4 起可用。与 Python 3.0 中引入的协议 3 相比,它提供了更好的性能和更小的尺寸。bpo-20104: Improved error handling and fixed a reference leak in
os.posix_spawn()
.bpo-33106: 从只读 dbm 数据库中删除键会引发模块特定的错误,而不是 KeyError。
bpo-33175: 在数据类中,Field.__set_name__ 现在查找默认值的类上的 __set_name__ 特殊方法,而不是实例上的。
bpo-32380: 创建 functools.singledispatchmethod 以支持对描述符和方法的通用单分派。
bpo-33141: 如果 Field 对象有自己的 __set_name__,则让它们将 __set_name__ 传递给它们的默认值。
bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。
bpo-32873: 通过复制和pickle操作将类型变量和特殊类型形式视为不可变。这修复了几个小问题和不一致性,并提高了与Python 3.6的向后兼容性。
bpo-33134: 在计算数据类的__hash__时,使用查找表包含返回__hash__值的函数。这比查找字符串然后测试该字符串以决定做什么有所改进。
bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。
bpo-32505: 如果数据类的成员变量是Field类型但没有类型注解,则抛出TypeError。
bpo-33078: 修复了由于测试依赖sem_getvalue而在OSX上导致的失败。
bpo-33116: 将'Field'添加到dataclasses.__all__中。
bpo-32896: 修复了一个错误,即当子类化一个使用default_factory字段的数据类时会生成一个不正确的类。
bpo-33100: 数据类:如果一个字段有一个默认值是MemberDescriptorType,那么它是因为该字段在__slots__中,而不是一个实际的默认值。
bpo-32953: 如果一个非数据类继承自一个冻结的数据类,允许向派生类添加属性。只有来自冻结数据类的属性不能被赋值。要求层次结构中的所有数据类要么全部冻结,要么全部非冻结。
bpo-33097: 在解释器关闭期间调用
executor.submit
时抛出RuntimeError。bpo-32968: 涉及Fraction和float的模和地板除法应返回float。
bpo-33061: 在typing.py的
__all__
中添加缺失的NoReturn
。bpo-33078: 修复当发生pickling错误时multiprocessing.Queue中的大小处理。
bpo-33064: lib2to3现在正确支持函数签名中
*args
和**kwargs
后的尾随逗号。bpo-33056: 修复concurrent.futures.ProcessPoolExecutor中泄漏的文件描述符未正确关闭的问题。
bpo-33021: 在fstat()调用期间释放GIL,避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。
bpo-31804: 避免在标准流在退出时被关闭或为None时,multiprocessing.Process失败。
bpo-33034: 当使用
urlparse()
和urlsplit()
将port属性转换为非整数值时,提供明确的错误消息。由Matt Eaton提供补丁。bpo-30249: 改进struct.unpack_from()在缓冲区大小和偏移量问题上的异常消息。
bpo-33037: 在SSL传输关闭后跳过发送/接收数据。
bpo-27683: 修复
ipaddress
中的一个回归问题,当网络由包含整数掩码且仅剩1位地址的元组构造时,hosts()
的结果为空。bpo-22674: 在signal模块中添加strsignal()函数,该函数返回给定信号的系统描述,如同strsignal(3)返回的那样。
bpo-32999: 修复
ABC.__subclasscheck__(cls, subclass)
的C实现,在subclass
不是类型对象时崩溃的问题。bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。
bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。
bpo-32056: Improved exceptions raised for invalid number of channels and sample width when read an audio file in modules
aifc
,wave
andsunau
.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()
no longer produces patterns which contain set operations. Sets starting with '[' or containing '--', '&&', '~~' or '||' will be interpreted differently in regular expressions in future versions. Currently they emit warnings. fnmatch.translate() now avoids producing patterns containing such sets by accident.bpo-32622: 为Windows proactor事件循环实现原生快速发送文件功能。
bpo-32777: 修复了在POSIX系统的子进程中,当标记文件描述符为可继承时,subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。
bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在,在支持dl的平台上,共享扩展已明确链接到libdl。
bpo-32749: 使用'r'标志打开的
dbm.dumb
数据库现在变为只读。使用'r'和'w'标志的dbm.dumb.open()
如果数据库不存在,将不再创建数据库。bpo-32741: 实现
asyncio.TimerHandle.when()
方法。bpo-32691: 在使用pdb运行模块时使用mod_spec.parent。
bpo-32734: 修复了
asyncio.Lock()
的安全问题,该问题允许多次获取和锁定同一个锁,而锁并未释放。由Bar Harel提供补丁。bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。
bpo-31453: 添加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 document displays non-ASCII charaters properly on some MBCS Windows systems.
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_line
bpo-34490: 在AIX上,使用AF_UNIX家族套接字的getsockname()不提供'sockname',因此跳过对transport.get_extra_info('sockname')的调用
bpo-34391: 通过从数据套接字读取,为TLS 1.3修复ftplib测试。
bpo-11192: 在AIX 6.1及更高版本上修复
test_socket
,IPv6区域ID仅由``inet_pton6_zone()``支持。切换到基于运行时的platform.system()
来确定当前平台,而不是基于构建时的sys.platform()
bpo-34399: 更新所有RSA密钥和DH参数以使用至少2048位。
bpo-34373: 为AIX修复
test_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: In
_scproxy
, drop the GIL when calling intoSystemConfiguration
to avoid deadlocks.
IDLE¶
bpo-35770: IDLE在macosx上删除了选项 => 配置IDLE。之前错误地删除了窗口 => 缩放高度(缩放高度现在在选项菜单中)。在Mac上,设置对话框通过IDLE菜单中的偏好设置访问。
bpo-35769: 将IDLE的新文件名从'Untitled'改为'untitled'。
bpo-35660: 修复idlelib.window中的导入。
bpo-35641: 当函数没有文档字符串时,正确格式化
calltip
。bpo-33987: 为ttk小部件使用ttk框架。
bpo-34055: 修复IDLE Shell中错误的'智能'缩进和换行。
bpo-35591: 现在,当未找到选择时,查找选择也能工作。
bpo-35196: 加速squeezer的行计数。
bpo-35598: 更新config_key:使用PEP 8命名和ttk小部件,使一些对象全局化,并添加测试。
bpo-28097: 在Shell菜单中添加上一个/下一个历史记录条目。
bpo-35208: Squeezer现在在新行之前正确计算换行。
bpo-35555: 当代码上下文菜单条目不适用时,将其置灰。
bpo-35521: 记录IDLE编辑器代码上下文功能。在IDLE文档中添加一些内部引用。
bpo-22703: 代码上下文菜单标签现在在显示/隐藏代码上下文之间切换。缩放高度菜单现在在缩放/恢复高度之间切换。缩放高度已从窗口菜单移动到选项菜单。
bpo-35213: 在适当的地方,在idlelib中使用'macOS'。
bpo-34864: 在macOS上,如果系统偏好设置“打开文档时偏好标签页”设置为“总是”,则发出警告。
bpo-34864: 记录两个在MacOS上的IDLE问题。系统偏好设置Dock“总是偏好标签页”设置禁用了一些IDLE功能。菜单与Windows和Linux的描述有些不同。
bpo-35202: 从lib/idlelib中移除未使用的导入。
bpo-33000: 记录IDLE的Shell没有行限制。一个无限运行的程序可能会耗尽内存。
bpo-23220: 解释IDLE的Shell如何显示输出。
bpo-35099: 改进关于IDLE运行用户代码的文档。该部分从“IDLE -- 控制台差异”更名为“运行用户代码”。主要涵盖了使用自定义
sys.stdxxx
对象的影响。bpo-35097: 在IDLE文档中添加解释编辑器窗口的子章节。主题包括打开、标题和状态栏、.py*扩展名以及运行。
bpo-35093: 在IDLE文档中记录IDLE文档查看器。在“帮助和偏好设置”中的“帮助来源”子部分添加一段。
bpo-35088: 更新idlelib.help.copy_string的文档字符串。我们现在使用git和后向移植而不是hg和前向合并。
bpo-35087: 为当前文档构建更新idlelib帮助文件。主要变化是消除了章节-节号。
bpo-34548: 为只读文本视图使用配置的颜色主题。
bpo-1529353: 启用shell中长输出的“压缩”,以避免性能下降并在不丢失历史记录的情况下清理历史。压缩的输出可以复制、在单独窗口中查看并“解压”。
bpo-34047: 修复了macOS上鼠标滚轮的滚动方向。
bpo-34275: 使IDLE的调用提示在Mac上始终可见。某些MacOS-tk组合需要.update_idletasks()。由Kevin Walzer提供的补丁。
bpo-34120: 修复关闭某些窗口和对话框后的无响应问题。
bpo-33975: 在运行htests时避免小字体。由于人类查看测试的部分目的是确定小部件看起来是否正确,因此重要的是它们在测试时看起来与运行IDLE时相同。
bpo-33905: 为idlelib.stackview.StackBrowser添加测试。
bpo-33924: 将mainmenu.menudefs键'windows'更改为'window'。每个其他menudef键都是主菜单项的小写版本。
bpo-33906: 将idlelib.windows重命名为window,以匹配主菜单上的Window,并移除最后一个复数模块名称。
bpo-33917: 修复并记录idlelib/idle_test/template.py。修订后的文件编译、运行和测试均正常。idle_test/README.txt说明了如何使用它来创建新的IDLE测试文件。
bpo-33904: IDLE:在rstrip中,将类RstripExtension重命名为Rstrip
bpo-33907: 为了保持一致性和清晰度,重命名一个IDLE模块和类。模块calltips及其类CallTips现在更名为calltip和Calltip。在模块calltip_w中,类CallTip现在更名为CalltipWindow。
bpo-33856: 在IDLE的欢迎消息中添加“帮助”
bpo-33839: IDLE:重构ToolTip和CallTip并添加文档和测试
bpo-33855: 对所有IDLE模块进行最小化测试。添加缺失的文件,导入模块,实例化类,并检查覆盖率。检查现有文件。
bpo-33656: 在Windows上,添加API调用表明tk针对DPI进行缩放。在Windows 8.1+或10上,Python二进制文件的DPI兼容性属性未更改,且显示器分辨率大于96 DPI时,这应使文本和线条更清晰。否则应无影响。
bpo-33768: 点击上下文行将该行移动到编辑器窗口的顶部。
bpo-33763: IDLE:使用只读文本小部件代替标签小部件作为代码上下文。
bpo-33664: 按行滚动IDLE编辑器文本。之前,鼠标滚轮和滚动条滑块以固定像素数移动文本,导致编辑器盒顶部出现部分行。此更改也适用于shell和grep输出窗口,但不适用于只读文本视图。
bpo-33679: 启用代码上下文的主题特定颜色配置。使用“高亮”选项卡查看内置主题的设置或为自定义主题添加设置。
bpo-33642: 为代码上下文显示最多maxlines非空行。如果没有当前上下文,则显示单个空行。
bpo-33628: IDLE:清理codecontext.py及其测试。
bpo-33564: IDLE的代码上下文现在能识别async作为一个块的开头。
bpo-21474: 将单词/标识符的定义从ASCII更新为Unicode。在文本和输入框中,这会影响通过双击选择、通过control-left/right左右移动以及通过control-BACKSPACE/DEL左右删除。
bpo-33204: IDLE:一致地着色无效的字符串前缀。'u'字符串前缀不能与'r'或'f'配对。从右边开始,尽可能多地着色有效的部分。修订并扩展颜色化器测试。
bpo-32984: 在运行启动文件时设置
__file__
。与Python一样,IDLE在展示第一个交互式输入提示之前,可选地在Shell窗口中运行一个启动文件。对于IDLE,-s``运行环境变量 :envvar:`IDLESTARTUP` 或 :envvar:`PYTHONSTARTUP` 中命名的文件;
-r file`` 运行file
。Python在运行文件之前将__file__
设置为启动文件名,并在第一个提示之前取消设置。IDLE现在在没有-n
选项的情况下正常运行时也会这样做。bpo-32940: 在pyparse中简化并重命名StringTranslatePseudoMapping。
bpo-32916: 在pyparse中将
str
更改为code
。bpo-32905: 移除pyparse模块中未使用的代码。
bpo-32874: 为pyparse添加测试。
bpo-32837: 对于IDLE的系统和位置无关文件,使用系统和位置相关的默认编码对于open()来说是一个坏主意。
bpo-32826: 在IDLE的test_help_about的open()中添加"encoding=utf-8"。GUI测试test_file_buttons()仅查看初始的ascii-only行,但在open()默认为'ascii'的系统上失败,因为readline()内部读取和解码足够远,以在CREDITS.txt中遇到非ascii字符。
bpo-32831: 为codecontext添加文档字符串和测试。
bpo-32765: 更新configdialog General标签的文档字符串,将新部件添加到部件列表中。
工具/示例¶
bpo-35884: 添加一个基准测试脚本,用于计时访问变量的各种方式:
Tools/scripts/var_access_benchmark.py
。bpo-34989: python-gdb.py 现在可以处理计算 Python 帧行号时的错误。
bpo-20260: Argument Clinic 现在有了非位无符号整型转换器。
bpo-32962: python-gdb 现在在调用
string()
时会捕获UnicodeDecodeError
异常。bpo-32962: python-gdb 现在会在 read_var() 上捕获 ValueError:例如当 Python 没有调试符号时。
bpo-33189: pygettext.py 现在只识别字面字符串作为文档字符串和可翻译字符串,并拒绝字节字面量和 f-string 表达式。
bpo-31920: 修复了
pygettext
脚本中将目录作为参数处理的问题。基于 Oleg Krasnikov 的补丁。bpo-29673: 修复 pystackv 和 pystack gdbinit 宏。
bpo-25427: 移除 pyvenv 脚本,转而使用
python3 -m venv
,以减少关于虚拟环境将为哪个 Python 解释器创建的混淆。bpo-32885: 为
Tools/scripts/pathfix.py
添加-n
标志以禁用自动备份创建(带有~
后缀的文件)。bpo-32222: 修复 pygettext 不提取带有类型注释参数的函数的文档字符串的问题。由 Toby Harradine 提供的补丁。
bpo-31583: 修复 2to3 在使用 --add-suffix 选项但没有 --output-dir 选项时对当前目录中文件的相对路径的处理。
C API¶
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 有条件地声明 :c:func:`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: Change dict growth function from
round_up_to_power_2(used*2+hashtable_size/2)
toround_up_to_power_2(used*3)
. Previously, dict is shrinked only whenused == 0
. Now dict has more chance to be shrinked.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: Improved error handling and fixed a reference leak in
os.posix_spawn()
.bpo-33175: 在数据类中,Field.__set_name__ 现在查找默认值的类上的 __set_name__ 特殊方法,而不是实例上的。
bpo-33097: 在解释器关闭期间调用
executor.submit
时抛出RuntimeError。bpo-31908: 修复了
trace
模块命令行工具的封面文件输出。之前仅在使用了--missing
选项时才会发出封面文件。由Michael Selik提供补丁。
文档¶
bpo-33378: 为 https://docs.python.org/3/ 添加韩语语言切换器。
bpo-33276: 澄清模块上的
__path__
属性不能是任意值。bpo-33201: 现代化编写 C 扩展类型的文档。
bpo-33195: 在
c-api/arg
文档中弃用Py_UNICODE
的使用。自 Python 3.3 起,Py_UNICODE
相关 API 已被弃用,但文档中遗漏了这一点。bpo-8243: 添加关于 curses.addch 和 curses.addstr 在窗口或 pad 外部写入时的异常行为的注释。
bpo-32337: 更新与
dict
顺序相关的文档。
测试¶
bpo-33358: 当解释器使用
--enable-shared
构建时,修复test_embed.test_pre_initialization_sys_options()
。
构建¶
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: Harden ssl module against LibreSSL CVE-2018-8970. X509_VERIFY_PARAM_set1_host() is called with an explicit namelen. A new test ensures that NULL bytes are not allowed.
bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。
bpo-32981: Regexes in difflib and poplib were vulnerable to catastrophic backtracking. These regexes formed potential DOS vectors (REDOS). They have been refactored. This resolves CVE-2018-1060 and CVE-2018-1061. Patch by Jamie Davis.
核心与内置函数¶
bpo-33053: 当使用-m开关时,sys.path[0]现在明确扩展为 起始 工作目录,而不是保留为空路径(允许在导入时从当前工作目录导入)。
bpo-33018: 提高了当
issubclass()
的第一个参数是非类而第二个参数是抽象基类时引发错误的一致性。由Josh Bronson提供补丁。bpo-33041: 修复了当函数包含
async for
循环时的跳转问题。bpo-33026: 通过设置f_lineno修复了跳出“with”块的问题。
bpo-33005: 修复了在使用自定义内存分配器(例如:使用PYTHONMALLOC环境变量)时fork导致的崩溃。_PyGILState_Reinit()和_PyInterpreterState_Enable()现在使用默认的RAW内存分配器在fork时分配新的解释器互斥锁。
bpo-17288: 防止从'return'和'exception'跟踪事件跳转。
bpo-32836: 在列表/字典/集合推导式的情况下不使用临时变量。
库¶
bpo-33141: 如果 Field 对象有自己的 __set_name__,则让它们将 __set_name__ 传递给它们的默认值。
bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。
bpo-32873: 通过复制和pickle操作将类型变量和特殊类型形式视为不可变。这修复了几个小问题和不一致性,并提高了与Python 3.6的向后兼容性。
bpo-33134: 在计算数据类的__hash__时,使用查找表包含返回__hash__值的函数。这比查找字符串然后测试该字符串以决定做什么有所改进。
bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。
bpo-32505: 如果数据类的成员变量是Field类型但没有类型注解,则抛出TypeError。
bpo-33078: 修复了由于测试依赖sem_getvalue而在OSX上导致的失败。
bpo-33116: 将'Field'添加到dataclasses.__all__中。
bpo-32896: 修复了一个错误,即当子类化一个使用default_factory字段的数据类时会生成一个不正确的类。
bpo-33100: 数据类:如果一个字段有一个默认值是MemberDescriptorType,那么它是因为该字段在__slots__中,而不是一个实际的默认值。
bpo-32953: 如果一个非数据类继承自一个冻结的数据类,允许向派生类添加属性。只有来自冻结数据类的属性不能被赋值。要求层次结构中的所有数据类要么全部冻结,要么全部非冻结。
bpo-33061: 在typing.py的
__all__
中添加缺失的NoReturn
。bpo-33078: 修复当发生pickling错误时multiprocessing.Queue中的大小处理。
bpo-33064: lib2to3现在正确支持函数签名中
*args
和**kwargs
后的尾随逗号。bpo-33056: 修复concurrent.futures.ProcessPoolExecutor中泄漏的文件描述符未正确关闭的问题。
bpo-33021: 在fstat()调用期间释放GIL,避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。
bpo-31804: 避免在标准流在退出时被关闭或为None时,multiprocessing.Process失败。
bpo-33037: 在SSL传输关闭后跳过发送/接收数据。
bpo-27683: 修复
ipaddress
中的一个回归问题,当网络由包含整数掩码且仅剩1位地址的元组构造时,hosts()
的结果为空。bpo-32999: 修复
ABC.__subclasscheck__(cls, subclass)
的C实现,在subclass
不是类型对象时崩溃的问题。bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。
bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。
bpo-32056: Improved exceptions raised for invalid number of channels and sample width when read an audio file in modules
aifc
,wave
andsunau
.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``运行环境变量 :envvar:`IDLESTARTUP` 或 :envvar:`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()
no longer produces patterns which contain set operations. Sets starting with '[' or containing '--', '&&', '~~' or '||' will be interpreted differently in regular expressions in future versions. Currently they emit warnings. fnmatch.translate() now avoids producing patterns containing such sets by accident.bpo-32622: 为Windows proactor事件循环实现原生快速发送文件功能。
bpo-32777: 修复了在POSIX系统的子进程中,当标记文件描述符为可继承时,subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。
bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在,在支持dl的平台上,共享扩展已明确链接到libdl。
bpo-32741: 实现
asyncio.TimerHandle.when()
方法。bpo-32691: 在使用pdb运行模块时使用mod_spec.parent。
bpo-32734: 修复了
asyncio.Lock()
的安全问题,该问题允许多次获取和锁定同一个锁,而锁并未释放。由Bar Harel提供补丁。bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。
bpo-31453: 添加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: Fix memory leak in asyncio.Queue, when the queue has limited size and it is full, the cancelation of queue.put() can cause a memory leak. Patch by: José Melero.
bpo-32521: nis 模块现在与新的 libnsl 和头文件位置兼容。
bpo-32467: collections.abc.ValuesView 现在继承自 collections.abc.Collection。
bpo-32473: 提高 ABCMeta._dump_registry() 输出的可读性
bpo-32102: subprocess.run 的新参数
capture_output
bpo-32521: glibc 已移除 Sun RPC。在 nis 模块中使用替代的 libtirpc 头文件和库。
bpo-32493: UUID 模块修复了 FreeBSD/OpenBSD 的构建
bpo-32503: 使用协议4进行pickle时不再创建过小的帧。
bpo-29237: 为 pstats 排序选项创建枚举
bpo-32454: 向 socket 模块添加 close(fd) 函数。
bpo-25942: subprocess 模块现在在 subprocess.call、subprocess.run 或 Popen 上下文管理器期间处理 Ctrl-C KeyboardInterrupt 时更加优雅。现在它会在继续 KeyboardInterrupt 异常处理之前等待子进程(假设也收到了 SIGINT)短暂退出。这仍然包括在 call() 和 run() API 中的 SIGKILL,但至少子进程有机会首先退出。
bpo-32433: hmac 模块现在有了 hmac.digest(),它提供了一个优化的 HMAC 摘要。
bpo-28134: 现在默认情况下,套接字会自动从文件描述符中检测家族、类型和协议。
bpo-32404: 修复了
datetime.datetime.fromtimestamp()
在datetime.datetime
子类中不调用 __new__ 的 bug。bpo-32403: 提高了
datetime.date
和datetime.datetime
替代构造器的速度。bpo-32228: 确保
truncate()
在写入长度超过缓冲区大小后保留文件位置(由tell()
报告)。bpo-32410: 为 asyncio 事件循环实现了
loop.sock_sendfile
。bpo-22908: 向 ZipExtFile 类添加了 seek 和 tell。这仅在用于打开 zipfile 的文件对象可查找时有效。
bpo-32373: 添加了 socket.getblocking() 方法。
bpo-32248: Add
importlib.resources
andimportlib.abc.ResourceReader
as the unified API for reading resources contained within packages. Loaders wishing to support resource reading must implement theget_resource_reader()
method. File-based and zipimport-based loaders both implement these APIs.importlib.abc.ResourceLoader
is deprecated in favor of these new APIs.bpo-32320: collections.namedtuple() 现在支持默认值。
bpo-29302: 添加了 contextlib.AsyncExitStack。由 Alexander Mohr 和 Ilya Kulakov 提供补丁。
bpo-31961: 已在 Python 3.7.0b2 中移除。 subprocess.Popen 的 args 参数现在可以是 path-like object。如果 args 以序列形式给出,其第一个元素现在也可以是 path-like object。
bpo-31900: 现在
locale.localeconv()
函数会临时将LC_CTYPE
区域设置改为``LC_NUMERIC``区域设置,以解码decimal_point
和thousands_sep
字节字符串,如果它们是非ASCII或长度超过1字节,并且LC_NUMERIC
区域设置与LC_CTYPE
区域设置不同。这一临时变更会影响其他线程。对于str.format()
方法,当使用n
类型格式化数字(int
,float
,float
及其子类)时(例如:'{:n}'.format(1234)
),也进行了相同的更改。bpo-31853: 在SSLSocket中使用super().method替代socket.method。它们很可能是因为遗留原因而存在。
bpo-31399: ssl模块现在使用OpenSSL的X509_VERIFY_PARAM_set1_host()和X509_VERIFY_PARAM_set1_ip() API来验证主机名和IP地址。可以通过SSLContext.hostname_checks_common_name禁用主题通用名称回退。
bpo-14976: 添加了一个queue.SimpleQueue类,这是一个无界的FIFO队列,带有put()的可重入C实现。
文档¶
测试¶
bpo-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:
urllib.parse.urlsplit()
does not convert zone-id (scope) to lower case for scoped IPv6 addresses in hostnames now.bpo-32302: 修复了distutils的bdist_wininst对于CRT v142的支持:它二进制兼容于CRT v140。
bpo-29711: 修复了asyncio proactor循环中的
stop_serving
会杀死所有监听服务器的问题。bpo-32308:
re.sub()
now replaces empty matches adjacent to a previous non-empty match.bpo-29970: 如果握手在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: All class and static methods of builtin types now are correctly classified by inspect.classify_class_attrs() and grouped in pydoc ouput. Added types.ClassMethodDescriptorType for unbound class methods of builtin types.
bpo-32253: 弃用
yield from lock
,await lock
,with (yield from lock)
和with await lock
用于 asyncio 同步原语。bpo-22589: 将 .bmp 的 MIME 类型从 'image/x-ms-bmp' 改为 'image/bmp'。
bpo-32193: 将 asyncio 转换为使用 async/await 语法。旧式的
yield from
仍然支持。bpo-32206: 添加支持以使用 pdb 运行模块。
bpo-32227:
functools.singledispatch
现在支持使用类型注释注册实现。bpo-15873: 添加了新的替代构造函数
datetime.datetime.fromisoformat()
,datetime.time.fromisoformat()
和datetime.date.fromisoformat()
作为各自类isoformat
方法的逆操作。bpo-32199: getnode() ip 获取器现在使用 'ip link' 而不是 'ip link list'。
bpo-32143: os.statvfs() 包含来自 statvfs(2) 的 f_fsid 字段。
bpo-26439: 通过实现 ctypes._aix.find_library() 修复 ctypes.util.find_library() 在 AIX 上的问题。补丁由:Michael Felt
bpo-31993: 当将大的 bytes 和 str 对象序列化到文件时,pickler 现在使用更少的内存。使用协议 4 创建的 pickle 将需要更少的内存来反序列化大的 bytes 和 str 对象。
bpo-27456: 确保在 Linux 上设置 TCP_NODELAY。测试由 Victor Stinner 完成。
bpo-31778: 现在ast.literal_eval()更加严格。不再允许任意数字的加减法。
bpo-31802: 即使`os`模块尚未导入,导入原生路径模块(
posixpath
,ntpath
)现在也能正常工作。bpo-30241: 添加contextlib.AbstractAsyncContextManager。由Jelle Zijlstra提供补丁。
bpo-31699: 修复了当任务参数或结果导致pickling或unpickling错误时
concurrent.futures.ProcessPoolExecutor
中的死锁问题。这应确保对ProcessPoolExecutor
API的调用最终总能返回。bpo-15216:
TextIOWrapper.reconfigure()
支持更改*encoding*, errors, 和*newline*。
文档¶
bpo-32418: 向Server和AbstractServer类添加get_loop()方法。
测试¶
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()
andPy_SetPythonHome()
now take theconst wchar *
arguments instead ofwchar *
.
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: Make
msilib.SummaryInformation.GetProperty()
returnNone
when the value of property isVT_EMPTY
. Initial patch by Mark Mc Mahon.bpo-28334: 在
netrc.netrc
中使用os.path.expanduser()
来查找~/.netrc
文件。如果文件不存在,则抛出FileNotFoundError
。由 Dimitri Merejkowsky 提供补丁。bpo-32121: 使
tracemalloc.Traceback
的行为更类似于 traceback 模块,将帧从最旧到最新排序。Traceback.format()
现在接受负的 limit 参数,将结果截断为abs(limit)
个最旧的帧。要获得旧的行为,可以使用Traceback.format()
的新参数 most_recent_first。(补丁由 Jesse Bakker 提供。)bpo-31325: 修复了
RobotFileParser.parse()
方法中collections.namedtuple()
的错误用法。初始由 Robin Wellner 提供补丁。bpo-12382:
msilib.OpenDatabase()
now raises a better exception message when it couldn't open or create an MSI file. Initial patch by William Tisäter.bpo-19610:
setup()
现在会对某些字段的无效类型发出警告。当classifiers
、keywords
和platforms
字段未指定为列表或字符串时,distutils.dist.Distribution
类现在会发出警告。bpo-32071: 为
python -m unittest
添加了-k
命令行选项,以仅运行与给定模式匹配的测试。bpo-10049: 向 contextlib 添加了 nullcontext 无操作上下文管理器。这为处理可选上下文管理器时提供了比 ExitStack() 更简单、更快的替代方案。
bpo-28684: 这里使用了新的 test.support.skip_unless_bind_unix_socket() 装饰器来跳过 asyncio 测试,这些测试因为平台缺少对 unix 域套接字的功能性 bind() 函数而失败(如在现在以强制模式运行 SELinux 的较新 Android 版本上的非 root 用户就是这种情况)。
bpo-32110:
codecs.StreamReader.read(n)
现在对于非负的 n,返回不超过 n 个字符/字节。这使得它与其他类似文件对象的read()
方法兼容。bpo-27535: warnings 模块在警告过滤器的 "ignore" 操作的隐藏警告注册表中不再泄漏内存。warn_explicit() 函数不再为 "ignore" 操作将警告键添加到注册表中。
bpo-32088: warnings: 当 Python 以调试模式构建(
Py_DEBUG
)时,DeprecationWarning
、PendingDeprecationWarning
和ImportWarning
警告现在默认显示。bpo-1647489: 修复了可以匹配空字符串的正则表达式模式的搜索。现在可以在匹配空字符串后正确找到非空字符串。
bpo-25054: 添加了对可以匹配空字符串的模式进行拆分的支持。
bpo-32072: 修复了二进制 plists 的问题:修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。
bpo-32069: 从asyncio中移除遗留的SSL传输,反正总是使用ssl.MemoryBIO。
bpo-32066: asyncio: 在create_unix_connection中支持pathlib.Path;sock参数应为可选的
bpo-32046: 更新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: Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes of multiple security vulnerabilities including: CVE-2017-9233 (External entity infinite loop DoS), CVE-2016-9063 (Integer overflow, re-fix), CVE-2016-0718 (Fix regression bugs from 2.2.0's fix to CVE-2016-0718) and CVE-2012-0876 (Counter hash flooding with SipHash). Note: the CVE-2016-5300 (Use os-specific entropy sources like getrandom) doesn't impact Python, since Python already gets entropy from the OS to set the expat secret using
XML_SetHashSalt()
.bpo-30500: 修复 urllib.parse.splithost() 正确解析片段。例如,
splithost('//127.0.0.1#@evil.com/')
现在正确返回127.0.0.1
主机,而不是将@evil.com
视为认证中的主机(login@host
)。bpo-29591: Update expat copy from 2.1.1 to 2.2.0 to get fixes of CVE-2016-0718 and CVE-2016-4472. See https://sourceforge.net/p/expat/bugs/537/ for more information.
核心与内置函数¶
bpo-31490: 修复
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: Include sys/sysmacros.h for major(), minor(), and makedev(). GNU C libray plans to remove the functions from 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``字段。docstring不再是它们体中的第一个stmt。这影响了模块和类的代码对象的 ``co_firstlineno``和 ``co_lnotab
。(在 bpo-32911 中恢复。)bpo-29438: 修复了key sharing dict中的use-after-free问题。
bpo-29546: 为
from ... import ...
设置了ImportError的'path'和'name'属性。bpo-29546: 使用位置改进了from-import错误消息
bpo-29478: 在使用Compat32策略时,如果指定了max_line_length=None,它将不再被忽略。补丁由Mircea Cosbuc提供。
bpo-29319: 防止RunMainFromImporter覆盖sys.path[0]。
bpo-29337: 修复了比较代码对象时可能出现的BytesWarning。警告可能在编译时发出。
bpo-29327: 修复了将可迭代关键字参数传递给sorted()时崩溃的问题。
bpo-29034: 修复了os模块(path_converter)中的内存泄漏和use-after-free问题。
bpo-29159: 修复了当x.__index__()引发异常时bytes(x)的回归问题。
bpo-29049: 在调用Python函数时懒惰地调用_PyObject_GC_TRACK()。调用函数速度提高了5%。
bpo-28927: bytes.fromhex()和bytearray.fromhex()现在忽略所有ASCII空白字符,而不仅仅是空格。由Robert Xiao提供补丁。
bpo-28932: 如果不存在<sys/random.h>,则不包含它。
bpo-25677: 修正了缩进块语法错误提示符的位置。基于Michael Layzell的补丁。
bpo-29000: 修复了八进制数在交替形式下零填充的bytes格式化。
bpo-18896: Python函数现在可以有超过255个参数。collections.namedtuple()现在支持超过255个元素的元组。
bpo-28596: 在Android上,首选编码是UTF-8。补丁由Chi Hsuan Yen编写。
bpo-26919: 在Android上,操作系统数据现在总是以UTF-8编码/解码,而不是使用区域设置编码,以避免与已经使用UTF-8的os.fsencode()和os.fsdecode()不一致。
bpo-28991: functools.lru_cache()容易受到一个由猴子补丁len()函数触发的晦涩的重入错误的影响。
bpo-28147: 修复了分割表字典中的内存泄漏:setattr()不能将合并表转换为分割表。补丁由INADA Naoki编写。
bpo-28739: f字符串表达式不再被接受为文档字符串和由ast.literal_eval()处理,即使它们不包含表达式。
bpo-28512: 修复了通过PyErr_SyntaxLocationEx()和PyErr_SyntaxLocationObject()设置SyntaxError的offset属性。
bpo-28918: 修复了当Python使用Py_DEBUG定义构建时,xxlimited的交叉编译问题。
bpo-23722: 而不是无声地产生一个不支持方法中零参数
super()
的类,未能将新的``__classcell__``命名空间条目传递给type.__new__
现在会导致一个DeprecationWarning
和一个支持零参数super()
的类。bpo-28797: 修改类__dict__在一个描述符的__set_name__方法内部,该描述符在那个类内部使用,不再阻止调用其他描述符的__set_name__方法。
bpo-28799: 移除
PyEval_GetCallStats()
函数并弃用未测试和未文档化的``sys.callstats()``函数。移除CALL_PROFILE
特殊构建:使用sys.setprofile()
函数、cProfile
或profile
来分析函数调用。bpo-12844: 现在可以向一个函数传递超过255个参数。
bpo-28782: 修复了在检查下一条指令是否为YIELD_FROM时
yield from
实现中的一个错误。由WORDCODE(bpo-26647)引入的回归问题。bpo-28774: 修复ASCII和Latin1编码器中当错误处理程序返回的字符串包含多个不可编码字符(对于ASCII编解码器是非ASCII字符,对于Latin1是超出U+0000-U+00FF范围的字符)时的错误位置。
bpo-28731: 优化_PyDict_NewPresized()以创建正确大小的字典。将具有常量键的字典字面量的速度提高至30%。
bpo-28532: 当提供-V选项两次时显示sys.version。
bpo-27100: with语句现在在检查__exit__之前先检查__enter__。当两种方法都缺失时,这会给出不那么令人困惑的错误信息。由Jonathan Ellington提供补丁。
bpo-28746: 在没有ioctl FIOCLEX和FIONCLEX命令的平台上修复set_inheritable()文件描述符方法。
bpo-26920: 在没有langinfo的平台上修复初始化解释器时未获取区域设置的字符集的问题。
bpo-28648: 修复了在Mac OS X上调试版本中解码星体字符时Py_DecodeLocale()崩溃的问题。补丁由Xiang Zhang提供。
bpo-28665: 将STORE_DEREF操作码的速度提高40%。
bpo-19398: 在编译时PYTHONPATH组件为空的情况下,不再向sys.path组件添加额外的斜杠。
bpo-28621: 通过重用更快的位数计数实现,加快了将int转换为float的速度。由Adrian Wielgosik提供补丁。
bpo-28580: 优化了迭代分割表值。由Xiang Zhang提供补丁。
bpo-28583: PyDict_SetDefault在需要时未合并分割表。由Xiang Zhang提供补丁。
bpo-28128: 无效的str和byte转义序列的弃用警告现在会打印出关于错误发生位置的更好信息。由Serhiy Storchaka和Eric Smith提供补丁。
bpo-28509: dict.update()不再分配不必要的大内存。
bpo-28426: 修复了调试版本中PyUnicode_AsDecodedObject()潜在的崩溃问题。
bpo-28517: 修复了窥孔优化器中的一个偏移错误,该错误导致保留无法到达的代码。
bpo-28214: 改进了对有问题的 __set_name__ 属性的异常报告。
bpo-23782: 修复了 _PyTraceback_Add() 中可能的内存泄漏和 PyTraceBack_Here() 中的异常丢失问题。
bpo-28183: 优化并清理了字典迭代。
bpo-26081: 添加了 asyncio.Future 的 C 实现。原始由 Yury Selivanov 提供补丁。
bpo-28379: 为 PyUnicode_CopyCharacters() 添加了健全性检查和测试。由 Xiang Zhang 提供补丁。
bpo-28376: 长范围迭代器的类型现在注册为 Iterator。由 Oren Milman 提供补丁。
bpo-28376: 现在不允许通过调用 range_iterator 类型来创建 range_iterator 实例。调用 iter() 方法是唯一的方式。由 Oren Milman 提供补丁。
bpo-26906: 现在解析未初始化类型的特殊方法会导致类型的隐式初始化而不是失败。
bpo-18287: PyType_Ready() 现在检查 tp_name 是否为 NULL。原始由 Niklas Koep 提供补丁。
bpo-24098: 修复了在编译过程中 AST 被更改时可能发生的崩溃。
bpo-28201: 当哈希值具有相同的低位时,字典减少了哈希表中第二次冲突的可能性。
bpo-28350: 不再对含有空字符的字符串常量进行内部化。
bpo-26617: 修复了在弱引用回调过程中运行垃圾收集时发生的崩溃。
bpo-27942: 现在在元组和冻结集合中递归内部化字符串常量。
bpo-28289: ImportError.__init__ 现在重置未指定的属性。
bpo-21578: 修复了当 ImportError 使用无效关键字参数调用时误导性的错误消息。
bpo-28203: 修复了 complex(1.0, {2:3}) 错误消息中的不正确类型。补丁由 Soumya Sharma 提供。
bpo-28086: 元组子类型的单个可变位置参数现在被转换为确切的元组,而不是原封不动地传递给 C 定义的函数。
bpo-28214: 现在 __set_name__ 是在类上查找而不是在实例上查找。
bpo-27955: 当 getrandom() 系统调用因 EPERM 失败时(例如被 SECCOMP 阻止时),回退读取 /dev/urandom 设备。
bpo-28192: 在隔离模式下不导入readline。
bpo-27441: 移除longobject.c中一些对ob_size的冗余赋值。感谢Oren Milman。
bpo-27222: 清理long_rshift函数中的冗余代码。感谢Oren Milman。
升级内部unicode数据库至Unicode 9.0.0版本。
bpo-28131: 修复zipimport的compile_source()中的回归问题。zipimport应使用与解释器相同的优化级别。
bpo-28126: 用memcpy()替换Py_MEMCPY。Visual Studio能正确优化memcpy()。
bpo-28120: Fix dict.pop() for splitted dictionary when trying to remove a "pending key" (Not yet inserted in split-table). Patch by Xiang Zhang.
bpo-26182: 当async和await关键字被用作变量/属性/类/函数名时,发出DeprecationWarning。
bpo-26182: 修复在引发DeprecationWarning的代码中的内存泄漏。
bpo-28721: 修复异步生成器的aclose()和athrow()以正确处理StopAsyncIteration传播。
bpo-26110: 加速方法调用:添加LOAD_METHOD和CALL_METHOD操作码。
库¶
bpo-31499: xml.etree:修复当解析器是引用循环的一部分时的崩溃问题。
bpo-31482:
random.seed()
现在在version=1时可以与bytes一起工作。bpo-28556: typing.get_type_hints现在默认(当调用者未指定
globalns
时)为类和模块找到正确的globalns。bpo-28556: 对
typing
模块的速度改进。原始PR由Ivan Levkivskyi和Mitar提供。bpo-31544: ElementTree的C加速器模块忽略了在XMLParser()中查找TreeBuilder目标方法时引发的异常。
bpo-31234: socket.create_connection()现在手动修复了一个引用循环:成功时清除存储最后一个异常的变量。
bpo-31457: LoggerAdapter对象现在可以嵌套。
bpo-31431: SSLContext.check_hostname现在自动将SSLContext.verify_mode设置为ssl.CERT_REQUIRED,而不是以ValueError失败。
bpo-31233: socketserver.ThreadingMixIn 现在维护一个非守护线程列表,在 server_close() 中等待所有这些线程完成。
bpo-28638: 改变了 collections.namedtuple() 的实现策略,大幅减少了 exec() 的使用,转而采用预计算的方法。因此,不再支持 verbose 参数和 _source 属性。这一变化带来了以下好处:1) 对于使用多个命名元组的应用程序,内存占用更小;2) 命名元组类的创建速度更快(大约快 4 到 6 倍,具体取决于测量方式);3) 使用 __new__、_make 和 _replace 创建实例时的速度略有提升。(主要补丁贡献者是 Jelle Zijlstra,INADA Naoki、Serhiy Storchaka 和 Raymond Hettinger 进一步改进。)
bpo-31400: 改进了 SSL 错误处理,避免丢失错误编号。
bpo-27629: 使 SSLContext.wrap_bio() 和 SSLContext.wrap_socket() 的返回类型可定制。
bpo-28958: ssl.SSLContext() 现在在无法实例化上下文时使用 OpenSSL 错误信息。
bpo-28182: 当 OpenSSL 无法验证对等证书时,SSL 模块现在会引发 SSLCertVerificationError 异常。该异常包含更多关于错误的信息。
bpo-27340: SSLSocket.sendall() 现在使用 memoryview 来创建数据切片。这修复了对所有类似于字节对象的支持。同时,这也更高效,避免了昂贵的复制。
bpo-14191: 新增函数
argparse.ArgumentParser.parse_intermixed_args
提供了解析命令行中用户混合选项和位置参数的能力。bpo-31178: 修复了 subprocess 模块中在罕见错误路径下的字符串连接错误
bpo-31350: 对
asyncio._get_running_loop()
进行微优化,使其速度提升高达 10%。bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题(libexpat bug 115):https://github.com/libexpat/libexpat/issues/115
bpo-29136: 添加 TLS 1.3 密码套件和 OP_NO_TLSv1_3。
bpo-1198569:
string.Template
子类可以选择性地定义braceidpattern
,如果它们想要在花括号内外指定不同的占位符模式。如果为 None(默认值),则回退到idpattern
。bpo-31326: concurrent.futures.ProcessPoolExecutor.shutdown() 现在显式关闭调用队列。此外,shutdown(wait=True) 现在也会加入调用队列线程,以防止泄漏悬挂线程。
bpo-27144:
concurrent.futures
中的map()
和as_completed()
迭代器现在避免保留对生成对象的引用。bpo-31281: 修复
fileinput.FileInput(files, inplace=True)
当files
包含pathlib.Path
对象时的问题。bpo-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: Addded empty __slots__ to abc.ABC. This allows subclassers to deny __dict__ and __weakref__ creation. Patch by Aaron Hall.
bpo-30520: 现在 Logger 可以被 pickle 序列化。
bpo-30557: faulthandler 现在能够正确过滤和显示 Windows 上的异常代码。
bpo-30526: 添加了 TextIOWrapper.reconfigure() 和 TextIOWrapper.write_through 属性。
bpo-30245: 修复在组织 struct.pack_into 错误消息时可能出现的溢出问题。由 Yuan Liu 提供补丁。
bpo-30378: 修复 logging.handlers.SysLogHandler 无法处理 IPv6 地址的问题。
bpo-16500: 允许注册 at-fork 处理程序。
bpo-30470: 弃用 Windows 上的无效 ctypes 调用保护。由 Mariatta Wijaya 提供补丁。
bpo-30414: multiprocessing.Queue._feed 后台运行线程在异常时不从主循环中中断。
bpo-30003: 修复HZ编解码器中转义字符的处理。基于Ma Lin的补丁。
bpo-30149: inspect.signature() 现在支持带有被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: Allow falsy values to be used for msg parameter of subTest().
bpo-27778: 修复了当getrandom()被信号中断且信号处理程序引发Python异常时,os.getrandom()中的内存泄漏问题。
bpo-28200: 修复了Windows上os模块中的内存泄漏问题(修复了path_converter()函数)。
bpo-25400: RobotFileParser现在正确返回crawl_delay和request_rate的默认值。初始由Peter Wirtz提供补丁。
bpo-27932: 防止win32_ver()中的内存泄漏。
修复socket._sendfile_use_sendfile中的UnboundLocalError。
bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。
bpo-22493: 现在,通过在正则表达式中间使用内联标志发出的警告消息包含(截断的)正则表达式模式。由Tim Graham提供补丁。
bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。
bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。
bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。
bpo-28114: 修复当env包含字节字符串时parse_envlist()崩溃的问题。由Eryk Sun提供补丁。
bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。
bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。
bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。
bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。
bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。
bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。
bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。
bpo-28325: 移除遗留的MacOS 9 macurl2path模块及其测试。
bpo-28368: 如果子监视器没有附加循环,则拒绝监视进程。由Vincent Michel提供补丁。
bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。
bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。
bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。
bpo-28372: 修复asyncio以支持非python协程的格式化。
bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。
bpo-27972: 禁止Tasks等待自身。
bpo-24142: 读取损坏的配置文件会使configparser处于无效状态。原始补丁由Florian Höch提供。
bpo-29581: ABCMeta.__new__现在接受
**kwargs
,允许抽象基类在__init_subclass__中使用关键字参数。由Nate Soares提供补丁。bpo-25532: inspect.unwrap()现在只会尝试解包对象sys.getrecursionlimit()次,以防止在每次属性访问时创建新对象的对象。
bpo-30177: path.resolve(strict=False)不再在文件系统中不存在的第一个元素后截断路径。补丁由Antoine Pietri提供。
文档¶
bpo-31294: 修复ZeroMQSocketListener和ZeroMQSocketHandler示例中的不完整代码片段,并将它们适配到Python 3。
bpo-21649: 在SSL文档中添加RFC 7525和Mozilla服务器端TLS链接。
bpo-31128: 允许pydoc服务器绑定到任意主机名。
bpo-30803: 澄清关于真值测试的文档。原始由Peter Thomassen提供补丁。
bpo-30176: 在curses文档中添加缺失的属性相关常量。
bpo-30052:
bytes()
和bytearray()
的链接目标现在是它们各自的类型定义,而不是相应的内置函数条目。使用 bytes 和 bytearray 来引用后者。为了确保这一及未来的交叉引用更新能自动应用,每日文档构建现在禁用了Sphinx中的默认输出缓存功能。bpo-26985: 在inspect文档中添加缺失的代码对象信息。
bpo-19824: 通过强调模板字符串在国际化中的实用性,并澄清一些使用限制,改进模板字符串的文档和链接。(另见 : bpo-20314, bpo-12518)
bpo-28929: 将文档链接到其在GitHub上的源文件。
bpo-25008: 将smtpd.py文档标记为实际上已弃用,并添加指向aiosmtpd的指针,这是一个基于asyncio的第三方替代品。
bpo-26355: 在每个页面上添加指向相应主要版本文档的规范头部链接。由Matthias Bussonnier提供补丁。
bpo-29349: 修复构建文档代码中的Python 2语法。
bpo-23722: 3.6 新特性指南中的数据模型参考和移植部分现在涵盖了自定义元类为实现完全支持 PEP 487 和无参数
super()
所需的额外__classcell__
处理。bpo-28513: 记录了 zipfile 的命令行接口。
测试¶
bpo-29639: test.support.HOST 现在是 "localhost",新增了一个 HOSTv4 常量用于满足
127.0.0.1
的需求,类似于现有的 HOSTv6 常量。bpo-31320: 在 test_ssl 中静默回溯。
bpo-31346: 对于 SSLContext,优先使用 PROTOCOL_TLS_CLIENT 和 PROTOCOL_TLS_SERVER 协议。
bpo-25674: 移除 sha256.tbs-internet.com 的 ssl 测试。
bpo-30715: 处理 OpenSSL 1.1.0f 的 ALPN 回调变更。最新版本的行为类似于 OpenSSL 1.0.2,不再中止握手。
bpo-30822: regrtest: 从 regrtest --all 中排除 tzdata。当使用 --use=all / -u all 运行测试套件时,排除 tzdata,因为它会使 test_datetime 变得太慢(在某些构建机器人上需要 15-20 分钟),从而导致某些构建机器人超时。同时修复 regrtest 命令行解析器,允许传递 -u extralargefile 来运行 test_zipfile64。
bpo-30695: 向
_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-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:
urllib.parse.urlsplit()
does not convert zone-id (scope) to lower case for scoped IPv6 addresses in hostnames now.bpo-32302: 修复了distutils的bdist_wininst对于CRT v142的支持:它二进制兼容于CRT v140。
bpo-32255: 现在,当写入CSV文件时,单个空字段总是会被引用。这允许区分空行和由单个空字段组成的行。由Licht Takeuchi提供补丁。
bpo-32277: 在不支持
chmod(..., follow_symlinks=False)
的平台上,引发``NotImplementedError``而不是SystemError
。由Anthony Sottile提供补丁。bpo-32199: getnode() ip 获取器现在使用 'ip link' 而不是 'ip link list'。
bpo-27456: 确保在 Linux 上设置 TCP_NODELAY。测试由 Victor Stinner 完成。
bpo-31900: 现在
locale.localeconv()
函数会临时将LC_CTYPE
区域设置改为``LC_NUMERIC``区域设置,以解码decimal_point
和thousands_sep
字节字符串,如果它们是非ASCII或长度超过1字节,并且LC_NUMERIC
区域设置与LC_CTYPE
区域设置不同。这一临时变更会影响其他线程。对于str.format()
方法,当使用n
类型格式化数字(int
,float
,float
及其子类)时(例如:'{:n}'.format(1234)
),也进行了相同的更改。bpo-31802: 即使`os`模块尚未导入,导入原生路径模块(
posixpath
,ntpath
)现在也能正常工作。
文档¶
bpo-17232: 澄清 -O 和 -OO 的文档。由 Terry Reedy 提供补丁。
bpo-32800: 更新 xml 默认命名空间的 w3c 文档链接。
bpo-8722: 文档化当属性
get()
方法引发AttributeError
时__getattr__()
的行为。bpo-32614: 修改文档中的正则表达式示例,使用原始字符串以防止
DeprecationWarning
,并在正则表达式 HOWTO 中添加文本以突出弃用。bpo-31972: 改进
pathlib.PurePath
子类的文档字符串。bpo-17799: 解释了sys.settrace和sys.setprofile及其C-API对应项的实际行为,关于在每个函数中接收哪些类型的事件。由Pablo Galindo Salgado提供补丁。
测试¶
bpo-32517: 修复由于
KqueueSelector
循环的传输未被关闭而在 macOS 10.12.2+ 上失败的test_asyncio
。bpo-32721: 修复test_hashlib,使其在未构建_md5模块时不会失败。
bpo-32252: 修复用于在测试崩溃时防止核心转储文件的faulthandler_suppress_crash_report()。getrlimit()在成功时返回零。
bpo-31518: Debian Unstable已为SSLv23_METHOD()禁用了TLS 1.0和1.1。将一些测试的TLS/SSL协议更改为PROTOCOL_TLS或PROTOCOL_TLSv1_2,以使它们在Debian上通过。
构建¶
bpo-32635: 修复当系统提供的是 libxcrypt 而不是 libcrypt 时 crypt 模块的段错误。
Windows¶
bpo-33016: 修复nt._getfinalpathname中潜在使用未初始化内存的问题。
bpo-32903: 修复如果当前目录设置为UNC路径时Windows上os.chdir()的内存泄漏。
bpo-31966: 修复WindowsConsoleIO.write()写入空数据的问题。
bpo-32409: 确保activate.bat可以处理Unicode内容。
bpo-32457: 改进启动Python时对非规范化可执行路径的处理。
bpo-32370: 在uuid模块中为ipconfig输出使用正确的编码。由Segev Finer提交补丁。
bpo-29248: 修复Windows上的
os.readlink()
,它错误地将重新解析数据缓冲区的``PrintNameOffset`` 字段视为字符数而非字节数。由Craig Holmquist和SSE4提交补丁。bpo-32588: 创建独立的_distutils_findvs模块。
macOS¶
bpo-32726: 提供一个额外的、更现代的macOS安装程序变体,仅支持64位模式的macOS 10.9+系统。将提供的第三方库升级到OpenSSL 1.0.2n、XZ 5.2.3和SQLite 3.22.0。10.9+安装程序现在链接并提供其自己的Tcl/Tk 8.6.8副本。
IDLE¶
bpo-32984: 在运行启动文件时设置
__file__
。与Python一样,IDLE在展示第一个交互式输入提示之前,可选地在Shell窗口中运行一个启动文件。对于IDLE,-s``运行环境变量 :envvar:`IDLESTARTUP` 或 :envvar:`PYTHONSTARTUP` 中命名的文件;
-r file`` 运行file
。Python在运行文件之前将__file__
设置为启动文件名,并在第一个提示之前取消设置。IDLE现在在没有-n
选项的情况下正常运行时也会这样做。bpo-32940: 在pyparse中简化并重命名StringTranslatePseudoMapping。
bpo-32916: 在pyparse中将
str
更改为code
。bpo-32905: 移除pyparse模块中未使用的代码。
bpo-32874: 为pyparse添加测试。
bpo-32837: 对于IDLE的系统和位置无关文件,使用系统和位置相关的默认编码对于open()来说是一个坏主意。
bpo-32826: 在IDLE的test_help_about的open()中添加"encoding=utf-8"。GUI测试test_file_buttons()仅查看初始的ascii-only行,但在open()默认为'ascii'的系统上失败,因为readline()内部读取和解码足够远,以在CREDITS.txt中遇到非ascii字符。
bpo-32765: 更新configdialog General标签的文档字符串,将新部件添加到部件列表中。
工具/示例¶
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: Make
msilib.SummaryInformation.GetProperty()
returnNone
when the value of property isVT_EMPTY
. Initial patch by Mark Mc Mahon.bpo-31325: 修复了
RobotFileParser.parse()
方法中collections.namedtuple()
的错误用法。初始由 Robin Wellner 提供补丁。bpo-12382:
msilib.OpenDatabase()
now raises a better exception message when it couldn't open or create an MSI file. Initial patch by William Tisäter.bpo-32110:
codecs.StreamReader.read(n)
现在对于非负的 n,返回不超过 n 个字符/字节。这使得它与其他类似文件对象的read()
方法兼容。bpo-32072: 修复了二进制 plists 的问题:修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。
bpo-32034: 使asyncio.IncompleteReadError和LimitOverrunError可pickle。
bpo-32015: 修复了在等待异步读写套接字期间重新连接套接字时asyncio的循环问题。
bpo-32011: 恢复了对加载带有TYPE_INT64代码的marshal文件的支持。这些文件可以在Python 2.7中生成。
bpo-31970: 降低asyncio调试模式的性能开销。
bpo-9678: 修复了uuid模块中确定MAC地址的问题:在NetBSD和OpenBSD上使用ifconfig。在Linux、FreeBSD、NetBSD和OpenBSD上使用arp。基于Takayuki Shimizukawa的补丁。
bpo-30057: 修复了signal.signal()中潜在的信号丢失问题。
bpo-31933: 修复Blake2参数leaf_size和node_offset在大端平台上的问题。由Jack O'Connor提供补丁。
bpo-31927: 修复了socket模块在NetBSD 8上的编译问题。修复了在NetBSD和DragonFly BSD上解析AF_BLUETOOTH地址时的断言失败或读取任意数据的问题。
bpo-27666: 修复了当类型chtype或mmask_t的大小小于C long的大小时,curses.box()和curses.ungetmouse()中的堆栈损坏问题。curses.box()现在接受字符作为参数。基于Steve Fink的补丁。
bpo-31897: plistlib现在在读取二进制plist时会捕获更多错误,并抛出InvalidFileException而不是意外的异常。
bpo-25720: 修复了检查curses WINDOW填充状态的方法。由Masayuki Yamamoto提供补丁。
bpo-31893: 修复了OpenBSD和NetBSD上kqueue_event结构的布局。修复了kqueue_event对象的比较。
bpo-31891: 修复了在NetBSD上构建curses模块的问题。
bpo-28416: 具有 persistent_id() 方法的 pickle.Pickler 子类和具有 persistent_load() 方法的 pickle.Unpickler 子类的实例不再创建引用循环。
bpo-28326: 修复当 stdout 和/或 stderr 关闭或为 None 时的 multiprocessing.Process。
bpo-31457: 如果使用嵌套的日志适配器,内部
process()
方法不再被省略。bpo-31457: LoggerAdapter 对象的
manager
属性现在可以正确设置了。bpo-31806: 修复 time.sleep(), threading.Lock.acquire() 和 socket.socket.settimeout() 中的超时舍入,以正确舍入 -1.0 和 0.0 之间的负超时。这些函数现在会按预期阻塞等待事件。之前,调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。
bpo-28603: traceback: 修复了在打印异常回溯时,当当前异常或其上下文/原因链中的异常不可哈希时发生的 TypeError。由 Zane Bitter 提供补丁。
bpo-30058: 修复 select.kqueue.control() 中的缓冲区溢出。
bpo-31770: 防止多次调用
sqlite3.Cursor
对象的__init__()
方法时崩溃。由 Oren Milman 提供补丁。bpo-31672:
string.Template
中的idpattern
匹配了一些非ASCII字符。现在它使用-i
正则表达式本地标志来避免非ASCII字符。bpo-31764: 防止在
sqlite3.Cursor.close()
中当Cursor
对象未初始化时发生崩溃。补丁由 Oren Milman 提供。bpo-31752: 修复在调用自定义整数的 timedelta 构造函数时可能发生的崩溃。
bpo-31701: 在Windows上,faulthandler.enable()现在会忽略MSC和COM异常。
bpo-31728: 防止由于
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: Include sys/sysmacros.h for major(), minor(), and makedev(). GNU C libray plans to remove the functions from 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: Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes of multiple security vulnerabilities including: CVE-2017-9233 (External entity infinite loop DoS), CVE-2016-9063 (Integer overflow, re-fix), CVE-2016-0718 (Fix regression bugs from 2.2.0's fix to CVE-2016-0718) and CVE-2012-0876 (Counter hash flooding with SipHash). Note: the CVE-2016-5300 (Use os-specific entropy sources like getrandom) doesn't impact Python, since Python already gets entropy from the OS to set the expat secret using
XML_SetHashSalt()
.bpo-30500: 修复 urllib.parse.splithost() 正确解析片段。例如,
splithost('//127.0.0.1#@evil.com/')
现在正确返回127.0.0.1
主机,而不是将@evil.com
视为认证中的主机(login@host
)。
Python 3.6.2 rc1¶
发布日期: 2017-06-17
安全性¶
bpo-29591: Update expat copy from 2.1.1 to 2.2.0 to get fixes of CVE-2016-0718 and CVE-2016-4472. See https://sourceforge.net/p/expat/bugs/537/ for more information.
核心与内置函数¶
bpo-30682: 移除了对某些 f-字符串过于严格的断言,例如 eval("f'\n'") 和 eval("f'\r'")。
bpo-30604: 将co_extra_freefuncs移动到非每线程以避免崩溃
bpo-29104: 修复了 f-字符串中反斜杠的解析。
bpo-27945: 修复了在搜索、插入或比较过程中输入集合被修改时,字典的各种段错误。基于 Duane Griffin 和 Tim Mitchell 的补丁。
bpo-25794: 修复了 type.__setattr__() 和 type.__delattr__() 对于非 interned 属性名称的问题。基于 Eryk Sun 的补丁。
bpo-30039: 如果解释器在恢复一系列嵌套的 'yield from' 或 'await' 调用过程中发生 KeyboardInterrupt,现在会正确地传递到最内层的帧。
bpo-12414: sys.getsizeof() 在代码对象上现在返回的大小包括代码结构及其引用对象的大小。由 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: Fix dict.pop() for splitted dictionary when trying to remove a "pending key" (Not yet inserted in split-table). Patch by Xiang Zhang.
bpo-26182: 当async和await关键字被用作变量/属性/类/函数名时,发出DeprecationWarning。
库¶
bpo-27998: 修复了 Windows 上 os.scandir() 对字节路径的支持。由 Eryk Sun 提供补丁。
bpo-28317: 反汇编器现在解码 FORMAT_VALUE 参数。
bpo-26293: 修复了不从文件开头开始写入 ZIP 文件的问题。ZIP 文件中的偏移量现在相对于存档的开始,以符合规范。
bpo-28380: unittest.mock 的 Mock autospec 函数现在正确支持 assert_called、assert_not_called 和 assert_called_once。
bpo-27181: 移除 statistics.geometric_mean 并推迟至 3.7 版本。
bpo-28229: lzma 模块现在支持 pathlib。
bpo-28321: 修复了在 plistlib 中使用二进制格式写入非 BMP 字符的问题。
bpo-28225: bz2 模块现在支持 pathlib。初始由 Ethan Furman 提供补丁。
bpo-28227: gzip 现在支持 pathlib。由 Ethan Furman 提供补丁。
bpo-27358: 优化了合并可变关键字参数的过程,并改进了当传递非映射作为可变关键字参数时的错误信息。
bpo-28257: 改进了当传递非可迭代对象作为可变位置参数时的错误信息。添加了操作码 BUILD_TUPLE_UNPACK_WITH_CALL。
bpo-28322: 修复了当从错误的 pickle 数据反序列化 itertools 对象时可能发生的崩溃。基于 John Leitch 的补丁。
bpo-28228: imghdr 现在支持 pathlib。
bpo-28226: compileall 现在支持 pathlib。
bpo-28314: 修复了 xml.etree.ElementTree.Element 的 getiterator() 方法的函数声明(C 标志)。
bpo-28148: 停止在 time 模块中使用 localtime() 和 gmtime()。引入了平台无关的 _PyTime_localtime API,该 API 类似于 POSIX 的 localtime_r,但在所有平台上都可用。由 Ed Schouten 提供补丁。
bpo-28253: 修复了极端月份(0001-01和9999-12)的日历功能。重新实现了itermonthdays()和itermonthdays2()方法,使其不再调用可能导致datetime.date下溢/溢出的itermonthdates()。
bpo-28275: 修复了LZMADecompressor和BZ2Decompressor类中decompress()方法可能存在的释放后使用问题。原始由John Leitch提供补丁。
bpo-27897: 修复了如果传递无效的字符串类似对象作为名称时,sqlite3.Connection.create_collation()可能崩溃的问题。由Xiang Zhang提供补丁。
bpo-18844: random.choices()现在将k作为仅关键字参数,以提高常见情况的可读性,并与其他语言中使用的签名保持一致。
bpo-18893: 修复了Lib/ctypes/macholib/dyld.py中无效的异常处理。由Madison May提供补丁。
bpo-27611: 修复了tkinter.tix模块中对默认根窗口的支持。在DisplayStyle构造函数中添加了master参数。
bpo-27348: 在traceback模块中,恢复了类似于"Exception: None"的异常消息的格式化。这修复了3.5a2中引入的回归问题。
bpo-25651: Allow falsy values to be used for msg parameter of subTest().
bpo-27778: 修复了当getrandom()被信号中断且信号处理程序引发Python异常时,os.getrandom()中的内存泄漏问题。
bpo-28200: 修复了Windows上os模块中的内存泄漏问题(修复了path_converter()函数)。
bpo-25400: RobotFileParser现在正确返回crawl_delay和request_rate的默认值。初始由Peter Wirtz提供补丁。
bpo-27932: 防止win32_ver()中的内存泄漏。
修复socket._sendfile_use_sendfile中的UnboundLocalError。
bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。
bpo-22493: 现在,通过在正则表达式中间使用内联标志发出的警告消息包含(截断的)正则表达式模式。由Tim Graham提供补丁。
bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。
bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。
bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。
bpo-28114: 修复当env包含字节字符串时parse_envlist()崩溃的问题。由Eryk Sun提供补丁。
bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。
bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。
bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。
bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。
bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。
bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。
bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。
bpo-28368: 如果子监视器没有附加循环,则拒绝监视进程。由Vincent Michel提供补丁。
bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。
bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。
bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。
bpo-28372: 修复asyncio以支持非python协程的格式化。
bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。
bpo-27972: 禁止Tasks等待自身。
Windows¶
bpo-28402: 为 Windows 上的标准库添加签名目录文件。
bpo-28333: 为 ps1/ps2 和 input() 提示启用 Unicode。(由 Eryk Sun 提供补丁)
bpo-28251: 改进 Windows 上的帮助手册。
bpo-28110: launcher.msi 在 32 位和 64 位之间有不同的产品代码
bpo-28161: 以写权限打开 CON 失败
bpo-28162: 如果第一行以 Ctrl+Z 开头,WindowsConsoleIO readall() 失败
bpo-28163: WindowsConsoleIO fileno() 将错误的标志传递给 _open_osfhandle
bpo-28164: 对于各种路径,_PyIO_get_console_type 失败
bpo-28137: 将 Windows 路径文件重命名为 ._pth
bpo-28138: Windows ._pth 文件应允许导入站点
C API¶
bpo-28426: 已弃用未记录的函数 PyUnicode_AsEncodedObject()、PyUnicode_AsDecodedObject()、PyUnicode_AsDecodedUnicode() 和 PyUnicode_AsEncodedUnicode()。
构建¶
测试¶
bpo-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: Remove 3DES from ssl module's default cipher list to counter measure sweet32 attack (CVE-2016-2183).
bpo-27766: 向ssl模块的默认加密列表中添加ChaCha20 Poly1305。(需要OpenSSL 1.1.0或LibreSSL)。
bpo-25387: 检查winsound.MessageBeep的返回值。
bpo-27866: 添加SSLContext.get_ciphers()方法以获取所有启用的加密列表。
bpo-27744: 向socket模块添加AF_ALG(Linux内核加密)。
bpo-26470: 将ssl和hashlib模块移植到OpenSSL 1.1.0。
bpo-11620: 修复winsound.PlaySound中对SND_MEMORY的支持。基于Tim Lesher的补丁。
bpo-11734: 向struct模块添加对IEEE 754半精度浮点数的支持。基于Eli Stevens的补丁。
bpo-27919: 弃用distutils打包中的
extra_path
分发选项。bpo-23229: 添加新的
cmath``常量:``cmath.inf``和 ``cmath.nan
以匹配math.inf
和``math.nan``,以及cmath.infj
和cmath.nanj
以匹配复数repr使用的格式。bpo-27842: csv.DictReader现在返回OrderedDict类型的行。(由Steve Holden贡献。)
移除对传递文件描述符给os.access的支持。它从未工作过,但以前不会引发错误。
bpo-12885: 修复distutils遇到符号链接时的错误。
bpo-27881: 修复了设置sqlite3.Connection.isolation_level时可能的错误。基于Xiang Zhang的补丁。
bpo-27861: 修复了当工厂创建的不是游标时sqlite3.Connection.cursor()中的崩溃。由Xiang Zhang提供补丁。
bpo-19884: 避免在OS X上使用Gnu Readline时产生虚假输出。
bpo-27706: 恢复random.Random().seed()对于使用种子版本1的字符串种子的确定性行为。允许random()的调用序列与Python 2中完全匹配。由Nofar Schnider提供补丁。
bpo-10513: 修复Connection.commit()中的回归问题。提交后不应重置语句。
bpo-12319: 在http.client.HTTPConnection请求中添加了分块传输编码支持。urllib.request.AbstractHTTPHandler类不再强制要求Content-Length头部。如果一个HTTP请求有一个文件或可迭代体,但没有Content-Length头部,库现在会转而使用分块传输编码。
来自https://github.com/python/typing的typing.py新版本:- Collection(仅适用于3.6)(bpo-27598) - 将FrozenSet添加到__all__(上游#261) - 修复_get_type_vars()中的崩溃(上游#259) - 移除ForwardRef._eval_type中的字典约束(上游#252)
bpo-27832: 使
_normalize
参数成为Fraction
构造器的仅关键字参数,这样``Fraction(2, 3, 4)``现在会引发TypeError
。bpo-27539: 修复了在负指数和负基数情况下未归一化的
Fraction.__pow__
结果。bpo-21718: 现在,使用CTEs的查询可以使用cursor.description了。
bpo-27819: 在distutils的sdists中,除非提供了"formats",否则简单地在所有平台上生成"gztar"(gzip压缩的tar格式)分发。
bpo-2466: posixpath.ismount现在能正确识别用户没有权限访问的挂载点。
bpo-9998: 在Linux上,ctypes.util.find_library现在会在LD_LIBRARY_PATH中查找共享库。
bpo-27573: code.interact的退出消息现在可以配置。
bpo-27930: 改进了logging.handlers.QueueListener的行为。感谢Paulo Andrade和Petr Viktorin的分析和补丁。
bpo-6766: 向multiprocessing添加了分布式引用计数以支持共享值/代理对象的嵌套。
bpo-21201: 提高了multiprocessing错误消息的可读性。感谢Wojciech Walczak的补丁。
asyncio: 在各Transport类中添加了 set_protocol / get_protocol 方法
bpo-27456: asyncio:默认设置TCP_NODELAY。
IDLE¶
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: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates that the script is in CGI mode.
bpo-7063: 从“array”模块的切片处理中移除无用代码。由Chuck提交补丁。
bpo-27656: 不再假设sched.h定义了任何SCHED_*常量。
bpo-27130: 在“zlib”模块中,修复了压缩和解压缩大缓冲区(通常为4 GiB)时的处理问题。之前,输入被限制在4 GiB,压缩和解压缩操作未能正确处理4 GiB的结果。
在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: Update expat to 2.1.1, fixes CVE-2015-1283.
Fix TLS stripping vulnerability in smtplib, CVE-2016-0772. Reported by Team Oststrom.
bpo-26839: 在Linux上,
os.urandom()
现在调用getrandom()
与GRND_NONBLOCK
,如果urandom熵池尚未初始化,则回退到读取/dev/urandom
。补丁由Colm Buckley编写。
核心与内置函数¶
bpo-27095: 简化了MAKE_FUNCTION并移除了MAKE_CLOSURE操作码。由Demur Rumed提供补丁。
bpo-27190: 如果sqlite3版本低于3.3.1,则引发NotSupportedError。由Dave Sawyer提供补丁。
bpo-27286: 修复了编译BUILD_MAP_UNPACK_WITH_CALL操作码的问题。使用广义解包(PEP 448)和冲突的关键字名称调用函数可能导致未定义行为。
bpo-27140: 添加了BUILD_CONST_KEY_MAP操作码。
bpo-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 and doctest.testfile() now support packages (module splitted into multiple directories) for the package parameter.
bpo-25195: 修复了 mock.MagicMock 中的一个回归问题。_Call 是 tuple 的子类(changeset 3603bae63c13 仅适用于类),所以我们需要自己实现 __ne__。由 Andrew Plummer 提供补丁。
bpo-26644: 当向 SSLSocket.recv() 或 read() 传递负长度时,引发 ValueError 而不是 SystemError。
bpo-23804: 修复 SSL recv(0) 和 read(0) 方法返回零字节而不是最多 1024 字节的问题。
bpo-26616: 修复了 datetime.astimezone() 方法中的一个错误。
bpo-26637: 现在,如果在 Python 关闭过程中尝试
__import__()
但sys.path
已经被清除(设置为None
),importlib
模块会发出ImportError
而不是TypeError
。bpo-21925:
warnings.formatwarning()
现在在调用linecache.getline()
和tracemalloc.get_object_traceback()
时会捕获异常,以便能够记录在Python关闭过程中晚期发出的ResourceWarning
。bpo-23848: 在Windows上,faulthandler.enable() 现在也会安装一个异常处理器,以在任何Windows异常(不仅仅是UNIX信号(SIGSEGV、SIGFPE、SIGABRT))上转储所有Python线程的跟踪信息。
bpo-26530: Add C functions
_PyTraceMalloc_Track()
and_PyTraceMalloc_Untrack()
to track memory blocks using thetracemalloc
module. Add_PyTraceMalloc_GetTraceback()
to get the traceback of an object.bpo-26588: _tracemalloc 现在支持跟踪多个地址空间(域)的内存分配。
bpo-24266: 在编译时使用Readline 7的情况下,Readline历史搜索期间的Ctrl+C现在会取消搜索模式。
bpo-26590: 为_socket.socket类型实现了一个安全的终结器。它现在会释放GIL来关闭套接字。
bpo-18787: 如果用户没有权限,spwd.getspnam() 现在会引发一个PermissionError。
bpo-26560: 避免BaseHandler.start_response中潜在的ValueError。初始由Peter Inglesby提供补丁。
bpo-26567: 添加一个新函数
PyErr_ResourceWarning()
来传递被销毁的对象。向warnings.WarningMessage
添加一个 source 属性。添加warnings._showwarnmsg(),它使用tracemalloc来获取源对象分配时的跟踪信息。bpo-26569: 修复
pyclbr.readmodule()
和pyclbr.readmodule_ex()
以支持导入包。bpo-26499: 在HTTPResponse.readline()和read1()中考虑剩余的Content-Length。基于Silent Ghost的补丁。同时记录HTTPResponse现在支持这些方法。
bpo-25320: 处理unittest发现扫描的目录中的套接字。补丁来自Victor van den Elzen。
bpo-16181: 现在如果年份高于datetime.MAXYEAR,cookiejar.http2time()会返回None。
bpo-26513: 修复了平台模块对Windows Server的检测。
bpo-23718: 修复了在1月1日前的第0周解析时间的问题。原始由Tamás Bence Gedai提供补丁。
bpo-26323: 向unittest.mock添加了Mock.assert_called()和Mock.assert_called_once()方法。补丁由Amit Saha编写。
bpo-20589: 在Windows上调用Path.owner()和Path.group()现在会引发NotImplementedError而不是ImportError。
bpo-26177: 修复了Canvas和Scrollbar小部件的keys()方法。
bpo-15068: 消除了fileinput中过度的缓冲。bufsize参数现在已被弃用并被忽略。
bpo-19475: 向datetime的isoformat()方法添加了一个可选参数timespec,用于选择时间组件的精度。
bpo-2202: 修复了AbstractDigestAuthHandler.get_algorithm_impls中的UnboundLocalError。初始由Mathieu Dupuy提供补丁。
bpo-26167: 最小化了copy.copy()和copy.deepcopy()的开销。优化了bytearrays、NotImplemented、slices、短列表、元组、字典和集合的复制和深复制。
bpo-25718: 修复了当total为None时,对accumulate()迭代器的pickling和复制。
bpo-26475: 修复了带有(?x)标志的正则表达式的调试输出。
bpo-26482: 允许pickling递归的dequeues。
bpo-26335: 使mmap.write()像其他write方法一样返回写入的字节数。补丁由Jakub Stasiak提供。
bpo-26457: 修复了当结果前缀长度等于最大前缀长度时,IP网络类中的subnets()方法。基于Xiang Zhang的补丁。
bpo-26385: 如果NamedTemporaryFile()中的内部open()调用失败,则删除文件。由Silent Ghost提供补丁。
bpo-26402: 修复了XML-RPC客户端在服务器关闭持久连接时重试的问题。这是与3.5.0a4中的新http.client.RemoteDisconnected异常相关的回归问题。
bpo-25913: 在adobe=True时,base64.a85decode()中前导的
<~
现在是可选的。由Swati Jaiswal提供补丁。bpo-26186: 移除importlib.util.LazyLoader中的一个无效类型检查。
bpo-26367: 当指定了
level
但没有指定相应的包时,importlib.__import__()会像builtins.__import__()一样引发ImportError。bpo-26309: 在"socketserver"模块中,当verify_request()返回false时,关闭请求(关闭连接的套接字)。由Aviv Palivoda提供补丁。
bpo-23430: 更改socketserver模块,只捕获源自Exception(而不是BaseException)的请求处理程序引发的异常。因此,SystemExit和KeyboardInterrupt不再触发handle_error()方法,现在将停止单线程服务器。
bpo-25995: os.walk()不再使用与树深度成比例的FDs。
bpo-25994: 为os.scandir()迭代器添加了close()方法和上下文管理器协议的支持。
bpo-23992: multiprocessing:使MapResult在异常时不快速失败。
bpo-26243: 支持zlib.compress()的关键字参数。由Aviv Palivoda提供补丁。
bpo-26117: os.scandir()迭代器现在不仅在迭代完成时关闭文件描述符,而且在因错误失败时也关闭。
bpo-25949: OrderedDict实例的__dict__现在只在需要时创建。
bpo-25911: 恢复了在Windows上os.walk()中对字节路径的支持。
bpo-26045: 在使用http.client发布非Latin-1字符串时,向错误消息添加UTF-8建议。
bpo-26039: 添加了zipfile.ZipInfo.from_file()和zipinfo.ZipInfo.is_dir()。由Thomas Kluyver提供补丁。
bpo-12923: 即使有异常也重置FancyURLopener的重定向计数器。基于Brian Brazil和Daniel Rocco的补丁。
bpo-25945: 修复了解除 pickle functools.partial 对象时状态错误导致的崩溃问题。修复了 functools.partial 构造函数失败时的内存泄漏。functools.partial 的 "args" 和 "keywords" 属性现在总是分别具有 tuple 和 dict 类型。
bpo-26202: copy.deepcopy() 现在能正确复制具有非原子属性的 range() 对象。
bpo-23076: Path.glob() 现在在调用无效模式时会引发 ValueError。补丁由 Thomas Nyberg 提供。
bpo-19883: 修复了 zipimport 中可能的整数溢出问题。
bpo-26227: 在 Windows 上,socket 模块的 getnameinfo()、gethostbyaddr() 和 gethostbyname_ex() 函数现在从 ANSI 代码页而非 UTF-8 解码主机名。
bpo-26099: site 模块现在会在 sitecustomize 模块可以导入但执行该模块时引发 ImportError 时,向 stderr 写入错误信息。对 usercustomize 做了相同的更改。
bpo-26147: xmlrpc 现在可以处理无法用所使用的非 UTF-8 编码编码的字符串。
bpo-25935: 垃圾回收器现在可以打破 OrderedDict 的引用循环。
bpo-16620: 修复了 msilib.Directory.glob() 中的 AttributeError。
bpo-26013: 增加了对旧 Python 3 版本(3.4.3 及以下)创建的损坏协议 2 pickle 的兼容性。
bpo-26129: 废弃了在 grp.getgrgid() 中接受非整数。
bpo-25850: 默认使用交叉编译为 64 位 Windows。
bpo-25822: 向 urllib.parse 结果的字段添加了文档字符串。由 Swati Jaiswal 提供补丁。
bpo-22642: 将 trace 模块的选项解析机制转换为 argparse。由 SilentGhost 提供补丁。
bpo-24705: 修复了 sysconfig._parse_makefile 不扩展出现在 $() 变量之前的 ${} 变量的问题。
bpo-26069: 移除了 trace 模块中已弃用的 API。
bpo-22138: 修复了 mock.patch 在修补描述符时的行为。修补后恢复原始值。由 Sean McCully 提供补丁。
bpo-25672: 在 ssl 模块中,如果安全的话,启用 SSL_MODE_RELEASE_BUFFERS 模式选项。
bpo-26012: 在 pathlib.Path.[r]glob() 中不对符号链接进行
**
模式的遍历。bpo-24120: 在使用 pathlib.Path.[r]glob() 遍历树时忽略 PermissionError。由 Ulrich Petri 提供补丁。
bpo-21815: 在 imap 响应的数据部分接受 ] 字符,以处理由 gmail 等服务器接受和产生的带有方括号的标志。
bpo-25447: 如果 sys.stdin 没有缓冲区属性,fileinput 现在会直接使用它(恢复了向后兼容性)。
bpo-25971: 通过 2 倍的速度优化了从浮点数创建 Fractions,通过 3 倍的速度优化了从 Decimals 创建 Fractions。
bpo-25802: 将 importlib.abc.Loader.load_module() 的剩余实现文档化为已弃用。
bpo-25928: 添加了 Decimal.as_integer_ratio()。
bpo-25447: 复制 lru_cache() 包装器对象现在总是有效,与被包装对象的类型无关(通过返回未更改的原始对象)。
bpo-25768: 使 compileall 中的函数返回布尔值而不是整数,并为返回值添加了适当的文档和测试。
bpo-24103: 修复了 ElementTree.XMLPullParser 中可能的使用后释放问题。
bpo-25860: os.fwalk() 在发生错误时不再跳过剩余的目录。原始由 Samson Lee 提供补丁。
bpo-25914: 修复并简化了 OrderedDict.__sizeof__。
bpo-25869: 优化了 ElementTree 的深拷贝;现在速度快了 20 倍。
bpo-25873: 优化了 ElementTree 的迭代。迭代元素 Element.iter() 现在快了 40%,迭代文本 Element.itertext() 现在快了最多 2.5 倍。
bpo-25902: 修复了 ElementTree 迭代中的各种引用计数问题。
bpo-22227: TarFile 迭代器使用生成器重新实现。这个实现比使用类更简单。
bpo-25638: 优化了 ElementTree.iterparse();现在快了 2 倍。优化了 ElementTree 解析;现在快了 10%。
bpo-25761: 改进了对损坏的 pickle 数据中错误的检测。
bpo-25717: 恢复在打开文件时容忍大多数fstat()错误的先前行为。这是3.5a1版本中的一个回归问题,阻止了匿名临时文件在特殊情况下的工作。
bpo-24903: 修复了当指定'-d'时compileall接受的参数数量的回归问题。对参数数量的检查已被完全删除,因为它从未正确工作过。
bpo-25764: 在subprocess模块中,当使用preexec_fn时,保留由fork()失败引起的任何异常。
bpo-25771: 当'package'未指定但必要时,调整importlib.util.resolve_name()的异常消息。
bpo-6478: 在更改时区后,_strptime的正则表达式缓存现在会被time.tzset()重置。
bpo-14285: 当使用"python -m package"选项执行包且包初始化失败时,现在会报告正确的回溯。"runpy"模块现在让包初始化的异常传递回调用者,而不是引发ImportError。
bpo-19771: 同样在runpy和"-m"选项中,如果包甚至无法初始化(例如由于坏的
*.pyc
文件),则省略不相关的消息"...是一个包,不能直接执行"。bpo-25177: 修复了非常小和非常大的数字的平均值问题。作为副作用,statistics.mean和statistics.variance应该会显著更快。
bpo-25718: 修复了复制状态为布尔值false的对象的问题。
bpo-10131: 修复了minidom文档的深拷贝问题。基于Marian Ganisin的补丁。
bpo-7990: ElementTree.Element上的dir()现在列出属性:"tag", "text", "tail"和"attrib"。原始由Santoso Wijaya提供补丁。
bpo-25725: 修复了在解包含元组指令的无效数据时pickle.loads()中的引用泄漏问题。
bpo-25663: 在Readline completer中,避免列出重复的全局名称,并在搜索内置名称之前搜索全局命名空间。
bpo-25688: 修复了ElementTree.iterparse()在引发错误时的文件泄露问题。
bpo-23914: 修复了解pickle数据损坏时unpickler引发的SystemError。
bpo-25691: 修复了删除ElementTree.Element属性时的崩溃问题。
bpo-25624: ZipFile现在总是为目录条目写入ZIP_STORED头。由王定远提供补丁。
bpo-25626: 修改了三个zlib函数以接受适合Py_ssize_t的大小,但在内部将这些大小限制为UINT_MAX。这解决了3.5版本中GzipFile.read()无法读取大于2或4 GiB块的回归问题。此更改影响zlib.Decompress.decompress()的max_length参数、zlib.decompress()的bufsize参数和zlib.Decompress.flush()的length参数。
bpo-25583: 当操作系统优先考虑如EACCES这样的错误而不是EEXIST时,避免os.makedirs(exist_ok=True)引发错误。
bpo-25593: 修改了asyncio中EventLoop.stop()的语义。
bpo-6973: 当我们知道一个subprocess.Popen进程已经死亡时,不允许send_signal()、terminate()或kill()方法执行任何操作,因为它们可能会信号到不同的进程。
bpo-23883: 添加了缺失的API到__all__以匹配以下模块的文档API:calendar、csv、enum、fileinput、ftplib、logging、optparse、tarfile、threading和wave。还添加了一个test.support.check__all__()辅助函数。由Jacek Kołodziej、Mauro S. M. Rodrigues和Joel Taddei提供补丁。
bpo-25590: 在Readline completer中,每个属性只调用一次getattr()。同时完成如属性和槽这样的属性名称,这些属性由dir()列出但尚未在实例上创建。
bpo-25498: 修复了在垃圾回收由包装memoryview创建的ctypes对象时的崩溃问题。这是3.5a1中的一个回归。基于Eryksun的补丁。
bpo-25584: 将"escape"添加到glob模块的__all__列表中。
bpo-25584: 修复了以
**
开头的递归glob()模式。bpo-25446: 修复 smtplib 的 AUTH LOGIN 支持中的回归问题。
bpo-18010: 修复 pydoc web 服务器的模块搜索功能,以处理导入包时的异常。
bpo-25554: 消除了正则表达式解析中的循环引用。
bpo-18973: 日历模块的命令行界面现在使用 argparse 而不是 optparse。
bpo-25510: 如果 FileInput 以二进制模式打开,fileinput.FileInput.readline() 现在在末尾返回 b'' 而不是 ''。由 Ryosuke Ito 提供补丁。
bpo-25503: 修复了 inspect.getdoc() 对于属性的继承文档字符串的处理。原始由 John Mark Vandenberg 提供补丁。
bpo-25515: 在 uuid.uuid4 中始终使用 os.urandom 作为随机性来源。
bpo-21827: 修复了 textwrap.dedent() 当最大公共空白是最小前导空白的子字符串时的情况。基于 Robert Li 的补丁。
bpo-25447: lru_cache() 包装器对象现在可以被复制和 pickle(通过返回未更改的原始对象)。
bpo-25390: typing: 不因 Union[str, Pattern] 而崩溃。
bpo-25441: asyncio: 当套接字关闭时从 drain() 引发错误。
bpo-25410: 清理并修复了 OrderedDict 的 C 实现中的小错误。
bpo-25411: 通过更好地使用 email 包,改进了 SMTPHandler 中的 Unicode 支持。感谢用户 simon04 的补丁。
将 imp 模块从 PendingDeprecationWarning 移动到 DeprecationWarning。
bpo-25407: 移除了关于 formatter 模块在 Python 3.6 中被移除的提及。
bpo-25406: 修复了 OrderedDict.move_to_end() 的 C 实现中的一个错误,该错误导致在将几个项目移动到有序字典的开头后在迭代中出现分段错误或挂起。
bpo-25382: pickletools.dis() 现在为 MEMOIZE 操作码输出隐式备忘录索引。
bpo-25357: 向 binascii.b2a_base64() 添加了一个可选的新行参数。base64.b64encode() 使用它来避免内存拷贝。
bpo-24164: 需要使用关键字参数调用
__new__
的对象,现在可以使用低于协议版本4的pickle协议进行序列化。bpo-25364: zipfile 现在可以在禁用线程的构建中工作。
bpo-25328: 如果 decode_data 和 enable_SMTPUTF8 都被设置为 true,smtpd 的 SMTPChannel 现在会正确地引发 ValueError。
bpo-16099: RobotFileParser 现在支持 Crawl-delay 和 Request-rate 扩展。由 Nikolay Bogoychev 提供补丁。
bpo-25316: 当未安装 MSVC 时,distutils 会引发 OSError 而不是 DistutilsPlatformError。
bpo-25380: 修复了 pickletools.opcodes 中 STACK_GLOBAL 操作码的协议。
bpo-23972: 更新了 asyncio 的数据报创建方法,允许在绑定套接字之前设置 reuseport 和 reuseaddr 套接字选项。与现有的 asyncio create_server 方法类似,如果操作系统是 'posix'(除非平台是 Cygwin),数据报套接字的 reuseaddr 选项默认为 True。由 Chris Laws 提供补丁。
bpo-25304: 添加了 asyncio.run_coroutine_threadsafe()。这让你可以从另一个线程向循环提交一个协程,返回一个 concurrent.futures.Future。由 Vincent Michel 提供。
bpo-25232: 修复 CGIRequestHandler,使其在第一个问号 (?) 处而不是最后一个问号处将查询与 URL 分开。补丁来自 Xiang Zhang。
bpo-24657: 防止 CGIRequestHandler 像处理路径一样在 URL 的查询部分折叠斜杠。补丁来自 Xiang Zhang。
bpo-25287: 如果不支持 crypt.METHOD_CRYPT,则不要将其添加到 crypt.methods 中。检查是否支持,例如在 OpenBSD 上可能不支持。
bpo-23600: tzinfo.fromutc() 的默认实现在某些情况下返回了错误的结果。
bpo-25203: 失败的 readline.set_completer_delims() 不再使模块处于不一致状态。
bpo-25011: rlcompleter 现在会省略私有和特殊属性名称,除非前缀以下划线开头。
bpo-25209: rlcompleter 现在可以在完成的关键字后添加空格或冒号。
bpo-22241: timezone.utc 名称现在是简单的 'UTC',而不是 'UTC-00:00'。
bpo-23517: datetime.datetime 的 fromtimestamp() 和 utcfromtimestamp() 方法现在将微秒四舍五入到最近的偶数整数(ROUND_HALF_EVEN),如同 round(float),而不是向负无穷方向舍入(ROUND_FLOOR)。
bpo-23552: Timeit 现在在最佳和最差时间之间存在显著(4倍)差异时发出警告。补丁来自 Serhiy Storchaka。
bpo-24633: site-packages/README -> README.txt。
bpo-24879: help() 和 pydoc 现在可以按照命名元组字段定义的顺序而非字母顺序列出它们。排序由 _fields 属性(如果存在)决定。
bpo-24874: 提高 itertools.cycle() 的速度并使其 pickle 更加紧凑。
修复了当第一个参数不是列表时 itertools.cycle.__setstate__() 的崩溃问题。
bpo-20059: urllib.parse 在所有无效端口上引发 ValueError。补丁来自 Martin Panter。
bpo-24360: 为无效标识符改进 argparse.Namespace() 的 __repr__。补丁来自 Matthias Bussonnier。
bpo-23426: distutils 中的 run_setup 被破坏。补丁来自 Alexander Belopolsky。
bpo-13938: 2to3 将 StringTypes 转换为元组。补丁来自 Mark Hammond。
bpo-2091: open() 接受包含 '+' 的 'U' 模式字符串,但 'U' 只能与 'r' 一起使用。补丁来自 Jeff Balogh 和 John O'Connor。
bpo-8585: 改进了 zipimporter2 的测试。补丁来自 Mark Lawrence。
bpo-18622: unittest.mock.mock_open().reset_mock 会无限递归。补丁来自 Nicola Palumbo 和 Laurent De Buyst。
bpo-24426: 正则表达式中的快速搜索优化现在适用于以捕获组开始的模式。快速搜索优化现在不能在编译时禁用。
bpo-23661: unittest.mock 的 side_effects 现在可以再次是异常。这是对 Python 3.4 的一个回归。补丁来自 Ignacio Rossi
bpo-13248: 移除已弃用的 inspect.getmoduleinfo 函数。
bpo-25578: 修复 SSLSocket.getpeercer() 中的另一个内存泄漏问题。
bpo-25530: 默认情况下,在创建 ssl.SSLContext 时禁用易受攻击的 SSLv3 协议。
bpo-25569: 修复 SSLSocket.getpeercert() 中的内存泄漏问题。
bpo-25471: 从 accept() 返回的套接字不应显示为非阻塞。
bpo-25319: 当 threading.Event 被重新初始化时,底层条件应使用常规锁而不是递归锁。
如果主机已解析,则跳过 getaddrinfo。由 A. Jesse Jiryu Davis 提供补丁。
bpo-26050: 添加 asyncio.StreamReader.readuntil() 方法。由 Марк Коренберг 提供补丁。
bpo-25924: 在 OS X 10.5 或更高版本上避免不必要的 getaddrinfo(3) 调用序列化。原始补丁由 A. Jesse Jiryu Davis 提供。
bpo-26406: 在当前版本的 OpenBSD 和 NetBSD 上避免不必要的 getaddrinfo(3) 调用序列化。由 A. Jesse Jiryu Davis 提供补丁。
bpo-26848: 修复 asyncio/subprocess.communicate() 以处理空输入。由 Jack O'Connor 提供补丁。
bpo-27040: 添加 loop.get_exception_handler 方法
bpo-27041: asyncio: 添加 loop.create_future 方法
IDLE¶
bpo-20640: 为 idlelib.configHelpSourceEdit 添加测试。由 Saimadhav Heblikar 提供补丁。
在 IDLE 文档的 'IDLE-控制台差异' 部分,澄清使用 IDLE 运行如何影响 sys.modules 和标准流。
bpo-25507: 修复 IOBinding 中阻止打印的错误更改。增强 IOBinding htest 以包括所有主要 IOBinding 功能。
bpo-25905: 恢复 README.txt 中 ' 到 ’ 右单引号的不必要转换,并用 'ascii' 打开此文件和 NEWS.txt。将 CREDITS.txt 重新编码为 utf-8 并用 'utf-8' 打开。
bpo-15348: 在关闭调试器窗口(在 IDLE 进程中运行)之前停止调试器引擎(通常在用户进程中)。这防止了被捕获并忽略的 RuntimeErrors。
bpo-24455: 防止IDLE在以下情况下挂起:a) 当调试器处于活动状态时关闭shell(15347);b) 使用[X]按钮关闭调试器(15348);以及c) 当调试器已经处于活动状态时再次激活(24455)。Mark Roseman的补丁通过两个更改来实现这一点。1. 使用为此目的设计的tcl vwait机制(而不是root.mainloop & .quit)暂停和恢复gui.interaction方法。2. 在gui.run中,允许任何现有的交互首先终止。
在IDLE的'终止程序?'消息中,将'程序'改为'您的程序',以更清楚地表明所指的是当前运行的用户程序,而不是IDLE本身。
bpo-24750: 改善IDLE编辑器窗口状态栏的外观。Patch by Mark Roseman。
bpo-25313: 更改新内置文本颜色主题的处理,以更好地解决由IDLE Dark的添加引入的兼容性问题。在idlelib中一致地使用修订后的idleConf.CurrentTheme。
bpo-24782: 扩展配置现在是IDLE首选项对话框中的一个标签,而不是一个单独的对话框。原来的标签现在是一个排序列表。Patch by Mark Roseman。
bpo-22726: 重新激活配置对话框帮助按钮,包含一些关于其他按钮和新IDLE Dark主题的内容。
bpo-24820: IDLE现在有一个'IDLE Dark'内置文本颜色主题。它或多或少是IDLE Classic的反转,背景为钴蓝色。字符串、注释、关键字等仍然是绿色、红色、橙色等。要在2015年11月之前发布的IDLEs中使用它,点击'保存为新的自定义主题'按钮并输入一个新名称,如'Custom Dark'。自定义主题适用于任何IDLE版本,并且可以修改。
bpo-25224: README.txt现在是IDLE开发者和好奇用户的idlelib索引。以前的用户内容现在在IDLE文档章节中。'IDLE'现在意味着'集成开发和学习环境'。
bpo-24820: 用户现在可以在设置->自定义高亮中设置断点颜色。原始由Mark Roseman提供补丁。
bpo-24972: 非活动选择背景现在在所有系统上都与用户配置的活动选择背景相匹配。在Windows上,找到的项目现在总是高亮显示。初始由Mark Roseman提供补丁。
bpo-24570: Idle:在受tk回归影响的Mac上显示调用提示和完成框。初始补丁由Mark Roseman提供。
bpo-24988: Idle ScrolledList上下文菜单(在调试器中使用)现在在Mac Aqua上工作。由Mark Roseman提供补丁。
bpo-24801: 使右键点击上下文菜单在Mac Aqua上工作。由Mark Roseman提供补丁。
bpo-25173: 将tkinter消息框与特定小部件关联。对于Mac OSX,使它们成为'表单'。由Mark Roseman提供补丁。
bpo-25198: 增强现在用于Idle Help的初始html查看器。正确缩进固定间距文本(由Mark Roseman提供补丁)。给代码片段一个非常类似Sphinx的浅蓝灰色背景。重用用户为shell和编辑器设置的初始宽度和高度。当使用目录(TOC)菜单时,将部分标题放在屏幕顶部。
bpo-25225: 压缩并重写Idle文档中关于文本颜色的部分。
bpo-21995: 解释IDLE和控制台Python之间的一些差异。
bpo-22820: 解释在从Idle编辑器运行文件时需要 print 的原因。
bpo-25224: 文档:增加Idle功能列表和无子进程部分。
bpo-25219: 更新Idle命令行选项的文档。有些选项缺失,注释也不正确。
bpo-24861: 大多数idlelib是私有的,可能会更改。使用idleib.idle.*来启动Idle。参见idlelib.__init__.__doc__。
bpo-25199: Idle:为未来的维护者添加同步注释。
bpo-16893: 将 Idle 文档显示的 help.txt 替换为 help.html。新的 idlelib/help.html 是去除右侧空格的 Doc/build/html/library/idle.html。它看起来比 help.txt 更好,并将更好地记录发布的 Idle。适用于此文件的 tkinter html 查看器是由 Rose Roseman 编写的。现在未使用的 EditorWindow.HelpDialog 类和 helt.txt 文件已被弃用。
bpo-24199: 弃用未使用的 idlelib.idlever,可能在 3.6 中移除。
bpo-24790: 移除多余的代码(这也造成了 2 和 3 的冲突)。
文档¶
bpo-26736: 尽可能在文档中使用 HTTPS 作为外部链接。
bpo-6953: 重新组织 Readline 模块文档,将相关函数分组,并添加更多细节,如访问哪些底层的 Readline 函数和变量。
bpo-23606: 向 ctypes 文档添加关于 cdll.msvcrt 的注释。
bpo-24952: 阐明 "threading" 和 "_thread" 模块中 stack_size() 的默认 size 参数。来自 Mattip 的补丁。
bpo-26014: 更新 3.x 打包文档:* 现在在旧版页面中提供了指向新文档的 "参见" 链接 * 更新了指向 setuptools 文档的链接
测试¶
bpo-21916: 为 turtle 模块添加了测试。由 ingrid、Gregory Loyse 和 Jelle Zijlstra 提供补丁。
bpo-26295: 当使用 "python3 -m test --testdir=TESTDIR" 时,regrtest 不会给测试模块名添加 "test." 前缀。
bpo-26523: 多进程线程池(multiprocessing.dummy.Pool)未经测试。
bpo-26015: 为可变序列的迭代器的 pickle 操作添加了新测试。
bpo-26325: 添加了 test.support.check_no_resource_warning() 来检查是否未发出 ResourceWarning。
bpo-25940: 更改 test_ssl 以更多地使用其内部本地服务器。这避免依赖 svn.python.org,后者最近更改了根证书。
bpo-25616: OrderedDict 的测试从 test_collections 中提取出来,放入单独的文件 test_ordered_dict 中。
bpo-25449: 为 OrderedDict 的子类添加了测试。
bpo-25188: 添加 -P/--pgo 到 test.regrtest,以在运行测试套件用于PGO构建时抑制错误输出。初始由Alecsandru Patrascu提供补丁。
bpo-22806: 添加
python -m test --list-tests
命令以列出测试。bpo-18174:
python -m test --huntrleaks ...
现在也会检查文件描述符的泄漏。补丁由Richard Oudkerk编写。bpo-25260: 修复
python -m test --coverage
在Windows上的问题。移除忽略目录的列表。PCbuild\rt.bat
现在可以接受无限数量的参数传递给regrtest.py。之前有9个的限制。bpo-26583: 如果无法写入字节码文件,则在test_import中跳过test_timestamp_overflow测试。
构建¶
bpo-21277: 不要试图将_ctypes与ffi_convenience库链接。
bpo-26884: 修复交叉构建中扩展模块的链接问题。由Xavier de Gaye提供补丁。
bpo-26932: 修复了对定义为枚举值而非宏的RTLD_*常量的支持(特别是在Android上)。由Chi Hsuan Yen提供补丁。
bpo-22359: 在交叉编译时禁用运行_freeze_importlib和pgen的规则。这些程序的输出通常与源代码一起保存,并且在本地构建时仍会重新生成。由Xavier de Gaye提供补丁。
bpo-21668: 将audioop、_datetime、_ctypes_test模块链接到libm,除了Mac OS X。补丁由Chi Hsuan Yen编写。
bpo-25702: 添加了一个--with-lto配置选项,该选项将在make profile-opt期间启用构建时的链接时间优化。已知一些编译器和工具链在使用LTO时不会产生稳定的代码,因此在依赖它之前确保彻底测试。它可以比仅使用profile-opt提供几个%的速度提升。
bpo-26624: 添加了对ucrtbase[d].dll版本的验证,并对旧版本发出警告。
bpo-17603: 通过使用struct stat中st_blocks的低级检查,避免关于不存在的fileblocks.o文件的错误。
bpo-26079: 修复 tix-8.4.3.6 的构建输出文件夹。由 Bjoern Thiel 提交补丁。
bpo-26465: 更新 Windows 构建以使用 OpenSSL 1.0.2g。
bpo-25348: 添加了
--pgo
和--pgo-job
参数到PCbuild\build.bat
以便使用 Profile-Guided Optimization 构建。旧的PCbuild\build_pgo.bat
脚本已被移除。bpo-25827: 向
configure
添加了对使用 ICC 构建的支持,包括一个新的--with-icc
标志。bpo-25696: 修复了在 UNIX 上使用 make -j9 安装 Python 的问题。
bpo-24986: 现在可以在 Windows 上构建 Python 而不会在没有外部库的情况下出现错误。
bpo-24421: 在构建扩展之前,先编译 Modules/_math.c 一次。之前如果数学和 cmath 构建同时进行,可能会导致编译失败。
bpo-26465: 更新 OS X 10.5+ 仅 32 位安装程序,以构建和链接 OpenSSL 1.0.2g。
bpo-26268: 更新 Windows 构建以使用 OpenSSL 1.0.2f。
bpo-25136: 支持 Apple Xcode 7 的新文本 SDK stub 库。
bpo-24324: 当使用 gcc 时不启用不可达代码警告,因为该选项在旧版本的 gcc 中不起作用,并且在 gcc-4.5 之后已被静默移除。
Windows¶
工具/示例¶
bpo-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: Fixed possible integer overflow in PyBytes_DecodeEscape, CVE-2017-1000158. Original patch by Jay Bosamiya; rebased to Python 3 by Miro Hrončok.
bpo-30947: 将内嵌的 libexpat 从版本 2.2.1 升级到 2.2.3 以获取安全修复。
核心与内置函数¶
bpo-31095: 修复由未调用
PyObject_GC_UnTrack()
的tp_dealloc
引起的GC期间潜在崩溃问题。
库¶
bpo-32072: 修复了二进制 plists 的问题:修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。
bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题(libexpat bug 115):https://github.com/libexpat/libexpat/issues/115
Python 3.5.4 正式版¶
发布日期: 2017-08-07
库¶
bpo-30119: ftplib.FTP.putline() 现在会在命令包含 CR 或 LF 时抛出 ValueError。由 Donghee Na 提供补丁。
Python 3.5.4 rc1¶
发布日期: 2017-07-23
安全性¶
bpo-30730: 在 Windows 上防止子进程中的环境变量注入。防止传递其他环境变量和命令参数。
bpo-30694: Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes of multiple security vulnerabilities including: CVE-2017-9233 (External entity infinite loop DoS), CVE-2016-9063 (Integer overflow, re-fix), CVE-2016-0718 (Fix regression bugs from 2.2.0's fix to CVE-2016-0718) and CVE-2012-0876 (Counter hash flooding with SipHash). Note: the CVE-2016-5300 (Use os-specific entropy sources like getrandom) doesn't impact Python, since Python already gets entropy from the OS to set the expat secret using
XML_SetHashSalt()
.bpo-30500: 修复 urllib.parse.splithost() 正确解析片段。例如,
splithost('//127.0.0.1#@evil.com/')
现在正确返回127.0.0.1
主机,而不是将@evil.com
视为认证中的主机(login@host
)。bpo-29591: Update expat copy from 2.1.1 to 2.2.0 to get fixes of CVE-2016-0718 and CVE-2016-4472. See https://sourceforge.net/p/expat/bugs/537/ for more information.
核心与内置函数¶
bpo-30876: 从未加载的包中进行相对导入现在会重新导入包,而不是因SystemError失败。从非包中进行相对导入现在会因ImportError而非SystemError失败。
bpo-30765: 当PyThread_acquire_lock()被要求不阻塞时,避免在pthread_mutex_lock()中阻塞。
bpo-27945: 修复了在搜索、插入或比较过程中输入集合被修改时,字典的各种段错误。基于 Duane Griffin 和 Tim Mitchell 的补丁。
bpo-25794: 修复了 type.__setattr__() 和 type.__delattr__() 对于非 interned 属性名称的问题。基于 Eryk Sun 的补丁。
bpo-29935: 修复了在传递错误类型的索引时,tuple、list 和 deque 的 index() 方法中的错误消息。
bpo-28876: 即使
len(range)
引发OverflowError
,bool(range)
也能正常工作。bpo-29600: 修复在StopIteration中包装协程返回值的问题。
bpo-29537: 恢复与由 CPython 3.5.0 至 3.5.2 生成的字节码文件的运行时兼容性,并调整 eval 循环以避免可能由它们可能包含的 BUILD_MAP_UNPACK_WITH_CALL 操作码的错误变体引起的问题。由 Petr Viktorin、Serhiy Storchaka 和 Nick Coghlan 提供补丁。
bpo-28598: 支持在调用 str.__mod__ 之前调用 str 子类的 __rmod__。由 Martijn Pieters 提供补丁。
bpo-29602: 修复了在复杂子类的构造函数和具有 __complex__ 方法的输入中对有符号零的错误处理。由 Serhiy Storchaka 提供补丁。
bpo-29347: 修复了在创建弱引用对象时可能解引用未定义指针的问题。
bpo-29438: 修复了key sharing dict中的use-after-free问题。
bpo-29319: 防止RunMainFromImporter覆盖sys.path[0]。
bpo-29337: 修复了比较代码对象时可能出现的BytesWarning。警告可能在编译时发出。
bpo-29478: 在使用Compat32策略时,如果指定了max_line_length=None,它将不再被忽略。补丁由Mircea Cosbuc提供。
库¶
bpo-29403: 修复``unittest.mock``模块的autospec功能,使其不再对绑定到方法的内置函数报错。由Aaron Gallagher提供补丁。
bpo-30961: 修复了tracemalloc中借用引用的递减问题。
bpo-30886: 修复 multiprocessing.Queue.join_thread():现在即使线程是由创建队列的同一进程启动的,它也会等待线程完成。
bpo-29854: 修复使用 readline 的 history-size 选项时 readline 中的段错误。由 Nir Soffer 提供补丁。
bpo-30807: 当传递一个极小的值时,signal.setitimer() 可能会禁用计时器。极小的值(如 1e-6)是 setitimer() 有效的非零值,它被指定为采取微秒级间隔。然而,在某些平台上,我们的转换例程可能将 1e-6 转换为零间隔,从而禁用计时器而不是(重新)调度它。
bpo-30441: 修复在迭代 os.environ 时修改它导致的错误。
bpo-30532: 修复电子邮件头值解析器在某些情况下丢弃折叠空白的问题。
bpo-29169: 将 zlib 更新至 1.2.11。
bpo-30879: os.listdir() 和 os.scandir() 现在在使用字节类参数调用时会发出字节名称。
bpo-30746: 禁止在
os.putenv()
和os.spawn*()
的环境变量名中使用 '=' 字符。bpo-29755: 修复了 gettext 模块中的 lgettext() 系列函数。它们现在总是返回字节。
bpo-30645: 修复imp.load_package()中的路径计算,修复仅随字节码一起提供包的情况。由Alexandru Ardelean提供补丁。
bpo-23890: unittest.TestCase.assertRaises() 现在手动打破引用循环,以避免对象存活时间超过预期。
bpo-30149: inspect.signature() 现在支持带有被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: Allow falsy values to be used for msg parameter of subTest().
bpo-27932: 防止win32_ver()中的内存泄漏。
修复socket._sendfile_use_sendfile中的UnboundLocalError。
bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。
bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。
bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。
bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。
bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。
bpo-19003: email.generator 现在按照 RFC,仅替换
\r
和/或\n
行结束符,而不是所有的 Unicode 行结束符。bpo-28019: itertools.count()不再将1.0到2.0之间的非整数步长四舍五入为1。
bpo-25969: 更新lib2to3语法以处理3.5中添加的解包泛化。
bpo-14977: mailcap现在遵循mailcap文件中的行顺序(“首次匹配”),符合RFC 1542的要求。由Michael Lazar提供的补丁。
bpo-24594: 在打开MSI数据库时验证persist参数。
bpo-17582: xml.etree.ElementTree现在保留属性中的空白(由Duane Griffin提供补丁。由Stefan Behnel审查和批准。)。
bpo-28047: 修复了用于新电子邮件策略中base64 CTE的行长度计算。
bpo-27445: 不将str(_charset)传递给MIMEText.set_payload()。由Claude Paroz提供的补丁。
bpo-22450: urllib现在在默认头中包括一个
Accept: */*
头。这使得REST API请求的结果更加一致和可预测,尤其是在涉及代理服务器时。lib2to3.pgen3.driver.load_grammar() 现在在相同的Grammar.txt输入下,无论哈希随机化设置如何,都会创建一个稳定的缓存文件。
bpo-27570: 在“ctypes”和“array”模块中避免使用空源指针进行零长度memcpy()等调用。
bpo-22233: 仅在RFC指定的CR和LF字符上断开电子邮件标题行,而不是在任意Unicode换行符上。这也修复了HTTP标题解析中的一个错误。
bpo-27988: 修复email iter_attachments对payload列表的错误修改。
bpo-27691: 修复ssl模块对X.509证书中GEN_RID主题替代名字段的解析。
bpo-27850: Remove 3DES from ssl module's default cipher list to counter measure sweet32 attack (CVE-2016-2183).
bpo-27766: 向ssl模块的默认加密列表中添加ChaCha20 Poly1305。(需要OpenSSL 1.1.0或LibreSSL)。
bpo-26470: 将ssl和hashlib模块移植到OpenSSL 1.1.0。
移除对传递文件描述符给os.access的支持。它从未工作过,但以前不会引发错误。
bpo-12885: 修复distutils遇到符号链接时的错误。
bpo-27881: 修复了设置sqlite3.Connection.isolation_level时可能的错误。基于Xiang Zhang的补丁。
bpo-27861: 修复了当工厂创建的不是游标时sqlite3.Connection.cursor()中的崩溃。由Xiang Zhang提供补丁。
bpo-19884: 避免在OS X上使用Gnu Readline时产生虚假输出。
bpo-27706: 恢复random.Random().seed()对于使用种子版本1的字符串种子的确定性行为。允许random()的调用序列与Python 2中完全匹配。由Nofar Schnider提供补丁。
bpo-10513: 修复Connection.commit()中的回归问题。提交后不应重置语句。
来自 https://github.com/python/typing 的 typing.py 新版本:Collection(仅适用于 3.6)(bpo-27598)。将 FrozenSet 添加到 __all__(上游 #261)。修复 _get_type_vars() 中的崩溃(上游 #259)。移除 ForwardRef._eval_type 中的字典约束(上游 #252)。
bpo-27539: 修复了在负指数和负基数情况下未归一化的
Fraction.__pow__
结果。bpo-21718: 现在,使用CTEs的查询可以使用cursor.description了。
bpo-2466: posixpath.ismount现在能正确识别用户没有权限访问的挂载点。
bpo-27773: 更正 _ssl.wrap_socket() 中 server_hostname 的一些内存管理错误。
bpo-26750: unittest.mock.create_autospec() 现在能正确处理 property() 及其他数据描述符的子类。
在 curses 模块中,如果向 window.getstr() 或 window.instr() 传递负值,则引发错误。
bpo-27783: 修复 operator.methodcaller 中可能使用未初始化内存的问题。
bpo-27774: 修复 _sre 中可能对未拥有对象进行 Py_DECREF 的问题。
bpo-27760: 修复 binascii.b2a_qp 中可能的整数溢出。
bpo-27758: 修复 _csv 模块中对于大记录长度可能的整数溢出。
bpo-27568: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates that the script is in CGI mode.
bpo-27656: 不再假设sched.h定义了任何SCHED_*常量。
bpo-27130: 在“zlib”模块中,修复了压缩和解压缩大缓冲区(通常为4 GiB)时的处理问题。之前,输入被限制在4 GiB,压缩和解压缩操作未能正确处理4 GiB的结果。
bpo-27533: 在nt._isdir中释放GIL。
bpo-17711: 修复了使用协议0的持久ID进行反序列化的问题。原始补丁由Alexandre Vassalotti提交。
bpo-27522: 避免在email.feedparser中无意中创建的引用循环。
bpo-26844: 修复 imp.find_module() 的错误消息,使其引用 'path' 而不是 'name'。由 Lev Maximov 提供补丁。
bpo-23804: 修复 SSL 零长度 recv() 调用,使其不阻塞且不引发关于不干净 EOF 的错误。
bpo-27466: 更改 http.cookie.time2netscape 返回的时间格式,确认 netscape cookie 格式并使其与文档一致。
bpo-26664: 通过移除
$
的错误使用修复 activate.fish。bpo-22115: 修复了跟踪 Tkinter 变量的功能:trace_vdelete() 使用错误的模式不再破坏跟踪,trace_vinfo() 现在总是返回字符串对的列表,"u" 模式下的跟踪现在可以工作。
修复了 importlib.util.LazyLoader 中的一个作用域问题,该问题在懒加载一个已经被放入 sys.modules 的模块时会触发 UnboundLocalError。
bpo-27079: 修复了curses.ascii函数isblank()、iscntrl()和ispunct()。
bpo-26754: 一些函数(如compile()等)接受以整数可迭代对象编码的文件名参数。现在只接受字符串和字节类对象。
bpo-27048: 防止distutils在Windows上因环境变量包含非ASCII字符而失败。
bpo-27330: 修复了ctypes模块中可能的泄漏。
bpo-27238: 移除了turtle模块中的裸except。原始由Jelle Zijlstra提供补丁。
bpo-27122: 当在由contextlib.ExitStack()管理的上下文中引发异常,并且退出堆栈生成器之一捕获并在链中引发它时,退出时不再重新引发原始异常,而是让新的链式异常通过。这避免了issue25782中描述的 PEP 479 错误。
bpo-26386: 修复了 ttk.TreeView 选中操作中项目 ID 包含空格的问题。
bpo-16182: 修复 "readline" 模块中的多个函数以使用区域设置编码,并修复 get_begidx() 和 get_endidx() 返回代码点索引。
bpo-27392: 添加 loop.connect_accepted_socket()。由 Jim Fulton 提供补丁。
bpo-27930: 改进了logging.handlers.QueueListener的行为。感谢Paulo Andrade和Petr Viktorin的分析和补丁。
bpo-21201: 提高了multiprocessing错误消息的可读性。感谢Wojciech Walczak的补丁。
bpo-27456: asyncio:默认设置TCP_NODELAY。
bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。
bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。
bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。
bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。
bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。
bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。
bpo-28368: 如果子监视器没有附加循环,则拒绝监视进程。由Vincent Michel提供补丁。
bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。
bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。
bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。
bpo-28372: 修复asyncio以支持非python协程的格式化。
bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。
bpo-27972: 禁止Tasks等待自身。
bpo-26923: 修复 asyncio.Gather 一旦所有子项完成就拒绝被取消的问题。由 Johannes Ebke 提供补丁。
bpo-26796: 不要为默认的线程池执行器配置工作线程数量。初始由 Hans Lawrenz 提供补丁。
bpo-28600: 优化 loop.call_soon()。
bpo-28613: 修复 get_event_loop() 在协程/回调中调用时返回当前循环的问题。
bpo-28639: 修复 inspect.isawaitable 始终返回布尔值,由 Justin Mayfield 提供补丁。
bpo-28652: 使循环方法拒绝它们不支持的套接字类型。
bpo-28653: 修复 functools.lru_cache 中的 refleak。
bpo-28703: 修复 asyncio.iscoroutinefunction 以处理 Mock 对象。
bpo-24142: 读取损坏的配置文件会使解析器处于无效状态。原始由 Florian Höch 提供补丁。
bpo-28990: 修复了如果在握手完成前关闭连接会导致 SSL 挂起的问题。(补丁由 HoHo-Ho 提供)
IDLE¶
bpo-15308: 向Shell菜单添加了'中断执行'(^C)。由Roger Serwy提供补丁,由Bayard Randel更新。
bpo-27922: 停止IDLE测试在屏幕上'闪烁'gui小部件。
在 IDLE 帮助窗口的标题中加入版本号
bpo-25564: 在IDLE与控制台差异的部分,提到使用exec意味着每个语句都定义了__builtins__。
bpo-27714: text_textview和test_autocomplete现在在同一个进程中重新运行时通过。这发生在test_idle使用-w选项运行但未使用-jn选项时失败时。修复test_config的警告。
bpo-25507: IDLE不再因为其tkinter导入而运行有bug的代码。用户必须包含直接在Python中运行所需的相同导入。
bpo-27452: 在IDLE configHandler测试转储中添加行计数器和crc。
bpo-27365: 允许在 IDLE NEWS.txt 中使用非 ASCII 字符,用于贡献者姓名。
bpo-27245: IDLE:干净地删除自定义主题和键绑定。以前,当 IDLE 从控制台或通过导入启动时,会发出一系列警告。由 Serhiy Storchaka 提供补丁。
C API¶
文档¶
bpo-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: Update expat to 2.1.1, fixes CVE-2015-1283.
Fix TLS stripping vulnerability in smtplib, CVE-2016-0772. Reported by Team Oststrom
bpo-26839: 在Linux上,
os.urandom()
现在调用getrandom()
与GRND_NONBLOCK
,如果urandom熵池尚未初始化,则回退到读取/dev/urandom
。补丁由Colm Buckley编写。bpo-26657: 修复Windows上http.server的目录遍历漏洞。这修复了在3.3.4rc1和3.4.0rc1中引入的回归问题。基于Philipp Hagemeister的补丁。
bpo-26313: 如果windows证书存储为空,ssl.py _load_windows_store_certs失败。由Baji提供补丁。
bpo-25939: 在Windows上以只读方式打开证书存储于ssl.enum_certificates中。
核心与内置函数¶
bpo-27066: 修复了如果自定义 opener(为 open())返回一个负数而没有设置异常时的 SystemError。
bpo-20041: 修复当frame.f_trace被设置为None时的TypeError。由Xavier de Gaye提供补丁。
bpo-26168: 修复了在使用 "N" 格式化单元时 Py_BuildValue() 失败可能导致的内存泄漏问题。
bpo-26991: 修复了创建带有注解的函数时可能出现的内存泄漏问题。
bpo-27039: 修复了bytearray.remove()对于大于127的值的问题。由Joe Jevnik提供补丁。
bpo-23640: int.from_bytes() 不再绕过子类的构造函数。
bpo-26811: gc.get_objects() 不再包含带有 NULL 指针的损坏元组。
bpo-20120: 使用 RawConfigParser 来解析 .pypirc 文件,移除了无意中随着迁移到 Python 3 而添加的插值支持。现在的行为不会再在 .pypirc 文件中进行任何插值,与 Python 2.7 和 Setuptools 19.0 的行为一致。
bpo-26659: 使内置的 slice 类型支持循环回收。
bpo-26718: super.__init__ 如果被多次调用,将不再泄露内存。注意:不推荐直接调用 super.__init__!
bpo-25339: 现在在设置 stdin 和 stdout 的错误处理器时,PYTHONIOENCODING 优先于 locale。
bpo-26494: 修复了在迭代耗尽迭代器时的崩溃问题。受影响的类包括通用序列迭代器、str、bytes、bytearray、list、tuple、set、frozenset、dict、OrderedDict的迭代器,相应的视图以及os.scandir()迭代器。
bpo-26581: 如果在Python源代码文件中一行内多次指定编码声明,只有第一个会被考虑。
bpo-26464: 修复了当字符串为ASCII且第一个替换移除了字符,但下一个替换使用非ASCII字符或长度超过1个字符的字符串时str.translate()的问题。这是在Python 3.5.0中引入的回归问题。
bpo-22836: 确保即使格式化产生次要错误时,PyErr_Display()和PyErr_WriteUnraisable()产生的异常报告也是合理的。这影响sys.__excepthook__()产生的报告以及__del__()引发异常时的情况。
bpo-26302: 修正行为,拒绝将逗号作为cookie名称的合法字符。
bpo-4806: 在函数调用中使用星号(
*
)解包时,避免掩盖原始的TypeError异常。基于Hagen Fürstenau和Daniel Urban的补丁。bpo-27138: 修正了 FileFinder.find_spec() 的文档注释。
bpo-26154: 新增一个私有函数_PyThreadState_UncheckedGet()用于获取当前Python线程状态,但如果其为NULL时不发出致命错误。必须使用此新函数而非直接访问_PyThreadState_Current变量。自Python 3.5.1起,该变量不再暴露以隐藏原子C类型的精确实现,避免编译器问题。
bpo-26194: Deque.insert()对于已达到最大大小的有界deque给出了奇怪的结果。现在当尝试向一个已满的deque插入时会引发IndexError。
bpo-25843: 编译代码时,如果常量相等但类型不同,则不合并它们。例如,
f1, f2 = lambda: 1, lambda: 1.0``现在被正确编译为两个不同的函数:``f1()``返回 ``1
(int
) 和``f2()``返回1.0
(float
) ,即使1
和1.0
相等。bpo-22995: [更新] 由于在基于Cython的项目中观察到的回归问题,注释掉_PyObject_GetState()中的一个可pickle性测试。
bpo-25961: 类型名称中不允许空字符。
bpo-25973: 修复当无效的非局部语句绑定一个以两个下划线开头的名称时导致的段错误。
bpo-22995: 不是列表或字典的子类且未实现任何与pickle相关的方法(__reduce__、__reduce_ex__、__getnewargs__、__getnewargs_ex__或__getstate__)的扩展类型实例,包括memoryview,将不能再被pickle。
bpo-20440: 大量替换不安全的属性设置代码为特殊宏Py_SETREF。
bpo-25766: 特殊方法__bytes__()现在在str子类中工作。
bpo-25421: 内置类型的__sizeof__方法现在使用动态基本大小。这使得sys.getsize()能够正确工作于定义了__slots__的子类。
bpo-25709: 修复了原地字符串连接和utf-8缓存的问题。
bpo-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
脚本现已弃用,仅调用``PCbuildbuild.bat --pgo %*``。bpo-25827: 向
configure
添加了对使用 ICC 构建的支持,包括一个新的--with-icc
标志。bpo-25696: 修复了在 UNIX 上使用 make -j9 安装 Python 的问题。
bpo-26930: 更新OS X 10.5+ 32位仅安装程序以构建并与OpenSSL 1.0.2h链接。
bpo-26268: 更新 Windows 构建以使用 OpenSSL 1.0.2f。
bpo-25136: 支持 Apple Xcode 7 的新文本 SDK stub 库。
bpo-24324: 当使用 gcc 时不启用不可达代码警告,因为该选项在旧版本的 gcc 中不起作用,并且在 gcc-4.5 之后已被静默移除。
Windows¶
bpo-27053: 更新 make_zip.py 以正确生成库 ZIP 文件。
bpo-26268: 更新 prepare_ssl.py 脚本以处理不包含 include 目录内容的 OpenSSL 版本(即 1.0.2e 及更高版本)。
bpo-26071: bdist_wininst 创建的二进制文件无法启动并找到 32 位 Python
bpo-26073: 更新启动器中的魔法数字列表
bpo-26065: 在生成可嵌入发行版时从库中排除 venv。
bpo-17500: 移除未使用和过时的图标。(另见:https://github.com/python/pythondotorg/issues/945)
工具/示例¶
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: Fixed functools.singledispatch on classes with falsy metaclasses. Patch by Ethan Furman.
asyncio: ensure_future() 现在接受可等待对象。
IDLE¶
bpo-15348: 在关闭调试器窗口(在 IDLE 进程中运行)之前停止调试器引擎(通常在用户进程中)。这防止了被捕获并忽略的 RuntimeErrors。
bpo-24455: 防止IDLE在以下情况下挂起:a) 当调试器处于活动状态时关闭shell(15347);b) 使用[X]按钮关闭调试器(15348);以及c) 当调试器已经处于活动状态时再次激活(24455)。Mark Roseman的补丁通过两个更改来实现这一点。1. 使用为此目的设计的tcl vwait机制(而不是root.mainloop & .quit)暂停和恢复gui.interaction方法。2. 在gui.run中,允许任何现有的交互首先终止。
在IDLE的'终止程序?'消息中,将'程序'改为'您的程序',以更清楚地表明所指的是当前运行的用户程序,而不是IDLE本身。
bpo-24750: 改善IDLE编辑器窗口状态栏的外观。Patch by Mark Roseman。
bpo-25313: 更改新内置文本颜色主题的处理,以更好地解决由IDLE Dark的添加引入的兼容性问题。在idlelib中一致地使用修订后的idleConf.CurrentTheme。
bpo-24782: 扩展配置现在是IDLE首选项对话框中的一个标签,而不是一个单独的对话框。原来的标签现在是一个排序列表。Patch by Mark Roseman。
bpo-22726: 重新激活配置对话框帮助按钮,包含一些关于其他按钮和新IDLE Dark主题的内容。
bpo-24820: IDLE现在有一个'IDLE Dark'内置文本颜色主题。它或多或少是IDLE Classic的反转,背景为钴蓝色。字符串、注释、关键字等仍然是绿色、红色、橙色等。要在2015年11月之前发布的IDLEs中使用它,点击'保存为新的自定义主题'按钮并输入一个新名称,如'Custom Dark'。自定义主题适用于任何IDLE版本,并且可以修改。
bpo-25224: README.txt现在是IDLE开发者和好奇用户的idlelib索引。以前的用户内容现在在IDLE文档章节中。'IDLE'现在意味着'集成开发和学习环境'。
bpo-24820: 用户现在可以在设置->自定义高亮中设置断点颜色。原始由Mark Roseman提供补丁。
bpo-24972: 非活动选择背景现在在所有系统上都与用户配置的活动选择背景相匹配。在Windows上,找到的项目现在总是高亮显示。初始由Mark Roseman提供补丁。
bpo-24570: Idle:在受tk回归影响的Mac上显示调用提示和完成框。初始补丁由Mark Roseman提供。
bpo-24988: Idle ScrolledList上下文菜单(在调试器中使用)现在在Mac Aqua上工作。由Mark Roseman提供补丁。
bpo-24801: 使右键点击上下文菜单在Mac Aqua上工作。由Mark Roseman提供补丁。
bpo-25173: 将tkinter消息框与特定小部件关联。对于Mac OSX,使它们成为'表单'。由Mark Roseman提供补丁。
bpo-25198: 增强现在用于Idle Help的初始html查看器。正确缩进固定间距文本(由Mark Roseman提供补丁)。给代码片段一个非常类似Sphinx的浅蓝灰色背景。重用用户为shell和编辑器设置的初始宽度和高度。当使用目录(TOC)菜单时,将部分标题放在屏幕顶部。
bpo-25225: 压缩并重写Idle文档中关于文本颜色的部分。
bpo-21995: 解释IDLE和控制台Python之间的一些差异。
bpo-22820: 解释在从Idle编辑器运行文件时需要 print 的原因。
bpo-25224: 文档:增加Idle功能列表和无子进程部分。
bpo-25219: 更新Idle命令行选项的文档。有些选项缺失,注释也不正确。
bpo-24861: 大多数idlelib是私有的,可能会更改。使用idleib.idle.*来启动Idle。参见idlelib.__init__.__doc__。
bpo-25199: Idle:为未来的维护者添加同步注释。
bpo-16893: 用 help.html 替换 help.txt 用于 Idle 文档显示。新的 idlelib/help.html 是从 Doc/build/html/library/idle.html 去除右侧空白的版本。它看起来比 help.txt 更好,并且能更好地记录发布的 Idle。为此文件工作的 tkinter html 查看器由 Mark Roseman 编写。现在未使用的 EditorWindow.HelpDialog 类和 helt.txt 文件已被弃用。
bpo-24199: 弃用未使用的 idlelib.idlever,可能在 3.6 中移除。
bpo-24790: 移除多余的代码(这也造成了 2 和 3 的冲突)。
文档¶
bpo-22558: 将剩余的文档链接添加到Python编码模块的源代码中。由Yoni Lavi提供补丁。
bpo-12067: 重写语言参考中表达式章节的比较部分。一些关于比较混合类型的细节不正确或含糊。NotImplemented 仅在比表达式章节更低的层次相关。增加了比较 range() 对象的细节,以及用户定义类的默认行为和一致性建议。补丁来自 Andy Maier。
bpo-24952: 阐明 "threading" 和 "_thread" 模块中 stack_size() 的默认 size 参数。来自 Mattip 的补丁。
bpo-23725: 彻底修改 tempfile 文档。注意 mktemp 的弃用状态。补丁来自 Zbigniew Jędrzejewski-Szmek。
bpo-24808: 更新一些 PyTypeObject 字段的类型。补丁来自 Joseph Weston。
bpo-22812: 修复 unittest 发现示例。补丁来自 Pam McA'Nulty。
测试¶
构建¶
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: Add a default limit for the amount of data xmlrpclib.gzip_decode will return. This resolves CVE-2013-1753.
bpo-14099: ZipFile.open()不再重新打开底层文件。ZipFile.open()返回的对象现在可以独立于ZipFile操作,即使ZipFile是通过将类似文件的对象作为构造函数的第一个参数传递而创建的。
bpo-22966: 修复当pyc_compile被要求编译包含源文件名中多个点的源文件时,__pycache__ pyc文件名冲突的问题。
bpo-21971: 更新turtledemo文档并将模块添加到索引中。
bpo-21032: 修复如果HTTPConnection.getresponse()失败时的套接字泄漏问题。原始由Martin Panter提供补丁。
bpo-22407: 弃用re.LOCALE标志与str模式或re.ASCII一起使用。它从未工作过。
bpo-22902: The "ip" command is now used on Linux to determine MAC address in uuid.getnode(). Pach by Bruno Cauet.
bpo-22960: 向xmlrpclib.ServerProxy构造函数添加上下文参数。
bpo-22389: 添加contextlib.redirect_stderr()。
bpo-21356: 使 ssl.RAND_egd() 成为可选项以支持 LibreSSL。该函数的可用性在编译期间进行检查。补丁由 Bernard Spil 编写。
bpo-22915: SAX 解析器现在支持通过文件描述符或字节路径打开的文件。
bpo-22609: collections 模块中的映射类的构造函数和更新方法现在接受 self 关键字参数。
bpo-22940: 添加 readline.append_history_file。
bpo-19676: 添加了 "namereplace" 错误处理程序。
bpo-22788: 向 logging.handlers.HTTPHandler 添加 context 参数。
bpo-22921: 允许 SSLContext 接受 hostname 参数,即使 OpenSSL 不支持 SNI。
bpo-22894: TestCase.subTest() 在 failfast 模式下会导致测试套件停止,即使没有失败。
bpo-22796: HTTP cookie 解析现在更加严格,以防范潜在的注入攻击。
bpo-22370: pathlib 中的 Windows 检测现在更加健壮。
bpo-22841: 在 asyncio add_signal_handler() 中拒绝协程。由 Ludovic.Gasc 提供补丁。
bpo-19494: 添加了 urllib.request.HTTPBasicPriorAuthHandler。由 Matej Cepl 提供补丁。
bpo-22578: 向 re.error 类添加了属性。
bpo-22849: 修复了 io.TextIOWrapper 构造函数中可能的双重释放问题。
bpo-12728: 现在在不区分大小写的正则表达式中匹配具有相同大写但不同小写的不同 Unicode 字符。
bpo-22821: 修复了在 64 位大端平台上使用整数参数的 fcntl()。
bpo-21650: 向
json.tool
CLI 添加了一个--sort-keys
选项。bpo-22824: 更新了 reprlib 中集合的输出格式以使用集合字面量。补丁由 Berker Peksag 贡献。
bpo-22824: 更新了 reprlib 中数组的输出格式,以显示没有不必要空列表的空数组。建议由 Serhiy Storchaka 提出。
bpo-22406: 修复了错误移植到 3.x 的 uu_codec 编解码器。基于 Martin Panter 的补丁。
bpo-17293: uuid.getnode() 现在在 AIX 上使用 netstat 确定 MAC 地址。基于 Aivars Kalvāns 的补丁。
bpo-22769: 修复了 ttk.Treeview.tag_has() 在没有参数调用时的问题。
bpo-22417: 在 httplib 中默认验证证书 (PEP 476)。
bpo-22775: 修复了使用协议 2 及以上版本对 http.cookies.SimpleCookie 的反序列化。补丁由 Tim Graham 提供。
bpo-22776: 在 SysLogHandler.emit() 中将排除的代码移至 try 块的作用域内。
bpo-22665: 将缺失的 get_terminal_size 和 SameFileError 添加到 shutil.__all__。
bpo-6623: 移除了 ftplib 模块中已弃用的 Netrc 类。由 Matt Chaput 提供补丁。
bpo-17381: 修复了正则表达式中不区分大小写范围的处理。
bpo-22410: re 模块中的模块级函数现在会缓存考虑到区域的依赖于区域设置的编译后的正则表达式。
bpo-22759: pathlib.Path() 上的查询方法 (exists(), is_dir() 等) 现在在底层 stat 调用引发 NotADirectoryError 时返回 False。
bpo-8876: distutils 现在在硬链接不起作用时回退到复制文件。这允许使用如 VirtualBox 共享文件夹这样的特殊文件系统。
bpo-22217: 实现了 zipfile 模块中类的 reprs。
bpo-22457: 在发现的 start_dir 中尊重 load_tests。
bpo-18216: gettext 现在在 .mo 文件有不受支持的主版本号时引发错误。由 Aaron Hill 提供补丁。
bpo-13918: 提供了一个 locale.delocalize() 函数,可以从表示数字的字符串中移除区域特定的数字格式,而不将其转换为特定类型。由 Cédric Krier 提供补丁。
bpo-22676: 使没有 __module__ 属性的全局对象的序列化不那么慢。
bpo-18853: 修复了 shlex.__nain__ 中的 ResourceWarning。
bpo-9351: 使用 set_defaults 在 argparse 子解析器上设置的默认值不再在父解析器上也设置时被忽略。
bpo-7559: unittest 测试加载时的 ImportErrors 现在会在导入失败后作为导入异常报告,而不是属性错误。
bpo-19746: 使得无需执行测试套件即可检查 unittest 发现过程中的错误。
TestLoader
的新errors
属性暴露了在发现过程中遇到的这些非致命错误。bpo-21991: 使 email.headerregistry 的头 'params' 属性变为只读(MappingProxyType)。之前字典是可修改的,但每次访问属性时都会创建一个新的字典。
bpo-22638: 现在整个标准库中 SSLv3 已被禁用。仍然可以通过手动实例化 SSLContext 来启用它。
bpo-22641: 在 asyncio 中,客户端连接的默认 SSL 上下文现在使用 ssl.create_default_context() 创建,以提高安全性。
bpo-17401: 在 io.FileIO 的 repr 中包含 closefd。
bpo-21338: 为 compileall 添加静默模式。compile_{dir, file, path} 函数的 quiet 参数现在具有多级值。此外,CLI 的 -q 选项现在也具有多级值。由 Thomas Kluyver 提供补丁。
bpo-20152: 将 array 和 cmath 模块转换为 Argument Clinic。
bpo-18643: 在 Windows 上添加 socket.socketpair()。
bpo-22435: 修复 socketserver 绑定失败时的文件描述符泄漏问题。
bpo-13096: 修复了 CTypes POINTER 处理大值时出现的段错误。
bpo-11694: 如文档所述,在 xdrlib 中引发 ConversionError。由 Filip Gruszczyński 和 Claudiu Popa 提供补丁。
bpo-19380: 优化了正则表达式的解析。
bpo-1519638: 现在在 re.sub() 和 re.subn() 中,未匹配的组将被空字符串替换。
bpo-18615: sndhdr.what/whathdr 现在返回一个 namedtuple。
bpo-22462: 修复 pyexpat 创建虚拟帧以使其出现在异常回溯中的问题。
bpo-21965: 为 ssl 模块添加对内存中 SSL 的支持。由 Geert Jansen 提供补丁。
bpo-21173: 修复了在调用.clear()时有迭代器存活时,对WeakKeyDictionary的len()操作的问题。
bpo-11866: 消除了新线程名称计算中的竞态条件。
bpo-21905: 在迭代过程中当sys.modules被修改时,避免pickle.whichmodule()中的RuntimeError。由Olivier Grisel提供补丁。
bpo-11271: concurrent.futures.Executor.map()现在接受一个 chunksize 参数,允许在子进程中批量处理任务并提高ProcessPoolExecutor的性能。由Dan O'Reilly提供补丁。
bpo-21883: os.path.join()和os.path.relpath()现在对于不支持或参数类型不匹配的情况,会抛出带有更有帮助的错误信息的TypeError。
bpo-22219: zipfile模块的命令行接口现在为ZIP文件中的目录(包括空目录)添加条目。
bpo-22449: 在ssl.SSLContext.load_default_certs中,在Windows上查询环境变量SSL_CERT_DIR和SSL_CERT_FILE。
bpo-22508: 移除了email.__version__变量;email代码不再与标准库分开提供,并且__version__在多个版本中未更新。
bpo-20076: 向语言环境别名表添加了非派生的UTF-8别名。
bpo-20079: 向语言环境别名表添加了glibc 2.18支持的语言环境。
bpo-20218: 向pathlib.Path对象添加了便利方法read_text/write_text和read_bytes/write_bytes。
bpo-22396: 在32位AIX平台上,不暴露os.posix_fadvise()和os.posix_fallocate(),因为它们在系统头文件中的原型是错误的。
bpo-22517: 当io.BufferedRWPair对象被析构时,清除其弱引用。
bpo-22437: 正则表达式中的捕获组数量不再限制为100。
bpo-17442: InteractiveInterpreter现在在其showtraceback方法中显示完整的链式回溯,以匹配内置的交互式解释器。
bpo-23392: 添加了与FILE*一起工作的marshal C API的测试。
bpo-10510: distutils的register和upload方法现在使用符合HTML标准的CRLF行尾。
bpo-9850: 修复了macpath.join()对于空的第一组件的问题。由Oleg Oshmyan提供补丁。
bpo-5309: distutils的build和build_ext命令现在接受一个
-j
选项以启用扩展模块的并行构建。bpo-22448: 改进取消的定时器句柄清理以防止无限制的内存使用。补丁由Joshua Moore-Oliva提供。
bpo-22427: 当在生成器中使用with语句时,TemporaryDirectory不再尝试两次清理。
bpo-22362: 禁止在正则表达式中使用超出0-0o377范围的模糊八进制转义。
bpo-20912: 现在添加到ZIP文件的目录具有正确的Unix和MS-DOS目录属性。
bpo-21866: 如果allowZip64为false,ZipFile.close()不再写入ZIP64中央目录记录。
bpo-22278: 修复了urljoin在处理相对URL时的问题,这是在提交issue22118的更改后观察到的回归。
bpo-22415: 修复了re模块中GROUPREF_EXISTS操作码的调试输出。移除了调试输出中的尾随空格。
bpo-22423: 线程中的未处理异常不再导致当sys.stderr为None时未处理的AttributeError。
bpo-21332: 确保subprocess.Popen()中的
bufsize=1
选择行缓冲,而不是块缓冲。由Akira Li提供补丁。bpo-21091: 修复API错误:email.message.EmailMessage.is_attachment现在是一个方法。
bpo-21079: 修复email.message.EmailMessage.is_attachment以在头部既有参数又有值时返回正确的结果。
bpo-22247: 将NNTPError添加到nntplib.__all__。
bpo-22366: urllib.request.urlopen将接受一个上下文对象(SSLContext)作为参数,该对象将用于HTTPS连接。由Alex Gaynor提供补丁。
bpo-4180: 当过滤器被修改时,警告注册表现在被重置。
bpo-22419: 限制 wsgiref 服务器中传入 HTTP 请求的长度为 65536 字节,对于超出此长度的请求发送 414 错误代码。由 Devin Cook 提供补丁。
http.cookies 中的宽松 cookie 解析在与某些网页浏览器的非标准 cookie 处理结合使用时可能成为安全问题。由 Sergey Bobrov 报告。
bpo-20537: 日志记录方法现在接受异常实例以及布尔值或异常元组。感谢 Yury Selivanov 提供的补丁。
bpo-22384: 当使用 pythonw.exe 运行时,Tkinter 回调中的异常不再导致程序崩溃。
bpo-22168: 在 OS X 上使用非默认 Canvas 时防止 turtle 的 AttributeError。
bpo-21147: 如果请求包含空字符,sqlite3 现在会引发异常而不是截断它。基于 Victor Stinner 的补丁。
bpo-13968: glob 模块现在支持使用
**
模式在子目录中进行递归搜索。bpo-21951: 修复了在 AIX 上当使用空字符串或元组参数调用 Tcl 命令时 Tkinter 的崩溃问题。
bpo-21951: 如果内存分配失败,Tkinter 现在更可能引发 MemoryError 而不是崩溃。
bpo-22338: 修复了 json 模块在内存分配失败时的崩溃问题。
bpo-12410: imaplib.IMAP4 现在支持上下文管理协议。原始由 Tarek Ziadé 提供补丁。
bpo-21270: 我们现在在 mock.call 对象中覆盖元组方法,以便它们可以用作普通的调用属性。
bpo-16662: 当
load_tests()
存在于包的__init__.py
中时,现在无条件运行。TestLoader.loadTestsFromModule()
仍然接受 use_load_tests,但它已被弃用并被忽略。新增并文档化了一个仅关键字的属性pattern
。由 Robert Collins 提供补丁,Barry Warsaw 进行了调整。bpo-22226: Treeview.heading() 的结果中 "status" 键的第一个字母不再被剥离。
bpo-19524: 修复了在接收到无效响应时HTTP连接的资源泄漏问题。由Martin Panter提供补丁。
bpo-20421: 向SSL套接字添加了.version()方法,暴露实际使用的协议版本。
bpo-19546: configparser异常不再暴露实现细节。移除了链式KeyErrors,使得跟踪回溯更加清晰。由Claudiu Popa提供补丁。
bpo-22051: turtledemo不再重新加载示例来重新运行它们。变量初始化和GUI设置应该在main()中完成,每次运行演示时都会调用main(),但不会在导入时调用。
bpo-21933: Turtledemo用户可以通过菜单选择或控制(command) '-'或'+'或控制鼠标滚轮来更改代码字体大小。原始由Lita Cho提供补丁。
bpo-21597: 现在可以通过鼠标抓取和拖动turtledemo文本窗格和绘图画布之间的分隔符。可以加宽代码文本窗格以便轻松查看或复制文本的完整宽度。在小屏幕上可以加宽画布。原始由Jan Kanis和Lita Cho提供补丁。
bpo-18132: 当窗口缩小时,Turtledemo按钮不再消失。原始由Jan Kanis和Lita Cho提供补丁。
bpo-22043: time.monotonic()现在总是可用。
threading.Lock.acquire()
、``threading.RLock.acquire()``和套接字操作现在在使用超时时使用单调时钟,而不是系统时钟。bpo-21527: 向ThreadPoolExecutor添加了默认的工作线程数,等于CPU数量的5倍。由Claudiu Popa提供补丁。
bpo-22216: smtplib现在在退出后更完全地重置其状态。之前行为的最明显后果是在connect/starttls/quit/connect/starttls序列中的STARTTLS失败。
bpo-22098: ctypes的BigEndianStructure和LittleEndianStructure现在定义了一个空的__slots__,这样子类不会总是得到一个实例字典。由Claudiu Popa提供补丁。
bpo-22185: 修复了threading.Condition.wait()中因不持有锁而修改等待队列导致的偶尔出现的RuntimeError。由Doug Zongker提供补丁。
bpo-22287: 在UNIX上,_PyTime_gettimeofday()现在使用clock_gettime(CLOCK_REALTIME)(如果可用)。作为副作用,Python现在在Solaris和Linux上(仅glibc版本低于2.17时)依赖于librt库。
bpo-22182: 在distutils.file_util.move_file中正确使用e.args来解包异常。由Claudiu Popa提供补丁。
webbrowser模块现在使用subprocess的start_new_session=True,而不是潜在风险的preexec_fn=os.setsid调用。
bpo-22042: 如果文件描述符处于阻塞模式,signal.set_wakeup_fd(fd)现在会引发异常。
bpo-16808: inspect.stack()现在返回一个命名元组而不是元组。由Daniel Shahaf提供补丁。
bpo-22236: 修复了在NoDefaultRoot模式下的Tkinter图像复制操作。
bpo-2527: 向timeit函数添加了一个 globals 参数,以便覆盖执行定时代码的全局命名空间。补丁由Ben Roberts提供。
bpo-22118: 将urllib.parse切换到使用RFC 3986语义解析相对URL,而不是RFCs 1808和2396。补丁由Demian Brecht提供。
bpo-21549: 向TarFile.list()添加了“members”参数。
bpo-19628: 允许通过-r选项指定compileall的递归深度。
bpo-15696: 为Windows上的mmap对象添加了__sizeof__实现。
bpo-22068: 避免了Tkinter中Variables和Fonts的引用循环。
bpo-22165: SimpleHTTPRequestHandler现在支持不可解码的文件名。
bpo-15381: 优化了io.BytesIO中的行读取。
bpo-8797: 在基本认证失败时立即引发HTTPError。初始由Sam Bull提供补丁。
bpo-20729: 恢复了mailbox模块中lazy iterkeys()/itervalues()/iteritems()的使用。
bpo-21448: 更改了FeedParser的feed()方法,以避免在解析长行时的*O*(n2)行为。原始由Raymond Hettinger提供补丁。
bpo-22184: 当用户忘记必需的参数时,functools LRU Cache装饰器工厂现在会提供更早更清晰的错误信息。
bpo-17923: 在AIX上,以斜杠结尾的glob()模式不再匹配非目录。基于Delhallt的补丁。
bpo-21725: 在smtpd中添加了对RFC 6531(SMTPUTF8)的支持。
bpo-22176: 将ctypes模块的libffi更新到v3.1。此版本增加了对Linux AArch64和POWERPC ELF ABIv2小端架构的支持。
bpo-5411: 在shutil模块中添加了对"xztar"格式的支持。
bpo-21121: 不再强制第三方C扩展使用-Werror=declaration-after-statement构建。
bpo-21975: 修复了使用未初始化的sqlite3.Row(特别是在解pickle pickled sqlite3.Row时)时的崩溃问题。sqlite3.Row现在在__new__()方法中初始化。
bpo-20170: 将posixmodule转换为使用Argument Clinic。
bpo-21539: 向
Pathlib.mkdir()
添加了一个 exists_ok 参数,以模拟mkdir -p
和``os.makedirs()``的功能。当为真时,忽略FileExistsErrors
。由Berker Peksag提供补丁。bpo-22127: 在socket模块中绕过IDNA处理纯ASCII主机名(特别是数字IP)。
bpo-21047: 将HTMLParser的 convert_charrefs 参数的默认值设置为True。由Berker Peksag提供补丁。
在 html.entities 包中增加 __all__ 变量。
bpo-15114: HTMLParser的严格模式和参数,HTMLParser.error,以及HTMLParserError异常已被移除。
bpo-22085: 在Tkinter中放弃了对Tk 8.3的支持。
bpo-21580: 现在Tkinter正确处理传递给Tk的字节参数。特别是这允许从二进制数据初始化图像。
bpo-22003: 当从字节对象初始化时,io.BytesIO()现在延迟复制直到它被修改,从而在某些用例中提高了性能和内存使用。由David Wilson提供补丁。
bpo-22018: 在Windows上,signal.set_wakeup_fd()现在也支持套接字。一个副作用是Python依赖于WinSock库。
bpo-22054: 添加 os.get_blocking() 和 os.set_blocking() 函数以获取和设置文件描述符的阻塞模式(如果设置了 O_NONBLOCK 标志则为 False,否则为 True)。这些函数在 Windows 上不可用。
bpo-17172: 即使在通过子进程运行时,也使 turtledemo 在 OS X 上作为活动状态启动。补丁由 Lita Cho 提供。
bpo-21704: 当信号量不可用时,修复 _multiprocessing 的构建错误。由 Arfrever Frehtes Taifersar Arahesis 提供补丁。
bpo-20173: 将 sha1、sha256、sha512 和 md5 转换为 ArgumentClinic。由 Vajrasky Kok 提供补丁。
修复 Windows 64 位上的 repr(_socket.socket):不要在关闭的套接字上因 OverflowError 而失败。repr(socket.socket) 已经工作良好。
bpo-22033: 大多数 Python 实现的类的 repr 现在包含实际的类名而不是硬编码的名称。
bpo-21947: dis 模块现在可以根据 generator-iterator 对象的 gi_code 属性对其进行反汇编。由 Clement Rouault 提供补丁。
bpo-16133: asynchat.async_chat.handle_read() 方法现在忽略 BlockingIOError 异常。
bpo-22044: 修复了 call_tzinfo_method 中的过早 DECREF。由 Tom Flanagan 提供补丁。
bpo-19884: readline:如果标准输出不是终端,则禁用元修饰键,以避免将 ANSI 序列
"\033[1034h"
写入标准输出。此序列用于某些终端(例如:TERM=xterm-256color)以启用 8 位字符支持。bpo-4350: 移除了许多长期过时且不工作的 Tkinter 方法。
bpo-6167: Scrollbar.activate() 现在在未指定参数时返回活动元素的名称。Scrollbar.set() 现在总是只接受 2 个参数。
bpo-15275: 清理并加速 ntpath 模块。
bpo-21888: plistlib 的 load() 和 loads() 现在在指定 fmt 参数时可以工作。
bpo-22032: 现在总是使用 __qualname__ 而不是 __name__ 来格式化 Python 实现的类的完全限定类名。
bpo-22031: 当包含形如" at 0x..."的id时,Reprs现在总是使用带有"0x"前缀的十六进制格式。
bpo-22018: signal.set_wakeup_fd()现在在
fstat()
失败时引发OSError而不是ValueError。bpo-21044: tarfile.open()现在可以处理具有整数'name'属性的fileobj。基于Antoine Pietri的补丁。
bpo-21966: 当运行代码模块时,尊重-q命令行选项。
bpo-19076: 不再向self.error()传递冗余的'file'参数。
bpo-16382: 改进了warnings.warn()对于错误类别的异常消息。初始由Phil Elson提供补丁。
bpo-21932: os.read()现在使用
Py_ssize_t()
类型而不是 int 来支持一次性读取超过2GB的数据。在Windows上,大小被截断为INT_MAX。如同任何对os.read()的调用,操作系统可能读取的字节数少于请求的字节数。bpo-21942: 修复了Windows上pydoc服务器模式下查看源文件的问题。
bpo-11259: asynchat.async_chat().set_terminator()现在如果接收到的字节数为负值时会引发ValueError。
bpo-12523: asynchat.async_chat.push()现在如果没有接收到字节字符串时会引发TypeError。
bpo-21707: 向ModuleFinder.replace_paths_in_code()添加了缺失的kwonlyargcount参数。
bpo-20639: 调用Path.with_suffix('')允许再次移除后缀。由July Tikhonov提供补丁。
bpo-21714: 禁止使用Path.with_name()构造无效路径。原始由Antony Lee提供补丁。
bpo-15014: 向smtplib添加了'auth'方法以使实现认证机制更简单,并在login方法内部使用它。
bpo-21151: 修复了当向SetValueEx传递
None
作为REG_BINARY
值时winreg模块中的段错误。由John Ehresman提供补丁。bpo-21090: io.FileIO.readall()不再忽略I/O错误。在此之前,如果至少第一次C调用read()成功,它会忽略I/O错误。
bpo-5800: wsgiref.headers.Headers 的 headers 参数现在是可选的。初始由 Pablo Torres Navarrete 和 SilentGhost 提供补丁。
bpo-21781: ssl.RAND_add() 现在支持超过 2 GB 的字符串。
bpo-21679: 防止在 open() 过程中进行多余的 fstat() 调用。由 Bohuslav Kabrda 提供补丁。
bpo-21863: cProfile 现在除了显示 C 扩展函数的名称外,还会显示其模块名。
bpo-11453: asyncore: 当未关闭的 file_wrapper 对象被销毁时发出 ResourceWarning。现在析构函数会在需要时关闭文件。close() 方法现在可以被调用两次:第二次调用不做任何操作。
bpo-21858: 在 sqlite3 模块中更好地处理 Python 异常。
bpo-21476: 确保 email.parser.BytesParser TextIOWrapper 在解析后被丢弃,这样输入文件不会意外关闭。
bpo-20295: imghdr 现在可以识别 OpenEXR 格式的图像。
bpo-21729: 在 dbm.dumb 模块中使用 "with" 语句确保文件关闭。补丁由 Claudiu Popa 提供。
bpo-21491: socketserver: 修复子进程回收中的一个竞争条件。
bpo-21719: 在 Windows 上为 os.stat_result 添加了
st_file_attributes
字段。bpo-21832: 要求命名元组的输入必须是确切的字符串。
bpo-21722: distutils 的 "upload" 命令现在在上传失败时以非零返回码退出。由 Martin Dengler 提供补丁。
bpo-21723: asyncio.Queue: 支持任何类型的数字(例如浮点数)作为最大大小。补丁由 Vajrasky Kok 编写。
bpo-21711: 现在已从 site 模块中移除了对 "site-python" 目录的支持(已在 3.4 中弃用)。
bpo-17552: 新的 socket.sendfile() 方法允许通过 UNIX 上的高性能 os.sendfile() 发送文件。由 Giampaolo Rodola' 提供补丁。
bpo-18039: dbm.dump.open() 现在当标志值为 'n' 时总是创建一个新的数据库。由 Claudiu Popa 提供补丁。
bpo-21326: 向asyncio.BaseEventLoop添加了一个新的is_closed()方法。如果事件循环已关闭,asyncio.BaseEventLoop的run_forever()和run_until_complete()方法现在会抛出异常。
bpo-21766: 通过在检查路径是否为CGI脚本之前对路径进行URL解码,防止了CGIHTTPServer中的安全漏洞。
bpo-21310: 修复了在open()失败时可能发生的资源泄漏问题。
bpo-21256: 在模拟函数调用中,关键字参数的打印输出现在按确定性顺序进行。这将有助于编写更好的文档测试。
bpo-21677: 修复了在io close()方法中链接非规范化异常的问题。
bpo-11709: 修复了pydoc.help函数在sys.stdin不是有效文件时不失败的问题。
bpo-21515: tempfile.TemporaryFile现在在可用时使用os.O_TMPFILE标志。
bpo-13223: 修复了pydoc.writedoc,使得在示例代码中使用'self'的方法的HTML文档能够正确生成。
bpo-21463: 在urllib.request中,修复了FTP缓存的修剪问题。
bpo-21618: subprocess模块现在能够关闭调用进程继承的打开文件描述符,即使这些描述符已经高于POSIX资源限制所允许的值。在具有正常工作的/proc/self/fd或/dev/fd接口的系统上,现在忽略最大值并关闭所有文件描述符。
bpo-20383: 引入了importlib.util.module_from_spec()作为创建新模块的首选方式。
bpo-21552: 修复了在64位平台上,tkinter模块中过长的字符串长度可能导致整数溢出的问题。
bpo-14315: zipfile模块现在会忽略中央目录中太短而无法解析的额外字段,而不是让struct.unpack错误冒泡,因为这种“坏数据”在现实世界的许多zip文件中出现,并被其他zip工具忽略。
bpo-13742: 向heapq.merge()添加了“key”和“reverse”参数。(补丁的第一版由Simon Sapin贡献。)
bpo-21402: 当未设置默认根窗口时,tkinter.ttk现在可以正常工作。
bpo-3015: _tkinter.create() now creates tkapp object with wantobject=1 by default.
bpo-10203: sqlite3.Row 现在真正支持序列协议,特别是它支持 reverse() 和负索引。原始补丁由 Claudiu Popa 提供。
bpo-18807: 如果为 venv 指定了复制(无符号链接),则现在通过复制而非符号链接创建 python 解释器别名(python, python3)。
bpo-20197: 在 imghdr 模块中添加了对 WebP 图像类型的支持。由 Fabrice Aneche 和 Claudiu Popa 提供补丁。
bpo-21513: 加速了 IP 地址(IPv4Address, IPv6Address)的一些属性,如 .is_private 或 .is_multicast。
bpo-21137: 通过显示“锁定”或“未锁定”状态改进了 threading.Lock() 及其变体的 repr。补丁由 Berker Peksag 提供。
bpo-21538: plistlib 模块现在支持在引用或偏移大小不是二的幂时加载二进制 plist 文件。
bpo-21455: 为 socket.listen() 添加了一个默认的 backlog。
bpo-21525: 大多数接受元组的 Tkinter 方法现在也接受列表。
bpo-22166: 在新内部 _codecs._forget_codec 辅助函数的帮助下,test_codecs 现在清除编码缓存以避免出现引用泄露。
bpo-22236: Tkinter 测试现在不再重用默认的根窗口。为每个测试类创建新的根窗口。
bpo-20826: 优化 ipaddress.collapse_addresses()。
bpo-21487: 优化 ipaddress.summarize_address_range() 和 ipaddress.{IPv4Network,IPv6Network}.subnets()。
bpo-21486: 优化 ipaddress.IPv4Network 和 ipaddress.IPv6Network 中网络掩码的解析。
bpo-13916: 禁止了非 UTF-* 编码的 surrogatepass 错误处理器。
bpo-20998: 修复了忽略大小写的重复单字符模式的 re.fullmatch()。原始由 Matthew Barnett 提供补丁。
bpo-21075: 如果指定了二进制模式,fileinput.FileInput 现在可以从标准流中读取字节。由 Sam Kimbrel 提供补丁。
bpo-19775: 向 pathlib Path 对象添加 samefile() 方法。初始由 Vajrasky Kok 提供补丁。
bpo-21226: 在 PyImport_ExecCodeModuleObject(及其相关函数)中正确设置模块。
bpo-21398: 修复 pydoc 分页器中的一个 unicode 错误,当文档包含无法编码为标准输出编码的字符时。
bpo-16531: ipaddress.IPv4Network 和 ipaddress.IPv6Network 现在接受一个(地址,网络掩码)元组参数,以便从现有地址轻松构建网络对象。
bpo-21156: importlib.abc.InspectLoader.source_to_code() 现在是一个静态方法。
bpo-21424: 简化和优化了 heapq.nlargest() 和 nsmallest(),以减少元组比较的次数。
bpo-21396: 修复 TextIOWrapper(..., write_through=True) 不强制底层二进制流 flush() 的问题。由 akira 提供补丁。
bpo-18314: 在 Windows 上,Unlink 现在可以移除 junctions。由 Kim Gräsman 提供补丁。
bpo-21088: 修复 curses.window.addch() 在 3.4.0 版本中的回归问题。在迁移到 Argument Clinic 时,前两个参数被反转了。
bpo-21407: _decimal: 模块现在支持函数签名。
bpo-10650: 从 Python 版本的 Decimal.quantize() 方法中移除了非标准的 'watchexp' 参数。它从未在 C 版本中出现过。
bpo-21469: 通过检查确保 robots.txt 已被读取或不存在,在 can_fetch() 返回 True 之前,减少了 robotparser 中误报的风险。
bpo-19414: 让 OrderedDict 将被删除的链接标记为不可用。如果在迭代过程中链接被删除,这会提前失败。
bpo-21421: 向 MappingViews ABC 添加 __slots__。由 Josh Rosenberg 提供补丁。
bpo-21101: 在 collections.Counter() 的 C 加速代码中消除双重哈希。
bpo-21321: itertools.islice() 现在在切片耗尽时会释放对源迭代器的引用。由 Anton Afanasyev 提供补丁。
bpo-21057: TextIOWrapper 现在允许底层的二进制流的 read() 或 read1() 方法返回任意的 bytes-like 对象(如 memoryview)。由 Nikolaus Rath 提供补丁。
bpo-20951: 在非阻塞套接字上,如果操作会阻塞,SSLSocket.send() 现在会引发 SSLWantReadError 或 SSLWantWriteError。之前,它会返回 0。由 Nikolaus Rath 提供补丁。
bpo-13248: 移除了之前弃用的 asyncore.dispatcher __getattr__ 廉价继承 hack。
bpo-9815: assertRaises 现在尝试清除异常回溯中对局部变量的引用。
bpo-19940: ssl.cert_time_to_seconds() 现在将给定的时间字符串解释为 UTC 时区(如 RFC 5280 所指定),而不是本地时区。
bpo-13204: 调用 sys.flags.__new__ 会崩溃解释器,现在它会引发 TypeError。
bpo-19385: 对已关闭的 dbm.dumb 数据库的操作现在总是引发相同的异常。
bpo-21207: 检测 os.urandom 缓存的 fd 是否被关闭或替换,并重新打开它。
bpo-21291: subprocess 的 Popen.wait() 现在是线程安全的,因此多个线程可以同时调用 Popen 实例的 wait() 或 poll() 而不会丢失 Popen.returncode 值。
bpo-21127: Path 对象现在可以从 str 子类实例(如
numpy.str_
)实例化。bpo-15002: urllib.response 对象使用 _TemporaryFileWrapper(和 _TemporaryFileCloser)设施。提供了一种更好的处理文件描述符关闭的方法。由 Christian Theune 提供补丁。
bpo-12220: mindom 现在会引发一个自定义的 ValueError,指示它不支持 URI 中的空格,而不是让 'split' ValueError 冒泡。
bpo-21068: ssl.PROTOCOL* 常量现在是枚举成员。
bpo-21276: posixmodule: 不要在 KFreeBSD 和 Hurd 上定义 USE_XATTRS。
bpo-21262: Mock 的新方法 assert_not_called。如果 mock 被调用过,它会引发 AssertionError。
bpo-21238: New keyword argument
unsafe
to Mock. It raisesAttributeError
incase of an attribute startswith assert or assret.bpo-20896: ssl.get_server_certificate() 现在使用 PROTOCOL_SSLv23,而不是 PROTOCOL_SSLv3,以获得最大的兼容性。
bpo-21239: 当同一个名字被多次 patch 时,patch.stopall() 没有确定性地工作。
bpo-21203: 更新了 fileConfig 和 dictConfig 以消除不一致。感谢 Jure Koren 的补丁。
bpo-21222: 现在,将 name 关键字参数传递给 mock.create_autospec 可以工作了。
bpo-21197: 在 64 位非 OS X POSIX 上,venvs 中添加了 lib64 -> lib 的符号链接。
bpo-17498: 一些 SMTP 服务器在特定错误后断开连接,违反了严格的 RFC 一致性。smtplib 现在返回错误代码,并在发出下一个命令时延迟引发 SMTPServerDisconnected 错误,而不是在我们发出后续 RSET 时丢失错误代码。
bpo-17826: 现在,在由 create_autospec 创建的 mock 函数上设置可迭代的 side_effect 可以工作了。由 Kushal Das 提供的补丁。
bpo-7776: 修复了在使用 http.client.HTTPConnection.set_tunnel() 时的
Host:
标头和重新连接。由 Nikolaus Rath 提供的补丁。bpo-20968: unittest.mock.MagicMock 现在支持除法。由 Johannes Baiter 提供的补丁。
bpo-21529: Fix arbitrary memory access in JSONDecoder.raw_decode with a negative second parameter. Bug reported by Guido Vranken. (See also: CVE-2014-4616)
bpo-21169: getpass 现在通过使用 replace 错误处理程序重新编码,处理输入流编码无法编码的非 ASCII 字符。
bpo-21171: 修复了 rot13 编解码器未记录的过滤器 API。由 Berker Peksag 提供的补丁。
bpo-20539: 改进了 math.factorial 对于大正数输入的错误消息,并更改了大负数输入的异常类型(OverflowError -> ValueError)。
bpo-21172: isinstance 检查从 dict 放宽到 collections.Mapping。
bpo-21155: asyncio.EventLoop.create_unix_server() 现在如果同时指定了 path 和 sock 会抛出 ValueError。
bpo-21136: 避免了由于幂和其他操作导致的 Fractions 不必要的规范化。由 Raymond Hettinger 提供补丁。
bpo-17621: 引入了 importlib.util.LazyLoader。
bpo-21076: signal 模块的常量被转换为枚举。由 Giampaolo Rodola' 提供补丁。
bpo-20636: 改进了 Tkinter 小部件的 repr。
bpo-19505: OrderedDict 的 items、keys 和 values 视图现在支持使用 reversed() 进行反向迭代。
bpo-21149: 改进了解释器关闭期间日志清理的线程安全性。感谢 Devin Jeanpierre 提供的补丁。
bpo-21058: 修复了
tempfile.NamedTemporaryFile()
中的文件描述符泄漏问题,如果io.open()
失败则关闭文件描述符。bpo-21200: 当 __spec__ 缺失时,从 pkgutil.get_loader() 返回 None。
bpo-21013: 增强 ssl.create_default_context() 用于服务器端套接字时的默认安全性。
bpo-20145:
assertRaisesRegex
和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: Include the broadcast address in the usuable hosts for IPv6 in ipaddress.
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: Fix pystone micro-benchmark: use floor division instead of true division to benchmark integers instead of floating point numbers. Set pystone version to 1.2. Patch written by Lennart Regebro.
bpo-21605: 为Tkinter图像添加了测试。
bpo-21493: 为ntpath.expanduser()添加了测试。原始由Claudiu Popa提供补丁。
bpo-19925: 为spwd模块添加了测试。原始由Vajrasky Kok提供补丁。
bpo-21522: 为Listbox.itemconfigure()、PanedWindow.paneconfigure()和Menu.entryconfigure()添加了Tkinter测试。
bpo-17756: 修复从安装位置运行时的test_code测试。
bpo-17752: 修复从安装位置运行时的distutils测试。
bpo-18604: 合并了对GUI可用性的检查。现在所有平台在请求GUI资源时至少会检查是否可以实例化Tk。
bpo-21275: 修复 KFreeBSD 上的一个套接字测试。
bpo-21223: 当某些扩展作为内置模块编译时传入 test_site/test_startup_imports。
bpo-20635: 添加了针对 Tk geometry 管理器的测试。
增加freeze包的测试用例。
bpo-20743: 修复了 test_tcl 中的一个引用泄漏。
bpo-21097: 将 test_namespace_pkgs 移至 test_importlib.
bpo-21503: 在 test_importlib 中一致地使用 test_both()。
bpo-20939: 避免由于新增从 http://www.python.org/ 到 https://www.python.org 的重定向导致的网络测试失败:改用 http://www.example.com。
bpo-20668: asyncio 测试不再依赖 tests.txt 文件。 (由 Vajrasky Kok 编写补丁)
bpo-21093: 在 OS X 上防止当 libz 的副本存在于 $HOME/lib 或 /usr/local/lib 中时 ctypes test_macholib 的失败。
bpo-22770: 在 OS X 上防止当运行图形用户界面测试时的某些 Tk 段错误。
bpo-23211: 在某些 OS X 10.6 系统上绕过 test_logging 失败
bpo-23345: 防止较大 OpenSSL 补丁级别值 (如 0.9.8zc) 导致的 test_ssl 失败。
工具/示例¶
bpo-22314: 现在当设置了 LINES 环境变量时 pydoc 将会可用。
bpo-22615: Argument Clinic 现在支持 int 转换器的 "type" 参数。 这允许将 int 转换器用于枚举和 typedef。
bpo-20076: makelocalealias.py 脚本将不再忽略 UTF-8 映射。
bpo-20079: makelocalealias.py 脚本现在能够解析 glibc 源代码中的 SUPPORTED 文件并支持针对源代码路径的命令行选项。
bpo-22201: zipfile 模块的命令行界面现在能正确地提取带有目录项的 ZIP 文件。 由 Ryan Wilson 编写补丁。
bpo-22120: 对于使用无符号整数返回转换器的函数,现在 Argument Clinic 会在所生成的代码中为与 -1 的比较生成到该类型的强制转换。 (这将抑制一个编译警告。)
bpo-18974: Tools/scripts/diff.py 现在将使用 argparse 而不是 optparse。
bpo-21906: 让 Tools/scripts/md5sum.py 适用于 Python 3。 由 Zachary Ware 编写补丁。
bpo-21629: 修复 Argument Clinic 的 "--converters" 特性。
为2to3添加
yield from
的支持。为 2to3 添加对 PEP 465 矩阵乘法运算符的支持。
bpo-16047: 修正冻结中的模块异常列表和 __file__ 处理。 由 Meador Inge 编写补丁。
bpo-11824: 考虑冻结 ABI 标签。 由 Meador Inge 编写补丁。
bpo-20535: PYTHONWARNING 不再影响 run_tests.py 脚本。 由 Arfrever Frehtes Taifersar Arahesis 编写补丁。
Windows¶
bpo-23260: 更新 Windows 安装器
捆绑的 Tcl/Tk 版本已被更新至 8.6.3。 这项改变最显示的结果是当在 Windows Vista 或更新版本上运行时增加了新的原生文件对话框。 请参阅 Tcl/Tk 的 TIP 432 了解详情。 此外,该 Tcl/Tk 版本还包括了对 Windows 10 的支持。
bpo-17896: 现在 Windows 构建脚本将预期外部库源代码位于
PCbuild\..\externals
而不是PCbuild\..\..
。bpo-17717: 现在 Windows 构建脚本将使用来自 svn.python.org的 NASM 副本来构建 OpenSSL。
bpo-21907: 改进了供构建 Python 的处理脚本。
bpo-22644: 捆绑的 OpenSSL 版本已更新到 1.0.1j。
bpo-10747: 在 Windows 开始菜单中使用带版本号的标签。 由 Olive Kilburn 编写补丁。
bpo-22980: 带有版本号和平台标记的 .pyd 文件 (例如 ".cp35-win32.pyd") 现在将优先于不带标记的文件被加载。
(有关旧版本的信息,请参阅HISTORY文件。)