更新日志¶
Python 3.14.3 final¶
Release date: 2026-02-03
Windows¶
gh-128067: 修复 Windows 上的 PyREPL 中不带末尾换行符的输出会被下一个提示符覆盖的程序缺陷。
工具/示例¶
gh-142095: 在可能的情况下让 gdb 'py-bt' 命令使用来自线程局部状态的帧。 由 Sam Gross 和 Victor Stinner 编写补丁。
测试¶
gh-144415: The Android testbed now distinguishes between stdout/stderr messages which were triggered by a newline, and those triggered by a manual call to
flush. This fixes logging of progress indicators and similar content.gh-143460: 如果栈大小没有限制则将跳过依赖于无限递归的测试。
gh-65784: 增加对 regrtests 中参数化资源
wantobjects的支持,这将允许运行 Tkinter 测试时使用指定的tkinter.wantobjects值,例如-u wantobjects=0。gh-143553: 增加对参数化资源的支持,如
-u xpickle=2.7。gh-142836: 在
test_pdb.test_script_target_anonymous_pipe中支持 Solaris。bpo-31391: 将 test_xpickle 从 Python 2 前向移植到 Python 3 并将资源添加回测试的命令行。
安全性¶
gh-144125:
BytesGenerator现在将拒绝序列化(写入)不安全折叠或分隔的标头;参见verify_generated_headers。(由 Bas Bloemsaat 和 Petr Viktorin 在 gh-121650 中贡献。)gh-143935: 修复了使用现代邮件策略扁平化电子邮件消息时注释折叠中的程序缺陷。由很长的不可折叠字符序列组成的注释可能会触发强制换行,而该换行会省略续行所需的前导空格,导致注释的剩余部分被解释为新的标头字段。这使得通过精心构造的输入实现标头注入成为可能。
gh-143925: 拒绝
data:URL 媒体类型中的控制字符。gh-143919: 拒绝
http.cookies.Morsel字段和值中的控制字符。gh-143916: 拒绝 wsgiref.headers.Headers 字段、值和参数之内的 C0 控制字符。
库¶
gh-144380: Improve performance of
io.BufferedReaderline iteration by ~49%.gh-144100: 修复在
argtypes中使用已弃用的POINTER(str)类型时 ctypes 中的崩溃问题。当指针目标类型未解析时,ctypes 现在会引发正确的 Python 异常而不是中止程序。gh-144050: 修正纯 Python 实现中的
stat.filemode()以避免将无效的模式值误分类为块设备。gh-144023: 修复 posix 函数在附带 follow_symlinks 形参使用时文件描述符 0 的验证问题。
gh-143999: 修复
inspect.getgeneratorstate()和inspect.getcoroutinestate()对以types.coroutine()包装的生成器处于挂起状态时可能执行失败的问题。gh-143831: 从带有闭包的标注作用域创建的
annotationlib.ForwardRef对象现在可哈希。此前,对此类对象进行哈希会抛出异常。由 Bartosz Sławecki 编写补丁。gh-143880: 修复 free threading 构建版本中
functools.partial()的数据竞争问题。gh-143706: 修复
multiprocessingforkserver 以便在预加载__main__之前正确设置sys.argv。此前,forkserver 子进程中在主模块导入期间sys.argv是空的。这修复了 3.13.8 和 3.14.1 中引入的回归问题。由 Aaron Wieczorek 根本定位,由 Thomas Watson 提供测试,感谢!gh-143638: 禁止 C 实现中
pickle.Pickler和pickle.Unpickler方法的重入调用。此前,这可能会导致崩溃或数据损坏,现在对同一对象的方法进行并发调用将引发RuntimeError。gh-78724: 当用户尝试调用半初始化的
Struct对象(例如由Struct.__new__(Struct)创建的对象)的方法时引发RuntimeError。由 Sergey B Kirpichev 编写补丁。gh-143196: 修复由未文档化函数
json.encoder.c_make_encoder()返回的内部编码器对象在附带非零第二个参数 (_current_indent_level) 调用时的崩溃问题。gh-143191: 如果栈大小过小,
_thread.stack_size()现在将引发ValueError。由 Victor Stinner 编写补丁。gh-143547: 修复当钩子引发异常并更改
sys.unraisablehook()时的sys.unraisablehook():持有对旧钩子的强引用。由 Victor Stinner 编写补丁。gh-143517: 当求值以一个或多个空白字符后跟
*开头的字符串化星号标注时,annotationlib.get_annotations()不再引发SyntaxError。由 Bartosz Sławecki 编写补丁。gh-143378: 修复在
write()或writelines()期间并发修改BytesIO对象时的释放后使用崩溃问题。gh-143346: 修复当缩进包含制表符和空格混合时
plistlib._PlistWriter中 Base64 数据的错误换行问题。gh-143310:
tkinter: 修复在将 Pythonlist转换为 Tcl 对象时 (例如在设置 Tcl 变量时) 如果其被修改则会造成程序崩溃的问题。 由 Bénédikt Tran 编写补丁。gh-143309: 修复在非 Windows 平台上当给定一个在解析期间被修改的自定义环境映射时
os.execve()中的崩溃问题。由 Bénédikt Tran 编写补丁。gh-143308:
pickle: 修复在 pickle 期间自定义缓冲区回调并发修改PickleBuffer时的释放后使用崩溃问题。由 Bénédikt Tran 和 Aaron Wieczorek 编写补丁。gh-143249: 修复 Windows 重叠 I/O 在错误处理时可能的缓冲区泄漏问题。
gh-143241:
zoneinfo: 修复解析格式错误的 TZif 文件时ZoneInfo.from_file中的无限循环问题。由 Fatih Celik 编写补丁。gh-142830:
sqlite3: 修复在回调执行期间修改连接的回调时的释放后使用崩溃问题。由 Bénédikt Tran 编写补丁。gh-143200:
xml.etree.ElementTree: 修复当元素被并发修改时Element的__getitem__()和__setitem__()方法中的释放后使用崩溃问题。由 Bénédikt Tran 编写补丁。gh-142195: 更新
subprocess中的超时评估逻辑,使其兼容像 Shadow 这样时间完全按请求推进的确定性环境。gh-142164: 修复 ctypes 位域溢出错误消息以报告正确的偏移量和大小计算。
gh-143145: 修复 ctypes 在出错时使用多个输出参数构造结果时可能的引用泄漏问题。
gh-122431: 修正
readline.append_history_file()中的错误消息以指明nelements必须是非负数而不是正数。gh-143004: 修复当用户代码在更新期间修改 Counter 时
collections.Counter.update()中潜在的释放后使用问题。gh-143046:
asyncioREPL 在静默模式下 (-q) 将不再打印版权和版本消息。 由 Bartosz Sławecki 编写补丁。gh-140648:
asyncioREPL 现在遵守-I标志(隔离模式)。此前,即使设置了该标志,它也会加载并执行PYTHONSTARTUP。由 Bartosz Sławecki 贡献。gh-142991: 修复 FreeBSD divert(4) 套接字的 recvfrom() 和 sendto() 等套接字操作。
gh-143010: 修复
mailbox中的一个程序缺陷,外部事件的精确时机可能导致库打开一个现有文件而不是它期望创建的文件。gh-142881: 修复
atexit.unregister()的并发和重入调用问题。gh-112127: 修复在比较期间取消注册回调时
atexit.unregister()中可能的释放后使用问题。gh-142783: 修复 zoneinfo 中描述器 _weak_cache 的释放后使用问题。描述器作为 _weak_cache 可能在对象创建期间导致崩溃。此修复确保对描述器提供的对象进行正确的引用计数。
gh-142754: 为通过直接实例化
Element或Attr类创建的xml.dom.minidom元素和属性添加 ownerDocument 属性。请注意这种创建节点的方式不受支持;应改用像xml.dom.Document.documentElement()这样的创建器函数。gh-142784:
asyncioREPL 现在在交互式会话结束时正确关闭循环。此前,这可能会导致意外的警告。由 Bartosz Sławecki 贡献。gh-142555:
array: fix a crash ina[i] = vwhen converting i to an index viai.__index__ori.__float__mutates the array.gh-142594: 修复当底层缓冲区的
closed属性调用detach()时TextIOWrapper.close()中的崩溃问题。gh-142451:
hmac: 确保HMAC.block_size属性被HMAC.copy正确复制。由 Bénédikt Tran 编写补丁。gh-142495:
collections.defaultdict现在在从default_factory插入默认值时优先使用__setitem__()。这可以防止默认值覆盖在default_factory返回之前设置的值的竞争条件。gh-142651:
unittest.mock: 修复当 mock 从多个线程并发调用时Mock.call_count可能返回不准确值的线程安全问题。gh-142595: 在
decimal模块初始化期间增加类型检查以防止标准库损坏时的崩溃。由 Sergey B Kirpichev 编写补丁。gh-142556: 修复在
asyncio中执行最终化期间有任务被重新注册时导致的崩溃问题。 由 Kumar Aditya 编写补丁。gh-142517: 非
compat32的email策略现在可正确处理包含无法在其指定字符集中解码的字节的编码字的重新折叠。此前这会在折叠期间导致编码异常。gh-112527: 在
argparse中针对必需选项的帮助文本不再带有 " (default: None)" 扩展。gh-142346: 修复
argparse中当互斥组前面有位置参数或后面跟有其他可选参数或与其他可选参数混合时的用法格式化问题。gh-142315: Pdb 现在可以从进程替换中使用的匿名管道运行脚本。由 Bartosz Sławecki 编写补丁。
gh-142282: 修复
winreg.QueryValueEx()在竞争条件下意外读取垃圾缓冲区的问题。gh-68552:
MisplacedEnvelopeHeaderDefect和Missing header name缺陷现在可正确传递给FeedParser中policy的handle_defect方法。gh-142006: 修复
email.policy.default折叠算法中的一个程序缺陷,该缺陷在行恰好结束于 max_line_length 且后跟不可折叠 token 时会错误地产生双换行符。gh-105836: 修复
asyncio.run_coroutine_threadsafe()让底层已取消的 asyncio 任务继续运行的问题。gh-139262: Windows 上新的
PyREPL中某些按键可能被吞掉,特别是与 ALT 键一起使用时。由 Chris Eibl 修复。gh-79986: 为
email库增加对References和In-Reply-To标头的解析支持,将标头内容解析为消息 ID token 的列表。这可以防止它们被错误折叠。gh-136282: 增加通过映射协议访问创建节时对
UNNAMED_SECTION的支持。gh-109263: 从
multiprocessing中的 spawn 上下文启动进程时不再全局设置启动方法。gh-132715: 一旦发生失败,跳过在 marshal 期间写入对象。
IDLE¶
gh-143774: 更好地解释"格式 / 格式化段落"的操作。
文档¶
gh-140806: 增加
enum.bin()的文档。
核心与内置函数¶
gh-144307: 在解释器最终化时防止模块卸载中的引用泄漏问题。
gh-144194: 修复内存分配失败时 perf jitdump 初始化中的错误处理。
gh-144012: 在
BINARY_OP_EXTENT操作码中检查结果是否为NULL。gh-141805: 修复在移除具有相同哈希值的元素后、集合中仍包含具有相同哈希值的元素的情况下并发向
set中添加具有相同哈希值的对象时的崩溃问题。gh-143670: 修复
ga_repr_items_list函数中的崩溃问题。gh-143377: 修复异常格式不正确时
_interpreters.capture_exception()中的崩溃问题。由 Bénédikt Tran 编写补丁。gh-136924: REPL 中的交互式帮助模式不再错误地将文本输入作为 Python 代码进行语法高亮。由 Olga Matoula 贡献。
gh-143189: 修复当将非
str键插入拆分表字典时,如果该键与拆分表中现有键匹配但在字典中没有对应值时的崩溃问题。gh-143228: 修复在线程运行时切换性能分析或在守护线程活动期间进行解释器终结时 perf trampoline 中的释放后使用问题。此修复使用引用计数来确保在任何代码对象仍可能引用 trampoline 时不会释放它们。由 Pablo Galindo 编写补丁。
gh-142664: 修复当被引用对象的
__hash__方法修改该对象或视图时memoryview.__hash__中的释放后使用崩溃问题。由 Bénédikt Tran 编写补丁。gh-142557: 修复在格式化
%风格参数时bytearray被修改时 bytearray.__mod__ 中的释放后使用崩溃问题。由 Bénédikt Tran 编写补丁。gh-143195: 修复当分隔符的
__len__()修改原始对象时bytearray.hex()和memoryview.hex()中的释放后使用崩溃问题。由 Bénédikt Tran 编写补丁。gh-142975: 修复在 free threaded 构建版本中解冻垃圾回收器跟踪的所有对象后的崩溃问题。
gh-143135: 当
PYTHONINSPECT为0时将sys.flags.inspect设置为1。此前,在这种情况下它被设置为0。gh-143003: 修复当
__length_hint__()对非空迭代器返回 0 时bytearray.extend()中共享空缓冲区的溢出问题。gh-143006: 修复比较整数部分具有相同位数的负非整数
float和int时可能的断言错误。gh-143057: 当
tracemalloc未启用时避免在PyTraceMalloc_Track()和PyTraceMalloc_Untrack()中加锁。gh-142776: 修复 import.c 中的文件描述符泄漏问题。
gh-142829: 修复当自定义
__eq__方法通过set()修改上下文时contextvars.Context比较中的释放后使用崩溃问题。gh-142766: 当
generator.close()被调用时清除生成器的帧。gh-142737: 即使
io.open()丢失,回溯信息也将在回退模式下显示。此前,这会导致解释器崩溃。由 Bartosz Sławecki 编写补丁。gh-142554: 修复当
_pylong.int_divmod()没有精确返回长度为 2 的元组时divmod()中的崩溃问题。由 Bénédikt Tran 编写补丁。gh-142560: 通过将存储标记为已导出(这会导致重新分配尝试引发
BufferError)修复bytearray搜索类方法(find()、count()、index()、rindex()和rfind())中的释放后使用问题。对于contains()、split()和rsplit(),为此使用 buffer protocol。gh-142531: 修复自由线程 GC 性能回归问题。如果有很多未跟踪的元组,GC 会运行得太频繁,导致性能低下。修复方法是将未跟踪的元组包含在"长寿命"对象计数中。由于自由线程 GC 也必须扫描冻结对象,因此现在也包含了冻结对象的数量。
gh-142402: 修复构造
string.templatelib.Template时合并相邻字面量部分时的引用计数问题,防止被替换的字符串对象泄漏。gh-133932: 修复自由线程构建版本中清除持有标记整数的帧时的崩溃问题。
gh-142343: 修复 m68k 上由于不正确的汇编约束导致的 SIGILL 崩溃问题。
gh-100964: 修复已耗尽生成器帧中的引用循环问题。由 Savannah Ostrowski 编写补丁。
gh-137007: 修正一个在 JIT 编译期间会导致垃圾回收调试断言失败的程序缺陷。
C API¶
gh-142589: 修正解释器栈中对带标签整数的
PyUnstable_Object_IsUniqueReferencedTemporary()处理。gh-142571: 现在
PyUnstable_CopyPerfMapFile()会在刷新数据之前检查打开文件是否成功。
构建¶
Python 3.14.2 正式版¶
发布日期: 2025-12-05
安全性¶
gh-142145: 移除
xml.minidom节点 ID 缓存清理中的二次方增长行为。gh-119452: 修正
http.server模块中一个潜在的内存拒绝服务问题。 当一个恶意用户连接到 Windows 上的 CGI 服务器时,它可能导致分配任意大小的内存。 这会造成多种问题包括MemoryError、消耗交换空间、内存不足(OOM)杀死进程或容器,甚至系统崩溃。
库¶
gh-140797: 撤销对未写入文档的
re.Scanner类的修改。 捕获分组仍被允许以保持向下兼容,不过使用它们可能导致不正确的结果。 它们将在未来的 Python 版本中被禁用。gh-142206:
multiprocessing模块中的资源追踪器现在默认使用原始通信协议(与 Python 3.14.0 及以下版本相同)。这避免了在 Python 运行时升级 Python 的问题。(请注意,这种"原地"升级未经测试。)追踪器仍然与使用新协议的子进程兼容(即使用 Python 3.13.10、3.14.1 和 3.15 的子进程)。gh-142214: 修复 Python 3.14.1 中
dataclasses与标注相关的两个回归问题。如果使用了
slots=True且__init__方法没有__annotate__属性(可能是因为使用了init=False),现在不再引发异常。如果在
__init__方法上请求标注且其中一个字段在类标注中不存在,现在不再引发异常。这种情况可能发生在某些动态场景中。
由 Jelle Zijlstra 提供补丁。
核心与内置函数¶
库¶
Python 3.14.1 正式版¶
发布日期: 2025-12-02
Windows¶
gh-139810: 现在使用
py install 3[.x]-dev安装时将会选择最终版本和预发布版本。
工具/示例¶
gh-141692: 现在 iOS XCframework 的每个切片都包含一个
lib文件夹,其中包含指向 libpython dylib 的符号链接。 这允许为 iOS 编译二进制模块时使用动态库链接,而不是 Framework 链接。gh-141442: 现在 iOS testbed 可正确地处理包含空格的测试参数。
gh-140702: 现在 iOS testbed app 将把
GITHUB_ACTIONS环境变量暴露给被测试的 iOS app。gh-137484: 由
Tools/wasm/wasi将构建的 Python 放入以 build 加三个数值而非 "build" 命名的目录。gh-137248: 给
Tools/wasm/wasi增加--logdir选项用来指明将日志文件写到何处。gh-137243: 当直接从发布 tarball 中提取文件时让 Tools/wasm/wasi 在 /opt 中检测 WASI SDK 安装情况。
测试¶
安全性¶
gh-139700: 检测 zip64 中央目录记录末尾的一致性。 在没有字节数据被附加到 ZIP 文件时支持使用 "zip64 可扩展数据" 的记录。
gh-139283:
sqlite3: 正确处理Cursor.fetchmany可获取的最大行数并拒绝Cursor.arraysize使用负值。 由 Bénédikt Tran 编写补丁。gh-137836: 在
html.parser.HTMLParser中增加对“纯文本”元素, RAWTEXT 元素 "xmp", "iframe", "noembed" 和 "noframes",以及可选的 RAWTEXT 元素 "noscript" 的支持。gh-136063:
email.message: 确保旧式 HTTP 形参解析为线性复杂度。 由 Bénédikt Tran 编写补丁。gh-136065: 修复
os.path.expandvars()中的二次幂复杂度问题。gh-119451: 修正
http.client模块中一个潜在的内存拒绝服务问题。 当连接到一个恶意服务器时,它可能导致分配任意大小的内存。 这会造成多种问题包括MemoryError、消耗交换空间、内存不足(OOM)杀死进程或容器,甚至系统崩溃。gh-119342: 修正a potential memory denial of service in the
plistlib模块中一个潜在的内存拒绝服务问题。 当读取从不受信任的源接收的 Plist 文件时,它可能导致分配任意大小的内存。 这会造成多种问题包括MemoryError、消耗交换空间、内存不足(OOM)杀死进程或容器,甚至系统崩溃。
库¶
gh-74389: 当
subprocess.Popen实例使用的 stdin 被关闭时,现在此错误将被subprocess.Popen.communicate()忽略而不是让该类进入不稳定状态。gh-87512: 修正在 Windows 上当写入大量输入内容时
subprocess.Popen.communicate()的超时处理问题。 在之前版本中,在写入 stdin 时会忽略超时设置,导致在子进程未快速消费输入内容时此方法无限阻塞。 现在 stdin 写入将在后台线程中执行,以允许正确地应用超时设置。gh-141473: 当
subprocess.Popen.communicate()附带 input 和 timeout 被调用并且是在进程死亡之前TimeoutExpired异常引发之后再次被调用时,它将不再会被挂起。gh-141570: 支持让 file-like object 在颜色检测 (
_colorize.can_colorize()) 中从fileno()引发OSError。 这种情况会在sys.stdout被重定向时发生。gh-141659: 修复 AIX 上来自
_posixsubprocess的无效文件描述符错误。gh-141600: 修复 Void Linux 上的 musl 版本检测问题。
gh-141497:
ipaddress: 确保IPv4Network.hosts()和IPv6Network.hosts()等方法总是返回一个迭代器。gh-140938: 现在当输入包含无穷大或 NaN 时
statistics.stdev()和statistics.pstdev()函数现在将引发ValueError。gh-137109:
os.fork及有关分叉 API 对于 Linux 或 macOS 平台 API 返回一个进程中线程数量的常见场景不会再发出警告并且即使在os.register_at_fork()after_in_parent=回调(重新)启动一个线程时返回的答案仍将为 1。gh-141314: 修复
io.TextIOWrapper.tell()在读取带以单个回车符 (\r) 作为行结束符时的断言失败问题。gh-141311: 修复 assertion failure in
io.BytesIO.readinto()在读取位置超出io.BytesIO的容量时的断言失败和引发未定义行为问题。gh-141141: 修复
base64.b85decode()的一个线程安全问题。 由 Benel Tayar 贡献。gh-137969: 修复
annotationlib.ForwardRef.evaluate()返回的ForwardRef对象不随新的 globals 更新的问题。gh-140911:
collections: 确保UserString.rindex()和UserString.index()方法接受collections.UserString实例作为子参数。gh-140797: 未写入文档的
re.Scanner类现在禁止了在其词汇模式中包含捕获分组的正则表达式。 使用捕获分组的模式在之前会导致带有段错误的崩溃。 请改用非捕获分组 (?:...)。gh-140815: 现在
faulthandler会检测帧或代码对象是否不可用或已释放。 由 Victor Stinner 编写补丁。gh-100218: 当
socket.if_nametoindex()或socket.if_indextoname()引发OSError时正确设置errno。 由 Bénédikt Tran 编写补丁。gh-140875: 修复当在
html.parser.HTMLParser中设置convert_charrefs=False时对文件结束位置上未关闭字符引用(名称型和数字型)的处理问题。gh-140734:
multiprocessing: 修正在检查临时套接字文件路径长度时偏差为一的错误。 由 Bénédikt Tran 编写补丁。gh-140874: 将 ensurepip 中捆绑的 pip 版本提升至 25.3
gh-140691: 在
urllib.request中,当打开一个 FTP URL 的操作因无法建立数据连接而失败时,控制连接的套接字现在将关闭以避免ResourceWarning。gh-103847: 修复当取消由
asyncio.create_subprocess_exec()或asyncio.create_subprocess_shell()创建的进程时发生挂起的问题。 由 Kumar Aditya 编写补丁。gh-120057: 将
os.reload_environ()添加到os.__all__中。gh-140590: 修复针对可能导致内部状态破坏和崩溃的
functools.partial.__setstate__()的参数检查。 由 Sergey Miryanov 编写补丁。gh-125434: Windows 系统上在
faulthandler中显示线程名称。 由 Victor Stinner 编写补丁。gh-140634: 修复
os.sched_param.__reduce__()中的一个引用计数程序缺陷。gh-140633: 在加载打包为 Apple 框架的扩展模块时会忽略设置模块的
__file__属性时引发的AttributeError。gh-140593:
xml.parsers.expat: 修复一个可能影响将ElementDeclHandler()设为自定义的元素声明处理器的用户的内存泄漏问题。 由 Sebastian Pipping 编写补丁。gh-140607: 在
io.RawIOBase.read()内部,验证由io.RawIOBase.readinto()返回的字节计数是有效的(在所提供的缓冲区内部)。gh-138162: 修复
logging.LoggerAdapter带有merge_extra=True没有 extra 参数的问题。gh-138774: 现在当处理没有指定源的
ast.Interpolation节点时ast.unparse()会生成完整的源代码。now generates full source code when handlingnodes that do not have a specified source.gh-140474: 修复当使用空
str和u类型码创建数组时array.array中的内存泄漏问题。gh-137530:
dataclasses通过将生成的源代码中内联的标注替换为关联到相应方法的__annotate__函数修复针对生成的__init__方法的标注。gh-140348: 修复了 Python 3.14.0 中当使用
|运算符合并typing.Union对象与不属于类型的对象时会引发错误的的退化问题。gh-140120: 修复
hmac中当其使用 hacl-star 后端时的内存泄漏问题。 由@ashm-dev使用 AddressSanitizer 发现。gh-139905: 当
cls.__parameters__由于父类在其__init_subclass__中调用super().__init_subclass__()失败时为typing.Generic子类的错误消息添加提示。gh-139894: 修复在
asyncio内进行分叉时不正确的当前任务与子进程的共享。 由 Kumar Aditya 编写补丁。gh-139845: 在默认 asyncio REPL 中修正为不再打印 KeyboardInterrupt 两次。
gh-139783: 修正当一个装饰器后面跟一条注释或一个空行时
inspect.getsourcelines()的问题。gh-139809: 防止对
argparse.ArgumentParser.add_subparsers()中的子解析器prog过早着色以遵守在解析器创建之后色彩环境变量的修改。gh-139736: 修复默认
argparseHelpFormatter中的过度缩进。 由 Alexander Edland 编写补丁。gh-70765:
http.server: 修复BaseHTTPRequestHandler中对 HTTP/0.9 请求的默认处理。 在之前版本中,BaseHTTPRequestHandler.parse_request()会不正确地等待请求中的标头虽然它们在 HTTP/0.9 并不被支持。 由 Bénédikt Tran 编写补丁。gh-63161: 修复
tokenize.detect_encoding()的问题。 在指定了非 UTF-8 编码格式时支持 UTF-8 shebang 和注释。 检测非 UTF-8 编码格式的解码错误。 检测源代码中的空字节。gh-139391: 修复在非 Windows 平台上,当无法正常退出用 Ctrl+Z 挂起随后再由 fg 恢复而不是 kill 的
python -m asyncio进程时会出现的问题。gh-101828: 修复
'shift_jisx0213','shift_jis_2004','euc_jisx0213'和'euc_jis_2004'编解码器因为空字符被当作多字符串序列的一部分而截断它们的问题。gh-139289: 在
pdb的rlcompleter上执行真正的惰性导入并在导入rlcompleter之后现有的 completer。gh-139246: 修正:在默认 repl 宽度中粘贴零宽度是错误的。
gh-90949: 为 xmlparser 对象添加
SetAllocTrackerActivationThreshold()和SetAllocTrackerMaximumAmplification()以防止在一个 Expat 解析器内部使用不适当大小的动态内存。 由 Bénédikt Tran 编写补丁。gh-139210: 修复当在
xml.etree.ElementTree.iterparse()中报告未知事件时的释放后使用问题。 由 Ken Jin 编写补丁。gh-138860: 在
pdb中惰性导入rlcompleter以避免在子进程中发生死锁。gh-112729: 修复当进程内存不足时调用
concurrent.interpreters.create()的崩溃问题。gh-135729: 修复当在 REPL 中使用
concurrent.interpreters时执行最终化期间不可引发的异常问题。gh-139076: 修复
pydoc模块中当一个Python 模块内的函数是在扩展模块中实现并且该模块没有__all__时会将其隐藏的程序缺陷。gh-139001: 修复在内部
_raw_paths字段上pathlib.Path中的竞争条件问题。gh-138813:
multiprocessing.BaseProcess将kwargs默认为None而不是一个共享字典。gh-138891: 修复当在带有 PEP 646
star_expression标注的函数上调用inspect.get_annotations(f, eval_str=True)时的SyntaxError问题。gh-130567: 修复由于 macOS 上存在一个平台程序缺陷而可能在
locale.strxfrm()发生的崩溃问题。gh-138859: 修复当省略具有不为类型列表的默认值的
ParamSpec时泛型类型参数化引发TypeError的问题。gh-138764: 在具有空 globals 的模拟 globals 命名空间中避免
annotationlib.call_annotate_function()调用不支持VALUE_WITH_FAKE_GLOBALS的__annotate__函数。让
FORWARDREF和STRING标注在它们自己的格式或VALUE_WITH_FAKE_GLOBALS均不受支持的情况下回退为使用VALUE标注。gh-138775: 修复对
base64使用python -m时检测来自终端的输入问题以使其能正确感知 EOF。gh-138779: 针对
os.stat_result结构体的st_rdev字段支持大于2**63-1的设备号。gh-137706: 修复使用
typing.Annotated[T, x]的标注部分求值问题,其中T是一个前向引用。gh-88375: 在
urllib.robotparser模块中修复robots.txt规则和 URL 的正规化问题。 不会再忽略末尾的?。 对原始特殊字符?,=和&与其百分号编码形式进行区分。gh-111788: 修复
urllib.robotparser模块中的解析错误。 尝试解析怪异路径时不会失败。 尝试解码非 UTF-8 的robots.txt文件时不会失败。gh-98896: 修正当 SharedMemory 名称包含冒号时 multiprocessing resource_tracker 中的一个错误。 由 Rani Pinchuk 编写补丁。
gh-138425: 修复依赖于定义为全局变量的名称的
annotationlib.ForwardRef对象的部分求值问题。gh-138432: 现在
zoneinfo.reset_tzpath()会将它接收到的任何os.PathLike对象在将其添加到TZPATH之前转换为字符串。 如果在此转换之后发现任何字符串以外的对象则将引发TypeError。 如果给出一个代表相对路径的os.PathLike对象,则将引发ValueError而不是TypeError,并提供更详细的错误消息。gh-138008: 修复
ctypes模块中由于无效的argtypes而导致的段错误。 由 Dung Nguyen 编写补丁。gh-60462: 修复 Solaris 中的
locale.strxfrm()问题(可能也存在于其他平台)。gh-138010: 修复一个当使用以
@warnings.deprecated装饰的基类定义的类在涉及多重继承的情况下可能不会唤起正确的__init_subclass__()方法的问题。 由 Brian Schubert 编写补丁。gh-138151: 在
annotationlib中,改进针对当标注被初始求值时尚未定义 nonlocal 变量的前向引用的求值。gh-137317:
inspect.signature()现在能够正确处理在包装的__init__()或__new__()方法上使用描述器的类。 由 Yongyu Yan 贡献。gh-137490: 在 NetBSD 上以与
signal.sigwaitinfo()中的EINTR相同的方式处理ECANCELED。gh-137477: 修复生成器表达式的
inspect.getblock(),inspect.getsourcelines()和inspect.getsource()。gh-137044: 在
resource.getrlimit()中返回的大数值限制为正整数而不是负整数。 对在resource.setrlimit()中的限制接受大数值并拒绝负值 (除了RLIM_INFINITY)。gh-75989: 现在当提取硬链接时
tarfile.TarFile.extractall()和tarfile.TarFile.extract()将覆盖符号链接。 (由 Alexander Enrique Urieles Nieto 在 gh-75989 中贡献。)gh-137017: 将
threading.Thread.is_alive修正为保持True直到下层的 OS 线程被完全清理。 这将在涉及线程监控或过早调用threading.Thread.is_alive的边界场景下避免误报假阴性结果。gh-137273: 修复在 Windows 上
locale.setlocale()中的调试断言失败问题。gh-81325: 当处理 tar 归档时
tarfile.TarFile现在可接受 路径型对象。 (由 Alexander Enrique Urieles Nieto 在 gh-81325 中贡献。)gh-137185: 修复在打印 C 栈跟踪信息时
faulthandler中潜在的异步信号安全问题。gh-136914: 修复针对以
functools.cache()或functools.cached_property装饰的对象提取doctest.DocTest.lineno的问题。gh-136912: 现在
hmac.digest()能在必要时通过回退至纯 Python 实现来正确地处理大量键和消息。 由 Bénédikt Tran 编写补丁。gh-83424: 在传入句柄作为参数时允许创建没有名称的
ctypes.CDLL。gh-136234: 通过使用与
write()相同的行为,修复asyncio.WriteTransport.writelines()对于连接失败的健壮性。gh-136507: 修正 mimetypes CLI 以处理多个文件形参。
gh-136057: 修复了在
pdb和bdb中如果行内存在循环则next和step无法穿过该行的程序缺陷。gh-135386: 修复了从只读的文件或目录打开一个
dbm.sqlite3数据库供读取时出现的问题。gh-135444: 修正
asyncio.DatagramTransport.sendto()以在数据无法被发送时将数据报标头大小纳入考量。gh-126631: 修正
multiprocessing中forkserver阻止预加载__main__的程序缺陷。gh-135307:
email: 修正当 encoding 文本和 max_line_length 被设为0或None(无限制) 时在set_content()中引发异常的问题。gh-134453: 修正 POSIX 平台上
subprocess.Popen.communicate()对于非字节形状memoryview实例的input=处理。 现在它们会被正确转换为字节形状视图而不是截断输入。 Windows 平台不存在此程序缺陷。platforms did not have this bug.gh-134698: 修复在多个线程上调用
ssl.SSLContext或ssl.SSLSocket的方法时的崩溃问题。gh-125996: 修复
collections.OrderedDict的线程安全问题。 由 Kumar Aditya 编写补丁。.gh-132551: 使
io.BytesIO在 自由线程 构建中保证安全。gh-131788: 使
multiprocessing中的ResourceTracker.send保证重进入安全。gh-118981: 通过立即关闭子进程 fds 修复当子进程提前死亡时
multiprocessing.popen_spawn_posix中潜在的挂起问题。gh-102431: 在
decimal.Context的方法中明确对“逻辑”参数的约束。gh-78319: 对 IMAP APPEND 命令的 UTF8 支持已做到符合 RFC 规范。
bpo-38735: 修正在设置了 sys.pycache_prefix 的类 unix 平台上从根目录导入模块时执行失败的问题。
bpo-41839: 允许
os.sched_get_priority_min()和os.sched_get_priority_max()函数使用负的优先级值。
IDLE¶
文档¶
gh-141994:
xml.sax.handler: 在xml.sax.handler.feature_external_ges的文档中警告 外部实体攻击 风险。 由 Sebastian Pipping 编写补丁。gh-140578: 移除
multiprocessing中过时的句子,其中假定concurrent.futures.ThreadPoolExecutor不存在。
核心与内置函数¶
gh-142048: 修正在自由线程构建版中指数级增加的垃圾回收延迟问题。
库¶
核心与内置函数¶
gh-141930: 当导入模块时,使用 Python 的常规文件对象以确保完整写入
.pyc文件否则将引发适当的错误。gh-120158: 修正当启用或禁用监视事件太多次时的不一致状态问题。
gh-139653: 如果栈指针低于限制指针 并且 高于栈基准位置则仅引发
RecursionError或者触发一个致命错误。 如果在此边界以外则认为没有问题。 这将避免当用户空间线程与栈相交换时的误报问题。gh-139103: 在自由线程构建上改进数据类的多线程调节操作。
gh-141579: 修复
sys.activate_stack_trampoline()以正确地支持perf_jit后端。 由 Pablo Galindo 编写补丁。gh-114203: 如果对象已被双向互斥关键节锁定则跳过锁定操作。
gh-141528: 当就其他子解释器发出警告时建议使用
concurrent.interpreters.Interpreter.close()而不是私有的_interpreters.destroy函数。 由 Sergey Miryanov 编写补丁。gh-141312: 修复在 range 迭代器的
__setstate__方法中当传入非整数参数时的断言失败问题。 由 Sergey Miryanov 编写补丁。
库¶
核心与内置函数¶
gh-140939: 修复当
bytearray或bytes使用%*b格式以很大的宽度值进行格式化而导致MemoryError时的内存泄漏问题。
库¶
核心与内置函数¶
gh-140530: 修复当
raise exc from cause执行失败时的引用泄漏问题。 由 Bénédikt Tran 编写补丁。gh-140373: 当生成器对象关闭时正确发出
PY_UNWIND事件。由 Mikhail Efimov 编写补丁。gh-140576: 修复
tokenize.generate_tokens()在特定错误输入情况下的崩溃问题。 由 Mikhail Efimov 编写补丁。gh-140551: 修复当
dict.clear()在查找阶段被调用时dict中的崩溃问题。 由 Mikhail Efimov 和 Inada Naoki 编写补丁。gh-140517: 修复当输入的可迭代对象具有不同长度时在对设置了
strict=True的map()的结果进行迭代时的引用泄漏问题。 由 Mikhail Efimov 编写补丁。gh-140471: 修复了在遇到包含非
str的不良格式_fields时ast.AST节点初始化中潜在的缓冲区溢出问题。gh-140431: 修复在 Python 的 垃圾回收器 中当协程原始跟踪深度 (
sys.set_coroutine_origin_tracking_depth()) 被启用时由于部分初始化的 coroutine 对象导致的崩溃问题。
库¶
gh-140398: 修复当
PySys_Audit()执行失败时在readline的read_init_file(),read_history_file(),write_history_file()和append_history_file()函数中的内存泄漏问题。
核心与内置函数¶
gh-140406: 修复当一个对象的
__hash__()方法返回不为int的对象时发生崩溃的问题。gh-140358: 恢复在 GC 调试输出中的已花费时间和不可访问对象计数。 这些内容在
gc.c重构期间被无意中移除了。 调试日志现在将再次报告已花费收集时间和不可访问对象数量。 由 Pål Grønås Drange 贡献。gh-140306: 修复跨解释器通道操作和共享命名空间处理中的内存泄漏问题。
gh-140301: 修复子解释器中
PyConfig的内存泄漏问题。gh-140257: 修复守护线程最终化期间在 eval_breaker 上 interpreter_clear() 和 take_gil() 之间的数据竞争问题。
gh-139951: 修复针对主要由小元组构成的堆不断增长导致的 GC 性能回归问题。
实际跟踪对象,而非可跟踪对象的计数。 这将确保未跟踪的元组具有降低 GC 开销的预期效果。
不跟踪在创建期间大部分不可跟踪的元组。 这将避免大量小元组导致过度的 GC 操作。
gh-140104: 修复 JIT 中的一个异常处理程序缺陷。 由 Ken Jin 编写补丁。 由 Daniel Diniz 报告程序缺陷。
gh-140061: 修正检查对象是否被唯一引用的功能以确保自由线程兼容性。 由 Sergey Miryanov 编写补丁。
gh-140067: 修复子解释器创建中的内存泄漏问题。
gh-140000: 修复当
typing.TypeAliasType,typing.TypeVar,typing.ParamSpec或typing.TypeVarTuple的实例及其__name__属性之间存在引用循环时潜在的内存泄漏问题。 由 Mikhail Efimov 编写补丁。gh-139914: 恢复对 HP PA-RISC 的支持,它具有向上增长的栈。
gh-139748: 修复在接受路径字符串或字节串的函数如
compile()和os.system()的错误分支中的引用泄漏问题。 由 Bénédikt Tran 编写补丁。gh-139516: 修复 lambda 的冒号在 tokenizer 的 f-字符串中错误开启格式说明的问题。
gh-139640:
ast.parse()将不再针对finally中的return/break/continue发出语法警告 (参见 PEP 765) -- 它们只会在编译期间发出。gh-139640: 修复在多个模块中当某些语法警告具有相同消息并从相同行发出时被漏掉的问题。 修复
finally代码块中重复的警告。gh-63161: 当在 Python 源文件中指定非 UTF-8 编码格式时支持非 UTF-8 shebang 和注释。 针对默认 (UTF-8) 编码格式检测注释中的解码错误。 在回溯中显示针对默认编码格式的解码错误的行和位置。 在回溯中显示包含与 BOM 冲突的 coding cookie 的行。
库¶
核心与内置函数¶
gh-138558: 修正在 annotationlib 中对不常见 t-字符串标注的处理。 由 Dave Peck 编写代码。
gh-134466: 当不允许设置 termios 属性时不在降级的环境中运行 PyREPL。
gh-138944: 修复当无效的语法与有效的
import ... as ...或from ... import ... as ...语句出现在同一行时的SyntaxError。 由 Brian Schubert 编写补丁。gh-105487: 从
types.GenericAlias的__dir__()条目中移除不存在的__copy__(),__deepcopy__()和__bases__。
库¶
核心与内置函数¶
gh-137433: 修复在 free threading 构建版中主线程正执行关闭解释器操作期间当守护线程启用或禁用性能分析或跟踪时潜在的死锁问题。
gh-137400:修复了在 free threading 构建模式下,当使用
PyEval_SetProfileAllThreads()或PyEval_SetTraceAllThreads()函数 (或其 Python 等效函数threading.settrace_all_threads()和threading.setprofile_all_threads()) 禁用所有线程的分析或跟踪功能时出现的崩溃问题。gh-58124: 修正代码页编解码器的 Unicode 错误中 Python 编码格式名称:使用 "cp65000" 和 "cp65001" 而不是无效的 Python 代码名称 "CP_UTF7" 和 "CP_UTF8"。 由 Victor Stinner 编写补丁。
gh-133400: 修复 _pyrepl 模块中的 Ctrl+D (^D) 行为以匹配 3.13 版之前的旧 REPL 行为。
gh-128640: 修复在子解释器中使用线程时的崩溃问题。
C API¶
gh-137422: 修复
PyImport_AddModuleRef()中的 free threading 竞争条件问题。 在之前版本中对该函数的两次调用有可能返回两个不同对象,只有其中一个会被存储到sys.modules中。gh-140042: 移除可能导致与多个子解释器一起使用时关闭 sqlite 连接的 sqlite3_shutdown 调用。
gh-141042: 当转换至较窄精度的浮点格式时,在
PyFloat_Pack2()和PyFloat_Pack4()中使用 qNaN --- 在截断载荷之后的剩余值将为零。 由 Sergey B Kirpichev 编写补丁。gh-140487: 修复受限 C API 3.11 或更早版本中的
Py_RETURN_NOTIMPLEMENTED: 不将Py_NotImplemented当作永生对象。 由 Victor Stinner 编写补丁。gh-140153: 修复受限 C API 3.11-3.13 中的
Py_REFCNT()定义。 由 Victor Stinner 编写补丁。gh-139653: 增加
PyUnstable_ThreadState_SetStackProtection()和PyUnstable_ThreadState_ResetStackProtection()函数用于设置 Python 线程状态的栈保护基准地址和栈保护大小。 由 Victor Stinner 编写补丁。
构建¶
gh-141808: 在 Windows 上的 PGO 构建场景中不会重复生成 jit stencil。
gh-141784: 修复在 32 位 Linux 上
_remote_debugging_module.c的编译问题。 在系统头文件之前先包括 Python.h 以确保_remote_debugging_module.c使用与 Python 相同的类型 (ABI)。 由 Victor Stinner 编写补丁。gh-140768: 当 WASI SDK 版本与受支持版本不匹配时发出警告。
gh-140513: 当
_Py_TAIL_CALL_INTERP被启用但preserve_none或musttail不受支持时生成明确的编译错误。gh-140189: iOS 构建被添加到 CI。
gh-138489: 当通过
build_wasm或build_emscripten为 WASI 执行交叉编译时,build-details.json步骤现在将被包括在构建过程中,就像原生构建一样。这将修正
libinstall任务在进程执行期间需要build-details.json文件的问题。gh-137618:
PYTHON_FOR_REGEN现在需要 Python 3.10 至 Python 3.15。 由 Adam Turner 编写补丁。gh-123681: 在运行时而不是编译时检查
strftime()的行为以支持交叉编译。 移除内部宏_Py_NORMALIZE_CENTURY。
Python 3.14.0 正式版¶
发布日期: 2025-10-07
macOS¶
Windows¶
gh-139573: 将捆绑的 OpenSSL 版本升级至 3.0.18。
工具/示例¶
安全性¶
gh-139400:
xml.parsers.expat: 确保父级 Expat 解析器当其不再被ExternalEntityParserCreate()所创建的子解析器所引用时只会被作为垃圾回收一次。 由 Sebastian Pipping 编写补丁。
库¶
gh-139312: 将捆绑的 libexpat 升级至 2.7.3
Python 3.14.0 release candidate 3¶
发布日期: 2025-09-18
Windows¶
gh-138896: 修复在未更新的 Windows 机器上安装 C 运行时导致的错误
工具/示例¶
gh-137873: iOS 测试运行器已简化,解决了在 GitHub Actions 和 Azure Pipelines 测试环境中使用该运行器时观察到的一些问题。
安全性¶
gh-135661:根据 HTML5 标准修复了
html.parser.HTMLParser中的 CDATA 段解析问题:] ]>和]] >不再终止 CDATA 段。新增私有方法_set_support_cdata(),可用于指定如何解析<[CDATA[—— 在外部内容(SVG 或 MathML)中作为 CDATA 段解析,或在 HTML 命名空间中作为伪注释解析。
库¶
gh-138998: 将捆绑的 libexpat 更新至 2.7.2
gh-118803:重新添加
collections.abc.ByteString和typing.ByteString。这两个类在 Python 3.14 的 alpha、beta 和候选版本中已被移除,但现在它们的移除计划已推迟至 Python 3.17。gh-137226:修复了在带有字符串注解的泛型
typing.TypedDict类上调用typing.get_type_hints()的问题。gh-138804:当向
shlex.quote()传递类型错误的参数时,将引发TypeError而非AttributeError。此变更恢复了该函数在 3.14 版本之前的行为。gh-128636:修复了macOS 平台在 PyREPL 中当
os.environ被覆盖为无效值时导致的崩溃问题。gh-138514: 当将多字符字符串传给
getpass.getpass()的 echo_char 形参时将引发ValueError。 由 Benjamin Johnson 编写补丁。gh-99948:
ctypes.util.find_library()现在可用于 Emscripten 构建版。gh-138253:在
concurrent.interpreters队列的put()和get()方法中添加了 block 形参,以实现与queue.Queue接口的兼容性。gh-138133:修复了通过
strace向 Python 发送 CTRL^C 时可能导致无限回溯循环的问题。gh-134869: 修复了一个问题,即在 REPL 中进行选项卡补全时按下 Ctrl+C 会导致自动补全菜单处于损坏状态。
gh-90548: 在 Alpine Linux 上修复当使用 --strip-all 编译时对
platform.libc_ver()的musl检测问题。gh-136134: 现在如果 Python 构建版不带 MD5 支持
SMTP.auth_cram_md5()则会引发SMTPException而不是ValueError。 特别地,即使远端服务器提供支持SMTP客户端将不会尝试使用此方法。 由 Bénédikt Tran 编写补丁。gh-136134: 如果 CRAM-MD5 验证不受支持则
IMAP4.login_cram_md5现在会引发IMAP4.error。 由 Bénédikt Tran 编写补丁。gh-134953:扩展
_colorize主题,增加keyword_constant配置,并在 :term:`repl`(交互式解释器)中实现该功能。
核心与内置函数¶
gh-71810:修复了在字节数为零的有符号转换中,
(-1).to_bytes()未抛出OverflowError的问题。由 Sergey B Kirpichev 提供补丁。gh-138192: 修复了
contextvars初始化问题以使所有子解释器都已分配MISSING值。gh-138479:修复了当泛型对象的
__typing_subst__返回非tuple类型对象时出现的崩溃问题。gh-138372: 修复了针对涉及 模板字符串字面值 的错误下标表达式发出
SyntaxWarning的问题。 由 Brian Schubert 编写补丁。gh-138318: 默认 REPL 现在会在内置名称 (例如
set或format()) 被用作属性名称 (例如value.set或text.format) 时避免高亮它们。gh-138349:修复了模块同时包含模块级注解和推导式时可能发生的崩溃问题。
gh-137384:修复了在程序关闭时,在终结器(finalizer)中使用
warnings模块导致的崩溃问题。由 Kumar Aditya 提供补丁。gh-137883:修复了在调用带有关键字参数的函数时出现的无限递归问题。
gh-137079: 修复了在解析文件时的关键字拼写错误识别问题。 由 Pablo Galindo 编写补丁。
gh-137728:修复了即时编译器(JIT)处理大量局部变量时的问题。此前这种情况会导致段错误(segfault)。
gh-137576: 修复的当给出
PYTHONSTARTUP时在来自 Basic REPL 的回溯中显示不正确的源代码问题。 由 Adam Hartz 编写补丁。
Python 3.14.0 release candidate 2¶
发布日期: 2025-08-14
macOS¶
Windows¶
gh-137134: 更新 Windows 安装程序以附带 SQLite 3.50.4。
库¶
gh-137426: 移除了
importlib.abc.ResourceLoader的代码弃用。 它在文档中已被宣布弃用,但与importlib.abc中的其他类一起被保留用于向下兼容。gh-137282: 修复在
concurrent.futures上的 tab 补全和dir()操作的问题。gh-137257: 将 ensurepip 中捆绑的 pip 版本提升至 25.2
gh-137226:修复了当传入 type_params 形参且类型参数名称同时存在于外围作用域时,
annotationlib.ForwardRef.evaluate()方法的行为问题。gh-130522: 在
threading模块中修复 interpreter shutdown 期间不可引发的TypeError问题。gh-137059: 修正
urllib.request.url2pathname()对 URL 权限中带有 Windows 驱动器号的文件 URL 的处理。 这修正了发较早的 Python 3.14 预发布版中的一个回归问题。gh-130577:
tarfile现在可验证归档以确保成员偏移量为非负值。 (由 Alexander Enrique Urieles Nieto 在 gh-130577 中贡献。)gh-135228:当
dataclasses模块用带槽(slotted)的数据类替换原类时,原类现在可以被垃圾回收了。 Python 3.14 中此前的改动会导致该原类始终与dataclasses合成的替换类一起存在。
文档¶
gh-136155:我们现已在持续集成(CI)流程中增加了对EPUB构建过程中致命错误的检查。
核心与内置函数¶
gh-137400:修复了在 free threading 构建模式下,当使用
PyEval_SetProfileAllThreads()或PyEval_SetTraceAllThreads()函数 (或其 Python 等效函数threading.settrace_all_threads()和threading.setprofile_all_threads()) 禁用所有线程的分析或跟踪功能时出现的崩溃问题。gh-137314: 修复了原始 f-字符串不正确地解读格式说明符中的转义序列的回归问题。 原始 f-字符串现在会正确地保留格式说明符中的反斜杠字面值,以与自 Python 3.11 以来的行为相匹配。 例如,
rf"{obj:\xFF}"现在会正确地产生'\\xFF'而不是'ÿ'。 由 Pablo Galindo 编写补丁。gh-137308:节点体中的独立文档字符串会被优化为
pass语句,以确保节点体永远不会为空。否则,在调用compile()函数时会产生ValueError异常。gh-137288:修复了一个布尔表达式字节码指令与正确异常处理器关联异常的漏洞。该问题导致部分布尔表达式的字节码指令未能正确关联到对应的异常处理逻辑。
gh-134291:从即时编译器(JIT)中移除了部分较新的macOS API使用,以恢复对旧版macOS 10.15部署目标的支持兼容性。
gh-131338:在非 glibc 的 Linux 平台上禁用计算栈限制检查,以修复深度递归导致的崩溃问题。
gh-136870: 修正了在线程并发运行的代码对象的字节码进行去工具化时的数据竞争问题。
C API¶
gh-137573: 将
_PyOptimizer_Optimize标记为Py_NO_INLINE以防止在to prevent stack overflow crashes on macOS 上发生栈溢出崩溃。
构建¶
gh-132339: 添加对 OpenSSL 3.5 的支持。
Python 3.14.0 rc1¶
发布日期: 2025-07-22
工具/示例¶
gh-136251:针对
Tools/wasm/emscripten/web_example的修复与可用性改进
安全性¶
gh-135661:根据 HTML5 标准,修复
html.parser.HTMLParser中解析=分隔符周围带有空白符的属性时出现的问题。gh-118350:修复
html.parser.HTMLParser对可转义原始文本模式("textarea" 和 "title" 元素)的支持问题。
库¶
gh-136170:移除了 3.14.0a7 版本中新增但未正式发布的
zipfile.ZipFile.data_offset属性,因为该属性在某些情况下的行为不够明确,导致结果可能与用户预期不符。gh-124621:pyrepl 现已支持在 Emscripten 环境中运行。
gh-136874:在
urllib.request.url2pathname()函数中丢弃 URL 的查询参数和片段标识符。gh-136549:修复了
threading.excepthook()的签名。gh-136523:修复当
wave.Wave_write打开文件失败抛出异常时,该类会生成无法捕获的异常的问题。gh-52876: 为
codecs.StreamReaderWriter.readline()和codecs.StreamReaderWriter.readlines()方法添加缺失的keepends形参(默认值True)。gh-136470:修正
concurrent.futures.InterpreterPoolExecutor的默认线程名称。gh-136476: 修复了一个导致
get_async_stack_trace函数无法捕获栈回溯中部分帧的错误。gh-136434: 修复了在启用
-OO优化选项时,concurrent.interpreters模块中UnboundItem文档的生成问题。gh-136380: 当访问
concurrent.futures.InterpreterPoolExecutor且子解释器不可用时,会引发AttributeError异常。gh-134759:修复
email.message.Message.get_payload()函数在解码bytes类型负载时引发的UnboundLocalError异常。由 Kliment Lamonov 提供补丁。
核心与内置函数¶
gh-136801:修复 PyREPL 在多行 case 语句后对 match case 进行语法高亮显示的问题。由 Olga Matoula 贡献。
库¶
核心与内置函数¶
gh-136541: 修复了x86-64和aarch64架构下性能跳转(perf trampolines)的相关问题。这些跳转代码在某些情况下未能正确生成,可能导致性能分析集成(perf integration)无法正常工作。由Pablo Galindo 提供补丁。
gh-136517: 修复了一个拼写错误,该错误会导致在设置
gc.DEBUG_UNCOLLECTABLE模式时无法打印不可回收对象。gh-136525:修复新创建线程的每线程字节码未被插桩的问题。
gh-132661:
Interpolation.expression属性现在有了默认值——空字符串。-
禁止将
string.templatelib.Template对象与str类型字符串进行拼接,同时禁止 t-字符串 字面量与字符串或 f-字符串 字面量进行隐式拼接。
库¶
核心与内置函数¶
C API¶
gh-112068:撤销对
PyArg_Parse()函数中可空参数的支持。gh-133296:非受限 C API 现已公开临界区 API 的新变体,这些新变体接受一个或两个
PyMutex指针,而非PyObject实例。gh-134009:将
PyMutex_IsLocked()函数作为公共 C API 的一部分对外公开。
构建¶
Python 3.14.0 beta 4¶
发布日期: 2025-07-08
工具/示例¶
测试¶
安全性¶
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-136927 中已回退]
=分隔符与属性名或属性值之间的空白符将不再被忽略。例如,<a foo =bar>会生成两个属性:"foo" 和 "=bar",它们的值均为 None;而<a foo= bar>会生成两个属性:"foo" 的值为空字符串,"bar" 的值为 None。
gh-102555: 根据HTML5标准修复
html.parser.HTMLParser中的注释解析。--!>现在结束注释。-- >不再结束注释。支持异常结束的空注释<-->和<--->。
库¶
gh-136286: 修复了协议0和协议1在序列化(pickling)与子解释器相关的众多对象时出现的失败问题。
gh-136316: 改进了
typing.evaluate_forward_ref()函数对嵌套前向引用的求值支持。gh-85702: 如果
zoneinfo._common.load_tzdata被给予一个没有资源的包,则会引发zoneinfo.ZoneInfoNotFoundError而不是PermissionError。由Victor Stinner提供补丁。gh-136028: 修复在
time.strptime()中解析包含 "İ"(U+0130,拉丁大写字母I带点)的月份名称的问题。这影响 az_AZ、ber_DZ、ber_MA 和 crh_UA 语言环境。gh-135995: 在 palmos 编码中,使字节
0x9b解码为›(U+203A - 单右指向角引号) 。gh-53203: 修复
time.strptime()对于 byn_ER、wal_ET 和 lzh_TW 语言环境的%c和%x格式,以及对于 ar_SA、bg_BG 和 lzh_TW 语言环境的%X格式。gh-91555: 3.14.0b2 版本中引入的一项更改已被撤销。该更改在处理日志消息时禁用了日志记录器的日志记录。撤销后,行为应恢复至 3.14.0b2 之前的状态。
gh-135878: 修复
types.SimpleNamespace在 free threading 构建中,当多个线程同时调用其__repr__()方法时的崩溃问题。gh-135836: 修复
asyncio.loop.create_connection()中的IndexError,该错误可能在连接过程中引发非OSError异常且套接字的close()引发OSError时发生。gh-135836: 修复
asyncio.loop.create_connection()中的IndexError,该错误可能在 Happy Eyeballs 算法在连接尝试中导致异常列表为空时发生。gh-135855: 当
_interpreters.set___main___attrs()被传递非字典对象时,引发TypeError而非SystemError。由 Brian Schubert 提供补丁。gh-135815:
netrc: 如果os.getuid()缺失,则跳过安全检查。由 Bénédikt Tran 提供补丁。gh-135640: 解决了一个错误,该错误允许在
xml.etree.ElementTree.ElementTree.write()中使用无效的根元素调用 ElementTree 对象。此行为会清空传递给write的已存在文件。gh-135645: 向
sys.implementation添加了supports_isolated_interpreters字段。gh-135646: 在
annotationlib.ForwardRef.evaluate()方法中引发统一的NameError异常gh-119180: 在
annotationlib.get_annotations()函数中,仅在必要时获取全局变量和局部变量gh-135561: 修复 DEBUG 构建中 HACL* HMAC 例程失败时的崩溃问题。由 Bénédikt Tran 提供补丁。
gh-135487: 修复
reprlib.Repr.repr_int()当给定整数超过sys.get_int_max_str_digits()数字时的问题。由 Bénédikt Tran 提供补丁。gh-135335:
multiprocessing: 在forkserver中预加载模块后刷新stdout和stderr。gh-135069: 修复
encodings.idna.IncrementalDecoder中的“无效错误处理”异常,正确替换 'errors' 形参。gh-130662: + 支持在
Decimal格式化中,精度(precision)和宽度(width)字段接受前导零。例如:format(Decimal(1.25), '.016f')。gh-130662: 支持在
Fraction格式化中,精度(precision)和宽度(width)字段接受前导零。例如:format(Fraction(1, 3), '.016f')。gh-87790: 支持在
Fraction的格式化中,使用下划线和逗号作为小数部分的分组分隔符。由 Sergey B Kirpichev 提供补丁。gh-87790: 支持在
Decimal的格式化中,使用下划线和逗号作为小数部分的分组分隔符。由 Sergey B Kirpichev 提供补丁。gh-130664: 处理
Fraction格式化的边缘情况:将零填充(在宽度字段前加零('0')字符)视为与'0'填充字符和'='对齐类型等效,就像float的情况一样。
文档¶
gh-136155: 已修复EPUB构建问题:通过排除非XHTML兼容标签实现修复。
核心与内置函数¶
gh-109700: 修复了
PyDict_SetDefault()函数中的内存错误处理问题。gh-78465: 修复
cls.__new__(cls, ...)的错误消息,其中cls是不可实例化的内置或扩展类型(tp_new设置为NULL)。gh-129958: 在单引号插值字符串的格式说明符中换行时,需区分t-字符串和f-字符串的语法错误。
gh-135871: 在 free threading 构建版本中,非阻塞互斥锁尝试在锁被占用时会立即返回,而不再进行短暂的忙等待。
gh-135106: 将垃圾回收箱(trashcan)机制限制为仅作用于垃圾回收(GC)管理的对象,并在进入垃圾回收箱时取消对这些对象的跟踪,以防止垃圾回收机制与垃圾回收箱机制之间发生冲突。
gh-135608: 修复涉及模块属性的 JIT 崩溃问题。
gh-135543: 当调用
sys.remote_exec()时发出sys.remote_exec审计事件,并将remote_debugger_script迁移到cpython.remote_debugger_script。gh-134280: 禁用对布尔参数使用按位取反运算符
~时的常量折叠优化。此举将弃用警告的触发时机从编译时调整至运行时。
C API¶
gh-135906: 修复了使用C++编译器编译内部头文件时产生的编译错误。
构建¶
gh-134273: 通过
CFLAGS_JIT添加对 JIT 编译器标志配置的支持
Python 3.14.0 beta 3¶
发布日期: 2025-06-17
Windows¶
测试¶
安全性¶
gh-135462: 修复
html.parser.HTMLParser在处理特制输入时的二次方复杂度问题。现根据HTML5规范处理文件结束错误——自动闭合注释和声明,忽略标签。gh-135034: 修复了多个问题,这些问题允许使用精心构造的符号链接和硬链接绕过
tarfile提取过滤器(filter="data"和filter="tar")。解决了 CVE 2024-12718、CVE 2025-4138、CVE 2025-4330 和 CVE 2025-4517。
库¶
gh-65697:
configparser在尝试写入无效键时的错误信息现在更有帮助。gh-135497: 修复了在基于 BSD 的平台上
os.getlogin()对于较长用户名失败的问题。gh-135429: 修复了
_lsprof中PY_THROW事件的参数不匹配问题。gh-135368: 修复了在
dataclasses.dataclass()对象上生成unittest.mock.Mock的问题。现在所有特殊属性都像 gh-124429 之前那样设置。gh-135321: 为
pickle的 C 实现中的BINSTRING操作码的值大于 0x7fffffff 的情况引发正确的异常。gh-135276: 从 zipp 3.23 回溯了 zipfile.Path 中的 bug 修复。修复了在 Windows 上处理磁盘上的 zipfile 时
.name、.stem和其他基于基名的属性的问题。gh-135244:
uuid: 当无法确定MAC地址时,现在按照 RFC 9562, §6.10.3 使用加密安全的伪随机数生成器(CSPRNG)生成48位节点ID。这影响了uuid1()和uuid6()。gh-134970: 修复了
argparse.ArgumentParser.add_argument_group()中“未知动作”异常,以正确替换动作类。gh-134718:
ast.dump()现在仅在它们是默认值时省略None和[]值。gh-134939: 添加了
concurrent.interpreters模块。参见 PEP 734。gh-134885: 修复了
compression.zstd模块中与设置形参类型相关的可能崩溃。由Jelle Zijlstra提供补丁。gh-134857: 改进了与
unittest一起运行的doctest的错误报告。从回溯中移除doctest模块帧,并从失败消息中移除冗余的换行符。gh-128840: 修复了解析包含嵌入式IPv4地址的长IPv6地址的问题。
gh-134637: 修复了在 free threading 中调用
ctypes函数指针时的性能回归。gh-134696: 内置的HACL*和OpenSSL哈希函数构造器实现现在正确接受相同的 文档化 命名参数。例如,
md5()之前可以根据底层实现以md5(data=data)或md5(string=string)形式调用,但这些调用不兼容。由Bénédikt Tran提供补丁。gh-134151:
email: 修复了email.utils.decode_params()中在排序包含未编号部分的 RFC 2231 续篇时的TypeError。gh-134210:
curses.window.getch()现在正确处理信号。由Bénédikt Tran提供补丁。gh-133489:
random.getrandbits()现在可以生成超过231 位的随机数。random.randbytes()现在可以生成超过256 MiB的数据。gh-132813: 改进当
csv.Dialect属性的类型和值不正确时的错误消息。gh-132969: 防止
ProcessPoolExecutor执行器线程在shutdown(wait=False)后仍然运行时,在对象状态已在关闭过程中被重置后尝试调整池的工作进程。一系列条件,包括工作进程异常终止,导致当仍在运行的执行器线程尝试替换池中的死亡工作者时出现异常和可能的挂起。gh-127081: 通过用可重入版本的
getlogin_r替换getlogin,修复os的libc线程安全问题。gh-131884: 修复当同时使用 indent 和 skipkeys 时
json.dump()的格式化问题。gh-130999: 避免在发生错误时退出新的REPL,并在即使有非字符串候选时也提供建议。
文档¶
核心与内置函数¶
库¶
gh-127319: 将XMLRPC、日志记录和HTTP服务器上的
allow_reuse_port类变量设置为``False``。这匹配了之前Python版本的行为,即不允许端口重用。
核心与内置函数¶
库¶
核心与内置函数¶
库¶
核心与内置函数¶
gh-132617: 修复
dict.update()修改检查,当修改一个恰好共享相同底层键对象的不同字典时,可能错误地引发“更新期间字典被修改”错误的问题。gh-134679: 修复 free threading 构建的 QSBR 代码在更改对象的
__dict__属性时可能发生的崩溃。gh-127682: 在列表推导式中不再调用
__iter__两次。这使得列表推导式的行为与其他形式的迭代一致gh-133912: 修复C API函数
PyObject_GenericSetDict以处理具有内联值的扩展类。
C API¶
gh-134989: 在有限的C API 3.11及更早版本中修复
Py_RETURN_NONE、Py_RETURN_TRUE和``Py_RETURN_FALSE``宏:不将Py_None、Py_True和Py_False视为不朽。由Victor Stinner提供补丁。gh-134989: 在有限的C API 3.12及更早版本中将
PyObject_DelAttr()和PyObject_DelAttrString()实现为宏。由Victor Stinner提供补丁。gh-133968: 添加
PyUnicodeWriter_WriteASCII()函数以将ASCII字符串写入PyUnicodeWriter。此函数比PyUnicodeWriter_WriteUTF8()更快,但如果输入字符串包含非ASCII字符,则行为未定义。由Victor Stinner提供补丁。
构建¶
Python 3.14.0 beta 2¶
发布日期: 2025-05-26
Windows¶
gh-130727: 修复了对 WMI 的内部调用中一个竞争问题,它可能在高负载情况下导致 "invalid handle(无效句柄)" 异常。 由 Chris Eibl 提供补丁。
gh-76023: 使
os.path.realpath()在非严格模式下忽略Windows错误1005。gh-133779: 撤销了根据编译器设置生成不同的
pyconfig.h文件的更改,因为它经常导致扩展构建失败。特别是,当为实验性自由线程运行时编译时,Py_GIL_DISABLED预处理器变量现在必须始终明确定义。sysconfig.get_config_var()函数可用于确定当前运行时是否是用该标志编译的。gh-133626: 确保包不会意外捆绑到传统安装程序中。
工具/示例¶
测试¶
安全性¶
库¶
gh-132710: 如果可能,确保
uuid.getnode()即使在不同进程中也能返回相同的结果。以前,结果仅在同一个进程中保持不变。由Bénédikt Tran提供补丁。gh-80334:
multiprocessing.freeze_support()现在检查任何"spawn"启动方法平台上的工作,而不仅限于Windows。gh-134582: 修复与t-strings大括号转义相关的tokenize.untokenize()往返错误
gh-134451: 将
asyncio.tools.CycleFoundException从数据类转换为常规异常类型。gh-90871: 修复了关于
create_unix_server()中backlog形参的差一错误。由Christian Harries贡献。gh-134323: 修复
threading.RLock.locked()方法。gh-86802: 修复了已取消的防护任务(shielded tasks)中的asyncio内存泄漏问题。对于那些防护操作被取消的受保护任务,现在会通过异常处理器记录潜在的异常情况。由Christian Harries贡献。
gh-134209:
curses: 现在,curses.window.instr()和curses.window.getstr()方法在堆上而不是栈上分配它们的内部缓冲区;此外,最大缓冲区大小从1023增加到2047。gh-134235: 更新了REPL上的标签补全功能,以包括内置模块。由Tom Wang, Hunter Young贡献
gh-134152: 修复了在某些上下文中,如果缺少预期的尾随定界符,在
email头解析过程中可能发生的UnboundLocalError。gh-134168:
http.server: 修复了使用HTTPS时的IPv6地址绑定和--directory处理。gh-133982: 在
io的Python实现中,当在存在多个I/O层的情况下没有显式关闭 文件型对象 时,发出RuntimeWarning。gh-133890:
tarfile模块现在在无法提取成员时以与OSError相同的方式处理UnicodeEncodeError。gh-134097: 修复了新 REPL 和
-X showrefcount命令行选项的交互问题。gh-133889:
http.server.SimpleHTTPRequestHandler中生成的目录列表页面现在只显示请求URL的解码路径组件,而不显示查询和片段。gh-134098: 修复了在
http.server.SimpleHTTPRequestHandler中处理以百分比编码的斜杠(%2f``或 ``%2F)结尾的路径的问题。gh-132124: 在符合POSIX的系统上,
multiprocessing.util.get_temp_dir()现在在使用 forkserver 启动方法时,如果AF_UNIX套接字文件的路径长度超过平台特定的最大长度,则忽略TMPDIR(以及类似的环境变量) 。补丁由Bénédikt Tran提供。gh-134062:
ipaddress: 修复__hash__()中IPv4Network和IPv6Network对象的冲突。gh-133970: 使
string.templatelib.Template和string.templatelib.Interpolation成为泛型。gh-71253: 在 Python 实现的
io中,如果 opener 返回一个负的文件描述符,则在open()中抛出ValueError以匹配 C 实现。gh-133960: 简化并改进
typing.evaluate_forward_ref()。现在它不再在某些无效类型上抛出错误。在几种情况下,它现在能够评估之前不支持的前向引用。gh-133925: 使私有类
typing._UnionGenericAlias可哈希。gh-133653: 修复
argparse.ArgumentParser使用 formatter_class 参数时的错误。修复当 formatter_class 是HelpFormatter的自定义子类时的 TypeError。修复当 formatter_class 不是HelpFormatter的子类且使用非标准 prefix_char 时的 TypeError。修复当 formatter_class 不是HelpFormatter的子类时的颜色化支持。gh-132641: 修复了
functools.lru_cache()在自由线程下的竞争条件。gh-133783: 修复将
copy.replace()应用于ast对象时的错误。默认值为None的属性被错误地视为手动创建的 AST 节点的必需属性。gh-133684: 修复
annotationlib.get_annotations()在用于某些类的类层次结构中返回错误结果的 bug,这些类使用了from __future__ import annotations。gh-77057: 修复
html.parser.HTMLParser中无效标记声明的处理。gh-130328: 在 Windows 的传统控制台中加速
PyREPL的粘贴。由 Chris Eibl 提供补丁。gh-133701: 修复在
from __future__ import annotations下定义且继承自另一个TypedDict的typing.TypedDict类具有不正确__annotations__属性的 bug。gh-133581: 改进
ast.unparse()和from __future__ import annotations中 t-strings 的反解析。现在空 t-strings 能正确往返转换,插值中的格式也得到了保留。由 Jelle Zijlstra 提供补丁。gh-133551: 在
annotationlib中支持 t-strings (PEP 750)。由 Jelle Zijlstra 提供补丁。gh-133439: 修复 sqlite3 命令行界面中将带尾随空格的点命令误认为多行 SQL 语句的问题。
gh-132493: 在
inspect.signature()中避免不必要地访问__annotations__。gh-132876: 在 Windows 11 之前,Windows 上的
ldexp()不会对亚正规结果进行四舍五入,但应该这样做。Python 的math.ldexp()包装器现在会对它们进行四舍五入,因此在 Windows 11 之前的版本上,极少数非常小的结果可能会略有变化。gh-133009:
xml.etree.ElementTree: 修复当元素被并发修改时Element.__deepcopy__中的崩溃。补丁由 Bénédikt Tran 提供。gh-91555: 忽略在处理日志消息期间生成的日志消息,以避免死锁或无限递归。[注意:此更改已被撤销。]
gh-125028:
functools.Placeholder不能作为关键字参数传递给functools.partial()。gh-62824: 修复
iso8859_8编码的别名。由 Dave Goncalves 提供补丁。gh-86155:
html.parser.HTMLParser.close()现在在<script>标签未关闭时不再丢失数据。由 Waylan Limberg 提供补丁。gh-69426: 修复
html.parser.HTMLParser不在属性值中取消转义字符实体,如果它们后面跟着 ASCII 字母数字或等号。bpo-28494: 在
zipfile.is_zipfile()中改进 Zip 文件验证的假阳性率。gh-134381: 修复在调用
os.fork()后使用未启动的threading.Thread时引发的RuntimeError
核心与内置函数¶
gh-127960: PyREPL 交互式 shell 不再以设置为
_pyrepl包内部的__package__和__file__全局名称启动。由 Yuichiro Tachibana 贡献。gh-130397: 移除 WASI 的 C 栈深度限制的特殊处理。由于 WebAssembly 内置的栈保护,这不构成安全问题。
gh-128066: 修复了一个边缘情况,当 Python 在只读文件系统上被调用并尝试写入历史文件条目时,PyREPL 错误地抛出错误。
gh-69605: 在 REPL 中自动补全导入时,现在如果没有找到候选,将不会发出建议,而不是从当前命名空间提出建议。
gh-134119: 修复在耗尽的模板字符串迭代器上调用
next()时的崩溃问题。由 Jelle Zijlstra 提供补丁。gh-134100: 修复了一个在导入的模块在初始导入后不在
sys.modules中时出现的释放后使用错误。由 Nico-Posada 提供补丁。gh-133999: 修复 gh-123440 后
except解析中的SyntaxError回归。gh-133886: 修复
sys.remote_exec()对于非 UTF-8 区域设置中的非 ASCII 路径和 UTF-8 区域设置中的非 UTF-8 路径的问题。gh-133703: 修复字典中的哈希表在某些情况下可能比预期大的问题。
gh-133778: 修复在
from __future__ import annotations下定义的类的__annotations__属性赋值无效的错误。gh-132762:
fromkeys()在向一个大基础字典添加一小部分键时不再无限循环。补丁由 Angela Liss 提供。gh-133541: 当语法高亮激活时,用户输入中的不一致缩进导致的新 REPL 崩溃现已修复。
gh-133516: 当常量
True、False或None在 NFKC 规范化后被用作标识符时,引发ValueError。gh-132542: 在 fork(2) 后更新
Thread.native_id以确保准确性。由 Noam Cohen 提供补丁。
C API¶
gh-134144: 修复了当调用
Py_EndInterpreter()时,如果 thread state 不是解释器的初始线程时会崩溃的问题。
构建¶
Python 3.14.0 beta 1¶
发布日期: 2025-05-06
Windows¶
gh-132930: 将 Windows 安装程序标记为已弃用,并更新文档以涵盖新的 Python 安装管理器。
gh-127405: 在 Windows 上向
sysconfig.get_config_vars()添加ABIFLAGS。由 Xuehai Pan 提供补丁。
工具/示例¶
测试¶
gh-133131: 当未显式指定设备时 iOS testbed 现在将选择最近发布的 "SE-class" 设备用于测试。
gh-91048: 添加了外部检查所有待处理的 asyncio 任务的能力,即使当前事件循环中没有任务被输入。
gh-109981: 对打开的文件描述符进行计数的 test helper 现在会在所有 Apple 平台上使用已优化的
/dev/fd方式,而不是仅在 macOS 上。 这将避免由受保护的文件描述符导致的程序崩溃。gh-132678: 向
-m test添加--prioritize。此选项允许用户指定哪些选定的测试应该首先执行,即使顺序是随机化的。这对于运行时间最长的测试特别有用。gh-131290:
Lib/test中的测试现在可以正确地作为独立脚本执行。
安全性¶
gh-115322:
readline、subprocess和ctypes背后的底层扩展模块现在会在之前未覆盖的代码路径上引发审计事件,这些路径可能导致与 C 函数调用和外部二进制执行相关的文件系统访问。ctypes.call_function审计钩子也已修复,以使用无符号值作为其function pointer。
库¶
gh-133490: 向远程模式下的 PDB 添加颜色支持。
gh-132493: 避免在装饰有
reprlib.recursive_repr()的函数中急切地评估注解。gh-130645: 为标准库 argparse 的 CLI 添加颜色支持。由 Hugo van Kemenade 提交的补丁。
gh-119180: 使
annotationlib.get_annotations()在评估注解抛出除NameError或AttributeError之外的异常时,仍能成功使用FORWARDREF格式。gh-133351: 修复远程 PDB,使其在完成多行 Python 块的延续行时,能正确从服务器请求 Python 表达式的标签补全。
gh-133367: 向
ast命令行界面添加--feature-version、--optimize和--show-empty选项。由 Semyon Moroz 提交的补丁。gh-133363: 修复
cmd.Cmd类,确保在未定义do_shell方法且请求对以!开头的行进行标签补全时,可靠地调用completedefault方法。gh-133306: 在
fnmatch.translate()和glob.translate()中使用\z替代\Z。gh-133306: 在
regular expressions中支持\z作为\Z的同义词。gh-133300: 使
argparse.ArgumentParser的suggest_on_error成为仅关键字参数。由 Hugo van Kemenade 提交的补丁。gh-133290: 修复在未记录且已弃用的
ctypes.SetPointerType()函数和未记录的set_type()方法中设置ctypes._Pointer._type_时的属性缓存问题。gh-133223: 当 PDB 附加到远程进程时,更好地拦截 Ctrl+C 并将其转发到远程进程。
gh-133139: 添加
curses.assume_default_colors()函数,这是curses.use_default_colors()函数的改进版,允许更改颜色对0。gh-133089: 当调用
subprocess.run()函数时使用原始超时值处理subprocess.TimeoutExpired,而不是在内部的最后wait()中使用有时令人困惑的部分剩余超时值。gh-133036:
codecs.open()现已弃用。请改用open()。由 Inada Naoki 贡献。gh-132987: 许多接受无符号整数参数的内建和扩展函数现在如果可用的话会使用
__index__()。gh-133005: 在使用
'w|xz'模式时支持向tarfile.open()传递preset选项。gh-115032: 支持使用 strm 参数的自定义日志处理程序已被弃用,并计划在 Python 3.16 中移除。请改用 stream 参数定义处理程序。由 Mariusz Felisiak 提供补丁。
gh-132991: 在 Linux 2.4 及更高版本上添加
socket.IP_FREEBIND常量。gh-132995: 将 ensurepip 内置的 pip 版本升级至 25.1.1 版本
gh-132933: zipapp模块现在在创建要添加的文件列表时应用过滤器,而不是等到文件被添加到存档时。
gh-121249: 总是在
struct模块中支持 float complex 和 double complex C 类型。由 Sergey B Kirpichev 提供补丁。gh-132915:
fcntl.fcntl()和fcntl.ioctl()现在可以检测缓冲区溢出并引发SystemError。在这种情况下,堆栈和内存可能会被破坏,因此将此错误视为致命错误。gh-132017: 修复了当
pyrepl被挂起、然后恢复并终止时的错误。gh-132893: 提高了
statistics.NormalDist.cdf()对于小于均值的输入的准确性。gh-130328: 在Windows上加速
PyREPL中的粘贴。由 Chris Eibl 修复。gh-132882: 修复了包含不支持
|运算符的对象的typing.Union对象的复制问题。gh-129965: 为
.7z、.apk、.deb、.glb、.gltf、.gz、.m4v、.php、.rar、.rpm、.stl和.wmv添加 MIME 类型。由 Hugo van Kemenade 提交补丁。gh-132742:
fcntl.fcntl()现在支持任意的字节类对象 <bytes-like object>`,而不仅仅是bytes。fcntl.ioctl()现在会自动重试因 EINTR 失败的系统调用,并在系统调用期间释放 GIL,即使对于大的字节类对象也是如此。gh-132451: PDB 调试器的 CLI 现在接受
-p PID参数,以允许附加到正在运行的进程。该进程必须运行与运行 PDB 的 Python 相同的版本。gh-125618: 向
annotationlib.ForwardRef.evaluate()添加了一个 format 参数。现在在更多情况下以FORWARDREF格式评估注释会成功,而以前这些情况会引发异常。gh-132805: 修复了
annotationlib中 FORWARDREF 格式中嵌套非常量值的错误处理。gh-132673: 修复了在
ctypes.Structure中_align_ = 0和_fields_ = []时引发的AssertionError。gh-132578: 重命名
threading.Thread._handle字段以避免遮蔽threading.Thread子类上定义的方法。gh-132561: 修复了
multiprocessing.SemLock类的公共locked方法。还为派生类multiprocessing.Lock和multiprocessing.RLock添加了 2 个测试。gh-121468: 添加
pdb.set_trace_async()函数以支持pdb中的await语句。gh-132493:
typing.Protocol现在在检查实例是否通过isinstance()实现协议时使用annotationlib.get_annotations()。这支持了对具有延迟注释的类进行isinstance检查。gh-132527: 当有无效的类型码被传给
array.array时将在错误消息中包括有效的类型码 'w'。gh-132099: 在Linux上,使用
BTPROTO_HCI协议的蓝牙套接字现在接受整数格式的device_id地址,而不仅仅是元组(device_id,)。gh-81793: 修复
os.link()在像Linux这样的平台上,系统的link()函数不遵循符号链接的问题。在Linux上,现在默认遵循符号链接,或者在指定follow_symlinks=True时遵循。在Windows上,现在如果传入follow_symlinks=True则会引发错误。在macOS上,现在如果传入follow_symlinks=False并且系统的linkat()函数在运行时不可用,则会引发错误。gh-132493: 支持创建
typing.Protocol类,这些类带有在类创建时无法解析的注解。gh-132491: 将
annotationlib.value_to_string重命名为annotationlib.type_repr()并提供对函数对象的更好处理。gh-132426: 添加
annotationlib.get_annotate_from_class_namespace()作为访问元类中注解的助手,并移除annotationlib.get_annotate_function。gh-70145: 在蓝牙HCI协议 (
BTPROTO_HCI) 中添加对通道的支持。gh-131913: 添加一个快捷函数
multiprocessing.Process.interrupt(),与现有的multiprocessing.Process.terminate()和multiprocessing.Process.kill()一起,用于改进对子进程终止的控制。gh-132439: 修复Windows上的
PyREPL:通过AltGr输入的字符被吞掉。补丁由Chris Eibl提供。gh-132429: 修复NetBSD和DragonFly BSD上蓝牙套接字的支持。在FreeBSD上为BTPROTO_L2CAP地址添加对 cid 和 bdaddr_type 的支持。如果 cid 不为零,则在BTPROTO_L2CAP的
getsockname()中返回 cid。gh-132106: 现在当监听器已启动时
QueueListener.start将会引发RuntimeError。gh-132417: 修复了当使用
ctypes调用 C 函数且restypepy_object返回NULL时的NULL指针解引用问题。gh-132385: 修复
traceback中实例错误提示触发object.__getattr__()内的潜在异常问题。gh-125866: 向
urllib.request.pathname2url()添加可选的 add_scheme 参数;当设置为 true 时,返回完整的 URL。同样向url2pathname()添加可选的 require_scheme 参数;当设置为 true 时,接受完整的 URL。gh-132308: 现在
traceback.TracebackException将正确地渲染来自 falsey 的Exception的__context__和__cause__属性,以及来自具有假值的ExceptionGroup的exceptions属性。gh-127495: 在 PyREPL 中,每次语句执行后向
PYTHON_HISTORY文件追加一个新条目。这应该在解释器终止后保留命令行历史。由 Sergey B Kirpichev 提交的补丁。gh-129463:
annotationlib.ForwardRef对象的比较不再使用内部的__code__和__ast_node__属性,这些属性被用作缓存。gh-132250: 修复了
cProfile中当定位一个方法对应的具体 C 函数时引发异常的所使用的SystemError的问题。gh-132064:
annotationlib.get_annotations()现在如果存在__annotate__属性则使用它,即使__annotations__不存在。此外,如果传递给函数的对象没有任何注释,函数现在会引发TypeError。gh-130664: 支持在
Decimal的整数部分格式化中使用'_'数字分隔符。由 Sergey B Kirpichev 提交的补丁。gh-131952: 向 json CLI 添加颜色输出。由 Tomas Roun 提交的补丁。
gh-132063: 避免求值为假的异常 (比如,当其
__bool__方法返回False或其__len__方法返回 0)被concurrent.futures.ProcessPoolExecutor和concurrent.futures.ThreadPoolExecutor忽略。gh-132106:
logging.handlers.QueueListener现在实现了上下文管理器协议,允许在with语句中使用它。gh-132054:
mimetypes现在支持application/yamlmime 类型 (RFC 9512)。由 Sasha "Nelie" Chernykh 和 Hugo van Kemenade 提交的补丁。gh-119605: 当获取具有
inspect.signature()的类的类签名时将遵循__init__()和__new__()方法的follow_wrapped。 在使用warnings.deprecated()进行包装之后将保持类签名不变。 由 Xuehai Pan 提供补丁。gh-118761: 将
shlex模块的导入时间提高多达 33 倍,并将shlex.quote()的性能提高多达 12 倍。由 Adam Turner 提交的补丁。gh-85302: 在 FreeBSD 上的套接字中添加对
BTPROTO_SCO的支持。gh-131757: 使
functools.lru_cache()在未锁定的状态下调用缓存函数以允许并发。gh-131423:
ssl可以显示 OpenSSL 3.4.1 中添加的错误描述。由 Bénédikt Tran 提交的补丁。gh-131434: 改进了针对
time.strptime()中不正确格式的错误报告。gh-100926: 将
ctypes.POINTER()类型的缓存从全局内部缓存(_pointer_type_cache)移动到相应ctypes类型的ctypes._CData.__pointer_type__属性中。这将阻止缓存在某些情况下无限增长。gh-85702: 如果
zoneinfo._common.load_tzdata被给予一个没有资源的包,会抛出ZoneInfoNotFoundError而不是IsADirectoryError。gh-123471: 使得
itertools.repeat的并发迭代在自由线程下安全。gh-131127: 使用 LibreSSL 的系统现在将能成功地构建。
gh-89157: 使得
datetime.date.fromisoformat()的纯 Python 实现仅接受 ASCII 字符串,以与 C 实现保持一致。gh-130941: 修复了当
allow_no_value设为True时configparser.ConfigParser解析空插值的问题。gh-110067: 将
heapq的最大堆函数heapq.heapify_max(),heapq.heappush_max(),heapq.heappop_max(), 和heapq.heapreplace_max()公开。之前的带下划线命名为了向后兼容而保留。此外,缺失的函数heapq.heappushpop_max()已添加到 C 和 Python 实现中。gh-129098: 修复当对不存在的文件使用
compile()时的 REPL 回溯报告。 由 Bénédikt Tran 提供补丁。gh-130631: 现在
http.cookiejar.join_header_words()将更类似于原始的 Perl 版本。 它现在会为相同的字符集加引号并且总是会为以"\n"结尾的值加引号。gh-130482: 添加为
tkinter.OptionMenu和tkinter.ttk.OptionMenu指定名称的能力。gh-77065: 为
getpass.getpass()添加仅关键字可选参数 echo_char,以支持可选的视觉键盘反馈。由 Semyon Moroz 提供补丁。gh-130317: 修复
PyFloat_Pack2()和PyFloat_Unpack2()对于带有负载的 NaN 的处理。这纠正了在 IEEE 754 binary16 "半精度" 类型情况下struct.unpack()和struct.pack()的往返。由 Sergey B Kirpichev 提供补丁。gh-130402: 在解释器关闭期间加入运行的守护线程现在会抛出
PythonFinalizationError。gh-130167: 提高
difflib.IS_LINE_JUNK()的速度。由 Semyon Moroz 提供补丁。gh-128384: 如果
sys.flags.context_aware_warnings标志设置为真,则让warnings.catch_warnings使用上下文变量来保存警告过滤状态。这使得在多线程程序中使用上下文管理器是线程安全的。在自由线程构建中,该标志默认为真,否则为假。可以通过-X context_aware_warnings命令行选项或PYTHON_CONTEXT_AWARE_WARNINGS环境变量覆盖该标志的值。gh-129719: 修复在 Linux 系统上 socket 模块缺失
socket.CAN_RAW_ERR_FILTER常量的问题。 它自 Python 3.11 起就是缺失的。gh-129027: 为
sys._clear_type_cache()抛出DeprecationWarning。此函数在 Python 3.13 中已被弃用,但它没有抛出运行时警告。gh-128307: 向
asyncio.loop.create_task()添加eager_start关键字参数gh-127604: 添加支持,在支持的系统上通过
faulthandler.dump_c_stack()或通过faulthandler.enable()中的 c_stack 参数打印 C 堆栈跟踪。gh-126838: 向
urllib.request.url2pathname()添加 resolve_host 仅关键字参数,并修复带有权限的文件 URL 的处理。gh-82129: 修复当调用
typing.get_type_hints()时,在由dataclasses.make_dataclass()创建的、带有未注解字段的dataclasses.dataclass()上抛出NameError的问题。gh-122559: 移除在
io.FileIO、io.BufferedReader、io.BufferedWriter和io.BufferedRandom的 C 实现中总是抛出TypeError的__reduce__()和__reduce_ex__()方法,并用默认的抛出TypeError的__getstate__()方法替换它们。这恢复了 Python 3.11 及更早版本行为的细微细节。gh-122179:
hashlib.file_digest()现在在非阻塞 I/O 期间没有数据可用时抛出BlockingIOError。之前,它会在摘要中添加虚假的空字节。gh-53032: 公开
decimal.IEEEContext()以支持创建对应于 IEEE 754 (2008) 十进制交换格式的上下文。由 Sergey B Kirpichev 提供补丁。gh-120220: 弃用
tkinter.Variable方法trace_variable()、trace_vdelete()和trace_vinfo()。可以使用trace_add()、trace_remove()和trace_info()方法替代。gh-113539:
webbrowser:BROWSER环境变量中的名称现在可以引用已注册的网页浏览器,而不是总是生成一个新的浏览器命令。这使得可以将
BROWSER设置为 macOS 上支持的浏览器之一的值。gh-75223: 弃用
mimetypes.MimeTypes.add_type()中的无点扩展名。由 Hugo van Kemenade 提供补丁。
IDLE¶
gh-112936: 修复 IDLE:在单进程模式下没有 Shell 菜单项。
文档¶
gh-107006: 将
threading.local的文档和示例代码从其文档字符串移至官方文档。gh-125142: 作为内置帮助介绍文本的一部分,展示新的非基本 REPL 的键盘快捷键(F1、F2 和 F3)。
核心与内置函数¶
gh-133336:
-J不再保留供 Jython 使用。由 Adam Turner 提供补丁。gh-133261: 修复一个错误,其中循环 GC 可能会因为对象看起来是不朽的而在垃圾箱中取消跟踪对象。当对象被添加到垃圾箱时,我们注意确保它们保持一个凡人引用计数。
gh-133346: 向
_colorize模块添加了实验性的颜色主题支持。gh-132917: 对于自由线程构建,在触发完整的自动垃圾回收之前检查进程内存使用量的增加。如果自上次回收以来使用的内存没有增加 10%,则推迟回收。
gh-91048: 添加一个新的
python -m asyncio ps PID命令行接口,用于检查运行中的Python进程内的asyncio任务。显示一个扁平化的等待关系表。一个显示树状视图的变体也可用,命令为python -m asyncio pstree PID。这两个命令对于调试异步代码非常有用。由Pablo Galindo、Łukasz Langa、Yury Selivanov和Marta Gomez Macias提供补丁。gh-133304: 在RISC-V上为
PyFloat_Pack4()和PyFloat_Unpack4()修复NaN的"规范化"问题。gh-133197: 为不兼容的字符串/字节前缀改进
SyntaxError错误消息。gh-133231: 添加观察JIT编译的新工具 :
sys._jit.is_available()、sys._jit.is_enabled()和sys._jit.is_active()。
库¶
gh-133194:
ast.parse()将不再解析新的 PEP 758 语法,如果传入旧的*feature_version*。
核心与内置函数¶
gh-131798: 将`CALL_LEN`拆分为几个uops,允许JIT在优化时移除它们。由Diego Russo提供补丁。
gh-131798: 对于_BUILD_STRING、_BUILD_SET使用
sym_new_type而非sym_new_not_nullgh-132942: 修复类型查找缓存中的两个竞争条件。这影响了自由线程构建并可能导致崩溃(显然很难触发)。
gh-131798: 在JIT中传播
_BINARY_OP_SUBSCR_TUPLE_INT的返回类型。由Tomas Roun提供补丁gh-132952: 通过导入私有`_io`模块而非
io,加速使用`-S` 参数的启动。这修复了Python 3.14开发早期引入的性能回归,并将性能恢复到Python 3.13的水平。gh-131798: 允许JIT通过将返回类型设置为int来移除
_CALL_LEN后的int守卫。由Diego Russo提供补丁gh-131798:将
CALL_TUPLE_1拆分为多个微操作单元(uops),使即时编译器(JIT)能够移除其中部分操作。由 Tomas Roun 提供补丁gh-131798: 将
CALL_STR_1拆分为多个微操作单元(uops),使即时编译器(JIT)能够移除其中部分操作。由 Tomas Roun 提供补丁gh-132825: 增强对于不可哈希键/元素的错误消息,涉及
dict和set。由Victor Stinner提交补丁。gh-132713: 修复
repr(list)的竞态条件:在调用repr(item)时保持对项的强引用。由Victor Stinner提交补丁。gh-132661: 实现 PEP 750 (模板字符串) 。为t-strings添加新语法并实现新的内部
string.templatelib.Template和string.templatelib.Interpolation类型。gh-132479: 修复在特定情况下编译器崩溃的问题,这些情况包括多个模块级注释包含推导式和其他嵌套作用域。
gh-132744: 现在某些调用会检查失控递归并尊重系统递归限制。
gh-132449: 看起来像是Python关键字拼写错误的语法错误现在会为拼写错误提供有用的修复建议。由Pablo Galindo Salgado贡献。
库¶
核心与内置函数¶
gh-132639: 在有限的C API中添加了
PyLong_AsNativeBytes(),PyLong_FromNativeBytes()和PyLong_FromUnsignedNativeBytes()。gh-100239: 为
BINARY_OP/SUBSCR在列表和切片上添加特化。gh-132508: 在重新引发异常时,使用标记的整数在评估栈上表示指令偏移量。这避免了在低内存条件下需要装箱整数的情况。
gh-124476: 修复在C.UTF-8语言环境中从区域编码解码的问题。
gh-131927: 来自同一模块和行号的编译器警告现在只发出一次,匹配从用户代码发出的警告行为。这也可以通过
warnings过滤器进行配置。gh-132457: 使
staticmethod()和classmethod()泛型化。gh-131798: 对于 _BUILD_LIST、_BUILD_SET、_BUILD_MAP,使用
sym_new_type代替sym_new_not_nullgh-131798: 将
CALL_TYPE_1拆分为多个 uops,允许 JIT 移除其中的一些。gh-127682: 在创建和执行生成器表达式时不再调用两次
__iter__。从不可迭代对象创建生成器表达式时,只有在生成器表达式执行时才会引发异常。这使得生成器表达式的行为与其他生成器保持一致。gh-132261: 类上注释和注释函数的内部存储现在在类字典中使用不同的键。这消除了访问
__annotate__和__annotations__属性时行为不可预测的各种边缘情况。gh-132284: 如果未被覆盖,不要在类创建时包装基础的
PyCFunction槽。gh-130415: 提高了 JIT 移除未使用的常量和局部变量加载的能力,并修复了解除分配未使用值可能导致 JIT 代码崩溃或行为不正确的问题。
gh-126703: 修复了方法的定义与其
self具有相同生命周期时可能出现的释放后使用问题。gh-132286: 修复了删除
type.__annotations__时未删除type.__annotate__的问题。gh-131798: 通过将返回类型设置为 bool,允许 JIT 移除
_CONTAINS_OP_DICT之后的额外_TO_BOOL_BOOL指令。gh-124715: 防止调用
Py_DECREF()时栈溢出。第三方扩展对象不再需要使用“垃圾桶”机制,因为Py_DECREF()宏中现在内置了保护。gh-131798: 允许 JIT 编译器移除对列表、元组、字典和集合操作的一些类型检查。
gh-128398: 改进错误消息,当对象支持同步(或异步)上下文管理器协议时,使用
async with(或with) 而不是with(或async with) 进入时。 由 Bénédikt Tran 提供补丁。gh-131798: 通过将返回类型设置为字符串,允许JIT在
_BINARY_OP_SUBSCR_STR_INT之后移除unicode守卫。gh-131878: 在新的REPL中处理主输入循环中未捕获的异常。
gh-131878: 在新的REPL中修复Windows上支持两个或更多码点的unicode字符。
gh-126835: 将常量折叠移动到窥孔优化器。重命名AST优化相关文件(Python/ast_opt.c -> Python/ast_preprocess.c),结构体(_PyASTOptimizeState -> _PyASTPreprocessState)和函数(_PyAST_Optimize -> _PyAST_Preprocess, _PyCompile_AstOptimize -> _PyCompile_AstPreprocess)。
gh-114809: 添加对启用JIT的macOS多架构构建的支持
gh-131507: PyREPL现在支持语法高亮。由Łukasz Langa贡献。
gh-130907: 如果在模块执行时访问模块对象的
__annotations__,则返回到目前为止定义的注释,而不缓存它们。gh-130104: 三参数
pow()现在会在必要时尝试调用__rpow__()。之前它只在两参数pow()和二元幂运算符中被调用。gh-130070: 修复了
exec()传递字符串source和非Noneclosure时的断言错误。由Bartosz Sławecki提供补丁。gh-129958: 修复了一个错误,该错误允许在单引号 f-字符串 的格式说明符中不一致地使用换行符。由Pablo Galindo提供补丁。
gh-129858: 跟随
else块的elif语句现在有特定的错误消息。gh-69605: 向PyREPL添加模块自动完成功能。
gh-128555: 添加
sys.flags.thread_inherit_context标志。在自由线程构建中,此标志默认设置为true,否则为false。如果标志为true,默认情况下,使用
threading.Thread启动新线程时,将使用threading.Thread.start()调用者的contextvars.Context副本,而不是使用空上下文。添加了
-X thread_inherit_context命令行选项和PYTHON_THREAD_INHERIT_CONTEXT环境变量,它们设置了thread_inherit_context标志。向
Thread添加了context关键字参数。它可以用来显式传递一个上下文值供新线程使用。使
_contextvars模块成为内置模块。
gh-123539: 改进了使用
import ... as和from ... import ... as时如果不是名称的SyntaxError消息。gh-102567:
-X importtime现在接受值2,表示如果导入的模块已经加载,也应打印importtime条目。由Noah Kim和Adam Turner提供补丁。gh-116436: 改进了在
dict.update()期间发生TypeError时的错误消息gh-103997: 传递给"-c"的字符串参数现在会自动去除缩进,就像通过
textwrap.dedent()处理一样。这使得"python -c"调用可以在shell脚本中缩进而不会导致缩进错误。(由Jon Crall和Steven Sun提供补丁)
库¶
gh-89562: 从
PySSLContext结构中移除了hostflags成员。
C API¶
gh-133166: 修复了当传递静态类型时,
PyType_GetModuleByDef()返回NULL而不设置TypeError的回归问题。gh-133164: 添加了
PyUnstable_Object_IsUniqueReferencedTemporary()函数,用于确定对象是否作为解释器堆栈上的唯一临时变量存在。这是对某些情况的替代,其中检查Py_REFCNT()为一不再足以确定是否可以安全地修改Python对象而不会产生可见的副作用。gh-133140: 在Python的 自由线程 构建中,添加
PyUnstable_Object_IsUniquelyReferenced()作为Py_REFNCT(op) == 1的替代。gh-131747: 在非Windows平台上,弃用使用
ctypes.Structure._pack_来实现与非Windows平台兼容的布局。布局应通过将ctypes.Structure._layout_设置为'ms'来明确指定。gh-128972: 对于非自由线程构建,
PyASCIIObject的内存布局被恢复以匹配Python 3.13。(注意,该结构不是稳定ABI的一部分,因此其内存布局 保证 保持不变。)gh-133079: 在3.13版本中添加的未公开API
Py_C_RECURSION_LIMIT和PyThreadState.c_recursion_remaining在没有弃用期的情况下被移除。gh-132987:
PyArg_Parse()中的k和K格式现在支持__index__()特殊方法,就像所有其他整数格式一样。gh-132909: 修复了在
Py_BuildValue()中处理 K 格式时的溢出问题。由Bénédikt Tran提供补丁。gh-132798: 已弃用且未公开的函数
PyUnicode_AsEncodedObject(),PyUnicode_AsDecodedObject(),PyUnicode_AsEncodedUnicode()和PyUnicode_AsDecodedUnicode()计划在3.15版本中移除。gh-132470: 现在,当创建一个
ctypes.CField时,如果 byte_size 与实际类型大小不匹配,将引发ValueError,而不是导致解释器崩溃。gh-112068: [在 gh-136991 中已回退] 在
PyArg_Parse()及类似函数中添加了对可空参数的支持。在任何格式单元后添加?将使None被接受为一个值。gh-50333: 在
PyArg_ParseTuple()和其他 参数解析 函数中,如果 items 包含存储 borrowed buffer 或 借用引用 的格式单元,则非元组序列作为(items)格式单元的参数已被弃用。
构建¶
gh-113464: 使用 cpython-bin-deps "externals" 仓库进行 Windows LLVM 依赖管理。Windows JIT 构建不再需要手动安装 LLVM。
gh-133183: iOS 编译器垫片现在在目标三元组中包含
IPHONEOS_DEPLOYMENT_TARGET,确保遵守 SDK 版本最低要求。gh-133167: 修复了使用
--enable-optimizations和--without-docstrings的编译过程。gh-133171: 由于自由线程构建不支持实验性 JIT 编译器,防止这些配置被结合使用。
gh-132758: 修复了使用尾调用解释器和 pystats 的构建问题。
gh-132649:
PClayout脚本现在允许在 Windows ARM64 上传递--include-tcltk。gh-132257: 更改 GCC 上的默认 LTO 标志,不再传递
-flto-partition=none,并允许 LTO 的并行化。对于较新的 GNU make 和 GCC,这在 LTO 构建时间上有倍数级的加速,且性能无明显损失。gh-132026: 修复了在 MIPS Linux 平台上平台三元组检测中未定义标识符的使用。
Python 3.14.0 alpha 7¶
发布日期: 2025-04-08
macOS¶
Windows¶
工具/示例¶
测试¶
gh-131277: 允许通过
EnvironmentVarGuard.unset()方法一次性取消设置一个或多个环境变量。由 Bénédikt Tran 提供补丁。gh-131050: 如果底层的 TLS 库不支持有限域短暂 Diffie-Hellman,则跳过
test_ssl.test_dh_params。
安全性¶
库¶
gh-132174: 修复了
_interpreters.run_string的错误消息中的函数名称问题。gh-132171: 修复了字符串子类上
_interpreters.run_string导致的程序崩溃问题。gh-129204: 在
subprocess中引入新的_PYTHON_SUBPROCESS_USE_POSIX_SPAWN环境变量节点来控制os.posix_spawn()的使用。gh-132159: 在由
warnings.deprecated装饰器生成的__new__()中不屏蔽用户参数。 由 Xuehai Pan 提供补丁。gh-132168:
ctypes.py_object类型现在支持订阅,使其成为 泛型类型`。gh-84481: 添加
zipfile.ZipFile.data_offset属性,该属性在可用时存储文件中 ZIP 数据开始的偏移量。当zipfile.ZipFile以'w'或'x'模式打开且底层文件不支持tell()时,该值将为None。gh-125434: 在
faulthandler中显示线程名称。由 Victor Stinner 提供补丁。gh-132002: 修复了在释放具有奇怪不可哈希字符串名称的
contextvars.ContextVar时崩溃的问题。gh-131938:
xml.etree.ElementTree: 更新了通过Element.remove方法未找到要移除的元素时的错误消息。由 Bénédikt Tran 提供补丁。gh-115942: 添加
threading.RLock.locked()、multiprocessing.Lock.locked()、multiprocessing.RLock.locked(),并允许multiprocessing.managers.SyncManager.Lock()和multiprocessing.managers.SyncManager.RLock()代理locked()调用。gh-107369: 通过Adam Turner的补丁,
textwrap.indent()的性能平均提高了约1.3倍。gh-131792: 通过Adam Turner、Marius Juston和Pieter Eendebak的补丁,
textwrap.dedent()的性能平均提高了约2.4倍(对于大输入,提升可达4倍),并修复了一个错误,其中包含空格或水平制表符以外的空白字符的空白行未被标准化为换行符。gh-60115: 为
linecache.getline()支持冻结模块。gh-131492: 修复当构造
gzip.GzipFile发生文件名错误,例如传入无效的compresslevel时的资源泄漏问题。gh-131435:
random.randint()的性能提高了10-20%。gh-131461: 修复了在写入模式下构建
gzip.GzipFile时,如果文件对象损坏会发出ResourceWarning的问题。gh-125866: 弃用
nturl2path模块。改为调用urllib.request.url2pathname()和pathname2url()。gh-126367: 修复了
urllib.request.url2pathname()在给定包含不遵循驱动器号的冒号字符(如NTFS备用数据流前的冒号)的Windows URI时会引发OSError的问题。gh-120144: 在不需要代码对象上的任何新事件以获得更好性能时,禁用
bdb中``monitoring``后端的CALL事件。gh-131358: 将
cseuckr注册为euc_kr的编码别名。gh-90548:
platform.libc_ver()现在可以检测并报告Alpine Linux上musl的版本。gh-129843: 修复
warnings.warn_explicit()中不正确的参数传递问题。gh-130914: 允许
graphlib.TopologicalSorter.prepare()在排序未开始时被多次调用。补丁由Daniel Pope提供。gh-131236: 允许通过
python -m uuid --count一次性生成多个UUID。gh-126895: 修复
readline在 free-threaded 构建中的问题。gh-121468:
$_asynctask被添加为pdb的一个便利变量,用于访问当前的 asyncio 任务(如果适用)。gh-129598: 修复当
ast.Interactive包含多个语句时的ast.unparse()函数。gh-85162:
http.server模块现在包含了对由http.server.HTTPSServer暴露的 HTTPS 服务器的内置支持。这一功能通过命令行接口(python -m http.server)的--tls-cert、--tls-key和--tls-password-file选项暴露。由 Semyon Moroz 提供补丁。gh-129463:
annotationlib.ForwardRef的等式和哈希实现现在使用对象上的所有属性。两个ForwardRef对象只有在所有属性都相等时才相等。gh-128593:
annotationlib.ForwardRef对象在成功评估后不再缓存其值。对annotationlib.ForwardRef.evaluate()的连续调用可能会返回不同的值。gh-117779: 通过名称修复读取
zipfile中的重复条目。通过ZipInfo读取重复条目(最后一个除外)现在会发出警告而不是抛出异常。gh-128715:
Structure/Union字段描述符的类现在可以作为CField使用,并且具有新的属性以帮助调试和内省。gh-128055: 修复在构建目录外运行时(例如安装后)的
test.test_sysconfig.test_sysconfigdata_json。gh-126037:
xml.etree.ElementTree: 修复了当要查找的标签实现了__eq__()方法并改变了被查询元素时,Element.find、Element.findtext和Element.findall的崩溃问题。由 Bénédikt Tran 提供补丁。gh-127794: 当通过
email.message.Message.__setitem__()或email.message.Message.add_header()向email.message.Message对象添加头信息时,现在会根据 RFC 5322, Section 2.2 验证字段名称,如果字段名称包含任何无效字符,则会抛出ValueError。gh-123599: 弃用
pathlib.PurePath.as_uri();改用pathlib.Path.as_uri()。gh-126033:
xml.etree.ElementTree: 修复了当元素被并发修改时Element.remove的崩溃问题。由 Bénédikt Tran 提供补丁。gh-74598: 添加
fnmatch.filterfalse()用于排除匹配模式的名称。由 Bénédikt Tran 提供补丁。gh-114917: 在 getaddrinfo 模拟中添加对 AI_NUMERICSERV 的支持
bpo-17254: 为使用微软代码页的泰语添加了别名。
文档¶
gh-131417: 在泛型类列表中提及
asyncio.Future和asyncio.Task。
核心与内置函数¶
gh-131798: 通过将返回类型设置为 bool,允许 JIT 在
_CONTAINS_OP_SET后移除一个额外的_TO_BOOL_BOOL指令。gh-132011: 修复在将
list.append()作为未绑定方法调用时的崩溃问题。gh-131998: 修复了在函数中使用未绑定方法 descriptor 对象时的崩溃问题,该函数中使用了绑定方法描述符。
gh-131591: 实现 PEP 768 (CPython的安全外部调试器接口)。在
sys模块中添加一个新的sys.remote_exec()函数。此函数安排在一个单独的进程中执行一个Python文件。由Pablo Galindo、Matt Wozniski和Ivona Stojanovic提供补丁。gh-131798: 当字符串类型已知时,允许JIT在真值测试中省略字符串守卫。
gh-131833: 根据 PEP 758,添加支持在使用多个异常类型时可选地删除分组括号。由Pablo Galindo提供补丁
gh-130924: 在函数作用域注解中使用一个名称不再触发为该变量创建单元格。这修复了Python 3.14早期alpha版本中的一个回归问题。
gh-131800: 提高实验性JIT为某些下标操作移除类型检查的能力。
gh-131738: 编译器为内置的any/all/tuple调用生成优化代码,这些调用针对生成器表达式。
gh-131719: 修复 free-threaded 构建中
_PyMem_FreeDelayed缺少NULL检查的问题。gh-131670: 修复
anext()在同步__anext__()抛出异常时失败的问题。gh-131666: 修复
anext_awaitable.close对象的签名。由Bénédikt Tran提供补丁。gh-130415: 在JIT构建中优化两个常量的比较
gh-129149: 在
PyLong_FromInt32(),PyLong_FromUInt32(),PyLong_FromInt64()和PyLong_FromUInt64()中添加对小和中型整数的快速路径。由Chris Eibl提供补丁。gh-130887: 优化JIT的AArch64代码生成。由Diego Russo提供补丁
gh-130956: 优化JIT的AArch64代码生成。由Diego Russo提供补丁
gh-130928: 修复使用
'i'标志格式化字节时的错误消息。由Maxim Ageev提供补丁。gh-130935: 现在,只有在执行它们所在的块时,条件定义的类和模块级别的注解才会反映在
__annotations__中。由Jelle Zijlstra提供补丁。gh-130704: 优化
LOAD_FAST及其超级指令形式以减少引用计数开销。当我们可以证明帧中的引用比加载到堆栈上的引用更持久时,这些指令被替换为更快的变体,将借用引用加载到操作数堆栈上。gh-88887: 修复多处理资源跟踪器进程泄漏问题,通常在作为PID 1运行Python时观察到。
gh-130115: 修复在某些平台上线程标识符被符号扩展的问题。
库¶
核心与内置函数¶
C API¶
构建¶
gh-131865: 当在Linux上使用SystemTap时,DTrace构建现在正确地将
CC和CFLAGS变量传递给dtrace命令。gh-131675: 修复32位ARM目标的mimalloc库构建。
gh-131691: Windows上的clang-cl需要选项
/EHa以正确支持SEH(结构化异常处理)。由Chris Eibl修复。gh-131278: 为Windows构建添加优化标志
WITH_COMPUTED_GOTOS,以便在使用支持它的编译器(当前为clang-cl)时使用。由Chris Eibl提供补丁。gh-130213: 更新捆绑的HACL*库以修复与旧版clang编译器的构建问题。
gh-130673: 修复在 JIT 构建过程中处理对象部分时潜在的
KeyError。
Python 3.14.0 alpha 6¶
发布日期: 2025-03-14
macOS¶
gh-128540: 确保在 macOS 上通过
webbrowser.open()启动网页浏览器,即使是file://URL。
Windows¶
gh-131020: pylauncher 在搜索 shebang 行时能正确检测 BOM。 由 Chris Eibl 修复。
工具/示例¶
gh-130453: 使得在 pygettext 中覆盖默认关键词成为可能。
gh-85012: 在编译 msgfmt 中的消息时能正确地重置
msgctxt。gh-130453: 扩展支持在 pygettext 中指定自定义关键词。
gh-130195: 当调用
pygettext未实现的-a/--extract-all选项时添加警告信息。gh-130057: 在 pygettext.py 中添加对翻译者注释的支持。
gh-130025: 现在 iOS testbed 可正确地处理被用作 Python 框架引用的符号链接。
gh-129911: 修复 pygettext 帮助输出中的关键词条目。
测试¶
安全性¶
gh-127371: 避免了对
tempfile.SpooledTemporaryFile.writelines()的无限缓冲。 在之前版本中,磁盘溢出仅并在行迭代器已耗尽之后才会被检查。 现在在每行写入之后都会进行。
库¶
gh-131204: 在
difflib.HtmlDiff中将使用来自 System Font Stack 的等宽字体以提供跨平台支持。for cross-platform support .gh-131196: 提高
uuid.UUID.hex和uuid.UUID.__str__的性能。gh-130940: 修改了
PyConfig.use_system_logger的行为,在 iOS 上默认启用。在 macOS 上默认仍为禁用。gh-93096: 移除了未记录的 CLI
python -m difflib。改用python -m doctest Lib/difflib.py -v。由 Semyon Moroz 提供补丁。gh-93096: 移除了
python -m pickle的未记录-t和-v参数。改用python -m doctest Lib/pickle.py -v。由 Semyon Moroz 提供补丁。gh-81267: 当提供无法解释为整数或浮点的对象时,更正
time.sleep()的错误消息。gh-93096: 移除了
python -m pickletools的未记录-t和-v参数。改用python -m doctest Lib/pickletools.py -v。由 Semyon Moroz 提供补丁。gh-130959: 修复了
datetime.time.fromisoformat()的纯 Python 实现以拒绝小数部分带有空格的时间值 (例如12:34:56.400 +02:00),以与 C 实现相匹配。 由 Michał Gorny 提供补丁。gh-130806: 在
gzip.GzipFile关闭之前删除它现在会发出ResourceWarning。gh-130637: 在 poplib.POP3.stat() 方法中添加对数值响应数据的验证
gh-130665: 仅在通过
--locale设置而非LANG环境变量时,将区域设置应用于 calendar CLI。gh-130660: 在调用
code.interact()后,现在会恢复sys.ps1和sys.ps2。gh-130608: 从
pathlib.Path.copy()和copy_into()中移除了 dirs_exist_ok 参数。这些方法是 Python 3.14 中新增的。gh-130461: 从
uuid模块文档中移除了.. index::指令。这些指令之前为getnode()以及uuid1()、uuid3()、uuid4()、uuid5()和uuid8()构造函数在通用索引中创建了条目。gh-130379: zipapp 模块现在在创建存档之前计算要添加到存档中的文件列表。这避免了当目标在源目录中创建时意外包含它。
gh-82987: 像
breakpoint()或pdb.set_trace()这样的内联断点将始终在调用帧处停止程序,忽略skip模式(如果有的话)。gh-125377: 在
pdb多行输入中,行首的<tab>现在会填充 4 个空格的缩进,而不是插入一个\t字符。gh-125413: 确保从
pathlib.Path.copy()或move()返回的路径具有新鲜的info。gh-65697: 标准库 configparser 现在会尝试验证其写入的键不会导致文件损坏(创建的文件无法被同一解析器的未来 read() 调用准确解析)。尝试进行损坏的 write() 将引发 InvalidWriteError。
gh-130285: 修复了
random.sample()的一个边缘情况,允许 counts 参数指定一个空的总数。现在,sample([], 0, counts=[])和sample('abc', k=0, counts=[0, 0, 0])都会给出与sample([], 0)相同的结果。gh-124703: 在交互式控制台中使用
breakpoint()或pdb.set_trace()启动pdb时,执行quit命令会引发bdb.BdbQuit。gh-107773: 使
datetime子类的__repr__()在两个实现中保持一致。补丁由 Semyon Moroz 提供。gh-130250: 修复
traceback.print_last()中的回归问题。gh-123471: 在自由线程下使
itertools.batched的并发迭代安全。gh-127750: 改进
functools.singledispatchmethod方法和描述符的 repr。gh-128520: 在
pathlib.PurePath和Path方法中一致应用类型转换,可以接受路径对象作为参数,如match()和rename()。如果参数缺少with_segments()属性,现在会将其转换为路径对象,否则不会。gh-118761: 撤销上一个版本中的更改,该更改尝试使
subprocess模块内使用的一些 stdlib 导入变为懒加载,因为这会导致在__del__终结器中调用诸如terminate、kill或send_signal等方法时出现错误。gh-130164: 修复了当存在可变关键字参数 (即
**kwargs) 时在inspect.Signature.bind()中以关键字形式提供仅限位置参数不会引发TypeError的问题。gh-130151: 修复
_hashlib.hmac_new()和_hashlib.hmac_digest()中的引用泄漏。由 Bénédikt Tran 提供补丁。gh-130145: 修复当另一个循环已经在运行时
asyncio.AbstractEventloop.run_forever()的问题。gh-130139: 修复当调用 optimize=False 时,
ast.parse()对不正确类型的 AST 输入未报错的 bug。gh-127260: 禁止使用冒号(":")作为分数分隔符,并改进
datetime.time.fromisoformat()和datetime.datetime.fromisoformat()的C和Python实现之间错误抛出的一致性。由Semyon Moroz提供补丁。gh-85795: 现在在运行时明确禁止在
typing.NamedTuple子类的用户定义方法中使用super()和__class__闭包变量`。由Bartosz Sławecki在 gh-130082 中贡献。gh-118761: 通过懒加载
inspect和移除string来提高cmd的导入时间。补丁由Semyon Moroz提供。gh-129726: 通过使用
weakref打破引用循环,修复gzip.GzipFile在垃圾收集时引用临时对象抛出无法处理的异常的问题。gh-127750: 移除在 gh-85160 中引入的有问题的
functools.singledispatchmethod()缓存。通过不同的优化实现相同的性能。gh-129948: 通过
SyncManager.set()为multiprocessing.managers.SyncManager添加对共享set的支持。gh-129965: 更新
.avi和.wav的MIME类型。为.docx、.pptx、.xlsx、.epub、.flac、.m4a、.odg、.odp、.ods、.odt、.oga、.ogg、.ogx``和 ``.weba添加MIME类型。由Hugo van Kemenade提供补丁。gh-129889: 通过
contextvars.Token支持上下文管理器协议。补丁由Andrew Svetlov提供。gh-97850: 更新
importlib.abc.Loader.load_module()的弃用警告。gh-129678:
configparser.ConfigParser: 不写入未命名的空节gh-129569: 修复
unicodedata.normalize(),使其在输入为str子类时,无论字符串是否已经规范化,总是返回一个内置的str对象。gh-128231: 在新的REPL中执行多条语句时,现在会在遇到第一个异常时立即停止。由Bartosz Sławecki提交补丁。
gh-96092: 修复了当使用None调用
traceback.walk_stack()时,它跳过的帧比之前版本多的bug。这个错误修复还改变了walk_stack的行为,使其在调用它的帧中遍历堆栈,而不是在它首次被使用的地方。gh-129288: 向
socketBTPROTO_L2CAPsockaddr元组添加了可选的l2_cid和``l2_bdaddr_type`` 字段。gh-128703: 修复
mimetypes.guess_type()在注册表中对空的Content-Type使用默认映射。gh-128647: 急切地写入传递给
gzip.GzipFile的readinto()和readinto1()实现的缓冲区,避免不必要的分配。由Chris Markiewicz提交补丁。gh-128184: 改进了
annotationlib.ForwardRef对象在inspect.Signature表示中的显示。这也修复了在使用dataclasses.dataclass()对具有不可解析前向引用的类时引发的NameError。gh-128041: 添加了
concurrent.futures.ProcessPoolExecutor.terminate_workers()和concurrent.futures.ProcessPoolExecutor.kill_workers()作为终止或杀死给定池中所有存活工作进程的方法。(由Charles Machalow在 gh-130849 中贡献。)gh-127647: 添加了协议
io.Reader和io.Writer作为typing.IO、typing.TextIO和typing.BinaryIO的替代品。gh-109798: 在
datetime的错误消息中添加了额外信息,并使C和Python实现之间的消息更加一致。由Semyon Moroz提交补丁。gh-125746: 将已被弃用的
zipimport.zipimporter.load_module()移除时间推迟到 3.15。 请改用zipimport.zipimporter.exec_module()。gh-74028: 为
concurrent.futures.Executor.map()添加了可选的buffersize参数,以限制尚未产生结果的已提交任务的数量。如果缓冲区已满,对 iterables 的迭代将暂停,直到从缓冲区产生一个结果。gh-124927: 现在在新的 REPL 中正确处理非打印字符。
gh-124096: 在 Windows 控制台的 REPL 中开启虚拟终端模式并启用括号粘贴。(如果终端不支持括号粘贴,启用它不会有任何效果。)
gh-89083: 添加
uuid.uuid7()以生成 RFC 9562 中指定的 UUIDv7 对象。由 Bénédikt Tran 提供补丁。gh-89083: 添加
uuid.uuid6()以生成 RFC 9562 中指定的 UUIDv6 对象。由 Bénédikt Tran 提供补丁。gh-117151: 将
io.DEFAULT_BUFFER_SIZE从 8k 增加到 128k,并在os.fstat()提供st_blksize字段的平台(如 Linux)上调整open(),使用max(min(blocksize, 8 MiB), io.DEFAULT_BUFFER_SIZE)而不是总是使用设备块大小。这应该能提高 I/O 性能。由 Romain Morotti 提供补丁。gh-105499: 使
types.UnionType成为typing.Union的别名。现在int | str和Union[int, str]都创建相同类型的实例。由 Jelle Zijlstra 提供补丁。gh-93096: 记录了
mimetypes的命令行。现在在失败时退出码为1而不是0,在命令行参数不正确时退出码为2而不是1。此外,错误信息被打印到 stderr 而不是 stdout,并且它们的文本更加紧凑。由 Oleg Iarygin 和 Hugo van Kemenade 提供补丁。
文档¶
gh-125722: 构建 Python 文档需要 Sphinx 8.2.0 或更高版本。由 Adam Turner 提供补丁。
gh-129712: 现在记录了每个 macOS 通用 SDK 选项支持的 wheel 标签。
gh-46236: C API: 文档化了
PyUnicode_RSplit()、PyUnicode_Partition()和PyUnicode_RPartition()。
核心与内置函数¶
gh-131141: 修复在注册回调时
sys.monitoring插桩中的数据竞争问题。gh-130804: 修复新REPL中在Windows上对Unicode字符的支持问题。
gh-130932: 修复
_PyModule_IsPossiblyShadowing中错误的异常处理gh-122029:
sys.setprofile()和sys.settrace()不会为INSTRUMENTED_CALL_FUNCTION_EX生成c_call事件,如果可调用对象是一个包装了C函数的方法,因为在这种情况下我们不会生成c_return事件。gh-129964: 修复Windows on Arm上的JIT崩溃问题。由Diego Russo和Brandt Bucher提供补丁。
gh-130851: 修复在 free threading 构建中,当构造一个包含非字节码编译器生成类型实例的
co_consts的code对象时的崩溃问题。gh-128534: 确保
async for循环的左右分支具有相同的源。将这些分支添加到co_branches()迭代器中。gh-130415: 提高JIT对布尔上下文中整数的理解能力。
gh-130382: 修复从
Python/ceval.cPy_DECREF()中未发送PyRefTracer_DESTROY的问题。gh-124878: 修复运行时结束期间可能导致访问已释放内存的竞争条件。
gh-130415: 提高实验性JIT基于真值测试结果缩小布尔值范围的能力。
gh-130618: 修复一个在使用带有非ASCII字符的
lambda表达式的f-字符串时引发UnicodeDecodeError或SystemError的bug。由Pablo Galindo提供补丁gh-123044: 确保
match情况中分支目标的位置在主体中,而不是在模式中。gh-128534: 为
async for循环添加分支监控(BRANCH_LEFT和BRANCH_RIGHT事件)。gh-122029:
INSTRUMENTED_CALL_KW将在监控之前扩展方法,以更准确地反映实际行为。gh-130415: 提高JIT在布尔上下文中优化字符串的能力。
gh-130396: 在确定C栈保护的限制时,对于linux和其他定义了
_GNU_SOURCE的系统,使用实际的栈限制(来自 pthread_getattr_np(3))。gh-128396: 修复在内联理解中调用
locals()时发生的崩溃,该内联理解使用了与外部框架作用域相同的局部变量,其中变量是自由或单元变量。gh-129107: 为 free threading 修复两个更多的
bytearray函数。gh-127705: 为默认构建以及自由线程构建使用标记引用(
_PyStackRef)。这在短期内会对性能有小的负面影响,但将来会实现更大的速度提升,并通过允许将来标记引用的单一实现显著降低维护成本。gh-130094: 修复涉及并发导入的两个竞态条件,这些条件可能导致与
ModuleNotFoundError相关的虚假失败。gh-129107: 使
bytearray迭代器在 free threading 下安全。gh-115802: 在支持的平台上,为JIT编译的代码使用更高效的“中等”代码模型。
gh-107956: 现在在平台无关的标准库目录中安装了一个
build-details.json文件(PEP 739 实现)。gh-116042: 修复标记器中无效转义的SyntaxErrors的位置。由Pablo Galindo提供补丁
gh-91079: 更改C栈溢出保护以考虑栈消耗量,而不是计数器。这在许多情况下允许更深的递归,但仍然保持安全。
gh-129715: 改进实验性JIT对返回到未知调用者的处理。
库¶
gh-129983: 修复
sre.c中compile_template的数据竞争。
核心与内置函数¶
gh-129967: 修复了在 free threading 构建中,当
repr(set)与set.clear()并发调用时出现的竞态条件。gh-129953: 现在每当执行从解释器或JIT编译代码中逃逸时,内部(评估)栈会被溢出到内存。这在Python或内置扩展中不应有可观察的影响,但将为未来各种重要的优化创造条件。
gh-129349:
bytes.fromhex()和bytearray.fromhex()现在接受ASCIIbytes和 字节类对象。gh-129149: 在
PyLong_FromSsize_t()中添加了对中等大小整数的快速路径。由Chris Eibl提供补丁。gh-129107: 使
bytearray在 free threading 下安全。gh-128974: 修复了当自定义属性通过带有副作用的
__str__()实现时,在UnicodeError.__str__中发生的崩溃。由Bénédikt Tran提供补丁。gh-126085:
typing.TypeAliasType现在支持星号解包。gh-125331:
from __future__ import barry_as_FLUFL现在在更多上下文中工作,包括在文件中使用、使用-c标志以及在REPL中同一行有多个语句时。以前,它仅在REPL的后续行中工作,并且在适当的标志直接传递给compile()时。由Pablo Galindo提供补丁。gh-121464: 使同一
enumerate()迭代器的并发迭代在自由线程下安全。参见` 自由线程中的迭代器策略 <https://github.com/python/cpython/issues/124397>`_。gh-87790: 在新式字符串格式化的浮点数表示类型中(使用
format()或 f-字符串),支持下划线和逗号作为千位分隔符。由Sergey B Kirpichev提供补丁。gh-124445: 修复对
typing.ParamSpec泛型且用嵌套类型变量特化的泛型别名的特化。gh-120608: 为自由线程构建适配
reversed()。reversed()在并发迭代可能看到同一对象的意义上仍非线程安全,但不会破坏解释器状态。
库¶
gh-100388: 当
__DATE__在构建时未定义时,通过将默认构建时间日期字符串改为UNIX纪元来修复platform._sys_version()方法。
核心与内置函数¶
bpo-44369: 改进错误关闭字符串的语法错误。由Pablo Galindo提供补丁。
C API¶
gh-111178: 修复
PyCMethodAPI:在PyCMethod中用Py_ssize_t nargs替换size_t nargs。由Victor Stinner提供补丁。gh-130947: 再次将
PySequence_Fast()添加到有限的C API中。补丁由Victor Stinner提供。gh-128863: 以下私有函数已被弃用并计划在Python 3.18中移除:
_PyUnicodeWriter_Init(): 将_PyUnicodeWriter_Init(&writer)替换为writer = PyUnicodeWriter_Create(0)。_PyUnicodeWriter_Finish(): 将_PyUnicodeWriter_Finish(&writer)替换为PyUnicodeWriter_Finish(writer)。_PyUnicodeWriter_Dealloc(): 将_PyUnicodeWriter_Dealloc(&writer)替换为PyUnicodeWriter_Discard(writer)。_PyUnicodeWriter_WriteChar(): 将_PyUnicodeWriter_WriteChar(&writer, ch)替换为PyUnicodeWriter_WriteChar(writer, ch)._PyUnicodeWriter_WriteStr(): 将_PyUnicodeWriter_WriteStr(&writer, str)替换为PyUnicodeWriter_WriteStr(writer, str)。_PyUnicodeWriter_WriteSubstring(): 将_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)替换为PyUnicodeWriter_WriteSubstring(writer, str, start, end)。_PyUnicodeWriter_WriteASCIIString(): 将_PyUnicodeWriter_WriteASCIIString(&writer, str)替换为PyUnicodeWriter_WriteUTF8(writer, str)。_PyUnicodeWriter_WriteLatin1String(): 将_PyUnicodeWriter_WriteLatin1String(&writer, str)替换为PyUnicodeWriter_WriteUTF8(writer, str)。_PyUnicodeWriter_Prepare(): (无替代)。_PyUnicodeWriter_PrepareKind(): (无替代)。
在 Python 3.13 和更旧的版本中可以使用 pythoncapi-compat 项目 来获取这些新的公有函数。
由Victor Stinner提供补丁。
gh-45325: 向
Py_BuildValue()添加一个新的p格式参数,允许获取C整数并生成Pythonbool对象。由Pablo Galindo提供补丁。
构建¶
gh-131035: 在Windows上使用clang-cl时,使用
-flto=thin以加快构建时间。由Chris Eibl提供补丁。gh-130740: 确保
Python.h``在 ``stdbool.h之前被包含,除非pyconfig.h在此之前被包含或在某些特定平台上下文中。gh-130090: 在Windows上使用
PlatformToolset=ClangCL构建时,现在支持PGO(性能引导优化)。由Chris Eibl提供补丁,得到Steve Dover的宝贵支持。gh-129819: 允许使用尾调用解释器构建JIT。
gh-129989: 修复一个bug,其中当向配置脚本提供
--without-tail-call-interp时,尾调用解释器被启用。gh-129838: 当使用最近的GCC版本和启用未定义消毒器编译时,不重新定义``_Py_NO_SANITIZE_UNDEFINED``。
gh-82909: 现在可以通过 Py_NO_LINK_LIB 关闭基于
#pragma的与python3*.lib的链接。由 Jean-Christophe Fillion-Robin 提供补丁。
Python 3.14.0 alpha 5¶
发布日期:2025-02-11
macOS¶
gh-91132: 更新 macOS 安装程序以使用 ncurses 6.5。
工具/示例¶
测试¶
安全性¶
gh-105704: 当使用
urllib.parse.urlsplit()和urllib.parse.urlparse()时主机解析将不会拒绝包含方括号 ([和]) 的主机名。 根据 RFC 3986 第 3.2.2 节 方括号仅适用于 IPv6 和 IPvFuture 主机。gh-126108: 修正了
PySys_AddWarnOptionUnicode()中的一个可能的NULL指针解引用。gh-80222: 修复在使用现代电子邮件策略扁平化电子邮件消息时引用字符串折叠的错误。之前,当一个引用字符串被折叠以至于跨越多行时,周围的引号和内部转义将被省略。理论上,如果生成的渲染电子邮件被传输或重新解析,这可能会被用来使用精心构造的引用字符串欺骗标题行。
gh-119511: 修复
imaplib模块中潜在的拒绝服务问题。当连接到恶意服务器时,可能导致分配任意数量的内存。在许多系统上,这是无害的,因为未使用的虚拟内存只是一个映射,但如果这达到了虚拟地址大小限制,可能会导致MemoryError或其他进程崩溃。在不寻常的系统或构建中,所有分配的内存都被触及并由实际 RAM 或存储支持,这可能会消耗资源,直到类似崩溃。
库¶
gh-129939: 由
difflib.HtmlDiff类生成的带有高亮更改的比较页面现在支持暗模式。gh-129928: 如果创建了参数数量无效的用户自定义SQL函数,则引发
sqlite3.ProgrammingError。由Erlend Aasland提供补丁。gh-129583: 将捆绑的pip更新至25.0.1版本
gh-129766: 修复在调用
_release_lock()时无现有锁的情况下warnings模块崩溃的问题。gh-129005:
_pyio.FileIO.readall()现在使用与_io.FileIO.readall()相同的算法来分配、调整大小和填充数据缓冲区。gh-129646: 更新
locale模块中的语言区域别名映射以匹配最新的 X Org 语言区域别名映射并支持 Glibc 2.41 中的新增语言区域。gh-128317: 将CLI日历高亮放入私有类中,从公共
calendar.TextCalendarAPI中移除highlight_day。由Hugo van Kemenade提供补丁。gh-129603: 修复当继承的
description被设置为None时sqlite3.Row对象可能导致的段错误。由Erlend Aasland提供补丁。gh-129559: 添加
bytearray.resize()方法,以便可以高效地原地调整bytearray的大小。gh-129502: 在准备
ctypes回调参数时不太可能发生的错误现在以与回调中引发的错误或在转换回调结果时的错误相同的方式处理——使用sys.unraisablehook()而不是sys.excepthook(),并且不设置sys.last_exc和其他变量。gh-129403: 修正了用于
asyncio.Barrier和threading.Barrier的ValueError消息。gh-126400: 向
logging.handlers.SysLogHandler添加一个套接字 timeout 关键字参数。gh-118761: 在
threading中总是延迟导入warnings。由Taneli Hukkinen提供补丁。gh-118761: 通过惰性导入
locale和signal提升了subprocess的导入速度。 由 Taneli Hukkinen 提供补丁。gh-129005: 通过使用
os.readinto()避免不必要的对象和复制来优化_pyio.FileIO.readinto。gh-129195: 支持从
asyncio.staggered.staggered_race()报告调用图信息。gh-129205: 添加
os.readinto()以从文件描述符读取到 buffer object 中。gh-129061: 修复FORCE_COLOR和NO_COLOR当为空字符串时的问题。由Hugo van Kemenade提供补丁。
gh-92897: 计划在Python 3.15中弃用
sysconfig.is_python_build()的check_home参数。gh-129064: 弃用
sysconfig.expand_makefile_vars(),推荐使用带有vars参数的sysconfig.get_paths()。gh-128550: 移除了
asyncio.TaskGroup中关于急切任务的不正确优化,该优化导致取消操作被忽略。gh-118761: 通过移除对
typing的不必要导入,将pstats和zipfile的导入时间减少高达20%。由Bénédikt Tran提供补丁。gh-128978: 修复
sysconfig.expand_makefile_vars()中的NameError。由Bénédikt Tran提供补丁。gh-128961: 修复在设置耗尽的
array.array迭代器状态时的崩溃问题。gh-128894: 修复
traceback.TracebackException._format_syntax_error在包含自定义元数据的异常上不失败的问题。gh-128916: 不尝试在
AF_INET和AF_INET6之外的地址族套接字上设置SO_REUSEPORT,因为这对这些地址族来说毫无意义,并且在Linux内核6.12.9及更新版本中调用会失败。gh-118761: 通过移除
typing、string和tomllib._types的导入,提高tomllib的导入速度。由Taneli Hukkinen提供补丁。gh-128679:
tracemalloc: 当一个线程调用tracemalloc.stop()时,而其他线程正在跟踪内存分配,修复了竞争条件。由Victor Stinner提供补丁。gh-128891: 向
opcode.opname添加专门的操作码。gh-118761: 通过按需导入
re,将gettext的导入时间减少多达十倍。特别是,re不再隐式暴露为gettext.re。由Eli Schwartz提供补丁。gh-128657: 修复在使用 free threading 下由
hashlib.sha256()返回的对象时可能出现的额外引用问题。gh-118761: 通过按需导入
re,将csv的导入时间最多减少五倍。特别地,re不再隐式暴露为csv.re。由 Bénédikt Tran 提供补丁。gh-128308: 通过将所有 kwargs 传递给由
asyncio.loop.set_task_factory()设置的任务工厂,支持asyncio.loop.create_task()、asyncio.create_task()和asyncio.TaskGroup.create_task()中急切任务的 name 关键字参数。gh-118761: 通过更有效地检查字节字符串是否为十六进制数字,将
base64.b16decode()的性能最多提高十倍。通过不再导入re,将base64的导入时间最多减少六倍。由 Bénédikt Tran、Chris Markiewicz 和 Adam Turner 提供补丁。gh-128156: 当使用 macOS 系统的
libffi时,ctypes中对复杂类型的支持现在在运行时检查(macOS 10.15 或更新版本)。这些类型也必须在构建时可用。gh-128636: 修复当
os.environ被无效值覆盖时的 PyREPL 错误。gh-128498: 颜色检测信息默认发往 stdout isatty 而非 stderr。 由 Hugo van Kemenade 提供补丁。
gh-128384: 向
warnings添加锁定以避免在使用自由线程时出现一些数据竞争。将_warnings_runtime_state.mutex更改为递归互斥锁,并通过_acquire_lock()和_release_lock()函数将其暴露给warnings。在更新filters和_filters_version时持有锁。gh-128509: 添加
sys._is_immortal()用于在运行时识别 immortal 对象。gh-128479: 修复
asyncio.staggered.staggered_race()泄露任务和发出未处理异常的问题。gh-128427:
uuid.NIL和uuid.MAX现在可用于表示由 RFC 9562 定义的 Nil 和 Max UUID 格式。gh-91279:
zipfile.ZipFile.writestr()现在尊重SOURCE_DATE_EPOCH,发行版可以集中设置此变量,构建工具可以消费此变量以产生可重现的输出。gh-112064: 修复
HTTPResponse.read中负读取大小的错误处理。由 Yury Manushkin 提供补丁。gh-128131: 完全支持通过
ZipFile.open获取的未压缩未加密只读 zip 文件的随机访问。gh-127975: 在
ast.unparse()中避免不必要地重复使用引号类型。gh-115514: 修复了在
asyncio._SelectorTransport关闭前未完成写入时的异常和不完整写入问题。gh-121604: 为
importlib.machinery.DEBUG_BYTECODE_SUFFIXES、importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES、importlib.machinery.WindowsRegistryFinder、importlib.abc.ResourceLoader、importlib.abc.SourceLoader.path_mtime()添加缺失的弃用警告。gh-127873: 当设置
-E时,仅在颜色化输出时忽略PYTHON_COLORS,而不忽略FORCE_COLOR/NO_COLOR/TERM。由 Hugo van Kemenade 提供补丁。gh-125413: 添加
pathlib.Path.info属性,该属性存储了一个实现pathlib.types.PathInfo协议的对象(也是新增的)。该对象支持查询文件类型并在内部缓存stat()结果。通过iterdir()生成的 Path 对象会使用从扫描父目录中获取的文件类型信息进行初始化。gh-127712: 修复了
logging.handlers.SMTPHandler的secure参数的处理问题。gh-127096: 在
configparser.ConfigParser中不每次读取时重新创建未命名节。由 Andrey Efremov 提供补丁。gh-124369: 弃用
pdb.Pdb.curframe_localsgh-126332: 修复了在溢出行上输入双重 CTRL-Z 时 _pyrepl 崩溃的问题。
gh-125553: 修复了
tokenize.untokenize()中反斜杠续行的往返不变性问题。gh-91048: 添加
asyncio.capture_call_graph()和asyncio.print_call_graph()函数。gh-123987: 修复了NamespaceReader中的问题,其中命名空间路径中的非路径项(如可编辑安装程序添加的标记)会破坏资源加载。
gh-119349: 添加了
ctypes.util.dllist()函数,用于列出当前进程加载的共享库。gh-119257: 在当前行下方显示标签补全菜单,这减少了不稳定的行为,并修复了一个光标移动的bug。由Daniel Hollas提供补丁。
gh-101410: 在
math模块中支持域错误的自定义消息(修改了math.sqrt()、math.log()和math.atanh()作为示例)。由Charlie Zhao和Sergey B Kirpichev提供补丁。gh-81340: 默认在
shutil.copy()、shutil.copy2()和shutil.copyfile()函数中使用os.copy_file_range()。底层的Linux系统调用为文件系统提供了实现写时复制(对于btrfs和XFS)或服务器端复制(对于NFS)的机会。由Illia Volochii提供补丁。bpo-27307: 在自动编号模式下向
string.Formatter添加属性和项访问支持,这允许格式字符串如'{.name}'和'{[1]}'。
IDLE¶
gh-129873: 通过仅将idle.html的文本部分复制到idlelib/help.html来简化IDLE文档的显示。补丁由Stan Ulbrych提供。
文档¶
gh-125722: 要求Sphinx 8.1.3或更高版本来构建Python文档。由Adam Turner提供补丁。
gh-67206: 记录了
string.printable在 POSIX 下的不可打印字符。 特别地,string.printable.isprintable()将返回False。 由 Bénédikt Tran 提供补丁。
核心与内置函数¶
gh-100239: 用带有oparg NB_SUBSCR的BINARY_OP替换操作码BINARY_SUBSCR及其家族。
gh-129732: 修复自由线程构建版
_Py_qsbr_reserve中的竞争问题。gh-129715: 提高了生成器的JIT性能。
gh-129643: 修复自由线程构建版中
PyList_Insert()的线程安全问题。gh-129668: 修复自由线程构建版中当引发
MemoryError时的竞争条件问题。gh-129643: 修复自由线程构建版中
PyList_SetItem()的线程安全问题。 由 Kumar Aditya 提供补丁。gh-128563: 修复了一个问题,其中"lltrace"调试功能可能被错误地启用于某些帧。
gh-129393: 在FreeBSD上,
sys.platform不再包含主版本号。它总是'freebsd',而不是'freebsd13'或'freebsd14'。
库¶
gh-129345: 修复当审计钩子引发异常时
syslog.openlog()中的空指针解引用问题。
核心与内置函数¶
gh-129231: 优化 JIT 跟踪的内存布局。由 Diego Russo 提供补丁
gh-129149: 在
PyLong_FromUnsignedLong()、PyLong_FromUnsignedLongLong()和PyLong_FromSize_t()中添加对中等大小整数的快速路径。gh-129201: 自由线程版本的循环垃圾回收器已优化,条件性地在回收过程中使用 CPU 预取指令。这通过增加数据在需要时位于 CPU 缓存中的可能性,可以减少回收时间。如果长寿命对象(在完整回收后存活的对象)数量超过阈值,则启用预取指令。
gh-129093: 修复像
f'{expr=}'这样的 f-字符串在表达式包含!=时有时不显示完整表达式的问题。gh-124363: 将 f-string 中的调试表达式视为原始字符串。由 Pablo Galindo 提供补丁
gh-128714: 修复函数对象的 get/set 魔术方法
__annotations__、__annotate__和__type_params__中的潜在竞争条件,并添加相关测试。gh-128799: 当
except*包装裸异常时,将其框架添加到回溯中。gh-128842: 使用 pystats 收集 JIT 内存统计信息。由 Diego Russo 提供补丁。
gh-100239: 为紧凑整数的位逻辑操作专门化
BINARY_OP。gh-128910: 移除未文档化且未使用的私有 C-API 函数
_PyTrash_begin和_PyTrash_end。gh-128807: 向自由线程 GC 添加标记阶段。这与 gh-126491 中所做的类似。由于自由线程 GC 没有分代且不是增量的,标记阶段会查找从已知根可达的所有对象。根是已知不是垃圾的对象,比如
sys的模块字典。对于大多数程序,这个标记阶段应该使 GC 稍微快一些,因为通常每个对象做的工作更少。gh-100239: 添加操作码
BINARY_OP_EXTEND,该操作码执行从内联缓存中访问的一对函数(守卫函数和特化函数)。gh-128563: CPython 中添加了一种新型的解释器。该解释器对其指令处理程序使用尾调用。初步基准测试结果表明,在 pyperformance 上几何平均速度提高了7-11%(取决于平台),在Python密集型工作负载上速度提高了30%。该解释器目前仅适用于较新的编译器,如
clang-19。其他编译器将继续使用旧解释器。由 Ken Jin 提供补丁,Mark Shannon、Garret Gu、Haoran Xu 和 Josh Haberman 提供了在 CPython 中实现的想法。gh-126703: 通过为迭代器对象使用自由列表,提高了迭代列表和元组的性能。
gh-127953: 在 sys.monitoring(和 sys.settrace)中处理
LINE事件的时间现在与代码对象中的行数无关。gh-128330: 在 REPL 退出时恢复终端控制字符。
gh-128016: 改进了无效转义序列的
SyntaxWarning消息,以明确这些序列在未来的 Python 版本中会引发SyntaxError。新消息还建议了可能的修复方法,即Did you mean "\\e"?。gh-126004: 修复了
codecs.replace_errors()错误处理程序中UnicodeError.start和UnicodeError.end值的处理。由 Bénédikt Tran 提供补丁。gh-126004: 修复了
codecs.backslashreplace_errors()错误处理程序中UnicodeError.start和UnicodeError.end值的处理。由 Bénédikt Tran 提供补丁。gh-126004: 修复了
codecs.xmlcharrefreplace_errors()错误处理程序中UnicodeError.start和UnicodeError.end值的处理。由 Bénédikt Tran 提供补丁。gh-127349: 修复了在 Python REPL 中调整终端大小时的错误。由 Semyon Moroz 提供补丁。
gh-125723: 修复当生成器帧比其生成器生命周期更长时
gi_frame.f_locals导致的崩溃问题。由 Mikhail Efimov 提供补丁。
库¶
gh-126349: 添加
turtle.fill()、turtle.poly()和turtle.no_animation()上下文管理器。由 Marie Roald 和 Yngve Mardal Moe 提供补丁。
核心与内置函数¶
gh-115911: 如果由于权限问题无法确定当前工作目录,则导入操作将不再引发
PermissionError。由 Alex Willmer 提供补丁。
库¶
gh-112713: 在
http.cookies中添加了对Partitionedcookie 标志的支持。
C API¶
gh-129533: 更新
PyGC_Enable(),PyGC_Disable(),PyGC_IsEnabled()以在自由线程构建版上为线程安全使用自动操作。 由 Donghee Na 提供补丁。gh-89188: 实现
PyUnicode_KIND()和PyUnicode_DATA()作为函数,除同名宏外。这些宏依赖于具有编译器特定布局的 C 位字段。由 Victor Stinner 提供补丁。gh-91417: 从有限 C API 中移除
PySequence_Fast(),因为此函数必须与PySequence_Fast_GET_ITEM一起使用,后者在有限 C API 中从未工作过。由 Victor Stinner 提供补丁。gh-128509: 添加
PyUnstable_IsImmortal()用于确定对象是否为 immortal。gh-129033: 移除
_PyInterpreterState_GetConfigCopy()和_PyInterpreterState_SetConfig()私有函数。改为使用PyConfig_Get()和PyConfig_Set(),这是由 PEP 741 "Python 配置 C API" 新增的公共 C API。由 Victor Stinner 提供补丁。gh-129033: 移除私有函数
_Py_InitializeMain()。这是由 PEP 587 在 Python 3.8 中添加的 provisional API。由 Victor Stinner 提供补丁。gh-128844: 添加
PyUnstable_TryIncRef()和 :c:func`PyUnstable_EnableTryIncRef` 不稳定 API。这些是用于以线程安全方式处理无主引用,特别是在自由线程构建中的辅助工具。gh-128911: 添加
PyImport_ImportModuleAttr()和PyImport_ImportModuleAttrString()辅助函数,用于导入模块并获取模块的属性。补丁由 Victor Stinner 提供。gh-128863: 以下私有函数已被弃用并计划在Python 3.18中移除:
_PyBytes_Join(): 使用PyBytes_Join()。_PyDict_GetItemStringWithError(): 使用PyDict_GetItemStringRef()。_PyDict_Pop(): 使用PyDict_Pop()。_PyLong_Sign(): 使用PyLong_GetSign()。_PyLong_FromDigits()和_PyLong_New(): 使用PyLongWriter_Create()。_PyThreadState_UncheckedGet(): 使用PyThreadState_GetUnchecked()。_PyUnicode_AsString(): 使用PyUnicode_AsUTF8()。_Py_HashPointer(): 使用Py_HashPointer()。_Py_fopen_obj(): 使用Py_fopen()。
在 Python 3.13 和更旧的版本中可以使用 pythoncapi-compat 项目 来获取这些新的公有函数。
由Victor Stinner提供补丁。
gh-126599: 移除实验性JIT编译器的一些内部测试API。
gh-127925: 将
decimal模块转换为使用 PEP 757 C API(导出导入整数),如果Decimal实例的整数部分较小,可以提供一些加速。由Sergey B Kirpichev提供补丁。
构建¶
Python 3.14.0 alpha 4¶
发布日期: 2025-01-14
macOS¶
gh-127592: 当最小 macOS 版本早于 10.12 时禁用统一 Apple System Log API。
工具/示例¶
gh-128152: 修正了 Argument Clinic 的 C 预处理器解析器试图解析 C 注释里的预处理器指令的程序错误。 由 Erlend Aasland 提供补丁。
测试¶
gh-128690: 在PGO配置文件构建中暂时不使用test_embed,直到在某些配置中test_init_pyvenv_cfg失败的问题得到解决。
库¶
gh-128731: 修复
ResourceWarning在urllib.robotparser.RobotFileParser.read()中的问题。gh-71339: 为
unittest添加新的断言方法:assertHasAttr(),assertNotHasAttr(),assertIsSubclass(),assertNotIsSubclass()assertStartsWith(),assertNotStartsWith(),assertEndsWith()和assertNotEndsWith()。gh-118761: 通过移除不必要的正则表达式,将
pickle的导入时间提高了25%。因此,re不再作为pickle.re隐式可用。由Bénédikt Tran提供补丁。gh-128661: 修复了
typing.evaluate_forward_ref()在未传递type_params参数时不显示弃用警告的问题。gh-128552: 修正了由于
asyncio.loop.create_task()和asyncio.TaskGroup.create_task()在其为主动型时持有对所创建任务的引用而导致的循环垃圾。gh-128340: 添加内部线程安全句柄,用于
asyncio.loop.call_soon_threadsafe()以实现线程安全的取消操作。gh-128400: 在 自由线程 构建上,仅在
faulthandler中显示当前线程以防止竞争。gh-128400: 修复了在 自由线程 构建版上其他线程激活的情况下使用
faulthandler.dump_traceback()时的崩溃问题。gh-128388: 修复 Windows 上的
PyREPL以支持更多键绑定,如 Control-← 和 Control-→ 的单词跳过键绑定以及带有元键(即 Alt)的键绑定,例如 Alt-d 对应kill-word或 Alt-Backspace 对应backward-kill-word。gh-88834: 统一了
typing.Union和types.UnionType的实例检查方式:现在Union将针对其形参使用实例检查而不是子类检查。gh-128302: 修正了
xml.dom.xmlbuilder.DOMEntityResolver.resolveEntity(),它是在 Python 3.0 过渡期中被破坏的。gh-128317: 在
calendar的 CLI 输出中高亮显示今天的日期。由 Hugo van Kemenade 提供补丁。gh-128302: 允许
xml.dom.xmlbuilder.DOMParser.parse()正确地处理仅设置了systemId属性的xml.dom.xmlbuilder.DOMInputSource实例。gh-128151: 通过专用函数提高
UUID对象版本 3、4、5 和 8 的生成速度 30%。由 Bénédikt Tran 提供补丁。gh-128118: 通过为原子类型和容器类型提供快速路径,将
copy.copy()的性能提高 30%。gh-127946: 修复在 自由线程 构建上并发修改
ctypes._CFuncPtr对象时的崩溃问题。gh-128062: 将
turtledemo菜单栏的字体恢复为默认值并在正确的位置上显示快捷键。gh-128014: 通过将
default=''传给tkinter方法wm_iconbitmap()修复了重设默认窗口图标问题。gh-41872: 修正了在
pydoc中自文件中快速提取模块文档字符串的功能。 现在它支持具有单引用、转义序列、原始字符串字面值以及其他 Python 语法的文档字符串。gh-127060: 将 TERM 环境变量设为 "dumb" 以在 IDLE 中禁用彩色回溯信息,因为 IDLE 无法解读 ANSI 转义序列。 由 Victor Stinner 提供补丁。
gh-126742: 在
ctypes和dbm.gnu函数中分别修正了对 dlerror(3) 和 gdbm_strerror 所报告的本地化错误消息的支持。 由 Bénédikt Tran 提供补丁。gh-122548: 向 sys.monitoring 添加了两个新本地事件
BRANCH_LEFT和BRANCH_RIGHT。这允许独立禁用分支的两臂,这将极大地提高分支级覆盖率工具的性能。旧的分支事件BRANCH现已弃用。gh-127847: 修复了在由
zipfile.ZipFile.open()返回的未压缩、未加密的 zip 文件上执行交错定位和读取时的位置问题。gh-127688: 将
SCHED_DEADLINE和SCHED_NORMAL常量添加到os模块中。gh-83662: 为
functools.partial()的 Python 实现增加了缺失的__class_getitem__方法,以使其与 C 版本相兼容。 这主要影响其他 Python 实现如 PyPy 和 GraalPy,因为 CPython 通常会使用相应函数的 C 实现。gh-127586: 现在当通过 spawn 或 forkserver 创建进程时
multiprocessing.pool.Pool会正确地恢复父线程被阻塞的信号处理器。gh-98188: 修复了在
email.message.Message.get_payload()中当 Content Transfer Encoding 机制包含末尾空格或额外冗余文本时数据无法被解码的问题。 由 Hui Liu 提供补丁。gh-127529: 修正
asyncio.selector_events.BaseSelectorEventLoop._accept_connection()在处理循环中的ConnectionAbortedError时的行为。这提高了在 OpenBSD 上的性能。gh-127360: 当无法为
ssl.SSLError提供描述性错误消息时,“未知错误”消息现在会显示内部错误代码(通过ERR_get_error和类似的 OpenSSL 函数检索)。gh-127196: 修复了在
_interpreters模块中当具有无效编码格式的键的字典被传给某些函数时的崩溃问题。gh-124130: 修复了在空输入字符串中匹配正则表达式
\B的错误。现在它总是\b的反面。要获得旧行为,请使用(?!\A\Z)\B。要在旧 Python 版本中获得新行为,请使用(?!\b)。gh-126639:
tempfile.NamedTemporaryFile现在会在被垃圾收集器最终化而没有显式关闭时发出ResourceWarning。gh-126624: 在
xml.parsers.expat.errors中暴露 Expat >=2.6.4 的错误代码XML_ERROR_NOT_STARTED。gh-126225:
getopt和optparse不再被标记为已弃用。 存在合法的理由优先使用这些模块而不是argparse,这些模块均没有从标准库中被移除的风险。 对于这三个模块,argparse仍然是推荐的默认选择,除非optparse模块文档的开头部分所提及的事项之一需要被纳入考量。gh-124761: 为 FreeBSD 在
socket中添加SO_REUSEPORT_LB常量。gh-121720:
enum.EnumDict现在可以不借助私有 API 使用。gh-123424: 添加
zipfile.ZipInfo._for_archive()方法,为ZipInfo对象设置默认属性。补丁由 Bénédikt Tran 和 Jason R. Coombs 提供。gh-121676: 弃用以
function或sequence作为 关键字参数 调用functools.reduce()的 Python 实现。为了与 C 实现保持一致,Python 3.16 将禁止此操作。gh-112015: 现在存在
ctypes.memoryview_at()函数,用于创建一个指向提供的指针和长度的memoryview对象。这与ctypes.string_at()类似,但避免了缓冲区复制,通常在实现传递动态大小缓冲区的纯 Python 回调函数时非常有用。gh-95371: 为 turtle 模块添加了对其他图像格式(PNG、PGM 和 PPM)的支持。由 Shin-myoung-serp 提供补丁。
核心与内置函数¶
gh-128078: 修正了当附带默认的元组值使用
anext()时导致的SystemError。 由 Bénédikt Tran 提供补丁。gh-124483: 在生成操作码和 uop 元数据时,将
Py_DECREF及其变体视为逃逸。这防止了__del__方法导致 JIT 行为不正确的可能性。gh-126703: 通过使用 freelist 提高了类方法的性能。
gh-128137: 更新
PyASCIIObject布局以使用原子操作处理 interned 字段。由 Donghee Na 提供补丁。
库¶
gh-128192: 通过支持 RFC 7616 中指定的 SHA-256 摘要认证,升级了
urllib.request的 HTTP 摘要认证算法。
核心与内置函数¶
gh-114203: 为简单的递归调用优化
Py_BEGIN_CRITICAL_SECTION。gh-127705: 当设置
Py_STACKREF_DEBUG时,添加 stackref 调试。查找所有双重关闭和泄漏,记录来源和最后的借用。受HPy调试模式的启发。https://docs.hpyproject.org/en/latest/debug-mode.html
gh-128079: 修复了一个由于
except*不能正确地检查ExceptionGroup的split()函数的返回值,导致在某些情况下发生崩溃的程序错误。 现在当split()返回无效对象时,except*将引发一个TypeError并原来所引发的ExceptionGroup对象与其进行串连。gh-128030: 避免当从非模块对象导入不存在的符号时由于在非模块对象上调用
PyModule_GetFilenameObject所导致的错误。
库¶
gh-128035: 通过
ssl.HAS_PHA表示ssl模块是否支持TLSv1.3握手后客户端认证(PHA)。由Will Childs-Klein提交补丁。
核心与内置函数¶
gh-127274: 向
co_flags添加一个新标志CO_METHOD,用于表示代码对象是否属于在类作用域中定义的函数。gh-66409: 在 path initialization 期间,我们现在在退回搜索Python解释器目录之前检查
base_exec_prefix是否与base_prefix相同。gh-127970: 我们现在使用当前进程中使用的
libpython运行时库的位置来确定在所有实现了由UNIX标准定义的 dladdr 函数的平台上的sys.base_prefix—— 这包括Linux、Android、macOS、iOS、FreeBSD等。在Windows和macOS框架构建中已经是这种情况。gh-127903:
Objects/unicodeobject.c: 修复了在DEBUG构建中当没有内容可复制时_copy_characters的崩溃问题。gh-127809: 修复了一个问题,在该问题中,实验性JIT可能为幂运算(
**和**=)推断出错误的结果类型,从而导致错误或崩溃。gh-126862: 修复了一个类继承自极其多的超类时可能出现的溢出问题。由Valery Fedorenko报告。由Bénédikt Tran提交补丁。
C API¶
gh-128400:
Py_FatalError()不再在 自由线程 <free threading>` 构建上显示所有线程以防止崩溃。gh-128629: 添加宏
Py_PACK_VERSION()和Py_PACK_FULL_VERSION()用于位打包Python版本号。gh-128008: 添加
PyWeakref_IsDead()函数,用于测试弱引用是否已失效。gh-127350: 添加
Py_fopen()函数以打开文件。类似于fopen()函数,但 path 参数是一个 Python 对象,并且在出错时会设置异常。同时添加Py_fclose()函数以关闭文件,此函数为 Windows 支持所需。由 Victor Stinner 提供补丁。
构建¶
gh-128627: 对于 Emscripten 构建,函数指针转换调用 trampoline 现在使用 wasm-gc 的 ref.test 指令(如果可用),而不是 Wasm JS 类型反射。
gh-128472: 跳过使用计算跳转的函数的 BOLT 优化,修复了使用 LLVM 19 构建时的错误。
gh-115765: 现在需要 GNU Autoconf 2.72 来生成
configure。由 Erlend Aasland 提供补丁。gh-123925: 修复在没有 libncursesw 但有 libncurses 的平台上构建
curses模块的问题。gh-90905: 添加对在 aarch64/arm64 macOS 上交叉编译到 x86_64 的支持。
gh-128321: 在检查
sqlite3库函数是否可用时设置LIBS而不是LDFLAGS。这修复了链接库的顺序问题,该问题在使用静态链接的libsqlite3时是不正确的。gh-100384: 在 macOS 构建中对
unguarded-availability报错,防止在旧版本的操作系统中使用不可用的符号。gh-128104: 移除
Py_STRFTIME_C99_SUPPORT条件,改为要求在构建时支持 C99 strftime(3) 说明符。当交叉编译时,没有构建时检查,假设支持。gh-127951: 为 Windows 构建添加
--pystats选项以启用性能统计收集。
Python 3.14.0 alpha 3¶
发布日期:2024-12-17
Windows¶
工具/示例¶
测试¶
安全性¶
gh-127655: 修正了
asyncio.selector_events._SelectorSocketTransport传输当使用asyncio.WriteTransport.writelines()时不在缓冲区到达高水位时暂停为协议写入的问题。
库¶
gh-126907: 修复在 free-threaded 构建上并发使用
atexit时崩溃的问题。gh-127870: 检测在 ctypes
_as_parameter_处理中的递归调用。 由 Victor Stinner 提供补丁。gh-126789: 修复了
sysconfig.get_config_vars()、sysconfig.get_paths()及其相关函数,如果sys.prefix或sys.exec_prefix的值发生变化,会返回过时的缓存数据。仍然不鼓励覆盖sys.prefix或sys.exec_prefix,因为这可能会破坏代码的其他部分。gh-127718: 为
test.regrtest输出添加颜色。由 Hugo van Kemenade 提供补丁。gh-127610: 在
inspect.Signature中添加了对多于一个可变位置参数或可变关键字参数的验证。由 Maxim Ageev 提供补丁。gh-127627: 添加了
posix._emscripten_debugger()以帮助在 Emscripten 目标上调试测试套件。gh-126821: 在解释器配置期间 macOS 和 iOS app 现在能选择将 stdout 和 stderr 重定向到系统日志。
gh-93312: 包括
<sys/pidfd.h>以获取os.PIDFD_NONBLOCK常量。 由 Victor Stinner 提供补丁。gh-127065: 使
operator.methodcaller()线程安全和可重入安全。gh-127321:
pdb.set_trace()不再在没有关联行号的操作码处停止。gh-127429: 修复了在交叉构建时,
sysconfigPOSIX 数据是用主机 Python 的Makefile生成的问题。现在数据是从当前构建的Makefile生成的。gh-127413: 添加了
dis --specialized命令行选项以显示专门的字节码。由 Bénédikt Tran 提供补丁。gh-125413: 撤销添加
pathlib.Path.scandir()。此方法在 3.14.0a2 版本中添加。文件系统路径的优化仍然保留,但其他子类只需实现pathlib.Path.iterdir()。gh-127257: 在
ssl中,OpenSSL 报告使用ERR_LIB_SYS的系统调用失败现在将作为OSError被引发。gh-59705: 在 Linux 上,
threading.Thread现在将线程名称设置为操作系统。由 Victor Stinner 提供补丁。gh-127303: 公开暴露
EXACT_TOKEN_TYPES在token.__all__中。gh-123967: 修复了 faulthandler 对于 trampoline 框架的处理。如果最顶层的框架是 trampoline 框架,则跳过它。由 Victor Stinner 提供补丁。
gh-127178: 现在标准库目录中提供了一个
_sysconfig_vars_(...).json文件。它包含sysconfig.get_config_vars()在默认环境下作为 JSON 数据编码的输出。这是一个实现细节,可能会随时更改。gh-127072: 移除了在 Linux 内核 2.6.17 之后不再存在的过时
socket.NETLINK_*常量。gh-127255:
CopyComPointer()函数现在是公开的。之前,这是私有的,仅在_ctypes中可用。gh-127182: 修复了
io.StringIO.__setstate__()当None作为第一个值传递时的崩溃问题。gh-127217: 修复了
urllib.request.pathname2url()对于 Posix 上以多个斜杠开头的路径的处理。gh-125866:
urllib.request.pathname2url()现在在为一个以一个斜杠开头的路径生成 URL 时添加一个空的授权部分。例如,路径/etc/hosts被转换为无方案的 URL///etc/hosts。由于这一变化,没有授权部分的 URL 仅对相对路径生成。gh-127035: 修复了 Windows 上的
shutil.which。现在它仅在命令以 PATHEXT 扩展名结束或 X_OK 不在模式中时查看直接匹配。如果 "." 在 PATHEXT 中,则支持无扩展名的文件。支持以点结束的 PATHEXT 扩展名。gh-122273: 在 Windows 上支持 PyREPL 历史记录。由 devdanzin 和 Victor Stinner 提供补丁。
gh-125866:
urllib.request.pathname2url()和url2pathname()不再将 Windows 驱动器字母转换为大写。gh-127078: 修复了
urllib.request.url2pathname()在 Windows 上无法丢弃 URL 路径中 UNC 驱动器前的额外斜杠的问题。gh-126766: 修复
urllib.request.url2pathname()在 URL 中存在 'localhost' 授权时未能丢弃的问题。gh-127065: 修复在自由线程构建中从多个线程调用
operator.methodcaller()实例时崩溃的问题。gh-127090: 修复
urllib.response.addinfourl.url对于表达相对路径和绝对 Windows 路径的file:URL 的值。现在使用urllib.request.pathname2url()生成的规范 URL。gh-126997: 修复
pickletools中 STRING 和 GLOBAL 操作码对非 ASCII 参数的支持。pickletools.dis()现在将 STRING、BINSTRING 和 SHORT_BINSTRING 参数中的非 ASCII 字节输出为转义形式(\xXX)。gh-126316:
grp: 通过添加互斥锁使grp.getgrall()线程安全。由 Victor Stinner 提供补丁。gh-126618: 修复当计数值为
sys.maxsize时itertools.count对象的表示。gh-126985: 当在禁用
site的虚拟环境下运行时(见-S),sys.prefix和sys.base_prefix现在将指向虚拟环境,而不是基本安装。gh-118761: 通过 Hugo van Kemenade 的补丁,将
mimetypes的导入时间提高约 11-16 倍。gh-126947: 如果传递的参数不是
int或float,则在_pydatetime.timedelta.__new__()中引发TypeError,以使 Python 实现与 C 实现一致。gh-126946: 在
getopt.getopt()和getopt.gnu_getopt()中,当长选项前缀匹配多个接受的选项时,改进GetoptError错误消息。gh-126899: 使 tkinter 小部件方法
after()和after_idle()接受通过关键字传递的参数。gh-85168: 修复了
urllib.request.url2pathname()和pathname2url()在引用和取消引用文件 URI 时总是使用 UTF-8 的问题。它们现在使用 filesystem encoding and error handler。gh-126780: 修复 Windows 上
os.path.normpath()对驱动器相对路径的处理。gh-126775: 使得
linecache.checkcache()保证线程安全和 GC 重进入安全。gh-126601: 修复了
urllib.request.pathname2url()在给定包含不跟随驱动器字母的冒号字符(如在 NTFS 备用数据流前)的 Windows 路径时引发OSError的问题。gh-126727:
locale.nl_langinfo(locale.ERA)现在返回由分号分隔的多个时代描述段。以前在带有 Glibc 的平台上它只返回第一段。gh-118201: 修复了 iOS 和 Android 上
os.confstr,os.pathconf和os.sysconf的间歇性失败。gh-86463:
argparse.ArgumentParser的usage参数不再影响子解析器中prog参数的默认值。gh-124008: 修复了在 Windows 上写入控制台时,原始二进制
write()可能崩溃(在调试构建中)、输出不正确或返回不正确值的问题。gh-123401: 现在
http.cookies模块支持解释过时的 RFC 850 日期格式,以符合 RFC 9110 的要求。 由 Nano Zheng 提供补丁。gh-122431: 现在当为
readline.append_history_file()给出负值时将会引发ValueError。gh-122356: 保证传递给
zipfile.is_zipfile()的文件类对象的位置在调用后保持不变。补丁由 Bénédikt Tran 提供。gh-122288: 通过 1.7 倍因子提高了
fnmatch.translate()的性能。由 Bénédikt Tran 提供补丁。gh-88110: 修复了在使用
"fork"启动方法时,即使成功,multiprocessing.Process也报告.exitcode为 1 的问题,同时使用了concurrent.futures.ThreadPoolExecutor。gh-97514: 为
multiprocessingforkserver 启动方法的控制套接字添加了认证,这样只有由生成 forkserver 的进程生成的认证密钥的进程才能控制它。这是对其他 gh-97514 修复的增强,使得访问不再仅受文件系统权限的限制。现在,与分叉的工作进程的控制管道的文件描述符交换在所有支持 forkserver 的平台上都需要在交换后通过套接字发送一个明确的确认字节。这使得上述测试变得容易得多。
文档¶
gh-127347: 在
traceback.__all__中公开暴露traceback.print_list()。
核心与内置函数¶
gh-127740: 当给定奇数位数时,修复
bytes.fromhex()中的错误消息,正确指示需要偶数位十六进制数字。gh-127058:
PySequence_Tuple现在原子性地创建结果元组,防止垃圾收集器或通过gc.get_referrers()看到部分创建的元组。gh-127599: 修复对象引用计数增加的统计(特别是当引用计数在单个操作中增加了超过1时)。
gh-127651: 当为
from导入中缺失的符号引发ImportError时,如果__spec__.origin不是一个位置,则在错误消息中使用__file__。gh-127582: 在自由线程构建中调用终结器和监视器回调时,修复非线程安全的对象复活。
gh-127434: iOS 编译器垫片现在可以接受带有空格的参数。
gh-127536: 在自由线程构建中,为一些列表分配操作添加缺失的锁。
gh-127085: 在 free-threaded 构建中,从
memoryview对象导出缓冲区时修复竞态条件。gh-127238: 更正
sys.set_int_max_str_digits()的错误消息。gh-113841: 修复
complex的_Py_c_pow()中可能未定义行为的除以零错误。
库¶
gh-127133: 现在,在参数组上调用
argparse.ArgumentParser.add_argument_group(),以及在互斥组上调用argparse.ArgumentParser.add_argument_group()或argparse.ArgumentParser.add_mutually_exclusive_group()会抛出异常。这种嵌套从未被支持,经常无法正确工作,并且是通过继承无意中暴露的。此功能自Python 3.11起已被弃用。
核心与内置函数¶
gh-126491: 向GC添加一个标记阶段。所有可以从内置模块或堆栈中转引用的对象在循环检测之前被标记为可达。这将GC的工作量大约减少了一半。
gh-127020: 修复了在自由线程构建中,当
PyCode_GetCode()、PyCode_GetVarnames()、PyCode_GetCellvars()或PyCode_GetFreevars()被多个线程同时调用时发生的崩溃。gh-127010: 简化了对字典的GC跟踪。所有字典在创建时即被跟踪,而不是在向它们添加可跟踪对象时延迟跟踪。这极大地简化了代码并带来了轻微的速度提升。
gh-126980: 修复了当
READ或WRITE作为标志传递时,bytearray的__buffer__()崩溃的问题。gh-126937: 修复了当
ctypes.Structure的字段大小不适合无符号16位整数时引发的TypeError。现在,最大位数是sys.maxsize。gh-126881: 修复了dtoa状态在最终化时的崩溃。由Kumar Aditya提供补丁。
gh-126892: 要求冷代码或无效代码在被再次JIT编译之前“预热”。
gh-126091: 确保当抛出到以自定义生成器结束的生成器链中时,堆栈跟踪是完整的。
gh-126024: 优化包含非ASCII字符的短UTF-8序列的解码,大约提升15%。
gh-125420: 向
memoryview对象添加memoryview.index()。由 Bénédikt Tran 提供补丁。gh-125420: 向
memoryview对象添加memoryview.count()。由 Bénédikt Tran 提供补丁。gh-124470: 修复在自由线程构建中,当在另一个线程上读取属性时替换对象字典导致的崩溃。
gh-69639: 实现混合模式算术规则,结合实数和复数,符合自C99以来的C标准。由 Sergey B Kirpichev 提供补丁。
gh-120010: 修正无效的角落案例,这些案例在复数乘法中导致
(nan+nanj)输出,例如(1e300+1j)*(nan+infj)。由 Sergey B Kirpichev 提供补丁。gh-109746: 如果
_thread.start_new_thread()未能启动新线程,它会从解释器中删除其状态,从而避免在最终化时重复清理。
C API¶
gh-127896: 之前未记录的函数
PySequence_In()现在是 软弃用`。改用PySequence_Contains()。gh-127791: 修复在多次调用
PyUnstable_AtExit()后回调丢失的问题。gh-127691: Unicode Exception Objects C API 现在如果其异常参数不是
UnicodeError对象,则会引发TypeError。由 Bénédikt Tran 提供补丁。gh-123378: 确保通过
PyUnicodeEncodeError_GetEnd()获取的UnicodeEncodeError.end的值位于[min(1, objlen), max(min(1, objlen), objlen)]范围内,其中 objlen 是UnicodeEncodeError.object的长度。类似的论点适用于UnicodeDecodeError和UnicodeTranslateError及其相应的C接口。由 Bénédikt Tran 提供补丁。gh-123378: 确保通过
PyUnicodeEncodeError_GetStart()获取的UnicodeEncodeError.start值位于[0, max(0, objlen - 1)]范围内,其中 objlen 是UnicodeEncodeError.object的长度。类似的参数适用于UnicodeDecodeError和UnicodeTranslateError及其对应的 C 接口。由 Bénédikt Tran 提供补丁。gh-109523: 现在,如果操作不能立即返回字节,使用
read从非阻塞流中读取文本可能会引发BlockingIOError。gh-102471: 为 Python 的
int对象添加了新的导入和导出 API (PEP 757):由Victor Stinner提供补丁。
gh-121058: 如果线程状态仍有活动异常,
PyThreadState_Clear()现在会发出警告(并调用sys.excepthook)。
构建¶
Python 3.14.0 alpha 2¶
发布日期:2024-11-19
Windows¶
gh-126911: 更新了 credits 命令输出。
gh-118973: 确保实验性的自由线程安装包含
_tkinter模块。为了使模块工作,还必须安装可选的 Tcl/Tk 组件。gh-126497: 修复了由于实验性自由线程安装中缺少重定向器可执行文件而导致的 venv 失败。
gh-126074: 从 Windows 可嵌入包中移除了不必要的 DLL。
gh-126084: 修复 venvwlauncher 以启动 pythonw 而非 python,从而避免创建额外的控制台窗口。
gh-125842: 修复当在 Windows 上调用
sys.exit()并传入0xffffffff时引发的SystemError。gh-125550: 开启 Python 安装管理器 对来自 Windows Store 的 Python 3.14 安装版的检测。
gh-123803: 现在 Windows 上的所有代码页都支持作为 "cpXXX" 编解码器。
工具/示例¶
测试¶
安全性¶
gh-126623: 将 libexpat 升级到 2.6.4 版本
库¶
gh-85957: 添加了符合 RFCs 的图像缺失的 MIME 类型:emf、fits、g3fax、jp2、jpm、jpx、t38、tiff-fx 和 wmf。由 Hugo van Kemenade 提供补丁。
gh-126920: 修复了在虚拟环境中
sysconfig.get_config_vars()的prefix和exec_prefix键错误地具有与sys.base_prefix和sys.base_exec_prefix相同值的问题。现在它们准确反映了sys.prefix和sys.exec_prefix。gh-126789: 当
site初始化发生在sysconfig为sysconfig.get_config_vars()构建缓存之后时,修复了sysconfig.get_config_vars()、sysconfig.get_paths()及其相关函数的返回值。gh-126188: 将捆绑的 pip 更新到 24.3.1 版本
gh-126766: 修复
urllib.request.url2pathname()在丢弃两个前导斜杠时引入空授权部分的问题。gh-126705: 允许
os.PathLike作为 Protocols 的基类。gh-126699: 允许
collections.abc.AsyncIterator作为 Protocols 的基类。gh-126654: 修复当非字典对象传递给
_interpreters模块中的几个函数时崩溃的问题。gh-104745: 限制在不停止的情况下多次启动修补程序(来自
unittest.mock.patch()或unittest.mock.patch.object())。gh-126595: 修复在调试构建中,当
itertools.count以sys.maxsize为初始计数实例化时崩溃的问题。由 Bénédikt Tran 提供补丁。gh-120423: 修复
urllib.request.pathname2url()处理嵌入正斜杠的 Windows 路径时的问题。gh-126565: 提高
zipfile.Path.open()在非读取模式下的性能。gh-126505: 修复在编译包含非 BMP 字符的字符类的大小写不敏感
正则表达式时的错误:大写的非 BMP 字符被忽略,并且在匹配超出 BMP 区域上限的字符范围时,ASCII 标志被忽略。gh-117378: 修复
multiprocessing"forkserver"启动方法 forkserver 进程在导入multiprocessing.set_forkserver_preload()模块时正确继承父进程的sys.path,与在执行工作项之前在工作者中配置sys.path的方式相同。此错误导致一些 forkserver 模块预加载静默失败,无法预加载。这在子进程中表现为性能下降,当由于每个工作者中额外的重复工作而需要
sys.path时。它还可能在 forkserver 预加载导入期间,将
""保留在sys.path中,而不是使用工作者sys.path中在 multiprocessing 导入时来自os.getcwd()的绝对路径。子进程中各阶段之间的
sys.path差异可能导致预加载从错误的位置导入不正确的内容。我们尚未在实际中遇到这种情况。gh-125679: 在macOS上,
multiprocessing.Lock和multiprocessing.RLock的``repr``值不再显示为"unknown"。gh-126476: 当输入的月份不正确时,
calendar.month()会抛出calendar.IllegalMonthError(现在是IndexError的子类) 。gh-126489: Python实现的
pickle不再为persistent_id()的结果调用pickle.Pickler.persistent_id()。gh-126451: 将
contextvars.Context类型注册到collections.abc.Mapping。gh-126175: 向
tomllib.TOMLDecodeError添加msg、doc、pos、lineno和``colno``属性。弃用使用自由形式参数实例化。gh-89416: 为Matroska音视频容器格式添加 RFC 9559 MIME类型。由Hugo van Kemenade提供的补丁。
gh-126417: 将
multiprocessing.managers中的multiprocessing.managers.DictProxy和multiprocessing.managers.ListProxy类型分别注册到collections.abc.MutableMapping和collections.abc.MutableSequence。gh-126390: 在
getopt.gnu_getopt()中添加支持按顺序返回混合选项和非选项参数。gh-126363: 通过跳过为模式创建
pathlib.Path对象,加快pathlib.Path.glob()中的模式解析速度。gh-126353:
asyncio.get_event_loop()现在不会隐式创建事件循环。如果没有设置事件循环,现在会抛出RuntimeError。由Kumar Aditya提供的补丁。gh-126313: 修复当
curses.initscr()尚未被调用时curses.napms()中的一个问题。由Bénédikt Tran提供的补丁。gh-126303: 修复
os.sched_param对象的序列化和复制问题。gh-126138: 修复
asyncio.Task对象中的一个使用后释放崩溃问题,该问题发生在底层协程生成一个实现邪恶__getattribute__()的对象时。由 Nico Posada 提供补丁。gh-120057: 用新的
os.reload_environ()函数替换os.environ.refresh()方法。补丁由 Victor Stinner 提供。gh-126220: 修复
cProfile.Profile和_lsprof.Profiler中当它们的回调被直接以0个参数调用时的崩溃问题。gh-126212: 修复
urllib.request.pathname2url()和url2pathname()从 Windows DOS 驱动路径和 URL 中移除斜杠的问题。gh-126223: 在调用
_interpreters.create()时遇到无效 Unicode 字符时,抛出UnicodeEncodeError而不是SystemError。gh-126205: 修复当给定 Windows UNC 路径时,
urllib.request.pathname2url()生成以四个斜杠(而不是两个)开头的 URL 的问题。gh-126105: 修复
ast中当ast.AST._fields属性被删除时的崩溃问题。gh-126080: 修复
asyncio.Task对象中的一个使用后释放崩溃问题,该问题发生在底层事件循环实现了一个邪恶的__getattribute__()时。由 Nico-Posada 报告。由 Bénédikt Tran 提供补丁。gh-125322: 正确检测 libffi 中的复数支持。
gh-126083: 修复
asyncio.Task对象中当用非None上下文重新初始化同一对象时的引用泄漏问题。由 Nico Posada 提供补丁。gh-126068: 修复
argparse模块中的异常,现在只有 ArgumentError 和 ArgumentTypeError 的错误信息会被翻译。ArgumentError 现在仅用于命令行错误,不用于程序中的逻辑错误。对于一些逻辑错误,现在会抛出 TypeError 而不是 ValueError。gh-125413: 添加
pathlib.Path.scandir()方法以高效获取目录子项及其文件属性。这是os.scandir()的一个简单包装。gh-125984: 修复了
asyncio.Future对象上因底层事件循环实现了恶意的__getattribute__()而导致的释放后使用崩溃。由 Nico-Posada 报告,Bénédikt Tran 提供补丁。gh-125926: 修复
urllib.parse.urljoin()对于基础 URI 权限未定义的情况。尽管 RFC 3986 仅规定了绝对基础 URI 的引用解析,urljoin()应继续为相对基础 URI 返回合理的结果。gh-125969: 修复了当恶意的
asyncio.loop.call_soon()改变内部回调列表长度时导致的越界崩溃。由 Bénédikt Tran 提供补丁。gh-125966: 修复了
asyncio.Future.remove_done_callback()中的释放后使用崩溃。由 Bénédikt Tran 提供补丁。gh-125789: 修复了当改变由
asyncio.Future._callbacks返回的回调列表时可能导致的崩溃。现在在 C 实现_asyncio中总是返回一个新的副本。由 Kumar Aditya 提供补丁。gh-126916: 允许
functools.reduce()的 initial 参数作为关键字参数传递。由 Sayandip Dutta 提供补丁。gh-124452: 修复了
email.policy.EmailPolicy.header_source_parse()和email.policy.Compat32.header_source_parse()中的一个问题,该问题在头名称分隔符(:)之后和值之前包含换行符时,会在头值中引入虚假的前导空格。gh-117941:
argparse.BooleanOptionalAction现在拒绝以--no-开头的选项名称。gh-125355: 修复了
argparse.ArgumentParser.parse_intermixed_args()中的几个错误。解析器在解析过程中不再临时改变。
默认值不会被处理两次。
现在支持包含位置参数的必需互斥组。
缺少的参数报告现在包括所有必需的可选和位置参数的名称。
未知选项可以与位置参数在 parse_known_intermixed_args() 中混合使用。
gh-125767:
super对象现在可以被pickleable和copyable。gh-124969:
locale.nl_langinfo(locale.ALT_DIGITS)现在再次返回一个字符串。返回值由最多100个分号分隔的符号组成。gh-84850: 从
urllib.request中移除URLopener和FancyURLopener类。它们自 Python 3.3 起就已经引发DeprecationWarning。gh-125666: 避免在新 REPL 中如果输入为空字节时退出解释器。
gh-125710: [Enum] 修复成员值的可哈希<->不可哈希比较
gh-125631: 恢复在
pickle模块中为Pickler和Unpickler类的实例设置persistent_id和persistent_load属性的能力。gh-125682: 在 Python 实现的
json.loads()中拒绝非 ASCII 数字,以符合 JSON 规范。gh-125660: 在 Python 实现的
json.loads()中拒绝无效的 unicode 转义。gh-52551: 使用
wcsftime()在 Windows 上实现time.strftime()。gh-125259: 修复了在枚举初始化中抛出错误的注释移除逻辑。
gh-125633: 添加函数
inspect.ispackage()以确定一个对象是否为 package。gh-125614: 在
annotationlib的FORWARDREF格式中,修复了嵌套表达式未以annotationlib.ForwardRef格式返回的错误。gh-125590: 允许
FrameLocalsProxy删除和弹出非快速变量的键。gh-125542: 弃用向
argparse.ArgumentParser.add_argument_group()传递仅关键字参数 prefix_chars。gh-125541: 在 Windows 上,当在
threading.Lock.acquire()、threading.RLock.acquire()和threading.Thread.join()中被阻塞时按下 Ctrl-C 现在会中断函数调用并引发KeyboardInterrupt异常,类似于这些函数在 macOS 和 Linux 上的行为。gh-125519: 如果
importlib.reload()被调用时传入的对象不是模块,改进回溯信息。由 Alex Waygood 提供补丁。gh-125451: 修复
concurrent.futures.ProcessPoolExecutor在向工作进程提供作业时因错误而并发关闭时的死锁问题。gh-125398: 修复在 Git Bash for Windows 中运行时
venv激活脚本中VIRTUAL_ENV路径的转换问题。gh-125245: 修复导入
collections.abc时可能错误返回空模块的竞争条件。gh-52551: 修复了
time.strftime()、datetime类datetime、date和time的strftime()方法以及这些类的格式化中的编码问题。现在,格式字符串中可以包含当前区域设置无法编码的字符。代理对和代理转义编码字节序列不再重新组合。嵌入的空字符不再终止格式字符串。gh-124694: 我们添加了
concurrent.futures.InterpreterPoolExecutor,允许你在多个隔离的解释器中运行代码。这让你可以绕过 CPU 绑定线程的限制(由于 GIL)。补丁由 Eric Snow 提供。这一添加与 PEP 734 无关。
gh-58032: 弃用
argparse.FileType类型转换器。gh-99749: 添加了一个功能,可以可选地为用户输入错误的参数选择和子解析器名称启用建议。
gh-124111: tkinter 模块现在可以构建为使用 Tcl/Tk 的新版本 9.0.0 或 Tcl/Tk 8 的最新版本 8.6.15。Tcl/Tk 9 包括许多改进,包括对 Tcl 语言的改进以及 Tk 提供的图形用户界面的外观和实用性。
gh-80958: unittest 发现再次支持 PEP 420 命名空间包作为起始目录。
gh-123370: 修复运行 turtledemo 时钟后画布不清除的问题。
gh-89083: 添加
uuid.uuid8()用于生成 RFC 9562 中指定的 UUIDv8 对象。由 Bénédikt Tran 提供补丁。gh-122549: 添加
platform.invalidate_caches()以无效缓存结果。gh-120754: 更新
zipfile中的无界read调用,以指定显式的size,限制它们可以读取的数据量。这也更新了 ZIP 最大注释大小的处理,以匹配标准,而不是读取多出一个字节的注释。gh-70764: 修复了
inspect.getclosurevars()在属性名同时作为属性名和全局变量存在时,错误地将属性名分类为全局变量的问题。gh-118289:
posixpath.realpath()现在在启用 strict 模式并提供带有斜杠的非目录路径时,会引发NotADirectoryError。gh-119826: 在 Windows 上,
os.path.abspath()现在总是返回绝对路径。gh-97850: 移除已弃用的
pkgutil.get_loader()和pkgutil.find_loader()。gh-118986: 添加
socket.IPV6_RECVERR常量(自 Linux 2.2 起可用)。gh-116897: 现在不推荐在
urllib.parse函数parse_qsl()和parse_qs()中接受除空字符串、字节类对象和None之外的虚假值(如0和[])。gh-101955: 修复当匹配包含某些占有量词、选择项和捕获组组合的正则表达式模式时出现的 SystemError。
gh-71936: 修复
multiprocessing.pool.Pool中的一个竞争条件。bpo-46128: 从报告的堆栈跟踪中剥离
unittest.IsolatedAsyncioTestCase堆栈帧。gh-84852: 为 MS Embedded OpenType、OpenType Layout、TrueType、WOFF 1.0 和 2.0 字体添加 MIME 类型。由 Sahil Prajapati 和 Hugo van Kemenade 提供补丁。
文档¶
核心与内置函数¶
gh-126795: 提高 JIT 代码热身的阈值。根据平台和工作负载,这可以带来 1-9% 的性能提升和 3-5% 的内存节省。
gh-126341: 现在当尝试迭代已释放的
memoryview对象时,会引发ValueError而不是SystemError。
库¶
核心与内置函数¶
库¶
gh-126209: 修复了
skip_file_prefixes参数的问题,该问题导致warnings.warn()的 C 和 Python 实现之间的行为不一致。由 Daehee Kim 提供补丁。
核心与内置函数¶
gh-126312: 修复了在自由线程构建上由
gc.freeze()冻结的对象进行垃圾回收时的崩溃。gh-103951: 放宽优化要求,允许快速访问模块子类的属性。
gh-126072: 根据 gh-126101,对于像 lambda、注解和类型别名这样的 代码对象,我们不再向其
co_consts添加None。gh-126195: 通过使用平台特定的内存保护 API,在 macOS Apple Silicon 上提高 JIT 性能 1.4%。由 Diego Russo 提供补丁。
gh-126072: 在
co_flags中添加一个新属性,用于指示co_consts中的第一项是否为文档字符串。如果一个代码对象没有文档字符串,None将 不会 被插入。gh-126076: 重新定位的对象,如
tuple、bytes和str对象,现在被tracemalloc及其相关钩子正确跟踪。由 Pablo Galindo 提供补丁。gh-90370: 在使用 Argument Clinic 生成的代码中传递参数时,避免为可变参数创建临时元组(如果参数是可变参数或仅位置参数)。
gh-126018: 修复了在调试模式下编译的 Python 中,当传递非字符串作为第一个参数时
sys.audit()崩溃的问题。gh-126012:
memoryview类型现在支持订阅,使其成为 generic type。gh-125837: 添加了
LOAD_SMALL_INT和LOAD_CONST_IMMORTAL指令。LOAD_SMALL_INT将一个等于oparg的小整数推送到堆栈上。LOAD_CONST_IMMORTAL的作用与LOAD_CONST相同,但对不朽对象更高效。移除了RETURN_CONST指令。gh-125942: 在 Android 上,
sys.stdout的errors设置从surrogateescape更改为backslashreplace。gh-125859: 修复了在自由线程构建中,当在垃圾回收过程中调用
gc.get_objects()或gc.get_referrers()时崩溃的问题。gh-125868: 在 3.14.0a1 中,只有在非常特定的情况下,属性查找可能会给出错误的值。这是由于在这些情况下进行了错误的专门化。这在 3.14.0a2 中已修复。
gh-125498: JIT 已更新以利用 Clang 19 的新
preserve_none属性,该属性支持更多平台,并且比 LLVM 现有的ghccc调用约定更有用。这也消除了手动修补 LLVM IR 中调用约定的需要,简化了 JIT 编译过程。gh-125703: 在专门的
Py_DECREF路径中正确遵循tracemalloc钩子。Patch by Pablo Galindogh-125593: 使用颜色高亮异常组回溯中的错误位置
gh-125017: 修复在某些访问
staticmethod和classmethod对象的__annotations__时的崩溃问题。gh-125588: Python PEG 生成器现在可以在语法动作中使用 f-strings。Patch by Pablo Galindo
gh-125444: 修复旧版 Arm 架构的非法指令问题。Patch by Diego Russo, testing by Ross Burton.
gh-118423: 在案例生成器中添加一个新的
INSTRUCTION_SIZE宏,返回当前指令大小。gh-125038: 修复在直接更改
gi_frame.f_locals后迭代生成器表达式时的崩溃问题。Patch by Mikhail Efimov.gh-124855: 不允许 JIT 和 perf 支持同时激活。Patch by Pablo Galindo
gh-123714: 更新 JIT 编译以使用 LLVM 19
gh-123930: 当脚本遮蔽标准库中的模块导致在“from”导入期间引发
ImportError时,改进错误消息。类似地,当脚本遮蔽第三方模块并尝试在初始化期间“from”导入该第三方模块的属性时,改进错误消息。gh-119793:
map()内置函数现在有一个可选的仅关键字参数 strict,类似于zip(),用于检查所有可迭代对象是否长度相等。Patch by Wannes Boeykens.
库¶
C API¶
gh-126554: 修复
ctypes.CDLL对象中的错误处理,在极少数情况下可能导致崩溃。gh-126061: 添加
PyLong_IsPositive()、PyLong_IsNegative()和PyLong_IsZero()用于检查PyLongObject是否为正、负或零。gh-125608: 修复了一个 bug,当对象的属性被修改时,对象属性字典(
__dict__)上的字典观察者(例如PyDict_Watch())不会被触发。gh-123619: 添加了
PyUnstable_Object_EnableDeferredRefcount()函数,用于启用 PEP 703 延迟引用计数。gh-121654: 添加
PyType_Freeze()函数使类型不可变。由 Victor Stinner 提供补丁。gh-120026:
Py_HUGE_VAL宏被 软弃用`。
构建¶
gh-126691: 移除了
--with-emscripten-target配置标志。我们统一了node和browser选项,现在可以使用相同的构建,不受目标运行时的影响。gh-123877: 使用
wasm32-wasip1作为 WASI 的目标三元组,而不是wasm32-wasi。后者最终将被 WASI 1.0 收回,而 CPython 目前仅支持 WASI preview1。gh-126458: 在 WASI 下禁用 HACL 的 SIMD 支持。
gh-89640: 在 WASM 上将浮点数字序硬编码为小端序。
gh-126206:
make clinic现在使用--force选项运行 Argument Clinic,从而强制重新生成生成的代码。gh-126187: 引入了
Tools/wasm/emscripten.py以简化 Emscripten 构建。gh-124932: 对于交叉构建,现在支持安装
prefix与getpath.py使用的host_prefix不同。对于 Emscripten,默认设置为/,在其他平台上默认行为与之前相同。gh-125946: 现在支持的最低 Android 版本是 7.0(API 级别 24)。
gh-125940: Android 构建现在支持 16 KB 页面大小。
gh-89640: 当启用链接时优化时,改进 Linux 上浮点数字序的检测。
gh-124928: Emscripten 构建现在需要 node >= 18。
gh-115382: 修复当主机和目标 SOABIs 匹配时的交叉编译失败问题。
Python 3.14.0 alpha 1¶
发布日期:2024-10-15
macOS¶
Windows¶
gh-124487: 将 Windows 所需操作系统和 API 级别提高到 Windows 10。
gh-124609: 修复使用 MinGW 的 Windows 构建中的
_Py_ThreadId。补丁由 Tony Roberts 提供。gh-124448: 将捆绑的 Tcl/Tk 更新至 8.6.15。
gh-124254: 确保在更新时实验性的自由线程二进制文件保持安装。
gh-123915: 确保
Tools\msi\buildrelease.bat对 AMD64 和 ARM64 构建使用不同的目录。gh-123418: 更新 Windows 构建以使用 OpenSSL 3.0.15。
gh-123476: 在 Windows 平台上添加对
socket.TCP_QUICKACK的支持。gh-122573: CPython 的 Windows 构建现在需要 3.10 或更新版本。
gh-119679: 确保 Windows 安装中包含正确的导入库。
gh-119690: 为
_winapi.CreateNamedPipe添加 Unicode 支持并修复审计事件。gh-111201: 在 Windows 上添加对新 pyrepl 的支持
gh-119070: 修复
py.exe对 shebangs 如/usr/bin/env python3.12的处理,这些 shebangs 之前被解释为python3.exe而不是python3.12.exe。gh-117505: 修复 Windows 安装程序未在完全隔离的环境中运行 ensurepip 的问题。这可能导致与用户 site-packages 的意外交互。
gh-118209: 在 Windows 上,当映射的内存由于文件系统错误或访问违规而不可访问时,避免在
mmap中崩溃。gh-79846: 使
ssl.create_default_context()忽略 Windows 证书存储中的无效证书
工具/示例¶
gh-123418: 更新 GitHub CI 工作流以使用 OpenSSL 3.0.15 和 multissltests 以使用 3.0.15、3.1.7 和 3.2.3。
测试¶
gh-125041: 在s390x架构上重新启用对
zlib的跳过测试:仅跳过压缩字节的检查,这些在zlib的软件实现和硬件加速实现之间可能不同。gh-124378: 更新
test_ttk以通过Tcl/Tk 8.6.15的测试。gh-124213: 检测测试套件是否在带有
--suppress-sync=true选项的systemd-nspawn容器内运行,并跳过在此场景下失败的test_os和test_mmap测试。gh-124190: 添加在检查警告CI工具中忽略整个文件或目录的能力。
gh-121921: 更新
Lib/test/crashers/bogus_code_obj.py以便它再次正确崩溃。gh-112301: 添加检查编译器警告变化的工具。由Nate Ohlson提供补丁。
gh-59022: 为
pkgutil.extend_path()添加测试。由Andreas Stocker提供补丁。gh-99242: 在某些条件下(如chroot)运行回归测试时,
os.getloadavg()可能会抛出OSError。现在捕获并忽略此错误,因为报告负载平均值是可选的。gh-121084: 修复test_typing随机泄漏。在运行反射泄漏测试(
-R``选项)时清除键入ABC缓存:在键入抽象类及其子类上调用 ``_abc_caches_clear()。由Victor Stinner提供补丁。gh-121160: 为
readline.set_history_length()添加测试。请注意,此测试可能在readline库上失败。gh-121200: 修复
test_posixpath的test_expanduser_pwd2()。调用getpwnam()获取``pw_dir``,因为它可能与getpwall()的pw_dir不同。由Victor Stinner提供补丁。gh-121188: 当创建JUnit XML文件时,regrtest现在转义XML中无效的字符,如用于ANSI转义序列的chr(27)控制字符。由Victor Stinner提供补丁。
gh-120801: 清理了importlib.metadata测试的fixtures,并与'test.support.os_helper'统一行为。
gh-119727: 为Python测试运行器(regrtest)添加
--single-process命令行选项。由Victor Stinner提供补丁。gh-119273: Python测试运行器不再使用TTY(例如:test_ioctl)在进程组中运行测试(使用
setsid())。之前,使用TTY的测试会被跳过。由Victor Stinner提供补丁。gh-119050: regrtest测试运行器:为反射泄露检查器(-R选项)添加XML支持。由Victor Stinner提供补丁。
gh-101525: 如果二进制文件被BOLT重定位,则跳过
test_gdb。由Donghee Na提供补丁。gh-107562: 测试证书已更新,将在很远的未来过期。这允许将系统时间设置为该时间之后来测试Y2038,以便暴露实际的Y2038问题,而不是被过期的证书错误所掩盖。
安全性¶
gh-125140: 在使用PyREPL时,从
sys.path中移除当前目录。gh-123678: 将libexpat升级到2.6.3版本
gh-112301: 启用编译器选项,警告潜在的安全漏洞。
gh-122792: 修改了IPv4映射的
ipaddress.IPv6Address,使其一致使用映射的IPv4地址值来决定属性。行为被修复的属性包括is_multicast、is_reserved、is_link_local、is_global和is_unspecified。gh-112301: 在警告检查工具中添加按文件忽略警告的能力,并带有警告计数。由Nate Ohlson提供补丁。
gh-112301: 为警告检查工具添加macOS警告跟踪。由Nate Ohlson提供补丁。
gh-122133: 在
AF_UNIX不可用的平台(如Windows)上,为socket.socketpair()后备方案验证套接字连接。由Gregory P. Smith <greg@krypto.org> 和 Seth Larson <seth@python.org>提供补丁。由Ellie <el@horse64.org>报告。
gh-121957: 修复了Python交互式使用中缺失的审计事件,现在也能正确触发
python -i以及python -m asyncio。相关事件为cpython.run_stdin和cpython.run_startup。gh-112301: 为除 Windows 外的所有平台启用 glibc 的运行时保护,当遇到不安全行为时中止执行。
gh-121285: 在 tarfile 头解析中移除对
hdrcharset、PAX 和 GNU 稀疏头的回溯。gh-112301: 添加默认编译器选项以提高安全性。启用 -Wimplicit-fallthrough、-fstack-protector-strong、-Wtrampolines。
gh-118773: 修复 Windows 上
os.mkdir()创建 ACL 在非英语机器上工作不正确的问题。gh-118486: Windows 上的
os.mkdir()现在接受0o700的 mode 参数,将新目录限制为当前用户。这修复了 CVE 2024-4030,影响tempfile.mkdtemp()在基础临时目录比默认更宽松的情况下的问题。
库¶
gh-53203: 修复
time.strptime()对于使用非 ASCII 数字的许多地区(如波斯语、缅甸语、奥里亚语和掸语)的%c、%x和%X格式的问题。gh-125206: 添加了对旧 libffi 版本的变通方案。模块 ctypes 仅支持 libffi >= 3.3.0 的 double complex。由 Mikhail Efimov 提供补丁。
gh-89967: 使
WeakKeyDictionary和WeakValueDictionary对其他线程的并发修改安全。补丁由 Kumar Aditya 提供。gh-125260:
gzip.compress()的 mtime 参数现在默认为 0,以获得可重复的输出。补丁由 Bernhard M. Wiedemann 和 Adam Turner 提供。gh-125243: 修复在自由线程构建中创建
zoneinfo.ZoneInfo对象时的数据竞争。gh-61011: 修复了
argparse.ArgumentParser中父解析器中嵌套互斥组的继承问题。之前,所有嵌套的互斥组都会失去与包含它们的组的连接,并显示为直接属于解析器。gh-125069: 修复了一个问题,该问题发生在将一个
pathlib.PurePath对象作为初始化参数传递给另一个具有不同parser的PurePath对象时,导致前一个对象初始化器的参数被后一个对象的解析器连接。gh-125096: 如果设置了
PYTHON_BASIC_REPL环境变量,site模块将不再导入_pyrepl模块。此外,site模块现在尊重-E和-I命令行选项:在这种情况下忽略PYTHON_BASIC_REPL。由 Victor Stinner 提供补丁。gh-124969: 修复了
locale.nl_langinfo(locale.ALT_DIGITS)。现在它返回最多 100 个字符串的元组(在大多数区域设置中为空元组)。之前它返回该元组的第一个项目或空字符串。gh-124960: 在新的 REPL 中修复了对
barry_as_FLUFL未来标志的支持。gh-69998: 修复了当不同类别具有不同区域设置时的
locale.nl_langinfo()函数。该函数现在在某些情况下临时设置LC_CTYPE区域设置。这一临时更改会影响其他线程。gh-124958: 修复了从
asyncio.TaskGroup和asyncio.Future的 Python 实现中引发的异常中的引用循环。gh-53203: 修复
time.strptime()在许多语言环境中对%c和%x格式的支持,包括阿拉伯语、比斯拉马语、布列塔尼语、博多语、卡舒比语、楚瓦什语、爱沙尼亚语、法语、爱尔兰语、吉兹语、古吉拉特语、曼克斯盖尔语、希伯来语、印地语、恰蒂斯加尔语、海地克里奥尔语、日语、卡纳达语、韩语、马拉地语、马来语、挪威语、新挪威语、旁遮普语、拉贾斯坦语、托克皮辛语、约鲁巴语、粤语、尧语/农贡语和中文。gh-123961: 将
curses转换为多阶段初始化 (PEP 489),从而修复解释器关闭时的引用泄漏。由 Bénédikt Tran 提供补丁。gh-117151:
shutil.copyfileobj()使用的默认缓冲区大小在非 Windows 平台上已从 64k 增加到 256k。在 Windows 上已经更大。gh-90102: 在 open() 期间跳过
isatty系统调用,当已知文件不是字符设备时。这在读取整个文件时提供了轻微的性能提升。gh-124917: 允许在 Windows 上使用关键字参数调用
os.path.exists()和os.path.lexists()。修复了 3.13.0 版本中的回归问题。gh-65865:
argparse现在会为add_argument()、add_subparsers()和add_parser()的无效help参数引发早期错误。gh-91818: 许多模块的 CLI (
ast、ensurepip、json、pdb、sqlite3、tokenize、venv) 现在使用实际的可执行文件名而不是简单的 "python" 来显示在用法消息中。gh-124858: 修复在
asyncio.open_connection()与happy_eyeballs_delay一起使用时留下的引用循环在 tracebacks 中的问题。gh-124390: 修复了在使用
asyncio.staggered.staggered_race()与asyncio.eager_task_factory时引发的AssertionError。gh-85935: 现在,如果为位置参数指定了不消耗参数的 action (如'store_const'或'store_true') 或显式指定了``nargs=0``,
argparse.ArgumentParser.add_argument()会引发异常。gh-124835: 让
tomllib.loads()在输入类型不良且不具有replace属性时引发TypeError而非AttributeError。改进接收到bytes时的错误信息。gh-124787: 修复了
typing.TypeAliasType中type_params参数不正确的问题。现在,当没有默认值的类型参数跟随有默认值的参数时,以及当type_params元组中的条目不是类型参数对象时,会引发TypeError。gh-66436: 改进了
argparse.ArgumentParser的 prog 默认值。现在它将包括Python可执行文件的名称以及模块或包名,或者如果代码是以这种方式运行的,将包括目录、ZIP文件或ZIP文件内目录的路径。gh-101552: 向
inspect.signature()添加了一个 annotation_format 参数。向inspect.Signature.format()添加了一个 quote_annotation_strings 参数。使用新功能改进了pydoc中签名注释的显示。由Jelle Zijlstra提供补丁。gh-124594: 所有
asyncioREPL提示符都在同一个context中运行。由Bartosz Sławecki贡献。gh-61181: 修复了
argparse中对带有字符串值的 choices 的支持。不再认为指定字符串的子字符串为有效值。gh-116750: 提供
sys.monitoring.clear_tool_id()以注销由工具设置的所有事件和回调。gh-124538: 修复了在胶囊对象上使用
gc.get_referents()时的崩溃问题。gh-80259: 修复
argparse对带有nargs='?'、default=argparse.SUPPRESS和指定type的位置参数的支持。gh-120378: 修复了与
curses.resizeterm()和curses.resize_term()中整数溢出相关的崩溃问题。gh-124498: 修复
typing.TypeAliasType当type_params为空元组时不泛型的问题。gh-53834: 修复
argparse中对带有 choices 的参数的支持。带有 nargs 等于'?'或'*'的位置参数不再检查 默认值 是否匹配choices。带有nargs等于'?'的可选参数不再检查 const 是否匹配choices。gh-123884: 修复了 itertools.tee() 处理其他 tee 输入(tee 中的 tee)时的 bug。现在输出具有承诺的 n 个独立新迭代器。以前,第一个迭代器与输入迭代器相同(不独立)。这有时会给出令人惊讶的结果。
gh-123017: 由于在某些设备上结果不可靠,
time.strftime()不再在 Android 上接受负年份。gh-123014:
os.pidfd_open()和signal.pidfd_send_signal()现在在针对 Android API 级别低于 31 构建时不可用,因为底层系统调用可能导致崩溃。gh-124176: 在
unittest.mock.create_autospec()中添加对dataclasses.dataclass()的支持。现在create_autospec将检查潜在的数据类并使用dataclasses.fields()函数检索规范信息。gh-124400: 修复了
pdb中的一个bug,其中until在commands序列中出现时无效。同时避免在断点处打印框架信息,如果该断点包含一个恢复执行的命令列表。gh-90562: 修改数据类以支持在指定
slots=True时无参数的super()。这是通过修改所有指向新创建类的__class__引用实现的。gh-104860: 修复在
argparse中不允许单破折号长选项缩写的问题,当``allow_abbrev=False``时。gh-63143: 修复在
argparse中解析互斥参数的问题。与默认值相同值的参数(例如布尔值、小整数、空或1字符字符串)不再被视为“不存在”。gh-72795: 具有 nargs 等于
'*'或argparse.REMAINDER的位置参数不再必需。这允许在互斥组中使用nargs='*'且没有default的位置参数,并改进了关于必需参数的错误消息。gh-59317: 修复如果前面有一个选项和另一个位置参数时,解析 nargs 等于
'?'或``'*'``的位置参数的问题。gh-100980:
ctypes.Structure和Union的_fields_属性在setattr操作引发错误时不再设置。gh-111513: 改进由
datetime.date.fromtimestamp()可能引发的错误消息。gh-81691: 修复在
argparse中处理多个"--"(双破折号) 的问题。现在只移除第一个,所有后续的都按字面意思处理。gh-84559: Linux 和其他 POSIX 系统上
multiprocessing的默认启动方法已从通常不安全的"fork"更改为"forkserver"(当平台支持通过管道发送文件句柄时,大多数平台都支持) 或"spawn"。Mac 和 Windows 保持不变,因为它们已经默认为"spawn"。gh-124171: 为 Windows 上损坏的
fmod()实现添加了变通方案,该实现会丢失零的符号(例如,fmod(-10, 1)返回0.0)。由 Sergey B Kirpichev 提供补丁。gh-123978: 在 NetBSD 上移除损坏的
time.thread_time()和time.thread_time_ns()。gh-123934: 修复
unittest.mock.MagicMock在调用.reset_mock(return_value=True)后重置魔术方法返回值的问题。gh-124016: 将
unicodedata数据库更新到 Unicode 16.0.0。gh-123968: 修复
random模块的命令行界面,使其选择 0 到 N 之间的浮点数,而不是 1 到 N 之间。gh-123935: 修复数据类继承自具有
__dictoffset__的类时的父槽检测问题。gh-123892: 将
"_wmi"添加到sys.stdlib_module_names。由 Victor Stinner 提供补丁。gh-84808: 在
errno可能为负的平台上修复socket方法connect_ex()中的错误处理。gh-123756: 向
pdb.Pdb添加了一个新参数mode。只允许命令行中的pdb使用restart命令。gh-122765: 修复当
venv中的 activate.csh 被源时,如果自定义提示包含不成对的引号或换行符,会发生的不平衡引号错误。gh-123657: 修复
decimal.getcontext()中的崩溃和内存泄漏。当使用线程本地上下文时,通过--with-decimal-contextvar=no会导致崩溃。gh-123339: 修复
inspect.getsource()对于collections.abc和decimal(纯Python实现) 模块中的类。如果类的__firstlineno__值超出范围,inspect.getcomments()现在会抛出 OSError 而不是 IndexError。gh-123374: 移除
pickletools.dis()中对重新定义的备忘录条目的检查。gh-123430: 由
http.server模块生成的页面允许浏览器应用其默认的暗模式。gh-123446: 当
csv.reader(),csv.writer(), 或csv.register_dialect()在没有必需参数的情况下使用时,修复TypeError中的空函数名问题。gh-123448: 通过将
typing.NoDefault移动到静态类型数组,修复了其内存泄漏问题。gh-123409: 根据 RFC 3596, §2.5 修复
ipaddress.IPv6Address.reverse_pointer的输出。由 Bénédikt Tran 提供补丁。gh-123089: 使
weakref.WeakSet在迭代时安全抵抗并发修改。补丁由 Kumar Aditya 提供。gh-123363: 在
dis输出中显示CONTAINS_OPoparg 的字符串值。由 Alexandr153 提供补丁。gh-123341: 向
tkinter.Event添加__class_getitem__()以支持运行时的类型下标。由 Adonis Rakateli 提供补丁。gh-119518: 通过不内部化字符串部分,加速
pathlib.PurePath和Path对象的规范化。gh-123270: 对
zipfile.Path中导致无限循环的畸形负载应用了更为精确的修复(gh-122905),而不会破坏使用合法字符的内容。gh-73991: 添加
pathlib.Path.copy_into()和move_into(),它们将文件和目录复制和移动到 现有 目录中。gh-123228: 将
_pyrepl.readline._ReadlineWrapper.get_line_buffer()的返回类型修复为str()。由 Sergey B Kirpichev 提供补丁。gh-76960: 修复
urllib.parse.urljoin()和urllib.parse.urldefrag()对于包含空组件的 URI。例如,带有相对引用 "?" 的urljoin()现在设置空查询并移除片段。在urljoin()中保留空组件(授权、参数、查询、片段)。在urldefrag()中保留空组件(授权、参数、查询)。gh-116810: 解决了 CPython 3.10 的
ssl中访问ssl.SSLSocket.session属性时引入的内存泄漏。不再通过序列化不必要地克隆会话对象,从而加快了对所述属性的读写访问。gh-123243: 修复
_decimal中的内存泄漏。gh-122546: 在新 repl 中一致地为不同的异常使用相同的文件名。补丁由 Sergey B Kirpichev 提供。
gh-123213:
xml.etree.ElementTree.Element.extend()和Element赋值不再隐藏如果传递了错误的生成器时的内部异常。由 Bar Harel 提供补丁。gh-85110: 在
urllib.parse.urlunsplit()和urllib.parse.urlunparse()中保留没有 netloc 的 URL 的相对路径。gh-122909: 在 urllib.request 中,当打开 ftp URL 引发 URLError 时,异常参数现在始终是一个字符串。早期版本将字符串或 ftplib 异常实例作为参数传递给 URLError。
gh-123084: 弃用
shutil.ExecError,自 Python 3.4 以来没有任何shutil函数抛出过它。现在它是RuntimeError的别名。gh-123085: 在裸调用
importlib.resources.files()时,确保当importlib.resources本身仅作为编译模块可用时(无源代码),能正确检测到调用者的帧。gh-123067: 通过
http.cookies修复解析带有反斜杠的"引号包围的 cookie 值时的二次复杂度问题。gh-123049: 在
configparser.ConfigParser.add_section()中添加对UNNAMED_SECTION的支持。gh-121735: 在处理 zip 存档时,importlib.resources 现在能正确遵守模块相邻引用(例如
files(pkg.mod)而不仅仅是files(pkg))。gh-122981: 修复
inspect.getsource()对于具有 Python 基类(如枚举)的生成类的支持。gh-122903:
zipfile.Path.glob现在能正确匹配目录,而不是默默地忽略它们。gh-122905:
zipfile.Path对象现在会对来自 zipfile 的名称进行清理。gh-122873: 使
json模块能够通过-m开关作为脚本工作:python -m json。参见 JSON 命令行界面 文档。由 Trey Hunner 提供补丁。gh-122858: 弃用
asyncio.iscoroutinefunction(),推荐使用inspect.iscoroutinefunction()。gh-116263:
logging.handlers.RotatingFileHandler不再滚动空日志文件。gh-105376: 恢复已弃用的
loggingwarn()方法。它在 Python 3.13 alpha 1 中被移除。在 Python 3.13 中保留已弃用的warn()方法。由 Victor Stinner 提供补丁。gh-122311: 改进
pickle模块中的错误。现在更频繁地引发PicklingError而不是UnicodeEncodeError、ValueError和AttributeError,并且原始异常被链接到它。改进并统一 Python 和 C 实现中的错误消息。gh-122744: 将 ensurepip 中捆绑的 pip 版本提升至 24.2。
gh-118761: 通过大约七倍的速度提升
pprint的导入时间。补丁由 Hugo van Kemenade 提供。gh-118974: 向
dataclasses.make_dataclass()添加decorator参数以自定义数据类的函数式创建。gh-118814: 修复
typing.TypeVar构造函数在名称通过关键字传递时的问题。gh-122637: 根据最近的C标准调整
cmath.tanh(nanj)和cmath.tanh(infj)。gh-122478: 从
code.InteractiveInterpreter显示的非默认sys.excepthook()的追溯中移除内部帧。在sys.last_traceback中保存正确的追溯,并更新sys.last_value和sys.last_exc的__traceback__属性。gh-116622: 在Android上,
FICLONE和FICLONERANGE常量不再由fcntl公开,因为这些ioctls被SELinux阻止。gh-82378: 确保新的 REPL 以与经典REPL相同的方式解释
sys.tracebacklimit。gh-87320: 在
code.InteractiveInterpreter中,处理调用非默认sys.excepthook()引起的异常。之前,异常会冒泡到调用者,结束 REPL。gh-122272: 在一些平台如Linux上,使用C99特定说明符
'%C'或'%F'通过strftime()格式化时,带世纪的年份没有用0填充。现在,当C库支持格式说明符'%C'和'%F'时,保证0填充行为。由Ben Hsing提供补丁gh-122400: 在
filecmp.dircmp和filecmp.cmpfiles()中处理由os.stat()引发的ValueError。由Bénédikt Tran提供补丁。gh-121650: 现在,带有嵌入换行符的
email标题在输出时会被引用。generator现在会拒绝序列化(写入)不安全折叠或分隔的标题;参见verify_generated_headers。(由Bas Bloemsaat和Petr Viktorin在 gh-121650 中贡献。)gh-122332: 修复了在使用急切任务工厂时
asyncio.Task.get_coro()的段错误。gh-105733:
ctypes.ARRAY()现在是软弃用`:它不再发出弃用警告,并且不计划移除。gh-122213: 为pickle序列化错误添加了注释,允许识别错误的来源。
gh-119180: 作为 PEP 749 的一部分,添加了以下属性用于自定义注解作用域的评估:
在
typing.TypeAliasType上的evaluate_value在
typing.TypeVar上的evaluate_bound、evaluate_constraints和``evaluate_default``在
typing.ParamSpec上的evaluate_default在
typing.TypeVarTuple上的evaluate_default
gh-119180: 修复了在
annotationlib.get_annotations中处理具有自定义元类的类的问题。gh-122170: 在
linecache中处理由os.stat()抛出的ValueError。由Bénédikt Tran提供补丁。gh-122163: 为JSON序列化错误添加了注释,允许识别错误的来源。
gh-122129: 改进了帮助标题中方法描述符和包装器的支持。
gh-122145: 修复了当报告对应于发出空AST体的Python代码的追溯时的一个问题。由Nikita Sobolev和Bénédikt Tran提供补丁。
gh-121723: 使
logging.config.dictConfig()接受任何实现Queue公共API的对象。详情参见 queue configuration 部分。由Bénédikt Tran提供补丁。gh-82951: 在pickle协议<4中,通过名称序列化具有复杂
__qualname__的对象(如未绑定方法和嵌套类)不再涉及通过值序列化父对象。gh-120754:
Pathlib.read_bytes不再以 Python 的缓冲 I/O 模式打开文件。这减少了开销,因为代码一次性读取整个文件,从而实现了适度的加速。gh-113785:
csv现在正确解析以转义字符开头的数字字段(与csv.QUOTE_NONNUMERIC或csv.QUOTE_STRINGS一起使用时)。gh-122088:
@warnings.deprecated现在会拷贝函数和方法的协程状态以使inspect.iscoroutinefunction()返回正确的结果。gh-122081: 修复了通过
EXTRA_FUNCTIONALITY配置标志可用的decimal.IEEEContext()可选函数中的崩溃问题。gh-73991: 添加
pathlib.Path.move(),用于移动文件或目录树。gh-119698: 由于对
symtable.Class.get_methods()缺乏兴趣,该方法被标记为已弃用,并将在 Python 3.16 中移除。由 Bénédikt Tran 提供补丁。gh-121889: 根据最近的 C 标准调整了
cmath.acosh(complex('0+nanj'))。gh-121804: 在新 repl 中引发
SyntaxError时,正确显示错误位置。由 Sergey B Kirpichev 提供补丁。gh-121797: 添加了替代的
Fraction构造函数Fraction.from_number()。gh-121798: 添加了替代的
Decimal构造函数Decimal.from_number()。gh-120930: 修复了由 gh-92081 引入的一个错误,该错误在包裹的标头中出现的编码单词上添加了一个不正确额外的空白。
gh-57141:
filecmp.dircmp的 shallow 参数(Python 3.13 中新增)现在仅为关键字参数。gh-121245: 简化了
site.register_readline()辅助函数中历史文件的处理。现在CAN_USE_PYREPL变量将在导入时初始化。由 Sergey B Kirpichev 提供补丁。gh-121249: 如果编译器支持 C11 复数算术,则在
struct模块中支持 float complex 和 double complex C 类型。由 Sergey B Kirpichev 提供补丁。gh-121486:
math函数isqrt()、log()、log2()和log10()现在在 32 位平台上支持大于2**2**32的整数。gh-121474: 修复
threading.Barrier构造函数中parties参数缺少的健全性检查。由 Clinton Christian (pygeek) 提供补丁。gh-121450: 硬编码断点(
breakpoint()和pdb.set_trace())现在重用调用Pdb.set_trace()的最新Pdb实例,而不是每次创建新实例。因此,所有实例特定的数据如display和commands在硬编码断点之间得以保留。gh-119004: 修复 OrderedDict.__eq__ 在检查操作数被修改时的崩溃。由 Bénédikt Tran 提供补丁。
gh-121313: 在
multiprocessing.connection.Connection类中将读取大小限制为 64 KiB,以防止内存过度分配和不必要的内存管理系统调用。gh-121332: 修复带有自定义
_attributes的ast节点的构造函数。以前,传递自定义属性会引发DeprecationWarning。向构造函数传递不在_fields或_attributes中的参数仍然是不推荐的。由 Jelle Zijlstra 提供补丁。gh-121210: 在
ast.compare()中处理运行时字段或属性缺失的 AST 节点。由 Bénédikt Tran 提供补丁。gh-121163: 为
warnings.simplefilter()和warnings.filterwarnings()添加对all作为有效action的支持。gh-121141: 为 AST 节点添加对
copy.replace()的支持。由 Bénédikt Tran 提供补丁。gh-87744: 修复在 asyncio 中调用
send_signal()时的 waitpid 竞争问题。由 Kumar Aditya 提供补丁。gh-121027: 在
functools.partial.__get__()中添加未来警告。未来的 Python 版本中functools.partial将成为方法描述符。gh-121027: 使
functools.partial对象成为方法描述符。gh-117784: CPython 现在检测其链接的 TLS 库是否支持 TLSv1.3 握手后认证,并在不支持时禁用该功能。
gh-121025: 改进
functools.partialmethod的__repr__()。由 Bénédikt Tran 提供补丁。gh-121018: 修复
argparse.ArgumentParser.parse_args()未遵守exit_on_error=False的问题。基于 Ben Hsing 的补丁。gh-120910: 从 egg 读取安装文件时,使用
relative_to(walk_up=True)以尊重安装根目录之外安装的文件。gh-61103: 在
ctypes中支持 float complex、double complex 和 long double complex C 类型为c_float_complex、c_double_complex和c_longdouble_complex,如果编译器支持 C11 复数运算。由 Sergey B Kirpichev 提供补丁。gh-120888: 升级与 ensurepip 捆绑的 pip wheel(pip 24.1.1)
gh-101830: 在 Windows 上访问
tkinter对象的字符串表示不再将底层的 Tcl 对象转换为字符串。gh-120678: 修复新 REPL 中的回归问题,该问题意味着使用
-i参数传递的文件中的全局变量不会被包含在 REPL 的全局命名空间中。由 Alex Waygood 提供补丁。gh-120811: 修复
contextvars.Context.run()中可能的内存泄漏。gh-120713:
datetime.datetime.strftime()现在在 Linux 上对于格式说明符%Y和%G,年为少于四位数字时补零。由 Ben Hsing 提供补丁。gh-41431: 添加
datetime.time.strptime()和datetime.date.strptime()。由 Wannes Boeykens 贡献。gh-120743: 软弃用
os.popen()和os.spawn*函数。它们不应再用于编写新代码。推荐使用subprocess模块。由 Victor Stinner 提供补丁。gh-120732: 在使用
unittest.mock.create_autospec()时修复传递给unittest.mock.Mock对象的name。gh-111259:
re现在处理像"[\s\S]"或"\s|\S"这样的模式,这些模式匹配任何字符,效果与带有DOTALL修饰符的点("(?s:.)")相同。gh-120683: 修复
logging.LogRecord中的一个错误,当时间戳的整数部分被四舍五入,而毫秒计算被截断时,导致日志时间戳最多相差 999 毫秒(大约每 800 万时间戳中有一个受影响)。gh-118710:
ipaddress.IPv4Address和ipaddress.IPv6Address的属性version和max_prefixlen现在在类上可用。gh-120633: 在 turtledemo 中移动滚动条并移除撕下菜单。
gh-120284: 允许
asyncio.Runner.run()接受 awaitable 对象而不仅仅是 coroutines。gh-120495: 修复 Tab Nanny 中错误的异常处理。由 Wulian233 提供补丁。
gh-120388: 改进
unittest中测试方法返回非None值时的警告信息。现在我们会显示返回的对象类型以及可选的 asyncio 相关提示。gh-120381: 修正
inspect.ismethoddescriptor()以检查是否缺少__delete__()。由 Jan Kaliszewski 提供补丁。gh-90425: 使用
gzip.compress()时,gzip 头中的 OS 字节现在总是被设置为 255。gh-119180: 作为实现 PEP 649 和 PEP 749 的一部分,添加了一个新模块
annotationlib。为dataclasses、typing.TypedDict和typing.NamedTuple添加了对未解析的前向引用的支持。gh-119600: 修复
unittest.mock.patch()在new_callable设置时不读取目标属性的问题。由 Robert Collins 提供补丁。gh-120289: 通过禁止外部计时器中的
disable()和clear()来修复cProfile中的 use-after-free 问题。gh-82017: 添加了对任何具有
as_integer_ratio()方法的对象转换为Fraction的支持。gh-114053: 修复了一个边缘情况下的 bug,即在类作用域中的类型参数被类作用域中的赋值覆盖并且启用了
from __future__ import annotations语义时,typing.get_type_hints()会产生不正确的结果。由 Alex Waygood 提供补丁。gh-114053: 修复了当在文件顶部有
from __future__ import annotations的模块中,对使用了 PEP 695 类型参数的类调用inspect.get_annotations()并设置eval_str=True时出现的错误NameError。由Alex Waygood提供补丁。gh-120268: 禁止向纯Python的
datetime.date.fromtimestamp()传递None,以实现与C扩展实现的一致性。gh-120254: 向
pdb.set_trace()添加了commands参数,允许用户从源文件发送调试器命令。gh-120211: 修复了
tkinter.ttk与Tcl/Tk 9.0的兼容性问题。gh-71587: 修复了在重启的解释器上再次调用C版本的
datetime.datetime.strptime()时崩溃的问题。gh-117983: 在
importlib.util中推迟threading的导入,直到使用懒加载。gh-120157: 移除了
concurrent.futures中未使用的常量``concurrent.futures._base._FUTURE_STATES``。由Clinton Christian(pygeek)提供补丁。gh-119698: 修复了
symtable.Class.get_methods()并记录了其行为。由Bénédikt Tran提供补丁。gh-120121: 向模块的
__all__中添加了concurrent.futures.InvalidStateError。gh-119933: 添加了
symtable.SymbolTableType枚举,以表示symtable.SymbolTable.get_type方法的可能输出。由Bénédikt Tran提供补丁。gh-120029: 公开了
symtable.Symbol的方法is_free_class()、is_comp_iter()和is_comp_cell()。由Bénédikt Tran提供补丁。gh-120108: 修复了对已被修改为具有父节点引用的
ast树调用copy.deepcopy()的问题。由Jelle Zijlstra提供补丁。gh-120056: 添加
socket.IP_RECVERR和socket.IP_RECVTTL常量(两者自 Linux 2.2 起可用)。以及socket.IP_RECVORIGDSTADDR常量(自 Linux 2.6.29 起可用)。gh-120057: 添加了
os.environ.refresh()方法,以通过os.putenv()、os.unsetenv()或在 Python 外部在同一进程中做出的更改来更新os.environ。由 Victor Stinner 提供补丁。gh-120029: 在
symtable模块中公开symtable.Symbol.is_type_parameter()。补丁由 Bénédikt Tran 提供。gh-119819: 修复回归问题,允许使用多进程队列类型进行日志配置。
gh-65454:
unittest.mock.Mock.attach_mock()不再触发对正在附加的PropertyMock的调用。gh-118835: 修复使用带有 ANSI 转义码的自定义提示时 _pyrepl 崩溃的问题。
gh-81936:
help()和showtopic()方法现在尊重为pydoc.Helper配置的 output 参数,在这种情况下不使用分页器。由 Enrico Tröger 提供补丁。gh-119838: 在
Fraction和复数的混合算术运算中,分数现在被转换为float而不是complex。gh-89727: 修复
shutil.rmtree()的问题,其中在深层目录树上会引发RecursionError。gh-119577: 当测试
xml.etree.ElementTree.Element的真值时,发出的DeprecationWarning现在描述了在未来的版本中无条件返回True,而不是在 Python 3.14 中引发异常。gh-89727: 部分修复了
shutil.rmtree()的问题,即在深目录树上会引发RecursionError。当rmtree.avoids_symlink_attacks为 false 时,不再引发递归错误。gh-93963: 从
importlib.abc中移除已弃用的名称,如在importlib.resources.abc中所见。gh-89727: 通过将实现调整为迭代而非递归,修复了
os.fwalk()在深目录树上引发RecursionError的问题。gh-119594: 如果使用模数不为 None 调用 pow(fractions.Fraction, x, module),错误消息现在会说类型不兼容,而不是说 pow 只接受 2 个参数。由 Wim Jeantine-Glenn 和 Mark Dickinson 提供补丁。
gh-119588:
zipfile.Path.is_symlink现在评估给定路径是否为符号链接。gh-119562: 移除
ast.Num、ast.Str、ast.Bytes、ast.NameConstant和ast.Ellipsis。它们自 Python 3.12 起都已发出弃用警告。补丁由 Alex Waygood 提供。gh-119555: 在 InteractiveColoredConsole 的 runsource() 方法中捕获来自
compile()的SyntaxError。由 Sergey B Kirpichev 提供补丁。gh-118908: 限制新 REPL 启动时从内部导入和定义中暴露的全局变量。由 Eugene Triguba 和 Pablo Galindo 提供补丁。
gh-119127:
functools.partial()对象的位置参数现在通过functools.Placeholder支持占位符。gh-113892: 现在,如果给定的套接字不在非阻塞模式下,
asyncio.ProactorEventLoop的sock_connect方法会像其他循环实现一样引发ValueError。gh-119506: 修复了在刷新内部缓冲区期间再次调用
io.TextIOWrapper.write()方法时会破坏内部缓冲区的问题。gh-69214: 修复
fcntl.ioctl()的 request 参数:将fcntl.ioctl()的 request 参数从unsigned int改为unsigned long,以支持大于UINT_MAX的请求。由 Victor Stinner 提供补丁。gh-119105:
difflib的DIffer.compare()``(以及 ``ndiff)不再可能被诱导出立方级时间行为或无限递归,并且在普通情况下通常也会更快。在某些情况下结果可能会有所变化,尽管这种情况应该很少见。差异的正确性不受影响。一些相隔较远的相似行可能会被报告为删除一行并添加另一行,而之前它们被显示在相邻的输出行上,带有显示行内差异的标记。gh-119443: 交互式 REPL 不再启用
from __future__ import annotations。由 Jelle Zijlstra 提供补丁。gh-119461: 添加了
socket.VMADDR_CID_LOCAL常量。由 Victor Stinner 提供补丁。gh-117398: datetime C-API 中的对象现在都是静态分配的,这意味着更好的内存安全性,尤其是在模块重新加载时。这对用户应该是透明的。
gh-118911: 在 PyREPL 中,更新了
maybe-accept的逻辑,使得如果用户按下 Enter 两次,即使有尾随空格,也能够终止块。此外,现在当用户按下上箭头键时,光标会位于最后一个功能行上。这与 IPython 的行为相匹配。由 Aya Elsayed 提供补丁。gh-115225: 对传递给
datetime.time.fromisoformat()的某些技术上有效但不规范的 ISO 8601 字符串引发错误,这些字符串之前被错误解析。gh-119189: 当使用
**操作符或pow()时,如果基数是Fraction且指数不是有理数、浮点数或复数,分数不再转换为浮点数。gh-119174: 修复高 DPI 导致 turtledemo(turtle-graphics 示例)窗口模糊的问题。由 Wulian233 和 Terry Jan Reedy 提供补丁。
gh-119121: 修复
asyncio.staggered.staggered_race中发生的 NameError。该函数现已测试。gh-119105: 对于许多对行相似度相等的差异情况,
difflib.Differ现在快得多。gh-119113: 修复
pathlib.PurePath.with_suffix()在给定None作为后缀时未引发TypeError的问题。gh-118643: 修复
email模块在重新折叠长地址列表时的 AttributeError。同时修复地址列表中地址分隔符编码不正确的问题。gh-73991: 添加
pathlib.Path.copy(),用于将文件或目录复制到另一个位置。gh-82805: 支持
pathlib.PurePath.suffix及相关属性和方法中的单点文件扩展名。例如,PurePath('foo.bar.')的suffixes现在是['.bar', '.']而不是[]。这使得文件扩展名分割与os.path.splitext()保持一致。gh-118924: 从
sqlite3中移除version和version_info。由 Hugo van Kemenade 提供补丁。gh-118928: 禁止在
sqlite3查询中使用带有命名占位符的参数序列。由 Erlend E. Aasland 提供补丁。gh-118895: 现在在
typing.NoDefault上设置属性会引发AttributeError而不是TypeError。gh-118868: 修复了 kwargs 不再传递给日志处理程序 QueueHandler 的问题。
gh-118827: 从
urllib.parse中移除已弃用的Quoter类。自 Python 3.11 起,它已经引发DeprecationWarning。由 Nikita Sobolev 提供补丁。gh-118824: 移除已弃用的
pty.master_open()和pty.slave_open()。改用pty.openpty()。由 Nikita Sobolev 提供补丁。gh-118851:
ast节点类构造函数的ctx参数现在默认为ast.Load()。由 Jelle Zijlstra 提供补丁。gh-101588: 从 itertools 中移除 copy、deepcopy 和 pickle。自 Python 3.12 起,这些已经引发 DeprecationWarning。
gh-118805: 移除
argparse.BooleanOptionalAction的 type、choices 和 metavar 参数。自 Python 3.12 起,这些已被弃用。gh-118803: 移除
typing.ByteString和collections.abc.ByteString。自 Python 3.12 起,这些已经引发DeprecationWarning。gh-118798: 从
email.utils.localtime()中移除 isdst 参数。由 Hugo van Kemenade 提供补丁。gh-118760: 将
tkinter.wantobjects的默认值恢复为1。gh-118760: 修复在 Windows 上调用 Tkinter 绑定的错误。
gh-74033: 放弃支持向
pathlib.Path传递关键字参数。gh-101357: 抑制来自
pathlib.Path.exists()和is_*()方法的所有OSError异常,而不是选择性地处理一些更常见的错误。新行为与os.path.exists()、os.path.isdir()等一致。使用pathlib.Path.stat()来检索文件状态而不抑制异常。gh-78707: 放弃支持向
pathlib.PurePath.relative_to()和is_relative_to()传递额外的位置参数。gh-118507: 修复 Windows 上
os.path.isfile()对于管道的判断。通过原生实现加速 Windows 上的os.path.isjunction()和os.path.lexists()。gh-118772: 允许
typing.TypeVar实例在某些情况下跟随无默认值的实例。由 Jelle Zijlstra 提供补丁。gh-118714: 允许在
pdb的事后调试中使用restart。移除当用户从事后模式退出 pdb 时的重启消息。gh-118673: 从标准库模块中移除可执行位和 shebang。
gh-110863:
os.path.realpath()现在在 strict 模式禁用(默认)时抑制来自os.readlink()的任何OSError。gh-118263: 通过直接 C 调用加速
os.path.splitroot()和os.path.normpath()。gh-110190: 通过在 stgdict 中设置
MAX_STRUCT_SIZE为 32 来修复 SPARC 上带有数组的 ctypes 结构体。由 Jakub Kulik 提供补丁。gh-118033: 修复
dataclasses.dataclass()在继承typing.Generic时不创建__weakref__槽的问题。gh-106531: 在
importlib.resources中,与 importlib_resources 6.3.2 同步,包括:MultiplexedPath现在期望Traversable路径,弃用MultiplexedPath的字符串参数;启用对 zip 文件中命名空间包资源的支持;修复在命名空间包的子目录上调用文件时的NotADirectoryError。gh-115937: 移除了对
__signature__属性的额外预处理:代码仅检查它是否为inspect.Signature实例。由 Sergey B Kirpichev 提供补丁。gh-115808: 添加
operator.is_none()和operator.is_not_none()函数。gh-114264: 通过为原子类型添加快速路径来提高
copy.deepcopy()的性能。gh-113878: 向
dataclasses.field()添加 doc 参数,以便它可以作为文档/元数据存储和显示。如果使用@dataclass(slots=True),则提供的字符串将在__slots__字典中可用。否则,提供的字符串仅在相应的dataclasses.Field对象中可用。gh-113978: 忽略 REPL 内部文本完成的警告。
gh-113008: 为包含位置参数的必需互斥组更正 argparse 使用输出。
gh-108172:
webbrowser在 Linux 上尊重操作系统首选的浏览器,当其桌面条目名称包含已知浏览器名称的文本时。gh-109109: 您现在可以通过
ssl.SSLSocket.get_verified_chain()和ssl.SSLSocket.get_unverified_chain()方法从 TLS 连接获取原始 TLS 证书链。由 Mateusz Nowak 贡献。
gh-105623: 修复
logging.handlers.RotatingFileHandler中的性能下降问题。由 Craig Robson 提供补丁。gh-102450: 向
datetime.datetime.fromisoformat()和datetime.time.fromisoformat()添加缺失的 ISO-8601 24:00 替代为下一天的午夜。由 Izan "TizzySaurus" Robinson (tizzysaurus@gmail.com) 提供补丁。gh-92081: 修复电子邮件头中混合有编码的 8 位字符时缺少空格的问题。
gh-103194: 准备 Tkinter 以应对 Tcl 8.7/9.0 中的 C API 更改,避免意外返回
_tkinter.Tcl_Obj而不是bool、str、bytearray或int。gh-87106: 修复了当存在可变关键字参数(例如
**kwargs)时,inspect.Signature.bind()处理与位置参数同名的关键字参数的问题。gh-103134: 向
multiprocessing模块中的 代理对象 添加了额外的方法:clear()和copy()用于list的代理fromkeys(),reversed(d),d | {},{} | d,d |= {'b': 2}用于dict的代理
bpo-45767: 修复了
os.major(),os.minor(), 和os.makedev()中的整数转换。支持大于2**63-1的设备号。支持不存在的设备号(NODEV)。bpo-44864: 不在
argparse.ArgumentParser中翻译用户提供的字符串。bpo-41843: Solaris 现在使用
os.sendfile()快速复制系统调用,以提高shutil文件复制相关函数的效率。bpo-15987: 实现了
ast.compare()用于比较两个 AST。由 Batuhan Taskaya 提供补丁,Jeremy Hylton 提供了一些帮助。gh-67693: 修复了
urllib.parse.urlunparse()和urllib.parse.urlunsplit()对于路径以多个斜杠开始且没有权限的 URI 的处理。基于 Ashwin Ramaswami 的补丁。
IDLE¶
gh-122392: 在高分辨率显示器上增加了 IDLE 浏览器(路径、模块和堆栈)当前不足的垂直间距。
gh-112938: 修复了 Shell 在快速连续输出时不可中断的挂起问题。
gh-122482: 更改 About IDLE,将用户引导至 discuss.python.org,而不是现在未使用的 idle-dev 电子邮件和邮件列表。
gh-78889: 通过阻止用户访问非方法 sys.stdout.shell 属性(这些属性都是私有的)来停止 Shell 冻结。
gh-120083: 为最近的 macOS 添加了明确的黑色 IDLE Hovertip 前景色。修复了 Sonoma 显示不可读的白色在淡黄色上的问题。由 John Riggles 提供补丁。
gh-120104: 修复IDLE中配置和搜索对话框窗口的填充问题。
文档¶
gh-124872: 添加了 context、current context 和 context management protocol 的定义,更新了相关定义以保持一致,并扩展了
contextvars.Context的文档。gh-125018:
importlib.metadata文档现在包括重要文档API的语义交叉引用目标。这意味着像importlib.metadata.version()这样的intersphinx引用现在将按预期工作。gh-124720: 更新"Python设置和使用"文档中的"在Mac上使用Python"部分,并包含安装自由线程支持的信息。
gh-124457: 从CPython仓库中移除coverity扫描。自2020年以来未使用,目前无人维护。
gh-116622: 添加Android平台指南,并标记在Android上不可用的模块。
gh-123976: 刷新关于自定义提供者的文档。
gh-70870: 澄清了术语"自由变量"的双重用途(既指正式意义上对外部作用域定义的任何名称引用,也指在
co_freevars中命名的非局部变量的狭义实用意义)。gh-121277: CPython文档的作者现在可以使用
next作为versionchanged、versionadded、``deprecated``指令的版本。gh-117765: 改进了
unittest.mock.patch.dict()的文档。gh-121749: 修复
PyModule_AddObjectRef()的文档。gh-120012: 澄清了
multiprocessing.Queue.empty()和multiprocessing.SimpleQueue.empty()在关闭队列上的行为。由Bénédikt Tran提供补丁。gh-119574: 添加了一些缺失的环境变量到
--help-env的输出中。bpo-34008:
Py_Main()文档从"非常高层次的API"部分移动到"初始化和终结"部分。同时明确指出,我们期望通常调用
Py_Main而非Py_Initialize之后调用它(因为Py_Main``会自行调用 ``Py_Initialize)。文档说明同时调用两者是支持的,但具体哪个设置会正确应用取决于版本。
核心与内置函数¶
gh-124375: 修复了在自由线程构建中,当垃圾回收与新线程启动同时进行时发生的崩溃。
gh-125221: 修复了在自由线程构建中首次调用
__reduce_ex__()时可能出现的竞争条件。gh-125174: 使对不朽对象引用计数的处理更加健壮。引用计数与原始引用计数偏差高达十亿(32位构建中为五亿)的不朽对象仍被视为不朽。
gh-125039: 在生成器情况下使
this_instr和prev_instr为常量。
库¶
gh-125008: 修复
tokenize.untokenize()在特定转义字符前的双大括号产生无效语法的问题。
核心与内置函数¶
gh-124871: 修复了在某些3.13版本中,可达性分析期间断言失败的编译器错误。
gh-123378: 修复了当
UnicodeError.start和UnicodeError.end值无效或超出范围时,UnicodeError对象的__str__()方法崩溃的问题。补丁由Bénédikt Tran提供。gh-118093: 提高了实验性JIT编译器在遇到高度偏置分支时保持"在轨迹上"的能力。
gh-124642: 修复了在多线程场景中从字典无锁读取的自由线程构建中的可扩展性问题。
gh-116510: 修复了由于不朽的内部字符串在使用基本单阶段初始化的子解释器之间共享而导致的崩溃。在这种情况下,字符串可以被创建和内部化它的解释器之外的另一个解释器使用。对于共享obmalloc状态的解释器,也与主解释器共享内部字典。
gh-116510: 修复了一个当子解释器使用“基本”单阶段扩展模块时可能导致崩溃的bug。共享对象可能引用已被作为解释器清理一部分释放的PyGC_Head节点。
gh-119180:
__main__模块不再总是在其全局命名空间中包含一个__annotations__字典。gh-124547: 当解除分配一个内联值对象且其
__dict__仍然存活时:如果内联值的内存分配失败,清除字典。防止解释器崩溃。gh-124513: 修复FrameLocalsProxy构造函数中的一个崩溃:检查参数数量。由Victor Stinner提供补丁。
gh-124442: 通过排序
__static_attributes__的值来修复编译中的非确定性。补丁由kp2pml30提供。gh-124285: 修复了在复合布尔表达式求值期间
bool(a)可能被多次调用的bug。gh-123856: 修复在使用历史搜索后触发键盘中断时PyREPL失败的问题。
gh-65961: 弃用设置和使用
__package__和__cached__。gh-119726: JIT现在为对C函数的调用生成更高效的代码,在AArch64上可实现高达0.8%的内存节省和1.5%的速度提升。由Diego Russo提供补丁。
gh-122878: 使用
pager二进制文件(如果可用,例如在Debian及其衍生系统上)来显示REPLhelp()。gh-124188: 修复了在编译器中引发语法错误时,从使用非UTF-8编码的源文件中读取和解码一行的问题。
gh-124027: 当
$TERM设置为vt100时,在Python REPL中支持<page up>、<page down>和<delete>键。gh-124022: 修复了在交互模式下从类中移除文档字符串的bug。
gh-123958: 现在在优化级别2中从优化的AST中移除文档字符串。
gh-123923: 内部
_PyInterpreterFrame结构体中的f_executable字段现在使用了标记指针。使用此字段的性能分析器和调试器应清除最低有效位以恢复 PyObject* 指针。gh-77894: 修复了垃圾回收器在尝试断开包含
memoryview对象的引用循环时可能发生的崩溃。现在,只有在没有缓冲区引用memoryview对象时才能清除它。gh-120221: asyncio REPL 现在再次能够正确识别 KeyboardInterrupts。修复了在次要线程中引发的异常的显示问题。
gh-119310: 允许新的交互式 shell 读取使用 editline 库编写的、使用 unicode 转义条目的历史文件。由 aorcajo 和 Łukasz Langa 提供补丁。
gh-123572: 修复了新 REPL 在 Windows 上各种 F 键的键映射问题。由 devdanzin 提供补丁。
库¶
gh-123614: 添加
turtle.save()以轻松将 Turtle 绘图保存为 PostScript 文件。由 Marie Roald 和 Yngve Mardal Moe 提供补丁。
核心与内置函数¶
gh-123339: 现在,为类设置
__module__属性会从类型的字典中移除__firstlineno__项,因此它们不再不一致。gh-119034: 将 Python REPL 的
<page up>和<page down>键更改为向前/向后搜索历史记录。由 Victor Stinner 提供补丁。gh-123562: 对于使用
case ... as ...但不是名称的情况,改进了SyntaxError消息。gh-123545: 在实验性 JIT 构建中罕见情况下修复了双重递减引用。
gh-123484: 修复
_Py_DebugOffsets对于长对象,使其相对于对象的开始而不是子对象的开始。gh-123440: 对于使用
except as但不是名称的情况,改进了SyntaxError消息。gh-116017: 通过定期释放不常执行代码占用的内存,改进了JIT内存消耗。这一改变尤其可能改善长时间运行程序的内存占用。
gh-123344: 为类型参数默认值添加AST优化。
gh-123321: 防止在多线程使用时Parser/myreadline竞争条件导致段错误。由Bar Harel和Amit Wienner提供补丁。
gh-123177: 修复了一个导致新REPL中在换行的中间出现杂散提示符的bug。
gh-122982: 将布尔反演(
~)的弃用期延长两年。gh-123275: 在非自由线程构建上支持
-X gil=1和PYTHON_GIL=1。gh-123177: 通过ANSI转义代码在Apple终端中停用行换行。由Pablo Galindo提供补丁。
gh-123229: 通过在分词器中初始化f-string缓冲区为0来修复valgrind警告。由Pablo Galindo提供补丁。
gh-122298: 恢复当调用
gc.set_debug(gc.DEBUG_STATS)时GC统计信息的打印输出。这一特性在实现增量GC时被意外移除。gh-121804: 在基本REPL中引发
SyntaxError时正确显示错误位置。由Sergey B Kirpichev提供补丁。gh-115776: 在任何实例大小固定的类上启用内联值(Python的隐藏类等价物)。
gh-123142: 修复来自理解中损坏的可迭代对象的异常跟踪中过宽的源位置。
gh-123048: 修复一个bug,其中模式匹配代码可能发出没有源位置的
JUMP_FORWARD。gh-118093: 将
CALL_ALLOC_AND_ENTER_INIT分解为微操作并放宽对精确参数的要求,以增加tier 2支持的代码量。gh-123123: 修复显示覆盖多行的
SyntaxError异常。由Pablo Galindo提供补丁。gh-123083: 修复
STORE_ATTR_WITH_HINT中潜在的释放后使用问题。gh-123022: 修复在非主线程中调用
Py_Initialize()时自由线程构建中的崩溃问题。gh-118093: 为
CALL_KW添加三个特化版本:CALL_KW_PY用于调用 Python 函数CALL_KW_BOUND_METHOD用于调用绑定方法CALL_KW_NON_PY用于所有其他调用
gh-122821: 确保
while语句中的分支对于sys.monitoring有一致的偏移量。现在while语句在主体末尾使用简单跳转编译,而不是重复测试。gh-122907: 使用
HAVE_DYNAMIC_LOADING构建现在的工作效果与 3.12 版本相同。现有的不足将单独处理。(参见 https://github.com/python/cpython/issues/122950。)gh-122888: 修复在错误类型的参数位置调用
str()时导致的崩溃。由 Jelle Zijlstra 提供补丁。gh-118093: 改进实验性 JIT 对多态代码的处理。
gh-122697: 修复了自由线程构建中解释器关闭时的内存泄漏,以及通过
-X showrefcount报告的内存块泄漏问题。gh-116622: 修复 Android 标准输出和标准错误消息被截断或丢失的问题。
gh-122527: 修复当
PyStructSequence在其类型的字典被 GC 清除后被释放时发生的崩溃。该类型的tp_basicsize现在计算了不包括在序列的Py_SIZE中的非序列字段。gh-122445: 仅将通过 self.* 修改的字段添加到
__static_attributes__。gh-122417: 在自由线程构建中,堆类型对象的引用计数现在部分以分布式方式存储在每个线程的数组中。这减少了在多个线程同时创建或销毁相同类型的实例时对堆类型引用计数字段的争用。
gh-122300: 保留f-string中单元素格式说明符的AST节点。由Pablo Galindo提供补丁。
gh-120906:
frame.f_locals现在支持任意可哈希对象作为键。gh-122245: 将对
__debug__的写入检测从编译器的代码生成阶段移到了符号表。这意味着现在即使在代码生成之前被优化的代码中(如使用-O命令行选项的断言),也能检测到这些错误。gh-122234: 在
sum()中,对于浮点和复数输入的和的特殊化现在总是使用补偿求和。此外,对于上述特殊化中的整数项,使用PyLong_AsDouble()而不是PyLong_AsLongAndOverflow()。由Sergey B Kirpichev提供补丁。gh-122208: 字典观察器现在仅在插入处于已知良好状态以成功时传递PyDict_EVENT_ADDED事件。
gh-122029: 在
sys.setprofile()中,当调用指向PyCFunction的PyMethodObject``时,发出 ``c_call事件。gh-122026: 修复了一个导致分词器在某些情况下不能正确识别f-string中不匹配括号的错误。补丁由Pablo Galindo提供。
gh-99108: Python的hashlib现在无条件地使用vendored HACL*库进行Blake2。Python不再接受libb2作为Blake2的可选依赖。
我们更新了HACL*至最新版本,现在vendored HACL*的128位和256位宽向量实现用于Blake2,这些实现在x86/x64工具链中,当运行时所需的CPU特性可用时使用。
HACL* 的 Blake2 128位宽向量实现也可以在 ARM NEON 和 Power8 上运行,但由于缺乏性能提升的证据,这些功能尚未启用。
库¶
核心与内置函数¶
gh-121860: 修复了在删除后重新实例化托管字典时崩溃的问题。
gh-121795: 提高了当参数为集合时,集合成员测试、
set.remove()和set.discard()的性能。gh-121814: 修复了当
PyEval_SetTrace()在堆栈上没有 Python 帧时使用时导致的段错误。gh-121295: 修复了 PyREPL 控制台在中断长粘贴后进入阻塞状态的问题。
gh-121794: 修复了在自由线程 Python 中,复活对象可能导致引用计数断言失败的错误。
gh-121657: 如果用户试图在函数外部使用
yield from,改进了SyntaxError的错误消息。gh-121609: 修复了新 REPL 中包含 Unicode 字符连接符的字符粘贴问题。由 Marta Gomez Macias 提供补丁。
gh-121297: 以前,Python 编译器不会标记由
-O选项移除的代码中await或异步推导的错误使用。现在,此类代码会引发SyntaxError。由 Jelle Zijlstra 提供补丁。gh-117482: 在子解释器中不再为内置静态类型创建意外的槽包装器。
gh-121562: 通过用查找表替换 switch-case 优化了 hex_from_char 的性能。
gh-121499: 修复了一个影响新 REPL 在与新屏幕缓存交互后如何渲染多行历史的错误。由 Pablo Galindo 提供补丁。
gh-121497: 修复了一个阻止 REPL 在设置了输入钩子时正确尊重历史的错误。由 Pablo Galindo 提供补丁。
gh-121012: Tier 2 执行现在确保列表迭代器一旦耗尽就保持耗尽状态。
gh-121439: 允许 freelist 中长度为 20 的元组被重用。
gh-121288: 针对
list.index(),range.index(),deque.index(),deque.remove()和ShareableList.index()的ValueError消息不再包含搜索值 的 repr (可能非常大) 并与其他index()和remove()方法的错误消息保持一致。gh-121368: 修复了自由线程构建中由于缺少内存屏障导致的
_PyType_Lookup中的竞争条件。这可能导致_PyType_Lookup在 arm64 上返回不正确的结果。gh-121149: 增加了复数求和的专门处理,这也提高了内置函数
sum()对此类输入的准确性。由 Sergey B Kirpichev 提供补丁。gh-121130: 修复了格式说明符中使用调试表达式的 f-strings。由 Pablo Galindo 提供补丁。
库¶
gh-121381: 移除了
subprocess._USE_VFORK的应急代码和文档。它只是为了以防万一添加的,并没有任何已知需要使用的情况。
核心与内置函数¶
gh-119726: 优化了 AArch64 上从 JIT 调用 C 函数的代码布局。由 Diego Russo 提供补丁。
gh-121115:
PyLong_AsNativeBytes()默认不再使用__index__()方法。添加了Py_ASNATIVEBYTES_ALLOW_INDEX标志以允许其使用。gh-120838:
Py_Finalize()和Py_FinalizeEx()现在总是在主解释器激活状态下运行。gh-113433: 子解释器现在在运行时终止期间自动清理。
gh-119726: 提高了 AArch64 上从 JIT 代码调用 C 函数的速度和内存使用效率。由 Diego Russo 提供补丁。
gh-116017: 简化了 JIT 代码中用于“侧退出”的预热机制,从而在大多数平台上实现了稍微更好的性能和稍微更低的内存使用。
gh-98442: 修复了 with 语句的清理指令的源代码位置过宽的问题。
gh-120754: 减少读取整个文件时调用的系统调用次数(例如
open('a.txt').read())。对于一个读取 cpython 仓库Doc文件夹中400多个.rst文件内容的示例程序,系统调用次数减少了超过10%。gh-119462: 确保类型版本化的不变性得到维护: * 超类总是先于子类分配其版本号 * 如果标签无效,版本标签始终为零。 * 如果标签有效,版本标签始终为非零。
gh-120722: 正确设置 lambda 中返回指令的字节码位置。由 Jelle Zijlstra 提供补丁。
gh-120367: 修复编译器在伪操作替换期间创建冗余跳转的 bug。只有在具有合成 AST 的情况下才会发生,该 AST 在异常处理程序之后的指令的同一行上有 try。
gh-120507: 移除
BEFORE_WITH和BEFORE_ASYNC_WITH指令。添加新的LOAD_SPECIAL指令。使用新指令为with和async with语句生成代码。gh-113993: 根据文档,使用
sys.intern()内联的字符串在不再使用时再次被垃圾回收。使用 C 函数PyUnicode_InternInPlace()内联的字符串仍然是不朽的。字符串内联机制的内部已经改变。这可能会影响str对象的性能和身份。
库¶
gh-120485: 在继承
socketserver.TCPServer的类上添加allow_reuse_port的重写,其中allow_reuse_address也被重写。
核心与内置函数¶
库¶
gh-120380: 修复使用协议版本5时,
pickle.Pickler对bytes和bytearray对象的Python实现。由Bénédikt Tran提供补丁。
核心与内置函数¶
gh-120397: 对于
str.count(),bytes.count()和bytearray.count()方法在计数单个字符时的吞吐量提高了最多两倍。gh-120221: 在新的REPL中,对Ctrl-C和Ctrl-Z传递真实的信号。由Pablo Galindo提供补丁。
gh-120346: 在交互式检查模式下运行(
python -i)时,尊重PYTHON_BASIC_REPL。由Pablo Galindo提供补丁。gh-93691: 修复为for语句的迭代器生成的指令的源代码位置。
gh-120198: 修复多个线程同时读写同一对象的
__class__时发生的崩溃问题。gh-120298: 修复在通过某些特别设计的恶意输入调用时,``list_richcompare_impl``中的使用后释放问题。
gh-119666: 修复在类作用域中两个推导式都引用
__class__的情况下编译器崩溃的问题。gh-119726: JIT: 在AArch64上创建模具时重复使用跳板。由Diego Russo提供补丁。
gh-120225: 修复在异常处理程序末尾的空块上编译器崩溃的问题。
gh-93691: 修复为with语句生成的指令的源代码位置。
gh-120097:
FrameLocalsProxy现在继承自collections.abc.Mapping,并且可以在match语句中作为映射进行匹配。gh-120080: 直接调用
int.__round__()现在接受None作为有效参数。gh-119933: 改善了类型参数边界、类型参数约束元组或默认类型参数中无效表达式的
SyntaxError消息。由Bénédikt Tran提供补丁。gh-119724: 撤销了对`elif`/
else`语句不匹配任何有效语句的错误消息的改进,这些改进使得在这些`elif/`else`块中定位语法错误变得困难。gh-119879: 字符串搜索在某些情况下现在稍微快了一些。现在它利用最后字符间隙(好后缀规则)来处理双向周期针。
gh-119842: 在新的REPL中尊重
PyOS_InputHook()。由Pablo Galindo提供补丁gh-119180:
classmethod()和staticmethod()现在懒加载地包装它们底层可调用对象的__annotations__和__annotate__属性。参见 PEP 649。由Jelle Zijlstra提供补丁。gh-119821: 修复了当`globals`设置为非字典时在类内部执行 annotation scopes 的问题。由Jelle Zijlstra提供补丁。
gh-118934: 使
PyEval_GetLocals返回借用引用gh-119740: 移除了之前弃用的
int()对__trunc__()的委托。gh-119689: 为来自bytecodes.c的伪指令生成堆栈效果元数据。
gh-109218:
complex()现在仅接受字符串作为位置参数。传递复数作为"real"或"imag"参数已被弃用;它应该仅作为单个位置参数传递。gh-119548: 向REPL添加了一个
clear命令。由Pablo Galindo提供补丁gh-111999: 修复了
str.format_map()的签名。gh-119560: 移除了beta 1中的一个无效断言。如果在扩展模块的init函数中,在模块定义初始化之前使用
PyState_FindModule(),该断言会失败。gh-119369: 修复了在自由线程构建中线程删除期间的死锁问题,该问题可能在运行时启用GIL时发生。
gh-119525: 修复了在自由线程构建中,当GIL在运行时动态启用时,涉及
_PyType_Lookup()缓存的死锁问题。gh-119258: 在第二层解释器中消除了类型版本守卫。
请注意,手动设置
tp_version_tag(从未被支持过) 可能会导致崩溃。gh-119311: 修复了泛型类基类中名称意外被篡改的错误。
gh-119395: 修复了泛型类后出现的名称被篡改为泛型类中的名称的错误。
gh-119372: 更正了复数除法中的无效极端情况(导致
(nan+nanj)输出),例如1/complex('(inf+infj)')。由 Sergey B Kirpichev 提交的补丁。gh-119180: 用
LOAD_COMMON_CONSTANT替换LOAD_ASSERTION_ERROR操作码,并添加对NotImplementedError的支持。gh-119213: 如果在主解释器之前用于子解释器中,使用参数诊所构建的非内置模块会崩溃。已修复因对象在不同解释器之间不小心泄露而导致的问题。
gh-119011: 修复
type.__type_params__返回空元组而非描述符的问题。gh-118692: 为避免监控创建不必要的
StopIteration实例。gh-119180: 作为 PEP 649 的一部分,向函数、类和模块添加
__annotate__属性。由 Jelle Zijlstra 提交的补丁。gh-119057: 改进
ZeroDivisionError错误消息。现在,所有错误消息都统一:所有/、//和%操作只使用“除以零”消息。而0 ** -1操作使用“零的负幂”。gh-118844: 修复同时配置
--disable-gil和--enable-experimental-jit时的构建失败。gh-118921: 为
FrameLocalsProxy添加copy()方法,该方法返回局部变量的快照dict。gh-117657: 修复在自由线程构建中发生的指向解释器主线程的指针字段上的数据竞争。
gh-118750: 如果
decimal模块的 C 版本可用,int(str)现在使用它来提供渐近更快的转换。然而,这仅适用于字符串包含超过约200万位数字的情况。gh-118767: 在布尔上下文中使用
NotImplemented现在会引发TypeError。由 Jelle Zijlstra 贡献。gh-118561: 修复在自由线程构建版中的竞争条件问题,即
list.extend()可能会将未初始化的内存暴露给并发读取器。gh-117139: 将 Python 评估栈转换为使用内部栈引用。目的是支持标记指针。在 PEP 703 中,这将允许其形式的延迟引用计数。对于默认和自由线程构建,这为未来未装箱整数设置了基础设施。
库¶
gh-115801: 当向
difflib.unified_diff()和difflib.context_diff()传递字符串时,引发TypeError。
核心与内置函数¶
gh-117558: 当期望长度为1的字符串、字节或字节数组对象时,改进错误消息。
gh-117195: 在调试构建中调用
object.__sizeof__(1)时避免断言失败。gh-116022: 改进
AST节点的__repr__()输出。gh-114091: 将无法等待的对象的错误消息从“对象 <type> 不能用于等待表达式”更改为“‘<type>’对象不能等待”。
gh-113190:
Py_Finalize()现在删除所有内部字符串。gh-84978: 添加类方法
float.from_number()和complex.from_number()。gh-95144: 当
b不是容器时,改进a in b的错误消息以提及“容器”一词。bpo-24766: 修复对
property子类的doc参数的处理。
C API¶
gh-123961: 将
Include/py_curses.h中由PyCursesWindow_Type宏暴露的 curses.window 静态类型转换为 堆类型。由 Bénédikt Tran 提供补丁。gh-124502: 将
PyUnicode_Equal()函数添加到有限的C API中:测试两个字符串是否相等。由Victor Stinner提供补丁。gh-124296: 根据 PEP 699,
PyDictObject不再维护一个私有版本标签字段ma_version_tag。该字段最初在Python 3.6中添加(PEP 509),并在Python 3.12中弃用。gh-124160: 修复在子解释器中导入包含状态和单阶段初始化的模块时崩溃的问题。
gh-124153: 添加
PyType_GetBaseByToken()和Py_tp_token槽以便于类型检查,与 PEP 489 和 PEP 630 相关。gh-124127: 在有限的C API 3.14及更高版本中,
Py_REFCNT()现在被实现为一个不透明的函数调用以隐藏实现细节。由Victor Stinner提供补丁。gh-123880: 修复了一个阻止使用单阶段初始化的扩展模块循环导入的错误。
gh-123909:
PyType_FromSpec()、PyType_FromSpecWithBases()和PyType_FromModuleAndSpec()现在会在新类型的元类有自定义tp_new时失败。gh-107954: 添加配置Python初始化的函数(PEP 741):
由Victor Stinner提供补丁。
gh-107954: 添加获取和设置当前运行时Python配置的函数:
由Victor Stinner提供补丁。
gh-123465:
Py_RELATIVE_OFFSET现在允许在PyMemberDef中用于特殊偏移成员"__vectorcalloffset__",以及不推荐使用的特殊偏移成员"__dictoffset__"和"__weaklistoffset__"。gh-100554: 添加了一个槽
Py_tp_vectorcall以通过PyType_FromSpec()函数家族设置tp_vectorcall。有限的API扩展可以使用此特性提供更高效的基于向量调用的__new__和__init__实现。gh-122854: 添加
Py_HashBuffer()以计算并返回缓冲区的哈希值。由Antoine Pitrou和Victor Stinner提供补丁。gh-122728: 修复
PyEval_GetLocals()以避免SystemError("内部函数参数错误") 。由 Victor Stinner 提供补丁。gh-116622: 让
PyObject_Print绕过 Android 和 OpenBSD 中的一个错误,该错误阻止它在尝试写入只读流时抛出异常。gh-105201: 添加
PyIter_NextItem()以替代PyIter_Next(),后者有一个模糊的返回值。由 Irit Katriel 和 Erlend Aasland 提供补丁。gh-121489: 再次导出私有
_PyBytes_Join()。gh-121645: 添加
PyBytes_Join(sep, iterable)函数,类似于 Python 中的sep.join(iterable)。由 Victor Stinner 提供补丁。gh-89364: 导出
PySignal_SetWakeupFd()函数。此前,该函数已被记录但无法在第三方代码中使用。由 Victor Stinner 提供补丁。gh-113993:
PyUnicode_InternInPlace()不再阻止其参数被垃圾回收。几个接受
char *的函数现在被记录为可能阻止字符串对象被垃圾回收;详情请参阅它们的文档:PyUnicode_InternFromString(),PyDict_SetItemString(),PyObject_SetAttrString(),PyObject_DelAttrString(),PyUnicode_InternFromString(), 和PyModule_Add*便利函数。gh-113601: 移除了与字符串驻留相关的调试构建断言,这些断言被稳定 ABI 扩展错误地触发。
gh-112136: 恢复私有的
_PyArg_Parser结构和私有的_PyArg_ParseTupleAndKeywordsFast()函数,这些在 Python 3.13 alpha 1 中曾被移除。补丁由 Victor Stinner 提供。gh-120642: 从公共 C API 中移除私有的
_Py_CODEUNIT类型。现在应该使用内部的pycore_code.h头文件来获取这个内部类型。由 Victor Stinner 提供补丁。gh-120858:
PyDict_Next()在自由线程构建中不再锁定字典。锁定需要由调用者在整个迭代循环周围完成。gh-120642: 移除以下不稳定函数:
PyUnstable_Replace_Executor()PyUnstable_SetOptimizer()PyUnstable_GetOptimizer()PyUnstable_GetExecutor()PyUnstable_Optimizer_NewCounter()PyUnstable_Optimizer_NewUOpOptimizer()
由Victor Stinner提供补丁。
gh-120389: 添加新函数以将 C
<stdint.h>数字与 Pythonint相互转换:由Victor Stinner提供补丁。
gh-120600: 在有限 C API 3.14 及更新版本中,
Py_TYPE()现在实现为一个不透明的函数调用以隐藏实现细节。由 Victor Stinner 提供补丁。gh-70278:
PyUnicode_FromFormat()不再在使用%s和%V精度时为截断的 C 字符串生成结束\ufffd字符。现在它会在截断的多字节序列开始之前截断字符串。gh-119771: 在
_Py_c_pow()中设置errno以处理溢出。由 Sergey B Kirpichev 提供补丁。gh-119182: 添加一个新的
PyUnicodeWriterAPI 来创建 Pythonstr对象:由Victor Stinner提供补丁。
gh-119613: 软弃用
Py_MEMCPY宏:直接使用memcpy()代替。 由 Victor Stinner 编写补丁。gh-119585: 修复当由
PyGILState_Ensure()创建的线程状态在PyThreadState_Clear()过程中调用一个析构函数,该析构函数又回调到PyGILState_Ensure()和PyGILState_Release()时崩溃的问题。这可能在自由线程构建中发生,或者在使用线程局部变量时,这些变量的析构函数调用了PyGILState_Ensure()。gh-119613: 宏
Py_IS_NAN,Py_IS_INFINITY和Py_IS_FINITE被 软弃用。gh-119336: 恢复被移除的
_PyLong_NumBits()函数。pywin32 项目使用了它。由 Ethan Smith 提供补丁gh-119344: 临界区 API 现在作为非限制 C API 的一部分公开。
gh-119333: 添加
PyContext_AddWatcher()和PyContext_ClearWatcher()API 来注册回调,以接收进入和退出上下文对象的通知。gh-119247: 添加
Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FAST和Py_END_CRITICAL_SECTION_SEQUENCE_FAST宏,使得在自由线程时安全使用 PySequence_Fast API 成为可能,并更新 str.join 以在不使用 GIL 的情况下工作。gh-111389: 添加
PyHASH_MULTIPLIER常量:用于字符串和各种其他哈希的素数乘数。由 Victor Stinner 提供补丁。gh-118771: 几个名称不以
Py或_Py前缀开头的 C 声明,这些声明在 3.13 alpha 和 beta 版本中被错误地添加,已被移动到内部头文件。gh-116984: 使 mimalloc 包含相对于当前文件的路径,以避免嵌入者或扩展需要包含
Internal/mimalloc,如果他们已经在包含内部 CPython 头文件。gh-118789: 添加
PyUnstable_Object_ClearWeakRefsNoCallbacks(),它会清除弱引用而不调用它们的回调。gh-118789: 恢复之前 Python 3.13 alpha 1 中移除的
_PyWeakref_ClearRef。gh-116560: 添加
PyLong_GetSign()函数。由 Sergey B Kirpichev 提供补丁。gh-87135: 在运行时终结已在另一线程开始时尝试获取 GIL 现在会导致线程挂起而非终止,这避免了因尝试终止一个正在运行代码的线程而可能导致的崩溃或内存损坏,这些代码并非专门设计来支持终止。在大多数情况下,这种挂起是无害的,因为进程很快就会退出。
PyThread_exit_thread函数现已弃用。其行为在平台间不一致,且只有在极不可能的情况下才能安全使用,即整个调用堆栈中的每个函数都已设计为支持平台依赖的终止机制。建议使用此函数的用户更改其设计,不再需要线程终止。在极不可能需要线程终止且可以安全完成的情况下,用户可以迁移到直接调用特定平台的 API,如pthread_exit(POSIX) 或_endthreadex(Windows) 。bpo-34008: 将
Py_IsInitialized添加到解释器初始化前可以安全调用的 API 列表中,并更新了嵌入测试以覆盖此功能。
构建¶
gh-125269: 修复在使用配置脚本交叉编译 CPython 时是否需要
-latomic的检测。gh-123990: 移除
WITH_FREELISTS宏和--without-freelists构建配置。gh-124102: 更新 PCbuild 下的内部文档,现在正确说明 Windows 需要 VS2017 或更高版本以及 Python 3.10 或更高版本。
gh-124043: 当 GIL 被禁用时,(暂时)禁止使用
--with-trace-refs构建。gh-123418: 更新 Android 构建以使用 OpenSSL 3.0.15。
gh-123297: 在
sysconfig中将LDFLAGS的值传播到LDCXXSHARED。由 Pablo Galindo 提供补丁。gh-121634: 允许为WASI指定目标编译三倍体。
gh-122578: 使用WASI SDK 24进行测试。
gh-116622: 将构建变量
MODULE_LDFLAGS重命名为LIBPYTHON,因为它被包构建系统(如Meson)使用。gh-118943: 修复了一个问题,其中实验性JIT可能被
make regen-all目标多次构建,导致在高度并行化构建中可能出现竞争条件。gh-121996: 引入 ./configure --disable-safety 和 --enable-slower-safety 选项。由Donghee Na提供的补丁。
gh-120522: 添加了一个
--with-app-store-compliance选项,以修补已知的macOS/iOS应用商店审查流程问题。gh-120371: 通过明确跳过在wasi-libc中仅为存根的函数来支持WASI SDK 22。
gh-121731: 修复GNU/Hurd上的mimalloc编译错误
gh-121487: 修复mimalloc中ATOMIC_VAR_INIT的弃用警告。
gh-121467: 修复一个Makefile错误,该错误阻止了mimalloc头文件的安装。
gh-121103: 在POSIX系统上,不包括macOS框架安装,自由线程构建的lib目录现在包含一个"t"后缀,以避免与同位置的默认构建安装冲突。
gh-120831: 默认的最低iOS版本已增加到13.0。
gh-121082: 修复开发者在配置命令中使用
--enable-pystats参数后由#118450引起的构建失败。gh-120671: 修复由于在附加到CFLAGS时缺少空格而导致的配置测试失败。
gh-120602: 在使用
--enable-experimental-jit构建时,正确处理带有LLVM_VERSION_SUFFIX的LLVM安装。gh-120688: 在WASI的调试模式下,Python现在使用编译器标志
-O3而不是-Og构建,以支持更多的递归调用。由Victor Stinner提供的补丁。gh-118943: 修复可能影响使用
--enable-experimental-jit配置的并行构建的竞争条件,其中FileNotFoundError可能由另一个进程已经将jit_stencils.h.new移动到jit_stencils.h引起。gh-120326: 在 Windows 上,修复当
--disable-gil和--experimental-jit选项结合使用时出现的构建错误。gh-120291: 使
python-configshell 脚本兼容非 bash shell。gh-113565: 在 configure 中改进
curses和curses.panel的依赖检查。gh-119729: 在 POSIX 系统上,pkg-config (
pc) 文件名现在包括 ABI 标志,可能包括调试("d")和自由线程("t")。例如:*python-3.14.pc(默认,非调试构建) *python-3.14d.pc(默认,调试构建) *python-3.14t.pc(自由线程构建)gh-119400:
make_ssl_certs,用于为测试套件准备证书数据的脚本,现在允许指定过期日期。gh-115119: 如果找不到系统版本,回退到捆绑的 libmpdec。
gh-119132: 更新
sys.version以标识构建是默认构建还是自由线程构建。由 Donghee Na 提供补丁。gh-118836: 修复当使用
--enable-experimental-jit构建且编译器发出SHT_NOTE部分时出现的AssertionError。gh-118943: 修复可能影响使用
--enable-experimental-jit配置的并行构建的竞争条件,其中编译错误可能由不完全生成的头文件引起。
Python 3.13.0 beta 1¶
发布日期:2024-05-08
安全性¶
核心与内置函数¶
gh-118414: 为 YIELD_VALUE 断言添加检测操作码以追踪情况。
gh-117953: 当内置或扩展模块首次被导入时,如果此时有一个子解释器处于活动状态,模块的初始化函数现在会首先在主解释器中运行,然后导入过程才会在子解释器中继续。因此,单阶段初始化的模块现在会在隔离的子解释器中失败,而不会在该解释器下运行初始化函数,而在此之前,它会在子解释器中运行 然后 失败,可能会留下全局状态和回调,或者以其他方式使模块处于不一致的状态。
gh-117549: 在内部头文件的内联函数中不要使用指定的初始化器语法。它们会对尚未使用最新C++标准(C++20)的C++或MSVC用户造成问题。虽然pycore_backoff.h是内部的,但它通过pycore_code.h间接被一些关键第三方软件包含,这些软件为了速度会这样做。
库¶
gh-95382: 在使用参数 indent 时,提高了
json.dumps()和json.dump()的性能。根据数据的不同,使用json.dumps()带 indent 的编码速度可以快2到3倍。
核心与内置函数¶
gh-116322: 在
--disable-gil构建中,GIL会在加载C扩展模块时启用。如果模块表明它支持在没有GIL的情况下运行,加载完成后GIL将被禁用。否则,GIL将在解释器的剩余生命周期内保持启用。如果GIL已通过PYTHON_GIL或-Xgil明确启用或禁用,则不适用此行为。gh-118513: 修复了当同一函数中的两个推导式都引用同一个名称,而在一个推导式中该名称被绑定而在另一个中是隐式全局时,错误的
UnboundLocalError。gh-118518: 允许Linux性能支持在没有帧指针的情况下使用perf的高级JIT支持工作。该功能在使用``PYTHON_PERF_JIT_SUPPORT``环境变量或使用
-Xperf_jit运行Python时激活。由Pablo Galindo提供补丁。gh-117514: 添加
sys._is_gil_enabled()函数,用于返回当前GIL是否启用。在默认构建中,由于GIL始终启用,该函数总是返回True。在自由线程构建中,它可能返回True或False。gh-118164: 打破
decimal模块的Python实现与整数到字符串转换的Python代码之间的循环。同时优化9_000到135_000位十进制数字范围内的整数到字符串转换。gh-118473: 修复
sys.set_asyncgen_hooks()在引发TypeError时部分设置的问题。gh-118465: 编译器在类上填充新的
__firstlineno__字段,该字段包含类定义的第一行的行号。gh-118492: 修复类型缓存可能暴露在运行终结器时先前访问的属性问题。
gh-117714: 更新
async_generator.athrow().close()和async_generator.asend().close()以关闭它们底层异步生成器的部分。gh-111201: 现在 interactive 解释器已在 Python 中实现,允许许多新功能,如颜色、多行输入、历史记录查看和粘贴模式。 由 Pablo Galindo、Łukasz Langa 和 Lysandros Nikolaou 基于 PyPy 项目的代码贡献。
gh-74929: 实现PEP 667:转换
FrameType.f_locals和PyFrame_GetLocals(),当帧引用函数或推导式时返回一个直写代理对象。gh-116767: 修复编译器在'async with'具有许多上下文管理器时崩溃的问题。
gh-118335: 改变如何使用第2层解释器。现在通过配置
--enable-experimental-jit=interpreter在构建时做出此选择,而不是通过运行Python时使用-X uops或设置环境变量PYTHON_UOPS=1。注意! 这将用于启用或禁用微操作的环境变量更改为
PYTHON_JIT。旧的PYTHON_UOPS不再使用。gh-118306: 更新JIT编译以使用LLVM 18
gh-118160: 类内的 Annotation scopes 现在可以包含推导式。不过,这样的推导式在运行时不会内联到其父作用域中。由Jelle Zijlstra提交的补丁。
gh-118272: 修复了
generator.close不释放生成器帧局部变量的bug。gh-118216: 不考虑模块名前带点的
__future__导入。gh-118074: 确保COLD_EXITS数组中的Executor对象不会被假定为可GC的(这会访问对象之外的字节)。
gh-107674: 延迟加载帧行号以提高追踪性能
gh-118082: 改进了对于没有名称的导入(如
from x import和import情况)的SyntaxError消息。现在它会向用户指出import期望其后至少有一个名称。gh-118090: 改进了对于空类型参数括号的
SyntaxError消息。gh-117958: 添加了一个
get_jit_code()方法,当实验性JIT启用时,用于从UOp Executor访问JIT编译的机器代码。由Anthony Shaw提交的补丁。gh-117901: 为编译器的代码生成添加了一个选项,用于保存嵌套指令序列以供内省。
gh-116622: 当嵌入到Android应用中时,将stdout和stderr重定向到系统日志。
gh-109118: 类作用域内的 annotation scope 现在可以包含lambda表达式。
gh-117894: 防止
agen.aclose()对象在.throw()后被重用。gh-117881: 防止通过athrow().throw()或asend().throw()并发访问异步生成器
gh-117536: 修复了调用
agen.aclose().throw(Exception)时的RuntimeWarning。gh-117755: 修复了s390x上对于巨大内存分配(约8,589,934,592 GiB)的mimalloc分配器。由Victor Stinner提交的补丁。
gh-117750: 修复了在清除对象字典时,对象字典与对象内部值不同步的问题。
obj.__dict__.clear()现在会清除内部值,但保留字典与对象的关联。gh-117431: 通过将以下
bytes和bytearray方法适配到METH_FASTCALL调用约定,提高了它们的性能:count()find()index()rfind()rindex()
gh-117709: 通过使用 PEP 590
vectorcall调用约定,加快了带有位置唯一参数的str()调用速度。由 Erlend Aasland 提供补丁。gh-117680: 为
_PyInstructionSequence提供了一个 Python 接口,并在测试中使用它。gh-115776: 静态分配的对象根据定义是不朽的,因此无论它们是否在扩展模块中,都必须被标记为不朽。
gh-117385: 从
sys.settrace()中移除了未处理的PY_MONITORING_EVENT_BRANCH和PY_MONITORING_EVENT_EXCEPTION_HANDLED事件。gh-116322: 扩展模块可以向运行时表明它们可以在没有 GIL 的情况下运行。多阶段初始化模块通过为
Py_mod_gil槽提供Py_MOD_GIL_NOT_USED来做到这一点,而单阶段初始化模块则在其初始化函数中调用PyUnstable_Module_SetGIL(mod, Py_MOD_GIL_NOT_USED)。gh-116129: 实现了 PEP 696,增加了对类型参数默认值的支持。补丁由 Jelle Zijlstra 提供。
gh-93502: 向 C-API 添加了两个新函数
PyRefTracer_SetTracer()和PyRefTracer_GetTracer(),它们允许以与tracemalloc模块相同的方式跟踪对象的创建和销毁。由 Pablo Galindo 提供补丁。gh-107674: 显著提高了
sys.settrace()的性能。gh-95754: 当脚本遮蔽标准库中的模块导致引发
AttributeError时,改进错误信息。同样地,当脚本遮蔽第三方模块并试图在初始化过程中访问该第三方模块的属性时,也改进错误信息。gh-99180: 在
return和简单的assignment语句中省略无信息的回溯指示器。由Pablo Galindo提供的补丁。
库¶
gh-118418: 现在,如果你没有为
typing._eval_type()或typing.ForwardRef._evaluate()的新 type_params 参数传递值,将发出DeprecationWarning。(首先,不鼓励使用这些私有且未文档化的函数,但如果没有为type_params参数传递值,可能会导致在 Python 3.12 或更新版本中出现错误行为。)gh-118660: 为
typing.ContextManager和typing.AsyncContextManager添加一个可选的第二个类型参数,分别表示__exit__()和__aexit__()的返回类型。此参数默认为bool | None。gh-118650:
enum模块允许在Enum类型上定义名为_repr_*的方法。gh-118648: 为
typing.Generator和typing.AsyncGenerator添加类型参数默认值。gh-118164: 如果上下文精度设置为非常高的值,
decimal模块的 Python 实现可能在相对较小的幂情况下(如2**117)看起来挂起。现在使用了一种不同的方法来检查完全可表示的结果,该方法不依赖于计算10**precision(这可能因为太大而无法有效计算) 。gh-111744:
breakpoint()和pdb.set_trace()现在在调用后立即进入调试器,而不是在执行下一行之前。gh-118406: 为
sqlite3.Connection对象添加签名。gh-101732: 在可用时使用兼容 Y2038 的 openssl 时间函数。
gh-118404: 修复
inspect.signature()对于不可比较的可调用对象的问题。gh-118402: 修复
inspect.signature()对于functools.cmp_to_key()调用结果的问题。gh-116622: 在 Android 上,
sysconfig.get_platform现在返回 PEP 738 指定的格式。gh-118285: 允许通过
__text_signature__属性指定扩展类型的自定义可调用实例的签名。指定operator.attrgetter、operator.itemgetter和operator.methodcaller实例的签名。gh-118314: 修复
binascii.a2b_base64()严格模式下的一个边缘情况,其中在不必要填充时未检测到过多的填充。gh-118271: 为
PhotoImage添加read()方法以从文件读取图像,以及data()方法以获取图像数据。为PhotoImage的write()方法添加 background 和 grayscale 参数。gh-118225: 为
PhotoImage添加copy_replace()方法以将一个图像的区域复制到另一个图像,可能带有像素缩放和/或子采样。为PhotoImage的copy()、zoom()和subsample()方法添加 from_coords 参数。为PhotoImage的copy()方法添加 zoom 和 subsample 参数。gh-118221: 修复了一个错误,其中如果使用了自定义的
row factory,sqlite3.Connection.iterdump()可能会失败。由 Erlend Aasland 提供补丁。gh-118013: 修复了在 gh-103193 中引入的回归问题,该问题意味着在实例上调用
inspect.getattr_static()会导致对该实例类的强引用在inspect模块的内部缓存中持续存在。如果类是动态创建的,类持有占用大量内存的其他对象的强引用,并且缓存包含对类的唯一强引用,这会导致意外的内存消耗。对该回归问题的修复导致getattr_static()的速度变慢,但该函数仍应比 Python 3.11 中的速度快得多。由 Alex Waygood 提供补丁。gh-118218: 在常见情况下,将
itertools.pairwise()的速度提高了多达 1.8 倍。gh-117486: 改进了
ast.AST的用户定义子类的行为。现在,这些类在通常情况下不需要任何更改即可符合 Python 3.13 中ast模块的行为变化。由 Jelle Zijlstra 提供补丁。gh-90848: 修复了
unittest.mock.create_autospec(),使其能够使用关键字参数配置父模拟。gh-118168: 修复了当
typing.Unpack与内置的tuple一起使用时的不正确参数替换。现在,当typing.Unpack与某些无效类型一起使用时,会引发TypeError。由 Jelle Zijlstra 提供补丁。gh-102511: 修复了 Windows 上 UNC 路径的
os.path.normpath()。通过原生实现加速os.path.splitroot()。gh-114053: 修复了在文件顶部有
from __future__ import annotations的模块中,对使用了 PEP 695 类型参数的类调用typing.get_type_hints()时出现的错误NameError。由 Alex Waygood 提供补丁。gh-116931: 为
tarfile.TarFile.addfile()添加了 fileobj 参数检查。gh-117995: 当使用 sequence 参数绑定索引化的无名占位符时,不再引发
DeprecationWarning。另见 gh-100668。gh-80361: 修复了当字符集为 RFC 2231 编码时,
email.message.Message.get_payload()中的 TypeError。gh-86650: 修复了解析一些带有无效 Message-ID(包括由 Microsoft Outlook 生成的一次性地址)的邮件时出现的 IndexError。
gh-117691: 改进了由
tarfile发出的与 PEP 706 相关的弃用警告的错误信息。如果未向extract()或extractall提供filter参数,弃用警告现在会指向用户代码中调用相关函数的那一行。由 Alex Waygood 提供补丁。gh-115874: 修复了在垃圾回收
_asyncio.FutureIter对象时可能出现的段错误。由 Savannah Ostrowski 提供补丁。gh-115060: 通过省略初始的
is_dir()调用,加速了pathlib.Path.glob()。由于这一变化,glob()不再能引发OSError。gh-77102:
site模块现在首先使用 UTF-8 解析.pth文件,如果发生UnicodeDecodeError则使用 locale encoding。之前仅支持 locale encoding。gh-76785: 我们为了 PEP 734 的 PyPI 实现,暴露了底层的
_interpreters模块。它有时可作为_xxsubinterpreters模块可用,以前仅用于测试。在大多数情况下,它应被视为内部模块,如_thread和_imp。参见 https://discuss.python.org/t/pep-734-multiple-interpreters-in-the-stdlib/41147/26。gh:
115060: 通过不对非通配符模式段扫描目录来加速pathlib.Path.glob()。gh:
117727: 通过内部使用os.scandir()来加速pathlib.Path.iterdir()。gh:
117586: 通过内部使用字符串来加速pathlib.Path.walk()。gh:
117722: 将asyncio.StreamReader.readuntil()中的新多分隔符支持更改为仅接受分隔符元组而不是任意可迭代对象。gh:
117692: 修复了当doctest.DocTestFinder在包装的builtin_function_or_method上失败时的错误。gh:
117348: 通过避免使用数据类,大幅恢复了 configparser 的导入时间性能。gh:
117641: 在 Unix 上加速os.path.commonpath()。gh:
117663: 修复_simple_enum以在存在多个参数但仅一个是成员值时检测别名。gh:
117636: 加速os.path.join()。gh:
117618: 支持package.module作为filename用于pdb的break命令。gh:
102247: http.HTTPStatus 中的状态码枚举常量已更新,以包含来自 RFC9110 的名称。该 RFC 包括一些以前仅用于 WEBDAV 的 HTTP 状态,并为它们分配了更通用的名称。旧常量被保留以向后兼容。
gh:
117607: 加速os.path.relpath()。gh:
117586: 通过内部使用字符串来加速pathlib.Path.glob()。gh:
117225: 为 doctest 输出添加颜色。由 Hugo van Kemenade 提供补丁。gh:
117566:ipaddress.IPv6Address.is_loopback()现在将对于 IPv4 映射的环回地址返回True,即::ffff:127.0.0.0/104地址空间中的地址。gh:
117546: 修复了os.path.realpath()在 POSIX 上遇到符号链接循环后停止解析符号链接的问题。gh-116720: 改进了
asyncio.TaskGroup在外部取消与内部取消冲突时的行为。例如,当两个任务组嵌套并且同时在子任务中遇到异常时,外部任务组可能会行为不当,因为它的内部取消被内部任务组吞没了。在任务组被外部取消并且必须引发
ExceptionGroup的情况下,现在会调用父任务的cancel()方法。这确保在下一个await时会引发asyncio.CancelledError,因此取消不会被丢失。这些更改的一个附加好处是现在任务组会保留取消操作计数 (
asyncio.Task.cancelling())。为了处理某些边界情况,现在
asyncio.Task.uncancel()可以在取消操作计数达到零时重置未写入文档的_must_cancel旗标。gh-117516: 添加
typing.TypeIs,实现 PEP 742。由 Jelle Zijlstra 提供补丁。gh-117503: 修复了在 Posix 系统上
os.path.expanduser()中非 ASCII 用户名的字节路径支持。gh-117394: 如果用户有权限,
os.path.ismount()现在快 2-3 倍。gh-117313: 在重新折叠
email消息时,仅将'\n'、'\r'和'\r\n'视为行分隔符。保留控制字符'\v'、'\f'、'\x1c'、'\x1d'和'\x1e'以及 Unicode 行分隔符'\x85'、'\u2028'和'\u2029'不变。gh-66543: 添加了
mimetypes.guess_file_type()函数,该函数适用于文件路径。在guess_type()中传递文件路径而非 URL 是 软弃用`。gh-68583: webbrowser CLI:用 argparse 替换 getopt,添加长选项。由 Hugo van Kemenade 提供补丁。
gh-116871:
AttributeError和ImportError的名称建议现在仅在原始名称有下划线时才包括带下划线的名称。gh-116023: 默认情况下不在
ast.dump()中显示空字段(值为None或[])。添加show_empty=False参数以可选地显示它们。gh-115961: 在模块
bz2、lzma、tarfile和zipfile中为压缩和归档文件类对象添加了name和mode属性。gzip.GzipFile的mode属性值从整数(1或2)更改为字符串('rb'或'wb')。由zipfile.ZipFile.open()返回的可读文件类对象的mode属性值从'r'更改为'rb'。gh-82062: 修复
inspect.signature(),以正确处理使用模块命名空间中定义名称的扩展模块中方法的参数默认值。gh-83856: 为所有
multiprocessing启动方法启用atexit。gh-112855: 加速
pathlib.PurePath对象的 pickle 操作。由 Barney Gale 提供补丁。gh-109617:
ncurses: 修复了在 macOS 13 或更早版本上,当 Python 使用 Apple Xcode 15 的 SDK 构建时可能发生的崩溃问题。gh-83151: 在
pdbshell 中启用任意语句和评估,以访问当前帧的局部变量,这使得生成器或嵌套函数等多作用域代码可以工作。gh-110209: 为类型提示目的,向
types.GeneratorType和types.CoroutineType添加__class_getitem__()。由 James Hilton-Balfe 提供补丁。gh-108191:
types.SimpleNamespace现在接受一个可选的定位参数,该参数指定属性的初始值作为一个字典或键值对的可迭代对象。gh-62090: 通过简化使用格式,修复了由
argparse中元变量或SUPPRESS-ed 组中的空白引起的断言错误。由 Ali Hamdan 提供补丁。gh-102402: 调整
logging.LogRecord使用time.time_ns()并修复与浮点数学相关的小错误。gh-100242: 通过不仅仅总是检查
partial的第一个参数是否存在'func'属性,使纯Python实现的functools.partial.__new__更符合C实现。相反,Python版本和C版本都在partial的第一个参数上执行isinstance(func, partial)检查。gh-99730: 在urllib中,HEAD请求不再在重定向时升级为GET请求。
gh-66410: 在创建
Tk对象或调用Tk对象的wantobjects()方法之前,将tkinter模块全局变量wantobjects设置为2,现在使得在tkinter模块中注册的回调参数根据其在Tcl中的内部表示作为各种Python对象(int、float、bytes、tuple)传递,而不仅仅是str。tkinter.wantobjects现在默认设置为2。bpo-40943: 修复了在解析带有截断的Message-ID、地址、路由等的电子邮件时出现的几个IndexError,例如
example@。bpo-39324: 添加 .md 文件扩展名与 text/markdown MIME 类型的映射关系。
bpo-18108:
shutil.chown()现在支持*dir_fd* 和 follow_symlinks 关键字参数。bpo-30988: 修复了解析带有无效地址头(开头或结尾有句点)的电子邮件的问题。由tsufeki提供补丁。
bpo-32839: 为Tkinter小部件添加
after_info()方法。
文档¶
gh-117928: 文档所需的最低Sphinx版本现在是6.2.1。
构建¶
gh-118734: 修复了在直接调用(不是通过
build.bat脚本)且没有为UseTIER2指定值时Windows构建的问题。gh-115119:
configure选项--with-system-libmpdec现在默认值为yes。捆绑的libmpdecimal副本将在Python 3.15中移除。gh-117845: 通过在 configure 中检测readline钩子签名,修复了针对最新libedit版本的构建问题。
gh-116622: 添加了一个测试平台项目以在Android上运行测试套件。
gh-117645: 将WASI的堆栈大小从512 KiB增加到8 MiB,初始内存从10 MiB增加到20 MiB。由Victor Stinner提交的补丁。
gh-115119: configure 现在使用 pkg-config 来检测
decimal依赖,如果给出了--with-system-libmpdec选项。
Windows¶
gh-115119: 更新Windows安装程序以使用libmpdecimal 4.0.0。
gh-118486:
os.mkdir()现在接受 mode 为0o700以限制新目录仅对当前用户开放。gh-118347: 修复了启动器更新未被安装的问题。
gh-118293:
multiprocessing模块现在在生成进程时传递STARTF_FORCEOFFFEEDBACK标志,告诉Windows不要改变鼠标光标。gh-115009: 更新Windows安装程序以使用SQLite 3.45.3。
gh-90329: 当请求的路径和创建的路径仅通过短(8.3风格)名称不同时,抑制在虚拟环境创建时显示的警告。如果路径中的连接或符号链接导致venv在不同于最初请求的位置创建,将继续显示警告。
gh-117786: 修复了从Store安装创建时虚拟环境未正确启动的问题。
macOS¶
IDLE¶
bpo-34774: 使用用户选择的颜色主题为Help => IDLE Doc。
C API¶
gh-118124: 修复
Py_BUILD_ASSERT和Py_BUILD_ASSERT_EXPR对于非常量表达式的问题:在C11及更新版本上使用static_assert()。由Victor Stinner提交的补丁。gh-110850: 添加PyTime函数的“原始”变体
由Victor Stinner提供补丁。
gh-117987: 恢复在Python 3.13 alpha 1中移除的函数:
由Victor Stinner提供补丁。
gh-117929: 恢复移除的
PyEval_InitThreads()函数。由Victor Stinner提供补丁。gh-117534: 改进 :c:meth:`datetime.datetime.fromisoformat` 的C实现中的验证逻辑,以更好地处理无效年份。由Vlad Efanov提供补丁。
gh-68114: 修复了skipitem()对旧的'w'和'w#'格式化器的处理。这些格式化器不再被支持,如果使用现在会引发异常。
gh-111997: 添加用于触发监控事件的C-API。
Python 3.13.0 alpha 6¶
发布日期: 2024-04-09
核心与内置函数¶
gh-117494: 将指令序列数据结构从compile.c重构到instruction_sequence.c中。
gh-116968: 引入一个统一的16位回退计数器类型(
_Py_BackoffCounter),在Tier 1自适应特化器和Tier 2优化器之间共享。用于自适应特化计数器的API已更改,但行为(应该)是相同的。Tier 2计数器的行为已更改:
不再有动态阈值(我们从未改变这些)。
所有计数器现在使用相同的指数回退。
``JUMP_BACKWARD``的计数器从16开始倒数。
侧面退出的
temperature从64开始倒数。
gh-117431: 通过将以下
bytes和bytearray方法适配到METH_FASTCALL调用约定,提高了它们的性能:endswith()startswith()
gh-117431: 通过使以下
str方法适应METH_FASTCALL调用约定,提高其性能:gh-117411: 将
PyFutureFeatures移动到内部头文件并使其私有化。gh-109120: 添加了对不正确星号表达式的处理,例如
f(3, *)。补丁由Grigoryev Semyon提供。gh-117266: 修复了某些用户创建的
ast.AST子类的崩溃问题。现在期望这些类设置``_field_types``属性。gh-99108: 更新了
hashlib内置的 HACL* project C 代码,这是我们用于许多实现的上游代码,当它们在给定构建中未通过 OpenSSL 提供时。这也避免了 C 符号名称一个定义规则链接问题的罕见可能性。gh-117108: 将年轻代中对象的旧空间位从 0 更改为 gcstate->visited,这样在 GC 期间创建的任何对象如果被移动到老年代,其旧位将被正确设置。
gh-117108: 循环 GC 现在基于堆的总大小而不是对象创建速率来选择增量的大小。这确保了它能够跟上堆的增长。
gh-116735: 对于
INSTRUMENTED_CALL_FUNCTION_EX,将arg0设置为sys.monitoring.MISSING而不是None,用于CALL事件。gh-116554:
list.sort()现在利用了更多部分排序的情况,特别是那些具有长下降序列和相等值的子序列的情况。这些现在被识别为单个序列(以前,每个重复值的块都会导致新序列的创建)。gh-114099: 添加了一个加载器,可以在 iOS 风格的 Frameworks 文件夹中发现扩展模块。
gh-115775: 编译器用类体中任何函数通过 self.X 访问的该类的属性名称填充类上的新
__static_attributes__字段。gh-115776: 值数组
PyDictValues结构现在在分配时嵌入到对象中。这在常见情况下提供了更好的性能,并且在对象的__dict__具体化时性能下降不多。gh-108362: 实现了一个增量循环垃圾收集器。通过增量收集老年代,无需进行完整的堆扫描。这可以极大减少拥有大堆的程序的最高暂停时间。
将代数从三代减少到两代。老年代被分成两个空间,“已访问”和“待处理”。
收集分两步进行:: * 从年轻代和待处理空间的一小部分形成一个增量。 * 扫描这个增量,并将幸存者移动到已访问空间的末尾。
当收集空间变空时,两个空间会交换。
库¶
核心与内置函数¶
bpo-24612: 改进了当'not'出现在操作符后时发生的
SyntaxError。由Pablo Galindo提供补丁
库¶
gh-117648: 提高了
os.path.join()和os.path.expanduser()的性能。gh-117584:在
posixpath.relpath中针对非路径参数引发TypeError异常。gh-117467: 在
mailbox.mbox.flush中重写时保留邮箱所有权。由 Tony Mountifield 提供补丁。gh-114848: 当
getcwd()返回'(不可达)'时引发FileNotFoundError,这在Linux >= 2.6.36且glibc < 2.27时可能发生。gh-117459:
asyncio.asyncio.run_coroutine_threadsafe()现在保留在协程中引发的 :CancelledError`、TimeoutError和InvalidStateError的追踪信息。gh-117381: 修复了
ntpath.commonpath()的错误信息。gh-117337: 弃用未记录的
glob.glob0()和glob.glob1()函数。使用glob.glob()并将其目录传递给它的 root_dir 参数代替。gh-117348: 重构了
configparser.RawConfigParser._read()方法以减少圈复杂度并提高可理解性。gh-117335: 对于非序列类型,
ntpath.commonpath()现在会抛出 TypeError。gh-66449: 如果配置允许,
configparser.ConfigParser现在可以接受在命名节之前的未命名节。gh-88014: 在 gzip 模块的
gzip.GzipFile文档中,解释了可选构造函数参数 mtime 的数据类型,并建议使用mtime = 0来生成确定性流。gh-117310: 修复了在创建新的
_ssl._SSLContext时,如果 CPython 被不合理地构建导致默认密码列表为空,或链接的 SSL 库报告其 CSSL_CTX_set_cipher_list()API 失败时,可能触发的早期及额外的Py_DECREF崩溃问题。gh-117294: 如果 doctest 中的所有示例都被跳过,
DocTestCase现在会报告为跳过。gh-98966: 在
subprocess中,当stdout=STDOUT时,会引发一个更信息化的消息。gh-117225: doctest:只有当非零时才打印“and X failed”,不要将“1 items”复数化。由 Hugo van Kemenade 提供补丁。
gh-117205: 通过增加
chunksize,在使用多处理时,compileall.compile_dir()的速度提高了 20%。gh-117182: 修改自身
__class__的模块的懒加载不再将__class__恢复为types.ModuleType。gh-117114: 使
os.path.isdevdrive()在所有平台上可用。对于不提供 Dev Drives 的平台,它将始终返回False。gh-117110: 修复了一个阻止
typing.Any的子类用参数实例化的错误。由 Chris Fu 提供补丁。gh-109653: 在 importlib.metadata 和 importlib.resources 中延迟选择导入,速度提升14%。
gh-70647: 开始弃用当前
datetime.datetime.strptime()和time.strptime()的行为,当年份 未 指定且日期恰好是2月29日时,如strptime("02-29", "%m-%d"),总是解析失败并抛出ValueError。这应有助于避免用户每四年因对API的自然错误假设而在解析部分日期值时发现新错误。gh-116987: 修复了
inspect.findsource()对类代码对象的处理。gh-114099: 修改标准库以适应iOS平台的差异。
gh-90872: 在Windows上,
subprocess.Popen.wait()不再用负超时调用WaitForSingleObject():如果超时为负,则传递0毫秒。由Victor Stinner提供补丁。gh-116957: configparser: 在早期读取引发 DuplicateSectionError 或 DuplicateOptionError 后,不再将 ConfigParser 值保留在无效状态(存储为列表而不是字符串)。
gh-115538:
_io.WindowsConsoleIO现在会在传递布尔值作为文件描述符参数时发出警告。gh-90095: 忽略
.pdbrc中的空行和注释。gh-106531: 从 zipp 3.18 更新了 zipfile._path,为PyPy提供了更好的兼容性,为深度嵌套的zip文件提供了更好的glob性能,并为其他测试(如 importlib.resources)提供了对
CompleteDirs.inject的内部访问。gh-63207: 在Windows上,
time.time()现在使用GetSystemTimePreciseAsFileTime()时钟,分辨率优于1微秒,而不是分辨率为15.6毫秒的GetSystemTimeAsFileTime()时钟。由Victor Stinner提供补丁。gh-116764: 恢复在
urllib.parse函数parse_qs()和parse_qsl()中对None和其他假值的支持。此外,现在它们会对非零整数和非空序列抛出 TypeError。gh-116811: 在
PathFinder.invalidate_caches中,委托给MetadataPathFinder.invalidate_caches。gh-116647: 修复数据类中的递归子类问题
gh-113171: 修复了以下属性判断中的各类误报(false positives)和漏报(false negatives)问题
ipaddress.IPv4Address.is_private(详见相关文档说明)
同样适用于相应的
ipaddress.IPv4Network和ipaddress.IPv6Network属性。gh-63283: 在
encodings.idna中,现在接受任何大小写的 ACE 前缀(xn--)。由 Pepijn de Vos 和 Zackery Spytz 提供补丁。gh-71042: 添加
platform.android_ver(),提供 Android 上的设备和操作系统信息。gh-73468: 新增
math.fma()函数,封装 C99 的fma()操作:融合乘加函数。由 Mark Dickinson 和 Victor Stinner 提供补丁。gh-116608:
importlib.resources函数is_resource()、open_binary()、open_text()、path()、read_binary()和read_text()不再被弃用,并且通过多个位置参数支持子目录。contents()函数也允许子目录,但仍被弃用。gh-116484: 修改自动生成的
tkinter.Checkbutton控件名称,以避免在同一父容器内与自动生成的tkinter.ttk.Checkbutton控件名称发生冲突。gh-114314: 在
ctypes中,ctype 数据现在直接存储在类型对象中,而不是存储在字典子类中。这是一个内部更改,不应影响使用。gh-116401: 修复了
os.fwalk()和shutil.rmtree()在打开命名管道时的阻塞问题。gh-71052: 在 Android 上实现了
ctypes.util.find_library()。gh-90535: 修复了在
logging.TimedRotatingFileHandler中对于when='MIDNIGHT'和when='Wx'时 interval 值 > 1 的支持。gh-113308: 从
uuid中移除了一些内部保护部分:_has_uuid_generate_time_safe、_netbios_getnode、_ipconfig_getnode和_load_system_functions。它们未被使用。gh-115627: 修复了
ssl模块在连接被对端终止时的错误处理。现在它会抛出一个带有适当错误代码的 OSError,而不是 EOFError。gh-114847: 在非 Windows 平台上加速了
os.path.realpath()。gh-114271: 修复了
threading.Thread.join()中的一个竞争条件。threading._MainThread现在总是表示主解释器的主线程。PyThreadState.on_delete和PyThreadState.on_delete_data已被移除。gh-113538: 添加了
asyncio.Server.close_clients()和asyncio.Server.abort_clients()方法,允许更强制性地关闭一个 asyncio 服务器。gh-85287: 更改 Unicode 编解码器以返回 UnicodeEncodeError 或 UnicodeDecodeError,而不仅仅是 UnicodeError。
gh-105866: 修复了
_get_slots的 bug,该 bug 在定义带有 slots 和 weakref_slot 的数据类时会导致错误。gh-96471: 添加了
asyncio.Queue的终止功能,通过shutdown()方法。bpo-33533:
asyncio.as_completed()现在返回一个既是异步迭代器又是普通迭代器的对象。新的异步迭代模式使得在先前任务和它们完成的结果之间更容易建立关联。这与concurrent.futures.as_completed()的迭代模式更加匹配。由 Justin Arthur 提供补丁。bpo-27578:
inspect.getsource()(及相关函数) 现在可以处理空模块文件,返回'\n'(或合理等效内容) 而不是引发OSError。由 Kernc 提供补丁。bpo-37141: 在
asyncio.StreamReader.readuntil()中接受一个分隔符的可迭代对象,当遇到其中之一时停止。gh-66543: 使
mimetypes.guess_type()能够正确解析仅包含主机名的URL、包含片段或查询的URL以及Windows上仅包含UNC共享点的文件名。基于 Dong-hee Na 的补丁。bpo-15010:
unittest.TestLoader.discover()现在保存unittest.TestLoader._top_level_dir的原始值,并在调用结束时恢复它。
文档¶
测试¶
gh-83434: 在regrtest中搜索引用泄漏(
-R``选项)时禁用JUnit XML输出(--junit-xml=FILE``命令行选项)。由 Victor Stinner 提供补丁。gh-117187: 修复对 vanilla Expat <2.6.0 的XML测试。
gh-116333: 更新了TLS相关事物的测试(错误代码等),以对在OpenSSL的BoringSSL和AWS-LC分支中看到的特定错误消息字符串和行为更加宽容。
gh-117089: 将 importlib.metadata 的测试整合到它们自己的
metadata包中。gh-115979: 更新 test_importlib,使其在 WASI SDK 21 下通过。
gh-112536: 在合理的执行时间内运行TSAN测试,为test.regrtest添加--tsan选项。由Donghee Na提供补丁。
gh-116307: 添加了导入助手
isolated_modules,因为CleanImport不会移除上下文期间导入的模块。在importlib.resources测试中使用它,避免留下mod影响importlib.metadata测试。
构建¶
Windows¶
gh-117267: 在
st_ctime的弃用期内,确保DirEntry.stat().st_ctime与os.stat()行为一致,包含与st_birthtime相同的值。弃用期过后,st_ctime将是元数据更改时间(或通过DirEntry不可用),只有st_birthtime将包含创建时间。gh-116195: 通过在有可用时使用替代系统API,提高
os.getppid()的性能。由vxiiduu贡献。gh-88494: 在Windows上,
time.monotonic()现在使用QueryPerformanceCounter()时钟以获得优于1 us的分辨率,而不是具有15.6 ms分辨率的GetTickCount64()时钟。由Victor Stinner提供补丁。gh-116773: 修复``<_overlapped.Overlapped object at 0xXXX> still has pending operation at deallocation, the process may crash``的实例。
gh-91227: 修复asyncio ProactorEventLoop实现,以便向未监听的地址发送数据报不会阻止接收更多数据报。
gh-115119: 在构建
_decimal模块时,从供应商的libmpdecimal代码切换到``cpython-source-deps``仓库中单独托管的外部包。
C API¶
gh-87193:
_PyBytes_Resize()现在可以对引用计数 > 1 的 bytes 对象调用,包括 1 字节的 bytes 对象。如果引用计数 > 1,它会创建一个新的 bytes 对象并销毁旧的对象。gh-117021: 修复非 Windows 64 位平台上
PyLong_AsPid()中的整数溢出问题。gh-115756:
PyCode_GetFirstFree()现在是一个不稳定 API,并已重命名为PyUnstable_Code_GetFirstFree()。(由 Bogdan Romanyuk 在 gh-115781 中贡献)gh-116869: 添加
test_cext测试:构建一个 C 扩展来检查 Python C API 是否会发出 C 编译器警告。由 Victor Stinner 提供补丁。gh-116869: 使 C API 再次兼容
-Werror=declaration-after-statement编译器标志。补丁由 Victor Stinner 提供。gh-116936: 将
PyType_GetModuleByDef()添加到有限的 C API 中。由 Victor Stinner 提供补丁。gh-116809: 恢复被移除的私有
_PyErr_ChainExceptions1()函数。由 Victor Stinner 提供补丁。gh-115754: 在有限的 C API 版本 3.13 中,获取
Py_None、Py_False、Py_True、Py_Ellipsis和Py_NotImplemented单例现在在稳定的 ABI 级别实现为函数调用以隐藏实现细节。获取这些常量仍然返回借用的引用。由 Victor Stinner 提供补丁。gh-115754: 添加
Py_GetConstant()和Py_GetConstantBorrowed()函数来获取常量。例如,Py_GetConstant(Py_CONSTANT_ZERO)返回对常量零的 strong reference。由 Victor Stinner 提供补丁。gh-111696: 为
PyUnicode_FromFormat()添加对%T、%T#、%N和%N#格式的支持:格式化对象类型和类型的完全限定名称:调用PyType_GetModuleName()。更多信息请参见 PEP 737。由 Victor Stinner 提供补丁。gh-111696: 添加
PyType_GetModuleName()函数以获取类型的模块名称。相当于获取type.__module__属性。由 Eric Snow 和 Victor Stinner 提供补丁。gh-111696: 添加
PyType_GetFullyQualifiedName()函数以获取类型的完全限定名。等价于f"{type.__module__}.{type.__qualname__}",或者如果type.__module__不是字符串或等于"builtins"时,等价于type.__qualname__。由 Victor Stinner 提供补丁。gh-85283:
fcntl、grp、pwd、termios、_statistics和_testconsoleC 扩展现在使用 limited C API 构建。由 Victor Stinner 提供补丁。gh-111140: 向
PyLong_AsNativeBytes()和PyLong_FromNativeBytes()添加额外的标志,允许调用者决定如何处理填充整个缓冲区的值的边缘情况。gh-113024: 添加
PyObject_GenericHash()函数。
Python 3.13.0 alpha 5¶
发布日期:2024-03-12
安全性¶
gh-115398: 允许通过添加五个新方法来控制 Expat >=2.6.0 的重新解析延迟 (CVE 2023-52425):
gh-114572:
ssl.SSLContext.cert_store_stats()和ssl.SSLContext.get_ca_certs()现在在ssl.SSLContext被多个线程共享时正确锁定对证书存储的访问。
核心与内置函数¶
gh-116604: 在通过
PyErr_CheckSignals()和评估中断器进行间接调用时,尊重垃圾收集器的状态。由 Pablo Galindo 提供补丁。gh-116381: 为
CONTAINS_OP添加特化。gh-116296: 修复
object.__reduce__()内部错误处理中可能的内存泄漏。gh-115823: 在由于无效字节序列引发
SyntaxError异常时,正确计算解析器中的错误范围。由 Pablo Galindo 提供补丁。gh-115778: 在解释器 DSL 中为指令定义添加
tierN注解。gh-115733: 修复在耗尽列表迭代器上调用
next()时的崩溃问题。gh-115700: regen-cases 构建阶段现在可以在 Windows 上工作。
gh-115347: 修复当 Python 以
-OO运行时,文档字符串被冗余的 NOP 替换的 bug。gh-115323: 当
bytearray.extend()被str对象调用时,使错误信息更有意义。gh-112175: 每个
PyThreadState现在都有自己的eval_breaker,允许特定线程被中断。
库¶
gh-115154: 修复导致
tokenize.untokenize()函数错误处理 Unicode 命名字面量的 bug。由 Pablo Galindo 提供补丁。
核心与内置函数¶
gh-112433: 通过类上的新
_align_属性,增加强制对齐ctypes.Structure的能力。
库¶
gh-104090: 如果检测到资源泄漏,多进程资源跟踪器现在以非零状态码退出。否则仍以状态码 0 退出。
核心与内置函数¶
库¶
gh-116349:
platform.java_ver()已被弃用,将在 3.15 中移除。它大部分未经测试,API 令人困惑,仅对 Jython 支持有用。gh-116143: 修复 pydoc
_start_server中的竞争条件,消除_start_server返回一个 "serving" 但没有设置docserver的线程的窗口。gh-116127:
typing: 实现 PEP 705,增加了typing.TypedDict对typing.ReadOnly的支持。gh-116325:
typing: 对前向引用为空字符串的情况,抛出SyntaxError而非AttributeError。gh-115957: 当在不活跃的
asyncio.TaskGroup上调用asyncio.TaskGroup.create_task时,给定的协程将被关闭(这样可以防止RuntimeWarning)。gh-115978: 在 WASI 上禁用 preadv()、readv()、pwritev() 和 writev()。
在 WASI 0.2 的 wasmtime 下,这些函数未能通过 test_posix 测试 (https://github.com/bytecodealliance/wasmtime/issues/7830)。
gh-88352: 修复
logging.TimedRotatingFileHandler处理程序中下一次滚动时间的计算。computeRollover()现在总是返回一个大于指定时间的时间戳,并且在 DST 变更时也能正确工作。doRollover()不再覆盖已经滚动过的文件,从而避免了在午夜或 DST 变更时重复运行导致的数据丢失。gh-76511: 修复
email.Message.as_string()中的 UnicodeEncodeError,该错误发生在消息声称使用 ascii 字符集但实际上包含非 ascii 字符时。现在,非 ascii 字符会被替换为 U+FFFD 替换字符,类似于replace错误处理器的行为。gh-89547: 增加对嵌套类型特殊形式如 Final[ClassVar[int]] 的支持。
gh-116040: [Enum] 修复当第二个值为假值时按值调用的问题;例如 Cardinal(1, 0)
gh-115821: [Enum] 改进在自定义 __new__ 中调用 super().__new__() 时的错误消息。
gh-85644: 在
webbrowser中使用XDG_CURRENT_DESKTOP环境变量来检查桌面环境。对于 GNOME 检测,优先使用它而非已弃用的GNOME_DESKTOP_SESSION_ID。gh-75988: 修复
unittest.mock.create_autospec()以通过调用传递给包装对象来返回真实结果。gh-115881: 修复了当传递
feature_version=(3, 8)时,ast.parse()会错误地将条件上下文管理器(如with (x() if y else z()): ...)标记为无效语法的问题。这撤销了作为 gh-94949 一部分对语法所做的更改。gh-115886: 修复了
multiprocessing.shared_memory.SharedMemory中嵌入空字符的名称被静默截断的问题。gh-115532: 向统计模块添加了核密度估计。
gh-115714: 在 WASI 上,
time模块不再使用times()或CLOCK_PROCESS_CPUTIME_ID获取进程时间,因为这些系统 API 不可靠,并可能从 WASI 中移除。受影响的时钟函数回退到调用clock()。gh-115809: 改进了
logging.TimedRotatingFileHandler中计算要删除哪些滚动日志文件的算法。现在对于没有namer和具有任意确定性namer(不修改文件名中的日期时间部分) 的处理程序来说是可靠的。gh-74668:
urllib.parse函数parse_qs()和parse_qsl()现在支持包含原始和百分比编码非 ASCII 数据的字节参数。gh-67044:
csv.writer()现在总是引用或转义'\r'和'\n',不管 lineterminator 的值如何。gh-115712: 恢复了
csv中skipinitialspace=True时对空格分隔符的支持。csv.writer()现在如果分隔符是空格且 skipinitialspace 为真,则引用空字段,并在无法引用时引发异常。gh-112364: 修复了
ast.unparse()处理包含"、'或\\的 format_spec 的问题。由 Frank Hoffmann 提供补丁。gh-114914: 修复了废弃的
StreamWriter不会被垃圾回收的问题。gh-111358: 修复
asyncio.BaseEventLoop.shutdown_default_executor()中的一个 bug,确保传递给协程的超时行为符合预期。gh-115618: 修复
property方法getter()、setter()和deleter()中对None参数引用计数不当减少的问题。gh-112720: 重构
dis.ArgResolver,使其可以子类化并改变跳转参数的解析方式。gh-112006: 修复
inspect.unwrap()对于带有__wrapper__数据描述符的类型的问题。修复inspect.Signature.from_callable()对于内置函数classmethod()和staticmethod()的问题。gh-101293: 在
inspect.Signature.from_callable()中支持带有__call__()方法的可调用对象,以及将__new__()和__init__()方法设置为类方法、静态方法、绑定方法、部分函数以及其他类型的方法和描述符的类型。gh-113942:
pydoc不再跳过作为内置方法实现的全局函数,例如MethodDescriptorType和WrapperDescriptorType。gh-115256: 当访问 TarInfo 对象的 tarfile 属性时添加 DeprecationWarning。该属性在内部从未使用,并且仅在 tarfile 以写入模式打开时附加到 TarInfos,而不是读取模式。该属性创建了一个不必要的引用循环,如果在写入 tarfile 后不关闭句柄,可能会导致损坏。
gh-115197:
urllib.request在 macOS 和 Windows 上不再在检查系统代理绕过列表之前解析主机名。gh-113812:
DatagramTransport.sendto()现在如果调用时使用空的 bytes 对象,将发送零长度的数据报。传输流控制在计算缓冲区大小时现在也会考虑数据报头。gh-114763: 保护使用
importlib.util.LazyLoader加载的模块,防止在加载完成前多个线程尝试访问属性时出现竞争条件。gh-114709:
posixpath.commonpath()现在在传递空的可迭代对象时引发ValueError异常。之前是引发IndexError。posixpath.commonpath()现在在传递None时引发TypeError异常。之前是引发ValueError。gh-114610: 修复了
pathlib.PurePath.with_stem()在给定空的 stem 参数时将非空路径后缀转换为 stem 的 bug。现在它会引发ValueError,就像pathlib.PurePath.with_suffix()在路径有空的 stem 且给定非空的 suffix 参数时做的那样。gh-107361: 将
ssl.VERIFY_X509_PARTIAL_CHAIN和VERIFY_X509_STRICT添加到通过ssl.create_default_context()创建的默认 SSL 上下文中。gh-112281: 允许为
typing.Annotated创建 类型的联合,即使元数据不可哈希。gh-111775: 修复了
importlib.resources.simple.ResourceHandle.open()在文本模式下的问题,添加了遗漏的stream参数。gh-90095: 使 .pdbrc 和 -c 可以与任何有效的 pdb 命令一起工作。
gh-107625: 如果键没有对应的值并且继续(即后面跟着缩进行),则从
configparser.ConfigParser的read()和read_file()方法中引发configparser.ParsingError。gh-107155: 修复了
help(x)的错误输出,其中x是一个lambda函数,该函数有一个带有"return"键的__annotations__字典属性。gh-57141: 为
filecmp.dircmp添加了 非浅层 比较选项,类似于filecmp.cmp()。原始由 Steven Ward 提供补丁。由 Tobias Rautenkranz 增强。gh-69990:
Profile.print_stats()已改进为接受多个排序参数。由 Chiu-Hsiang Hsu 和 Furkan Onder 提供补丁。gh-104061: 添加
socket.SO_BINDTOIFINDEX常量。gh-60346: 修复 ArgumentParser 与 parse_known_args 不一致的问题。
gh-102389: 将
windows_31j添加到cp932编码的别名中。gh-72249: 始终在
functools.partial()对象的repr()中包括 module 名称。 由 Furkan Onder 和 Anilyka Barry 编写补丁。gh-100985: 更新 HTTPSConnection 以在使用代理时一致地包装 IPv6 地址。
gh-100884: email: 修复在多行地址列表中结合 Unicode 编码时逗号的错误折叠问题。
gh-95782: 修复
io.BufferedReader.tell(),io.BufferedReader.seek(),_pyio.BufferedReader.tell(),io.BufferedRandom.tell(),io.BufferedRandom.seek()和_pyio.BufferedRandom.tell()可能返回负偏移量的问题。gh-93205: 修复
logging.handlers.TimedRotatingFileHandler中的一个错误,其中指向具有相同名称但不同扩展名的文件的多个旋转处理程序实例会冲突并且不会删除正确的文件。bpo-31116: 将 Z85 编码添加到
base64中。bpo-43952: 修复
multiprocessing.connection.Listener.accept()以接受空字节作为 authkey。不接受空字节作为密钥会导致其无限期挂起。bpo-42125: linecache: 如果可用,从
__spec__获取模块名称。这允许在使用自定义加载器时获取__main__模块的源代码。bpo-41122: 未能正确传递参数给
functools.singledispatchmethod()现在会抛出 TypeError,而不是内部遇到索引越界。bpo-40818: asyncio REPL 现在在启动时运行
sys.__interactivehook__。sys.__interactivehook__的默认实现为 asyncio REPL 提供了自动完成功能。补丁由 Rémi Lapeyre 贡献。bpo-33775: 在 argparse 中为本地化添加了 'default' 和 'version' 帮助文本。
文档¶
gh-115399: 在 "XML 漏洞" 下记录了 Expat <2.6.0 的 CVE 2023-52425。
测试¶
gh-71052: 添加测试排除项以支持在 Android 上运行测试套件。
gh-71052: 在支持线程但不支持多处理的平台上启用
test_concurrent_futures。gh-115796: 使 '_testinternalcapi.assemble_code_object' 为代码对象构造异常表。
gh-115720: 泄漏测试(
-R,--huntrleaks)现在显示每次迭代中发现泄漏数量的摘要。gh-115122: 为 regrtest 测试运行器添加
--bisect选项:使用test.bisect_cmd运行失败的测试以识别失败的测试。由 Victor Stinner 提供补丁。gh-115596: 修复
test_os中的ProgramPriorityTests永久改变进程优先级的问题。gh-115556: 在 Windows 上,传递给
Tools\buildbot\test.bat和PCbuild\\rt.bat的参数中的逗号现在被正确处理。gh-115420: 修复
_testinternalcapi.optimize_cfg对异常处理目标的翻译。gh-115376: 修复
_testinternalcapi.compiler_codegen在错误输入上的段错误。
构建¶
gh-116313: 使 WASI 构建在 wasmtime 18 下使用 WASI 0.2/preview2 原语工作。
gh-71052: 将 Android 的
sys.platform从"linux"改为"android"。gh-116117: 回退
libb2的 PR #42 以修复在 32 位 Windows 上用clang-cl编译 CPython 的问题。gh-71052: 修复多个 Android 构建问题
gh-114099: 添加了一个测试床项目以在 iOS 上运行测试套件。
gh-115350: 修复在定义了 -DWIN32_LEAN_AND_MEAN 的情况下构建 ctypes 模块的问题
gh-111225: 在 Android 上将扩展模块链接到 libpython。
gh-115737: 现在为非框架 macOS 构建正确设置了 libPython 的安装名称。
gh-114099: 添加了 Makefile 目标以支持编译兼容 iOS 的框架构建。
Windows¶
gh-116012: 确保在 GIL 操作期间保留
GetLastError()的值。gh-115582: 现在,当使用常规安装时,为 CPython 的自由线程构建构建扩展需要手动使用
/DPy_GIL_DISABLED进行编译。预计在未来的版本中会有所变化。gh-115554: 安装程序现在对于更新 Python 安装管理器 有更严格的规则。一般来说,大多数用户只安装了一个启动器,不会看到任何区别。当安装了多个启动器时,安装启动器的选项将被禁用,直到只剩下一个。降级启动器(从未允许)现在被更明显地阻止。
gh-115543: Python 安装管理器 现在可以检测从 Microsoft Store 安装的 Python 3.13,并且在设置
PYLAUNCHER_ALLOW_INSTALL时默认安装 Python 3.12。
macOS¶
gh-116145: 将 macOS 安装程序更新到 Tcl/Tk 8.6.14。
IDLE¶
gh-88516: 在 macOS 上,在编辑器窗口的标题栏中显示代理图标以匹配平台行为。
工具/示例¶
C API¶
gh-114626: 再次添加
_PyCFunctionFastWithKeywords名称,该名称在 Python 3.13 alpha 4 中被错误移除。保留旧的私有_PyCFunctionFastWithKeywords名称(Python 3.7)作为新公共名称PyCFunctionFastWithKeywords(Python 3.13a4) 的别名。由 Victor Stinner 提供补丁。gh-111418: 添加
PyHASH_MODULUS、PyHASH_BITS、PyHASH_INF和PyHASH_IMAGC 宏。由 Sergey B Kirpichev 提供补丁。
Python 3.13.0 alpha 4¶
发布日期: 2024-02-15
安全性¶
gh-115399: 将捆绑的 libexpat 更新到 2.6.0
gh-115243: 修复在并发修改时
collections.deque.index()可能崩溃的问题。
核心与内置函数¶
gh-112087: 对于列表的空反向迭代器将简化为
reversed()。由 Donghee Na 提供补丁。gh-114570: 添加
PythonFinalizationError异常。此异常派生自RuntimeError,在 Python 终结 期间阻止操作时引发。由 Victor Stinner 提供补丁。gh-114695: 添加
sys._clear_internal_caches(),清除所有内部性能相关缓存(并弃用不太通用的sys._clear_type_cache()函数)。gh-115011: 现在,对于具有
__index__()方法的对象,无符号整数类型成员的设置器支持与int相同的有效值范围。gh-114887: 更改
create_datagram_endpoint()中的套接字类型验证,以接受所有非流套接字。这修复了与原始套接字兼容性的回归问题。gh-114944: 修复
PyParkingLot_Park和_PyParkingLot_UnparkAll之间的竞争条件。gh-113462: 限制单个类可以使用的版本数量。防止一些偏离的类用完所有版本号。
gh-76763:
chr()内置函数现在总是对超出有效范围的值引发ValueError。以前对于非常大或非常小的值会引发OverflowError。gh-114806: 如果这些类有元类,则不再专门化对类的调用。修复了元类的
__call__方法未被调用的错误。gh-107944: 通过 getargs 改进对带有错误关键字参数的函数调用的错误消息。
gh-112529: 自由线程构建不再在为支持循环垃圾回收的对象中为
PyGC_Head结构分配空间。使用了许多其他字段和数据结构作为替代,包括ob_gc_bits、ob_tid和 mimalloc 内部数据结构。gh-114456: 在 WASI 的调试构建下降低递归限制。
gh-114083: 编译器在其他优化之前,在一个单独的阶段应用与后续指令的 LOAD_CONST 折叠。这在一定情况下启用了跳转线程。
gh-114388: 修复了当将不是
int实例的类似整数值分配给对应于 type T_UINT 和 T_ULONG 的 C 结构成员的属性时发出的RuntimeWarning。修复了当将负整数值分配给对应于类型 T_UINT 的 C 结构成员的属性时发出的双重RuntimeWarning。gh-114265: 编译器在优化前传播行号,从而带来更多优化机会并消除了对
guarantee_lineno_for_exits技巧的需求。gh-112529: 自由线程构建现在拥有自己的线程安全 GC 实现,该实现使用 mimalloc 来找到 GC 跟踪的对象。与现有的 GC 实现不同,它是非分代的。
gh-114050: 修复了当向
int传递超过两个参数时,由于TypeError异常中的格式字符串不正确而导致的分段错误。gh-112354:
END_FOR指令现在只弹出一个值。这是为了更好地支持循环中的侧退出。gh-113884: 当 GIL 被禁用时,使
queue.SimpleQueue线程安全。gh-114058: 实现 Tier 2 冗余消除器的基础。
gh-113939: frame.clear(): 同时清除 frame.f_locals,而不仅仅是快速局部变量。这在 frame.f_locals 被访问后相关,它将包含对所有局部变量的引用。
gh-112050: 将
collections.deque转换为使用 Argument Clinic。gh-112050: 在GIL被禁用时,使
collections.deque上的方法线程安全。gh-113464: 添加一个选项(对于基于`configure`的构建是`--enable-experimental-jit`,对于基于`PCbuild`的构建是`--experimental-jit`)来构建一个 实验性 的即时编译器,基于`copy-and-patch <https://fredrikbk.com/publications/copy-and-patch.pdf>`_。
gh-113055: 使interp->obmalloc成为一个指针。对于与主解释器共享状态的解释器,这指向同一个静态内存结构。对于拥有自己obmalloc状态的解释器,它是堆分配的。添加free_obmalloc_arenas(),它将为拥有自己obmalloc状态的解释器释放obmalloc区域和基数树结构。
gh-55664: 当使用非字符串键的名称空间字典创建
type时添加警告。由Daniel Urban和Furkan Onder提供补丁。gh-104530: 使用原生的Win32条件变量。
库¶
gh-114563: 修复使用
Decimal的C实现时的几个format()错误:* 在某些罕见情况下使用`z`格式选项(强制负0)时的内存泄漏 * 将`z`格式选项应用于`F`类型(固定点与大写`NAN` /INF)时的错误输出 * 应用`#` 格式选项(交替形式)时的错误输出。gh-102840: 修复在 :fractions.Fraction`和
complex实例之间进行地板除、模或除模操作时混淆的追溯。gh-115165: 现在在尝试为调用
typing泛型别名(包括使用typing.Annotated创建的泛型别名)返回的对象设置`__orig_class__` 属性时,大多数异常会被忽略。之前只有AttributeError被忽略。由Dave Shawley提供补丁。gh-112903: 修复在某些泛型别名多重继承情况下出现的 "issubclass() arg 1 must be a class" 错误(3.13 alpha早期版本的回归问题)。
gh-115133: 修复与Expat 2.6.0兼容的
XMLPullParser测试。gh-115059:
io.BufferedRandom.read1()现在会刷新底层写入缓冲区。gh-115060: 通过移除冗余的正则表达式匹配来加速
pathlib.Path.glob()。gh-97928: 部分恢复
tkinter.Text.count()的行为。默认情况下,它保留了旧版Python的行为,除了设置wantobjects为0不再有效。新增了一个形参 return_ints:指定return_ints=True会使Text.count()总是返回单个计数的整数,而不是1元组或None。gh-114628: 在处理TypeError时引发csv.Error时,不再打印TypeError的回溯信息。
gh-114965: 更新捆绑的pip到24.0版本。
gh-114071: 支持使用auto()为枚举成员值的元组子类。
gh-49766: 修复
date-datetime比较。现在,如果比较的一方是date而另一方是datetime,特殊比较方法如__eq__和__lt__将返回NotImplemented,而不是忽略时间部分和时区或强制返回“不相等”或引发TypeError。这使得date和datetime子类的比较更加对称,并允许通过在子类中重写特殊比较方法来改变默认行为。gh-110190: 通过在 stgdict 中将
MAX_STRUCT_SIZE设置为 32,修复 Windows ARM64 平台上带数组的 ctypes 结构体。由 Diego Russo 提供补丁。gh-114678: 确保在
Decimal格式中,对于格式说明符中其他位置出现 'N' 的情况,不会引发 'N' 说明符的弃用警告。基于 Stefan Krah 的补丁。gh-70303: 如果模式以 "
**" 结尾,pathlib.Path.glob()现在会返回文件和目录。之前只返回目录。gh-109653: 提高
importlib.metadata和email.utils的导入时间。gh-113280: 修复在
ssl.SSLSocket创建过程中发生错误时,在罕见情况下出现的开放套接字泄漏问题。gh-77749:
email.policy.EmailPolicy.fold()现在如果utf8为 false,总是编码头部的非 ASCII 字符。gh-83383: 如果在打开或上次同步后没有修改,
dbm.dumb数据库的同步现在是无操作的。新创建的空的dbm.dumb数据库的目录文件现在在打开后立即创建,而不是推迟到同步或关闭时。gh-91602: 向
sqlite3.Connection.iterdump()添加 filter 仅关键字参数,用于过滤要转储的数据库对象。由 Mariusz Felisiak 提供补丁。gh-112451: 禁止对纯Python的
datetime.timezone进行子类化。这与C扩展实现一致。由Mariusz Felisiak提供补丁。gh-69893: 为
xml.etree.ElementTree.iterparse()返回的迭代器添加close()方法。gh-114492: 使
termios.tcgetattr()在Alpine Linux上的结果可重现。之前它可能会在某些字段留下随机垃圾。gh-114315: 使
threading.Lock成为一个真正的类,而不是工厂函数。向_thread.lock类型添加__new__。gh-100414: 添加
dbm.sqlite3作为dbm的后端,并使其成为新的默认dbm后端。由Raymond Hettinger和Erlend E. Aasland提供补丁。gh-113267: 撤销 gh-106584 中的更改,这些更改使得
TestResult方法的startTest()和stopTest()调用不平衡。gh-75128: 在
asyncio.BaseEventLoop.create_server()中忽略OSError,当IPv6可用但接口实际上不支持它时。gh-114423:
threading._active中的_DummyThread条目现在会在相关线程死亡时自动移除。gh-114257: 在
ctypes.util.find_library()中忽略FileNotFound错误,在Linux上直接返回None。gh-114321: 在Linux、macOS、FreeBSD和NetBSD上,向
fcntl模块公开更多平台特定常量。gh-114328:
tty.setcbreak()和新的tty.cfmakecbreak()不再清除终端输入ICRLF标志。这修复了3.12中引入的一个回归问题,该问题不再匹配操作系统在其stty(1)手册页中定义的cbreak模式。gh-114281: 从
Lib/asyncio/staggered.py中移除类型提示。应改用 typeshed 项目中的注解。gh-101438: 避免在ElementTree.iterparse中出现引用循环。由
ElementTree.iterparse返回的迭代器可能会持有一个文件描述符。如果返回的迭代器未被耗尽,引用循环会阻止文件描述符的及时清理。gh-114198:
dataclasses中的__replace__方法的签名现在将第一个参数命名为``self``,而不是obj。gh-104522: 运行子进程时引发的
OSError现在仅在错误是由于尝试更改当前目录失败时,才会将 filename 属性设置为*cwd*。gh-114149: Enum: 在自定义的
__new__中正确处理元组子类。gh-114087: 将
dataclasses.asdict的速度提高至1.35倍。gh-109534: 修复了
asyncio.selector_events.BaseSelectorEventLoop中SSL握手失败时的引用泄漏问题。由Jamie Phan提供补丁。gh-79634: 在
pathlib.Path.glob()和rglob()中接受 路径类对象 作为模式。gh-112202: 确保如果被唤醒的
Task同时被取消或遇到任何其他错误,asyncio.Condition.notify()调用不会丢失。gh-113951: 修复了
tkinter.Text和tkinter.Canvas类的tag_unbind()方法在三参数情况下的行为。以前,widget.tag_unbind(tag, sequence, funcid)会销毁 sequence 的当前绑定,使 sequence 变为未绑定状态,并删除 funcid 命令。现在它仅从 sequence 的绑定中移除 funcid,保留其他命令,并删除 funcid 命令。只有当 funcid 是最后一个绑定的命令时,才会使 sequence 变为未绑定状态。gh-97959: 修复
pydoc中类方法、绑定方法、方法及函数别名的渲染问题。类方法不再显示“builtins.type实例的方法”注释。现在为类和未绑定方法添加了相应的注释。方法和函数别名现在如果原始定义与当前不同,会引用到定义原始内容的模块或类。绑定方法现在列在静态方法部分。内置类的方法现在和Python类的方法一样得到支持。gh-113796: 在
csv.Dialect构造函数中添加更多验证检查。如果同一个字符被用于不同的角色,现在会抛出ValueError。gh-113732: 修复
csv.reader()中对QUOTE_NOTNULL和QUOTE_STRINGS的支持。gh-113225: 尽可能使用
os.DirEntry.path来加速pathlib.Path.walk()。gh-89039: 当在datetime、date或time的子类上调用replace()方法时,正确调用派生构造函数。之前仅调用基类的构造函数。
同时,确保在各种方法中创建子类时传递非零的fold值。之前,fold值被静默忽略。
gh-112919: 加速
datetime.datetime.replace()、datetime.date.replace()和datetime.time.replace()。gh-59013: 当用户使用
pdb执行break func时,在函数的第一行可执行代码上设置断点,而不是函数定义的行。gh-112343: 改进pdb便利变量的处理,避免替换字符串内容。
gh-112240: 向calendar模块CLI添加选项,以指定每周开始的星期几。由Steven Ward提供补丁。
gh-43457: 修复了
tkinter部件方法wm_attributes()。现在它接受不带减号前缀的属性名来获取窗口属性,并允许将属性和值指定为关键字参数。新增了可选关键字参数 return_python_dict:调用w.wm_attributes(return_python_dict=True)会返回一个字典而非元组。调用w.wm_attributes()现在返回一个元组而非字符串,如果 wantobjects 被设置为0。gh-82626: 许多函数现在会在布尔值作为文件描述符参数传递时发出警告。
gh-110345: 在
tkinter._test()中显示 Tcl/Tk 补丁级别(而非版本)。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-96471: 添加了通过
shutdown()终止queue.Queue的功能。gh-101599: 更改了 argparse 标志选项的格式以去除冗余。
gh-85984: 添加了 POSIX 伪终端函数
os.posix_openpt()、os.grantpt()、os.unlockpt()和os.ptsname()。gh-102512: 当从外部线程(即
_DummyThread)调用os.fork()时,子进程中的线程类型更改为_MainThread。还更改了其名称和守护状态,现在可以加入了。gh-88569: 添加
os.path.isreserved(),用于识别保留的路径名,如 "NUL"、"AUX" 和 "CON"。此功能仅在 Windows 上可用。bpo-38364:
inspect函数isgeneratorfunction、iscoroutinefunction、isasyncgenfunction现在支持functools.partialmethod包装的函数,就像它们支持functools.partial一样。
文档¶
gh-115233: 修复 Logging Cookbook 中
LoggerAdapter的一个例子。gh-114123: 将
csv模块的文档字符串移动到csv模块,而不是从内部的_csv模块重新导出,并从csv.__all__中移除__doc__。将
csv.__version__移动到csv模块,而不是从内部的_csv模块重新导出,并从csv.__all__中移除__version__。
测试¶
构建¶
Windows¶
gh-115049: 修复
py.exe启动器在没有用户配置文件的用户下运行时失败的问题。gh-115009: 更新 Windows 安装程序以使用 SQLite 3.45.1。
gh-109991: 更新 Windows 构建以使用 OpenSSL 3.0.13。
gh-111239: 更新 Windows 构建以使用 zlib v1.3.1。
gh-100107:
py.exe启动器在启动包含/usr/bin/envshebang 的脚本时,将不再尝试运行 Microsoft Store 重定向器。gh-112984: 将自由线程二进制文件作为可选组件添加到Windows安装程序中。
gh-89240: 允许
multiprocessing创建超过62个进程的池。
macOS¶
gh-115009: 更新macOS安装程序以使用SQLite 3.45.1。
gh-109991: 更新macOS安装程序以使用OpenSSL 3.0.13。
gh-114490: 为
platform.architecture()添加Mach-O链接支持。gh-87804: 在macOS上,
os.statvfs``和 ``os.fstatvfs的结果现在能正确报告非常大的磁盘的大小,在之前的版本中,对于至少有2**32个块的磁盘,报告的块数是错误的。
IDLE¶
工具/示例¶
gh-113516: 在构建WASI时不要设置
LDSHARED。gh-109991: 更新GitHub CI工作流以使用OpenSSL 3.0.13,并更新multissltests以使用1.1.1w、3.0.13、3.1.5和3.2.1。
gh-115015: 修复Argument Clinic中的一个bug,该bug会为没有参数但使用 METH_METHOD | METH_FASTCALL | METH_KEYWORDS 调用约定的方法生成错误的代码。之前只检查了位置参数的数量;任何传递的关键字参数都会被静默接受。
C API¶
gh-111140: 添加
PyLong_AsNativeBytes()、PyLong_FromNativeBytes()和PyLong_FromUnsignedNativeBytes()函数。gh-114685: 如果
PyBuffer_FillInfo()被调用时使用了PyBUF_READ或PyBUF_WRITE作为标志,现在会引发SystemError。这些标志应仅与``PyMemoryView_*`` C API一起使用。gh-114685: 如果
PyObject_GetBuffer()被调用时使用了PyBUF_READ或PyBUF_WRITE作为标志,现在会引发SystemError。这些标志应仅与``PyMemoryView_*`` C API一起使用。gh-114626: 添加
PyCFunctionFast和PyCFunctionFastWithKeywords类型定义(与现有的_PyCFunctionFast和_PyCFunctionFastWithKeywords类型定义相同,只是没有前导的_前缀)。gh-114329: 添加
PyList_GetItemRef(),它与PyList_GetItem()类似,但返回的是 strong reference 而不是 borrowed reference。gh-110850: 添加 PyTime C API:
PyTime_t类型。PyTime_MIN和PyTime_MAX常量。PyTime_AsSecondsDouble(),PyTime_Monotonic(),PyTime_PerfCounter(), 和PyTime_Time()函数。
由Victor Stinner提供补丁。
gh-112066: 添加
PyDict_SetDefaultRef():如果键不存在,则将键和值插入字典中。这与dict.setdefault()类似,但返回一个整数值,指示键是否已经存在。它也与PyDict_SetDefault()类似,但返回的是强引用而不是借用引用。
Python 3.13.0 alpha 3¶
发布日期:2024-01-17
安全性¶
核心与内置函数¶
gh-107901: 编译器复制具有评估中断检查、无行号和多个前驱的基本块。
gh-107901: 离开异常处理程序跳转回正常代码不再检查评估中断。
gh-113655: 在 Windows 上将 C 递归限制设置为 4000,在 Linux/OSX 上设置为 10000。这似乎是在保持安全性和不损害向后兼容性之间的最佳点。
gh-113710: 向解释器 DSL 添加类型化堆栈效果,以及各种指令注释。
gh-77046: 在 Windows 上,默认情况下,包装 Windows 句柄的文件描述符现在创建为不可继承(PEP 446)。由 Zackery Spytz 和 Victor Stinner 提供补丁。
gh-113853: 保证所有执行器都取得进展。这进而保证了第 2 层执行总是取得进展。
gh-113753: 修复了如果
PyAsyncGenASend对象是从自由列表分配的,其终结器可能不会被调用的问题。gh-107901: 编译器更改,使得不在循环结束位置的合成跳转不再检查 eval breaker。
gh-113703: 修复了
codeop模块中的一个回归问题,该问题导致它错误地识别不完整的 f-strings。由 Pablo Galindo 提供补丁gh-89811: 在执行依赖于此值可用的字节码特殊化之前,检查有效的
tp_version_tag。gh-111488: 更改了列表推导式中 'for' 后没有 'in' 关键字时的错误消息。
gh-113657: 修复了一个导致重要指令指针更新在二级跟踪中被优化掉的问题。
gh-113603: 修复了一个在调试模式下导致编译器断言失败的冗余 NOP 未被移除的错误。
gh-113602: 修复了一个导致解析器尝试覆盖现有错误并在过程中崩溃的错误。由 Pablo Galindo 提供补丁
gh-113486: 不再为优化后的类调用发出虚假的
PY_UNWIND事件。gh-113297: 修复了编译器在使用 19 个上下文管理器的 with 语句时出现的段错误。
gh-111375: 仅在异常堆栈中使用
NULL来表示异常已被处理。由 Carey Metcalfe 提供补丁。gh-112215: 对于非调试构建,将 C 递归限制增加了 3 倍,但 webassembly 和 s390 平台保持不变。这缓解了 3.12 中混合内置(C)和 Python 代码的深度递归的一些回归问题。
gh-113054: 修复了一个在调试模式下导致编译器断言失败的冗余 NOP 未被移除的错误。
gh-106905: 使用每个 AST 解析器状态而非全局状态来跟踪 AST 解析器内的递归深度,以防止由于同时解析而导致的潜在竞争条件。
该问题主要在3.11版本中由
ast.parse()的多线程用户发现。在3.12版本中,对垃圾回收触发时机的更改防止了竞态条件的发生。gh-108866: 更改
_PyExecutorObject的API和契约,使其返回next_instr指针而非帧,并确保至少执行一条指令。gh-112125: 修复
None.__ne__(None)``返回 ``NotImplemented而非False的问题。gh-74616: 当提示包含嵌入的null字符时,
input()现在会在终端输出时引发ValueError,而不是静默截断。gh-112716: 修复当
__builtins__不是字典时,import语句和内置类型的 ``__reduce__()``方法中的SystemError。gh-112730: 使用颜色高亮tracebacks中的错误位置。由Pablo Galindo提供补丁。
gh-112625: 修复在
bytearray.join()方法中迭代参数时可能会清除bytearray对象,导致读取已释放内存的bug。gh-112660: 在格式化模块的ImportError和AttributeError错误消息时,不清除意外错误。
gh-105967: 解决Apple的macOS平台zlib库中的一个bug,其中
zlib.crc32()和binascii.crc32()在多GB输入上可能产生不正确的结果。包括在使用zipfile处理包含大数据的zip文件时。gh-95754: 在访问部分初始化模块上的无效属性时提供更好的错误消息。现在消息中包含了被访问模块的来源,以帮助解决模块遮蔽其他模块的常见问题。
gh-112217: 添加对
raise from T``中调用类型 ``T返回的__cause__类型的检查。gh-111058: 修改 coro.cr_frame/gen.gi_frame 在协程/生成器关闭后返回
None。这修复了getcoroutinestate()和getgeneratorstate()对于已关闭协程/生成器返回错误状态的 bug。gh-112388: 修复导致解析器尝试覆盖 tokenizer 错误的错误。由 Pablo Galindo 提供补丁。
gh-112387: 修复解码字符串中反向 tokenize 错误的错误位置。由 Pablo Galindo 提供补丁。
gh-99606: 使空 f-string 生成的代码与空普通字符串的代码相同。
gh-112367: 通过不释放代码区域直到关闭,避免使用 perf trampolines 时的未定义行为。补丁由 Pablo Galindo 提供。
gh-112320: Tier 2 翻译器现在基于分支“计数器”中设置的位数跟踪保持“在跟踪上”(即不退回到 Tier 1 解释器)的置信水平。当置信度低于 1/3 时,跟踪翻译结束。
gh-109598:
PyComplex_RealAsDouble()/PyComplex_ImagAsDouble()现在尝试使用对象的__complex__()方法将其转换为complex实例,然后再回退到__float__()方法。由 Sergey B Kirpichev 提供补丁。gh-94606: 修复当
email.message.get_payload()读取含有 Unicode 代理字符且消息内容不适合 surrogateescape 编码的消息时的 UnicodeEncodeError。由 Sidney Markowitz 提供补丁。bpo-21861: 在
_io.FileIO.__repr__(),_io._WindowsConsoleIO()和_io.TextIOWrapper.__repr__()中使用对象的实际类名,使这些方法对子类友好。
库¶
gh-114077: 修复在 32 位平台上传递大于 2 GiB 的 count 时
socket.socket.sendfile()中可能出现的OverflowError。gh-114014: 修复了
fractions.Fraction中的一个 bug,该 bug 在使用d作为小数部分的无效字符串时,会生成与其他无效字母/字符不同的错误。由 Jeremiah Gabriel Pascual 提供补丁。gh-108364:
sqlite3.Connection.iterdump()现在确保在转储数据库模式之前禁用外键支持,如果有任何外键违规。由 Erlend E. Aasland 和 Mariusz Felisiak 提供补丁。gh-113971:
zipfile.ZipInfo之前受保护的._compresslevel属性现在公开为.compress_level,旧的_compresslevel名称仍作为属性保留以保持兼容性。gh-113868: 添加了
mmap.MAP_NORESERVE,mmap.MAP_NOEXTEND,mmap.MAP_HASSEMAPHORE,mmap.MAP_NOCACHE,mmap.MAP_JIT,mmap.MAP_RESILIENT_CODESIGN,mmap.MAP_RESILIENT_MEDIA,mmap.MAP_32BIT,mmap.MAP_TRANSLATED_ALLOW_EXECUTE,mmap.MAP_UNIX03和mmap.MAP_TPRO。这些都是 macOS 上的mmap(2)标志。gh-113848:
asyncio.TaskGroup()和asyncio.timeout()上下文管理器现在也处理CancelledError子类以及确切的CancelledError。gh-113661: unittest 运行器:如果测试被跳过,不要退出 5。退出 5 的意图是检测测试套件根本没有被发现的问题。如果我们跳过了测试,那么它已经被正确发现了。
gh-96037: 在退出过期的
asyncio.timeout()块期间引发的异常的上下文中插入TimeoutError。gh-113781: 在 Python 结束期间发出警告时,静默不可引发的 AttributeError。
gh-113238: 向
importlib.resources添加Anchor(为了使代码符合文档) 。gh-111693:
asyncio.Condition.wait()现在会重新抛出可能导致其被中断的同一个CancelledError实例。修复了在asyncio.Semaphore.acquire()被CancelledError中断时的竞态条件。gh-113791: 在 macOS 上向
time添加CLOCK_MONOTONIC_RAW_APPROX和CLOCK_UPTIME_RAW_APPROX。这些时钟在 macOS 10.12 或更高版本上可用。gh-112932: 恢复
zipfile从含有 "/" 目录条目的 zip 文件中extractall的能力,这是某些 wiki 或 bug 跟踪器数据导出器常见添加到 zip 文件中的情况。gh-113568: 从
pathlib.PurePath而不是其私有基类PurePathBase中引发弃用警告。gh-113594: 修复
email中当重新折叠包含 unknown-8bit 编码部分后跟非 unknown-8bit 编码部分的行时引发的UnicodeEncodeError。gh-113538: 在
asyncio.StreamReaderProtocol.connection_made()中,有一个回调函数,如果包装“连接回调”的任务失败,则会记录错误。如果任务被取消,这个回调本身会失败。通过首先检查任务是否被取消来防止这种情况。如果是,关闭传输但不记录错误。gh-113626: 在
marshal模块中添加对 allow_code 参数的支持。传递allow_code=False可以防止代码对象的序列化和反序列化,这在 Python 版本之间是不兼容的。gh-85567: 修复
pickle和pickletools命令行界面中未关闭文件的资源警告。gh-113537: 在
plistlib.loads()中支持加载str。gh-89850: 在 C 实现中添加
pickle.Pickler.persistent_id()和pickle.Unpickler.persistent_load()方法的默认实现。在pickle.Pickler和pickle.Unpickler类的 C 实现的子类中调用super().persistent_id()和super().persistent_load()不再导致无限递归。gh-113569: 在 unittest 的
assert_has_calls()失败时,如果实际上没有调用,进行指示。gh-101225: 增加由
multiprocessing.manager和multiprocessing.resource_sharer创建的multiprocessing.connection.Listener对象的积压,以显著降低在创建到它们的multiprocessing.connection.Connection时遇到连接拒绝错误的风险。gh-113568: 从
pathlib.Path而不是其私有基类PathBase引发审计事件。gh-113543: 确保
webbrowser.MacOSXOSAScript发送webbrowser.open审计事件。gh-113028: 当字符串的第二个引用出现在
pickle的输入中,并且使用 Python 实现时,我们保证只有一个副本被 pickle,并且在重新加载时共享一个对象。以前,在协议 0 中,当字符串包含某些字符(如换行符)时,会导致对象重复。gh-113421: 修复多进程日志记录器对于
%(filename)s的问题。gh-111784: 修复
_elementtree模块中的段错误。通过在模块状态中为胶囊生命周期保持对pyexpat模块的强引用,修复在_elementtree.XMLParser实例的释放过程中第一次出现的段错误。通过在XMLParser结构中为_elementtree模块生命周期保持对_elementtree模块的强引用,修复在同一释放过程中第二次出现的段错误。gh-113407: 修复当 CPython 构建时没有文档字符串时导入
unittest.mock的问题。gh-113320: 修复 Python 3.12 中的一个回归问题,其中未标记为
runtime-checkable的Protocol类会被不必要地内省,如果协议有问题的成员,可能会导致异常被引发。由 Alex Waygood 提供补丁。gh-113358: 修复了当异常具有损坏的 __getattr__ 时渲染回溯的问题。
gh-113214: 修复了在 SSL-over-SSL 场景中 asyncio SSL 协议中止时出现的
AttributeError。gh-113246: 更新捆绑的 pip 到 23.3.2 版本。
gh-87264: 修复了 tarfile list() 方法以显示文件类型。
gh-112182:
asyncio.futures.Future.set_exception()现在将StopIteration转换为RuntimeError,而不是挂起或其他异常行为。由 Jamie Phan 提供补丁。gh-113225: 通过尽可能使用
os.DirEntry.path来加速pathlib.Path.glob()。gh-113149: 当 JSON 数组或对象包含尾随逗号时,改进了错误消息。补丁由 Carson Radtke 提供。
gh-113117:
subprocess模块现在可以在支持posix_spawn_file_actions_addclosefrom_np的平台上使用os.posix_spawn()函数和close_fds=True。由 Jakub Kulik 提供补丁。gh-113199: 使得
http.client.HTTPResponse.read1和http.client.HTTPResponse.readline在知道内容长度时读取所有数据后关闭 IO。由 Illia Volochii 提供补丁。gh-113191: 在 Windows 上添加对
os.fchmod()和文件描述符在os.chmod()中的支持。gh-113188: 修复了 Windows 上的
shutil.copymode()和shutil.copystat()。之前,如果 dst 是一个符号链接,它们的行为会有所不同:如果 follow_symlinks 为真或 src 不是符号链接,它们会修改 dst 本身的权限位而不是它指向的文件;如果 follow_symlinks 为假且 src 是符号链接,则不会修改权限位。gh-113119:
os.posix_spawn()现在接受env=None,这使得新生成的进程使用当前进程环境。由 Jakub Kulik 提供补丁。gh-113202: 在
itertools模块中的batched()添加了一个strict选项。gh-61648: 检测 doctests 中属性的行号。
gh-113175: 与 importlib_metadata 7.0 同步,包括改进的类型注释,修复了
package_distributions中符号链接包的问题,添加了EntryPoints.__repr__,引入了diagnose脚本,添加了Distribution.origin属性,并移除了通过数字索引(元组行为)访问已弃用的EntryPoint。gh-59616: 在 Windows 上添加了对
os.lchmod()和os.chmod()中 follow_symlinks 参数的支持。注意,在 Windows 上os.lchmod()的 follow_symlinks 默认值为False。gh-112559:
signal.signal()和signal.getsignal()不再对可调用的处理器调用repr。asyncio.run()和asyncio.Runner.run()不再对任务结果调用repr。由 Yilei Yang 提供补丁。gh-112962:
dis模块函数将缓存信息添加到Instruction实例中,而不是创建假的Instruction实例来表示缓存条目。gh-112970: 在 Linux 上可用时(如 glibc-2.34)使用
closefrom(),而不仅限于 FreeBSD。gh-110190: 通过在 stgdict 中将
MAX_STRUCT_SIZE设置为 64,修复了 PPC64LE 平台上带有数组的 ctypes 结构体。由 Diego Russo 提供补丁。gh-112540: statistics.geometric_mean() 函数现在对包含零的数据集返回零。以前,它会引发异常。
gh-87286: 向
syslog模块添加了LOG_FTP、LOG_NETINFO、LOG_REMOTEAUTH、LOG_INSTALL、LOG_RAS和LOG_LAUNCHD,它们都是在 macOS 上使用的常量。gh-112800: 修复
asyncioSubprocessTransport.close()在使用 setuid 可执行文件时不抛出PermissionError的问题。gh-51944: 向
termios模块添加以下常量。这些值存在于 macOS 系统头文件中:ALTWERASE、B14400、B28800、B7200、B76800、CCAR_OFLOW、CCTS_OFLOW、CDSR_OFLOW、CDTR_IFLOW、CIGNORE、CRTS_IFLOW、EXTPROC、IUTF8、MDMBUF、NL2、NL3、NOKERNINFO、ONOEOT、OXTABS、VDSUSP、VSTATUS。gh-79325: 修复了 Windows 上
tempfile.TemporaryDirectory()清理过程中的无限递归错误。gh-94692:
shutil.rmtree()现在仅捕获 OSError 异常。之前,当提供无效参数时,shutil.rmtree()的符号链接攻击抵抗版本可能会忽略或将任意异常传递给错误处理器。gh-112736: 重构了
subprocess中 del-safe 符号的使用,以允许在跨平台构建环境中使用。gh-112727: 加速
pathlib.Path.absolute()。由 Barney Gale 提供补丁。gh-74690: 通过约 6% 加速
issubclass()对简单runtime-checkable protocols的检查。由 Alex Waygood 提供补丁。gh-74690: 对于仅有一个可调用成员的
runtime-checkable protocols,将isinstance()检查速度提高约 20%。对于这些协议,将issubclass()检查速度提高约 10%。由 Alex Waygood 提供补丁。gh-112645: 移除了向
shutil.rmtree()传递onerror时的弃用错误。gh-112640: 向
types.FunctionType添加kwdefaults参数以设置默认关键字参数值。gh-112622: 确保在
asyncio.create_task()中将name参数传递给事件循环。gh-112618: 修复了与
typing.Annotated相关的缓存错误。Annotated[str, True]不再与Annotated[str, 1]相同。gh-112334: 修复了3.12版本中Linux下
subprocess模块的性能回归问题,该问题由于逻辑错误导致在能够使用快速路径vfork()系统调用时未能使用,转而回退到安全但较慢的fork()。同时还修复了3.12.0版本中的第二个潜在安全漏洞。如果向
subprocess.Popen或相关API传递了``extra_groups=[]``值,子进程在exec()之前不会调用底层的setgroups(0, NULL)系统调用来清除组列表。这是在修复第一个漏洞的过程中通过代码审查发现的。
gh-110190: 通过在stgdict中将
MAX_STRUCT_SIZE设置为32,修复了Arm平台上带有数组的ctypes结构体问题。由Diego Russo提供补丁。gh-81194: 修复了
socket.if_indextoname()在特定值(UINT_MAX)下的崩溃问题。修复了64位非Windows平台上socket.if_indextoname()的整数溢出问题。gh-112578: 修复了执行
zipfile模块时出现的虚假RuntimeWarning。gh-112516: 将捆绑的pip版本更新至23.3.1。
gh-112510: 为readline使用的后端(
editline``或 ``readline)添加了readline.backend。gh-112328: [枚举] 将
EnumDict、EnumDict.member_names、EnumType._add_alias_和``EnumType._add_value_alias_``公开。gh-112509: 修复了可能导致键同时出现在
typing.TypedDict的__required_keys__和``__optional_keys__``属性中的边缘情况。由Jelle Zijlstra提供补丁。gh-101336: 为
AbstractEventLoop.create_server()和BaseEventLoop.create_server()添加了keep_alive关键字参数。gh-112414: 修复了Python 3.12中的一个回归问题,该问题导致在使用自定义 loader 导入的模块上调用
repr()时可能因AttributeError而失败。由Alex Waygood提供补丁。gh-112358: 恢复对
struct.Struct初始化的更改,该更改破坏了某些子类化的情况。gh-112405: 优化
pathlib.PurePath.relative_to()。由 Alex Waygood 提供补丁。gh-94722: 修复了一个错误,即当其中一个实例的 lineno 为
None时,DocTest实例之间的比较会失败。gh-112345: 当尝试对具有非方法成员的
typing.Protocol调用issubclass()时,改进错误信息。由 Randolf Scholz 提供补丁。gh-112332: 弃用
traceback.TracebackException的exc_type字段。添加exc_type_str以替代它。gh-81620: 为
random.binomialvariate()添加额外测试。gh-77621: 通过延迟一些导入,略微提高了
pathlib模块的导入时间。由 Barney Gale 提供补丁。gh-112139: 添加
Signature.format()以将签名格式化为带有额外选项的字符串。并在pydoc中使用它来渲染更易读的签名,这些签名在参数之间有新行。gh-112105: 使
readline.set_completer_delims()与 libedit 一起工作。gh-106922: 当错误跨越多行时,用
traceback显示多行。gh-111874: 在创建
typing.NamedTuple类时,确保对定义__set_name__并存在于NamedTuple类的类字典值中的所有对象调用__set_name__()。由 Alex Waygood 提供补丁。gh-68166: 在
tkinter.ttk.Style.element_create()中添加对 "vsapi" 元素类型的支持。gh-110275: 命名元组的方法
_replace()和__replace__()现在对于无效的关键字参数会抛出 TypeError 而不是 ValueError。gh-111615: 修复了由 gh-93162 的修复引起的回归问题,该问题导致无法在不指定 handlers 的情况下配置
QueueHandler。gh-75666: 修复了
tkinter小部件的unbind()方法在两个参数下的行为。之前,widget.unbind(sequence, funcid)会销毁 sequence 的当前绑定,使 sequence 无绑定,并删除 funcid 命令。现在它只从 sequence 的绑定中移除 funcid,保留其他命令,并删除 funcid 命令。只有当 funcid 是最后一个绑定命令时,才会使 sequence 无绑定。gh-67790: 为
fractions.Fraction实现了基本格式化支持(最小宽度、对齐、填充)。gh-111049: 修复了
io.BytesIO缓冲对象在垃圾回收过程中的崩溃问题。gh-102988:
email.utils.getaddresses()和email.utils.parseaddr()现在在遇到无效电子邮件地址的更多情况下返回('', '')2元组,而不是可能不准确的值。为这两个函数添加可选的 strict 参数:使用strict=False以获取旧行为,接受格式错误的输入。可以使用getattr(email.utils, 'supports_strict_parsing', False)来检查 strict 参数是否可用。Thomas Dwyer 和 Victor Stinner 的补丁改进了 CVE 2023-27043 的修复。gh-52161:
cmd.Cmd.do_help()现在在写入文档字符串之前使用inspect.cleandoc()清理它们。Filip Łapkiewicz 的补丁。gh-82300: 向
multiprocessing.shared_memory.SharedMemory添加track参数,允许使用共享内存块而无需注册到 POSIX 资源跟踪器,该跟踪器会在进程退出时自动释放它们。gh-110109: 添加私有
pathlib._PurePathBase类:作为pathlib.PurePath的基类,省略了一些魔术方法。未来可能会公开(连同_PathBase)。gh-109858: 保护
zipfile免受“引用覆盖”zip炸弹攻击。现在在尝试读取与其他条目或中央目录重叠的条目时会引发 BadZipFile。gh-109786: 修复了重新进入
itertools.pairwise的__next__()方法时可能出现的引用泄漏和崩溃问题。gh-91539:
urllib.request.getproxies_environment()的小幅(10 - 20%)且简单的性能提升,通常在有许多环境变量需要遍历时有用。gh-103363: 向
pathlib.Path.owner()和group()添加仅关键字参数 follow_symlinks,默认为True。gh-99437:
runpy.run_path()现在解码路径类对象,确保被运行模块的 __file__ 和 sys.argv[0] 始终是字符串。gh-104003: 添加
warnings.deprecated(),一个装饰器,用于向静态类型检查器标记已弃用的函数,并在使用已弃用的类和函数时发出警告。参见 PEP 702。由 Jelle Zijlstra 提供补丁。gh-103708: 将硬编码的 python 名称改为可配置参数,以便不同的 python 实现可以覆盖它,而不必在 sysconfig.py 中做出大量更改。
gh-66515:
mailbox.MH现在支持不包含.mh_sequences文件的文件夹(例如 Claws Mail IMAP-cache 文件夹)。由 Serhiy Storchaka 提供补丁。gh-83162: 为了清晰起见,将
re.error重命名为PatternError,并保留re.error以向后兼容。由 Matthias Bussonnier 和 Adam Chhina 提供补丁。gh-91133: 修复了
tempfile.TemporaryDirectory清理中的一个错误,现在在解决文件系统权限错误时不再解引用符号链接。bpo-43153: 在 Windows 上,
tempfile.TemporaryDirectory之前在目录清理过程中将PermissionError掩盖为NotADirectoryError。现在如果错误未被忽略,它会正确地引发PermissionError。由 Andrei Kulakov 和 Ken Jin 提供补丁。bpo-32731:
getpass.getuser()现在对于所有失败情况都会引发OSError,而不是在缺乏pwd模块的系统上引发ImportError,或者在密码数据库为空时引发KeyError。bpo-34321:
mmap.mmap现在在 Unix 上有一个 trackfd 参数;如果它是False,则 fileno 指定的文件描述符不会被复制。bpo-35332:
shutil.rmtree()函数现在在 ignore_errors 为True时忽略调用os.close()时的错误,并且os.close()在出错后不再重试。bpo-35928:
io.TextIOWrapper现在正确处理read()和write()后的解码缓冲区。bpo-26791:
shutil.move()现在当一个目录是符号链接的目标时,将符号链接移动到该目录中。这提供了与 mv shell 命令相同的行为。之前的行为会引发异常。由 Jeffrey Kintscher 提供补丁。bpo-41422: 修复了
pickle.Pickler和pickle.Unpickler通过内部备忘录映射涉及循环引用的内存泄漏。bpo-19821:
pydoc.ispackage()函数已被弃用。bpo-40262:
ssl.SSLSocket.recv_into()方法不再要求 buffer 参数实现__len__,并且支持具有任意项目大小的缓冲区。bpo-39912:
warnings.filterwarnings()和warnings.simplefilter()现在会引发适当的异常,而不是AssertionError。补丁由 Rémi Lapeyre 贡献。bpo-37260: 修复了
shutil.rmtree()中的一个竞态条件,即在shutil.rmtree()运行时,另一个进程或线程删除的目录条目可能导致其引发 FileNotFoundError。由 Jeffrey Kintscher 提供补丁。bpo-36959: 修复了
strptime()中一些无效 ISO 格式字符串组合的错误消息,这些消息引用了格式字符串中不包含的指令。由 Gordon P. Hemsley 提供补丁。bpo-18060: 修复了一个类继承问题,当从 Structure 或 Union 的基类派生两个或更多级别的子类时,可能导致段错误。
bpo-29779: 添加了一个新的
PYTHON_HISTORY环境变量,用于设置.python_history文件的位置。bpo-21360:
mailbox.Maildir现在忽略以点开头的文件。
文档¶
gh-111699: 在 Python 3.12 文档的“新变化”中,将
smtpd的弃用通知从其自己的部分移至locale下。gh-110746: 改进了 ttk.treeview.column 和 ttk.treeview.heading 方法以及布局的有效选项/值的标记。
gh-95649: 文档说明
asyncio模块包含从 uvloop 项目的 v0.16.0 中获取的代码,以及所需的 MIT 许可信息。
测试¶
gh-111798: 在 WASI 的 pydebug 构建下禁用
test_call中的test_super_deep();堆栈深度太小,无法使测试有用。gh-111801: 在
test_isinstance中为test_infinitely_many_bases()降低递归限制。这防止了在 WASI 的 pydebug 构建中出现堆栈溢出。gh-111802: 为
test.pickletester中的test_bad_getattr()指定一个低的递归深度,以避免在 WASI 的 pydebug 构建下耗尽堆栈。gh-44626: 修复
os.path.isabs()在给定以正好一个(反)斜杠开头的路径时在 Windows 上错误返回True的问题。修复
pathlib.PureWindowsPath.is_absolute()对于某些以两个(反)斜杠开头的路径错误返回False的问题。gh-113633: 为 _testcapi 扩展模块使用模块状态。
gh-109980: 在 macOS 上修复
test_shutil中的test_tarfile_vs_tar,其中系统 tar 可以在归档中包含比shutil.make_archive更多的信息。gh-112769: 现在,当
zlib.ZLIB_RUNTIME_VERSION包含非整数后缀时,测试正确比较 zlib 版本。例如,zlib-ng 将版本定义为1.3.0.zlib-ng。gh-112334: 添加回归测试以验证在启用了 vfork 的 POSIX 系统(如 Linux)上,
subprocess在预期时会使用vfork()。gh-108927: 修复了在同一进程中运行测试时的顺序依赖问题,当一个具有子模块的测试(如 test_importlib)跟随一个导入其子模块的测试(如 test_importlib.util)并先于一个使用该子模块的测试(如 test_unittest 或 test_compileall)时。
bpo-40648: 测试 Windows 上文件可以通过 chmod() 获取的模式。
构建¶
gh-114013: 修复
Tools/wasm/wasi.py,不将python.wasm的路径作为HOSTRUNNER的一部分。环境变量仅用于指定如何运行 WASI 主机,将python.wasm和相关标志附加到HOSTRUNNER。这修复了make test的工作。gh-113258: 更改 Windows 构建,将生成的冻结模块写入构建树而非源树。
gh-112305: 修复了在树外构建上执行的
check-clean-src步骤,以检测错误的$(srcdir)/Python/frozen_modules/*.h文件,并建议适当的源树清理步骤以重新获得可工作的构建。gh-112536: 添加对线程消毒剂(TSAN)的支持。
gh-112867: 修复了当设置 WITH_PYMALLOC_RADIX_TREE=0 时的构建。
gh-103065: 引入
Tools/wasm/wasi.py以简化 WASI 构建。bpo-11102:
os.major()、os.makedev()和os.minor()函数现在在 HP-UX v3 上可用。bpo-36351: 交叉编译时不设置 ipv6type。
Windows¶
gh-114096: 为创建目录连接激活的进程权限现在会在之后恢复,避免程序中其他部分的行为变化。
gh-111973: 更新 Windows 安装程序以使用 SQLite 3.44.2。
gh-113009:
multiprocessing: 在 Windows 上,修复了Process.terminate()中的一个竞态条件:不再将returncode属性设置为总是在Process.wait()中调用WaitForSingleObject()。之前,有时候即使GetExitCodeProcess()不是STILL_ACTIVE,进程在TerminateProcess()后仍在运行。由 Victor Stinner 提供补丁。gh-86179: 修复了通过符号链接在 Windows 上启动 Python 时的路径计算问题。
gh-71383: 更新 Windows 安装程序中的 Tcl/Tk 到 8.6.13,并应用了一个补丁以抑制不正确的 ThemeChanged 警告。
gh-111650: 确保在
pyconfig.h中定义了Py_GIL_DISABLED预处理器变量,以便用 C 编写的扩展模块能够使用它。gh-112278: 如果当前用户没有 WMI 的权限,减少 Windows 上
platform中某些函数的时间成本。gh-73427: 弃用
sys._enablelegacywindowsfsencoding()。改用PYTHONLEGACYWINDOWSFSENCODING。由 Inada Naoki 提供补丁。gh-87868: 在
_winapi.CreateProcess()中正确排序并移除重复的环境变量。bpo-37308: 修复在 Windows 上使用非 ASCII tagname 参数时
mmap.mmap中的乱码问题。
macOS¶
gh-113666: 向模块
stat添加以下常量:UF_SETTABLE、UF_TRACKED、UF_DATAVAULT、SF_SUPPORTED、SF_SETTABLE、SF_SYNTHETIC、SF_RESTRICTED、SF_FIRMLINK和SF_DATALESS。值UF_SETTABLE、SF_SUPPORTED、SF_SETTABLE和SF_SYNTHETIC仅在 macOS 上可用。gh-113536:
os.waitid()现在在 macOS 上可用。gh-110459: 在 macOS 上运行
configure ... --with-openssl-rpath=X/Y/Z不再无法检测到 OpenSSL。gh-74573: 文档说明
dbm.ndbm在更新时超过未记录的平台限制时可能会静默损坏 DBM 文件,并且在读取此类损坏文件时可能会崩溃(段错误)。(FB8919203)gh-65701: freeze 工具不适用于 Python 的框架构建。文档说明这一点,并在使用此类构建运行工具时早期退出。
gh-87277: webbrowser: 不要在 macOS 上寻找 X11 浏览器。这些通常不被使用,探测它们可能会导致启动 XQuartz,即使它不被其他方式使用。
gh-111973: 更新 macOS 安装程序以使用 SQLite 3.44.2。
gh-108269: 在 macOS 上的框架、嵌入式 Python.app 和 IDLE.app 的 Info.plist 中设置
CFBundleAllowMixedLocalizations为 true。这允许应用程序在用户的首选区域设置与英语不同时,选择用户的区域设置。gh-102362: 确保
sysconfig.get_plaform()的结果至少包括主版本和次版本,即使在构建过程中MACOSX_DEPLOYMENT_TARGET仅设置为一个主版本以匹配 pip 预期的格式。gh-110017: 由于 macOS 中的一个错误 (FB13453490),在 macOS 上禁用信号处理压力测试。
gh-110820: 确保
ALIGNOF_MAX_ALIGN_T、SIZEOF_LONG_DOUBLE和HAVE_GCC_ASM_FOR_X64的预处理器定义对于 macOS 上的 Universal 2 构建是正确的。gh-109981: 在 macOS 上使用
/dev/fd来确定test.support.os_helper.fd_count中打开的文件数量,以避免在探测打开的文件时因“受保护”的文件描述符而崩溃。
IDLE¶
C API¶
gh-106560: 修复公共C API中的冗余声明。仅声明一次PyBool_Type、PyLong_Type和PySys_Audit()。由Victor Stinner提供补丁。
gh-112438: 修复在
PyArg_ParseTuple()类似函数中嵌套元组中格式单元"es"、"et"、"es#"和"et#"的支持。gh-111545: 添加
Py_HashPointer()函数以哈希指针。由Victor Stinner提供补丁。gh-65210: 更改
PyArg_ParseTupleAndKeywords()和PyArg_VaParseTupleAndKeywords()的 keywords 参数的声明以提高与C++的兼容性。
Python 3.13.0 alpha 2¶
发布日期: 2023-11-22
核心与内置函数¶
gh-112243: 不要在f-string调试表达式中包含注释。由Pablo Galindo提供补丁
gh-112287: 通过仅在需要时加载
oparg和operand来轻微优化Tier 2(uop)解释器。同时再次将跟踪大小限制翻倍,这次是512。gh-111807: 在WASI调试构建下将最大解析器堆栈深度降低到1000。
gh-111798: 当Python以调试模式构建时,将C递归限制设置为500而不是1500。调试构建很可能以低优化级别构建,这意味着比发布构建更高的堆栈内存使用。由Victor Stinner提供补丁。
gh-106529: 启用将未特化的
FOR_ITER翻译到Tier 2。gh-111916: 使hashlib相关模块在没有GIL的情况下线程安全
gh-81137: 当新代码对象类型不匹配时(例如,从生成器到普通函数),弃用对函数 ``__code__``字段的赋值。
gh-79932: 如果 :suspension:`frame.clear` 在暂停的帧上调用,则引发异常。
gh-81925: 为GNU KFreeBSD实现原生线程id。
gh-111843: 使用指数退避来减少Tier 2优化尝试失败的次数超过99%。
gh-110829: 加入线程现在确保底层操作系统线程已退出。这是多线程进程中更安全fork()所必需的。
gh-109369: 如果代码被插桩,确保二级追踪被去优化
gh-111772: 为_Py_T_OBJECT以及Py_T_OBJECT_EX专门化槽加载和存储
gh-111666: 通过改变它们解析传递参数的方式,加速
BaseExceptionGroup.derive()、BaseExceptionGroup.subgroup()和BaseExceptionGroup.split()。gh-111654: 修复操作码
LOAD_FROM_DICT_OR_DEREF中发生某些错误时的运行时崩溃。gh-111623: 使用跨解释器API添加支持在解释器之间共享元组。由Anthony Shaw提供补丁。
gh-111354: 如果指令是yield-from或await的一部分,则
YIELD_VALUE的操作数现在为``1``,否则为0。SUSPENDED帧状态现在分为
SUSPENDED和SUSPENDED_YIELD_FROM。这简化了_PyGen_yf中的代码。gh-111520: 将Tier 1(字节码)和Tier 2(微操作)解释器合并在一起,将Tier 2解释器循环和开关移动到
Python/ceval.c中的_PyEval_EvalFrameDefault()。Python/executor.c文件已移除。此外,TIER_ONE``和 ``TIER_TWO宏现在由代码生成器处理。gh-109181: 通过懒惰计算行号加速
Traceback对象创建。由Pablo Galindo提供补丁gh-111420: 允许在括号化的
with语句中使用类型注释gh-111438: 使用跨解释器API添加支持在解释器之间共享浮点数。由Anthony Shaw提供补丁。
gh-111435: 使用跨解释器API添加支持在解释器之间共享
True和False。由Anthony Shaw提供补丁。gh-102388: 修复
iso2022_jp_3和iso2022_jp_2004编解码器读取越界的错误gh-111366: 修复了
codeop中的一个问题,该问题导致在存在无效语法时引发的SyntaxError异常不包含精确的错误信息。由Pablo Galindo提供补丁。gh-111380: 修复了一个错误,该错误导致在解析时如果遇到无效语法,
SyntaxWarning会显示两次。由Pablo Galindo提供补丁。gh-111374: 添加了一个新的环境变量
PYTHON_FROZEN_MODULES。它决定了导入机制是否忽略冻结模块,等同于命令行选项-X frozen_modules。gh-111354: 从
YIELD_VALUE中移除oparg。将RESUME的oparg更改为包含关于except深度的信息。这些更改使得简化生成器关闭中的代码成为可能。gh-94438: 修复了一个回归问题,该问题在调试时阻止了跨
is None和is not None的跳转。由Savannah Ostrowski提供补丁。gh-67224: 在使用
-c选项运行Python时,在回溯中显示源代码行。由Pablo Galindo提供补丁。gh-111123: 修复了一个错误,该错误导致在
except块中的global声明在全局变量在else块中使用时被拒绝。gh-110938: 修复了带有函数和带有泛型类型参数的类的缩进块的错误消息。由Pablo Galindo提供补丁。
gh-109214: 在从帧返回之前移除不必要的指令指针更新。
gh-110912: 使用
traceback模块正确显示MemoryError异常的回溯。由Pablo Galindo提供补丁。gh-109894: 修复了由于子解释器中静态
MemoryError未正确初始化而导致的崩溃。gh-110892: 对于由异常引起的
PyTrace_RETURN事件返回NULL。gh-110864: 通过
_PyArg_UnpackKeywordsWithVararg修复了为定义位置或关键字、可变参数和仅关键字参数的函数的参数解析。gh-109094: 将解释器帧上的
prev_instr替换为instr_ptr,后者指向当前正在执行(或一旦帧恢复后将执行)的指令的开头。gh-110805: 允许 repl 显示源代码和完整的回溯。由 Pablo Galindo 提交的补丁。
gh-110722: 添加
PYTHON_PRESITE=package.module以在site.py执行之前在解释器生命周期的早期导入模块。Python 需要 built in debug mode 才能使此选项存在。gh-110481: 在
--disable-gil构建中实现偏置引用计数。gh-110543: 修复 Python 3.12 中的回归问题,即
types.CodeType.replace()在包含理解的模块或类代码对象上调用时将产生损坏的代码对象。由 Jelle Zijlstra 提交的补丁。gh-89519: 移除了链式
classmethod描述符(在 bpo-19072 中引入)。这不能再用于包装其他描述符,如property。此特性的核心设计存在缺陷并导致了一系列下游问题。要“传递”一个classmethod,考虑使用 Python 3.10 中添加的__wrapped__属性。gh-103615: 使用本地事件进行操作码追踪
bpo-46657: 添加 mimalloc 内存分配器支持。
gh-106718: 当 PyConfig.stdlib_dir 被显式设置时,现在会被尊重且不会被 PyConfig.home 覆盖。
gh-106905: 修复关于 AST 构造器递归深度不匹配的错误 SystemError。
gh-100445: 改进带有转义的未终止字符串的错误消息。
bpo-45759: 改进了
elif/else语句不匹配任何有效语句时的错误消息。由 Jeremiah Vivian 提交的补丁。
库¶
gh-111942: 在非调试模式下修复 TextIOWrapper 构造器中使用不可编码的“errors”参数时的 SystemError。
gh-111995: 在构建时 C 中存在的
NI_IDN常量添加到socket模块中,用于socket.getnameinfo()。gh-109538: 当事件循环在
StreamWriter.__del__()中已经关闭时,显示警告信息而不是显示RuntimeError。gh-111942: 修复在
io.TextIOWrapper.reconfigure()中传递无效参数(例如非字符串编码)时导致的崩溃。gh-111460:
curses: 在 macOS 上恢复宽字符支持(包括curses.unget_wch()和get_wch()),这在 Python 3.12 中因回归问题而不可用。gh-103791:
contextlib.suppress现在支持抑制作为BaseExceptionGroup一部分引发的异常,以及最近对ExceptionGroup的支持。gh-111835:
mmap.mmap类现在有一个seekable()方法,可以在需要可寻址的文件类对象时使用。seek()方法现在返回新的绝对位置。由 Donghee Na 提供补丁。gh-111804: 在 WASI 下移除 posix.fallocate(),因为底层的 posix_fallocate() 在 WASI preview2 中不可用。
gh-111841: 修复在 Windows 上的
os.putenv()和os.unsetenv()中在嵌入的空字符处截断参数的问题。gh-111768:
wsgiref.util.is_hop_by_hop()现在在__all__中正确暴露。gh-111541: 修复
doctest对于非内置子类的SyntaxError的处理。gh-111482:
time: 通过更快的调用约定,使time.clock_gettime()和time.clock_gettime_ns()函数的速度提高至 2 倍。由 Victor Stinner 提供补丁。gh-110894: 为
asyncio.start_server()的client_connected_cb中的异常调用循环异常处理器,以便应用程序可以处理它。由 Kumar Aditya 提供补丁。gh-111531: 修复
tkinter小部件的bind_class()和bind_all()方法中的引用泄漏问题。gh-111246:
asyncio.loop.create_unix_server()现在会在服务器关闭时自动删除 Unix 套接字。gh-111356: 将
io.text_encoding()、io.DEFAULT_BUFFER_SIZE和io.IncrementalNewlineDecoder添加到io.__all__。gh-66425: 从 wsgiref 模块中移除了设置 REMOTE_HOST 头部的代码,因为这是无法达到的。这个头部原本是出于性能考虑而使用的,但在 wsgiref 模块中并不必要。
gh-111429: 加速
pathlib.PurePath.relative_to()和is_relative_to()。gh-111342: 修正了
math.sumprod()中的拼写错误。gh-68166: 在
tkinter.ttk.Style.element_create()中移除了对不支持的 "vsapi" 元素类型的提及。为element_create()和其他ttk.Style方法添加了测试。在文档中为element_create()添加了示例。gh-111388: 向
traceback.format_exception_only()添加了show_group参数,允许格式化ExceptionGroup实例。gh-79033: 又一次尝试修复
asyncio.Server.wait_closed()。现在它会阻塞,直到两个条件都为真:服务器已关闭,并且 没有更多活跃连接。(这意味着在某些情况下,在 3.12.0 中此函数 错误地 立即返回,现在将会阻塞;特别是,当没有活跃连接但服务器尚未关闭时。)gh-111253: 在
_socket模块初始化期间添加错误检查。gh-111251: 修复
_blake2在初始化时不检查错误的问题。gh-111174: 修复在为空 BytesIO 重复调用
io.BytesIO.getbuffer()时的崩溃问题。gh-111187: 将 locale.getdefaultlocale() 的移除版本推迟到 Python 3.15。
gh-110910: 修复
asyncio.TaskGroup和asyncio.Timeout中的无效状态处理。如果使用不当,现在会正确抛出 RuntimeError,并在之后保持状态一致。gh-111092: 使 turtledemo 在没有启用默认根的情况下运行。
gh-110745: 向
pathlib.Path.read_text()添加了 newline 参数。由 Junya Okabe 提供补丁。gh-84583: 使
pdb即使对于SyntaxError也能进入事后模式。gh-80675: 在
pdb.set_trace()时在所有帧上设置f_trace_lines = True。gh-110771: 将
asyncio.run_forever()的设置和清理部分作为独立方法asyncio.run_forever_setup()和asyncio.run_forever_cleanup()公开。这使得与 GUI 事件循环的集成更加紧密。gh-110774: 在
unittest.IsolatedAsyncioTestCase中支持设置asyncio.Runner的 loop_factory 关键字参数。gh-110392: 修复
tty.setraw()和tty.setcbreak():之前它们返回了原始 tty 属性的部分修改列表。tty.cfmakeraw()和tty.cfmakecbreak()现在在修改特殊字符列表之前先复制一份。gh-110395: 确保
select.kqueue()对象在 fork 的子进程中正确显示为关闭,以防止对无效文件描述符的操作。gh-110196: 向
IPv6Address添加__reduce__方法以保留scope_id。gh-109747: 改进对不支持的后视模式的错误提示。现在对于后视模式宽度过大的情况,会抛出 re.error 而不是 OverflowError 或 RuntimeError。
gh-109466: 添加
ipaddress.IPv4Address.ipv6_mapped属性,该属性返回 IPv4 映射的 IPv6 地址。gh-105931: 修改
compileall,使其仅当 stripdir 前缀完全匹配完整路径的开头时,才从编译的.pyc文件中记录的完整路径中去除该前缀。当前缀不匹配时,不执行去除操作,并显示警告信息。之前,stripdir 前缀的所有路径组件中,与完整路径匹配的部分会被移除,而不匹配的部分则保留(包括穿插在匹配组件之间的部分)。
gh-107431: 使
multiprocessing.managers中的DictProxy和ListProxy类型成为[]使用的 Generic Alias Types,以便在类型上下文中使用。gh-72904: 添加
glob.translate()。此函数将带有 shell 风格通配符的路径名转换为正则表达式。gh-90890: 新方法
mailbox.Maildir.get_info(),mailbox.Maildir.set_info(),mailbox.Maildir.get_flags(),mailbox.Maildir.set_flags(),mailbox.Maildir.add_flag(),mailbox.Maildir.remove_flag()。这些方法加快了访问邮件的 info 和/或 flags 的速度,并且在不需要访问邮件内容时非常有用,例如在迭代 Maildir 以查找具有特定 flags 的邮件时。gh-102956: 修复 zipfile 模块中 seek 后返回空字节字符串的问题
gh-102895: 为
code.interact()添加了一个参数local_exit,以防止exit()和quit关闭sys.stdin并引发SystemExit。gh-97928: 修改
tkinter.Text.count()的行为。现在,如果指定一个或更少的计数选项,它总是返回一个整数。以前,它可以返回一个单一计数作为1元组,一个整数(仅当指定选项"update"时)或None如果没有找到项目。现在,如果wantobjects设置为0,结果是相同的。gh-96954: 将unicode码点名称的存储切换为使用不同的数据结构,即`有向无环字图 <https://en.wikipedia.org/wiki/Deterministic_acyclic_finite_state_automaton>`_。这使得unicodedata共享库小了约440 KiB。由Carl Friedrich Bolz-Tereick使用来自PyPy项目的代码贡献。
gh-73561: 当
http.client使用IPv6地址作为Host头时,省略接口范围。gh-86826:
zipinfo现在支持RFC 8536确定的TZ字符串中的全部值范围,并检测所有无效格式。Python和C实现现在在无效数据上抛出相同类型的异常。
测试¶
gh-111808: 使
test.support.infinite_recursion()的默认值基于编译解释器时是否使用了优化条件。这有助于像WASI这样的平台,在调试构建中其堆栈大小受到极大限制。gh-110722: 在回归测试套件中收集标准库的行覆盖率现在是精确的,而且快得多。由Łukasz Langa提供补丁。
gh-110367: 使regrtest的
--verbose3选项与--huntrleaks -jN选项兼容。``./python -m test -j1 -R 3:3 --verbose3``命令现在按预期工作。由Victor Stinner提供补丁。gh-111165: 从
test.support模块中移除不再使用的函数run_unittest()和``run_doctest()``。gh-110932: 如果定义了
SOURCE_DATE_EPOCH环境变量,修复regrtest:使用变量值作为随机种子。由Victor Stinner提供补丁。gh-110995: test_gdb: 修复对未构建Python脚本支持的gdb的检测。由Victor Stinner提交的补丁。
gh-110918: 现在按照指定的顺序测试由选项
--match、--ignore、--matchfile和``--ignorefile``指定的测试用例匹配模式,最后一个匹配决定测试用例是否运行或被忽略。gh-108747: 为
site中的usercustomize和sitecustomize钩子添加单元测试。
构建¶
gh-96954: 使
make regen-unicodedata适用于CPython的树外构建。gh-112088: 添加
Tools/build/regen-configure.sh脚本以使用Ubuntu容器镜像重新生成``configure``。不再使用quay.io/tiran/cpython_autoconf:271容器镜像(tiran/cpython_autoconf)。由Victor Stinner提交的补丁。gh-111046: 对于wasi-threads,现在导出内存以修复与某些wasm运行时的兼容性问题。
gh-110828: AIX 32位需要
-latomic来构建_testcapi扩展模块。gh-85283: 现在使用 limited C API 构建
errno、md5、resource、winsound、_ctypes_test、_multiprocessing.posixshmem、_scproxy、_stat、_testimportmultiple``和 ``_uuidC扩展。由Victor Stinner提交的补丁。
Windows¶
gh-111293: 修复
os.DirEntry.inode在Windows上某些文件系统中丢弃文件ID的高64位的问题。gh-110913: WindowsConsoleIO现在正确地分块大缓冲区而不拆分UTF-8序列。
macOS¶
gh-59703: 对于macOS框架构建,在
getpath.c中使用系统dladdr函数来查找共享库的路径,而不是依赖于已弃用的macOS API。gh-110950: 更新 macOS 安装程序,包含上游 Tcl/Tk 的修复,解决在 macOS 14 Sonoma 上 Tkinter 中遇到的
Secure coding is not enabled for restorable state!警告问题。gh-111015: 确保在 macOS 构建中,IDLE.app 和 Python Launcher.app 以适当的权限安装。
gh-71383: 更新 macOS 安装程序,包含上游 Tcl/Tk 的修复,解决在 Tkinter 中遇到的
ttk::ThemeChanged错误。gh-92603: 更新 macOS 安装程序,包含上游 Tcl/Tk 接受的修复,解决在第一个
tkinter.Tk()实例被销毁后遇到的崩溃问题。
IDLE¶
bpo-35668: 为 IDLE 调试器模块添加文档字符串。修复两个错误:初始化
Idb.botframe(应在 Bdb 中) ;在Idb.in_rpc_code中,尝试使用prev_frame前检查其是否为None。大幅扩展 test_debugger。
工具/示例¶
gh-111903: Argument Clinic 现在支持
@critical_section指令,该指令指示 Argument Clinic 在函数调用周围生成一个临界区,在--disable-gil构建中锁定self对象。补丁由 Sam Gross 提供。
C API¶
gh-112026: 再次添加私有函数
_PyThreadState_UncheckedGet()作为新公共函数PyThreadState_GetUnchecked()的别名。由 Victor Stinner 提供补丁。gh-112026: 恢复被移除的
_PyDict_GetItemStringWithError()函数。numpy 使用此函数。补丁由 Victor Stinner 提供。gh-112026: 恢复被移除的私有 C API 函数、宏和结构,这些目前没有简单的替代方案:
_PyDict_GetItem_KnownHash()
_PyDict_NewPresized()
_PyHASH_BITS
_PyHASH_IMAG
_PyHASH_INF
_PyHASH_MODULUS
_PyHASH_MULTIPLIER
_PyLong_Copy()
_PyLong_FromDigits()
_PyLong_New()
_PyLong_Sign()
_PyObject_CallMethodId()
_PyObject_CallMethodNoArgs()
_PyObject_CallMethodOneArg()
_PyObject_CallOneArg()
_PyObject_EXTRA_INIT
_PyObject_FastCallDict()
_PyObject_GetAttrId()
_PyObject_Vectorcall()
_PyObject_VectorcallMethod()
_PyStack_AsDict()
_PyThread_CurrentFrames()
_PyUnicodeWriter 结构体
_PyUnicodeWriter_Dealloc()
_PyUnicodeWriter_Finish()
_PyUnicodeWriter_Init()
_PyUnicodeWriter_Prepare()
_PyUnicodeWriter_PrepareKind()
_PyUnicodeWriter_WriteASCIIString()
_PyUnicodeWriter_WriteChar()
_PyUnicodeWriter_WriteLatin1String()
_PyUnicodeWriter_WriteStr()
_PyUnicodeWriter_WriteSubstring()
_PyUnicode_AsString()
_PyUnicode_FromId()
_PyVectorcall_Function()
_Py_IDENTIFIER()
_Py_c_abs()
_Py_c_diff()
_Py_c_neg()
_Py_c_pow()
_Py_c_prod()
_Py_c_quot()
_Py_c_sum()
_Py_static_string()
_Py_static_string_init()
由Victor Stinner提供补丁。
gh-112026: 再次在
Python.h``中包含 ``<ctype.h>和<unistd.h>头文件,但在有限C API版本3.13及更新版本中不包含它们。由Victor Stinner提供的补丁。gh-111956: 添加仅供内部使用的一次性初始化API:
_PyOnceFlag``和``_PyOnceFlag_CallOnce。gh-111262: 添加
PyDict_Pop()和PyDict_PopString()函数:从字典中移除一个键并可选地返回被移除的值。这类似于dict.pop(),但没有默认值,如果键不存在也不会引发KeyError。由Stefan Behnel和Victor Stinner提供的补丁。gh-111863: 将
Py_NOGIL重命名为Py_GIL_DISABLED。由Hugo van Kemenade提供的补丁。gh-111138: 添加
PyList_Extend()和PyList_Clear()函数:类似于Python的``list.extend()`` 和list.clear()方法。由Victor Stinner提供的补丁。gh-108765: 在Windows上,
Python.h``不再包含 ``<stddef.h>标准头文件。如果需要,现在应该显式包含它。由Victor Stinner提供的补丁。gh-111569: 实现来自 PEP 703 的"Python临界区"。这些宏帮助在CPython的 ``--disable-gil``构建中用每对象锁替换GIL。在默认构建中,这些宏是无操作的。
gh-111506: 在有限C API版本3.13中,
Py_SET_REFCNT()函数现在被实现为一个不透明的函数调用。由Victor Stinner提供的补丁。gh-108082: 添加
PyErr_FormatUnraisable()函数。gh-110964: 将未记录的私有 _PyArg 函数和 _PyArg_Parser 结构移至内部 C API(
pycore_modsupport.h)。由 Victor Stinner 提供补丁。gh-110815: 在
PyArg_ParseTupleAndKeywords()中支持非 ASCII 关键字名称。gh-109587: 引入了
PyUnstable_PerfTrampoline_CompileCode()、PyUnstable_PerfTrampoline_SetPersistAfterFork()和PyUnstable_CopyPerfMapFile()。这些函数允许扩展模块在应用程序“预热”后急切地初始化蹦床。这使得性能蹦床可以以始终启用的方式运行。gh-85283: 将
PySys_Audit()函数添加到有限的 C API 中。补丁由 Victor Stinner 提供。gh-85283: 将
PyMem_RawMalloc()、PyMem_RawCalloc()、PyMem_RawRealloc()和PyMem_RawFree()添加到有限的 C API 中。由 Victor Stinner 提供补丁。gh-106672: 函数
PyDict_GetItem()、PyDict_GetItemString()、PyMapping_HasKey()、PyMapping_HasKeyString()、PyObject_HasAttr()、PyObject_HasAttrString()和PySys_GetObject(),在调用函数期间清除所有发生的错误,现在使用sys.unraisablehook()报告它们。gh-67565: 移除
getargs.c、binascii、ssl和 Argument Clinic 中多余的 C-连续性检查。由 Stefan Krah 和 Furkan Onder 提供补丁。
Python 3.13.0 alpha 1¶
发布日期:2023-10-13
安全性¶
gh-108310: 修复了一个问题,其中
ssl.SSLSocket的实例容易绕过 TLS 握手和包括的保护措施(如证书验证),并将发送的未加密数据视为握手后的 TLS 加密数据。安全问题的报告为 CVE 2023-40217,由 Aapo Oksman 报告。由 Gregory P. Smith 提供补丁。gh-107774: PEP 669 指定
sys.monitoring.register_callback将生成审计事件。Python 3.12 的预发布版本未生成审计事件。现在已修复。gh-102988: 撤销了在3.12beta4版本中发布的
email.utils安全改进变更,该变更无意中导致email.utils.getaddresses无法解析引用名字字段中包含逗号的电子邮件地址。参见 gh-106669。gh-99108: 从上游刷新我们新的HACL*内置
hashlib代码。内置的SHA2应该会更快,并且修复了32位平台上SHA3的一个问题。gh-102509: 在创建
PyLongObject对象时开始初始化ob_digit。由Illia Volochii提供补丁。
核心与内置函数¶
gh-110782: 修复了当
typing.TypeVar用关键字参数构造时发生的崩溃。由Jelle Zijlstra提供补丁。gh-110752: 在
interpreter_clear()中重置ceval.eval_breakergh-110721: 使用
traceback实现作为默认的PyErr_Display()功能。由Pablo Galindo提供补丁gh-110696: 修复了无效参数解包的错误消息。由Pablo Galindo提供补丁
gh-104169: 将tokenizer分成两个独立的目录:- 一部分包含实际的词素生成逻辑,位于``Parser/lexer``。- 第二部分根据我们拥有的不同tokenization模式(字符串,utf-8,文件,交互式,readline)包装lexer,位于
Parser/tokenizer。gh-110688: 从
set中移除未文档化的test_c_api方法,该方法仅在Py_DEBUG下定义用于测试目的。现在我们有了适当的CAPI测试。gh-110514: 向
sys.setprofile()事件添加PY_THROWgh-110489: 当输入恰好是一个浮点数时优化
math.ceil(),大约有10%的性能提升。gh-110455: 用
#ifndef HAVE_PTHREAD_STUBS保护assert(tstate->thread_id > 0)。这允许pydebug构建在(目前)缺乏线程支持的WASI下工作。gh-110309: 移除f-string规格的ast中不必要的空常量节点。
gh-110259: 正确识别f-字符串中的格式说明符(使用单引号或三引号),这些f-字符串在表达式部分有多行,并包含格式说明。由Pablo Galindo提供补丁。
gh-110237: 修复在
_PyEval_MatchClass中对PyList_Append调用缺少错误检查的问题。gh-110164: regrtest: 如果定义了
SOURCE_DATE_EPOCH环境变量,regrtest现在会禁用测试随机化。由Victor Stinner提供补丁。gh-109889: 修复编译器的冗余NOP检测算法,使其在查找下一个指令的行号时跳过没有行号的NOP。
gh-109853:
sys.path[0]现在为子解释器正确设置。gh-109923: 在
RETURN_GENERATOR之后的POP_TOP上设置行号。gh-105716: 子解释器现在能正确处理后台有线程运行的情况。在此之前,这些线程会干扰清理和销毁操作,并阻止运行另一个脚本。
gh-109369: 内部的eval_breaker和支持标志,以及监控版本已合并为一个原子整数,以加快检查速度。
gh-109823: 修复编译器在移除作为跳转目标的空基本块时不调整标签的bug。
gh-109793: 主线程不再在运行时终结期间清理子解释器时过早退出。这个bug尤其成问题,因为一旦触发,Python进程总是会以0退出码返回,即使它失败了。
gh-109719: 修复编译器在重新排序冷/热块时缺少跳转目标标签的问题。
gh-109595: 添加
-X cpu_count命令行选项,以覆盖os.cpu_count()和os.process_cpu_count()的返回结果。这个选项对于需要限制容器系统CPU资源但不需要修改容器(应用程序代码)的用户非常有用。由Donghee Na提供补丁。gh-109627: 修复编译器未为重复的小退出块分配新跳转目标标签的错误。
gh-109596: 修复语法中一些被错误标记为软关键字的令牌。同时修复一些重复的规则名称,并确保不允许重复规则。由Pablo Galindo提供补丁。
gh-109496: 在Python的调试模式下,
Py_DECREF()现在如果对象是指向已释放内存的悬挂指针(内存由内存分配器的调试钩子填充为0xDD"dead byte"),则会调用_Py_NegativeRefcount()。 修复方法是在检查_Py_IsImmortal()之前 检查引用计数。 由 Victor Stinner 提供补丁。gh-107265: 当需要基础操作码时,由执行器隐藏的Deopt操作码
gh-109371: 正确地为工具初始化Deopt指令,并在仪表化中修改了错误的断言,当之前的工具已经设置了INSTRUCTION事件时。
gh-105658: 修复以条件表达式结尾的except块的行跟踪包含条件表达式行的多余事件的错误。
gh-109219: 修复编译类型参数作用域时使用在内部作用域中也是自由名称的名称的错误。
gh-109351: 修复编译涉及命名(海象)表达式的无效AST时崩溃的错误。
gh-109341: 修复编译涉及
ast.TypeAlias的无效AST时崩溃的错误。gh-109195: 修复加载
super全局(或遮蔽变量)的LOAD_*指令前面的源位置,使其仅包含名称super而不包括后面的括号。gh-109256: 专用操作码的操作码ID在其自己的范围内分配,以提高'真实'操作码ID的稳定性。
gh-109207: 修复符号表条目对象的
__repr__中的SystemError。gh-109179: 修复C回溯显示中从
SyntaxError中删除注释的错误。gh-109118: 禁止在嵌套于类中的PEP 695注解作用域内使用嵌套作用域(lambda、生成器表达式和推导式)。
gh-109156: 添加测试,用于在保留行的检测的同时去除指令的检测。
gh-109114: 放宽对f-字符串内无效lambda的错误消息检测,不再搜索任意替换字段以避免误报。由Pablo Galindo提供补丁。
gh-105848: 添加一个新的
CALL_KW操作码,用于包含关键字参数的调用。同时,修复在调试器中跳过方法调用时可能发生的崩溃。gh-109052: 在比较代码对象时使用基础操作码,以避免检测的干扰。
gh-109118: 修复当在泛型类的类型参数中引发NameError时解释器崩溃的问题。
gh-88943: 改进跟随数字文字的非ASCII字符的语法错误。现在它指向无效的非ASCII字符,而不是有效的数字文字。
gh-108976: 修复在监控回调中去除代码对象的检测后发生的崩溃。
gh-108732: 使模块和类作用域的推导式的迭代变量再次对使用
frame.f_locals的pdb和其他工具可见。gh-108959: 修复涉及非语义括号和空格的下标和二元操作的错误位置的光标放置。由Pablo Galindo提供补丁。
gh-108727: 为
CounterOptimizer_Type定义tp_dealloc。这修复了在释放时的段错误。gh-108520: 修复
multiprocessing.synchronize.SemLock.__setstate__()以正确初始化multiprocessing.synchronize.SemLock._is_fork_ctx。这修复了在嵌套进程间传递SemLock时的回归问题。将
multiprocessing.synchronize.SemLock.is_fork_ctx重命名为multiprocessing.synchronize.SemLock._is_fork_ctx,以避免将其暴露为公共API。gh-108654:如果内联推导式引发异常,则恢复被内联推导式遮蔽的局部变量。
gh-108488:更改内联缓存条目的初始化方式,使得
JUMP_BACKWARD的缓存条目初始化为零,而不是用于所有其他指令的adaptive_counter_warmup()值。这个计数器在指令中是唯一的,从零开始计数。gh-108716:关闭代码对象的深度冻结。模块仍然被冻结,因此不需要对常见模块进行文件系统搜索。
gh-108614:添加 RESUME_CHECK 指令,以避免在第2层执行引擎中处理插装、信号和上下文切换。
gh-108487:移动一个断言,该断言在一个应仅触发去优化的狡猾情况下会导致虚假崩溃。
gh-106176:使用
WeakValueDictionary来跟踪包含每个线程当前正在导入的模块的列表。这有助于避免因为列表保留时间过长而导致引用泄漏。使用弱引用是因为垃圾回收无法中断清理过程。gh-105481:移除了regen-opcode构建阶段,其工作现在在regen-cases中完成。
gh-107901:修复在for循环末尾的
JUMP_BACKWARD缺少行号的问题。gh-108113:内置的
compile()现在可以接受一个新标志ast.PyCF_OPTIMIZED_AST,它与ast.PyCF_ONLY_AST类似,但返回的AST会根据optimize参数的值进行优化。ast.parse()现在接受一个可选参数optimize,该参数会传递给内置的compile()。这使得获取优化的AST成为可能。gh-107971:操作码ID现在从bytecodes.c生成,而不是在opcode.py中硬编码。
gh-107944: 改进带有错误关键字参数的函数调用的错误消息。由Pablo Galindo提供补丁。
gh-108390: 在`sys.monitoring.set_local_events`中设置非本地事件(
RAISE、`EXCEPTION_HANDLED`等)时引发异常。修复在递归调用Python类时追踪导致的崩溃。
gh-108035: 移除`_PyCFrame`结构体,将指向当前解释器帧的指针移回线程状态,如同3.10及更早版本。`_PyCFrame`作为追踪的性能优化存在。由于PEP 669已实现,此优化不再适用。
gh-91051: 在默认情况下`char`为有符号的平台中,修复使用全部八个类型观察器槽时的中止/段错误。
gh-84805: 为
METH_NOARGS和METH_O扩展函数自动生成签名。gh-107758: 通过确保`dump_stack()`例程从不调用Python实现的`__repr__`方法,使`lltrace`特性(低级解释器调试)使用的`dump_stack()`例程对递归具有鲁棒性。同时,为了使Tier-2 uops的类似输出与ceval.c中的`lltrace`代码匹配,使其出现在`stdout`上(而非`stderr`)。
gh-107659: 为
ctypes.pointer()和ctypes.POINTER()添加文档字符串。gh-107674: 修复`sys.settrace`中的性能回归。
gh-107724: 在3.12的预发布版本中,直到rc1,`sys.monitoring`回调函数对于`PY_THROW`事件缺少第三个异常参数。现已修复。
gh-84436: 跳过对许多已知不朽对象的引用计数修改。
gh-107080: 跟踪引用构建(
--with-trace-refs)在与隔离的子解释器一起使用时崩溃。问题全局状态已被隔离到每个解释器。除了修复崩溃,此更改不影响用户。gh-107557: 为CPython中的优化通道生成裸机第2层抽象解释器所需的案例。
gh-106608: 使
_PyUOpExecutorObject可变长度。gh-100964: 在
return后清除生成器的异常状态以打破引用循环。gh-107455: 在将不兼容类型转换为
ctypes.c_char_p、ctypes.c_wchar_p和ctypes.c_void_p时改进错误消息。gh-107263: 将主解释器以外的函数的C递归限制从800增加到1500。这应该允许像
list.__repr__和json.dumps这样的函数处理所有它们在3.12之前可以处理的输入。gh-104584: 修复了一个问题,该问题在启用
PYTHONUOPS或-X uops时导致读取了不正确的内联缓存。gh-104432: 修复了在
grp和socket模块中涉及返回char *指针序列的C API中潜在的非对齐内存访问。这些是在ARM macOS上使用-fsaniziter=alignment构建时发现的。由Christopher Chavez提供补丁。gh-106898: 将异常作为第三个参数添加到
sys.monitoring中的PY_UNIND回调。这使得PY_UNWIND回调与其他异常处理回调一致。gh-106895: 当监控回调函数为不能本地禁用的事件返回
DISABLE时,引发ValueError。gh-106897: 向
sys.monitoring添加一个RERAISE事件,该事件在异常被重新抛出时发生,无论是通过简单的raise``语句显式抛出,还是在 ``except或finally块中隐式抛出。gh-77377: 确保在fork上下文中创建的多进程同步对象不会被发送到在spawn上下文中创建的不同进程。这将在父进程中将段错误更改为可操作的RuntimeError。
gh-106931: 静态分配的字符串对象现在全局内联,而不是每个解释器内联。这修复了此类字符串仅在单个解释器中内联的情况。普通字符串对象不受影响。
gh-104621: 现在,不支持的模块总是无法导入。
gh-107122: 向
dbm.ndbm添加dbm.ndbm.ndbm.clear()。由Donghee Na提供补丁。gh-107122: 向
dbm.gnu添加dbm.gnu.gdbm.clear()。由Donghee Na提供补丁。gh-107015: 从语法中删除了ASYNC和AWAIT令牌,这消除了在使用
ast.parse()中的``feature_version<7``时使async和await成为软关键字的可能性。gh-106917: 修复了类方法风格的
super()方法调用(即,当super()的第二个参数,或者在零参数super情况下从self/cls中提取的隐含第二个参数是类型时),当调用的目标不是类方法时。gh-105699: Python不再因为初始化每个解释器内联字符串时的不频繁竞争而崩溃。当解释器被最终化时,崩溃会显现。
gh-105699: Python不再因为设置
Py_FileSystemDefaultEncoding和``Py_FileSystemDefaultEncodeErrors`` (两者都已弃用) 时的不频繁竞争而崩溃,当同时初始化两个隔离的子解释器时。现在它们仅在运行时初始化期间设置。gh-106908: 修复了在启用
PYTHONUOPS或-X uops时运行时的各种挂起、引用泄漏、测试失败和跟踪/内省错误。gh-106092: 修复了在垃圾回收延迟释放
PyFrameObject时,由于 use-after-free 错误导致的段错误。gh-106485: 通过尽可能地对实例字典进行去物质化,减少物质化实例字典的数量。
gh-106719: 不再在类型和模块类型的
__annotations__getter 和 setter 中抑制任意错误。gh-106723: 将
frozen_modules传播到多进程生成的进程解释器中。gh-104909: 将
LOAD_ATTR_INSTANCE_VALUE拆分为微操作。gh-104909: 将
LOAD_GLOBAL特化拆分为微操作。gh-106597: 在
_PyRuntimeState中添加了一个新的调试结构偏移量,这将帮助进程外调试器和分析器以一种与 Python 编译方式无关且不需要复制头文件的方式获取到相关解释器结构的偏移量。由 Pablo Galindo 提供补丁。gh-106487: 允许
str.replace()的 count 参数作为关键字。由 Hugo van Kemenade 提供补丁。gh-96844: 改进
list.remove()的错误信息。由 Donghee Na 提供补丁。gh-81283: 编译器现在从文档字符串中去除缩进。当模块有大量文档时,这会减少
pyc文件大小 5%。这一变化影响到__doc__,因此像 doctest 这样的工具会受到影响。gh-106396: 当 f-string 表达式的格式规范为空时,解析器现在会为其生成一个空的
ast.JoinedStr节点,而不是一个包含空字符串ast.Constant的单元素ast.JoinedStr。gh-100288: 为类上的非描述符特化
LOAD_ATTR。添加了LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES和LOAD_ATTR_NONDESCRIPTOR_NO_DICT。gh-106145: 使
end_lineno和end_col_offset在type_paramast 节点上成为必需项。gh-106213: 更改了Emscripten调用蹦床的工作方式,以提高与Wasm/JS Promise集成的兼容性。
gh-106182:
sys.getfilesystemencoding()和sys.getfilesystemencodeerrors现在返回interned Unicode对象。gh-106210: 移除了Emscripten导入蹦床,因为它对Pyodide不再必要。
gh-104584: 新增了一个实验性的追踪优化器和解释器(又称“第2层”)。目前这会降低性能,因此暂时不要使用——这是为了让我们可以实验优化传递的基础设施。要启用它,传递
-Xuops或设置PYTHONUOPS=1。要获取调试输出,设置PYTHONUOPSDEBUG=N,其中N是调试级别(0-4,0表示无调试输出,4表示极其详细)。gh-105775:
LOAD_CLOSURE现在是一个伪操作。gh-105730: 允许任何可调用对象(除类型对象外)作为
BaseExceptionGroup.split()和BaseExceptionGroup.subgroup()中的条件谓词。gh-105979: 修复了
_imp.get_frozen_object()中由于异常处理不当导致的崩溃。gh-106003: 新增了一个
TO_BOOL指令,它为POP_JUMP_IF_TRUE、POP_JUMP_IF_FALSE和UNARY_NOT(这些现在都期望精确的bool值) 执行布尔转换。同时,修改COMPARE_OP的oparg以包含一个可选的“布尔转换”标志。gh-98931: 确保在具有多个目标的无效导入中引发自定义的
SyntaxError错误消息。由Pablo Galindo提供补丁。gh-105724: 通过提供精确的错误范围改进了
assert错误消息。gh-105908: 修复了 gh-99111 在Python REPL中破坏未来导入
barry_as_FLUFL的bug。gh-105840: 修复了在专门化函数调用时
__defaults__过多可能导致崩溃的问题。gh-105831: 修复了一个f-string的bug,其中使用调试表达式(
=符号)出现在文件的最后一行时,导致保存表达式文本的调试缓冲区太小一个字符。gh-105800: 在f-字符串中使用无效序列时正确发出
SyntaxWarning。由Pablo Galindo提供补丁。gh-105340: 在模块或类作用域的推导式中,将推导式的迭代变量包含在
locals()中。gh-105331: 如果
asyncio.sleep()的delay参数是NaN,则引发ValueError(与time.sleep()一致) 。gh-105587: 运行时无法保证扩展不会修改不朽对象。因此,这修改了_PyStaticObject_CheckRefcnt以警告而不是断言。
gh-105564: 不在
tokenize模块的API中的标记的line属性中包含人为的换行符。由Pablo Galindo提供补丁。gh-105549: 分别对不模糊的
NUMBER和NAME标记进行标记化。由Pablo Galindo提供补丁。gh-100987: 允许除代码对象外的其他对象作为内部帧中的“可执行文件”。长期来看,这可以帮助像Cython和PySpy这样的工具更有效地交互。在短期内,它允许我们更简单地进行一些优化。
gh-105375: 修复了编译器中的一个错误,其中异常可能被覆盖。
gh-105375: 改进了
PyUnicode_BuildEncodingMap()中的错误处理,其中异常可能被覆盖。gh-105486: 更改了
types.GenericAlias中ParamSpec参数列表的repr。gh-105678: 将
MAKE_FUNCTION指令分成两部分,MAKE_FUNCTION用于创建函数,SET_FUNCTION_ATTRIBUTE``用于设置函数的属性。这使得 ``MAKE_FUNCTION的堆栈效果规范化,以简化优化和代码生成。gh-105435: 修复了如果文件以没有换行的注释结尾时的虚假换行字符。补丁由Pablo Galindo提供。
gh-105390: 对于如不完整输入之类的标记化错误,正确引发
tokenize.TokenError异常而非SyntaxError。由 Pablo Galindo 提供补丁。gh-105259: 在
tokenize模块中,不包含为尾随NEWLINE标记发出的换行符。补丁由 Pablo Galindo 提供。gh-104635: 在编译器中消除冗余的
STORE_FAST指令。由 Donghee Na 和 Carl Meyer 提供补丁。gh-105324: 修复
tokenize模块的主函数在从sys.stdin读取时的行为。由 Pablo Galindo 提供补丁。gh-33092: 简化并加速 f-strings 的解释器。移除
FORMAT_VALUE操作码。添加CONVERT_VALUE、FORMAT_SIMPLE和FORMAT_WITH_SPEC操作码。编译器为每个格式表达式生成更高效的序列。gh-105229: 移除剩余的双代码单元超级指令。所有剩余的超级指令仅占用单个代码单元,简化了检测和加速过程。
gh-105235: 防止在
mmap.find()调用期间发生越界内存访问。gh-98963: 通过忽略在此类类上设置文档字符串的失败,恢复
property子类定义__slots__或以其他方式无字典的能力。此行为在 3.12beta1 中出现了倒退。在之前没有的情况下出现的AttributeError对现有代码造成了干扰。gh-104812: "挂起调用"机制现在适用于所有解释器,而不仅仅是主解释器,并且在所有线程中运行,而不仅限于主线程。某些调用仍然仅在主线程中进行,因此仅在主解释器中。此更改不影响信号处理,也不影响现有的公共C-API(
Py_AddPendingCall()),这两者仍然仅针对主线程。新功能目前严格限于内部使用,因为除了某些非常受限的情况外,其使用的后果尚不明确。这一变化使得该功能与几年前状态变为每个解释器时的意图一致。gh-105194: 不要对f-string格式说明符使用反斜杠转义。由Pablo Galindo提供补丁。
gh-105229: 用单指令等效替换一些动态超级指令。
gh-105162: 修复了generator.close()/throw()中的一个错误,当外部迭代器被检测时,内部迭代器会被忽略。
gh-105164: 确保如果一个块中唯一的注解位于
match块内,则正确设置注解。由Jelle Zijlstra提供补丁。gh-105148: 使
_PyASTOptimizeState内部于ast_opt.c。使_PyAST_Optimize接受两个整数而不是指向此结构的指针。这避免了在ast_opt.c中包含pycore_compile.h的需要。gh-104799:
ast节点的属性如果是列表,现在如果省略则默认为空列表。这意味着一些以前在使用AST节点时会引发TypeError的代码现在将使用空列表继续执行。由Jelle Zijlstra提供补丁。gh-105111: 移除旧的垃圾回收宏
Py_TRASHCAN_SAFE_BEGIN和Py_TRASHCAN_SAFE_END。它们应该被新的宏Py_TRASHCAN_BEGIN和Py_TRASHCAN_END替换。gh-105035: 修复了在具有自定义
tp_getattro实现(例如元类型)的类型上的super()调用。gh-105017: 在NL和NEWLINE标记中显示tokenize字符串属性中的CRLF行。由Marta Gómez提交的补丁。
gh-105013: 修复
inspect.getsource()中多行括号lambda的处理。由Pablo Galindo提交的补丁。gh-105017: 解析具有CRLF行的文件时,不包含额外的最终
NL标记。由Marta Gómez提交的补丁。gh-104976: 确保
tokenize模块发出的尾随DEDENTtokenize.TokenInfo对象如Python 3.11中报告的那样。由Pablo Galindo提交的补丁。gh-104972: 确保
tokenize模块中tokenize.TokenInfo对象的line属性始终正确。由Pablo Galindo提交的补丁。gh-104955: 修复新的
__release_buffer__()槽的签名。由Jelle Zijlstra提交的补丁。gh-104690: 在解释器关闭期间(例如从
atexit处理程序中)启动新线程和通过os.fork()创建进程不再受支持。这可能导致主Python运行时线程释放线程状态与内部threading例程尝试分配和使用刚创建线程的状态之间的竞争条件。或者fork的子进程尝试在子进程中使用关闭中的运行时和线程状态。gh-104879: 修复访问在模块外定义的类型别名的
__module__属性时的崩溃。由Jelle Zijlstra提交的补丁。gh-104825:
tokenize模块发出的标记不再在line属性中包含隐式的\n字符。由Pablo Galindo提交的补丁。gh-104770: 如果生成器在关闭时返回一个值,该值现在由
generator.close()返回。gh-89091: 对于未等待的异步生成器方法如
asend()、athrow()和aclose(),引发RuntimeWarning。由Kumar Aditya提交的补丁。gh-96663: 当在没有
__dict__且没有该属性的槽成员的类上设置属性时,添加一个更好、更可内省的错误消息。gh-93627: 更新Python pickle模块实现以匹配C实现的pickle模块。对于将缩减方法如
__reduce_ex__()或__reduce__()设置为None的对象,pickle操作将导致TypeError。gh-91095: 专门化对大多数Python类的调用。具体来说,任何继承自
object或其他Python类且未覆盖__new__的类。专门化指令执行以下操作:
创建对象(通过调用
object.__new__)将一个垫片帧推送到帧堆栈(以在
__init__之后清理)将
__init__的帧推送到帧堆栈
加速大多数Python类的实例化。
库¶
gh-110786:
sysconfig的命令行界面现在忽略BrokenPipeError,如果其输出被管道传输且管道关闭,则正常退出。gh-110733: 微优化:避免在
BaseEventLoop._run_once()中调用min(),max()。gh-94597: 添加了
asyncio.EventLoop用于asyncio.run()的 loop_factory 关键字参数,以避免调用asyncio策略系统。gh-110682:
运行时可检查协议过去如果在协议上存在``__match_args__``,则在__instancecheck__中将其视为协议成员。现在,如果存在此属性,则忽略它。gh-110488: 修复
pathlib.PurePath.with_name()中的几个问题:单个点被错误地认为是有效名称,而在PureWindowsPath中,具有NTFS替代数据流的名称,如a:b,被错误地认为是无效的。gh-110590: 修复
_sre.compile()中的一个bug,当 code 参数是非整数列表时,TypeError会被OverflowError覆盖。gh-110519: 关于
gettext中非整数数字的弃用警告现在总是引用用户代码中使用 gettext 函数或方法的行。之前它可能引用gettext代码中的一行。gh-89902: 弃用
decimal.Decimal的非标准格式说明符 "N"。它未被记录且仅在 C 实现中支持。gh-110378:
contextmanager()和asynccontextmanager()上下文管理器现在会关闭一个产生多个值的无效底层生成器对象。gh-110365: 修复
termios.tcsetattr()在从term列表解析整数时覆盖现有错误的 bug。gh-109653: 通过在这些模块中延迟导入
warnings,略微提高几个标准库模块的导入时间。由 Alex Waygood 提供补丁。gh-110273: 如果为声明为 init=False 的字段指定关键字参数或为必需的 InitVar 字段缺少关键字参数,
dataclasses.replace()现在会引发 TypeError 而不是 ValueError。gh-110249: 向
dis命令行添加--inline-caches标志。gh-109653: 修复
random在 Python 3.12 导入时间的回归。由 Alex Waygood 提供补丁。gh-110222: 在
copy.replace()中添加对结构序列对象的支持。由 Xuehai Pan 提供补丁。gh-109649:
multiprocessing、concurrent.futures、compileall: 用os.process_cpu_count()替换os.cpu_count()来选择默认的工作线程和进程数。如果支持,获取 CPU 亲和力。由 Victor Stinner 提供补丁。gh-110150: 修复 statistics.quantiles 中的基本情况处理。现在允许单个数据点。
gh-110036: 在 Windows 上,multiprocessing
Popen.terminate()现在捕获PermissionError并获取进程退出代码。如果进程仍在运行,则再次抛出PermissionError。否则,进程按预期终止:存储其退出代码。由 Victor Stinner 提交的补丁。gh-110038: 修复了一个问题,该问题导致
KqueueSelector.select()在某些情况下当文件描述符被同时注册为读和写时,不返回所有就绪的事件。gh-88402: 在 Windows 上为
sysconfig.get_config_vars()添加新变量:LIBRARY,LDLIBRARY,LIBDIR,SOABI, 和Py_NOGIL。gh-109631: 现在可以中断执行短重复匹配的
re函数,如re.findall(),re.split(),re.search()和re.sub()。gh-109653: 将
email.utils的导入时间减少约 43%。这使得email.message的导入时间下降约 18%,进而使importlib.metadata的导入时间减少约 6%。由 Alex Waygood 提交的补丁。gh-109818: 修复
reprlib.recursive_repr()不复制装饰函数的__type_params__的问题。gh-109047:
concurrent.futures: executor manager thread 现在在向 call queue 添加项时捕获异常。在 Python 终止期间,创建新线程现在可能抛出RuntimeError。在这种情况下捕获异常并调用terminate_broken()。由 Victor Stinner 提交的补丁。gh-109782: 确保
os.path.isdir()的签名在所有平台上相同。由 Amin Alaee 提交的补丁。gh-109590: 在win32上,如果给定的模式包含
os.X_OK,shutil.which()将优先选择``PATHEXT``中有扩展名的文件。如果没有找到PATHEXT匹配项,可以返回一个没有PATHEXT扩展名的文件。这一变化将使shutil.which()的行为更类似于Python 3.11中的先前行为。gh-109593: 避免在多进程资源跟踪器的重入调用上死锁。虽然不太可能,但如果GC传递调用了如SemLock这样的多进程对象的终结器,就可能发生这种重入调用。
gh-109649: 添加
os.process_cpu_count()函数,以获取当前进程调用线程可用的逻辑CPU数量。由Victor Stinner提供补丁。gh-74481: 在Python调试构建中,
msvcrt``模块中添加了与 ``set_error_mode相关的常量。gh-109613: 修复
os.stat()和os.DirEntry.stat():检查异常。以前,在Python调试模式下构建时,当函数成功但设置了异常时,这些函数可能会触发致命的Python错误(并中止进程)。由Victor Stinner提供补丁。gh-109599: 将PyCapsule对象的类型公开为
types.CapsuleType。gh-109109: 您现在可以通过
ssl.SSLSocket.get_verified_chain()和ssl.SSLSocket.get_unverified_chain()方法从 TLS 连接获取原始 TLS 证书链。由 Mateusz Nowak 贡献。
gh-109559: 将
unicodedata数据库更新到Unicode 15.1.0。gh-109543: 在
typing.TypedDict创建期间移除不必要的hasattr()检查。gh-109495: 在
datetime的纯Python实现中移除不必要的额外__slots__以减少内存大小,因为它们已在超类中定义。由James Hilton-Balfe提供补丁。gh-109096:
http.server.CGIHTTPRequestHandler已被弃用,计划在3.15中移除。其设计陈旧,且网络世界早已超越CGI。gh-109409: 修复了当一个冻结的数据类可能从多个父类继承时,其中一些父类可能未被冻结的错误。
gh-109319: 弃用
dis.HAVE_ARGUMENT字段,推荐使用dis.hasarg。gh-107219: 修复了
concurrent.futures中的竞争条件。当进程池中的进程被突然终止时(而 future 正在运行或挂起),关闭连接的写入端。如果调用队列在发送字节到工作进程时被阻塞,关闭连接的写入端会中断发送,因此队列可以被关闭。由 Victor Stinner 提供补丁。gh-66143:
codecs.CodecInfo对象现在可以被复制和 pickle。由 Robert Lehmann 和 Furkan Onder 提供补丁。gh-109187:
pathlib.Path.resolve()现在将符号链接循环视为其他错误:在严格模式下,会引发OSError,在非严格模式下,不会引发异常。gh-50644: 现在尝试 pickle 或创建
codecs流的浅拷贝或深拷贝会引发 TypeError。之前,复制会因 RecursionError 失败,而 pickle 会产生错误的结果,最终导致解 pickle 时因 RecursionError 失败。gh-109174: 在
copy.replace()中添加了对types.SimpleNamespace的支持。gh-109151: 在 sqlite3 命令行界面 (
python -m sqlite3) 中启用readline编辑功能。gh-108987: 修复
_thread.start_new_thread()的竞争条件。如果在 Python 终止过程中创建了一个线程,新生成的线程现在会立即退出,而不是尝试访问已释放的内存并导致崩溃。由 Victor Stinner 提供补丁。gh-108682: Enum: 使用函数式语法创建空枚举时,要求
names=()或type=...。gh-109033: os.utime 内置函数引发的异常现在包含相关文件名
gh-108843: 修复
ast.unparse()在反解析包含多种引号类型的 f-字符串时的问题。gh-108469:
ast.unparse()现在支持 Python 3.12 引入的新 f-string 语法。请注意,为了简化新语法,f-string 引号被重新选择。(由 Steven Sun 提交的补丁)gh-108751: 添加
copy.replace()函数,允许创建对象的修改副本。它支持命名元组、数据类和许多其他对象。gh-108682: 枚举:如果从自定义
__new__调用super().__new__(),则引发TypeError。gh-108278: 弃用以下
sqlite3.ConnectionAPI 通过关键字传递回调可调用对象:受影响的形参将在 Python 3.15 中成为仅限位置形参。
由 Erlend E. Aasland 提交的补丁。
gh-105829: 修复 concurrent.futures.ProcessPoolExecutor 死锁
gh-108295: 修复与在
typing.TypeVar上使用弱引用相关的崩溃。gh-108463: 使表达式/语句在 pdb 中按预期工作
gh-108277: 添加
os.timerfd_create()、os.timerfd_settime()、os.timerfd_gettime()、os.timerfd_settime_ns()和os.timerfd_gettime_ns(),为 Linux 的定时器通知文件描述符提供低级接口。gh-107811:
tarfile: 提取具有过大 UID 或 GID 的成员(例如,在具有 32 位id_t的操作系统上)现在以与设置 ID 失败相同的方式失败。gh-64662: 修复
sqlite3.Connection.iterdump()中对虚拟表的支持。由 Aviv Palivoda 提交的补丁。gh-108111: 修复 gh-101251 为 3.12 引入的回归,导致
gzip.GzipFile.seek()中偏移量计算不正确。gh-108294:
time.sleep()现在引发一个审计事件。gh-108278: 弃用以下
sqlite3.ConnectionAPI 将名称、参数数量和可调用对象作为关键字参数传递:受影响的形参将在 Python 3.15 中成为仅限位置形参。
由 Erlend E. Aasland 提交的补丁。
gh-108322: 通过使用逆CDF方法而非调用random.gauss()来加速NormalDist.samples()。
gh-83417: 为venv添加创建
.gitignore文件的能力,该文件使得创建的环境被Git忽略。当通过CLI调用venv时,默认开启此功能。gh-105736: 将纯Python版本的
OrderedDict与C版本进行了协调。现在,两个版本都在__new__中设置其内部状态。以前,纯Python版本是在__init__中进行设置的。gh-108083: 修复了
sqlite3.Connection构造器和sqlite3.Connection.close()中的bug,这些bug可能导致异常泄露。修补由Erlend E. Aasland提供。gh-107932: 修复
dis模块,使其能正确报告和显示没有源代码行的字节码。gh-105539: 现在,如果
sqlite3.Connection对象没有被显式地closed,sqlite3会发出一个ResourceWarning。修补由Erlend E. Aasland提供。gh-107995:
functools.cached_property实例的__module__属性现在被设置为定义cached_property的模块的名称,而不是"functools"。这意味着cached_property文档字符串中的doctest现在可以被doctest模块正确收集。修补由Tyler Smart提供。gh-107963: 修复
multiprocessing.set_forkserver_preload()以检查给定的模块名称列表。修补由Donghee Na提供。gh-106242: 修复
os.path.normpath()以处理嵌入的空字符而不截断路径。gh-81555:
xml.dom.minidom现在只在属性中引用"。gh-50002:
xml.dom.minidom现在保留属性中的空白字符。gh-93057: 向
sqlite3.connect()和sqlite3.Connection构造器传递多于一个位置参数的做法已被弃用。剩余参数将在Python 3.15中变为仅关键字参数。修补由Erlend E. Aasland提供。gh-76913: 向
logging.LoggerAdapter添加 merge_extra 参数/功能gh-107913: 修复在创建异常对象之前如果清理代码清除或修改了
errno和winerror值,OSError异常中可能丢失这些值的问题。gh-107845:
tarfile.data_filter()现在在确定符号链接的目标时会考虑其位置,因此不再会因LinkOutsideDestinationError拒绝一些有效的 tarball。gh-107812: 将套接字的 netlink 支持扩展到 FreeBSD 平台。
gh-107782:
pydoc现在能够显示无法在 Python 中表示的签名,例如getattr和dict.pop的签名。gh-56166: 弃用在模块级函数
re.split()、re.sub()和re.subn()中以位置参数传递可选参数 maxsplit、count 和 flags 的做法。这些参数应仅作为关键字参数传递。gh-107715: 修复在类名包含特殊字符时
doctest.DocTestFinder.find()的行为。由 Gertjan van Zwieten 提供补丁。gh-100814: 现在,将可调用对象作为选项值传递给 Tkinter 图像时会引发预期的 TclError,而不是 AttributeError。
gh-72684: 向
tkinter添加小部件方法:tk_busy_hold()、tk_busy_configure()、tk_busy_cget()、tk_busy_forget()、tk_busy_current()和tk_busy_status()。gh-106684: 当
asyncio.StreamWriter未关闭导致内存泄漏时,引发ResourceWarning。由 Kumar Aditya 提供补丁。gh-107465: 添加
pathlib.Path.from_uri()类方法。gh-107077: 在某些情况下,当证书验证失败时,OpenSSL会返回
SSL_ERROR_SYSCALL而非``SSL_ERROR_SSL``,但错误参数仍将包含ERR_LIB_SSL和``SSL_R_CERTIFICATE_VERIFY_FAILED``。我们现在能够检测到这种情况并抛出适当的``ssl.SSLCertVerificationError``。由Pablo Galindo提供补丁。gh-107576: 修复
types.get_original_bases(),使其仅在cls直接包含__orig_bases__时返回该属性。由James Hilton-Balfe提供补丁。gh-105481: 移除
opcode.is_pseudo、opcode.MIN_PSEUDO_OPCODE和``opcode.MAX_PSEUDO_OPCODE``,这些在3.12版本中添加的代码从未被文档化,也不打算供外部使用。gh-105481:
opcode.ENABLE_SPECIALIZATION(在3.12版本中添加但从未文档化或供外部使用) 被移动到_opcode.ENABLE_SPECIALIZATION,测试可以访问它。gh-107396: tarfiles; 修复了gzip解压中self.exception的赋值前使用问题。
gh-107409: 在
reprlib.recursive_repr()中设置__wrapped__属性。gh-107406: 为
struct.Struct实现新的__repr__()方法。现在它返回``Struct(<格式repr>)``。gh-107369: 优化
textwrap.indent()。对于大输入,速度提升了约30%。由Inada Naoki提供补丁。gh-78722: 修复
pathlib.Path.iterdir()直到迭代时才抛出OSError的问题。gh-105578: 弃用
typing.AnyStr,推荐使用新的类型参数语法。参见PEP 695。gh-62519: 使
gettext.pgettext()在找不到翻译时搜索复数定义。gh-107089: 使用
shelve.open()打开的shelves现在有一个更快的clear()方法。补丁由James Cave提供。gh-82500: 修复32位系统上
asyncio的os.sendfile()实现的溢出问题。gh-83006: 文档化
shutil.disk_usage()在Unix上非挂载文件系统的行为。gh-65495: 在
smptlib.SMTP中使用小写的mail from和rcpt to。gh-106186: 当使用
email.parser.Parser类解析headersonly=True的邮件时,不报告MultipartInvariantViolationDefect缺陷。gh-105002: 修复了当尝试在 other 中行走 "
.." 段且 walk_up 启用时,PurePath.relative_to()方法返回无效结果的问题。现在在这种情况下会引发ValueError异常。gh-106739: 将
rtype_cache添加到警告消息中(作为已包含在消息中的泄漏对象类型和泄漏对象数量的补充),以便在 multiprocessing 资源跟踪器进程在关闭时发现泄漏对象时使调试泄漏对象更容易。这有助于更快地识别泄漏的内容和/或为什么泄漏的对象没有被正确清理。gh-106751: 优化
SelectSelector.select()以处理多次迭代的情况。由 Donghee Na 提供补丁。gh-106751: 优化
_PollLikeSelector.select()以处理多次迭代的情况。gh-106751: 优化
KqueueSelector.select()以处理多次迭代的情况。由 Donghee Na 提供补丁。gh-106831: 修复了
_ssl.c中d2i_SSL_SESSION结果可能缺少NULL检查的问题。gh-105481:
dis模块中的各种操作码列表现在是从 bytecodes.c 生成的,而不是在 opcode.py 中明确构建的。gh-106727: 使
inspect.getsource()对于同名定义的类更智能。gh-105726: 向
contextlib.AbstractContextManager和contextlib.AbstractAsyncContextManager添加了__slots__,以便子类可以使用__slots__。gh-106774: 更新捆绑的 pip 到版本 23.2.1。
gh-106751:
selectors: 通过将一些代码移出循环来优化EpollSelector.select()代码。gh-106752: 修复了zipfile.Path中的几个bug,包括:在
zipfile.Path.match()中,不再支持Windows分隔符(且从未有意支持);当没有文件名且Path不在zipfile的根目录时,修复了``name``/suffix/suffixes/``stem``操作;为了提高性能和更正确的匹配行为,重新设计了glob。gh-105293: 在
ssl模块中客户端上下文创建期间,移除对``SSL_CTX_set_session_id_context``的调用。gh-105481: 通过
_opcode公开操作码元数据。gh-106670: 向Pdb调试器添加新的
exceptions命令。它使得在使用事后调试时可以在链式异常之间移动。gh-106664:
selectors: 添加_SelectorMapping.get()方法并优化``_SelectorMapping.__getitem__()``。gh-106628: 通过不为每封电子邮件编译新的正则表达式,加快电子邮件解析速度约20%。
gh-89427: 在
venv激活时设置环境变量VIRTUAL_ENV_PROMPT,即使``VIRTUAL_ENV_DISABLE_PROMPT``已设置。gh-106530: 撤销了对
colorsys.rgb_to_hls()的更改,该更改导致对某些几乎白色的输入进行除零操作。由Terry Jan Reedy提供补丁。gh-106584: 如果所有测试都被跳过,修复
unittest的退出代码。由Egor Eliseev提供补丁。gh-106566: 优化正则表达式中的
(?!)(总是失败的模式) 。gh-106554:
selectors: 通过使用dict.get()查找文件描述符来减少Selector的开销。gh-106558: 通过在
finally块中删除作用域中的result,移除convert_to_error()调用者中的引用循环。gh-100502: 添加
pathlib.PurePath.pathmod类属性,该属性存储用于低级路径操作的os.path实现:posixpath或ntpath。gh-106524: 修复
_sre.template()在模板包含无效组索引时的崩溃问题。gh-106531: 从
importlib.resources中移除了_legacy及其提供的名称:Resource、contents、is_resource、open_binary、open_text、path、read_binary和read_text。gh-106510: 改进正则表达式中原子组的调试输出。
gh-106503: 通过移除
close中的_write_ready来修复asyncio._SelectorSocketTransport中的引用循环。gh-105497: 修复存在未命名标志时的标志掩码反转问题。
gh-90876: 防止
multiprocessing.spawn在sys.executable为None的环境中 导入 失败。这个问题在3.11版本中随着对多处理中路径类对象的支持而出现倒退。gh-106403:
typing.TypeVar、typing.ParamSpec、typing.ParamSpecArgs、typing.ParamSpecKwargs和typing.TypeVarTuple的实例再次支持弱引用,修复了Python 3.12.0 beta 1中引入的倒退。由Jelle Zijlstra提供的补丁。gh-89812: 添加私有的
pathlib._PathBase类,该类提供了对虚拟文件系统的实验性支持,并可能在未来的Python版本中公开。gh-106292: 在
functools.cached_property()的__get__()方法中检查实例字典缓存值。这更好地匹配了3.12之前的行为,并提高了用户子类化functools.cached_property()并添加__set__()方法的兼容性。gh-106350: 检测
_tkinter模块使用的 libtommath 函数mp_init()中可能的内存分配失败。gh-106330: 修复了在
pathlib.PurePath.match()中空路径的错误匹配问题。这个 bug 是在 Python 3.12.0 beta 1 中引入的。gh-106309: 弃用
typing.no_type_check_decorator()。没有任何主要类型检查器曾经添加对这个装饰器的支持。由 Alex Waygood 提供补丁。gh-102541: 当输出流不为
None时,使pydoc.doc()捕获错误的模块ImportError。gh-106263: 修复了在调用
repr时手动构造的 SignalDict 对象导致的崩溃。由 Charlie Zhao 提供补丁。gh-106236: 在
threading中用raise RuntimeError替换assert语句,这样即使使用-OO也无法加入_DummyThread。gh-106238: 修复了日志包在获取锁时的罕见并发错误。
gh-106075: 将
asyncio.taskgroups.__all__添加到asyncio.__all__以便在星号导入中导出。gh-104527: Zipapp 现在将跳过向自己追加存档的操作。
gh-106046: 改进了
os.fspath()的错误消息,当调用对象的__fspath__设置为None时。由 Alex Waygood 提供补丁。gh-105974: 修复了一个 bug,其中具有一个或多个不可调用成员的
typing.Protocol类在调用issubclass()时会引发TypeError,即使它定义了一个自定义的__subclasshook__方法。Python 3.11 及更低版本中的行为——现在已恢复——是在这些情况下如果定义了自定义__subclasshook__方法则不引发TypeError。补丁由 Alex Waygood 提供。gh-96145: 撤回了
json.AttrDict的添加。gh-89812: 添加了
pathlib.UnsupportedOperation,当路径操作不被支持时,会抛出此异常而不是NotImplementedError。gh-105808: 修复了在 gh-101251 中引入的 3.12 版本中的回归问题,该问题导致
gzip.GzipFile.flush()不刷新压缩器(也不传递zip_mode参数)。gh-105481:
stack_effect()不再会为不使用的oparg的opcode提供oparg或为使用它的opcode不提供oparg时引发异常。在后一种情况下,返回oparg=0的堆栈效果。gh-104799: 使
ast.unparse()能够反解析没有来自 PEP 695 的新type_params字段创建的函数和类定义。由 Jelle Zijlstra 提供补丁。gh-105793: 向
pathlib.Path.is_dir()和is_file()添加了仅关键字参数 follow_symlinks,默认为True。gh-105570: 弃用使用功能语法创建具有 0 个字段的
typing.TypedDict类的两种方法:TD = TypedDict("TD")和TD = TypedDict("TD", None)。这两种方法都将在 Python 3.15 中被禁止。要创建具有 0 个字段的TypedDict类,请使用class TD(TypedDict): pass或TD = TypedDict("TD", {})。gh-105745: 修复
webbrowser.Konqueror.open方法。gh-105733:
ctypes: 弃用未记录的ctypes.SetPointerType()和ctypes.ARRAY()函数。由 Victor Stinner 提供补丁。gh-105687: 移除已弃用的
re.template,re.T,re.TEMPLATE,sre_constans.SRE_FLAG_TEMPLATE。gh-105684: 现在对第三方任务实现支持
asyncio.Task.set_name()是强制性的。未记录的_set_task_name()函数(自 3.8 起已弃用)已被移除。由 Kumar Aditya 提供补丁。gh-105375: 修复
_Unpickler_SetInputStream()中的一个 bug,该 bug 在失败时可能导致异常被覆盖。gh-105626: 将
http.client.HTTPConnection.get_proxy_response_headers()的默认返回值更改为None而不是{}。gh-105605: 在模块初始化期间加强
pyexpat的错误处理,以防止异常可能被覆盖,以及对象被两次解引用。gh-105375: 修复
_datetime模块中在模块初始化失败时异常可能被覆盖的错误。gh-105375: 修复
_ssl初始化过程中可能导致引用泄漏和异常被覆盖的错误。gh-105375: 修复
array.array类中可能导致异常被覆盖的错误。gh-105375: 修复
_ctypes模块中可能导致异常被覆盖的错误。gh-105375: 修复
_elementtree模块中可能导致异常被覆盖的错误。gh-105566: 弃用使用关键字参数表示字段来创建
typing.NamedTuple类(NT = NamedTuple("NT", x=int, y=str))。在 Python 3.15 中将不再允许此操作。请使用基于类的语法或功能性语法代替。使用功能性语法创建带有 0 个字段的
NamedTuple类的两种方法也被弃用,并将在 Python 3.15 中不再允许:NT = NamedTuple("NT")和NT = NamedTuple("NT", None)。要创建带有 0 个字段的NamedTuple类,请使用class NT(NamedTuple): pass或NT = NamedTuple("NT", [])。gh-105545: 移除在 3.11 中弃用的
webbrowser.MacOSXOSAScript._name属性。gh-105497: 修复存在别名/掩码成员时的标志反转问题。
gh-105509:
typing.Annotated现在作为typing._SpecialForm的实例实现,而不是一个类。这对于使用typing模块公共 API 的用户应该没有影响。gh-70303: 如果给定的模式以 "
**" 结尾,从pathlib.Path.glob()和rglob()发出FutureWarning。在未来的 Python 版本中,以此结尾的模式将同时匹配文件和目录。添加尾部斜杠以仅匹配目录。gh-105382: 移除
urllib.request.urlopen()函数中自 Python 3.6 起已弃用的 cafile、capath 和 cadefault 参数。由 Victor Stinner 提供补丁。gh-105376:
logging: 移除未文档化和未经测试的Logger.warn()和LoggerAdapter.warn()方法以及logging.warn()函数。自 Python 3.3 起已弃用,它们是logging.Logger.warning()方法、logging.LoggerAdapter.warning()方法和logging.warning()函数的别名。由 Victor Stinner 提供补丁。gh-105332: 将 pickling 方法从按名称恢复为按值。
gh-104554: 在 urllib.parse 中添加 RTSPS 方案支持。
gh-105292: 为
traceback.format_exception_only()添加选项,以递归进入BaseExceptionGroup的嵌套异常。gh-105280: 修复了如果在错误时间发生垃圾回收,
isinstance([], collections.abc.Mapping)可能评估为True的错误。该错误是由 Python 3.12 中typing.Protocol实现的更改引起的。gh-105239: 修复了一个长期存在的错误,即在某些边缘情况下
issubclass(object, typing.Protocol)会评估为True。由 Alex Waygood 提供补丁。gh-104310: 在 beta 1 版本中,我们为扩展模块作者添加了一个实用函数,用于在多个解释器或每个解释器GIL下测试其模块的支持情况。该函数的名称已从
allowing_all_extensions更改为_incompatible_extension_module_restrictions。"disable_check" 参数的默认值已从True更改为False,以更好地匹配新函数名称。gh-105080: 修复了
inspect.signature()在派生类上的不一致签名问题gh-105144: 修复了
typing模块中最近的回归问题。这个回归问题意味着,当执行class Foo(X, typing.Protocol),其中X是一个以abc.ABCMeta作为其元类的类时,会导致随后的isinstance(1, X)调用错误地引发TypeError。由 Alex Waygood 提供补丁。gh-62948:
io.IOBase的终结器现在使用sys.unraisablehook记录close()方法的错误。之前,错误默认是被静默忽略的,只在 Python 开发模式 或 Python 的调试构建 中记录。由 Victor Stinner 提供补丁。gh-105096:
wave: 弃用wave.Wave_read和wave.Wave_write类的getmark()、setmark()和getmarkers()方法。它们将在 Python 3.15 中移除。补丁由 Victor Stinner 提供。gh-104992: 移除了未测试且未文档化的
unittest.TestProgram.usageExit()方法,该方法在 Python 3.11 中已被弃用。由 Hugo van Kemenade 提供补丁。gh-104996: 通过延迟在给出多个参数时路径的连接,提高了
pathlib.PurePath初始化的性能。gh-101588: 弃用了对 itertools 的未文档化的 copy/deepcopy/pickle 支持。
gh-103631: 修复了
pathlib.PurePosixPath(pathlib.PureWindowsPath(...))不转换路径分隔符的问题,以恢复与 3.11 兼容的行为。gh-104947: 使
pathlib.PureWindowsPath对象在 Windows 和 Posix 之间的比较保持一致,以匹配 3.11 的行为。gh-104773: PEP 594: 移除
audioop模块,该模块在 Python 3.11 中已被弃用。补丁由 Victor Stinner 提供。gh-104773: PEP 594: 移除
aifc模块,该模块在 Python 3.11 中已被弃用。由 Victor Stinner 提供补丁。gh-104773: PEP 594: 移除
uu模块,该模块在 Python 3.11 中已被弃用。由 Victor Stinner 提供补丁。gh-104935: 修复由 PEP 695 实现引入的
typing.runtime_checkable()和typing.Generic之间交互的 bug。由 Jelle Zijlstra 提供补丁。gh-104773: PEP 594: 移除
crypt模块及其私有_crypt扩展,这些在 Python 3.11 中已被弃用。由 Victor Stinner 提供补丁。gh-104773: PEP 594: 移除
nis模块,该模块在 Python 3.11 中已被弃用。由 Victor Stinner 提供补丁。gh-104898: 向
os.PathLike添加缺失的__slots__。gh-104773: PEP 594: 移除
xdrlib模块,该模块在 Python 3.11 中已被弃用。补丁由 Victor Stinner 提供。gh-104773: PEP 594: 移除
nntplib模块,该模块在 Python 3.11 中已被弃用。补丁由 Victor Stinner 提供。gh-104886: 移除未文档化的
configparser.LegacyInterpolation类,该类自 Python 3.2 起在文档字符串中被弃用,自 Python 3.11 起发出弃用警告。由 Hugo van Kemenade 提供补丁。gh-104786: 移除基于 kwargs 的
typing.TypedDict创建gh-104876: 移除
turtle.RawTurtle.settiltangle()方法,该方法自 Python 3.1 起在文档中被弃用,自 Python 3.11 起发出弃用警告。由 Hugo van Kemenade 提供补丁。gh-104773: PEP 594: 移除
spwd模块,该模块在 Python 3.11 中已被弃用:可以使用 python-pam 项目作为替代。由 Victor Stinner 提供补丁。gh-75552: 移除了自 Python 3.6 起已弃用的
tkinter.tix模块。gh-104773: PEP 594: 移除了 Python 3.11 中已弃用的
chunk模块。由 Victor Stinner 提供补丁。gh-104773: PEP 594: 移除了 Python 3.11 中已弃用的
mailcap模块。由 Victor Stinner 提供补丁。gh-104773: PEP 594: 移除了 Python 3.11 中已弃用的
sunau模块。由 Victor Stinner 提供补丁。gh-104780: PEP 594: 移除了 Python 3.11 中已弃用的
ossaudiodev模块。由 Victor Stinner 提供补丁。gh-104773: PEP 594: 移除了 Python 3.11 中已弃用的
pipes模块。由 Victor Stinner 提供补丁。gh-104873: 添加了
typing.get_protocol_members()以返回定义typing.Protocol的成员集合。添加了typing.is_protocol()以检查一个类是否为typing.Protocol。由 Jelle Zijlstra 提供补丁。gh-104874: 记录了
typing.NewType的__name__和__supertype__属性。补丁由 Jelle Zijlstra 提供。gh-104835: 移除了 Python 3.11 中已弃用的以下
unittest函数:unittest.findTestCases()unittest.makeSuite()unittest.getTestCaseNames()
请改用
TestLoader方法:由 Hugo van Kemenade 提供补丁。
gh-104804: 移除了未经测试且未记录的
webbrowserMacOSX类,该类在 Python 3.11 中已弃用。由 Hugo van Kemenade 提供补丁。gh-83863: 移除了将
pathlib.Path对象用作上下文管理器的支持。在 Python 3.9 之前,退出上下文管理器会将路径标记为“关闭”,这导致某些(但不是全部!)方法在被调用时引发异常。自 Python 3.9 起,将路径用作上下文管理器不执行任何操作。gh-104799: 调整了
ast.ClassDef、ast.AsyncFunctionDef和ast.FunctionDef上(参见 PEP 695)的type_params字段的位置,以更好地保持向后兼容性。由 Jelle Zijlstra 提供补丁。gh-104797: 允许
typing.Protocol类继承自collections.abc.Buffer。补丁由 Jelle Zijlstra 提供。gh-104783: 移除在Python 3.11中已被弃用的
locale.resetlocale()函数。由Victor Stinner提供补丁。gh-104780: 移除在Python 3.11中已被弃用的
2to3程序和lib2to3模块。由Victor Stinner提供补丁。gh-104773: PEP 594: 移除在Python 3.11中已被弃用的
telnetlib模块。由Victor Stinner提供补丁。gh-104773: PEP 594: 移除在Python 3.11中已被弃用的
imghdr模块。由Victor Stinner提供补丁。gh-104773: PEP 594: 移除在Python 3.11中已被弃用的
cgi和cgitb模块。由Victor Stinner提供补丁。gh-104773: PEP 594: 移除在Python 3.11中已被弃用的
sndhdr模块。由Victor Stinner提供补丁。gh-104372: 在Linux上,
subprocess可以使用vfork()系统调用来更快地生成子进程,通过在其等待vfork的子进程exec()结果时释放GIL,防止父进程阻塞其他线程。这可以防止从慢速文件系统生成二进制文件时阻塞应用程序的其余部分。gh-99108: 我们现在对于SHA家族和MD5哈希函数的合理大小的内置
hashlib计算释放GIL,这匹配了我们OpenSSL支持的哈希计算已经做的。gh-102613: 通过用正则表达式过滤遍历的路径,而不是在每个目录上多次调用
os.scandir(),提高了当扩展带有非终端"**"组件的模式时pathlib.Path.glob()的性能。gh-104399: 准备
_tkinter模块以通过必要时替换弃用的函数mp_to_unsigned_bin_n()和mp_unsigned_bin_size()来构建与Tcl 9.0和未来的libtommath。gh-102676: 向
dis.Instruction添加字段start_offset、cache_offset、end_offset、baseopname、baseopcode、jump_target``和 ``oparg。gh-103384: 将正则表达式模式
BaseConfigurator.INDEX_PATTERN泛化,以允许键中包含空格和非字母数字字符。gh-101162: 禁止将
builtins.issubclass()与types.GenericAlias作为第一个参数一起使用。gh-103200: 修复了 zipimport.invalidate_caches() 的缓存重新填充语义。现在,缓存是在检索具有无效缓存的文件时重新填充的,而不是在缓存无效时。
gh-100061: 修复了一个导致带有占有限定符的正则表达式错误匹配的错误。
gh-77609: 向
pathlib.Path.glob()和rglob()添加了 follow_symlinks 参数,默认为 false。gh-102120: 向
tarfile添加了一种流模式,允许在不缓存内部文件信息的情况下读取存档。gh-102029: 弃用向
threading.RLock()传递任何参数。gh-88233: 重构了
zipfile._strip_extra,使用更高级的抽象来处理额外内容,而不是使用重状态循环。gh-102024: 减少在
concurrent.futures.thread._worker()中调用_idle_semaphore.release()的次数。gh-73435: 在
pathlib.PurePath.match()中添加了对递归通配符的支持。gh-84867:
unittest.TestLoader不再从确切的unittest.TestCase和unittest.FunctionTestCase类加载测试用例。gh-99203: 恢复 CPython <= 3.10.5 的
shutil.make_archive()行为:如果root_dir不是目录,则不创建空存档,并且在这种情况下,无论format选择如何,都会引发FileNotFoundError或NotADirectoryError。除了恢复的行为外,该函数现在也可能在dry_run模式下引发这些异常。gh-80480: 为
array的'u'类型代码发出DeprecationWarning,自 Python 3.3 起在文档中已弃用。gh-94924:
unittest.mock.create_autospec()现在正确返回与inspect.iscoroutinefunction()兼容的协程函数。gh-94777: 修复
multiprocessingProcessPoolExecutor在子进程崩溃且数据正被写入调用队列时的挂起问题。gh-92871: 移除自 Python 3.8 起已弃用的
typing.io和typing.re命名空间。所有项目仍可从主typing模块中获得。bpo-43633: 改进
ipaddress中 IPv4 映射的 IPv6 地址 (RFC 4291 第 2.2, 2.5.5.2 节) 的文本表示。由 Oleksandr Pavliuk 提交补丁。bpo-44850: 使用 PEP 590
vectorcall约定改进operator.methodcaller()的性能。由 Anthony Lee 和 Pieter Eendebak 提交补丁。bpo-44185:
unittest.mock.mock_open()将在退出上下文管理器时调用文件句柄模拟的close()方法。由 Samet Yaslan 提交补丁。bpo-40988: 通过缓存生成的调度包装器改进
functools.singledispatchmethod的性能。优化由 frederico 建议。由 @mental32、Alex Waygood 和 Pieter Eendebak 提交补丁。bpo-41768:
unittest.mock的 speccing 不再调用类属性。由 Melanie Witt 提交补丁。bpo-18319: 确保
gettext(msg)即使存在复数形式也能检索翻译。换句话说:gettext(msg) == ngettext(msg, '', 1)。bpo-17013: 向
unittest.mock添加ThreadingMock,可用于创建可以等待直到被调用的 Mock 对象。由 Karthikeyan Singaravelan 和 Mario Corchero 提交补丁。
文档¶
gh-109209: 文档现在所需的最低 Sphinx 版本为 4.2。
gh-107305: 为
PyInterpreterConfig和Py_NewInterpreterFromConfig()添加文档。同时澄清一些与每个解释器GIL相关的附近文档。gh-106948: 向
nitpick_ignore添加一系列标准外部名称。gh-106232: 通过使用双引号作为参数,使timeit文档命令行与Windows兼容。这在Linux和macOS上也可以工作。
gh-105172: 修复
functools.lru_cache()文档字符串,考虑到typed参数对str和int的不同处理。由Bar Harel提供补丁。gh-105052: 更新
timeit文档,说明时间以秒为单位仅是默认设置。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-102759: 将文档和文档字符串中的
functools.reduce函数签名与C实现对齐。
测试¶
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-110367: regrtest: 当使用工作进程 (-jN) 和 --verbose3 选项时,regrtest 现在可以显示工作进程的输出,即使工作进程崩溃。之前,sys.stdout 和 sys.stderr 被替换,因此在崩溃时工作进程的输出会丢失。由 Victor Stinner 提供补丁。
gh-110267: 添加对 PyStructSequence 对象的 pickle 和 copy 操作的测试。由 Xuehai Pan 提供补丁。
gh-110171:
libregrtest现在总是设置并显示random.seed,使测试更具可重复性。使用--randseed标志为测试传递明确的随机种子。gh-110152: 移除
Tools/scripts/run_tests.py和make hostrunnertest。只需运行./python -m test --slow-ci、make buildbottest或make test替代。Python 测试运行器 (regrtest) 现在处理交叉编译和 HOSTRUNNER。当使用--fast-ci或--slow-ci选项时,它还向 Python 添加了如-u -E -W default -bb这样的快速选项。由 Victor Stinner 提供补丁。gh-110031: 如果 Python 是用地址消毒剂 (ASAN) 构建的,跳过使用 thread+fork 的 test_threading 测试。由 Victor Stinner 提供补丁。
gh-110088: 修复 test_asyncio 超时:不测量最大持续时间,测试不应测量 CI 性能。仅在有任务有超时或延迟时测量最小持续时间。向
test_asyncio.utils添加CLOCK_RES。由 Victor Stinner 提供补丁。gh-109974: 修复 test_threading 锁测试中的竞态条件。等待条件满足,而不是使用带有硬编码秒数的
time.sleep()。由 Victor Stinner 提供补丁。gh-110033: 修复
test_signal的test_interprocess_signal()。确保在信号处理程序中引发异常之前删除subprocess.Popen对象。否则,Popen.__del__()可能会获取到被记录为Exception ignored in: ...的异常,导致测试失败。由 Victor Stinner 提供补丁。gh-109594: 修复 test_concurrent_futures.test_wait 的 test_timeout()。移除可能根据是否超过超时而完成的 future。保留在 wait() 超时前未完成的第二个 future。补丁由 Victor Stinner 提供。
gh-109972: 将 test_gdb.py 文件拆分为由多个测试组成的 test_gdb 包,现在可以并行运行测试。由 Victor Stinner 提供补丁。
gh-109566: regrtest: 当使用
--fast-ci或--slow-ci选项时,regrtest 现在会替换当前进程为一个新进程,以添加-u -W default -bb -E选项到 Python。由 Victor Stinner 提供补丁。gh-109748: 修复 test_venv 的
test_zippath_from_non_installed_posix():不复制__pycache__/子目录,因为它们可能被并行运行的其他 Python 测试修改。由 Victor Stinner 提供补丁。gh-109739: regrtest: 修复 Windows 上的引用泄漏检查。在引用泄漏检查模式(-R 选项)下禁用 Windows 上的加载跟踪器。由 Victor Stinner 提供补丁。
gh-109276: regrtest: 当测试因“环境更改”而失败且使用了 --rerun 选项时,现在会在新进程中以详细模式重新运行测试。由 Victor Stinner 提供补丁。
gh-103053: 如果 Python 是用
./configure --enable-optimizations构建的(意味着启用了 Profile Guided Optimization (PGO)),则跳过 test_tools.test_freeze 的 test_freeze_simple_script():这只会使测试变得太慢。冻结工具由许多其他 CI 使用其他(更快的)编译器标志进行测试。由 Victor Stinner 提供补丁。gh-109580: 如果 Python 是用 ASAN、MSAN 或 UBSAN 消毒剂构建的,则跳过
test_perf_profiler。在这种构建上,Python 在这个测试中会随机崩溃。由 Victor Stinner 提供补丁。gh-109566: regrtest: 添加
--fast-ci和--slow-ci选项。--fast-ci使用 10 分钟的默认超时和-u all,-cpu(跳过最慢的测试) 。--slow-ci使用 20 分钟的默认超时和-u all(运行所有测试) 。由 Victor Stinner 提供补丁。gh-109425: libregrtest 现在用 "backslashreplace" 错误处理程序解码测试工作进程的 stdout,以记录损坏的 stdout,而不是因错误而失败并不记录 stdout。补丁由 Victor Stinner 提供。
gh-109396: 修复 FIPS 模式下的
test_socket.test_hmac_sha1()。使用更长的密钥:FIPS 模式要求至少 112 位。之前的密钥只有 32 位。由 Victor Stinner 提供补丁。gh-104736: 修复在 Linux ppc64le 上用 LLVM clang 16 构建的 Python 上的 test_gdb(例如 Fedora 38)。在 gdb "bt" 命令输出中搜索模式以检测 gdb 是否未能检索到回溯。例如,如果找到
Backtrace stopped: frame did not save the PC则跳过测试。补丁由 Victor Stinner 提供。gh-109276: 当使用
-r/--randomize命令行选项时,libregrtest 现在在运行每个测试文件之前调用random.seed()。此外,它也在工作进程中调用。这应该有助于使测试更加确定性。以前,它仅在运行所有测试文件之前在主要进程中调用一次,并且不在工作进程中调用。由 Victor Stinner 提供补丁。gh-109276: libregrtest 现在使用单独的文件描述符以 JSON 格式写入测试结果。以前,如果测试在 JSON 周围写入了调试消息,主要测试进程将无法解析 JSON。由 Victor Stinner 提供补丁。
gh-108996: 修复并启用
test_msvcrt。gh-109237: 修复当工作目录包含至少一个非ASCII字符时的
test_site.test_underpth_basic():将._pth文件编码为UTF-8,并启用UTF-8模式以在子进程的标准输出中使用UTF-8。由Victor Stinner提供补丁。gh-109230: 修复
test_pyexpat.test_exception():现在可以从不同于Python源代码目录的目录运行。在此之前,测试在这种情况下会失败。如果Modules/pyexpat.c源不可用,则跳过测试。也在非CPython的Python实现上跳过测试。由Victor Stinner提供补丁。gh-108996: 为
msvcrt添加测试。gh-109015: 如果启用了TCP黑洞(
sysctl net.inet.tcp.blackhole),在FreeBSD上修复test_asyncio、test_imaplib和test_socket测试。跳过在这种非标准配置下失败的少数测试,这些测试会返回ETIMEDOUT。目前,FreeBSD GCP镜像启用了TCP和UDP黑洞 <https://reviews.freebsd.org/D41751>`_(``sysctl net.inet.tcp.blackhole=2`和sysctl net.inet.udp.blackhole=1)。由Victor Stinner提供补丁。gh-91960: 如果gdb无法检索Python帧对象(如果一个帧是
<optimized out>),则跳过test_gdb。当Python是用"clang -Og"构建的时,gdb可能无法检索_PyEval_EvalFrameDefault()的 frame 参数。在这种情况下,像py_bt()这样的测试很可能会失败。如果无法访问Python帧,python-gdb.py在检索Python回溯时基本上是无能为力的。此外,如果Python是用Clang构建的,test_gdb不再在macOS上跳过。由Victor Stinner提供补丁。gh-108962: 如果
chflags()失败并提示"OSError: [Errno 45] Operation not supported"(例如在FreeBSD 13上),则跳过test_tempfile.test_flags()。由Victor Stinner提供补丁。gh-91960: 现在由Cirrus-CI(一个支持Linux、macOS、Windows和FreeBSD的托管CI服务)为拉取请求提供FreeBSD 13.2 CI覆盖。
gh-89392: 移除了测试中对
test_main()函数的支持。现在它们总是使用正常的 unittest 测试运行器。gh-108851: 修复 WASI 构建机器上
test_tomllib的递归测试:减少递归限制并根据当前可用的递归限制计算最大嵌套数组/字典。由 Victor Stinner 提供补丁。gh-108851: 在
test.support模块中添加get_recursion_available()和get_recursion_depth()函数。由 Victor Stinner 提供补丁。gh-108834: 向 regrtest 添加
--fail-rerun option选项:如果测试在详细模式下重新运行时失败然后通过,则以退出码 2(错误)退出进程,而不是退出码 0(成功)。由 Victor Stinner 提供补丁。gh-108834: 将 regrtest 的
--verbose2选项(-w)重命名为--rerun。保留--verbose2作为已弃用的别名。由 Victor Stinner 提供补丁。gh-108834: 当 regrtest 在详细模式下重新运行失败的测试时(
./python -m test --rerun),现在测试会在新的工作进程中重新运行,而不是在主进程中执行。如果测试崩溃或被超时终止,主进程可以检测并处理被终止的工作进程。如果使用-jN选项并行运行测试,测试也会并行重新运行。由 Victor Stinner 提供补丁。gh-108822:
regrtest现在计算所有测试的统计信息:成功、失败和跳过。test_netrc、test_pep646_syntax和test_xml_etree现在在其test_main()函数中返回结果。补丁由 Victor Stinner 和 Alex Waygood 提供。gh-108794:
doctest.DocTestRunner.run()方法现在计算跳过的测试数量。添加doctest.DocTestRunner.skips和doctest.TestResults.skipped属性。补丁由 Victor Stinner 提供。gh-108388: 将 test_concurrent_futures 转换为包含 7 个子测试的包。由 Victor Stinner 提供补丁。
gh-108388: 将test_multiprocessing_fork、test_multiprocessing_forkserver和test_multiprocessing_spawn拆分为测试包。每个包由4个子测试组成:processes、threads、manager和misc。这样可以并行运行更多测试,从而减少总测试时间。由Victor Stinner提供补丁。
gh-105776: 修复当C编译器命令带有
-std=c11选项时的test_cppext:从编译器命令中移除``-std=``选项。由Victor Stinner提供补丁。gh-107652: 设置CIFuzz在GitHub Actions中运行模糊目标。由Illia Volochii提供补丁。
gh-107237:
test_logging:通过将超时从100毫秒增加到5分钟(LONG_TIMEOUT)来修复``test_udp_reconnection()``。由Victor Stinner提供补丁。gh-107178: 为Mapping Protocol中的函数、Sequence Protocol中的函数以及Object Protocol中的一些函数添加C API测试。
gh-106714: test_capi:通过使用test.support.SuppressCrashReport修复test_no_FatalError_infinite_loop(),不再写入核心转储。由Victor Stinner提供补丁。
gh-104090: 避免在
collectedDurations()中创建对测试对象的引用。gh-106752: 将
zipfile.Path的测试移至Lib/test/test_zipfile/_path。使``zipfile._path``成为一个包。gh-106690: 在cpython仓库中添加.coveragerc以供coverage包使用。
gh-101634: 当使用
-jN选项运行Python测试套件时,如果工作进程的stdout无法从区域编码解码,则报告测试失败,因此退出码为非零。由Victor Stinner提供补丁。gh-105084: 当Python构建配置为
--with-wheel-pkg-dir时,需要setuptools和wheel``轮子的测试将在 ``WHEEL_PKG_DIR中搜索轮子。gh-81005: 修改字符串测试以反映在Python 3中
str和unicode合并的情况。由Daniel Fortunov提供补丁。gh-103186: 在test_sys_settrace.py中抑制并断言预期的RuntimeWarnings
构建¶
gh-103053: "make check-clean-src" 现在也会检查源目录中是否找到 "python" 程序:如果确实存在则失败并报错。由 Victor Stinner 提供补丁。
gh-109191: 修复在使用最新版本 libedit 构建时的编译错误。
gh-110276: 不再默默忽略
PROFILE_TASK失败:由 Profile Guided Optimization (PGO) 使用的命令。由 Victor Stinner 提供补丁。gh-109566: 移除
make testall目标:改用make buildbottest。由 Victor Stinner 提供补丁。gh-109740: 实验性的
--disable-gil配置标志现在在扩展 ABI 标签中包含 "t"(代表 "threaded")。gh-109054: 修复在 Linux AArch64 上构建
_testcapi扩展时的问题,当使用<cpython/pyatomic.h>时需要链接到 libatomic:_Py_atomic_or_uint64()函数在此平台上需要 libatomic 的__atomic_fetch_or_8()。配置脚本现在检查是否需要链接到 libatomic 并生成一个新的 LIBATOMIC 变量用于构建 _testcapi 扩展。由 Victor Stinner 提供补丁。gh-63760: 修复 Solaris 构建:不再重新定义
gethostname()函数。Solaris 自 2005 年起定义了该函数。由 Victor Stinner 提供,原始补丁由 Jakub Kulík 提供补丁。gh-108740: 修复
make regen-all中的竞态条件。deepfreeze.c源文件和由 Argument Clinic 生成的文件现在在生成 "全局对象" 之前生成或更新。之前,某些标识符可能会根据这些文件的生成顺序而丢失。由 Victor Stinner 提供补丁。gh-108634: 使用
configure--with-trace-refs(跟踪引用) 构建的 Python 现在与 Python 发布构建和 debug build ABI 兼容。由 Victor Stinner 提供补丁。gh-85283:
_statC 扩展现在使用 limited C API 构建。由 Victor Stinner 提供补丁。gh-108447: 修复 x86_64 GNU/Hurd 构建
gh-107814: 当使用
-q参数调用find_python.bat时,未能正确静默 nuget 的输出。此问题现已修复。gh-105481: 移除 make 目标
regen-opcode-targets,将其工作合并到regen-opcode中,后者重复了大部分计算。这简化了构建代码并减少了代码重复。gh-106881: 在
Modules/posixmodule.c中包含linux/limits.h之前先检查其是否存在。gh-95855: 重构平台三元组检测代码,并添加对 MIPS 软浮点和 musl libc 的检测。
gh-106962: 在
configure中检测 MPI 编译器。gh-106118: 修复在没有
O_CLOEXEC的平台上的编译问题。此问题由 Python 3.12b1 中的 gh-103295 引入。由 Erlend Aasland 提供补丁。gh-105875: 构建
sqlite3扩展模块需要 SQLite 3.15.2 或更高版本。由 Erlend Aasland 提供补丁。gh-90005: 修复
configure中的一个回归问题,该问题可能导致无意中与libbsd链接。gh-102404: 记录如何在 Linux 上执行 WASI 构建。同时添加 Tools/wasm/build_wasi.sh 作为文档的参考实现。
gh-89886: 现在需要 Autoconf 2.71 和 aclocal 1.16.4 来重新生成
configure。gh-104692: 将
commoninstall作为bininstall的先决条件包含在内这确保了在使用并行构建(
make -j install)时,commoninstall会在bininstall开始之前完成,因此python3符号链接只会在所有标准库模块安装完成后才被安装。gh-101538: 添加实验性的 wasi-threads 支持。由 Takashi Yamamoto 提供补丁。
Windows¶
gh-110437: 允许覆盖 VC 可再发行组件的来源,以确保在更新之间永远不会降级。
gh-109286: 更新 Windows 安装程序以使用 SQLite 3.43.1。
gh-82367:
os.path.realpath()现在即使文件不可访问也能解析 MS-DOS 风格的文件名。补丁由 Moonsik Park 提供。gh-109991: 更新 Windows 构建以使用 OpenSSL 3.0.11。
gh-106242: 修复了在Windows上传递包含嵌入空字符的路径时
realpath()的行为,使其表现一致。在严格模式下,现在会抛出OSError而不是意外的ValueError,在非严格模式下会使路径变为绝对路径。gh-83180: 更改了 Python 安装管理器,当启动的脚本使用Unix风格的虚拟命令的shebang行时,优先选择活动的虚拟环境,即使命令请求特定版本的Python。
gh-106844: 修复了
_winapi.LCMapStringEx()中的整数溢出和空字符截断问题,这影响了ntpath.normcase()。gh-105436: 确保空环境块以两个空字符终止,这是Windows所要求的。
gh-105146: 更新了安装程序末尾的链接,指向Discourse而不是邮件列表。
gh-103646: 当从Microsoft Store安装时,
pip``不再默认为每个用户安装。然而,由于安装目录不可写,它应该自动决定进行每个用户安装。这应该解决了当 ``pip被传递一个与--user冲突的选项时的问题。gh-88745: 通过使用操作系统的
CopyFile2函数提高shutil.copy2()的性能。这可能会导致一些文件复制的元数据发生微妙的变化,使它们与正常的操作系统行为一致。gh-104820: 修复了在不支持文件ID请求的文件系统(包括FAT32和exFAT)上的
stat()及相关函数。gh-104803: 添加
os.path.isdevdrive()以检测路径是否在Windows Dev Drive上。在不支持Dev Drive的平台上返回False,在非Windows平台上不存在。
macOS¶
IDLE¶
gh-104719: 移除IDLE对tokenize.tabsize的修改,并测试tokenize数据和方法在其他用途中的应用。
工具/示例¶
gh-109991: 更新GitHub CI工作流以使用OpenSSL 3.0.11,并使multissltests使用1.1.1w、3.0.11和3.1.3版本。
gh-108494: Argument Clinic 现在部分支持 Limited API: 请参阅 Python开发者指南中的文档 由Victor Stinner提供补丁。
gh-107704: 现在可以通过Argument Clinic使用新的
/ [from X.Y]语法来废弃为关键字或位置参数传递关键字参数。(读作*"从Python版本X.Y起仅限位置参数"*。)更多信息请参阅 Python开发者指南中的文档。gh-107880: Argument Clinic现在可以克隆
__init__()和__new__()方法。gh-104683: 向Argument Clinic CLI添加
--exclude选项。gh-95065: Argument Clinic现在支持通过使用指令
@text_signature覆盖自动生成的签名。请参阅 Python开发者指南中的文档gh-107609: 修复Argument Clinic中的重复模块检查。之前,重复定义会被错误地静默接受。补丁由Erlend E. Aasland提供。
gh-107467: Argument Clinic命令行工具现在在失败时向stderr而非stdout打印信息。
gh-106970: 修复Argument Clinic中
destination <name> clear命令的bug;目的地缓冲区永远不会被清除,且destination指令解析器在处理命令后会直接继续到错误处理器。由Erlend E. Aasland提供补丁。gh-106706: 更改字节码语法以移除家族中冗余的名称匹配伪语法。
gh-106359: Argument Clinic 现在明确禁止在用作注解的函数调用中使用 "kwarg splats"。
gh-103186:
freeze现在从原始 CPython 实例获取CONFIG_ARGS,Makefile 使用该实例调用实用脚本。由 Ijtaba Hussain 提供补丁。gh-95065: 现在可以使用 Argument Clinic 弃用以位置方式传递参数,使用新的
* [from X.Y]语法。(解读为 "从 Python 版本 X.Y 开始仅限关键字"。)更多信息请参阅 Python 开发者指南中的文档。由 Erlend E. Aasland 提供补丁,Alex Waygood、Nikita Sobolev 和 Serhiy Storchaka 协助。
C API¶
gh-85283: 如果定义了
Py_LIMITED_API宏,<Python.h>现在会取消定义Py_BUILD_CORE、Py_BUILD_CORE_BUILTIN和Py_BUILD_CORE_MODULE宏。由 Victor Stinner 提供补丁。gh-110289: 添加
PyUnicode_EqualToUTF8AndSize()和PyUnicode_EqualToUTF8()函数。gh-110235: 在
PyStructSequence构造函数中对重复/未知字段抛出TypeError。补丁由 Xuehai Pan 提供。gh-110014: 从未记录的有限 C API 中移除
PY_TIMEOUT_MAX常量。由 Victor Stinner 提供补丁。gh-109521:
PyImport_GetImporter()现在在无法获取sys.path_hooks或sys.path_importer_cache,或者它们不是对应的列表和字典时设置 RuntimeError。以前在模糊的情况下可能返回 NULL 而不设置错误,如果这些属性类型错误,可能崩溃或抛出 SystemError。gh-85283: 添加
PySys_AuditTuple()函数:类似于PySys_Audit(),但将事件参数作为 Pythontuple对象传递。由 Victor Stinner 提供补丁。gh-108867: 添加
PyThreadState_GetUnchecked()函数:类似于PyThreadState_Get(),但如果它为 NULL 不会以致命错误终止进程。调用者需负责检查结果是否为 NULL。此前,该函数为私有函数,称为_PyThreadState_UncheckedGet()。由 Victor Stinner 提供补丁。gh-108765:
Python.h不再包含<ctype.h>标准头文件。如果需要,现在应明确包含它。例如,它提供了isalpha()和tolower()函数,这些函数依赖于区域设置。Python 提供了不依赖于区域设置的函数,如Py_ISALPHA()和Py_TOLOWER()。由 Victor Stinner 提供补丁。gh-108765:
Python.h不再包含<unistd.h>标准头文件。如果需要,现在应明确包含它。例如,它提供了函数:close()、getpagesize()、getpid()和sysconf()。补丁由 Victor Stinner 提供。gh-108765:
Python.h不再包含<ieeefp.h>标准头文件。它之前被包含用于finite()函数,现在该函数由<math.h>头文件提供。如果需要,现在应明确包含它。同时移除HAVE_IEEEFP_H宏。由 Victor Stinner 提供补丁。gh-108765:
Python.h不再包含这些标准头文件:<time.h>、<sys/select.h>和<sys/time.h>。如果需要,现在应明确包含它们。例如,<time.h>提供了clock()和gmtime()函数,<sys/select.h>提供了select()函数,<sys/time.h>提供了futimes()、gettimeofday()和setitimer()函数。由 Victor Stinner 提供补丁。gh-108511: 添加函数
PyObject_HasAttrWithError()、PyObject_HasAttrStringWithError()、PyMapping_HasKeyWithError()和PyMapping_HasKeyStringWithError()。gh-107073: 添加
PyObject_VisitManagedDict()和PyObject_ClearManagedDict()函数,这些函数必须由使用Py_TPFLAGS_MANAGED_DICT标志的类型的遍历和清除函数调用。由 Victor Stinner 提供补丁。gh-108634: 使用
configure--with-trace-refs(跟踪引用) 构建的 Python 现在支持 Limited API。由 Victor Stinner 提供补丁。gh-108014: 添加
PyLong_AsInt()函数:类似于PyLong_AsLong(),但将结果存储在 C 的 int 而不是 C 的 long 中。以前,它被称为私有函数_PyLong_AsInt()(带有下划线前缀) 。由 Victor Stinner 提供补丁。gh-108314: 添加
PyDict_ContainsString()函数:与PyDict_Contains()相同,但 key 指定为 const char* UTF-8 编码的字节字符串,而不是 PyObject*。由 Victor Stinner 提供补丁。gh-108337: 在 pyatomic.h 中添加对额外数据类型的原子操作。
gh-108014: 添加
Py_IsFinalizing()函数:检查主 Python 解释器是否正在 关闭。由 Victor Stinner 提供补丁。gh-107916: C API 函数
PyErr_SetFromErrnoWithFilename(),PyErr_SetExcFromWindowsErrWithFilename()和PyErr_SetFromWindowsErrWithFilename()现在在调用PyUnicode_DecodeFSDefault()之前保存错误代码。gh-107915: 诸如
PyErr_SetString(),PyErr_Format(),PyErr_SetFromErrnoWithFilename()等 C API 函数,如果格式化错误消息或解码文件名失败,将不再崩溃或忽略错误。相反,它们会保留相应的错误。gh-107810: 改进
DeprecationWarning对于与具有自定义tp_new的元类一起使用的PyType_Spec的使用。gh-107249: 为 Windows MSVC 编译器实现
Py_UNUSED宏。补丁由 Victor Stinner 提供。gh-107226:
PyModule_AddObjectRef()现在仅在有限 API 版本 3.10 或更高版本中可用。gh-106320: 移除了私有
_PyUnicode_AsString()别名,该别名指向PyUnicode_AsUTF8()。保留该别名是为了向后兼容 Python 3.0 - 3.2。PyUnicode_AsUTF8()自 Python 3.3 起可用。PyUnicode_AsUTF8String()函数可用于保持与 Python 3.2 及更早版本的兼容性。由 Victor Stinner 提供补丁。gh-106572: 将
PyObject_DelAttr()和PyObject_DelAttrString()宏转换为函数。由 Victor Stinner 提供补丁。gh-106307: 添加
PyMapping_GetOptionalItem()函数。gh-106521: 添加
PyObject_GetOptionalAttr()和PyObject_GetOptionalAttrString()函数。gh-106320: 移除了
_PyInterpreterState_Get()别名,该别名指向PyInterpreterState_Get(),保留该别名是为了向后兼容 Python 3.8。由 Victor Stinner 提供补丁。gh-106316: 移除了
cpython/pytime.h头文件:该文件仅包含私有函数。由 Victor Stinner 提供补丁。gh-106023: 移除了私有
_PyObject_FastCall()函数:使用PyObject_Vectorcall(),该函数自 Python 3.8 起可用 (PEP 590)。由 Victor Stinner 提供补丁。gh-106168: 如果 Python 是在 debug mode 或
with assertions模式下构建的,PyTuple_SET_ITEM()和PyList_SET_ITEM()现在会通过断言检查索引参数。如果断言失败,确保在此之前设置了大小。由 Victor Stinner 提供补丁。gh-106084: 移除了旧别名,这些别名指向调用函数的函数,保留这些别名是为了向后兼容 Python 3.8 临时 API:
_PyObject_CallMethodNoArgs(): 使用PyObject_CallMethodNoArgs()_PyObject_CallMethodOneArg(): 使用PyObject_CallMethodOneArg()_PyObject_CallOneArg(): 使用PyObject_CallOneArg()_PyObject_FastCallDict(): 使用PyObject_VectorcallDict()_PyObject_Vectorcall(): 使用PyObject_Vectorcall()_PyObject_VectorcallMethod(): 使用PyObject_VectorcallMethod()_PyVectorcall_Function(): 使用PyVectorcall_Function()
只需移除下划线前缀即可更新您的代码。由Victor Stinner提交的补丁。
gh-106004: 添加
PyDict_GetItemRef()和PyDict_GetItemStringRef()函数:类似于PyDict_GetItemWithError(),但返回一个 strong reference 而不是 borrowed reference。 由 Victor Stinner 编写补丁。gh-105927: 弃用
PyWeakref_GetObject()和PyWeakref_GET_OBJECT()函数:改用新的PyWeakref_GetRef()函数。由Victor Stinner提交的补丁。gh-105927: 添加
PyWeakref_GetRef()函数:类似于PyWeakref_GetObject(),但返回一个 strong reference,或者如果引用对象不再存活则返回NULL。 由 Victor Stinner 提交的补丁。gh-105922: 添加
PyImport_AddModuleRef():类似于PyImport_AddModule(),但返回一个 strong reference 而不是 borrowed reference。 由 Victor Stinner 提交的补丁。gh-105227: 新的
PyType_GetDict()提供了给定类型对象的字典,通常由cls.__dict__暴露。通常使用tp_dict就足够了,但对于静态内置类型,tp_dict现在总是NULL。PyType_GetDict()提供了正确的字典对象。gh-105375: 修复
PyErr_WarnExplicit()中的一个错误,其中如果API内部失败,异常可能会被覆盖。gh-105603: 我们已经将新(在3.12中)的
PyInterpreterConfig.own_gil重命名为PyInterpreterConfig.gil,并将值的含义从“布尔”更改为整数,支持的值为PyInterpreterConfig_DEFAULT_GIL、PyInterpreterConfig_SHARED_GIL和PyInterpreterConfig_OWN_GIL。默认值为“共享”。gh-105387: 在有限 C API 版本 3.12 中,
Py_INCREF()和Py_DECREF()函数现在被实现为不透明的函数调用以隐藏实现细节。由 Victor Stinner 提供补丁。gh-105396: 弃用
PyImport_ImportModuleNoBlock()函数,该函数自 Python 3.3 起仅为PyImport_ImportModule()的别名。由 Victor Stinner 提供补丁。gh-103968:
PyType_FromMetaclass()现在允许tp_new设置为NULL的元类。gh-105268: 移除旧的私有、未文档化和未测试的
_PyGC_FINALIZED()宏,该宏是为了与 Python 3.8 及更早版本保持向后兼容性而保留的。由 Victor Stinner 提供补丁。gh-105182: 移除在 Python 3.2 中弃用的
PyEval_AcquireLock()和PyEval_ReleaseLock()函数。由 Victor Stinner 提供补丁。gh-105182: 移除在 Python 3.9 中弃用的
PyEval_InitThreads()和PyEval_ThreadsInitialized()函数。由 Victor Stinner 提供补丁。gh-105145: 弃用旧的 Python 初始化函数:
由Victor Stinner提供补丁。
gh-85275:
PyObject_AsCharBuffer()、PyObject_AsReadBuffer()、PyObject_CheckReadBuffer()和PyObject_AsWriteBuffer()已被移除。请迁移到新的缓冲区协议;PyObject_GetBuffer()和PyBuffer_Release()。gh-105156: 弃用旧的
Py_UNICODE和PY_UNICODE_TYPE类型:直接使用wchar_t类型代替。自 Python 3.3 起,Py_UNICODE和PY_UNICODE_TYPE仅为wchar_t的别名。由 Victor Stinner 提供补丁。gh-105145: 移除以下在 Python 3.11 中弃用的用于配置 Python 初始化的旧函数:
PySys_AddWarnOptionUnicode()PySys_AddWarnOption()PySys_AddXOption()PySys_HasWarnOptions()PySys_SetArgvEx()PySys_SetArgv()PySys_SetPath()Py_SetPath()Py_SetProgramName()Py_SetPythonHome()Py_SetStandardStreamEncoding()_Py_SetProgramFullPath()
由Victor Stinner提供补丁。
gh-105107: 移除在Python 3.9中弃用的函数。
PyEval_CallObject(),PyEval_CallObjectWithKeywords(): 使用PyObject_CallNoArgs()和PyObject_Call()(位置参数不能为 NULL)代替。PyEval_CallFunction(): 使用PyObject_CallFunction()代替。PyEval_CallMethod(): 使用PyObject_CallMethod()代替。PyCFunction_Call(): 使用PyObject_Call()代替。
由Victor Stinner提供补丁。
gh-105115: 内置静态类型的
PyTypeObject.tp_bases``(和 ``tp_mro)现在被所有解释器共享,而在3.12-beta1版本中它们存储在PyInterpreterState上。另外请注意,现在这些元组是不可变对象。gh-105071: 向不稳定的C API添加
PyUnstable_Exc_PrepReraiseStar,以暴露except*的实现。gh-104922: 在如
PyArg_ParseTuple()和Py_BuildValue()的API中使用'#'格式时不再需要PY_SSIZE_T_CLEAN。无论PY_SSIZE_T_CLEAN如何,它们都为'#'使用Py_ssize_t。gh-104584: 为钩入优化器添加一个不稳定的C API。这主要是内部的,但标记为“不稳定”以允许第三方实验。
gh-104668: 不在子解释器中调用
PyOS_InputHook或PyOS_ReadlineFunctionPointer,因为在它们的注册回调中通常难以避免使用全局状态。这也避免了扩展可能在不支持的子解释器中运行(或尚未加载)的情况。bpo-42327: 添加
PyModule_Add()函数:类似于PyModule_AddObjectRef()和PyModule_AddObject(),但总是窃取对值的引用。bpo-40309: 在
Py_BuildValue()格式字符串中正确处理闭括号前的尾随空格。
Python 3.12.0 beta 1¶
发布日期: 2023-05-22
安全性¶
gh-99889: 修复了
uu.decode()中的一个安全漏洞,该漏洞在没有指定out_file的情况下,可能允许基于输入的目录遍历。gh-104049: 在
http.client.SimpleHTTPRequestHandler生成的目录索引中不暴露本地的磁盘位置。gh-99108: 升级内置的
hashlibSHA3实现到来自HACL*项目的已验证实现。在OpenSSL不存在或缺少SHA3时使用。gh-102153:
urllib.parse.urlsplit()现在根据WHATWG定义的URL规范,去除前导C0控制和空格字符,以响应 CVE 2023-24329。由Illia Volochii提供补丁。
库¶
核心与内置函数¶
gh-104615: 修复了类似
a, a = x, y代码中的赋值顺序错误。由Carl Meyer贡献。gh-104572: 在 PEP 695 上下文中和当
from __future__ import annotations激活时,改进无效构造的语法错误消息。gh-104482: 修复了ast.c中验证模式匹配语句时的三个错误处理bug。
gh-102818: 不在
sys.setprofile和sys.settrace的蹦床函数中添加帧到回溯中。这确保了如果回调函数中引发异常,帧不会被重复,并且确保如果使用C回调且该回调不添加帧时,帧不会被省略。gh-103082: 更改
sys.monitoring.events.LINE事件在sys.monitoring中的行为:行事件现在在动态到达新行时发生,而不是像以前那样使用静态近似。这使得行为与sys.settrace中的“行”事件非常相似。这应该有助于工具从3.11移植到3.12。gh-104263: 修复
float("nan")在平台(如MIPS)上生成静默NaN的问题,这些平台上信号/静默位的含义与其通常含义相反。同时引入一个新宏Py_INFINITY以匹配C99的INFINITY,并重构内部代码以依赖C99的NAN和INFINITY宏,而不是硬编码无穷大和NaN的位模式。感谢Sebastian Berg。gh-99113: 多阶段初始化扩展模块现在可以表明它们支持在拥有自己GIL的子解释器中运行。这是通过使用
Py_MOD_PER_INTERPRETER_GIL_SUPPORTED作为Py_mod_multiple_interpreters模块定义槽的值来实现的。否则,默认情况下,模块不能在这样的子解释器中导入。(这不影响主解释器或不拥有自己GIL的子解释器。)除了多阶段初始化通常已经要求的隔离外,支持每个解释器的GIL还涉及一个额外的约束:线程安全。如果模块有外部(链接)依赖,并且这些库有任何不是线程安全的状态,那么模块必须做额外的工作来增加线程安全。这应该是一个不常见的情况。gh-99113: GIL现在(可选)是每个解释器一个。这是PEP 684的根本变化。这一切之所以成为可能,是因为进程中每个解释器的隔离状态。主解释器的行为保持不变。同样,使用
Py_NewInterpreter()创建的解释器不受影响。要获得拥有自己GIL的解释器,请调用Py_NewInterpreterFromConfig()。gh-104108: 多阶段初始化扩展模块现在可以表明它们是否实际支持多解释器。默认情况下,这类模块被期望支持在多解释器中使用。在不常见的情况下,如果不支持,可以使用新的
Py_mod_multiple_interpreters模块定义槽。值为0表示模块不支持多解释器。1表示支持。默认值为1。gh-104078: 提高了
PyObject_HasAttrString()的性能。gh-104028: 在从垃圾回收调用回调函数时减少对象创建。由 Donghee Na 提交的补丁。
gh-104018: 在字节对象的 %-格式化中禁止使用 "z" 格式说明符。
gh-102213: 修复了在访问定义了
__getattr__的对象属性时的性能损失。gh-103895: 改进了在显示
Exception.__notes__时对边缘情况的处理。确保消息总是以换行符结束,并且字符串/字节不会在多行上展开。由 Carey Metcalfe 提交的补丁。gh-103899: 当意外调用具有相同名称的可调用属性的 module 对象(如
dis.dis()或datetime.datetime)时,在TypeError消息中提供有用的提示。gh-103845: 在添加新的监控工具之前移除行和指令的监控工具,以避免新添加的监控工具被立即移除。
gh-103763: 实现了 PEP 695,为泛型类、泛型函数和类型别名添加了语法支持。
新增了用于类型别名的
type X = ...语法,该语法在运行时解析为新类typing.TypeAliasType``的实例。该值是延迟计算的,可以通过 ``.__value__属性访问。这是作为一个新的AST节点``ast.TypeAlias``实现的。新增了用于定义泛型函数和类的新语法(
class X[T]: ...,def func[T](): ...)。这是通过在类和函数的AST节点上新增type_params属性实现的。该节点持有新AST类ast.TypeVar、ast.ParamSpec``和 ``ast.TypeVarTuple的实例。typing.TypeVar、typing.ParamSpec、typing.ParamSpecArgs、typing.ParamSpecKwargs、typing.TypeVarTuple``和 ``typing.Generic现在是用C而非Python实现的。新增了字节码指令
LOAD_LOCALS、LOAD_CLASSDICT_OR_GLOBAL和 ``LOAD_CLASSDICT_OR_DEREF``以支持类命名空间中名称的正确解析。由Eric Traut、Larry Hastings和Jelle Zijlstra贡献的补丁。
库¶
核心与内置函数¶
gh-102310: 更改了无效字节文字的错误范围。
gh-103590: 不要将
try-except*构造中抛出的单个异常包装在ExceptionGroup中。gh-103650: 更改性能映射格式,移除地址中的'0x'前缀。
gh-102856: 实现了PEP 701所需的C标记器更改。由Pablo Galindo Salgado、Lysandros Nikolaou、Batuhan Taskaya、Marta Gómez Macías和sunmy2019贡献的补丁。
gh-100530: 澄清了当类模式的调用部分实际上不是一个类时引发的错误消息。
gh-103492: 通过明确指出哪个字面值有问题来澄清
SyntaxWarning与字面值is比较的情况,因为使用is与例如None和布尔字面值的比较是惯用的。gh-87729: 添加
LOAD_SUPER_ATTR(以及super().method()的专门化) 以加速super().method()和super().attr。这使得super().method()大约快了2.3倍,并将其性能提升至简单方法调用的20%以内。Vladimir Matveev 和 Carl Meyer 的补丁。gh-103488: 更改区分 yield 和 return 目标地址的内部偏移量,以便指令指针对于异常处理和其他堆栈展开是正确的。
gh-82012: 布尔值的按位取反运算符(
~)已被弃用。它返回底层int表示的按位取反,例如bool(~True) == True,这可能会造成混淆。使用not进行布尔值的逻辑否定。在极少数情况下,如果您确实需要底层int的按位取反,请显式转换为 int~int(x)。gh-77757: 类型对象的
__set_name__方法中引发的异常不再被RuntimeError包装。上下文信息以 PEP 678 注释的形式添加到异常中。gh-103333:
AttributeError现在在序列化和反序列化时保留name属性。gh-103242: 迁移
set_ecdh_curve()方法以不使用已弃用的 OpenSSL API。Donghee Na 的补丁。gh-103323: 我们已经将
_PyRuntime.tstate_current的使用替换为线程局部变量。这是一个相当低级的实现细节,行为应该没有变化。gh-84436: PEP-683 的实现,通过使用跳过引用计数的固定引用计数来添加不朽对象,使对象真正不可变。
gh-102700: 允许内置模块成为子模块。这允许子模块静态链接到 CPython 二进制文件中。
gh-102500: 使用新的
__buffer__和__release_buffer__魔术方法,使缓冲区协议在Python代码中可访问。详情见 PEP 688。由Jelle Zijlstra提供补丁。gh-99184: 在
weakref.ref的repr中绕过__name__的实例属性访问。gh-98003: 现在复杂的函数调用更快,且不占用C栈空间。
bpo-39610: 对于0维的
memoryview对象(如memoryview(ctypes.c_uint8(42))),len()现在会引发TypeError。之前这会返回1,这与mem_0d[0]引发IndexError不一致。
库¶
bpo-31821: 修复
pause_reading()在被asyncio中的connection_made()调用时工作的问题。gh-104600:
functools.update_wrapper()现在设置__type_params__属性(由 PEP 695 添加)。gh-104340: 当
asyncio管道协议由于错误失去连接,并且调用者没有在相应的StreamWriter上等待wait_closed()时,不要记录关于未检索到的异常的警告。毕竟,根据StreamWriter.close()文档,wait_closed()调用是可选的(“非强制性”)。gh-104555: 修复了一个问题,即在进行
issubclass()检查,将一个类X与具有不可调用成员的运行时检查协议Y进行比较时,如果之前已经进行了将X的实例与Y进行比较的isinstance()调用,则不会引发TypeError。这个问题在Python 3.11的边缘情况下存在,但在3.12中由于对运行时检查协议进行的一些无关更改变得更加突出。由Alex Waygood提供补丁。gh-104372: 重构了
_posixsubprocess的内部实现,以避免在标记pass_fds=文件描述符为可继承时在 fork 和 exec 之间使用 Python C API。gh-104484: 为
pathlib.PurePath.match()添加了 case_sensitive 参数。gh-75367: 修复了
inspect.getattr_static()中的数据描述符检测问题。gh-104536: 修复了内部
multiprocessing.process清理逻辑中的一个竞态条件,该条件可能在调用process.close()时表现为意外的AttributeError。gh-103857: 更新了 datetime 弃用警告的堆栈跟踪,使其指向调用行。
gh-101520: 将
tracemalloc模块的核心功能移至Python/文件夹,仅在Modules/中保留模块包装器。gh-102613: 修复了
pathlib.Path.glob()在遍历深层目录树时引发RecursionError的问题。gh-103000: 提高了
dataclasses.asdict()在 dict_factory 为dict时的常见情况下的性能。由 David C Ellis 提供补丁。gh-104139: 教导
urllib.parse.unsplit()在组装itms-services://?action=generate-bugs风格的 Apple Platform Deployment URLs 时保留"//"。gh-104307:
socket.getnameinfo()现在在联系 DNS 服务器时会释放 GIL。gh-104310: 用户现在可以使用
importlib.util.allowing_all_extensions()(一个上下文管理器) 来临时禁用子解释器中导入扩展模块时的严格兼容性检查。gh-87695: 修复了
pathlib.Path.glob()在遇到指向过长路径的符号链接时引发OSError的问题。gh-104265: 通过禁止实例化
_csv.Reader和_csv.Writer类型来防止可能的崩溃。这个回归是在3.10.0a4版本中由PR 23224引入的 (bpo-14935)。由Radislav Chugunov提供补丁。gh-102613: 通过仅在必要时合并相邻的通配符并去重结果,提高了
pathlib.Path.glob()在展开递归通配符("**")时的性能。gh-65772: 移除了turtle.py中不必要的注释和代码。
gh-90208: 修复了
pathlib.Path.glob()在遇到PermissionError时返回不完整结果的问题。现在,此方法会抑制所有OSError异常,除了那些在顶级路径上调用is_dir()时引发的异常。gh-104144: 当使用
asyncio.eager_task_factory()时,优化了asyncio.TaskGroup。如果TaskGroup任务急切完成,跳过调度完成回调。gh-104144: 当使用
asyncio.eager_task_factory()时,优化了asyncio.gather()以在所有未来急切完成时也急切完成。避免为急切完成的未来调度完成回调。gh-104114: 修复了
pathlib.Path.glob()返回的路径使用非通配符段的对应路径段的大小写,而不是实际文件系统大小写的问题。gh-104104: 通过使用
re.IGNORECASE实现不区分大小写的匹配,提高了pathlib.Path.glob()的性能。gh-104102: 在评估包含
'../'段的模式时,提高了pathlib.Path.glob()的性能。gh-103822: 将
weekday的返回类型更新为新添加的Day属性。gh-103629: 根据 PEP 692 更新了
typing.Unpack的repr。gh-104035: 不忽略用户定义的
__getstate__和__setstate__方法对于有槽的冻结数据类。gh-88773: 在
turtle模块中添加了turtle.teleport()功能,用于将海龟移动到一个新点而不绘制线条,无论是否可见。由 Liam Gersten 提供补丁。gh-103935: 对要执行的文件使用
io.open_code()而不是原始的open()。gh-68968: 修复了当输入缺少最终换行符时
assertEqual()输出乱码的问题。gh-100370: 修复了在32位构建中
sqlite3.Connection.blobopen()可能引发的OverflowError。由 Erlend E. Aasland 提供补丁。gh-102628: 在 Windows 上运行时,将
sqlite3CLI 横幅中的 CTRL-D 替换为 CTRL-Z。gh-103583: 隔离了
_multibytecodec和编解码器扩展模块。由 Erlend E. Aasland 提供补丁。gh-103848: 添加检查以确保
urllib.parse.urlsplit()找到的[括号]主机是 IPv6 或 IPvFuture 格式。gh-103872: 将捆绑的 pip 更新至版本 23.1.2。
gh-74940: C.UTF-8 区域设置不再转换为 en_US.UTF-8,从而在没有安装区域设置的系统上启用 UTF-8 编码。
gh-103861: 修复了
zipfile.Zipfile在使用force_zip64向其中添加文件时创建无效 zip 文件的问题。由 Carey Metcalfe 提供补丁。gh-103857: 弃用了
datetime.datetime.utcnow()和datetime.datetime.utcfromtimestamp()。(由 Paul Ganssle 提供补丁)gh-103839: 避免在针对使用捆绑的 libtommath 构建的 Tcl 8.7 构建 Tkinter 时由于找不到 tommath.h 而导致的编译错误。
gh-103791:
contextlib.suppress现在支持抑制作为ExceptionGroup一部分引发的异常。如果组中存在其他异常,它们将会在不包含被抑制异常的组中重新引发。gh-90750: 在
datetime.datetime.strptime()的实现中使用datetime.datetime.fromisocalendar(),现在应该只接受有效的 ISO 日期。(由 Paul Ganssle 提供补丁)gh-103685: 为 Tk 8.7 准备
tkinter.Menu.index(),使其在应该返回None时不会引发TclError: expected integer but got ""。gh-81403:
urllib.request.CacheFTPHandler不再在重用缓存的 FTP 实例时引发URLError。ftplib 的 endtransfer 方法调用 voidresp 来排空连接,以正确处理 FTP 实例的重用。gh-103699: 向非泛型 TypedDicts、基于调用的 TypedDicts 和基于调用的 NamedTuples 添加
__orig_bases__。其他 TypedDicts 和 NamedTuples 已有该属性。gh-92248: 弃用
argparse.BooleanOptionalAction的type、choices和metavar参数。gh-103673:
socketserver新增ForkingUnixStreamServer和ForkingUnixDatagramServer类。由 Jay Berry 提供补丁。gh-103636: 在 calendar 模块中添加了月份的枚举和日期。
gh-84976: 创建一个新的
Lib/_pydatetime.py文件,定义datetime模块的 Python 版本,并使datetime仅在 C 实现不可用时才导入新库的内容。目前,如果 C 实现不可用,会定义完整的 Python 实现然后删除,这无谓地减慢了import datetime的速度。gh-103596: 属性/方法不再被同名的枚举成员遮蔽,尽管它们可能被 enum.property 遮蔽。
gh-103584: 更新了
importlib.metadata,包含了从importlib_metadata5.2 到 6.5.0 的更改,包括:当installed-files.txt存在时,支持Distribution.files。PackageMetadata现在规定了一个额外的get方法,允许轻松查询可能不存在的元数据键。packages_distributions现在支持包和模块的 Python 模块不是.py源文件(例如.pyc,.so)。扩展了PackageMetadata.get_all的协议,以匹配 python/typeshed#9620 中email.message.Message.get_all的上游实现。弃用了未定义抽象方法使用Distribution。弃用了PackageMetadata.__getitem__对于缺失键返回None的期望。将来,它将引发KeyError。gh-103578: 修复了一个错误,其中
pdb在读取具有不同编码的源文件时会崩溃,通过用io.open_code()替换io.open()。新方法也会调用由PyFile_SetOpenCodeHook()设置的钩子。gh-103556: 现在创建
inspect.Signature对象时,带有默认值的位置参数后面跟着没有默认值的位置或关键字参数是不可能的。gh-103559: 将捆绑的 pip 更新到版本 23.1.1。
gh-103548: 通过仅在必要时连接路径,提高了
pathlib.Path.absolute()和cwd()的性能。同时通过在 Posix 上跳过路径解析和规范化,提高了pathlib.PurePath.is_absolute()的性能。gh-103538: 移除了由
TK_AQUA宏定义保护的_tkinter模块代码,该宏仅对 Tk 8.4.7 或更早版本需要,并且从未被任何构建系统定义或为手动使用记录。gh-103525: 修复了当向
pathlib.PurePath和Path提供混合str和bytes参数时的误导性异常消息。gh-103489: 向
Connection添加getconfig()和setconfig(),以便对数据库连接进行配置更改。由 Erlend E. Aasland 提供补丁。gh-103365: 将默认的 Flag 边界设置为
STRICT并修复位操作。gh-103472: 通过显式关闭代理/隧道的 CONNECT 响应,避免
http.client.HTTPConnection中潜在的ResourceWarning。gh-103462: 修复了在使用
asyncio中的writelines()发送非常大的负载时的问题,这些负载超过了一次调用socket.socket.send()或socket.socket.sendmsg()所能写入的数据量,导致剩余的缓冲区未被写入。gh-103449: 修复了
dataclasses.dataclass()中文档字符串生成的一个错误。gh-103092: 隔离
_collections(应用 PEP 687) 。补丁由 Erlend E. Aasland 提供。gh-103357: 向
logging.config.dictConfig()和logging.config.fileConfig()添加了对logging.Formatterdefaults参数的支持。由 Bar Harel 提供补丁。gh-74690: 对于只有少数成员的协议,针对
runtime-checkable protocols的isinstance()检查性能得到了显著提升。为了实现这一改进,typing模块的几个内部实现细节已被重构,包括typing._ProtocolMeta.__instancecheck__、typing._is_callable_members_only和typing._get_protocol_attrs。由 Alex Waygood 提供补丁。gh-74690: 运行时可检查协议的成员现在在类创建后即被视为“冻结”。更多详情请参阅 "Python 3.12 新特性"。
gh-103256: 修复了一个导致
hmac在请求的哈希算法在OpenSSL中不可用(尽管在``hashlib``本身中作为单独部分可用)时引发异常的bug。现在它正确地回退到内置算法。这种情况可能发生在,例如,您的OpenSSL不包含SHA3支持而您想计算 ``hmac.digest(b'K', b'M', 'sha3_256')``时。gh-103285: 提高
ast.get_source_segment()的性能。gh-93910: 移除对枚举
member.member访问的弃用。gh-102978: 修复当以
autospec=True调用时,unittest.mock.patch()不强制执行用``@classmethod``或@staticmethod装饰的方法的函数签名的问题。gh-103092: 隔离
_socket(应用 PEP 687) 。由Erlend E. Aasland提交的补丁。gh-100479: 添加
pathlib.PurePath.with_segments(),该方法从参数创建一个路径对象。此方法在创建派生路径时被调用,例如从pathlib.PurePath.parent。子类可以覆盖此方法以在路径对象之间共享信息。gh-103220: 修复当连接到Windows上带有尾部斜杠的不完整UNC驱动器时,
os.path.join()添加斜杠的问题。gh-103204: 修复
http.server接受HTTP版本号前带有'+'或'-',或带有数字分隔'_'字符的HTTP请求的问题。版本号的长度也受到限制。gh-75586: 修复
shutil.which的各种Windows特定问题。gh-103193: 提高
inspect.getattr_static()的性能。由Alex Waygood提交的补丁。gh-103176:
sys._current_exceptions()现在返回一个从线程ID到异常实例的映射,而不是一个(typ, exc, tb)元组。gh-103015: 向
sqlite3.Connection.load_extension()添加了仅关键字参数 entrypoint,用于覆盖SQLite扩展的入口点。由Erlend E. Aasland提供补丁。gh-103000: 提高了
dataclasses.astuple()和dataclasses.asdict()在内容为常见Python类型时的性能。gh-102953:
tarfile中的提取方法,以及shutil.unpack_archive(),新增了一个 filter 参数,允许限制可能令人惊讶或危险的tar特性,例如在目标目录之外创建文件。详情请见 解压缩过滤器。gh-97696: 在asyncio中实现了一个急切的任务工厂。当用作事件循环上的任务工厂时,它执行协程的急切执行。能够同步完成的协程(例如,在不阻塞的情况下返回或引发)立即作为已完成的任务返回,并且任务永远不会被调度到事件循环。如果协程阻塞,则(待定的)任务被调度并返回。
gh-81079: 向
pathlib.Path.glob()和rglob()添加了仅关键字参数 case_sensitive。gh-101819: 通过应用 PEP 687 隔离了
io扩展模块。由Kumar Aditya、Victor Stinner和Erlend E. Aasland提供补丁。gh-101362: 通过从内部路径部分列表中省略路径锚点,加快了
pathlib.Path的构建速度。gh-102114:
dis模块中接受源代码字符串作为参数的函数现在在字符串包含语法或缩进错误时打印更简洁的回溯信息。gh-62432: 现在,如果未运行任何测试,
unittest运行器将以状态码5退出。测试运行器配置错误导致找不到任何测试是常见情况,这应该被视为错误。gh-78079: 修复了在
pathlib.PurePath中对 UNC 设备路径根和部分 UNC 共享路径根的错误标准化问题。Pathlib 不再为此类路径添加尾部斜杠。gh-85984: 在
tty中添加了tty.cfmakeraw()和tty.cfmakecbreak()函数,并现代化了tty.setraw()和tty.setcbreak()的行为,默认使用 POSIX.1-2017 第11章“通用终端接口”的标志掩码。gh-101688: 实现了
types.get_original_bases()以提供对类型的进一步内省。gh-101640:
argparse.ArgumentParser现在会在写入消息时捕获错误,例如当sys.stderr为None时。由 Oleg Iarygin 提供的补丁。gh-83861: 修复了当在一个表示本地时间落入时区转换间隙的原始 datetime 实例上调用 datetime.astimezone 方法时的返回值问题。PEP 495 要求在这种情况下,fold=1 的实例产生的时间早于 fold=0 的实例。
gh-95299: 从
ensurepip中移除捆绑的 setuptools wheel,并停止在由venv创建的环境中安装 setuptools。gh-99353: 在
urllib.request.AbstractHTTPHandler中,当其构造参数debuglevel未设置时,尊重http.client.HTTPConnection的.debuglevel标志。并对*HTTPS*执行相同的操作。gh-98040: 移除了长期弃用的
imp模块。gh-97850: 弃用
pkgutil.find_loader()和pkgutil.get_loader(),推荐使用importlib.util.find_spec()。gh-94473: 在
tkinter.Canvas.coords()中展平参数。现在它不仅接受x1, y1, x2, y2, ...和[x1, y1, x2, y2, ...],还接受(x1, y1), (x2, y2), ...和[(x1, y1), (x2, y2), ...]。gh-98040: 移除更多已弃用的 importlib API:
find_loader()、find_module()、importlib.abc.Finder、pkgutil.ImpImporter、pkgutil.ImpLoader。gh-96522: 修复 pty.spawn() 中潜在的僵局问题。
gh-96534: 支持 FreeBSD 14 中添加的 divert(4)。
gh-87474: 修复
subprocess.Popen中潜在的文件描述符泄露问题。gh-94906: 在
math.nextafter()中支持多步操作。由 Shantanu Jain 和 Matthias Gorgens 提供补丁。gh-51574: 使
tempfile.mkdtemp()在其 dir 参数为相对路径时返回绝对路径。gh-94518: 将私有的
_posixsubprocess.fork_exec()转换为使用 Argument Clinic。gh-92184: 使用
zipfile创建 zip 文件时,os.altsep如果不为None,即使它不是/,也将始终被视为路径分隔符。由 Carey Metcalfe 提供补丁。bpo-46797: 现在为
ast.Num、ast.Bytes、ast.Str、ast.NameConstant和ast.Ellipsis发出弃用警告。这些自 Python 3.8 起已被记录为弃用,并将在 Python 3.14 中移除。bpo-44844: 使
webbrowser能够检测并启动 Microsoft Edge 浏览器。bpo-45606: 修复了
pathlib.Path.glob()中的 bug —— 之前当模式完全匹配时,此方法不会找到悬空符号链接,但当模式包含通配符或递归通配符(**)时会找到。通过此更改,悬空符号链接在这两种情况下都将被找到。bpo-23041: 在
csv模块的引用风格套件中添加QUOTE_STRINGS和QUOTE_NOTNULL。bpo-24964: 添加了
http.client.HTTPConnection.get_proxy_response_headers(),提供了对代理服务器响应CONNECT请求的HTTP头信息的访问。bpo-17258:
multiprocessing现在支持更强的HMAC算法用于进程间连接认证,而不仅仅是HMAC-MD5。bpo-39744: 使得
asyncio.subprocess.Process.communicate()即使在调用时``input=None``也会关闭子进程的stdin。bpo-22708: http.client CONNECT 方法隧道改进:使用HTTP 1.1协议;如果没有提供,发送一个匹配的Host:头部与CONNECT;将IDN域名转换为Punycode。由Michael Handler提供补丁。
文档¶
测试¶
gh-104494: 更新
test_pack_configure_in和test_place_configure_in以适应Tk 8.7中错误消息格式的变化。gh-104461: 仅在X11上运行test_configure_screen,因为
DISPLAY环境变量和toplevels的``-screen``选项在Win32或Aqua的Tk上没有用。gh-86275: 向
zoneinfo测试中添加了基于属性的测试,以及hypothesis接口的存根。(由Paul Ganssle提供补丁)gh-103329: 添加了对
unittest.mock.PropertyMock行为的回归测试。gh-102795: 修复了test_epoll的test_control_and_wait中对poll的使用。
构建¶
gh-101282: 如果构建共享库,现在会对 libpython 共享库应用 BOLT 优化。现在可以通过
BOLT_INSTRUMENT_FLAGS和BOLT_APPLY_FLAGS配置变量来影响 BOLT 仪器化和应用设置。gh-99017:
PYTHON_FOR_REGEN现在需要 Python 3.10 或更新版本。gh-104490: 一致且正确定义
.PHONY/ 虚拟 make 目标。gh-104106: 为 macOS 添加 mkfifoat/mknodat 的 gcc 回退。由 Donghee Na 提供补丁。
gh-103532:
_tkinter模块中不再定义或使用TKINTER_PROTECT_LOADTK宏。之前仅在针对 Tk 8.4.13 及更早版本构建时定义,但自 gh-91152 以来,早于 8.5.12 的 Tk 已不受支持。gh-99069: 扩展了当 libc 头文件中缺少
static_assert时的解决方法,适用于所有 clang 和 gcc 构建。特别是,这修复了在 macOS <= 10.10 上的构建问题。gh-100220: 将
SHELLMakefile 变量的默认值从/bin/sh更改为/bin/sh -e,以确保复杂示例代码在出错后正确失败。以前,make install可能会安装失败一些文件但仍返回成功结果。gh-90656: 为 64 位龙芯架构添加平台三元组:
loongarch64-linux-gnusf
loongarch64-linux-gnuf32
loongarch64-linux-gnu
由张纳提供补丁。
Windows¶
gh-104623: 更新 Windows 安装程序以使用 SQLite 3.42.0。
gh-82814: 通过在内置实现中将
errno.EACCES添加到忽略错误列表中,修复了在 Windows Subsystem for Linux (WSL) 挂载的文件系统上使用shutil.copystat()时可能出现的[Errno 13] Permission denied错误。gh-103088: 修复了 Cygwin 中虚拟环境
activate脚本的行尾不正确的问题。gh-103088: 修复了 Windows 上不同磁盘间 bash 中 venvs 无法工作的问题
gh-102997: 更新 Windows 安装程序以使用 SQLite 3.41.2。
gh-88013: 修复了在某些情况下调用
ntpath.realpath()时传入 bytes 参数会引发TypeError的 bug。
macOS¶
gh-99834: 将 macOS 安装程序更新至 Tcl/Tk 8.6.13。
gh-104623: 将 macOS 安装程序更新至 SQLite 3.42.0。
gh-103545: 添加
os.PRIO_DARWIN_THREAD、os.PRIO_DARWIN_PROCESS、os.PRIO_DARWIN_BG和os.PRIO_DARWIN_NONUI。这些可以与os.setpriority一起使用,以较低优先级运行进程并利用 Apple Silicon 系统的效率核心。gh-104180: 支持从 macOS 系统配置中读取 SOCKS 代理配置。由 Sam Schott 提供补丁。
gh-60436: 更新 curses textbox 以额外处理使用
curses.ascii.DEL按键的回退。gh-102997: 将 macOS 安装程序更新至 SQLite 3.41.2。
IDLE¶
工具/示例¶
C API¶
gh-101291: 添加了用于提取“紧凑”整数值的不稳定 C API:
PyUnstable_Long_IsCompact()和PyUnstable_Long_CompactValue()。gh-104109: 我们已将
Py_NewInterpreterFromConfig()和PyInterpreterConfig添加到公共 C-API 中(但尚未添加到稳定 ABI;至少现在还没有)。新函数可用于创建具有各种配置特性的新解释器。添加此函数是为了支持 PEP 684(每个解释器的 GIL)。gh-103968:
PyType_FromSpec()及其变体现在允许创建元类覆盖tp_new的类。tp_new被忽略。此行为已被弃用,并将在 3.14+ 中被禁止。新的PyType_FromMetaclass()已经禁止了它。gh-103743: 添加
PyUnstable_Object_GC_NewWithExtraData()函数,可用于在对象之后分配额外的内存,用于不受 Python 管理的数据。gh-103295: 引入
PyUnstable_WritePerfMapEntry()、PyUnstable_PerfMapState_Init()和PyUnstable_PerfMapState_Fini()。这些允许扩展模块(特别是 JIT 编译器)以线程安全的方式写入 perf-map 文件。Python 对 Linux perf 性能分析器的支持 也使用这些 API 在 perf-map 文件中写入条目。gh-103509: 添加了用于扩展实例内存布局不透明的类型的 C API:
PyType_Spec.basicsize现在可以为零或负数,PyObject_GetTypeData()可用于获取子类特定的数据,Py_TPFLAGS_ITEMS_AT_END可用于安全地扩展可变大小的对象。详情请见 PEP 697。gh-103091: 添加一个新的 C-API 函数,用于急切地为 PyTypeObject 分配版本标签:
PyUnstable_Type_AssignVersionTag()。gh-101408:
PyObject_GC_Resize应在需要时计算前头大小。补丁由 Donghee Na 提供。gh-98836: 在
PyUnicode_FromFormat()和PyUnicode_FromFormatV()中添加对更多格式化选项的支持(左对齐、八进制、大写十六进制、intmax_t、ptrdiff_t、wchar_tC 字符串、可变宽度和精度)。gh-96803: 在有限的 API 中添加不稳定的 C-API 函数,用于从内部的
_PyInterpreterFrame获取代码对象、lasti 和行号。这些函数是:PyCodeObject * PyUnstable_InterpreterFrame_GetCode(struct _PyInterpreterFrame *frame)int PyUnstable_InterpreterFrame_GetLasti(struct _PyInterpreterFrame *frame)int PyUnstable_InterpreterFrame_GetLine(struct _PyInterpreterFrame *frame)
Python 3.12.0 alpha 7¶
发布日期:2023-04-04
核心与内置函数¶
gh-102192: 弃用
_PyErr_ChainExceptions,推荐使用_PyErr_ChainExceptions1。gh-102859: 移除了
JUMP_IF_FALSE_OR_POP和JUMP_IF_TRUE_OR_POP指令。gh-101975: 修复了跟踪条目上的
stacktop值,以避免垃圾收集时的损坏。gh-102778: 添加
sys.last_exc并弃用sys.last_type、sys.last_value和sys.last_traceback,这些以旧形式保存相同的信息。gh-100982: 将所有
COMPARE_AND_BRANCH出现替换为COMPARE_OP。gh-102701: 修复创建非常大的字典时的溢出问题。
gh-102755: 添加
PyErr_DisplayException(),它仅接受一个异常实例,以替代接受(typ, exc, tb)三元组的旧版PyErr_Display()。gh-102594: 在
PyErr_SetObject中当规范化失败时添加引发异常的注释。gh-90997: 缩小
LOAD_GLOBAL使用的内联CACHE条目数量。
库¶
gh-102491: 通过移除 IronPython 版本解析提高
platform的导入时间。IronPython 版本解析功能无效(参见 https://github.com/IronLanguages/ironpython3/issues/1667)。
核心与内置函数¶
gh-101291: 重新排列 PyLongObject 第一个字段(头部之后)的位。* 位 0 和 1:1 - 符号。即 0 表示正数,1 表示零,2 表示负数。* 位 2 保留(可能用于 immortal 位)* 位 3+ 无符号大小。
这使得一些操作稍微更高效,并且将在未来为大多数整数启用更紧凑和更快的 2s 补码表示。
gh-102397: 修复垃圾收集过程中信号处理竞争条件导致的段错误。由 Kumar Aditya 提供补丁。
gh-102406:
codecs编码/解码错误现在将上下文信息(哪个操作和哪个编解码器)作为 PEP 678 注释附加,而不是通过链接一个新的异常实例。gh-102281: 修复fileutils中潜在的nullptr解引用和未初始化内存使用问题。由Max Bachmann提交补丁。
gh-102300: 在BINARY_OP的浮点特化中重用引用计数为1的操作数。
gh-102213: 修复了在访问定义了
__getattr__的对象属性时的性能损失。gh-102255: 改进对Xbox的构建支持。由Max Bachmann提交补丁。
构建¶
gh-102027: 修复
_blake2内部模块中的SSE2和SSE3检测。由Max Bachmann提交补丁。
核心与内置函数¶
gh-101865: 弃用代码对象中的
co_lnotab,计划在Python 3.14中移除。
库¶
bpo-1635741: 使
_pickle适应 PEP 687。由Mohamed Koubaa和Erlend Aasland提交补丁。gh-103085: 纯Python函数
locale.getencoding()将不再发出弃用警告。gh-103068: 不再可以在
Pdb中注册会引发SyntaxError的条件断点。由Tian Gao提交补丁。gh-102549: 不再忽略成员类型创建中的异常。
gh-103056: 确保最终的
_generate_next_value_是一个staticmethod。gh-103046: 当
show_caches为False且lasti指向一个CACHE条目时,在dis中正确显示当前行标签。gh-102433: 现在,针对
runtime-checkable protocols的isinstance()检查使用inspect.getattr_static()而非hasattr()来查找属性是否存在。这意味着在针对运行时检查协议的isinstance()检查期间,描述符和__getattr__()方法不再被意外评估。然而,这也可能意味着一些过去被认为是运行时检查协议实例的对象在Python 3.12+中可能不再被视为该协议的实例,反之亦然。大多数用户不太可能受到此更改的影响。由Alex Waygood提交补丁。gh-103023: 不再可以在
Pdb中注册会引发SyntaxError的表达式来显示。由Tian Gao提交补丁。gh-102947: 当在非数据类上调用
dataclasses.fields()时,改进回溯。由Alex Waygood提交补丁。gh-102780:
asyncio.Timeout上下文管理器现在即使在由于任务取消而执行清理时也能可靠工作。之前在这种情况下它可能会引发CancelledError而不是TimeoutError。gh-102871: 从
webbrowser中移除了对过时浏览器的支持。被移除的浏览器包括 Grail、Mosaic、Netscape、Galeon、Skipstone、Iceape、Firebird 以及 Firefox 35 及以下版本。gh-102839: 通过移除参数诊所,提高了
math.log()参数处理的性能。gh-102828: 向
shutil.rmtree()添加了onexc参数,它与onerror类似,但期望一个异常实例而不是 exc_info 元组。弃用onerror。gh-88965: typing: 修复了与自定义类中基于
ParamSpec泛型的替换相关的 bug。之前,如果ParamSpec被替换为一个自身包含TypeVar的参数列表,参数列表中的TypeVar将无法被后续替换。现在这个问题已经修复。由 Nikita Sobolev 提供补丁。
gh-76846: 修复了在某些情况下
pathlib.PurePath和Path子类的__new__()和__init__()方法未被调用的问题。gh-78530:
asyncio.wait()现在接受生成任务生成器。由 Kumar Aditya 提供补丁。gh-102748:
asyncio.iscoroutine()现在对于生成器返回False,因为asyncio不支持基于旧式生成器的协程。由 Kumar Aditya 提供补丁。gh-102670: 使用新的 math.sumprod() 函数优化了 fmean()、correlation()、covariance() 和 linear_regression()。
gh-102615: Typing: 改进了对基于
ParamSpec泛型的类的通用别名的repr。(使用方括号来表示参数列表。)gh-100112:
asyncio.Task.get_coro()现在在包装一个可等待对象时总是返回一个协程。补丁由 Kumar Aditya 提供。gh-102578: 加速在冻结数据类的非数据类子类上设置或删除可变属性。由于冻结数据类的``__setattr__``和
__delattr__实现,这以前的时间复杂度为*O*(n)。现在时间复杂度为*O*(1)。gh-102519: 在Windows上添加
os.listdrives()、os.listvolumes()和os.listmounts()函数,用于枚举驱动器、卷和挂载点。gh-74468: 提取的
tarfile文件对象的属性名现在保存的是文件本身的文件名,而不是它所在存档的文件名。由Oleg Iarygin提供补丁。gh-102378: 私有辅助方法
inspect._signature_strip_non_python_syntax将不再从输入字符串中去除/。gh-79940: 添加
inspect.getasyncgenstate()和inspect.getasyncgenlocals()。由Thomas Krennwallner提供补丁。gh-102103: 向
dataclasses.make_dataclass()添加module参数,并使由其产生的类可被pickle。gh-102069: 修复自定义数据类的
__weakref__描述符生成。gh-98886: 修复定义具有特定下划线名称字段的数据类时的问题,这些字段未被
dataclasses明确保留。gh-101313: 向webbrowser CLI添加了-h和--help参数。
gh-100372:
ssl.SSLContext.load_verify_locations()在解析DER时不再错误地接受某些尾随数据的情况。gh-89727: 通过使用迭代而非递归重写pathlib.Path.walk,修复在深层目录树上出现的RecursionError。
gh-100131: 向
tempfile.TemporaryDirectory添加了一个可选的delete关键字参数。gh-48330: 添加了
--durations命令行选项,显示N个最慢的测试用例。unittest.TextTestRunner和unittest.TextTestResult构造函数现在接受一个新的 durations 关键字参数。子类应考虑这一点或接受**kwargs。添加了unittest.TestResult.addDuration()方法和unittest.TestResult.collectedDurations属性。(由 Giampaolo Rodola 贡献)
gh-98169: 修复了当
collections.defaultdict出现在属性中时dataclasses.astuple()崩溃的问题。gh-96931: 修复了
ssl.SSLSocket.shared_ciphers()返回不正确结果的问题。gh-95495: 当针对 OpenSSL 3.0 构建时,
ssl模块存在一个错误,该错误将未经认证的 EOF(即没有 close_notify)报告为干净的 TLS 级 EOF。现在它会引发SSLEOFError,与之前版本的 OpenSSL 行为一致。SSLContext上的options属性默认也不再包括OP_IGNORE_UNEXPECTED_EOF。可以设置此选项以指定之前的 OpenSSL 3.0 行为。gh-94684: 现在
uuid.uuid3()和uuid.uuid5()函数支持bytes对象作为它们的 name 参数。gh-94440: 修复了
concurrent.futures.process中的一个错误,即在快速提交并取消一个 future 后,ProcessPoolExecutor关闭可能会挂起。gh-72346: 向
email.utils.localtime()的 isdst 参数添加了弃用警告。
文档¶
gh-103112: 向
http.client.HTTPResponse.read()添加了文档字符串以修复pydoc输出。
测试¶
构建¶
Windows¶
gh-102690: 更新
webbrowser以回退到 Microsoft Edge 而不是 Internet Explorer。gh-99726: 提高 Windows 上统计结果的正确性,并在可用时使用更快的 API。
工具/示例¶
gh-102809:
Misc/gdbinit已被移除。
C API¶
gh-102013: 添加一个新的(不稳定的)C-API 函数,用于使用回调遍历可 GC 对象:
PyUnstable_VisitObjects。
Python 3.12.0 alpha 6¶
发布日期: 2023-03-07
安全性¶
gh-99108: 用来自 HACL* 项目的已验证实现替换内置的 MD5 和 SHA1 哈希库实现。
gh-101727: 将 Windows 和 macOS 二进制发布构建中使用的 OpenSSL 版本更新至 1.1.1t,以解决 CVE 2023-0286、CVE 2022-4303 和 CVE 2022-4303,根据 OpenSSL 2023-02-07 安全公告。
gh-99108: 用来自 HACL* 项目的正式验证、抗侧信道攻击的代码替换内置的
hashlib中原本来自 LibTomCrypt 的 SHA2-384 和 SHA2-512 实现。内置实现仅在 OpenSSL 不提供时才作为后备使用。gh-101283:
subprocess.Popen现在使用更安全的方法在shell=True启动时查找cmd.exe。由 Eryk Sun 基于 Oleg Iarygin 的补丁提供补丁。
核心与内置函数¶
gh-102493: 修复
PyErr_SetObject中标准化语义的回归。gh-102416: 不记忆解析器中自动生成的错误循环规则。由 Pablo Galindo 提供补丁。
gh-102356: 修复了一个在释放深度嵌套的过滤器对象时导致崩溃的 bug。由 Marta Gómez Macías 提供补丁。
gh-102336: 清理 Windows 7 特定的特殊处理。由 Max Bachmann 提供补丁。
gh-102250: 修复了当解释器调用引发异常的
__bool__方法时发生的段错误。gh-102126: 修复在关闭时清除线程状态时如果任何终结器尝试获取运行时头锁导致的死锁。由Kumar Aditya提供补丁。
gh-102027: 在Windows上
getpid不可用时使用GetCurrentProcessId。由Max Bachmann提供补丁。gh-102056: 修复解释器异常打印代码中的错误处理漏洞,该漏洞可能在无限递归时导致崩溃。
gh-101967: 修复在
positional_only_passed_as_keyword函数中创建新列表时可能发生的段错误。gh-101952: 修复在
BUILD_SET操作码创建新集合时可能发生的段错误。gh-74895:
socket.getaddrinfo不再为超出C long范围的int**port**值抛出OverflowError。超出范围的值将由底层的基于字符串的C库API报告。可能会出现socket.gaierrorSAI_SERVICE,或者根本没有错误,因为并非所有平台的C库都会生成错误。gh-101799: 添加
CALL_INTRINSIC_2并用其替代PREP_RERAISE_STAR。gh-101857: 通过将检查范围扩大到linux而不仅仅是glibc来修复Linux系统上的xattr支持检测。这修复了对musl的支持。
gh-84783: 使切片对象可哈希。由Will Bradshaw和Furkan Onder提供补丁。
gh-87849: 更改
SEND指令以将接收者留在堆栈上。这允许SEND的特殊形式跳过C调用链并直接跳转到生成器或协程中的RESUME。gh-101765: 修复在迭代
__reduce__中当builtins.__dict__键的内部访问改变迭代对象时的SystemError / 段错误。gh-101430: 更新
tracemalloc以正确处理对象的预大小。由Donghee Na提供补丁。gh-101696: 在
_PyStaticType_Dealloc中使静态类型的类型版本标签无效,避免因虚假缓存命中导致解释器崩溃的错误。由 Kumar Aditya 提供补丁。gh-101632: 添加一个新的
RETURN_CONST指令。gh-100719: 从生成器(以及协程和异步生成器)对象中移除 gi_code 字段,因为它是多余的。框架已经包含了对代码对象的引用。
gh-98627: 当解释器配置为检查时(且仅在那时),导入扩展模块现在会在扩展不支持多解释器(即未实现 PEP 489 多阶段初始化)时失败。这不适用于主解释器,也不适用于使用
Py_NewInterpreter()创建的子解释器。
库¶
gh-102302: 微优化
inspect.Parameter的哈希处理,将哈希实例所需的时间减少约 40%。gh-101979: 修复了一个错误,其中
argparse.ArgumentParser.add_argument()的metavar参数中的括号被丢弃。由 Yeojin Kim 提供补丁。gh-91038:
platform.platform()现在有布尔默认参数。gh-81652: 将 FreeBSD 的
mmap.MAP_ALIGNED_SUPER和 OpenBSD 的mmap.MAP_CONCEAL常量添加到mmap中。由 Yeojin Kim 提供补丁。gh-101961: 对于二进制模式,
fileinput.hookcompressed()即使值为None也不设置encoding值。由 Gihwan Kim 提供补丁。gh-101936: 如果
HTTPError初始化时没有指定fp参数,则fp的默认值变为io.BytesIO。由 Long Vo 提供补丁。gh-101566: 在 zipfile 中,将 Path 与 zipp 3.14 同步,包括修复在
Path包装后对底层 zipfile 的 extractall 问题。gh-97930: 应用来自 importlib_resources 5.12 的更改,包括修复
MultiplexedPath以支持多个命名空间中的目录 (python/importlib_resources#265)。gh-101997: 升级与 ensurepip 捆绑的 pip wheel (pip 23.0.1)
gh-99108: 当 OpenSSL 不提供时使用的
hashlibSHA2 算法的内置扩展模块,现在位于一个内部_sha2模块中,而不是单独的_sha256和_sha512模块。gh-101892: 可调用迭代器在可调用对象耗尽迭代器但忘记返回哨兵值或引发
StopIteration时不再引发SystemError。gh-87634: 从
functools.cached_property()中移除锁定行为。gh-97786: 修复浮点数到时间转换在极端情况下潜在的未定义行为。
gh-101517: 修复了
bdb使用lineno=None与linecache查找源代码行时导致未处理异常失败的 bug。gh-101773: 为小部件优化
fractions.Fraction。fractions.Fraction构造函数的私有参数_normalize已被移除。gh-101693: 在
sqlite3.Cursor.execute()中,当 命名占位符 与作为 sequence 而不是dict提供的参数一起使用时,现在会发出DeprecationWarning。从 Python 3.14 开始,使用命名占位符与作为序列提供的参数将引发ProgrammingError。 由 Erlend E. Aasland 提供补丁。gh-101446: 更改
collections.OrderedDict的 repr 以使用常规字典格式,而不是键和值的对。gh-101362: 通过更统一地处理参数来加速
pathlib.PurePath的构造。当提供pathlib.Path参数时,我们使用其字符串表示而不是用os.path.join()连接其部分。gh-101362: 通过仅在给出两个或更多参数时调用
os.path.join()来加速pathlib.PurePath的构造。gh-101362: 通过仅在导入 pathlib 时运行路径风格兼容性检查来加速
pathlib.Path的构造。gh-85984: 重构了
pty.fork()的实现以使用os.login_tty()。现在
pty.master_open()和pty.slave_open()会引发DeprecationWarning。它们很久以前就在文档字符串中被弃用,并推荐使用pty.openpty()。gh-101561: 添加了一个新的装饰器
typing.override()。详情见 PEP 698。由 Steven Troxler 提供补丁。gh-101360: 修复
pathlib.PureWindowsPath.match()中的锚点匹配。路径和模式的锚点现在像其他路径部分一样与fnmatch匹配。这使得可以匹配如"*:/Users/*"这样的模式。gh-101277: 从
itertools模块中移除全局状态 (PEP 687)。由 Erlend E. Aasland 提供补丁。gh-100809: 修复
pathlib.Path.absolute()中对驱动器相对路径(如 'C:' 和 'C:foo')的处理。此方法现在使用操作系统 API 来检索驱动器的正确当前工作目录。gh-96764:
asyncio.wait_for()现在使用asyncio.timeout()作为其底层实现。补丁由 Kumar Aditya 提供。gh-88233: 无论 "extra" 字段相对于 zip64 "extra" 的顺序如何,都能正确保留
zipfile中的 "extra" 字段。bpo-23224: 修复在不调用
__init__()的情况下创建lzma.LZMADecompressor和bz2.BZ2Decompressor对象时的段错误,以及修复多次调用lzma.LZMADecompressor、lzma.LZMACompressor、bz2.BZ2Compressor和bz2.BZ2Decompressor对象的__init__()方法时的锁和内部缓冲区泄漏问题。
文档¶
gh-97725: 修复
asyncio.Task.print_stack()对于file=None的描述。由Oleg Iarygin提供补丁。
测试¶
构建¶
gh-99942: 在Android上,静态构建中,embed模式的python-config不再错误地报告要链接的库。
gh-99942: 在Android上,python.pc现在正确地报告要链接的库,与python-config.sh相同。
gh-100221: 修复如果安装目录在
DESTDIR之外已经存在时,make sharedinstall创建安装目录的问题。gh-96821: 明确标记需要定义有符号整数溢出的C扩展模块,并添加一个配置选项
--with-strict-overflow。由Matthias Görgens和Shantanu Jain提供补丁。
Windows¶
gh-102344: 使用
QueryValueEx``实现 ``winreg.QueryValue和使用SetValueEx实现``winreg.SetValue``。由Max Bachmann提供补丁。gh-101881: 在Windows上正确处理非阻塞管道的读写操作。
gh-101881: 在Windows上添加对os.get_blocking()和os.set_blocking()函数的支持。
gh-101849: 确保安装程序能够正确升级现有的
py.exe启动器安装。gh-101763: 更新Windows安装包中捆绑的libffi版本至3.4.4。
gh-101759: 更新Windows安装程序中的SQLite至3.40.1版本。
gh-101614: 正确处理引用
python3_d.dll的调试二进制文件构建的扩展。gh-101196: 通过减少Win32 API调用,Windows上的函数
os.path.isdir、os.path.isfile、os.path.islink``和 ``os.path.exists现在快了13%到28%。
macOS¶
gh-101759: 更新macOS安装程序中的SQLite至3.40.1版本。
C API¶
gh-101907: 移除公共头文件中非标准C++扩展的使用。
gh-99293: 文档说明Py_TPFLAGS_VALID_VERSION_TAG是一个内部特性,不应使用,并将被移除。
gh-101578: 添加
PyErr_GetRaisedException()和PyErr_SetRaisedException()用于保存和恢复当前异常。这些函数返回和接受一个单一的异常对象,而不是现已废弃的PyErr_Fetch()和PyErr_Restore()的三重参数。这减少了出错的可能性,效率也略有提高。添加
PyException_GetArgs()和PyException_SetArgs()作为便捷函数,用于检索和修改传递给异常构造函数的args。gh-91744: 引入了*不稳定C API层*,标记了允许在次要版本中更改而不经过弃用期的API。详情请参阅 PEP 689。
Python 3.12.0 alpha 5¶
发布日期:2023-02-07
安全性¶
gh-99108: 将内置的
hashlib中最初来自LibTomCrypt的SHA2-224和SHA2-256实现替换为来自`HACL* <https://github.com/hacl-star/hacl-star/>`_项目的经过正式验证、抗侧信道攻击的代码。内置实现仅在OpenSSL不提供这些功能时作为备用方案使用。
核心与内置函数¶
gh-92173: 修复
PyEval_EvalCodeEx()中的defs和kwdefs参数以及该函数中的引用泄漏问题。gh-59956: GILState API 现在部分兼容子解释器。之前,
PyThreadState_GET()和PyGILState_GetThisThreadState()会不同步,导致不一致的行为和崩溃。gh-101400: 修复不在循环中的
continue或break异常消息中的错误行号。由 Donghee Na 提供补丁。gh-101372: 修复
is_normalized()以正确处理 UCD 3.2.0 的情况。由 Donghee Na 提供补丁。gh-101266: 修复
sys.getsizeof()对int子类的报告。gh-101291: 将
PyLongObject结构重构为一个普通的 Python 对象头和一个PyLongValue结构。gh-101046: 修复解析器在引发
MemoryError时可能的内存泄漏。由 Pablo Galindo 提供补丁。gh-100762: 在
YIELD_VALUE的 oparg 中记录(虚拟)异常块深度。使用这一点来避免在关闭可以轻松关闭的生成器(和协程)时昂贵的throw()。gh-100982: 添加了一个新的
COMPARE_AND_BRANCH指令。在执行比较紧接着分支时效率更高,恢复了 PEP 659 的设计意图,即特化限于单个指令。gh-100942: 修复了当属性子类覆盖
__new__方法以返回非属性实例时,在 property.getter/setter/deleter 中发生的段错误。gh-100923: 移除
COMPARE_OP指令的mask缓存条目,并将掩码嵌入到 oparg 中。gh-100892: 修复在清除
threading.local时迭代线程状态的竞争。由 Kumar Aditya 提供补丁。gh-91351: 修复了一个案例,其中可重入的导入可能会破坏导入死锁检测代码,并导致从
importlib/_bootstrap中抛出KeyError。除了直接的情况外,当垃圾收集导致发出警告时也可能发生这种情况——就像它收集一个打开的套接字或文件时发生的那样。gh-100726: 优化中等大小整数的
range对象构造。gh-100712: 添加了通过设置
opcode中的ENABLE_SPECIALIZATION=False,然后执行make regen-all来禁用专业化构建 cpython 的选项。
库¶
bpo-32780: 现在将从
ctypes.Structure对象获得的 PEP3118 格式字符串中插入字段间填充,反映它们在内存中的真实表示。gh-101541: [Enum] - 修复伪标志创建。
gh-101570: 升级与 ensurepip 捆绑的 pip wheel(pip 23.0)。
gh-101323: 修复了一个错误,其中如果在解压缩过程中遇到错误,zlib._ZlibDecompressor 不会抛出错误。
gh-101317: 为
asyncio.StreamWriter.start_tls()添加了 ssl_shutdown_timeout 参数。gh-101326: 修复了在将
None作为第二个或第三个参数传递给FutureIter.throw时的回归问题。gh-92123: 使
_elementtree扩展模块适应多阶段初始化 (PEP 489)。由 Erlend E. Aasland 提供补丁。gh-100795: 在
socket中避免潜在的意外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-94518:
_posixsubprocess模块中与组相关的变量被重命名,以强调补充组亲和性是被添加到 fork 中,而不是替换继承的组。由 Oleg Iarygin 提供补丁。gh-101015: 修复
typing.get_type_hints()在'*tuple[...]'和*tuple[...]上的问题。它不应该丢弃Unpack部分。gh-101000: 添加
os.path.splitroot(),它将路径分割成一个 3 元组(drive, root, tail)。这个新函数被pathlib用于将路径构建的性能提高多达三分之一。gh-100573: 修复 Windows 上
asyncio的一个关于命名管道的 bug,其中客户端对管道执行os.stat()会导致服务器中禁用未来请求服务的错误。gh-39615:
warnings.warn()现在能够基于代码文件名前缀跳过堆栈帧,而不仅仅是通过新的skip_file_prefixes关键字参数跳过数字stacklevel。gh-100750: 在平台中将 encoding 关键字参数传递给子进程
gh-100160: 如果没有设置当前事件循环并且决定创建一个,则在
asyncio.DefaultEventLoopPolicy.get_event_loop()中发出弃用警告。gh-96290: 修复
ntpath.splitdrive()中部分和无效 UNC 驱动器的处理,以及在非 Windows 系统上的ntpath.normpath()。现在splitdrive()认为诸如 '\server' 和 '\' 的路径仅包含驱动器,因此在非 Windows 系统上不会被normpath()修改。Windows 系统上normpath()的行为不受影响,因为使用的是原生 OS API。由 Eryk Sun 提供补丁,Barney Gale 有贡献。gh-99952: 修复
ctypes.Structure中from_param()结果大于 C 指针时的引用计数不足问题。gh-67790: 为
fractions.Fraction实例添加浮点样式格式化支持。gh-86682: 使用新增的(内部)函数
sys._getframemodulename()确保运行时创建的集合具有正确的模块名称。gh-60580:
ctypes.wintypes.BYTE的定义从c_byte改为c_ubyte以匹配 Windows SDK。由 Anatoly Techtonik 和 Oleg Iarygin 提供补丁。gh-94518:
_posixsubprocess现在使用保留的-1值初始化所有 UID 和 GID 变量,而不是使用单独的标志。由 Oleg Iarygin 提供补丁。bpo-38941:
xml.etree.ElementTree模块现在在测试xml.etree.ElementTree.Element的真值时发出DeprecationWarning。之前,Python 实现发出FutureWarning,而 C 实现没有发出任何警告。bpo-40077: 将
elementtree类型转换为堆类型。由 Erlend E. Aasland 提供补丁。bpo-29847: 修复了
pathlib.Path接受并忽略关键字参数的 bug。由 Yurii Karabas 提供补丁。gh-77772:
ctypes.CDLL、ctypes.OleDLL、ctypes.WinDLL和ctypes.PyDLL现在接受 路径类对象 作为它们的name参数。由 Robert Hoelzl 提供补丁。
文档¶
gh-88324: 重写
subprocess以强调 stdin、stdout 和 stderr 参数的默认行为。移除关于子进程文件句柄继承的不准确陈述。
测试¶
gh-101334:
test_tarfile已更新,以便在高 UID 下运行时通过。
构建¶
gh-101282: 更新 BOLT 配置,不再使用已弃用的
--split functions用法。由 Donghee Na 提供补丁。gh-101522: 允许使用 MSBuild 属性覆盖 Windows 依赖项的版本和路径。
gh-77532: 小修小补以允许在 Windows 上使用
PlatformToolset=ClangCL构建。gh-101152: 根据 PEP 699,
PyDictObject中的ma_version_tag字段对扩展模块已弃用。访问此字段将在编译时生成编译器警告。此字段将在 Python 3.14 中移除。gh-100340: 允许 wasm-sdk 17 及更高版本使用 -Wno-int-conversion,从而能够针对最新 sdk 构建 WASI 构建。
gh-101060: 在配置中有条件地添加
-fno-reorder-blocks-and-partition。有效修复了使用 Clang 时的--enable-bolt,因为这似乎是一个仅 GCC 的标志。gh-98705: AIX 系统头文件中定义了
__bool__,这会破坏 AIX 中的构建,因此取消定义它。gh-98636: 修复了为
_gdbm模块构建检测gdbm_compat库时的回归。gh-96305:
_aix_support现在使用简单的代码来获取平台详情,而不是在引导过程中使用现在不存在的_bootsubprocess。
Windows¶
gh-101543: 确保注册表中的安装路径仅在标准库尚未通过任何其他方式定位时使用。
gh-101467:
py.exe启动器现在在仅安装单个运行时正确过滤。它还正确处理标签上的前缀匹配,以便-3.1不匹配3.11,但仍然匹配3.1-32。gh-99834: 更新捆绑的 Tcl/Tk 到 8.6.13.0
gh-101135: 恢复从
py.exe启动器启动旧版 32 位版本的能力,当同一版本的 32 位和 64 位安装都可用时。gh-82052: 修复了向控制台屏幕一次性写入超过 32K Unicode 输出可能导致乱码的问题。
gh-100320: 确保在从依赖现有安装提供其模块和标准库副本的不同 Python 副本启动时,使用安装中的
PythonPath注册表键。gh-100247: 恢复对
py.exe启动器在其配置文件中使用完整命令名查找 shebang 命令的支持。
Python 3.12.0 alpha 4¶
发布日期:2023-01-10
核心与内置函数¶
gh-99005: 移除
UNARY_POSITIVE、ASYNC_GEN_WRAP和LIST_TO_TUPLE,用内建函数替代它们。gh-99005: 新增
CALL_INTRINSIC_1指令。移除IMPORT_STAR、PRINT_EXPR和STOPITERATION_ERROR,用CALL_INTRINSIC_1指令替代它们。gh-100288: 移除LOAD_ATTR_METHOD_WITH_DICT专用指令。统计显示它没有用处。
gh-100720: 添加了
_PyFrame_NumSlotsForCodeObject,它返回一个给定代码对象在帧中所需的槽位数量。gh-100719: 从代码对象中移除了co_nplaincellvars字段,因为它是冗余的。
gh-100637: 修正
int.__sizeof__()的计算,以包括0和False的1元素 ``ob_digit``数组。gh-100649: 在fork后更新PyThreadState的native_thread_id字段。
gh-100126: 修复了一个问题,即在其他帧被销毁时,“不完整”帧可能会短暂地对C代码可见,可能导致解释器在运行终结器时损坏或硬崩溃。
gh-87447: 修复了在理解重新绑定检查中,对实际上未重新定义的名称抛出
SyntaxError的问题。现在在
[(b := 1) for a, b.prop in some_iter]中重新分配b是被允许的。根据 PEP 572,重新分配a仍然不被允许。gh-100268: 添加
int.is_integer()以提高int和float之间的鸭子类型兼容性。gh-100425: 通过补偿求和提高了
sum()的准确性。
库¶
gh-100374: 修正了
socket.getfqdn()的错误结果和延迟。由Dominic Socular提供的补丁。
核心与内置函数¶
gh-100357: 将
vars、dir、next、getattr和iter转换为参数诊所。gh-100117: 通过为每个行范围只发出一个条目来改进
codeobject.co_lines()的输出。gh-90043: 在专门为
float值设计COMPARE_OP时处理 NaNs。gh-100222: 将
_Py_CODEUNIT类型定义重新定义为联合体,以描述其布局给 C 编译器,避免类型双关并提高清晰度。gh-99955: 内部编译器函数(在 compile.c 中)现在一致地在错误时返回 -1,成功时返回 0。
gh-100188:
BINARY_SUBSCR_LIST_INT和BINARY_SUBSCR_TUPLE_INT指令不再用于负整数,因为这些指令在遇到负整数时总是失败。gh-99110: 在 frameobject.c 中初始化 frame->previous,以修复访问由
PyFrame_New()创建的帧时的段错误。gh-94155: 改进了代码对象的哈希算法,缓解了一些哈希冲突。
gh-99540:
None现在哈希为一个常数值。这不是需求变更。gh-100143: 当使用
--enable-pystats构建时,统计收集现在默认关闭。要在启动时早期启用它,请传递-Xpystats标志。即使关闭,统计信息现在也会被转储。gh-100146: 改进
BUILD_LIST操作码,使其工作方式类似于BUILD_TUPLE操作码,通过从堆栈中窃取引用而不是重复使用堆栈操作来设置列表元素。实现细节在一个新的私有 API_PyList_FromArraySteal()中。gh-100110: 为元组专门设计
FOR_ITER。gh-100050: 在标记器中搜索不匹配的括号时,尊重现有的错误。由 Pablo Galindo 提供补丁
gh-99554: 在字节码编译期间更高效地打包调试位置表。
gh-98522: 向代码对象添加内部版本号,以便更好地对内部函数和推导式进行版本控制,从而更好地特化这些函数。这一变化对Python和C扩展都是不可见的。
gh-94603: 提高小列表的
list.pop性能。
库¶
核心与内置函数¶
bpo-32782: 从
ctypes长度为0的数组构建memoryview时,现在会报告正确的itemsize,而不是总是给出0的值。
库¶
gh-100833: 通过移除防御性的
volatile限定符来加速math.fsum()。gh-100805: 修改
random.choice()实现,使其再次与NumPy数组一起工作。gh-100813: 添加
socket.IP_PKTINFO常量。gh-100792: 使
email.message.Message.__contains__()速度提高一倍。gh-91851: 对
fractions.Fraction.__round__()、fractions.Fraction.__ceil__()和fractions.Fraction.__floor__()进行微优化。gh-90104: 如果数据类字段定义有循环引用,则在
repr上避免 RecursionError。gh-100689: 通过静态分配
PyExpat_CAPI胶囊来修复pyexpat中的崩溃。gh-100740: 修复
unittest.mock.Mock不尊重以assert前缀开头的属性名的规范。gh-91219: 更改
SimpleHTTPRequestHandler以支持子类化来提供一组不同的索引文件名,而不是使用__init__参数。gh-100690: 不安全的
Mock对象现在将在访问与断言名称匹配但没有assert_前缀的属性时引发AttributeError,例如访问called_once而不是assert_called_once。除了已经对带有前缀assert、assret、asert、aseert和assrt的属性访问发生这种情况之外。gh-89727: 通过使用
isinstance()检查来检查栈顶,简化和优化os.walk()。gh-100485: 添加 math.sumprod() 以计算乘积之和。
gh-86508: 修复
asyncio.open_connection()跳过绑定到不同族的本地地址。由 Kumar Aditya 提供补丁。gh-97930:
importlib.resources.files现在接受模块作为锚点,而不仅仅是包。如果传递了一个模块,资源将解析为该模块相邻的位置(在同一包中或在包根目录中)。该参数已从package重命名为anchor,并为那些通过关键字传递的提供了兼容性填充。此外,新的anchor参数现在是可选的,将默认为调用者的模块。gh-100585: 修复了 importlib.resources.as_file 留下文件指针未关闭的错误。
gh-100562: 将
pathlib.Path.absolute()的性能提高了近 2 倍。这是以pathlib.Path.cwd()的性能退步为代价的,后者在用户代码中一般使用频率较低。gh-100519: 对
http.cookiejar.eff_request_host()进行了小的简化,提高了可读性,并更好地匹配了 RFC 的措辞。gh-100287: 修复了
unittest.mock.seal()与unittest.mock.AsyncMock的交互问题。gh-100488: 添加
Fraction.is_integer()以检查fractions.Fraction是否为整数。这提高了与float和int的鸭子类型兼容性。gh-100474:
http.server现在在尝试提供索引页面之前会检查它是否确实是一个常规文件。这避免了名为index.html的目录引起的问题。gh-100363: 通过移除冗余的
getpid检查来加速asyncio.get_running_loop()。补丁由 Kumar Aditya 提供。gh-78878: 修复了创建
_ctypes.CField实例时崩溃的问题。gh-100348: 通过在
close中移除_read_ready_cb来修复asyncio._SelectorSocketTransport中的引用循环。gh-100344: 为
asyncio.current_task()提供 C 实现,速度提升 4 到 6 倍。gh-100272: 修复 OrderedDict 的 JSON 序列化问题。现在它能保持键的顺序。
gh-83076:
Mock()和AsyncMock()的实例化现在快了 3.8 倍。gh-100234: 为 random.expovariate() 的
lambd参数设置了默认值 1.0。gh-100228: 当从多线程进程调用
os.fork()或os.forkpty()时,可能会引发DeprecationWarning。使用线程进行 fork 是不安全的,可能导致死锁、崩溃和难以察觉的问题。没有警告并不意味着 fork 调用实际上是安全的,因为 Python 可能不知道所有线程。gh-100039: 改进了枚举和标志的签名。
bpo-44592: 修复了
csv.DictWriter中 extrasaction 参数大小写处理不一致的问题。gh-100098: 修复了
tuple子类在被用作枚举值时被强制转换为tuple的问题。gh-85432: 将
datetime.time.strftime()的纯 Python 实现中的 fmt 参数重命名为 format。将datetime.datetime.fromtimestamp()的 t 参数重命名为 timestamp。这些更改意味着纯 Python 实现中的参数名称现在与 C 实现中的参数名称匹配。由 Alex Waygood 提供补丁。gh-98778: 更新
HTTPError,使其即使在fp为None时也能正确初始化。由 Donghee Na 提供补丁。gh-99925: 统一了
json.dumps(float('nan'), allow_nan=False)和json.dumps(float('nan'), allow_nan=False, indent=<SOMETHING>)之间的 JSON 序列化错误消息。现在两者都包括无法序列化的值的表示。gh-89727: 通过调整
os.walk()的实现方式,使其迭代而非递归,修复了在深层目录结构上会发生RecursionError的问题。gh-94943: 向
Enum的__repr__()添加 数据类支持。当从dataclass继承时,仅在成员的repr()的值部分显示字段名称,而不显示 dataclass 的类名。gh-83035: 修复
inspect.getsource()对带有嵌套括号的装饰器调用的处理。gh-99576: 修复
LWPCookieJar和MozillaCookieJar的.save()方法:在重复保存时未截断保存的文件。gh-94912: 添加
inspect.markcoroutinefunction()装饰器,手动将函数标记为协程,以利于iscoroutinefunction()。gh-99482: 从多个 stdlib 模块中移除
Jython部分兼容性代码。gh-99433: 修复模块中对
types.MethodWrapperType的doctest失败。gh-85267: 对
inspect.signature()处理__text_signature__的多项改进。 - 修复了inspect.signature()丢弃参数的情况 - 修复了inspect.signature()引发tokenize.TokenError的情况 - 允许inspect.signature()理解涉及常量二元运算的默认值 -inspect.signature()文档说明仅引发TypeError或ValueError,但有时会引发RuntimeError。这些情况现在会引发ValueError- 移除了一个死代码路径gh-91166: 优化
asyncio以避免在写入套接字时过度复制,并在平台支持时使用sendmsg()。由 Kumar Aditya 提供补丁。gh-98030: 从Linux添加缺失的TCP套接字选项:
TCP_MD5SIG,TCP_THIN_LINEAR_TIMEOUTS,TCP_THIN_DUPACK,TCP_REPAIR,TCP_REPAIR_QUEUE,TCP_QUEUE_SEQ,TCP_REPAIR_OPTIONS,TCP_TIMESTAMP,TCP_CC_INFO,TCP_SAVE_SYN,TCP_SAVED_SYN,TCP_REPAIR_WINDOW,TCP_FASTOPEN_CONNECT,TCP_ULP,TCP_MD5SIG_EXT,TCP_FASTOPEN_KEY,TCP_FASTOPEN_NO_COOKIE,TCP_ZEROCOPY_RECEIVE,TCP_INQ,TCP_TX_DELAY.gh-88500: 减少了
urllib.parse.unquote()和urllib.parse.unquote_to_bytes()在大值上的内存使用。gh-96127:
inspect.signature在使用模拟对象调用时会引发TypeError。现在它正确地返回(*args, **kwargs)作为推断签名。gh-95882: 修复了
asynccontextmanager()中的3.11回归问题,该问题导致它传播带有不正确回溯的异常;并修复了contextmanager()中的3.11回归问题,该问题导致它为StopIteration传播带有不正确回溯的异常。gh-78707: 弃用向
pathlib.PurePath.relative_to()和is_relative_to()传递多于一个位置参数。bpo-24132: 使
pathlib.PurePath和Path可子类化(初始为私有)。之前,尝试实例化一个子类会引发AttributeError。由Barney Gale提供补丁。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类型的声明。bpo-25377: 在 help(os.chmod) 和 help(os.fchmod) 中阐明 mode 参数的八进制格式使用。
测试¶
构建¶
gh-100540: 移除了
configure选项--with-system-ffi;现在在所有非 Windows 平台上,libffi必须始终由系统提供。该选项在非 Darwin 平台上多个版本以来已无效果,而在 3.11 版本中仅有一个不明显的作用,即调用pkg-config来查找libffi且从未设置-DUSING_APPLE_OS_LIBFFI。现在在 Darwin 平台上,configure将首先检查操作系统libffi,如果未找到,则回退到与其他平台相同的处理方式。gh-88267: 当核心作为静态构建时,避免在链接的 Windows 应用程序中导出 Python 符号。
bpo-41916: 允许覆盖 ac_cv_cxx_thread,以便交叉编译的 Python 可以为 CXX 设置 -pthread。
Windows¶
gh-100180: 将 Windows 安装程序更新至 OpenSSL 1.1.1s。
gh-99191: 在
PC/_wmimodule.cpp中使用_MSVC_LANG >= 202002L而不是不太精确的_MSC_VER >=1929来更准确地测试 C++20 支持。gh-79218: 为 Mingw-w64 64bit 定义
MS_WIN64,修复 cython 编译失败。gh-99941: 确保
asyncio.Protocol.data_received()接收一个不可变的bytes对象(如文档所述),而不是bytearray。bpo-43984: 现在,
winreg.SetValueEx()在转换错误的情况下会保持目标值不变。此前,此类错误会写入-1。bpo-34816: 现在,
hasattr(ctypes.windll, 'nonexistant')返回False而不是抛出OSError。
macOS¶
工具/示例¶
bpo-45256: 修复了一个在
python-gdb.py中当py-locals在没有帧的情况下使用时会导致抛出AttributeError的 bug。gh-100342: 在 Argument Clinic 的
*args解析中添加了对可能分配失败的缺失NULL检查。
C API¶
Python 3.12.0 alpha 3¶
发布日期:2022-12-06
安全性¶
gh-100001:
python -m http.server不再允许垃圾请求中发送的终端控制字符被打印到 stderr 服务器日志中。这是通过更改
http.serverBaseHTTPRequestHandler的.log_message方法实现的,该方法在打印之前将控制字符替换为\xHH十六进制转义。
核心与内置函数¶
gh-99891: 修复了分词器中的一个 bug,该 bug 在显示源代码第一行发生的语法警告时可能导致无限递归。由 Pablo Galindo 提供补丁。
gh-91054: 添加
PyCode_AddWatcher()和PyCode_ClearWatcher()API,用于注册回调以接收代码对象创建和销毁的通知。gh-99729: 修复一个问题,该问题可能导致帧在销毁时对 Python 代码可见,可能引发内存损坏或解释器硬崩溃。
gh-99708: 修复编译器在遇到空体块的 if 表达式时崩溃的 bug。
gh-99578: 修复
_imp.create_builtin()在第一个子解释器为模块builtins和sys创建后的引用 bug。由 Victor Stinner 提供补丁。gh-99581: 修复了一个 bug,该 bug 会在标记器从文件中复制缺少换行符且长度与可用标记器缓冲区相同的行时导致缓冲区溢出。由 Pablo Galindo 提供补丁。
gh-99553: 修复
ExceptionGroup子类可以包装BaseException的 bug。
库¶
核心与内置函数¶
gh-99377: 为线程创建和清除操作添加审计事件。
gh-98686: 移除
BINARY_OP_GENERIC和COMPARE_OP_GENERIC的“特化”。gh-99298: 移除属性特化的剩余错误路径,并拒绝在尚未调用
PyType_Ready()的类型上进行属性访问特化。gh-91053: 优化解释器和 JIT 编译器可能需要在函数被修改时使内部元数据无效。此更改增加了提供回调的能力,该回调将在每次函数创建、修改或销毁时被调用。
gh-90994: 改进调用参数语法错误时的错误信息。以下三种情况被覆盖:- 未给命名参数赋值,例如
foo(a=)。- 给星号参数赋值,例如foo(*args=[0])。- 给双星号关键字参数赋值,例如foo(**kwarg={'a': 0})。bpo-45026: 优化
range对象迭代器。现在对包含大数的范围进行迭代更小、更快。更小的 pickle,更快的 unpickling。bpo-31718: 当调用未初始化的
io.IncrementalNewlineDecoder对象的方法时,抛出ValueError而不是SystemError。由 Oren Milman 提供补丁。
库¶
gh-100001: 在 http.server BaseHTTPRequestHandler.log_message 中也对 s 进行转义,以便技术上可以解析该行并重构原始数据是什么。没有这个,xHH 对于我们放入的十六进制替换或原始请求行中的字符 r"x" 来说是模糊的。
gh-99957: 向
typing.dataclass_transform()添加frozen_default参数。gh-79033: 修复
asyncio.Server.wait_closed()以实际执行文档承诺的操作——在关闭服务器后等待所有现有连接完成。gh-51524: 修复在调用 trace.CoverageResults 时使用有效的 infile 时的错误。
gh-99645: 修复
unittest.TestCase中处理类清理时的错误。现在addClassCleanup()为不同的TestCase子类使用单独的列表,而doClassCleanups()只清理特定的类。gh-99508: 修复在调用
_imp.source_hash()时Lib/importlib/_bootstrap_external.py中的TypeError。gh-66285: 修复
asyncio不在分叉进程中共享事件循环和信号 wakeupfd。由 Kumar Aditya 提供补丁。gh-97001: 在调用 termios API 时释放 GIL 以避免阻塞线程。
gh-92647: 使用枚举的最终状态来确定功能API的查找或创建分支。
gh-99388: 向
asyncio.run()添加 loop_factory 参数,允许指定自定义事件循环工厂。由 Kumar Aditya 提供补丁。gh-99341: 修复
ast.increment_lineno(),使其在更改行号时也能覆盖ast.TypeIgnore。gh-99382: 在包含
TypeVarTuple和一个或多个TypeVar的用户泛型中检查替换中的参数数量。gh-99379: 修复泛型别名中
ParamSpec后跟TypeVarTuple的替换问题。gh-99344: 修复用户泛型中
TypeVarTuple和ParamSpec一起替换的问题。gh-99284: 从
ctypes中移除_use_broken_old_ctypes_structure_semantics_这个未经测试且未文档化的旧hack。gh-99201: 如果在 Windows 上没有设置
HAVE_DYNAMIC_LOADING,初始化配置变量时修复IndexError。gh-99240: 通过将内存清理提取到新的
post_parsing部分来修复 Argument Clinic 的str_converter中的双重释放错误。gh-64490: 修复 Argument Clinic 中参数被打包到元组时的引用计数错误。
gh-99029:
pathlib.PurePath.relative_to()现在将裸的 Windows 驱动器路径视为相对路径。这使其行为与 pathlib 的其他部分保持一致。gh-98253: typing 模块的实现现在对二进制扩展模块中的引用泄漏更加健壮。
以前,基于类型化 C API 的扩展模块中的引用泄漏可能会泄漏 typing 模块的内部,这反过来又可能在几乎所有其他具有类型化函数签名的包中引入泄漏。虽然 typing 包不是问题的原始来源,但这种非局部依赖性加剧了大型项目的调试难度,因此实现进行了更改,通过提供更好的隔离来减少危害。
gh-98458: 修复 unittest 中当引发自引用链式异常时的无限循环问题
gh-93453:
asyncio.get_event_loop()和其他许多asyncio函数,如asyncio.ensure_future()、asyncio.shield()或asyncio.gather(),以及asyncio.BaseDefaultEventLoopPolicy的get_event_loop()方法,现在在没有运行的事件循环且当前事件循环未设置时调用会引发RuntimeError。以前它们会隐式创建并设置一个新的当前事件循环。如果当前事件循环已设置但没有运行的事件循环,则不再发出DeprecationWarning。gh-97966: 在
uname_result上,恢复了_fields和_asdict包括所有六个属性(包括processor)的期望。gh-98248: 在
struct.pack()中,当其整数参数不在范围内时,提供信息性错误消息。gh-98108: 如果其初始化参数是可pickle的(例如文件系统路径),则
zipfile.Path现在可pickle。gh-98098: 从 zipfile 和 test_zipfile 模块创建包,分离
zipfile.Path功能。gh-82836: 修复
ipaddress模块中的is_private属性。以前非私有网络(0.0.0.0/0)会从此方法返回True;现在它们正确地返回False。gh-96828: 添加一个
OP_ENABLE_KTLS选项,用于启用内核 TLS (kTLS)。由 Illia Volochii 提供补丁。gh-88863: 为了避免
asyncio.open_connection()引发时出现明显的内存泄漏,打破由局部异常和 future 实例(其成员变量为异常实例)生成的引用循环。由 Dong Uk, Kang 提供补丁。gh-91078:
TarFile.next()现在在调用空的 tarfile 时返回None。bpo-47220: 文档化
WeakMethod的可选 callback 参数。由 Géry Ogam 提供补丁。bpo-44817: 在使用 ntpath.realpath() 时忽略 WinError 53 (ERROR_BAD_NETPATH)、65 (ERROR_NETWORK_ACCESS_DENIED) 和 161 (ERROR_BAD_PATHNAME)。
bpo-41260: 将
datetime.date.strftime()纯 Python 实现中的 fmt 参数重命名为 format。bpo-15999: 现在所有内置函数接受任何类型的参数,而不仅仅是
bool和int用于布尔参数。
文档¶
gh-88330: 改进了 importlib.resources 文档中对资源是什么的描述。
gh-92892: 文档说明在 macOS/arm64(以及其他可能的平台)上使用 ctypes 调用可变参数函数需要特别注意。
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-99741: 我们已经为内部(用于测试)的 _xxsubinterpreters 模块实现了多阶段初始化(PEP 489/630/687)。
gh-99659:
test_sqlite3中的可选大内存测试现在在传递过大的字符串和/或 blob 时捕获正确的sqlite.DataError异常类型。gh-99593: 为 Unicode C API 添加测试。
gh-96002: 为 Argument Clinic 添加功能测试。
构建¶
gh-99086: 修复 configure 检查中的
-Wimplicit-int、-Wstrict-prototypes和-Wimplicit-function-declaration编译器警告。gh-99337: 修复在 macOS 上使用 GCC 12 时的编译问题。
gh-99289: 在Makefile中添加
COMPILEALL_OPTS变量以覆盖make install中的compileall选项(默认:-j0)。同时将compileall命令合并为一个命令,一次性为所有优化级别(0、1、2)构建.pyc文件。由Victor Stinner提供补丁。gh-98872: 修复了Python 3.11中
Programs/_freeze_module.c可能存在的文件描述符泄漏问题。gh-88226: 在
Python/ceval.c中始终定义TARGET_*标签,即使USE_COMPUTED_GOTOS被禁用。这样可以在(例如)``gdb`` 中在这些标签处设置断点。
Windows¶
gh-99345: 使用更快的初始化函数来检测Windows Store包的安装位置
gh-98629: 修复Windows上
sys.version和sys._git的初始化问题gh-99442: 修复当
argv[0]不包含文件扩展名时 Python 安装管理器 中的处理问题。bpo-40882: 修复Windows上
multiprocessing.shared_memory.SharedMemory中的内存泄漏问题。
macOS¶
工具/示例¶
gh-64490: Argument Clinic varargs 错误修复
修复
_PyArg_UnpackKeywordsWithVararg()中的越界错误。修复了允许在clinic.py中有多个varargs的错误检查。
修复生成代码中
noptargs的错误计算。当存在vararg参数但没有可选参数时,不生成
noptargs。
C API¶
gh-98680:
PyBUF_*常量被标记为Python 3.11+的有限API的一部分。这些在3.11.0版本中可用,定义了Py_LIMITED_API为3.11,并且是使用缓冲区API所必需的。gh-99612: 修复
PyUnicode_DecodeUTF8Stateful()对于仅ASCII数据的问题:*consumed未被设置。gh-47146:
structmember.h头文件已被弃用。其未弃用的内容现在只需包含Python.h即可使用,如果缺少Py_前缀则会添加。(已弃用的内容包括T_OBJECT,T_NONE, 和无操作标志。)由 Petr Viktorin 提供补丁,基于 Alexander Belopolsky 和 Matthias Braun 的早期工作。
Python 3.12.0 alpha 2¶
发布日期:2022-11-14
安全性¶
gh-98433: 用于
socket或asyncio相关名称解析函数的 DNS 主机名的 IDNA 编解码器解码器不再涉及二次算法。这防止了如果解码涉及双向字符的超长主机名时可能导致的 CPU 拒绝服务。某些协议,如urllibhttp3xx重定向,可能允许攻击者提供这样的名称。IDNA 编码的 DNS 名称中的单个标签现在在 IDNA 解码期间如果超过 1024 个 Unicode 字符会早期引发错误,因为每个解码的 DNS 标签必须为 63 或更少的字符,并且整个解码的 DNS 名称限制为 255。只有呈现主要由 RFC 3454 第 3.1 节 "无"字符组成的主机名或标签的应用程序才会遇到这个新限制。另请参见 RFC 5894 第 6 节和 RFC 3491。
gh-98739: 更新捆绑的 libexpat 到 2.5.0
核心与内置函数¶
gh-81057: 文档明确指出
PyImport_Inittab,PyImport_AppendInittab()和PyImport_ExtendInittab()不应在已调用Py_Initialize()之后再被使用。 我们现在对这两个函数强制执行此要求。 此外,运行时现在使用PyImport_Inittab内部副本,以防止修改。gh-99298: 修复可能导致某些字节码指令错误处理的问题。
gh-99254: 编译器现在会从代码对象中移除所有未使用的常量(除了第一个可能是文档字符串的常量)。
gh-99205: 修复了阻止
PyThreadState和PyInterpreterState内存被正确释放的问题。gh-81057: 持有分配器状态的18个全局C变量已被移动到
_PyRuntimeState。这是一个严格内部更改,行为无变化。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-98686: 将自适应操作码逻辑合并到每个指令的非快速化变体中,并将
EXTENDED_ARG_QUICK中的逻辑合并到EXTENDED_ARG。通过这些更改,代码对象创建时发生的快速化现在仅负责初始化预热计数器和插入超级指令。gh-99103: 修复当源代码行包含Unicode字符时,专用回溯锚点的错误报告位置。
gh-99139: 改进对实例的
NameError异常的错误建议。现在,如果在方法中引发NameError且实例具有与异常中名称完全相等的属性,建议将包括self.<NAME>而不是方法范围内最接近的匹配。由Pablo Galindo提供补丁。gh-98401: 在Python 3.11中已弃用的八进制转义值大于
0o377(例如"\477") ,现在会产生SyntaxWarning,而不是DeprecationWarning。在未来的Python版本中,这些最终将成为SyntaxError。由Victor Stinner提供补丁。gh-98401: 不是有效转义序列的反斜杠字符对现在会生成
SyntaxWarning,而不是DeprecationWarning。例如,re.compile("\d+\.\d+")现在会发出SyntaxWarning("\d"是无效的转义序列) ,使用原始字符串进行正则表达式:re.compile(r"\d+\.\d+")。在未来的Python版本中,最终将引发SyntaxError,而不是SyntaxWarning。由Victor Stinner提供补丁。gh-96793: 在字节码中处理生成器或协程中引发的StopIteration和StopAsyncIteration,而不是在包装的C代码中处理。
gh-98931: 当用户键入
import x from y而不是from y import x时,改进SyntaxError错误消息。由Pablo Galindo提供补丁gh-98852: 修复包含裸泛型类型或类似
TypeVar类型的类型别名的订阅:例如``tuple[A, T][int]``和tuple[TypeVar, T][int],其中A是泛型类型,T是类型变量。gh-98925: 降低WASI上marshal的递归深度以支持(开发中的)wasmtime 2.0。
gh-98783: 修复在调试模式下使用
str子类而不是str本身时的多次崩溃。gh-98811: 使用完整的源位置来简化检测不在文件开头的
__future__导入。同时修正了一种情况下引发的异常中的偏移量,该偏移量偏差一个并阻碍了高亮。gh-96793: 为生成器添加
FOR_ITER的特殊化。保存从调用者中的FOR_ITER指令到生成器中的RESUME的多层调度和检查。gh-98586: 将方法
PyObject_Vectorcall()和PyObject_VectorcallMethod()以及辅助宏常量PY_VECTORCALL_ARGUMENTS_OFFSET添加到 Limited API 中。这些函数的可用性使得二进制扩展模块能够进行更高效的 PEP 590 向量调用,避免了参数装箱/拆箱的开销。
gh-99257: 修复了一个问题,即当通过无效类型的实例访问时,成员描述符(如
__slots__的描述符)可能会行为不正确或崩溃,而不是引发TypeError。gh-93143: 解释器现在不会更改
co_code,而是会显示RuntimeWarning并将None赋给在跟踪执行跳转或del语句后未绑定的任何快速局部变量。gh-96421: 当通过
PyEval_EvalFrameEx()或相关的 C-API 函数从 C 代码调用 Python 代码时,会在调用堆栈中插入一个垫片帧。这发生在_PyEval_EvalFrameDefault()函数中。额外的帧对所有 Python 和大多数 C 扩展应该是不可见的,但进程外分析器和调试器需要知道它。这些垫片帧可以通过检查frame->owner == FRAME_OWNED_BY_CSTACK来检测。使用 PEP 523 实现自己的解释器的扩展需要了解这个垫片帧以及对
RETURN_VALUE、YIELD_VALUE和RETURN_GENERATOR语义的更改,这些操作现在会清除帧。
构建¶
核心与内置函数¶
gh-98686: 加速所有代码对象,并更积极地专门化自适应字节码指令。
gh-91058: 当
from <module> import <name>失败时,引发的ImportError现在会根据<module>中可用的名称提供<name>的建议值。由 Pablo Galindo 提供补丁。gh-90716: 添加 _pylong.py 模块。它包括可用于对多位数整数进行操作的渐近更快算法。longobject.c 使用它来加速一些操作。
gh-95389: 在
socket中公开ETH_P_ALL和一些 ETHERTYPE_* 常量。由 Noam Cohen 提供补丁。
库¶
gh-99418: 修复
urllib.parse.urlparse()中的错误,该错误会导致以数字、加号或减号开头的 URL 方案被错误解析。gh-94597: 弃用
asyncio.AbstractChildWatcher,将在 Python 3.14 中移除。由 Kumar Aditya 提供补丁。gh-99305: 提高
secrets.token_hex()的性能。gh-74044: 修复了
inspect.signature()报告装饰方法参数不正确的问题。gh-99275: 修复
ctypes中的SystemError,当__initsubclass__期间未设置异常时。gh-99277: 移除
asyncio.sslproto中旧版本的_SSLProtocolTransport.get_write_buffer_limits。gh-99248: 修复 verify() 中负数失败的问题。
gh-99155: 修复
statistics.NormalDist使用0和1协议时的 pickle 问题。gh-93464:
enum.auto()现在与其他赋值值结合使用时能正确激活。例如,ONE = auto(), 'some text'现在会评估为(1, 'some text')。gh-99134: 将捆绑的 pip 更新到版本 22.3.1。
gh-92584: 移除
distutils包。它在 Python 3.10 中通过 PEP 632 "弃用 distutils 模块" 被弃用。对于仍在使用distutils且无法更新到其他工具的项目,可以安装setuptools项目:它仍然提供distutils。由 Victor Stinner 提供补丁。gh-98999: 现在
_pyio与_io一致,在关闭的缓冲区上执行方法时会引发ValueError。gh-83004: 清理
_zoneinfo中模块初始化失败时的引用泄漏。gh-83004: 清理
_pickle中模块初始化失败时的引用泄漏。gh-83004: 清理
_io中模块初始化失败时的引用泄漏。gh-98897: 修复当两个点不具有相同维度时
math.dist()中的内存泄漏。由 Kumar Aditya 提供补丁。gh-98878: 在
traceback中提供名称建议时使用框架绑定的内置函数,以防止当__builtins__不是字典时崩溃。gh-98139: 在
importlib._bootstrap中,增强命名空间包的 repr 为<module 'x' (namespace) from ['path']>。gh-90352: 修复
_SelectorDatagramTransport以继承DatagramTransport在asyncio中。由 Kumar Aditya 提供补丁。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-98658:
array.array类现在支持下标操作,使其成为 泛型类型`。gh-98284: 改进了
abc.ABC实例未定义抽象方法的TypeError消息。缺失方法的名称用单引号包围以突出显示。gh-96151: 允许
BUILTINS作为冻结数据类的有效字段名。gh-98086: 确保
patch.dict()可以应用于异步函数。gh-94172:
ftplib: 移除了FTP_TLS.ssl_version类属性:改用 context 形参。补丁由 Victor Stinner 提供gh-94172: 从
ftplib、imaplib、poplib和smtplib模块中移除了 keyfile 和 certfile 参数,以及从http.client模块中移除了 key_file、cert_file 和 check_hostname 参数,这些参数自 Python 3.6 起已被弃用。改用 context 参数(在imaplib中为 ssl_context)。由 Victor Stinner 提供补丁。gh-83638: 向
sqlite3.Connection添加了autocommit属性,并向sqlite3.connect()添加了 autocommit 参数,以控制符合 PEP 249 的 transaction handling。补丁由 Erlend E. Aasland 提供。gh-92452: 修复了一个可能导致
sysconfig.get_config_var()在多线程程序中错误返回None的竞态条件。gh-91803: 修复了在使用
unittest.mock.create_autospec()创建的对象的方法后,再用unittest.mock.seal()函数密封时出现的错误。bpo-38523:
shutil.copytree()现在递归应用 ignore_dangling_symlinks 参数。bpo-40358: 在
pathlib.PurePath.relative_to()中添加了 walk_up 参数。bpo-36267: 修复了当
store_true动作被赋予显式参数时,在argparse.ArgumentParser中出现的 IndexError。
文档¶
gh-98832: 修改了
pathlib.Path.iterdir()文档字符串的措辞。gh-97966: 更新了 uname 文档,以澄清 platform 属性的特殊性质,并指出其何时成为晚期绑定。
测试¶
gh-98903: Python 测试套件现在如果没有运行任何测试,将以退出码 4 失败。这应有助于检测测试名称和测试方法中的拼写错误。
gh-98713: 修复了
typing测试中的一个错误,该错误中一个依赖 CPython 特定实现细节的测试未被装饰为@cpython_only,也未在其他实现上跳过。gh-87390: 为 PEP 646 添加了星号解包测试,以及其他一些杂项 PEP 646 测试。
gh-96853: 将
Py_Initialize(以及Py_InitializeEx) 的显式覆盖添加回嵌入测试(Python 3.11 中所有其他嵌入测试已迁移到Py_InitializeFromConfig)。bpo-34272: 一些 C API 测试被移到了新的 Lib/test/test_capi/ 目录。
构建¶
gh-99086: 修复了在 configure 检查
PTHREAD_SCOPE_SYSTEM时的-Wimplicit-int编译器警告。gh-99016: 修复了使用
PYTHON_FOR_REGEN=python3.8时的构建问题。gh-97731: 为
make docclean指定了源位置的完整路径(跨构建所需)。gh-98949: 删除了未使用的
readelf构建依赖。gh-98989: 如果可用,使用
python3.11进行再生和冻结。gh-98831: 在
Tools/cases_generator中添加新工具,用于从操作码定义列表生成解释器切换语句。这仅影响添加、修改或删除指令定义。指令定义现在以`自定义DSL(开发中)<https://github.com/faster-cpython/ideas/blob/main/3.12/interpreter_definition.md>`__的形式存在于``Python/bytecodes.c``中。该工具读取此文件并写入Python/generated_cases.c.h,然后由``Python/ceval.c``包含以提供主解释器切换的大多数情况。gh-98817: 删除PCbuild/lib.pyproj:它不被用于任何用途,仅对Visual Studio用户(他们大多数人可能甚至不知道它的存在)提供微小的便利,并且需要大量维护工作来保持更新。
gh-98776: 为树外构建修复
make regen-test-levenshtein。gh-98707: 如果
--with-system-libmpdec传递给 configure,则不使用供应商提供的libmpdec头文件。如果--with-system-expat传递给 configure,则不使用供应商提供的libexpat头文件。
Windows¶
gh-98689: 将Windows构建更新至zlib v1.2.13。v1.2.12有 CVE 2022-37434,但Python未使用易受攻击的
inflateGetHeaderAPI。gh-98790: 假设缺失的
DLLs目录意味着标准扩展模块位于可执行文件的目录中。gh-98745: 更新
py.exe启动器,默认安装3.11,按请求安装3.12。gh-98692: 修复 Python 安装管理器 忽略无法识别的shebang行而不是将它们视为本地路径的问题。
gh-94328: 更新Windows安装程序以使用SQLite 3.39.4。
macOS¶
gh-94328: 更新macOS安装程序至SQLite 3.39.4。
C API¶
gh-98724:
Py_CLEAR、Py_SETREF和Py_XSETREF宏现在只评估它们的参数一次。如果参数有副作用,这些副作用不再重复。由Victor Stinner提供补丁。gh-98978: 修复在
Py_SetPythonHome(NULL)、Py_SetProgramName(NULL)和``_Py_SetProgramFullPath(NULL)``函数调用中的释放后使用问题。问题由Benedikt Reinartz报告,由Victor Stinner提供补丁。gh-98410: 将
getbufferproc和releasebufferproc添加到稳定API中。gh-98610: 子解释器的一些可配置能力已经改变。它们现在总是允许子进程(
subprocess),而之前子进程可以被子解释器选择性地禁止。现在可以禁止os.exec()。禁止守护线程现在被支持。禁止所有线程仍然被允许,但默认情况下从不这样做。请注意,可选限制仅通过``_Py_NewInterpreterFromConfig()`` 可用,这不是公共API。它们不影响主解释器,也不影响Py_NewInterpreter()。gh-98608: 添加了
_PyInterpreterConfig并将_Py_NewInterpreter()重命名为``_Py_NewInterpreterFromConfig()``。"isolated_subinterpreters"参数现在是一个捕获之前行为的细粒度配置。请注意,这些都是"私有"API。gh-96853:
Py_InitializeEx现在在初始化解释器后正确调用PyConfig_Clear(遗漏没有导致内存泄漏只是因为包装函数没有填充任何动态分配的配置字段)gh-91248: 添加
PyFrame_GetVar()和PyFrame_GetVarString()函数以通过名称获取框架变量。由Victor Stinner提供补丁。
Python 3.12.0 alpha 1¶
发布日期: 2022-10-25
安全性¶
gh-97616: 修复列表乘以整数(
list *= int)的问题:当新分配的长度接近最大大小时检测整数溢出。问题由Jordan Limor报告,由Victor Stinner提供补丁。gh-97514: 在Linux系统上,
multiprocessing模块恢复使用基于文件系统的Unix域套接字与 forkserver 进程通信,而不是使用Linux抽象套接字命名空间。只有选择使用 "forkserver"启动方法 的代码会受到影响。抽象套接字没有权限设置,可能允许同一`网络命名空间 <https://man7.org/linux/man-pages/man7/network_namespaces.7.html>`_(通常是整个系统)内的任何用户向multiprocessing的 forkserver 进程注入代码。这是一个潜在的特权提升风险。基于文件系统的套接字权限将这一行为限制为 forkserver 进程的用户,这是Python 3.8及更早版本的默认行为。
这修复了Linux的 CVE 2022-42919 漏洞。
gh-87389:
http.server: 修复了HTTP服务器中当URI路径以//开头时的开放重定向漏洞。漏洞由Hamza Avvan发现并提出了初步修复方案。gh-79096: LWPCookieJar和MozillaCookieJar创建的文件模式改为600而非644(Microsoft Windows不受影响)
gh-92888: 修复了在某些情况下访问底层缓冲区时的
memoryview释放后使用问题。gh-68966: 已弃用的mailcap模块现在拒绝将不安全的文本(文件名、MIME类型、参数)注入到shell命令中。它将发出警告并视为未找到匹配(或对于测试命令,视为测试失败),而不是使用此类文本。
核心与内置函数¶
gh-98374: 抑制help()命令无效查询时的ImportError。由Donghee Na提供补丁。
gh-98461: 修复了列表、集合和字典推导式以及生成器表达式在字节码中的源位置。
gh-98354: 为传递给
_imp.create_builtin()函数的spec参数的name属性添加了Unicode检查。gh-98398: 修复了'assert'字节码的源位置。
gh-98390: 通过将布尔表达式的子表达式范围缩小到子表达式本身的范围,修复了布尔表达式的子表达式位置问题。
gh-98254: 当解释器将
NameError提升到顶层时,标准库中的模块现在可能作为错误信息的一部分被建议。由 Pablo Galindo 提供补丁。gh-97997: 向分词器状态添加运行列偏移,以避免使用指针算术计算 AST 列信息。
gh-97973: 修改分词器以返回解析器所需的所有必要信息,以便解析器无需通过指针算术计算这些信息来设置 AST 节点中的位置信息。
库¶
gh-96078:
os.sched_yield()现在在调用 sched_yield(2) 时释放 GIL。由 Donghee Na 提供补丁。
核心与内置函数¶
gh-97912: 编译器现在在确定哪些指令应使用
LOAD_FAST_CHECK操作码时避免了二次行为。gh-97002: 修复了一个问题,其中多个帧对象可能由同一个解释器帧支持,可能导致内存损坏和解释器的硬崩溃。
gh-97943: 错误修复:
PyFunction_GetAnnotations()应该返回一个借用引用。它之前返回了一个新的引用。gh-97922: 垃圾收集器现在只在 Python 字节码评估循环的 eval breaker 机制上运行,而不是在对象分配上。GC 也可以在调用
PyErr_CheckSignals()时运行,因此需要在长时间内不执行任何 Python 代码的 C 扩展也有机会定期执行 GC。gh-65961: 当
__package__与__spec__.parent不同时,发出DeprecationWarning而不是ImportWarning。同时移除计划中被移除的
importlib.util.set_package()。gh-97850: 长期弃用的
module_repr()现在应该完全被淘汰。gh-86298: 在
warnings.warn_explicit()咨询模块的加载器的情况下,当m.__loader__与m.__spec__.loader不同时,发出DeprecationWarning。gh-97779: 确保所有Python框架对象都由“完整”框架支持。
gh-91052: 添加API以订阅选定字典的修改事件。
gh-97752: 修复访问新创建的生成器或协程框架的
f_back成员时可能出现的数据损坏或崩溃问题。gh-97591: 修复了
Exception.__setstate__()中缺少的incref/decref对。补丁由Ofey Chan提供。gh-97670: 移除
sys.getdxp()函数和Tools/scripts/analyze_dxp.py脚本。DXP代表“动态执行对”。它们与DYNAMIC_EXECUTION_PROFILE和DXPAIRS宏相关,这些宏已在Python 3.11中移除。现在可以通过./configure --enable-pystats构建Python以收集Python操作码的统计数据。由Victor Stinner提供补丁。gh-94526: 修复用于初始化Python启动时
sys.path的Python路径配置。路径不再编码为UTF-8/strict以避免如果包含代理字符时出现编码错误(字节路径使用surrogateescape错误处理程序解码)。由Victor Stinner提供补丁。gh-96670: 解析器现在在解析包含空字节的源代码时引发
SyntaxError。由Pablo Galindo提供补丁。gh-96975: 修复当调用
PyEval_GetFrame()时最顶层的Python框架处于部分初始化状态时发生的崩溃。gh-96848: 修复命令行解析:当
PYTHONINTMAXSTRDIGITS环境变量设置为有效限制时,拒绝没有值的-X int_max_str_digits选项(无效)。由Victor Stinner提供补丁。gh-95921: 修复用作分支条件的链式比较的过于宽泛的源位置信息。
库¶
gh-96821: 修复
audioop.c中的未定义行为。
核心与内置函数¶
gh-96821: 修复
_testcapimodule.c中的未定义行为。gh-95778: 当整数超过限制时引发
ValueError时,在错误消息中提到sys.set_int_max_str_digits()函数。由 Victor Stinner 提供补丁。gh-96387: 在 Python 退出时,有时持有 GIL 的线程会永远等待一个(通常是守护线程)请求放弃 GIL 的线程,而该线程已经退出。为了修复这个竞态条件,请求放弃 GIL 的线程现在在退出前重置其请求。问题由 Mingliang ZHAO 发现并分析。由 Victor Stinner 提供补丁。
gh-96864: 修复当操作码跟踪启用时,行跟踪事件引发异常可能导致断言失败、致命错误或
SystemError的问题。gh-95778:
PyLong_FromString函数被重构,以使其更易于维护和扩展。gh-96678: 修复 C 代码中的空指针算术未定义行为。
gh-96754: 确保所有创建的帧对象都是从有效的解释器帧创建的。防止回溯和信号处理程序中出现无效帧的可能性。
gh-90997: 提高在某些平台上读写内联字节码缓存的性能。
gh-96751: 从
CALL_FUNCTION_EX操作码中移除死代码。gh-90751:
memoryview现在支持半精度浮点数。由 Donghee Na 和 Antoine Pitrou 提供补丁。gh-96678: 修复 ceval.c 中的未定义行为情况。
库¶
核心与内置函数¶
gh-96636: 确保跟踪
sys.setrace()立即开启。在 3.11 的预发布版本中,当在__del__方法或中断中开启跟踪时,可能会丢失一些跟踪事件。gh-96572: 修复跟踪引用构建模式中的释放后使用问题。由 Kumar Aditya 提供补丁。
gh-96611: 当在多行字符串中加载包含无效 UTF-8 的文件时,会发出正确的 SyntaxError。
gh-96612: 确保不完整的帧不会出现在 tracemalloc 跟踪中。
gh-90230: 修复在使用
--enable-pystats构建时的编译器警告和测试失败问题。gh-96587: 在 Python 3.11 之前的版本中,正确地针对异常组 (PEP 654) 抛出
SyntaxError。gh-96569: 通过添加 NULL 检查,移除两种未定义行为的情况。
gh-96582: 修复
_PyThread_CurrentFrames中可能的NULL指针解引用问题。由 Kumar Aditya 提供补丁。gh-91079: 将 Python 递归检查与 C 递归检查分开,减少 C 栈溢出的可能性,并允许安全地增加递归限制。
gh-96348: 当调用
throw()、throw()或athrow()时,如果参数超过一个,发出 DeprecationWarning。gh-95196: 禁用对 C 实现的类方法描述符的错误 pickling。
gh-96364: 修复
list.__getitem__和dict.__getitem__的文本签名。gh-96352: 修复
AttributeError在object.__getattribute__()中缺少name和obj属性的问题。由 Philip Georgi 提供补丁。gh-93554: 修改跳转操作码,使所有条件跳转都是向前跳转。向后跳转由汇编器转换为条件向前跳转,其目标是 fallthrough 块(且条件反转),后跟无条件向后跳转。例如:
POP_JUMP_IF_TRUE BACKWARD_TARGET变为POP_JUMP_IF_FALSE NEXT_BLOCK; JUMP BACKWARD_TARGET。所有有向条件跳转操作码已被移除:
POP_JUMP_FORWARD_IF_TRUE、POP_JUMP_BACKWARD_IF_TRUE、POP_JUMP_FORWARD_IF_FALSE、POP_JUMP_BACKWARD_IF_FALSE、POP_JUMP_FORWARD_IF_NONE、POP_JUMP_BACKWARD_IF_NONE、POP_JUMP_FORWARD_IF_NOT_NONE、POP_JUMP_BACKWARD_IF_NOT_NONE。对应的无方向操作码不再是伪指令,它们实现了向前条件跳转。
gh-96268: 加载包含无效 UTF-8 编码的文件现在会在正确的位置报告损坏的字符。
gh-96237: 内部字段
_PyInterpreterFrame.f_func更名为_PyInterpreterFrame.f_funcobj并且可以是任何对象。f_globals和f_builtin字段可能包含垃圾值。最安全的做法是将
_PyInterpreterFrame结构视为不透明的。gh-96187: 修复了一个导致
_PyCode_GetExtra对于负索引返回垃圾值的 bug。由 Pablo Galindo 提供补丁gh-96143: 添加了一个新的
-X perfPython 命令行选项以及sys.activate_stack_trampoline()和sys.deactivate_stack_trampoline()函数在sys模块中,允许以 Linuxperf分析器可以检测 Python 调用的方式设置/取消设置解释器。新的sys.is_stack_trampoline_active()函数允许查询 perf 蹦床的状态。设计由 Pablo Galindo 完成。由 Pablo Galindo 和 Christian Heimes 提供补丁,贡献来自 Gregory P. Smith [Google] 和 Mark Shannon。gh-96071: 修复了在分配新线程状态时
PyGILState_Ensure()中的死锁问题。由 Kumar Aditya 提供补丁。gh-96046:
PyType_Ready()现在初始化ht_cached_keys并执行额外检查以确保类型对象正确配置。这避免了不使用常规 API 创建新类型的第三方包中的崩溃。gh-96005: 在 WASI 上,
ENOTCAPABLE现在被映射到PermissionError。errno模块暴露了新的错误号。getpath.py现在在无法打开标记文件pybuilddir.txt和pyenv.cfg时忽略PermissionError。gh-93678: 添加了编译器优化阶段直接单元测试的测试工具。
_testinternalcapi.optimize_cfg()函数在一系列指令上运行优化器。test.support中的CfgOptimizationTestCase类提供了调用优化器和检查输出的实用工具。gh-95245: 通过将弱引用列表指针直接移动到对象字典/值指针前的预头部,将"简单"Python对象的大小从8个词减少到6个词。
gh-90997: 编译虚拟
try/except块,以处理在 :susp:`~generator.close` 或 :susp:`~generator.throw` 调用通过挂起帧时引发的异常。gh-95977: 使用vectorcall优化调用 :susp:`~object.__get__`。由Kumar Aditya提供补丁。
gh-91210: 改进当没有默认值的参数跟在有默认值的参数后面时的错误消息,并显示相同的消息,即使非默认/默认序列前面有仅位置参数。
gh-95922: 修复了编译器
eliminate_empty_basic_blocks函数忽略代码单元最后一个块的bug。gh-95818: 在
PyThreadState_GetFrame()中跳过不完整的帧。gh-95876: 修复
_PyPegen_raise_error_known_location中的格式字符串,该字符串在某些64位系统上可能导致内存损坏。该函数在为Py_ssize_t参数构建元组时使用了i(int) 而不是n(Py_ssize_t) 。gh-95150: 更新代码对象的哈希和相等性考虑,以考虑所有调试和异常处理表。这修复了在编译过程中某些非相同代码对象可能被"去重"的问题。
gh-91146: 减少由 :susp:`str.split` 和 :susp:`str.rsplit` 生成的
list的分配大小。补丁由Donghee Na和Inada Naoki提供。gh-87092: 在编译器中创建一个'跳转目标标签'抽象,使编译器的代码生成阶段不直接与基本块一起工作。这为底层CFG生成机制的更改准备了代码。
gh-95355:
_PyPegen_Parser_New现在能正确检测令牌内存分配错误。补丁由Honglin Zhu提供。gh-90081: 在追踪器/分析器函数中以全速运行Python代码。修复了早期3.11版本中的速度下降问题。
gh-95324: 在调试模式下,如果对象在释放前未调用
PyObject_GC_UnTrack(),则发出警告。由Pablo Galindo提供补丁。gh-95245: 将管理的字典和值指针合并为一个带标签的指针,以在预头部节省一个字。
gh-93678: 添加cfg_builder结构并重构相关代码,以便可以在没有编译器结构实例的情况下构建cfg。
gh-95185: 防止在编译一些极长表达式如
"+0"*1000000时AST构造器崩溃。现在会改为抛出RecursionError。由Pablo Galindo提供补丁。gh-93351: 现在,当向
compile()和其他相关函数提供ast.AST节点位置时,会验证这些位置。如果检测到无效位置,将抛出ValueError。gh-94438: 修复了一个问题,该问题导致在计算对帧对象的
f_lineno属性赋值的有效跳转目标时,忽略扩展操作码参数和一些条件弹出。在某些情况下,这可能导致内部状态不一致,导致解释器硬崩溃。gh-95060: 未记录的
PyCode_Addr2Location函数现在在addrq参数小于零时正确返回。gh-95113: 在非快速化代码中,将所有
EXTENDED_ARG_QUICK指令替换为基本的EXTENDED_ARG指令。非自适应字节码的使用者应该能够以与CPython 3.10及更早版本相同的方式处理扩展参数。gh-91409: 修复由字节码编译器中的某些优化引起的错误源代码位置信息。
库¶
gh-95023: 为Linux实现
os.setns()和os.unshare()。由Noam Cohen提供补丁。
核心与内置函数¶
库¶
gh-94996:
ast.parse()在传递的feature_version小于(3, 8)时,将不再解析带有位置唯一参数(positional-only params)的函数定义。由 Shantanu Jain 提供补丁。
核心与内置函数¶
gh-94739: 允许在调试器中跳入、跳出以及跨异常处理器跳转。
库¶
gh-94949:
ast.parse()在传递的feature_version小于(3, 9)时,将不再解析带括号的上下文管理器。由 Shantanu Jain 提供补丁。gh-94947:
ast.parse()在传递的feature_version小于(3, 8)时,将不再解析赋值表达式。由 Shantanu Jain 提供补丁。
核心与内置函数¶
gh-91256: 确保解释器启动期间帮助文本的程序名称是已知的。
gh-94893: 修复一个帧对象操作可能损坏内联字节码缓存的问题。
gh-94822: 修复当类本身也存在同名属性时,元类描述符的查找可能被忽略的问题。
gh-91153: 修复
bytearray项赋值在通过新值的__index__()方法调整大小时可能崩溃的问题。gh-90699: 修复
bool.__repr__()中的引用计数错误。由 Kumar Aditya 提供补丁。gh-94694: 修复可能导致具有多行方法查找的代码具有误导性或错误的列偏移信息的问题。在某些情况下(当编译手动构建的 AST 时),这可能导致解释器硬崩溃。
gh-93252: 修复导致内部帧在失败的 Python 函数调用后仍然存活的问题,可能导致内存泄漏或解释器硬崩溃。
gh-94215: 修复了一个问题,即由行追踪事件引发的异常会导致帧处于无效状态,可能导致解释器硬崩溃。
gh-92228: 对于与源代码行相关联的退出块,禁用编译器的内联小退出块优化。这修复了一个bug,即调试器无法区分异常处理器的结束和后续代码块的开始。
gh-94438: 在设置帧中的行号时,考虑可以推NULL到堆栈的指令。防止一些(不太可能的)崩溃。
gh-91719: 在解释器主循环中引发
unknown opcode error时重新加载opcode,以便C编译器独立生成调度代码。gh-94329: 编译并运行具有极大序列(1000多个元素)解包的代码。此类代码之前无法编译。现在可以正确编译并运行。
gh-94360: 修复了当从
stdin读取带有语法错误的非utf-8编码文本文件时,分词器崩溃的问题。由Pablo Galindo提供补丁。gh-88116: 修复了当从代码对象读取行号时,如果编码的行号接近
INT_MIN时的问题。由Pablo Galindo提供补丁。gh-94262: 不为不完整的帧创建帧对象。防止Python和C扩展可以观察到生成器和闭包的创建,恢复了3.10及更早版本的行为。
gh-94192: 修复了字典字面量中值表达式无效时的错误。
gh-87995:
types.MappingProxyType实例现在如果底层映射是可哈希的,则也是可哈希的。gh-93883: 修订了回溯增强错误位置的显示策略。指示器仅在位置不跨越整行时显示。
gh-94163: 添加
BINARY_SLICE和STORE_SLICE指令,以更高效地处理和更好地专门化切片操作,其中切片在源代码中是显式的。gh-94021: 修复
Python/specialize.c中不可达代码的警告。gh-93911: 为具有自定义
__getattribute__的对象专门化LOAD_ATTR。gh-93955: 提高具有自定义
__getattribute__和__getattr__对象的属性查找性能。补丁由 Ken Jin 提供。gh-93911: 为
property()属性专门化LOAD_ATTR。gh-93678: 重构编译器优化代码,使其不再需要传递
struct assembler和struct compiler。相反,每个函数都采用它实际需要的 CFG 和其他数据。这将使得直接测试这段代码成为可能。gh-93841: 当使用
-enable-pystats构建时,添加了sys._stats_on()、sys._stats_off()、sys._stats_clear()和sys._stats_dump()函数,以启用对程序部分的统计收集。gh-93516: 在代码对象中存储第一个可跟踪指令的偏移量,以避免在跟踪时对每个指令重新计算。
gh-93516: 延迟创建将字节码偏移量映射到行号的表,以加快跟踪时行号的计算速度。
gh-89828:
types.GenericAlias不再中继__class__属性。例如,isinstance(list[int], type)不再返回True。gh-93678: 重构编译器以减少样板和重复。
gh-93671: 修复在匹配语句中深度嵌套序列模式时发生的一些指数回溯情况。由 Pablo Galindo 提供补丁。
gh-93662: 确保在多行方法调用中结束列偏移是正确的。以前,结束列可能会在列偏移之前。
库¶
gh-93461:
importlib.invalidate_caches()现在会从sys.path_importer_cache中删除以相对路径为名称的条目。这解决了进程改变其当前工作目录时的缓存问题。FileFinder不再在路径中插入点,例如/egg/./spam现在是/egg/spam。
核心与内置函数¶
gh-93621: 改变
with和async with发出的字节码指令顺序,以减少异常表中的条目数量。gh-93533: 将
LOAD_METHOD的内联缓存大小减少 2 字节。gh-93444: 从编译器的基础块结构中移除了冗余字段:
b_nofallthrough、b_exit、b_return。它们可以从块的最后一条指令的操作码中轻松计算出来。gh-93429:
LOAD_METHOD指令已被移除。它被合并回LOAD_ATTR。gh-93418: 修复了一个断言错误,其中 f-string 在表达式后有一个等号 '=',但没有尾随的大括号。例如,f"{i="。
gh-93382: 缓存
PyCode_GetCode()函数的结果,以恢复co_code属性的 O(1) 查找。gh-93356: 异常处理器的代码在代码单元的字节码末尾发出。这在没有引发异常时避免了一次跳转。
gh-93354: 在解释器中对专门化计数器使用指数退避。可以显著减少失败专门化的数量,并避免对程序中不适合专门化的部分造成减速。
gh-93283: 改进了 f-string 表达式中无效转换字符语法错误的消息。
gh-93345: 修复了在
TypeVarTuple之后嵌套泛型别名中替换TypeVar时的崩溃问题。gh-93223: 当一个字节码指令跳转到一个无条件跳转指令时,第一条指令通常可以优化为直接跳转到无条件跳转的目标。出于追踪原因,以前只有在两条指令具有相同行号时才会发生这种情况。现在,如果无条件跳转是人工的,即没有关联的行号,也会发生这种情况。
gh-84694: 配置选项
--experimental-isolated-subinterpreters和宏EXPERIMENTAL_ISOLATED_SUBINTERPRETERS已被移除。gh-91924: 修复了当标准输出编码不是 UTF-8 时的
__lltrace__调试功能。由 Victor Stinner 提供补丁。gh-93040: 在
Objects/obmalloc.c中用Py_UNUSED包裹未使用的参数。gh-93143: 通过在编译时确定哪些变量必须初始化,避免对未初始化的局部变量进行
NULL检查。gh-93061:
async for循环后的向后跳转不再赋予可疑的行号。gh-93065: 修复了 contextvars HAMT 实现以处理对深树的迭代。
该错误由 Eli Libman 发现并修复。更多详情请见 MagicStack/immutables#84。
gh-93012: 添加了新函数
PyType_FromMetaclass(),该函数通过额外的元类参数泛化了现有的PyType_FromModuleAndSpec()。这对于语言绑定工具非常有用,可以通过指定具有自定义槽的元类来拦截类型相关的操作,如子类化或静态属性访问。重要的是,
PyType_FromMetaclass()可在有限 API 中使用,这为将更多绑定工具迁移到稳定 ABI 上提供了途径。gh-93021: 修复了在 C 中实现的
__get__()方法的__text_signature__。补丁由 Jelle Zijlstra 提供。gh-89914:
YIELD_VALUE指令的操作数被设置为堆栈深度。这样做是为了帮助在yield时的帧处理,并可能协助调试器。gh-92955: 修复代码对象的行和位置迭代器中的内存泄漏,因为它们未在退出时完成。由 Kumar Aditya 提供补丁。
gh-92930: 修复了在
__reduce__或persistent_id期间修改集合导致的_pickle.c崩溃。gh-90690: PRECALL 指令已被移除。它对特殊化仅提供小优势且在绝大多数情况下不需要。
gh-92914: 总是将列表的分配大小向上舍入到最近的偶数。
gh-92858: 改进在 ':' 之前有语法错误的某些套件的错误消息。
gh-90473: 在 WASI 上降低默认递归限制以解决有限的调用栈大小问题。
gh-92804: 修复
memoryview迭代器中的内存泄漏,因为它未在退出时完成。由 Kumar Aditya 提供补丁。gh-92777: 为具有懒字典的对象专门化
LOAD_METHOD。由 Ken Jin 提供补丁。gh-92658: 增加对 Windows Hyper-V 主机和客机上 Hyper-V 套接字的连接和绑定支持。
gh-92236: 移除在启动生成器或协程时可见的虚假 "LINE" 事件,这些事件在 C 中实现的追踪函数中可见。
库¶
gh-91102:
_warnings.warn_explicit()已移植到 Argument Clinic。
核心与内置函数¶
库¶
gh-92261: 修复尝试迭代
typing.Union时的挂起问题。
核心与内置函数¶
库¶
gh-89237: 修复了在 Windows 上使用
ProactorEventLoop时,asyncio中subprocess.wait_closed()的挂起问题。由 Kumar Aditya 提供补丁。gh-97928:
tkinter.Text.count()现在会对以 "-" 开头的选项抛出异常,而不是静默忽略它们。gh-98393:
os模块不再接受类似bytearray和memoryview类型的字节类路径:只有确切的bytes类型被接受用于字节字符串。由 Victor Stinner 提供补丁。gh-98363: 添加了 itertools.batched() 以将数据分批成给定长度的列表,最后一个列表可能比其他列表短。
gh-98331: 将捆绑的 pip 和 setuptools 的副本分别更新到 22.3 和 65.5.0 版本。
gh-98307: 向
SysLogHandler添加了一个createSocket()方法。gh-96035: 修复了
urllib.parse.urlparse()中的一个错误,该错误导致某些包含空格、下划线、加号和减号或非ASCII数字的端口号被错误地接受。gh-98257: 使
sys.setprofile()和sys.settrace()函数可重入。它们不再会失败并显示:RuntimeError("Cannot install a trace function while another trace function is being installed")。由 Victor Stinner 提供补丁。gh-98251: 允许
venv在不影响路径解析的情况下,将PYTHON*变量传递给ensurepip和pip。gh-94597: 弃用了
asyncio.AbstractEventLoopPolicy.get_child_watcher()和asyncio.AbstractEventLoopPolicy.set_child_watcher()方法,将在 Python 3.14 中移除。由 Kumar Aditya 提供补丁。gh-98178: 在 macOS 上,修复
syslog.syslog()在多线程应用程序中的崩溃问题。在 macOS 上,libcsyslog()函数不是线程安全的,因此syslog.syslog()不再释放 GIL 来调用它。由 Victor Stinner 提供补丁。gh-87730: 在 urllib FTP 支持中一致地包装网络错误,因此当网络可用但无法访问公共互联网时,测试套件不会失败。
gh-94597: 子监视器类
MultiLoopChildWatcher、FastChildWatcher和SafeChildWatcher已被弃用,将在 Python 3.14 中移除。由 Kumar Aditya 提供补丁。gh-98023: 在支持它的 Linux 系统上,将默认的子监视器更改为
PidfdChildWatcher。由 Kumar Aditya 提供补丁。gh-90985: 在 3.11 早期版本中,我们弃用了
asyncio.Task.cancel("message")。我们意识到我们过于严厉,因此取消了弃用。gh-65961: 不要仅仅依赖模块上的
__cached__;代码还将支持__spec__.cached。gh-97646: 在
mimetypes中,将已弃用的application/javascript替换为text/javascript。参见 RFC 9239。由 Noam Cohen 提供补丁。gh-97930: 应用 importlib_resources 5.8 和 5.9 的更改:
Traversable.joinpath提供了具体的实现。as_file现在支持资源目录。gh-97850: 从
importlib.util中移除已弃用的importlib.util.set_loader()和importlib.util.module_for_loader()。gh-97837: 更改
unittest中的弃用警告消息,从返回一个值!=None 已被弃用to
从测试用例返回一个非 None 的值已被弃用gh-97825: 修复了当
subprocess.check_output()与参数input=None以及 encoding 或 errors 参数一起使用时引发的AttributeError。gh-97008: 自 gh-82711 起提供的
NameError和AttributeError拼写建议现在也由纯 Python 的traceback模块发出。针对这些建议的测试现在会测试两种实现,以确保它们是等效的。由 Carl Friedrich Bolz-Tereick 和 Łukasz Langa 提供补丁。gh-97799:
dataclass现在使用inspect.get_annotations()来检查类对象的注解。gh-97781: 移除了
importlib.metadata中已弃用的接口(作为字典访问的入口点,隐式字典构造EntryPoint对象序列,EntryPoints结果的可变性,通过索引访问入口点)。entry_points现在有一个更简单、更直接的 API(返回EntryPoints)。gh-96827: 当默认执行器清理被延迟到事件循环关闭之后(例如,由于键盘中断的结果)时,避免来自
asyncio的虚假回溯。gh-95534:
gzip.GzipFile.read()读取速度快了 10%。gh-97592: 当传递恶意参数时,避免 C 版本的
asyncio.Future.remove_done_callback()崩溃。gh-97545: 使 Semaphore 运行得更快。
gh-73588: 修复
tkinter.Checkbutton的默认名称生成。以前,如果未指定参数 "name" 和 "variable",不同父部件中的复选框可以有相同的短名称并共享相同的状态。现在它们是全局唯一的。gh-96865: 修复 Flag 以使用边界 CONFORM
这恢复了 Flag 以前的行为,即允许组合具有非顺序值的标志;例如。
class Skip(Flag): TWO = 2 EIGHT = 8
Skip.TWO | Skip.EIGHT -> <Skip.TWO|EIGHT: 10>
gh-97005: 将捆绑的 libexpat 更新到 2.4.9
gh-85760: 修复
asyncio中的竞争条件,其中process_exited()在pipe_data_received()之前被调用,导致输出不一致。补丁由 Kumar Aditya 提供。gh-96704: 当
asyncio异常处理器代表任务或回调句柄被调用时,传递正确的contextvars.Context。这新增了一个Task方法get_context,以及一个同名的Handle方法。如果在任务对象上找不到此方法(可能是因为它是一个尚未提供此方法的第三方库),则使用调用异常处理器时占主导地位的上下文。gh-96819: 修复
multiprocessing.resource_tracker中的检查,确保写入管道的长度不大于PIPE_BUF。gh-95865: 减少
urllib.parse.quote_from_bytes()在大值上的内存使用。由 Dennis Sweeney 贡献。
gh-96741: 修正了数据类属性
pstats.FunctionProfile.ncalls的类型注解为str。gh-96734: 更新
unicodedata数据库至 Unicode 15.0.0。gh-96735: 修复
struct.unpack()中的未定义行为。gh-46412: 提高大型 ndb/gdb 数据库的
bool(db)性能。此前这会调用len(db),后者会遍历所有键——答案(空或非空)在第一个键后即可知道。gh-96652: 如果
sigaction()函数不可用,则修复faulthandler.register(signal, chain=True)的 faulthandler 实现:如果之前的信号处理器为 NULL,则不调用它。由 Victor Stinner 提供补丁。gh-68163: 修正
numbers.Rational到float的转换。gh-96538: 通过利用类型稳定性加速
bisect.bisect()函数。gh-96465: 分数哈希现在被缓存。
gh-96079: 在
typing中,修复 _AnnotatedAlias 中缺失的name字段和不正确的__module__。gh-96415: 从模块命名空间中移除
types._cell_factory。gh-95987: 修复
Any子类的repr。gh-96385: 修复
TypeVarTuple.__typing_prepare_subst__。在使用多个TypeVarTuple时,如类型别名替换中的[*T, *V],未引发TypeError。gh-96142: 将
match_args、kw_only、slots和weakref_slot添加到_DataclassParams中。gh-89258: 向
logging.Logger添加了一个getChildren()方法,用于获取日志记录器的直接子日志记录器。gh-96346: 对编译的正则表达式模式使用双重缓存。
gh-96349: 修复了
threading.Event.__init__()中的一个轻微性能回归问题。gh-90467: 修复
asyncio.streams.StreamReaderProtocol以保持对创建的任务的强引用,从而避免被垃圾回收。gh-96172: 修复
unicodedata中的一个错误:east_asian_width过去对未分配字符返回错误值;对于尚未分配但保留的字符也是如此。gh-96159: 修复日志 TimedRotatingFileHandler 中的性能回归问题。仅在滚动时间过去时检查特殊文件。
gh-96175: 修复
xml.dom.minidom中Attr类未使用的localName参数。gh-96145: 向 JSON 模块添加 AttrDict 以与 object_hook 一起使用。
gh-96052: 在
codeop.compile_command()中检查不完整输入时修复处理编译器警告(SyntaxWarning 和 DeprecationWarning)的问题。以前它会发出警告并引发 SyntaxError。现在对于不完整输入,它总是返回None,而不发出任何警告。gh-96125: 修复导致
sys.thread_info.name在 pthread 平台上错误的错误条件。gh-96019: 修复
makeunicodedata.py脚本中的一个错误,该错误导致unicodedata模块节省了约 13 KiB 的空间,特别是字符分解数据。gh-95463: 移除来自 bpo-28080 的不兼容更改,该更改导致了一个回归问题,即忽略了
ZipInfo.flag_bits中的 utf8。由 Pablo Galindo 提供补丁。gh-69142: 添加
%:zstrftime 格式代码(生成以冒号作为分隔符的 tzoffset),参见 strftime() 和 strptime() 的行为。gh-95899: 修复
asyncio.Runner使其只调用asyncio.set_event_loop()一次,以避免在子监视器上多次调用attach_loop()。由 Kumar Aditya 提供补丁。gh-95736: 修复
unittest.IsolatedAsyncioTestCase在调用设置函数之前设置事件循环。由 Kumar Aditya 提供补丁。gh-95865: 通过用
map()替换列表推导式来加速urllib.parse.quote_from_bytes()。gh-95861: 为现有的 statistics.correlation() 函数添加支持计算 Spearman 的相关系数。
gh-95804: 修复
logging关闭处理程序,使其尊重MemoryHandler.flushOnClose。gh-95704: 当一个任务捕获
asyncio.CancelledError并引发其他错误时,其他错误通常不应被静默抑制。gh-95149:
HTTPStatus枚举提供了几个属性来指示 HTTP 状态类别,例如HTTPStatus.OK.is_success。gh-95609: 更新捆绑的 pip 到 22.2.2 版本。
gh-95289: 修复
asyncio.TaskGroup以在asyncio.CancelledError被上下文管理器替换为另一个异常时传播异常。由 Kumar Aditya 和 Guido van Rossum 提供补丁。gh-94909: 修复
pathlib.PurePath初始化器中相对 Windows 路径与驱动器的错误连接。gh-95385: 在不请求键排序时(默认情况下)更快的
json.dumps()。gh-83901: 改进
Signature.bind的错误消息,当缺少仅关键字参数时。gh-95339: 更新捆绑的 pip 到 22.2.1。
gh-95045: 通过在调用任何回调之前取消跟踪,修复在释放
_lsprof.Profiler时的 GC 崩溃。由 Kumar Aditya 提供补丁。gh-95231: 当加载
crypt方法时,如果引发EPERM或ENOSYS,优雅地失败。这可能在尝试在启用 FIPS 的 Linux 内核上加载MD5时发生。gh-95097: 为没有
uncancel()方法的asyncio.Task实现修复asyncio.run()。由 Kumar Aditya 提供补丁。gh-95199: 更新捆绑的 setuptools 到 63.2.0。
gh-95194: 更新捆绑的 pip 到 22.2。
gh-93899: 修复在旧内核版本上检查
os.EFD_CLOEXEC、os.EFD_NONBLOCK和os.EFD_SEMAPHORE标志存在性的问题,这些版本中这些标志不存在。由 Kumar Aditya 提供补丁。gh-95166: 修复
concurrent.futures.Executor.map(),使其在错误(例如 TimeoutError 或 KeyboardInterrupt)时取消当前等待的 future。gh-95132: 修复
sqlite3回归问题,其中*args和**kwds从connect()错误地传递到Connection工厂。这个回归是在 3.11a1 版本中由 PR 24421 (gh-85128) 引入的。由 Erlend E. Aasland 提供补丁。gh-93157: 修复
fileinput模块在inplace为 true 时不支持errors选项的问题。gh-91212: 修复当追踪器关闭时 turtle 窗口的闪烁问题。由 Shin-myoung-serp 提供补丁。
gh-95077: 为枚举
member.member访问(例如Color.RED.BLUE)添加弃用警告。移除EnumMeta.__getattr__。gh-95109: 确保已过期的时间调度(使用
asyncio.Timeout)能够被及时传递。gh-95105:
wsgiref.types.InputStream.__iter__()应返回Iterator[bytes],而不是Iterable[bytes]。由 Shantanu Jain 提供补丁。gh-95066: 在
ast.parse()中,当feature_version的主版本无效时,用异常替换了断言。由 Shantanu Jain 提供补丁。gh-95005: 在 JSON 编码器和 StringIO 中用 _PyUnicodeWriter 替换 _PyAccu,并移除 _PyAccu 的实现。
gh-90085: 移除
timeit的-c/--clock和-t/--time命令行选项。这些选项自 Python 3.3 起已被弃用,功能在 Python 3.7 中被移除。由 Shantanu Jain 提供补丁。gh-94857: 修复
_io.TextIOWrapper.reconfigure中的内存泄漏。补丁由 Kumar Aditya 提供。gh-94821: 修复 Linux 上 Unix 套接字绑定到空地址时使用抽象命名空间中的可用地址,而不是 "0"。
gh-94736: 修复在释放
_multiprocessing.SemLock子类实例时的崩溃问题。由 Kumar Aditya 提供补丁。gh-81620: 添加 random.binomialvariate()。
gh-74116: 允许
asyncio.StreamWriter.drain()被多个任务并发等待。由 Kumar Aditya 提供补丁。gh-87822: 当以
capture_locals=True调用时,traceback模块函数会吞掉在帧的局部变量上调用repr()时引发的异常。这是为了优先考虑原始异常而非渲染错误。失败指示会代替缺失的值被打印出来。(由 Simon-Martin Schroeder 提供补丁)。gh-88050: 修复
asyncio子进程传输,以便在进程被阻塞时干净地杀死进程,并避免在循环关闭时出现RuntimeError。由 Kumar Aditya 提供补丁。gh-94637:
SSLContext.set_default_verify_paths()现在在SSL_CTX_set_default_verify_paths调用周围释放 GIL。该函数调用执行 I/O 和 CPU 密集型工作。gh-94309: 弃用别名
typing.Hashable和typing.Sizedgh-92546: 一个未记录的
python -m pprint基准测试被移动到 pyperformance 的pprint套件中。由 Oleg Iarygin 提供补丁。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-94343: 允许在对象初始化期间设置
reprlib.Repr的属性gh-94382: 将
_multiprocessing模块的静态类型移植到堆类型。补丁由 Kumar Aditya 提供。gh-78724: 通过在
__new__()中初始化struct.Struct来修复当其未被完全初始化时的崩溃问题。由 Kumar Aditya 提供补丁。gh-94510: 对
sys.setprofile()和sys.settrace()的重新进入调用现在会引发RuntimeError。由 Pablo Galindo 提供补丁。gh-92336: 修复了
linecache.getline()在坏文件上因UnicodeDecodeError或SyntaxError而失败的错误。根据文档,现在它返回一个空字符串。gh-94398: 一旦
asyncio.TaskGroup开始关闭(即,至少一个任务失败并且任务组开始取消剩余任务),就不应再向任务组添加新任务。gh-94383:
xml.etree: 移除纯 Python 实现中的ElementTree.Element.copy()方法,该方法已在 Python 3.10 中弃用,改用copy.copy()函数。xml.etree的 C 实现没有copy()方法,只有__copy__()方法。由 Victor Stinner 提供补丁。gh-94379:
zipimport: 移除find_loader()和find_module()方法,这些方法已在 Python 3.10 中弃用:改用find_spec()方法。理由请见 PEP 451。由 Victor Stinner 提供补丁。gh-94352:
shlex.split(): 现在为 s 参数传递None会引发异常,而不是读取sys.stdin。该功能已在 Python 3.9 中弃用。由 Victor Stinner 提供补丁。gh-89988: 修复
pickle.Pickler在查找dispatch_table时的内存泄漏。补丁由 Kumar Aditya 提供。gh-93259: 现在当
None或空字符串传递给Distribution.from_name(及其他调用者) 时会引发ValueError。gh-74696:
shutil.make_archive()现在将 root_dir 参数传递给支持它的自定义归档器。gh-94216:
dis模块现在包含了伪指令的操作码(这些操作码在代码生成期间被编译器使用,但在最终字节码发出前被移除或替换为真实操作码)。gh-93096: 移除了未文档化的
python -m codecs。改用python -m unittest test.test_codecs.EncodedFileTest。gh-94207: 使
_struct.Struct被 GC 跟踪以修复_struct模块中的引用泄漏。gh-93096: 移除了
python -m base64的未文档化-t参数。改用python -m unittest test.test_base64.LegacyBase64TestCase.test_encodebytes。gh-94226: 移除
locale.format()函数,该函数在 Python 3.7 中已弃用:改用locale.format_string()。由 Victor Stinner 提交的补丁。gh-94199: 移除
ssl.match_hostname()函数。ssl.match_hostname()在 Python 3.7 中已弃用。自 Python 3.7 起,OpenSSL 执行主机名匹配,Python 不再使用ssl.match_hostname()函数。由 Victor Stinner 提交的补丁。gh-94214: 文档化
venv.EnvBuilder类中使用的context对象,并将新环境的库路径添加至其中。gh-94199: 移除
ssl.wrap_socket()函数,该函数在 Python 3.7 中已弃用:改为创建一个ssl.SSLContext对象并调用其ssl.SSLContext.wrap_socket方法。任何仍使用ssl.wrap_socket()的包都是破损且不安全的。该函数既不发送 SNI TLS 扩展也不验证服务器主机名。代码易受 CWE 295 不正确的证书验证影响。由 Victor Stinner 提交的补丁。gh-94199: 移除
ssl.RAND_pseudo_bytes()函数,该函数在 Python 3.6 中已弃用:改用os.urandom()或ssl.RAND_bytes()。由 Victor Stinner 提交的补丁。gh-94199:
hashlib: 移除hashlib.pbkdf2_hmac()的纯 Python 实现,该实现在 Python 3.10 中已弃用。Python 3.10 及更高版本需要 OpenSSL 1.1.1 (PEP 644):此 OpenSSL 版本提供了pbkdf2_hmac()的 C 实现,速度更快。由 Victor Stinner 提交的补丁。gh-94196:
gzip: 移除gzip.GzipFile的filename属性,该属性自 Python 2.6 起已弃用,改用name属性。在写入模式下,filename属性会在文件扩展名不存在时添加'.gz'。由 Victor Stinner 提交的补丁。gh-94182: 在运行循环上运行
asyncio.PidfdChildWatcher,这允许事件循环在主线程上没有默认事件循环运行时运行子进程。gh-94169: 移除
io.OpenWrapper和_pyio.OpenWrapper,这两个在 Python 3.10 中已被弃用:只需使用open()替代。open()(io.open()) 函数是一个内置函数。自 Python 3.10 起,_pyio.open()也是一个静态方法。由 Victor Stinner 提供补丁。gh-94101: 不再允许手动实例化
ssl.SSLSession对象,因为这会导致配置错误的实例,在访问其属性时解释器崩溃。gh-84753:
inspect.iscoroutinefunction()、inspect.isgeneratorfunction()和inspect.isasyncgenfunction()现在能正确地为鸭子类型的函数式对象(如unittest.mock.AsyncMock的实例)返回True。这使得
inspect.iscoroutinefunction()的行为与asyncio.iscoroutinefunction()保持一致。由 Mehdi ABAAKOUK 提供补丁。gh-94028: 修复
sqlite3中的一个回归问题,其中语句对象在游标迭代器使用后未被正确清除和重置。该回归问题由 Python 3.11a1 中的 PR 27884 引入。由 Erlend E. Aasland 提供补丁。gh-93973: 向
asyncio.create_connection添加关键字参数all_errors,以便多个连接错误可以作为ExceptionGroup抛出。gh-93963: 正式弃用从
importlib.abc迁移到importlib.resources.abc的类。gh-93858: 防止在嵌套的 fish 实例中激活 venv 时出错。
gh-93847: 修复泛型别名枚举的 repr。
gh-93820: 修复了一个回归问题,当
copy.copy()-ing 带有多个标志成员的enum.Flag时。gh-79512: 修复了
weakref模块中ReferenceType、ProxyType、CallableProxyType类的名称和__module__值,使它们可以被 pickle。gh-93626: 将
__future__.annotations的NonemandatoryRelease 设置为表示当前为“待定”。gh-90494: 如果
__reduce__()返回长度为6的元组,copy.copy()和copy.deepcopy()现在总是会引发 TypeError,而不是静默忽略第6项或产生不正确的结果。gh-90549: 修复了一个多进程错误,其中在创建子进程(与 fork 相对)时,全局命名资源(如信号量)可能会泄漏。
gh-93521: 修复了一个情况,其中数据类会尝试将
__weakref__添加到已经在其基类中定义了weakref_slot=True的数据类的__slots__中。这会导致在创建新类时引发TypeError。gh-79579:
sqlite3现在能正确检测带有前导注释的 DML 查询。由 Erlend E. Aasland 提供补丁。gh-93421: 当 DML 语句运行完成时更新
sqlite3.Cursor.rowcount。这修复了像UPDATE ... RETURNING这样的 SQL 查询的行计数。由 Erlend E. Aasland 提供补丁。gh-93475: 在
fcntl中公开FICLONE和FICLONERANGE常量。由 Illia Volochii 提供补丁。gh-93370: 弃用
version和version_info。gh-91810: 在使用
encoding='unicode'和xml_declaration=None的ElementTree.write()中,抑制在打开的文件中写入 XML 声明。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-93312: 添加
os.PIDFD_NONBLOCK标志,用于以非阻塞模式通过os.pidfd_open()打开进程的文件描述符。由 Kumar Aditya 提供补丁。gh-88123: 实现
Enum.__contains__,返回True或False,以取代有时会引发TypeError的废弃行为。gh-93297: 使 asyncio 任务组阻止子任务被垃圾回收。
gh-85308: 更改
argparse.ArgumentParser使用 filesystem encoding and error handler 而非默认文本编码从文件读取参数(例如fromfile_prefix_chars选项)。此更改影响 Windows;参数文件应使用 UTF-8 而非 ANSI 代码页编码。gh-93156: 使用负索引值访问绝对路径的
pathlib.PurePath.parents序列会产生不正确的结果。gh-93162: 为
logging.config.dictConfig()添加能力,以有效配置QueueHandler和QueueListener作为一对,并添加logging.getHandlerByName()和logging.getHandlerNames()API 以允许按名称访问处理器。gh-92886: 在
BaseHandler中用raise AssertionError()替换assert语句,以便在使用优化(-O)运行时维护测试行为。gh-90155: 修复当获取被取消时损坏的
asyncio.Semaphore。gh-90817:
locale.resetlocale()函数已被弃用,并将在 Python 3.13 中移除。请改用locale.setlocale(locale.LC_ALL, "")。由 Victor Stinner 提交补丁。gh-74696:
shutil.make_archive()在创建标准.zip或 tar 归档文件时不再临时更改当前工作目录。gh-92728:
re.template()函数及对应的re.TEMPLATE和re.T标志在 3.11.0b1 中被移除后已恢复,但它们现在已被弃用,因此可能会在 Python 3.13 中移除。gh-93033: 在某些字符串中的搜索(平台相关,如 Windows 上的 [U+0xFFFF, U+0x0100] 或 Linux 64 位上的 [U+0xFFFFFFFF, U+0x00010000])现在快了 10 倍。
gh-89973: 修复了如果在模式中包含上限低于下限的字符范围(例如
[c-a])时fnmatch中引发的re.error。现在这样的范围被解释为空范围。gh-93044: 不再在将数据库参数传递给工厂之前将其转换为字节。
gh-93010: 在一种非常特殊的情况下,email 包尝试将不存在的
InvalidHeaderError添加到缺陷列表中。应该是InvalidHeaderDefect。gh-92986: 修复当
ImportFrom.level为None时的ast.unparse()。gh-92932: 现在
dis()和get_instructions()处理以EXTENDED_ARG_QUICK为前缀的指令的操作数值。补丁由 Sam Gross 和 Donghee Na 提交。gh-92675: 修复
venv.ensure_directories()以接受pathlib.Path参数以及str路径。补丁由 David Foster 提交。gh-87901: 从
os.popen()中移除了在 3.11b1 中添加的encoding参数。gh-91922: 修复了在非UTF-8语言环境下
sqlite.connect()函数和sqlite.Connection构造函数的问题。此外,它们现在支持无法用当前文件系统编码解码的字节路径。gh-92839: 修复了当调用 bisect.insort() 或 bisect.insort_left() 时,key 参数不等于
None导致的崩溃问题。gh-90473:
subprocess现在在Emscripten和WASI平台上早期失败,以解决WASI上缺少os.pipe()的问题。gh-89325: 移除了许多旧的已弃用的
unittest特性:TestCase方法别名、未记录且损坏的TestCase方法assertDictContainsSubset、未记录的TestLoader.loadTestsFromModule参数 use_load_tests,以及TextTestResult类的一个下划线别名。gh-92671: 修复了在赋值目标上下文中
ast.unparse()对于空元组的问题。gh-91581:
utcfromtimestamp()在纯Python实现中不再尝试解析fold,因为在UTC中fold永远不会是1。除了在常见情况下稍微快一些之外,这还防止了当时间戳接近datetime.min时的一些错误。由Paul Ganssle提供补丁。gh-86388: 移除了自Python 3.10以来已弃用的randrange()功能。以前,randrange(10.0)无损转换为randrange(10)。现在,它会引发TypeError。此外,对于非整数值如randrange(10.5)或randrange('10')引发的异常已从ValueError更改为TypeError。
gh-90385: 添加
pathlib.Path.walk()作为os.walk()的替代方案。gh-92550: 修复了
pathlib.Path.rglob()对于空模式的问题。gh-92591: 允许
logging过滤器返回一个logging.LogRecord实例,以便附加到logging.Handler的过滤器可以在不影响其他处理程序的情况下丰富记录。gh-92445: 修复了
argparse中的一个错误,其中nargs="*"在提供0个参数时会引发错误而不是返回空列表,如果parser.add_argument中也定义了选择。gh-92547: 移除了在 Python 3.10 中弃用的未文档化
sqlite3功能:sqlite3.enable_shared_cache()sqlite3.OptimizedUnicode
由 Erlend E. Aasland 提交的补丁。
gh-92530: 修复了在中断
threading.Condition.notify()后出现的问题。gh-92531: statistics.median_grouped() 函数现在总是返回一个浮点数。以前,对于长度为1的序列,它不会转换输入类型。
gh-84131:
pathlib.Path弃用的方法link_to已被移除。使用 3.10 的hardlink_to()方法代替,因为其语义与symlink_to()一致。gh-89336: 移除了
configparser模块的 API:SafeConfigParser类别别名、ParsingError.filename属性和参数,以及ConfigParser.readfp方法,所有这些自 Python 3.2 起已被弃用。gh-92391: 向
csv.DictReader和csv.DictWriter添加了__class_getitem__(),允许它们在运行时被参数化。由 Marc Mueller 提供补丁。gh-91810:
ElementTree方法write()和函数tostring()现在在指定encoding="unicode"时使用文本文件的编码(如果不可用则为 "UTF-8")而不是 XML 声明中的区域设置编码。gh-81790:
os.path.splitdrive()现在理解带有 UNC 链接的 DOS 设备路径(以\\?\UNC\开头)。由 Barney Gale 贡献。gh-91760: 对正则表达式中的数字组引用和组名应用更严格的规则。现在仅接受ASCII数字序列作为数字引用。字节模式和替换字符串中的组名现在只能包含ASCII字母、数字和下划线。
gh-90622: 当多进程上下文启动方法为 ``"fork"``时,
concurrent.futures.ProcessPoolExecutor的工作进程不再按需生成(这是3.9版本中添加的特性),因为这可能会导致子进程中的死锁,因为在线程运行时发生了fork。gh-91577: 将
SharedMemory方法中的导入移动到模块级别,以便它们可以在Python终止的后期执行。gh-91581: 移除了在调用没有时区的
datetime.fromtimestamp的C实现中未处理的错误情况(即从epoch时间戳获取本地时间)。这除了在调用落在本地时间10000-01-01的时间戳时可能给出更准确的错误消息外,应该不会对用户产生影响。由Paul Ganssle提供补丁。gh-91539: 当有许多环境变量时,提高
urllib.request.getproxies_environment的性能。gh-91524: 对于包含组引用的替换字符串,通过2--3倍的速度提高了正则表达式替换(函数
re.sub()和re.subn()以及相应的re.Pattern方法)的性能。gh-91447: 修复xml模块中的findtext,仅在文本属性设置为
None时给出空字符串。gh-91456: 弃用当前的默认auto()行为:在3.13版本中,auto()的默认行为将始终返回最大成员值加1,并在使用不兼容的值类型时引发错误。
bpo-47231: 修复了tarfile长名字目录中不一致的尾部斜杠问题。
bpo-39064:
zipfile.ZipFile现在在读取损坏的 zip 文件时,如果中央目录偏移为负,会引发zipfile.BadZipFile而不是ValueError。bpo-41287: 修复了
property()子类中doc参数的处理。bpo-32547:
DictWriter和DictReader的构造函数现在将fieldnames参数强制转换为list,如果它是一个迭代器的话。bpo-35540: 修复了当
collections.defaultdict出现在属性中时dataclasses.asdict()崩溃的问题。bpo-47063: 添加了一个 index_pages 参数以支持使用非默认的索引页面名称。
bpo-46951: 对 zipapp 归档的内容进行排序,以使构建更具可重现性。
bpo-42777: 为 Windows 路径实现了
pathlib.Path.is_mount()。bpo-46755: 在
QueueHandler中,清除LogRecord中的stack_info以防止堆栈跟踪被写入两次。bpo-46642: 当尝试子类化
typing.TypeVar、typing.ParamSpec、typing.TypeVarTuple等的实例时,改进了错误消息。基于 Gregory Beauregard 的补丁。bpo-28249: 当对象没有
__doc__时,将doctest.DocTest.lineno设置为None。bpo-45924: 修复了
asyncio在多次引发 future 的异常时的错误回溯。由 Kumar Aditya 提供补丁。bpo-45046: 在
unittest中添加对上下文管理器的支持:类TestCase的方法enterContext()和enterClassContext(),类IsolatedAsyncioTestCase的方法enterAsyncContext()以及函数unittest.enterModuleContext()。bpo-44173: 启用对未压缩未加密的
zipfile.ZipExtFile的快速寻址。bpo-42627: 修复了 Windows 注册表代理设置的错误解析。
bpo-42047: 为 DragonFly BSD 添加
threading.get_native_id()支持。由 David Carlier 提供补丁。bpo-14243:
tempfile.NamedTemporaryFile函数新增了一个可选形参 delete_on_close。bpo-41246: 为
IocpProactor内部的recv,recv_into,recvfrom,sendto,send和sendfile函数提供了相同的回调函数,当重叠操作完成时调用。bpo-39264: 修复了
collections.UserDict.get()在值未找到时不调用__missing__()的问题。这与dict的行为一致。由 Bar Harel 提供补丁。bpo-38267: 为
asyncio.loop.shutdown_default_executor()添加了 timeout 参数。默认值为None,意味着执行器将被给予无限的时间。当从asyncio.Runner或asyncio.run()调用时,默认超时为 5 分钟。bpo-34828:
sqlite3.Connection.iterdump()现在可以处理在一个或多个表中使用AUTOINCREMENT的数据库。bpo-32990: 支持在
wave模块中读取使用WAVE_FORMAT_EXTENSIBLE格式的 wave 文件。bpo-26253: 允许在
tarfile.open()中为 tarfile 流调整压缩级别。
文档¶
gh-85525: 移除额外的行
gh-86404: 已移除弃用的工具
make suspicious和rstlint.py。它们已被 sphinx-lint 替代。gh-97741: 通过
conf.py补丁修复了 c 域引用目标语法中的!,使其按预期禁用引用目标解析。gh-96432: 分数字面量现在支持正斜杠周围的空格,
Fraction('2 / 3')。gh-96098: 通过从较低级别的 threading 和 multiprocessing 模块提供更清晰的链接,提高了较高层次 concurrent.futures 模块的可发现性。
gh-95957: What's New 3.11 现在提供了关于如何在 RHEL 7 和 CentOS 7 上为 Tcl/Tk 和 OpenSSL 提供编译器和链接器标志的说明。
gh-95588: 澄清了
ast文档中关于ast.literal_eval()对不可信输入“安全”使用的冲突建议,同时警告它可能会崩溃进程。后一种说法是正确的,并且被认为在不适合 bugfix 的大量工作下无法修复。因此我们保留警告,不再声称literal_eval是安全的。gh-91207: 修复了 Windows CHM htmlhelp 文档中样式表不起作用的问题,并添加了它们已被弃用的警告。由 C.A.M. Gerlach 贡献。
gh-95454: 替换了文档中错误书写的真/假值。由 Robert O'Shea 提供补丁。
gh-95451: 更新了库文档,添加了关于 WebAssembly 平台
wasm32-emscripten和wasm32-wasi的 availability information。gh-95415: 对平台可用性使用一致的语法。该指令现在支持内容体,并在遇到未知平台时发出警告。
gh-94321: 文档化 PEP 246 风格的协议类型
sqlite3.PrepareProtocol。gh-86128: 文档化 ThreadPoolExecutor 中的一个限制,即其退出处理程序在任何 atexit 处理程序之前执行。
gh-61162: 澄清
sqlite3在 如何使用连接上下文管理器 时的行为。gh-86986: 构建文档所需的最低 Sphinx 版本现在是 3.2。
gh-88831: 增加了 asyncio.create_task() 的文档。明确了需要保持对任务的强引用,并添加了一个代码片段详细说明如何做到这一点。
gh-86438: 澄清了在
warnings中,-W和PYTHONWARNINGS是字面匹配且不区分大小写的,而不是作为正则表达式匹配。gh-93031: 更新教程介绍输出,以使用 3.10+ 的 SyntaxError 无效范围。
gh-92240: 为 "Python 3.X 中的新特性" 添加了 3.0、3.1、3.2、3.8 和 3.10 版本的发布日期。
bpo-47161: 文档说明
pathlib.PurePath不会合并开头的双斜杠,因为它们表示 UNC 路径。bpo-40838: 文档说明
inspect.getdoc()、inspect.getmodule()和inspect.getsourcefile()可能会返回None。bpo-43689:
Differ文档现在还提到了其他空白字符,这些字符使得理解差异输出更加困难。bpo-13553: 文档说明 tkinter.Tk 的参数。
测试¶
gh-95027: 在 Windows 上,当 Python 测试套件使用
-jN选项运行时,现在将 ANSI 代码页用作 stdout 临时文件的编码,而不是使用可能导致解码错误的 UTF-8。补丁由 Victor Stinner 提供。gh-96624: 修复了
test.test_unittest重复运行失败的问题,该问题是由test_dotted_but_module_not_loaded中的副作用引起的。gh-95243: 通过在失败前尝试多次找到未使用的端口,缓解了在 testSockName() 中使用 find_unused_port() 固有的竞态条件。由 Ross Burton 提供补丁。
gh-95573: Lib/test/test_asyncio/test_ssl.py 暴露了 macOS 内核中的一个 bug,其中非阻塞套接字上的高强度并发负载偶尔会导致
errno.ENOBUFS(“无缓冲区空间可用”) 被发出。已向 Apple 提交 FB11063974,同时作为一种临时解决方案,减少在 macOS 上测试中使用的缓冲区大小以避免间歇性失败。由 Fantix King 提供补丁。gh-95280: 修复了在需要完美前向保密(PFS)密码的系统上
test_ssltest_get_ciphers的问题。gh-95212: 使多进程测试用例
test_shared_memory_recreate并行安全。gh-95218: 将 importlib.resources 的测试移动到 test_importlib.resources。
gh-93963: 更新测试以使用
importlib.resourcesABCs 的首选位置。gh-91330: 为
dataclasses添加了更多测试,以覆盖基于数据描述符的字段的行为。gh-94208:
test_ssl现在在更多测试中检查支持的 TLS 版本和协议。gh-94315: 测试现在检查 DAC 覆盖能力,而不是依赖于
os.geteuid()。gh-54781: 将 test_tk 重命名为 test_tkinter,并将 test_ttk_guionly 重命名为 test_ttk。补丁由 Victor Stinner 提供。
gh-93839: 将
Lib/ctypes/test/移动到Lib/test/test_ctypes/。由 Victor Stinner 提供补丁。gh-93951: 在 test_bdb.StateTestCase.test_skip 中,避免包括辅助导入器。
gh-93957: 在 test_venv.EnsurePipTest.test_with_pip 中提供来自子进程的更友好的错误报告。
gh-93884: 为
PyNumber_ToBase()添加测试用例,这些用例将大数字或非整数对象作为参数。gh-93852: test_asyncio, test_logging, test_socket 和 test_socketserver 现在在当前目录中创建 AF_UNIX 域,以避免如果临时目录(
TMPDIR环境变量)太长时因OSError("AF_UNIX 路径太长")而失败。由 Victor Stinner 提供补丁。gh-93353: regrtest 现在在运行 -jN 选项时会检查测试是否泄漏临时文件或目录。由 Victor Stinner 提供补丁。
gh-84461:
run_tests.py现在正确处理交叉编译环境变量,并将HOSTRUNNER传递给回归测试。gh-93616:
test_modulefinder现在在ModuleFinderTest.setUp()中创建临时目录,而不是在模块范围内。gh-93575: 修复 test_unicode test_raiseMemError 的问题。测试用例现在使用
test.support.calcobjsize来计算 PyUnicode 结构的大小。sys.getsizeof()在字符串具有 UTF-8 内存时可能返回不同的大小。gh-90473: WASI 没有
chmod(2)系统调用。os.chmod()现在在 WASI 上是一个虚拟函数。跳过所有依赖于os.chmod()正常工作的测试。gh-90473: 在 WASI 上跳过需要绝对路径符号链接的测试。
gh-57539: 增加
calendar.LocaleTextCalendar.formatweekday()的日历测试覆盖率。gh-90473: 在 WASI 上跳过符号链接测试。wasmtime 使用
openat2(2)和RESOLVE_BENEATH标志,这阻止了具有绝对路径的符号链接。gh-89858: 为树外构建修复
test_embed。由 Kumar Aditya 提供补丁。gh-92886: 修复在
test_imaplib.py中使用优化 (-O) 运行时失败的测试。gh-92886: 修复在
test_zipimport.py中使用优化 (-O) 运行时失败的测试。gh-92886: 修复在
test_py_compile.py中使用优化 (-O) 运行时失败的测试。gh-92886: 修复在
test_sys_settrace.py中使用优化 (-O) 运行时失败的测试。gh-92886: 修复在
_test_multiprocessing.py中使用优化 (-O) 运行时失败的测试。gh-92670: 在 AIX 上跳过
test_shutil.TestCopy.test_copyfile_nonexistent_dir测试,因为测试使用尾部斜杠强制操作系统将路径视为目录,但在 AIX 上尾部斜杠没有效果,被视为文件。gh-92514: 移除未使用的
test.support.BasicTestRunner。由 Jelle Zijlstra 提供补丁。bpo-47016: 创建一个 GitHub Actions 工作流用于验证捆绑的 pip 和 setuptools。由 Illia Volochii 和 Adam Turner 提供补丁。
构建¶
gh-96761: 修复 _bootstrap_python 的 clang 编译器构建过程,如果应用了 LTO 优化。由 Matthias Görgens 和 Donghee Na 提供补丁。
gh-96883: 浏览器的
wasm32-emscripten构建现在包括concurrent.futures用于asyncio和unittest.mock。gh-85936: CPython 现在使用 ThinLTO 选项作为默认策略,如果 Clang 编译器接受该标志。补丁由 Donghee Na 提供。
gh-96729: 确保使用
Tools\msi\buildrelease.bat构建的 Windows 版本可以升级到官方 Python 版本,也可以从官方 Python 版本升级。gh-96269: 共享模块目标现在依赖于新的
MODULE_DEPS变量,该变量包括EXPORTSYMS。这修复了不受支持的 AIX 平台上的构建顺序问题。gh-84461:
wasm32-emscripten平台不再构建resource模块,getresuid(),getresgid(),以及它们的设置器。这些 API 是存根且不可用。gh-95973: 添加一个新的
--with-dsymutil配置选项以在 macOS 中链接调试信息。由 Pablo Galindo 提供补丁。gh-90536: 使用 BOLT 后链接优化器来提高性能,特别是在中型到大型应用程序上。
gh-93744: 移除
configure --with-cxx-main构建选项:它已经多年不工作。从configure和Makefile中移除MAINCC变量。由 Victor Stinner 提供补丁。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层平台支持。gh-94847: 修复了在 GCC 使用 LTO 和 pydebug 编译时
_decimal模块的构建问题。调试构建不再强制内联函数。gh-94841: 修复了使用 MSVC 版本 1932 编译的
PyObject_Free()可能的性能回归。gh-94801:
configure现在在搜索头文件和库时使用自定义标志如ZLIB_CFLAGS和ZLIB_LIBS。gh-94773:
deepfreeze.py现在支持包含不兼容、不可排序类型的 frozensets 的代码对象。gh-94682: 使用 OpenSSL 1.1.1q 进行构建和测试
gh-90005:
readline和curses模块的依赖现在在configure脚本中通过pkg-config检测。只有ncurses/ncursesw被自动检测。旧的curses库不再自动配置。对于缺失termcap或tinfo库的变通方法已被移除。gh-90005: 修复了在没有
pkg-config的情况下构建_ctypes扩展的问题。gh-90005:
_dbm模块的依赖现在由 configure 检测。gh-94404:
makesetup现在解决了 macOS 上 sed 的问题,并为最终出现在共享扩展中的对象文件使用了正确的 CFLAGS。模块 CFLAGS 在 PY_STDMODULE_CFLAGS 之前使用,以避免与系统头文件冲突。gh-93939: C 扩展模块现在由
configure和make构建,而不是distutils和setup.py。gh-93939:
2to3、idle和pydoc脚本现在由Makefile生成和安装,而不是setup.py。gh-94280: 在Windows上更新了pegen重新生成脚本,以查找并使用Python 3.9或更高版本。在此之前,pegen重新生成已经要求3.9或更高版本,但脚本可能使用了较低版本的Python。
gh-93584: 解决了在安装PGO构建时
Makefile``中的竞争条件。所有 ``test和install目标现在都依赖于all目标。gh-69093: 修复了
Modules/Setup.stdlib.in中_sqlite3扩展的规则。gh-93207: 现在构建Python需要带有两个参数的
va_start(),如``va_start(args, format),``。``va_start()``不再使用单个参数调用。由Kumar Aditya提供补丁。gh-93202: Python现在总是使用
%zu和%zdprintf格式来格式化size_t或``Py_ssize_t``数字。构建Python 3.12需要一个C11编译器,因此现在总是支持这些printf格式。补丁由Victor Stinner提供。gh-90473: 在
wasm32-wasi上禁用pymalloc并增加堆栈大小。bpo-34449: 为HP-UX上的HP aCC移除无效的编译器开关
-fPIC。由Michael Osipov提供补丁。
Windows¶
gh-98360: 修复了
multiprocessing在Windows上从虚拟环境生成子进程的问题,以确保同样使用multiprocessing生成更多子进程的子进程能够识别它们处于虚拟环境中。gh-98414: 修复了
py.exe启动器对-V:<company>/选项的处理,当默认首选项已在环境变量或配置文件中设置时。gh-97728: 修复了在Windows上
os.system()和Windows特定模块(如winreg)中传递无效参数时使用未初始化变量可能导致的崩溃。gh-90989: 默认情况下使 Python 安装管理器 按用户安装(除非已经存在所有用户安装),并澄清安装程序中的一些文本。
gh-97649:
Tools目录不再安装在Windows上。gh-96965: 将libffi更新至3.4.3。
gh-96577: 修复了
msilib中潜在的缓冲区溢出问题。gh-96559: 修复了当没有向命令传递标签时,Windows启动器不使用配置文件中找到的默认标签的兼容性解释的问题。
gh-94781: 修复
pcbuild.proj以清理 Windows 上Python\deepfreeze和Python\frozen_modules目录中输出文件的先前实例。由 Charlie Zhao 提供补丁。gh-89545: 更新
platform代码,获取 Windows 版本以使用本机 Windows Management Instrumentation (WMI) 查询来确定操作系统版本、类型和架构。gh-95733: 使 Windows Store 包的某些要求成为可选,以允许在 Windows 的早期更新上安装。
gh-95656: 启用
enable_load_extension()sqlite3API。gh-95587: 修复了 Windows 安装程序在升级时错误检测现有安装的某些功能的问题。
gh-94399: 恢复了 Python 安装管理器 对于
/usr/bin/envshebang 行的行为,现在将在PATH中搜索与给定命令匹配的可执行文件。如果没有找到,则使用通常的搜索过程。gh-95445: 修复了在使用 Windows msi 卸载时未能成功删除 HTML 文档目录的问题。
gh-95359: 修复 Python 安装管理器 对
py.ini命令的处理(它错误地期望键上有py_前缀)以及在读取每用户配置文件时的崩溃问题。gh-95285: 修复 Python 安装管理器 处理仅传递短可执行名称的命令行的问题。
gh-90844: 允许虚拟环境在路径中有空格时正确启动。
gh-94772: 修复 py.exe 启动器中 shebang 行的错误处理
gh-93824: 对于 Windows ARM64,已启用将文件拖放到 Windows 资源管理器中的 Python 文件上。
gh-43414:
os.get_terminal_size()现在尝试从任何提供的句柄读取大小,而不仅支持文件描述符 0、1 和 2。gh-92817: 确保
py.exe将优先选择活动的虚拟环境,而不是通过环境变量或py.ini文件指定的默认标签。gh-92984: 明确为非调试构建禁用增量链接
gh-92841:
asyncio在异步套接字活动后解释器退出时不再抛出RuntimeError: Event loop is closed。由 Oleg Iarygin 提供补丁。bpo-46907: 更新 Windows 安装程序以使用 SQLite 3.38.4。
gh-91061: 接受 os.PathLike 作为 winsound.PlaySound 的参数
bpo-42658: 通过使用
LCMapStringEx而不是str.lower()在ntpath.normcase()中支持原生的 Windows 大小写不敏感路径比较。将LCMapStringEx添加到_winapi模块。bpo-38704: 阻止在不支持的 Windows 版本上安装。
macOS¶
gh-97897: macOS 13 SDK 包含对
mkfifoat和mknodat系统调用的支持。如果在使用 macOS 13 SDK 构建的 cpython 但在较早版本的 macOS 上运行时,使用dir_fd选项与os.mkfifo()或os.mknod()可能导致段错误。通过添加对这些系统调用的运行时支持检测(“弱链接”)来防止这种情况,就像在 macOS 上对其他更新的系统调用所做的那样。
IDLE¶
gh-97527: 修复了之前的一个 bug,该 bug 导致在运行 3.10.8、3.12.0a1 和至少 Microsoft Python 3.10.2288.0 且未安装 Lib/test 包时,IDLE 无法启动。3.11.0 从未受到影响。
gh-65802: 记录在另存为对话框中处理扩展名的方法。
gh-95191: 保存 Shell(交互式输入和输出)时包括提示。
gh-95511: 修复 Shell 上下文菜单复制带提示的 bug,即当选择整行时会复制额外的行。
gh-95471: 在编辑菜单中,移动
Select All并添加一个新的分隔符。gh-95411: 启用IDLE的模块浏览器以支持.pyw文件。
gh-89610: 在macOS上为IDLE添加.pyi作为已识别的扩展名。这允许通过双击Finder中的存根文件来打开它们。
工具/示例¶
gh-68686: 移除ptags和eptags脚本。
gh-97681: 移除包含旧演示脚本的
Tools/demo/目录。副本可以在`old-demos项目 <https://github.com/gvanrossum/old-demos>`_中找到。由Victor Stinner提供补丁。gh-97669: 移除
Tools/scripts/目录中过时的示例脚本。副本可以在`old-demos项目 <https://github.com/gvanrossum/old-demos>`_中找到。由Victor Stinner提供补丁。gh-95853:
wasm_build.py脚本现在预构建Emscripten端口,检查损坏的EMSDK版本,并警告关于pkg-config环境变量。gh-95853: 新工具
Tools/wasm/wasm_builder.py自动化了在WebAssembly平台上构建CPython的配置、编译和测试步骤。gh-95731: 修复
Tools/i18n/pygettext.py中模块文档字符串的处理。gh-93939: 添加脚本
Tools/scripts/check_modules.py来检查和验证内置和共享扩展模块。该脚本还处理Modules/Setup,并将最终取代setup.py。gh-94538: 修复Argument Clinic输出到自定义文件目的地的问题。补丁由Erlend E. Aasland提供。
gh-94430: 允许在Argument Clinic中使用名为
module和self的参数,并带有自定义C名称。由Erlend E. Aasland提供补丁。gh-86087: 用于解析HTML4实体的
Tools/scripts/parseentities.py脚本已被移除。
C API¶
gh-98393:
PyUnicode_FSDecoder()函数不再接受类似bytearray和memoryview类型的字节类路径:只有确切的bytes类型被接受用于字节字符串。由Victor Stinner提供补丁。gh-91051: 添加
PyType_Watch()和相关API,以允许在PyType_Modified()上回调。gh-95756: 延迟创建和缓存
co_属性,以提高代码获取器的性能。gh-96512: 现在,integer string conversion length limitation 的配置位于 PyConfig C API 结构体中。
gh-95589: 设置了
tp_dictoffset和tp_weaklistoffset的扩展类不再支持多重继承,但现在更安全。扩展类应改用Py_TPFLAGS_MANAGED_DICT和Py_TPFLAGS_MANAGED_WEAKREF。gh-95781: 在
PyUnicode_FromFormat()和PyUnicode_FromFormatV()中,无法识别的格式字符现在会设置SystemError。在之前的版本中,这会导致格式字符串的其余部分按原样复制到结果字符串中,并且任何额外的参数都会被丢弃。gh-92678: 恢复了 3.10 的行为,对于在结构体末尾存储字典的 C 扩展类支持多重继承。
gh-92678: 通过设置
Py_TPFLAGS_MANAGED_DICT标志,支持使用托管字典的 C 扩展。gh-93274: 实现 vectorcall 的 API(
Py_TPFLAGS_HAVE_VECTORCALL、PyVectorcall_NARGS()和PyVectorcall_Call())已被添加到有限 API 和稳定 ABI 中。gh-95504: 修复了在
PyUnicode_FromFormat()和PyUnicode_FromFormatV()中指定宽度或精度时的符号位置问题。由 Philip Georgi 提供补丁。gh-93012: 现在,当类的
__call__()方法被重新分配时,Py_TPFLAGS_HAVE_VECTORCALL标志会从类中移除。这使得 vectorcall 可以安全地用于可变类型(即没有immutable标志的堆类型)。不覆盖tp_call的可变类型现在会继承Py_TPFLAGS_HAVE_VECTORCALL标志。gh-95388: 创建具有可变基类的
immutable types已被弃用,并计划在 Python 3.14 中禁用。gh-92678: 添加了不稳定的 C-API 函数
_PyObject_VisitManagedDict和_PyObject_ClearManagedDict,允许 C 扩展让虚拟机管理它们的对象字典。gh-94936: 添加了
PyCode_GetVarnames()、PyCode_GetCellvars()和PyCode_GetFreevars(),用于通过 C API 分别访问co_varnames、co_cellvars和co_freevars。gh-94930: 修复了当
PyArg_ParseTupleAndKeywords()与#在(...)中一起使用但未定义PY_SSIZE_T_CLEAN时引发的SystemError。gh-94731: Python 在使用 C++ 编译时,再次对大多数类型转换操作使用 C 风格的转换。这可能会触发编译器警告,如果它们是通过例如
g++的-Wold-style-cast或-Wzero-as-null-pointer-constant选项启用的。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-89546:
PyType_FromMetaclass()(以及其他PyType_From*函数) 现在检查偏移量和基类的tp_basicsize是否适合新类的tp_basicsize。gh-93503: 向公共 C-API 添加了两个新的公共函数
PyEval_SetProfileAllThreads()和PyEval_SetTraceAllThreads(),允许在所有运行的线程中设置跟踪和分析函数,除了调用线程。此外,threading模块的两个类似函数(threading.setprofile_all_threads()和threading.settrace_all_threads())允许从 Python 中做同样的事情。由 Pablo Galindo 提供补丁。gh-93442: 为 _Py_CAST_impl() 添加 C++ 重载以处理 0/NULL。这将允许传递 0 或 NULL 到使用 _Py_CAST() 的宏的 C++ 扩展继续编译。
gh-93466: PyType_Spec 中的槽 ID 不能重复。文档已更新以提及这一点。对于某些槽重复的情况,PyType_FromSpec 及相关函数现在将引发异常。
gh-92898: 修复将函数参数转换为
PyObject*时产生的 C++ 编译器警告。由 Serge Guelton 提供补丁。gh-93103: 在文档中弃用全局配置变量,如
Py_IgnoreEnvironmentFlag,应改用Py_InitializeFromConfig()API。由 Victor Stinner 提供补丁。gh-77782: 弃用全局配置变量如
Py_IgnoreEnvironmentFlag,应改用Py_InitializeFromConfig()API。由 Victor Stinner 提供补丁。gh-92913: 确保除非设置了
PyConfig.module_search_paths_set,否则对PyConfig.module_search_paths的更改将被忽略gh-92781: 避免在 C API 中混合声明和代码以修复编译器警告:"ISO C90 禁止混合声明和代码" [-Werror=declaration-after-statement]。由 Victor Stinner 提供补丁。
gh-92651: 移除
token.h头文件。从未有任何公共的标记器 C API。token.h头文件仅设计用于 Python 内部。由 Victor Stinner 提供补丁。gh-92536: 移除基于
Py_UNICODE*的旧版 Unicode API。gh-85858: 移除
PyUnicode_InternImmortal()函数和SSTATE_INTERNED_IMMORTAL宏。由 Victor Stinner 提供补丁。gh-92193: 向 C API 添加新函数
PyFunction_SetVectorcall(),该函数设置给定PyFunctionObject的 vectorcall 字段。警告:使用此 API 的扩展必须保留未更改函数的行为!
gh-59121: 修复了一个断言,该断言阻止了
PyRun_InteractiveOne在从提供的 FD 解析时提供追溯。bpo-45383:
PyType_FromSpec()API 现在将根据提供的基类查找并使用元类。如果存在元类冲突,将会引发错误。
Python 3.11.0 beta 1¶
发布日期:2022-05-06
安全性¶
gh-57684: 添加
-P命令行选项和PYTHONSAFEPATH环境变量,以避免将可能不安全的路径前置到sys.path。由 Victor Stinner 提供补丁。
核心与内置函数¶
gh-89519: 链式 classmethod 描述符(在 bpo-19072 中引入)已被弃用。它不能再用于包装其他描述符,如 property()。此功能的核心设计存在缺陷,并导致了一系列下游问题。
gh-92345:
pymain_run_python()现在在 sys.path 被扩展以包括交互式解释器的当前工作目录之前导入readline和rlcompleter。非交互式解释器不受影响。bpo-43857: 当删除一个缺失的属性时,改进
AttributeError消息。由 Géry Ogam 提供补丁。gh-92245: 确保在所有情况下都遵循 PEP 523。在 3.11a7 中,专业化可能阻止了 Python 到 Python 的调用遵循 PEP 523。
gh-92203: 向
exec()添加一个仅限关键字的参数 closure。它只能在 exec 一个使用自由变量的代码对象时指定。指定时,它必须是一个元组,且恰好与代码对象引用的单元格变量数量相同。closure 的默认值为None,如果代码对象不引用任何自由变量,则必须为None。gh-91173: 在调试构建中禁用冻结模块。由 Kumar Aditya 提供补丁。
gh-92114: 当使用设置为
None的__class_getitem__下标类型时,改进错误消息。gh-92112: 修复由元类上的恶意自定义
mro()触发的崩溃。gh-92063:
PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS指令现在确保方法仅在正确类型的对象上调用。gh-92031: 在
Py_FINALIZE()期间静态分配的代码对象进行去优化,以便未来的_PyCode_Quicken调用总是从未优化的代码开始。gh-92036: 修复了与垃圾收集器相关的子解释器崩溃问题。当删除子解释器时,取消跟踪其垃圾收集器跟踪的所有对象。为了防止在期望对象被垃圾收集器跟踪的析构函数中崩溃,有意泄露这些对象的强引用,这样它们就永远不会被删除,它们的析构函数也不会被调用。由Victor Stinner提供补丁。
gh-92032: 解释器现在可以自动完成软关键字,截至目前包括来自 PEP 634 的
match、case和_(通配符模式) 。gh-87999: Python解析器对于紧跟在关键字后的数字字面量发出的警告已从弃用警告更改为语法警告。
gh-91869: 修复了一个问题,即带有扩展参数的专业操作码可能产生不正确的跟踪输出或导致断言失败。
gh-91603: 加速
types.UnionType的实例化。基于Yurii Karabas提供的补丁。gh-89373: 如果Python在调试模式下构建,Python现在确保析构函数不会改变当前异常。由Victor Stinner提供补丁。
gh-91632: 修复了一个退出时的轻微内存泄漏:释放
generic_alias_iterator类型的内存。由Donghee Na提供补丁。gh-81548: 值大于
0o377的八进制转义现在会产生DeprecationWarning。在未来的Python版本中,它们将变为SyntaxWarning,最终变为SyntaxError。bpo-43950: 使用单个紧凑表来表示行的开始、结束和列偏移。将位置信息的内存消耗减少了一半。
gh-91102: 对
EncodingMap使用Argument Clinic。由Oleg Iarygin提供补丁。gh-91636: 修复了垃圾回收边缘情况下的崩溃问题,其中
PyFunction_Type.tp_clear函数可能让Python函数对象处于不一致状态。gh-91603: 加速
isinstance()和issubclass()对types.UnionType的检查。由Yurii Karabas提供补丁。gh-91625: 修复了一个在自适应操作码特化失败时忽略任何前置
EXTENDED_ARG的错误。gh-78607: LLTRACE特殊构建现在查找模块全局中定义的名称
__lltrace__,而不是之前因拼写错误引入的名称__ltrace__。gh-91576: 通过Kumar Aditya的补丁,将ASCII字符串的迭代速度提高了50%。
gh-89279: 通过内联几个特定的宏来提高Windows上解释器的性能。
gh-91502: 添加一个新的
_PyFrame_IsEntryFrame()API函数,用于检查PyFrameObject是否为入口帧。由Pablo Galindo提供补丁。gh-91266: 重构
bytearray的去除方法strip、lstrip和rstrip,以使用共同的实现。gh-91479: 将
BaseException的__note__字段(在3.11的早期版本中添加)替换为 PEP 678 的最终设计。即BaseException获得一个add_note()方法,其__notes__字段在必要时创建。gh-46055: 通过移除不必要的临时创建,加速负整数的右移操作。原始由Xinhang Xu提供补丁,由Mark Dickinson重新设计。
gh-91462: 通过显示操作码名称(而不仅仅是数字)和每个操作码前的堆栈内容,使解释器的低级跟踪(lltrace)功能输出更易读。
gh-91421: 修复了 _Py_DecodeUTF8Ex 中潜在的整数溢出问题。
gh-91428: 在调试版本的
opcode.h中添加static const char *const _PyOpcode_OpName[256] = {...};,以帮助调试Python解释器。现在,通过包含操作码名称而不仅仅是相应的十进制数字,使得各种形式的调试输出更便于人类阅读变得更加方便。bpo-47120: 使
POP_JUMP_IF_TRUE、POP_JUMP_IF_FALSE、POP_JUMP_IF_NONE和POP_JUMP_IF_NOT_NONE虚拟化,映射到新的相对跳转操作码。bpo-45317: 添加内部文档,解释新的(针对3.11版本)帧栈的设计。
库¶
bpo-47197: ctypes 过去错误处理
void返回类型,例如,像ctypes.CFUNCTYPE(None, ctypes.c_int)这样声明的函数会以int f(int)的签名被调用,而不是void f(int)。Wasm 目标要求以正确的签名调用函数指针,因此这导致了崩溃。现在这个问题已经修复。
核心与内置函数¶
bpo-47120: 使操作码
JUMP_IF_TRUE_OR_POP和JUMP_IF_FALSE_OR_POP相对而不是绝对。bpo-47177: 将内部
_PyInterpreterFrame结构的f_lasti成员替换为prev_instr指针,这减少了主解释器循环的开销。为了向后兼容,Python层框架对象的f_lasti属性被保留。bpo-46962: 类和函数不再无视
--without-doc-strings编译标志无条件声明它们的文档字符串。受影响的类有
ctypes.UnionType、pickle.PickleBuffer、testcapi.RecursingInfinitelyError和types.GenericAlias。受影响的函数是
ctypes中的24个方法。由 Oleg Iarygin 提供补丁。
bpo-46942: 使用 Argument Clinic 为
types.MethodType构造函数。由 Oleg Iarygin 提供补丁。bpo-46764: 修复使用 @classmethod 包装绑定方法的问题。
bpo-43464: 为非集合参数优化
set.intersection()。bpo-46721: 为非集合参数优化
set.issuperset()。bpo-46509: 添加
Py_DECREF()的类型特化版本,并为float、int、str、bool和None使用它们,以避免在运行时类型已知的情况下进行指针追踪。
构建¶
bpo-46045: 在 NetBSD 上不使用 POSIX 信号量。
核心与内置函数¶
bpo-36819: 修复内置编码器中错误处理程序返回的位置小于或等于不可编码字符起始位置时的崩溃问题。
bpo-34093:
marshal.dumps()对所有内部字符串使用FLAG_REF。这使得输出更加确定性,有助于可重现的构建。bpo-26579: 添加了
object.__getstate__,提供了__getstate__()方法的默认实现。现在复制和腌制内置类型 bytearray、set、frozenset、collections.OrderedDict、collections.deque、weakref.WeakSet 和 datetime.tzinfo 的子类实例时,会复制和腌制作为槽实现的实例属性。
库¶
gh-87901: 向
os.popen()添加 encoding 参数。gh-92332: 弃用
typing.Text(目前未计划移除该类) 。由 Alex Waygood 提供补丁。gh-78157: 弃用枚举定义中成为成员的嵌套类——在 3.13 中它们将成为普通类;添加
member和nonmember函数以允许现在控制结果。gh-92356: 修复了 ctypes 函数调用中的性能回归问题。
gh-92301: 在
subprocess模块中,优先使用close_range()而非遍历procfs来关闭文件描述符,以获得更好的性能。gh-67248: 在Cmd.do_help()中对杂项主题进行排序。
gh-92210: 将
socket.__init__移植到Argument Clinic。由Cinder提供补丁。gh-80010: 为
datetime.datetime.fromisoformat()、datetime.date.fromisoformat()和datetime.time.fromisoformat()添加对广义ISO 8601解析的支持。由Paul Ganssle提供补丁。gh-92118: 修复了
contextmanager()在3.11版本中的一个回归问题,该问题导致异常传播时跟踪信息不正确。gh-90887: 为macOs上的
os.fcopyfile()添加COPYFILE_STAT、COPYFILE_ACL和``COPYFILE_XATTR``常量。gh-91215: 对于
@~dataclasses.dataclass,增加了 weakref_slot。 该新增形参默认为False。 如果为真值,并且如果slots=True,则添加一个名为"__weakref__"的槽位,这将允许实例被弱引用。 由 Eric V. Smith 贡献gh-85984: 为Unix新增函数os.login_tty()。
gh-92128: 向
logging.LoggerAdapter和logging.StreamHandler添加__class_getitem__()方法,允许它们在运行时被参数化。由Alex Waygood提供补丁。gh-92049: 禁止pickling常量
re._constants.SUCCESS等。之前,pickling不会失败,但结果无法被unpickle。gh-92062: 如果
name是一个关键字,除了现有的检查它是标识符外,inspect.Parameter现在会引发ValueError。gh-87390: 向
types.GenericAlias添加一个__unpacked__属性。由Jelle Zijlstra提供补丁。gh-88089: 添加对泛型
typing.NamedTuple的支持。gh-91996: 新增http.HTTPMethod枚举,以方便的方式表示所有可用的HTTP请求方法
gh-91984: 修改test_argparse.py中的测试字符串,使其在行尾不包含尾随空格。
gh-91952: 向
TextIOWrapper.reconfigure()添加encoding="locale"支持。gh-91954: 向
subprocess.getoutput()和subprocess.getstatusoutput()添加 encoding 和 errors 参数。bpo-47029: 在向管道的写入端最后一次写入缓冲数据*之后*,始终关闭
multiprocessing.Queue使用的管道的读取端,以避免在垃圾回收和调用multiprocessing.Queue.close()时出现BrokenPipeError。补丁由 Géry Ogam 提供。gh-91928: 为
datetime.timezone.utc添加datetime.UTC别名。由 Kabir Kwatra 提供补丁。
gh-68966:
mailcap模块现在已被弃用,并将在 Python 3.13 中移除。有关理由请参阅 PEP 594,替代方案请参阅mimetypes模块。由 Victor Stinner 提供补丁。gh-91401: 提供一种方法来禁用
subprocess使用vfork(),以防万一需要,并记录posix_spawn()的现有机制。gh-64783: 修复 FreeBSD 上的
signal.NSIG值,以接受大于 32 的信号编号,如signal.SIGRTMIN和signal.SIGRTMAX。由 Victor Stinner 提供补丁。gh-91910: 在
multiprocessing和asyncio模块的错误消息中,为 f-字符串添加缺失的 f 前缀。gh-91860: 添加
typing.dataclass_transform(),实现 PEP 681。由 Jelle Zijlstra 提供补丁。gh-91832: 在
argparse.Action的 repr 输出中添加required属性。gh-91827: 在
tkinter模块中添加方法info_patchlevel(),该方法返回 Tcl 库的确切版本,作为一个类似于sys.version_info的命名元组。gh-84461: 添加
--enable-wasm-pthreads以启用 WASM 构建的 pthreads 支持。Emscripten/node不再默认启用线程。包括额外的文件系统。gh-91821: 修复
test_decimal.py中不稳定的test_from_tuple测试。gh-91217: 弃用 xdrlib 模块。
gh-91217: 弃用 uu 模块。
gh-91760: 在正则表达式中,对数值组引用和组名将应用更严格的规则。目前,对于未来Python版本中将变为错误的组引用和组名,会发出弃用警告。
gh-84461: 添加临时的
sys._emscripten_info命名元组,包含有关Emscripten平台的构建时和运行时信息。gh-90623:
signal.raise_signal()和os.kill()现在会立即检查挂起的信号。由Victor Stinner提交的补丁。gh-91734: 修复Solaris上的OSS音频支持。
gh-90633: 在由
typing.assert_never()抛出的异常中包含传递的值。由Jelle Zijlstra提交的补丁。gh-91700: 现在,包含条件表达式
(?(group)...)的正则表达式的编译,如果组号引用未定义的组,将引发适当的re.error。之前会引发内部RuntimeError。gh-91231: 向
multiprocessing.BaseManager构造函数添加一个可选的关键字参数 shutdown_timeout。如果terminate()操作超过超时时间,则终止进程。由Victor Stinner提交的补丁。gh-91621: 修复
typing.get_type_hints()对collections.abc.Callable的支持。由Shantanu Jain提交的补丁。gh-90568: 在
regular expression中解析Unicode命名字符序列的\N转义现在会引发re.error而不是TypeError。gh-91217: 弃用telnetlib模块。
gh-91217: 弃用sunau模块。
gh-91217: 弃用spwd模块。
gh-91217: 弃用sndhdr模块,以及为
email.mime.MIMEAudio内联所需的功能。gh-91616:
re模块,修复使用原子分组或占有量词时的fullmatch()不匹配问题。gh-91217: 弃用'pipes'模块。
gh-91217: 弃用ossaudiodev模块。
gh-91217: 弃用 nis 模块。
gh-91595: 修复
Tools.gdb.libpython.write_repr()中字符和整数的比较。由 Yu Liu 提交的补丁。gh-74166: 添加选项以在
create_connection()无法建立连接时将所有错误以ExceptionGroup的形式抛出。默认行为仍然是仅抛出尝试多个地址时发生的最后一个错误。gh-91487: 优化 asyncio UDP 速度,传输大文件时速度提升超过100倍。
gh-90622: 在
concurrent.futures.process.ProcessPoolExecutor中,当使用新的max_tasks_per_child特性时,禁止使用 "fork" 多进程启动方法,因为线程+fork 的混合会导致子进程挂起。在这种情况下,如果没有提供mp_context,默认使用安全的 "spawn" 启动方法。gh-89022: 在
sqlite3中,SQLITE_MISUSE结果代码现在映射到InterfaceError而不是ProgrammingError。此外,当绑定参数失败时,会抛出更准确的异常。由 Erlend E. Aasland 提交的补丁。gh-91526: 停止在
TextIOWrapper中调用os.device_encoding(file.fileno())。它复杂,从未被文档化,并且在大多数情况下不起作用。(由 Inada Naoki 提交的补丁。)gh-88116: 将
inspect模块中与帧相关的函数更改为返回一个常规对象(与旧的类似元组的接口向后兼容),该对象包括扩展的 PEP 657 位置信息(结束行号、列和结束列)。受影响的函数有:inspect.getframeinfo()、inspect.getouterframes()、inspect.getinnerframes()、inspect.stack()和inspect.trace()。由 Pablo Galindo 提交的补丁。gh-69093: 为
sqlite3.Blob添加索引和切片支持。由 Aviv Palivoda 和 Erlend E. Aasland 提交补丁。gh-69093: 为
sqlite3.Blob添加 上下文管理器` 支持。由 Aviv Palivoda 和 Erlend E. Aasland 提交补丁。gh-91217: 废弃 nntplib。
gh-91217: 废弃 msilib。
gh-91217: 废弃 imghdr 模块。
gh-91217: 废弃 crypt 模块。
bpo-47000: 当指定
encoding="locale"时,即使处于 UTF-8 模式,TextIOWrapper也使用区域编码。gh-91230:
warnings.catch_warnings()现在接受warnings.simplefilter()的参数,提供了一种更简洁的方式来本地忽略警告或将它们转换为错误。gh-91217: 废弃 chunk 模块。
bpo-47260: 修复
os.closerange()在 Linux seccomp 沙箱中可能不执行任何操作的问题。bpo-47087: 实现
typing.Required和typing.NotRequired(PEP 655)。由 David Foster 和 Jelle Zijlstra 提交补丁。bpo-47061: 废弃 cgi 和 cgitb。
bpo-47061: 废弃 audioop。
bpo-47000: 添加
locale.getencoding()以获取当前区域编码。它类似于locale.getpreferredencoding(False),但忽略 Python UTF-8 模式。bpo-42012: 添加
wsgiref.types,包含用于静态类型检查的 WSGI 特定类型。bpo-47211: 移除未文档化且从未工作的函数
re.template()和标志re.TEMPLATE。这在 3.11.0b2 中被撤销并改为废弃。bpo-47135:
decimal.localcontext()现在通过关键字参数接受上下文属性。bpo-46841: 快速代码的反汇编。
bpo-46681: 将 gzip.compress() 的 compresslevel 参数传递给 zlib。
bpo-45100: 添加
typing.get_overloads()和typing.clear_overloads()。由 Jelle Zijlstra 提供补丁。bpo-44807:
typing.Protocol不再静默替换子类上定义的__init__()方法。由 Adrian Garcia Badaracco 提供补丁。bpo-46787: 修复
concurrent.futures.ProcessPoolExecutor异常内存泄漏bpo-46720: 为 Windows 添加对路径类对象的支持到
multiprocessing.set_executable(),以与类 Unix 系统保持一致。由 Géry Ogam 提供补丁。bpo-46053: 修复 NetBSD 上的 OSS 音频支持。
bpo-46285: 为模块
http.server添加命令行选项-p/--protocol,指定服务器符合的 HTTP 版本(HTTP/1.1 兼容的服务器现在可以从模块http.server的命令行界面运行)。由 Géry Ogam 提供补丁。bpo-44791: 接受省略号作为
typing.Concatenate的最后一个参数。bpo-46547: 移除泄漏到
pydoc.Helper类命名空间的变量。bpo-46415: 修复 ipaddress.ip_{address,interface,network} 在给定无效元组作为地址参数时抛出 TypeError 而不是 ValueError 的问题。
bpo-46075: 带有
DefaultCookiePolicy的CookieJar现在可以处理来自 localhost 的 cookie,这些 cookie 在 Set-Cookie 头中明确指定了 domain=localhost。bpo-45995: 在字符串格式化规范中添加 "z" 选项,该选项在四舍五入到格式精度后,将负零浮点值强制转换为正零。由 John Belmonte 贡献。
bpo-26175: 为
tempfile.SpooledTemporaryFile对象完全实现io.BufferedIOBase或io.TextIOBase接口。这使得它们能与更高层次的模块(如压缩模块)正确协作。由 Carey Metcalfe 提供补丁。bpo-45138: 修复
sqlite3跟踪回调中的一处回归问题,其中绑定参数未在传递的语句字符串中展开。此回归问题由 Python 3.10 中的 bpo-40318 引入。补丁由 Erlend E. Aasland 提供。bpo-44863: 允许
TypedDict子类在基于类的语法中也包含Generic作为基类。从而允许用户定义一个泛型TypedDict,就像用户定义的泛型一样,但具有TypedDict语义。bpo-44587: 修复 BooleanOptionalAction 不自动添加默认字符串的问题。如果需要默认字符串,使用格式化程序添加。
bpo-43827:
ABCMeta.__new__的所有位置或关键字参数现在都是仅位置的,以避免与要传递给__init_subclass__()的关键字参数冲突。bpo-43218: 防止创建路径包含 PATH 分隔符的 venv。这可能会影响激活脚本的使用。由 Dustin Rodrigues 提供补丁。
bpo-38435: 向
subprocess.Popen添加一个process_group参数,以帮助将更多内容从不安全的preexec_fn参数中移出。bpo-42066: 修复
CookieJar.__iter__()中对 cookie 进行排序的问题,这是一个额外的行为,且在 RFC 2965 或 Netscape cookie 协议中未提及。现在CookieJar中的 cookie 遵循Set-Cookie头的顺序。由 Iman Kermani 提供补丁。bpo-40617: 向
sqlite3.Connection添加create_window_function()用于创建聚合窗口函数。由 Erlend E. Aasland 提供补丁。bpo-40676: 将
csv模块的csv.field_size_limit()、csv.get_dialect()、csv.unregister_dialect()和csv.list_dialects()转换为使用 Argument Clinic。bpo-39716: 当相同的子解析器名称被两次添加到
argparse.ArgumentParser时,引发一个ArgumentError。这与当相同的选项字符串被两次添加到ArgumentParser时的(默认)行为一致。bpo-36073: 在
sqlite3转换器中递归使用游标时,引发ProgrammingError而不是段错误。由 Sergey Fedoseev 提供补丁。bpo-34975: 向
StreamWriter添加了一个start_tls()方法,该方法使用给定的SSLContext升级连接为 TLS。bpo-22276:
Path的方法glob()和rglob()如果 pattern 以路径名组件分隔符(/或sep)结尾,则仅返回目录。由 Eisuke Kawashima 提供补丁。bpo-24905: 向
sqlite3.Connection添加了blobopen()。sqlite3.Blob允许对 blob 进行增量 I/O 操作。由 Aviv Palivoda 和 Erlend E. Aasland 提供补丁。
文档¶
gh-91888: 向文档添加一个新的
gh角色,以链接到 GitHub 问题。gh-91783: 记录关于使用函数
shutil.unpack_archive()的安全问题。gh-91547: 移除“未记录模块”页面。
gh-91298: 在
importlib.resources.abc中,完善了 Traversable 协议的文档,应用了从 importlib_resources 5.7.1 的更改。bpo-44347: 澄清了 dirs_exist_ok 的含义,这是
shutil.copytree()的一个关键字参数。bpo-36329: 移除 'make -C Doc serve',支持 'make -C Doc htmlview'。
bpo-47189: 为 Faster CPython 项目添加 Python 3.11 新特性条目。文档由 Ken Jin 和 Kumar Aditya 提供。
bpo-38668: 更新
os.path文档的引言,移除在实现了 PEP 383 和 PEP 529 后变得无关紧要的警告。bpo-47115: 文档现在列出了C结构体的哪些成员是 Limited API/Stable ABI 的一部分。
bpo-46962: 现在所有代码片段中的文档字符串都被包装进
PyDoc_STR,以遵循 PEP 7的文档字符串段落 的指导。由Oleg Iarygin提供补丁。bpo-26792: 改进
runpy.run_module()和runpy.run_path()的文档字符串。原始补丁由Andrew Brezovsky提供。
测试¶
gh-92169: 在测试中统一使用
warnings_helper.import_deprecated()来导入已弃用的模块。补丁由Hugo van Kemenade提供。gh-84461: 当启用多进程时,libregrtest现在可以通过
--python标志使用除sys.executable之外的Python可执行文件。gh-91904: 修复
PYTHONREGRTEST_UNICODE_GUARD的初始化,该问题阻止了在非UTF-8语言环境下运行回归测试。gh-91752: 在test.test_tools.test_freeze.TestFreeze中添加了@requires_zlib。
gh-91607: 修复
test_concurrent_futures,在测试逻辑混淆的情况下测试正确的多进程启动方法上下文。bpo-40280: 现在在没有pthread支持的WASM目标上跳过线程测试。
bpo-47109: 将
ctypes.macholib.dyld、ctypes.macholib.dylib和ctypes.macholib.framework的测试从手动的前unittest时代带到ctypes.test的位置和结构。由Oleg Iarygin提供补丁。bpo-29890: 为
ipaddress.IPv4Interface和ipaddress.IPv6Interface添加了使用元组参数构造的测试。原始补丁和测试由louisom提供。
构建¶
Windows¶
macOS¶
bpo-46907: 更新 macOS 安装程序以使用 SQLite 3.38.4。
工具/示例¶
gh-91583: 修复了 Argument Clinic 为带有
defining_class参数的函数生成的代码中的回归问题。gh-91575: 添加脚本
Tools/scripts/generate_re_casefix.py和 make 目标regen-re,用于根据当前 Unicode 版本生成用于大小写不敏感匹配的额外数据。gh-91551: 移除了古老的 Pynche 颜色编辑器。它已经迁移到 https://gitlab.com/warsaw/pynche。
C API¶
gh-88279: 弃用以下 C 函数:
PySys_SetArgv(),PySys_SetArgvEx(),PySys_SetPath()。由 Victor Stinner 提供补丁。gh-92154: 添加了
PyCode_GetCode()函数。此函数执行等同于 Python 代码getattr(code_object, 'co_code')的操作。gh-92173: 修复了
PyEval_EvalCodeEx()的closure参数。gh-91320: 修复了关于 Python C API 中“旧式转换”(
g++ -Wold-style-cast)的 C++ 编译器警告。在 C++ 中使用 Python C API 时,使用 C++ 的reinterpret_cast<>和static_cast<>转换。由 Victor Stinner 提供补丁。gh-80527: 通过 PEP 623 将以下函数标记为弃用 :
PyUnicode_AS_DATA(),PyUnicode_AS_UNICODE(),PyUnicode_GET_DATA_SIZE(),PyUnicode_GET_SIZE()。由 Victor Stinner 提供补丁。gh-91768:
Py_REFCNT(),Py_TYPE(),Py_SIZE()和Py_IS_TYPE()函数的参数类型现在为PyObject*而不是const PyObject*。补丁由 Victor Stinner 提供。gh-91020: 添加
PyBytes_Type.tp_alloc来为 bytes 子类初始化PyBytesObject.ob_shash。bpo-40421: 添加
PyFrame_GetLastiC-API 函数以安全地从 C 代码访问帧对象的f_lasti属性。bpo-35134: 移除
Include/code.h头文件。C 扩展应仅包含主<Python.h>头文件。补丁由 Victor Stinner 提供。bpo-47169:
PyOS_CheckStack()现在在 Windows 上的稳定 ABI 中导出。bpo-47169:
PyThread_get_thread_native_id()在不存在的平台(如 Solaris)上被排除在稳定 ABI 之外。bpo-46343: 添加
PyErr_GetHandledException()和PyErr_SetHandledException()作为PyErr_GetExcInfo()和PyErr_SetExcInfo()的更简单替代。它们被包含在稳定 ABI 中。
Python 3.11.0 alpha 7¶
发布日期: 2022-04-05
核心与内置函数¶
bpo-47212: 对于没有后续缩进的裸
except,抛出IndentationError而不是SyntaxError。对于用作参数的无括号生成器,改进SyntaxError的位置。由 Matthieu Dartiailh 提供补丁。bpo-47186: 用
CHECK_EG_MATCH+ 跳转替换JUMP_IF_NOT_EG_MATCH。bpo-47176: 由于平台限制,Emscripten 构建不能以通常的方式处理信号。Python 现在可以处理信号。要使用,设置 Module.Py_EmscriptenSignalBuffer 为单个字节的 SharedArrayBuffer 并设置 Py_EMSCRIPTEN_SIGNAL_HANDLING 为 1。向 SharedArrayBuffer 写入一个数字将导致相应的信号被提升到 Python 线程中。
bpo-47186: 用
CHECK_EXC_MATCH+ jump 替换JUMP_IF_NOT_EXC_MATCH。bpo-47120: 用相对的
JUMP_BACKWARD_NO_INTERRUPT替换绝对跳转操作码JUMP_NO_INTERRUPT。bpo-46841: 比较代码对象时避免不必要的分配。
bpo-47182: 修复在主解释器第二次初始化后使用命名Unicode字符如
"\N{digit nine}"时崩溃的问题。bpo-47162: WebAssembly 无法处理错误的函数指针转换(参数数量或类型不同)。Python 现在可以使用调用蹦床来缓解这个问题。定义
PY_CALL_TRAMPOLINE来启用调用蹦床。bpo-46775: 现在一些Windows系统错误代码(>= 10000)被正确映射到errno,并可能引发
OSError的子类。由Donghee Na提供补丁。bpo-47129: 改进关于空表达式的f-string语法错误消息。
bpo-47117: 修复在交互模式下如果分词器缓冲区未初始化时解码字符失败导致的崩溃。由Pablo Galindo提供补丁。
bpo-47127: 通过特殊化,将带有关键字参数的c函数调用速度提高25%。由Kumar Aditya提供补丁。
bpo-47120: 用相对跳转
JUMP_BACKWARD替换JUMP_ABSOLUTE。bpo-42197:
PyFrame_FastToLocalsWithError()和PyFrame_LocalsToFast()在性能分析或跟踪期间不再被调用。C代码可以通过调用PyFrame_GetLocals()来访问PyFrameObject的f_locals属性。bpo-47070: 通过减少
memcpy的调用次数来提高array_inplace_repeat的性能。重构array,bytes,bytearray和unicodeobject的repeat和原地repeat方法以使用共同的_PyBytes_Repeat。bpo-47053: 减少专业化的
BINARY_OP_INPLACE_ADD_UNICODE操作码中的去优化。bpo-47045: 从 _PyInterpreterFrame 结构中移除
f_state字段。向 _PyInterpreterFrame 结构添加owner字段,以明确所有权,简化帧和生成器的清理和释放。
库¶
bpo-46968: 在
faulthandler中检查 "sys/auxv.h" 头文件的存在,以避免在不存在此头文件的系统中出现编译问题。由 Pablo Galindo 提供补丁。
核心与内置函数¶
bpo-46329: 使用
LOAD_GLOBAL的低位来指示是否在全局变量之前推送一个NULL。有助于稍微简化调用序列。bpo-46841: 通过将快速字节码存储为相应的
PyCodeObject的一部分,原地快速化字节码。bpo-47012: 通过 Kumar Aditya 的补丁,将
bytes和bytearray的迭代速度提高了 30%。bpo-47009: 通过优化常见情况(无需调整大小的情况),提高了
list.append()和列表推导式的性能。由 Dennis Sweeney 提供补丁。bpo-47005: 通过减少
memcpy的调用次数,提高了bytearray_repeat和bytearray_irepeat的性能。
库¶
bpo-46829: 弃用在
asyncio.Future.cancel()和asyncio.Task.cancel()中传递消息的做法。
核心与内置函数¶
bpo-46993: 通过 Kumar Aditya 的补丁,将
bytearray从list和tuple创建的速度提高了 40%。bpo-39829: 移除了初始化列表时的
__len__()调用,并将初始化移至list_extend。由 Jeremiah Pascual 提供补丁。bpo-46944: 通过
METH_FASTCALL调用约定,加快了在生成器中抛出异常的速度。补丁由 Kumar Aditya 提供。bpo-46841: 修改
STORE_SUBSCR以使用内联缓存条目(而非其操作数)作为自适应计数器。bpo-46841: 为
PRECALL和CALL使用内联缓存,并移除用于管理(现在未使用的)非内联缓存的内部机制。bpo-46881: 静态分配并初始化 latin1 字符。
bpo-46838: 改进不正确函数定义的语法错误。由Pablo Galindo提供补丁。
bpo-43721: 修复
getter,setter, 和deleter的文档字符串,以明确它们创建属性的新副本。bpo-43224: 为PEP 646做出所需的语法更改。
库¶
bpo-47208: 允许供应商覆盖
CTYPES_MAX_ARGCOUNT。bpo-47167: 允许在
asyncio.Task中覆盖未来的合规性检查。bpo-47151: 当子进程尝试使用vfork时,如果vfork返回错误,现在会回退到fork。这允许在操作系统内核不允许vfork的情况下使用。
bpo-47152: 将
re模块转换为包。弃用模块sre_compile,sre_constants和sre_parse。bpo-4833: 添加
ZipFile.mkdir()bpo-27929: 修复
asyncio.loop.sock_connect()仅解析socket.AF_INET或socket.AF_INET6家族的名称。对于其他家族,如socket.AF_BLUETOOTH和socket.AF_UNIX,解析可能没有意义。bpo-14265: 将完全限定的测试名称添加到unittest输出中
bpo-47061: 弃用aifc模块。
bpo-39622: 在asyncio程序中处理Ctrl+C以中断主任务。
bpo-47101:
hashlib.algorithms_available现在仅列出由OpenSSL 3.0上激活的加密提供者提供的算法。除非将遗留提供者加载到默认的OSSL上下文中,否则不会列出遗留算法。bpo-47099:
urllib.request.URLopener中引发的所有URLError异常消息现在在ftp error和消息的其余部分之间包含冒号。之前,open_ftp()缺少冒号。由Oleg Iarygin提供补丁。bpo-47099: 异常链的机制从
Exception.with_traceback()/sys.exc_info()更改为 PEP 3134。由 Oleg Iarygin 提供补丁。bpo-47095:
hashlib的内部_blake2模块现在优先使用来自 https://www.blake2.net/ 的libb2而不是 Python 自带的 blake2 副本。bpo-47098:
hashlib内部_sha3模块的 Keccak 代码包已被替换为 tiny_sha3。该模块在 Python 构建时不带 OpenSSL 时作为回退使用。bpo-47088: 实现了
typing.LiteralString,这是 PEP 675 的一部分。由 Jelle Zijlstra 提供补丁。bpo-42885: 对以
\A或^开始的正则表达式优化了re.search()、re.split()、re.findall()、re.finditer()和re.sub()。bpo-23691: 保护
re.finditer()迭代器不被重新进入。bpo-47067: 通过使用 PEP 590
vectorcall并用PyObject_SetAttr替换PyObject_SetAttrString,优化了对GenericAlias对象的调用。bpo-28080: 在
zipfile.ZipFile构造函数中添加了 metadata_encoding 参数,并在zipfileCLI 中添加了--metadata-encoding选项,以允许使用非标准编解码器读取压缩包中的文件名。bpo-47000: 当启用 UTF-8 模式时,使
io.text_encoding()返回 "utf-8"。bpo-42369: 修复
zipfile._SharedFile.tell()的线程安全性,以避免在多线程读取ZipFile时出现 "zipfile.BadZipFile: Bad CRC-32 for file" 异常。bpo-38256: 修复了当编译使用 zlib 的 crc32 时的
binascii.crc32(),使其正确处理长度超过 4GiB 的输入而不是返回错误结果。在此之前的解决方法是始终以小于 4GiB 的增量向函数提供数据,或直接调用 zlib 模块函数。我们还让
binascii.crc32()在处理较大输入时释放 GIL,就像zlib.crc32()和hashlib所做的那样。这也提升了Windows上的性能,因为现在
binascii.crc32()使用了zlib crc32实现,速度提升了2-3倍。标准库在两个模块中都有crc32 API是一个已知的历史遗留问题。这使我们更接近于它们背后的单一实现。
bpo-47066: 全局内联标志(例如
(?i))现在只能在正则表达式的开头使用。从Python 3.6开始,不在表达式开头使用它们已被弃用。bpo-39394: 关于不在正则表达式开头的内联标志的警告现在包含标志的位置。
bpo-433030: 在
正则表达式中添加了对原子分组((?>...))和占有量词(*+,++,?+,{m,n}+)的支持。bpo-47062: 实现
asyncio.Runner上下文管理器。bpo-46382:
dataclass()slots=True现在正确地省略了基类中已经定义的槽。由Arie Bovenberg提供补丁。bpo-47057: 对
FutureIter.throw()使用FASTCALL约定。bpo-47061: 弃用 PEP 594 中列出的各种模块:
aifc, asynchat, asyncore, audioop, cgi, cgitb, chunk, crypt, imghdr, msilib, nntplib, nis, ossaudiodev, pipes, smtpd, sndhdr, spwd, sunau, telnetlib, uu, xdrlib
bpo-34790: 移除将协程对象传递给
asyncio.wait()。bpo-47039: 标准化asyncio future和task对象的
repr()。bpo-2604: 修复了使用全局变量的doctests在多次运行时失败的bug。
bpo-45150: 添加
hashlib.file_digest()辅助函数,用于高效哈希文件对象。bpo-34861: 使cumtime成为cProfile的默认排序键。
bpo-45997: 修复
asyncio.Semaphore重新获取FIFO顺序的问题。bpo-47022:
asynchat,asyncore和smtpd模块至少从Python 3.6开始已被弃用。它们的文档和弃用警告现在已更新,指出它们将在Python 3.12中移除(PEP 594)。bpo-43253: 修复在Proactor事件循环中关闭传输时底层套接字句柄已无效导致的崩溃问题。
bpo-40280:
select.select()现在对每个空的fdset传递NULL给select。bpo-47004: 应用来自importlib_metadata 4.11.3的错误修复,包括修复EntryPoint.extras返回匹配对象而非额外字符串的问题。
bpo-46998: 允许对
typing.Any进行子类化。由Shantanu Jain提供补丁。bpo-46995: 弃用第三方任务实现中缺失的
asyncio.Task.set_name(),计划在Python 3.13中使其成为强制要求。bpo-46994: 在
asyncio.create_task()和asyncio.loop.create_task()中接受显式的contextvars.Context。bpo-46981:
typing.get_args(typing.Tuple[()])现在返回()而不是((),)。bpo-46968: 添加
os.sysconf_names['SC_MINSIGSTKSZ']。bpo-46985: 升级与ensurepip捆绑的pip wheel(pip 22.0.4)。
bpo-46968:
faulthandler: 在Linux 5.14及更新版本上,动态确定CPython使用getauxval(AT_MINSIGSTKSZ)分配的信号处理程序堆栈大小。这一变化允许Python扩展请求Linux内核在Sapphire Rapids Xeon处理器上使用AMX_TILE指令集成功,解除了该ISA在框架中使用的阻碍。bpo-46955: 将
asyncio.base_events.Server作为asyncio.Server公开。由Stefan Zabka提供补丁。bpo-46932: 更新捆绑的libexpat到2.4.7版本。
bpo-46933:
pwd模块现在是可选的。当pwd模块不可用时,os.path.expanduser()返回路径。bpo-464471: 添加了
asyncio.timeout()和asyncio.timeout_at()上下文管理器。由Tin Tvrtković和Andrew Svetlov提交的补丁。bpo-46805: 为asyncio添加了原始数据报套接字函数:
sock_sendto()、sock_recvfrom()和sock_recvfrom_into()。bpo-46644: 不再要求有效的类型形式必须是可调用的。这允许
typing.Annotated包装typing.ParamSpecArgs和dataclasses.InitVar。由Gregory Beauregard提交的补丁。bpo-46581: 使
GenericAlias的ParamSpec传播与Concatenate(及其他) 保持一致。bpo-45413: 定义了 posix_venv 和 nt_venv sysconfig安装方案,用于引导新的虚拟环境。添加了 venv sysconfig安装方案以获取上述适当的方案。这些方案与预先存在的 posix_prefix 和 nt 安装方案相同。
venv模块现在使用 venv 方案来创建新的虚拟环境,而不是仅根据平台硬编码路径。鼓励以与虚拟环境中使用的安装方案不兼容的方式定制 posix_prefix 或 nt 安装方案的下游Python分发者不要定制 venv 方案。当Python本身在虚拟环境中运行时,sysconfig.get_default_scheme()和sysconfig.get_preferred_scheme()与key="prefix"返回*venv*。bpo-43224: 在typing.py中实现了对PEP 646的支持。
bpo-43224: 允许解包types.GenericAlias对象,例如
*tuple[int, str]。bpo-46557: 现在,由logging模块捕获的警告将不带有格式字符串记录,以防止通过msg参数分组日志的系统将捕获的警告分组在一起。
bpo-41370:
typing.get_type_hints()现在支持在 PEP 585 泛型别名 中将字符串作为前向引用进行评估。bpo-46607: 在
LegacyInterpolation中添加DeprecationWarning,自 Python 3.2 起已在文档字符串中弃用。将在 Python 3.13 中移除。请改用BasicInterpolation或ExtendedInterpolation。bpo-46480: 添加
typing.assert_type()。由 Jelle Zijlstra 提供补丁。bpo-46421: 修复了一个 unittest 问题,即如果命令以
python -m unittest形式调用且文件名以点(.)开头,会返回ValueError。bpo-46245: 在
shutil.rmtree()中添加可选参数 dir_fd。bpo-22859:
unittest.TestProgram.usageExit()被标记为弃用,将在 Python 3.13 中移除。bpo-46170: 当你尝试子类化一个
typing.NewType的实例时,改进了错误信息。bpo-20392: 修复
MimeTypes.guess_type()中大写文件扩展名的不一致问题。由 Kumar Aditya 提供补丁。bpo-46030: 将
LOCAL_CREDS、LOCAL_CREDS_PERSISTENT和SCM_CREDS2FreeBSD 常量添加到 socket 模块中。bpo-44439: 修复
ZipFile中成员文件的.write()方法,当输入数据是支持缓冲协议的对象时,文件长度可能错误的问题。bpo-45171: 修复
logging模块中处理stacklevel参数的问题,使其在所有日志记录函数中一致,并且如广告中所说,类似于warn()中使用的stacklevel参数。bpo-44859: 在
sqlite3中引发更准确且符合 PEP 249 的异常。对于
SQLITE_MISUSE错误,抛出InterfaceError而非ProgrammingError。当转换为 BLOB 失败时,不要用
ValueError覆盖BufferError。如果用户尝试
execute()多于一个 SQL 语句,抛出ProgrammingError而非Warning。如果 SQL 查询包含空字符,抛出
ProgrammingError而非ValueError。
bpo-44493: 在 sockaddr_un 的长度中添加缺失的终止 NUL。
当使用非抽象的 AF_UNIX 数据报套接字与用另一种编程语言编写的进程通信时,这个问题可能被观察到。
bpo-41930: 向
sqlite3添加serialize()和deserialize()支持。由 Erlend E. Aasland 提供补丁。bpo-33178: 添加了
ctypes.BigEndianUnion和ctypes.LittleEndianUnion类,这些类最初在库文档中有所记载但尚未实现。bpo-43352: 在 asyncio 库的同步原语中添加 Barrier 对象,以保持与 threading 和 multiprocessing 库中的 Barrier 一致。
bpo-35859:
re模块,修复了几个关于捕获组的 bug。在极少数情况下,捕获组会得到一个不正确的字符串。由马林提供补丁。
文档¶
bpo-47040: 澄清了
binascii.crc32()/zlib.adler32()/zlib.crc32()函数的旧 Python 版本兼容性说明。bpo-46033: 在其文档中澄清
for语句的执行。bpo-45790: 调整 自定义扩展类型:教程 中关于
ob_base字段和用于访问其内容的宏的不准确措辞。bpo-42340: 记录在某些情况下
KeyboardInterrupt可能导致代码进入不一致状态。如果需要,提供了一个示例解决方法以避免这种情况。bpo-41233: 将
Doc/library/exceptions.rst中引用的 errnos 链接到它们在Doc/library/errno.rst中的相应部分,反之亦然。之前这仅对 EINTR 和 InterruptedError 进行了操作。由 Yan "yyyyyyyan" Orestes 提供补丁。
测试¶
bpo-47205: 在 FreeBSD 上跳过
sched_getaffinity()和sched_setaffinity()错误情况的测试。bpo-46126: 在内部运行测试时恢复 'descriptions'。
bpo-47104: 重写
asyncio.to_thread()测试以使用unittest.IsolatedAsyncioTestCase。bpo-40280: 测试套件现在可以在 Emscripten 平台上运行。所有基于 fork、socket 和 subprocess 的测试都被跳过。
bpo-47037: 在 Windows 上跳过
strftime("%4Y")功能测试。它可能会在调试构建中引起断言错误。bpo-46587: 如果平台的
strftime不支持非可移植的 glibc 扩展,则跳过测试。bpo-47015: 一个用于
os.sendfile()的测试用例已从废弃的asyncore(参见 PEP 594) 转换为asyncio。由 Oleg Iarygin 提供补丁。
构建¶
bpo-40280: 添加配置选项
--enable-wasm-dynamic-linking以在wasm32-emscripten上启用dlopen和 MAIN_MODULE / SIDE_MODULE。bpo-46023:
makesetup现在可以检测并跳过所有重复的模块定义。第一个条目胜出。bpo-40280: 为 Emscripten 添加 SOABI
wasm32-emscripten,为 WASI 在 32bit WASM 上添加wasm32-wasi,以及wasm64对应物。bpo-47032: 确保当构建的一部分失败时,Windows 安装构建能够正确地以非零退出码失败。
bpo-47024: 为 macOS 安装程序和所有 Windows 构建更新 OpenSSL 到 1.1.1n。
bpo-46973: 添加
regen-configuremake 目标以使用 Christian 的容器镜像quay.io/tiran/cpython_autoconf:269重新生成配置脚本。bpo-46917: 构建 Python 现在需要支持 IEEE 754 浮点数。由 Victor Stinner 提供补丁。
bpo-45774:
configure现在验证所有sqlite3扩展模块所需的 SQLite C API 是否都已找到。
Windows¶
bpo-47194: 更新
zlib到 v1.2.12 以解决 CVE 2018-25032。bpo-47171: 支持在 Windows ARM64 上安装
py.exe启动器。bpo-46566: 升级 Python 安装管理器 以支持新的
-V:company/tag参数,实现完整的 PEP 514 支持,并检测 ARM64 安装。参数中的-64后缀已被弃用,但仍会选择任何非 32 位的安装。设置PYLAUNCHER_ALLOW_INSTALL并指定未安装的版本将尝试从 Microsoft Store 安装请求的版本。bpo-47086: Windows 安装程序现在包含的文档是松散的 HTML 文件,而不是一个单一的编译
.chm文件。bpo-46907: 更新 Windows 安装程序,使用 SQLite 3.38.1。
bpo-44549: 在 Windows 构建中更新 bzip2 到 1.0.8,以缓解 CVE 2016-3189 和 CVE 2019-12900。
bpo-46948: 通过确保 Windows 安装程序中的“添加到 PATH”选项在修复时使用正确的路径,防止 CVE 2022-26488。
macOS¶
工具/示例¶
bpo-40280: 用 Katie Bell 的 python-wasm 项目中的 browser-ui REPL 替换 Emscripten 的有限 shell。
C API¶
bpo-40421: 添加
PyFrame_GetBuiltins、PyFrame_GetGenerator和PyFrame_GetGlobalsC-API 函数,以便从 C 代码安全地访问帧对象属性。bpo-46850: 将私有的
_PyFrameEvalFunction类型,以及私有的_PyInterpreterState_GetEvalFrameFunc()和_PyInterpreterState_SetEvalFrameFunc()函数移至内部 C API。_PyFrameEvalFunction回调函数类型现在使用属于内部 C API 的_PyInterpreterFrame类型。由 Victor Stinner 提供补丁。bpo-46850: 将未公开的私有函数
_PyEval_EvalFrameDefault()移至内部 C API。该函数现在使用属于内部 C API 的_PyInterpreterFrame类型。由 Victor Stinner 提供补丁。bpo-46850: 从 C API 中移除未公开的私有函数
_PyEval_CallTracing()。改为调用公开的sys.call_tracing()函数。由 Victor Stinner 提供补丁。bpo-46850: 从 C API 中移除未公开的私有函数
_PyEval_GetCoroutineOriginTrackingDepth()。改为调用公开的sys.get_coroutine_origin_tracking_depth()函数。由 Victor Stinner 提供补丁。bpo-46850: 从 C API 中移除以下未公开的私有函数:
_PyEval_GetAsyncGenFirstiter()_PyEval_GetAsyncGenFinalizer()_PyEval_SetAsyncGenFirstiter()_PyEval_SetAsyncGenFinalizer()
改为调用公开的
sys.get_asyncgen_hooks()和sys.set_asyncgen_hooks()函数。补丁由 Victor Stinner 提供。bpo-46987: 移除私有函数
_PySys_GetObjectId()和_PySys_SetObjectId()。由 Donghee Na 提供补丁。bpo-46906: 添加新的函数来打包和解包 C 双精度(序列化和反序列化):
PyFloat_Pack2(),PyFloat_Pack4(),PyFloat_Pack8(),PyFloat_Unpack2(),PyFloat_Unpack4()和PyFloat_Unpack8()。由 Victor Stinner 提供补丁。
Python 3.11.0 alpha 6¶
发布日期:2022-03-07
核心与内置函数¶
bpo-46940: 避免覆盖嵌套属性访问调用的
AttributeError元数据信息。由 Pablo Galindo 提供补丁。bpo-46927: 在非泛型类型下标错误消息中包含类型的名称。
bpo-46921: 支持
super()的 vectorcall。由 Ken Jin 提供补丁。bpo-46841: 使用 oparg 来简化
GET_AWAITABLE中有用错误消息的构造。bpo-46903: 确保 str 子类可以作为具有虚拟字典的实例的属性名。修复了 3.11alpha 中的回归问题。
bpo-46841: 为
COMPARE_OP后跟EXTENDED_ARG添加更详细的专门化失败统计信息。bpo-46891: 修复了 3.11alpha 中引入的 bug,其中带有
__slots__的types.ModuleType子类未正确初始化,导致解释器崩溃。bpo-46841: 对
LOAD_ATTR、LOAD_METHOD和STORE_ATTR使用内联缓存。bpo-46841: 对
BINARY_SUBSCR使用内联缓存。bpo-46841: 对
COMPARE_OP使用内联缓存。bpo-46864: 弃用
PyBytesObject.ob_shash。它将在 Python 3.13 中被移除。bpo-46841: 对
UNPACK_SEQUENCE使用内联缓存。bpo-46845: 当所有插入的键都是 Unicode 时,通过从哈希表中移除哈希值来减小字典大小。例如,在 64 位平台上,
sys.getsizeof(dict.fromkeys("abcdefg"))从 352 字节变为 272 字节。bpo-46841: 对
LOAD_GLOBAL使用内联缓存。bpo-46852: 将私有的未文档化的
float.__set_format__()方法重命名为float.__setformat__(),以修复 Python 3.7 中引入的拼写错误。该方法仅由 test_float 使用。由 Victor Stinner 提供补丁。bpo-46852: 移除未文档化的私有
float.__set_format__()方法,该方法在 Python 3.7 中曾被称为float.__setformat__()。其文档字符串说明:"您可能不想使用此函数。它主要存在于 Python 的测试套件中使用。" 由 Victor Stinner 提供补丁。bpo-40116: 修复了当 other 是键共享字典时,dict.update(other) 可能不尊重 other 的迭代顺序的回归问题。
bpo-46712: 在深度冻结模块中共享全局字符串标识符。
bpo-46430: 修复深度冻结模块中内部字符串的内存泄漏问题。
bpo-45107: 为具有字典的实例专门化
LOAD_METHOD。bpo-44337: 减少专门化的
LOAD_ATTR和STORE_ATTR指令的内存使用。bpo-46729: 在
BaseException.__str__()中添加子异常的数量。bpo-45885: 在收集专门化统计信息时不要取消适配
COMPARE_OP。bpo-46329: 修复
PRECALL指令的专门化统计信息收集。
库¶
bpo-46794: 将 libexpat 版本提升至 2.4.6。
核心与内置函数¶
bpo-46823: 实现一个专门的组合操作码
LOAD_FAST__LOAD_ATTR_INSTANCE_VALUE。由 Dennis Sweeney 提供补丁。bpo-46820: 修复在数字字面量后紧跟着(无空格)"not in" 关键字时的解析问题,例如
1not in x。现在解析器仅发出警告,而非语法错误。bpo-46329: 在调用序列中将
KW_NAMES移动到PRECALL指令之前。更改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-40479: 在
Modules/_hashopenssl.c中添加一个遗漏的va_end()调用。bpo-46323: 调用 ctypes 回调函数时使用
PyObject_Vectorcall()。由 Donghee Na 提供补丁。
核心与内置函数¶
bpo-46615: 在
setobject.c中内部迭代集合时,对集合中的结果项获取强引用。这防止了在各种集合操作的边角情况下集合被修改导致的崩溃。bpo-45828: 字节码编译器现在尝试在编译时应用运行时栈操作(只要这样做是可行的)。
bpo-30496: 修复了
PyLong_FromLong()实现中的一个小的可移植性问题,并为PyLong_FromLongLong()添加了单数字整数的快速路径。
库¶
bpo-25707: 修复了
xml.etree.ElementTree.iterparse()中当迭代器未被耗尽时的文件泄露问题。由 Jacob Walls 提供补丁。bpo-46877: 在
unittest中导出unittest.doModuleCleanups()。由 Kumar Aditya 提供补丁。bpo-46848: 出于性能考虑,使用来自
find()和rfind()的优化字符串搜索实现替代find()和rfind()。bpo-46736:
SimpleHTTPRequestHandler现在使用 HTML5 语法。由 Donghee Na 提供补丁。bpo-44886: 将 asyncio proactor 数据报传输继承自
asyncio.DatagramTransport。bpo-46827: 在基于选择器的事件循环中支持
asyncio.loop.sock_connect()的 UDP 套接字。由 Thomas Grainger 提供补丁。bpo-46811: 使测试套件支持 Expat >=2.4.5。
bpo-46252: 如果
ssl.SSLSocket被传递给基于传输的 API,则抛出TypeError。bpo-46784: 修复了在嵌入式 Python 中与用户动态加载或静态链接的 libexpat 库的符号冲突。
bpo-46786: xml.etree.ElementTree 中的 HTML 序列化现在将
embed、source、track和wbr写为空标签,符合 HTML5 的定义。bpo-39327:
shutil.rmtree()现在可以在客户操作系统中运行时与 VirtualBox 共享文件夹一起工作。bpo-45390: 将
asyncio.CancelledError消息从内部任务传播到外部等待者。bpo-46756: 修复了
urllib.request.HTTPPasswordMgr.find_user_password()和urllib.request.HTTPPasswordMgrWithPriorAuth.is_authenticated()中的一个漏洞,该漏洞允许绕过授权。例如,如果用户被授权访问 URIexample.org/foo,则允许访问 URIexample.org/foobar。bpo-46737:
random.gauss()和random.normalvariate()现在有默认参数。bpo-46752: 向 asyncio 添加任务组(结构化并发,灵感来自 Trio 的 nurseries)。这也引入了任务取消的变化,其中被取消的任务在调用 .uncancel() 之前不能被再次取消。
bpo-46333: 当设置
module参数时,typing.ForwardRef的__repr__()方法现在会包含typing.ForwardRef的module参数。bpo-46643: 在
typing.get_type_hints()中,支持评估字符串化的ParamSpecArgs和ParamSpecKwargs注解。由 Gregory Beauregard 提供补丁。bpo-45863: 当
tarfile模块创建 pax 格式的存档时,它会在 ustar 头中放置时间戳的整数表示(如果可能的话),以便于旧的解档工具使用,此外还会在 pax 扩展头中放置现有的全精度时间戳。bpo-46066: 弃用基于 kwargs 的
typing.TypedDict定义语法。在指定完全性时它有着令人困惑的语义,并且很大程度上未被使用。由 Jingchen Ye 提供补丁。bpo-46676: 使
typing.ParamSpec的 args 和 kwargs 等于它们自己。由 Gregory Beauregard 提供补丁。bpo-46323:
ctypes.CFUNCTYPE()和ctypes.WINFUNCTYPE()现在会在其_argtypes_成员包含太多参数时创建类型失败。以前,错误仅在调用函数时引发。由 Victor Stinner 提供补丁。bpo-46672: 修复
asyncio.gather()中初始类型检查失败时的NameError。bpo-46659: 如果未指定区域设置,
calendar.LocaleTextCalendar和calendar.LocaleHTMLCalendar类现在会使用locale.getlocale(),而不是使用locale.getdefaultlocale()。由 Victor Stinner 提供补丁。bpo-46659:
locale.getdefaultlocale()函数已被弃用,并将在 Python 3.13 中移除。请使用locale.setlocale()、locale.getpreferredencoding(False)和locale.getlocale()函数代替。由 Victor Stinner 提供补丁。bpo-46655: 在
typing.get_type_hints()中,支持评估裸字符串化的TypeAlias注解。由 Gregory Beauregard 提供补丁。bpo-45948: 修复了
xml.etree.ElementTree模块 C 实现中的一个不一致之处。现在,实例化xml.etree.ElementTree.XMLParser时使用target=None关键字参数会像 Python 实现一样提供一个默认的xml.etree.ElementTree.TreeBuilder目标。bpo-46626: 在
socket中公开了 Linux 的IP_BIND_ADDRESS_NO_PORT选项。bpo-46521: 修复了
codeop模块中的一个 bug,该 bug 错误地将涉及字符串引号的无效代码识别为有效代码。bpo-46571: 改进了
typing.no_type_check()。现在它不会修改外部的类和函数。我们还正确地标记了类方法为不被类型检查。
bpo-46400: expat: 将 libexpat 从 2.4.1 更新至 2.4.4
bpo-46556: 弃用将
pathlib.Path对象用作上下文管理器的未文档化支持。bpo-46534: 实现了 PEP 673
typing.Self。由 James Hilton-Balfe 提供补丁。bpo-46522: 使多个模块的
__getattr__AttributeErrors 更接近典型的 AttributeErrorbpo-46475: 添加了
typing.Never和typing.assert_never()。由 Jelle Zijlstra 提供补丁。bpo-46333:
typing.ForwardRef的__eq__()和__hash__()方法现在尊重typing.ForwardRef的module参数。现在可以区分来自不同模块的前向引用。bpo-46246: 为
importlib.metadata.DeprecatedList添加了缺失的__slots__。由 Arie Bovenberg 提供补丁。bpo-46195:
typing.get_type_hints()不再为默认值为None的参数添加Optional。这与 PEP 484 在 https://github.com/python/peps/pull/689 中的更改一致。bpo-31369: 将
RegexFlag添加到re.__all__并进行了文档化。添加NOFLAG以表示没有设置任何标志。bpo-45898:
ctypes不再在cfield.c中定义ffi_type_*符号。这些符号由 libffi 提供已有十余年。bpo-44953: 调用
operator.itemgetter对象和operator.attrgetter对象现在更快,因为使用了 vectorcall 调用约定。bpo-44289: 修复了
is_tarfile()方法在使用 fileobj 参数时的一个问题:fileobj 中的位置被向前推进,使得它无法通过tarfile.TarFile.open()读取。bpo-44011: 在 asyncio 中重新实现 SSL/TLS 支持,借用 uvloop 库的实现。
bpo-41086: 如果
interpolation参数不是configparser.Interpolation类型,configparser.ConfigParser构造函数将引发TypeError。bpo-29418: 实现
inspect.ismethodwrapper()并修复inspect.isroutine()对于给定 methodwrapper 的情况。由 Hakan Çelik 提供补丁。bpo-14156: argparse.FileType 现在支持二进制模式下的 '-' 参数,根据情况返回 sys.stdin/sys.stdout 的 .buffer 属性。当参数为 '-' 时,包含 'x' 和 'a' 的模式被视为等同于 'w'。补丁由 Josh Rosenberg 贡献
文档¶
bpo-42238:
Doc/tools/rstlint.py已移至其自己的仓库,现在在 PyPI 上打包为sphinx-lint。
测试¶
bpo-46913: 如果 Python 是用未定义行为消毒剂 (UBSAN) 构建的,修复 test_faulthandler.test_sigfpe():在 faulthandler_sigfpe() 函数上禁用 UBSAN。由 Victor Stinner 提供补丁。
bpo-46760: 从 test.test_dis 模块中的期望值中移除字节码偏移。减少修改虚拟机或编译器的障碍。
bpo-46708: 防止
test_asyncio执行后默认 asyncio 事件循环策略修改警告。bpo-46678:
Lib/test/support/import_helper.py中的函数make_legacy_pyc不再在PYTHONPYCACHEPREFIX设置为与存储临时文件不同的设备上的目录时失败。bpo-46623: 在s390x上跳过test_zlib的test_pair()和test_speech128()测试,因为如果zlib使用s390x硬件加速器,这些测试会失败。由Victor Stinner提供补丁。
构建¶
bpo-46860: 在大小写不敏感的文件系统上构建时,尊重
--with-suffix选项。bpo-46656: 现在构建Python需要一个C11编译器。不需要可选C11功能。补丁由Victor Stinner提供。
bpo-46656: 现在构建Python需要支持浮点数Not-a-Number (NaN):移除
Py_NO_NAN宏。补丁由Victor Stinner提供。bpo-46640: 现在构建Python需要一个提供
NAN常量的C99<math.h>头文件,或者``__builtin_nan()``内置函数。由Victor Stinner提供补丁。bpo-46608: 如果深度冻结,排除已封装的冻结数据以节省300 KB磁盘空间。这包括向
_frozen添加一个新的is_package字段。由Kumar Aditya提供补丁。bpo-40280: 修复wasm32-emscripten测试失败和平台问题。- 禁用不支持或不起作用的系统调用,例如wait、getrusage、prlimit、mkfifo、mknod、setres[gu]id、setgroups。- 使用fd_count计算打开的文件描述符。- 为子进程和fork添加更多检查。- 为缺少_multiprocessing和失败的socket.accept()添加解决方法。- 启用bzip2。- 禁用大文件支持。- 禁用signal.alarm。
bpo-46430: 在深度冻结的模块中内部化字符串。由Kumar Aditya提供补丁。
Windows¶
IDLE¶
C API¶
bpo-46748: Python 的公共头文件不再导入
<stdbool.h>,使得嵌入/扩展 Python 的代码可以自由定义bool、true和false。bpo-46836: 将
PyFrameObject类型定义(struct _frame)移动到内部 C APIpycore_frame.h头文件中。由 Victor Stinner 提供补丁。bpo-45459: 将
Include/buffer.h头文件重命名为Include/pybuffer.h以避免与已有buffer.h头文件的项目冲突。由 Victor Stinner 提供补丁。bpo-45412: 移除
HAVE_PY_SET_53BIT_PRECISION宏(已移至内部 C API)。由 Victor Stinner 提供补丁。bpo-46613: 添加了函数
PyType_GetModuleByDef(),允许在方法的定义类不可用时访问模块状态。
Python 3.11.0 第 5 个 alpha 版本¶
发布日期:2022-02-03
核心与内置函数¶
bpo-45773: 从字节码编译器中移除两个无效的 "peephole" 优化。
bpo-45885: 关于
COMPARE_OP字节码,添加了更细粒度的特化失败统计。bpo-44977:
int()委托给__trunc__()的做法现在已被弃用。当type(a)实现了__trunc__()但没有实现__int__()或__index__()时,调用int(a)现在会引发DeprecationWarning。bpo-46458: 重新排序编译器为
try-except块生成的代码,使得else块的代码紧随try体之后(无需跳转)。这对快乐路径更优。bpo-46527: 再次允许将
iterable作为关键字参数传递给enumerate()。由 Jelle Zijlstra 提供补丁。bpo-46528: 用新的
COPY和SWAP指令替换多个堆栈操作指令(DUP_TOP、DUP_TOP_TWO、ROT_TWO、ROT_THREE、ROT_FOUR和ROT_N)。bpo-46329: 使用两个或三个字节码来实现大多数调用。
没有命名参数的调用作为两个指令的序列实现:
PRECALL; CALL。有命名参数的调用作为三个指令的序列实现:PRECALL; KW_NAMES; CALL。有两种不同的PRECALL指令:PRECALL_FUNTION和PRECALL_METHOD。后者与LOAD_METHOD配对使用。这种将调用分为预调用和调用的分区允许更好的专门化,从而最终获得更好的性能。
语义上没有变化。
bpo-46503: 修复在解析 f-strings 中一些无效的 N 转义序列时的断言。
bpo-46431: 改进对无效调用
BaseExceptionGroup.__new__()时的错误消息。bpo-46476: 修复由 deepfreeze 生成的代码对象中的内存泄漏。由 Kumar Aditya 提供补丁。
bpo-46481: 通过使用 PEP 590
vectorcall调用约定加速对weakref.ref.__call__()的调用。由 Donghee Na 提供补丁。bpo-46417: 修复设置类型
__bases__属性时的竞争条件:内部函数add_subclass()现在在调用PyWeakref_NewRef()后获取PyTypeObject.tp_subclasses成员,这可以触发垃圾回收,间接修改PyTypeObject.tp_subclasses。由 Victor Stinner 提供补丁。bpo-46417:
python -X showrefcount现在在清除并销毁主 Python 解释器后显示总引用计数。之前是在之前显示的。由 Victor Stinner 提供补丁。bpo-43683: 添加 ASYNC_GEN_WRAP 操作码来包装异步生成器中要产生的值。移除了在
YIELD_VALUE指令中特殊处理异步生成器的需要。bpo-46407: 优化
Objects/longobject.c中的一些模运算。补丁由 Jeremiah Vivian 提供。bpo-46409: 添加新的
RETURN_GENERATOR字节码以生成器。简化了在虚拟机中调用Python函数的过程,因为它们不再需要特别处理生成器函数。同时添加
JUMP_NO_INTERRUPT字节码,其行为类似于JUMP_ABSOLUTE,但不检查中断。bpo-46406: 整数除法
//的实现已优化,以便编译器更好地理解其约束。在amd64平台上,当除以小于2**30的值时,速度可以提高20%。
库¶
bpo-46383: 修复
_zoneinfo的module_free函数的无效签名,以解决wasm32-emscripten平台上的崩溃问题。
核心与内置函数¶
bpo-46361: 确保通过
int.from_bytes()和decimal.Decimal创建的“小”整数被正确缓存。bpo-46161: 修复当参数为常量且使用 CALL_FUNCTION_EX 时的类构建错误。
bpo-46028: 修复在虚拟环境中使用与基础环境提供的不同二进制名称的符号链接时
sys._base_executable的计算。bpo-46091: 正确计算以行继续字符结尾的带有空白字符的行的缩进级别。由Pablo Galindo提供补丁。
库¶
bpo-30512: 为NetBSD添加CAN Socket支持。
构建¶
bpo-46045: 在 NetBSD 上不使用 POSIX 信号量。
核心与内置函数¶
库¶
bpo-46624: 恢复对
random.randrange()和random.randint()非整数参数的支持。bpo-46591: 使About IDLE对话框中的IDLE文档URL可点击。
bpo-46565: 移除泄漏到模块命名空间中的循环变量。
bpo-46553: 在
typing.get_type_hints()中,支持评估裸字符串化的ClassVar注解。由Gregory Beauregard提供补丁。bpo-46544: 不要在
textwrap.TextWrapper中泄漏x和uspace中间变量。bpo-46487: 在
asyncio.transports.WriteTransport和 SSL 传输中添加get_write_buffer_limits方法。bpo-45173: 注意 configparser 的弃用将在 Python 3.12 中移除。
bpo-45162: 在 3.11a1 中移除的已弃用的
unittestAPI 已被临时恢复,将在外部项目清理完成后于 3.12 中移除。bpo-46539: 在
typing.get_type_hints()中,支持在Annotated内部评估字符串化的ClassVar和Final注解。由 Gregory Beauregard 提供补丁。bpo-46510: 添加
types.TracebackType和types.FrameType的缺失测试。直接从捕获的异常中计算它们,而不调用sys.exc_info()。bpo-46491: 允许
typing.Annotated包装typing.Final和typing.ClassVar。由 Gregory Beauregard 提供补丁。bpo-46483: 从
pathlib.PurePath中移除__class_getitem__(),因为该类不应是泛型的。bpo-46436: 修复模块
http.server中的命令行选项-d/--directory,当与命令行选项--cgi结合使用时被忽略的问题。由 Géry Ogam 提供补丁。bpo-41403: 使
mock.patch()在无效参数上引发带有相关错误信息的TypeError。之前它允许一个难以理解的AttributeError逃逸。bpo-46474: 在
importlib.metadata.EntryPoint.pattern中,通过限制连续空白字符的歧义性来避免潜在的 REDoS。bpo-46474: 从
importlib.metadata.Path中移除了私有方法。与 importlib_metadata 4.10.0 同步。bpo-46470: 从
typing._remove_dups_flatten中移除未使用的分支。bpo-46469:
asyncio泛型类现在在__class_getitem__中返回types.GenericAlias而不是同一个类。bpo-41906: 支持在传递给
logging.config.dictConfig()的字典中的handlers和loggers的filters值中传递过滤器实例。bpo-46422: 在
dis.Instruction中使用dis.Positions而不是常规的tuple。bpo-46434:
pdb现在优雅地处理help当__doc__缺失时,例如当运行预生成的优化.pyc文件时。bpo-43869: Python 在所有平台上使用相同的时间纪元。添加一个明确的单元测试以确保这一点。由 Victor Stinner 提供补丁。
bpo-46414: 添加
typing.reveal_type()。由 Jelle Zijlstra 提供补丁。bpo-40280:
subprocess现在在有msvcrt模块可用时导入特定于 Windows 的导入,在所有其他平台上导入特定于 POSIX 的导入。这提供了一个干净的异常当_posixsubprocess不可用时(例如 Emscripten 浏览器目标)。bpo-40066:
IntEnum,IntFlag, 和StrEnum使用混合类型作为它们的str()和format()输出。bpo-46316: 通过移除对特殊条目不必要的检查来优化
pathlib.Path.iterdir()。bpo-29688: 记录
pathlib.Path.absolute()(一直存在) 。bpo-43012: pathlib 模块中过时且内部的
_Accessor类已被移除,为模块即将到来的增强做准备。bpo-46258: 通过用查找表替换两个除法步骤来加速小正整数的
math.isqrt()。bpo-46242: 当使用
enum.Enum.__call__()创建一个新的enum.Enum类型,该类型继承了一个带有_member_names_的现有Enum时,改进错误消息。bpo-43118: 修复
inspect.signature()中的一个 bug,该 bug 导致它在某些引用模块全局的__text_signature__的类的子类上失败。由 Weipeng Hong 提供补丁。bpo-26552: 修复了
asyncio.ensure_future()失败时未关闭协程的情况。由 Kumar Aditya 提供补丁。bpo-21987: 修复
tarfile.TarFile.getmember()获取带有尾随斜杠的目录名的问题。bpo-46103: 现在
inspect.getmembers()仅从类类型获取__bases__属性。补丁由 Weipeng Hong 提供。bpo-46080: 修复了如果
argparse.BooleanOptionalAction参数的默认值为argparse.SUPPRESS并且指定了help时,在 argparse 帮助文本生成中出现的异常。补丁由 Felix Fontein 提供。bpo-44791: 修复了在不同参数表达式中
ParamSpec在Concatenate中的替换问题。现在用类型列表替换会返回一个类型元组。用Concatenate替换现在会返回一个带有连接参数列表的Concatenate。
文档¶
bpo-46463: 修复了构建 CHM 文档文件时使用的
escape4chm.py脚本。
测试¶
bpo-43478: Mock 不能再作为其他 Mock 的规范提供。因此,已经 mock 的对象不能传递给
mock.Mock()。这可以揭示测试中的错误,因为这些 Mock 派生的 Mock 总是会通过某些测试(例如 isinstance),并且内置的断言函数(例如 assert_called_once_with)将无条件通过。bpo-46616: 确保
test_importlib.test_windows在完成后清理注册表键。bpo-44359: test_ftplib 现在默默地忽略套接字错误,以防止记录未处理的线程异常。由 Victor Stinner 提供补丁。
bpo-46600: 修复了使用
clang -Og构建的 Python 的 test_gdb.test_pycfunction()。在 gdb 回溯中容忍内联函数。由 Victor Stinner 提供补丁。bpo-46542: 修复了在使用调试模式构建的 Python 中 test_lib2to3 的 Python 崩溃:限制递归限制。由 Victor Stinner 提供补丁。
bpo-46576: test_peg_generator 现在在测试其自己的 C 扩展的编译时禁用编译器优化,以显著加快在 CPython 的非调试构建上的测试速度。
bpo-46542: 修复
test_json测试中对RecursionError的检查:修改这些测试以使用support.infinite_recursion()。由 Victor Stinner 提供补丁。bpo-13886: 如果加载了 readline 模块,则在非 ASCII 字符上跳过 test_builtin PTY 测试。readline 模块会改变 input() 的行为,但 test_builtin 并不旨在测试 readline 模块。由 Victor Stinner 提供补丁。
bpo-40280: 添加
test.support.requires_fork()装饰器以标记需要os.fork()正常工作的测试。bpo-40280: 添加
test.support.requires_subprocess()装饰器以标记需要subprocess模块或os.spawn*正常工作的测试。wasm32-emscripten 平台不支持进程。bpo-46126: 在内部运行测试时禁用 'descriptions'。
构建¶
bpo-46602: 整理 configure.ac 使得 conftest.c 被截断而非追加。这在 'rm' conftest.c 在测试之间未能发生时有所帮助。可能导致诸如 SOABI 被破坏的下游问题。
bpo-46600: 修复
./configure脚本中检查 C 编译器是否支持-Og选项的测试,以同样在支持-Og的 clang 上使用该选项。由 Victor Stinner 提供补丁。bpo-38472: 修复交叉编译时 setup.py 中的 GCC 检测。现在 C 编译器以 LC_ALL=C 运行。之前,检测在德语环境下会失败。
bpo-46513: configure 不再使用
AC_C_CHAR_UNSIGNED宏,且pyconfig.h不再定义保留符号__CHAR_UNSIGNED__。bpo-46471: 在 deepfreeze 中使用全局单例作为单字节 bytes 对象。
bpo-46443: Deepfreeze 现在使用缓存的小整数,因为它为常见的小整数节省了一些空间。
bpo-46429: 将所有深度冻结文件合并为一个以节省空间。由 Kumar Aditya 提供补丁。
bpo-45569: Python 整数的构建现在默认使用 30 位数字。之前会根据平台选择 15 位或 30 位数字。仍然可以通过在
configure脚本中使用--enable-big-digits=15选项,或在pyconfig.h中定义PYLONG_BITS_IN_DIGIT来选择 15 位数字。bpo-45925: 更新 Windows 安装程序以使用 SQLite 3.37.2。
bpo-43112: 检测 musl libc 作为一个单独的 SOABI(标记为
linux-musl)。
Windows¶
macOS¶
bpo-45925: 更新 macOS 安装程序到 SQLite 3.37.2。
IDLE¶
bpo-45296: 在 IDLE 中明确了关闭、退出和退出的区别。在文件菜单中,'关闭' 和 '退出' 现在是 '关闭窗口'(当前窗口)和 '退出 IDLE'(通过关闭所有窗口)。在 Shell 中,'quit()' 和 'exit()' 意思是 '关闭 Shell'。如果没有其他窗口,这也将退出 IDLE。
C API¶
bpo-40170: 移除了
PyHeapType_GET_MEMBERS()宏。它被错误地暴露在公共 C API 中,必须仅由 Python 内部使用。使用PyTypeObject.tp_members成员代替。由 Victor Stinner 提供的补丁。bpo-40170: 将 _Py_GetAllocatedBlocks() 和 _PyObject_DebugMallocStats() 私有函数移动到内部 C API。由 Victor Stinner 提供的补丁。
bpo-46433: 内部函数 _PyType_GetModuleByDef 现在正确处理涉及静态类型的继承模式。
bpo-45459:
Py_buffer和各种Py_buffer相关函数现在是有限 API 和稳定 ABI 的一部分。bpo-14916: 修复了 tokenizer 中的一个错误,该错误阻止了
PyRun_InteractiveOne从提供的 FD 解析。
Python 3.11.0 alpha 4¶
发布日期: 2022-01-13
核心与内置函数¶
bpo-46070:
Py_EndInterpreter()现在明确地取消跟踪当前由GC跟踪的所有对象。之前,如果一个对象后来被另一个解释器使用,调用PyObject_GC_UnTrack()在该对象上如果PyGC_Head结构的前一个或下一个对象成为悬挂指针时会崩溃。由Victor Stinner提供补丁。bpo-46347: 修复PyEval_EvalCodeEx中的内存泄漏。
bpo-46339: 修复解析器在检索多行f-strings表达式的错误文本时崩溃的问题,这些表达式不在字符串的第一行开始。由Pablo Galindo提供补丁。
bpo-46331: 不要设置存储文档字符串的指令的行号。修复了在3.11 alpha中引入的回归问题。
bpo-46314: 移除在创建lambda函数时意外引入的虚假“call”事件,该事件是在3.11a4中意外引入的。
bpo-46289:
FormattedValue的ASDL声明已更改,以反映conversion字段不是可选的。bpo-46297: 修复了在启动时在Windows注册表中设置多个PythonPaths时解释器崩溃的问题。补丁由Derzsi Dániel提供。
bpo-46237: 修复f-strings内部标记器错误的行号。由Pablo Galindo提供补丁。
bpo-46263: 我们现在总是期望“use_frozen_modules”配置被设置,因为getpath.c已经在纯Python中重写并且逻辑得到了改进。
bpo-46006: 修复当类型方法如
__init__()在子解释器中被修改时的回归问题。修复_PyUnicode_EqualToASCIIId()和类型update_slot()中的回归问题。恢复使Unicode内部字符串字典与子解释器兼容的更改:内部内部字符串字典再次由所有解释器共享。由Victor Stinner提供补丁。bpo-45923: 添加RESUME操作码。这是一个逻辑上的无操作。它由编译器在可以进入Python函数的任何地方发出。它被解释器用于执行跟踪和优化器检查。
库¶
bpo-46208: 修复 os.path.normpath("A/../../B") 未返回预期的 "../B" 而是返回 "B" 的回归问题。
核心与内置函数¶
库¶
bpo-46085: 修复
OrderedDict的迭代器缓存机制。
核心与内置函数¶
bpo-46055: 加速涉及小于
PyLong_BASE的整数的移位操作。补丁由 Xinhang Xu 提供。bpo-46110: 向 PEG 解析器添加最大递归检查以避免堆栈溢出。由 Pablo Galindo 提供补丁。
bpo-46107: 修复
ExceptionGroup.split()和ExceptionGroup.subgroup()未将异常组的__note__字段复制到部分的错误。bpo-45711: 解释器状态的处理异常表示(又称 exc_info 或 _PyErr_StackItem)现在只有
exc_value字段,exc_type和exc_traceback已被移除,因为它们的值可以从exc_value派生。bpo-44525: 用一个预调用指令和两个调用指令替换四个调用字节码指令。
移除
CALL_FUNCTION,CALL_FUNCTION_KW,CALL_METHOD和CALL_METHOD_KW。添加
CALL_NO_KW和CALL_KW调用指令,以及PRECALL_METHOD前缀与LOAD_METHOD配对。bpo-46039: 移除
YIELD_FROM指令并用执行相同操作但不带循环的SEND指令替代。bpo-45635: 从
_PyErr_Display()调用的代码被重构以改进错误处理。现在在遇到不可恢复的错误时立即退出。bpo-46054: 修复解析源文件中非utf8字符时的解析器错误。由Pablo Galindo提供补丁。
bpo-46042: 改进符号表发出的
SyntaxError异常中插入符号的位置。由Pablo Galindo提供补丁。bpo-46049: 确保
._pth文件在非Windows平台上按预期工作。bpo-46048: 修复启动时
._pth文件的解析,以便正确读取单字符路径。bpo-37971: 修复一个错误,该错误导致装饰器应用引发异常时,回溯中给出的行号错误。
bpo-46031: 添加
POP_JUMP_IF_NOT_NONE和POP_JUMP_IF_NONE操作码以加速条件跳转。bpo-46025: 修复
atexit模块中的一个崩溃问题,涉及在引发异常前自行注销的函数。由Pablo Galindo提供补丁。
库¶
核心与内置函数¶
bpo-44525: 为调用带单一参数的内置类型专门化CALL_FUNCTION指令。加速
range(x),list(x),特别是type(obj)。bpo-42918: 修复内置
compile()函数在'single'模式下传递多个语句时并不总是引发SyntaxError的错误。由Weipeng Hong提供补丁。bpo-45953: _PyRuntimeState.interpreters中的主解释器现在是静态分配的(作为_PyRuntime的一部分)。每个解释器的初始线程状态也是如此。这意味着运行时初始化期间分配更少,以及这些关键状态对象更好的内存局部性。
bpo-43413: 恢复
set.__init__中的更改。set的子类如果定义了带有额外关键字参数的__new__()方法,那么它需要定义一个__init__()方法。bpo-43931: 添加了
Py_Version常量,其值与PY_VERSION_HEX相同。由 Gabriele N. Tornetta 提供补丁。
库¶
bpo-46342:
@typing.final装饰器现在会在被装饰的对象上设置__final__属性,以允许运行时内省。由 Jelle Zijlstra 提供补丁。bpo-46328: 添加了
sys.exception()方法,该方法返回活动的异常实例。bpo-46307: 添加
string.Template.is_valid()和string.Template.get_identifiers()方法。bpo-46306: 在
doctest中假设types.CodeType总是有types.CodeType.co_firstlineno。bpo-40479: 修复
hashlibusedforsecurity 选项,使其在 FIPS 模式下与 OpenSSL 3.0.0 正确工作。bpo-46070: 修复了从不同的子解释器并行导入
asyncio模块时可能出现的段错误。补丁由 Erlend E. Aasland 提供。bpo-46244: 从
typing.ParamSpec和typing.TypeVar中移除了__slots__。它们没有任何作用。由 Arie Bovenberg 提供补丁。bpo-46278: 在
AbstractEventLoop.call_*()方法中反映context参数。循环实现已经支持它。bpo-46269: 在
enum.Enum.__dir__()中移除了对__new__的特殊处理。-
现在所有常量(
MONDAY...SUNDAY)都已文档化、测试并添加到__all__中。 bpo-46257: 优化了 statistics 模块中的 mean、variance 和 stdev 函数。如果输入是一个迭代器,它将在单次遍历中被消耗,而不是通过转换为列表来消耗内存。单次遍历算法比之前的两遍代码快大约两倍。
bpo-41011: 在由
venv模块生成的 pyvenv.cfg 中新增了两个变量:executable 用于可执行文件,command 用于创建环境时使用的命令行。bpo-46239: 在非 Windows 系统上导入
asyncio.windows_events时改进了错误消息。bpo-46238: 在
asyncio.windows_events中重用_winapi常量。bpo-46222: 为 posixmodule 添加 FreeBSD 的
SF_NOCACHEsendfile 常量。bpo-37295: 为
math.comb()添加0 <= k <= n <= 67的快速路径。bpo-46176: 为 mmap 模块添加
MAP_STACK常量。bpo-43424: 弃用
webbrowser.MacOSXOSAScript._name,改用name。bpo-45321: 向模块
xml.parsers.expat.errors添加了缺失的错误代码。bpo-46125: 重构测试以直接测试可遍历 API。包括来自 importlib 5.4.0 的更改。
bpo-46118: 将 importlib.resources 及其相关功能移动到一个包中。
bpo-37578: 向
glob()和iglob()添加 include_hidden 参数,以在使用特殊字符如*,**,?和[]时匹配隐藏文件和目录。bpo-20369: 当给定重复的 Futures 时,
concurrent.futures.wait()不再永远阻塞。由 Kumar Aditya 提供补丁。bpo-46105: 在使用 URL 和 extras 生成需求规范时遵循规范(importlib_metadata 4.8.3)。
bpo-44893: EntryPoint 对象不再是元组。推荐的访问方式是通过属性('.name', '.group')或访问器('.load()')。通过索引访问已弃用,并将引发弃用警告。
bpo-22815: 在
unittest.TextTestResult的摘要中打印未预期的成功与失败和错误。bpo-22047: 弃用在参数组上调用
add_argument_group()。弃用在互斥组上调用add_argument_group()或add_mutually_exclusive_group()。这些功能从未被支持,且并不总是能正确工作。这些函数通过继承偶然存在于API中,将在未来被移除。
bpo-26952:
argparse在尝试为一个空的互斥组渲染用法时,会抛出一个带有清晰消息的ValueError。之前它抛出一个难以理解的IndexError。bpo-45615: 当异常参数不是
BaseException类型时,traceback模块中的函数会抛出TypeError而不是AttributeError。bpo-16594: 在 socketserver 中添加 allow_reuse_port 标志。
bpo-27718: 修复
signal模块的帮助文档。一些函数(例如signal()和getsignal())被遗漏了。bpo-46032:
functools.singledispatch()函数的registry()方法现在会检查第一个参数或第一个参数注解,并在不支持时抛出 TypeError。之前不支持的“类型”被忽略(例如typing.List[int])或在调用时引发错误(例如list[int])。bpo-46014: 添加使用
typing.Union和types.UnionType作为functools.singledispatch的调度参数的能力。由 Yurii Karabas 提供补丁。bpo-46018: 确保
math.expm1()在下溢时不抛出异常。bpo-46016: 将来自 FreeBSD 的
F_DUP2FD和F_DUP2FD_CLOEXEC常量添加到fcntl模块中。bpo-45755: 现在,当传递给
dir()时,typing泛型别名会显示原始泛型类的类属性。这是 Python 3.6 之前的行为,但在 3.7-3.9 中有所改变。bpo-45874: 现在,
urllib.parse.parse_qsl正确处理了不包含任何查询参数的空查询字符串。这在之前启用严格解析时会引发问题。bpo-44674: 修改数据类如何禁止可变默认值的方式。过去是使用一系列已知类型(列表、字典、集合)。现在则禁止不可哈希的对象作为默认值。这是用不可哈希性作为可变性的代理。由Eric V. Smith提供补丁,想法来自Raymond Hettinger。
bpo-23882: 从unittest发现中移除命名空间包(PEP 420)的支持。这一功能在Python 3.4中引入,但自Python 3.7以来已经损坏。
bpo-25066: 为
multiprocessing.Event对象添加了__repr__()方法,由Kumar Aditya提供补丁。bpo-45643: 在定义了这个信号的平台上添加了
signal.SIGSTKFLT。bpo-44092: 跨回滚的获取不再引发
InterfaceError。相反,我们让SQLite库来处理这些情况。由Erlend E. Aasland提供补丁。bpo-42413: 用内置的
TimeoutError替换concurrent.futures.TimeoutError和``asyncio.TimeoutError``,保留这些名称作为已弃用的别名。
文档¶
测试¶
bpo-46296: 为
enum添加一个测试用例,条件是_use_args_ == True和``_member_type_ == object``。bpo-46205: 修复由于竞态条件导致的runtest_mp中的挂起问题。
bpo-46263: 在FreeBSD 14-dev上修复test_capi:指示jemalloc不要用垃圾字节填充释放的内存。
bpo-46262: 在
enum.Flag._missing_()的测试中覆盖ValueError路径。bpo-46150: 现在检查
test_pathlib.PosixPathTest.test_expanduser中的fakename是否不存在。bpo-46129: 使用
unittest.IsolatedAsyncioTestCase重写asyncio.locks测试。bpo-46114: 修复针对 OpenSSL 3.0.1 版本的测试用例。OpenSSL 3.0 使用
0xMNN00PP0L。
构建¶
bpo-44133: 当 Python 配置了
--without-static-libpython时,不再构建 Python 静态库(libpython.a)。由 Victor Stinner 提供补丁。bpo-44133: 当 Python 构建时未使用
--enable-shared,python程序现在链接到对象文件,而不是 Python 静态库(libpython.a),以确保所有符号都被导出。之前,链接器省略了一些符号,如Py_FrozenMain()函数。由 Victor Stinner 提供补丁。bpo-40280:
configure脚本新增了一个选项--with-emscripten-target,用于选择浏览器或 node 作为 Emscripten 构建目标。bpo-46315: 添加并修复了
#ifdef HAVE_FEATURE检查,针对 WASI 平台上不可用的功能。bpo-45723: 修复了
configure对select.epoll()检查的回归问题。bpo-46263:
configure不再在 FreeBSD 平台上设置MULTIARCH。bpo-46106: 在 Windows 构建、macOS 安装包构建和 CI 中更新 OpenSSL 到 1.1.1m。由 Kumar Aditya 提供补丁。
bpo-46088: 从 Visual Studio 构建时自动检测或安装引导 Python 运行时。
bpo-46072: 添加一个 --with-pystats 配置选项,用于开启内部统计收集。
bpo-40280: 新增一个目录
Tools/wasm,包含 WebAssembly 相关的辅助工具,如针对 wasm32-emscripten 的config.site覆盖、用于打包标准库的 wasm 资源生成器,以及一个 README。bpo-46023: makesetup 不再构建标记为 disabled 的扩展。这允许用户在
Modules/Setup.local中禁用模块。bpo-45949: 对除 importlib 引导文件外的所有文件使用纯 Python
freeze_module。交叉构建不再需要--with-freeze-moduleconfigure 选项。
Windows¶
bpo-46217: 移除了在Windows 8.1和早期Windows 10上不受支持且可能导致构建或运行时失败的参数。
macOS¶
bpo-40477: macOS的Python启动器应用程序现在能正确启动脚本,并在必要时在最近的macOS版本上运行终端应用程序。
C API¶
bpo-46236: 修复了
PyFunction_GetAnnotations()中的一个错误,该错误导致它返回一个tuple而不是dict。bpo-46140:
PyBuffer_GetPointer(),PyBuffer_FromContiguous(),PyBuffer_ToContiguous()和PyMemoryView_FromBuffer()现在通过const Py_buffer *而不是Py_buffer *获取缓冲区信息,因为它们不需要可变性。PyBuffer_FromContiguous()现在还将源缓冲区作为``const void *,类似地,: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()不再规范化exc_info(包括在异常实例上设置回溯) ,因为exc_info总是被规范化的。bpo-45607: 向
BaseException添加了__note__字段。默认情况下为None,但可以设置为字符串,该字符串将添加到异常的跟踪信息中。bpo-45947: 将指向字典和值的指针立即放置在GC头之前。这将访问字典或值时的依赖内存加载次数从3次减少到1次。
bpo-45915: 在Linux、macOS和Windows上,
is_valid_fd现在使用更快的fcntl(fd, F_GETFD)。bpo-44530: 恢复了对
code.__new__audit event 的早期预发布版本的更改。bpo-42268: 如果所选编译器不支持内存清理器,则配置步骤失败。由Pablo Galindo提供补丁
bpo-45711:
exc_info的三个值现在总是相互一致。特别是,type和traceback字段现在是从异常实例派生的。这会影响sys.exc_info()和PyErr_GetExcInfo()的返回值,如果在处理异常时修改了异常实例,以及PyErr_SetExcInfo(),现在它会忽略提供给它的type和traceback参数。bpo-45727: 改进了自定义语法错误,只有当表达式在括号或方括号之间被检测到时,才触发可能缺少逗号的建议。由Pablo Galindo提供补丁
bpo-45885: 使用PEP 659机制专门化了
COMPARE_OP操作码。bpo-45786: 在帧对象中为解释器帧分配空间,以避免当帧对象比帧激活更持久时进行额外的分配。
库¶
核心与内置函数¶
bpo-45813: 修复了在协程被释放后调用 coro.cr_frame.clear() 时的崩溃问题。
bpo-45811: 改进解析器在遇到不可见控制字符时的分词器错误。由Pablo Galindo提供补丁
bpo-45848: 允许解析器直接从编码文件中获取错误行。由Pablo Galindo提供补丁
bpo-45709: 恢复3.10版本中追踪在with语句内引发的异常时的行为。
bpo-44525: 新增
COPY_FREE_VARS操作码,使从函数到框架的自由变量复制变得明确。有助于优化Python函数的调用。bpo-45829: 为类中实现
__getitem__方法的BINARY_SUBSCR操作码进行特化bpo-45826: 修复了在
NameError上调用.with_traceback(None)时发生的崩溃。这内部发生在unittest.TestCase.assertRaises()中。bpo-45822: 修复了解析器中的一个错误,该错误导致在没有提供标志时不尊重 PEP 263 编码声明。由Pablo Galindo提供补丁
bpo-45820: 修复了当解析器在未读取任何输入时失败时的段错误。由Pablo Galindo提供补丁
bpo-45738: 修复解析器中无效连续字符错误位置的计算。由Pablo Galindo提供补丁。
bpo-45636: 移除旧式字符串格式化的现有“快速路径”,因为它不再有任何可测量的影响。
bpo-45753: 通过跟踪溢出前的调用次数,使递归检查更加高效。
bpo-45773: 修复尝试优化某些跳转模式时的编译器挂起问题。
bpo-45764: 现在,当在
def语句后省略开括号(时,解析器会给出更好的错误信息:>>> def f: File "<stdin>", line 1 def f: ^ SyntaxError: expected '('
bpo-45609: 使用PEP 659机制专门化了
STORE_SUBSCR操作码。bpo-45636: 将所有数字型的
BINARY_*和INPLACE_*指令替换为单一的BINARY_OP实现。bpo-45582: 路径计算(称为
getpath)已被重新实现为一个冻结的Python模块。这应该不会有可见的影响,但可能会影响sys和sysconfig中引用的所有路径的计算。bpo-45450: 为带括号的参数改进了语法错误消息。由Pablo Galindo提供补丁。
库¶
bpo-27946: 修复了在替换
attrib字典的同时获取xml.etree.ElementTree.Element属性时可能发生的崩溃。bpo-45711: 让
asyncio在通过PyErr_Fetch()捕获异常后立即规范化异常,并在它们被存储为exc_info三元组之前。这使得asyncio与代码库的其余部分保持一致,其中exc_info三元组总是被规范化的。bpo-23819: 在asyncio中用异常替换了断言,由Kumar Aditya提供补丁。
bpo-13236:
unittest.TextTestResult和unittest.TextTestRunner现在更频繁地刷新输出流。bpo-45917: 添加了
math.exp2(),它返回2的x次幂。bpo-37658: 修复了在某些条件下
asyncio.wait_for()可能允许协程成功完成,但未能返回结果,可能导致内存泄漏或其他问题的问题。bpo-45876: 提高了statistics模块中stdev()和pstdev()的准确性。当输入是浮点数或分数时,输出是一个正确舍入的浮点数
bpo-44649: 处理了dataclass(slots=True)与一个字段有默认值,但init=False的情况。
bpo-45803: 向dataclasses.make_dataclass()添加了缺失的kw_only参数。
bpo-45837:
turtle.RawTurtle.settiltangle()自Python 3.1起已被弃用,现在会发出弃用警告,并将在Python 3.13中移除。请使用
turtle.RawTurtle.tiltangle()代替。turtle.RawTurtle.tiltangle()之前被错误地标记为弃用,其文档字符串已被更正。由 Hugo van Kemenade 提供补丁。
bpo-45831:
faulthandler现在可以在转储回溯时,通过一次 write() 系统调用写入仅包含 ASCII 的字符串(如文件名和函数名)。这减少了当两个线程或两个进程同时向同一文件(如 stderr)转储回溯时,产生不可读转储的风险。由 Victor Stinner 提供补丁。bpo-45828:
sqlite的 C 回调现在在启用回调回溯时使用不可引发异常。由 Erlend E. Aasland 提供补丁。bpo-41735: 在
PyObject_GetBuffer之前修复了zlib.Decompress.flush()方法中的线程锁。bpo-45235: 恢复了 argparse 的一个错误修复,该修复导致了处理子解析器默认参数时的回归。这防止了叶级参数优先于根级参数。
bpo-45754: 修复了 Python 3.11a1 和 3.11a2 中的一个回归问题,其中
sqlite3在检查 SQL 语句长度时会错误地使用SQLITE_LIMIT_LENGTH。现在使用SQLITE_LIMIT_SQL_LENGTH。由 Erlend E. Aasland 提供补丁。bpo-45766: 向
statistics.linear_regression()添加了 proportional 选项。bpo-45765: 在 importlib.metadata 中,修复了对于空路径的发行版发现。
bpo-45757: 修复了一个 bug,其中
dis在EXTENDED_ARG后跟一个不使用其参数的操作码时会产生错误的 oparg。bpo-45644: 使用
python3 -m json.tool infile infile进行原地 JSON 文件格式化现在可以正常工作,之前会导致文件为空。由 Chris Wesseling 提供补丁。bpo-45703: 当在程序运行时,一个命名空间包在另一个来自同一命名空间的模块被创建/安装在不同的
sys.path位置之前被导入时,调用importlib.invalidate_caches()函数现在也能保证新模块被注意到。bpo-45535: 改进
dir()对枚举的输出。bpo-45664: 修复
types.resolve_bases()和types.new_class()对于作为基类的types.GenericAlias实例的处理。bpo-45663: 修复
dataclasses.is_dataclass()对于是types.GenericAlias子类的数据类的处理。bpo-45662: 修复
dataclasses.InitVar与内置类类型别名的 repr,例如InitVar[list[int]]。bpo-43137: 通过 gio 工具而非过时的 gvfs-open 启动 GNOME 网页浏览器。
bpo-45429: 在 Windows 上,
time.sleep()现在使用支持高分辨率计时器的可等待计时器。由 Donghee Na 和 Eryk Sun 提供补丁。bpo-37295: 优化
math.comb()和math.perm()。bpo-45514: 弃用
importlib.resources中的旧函数。bpo-45507: 为 gzip.decompress 实现添加截断/缺失尾部的测试。
bpo-44733: 向
concurrent.futures.ProcessPoolExecutor添加max_tasks_per_child。这允许用户指定单个进程在执行前需要重启之前应执行的最大任务数。bpo-28806: 改进 netrc 库。netrc 文件不再需要包含所有令牌。如果登录名是匿名的,不再需要安全检查。
bpo-43498: 避免在调整
ProcessPoolExecutor的进程计数时可能出现的*“RuntimeError: dictionary changed size during iteration”*。bpo-42158: 向
mimetypes添加 N-quads、N-triples、Notation3 和 TriG 的 MIME 类型。bpo-30533: 添加
inspect.getmembers_static(),它返回所有成员而不通过描述符协议触发动态查找。由 Weipeng Hong 提供补丁。
文档¶
bpo-42238:
make -C Doc suspicious将很快被make -C Doc check取代,标记为已弃用。bpo-45840: 改进数据模型文档中的交叉引用。
bpo-45640: 文档中正确标记的语法标记现在可点击,并带你到给定语法部分的定义。由Arthur Milchior提供补丁。
bpo-45788: 将sys.prefix的文档链接到sysconfig文档的安装路径部分。
bpo-45772:
socket.socket的文档被从函数更正为类。bpo-45250: 更新文档以说明CPython不总是要求迭代器定义
__iter__。bpo-25381: 在扩展文档的扩展章节中,更新了一段关于包含异常信息的全局变量的段落。
bpo-43905: 扩展了
astuple()和asdict()的文档,警告应用了deepcopy并提供了解决方法。
测试¶
bpo-45695: 现在CI测试了使用只读源目录的树外构建。
bpo-19460: 为
Lib/email/mime/nonmultipart.py::MIMENonMultipart添加新测试。bpo-45835: 修复了test_queue测试中多个“feeder”线程的竞态条件。
bpo-45783: 冻结工具的测试现在处理文件的移动和删除。
bpo-45745: 移除了regrtest的
--findleaks命令行选项:改用--fail-env-changed选项。自Python 3.7起,它已被弃用作为--fail-env-changed选项的别名。bpo-45701: 在
test_functools中添加了使用functools.lru_cache()的tuple类型的测试。
构建¶
bpo-44035: CI现在验证autoconf文件是否已使用当前且未打补丁的autoconf包重新生成。
bpo-45950: 构建系统现在再次使用 _bootstrap_python 解释器进行冻结和深度冻结。为了加快构建过程,构建工具 _bootstrap_python 和 _freeze_module 不再使用LTO构建。
bpo-45881: configure 脚本现在接受
--with-build-python和--with-freeze-module选项,使交叉编译更容易。bpo-40280: Emscripten 平台现在默认使用
.wasm后缀。bpo-40280: 在 WASM/Emscripten 目标上禁用不可用的核心扩展模块。
bpo-40280:
configure现在检查 socketshutdown函数。该检查使得可以在 CONFIG_SITE 中用ac_cv_func_shutdown=no禁用SYS_shutdown。bpo-40280:
configure现在检查函数fork1, getegid, geteuid, getgid, getppid, getuid, opendir, pipe, system, wait, ttyname。bpo-33393: 更新
config.guess至 2021-06-03 和config.sub至 2021-08-14。Makefile现在有一个update-config目标,使更新更加方便。bpo-45866:
make regen-all现在在源树之外的目录运行时产生相同的输出:当在源树之外构建 Python 时。pegen 现在去除 "generated by pygen from <FILENAME>" 头部的目录。由 Victor Stinner 提供的补丁。bpo-40280:
configure现在接受机器wasm32或wasm64和操作系统wasi或emscripten以进行交叉构建,例如wasm32-unknown-emscripten、wasm32-wasi或wasm32-unknown-wasi。bpo-41498: Python 现在可以在没有
sigset_t的平台上编译。当sigset_t缺失时,signal中的几个函数不可用。基于 Roman Yurchak 为 pyodide 提供的补丁。
bpo-45881:
setup.py现在首先使用环境中的CC来发现多架构和交叉编译路径。bpo-45886:
_freeze_module程序的路径现在可以在命令行中覆盖,例如make FREEZE_MODULE=../x86_64/Program/_freeze_module。bpo-45873: 去除
_bootstrap_python构建步骤。deepfreeze.py 脚本现在使用$(PYTHON_FOR_REGEN)运行,可以是 Python 3.7 或更新版本(在 Windows 上,3.8 或更新版本)。bpo-45847: 将内置的 hashlib 扩展移植到
PY_STDLIB_MOD宏和addext()。bpo-45723: 为保存和恢复环境变量添加
autoconf助手:SAVE_ENV: 保存$CFLAGS、$LDFLAGS、$LIBS和$CPPFLAGS。RESTORE_ENV: 恢复$CFLAGS、$LDFLAGS、$LIBS和$CPPFLAGS。WITH_SAVE_ENV([SCRIPT]): 使用SAVE_ENV和RESTORE_ENV包装运行SCRIPT。
由 Erlend E. Aasland 提交的补丁。
bpo-45573: 启动 Python 所需的强制核心模块现在位于
Modules/Setup.bootstrap中。bpo-45573:
configure现在创建Modules/Setup.stdlib,其中包含有条件启用/禁用的扩展模块行。该文件尚未使用。bpo-45573:
configure现在使用统一的格式来设置 Makefile 中的状态、编译器标志和链接器标志。新的宏PY_STDLIB_MOD设置了三个变量,由Modules/Setup和setup.py使用。bpo-45816: Python 现在支持使用 Visual Studio 2022 (MSVC v143, VS 版本 17.0) 构建。补丁由 Jeremiah Vivian 提供。
bpo-45800:
pyexpatC 扩展的设置现在由configure检测。捆绑的expat库在Makefile中构建。bpo-45798:
decimal内部 C 扩展的设置现在由configure检测。捆绑的libmpdec库在Makefile中构建。bpo-45723: configure 有一个新选项
--with-pkg-config来禁用或要求 pkg-config。bpo-45774:
sqlite3的构建依赖现在由configure和pkg-config检测。补丁由 Erlend E. Aasland 提供。bpo-45747: gdbm 和 dbm 的构建依赖现在由
configure检测。bpo-45743: 在 macOS 上,构建系统不再向链接器传递
search_paths_first。自 Xcode 4 / macOS 10.6 以来,该标志已成为默认设置。bpo-45723:
configure.ac现在兼容 autoconf 2.71。已移除过时的检查STDC_HEADERS和AC_HEADER_TIME。bpo-45723:
configure现在会在 pkg-config 缺失时打印警告。bpo-45731:
configure --enable-loadable-sqlite-extensions现在由新的PY_SQLITE_ENABLE_LOAD_EXTENSION宏处理,而非 setup.py 中的逻辑。bpo-45723: configure.ac 现在使用自定义辅助宏和
AC_CACHE_CHECK来简化和加速 configure 运行。bpo-45696: 通过生成产生一组即用型代码对象的 C 代码,跳过冻结模块的 marshal 步骤。这使启动时间再加快 10% 或更多。
bpo-45561: 从 $(srcdir) 运行 smelly.py 工具。
Windows¶
bpo-45901: 当通过 Microsoft Store 安装并设置为
*.py文件的默认应用时,现在在调用脚本时无需显式启动 Python(即script.py args而非python script.py args)即可将命令行参数传递给 Python。bpo-45616: 修复了 Python Launcher 在明确请求时区分版本 3.1 和 3.10 的能力。之前,如果请求了 3.10 但未安装,会使用 3.1;如果请求了 3.1 但安装了 3.10,会使用 3.10。
bpo-45850: 实现在 Windows 上构建带有深度冻结模块的更改。注意,我们现在需要 Python 3.10 作为“引导”或“主机”Python。
bpo-45732: 更新捆绑的 Tcl/Tk 至 8.6.12。
bpo-45720: 移除了对
shlwapi.dll的内部引用以帮助提高启动时间。此 DLL 将不再在每个 Python 进程启动时加载。
macOS¶
bpo-45732: 更新 python.org macOS 安装程序以使用 Tcl/Tk 8.6.12。
C API¶
bpo-39026: 修复 Python.h 以使用 Xcode 构建 C 扩展:从
Include/cpython/pystate.h中移除一个相对包含。
Python 3.11.0 alpha 2¶
发布日期: 2021-11-05
核心与内置函数¶
bpo-45716: 改进在函数调用中使用
True、None或False作为关键字时的SyntaxError消息。由Pablo Galindo提供补丁。bpo-45688:
sys.stdlib_module_names现在包含了macOS特定的模块_scproxy。bpo-45379: 澄清当我们尝试显式导入一个冻结模块但冻结模块被禁用时的
ImportError消息。bpo-44525: 专门化对Python函数的简单调用(无星号参数、关键字字典或闭包)。
bpo-45530: 在某些情况下,使用元组作为键的排序现在可能显著更快。由Tim Peters提供补丁。
如果元组元素没有定义一个全序(关于全序的信息见 值比较),结果顺序可能与早期版本不同。一般来说,在没有对列表元素进行全序的情况下,排序的结果是不明确的。
bpo-45526: 在obmalloc中,设置ADDRESS_BITS不忽略任何位(之前忽略16位)。在内核给用户空间虚拟地址跨越大于48位的范围的情况下,这更安全。
bpo-30570: 修复了在搜索病态的
__bases__元组时issubclass()因无限递归而崩溃的问题。bpo-45521: 修复obmalloc基数树代码中的一个错误。在64位机器上,该错误导致树持有46位的虚拟地址,而不是预期的48位。
bpo-45494: 修复报告涉及无效延续字符错误时的解析器崩溃。由Pablo Galindo提供补丁。
bpo-45445: 如果Python在命令行中发现无效的
-X选项,现在将初始化失败。由Pablo Galindo提供补丁。bpo-45340: 对象属性现在保存在数组中而不是字典中。对象的字典是懒加载的,只有在需要时才创建。减少了典型Python对象的内存消耗约30%。由Mark Shannon提供补丁。
bpo-45408: 修复解析器在报告与未闭合括号同时发生的分词器错误时崩溃的问题。由Pablo Galindo提供补丁。
bpo-29410: 添加SipHash13作为字符串哈希算法并默认使用。
bpo-45385: 修复来自descr_check的引用泄漏。由Donghee Na提供补丁。
bpo-45367: 使用PEP 659机制将
BINARY_MULTIPLY操作码专门化为BINARY_MULTIPLY_INT``和 ``BINARY_MULTIPLY_FLOAT。bpo-21736: 冻结的标准库模块现在将
__file__设置为它们原本会从中加载的.py文件,如果可能的话。对于包,__path__``现在有了正确的条目,而不是空列表,这允许导入未冻结的子模块。这些仅在运行时初始化时知道标准库目录的情况下设置。注意,``__file__``处的文件不保证存在。这些都不影响非标准库的冻结模块,目前也不影响使用 ``PyImport_ImportFrozenModule()导入的冻结模块。另外,目前模块的co_filename没有更新。bpo-45020: 对于冻结的标准库模块,将原始模块名称记录为``module.__spec__.loader_state.origname``。如果该值与
module.__spec__.name不同,则该模块在Tools/scripts/freeze_modules.py中被定义为别名。如果它是None,则该模块来自标准库之外的源文件。bpo-45324: 在FrozenImporter.find_spec()中,我们现在保留了在exec_module()中加载模块所需的信息。这一变化主要影响内部细节,而不是改变导入器的行为。
bpo-45292: 实现 PEP 654。添加
ExceptionGroup和BaseExceptionGroup。更新回溯显示代码。bpo-40116: 修改拆分字典的实现。实例在确切属性集或属性设置顺序上不同的类仍可共享键。这对Python或C-API的用户应无可见影响。由Mark Shannon提供补丁。
bpo-44050: 通过设置
m_size为-1来表明使用全局状态的扩展可以再次在多个解释器中使用。这恢复到Python 3.8的行为。bpo-44525: 为
CALL_FUNCTION操作码设置初始专业化基础设施。实现了C函数调用的初始专业化:CALL_FUNCTION_BUILTIN_O``对应 ``METH_O标志。CALL_FUNCTION_BUILTIN_FAST``对应不包含关键字的 ``METH_FASTCALL标志。CALL_FUNCTION_LEN``对应 ``len(o)。CALL_FUNCTION_ISINSTANCE``对应 ``isinstance(o, t)。
bpo-44511: 改进类和映射模式生成的字节码。
bpo-43706: 通过使用 PEP 590
vectorcall调用约定加速enumerate()的调用。由Donghee Na提供补丁。
库¶
bpo-45679: 修复多值
typing.Literal的缓存问题。Literal[True, 2]不再等于``Literal[1, 2]``。bpo-42064: 将
sqlite3转换为多阶段初始化(PEP 489)。由Erlend E. Aasland提供补丁。bpo-45438: 修复泛型内置类型的typing.Signature字符串表示。
bpo-45613:
sqlite3现在根据底层SQLite库编译时的默认线程模式设置sqlite3.threadsafety。由Erlend E. Aasland提供补丁。bpo-45574: 修复关于
print_escape未使用的警告。bpo-45581:
sqlite3.connect()现在在底层SQLite API发出内存错误信号时正确引发MemoryError。由Erlend E. Aasland提供补丁。bpo-45557:
pprint.pprint()现在正确处理*underscore_numbers*。之前总是将其设置为``False``。bpo-44019: 将
operator.call()添加到operator.__all__中。由 Kreusada 提供补丁。bpo-42174: 现在如果列数或行数为 0,
shutil.get_terminal_size()会回退到合理的值。bpo-35673: 改进了对命名空间包的
__loader__属性的内省能力。importlib.machinery.NamespaceLoader现在是公开的,并且实现了importlib.abc.InspectLoader接口。_NamespaceLoader保留以向后兼容。bpo-45515: 在
datetime文档中添加了对zoneinfo的引用,主要替换了对dateutil.tz的过时引用。由 Paul Ganssle 更改。bpo-45475: 撤回了对
gzip.GzipFile、bz2.BZ2File和lzma.LZMAFile迭代的优化(参见 bpo-43787),因为在用户迭代它们时没有保持它们的引用导致回归。由 Inada Naoki 提供补丁。bpo-45489: 更新
ForwardRef以支持|操作符。补丁由 Donghee Na 提供。bpo-42222: 移除了在 randrange() 中对浮点数参数的弃用支持。
bpo-45428: 修复了在从标准输入读取文件名时 py_compile 中的回归问题。
bpo-45467: 修复了 "raw-unicode-escape" 编解码器中的增量解码器和流读取器。之前如果转义序列被分割,它们会失败。
bpo-45461: 修复了 "unicode-escape" 编解码器中的增量解码器和流读取器。之前如果转义序列被分割,它们会失败。
bpo-45239: 修复了
email.utils.parsedate_tz()在某些无效输入上崩溃并抛出UnboundLocalError而不是返回None的问题。由 Ben Hoyt 提供补丁。bpo-45417: 修复了 enum 模块中的二次行为:创建具有大量条目的枚举类是二次的。
bpo-45249: 修复了当异常中的
end_offset设置为 0 时,traceback.print_exc()在显示插入符号时的行为。由 Pablo Galindo 提供补丁。bpo-45416: 修复了与显式
asyncio.Lock对象一起使用asyncio.Condition的问题,这是由于移除了显式循环参数导致的回归。由 Joongi Kim 提供补丁。bpo-20028: 初始化
csv.Dialect时不允许空的 escapechar/quotechar。由 Vajrasky Kok 和 Donghee Na 提供补丁。bpo-44904: 修复了
doctest模块中的一个错误,该错误会在文档字符串包含一个带有classmethodproperty的示例时导致失败。由 Alex Waygood 提供补丁。bpo-45406: 使
inspect.getmodule()捕获由inspect.getabsfile()引发的FileNotFoundError,并返回None表示无法确定模块。bpo-45411: 在 mimetypes.py 模块中添加了包含字幕的文件扩展名 - .srt 和 .vtt。
bpo-10716: 将 pydoc 迁移到 HTML5(不改变其外观)。副作用是更新了 xmlrpc 的
ServerHTMLDoc,现在也使用了 CSS。cgitb 现在较少依赖 pydoc(因为它不能使用 CSS 文件)。bpo-45262: 防止 asyncio 中的 use-after-free。确保缓存的运行循环持有人在释放时被清除,以防止在 get_running_loop 中出现 use-after-free。
bpo-45386: 使
xmlrpc.client对 C 运行时更加健壮,其中底层的 Cstrftime函数在测试年份格式化选项时会导致ValueError。bpo-20028: 改进
csv.Dialect初始化时的错误消息。由 Vajrasky Kok 和 Donghee Na 提供补丁。bpo-45343: 将捆绑的 pip 更新到 21.2.4,setuptools 更新到 58.1.0。
bpo-45328: 修复了
http.client.HTTPConnection在不支持TCP_NODELAY套接字选项的操作系统中正常工作的问题。bpo-45243: 向
sqlite3.Connection添加了setlimit()和getlimit()方法,用于基于连接设置和获取 SQLite 限制。由 Erlend E. Aasland 提供补丁。-
- 自 Python 3.0 起弃用的
getargspec函数;
- 自 Python 3.0 起弃用的
自 Python 3.5 起弃用的
formatargspec函数;直接使用inspect.signature()函数和Signature对象。自 Python 3.5 起弃用的未文档化
Signature.from_builtin和Signature.from_function函数;改用Signature.from_callable()方法。
由 Hugo van Kemenade 提供补丁。
bpo-45192: 修复
tempfile._infer_return_type函数,使得tempfile函数的dir参数接受实现os.PathLike协议的对象。由 Kyungmin Lee 提供补丁。
bpo-45160: 当追踪被 ttk OptionMenu 使用的 tkinter 变量时,回调不再被调用两次。
bpo-25625: 添加了非并行安全的
chdir()上下文管理器,用于改变当前工作目录并在退出时恢复。chdir()的简单包装。bpo-24139: 在
sqlite3.Error中添加对 SQLite 扩展结果代码的支持。由 Erlend E. Aasland 提供补丁。bpo-24444: 修复了
argparse帮助显示中当选项的帮助设置为 1+ 个空格或当 choices 参数为空容器时引发的错误。bpo-44547: 实现
Fraction.__int__,使得fractions.Fraction实例f通过isinstance(f, typing.SupportsInt)检查。bpo-40321: 在
urllib中添加对 HTTP 308 重定向的支持。详情见 RFC 7538。由 Jochem Schulenklopper 提供补丁。bpo-41374: 确保在 Cygwin 3.1.6 及更高版本中暴露
socket.TCP_*常量。bpo-35970: 向 base64 模块的命令行界面添加帮助标志。由 Robert Kuska 提供的补丁。
文档¶
bpo-45726: 改进
functools.singledispatch()和functools.singledispatchmethod的文档。bpo-45680: 修改关于
GenericAlias对象的文档,以澄清非容器类也可以实现``__class_getitem__``。由Alex Waygood提供补丁。bpo-45618: 将用于构建文档的Sphinx版本更新至4.2.0。由Maciej Olko提供补丁。
bpo-45655: 在
typing模块文档的顶部新增一个“相关的 Python 增强提案(PEP)”部分。由Alex Waygood提供补丁。bpo-45604: 在
multiprocessing.log_to_stderr函数的文档中添加level参数。bpo-45516: 在
importlib.abc.TraversableResources文档中添加协议描述。bpo-45464: 在 Built-in Exceptions 文档中提到,由于可能存在内存布局不兼容问题,不建议在单个子类中继承多个异常类型。
bpo-45449: 在
collections.abc中添加关于 PEP 585 的说明。bpo-45516: 在
importlib.abc.Traversable文档中添加协议描述。bpo-20692: 添加编程FAQ条目,解释整数字面量属性访问需要在字面量后加空格或使用括号。
测试¶
bpo-45678: 添加测试场景,其中
functools.singledispatchmethod堆叠在已经被两个其他装饰器包装的方法上。由Alex Waygood提供补丁。bpo-45578: 为
dis.distb()添加测试。bpo-45678: 添加测试以确保
functools.singledispatchmethod正确包装目标函数的属性。bpo-45668: 现在,当Python在没有测试扩展模块的情况下构建时,PGO测试通过。
bpo-45577: 在
test_zoneinfo中为所有pickle协议添加子测试。bpo-45566: 修复
test_frozen_pickle``在 ``test_dataclasses中检查所有pickle版本的问题。bpo-43592:
test.libregrtest现在会在默认值对我们的测试套件来说太低时(如经常在macOS上的情况)提高文件描述符的最大数量的软资源限制。bpo-39679: 为与
@classmethod或@staticmethod结合使用的``@functools.singledispatchmethod``添加更多测试用例。bpo-45410: 当libregrtest生成工作进程时,现在将stderr写入stdout以保持消息顺序。使用单一管道处理stdout和stderr,而非两个管道。此前,消息顺序错乱,增加了分析buildbot日志的难度。由Victor Stinner提交的补丁。
bpo-45402: 修复当Python在树外构建时test_tools.test_sundry()的问题:修正freeze_modules.py工具如何定位_freeze_module程序。由Victor Stinner提交的补丁。
bpo-45403: 修复当Python在源代码树外构建时test_sys.test_stdlib_dir()的问题:比较规范化路径。由Victor Stinner提交的补丁。
bpo-45400: 如果目录名包含"a1"(如"Python-3.11.0a1"),修复test_exceptions中的test_name_error_suggestions_do_not_trigger_for_too_many_locals():使用更严格的正则表达式。由Victor Stinner提交的补丁。
bpo-10572: 将
sqlite3测试从test_sqlite重命名为test_sqlite3,并将其重新定位到Lib/test/test_sqlite3。由Erlend E. Aasland提交的补丁。
构建¶
bpo-43158:
setup.py现在使用来自配置脚本的值来构建_uuid扩展模块。配置现在也能检测util-linux的libuuid。bpo-45666: 修复
_testembed.c``中 ``swprintf和%s使用的警告bpo-45548:
Modules/Setup``和 ``Modules/makesetup已得到改进。Setup文件现在包含所有扩展的工作规则。过时的评论已被移除。由makesetup定义的规则正确跟踪依赖关系。bpo-45548:
math和cmath的实现现在需要C99兼容的libm,并且不再提供针对缺少acosh、asinh、atanh、expm1和log1p函数的变通方案。bpo-45595:
setup.py和makesetup现在跟踪所有Python头文件和模块特定头文件的构建依赖。bpo-45571:
Modules/Setup现在使用PY_CFLAGS_NODIST而不是PY_CFLAGS来编译共享模块。bpo-45570:
pyexpat和_elementtree不再定义过时的宏HAVE_EXPAT_CONFIG_H和USE_PYEXPAT_CAPI。XML_POOR_ENTROPY现在在expat_config.h中定义。bpo-43974:
setup.py不再定义Py_BUILD_CORE_MODULE。相反,每个使用内部 API 的模块都会定义这个宏。bpo-45548: 填充 Modules/Setup 中缺失的条目。
bpo-45532: 更新
sys.version使用main作为后备信息。由 Jeong YunWon 提供补丁。bpo-45536:
configure脚本现在检查 OpenSSL 头文件和库是否提供所需的 API。大多数常见的 API 都经过验证。此检查能检测到过时或缺失的 OpenSSL。失败不会停止 configure。bpo-45221: 修复了处理
LDFLAGS和CPPFLAGS选项时的回归问题,其中argparse.parse_known_args()可能会将选项解释为内置命令行参数之一,例如-h寻求帮助。bpo-45440: 构建 Python 现在需要一个提供以下函数的 C99
<math.h>头文件:copysign(),hypot(),isfinite(),isinf(),isnan(),round()。补丁由 Victor Stinner 提供。bpo-45405: 防止在使用非 Apple clang 的近期版本运行
configure时出现internal configure error。由 David Bohman 提供补丁。bpo-45433: 避免将 libpython 与 libcrypt 链接。
Windows¶
macOS¶
bpo-44828: 避免在使用python.org macOS安装程序提供的Tk 8.6.11时,在macOS 12 Monterey上出现tkinter文件对话框失败的问题。由Tk项目的Marc Culler提供补丁。
IDLE¶
bpo-45495: 将上下文关键词'case'和'match'添加到补全列表中。
C API¶
bpo-29103:
PyType_FromSpec*现在将类名从规范复制到类拥有的缓冲区中,因此原始类名可以被安全地释放。由Petr Viktorin提供补丁。bpo-45522: 现在可以禁用帧、浮点数、列表、字典、异步生成器和上下文对象的内部自由列表。
bpo-35134: 从有限C API中排除
PyWeakref_GET_OBJECT()。由于PyWeakReference结构在有限C API中是不透明的,它从未工作过。bpo-35081: 将
interpreteridobject.h头文件从Include/移动到``Include/internal/``。它仅提供私有函数。由Victor Stinner提供补丁。bpo-35134: 非有限API文件
cellobject.h、classobject.h、context.h、funcobject.h、genobject.h``和 ``longintrepr.h已被移动到Include/cpython目录。此外,eval.h``头文件已被移除。这些文件不应直接包含,因为它们已经被包含在 ``Python.h``中:参见 :ref:`包含文件 <api-includes>`。如果它们已被直接包含,考虑改为包含 ``Python.h。由Victor Stinner提供补丁。bpo-45474: 当定义
Py_LIMITED_API时,以下项目不再可用:Py_MARSHAL_VERSION宏
这些不是 limited API 的组成部分。
由Victor Stinner提供补丁。
bpo-45434: 移除
pystrhex.h头文件。它仅包含私有函数。C扩展应仅包含主要的``<Python.h>``头文件。由Victor Stinner提供补丁。bpo-45440: 移除
Py_FORCE_DOUBLE()宏。它被Py_IS_INFINITY()宏使用。由Victor Stinner提供补丁。bpo-45434: 当
Py_LIMITED_API宏设置为0x030b0000``(Python 3.11)或更高时,``<Python.h>不再包含头文件<stdlib.h>、<stdio.h>、<errno.h>和<string.h>。C扩展应在#include <Python.h>之后显式包含这些头文件。由 Victor Stinner 提供补丁。bpo-41123: 移除自 Python 3.3 起已弃用的
Py_UNICODE_COPY()和Py_UNICODE_FILL()宏。改用PyUnicode_CopyCharacters()或memcpy()(wchar_t*字符串) ,以及PyUnicode_Fill()函数。由 Victor Stinner 提供补丁。bpo-45412: 移除以下使用
errno变量的数学宏:Py_ADJUST_ERANGE1()Py_ADJUST_ERANGE2()Py_OVERFLOWED()Py_SET_ERANGE_IF_OVERFLOW()Py_SET_ERRNO_ON_MATH_ERROR()
由Victor Stinner提供补丁。
bpo-45395: 自定义冻结模块(设置为
PyImport_FrozenModules的数组)现在被视为添加项,而不是替换所有默认的冻结模块。通过将自定义数组条目的“code”字段设置为 NULL,仍可以禁用冻结的标准库模块。bpo-43760: 在有限的 C API 中添加新的
PyThreadState_EnterTracing()和PyThreadState_LeaveTracing()函数,以暂停和恢复跟踪和性能分析。由 Victor Stinner 提供补丁。bpo-44220:
PyStructSequence_UnnamedField被添加到稳定 ABI 中。
Python 3.11.0 alpha 1¶
发布日期:2021-10-05
安全性¶
bpo-42278: 将
tempfile.mktemp()的使用替换为TemporaryDirectory,以避免潜在的竞态条件。bpo-44600: 修复在 match 语句中跟踪某些失败模式时的错误行号。由 Charles Burkland 提供补丁。
bpo-41180: 向
marshal模块添加审计事件,并停止为每个解组的代码对象引发code.__init__事件。直接实例化的代码对象将继续引发事件,审计事件处理程序应检查或收集原始 marshal 数据。这减少了从.pyc文件加载时的显著性能开销。bpo-44394: 将打包的libexpat库从2.2.8更新至2.4.1版本,以修复 CVE 2013-0340 "Billion Laughs"漏洞。此版本主要用于Windows和macOS系统。
bpo-43124: 在
smtplib中的内部函数putcmd现在会对输入进行\r和\n字符的清理,以避免(不太可能的)命令注入。bpo-44022:
http.client现在在服务器返回100 Continue状态响应后,避免无限读取潜在的HTTP头部信息。
核心与内置函数¶
bpo-43760: 通过为追踪添加特殊指令,将每个指令分发的硬件分支数量从两个减少到一个。补丁由Mark Shannon提供。
bpo-45061: 为布尔类型添加了一个析构器,用于检测C扩展中错误调用Py_DECREF(Py_True)或Py_DECREF(Py_False)时的引用计数错误。同时检测当空元组单例或Unicode空字符串单例被错误销毁时的引用计数错误。由Victor Stinner提供补丁。
bpo-24076: sum()函数在求和单数字整数时进一步优化。
bpo-45190: 更新Unicode数据库至Unicode 14.0.0版本。
bpo-45167: 修复了
types.GenericAlias对象的深拷贝问题。bpo-45155:
int.to_bytes()和int.from_bytes()现在为byteorder参数提供了一个默认值"big"。int.to_bytes()还为length参数提供了一个默认值1。
库¶
bpo-44219: 在执行任意文件描述符的
isatty系统调用时释放GIL。这特别影响了os.isatty()、os.device_encoding()和io.TextIOWrapper。间接地,文本模式下的io.open()也受到影响。此更改解决了os.isatty()中的一个死锁问题。由Vincent Michel在 bpo-44219 中提供补丁。
核心与内置函数¶
bpo-44959: 在HP-UX系统上添加了对'.sl'后缀扩展模块的回退支持。
库¶
bpo-45121: 修复了当直接调用或通过
super()调用时,Protocol.__init__会引发``RecursionError``的问题。由Yurii Karabas提供补丁。
核心与内置函数¶
bpo-44348:
BaseException类型的析构函数现在使用trashcan机制来防止栈溢出。例如,当一个RecursionError实例被引发时,它可以通过__context__属性或 ``__traceback__``属性链接到另一个RecursionError,然后创建一系列异常。当链被销毁时,如果链相对于可用栈内存来说太长,嵌套的析构函数调用可能会因栈溢出而崩溃。由Victor Stinner提供补丁。bpo-45123: 修复PyAiter_Check仅检查__anext__的存在(不检查__aiter__)。将PyAiter_Check重命名为PyAIter_Check,PyObject_GetAiter -> PyObject_GetAIter。
bpo-1514420: 解释器在格式化异常时不再尝试打开带有尖括号中名称的文件(如"<string>"或"<stdin>")。
bpo-37330:
open()、io.open()、codecs.open()和fileinput.FileInput不再接受文件模式中的'U'("通用换行") 。此标志自Python 3.3起已被弃用。由Victor Stinner提供补丁。bpo-45083: 当解释器渲染异常时,其名称现在具有完整的限定名。以前只有类名被连接到模块名,这有时会导致显示的全名不正确。
(此问题仅影响C代码异常渲染,
traceback模块已经使用了限定名)。bpo-34561: 列表排序现在使用来自Munro和Wild的
powersort()的合并排序策略。与之前的策略不同,这在运行长度分布的熵方面被证明是接近最优的。大多数使用list.sort()的情况可能不会看到显著的时间差异,但在之前策略表现特别差的情况下可能会看到显著的改进。然而,由于这些都是对一个本质上最好情况下是二次时间解决的问题的快速线性时间近似,也有可能构造出之前策略表现更好的案例。bpo-45056: 编译器现在会从co_consts中移除未使用的尾随常量。
bpo-45020: 添加一个新的命令行选项"-X frozen_modules=[on|off]"来选择不使用(或使用)可选的冻结模块。这默认为"on"(或者如果它从源树运行则为"off")。
库¶
bpo-45012: 在
posix中,在os.DirEntry.stat()进行的stat()、lstat()和fstatat()系统调用期间释放GIL。由Stanisław Skonieczny提供补丁。
核心与内置函数¶
bpo-45018: 修复了迭代超过
2**32次的范围迭代器的pickling问题。bpo-45000: 当尝试删除
__debug__时,现在会引发SyntaxError。由Donghee Na提供补丁。bpo-44963: 为
anext_awaitable``对象实现 ``send()和throw()方法。由Pablo Galindo提供补丁。
库¶
bpo-44962: 修复了WeakKeyDictionary、WeakValueDictionary和WeakSet中当两个线程尝试提交最后一个待处理的移除时的竞争条件。这修复了asyncio.create_task并修复了asyncio.run中shutdown_asyncgens未运行导致的数据丢失问题。
核心与内置函数¶
bpo-24234: 在
bytes类型上实现__bytes__()特殊方法,因此一个bytes对象``b`` 能通过isinstance(b, typing.SupportsBytes)检查。bpo-24234: 在
complex类型上实现__complex__()特殊方法,因此一个复数z能通过isinstance(z, typing.SupportsComplex)检查。bpo-44954: 修复了一个边界情况下的bug,即
float.fromhex('0x.8p-1074')的结果错误地四舍五入。bpo-44947: 改进了导入语句中尾随逗号的语法错误提示。由Pablo Galindo提供补丁。
bpo-44945: 使用PEP 659机制专门化BINARY_ADD指令。新增了五个新指令:
BINARY_ADD_ADAPTIVE
BINARY_ADD_FLOAT
BINARY_ADD_INT
BINARY_ADD_UNICODE
BINARY_ADD_UNICODE_INPLACE_FAST
库¶
bpo-44929: 修复了
enum.Flag在REPL中字符串表示的一些边界情况。补丁由Pablo Galindo提供。
核心与内置函数¶
bpo-44914: 类版本标签不再被回收利用。
这意味着版本标签作为类状态的唯一标识符。我们依靠这一点来有效专门化LOAD_ATTR和其他指令。
bpo-44895: 添加了一个调试变量
PYTHONDUMPREFSFILE,用于创建一个由--with-trace-refs生成的转储文件。由Donghee Na提供补丁。bpo-44900: 为PEP 659快速化添加了五个超级指令:
LOAD_FAST LOAD_FAST
STORE_FAST LOAD_FAST
LOAD_FAST LOAD_CONST
LOAD_CONST LOAD_FAST
STORE_FAST STORE_FAST
bpo-44889: 初步实现了
LOAD_METHOD的自适应专门化。添加了以下专门化形式:LOAD_METHOD_CACHEDLOAD_METHOD_MODULELOAD_METHOD_CLASS
bpo-44890: 在调试构建中总是收集专门化统计信息。
bpo-44885: 修正了带有格式规范和重复表达式的f字符串的ast位置。补丁由Pablo Galindo提供。
bpo-44878: 从字节码解释器中移除了循环。所有指令都以DISPATCH宏结束,因此循环现在是多余的。
bpo-44878: 当使用计算gotos时,移除解释器循环的switch语句。这确保了我们只在解释器中有一个分发表。
bpo-44874: 弃用旧的 trashcan 宏(
Py_TRASHCAN_SAFE_BEGIN/Py_TRASHCAN_SAFE_END)。它们应被新的宏Py_TRASHCAN_BEGIN和Py_TRASHCAN_END替换。bpo-44872: 在 frameobject.c 中使用新的 trashcan 宏(Py_TRASHCAN_BEGIN/END)代替旧的宏(Py_TRASHCAN_SAFE_BEGIN/END)。
bpo-33930: 修复了在清理方法对象时因深度递归导致的段错误。由 Augusto Goulart 和 Pablo Galindo 提供补丁。
bpo-25782: 修复了当当前异常的上下文链中存在循环时,
PyErr_SetObject挂起的错误。bpo-44856: 修复了
update_bases()和__build_class__错误路径中的引用泄漏问题。由 Pablo Galindo 提供补丁。bpo-44826: STORE_ATTR 的自适应特化的初始实现
增加了 STORE_ATTR 的三种特化形式:
STORE_ATTR_SLOT
STORE_ATTR_SPLIT_KEYS
STORE_ATTR_WITH_HINT
bpo-44838: 修复了一个导致解析器为无效的 'if' 表达式引发不正确自定义
SyntaxError的错误。由 Pablo Galindo 提供补丁。bpo-44821: 提前创建实例字典(__dict__),以改善对象布局的规则性并辅助特化。
bpo-44792: 为 if 表达式改进语法错误。由 Miguel Brito 提供补丁
bpo-34013: 将无效的旧版语句自定义错误消息(如调用 "print" 时未加括号生成的消息)泛化,以包含更通用的表达式。由 Pablo Galindo 提供补丁
bpo-44732: 将
types.Union重命名为types.UnionType。bpo-44725: 通过
_opcode.get_specialization_stats()在 python 中公开特化统计信息。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: Python 3.10中已弃用线程调试(
PYTHONTHREADDEBUG环境变量),并将在Python 3.12中移除。此功能需要Python的调试版本。由Victor Stinner提供补丁。bpo-43895: 1995年添加的一个过时的共享对象文件句柄内部缓存已被从dynload_shlib.c中移除。该缓存尝试(但未保证)不会对同一.so文件执行两次dlopen,以解决1990年代中期posix类操作系统的缺陷。
库¶
核心与内置函数¶
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: 确保在进入理解作用域时设置行号。这确保了包括生成器表达式在内的回溯显示正确的行号。
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-44305: 为没有
except或finally块的try块改进错误消息。由 Pablo Galindo 提供补丁。bpo-43413: 一些内置类(如
tuple,list,frozenset)的子类的构造函数不再接受任意关键字参数。[在 3.11a4 中恢复]set的子类现在可以定义一个带有额外关键字参数的__new__()方法,而无需同时覆盖__init__()。bpo-43667: 在 Oracle Solaris 上的非 UTF 语言环境中改进 Unicode 支持。此问题不影响其他 Solaris 系统。
bpo-43693: 新增了一个操作码 MAKE_CELL,该操作码有效地将函数入口处完成的部分工作转移到编译器和评估循环中。除了创建所需的单元对象外,新操作码还在函数入口处将相关参数(及其他局部变量)转换为单元变量。
bpo-44232: 修复了当元类引发异常时
type()的回归问题。C 函数type_new()必须在元类构造函数引发异常且获胜类不是元类时正确报告异常。由 Victor Stinner 提供补丁。bpo-44201: 避免在 REPL 中检查特殊语法错误时的副作用,这些副作用导致在检测到语法错误后要求额外的标记。由 Pablo Galindo 提供补丁。
bpo-43693:
PyCodeObject增加了co_fastlocalnames和co_fastlocalkinds作为快速局部变量信息的权威来源。序列化的代码对象也相应发生了变化。bpo-44184: 修复了当解构函数移除堆类型最后一个强引用时 Python 退出的崩溃问题。由 Victor Stinner 提供补丁。
bpo-44187: 在解释器中实现了快速化。目前这没有任何优势,但为未来的优化奠定了基础。完整解释请参见 PEP 659。
bpo-44180: 解析器不再报告在首次到达位置更远处发生的通用语法错误。由 Pablo Galindo 提供补丁。
bpo-44168: 修复了解析器中涉及带有无效表达式的关键字参数的错误消息。由 Pablo Galindo 提供补丁。
bpo-44156:
compile.c中的字符串缓存现在与子解释器兼容。bpo-44143: 修复了当存在现有异常时引发标记化错误时出现的解析器崩溃问题。由 Pablo Galindo 提供补丁。
bpo-44032: 将 'fast' 局部变量和其他变量从帧对象移动到每线程的数据栈。
bpo-44114: 修复 C 代码中错误的 dictkeys_reversed 和 dictitems_reversed 函数签名,这破坏了 webassembly 构建。
bpo-44110: 改进
str.__getitem__()的错误信息bpo-26110: 添加
CALL_METHOD_KW操作码以加速带有关键字参数的方法调用。想法源自 PyPy。一个副作用是在评估循环中执行CALL_METHOD现在是无分支的。bpo-28307: 编译器现在通过将简单的 C 风格格式化转换为 f-string 表达式来优化仅包含格式代码 %s、%r 和 %a 的文字格式。
bpo-43149: 更正关于多种异常类型的语法错误消息,不再提及“异常组”。由 Pablo Galindo 提供补丁
bpo-43822: 当引发异常时,解析器将优先考虑分词器错误而非自定义语法错误。由 Pablo Galindo 提供补丁。
bpo-40222: “零成本”异常处理。
使用查找表来确定如何处理异常。
移除 SETUP_FINALLY 和 POP_TOP 块指令,消除了 try 语句的运行时开销。
将帧对象的大小减少了约 60%。
由 Mark Shannon 提供补丁
bpo-43918: 在新的
anext内置函数的文档字符串中记录签名和default参数。bpo-43833: 如果数字字面量紧跟着关键字之一:and、else、for、if、in、is、or,则发出弃用警告。如果紧跟着其他关键字或标识符,则引发带有更丰富信息的语法错误。
bpo-43879: 向 PyThreadState 添加 native_thread_id。由 Gabriele N. Tornetta 提供补丁。
bpo-43693: 在编译器中计算相对于局部变量的单元格偏移量。允许解释器将局部变量和单元格视为单个数组,这稍微提高了效率。同时使 LOAD_CLOSURE 操作码成为 LOAD_FAST 的别名。保留 LOAD_CLOSURE 有助于使字节码更具可读性。
bpo-17792: 为未绑定的局部变量或自由变量的访问提供更准确的错误消息。
bpo-28146: 修复
str.format()中一个令人困惑的错误信息。bpo-11105: 当通过
compile()编译带有递归引用的ast.AST对象时,解释器不再崩溃,而是引发RecursionError。bpo-39091: 修复向生成器的
throw()方法传递非异常对象时导致的崩溃。由 Noah Oxer 提供补丁。bpo-33346: 现在允许在异步函数的推导式中使用异步推导式。外部推导式隐式变为异步。
库¶
bpo-45371: 修复
distutils中的 clang rpath 问题。UnixCCompiler 现在使用正确的 clang 选项向共享库添加运行时库目录 (rpath)。bpo-45329: 修复当使用已安装的 expat 库 <= 2.2.0 构建
pyexpat.xmlparser时访问已释放内存的问题。bpo-41710: 在 Unix 上,如果 C 库(glibc 2.30 及更新版本)中可用
sem_clockwait()函数,threading.Lock.acquire()方法现在使用单调时钟 (time.CLOCK_MONOTONIC) 来处理超时,而不是使用系统时钟 (time.CLOCK_REALTIME),以避免受系统时钟变化影响。由 Victor Stinner 提供补丁。bpo-1596321: 修复当
threading模块首次从非主线程导入时threading._shutdown()函数的问题:在 Python 退出时不再记录错误。bpo-45274: 修复
threading模块中Thread.join()方法的竞态条件。如果函数被信号中断并且信号处理程序引发异常,确保线程保持在一个一致的状态以防止死锁。由 Victor Stinner 提供补丁。bpo-21302: 在 Unix 操作系统中,如果
clock_nanosleep()不可用但nanosleep()可用,time.sleep()现在使用nanosleep()函数。nanosleep()允许以纳秒精度睡眠。bpo-21302: 在Windows上,
time.sleep()现在使用了一个可等待的计时器,其分辨率为100纳秒(10-7 秒)。之前,它的分辨率为1毫秒(10-3 秒)。由Benjamin Szőke和Victor Stinner提供补丁。bpo-45238: 修复
unittest.IsolatedAsyncioTestCase.debug():现在可以运行异步方法和回调。bpo-36674:
unittest.TestCase.debug()现在如果类或测试方法被跳过装饰器装饰,会引发unittest.SkipTest。bpo-45235: 修复了一个问题,即当使用带有默认值的子解析器时,argparse不会保留提供的命名空间中的值。
bpo-45183: 让 zipimport.zipimporter.find_spec() 在底层的zip文件已被删除且内部缓存已通过 invalidate_cache() 重置时不抛出异常。
bpo-45234: 修复了
copyfile(),copy(),copy2()中的一个回归问题,当源是目录时不应抛出FileNotFoundError而应抛出IsADirectoryError。bpo-45228: 修复解析J1939网络地址时的栈缓冲区溢出问题。
bpo-45225: 在capwords中使用map函数代替genexpr。
bpo-42135: 修复拼写错误:
importlib.find_loader实际上计划在Python 3.12中移除,而不是3.10,与PR 25169中的其他内容一样。由 Hugo van Kemenade 提供补丁。
bpo-20524: 改进了
.format()操作对于str,float,int, 和complex的错误消息。新的格式现在显示有问题的模式和对象类型。bpo-45168: 更改
dis.dis()输出,以省略由于没有提供co_consts,co_names等而无法解析的操作参数值。之前操作参数本身会在值字段中重复,这不仅没有用而且可能会造成混淆。bpo-21302: 在Unix操作系统中,
time.sleep()现在使用clock_nanosleep()函数(如果可用),该函数允许以纳秒精度指定的间隔睡眠。bpo-45173: 从
configparser模块中移除:SafeConfigParser类、ParsingError类的filename属性、ConfigParser类的readfp()方法,这些自 Python 3.2 起已被弃用。由 Hugo van Kemenade 提供补丁。
bpo-44987: 纯 ASCII 字符串现在通过
unicodedata.normalize()在常数时间内完成规范化。由 Donghee Na 提供补丁。bpo-35474: 使用
strict=False调用mimetypes.guess_all_extensions()不再影响后续使用strict=True调用的结果。同时,修改返回的列表不再影响全局状态。bpo-45166:
typing.get_type_hints()现在可以与Final包裹在ForwardRef中的情况一起工作。bpo-45162: 移除许多旧的已弃用的
unittest功能:TestCase方法的 "fail*" 和 "assert*" 别名。从一开始就损坏的
TestCase方法assertDictContainsSubset()。被忽略的
<unittest.TestLoader.loadTestsFromModule> TestLoader.loadTestsFromModule()参数 use_load_tests。TextTestResult的旧别名_TextTestResult。
bpo-38371: 移除已弃用的
_tkinter.TkappType的split()方法。由 Erlend E. Aasland 提供补丁。bpo-20499: 提高 statistics.pvariance() 的速度和准确性。
bpo-45132: 移除
xml.dom.pulldom.DOMEventStream、wsgiref.util.FileWrapper和fileinput.FileInput的__getitem__()方法,这些自 Python 3.9 起已被弃用。由 Hugo van Kemenade 提供补丁。
bpo-45129: 由于重大的安全隐患,
asyncio.loop.create_datagram_endpoint()的 reuse_address 参数在 Python 3.9 中被禁用,现在已被完全移除。这是因为 UDP 中 socket 选项SO_REUSEADDR的行为。由 Hugo van Kemenade 提供补丁。
bpo-45124: 在 Python 3.9 中弃用的
bdist_msi命令现已被移除。请改用
bdist_wheel(wheel 包) 。由 Hugo van Kemenade 提供补丁。
bpo-30856:
unittest.TestResult的方法addFailure(),addError(),addSkip()和addSubTest()现在会在测试中引发异常或完成子测试后立即调用。之前它们仅在完成测试清理后被调用。bpo-45034: 修改了
struct.pack在'H'和'h'模式下对于过大/过小数字的错误格式化方式。现在它会显示实际的数字限制,而之前显示的是算术表达式。bpo-25894:
unittest现在总是单独报告跳过的和失败的子测试:默认模式下为单独的字符,详细模式下为单独的行。同时,现在在测试方法、类和模块清理的错误中也会输出测试描述。bpo-45081: 修复了继承自
typing.Protocol子类的数据类具有错误__init__的问题。由 Yurii Karabas 提供补丁。bpo-45085: 在 Python 3.9 中已弃用的
binhex模块现已被移除。以下在 Python 3.9 中已弃用的binascii函数现在也被移除了:a2b_hqx(),b2a_hqx();rlecode_hqx(),rledecode_hqx().
binascii.crc_hqx()函数仍然可用。由Victor Stinner提供补丁。
bpo-40360:
lib2to3包现在已被弃用,可能无法解析 Python 3.10 或更新版本。参见 PEP 617 (CPython 的新 PEG 解析器) 。由 Victor Stinner 提供补丁。bpo-45075: 将
traceback.StackSummary.format_frame()重命名为traceback.StackSummary.format_frame_summary()。此方法是为 3.11 添加的,因此尚未发布。更新了代码和文档以更好地区分 frame 和 FrameSummary。
bpo-31299: 添加了通过从
format_frame()覆盖返回None来完全从回溯中删除帧的选项。bpo-41620:
run()现在总是返回一个TestResult实例。之前如果测试类或方法使用了跳过装饰器,它会返回None。bpo-45021: 修复了在使用
concurrent.futures模块时,fork 的子进程在关闭时可能出现的死锁问题。bpo-43913: 修复了在
unittest中清理类和模块时的错误:使用
addModuleCleanup()注册的函数不会被调用,除非用户在测试模块中定义了tearDownModule()。如果
tearDownClass设置为None,使用addClassCleanup()注册的函数不会被调用。TestResult中的缓冲功能对使用addClassCleanup()和addModuleCleanup()注册的函数无效。在缓冲和调试模式下,使用
addClassCleanup()和addModuleCleanup()注册的函数中的错误未被正确处理。setUpModule()和使用addModuleCleanup()注册的函数中的错误以错误的顺序报告。以及几个较小的错误。
bpo-45030: 修复了在序列化和复制 range 迭代器时的整数溢出问题。
bpo-45001: 使电子邮件日期解析对格式错误的输入更加健壮,特别是针对仅包含空白的
Date:头。由 Wouter Bolsterlee 提供补丁。bpo-45010: 移除了
unittest.mock中对特殊方法__div__的支持。它在 Python 3 中未使用。bpo-39218: 通过使用
x*x而非x**2来提高方差计算的准确性。bpo-43613: 通过一次性在内存中压缩和解压缩,而不是流式处理,提高了
gzip.compress()和gzip.decompress()的速度。bpo-37596: 确保
set和frozenset对象总是可以重复marshalled。bpo-44019: 新增了一个函数
operator.call,使得operator.call(obj, *args, **kwargs) == obj(*args, **kwargs)。bpo-42255: 类
webbrowser.MacOSX已被弃用,并将在 Python 3.13 中移除。它未经测试、未记录,且未被webbrowser自身使用。由 Donghee Na 提供补丁。bpo-44955: 对于
run()中隐式创建的TestResult对象,方法stopTestRun()现在总是与方法startTestRun()成对调用。之前,对于使用跳过装饰器装饰的测试方法和类,它不会被调用。bpo-44935: Solaris 上的
subprocess现在也使用os.posix_spawn()以提高性能。bpo-44911:
IsolatedAsyncioTestCase在取消泄漏任务时将不再抛出异常。由 Bar Harel 提供补丁。bpo-41322: 为返回值!=None 的测试和异步测试添加了
DeprecationWarning(因为这可能表明测试编写不当,例如将测试编写为生成器函数) 。bpo-44524: 当从 typing 特殊形式别名子类化时,使异常消息更有用。由 Yurii Karabas 提供补丁。
bpo-38956: 当与
argparse.ArgumentDefaultsHelpFormatter一起使用时,argparse.BooleanOptionalAction的默认值不再打印两次。bpo-44860: 修复
sysconfig中的posix_user方案,使其不依赖于sys.platlibdir。bpo-44859: 改进
sqlite3中的错误处理,并引发更准确的异常。在
Connection.__call__()和Cursor.execute()中,当内存不足以将语句编码为 UTF-8 时,现在会引发MemoryError而不是sqlite3.Warning。在
Connection.__call__()和Cursor.execute()中,当语句包含代理字符时,现在会引发UnicodEncodeError而不是sqlite3.Warning。在
Cursor.executescript()中,对于非字符串脚本参数,现在会引发TypeError而不是ValueError。在
Cursor.executescript()中,对于包含空字符的脚本,现在会引发ValueError而不是截断它。正确处理获取进度处理器结果的布尔值时引发的异常。
添加了许多测试,覆盖了不同的边缘情况。
bpo-44581: 将捆绑的 pip 升级到 21.2.3 和 setuptools 到 57.4.0。
bpo-44849: 修复 FreeBSD 14 上
os.set_inheritable()函数对于以O_PATH标志打开的文件描述符的问题:忽略ioctl()上的EBADF错误,回退到fcntl()实现。由 Victor Stinner 提供补丁。bpo-44605: @functools.total_ordering() 装饰器现在可以与元类一起工作。
bpo-44524: 修复了一个问题,其中订阅的特殊形式的
__name__和__qualname__属性可能是None。bpo-44839: 在用户定义函数中引发的
MemoryError现在会在sqlite3中产生一个MemoryError。OverflowError现在会被转换为DataError。以前在这些情况下会产生OperationalError。bpo-44822:
sqlite3用户定义的函数和聚合器返回带有嵌入 NUL 字符的strings不再被截断。由 Erlend E. Aasland 提供补丁。bpo-44801: 确保 Callable 中的
ParamSpec变量只能被参数表达式(类型列表、省略号、ParamSpec 或 Concatenate)替换。bpo-44806:
typing.Protocol的非协议子类现在会忽略从协议基类继承的__init__方法。bpo-27275:
collections.OrderedDict.popitem()和collections.OrderedDict.pop()不再调用 OrderedDict 子类的__getitem__和__delitem__方法。bpo-44793: 修复在订阅带有
ParamSpec参数的泛型类型时检查参数数量的问题。bpo-44784: 在 importlib.metadata 测试中,覆盖在预期的 DeprecationWarnings 下的警告行为(importlib_metadata 4.6.3)。
bpo-44667:
tokenize.tokenize()不会在源代码不以换行符结束但最后一行是注释时错误地生成NEWLINE令牌,因为该函数已经生成了一个NL令牌。由 Pablo Galindo 提供补丁。bpo-44771: 添加了
importlib.simple模块,实现了从低级资源读取器接口到TraversableResources接口的适配器。旧版 API(path、contents等)现在完全由.files()API 支持,并为不具备该功能的资源加载器提供了兼容性垫片。与importlib_resources5.2 功能对等。bpo-44752:
rcompleter不在property对象上调用getattr()以避免评估相应方法的副作用。bpo-44747: 重构
typing模块中sys._getframe的使用。补丁由 Yurii Karabas 提供。bpo-42378: 修复了当
logging.FileHandler在atexit中使用且 filemode 设置为'w'时日志文件被覆盖的问题。注意,如果日志流由于日志关闭已经关闭,这将导致 atexit 中的消息不被记录。bpo-44720:
weakref.proxy对象引用非迭代器现在会引发TypeError,而不是解引用空的tp_iternext槽并崩溃。bpo-44704:
collections.abc.Set._hash()的实现现在与frozenset.__hash__()的实现匹配。bpo-44666: 修复了当
sys.stdout被重定向时compileall.compile_file()的问题。由 Stefan Hölzl 提供补丁。bpo-44688:
sqlite3.Connection.create_collation()现在接受非 ASCII 排序名称。补丁由 Erlend E. Aasland 提供。bpo-44690: 在 base64.b64decode 中采用 binacii.a2b_base64 的严格模式。
bpo-42854: 修复了
_ssl模块中的一个bug,该bug在使用_ssl._SSLSocket.write()和_ssl._SSLSocket.read()时,当len参数值较大时会抛出OverflowError。由Pablo Galindo提供补丁。bpo-44686: 使用
pkgutil.resolve_name替换unittest.mock._importer。bpo-44353: 通过在C中实现
NewType.__call__来提高其速度。由Yurii Karabas提供补丁。bpo-44353: 将
typing.NewType从函数重构为可调用类。由Yurii Karabas提供补丁。bpo-44678: 在 binascii.a2b_base64 的严格模式下,为不连续的填充添加了单独的错误消息。
bpo-44524: 为
typing模块类添加缺失的__name__和__qualname__属性。补丁由Yurii Karabas提供。bpo-40897: 在
inspect.signature()中优先使用当前类的构造函数。由Weipeng Hong提供补丁。bpo-44638: 添加对zipp项目的引用以及如何使用它的提示。
bpo-44648: 修复了
inspect.getsource()在检查交互式会话中的类时抛出的错误。应该是带有适当错误消息的OSError,而不是TypeError。bpo-44608: 修复了
_tkinter._flatten()如果被调用时传入的是序列或集合但不是列表或元组时的内存泄漏问题。bpo-44594: 修复了
ExitStack和AsyncExitStack异常链的一个边缘情况。当异常在传播过程中__context__被显式设置为None时,它们现在将匹配with块的行为。bpo-42799: 在
fnmatch中,编译的正则表达式模式的缓存大小(functools.lru_cache())从 256 增加到 32768,影响的函数包括:fnmatch.fnmatch()、fnmatch.fnmatchcase()、fnmatch.filter()。bpo-41928: 更新
shutil.copyfile(),当以os.path.sep结尾的路径不存在时,抛出FileNotFoundError而不是混淆的IsADirectoryError;shutil.copy()和shutil.copy2()也会受到影响。bpo-44569: 在
traceback中添加了StackSummary.format_frame()函数。这使得用户能够自定义回溯中单行的格式化方式,而无需重新实现处理递归回溯的逻辑。bpo-44566: 处理由 @contextlib.contextmanager 生成器引发的 StopIteration 子类。
bpo-44558: 使
indexOf()在 C 和 Python 版本中的实现保持一致。由 Donghee Na 提供补丁。bpo-41249: 修正
TypedDict以使其能与typing.get_type_hints()和跨模块的注解延迟求值一起工作。bpo-44554: 重构
pdb.main()中的参数处理,以简化输入加载错误的检测,并澄清模块或脚本调用时的行为。bpo-34798: 拆分关于
pprint.PrettyPrinter构造参数的段落,使其更易于阅读。bpo-44539: 添加了对识别没有 JFIF 或 Exif 标记的 JPEG 文件的支持。
bpo-43625: 修复
csv.Sniffer.has_header()检测 CSV 文件头时的 bug,并改进相关文档。bpo-44516: 将捆绑的 pip 更新至 21.1.3 版本。
bpo-42892: 修复
email.message.EmailMessage在解析格式错误的多部分邮件时抛出的异常。bpo-44468:
typing.get_type_hints()现在可以在类和基类中查找带有意外__module__的注解。之前,它会跳过这些MRO元素。bpo-44491: 允许通过向
set_authorizer()传递None来清除sqlite3授权器回调。由Erlend E. Aasland提供补丁。bpo-43977: 对于在父类被注册为
collections.abc.Mapping或collections.abc.Sequence之前创建的子类,设置正确的Py_TPFLAGS_MAPPING和Py_TPFLAGS_SEQUENCE标志。bpo-44466:
faulthandler模块现在能检测到在垃圾回收器收集期间是否发生致命错误。由Victor Stinner提供补丁。bpo-44471: 在
contextlib.ExitStack.enter_context()和contextlib.AsyncExitStack.enter_async_context()中,对于不支持相应 context manager 或 asynchronous context manager 协议的对象,现在会引发TypeError而不是AttributeError。bpo-44458:
BUFFER_BLOCK_SIZE现在被声明为静态的,以避免在bz2、lmza或zlib被静态链接时发生链接冲突。bpo-44464: 在弃用的importlib.metadata接口中移除对flake8的异常。与importlib_metadata 4.6同步。
bpo-44446: 在
traceback.FrameSummary中考虑lineno可能为None的情况。bpo-44439: 修复
bz2.BZ2File.write()/lzma.LZMAFile.write()方法,当输入数据是支持缓冲协议的对象时,文件长度可能错误的问题。bpo-44434: _thread.start_new_thread() 不再在线程退出时显式调用 PyThread_exit_thread(),该调用是多余的。在 Linux 上使用 glibc 时,如果 dlopen() 无法打开 libgcc_s.so 文件(例如:EMFILE 错误),pthread_exit() 会中止整个进程。由 Victor Stinner 提供补丁。
bpo-42972: _thread.RLock 类型现在完全实现了 GC 协议:添加了一个遍历函数和
Py_TPFLAGS_HAVE_GC标志。由 Victor Stinner 提供补丁。bpo-44422:
threading.enumerate()函数现在使用可重入锁以防止在可重入调用上挂起。由 Victor Stinner 提供补丁。bpo-38291: 导入 typing.io 或 typing.re 现在会打印一个
DeprecationWarning。bpo-37880: 当未提供
const关键字参数时,argparse 的 store_const 和 append_const 动作各自接收一个默认值None。之前这会引发一个TypeError。bpo-44389: 修复
ssl.OP_NO_TLSv1_3的弃用问题bpo-27827:
pathlib.PureWindowsPath.is_reserved()现在能识别更多保留文件名,包括那些带有尾部空格或冒号的文件名。bpo-44395: 修复
as_string()以正确传递 unixfrom。补丁由 Donghee Na 提供。bpo-44342: [Enum] 将 pickle 从按值改为按名称。
bpo-44356: [Enum] 如果所有数据类型混合都是相同的,则允许多个数据类型混合。
bpo-44351: 恢复
distutils.sysconfig中的parse_makefile(),因为它的行为与sysconfig中的类似实现不同。bpo-35800:
smtpd.MailmanProxy现在已被移除,因为没有外部模块mailman它就无法使用。由 Donghee Na 提供补丁。bpo-44357: 添加了一个返回给定数字的立方根的函数
math.cbrt()bpo-44339: 将
math.pow(±0.0, -math.inf)的返回值从抛出ValueError改为返回inf。这使得math.pow的特殊情况处理符合 IEEE 754 标准。bpo-44242: 从 Enum 创建中移除缺失标志检查,并将其移至
verify装饰器中。bpo-44246: 在
importlib.metadata中,恢复Distribution.entry_points(EntryPoints) 结果的兼容性,以符合旧实现的期望,并对以下情况发出弃用警告:A.EntryPoints对象再次可变,允许sort()和其他基于列表的变异操作。通过转换为可变序列(例如list(dist.entry_points).sort())避免弃用警告。B.EntryPoints结果再次允许通过索引访问。为避免弃用警告,首先将结果转换为 Sequence(例如tuple(dist.entry_points)[0])。bpo-44246: 在 importlib.metadata.entry_points 中,去重分布不再需要为 PathDistribution 对象加载完整的元数据,将入口点加载性能提高了约10倍。
bpo-43858: 添加了一个返回日志级别字典副本的函数:
logging.getLevelNamesMapping()bpo-44260:
random.Random构造函数不再无谓地读取系统熵。bpo-44254: 在 Mac 上,为 turtledemo 按钮文本提供一种在亮或暗背景下都能工作的颜色。程序员无法控制后者。
bpo-44258: 支持从字符串初始化 Fraction 的 PEP 515。
bpo-38693: 在 importlib.resources 中优先使用 f-strings 而非
.format。bpo-33693: Importlib.metadata 现在优先使用 f-strings 而非 .format。
bpo-44241: 从 importlib_metadata 4.1 中引入小调整:SimplePath 协议,支持 Metadata 2.2。
bpo-43216: 移除
@asyncio.coroutinedecorator,它让基于生成器的旧式协程能够与 async/await 代码兼容;移除asyncio.coroutines.CoroWrapper,它被用来在调试模式下包装旧式协程对象。 此装饰器自 Python 3.8 起已被弃用并原计划在 Python 3.10 中移除。 由 Illia Volochii 编写补丁。bpo-44210: 将importlib.metadata._meta.PackageMetadata公开。
bpo-43643: 根据规范,将readers.MultiplexedPath.name声明为属性。
bpo-27334:
sqlite3上下文管理器现在在提交失败时执行回滚(从而释放数据库锁)。补丁由Luca Citi和Erlend E. Aasland提供。bpo-4928: 记录了POSIX上的现有行为:当创建进程被SIGKILL杀死时,NamedTemporaryFiles不会被删除。
bpo-44154: 优化
fractions.Fraction对大型组件的pickling操作。bpo-33433: 对于IPv4映射的IPv6地址(RFC 4291 第2.5.5.2节),
ipaddress.IPv6Address.is_private检查被推迟到映射的IPv4地址。这解决了一个bug,其中公共映射的IPv4地址被IPv6检查视为私有地址。bpo-44150: 向statistics.fmean()添加了可选的 weights 参数。
bpo-44142:
ast.unparse()现在将在元组用作赋值目标时(例如在for循环中)删除冗余的括号。bpo-44145:
hmac计算在调用OpenSSLHMAC_UpdateC API时(3.9中的新功能)没有释放GIL。这无意中阻止了并行计算,而其他hashlib算法支持并行计算。bpo-44095:
zipfile.Path现在支持zipfile.Path.stem、zipfile.Path.suffixes和zipfile.Path.suffix属性。bpo-44077: 现在可以通过
socket.IP_RECVTOS接收服务类型(ToS),也称为区分服务(DS),或区分服务代码点(DSCP)和显式拥塞通知(ECN)IP头字段。bpo-37788: 修复了一个当 Thread 对象从未被 join 时的引用泄漏问题。
bpo-38908: 只有数据变量声明的
typing.Protocol子类现在在被isinstance检查时会抛出TypeError,除非它们被runtime_checkable()装饰。之前,这些检查会静默通过。由 Yurii Karabas 提供补丁。bpo-44098:
typing.ParamSpec将不再出现在大多数typing泛型的__parameters__中,除非是在 PEP 612 指定的有效使用位置。这防止了像typing.List[P][int]这样的错误用法。这一变化意味着在 3.10 beta 1 及更早版本中可能静默通过的错误用法现在会报错。bpo-44089: 在 3.10 中允许继承 ``csv.Error``(在 3.9 及更早版本中是被允许的,但在 3.10 的早期版本中被禁止)。
bpo-44081:
ast.unparse()现在如果lambda没有参数,不会使用多余的空格来分隔lambda和:。bpo-44061: 修复了之前版本中当使用
pathlib.Path对象的列表调用pkgutil.iter_modules()时的回归问题。bpo-44059: 在
webbrowser模块中注册 SerenityOS 浏览器。bpo-40465: 移除了在 Python 3.9 中废弃的 random 模块特性。
bpo-44018: random.seed() 不再改变 bytearray 输入。
bpo-38352: 将
IO,BinaryIO,TextIO,Match, 和Pattern添加到typing.__all__。由 Jelle Zijlstra 提供补丁。bpo-44002:
urllib.parse现在使用functool.lru_cache()作为其内部 URL 分割和引用缓存,而不是像 90 年代那样自己实现。未公开的内部模块
urllib.parse的Quoted类 API 现已弃用,将在 3.14 版本中移除。bpo-43972: 当
http.server.SimpleHTTPRequestHandler为不以/结尾的目录路径发送301 (Moved Permanently)时,添加Content-Length: 0头部。这改善了某些客户端的行为。bpo-28528: 修复
pdb中的一个错误,其中checkline()如果在reset()之后调用会引发AttributeError。bpo-43853: 改进了
sqlite3用户定义函数和聚合函数的字符串处理:现在可以将含有嵌入空字符的字符串传递给 UDFs
转换失败现在会正确引发
MemoryError
由 Erlend E. Aasland 提交的补丁。
bpo-43666: AIX:
Lib/_aix_support.get_platform()在 AIX WPAR 中可能会失败。文件集 bos.rte 似乎在 LPAR 和 WPAR 中都有 builddate,因此查询此文件集而不是 bos.mp64。为了防止类似情况(ODM 中没有 builddate),提供了一个足够完成构建的值(9988)。由 M Felt 提供补丁。bpo-43650: 修复
shutil.unpack_archive()中的MemoryError,该错误在shutil._unpack_zipfile()处理大文件时发生。由 Igor Bolshakov 提供补丁。bpo-43612:
zlib.compress()现在接受一个 wbits 参数,允许用户在不带 zlib 头部和尾部的原始 deflate 块中一次性压缩数据。以前这需要实例化一个zlib.compressobj。当 wbits=31 时,它还提供了一种比gzip.compress更快的替代方案。bpo-43392:
importlib._bootstrap._find_and_load()现在实现了一个两步检查,以避免在模块已经导入并准备就绪时锁定。这提高了重复调用importlib.import_module()和importlib.__import__()的性能。bpo-43234: 在Python 3.8中弃用后,禁止将非
concurrent.futures.ThreadPoolExecutor执行器传递给loop.set_default_executor()。由Illia Volochii提供补丁。bpo-43232: 禁止对
asyncio.trsock.TransportSocket进行之前已弃用的可能破坏性操作。由Illia Volochii提供补丁。bpo-30077: 添加了对苹果aifc/sowt伪压缩的支持
bpo-42971: 为定义了此常量(如macOS)的平台添加了
errno.EQFULL的定义。bpo-43086: 为 binascii.a2b_base64 添加了一个新的可选参数
strict_mode。当scrict_mode设置为True时,a2b_base64 函数将只接受有效的base64内容。关于什么是"有效的base64内容"的更多细节,可以在函数的文档中找到。bpo-43024: 改进了
traceback.print_exception()、traceback.format_exception()和traceback.format_exception_only()的帮助签名。bpo-33809: 添加了
traceback.TracebackException.print()方法,用于打印格式化的异常信息。bpo-42862:
sqlite3现在利用functools.lru_cache()来实现连接语句缓存。作为一个小优化,默认的语句缓存大小从100增加到了128。由Erlend E. Aasland提供补丁。bpo-41818: Soumendra Ganguly:添加了termios.tcgetwinsize()和termios.tcsetwinsize()。
bpo-40497: 当用户代码传递了无效的关键字参数 check 时,
subprocess.check_output()现在会引发ValueError。之前这样的使用会在后期失败,并引发TypeError。由Rémi Lapeyre提供补丁。bpo-37449:
ensurepip现在使用importlib.resources.files()可遍历APIbpo-40956: 在
sqlite3中使用Argument Clinic。由Erlend E. Aasland提供补丁。bpo-41730: 当导入
tkinter.tix时,现在会引发DeprecationWarning,该模块自Python 3.6以来在文档中已被弃用。bpo-20684: 从
inspect模块中移除未使用的_signature_get_bound_param函数 - 由 Anthony Sottile 提交。bpo-41402: 修复
email.message.EmailMessage.set_content()当使用二进制数据和7bit内容传输编码调用时的问题。bpo-32695:
tarfile.open()的 compresslevel 和 preset 关键字参数现在都已记录并测试。bpo-41137: 在读取 .pdbrc 文件时使用 utf-8 编码。由 Srinivas Reddy Thatiparthy 提供补丁。
bpo-24391: 改进了
threading同步对象的 reprs:Semaphore、BoundedSemaphore、Event和Barrier。bpo-5846: 弃用了以下
unittest函数,计划在 Python 3.13 中移除:findTestCases()makeSuite()getTestCaseNames()
请改用
TestLoader方法:由 Erlend E. Aasland 提交的补丁。
bpo-40563: 支持 dbm/shelve 上的 pathlike 对象。由 Hakan Çelik 和 Henry-Joseph Audéoud 提供补丁。
bpo-34990: 修复了 compileall 模块中的一个 Y2k38 错误,该错误会导致在 2038 年后修改的文件编译失败。
bpo-39549: 之前 reprlib.Repr 的代码使用了一个硬编码的字符串值 '...',这个 PR 更新为使用一个“fillvalue”属性,其值默认为 '...',并且可以在单个 reprlib.Repr 实例或其子类中重置。
bpo-38840: 在没有共享内存实现的平台上修复
test___all__。bpo-39359: 添加了一个缺失的检查,确保密码是一个 bytes 对象,用于加密的 zipfile。
bpo-38741:
configparser:在节标题中使用 ']' 将不再在 ']' 处截断节名称。bpo-38415: 添加了
contextlib.asynccontextmanager()缺失的行为以匹配contextlib.contextmanager(),使得装饰的函数本身可以作为装饰器使用。bpo-30256: 通过AutoProxy传递multiprocessing BaseProxy参数
manager_owned。bpo-27513:
email.utils.getaddresses()现在接受email.header.Header对象以及字符串值。由Zackery Spytz提供补丁。bpo-16379: 将SQLite错误代码和名称添加到
sqlite3异常中。由Aviv Palivoda、Daniel Shahaf和Erlend E. Aasland提供补丁。bpo-26228: pty.spawn在FreeBSD、macOS和Solaris上不再挂起。
bpo-33349: lib2to3现在在任何地方都能识别异步生成器。
bpo-29298: 修复没有
dest的必需子解析器未接收到参数时的TypeError。由Anthony Sottile提供补丁。
文档¶
bpo-45216: 移除
difflib中额外的方法文档列表。它在pydoc中渲染两次,并且在某些地方已经过时。bpo-45024:
collections.abc文档已扩展,明确涵盖实例和子类检查的工作原理,添加了额外的doctest示例和一个详尽的ABC列表,这些ABC仅通过存在正确的 special methods来测试成员资格。由Raymond Hettinger提供补丁。bpo-44957: 尽可能使用PEP 604联合语法来推广它。此外,在关于
Union的部分更突出地提到``X | Y``,并在关于Optional的部分提到X | None。bpo-16580: 为:int.to_bytes:和:int.from_bytes:方法添加了代码等价物,以及确保这些代码等价物有效的测试。
bpo-44903: 移除了
othergui.rst文件、对其的任何引用以及FAQ中的GUI框架列表。取而代之的是,我添加了指向Python Wiki 页面上的GUI框架 的链接。bpo-33479: Tkinter文档大幅扩展,新增了“架构”和“线程模型”部分。
bpo-36700:
base64RFC引用已更新指向 RFC 4648;新增了一个部分指向用户RFC的新“安全考虑”部分。bpo-44740: 根据2016年修订的美联社样式手册,将大写的"Web"和"Internet"替换为小写版本。
bpo-44693: 通过替换混淆的词汇"伪模块"为更准确的描述,更新了术语表中__future__的定义。
bpo-35183: 向os.path.splitext文档添加典型示例
bpo-30511: 澄清由于依赖改变当前工作目录,
shutil.make_archive()不是线程安全的。bpo-44561: 更新Doc/distributing/index.rst中三个过期的超链接:"项目结构"、"构建和打包项目"以及"将项目上传到Python包索引"。
bpo-44651: 删除Doc/glossary.rst中"强制"条目因其过时的定义。
bpo-42958: 更新了
filecmp.cmp()的文档字符串和文档,使其更加准确且不易混淆,特别是关于 shallow 参数的部分。bpo-44631: 重构了
_Environ(os模块) 的repr()代码。bpo-44613: importlib.metadata不再处于临时状态。
bpo-44544: 列出
textwrap.wrap()、textwrap.fill()和textwrap.shorten()的所有kwargs。现在,有导航链接指向TextWrap的属性,这使得在文档中导航更加容易,同时最小化了重复。bpo-38062: 澄清atexit在内部使用相等比较。
bpo-40620: 将教程controlflow.rst第4.3节中的示例转换为解释器演示样式。
bpo-43066: 向
zipfile文档添加警告:带有前导斜杠的文件名参数可能导致在Windows系统上无法打开存档。bpo-39452: 重写了
Doc/library/__main__.rst。扩大了文档的范围,明确讨论并区分了包中的__main__.py与__name__ == '__main__'表达式(及其周围的惯用法)。bpo-13814: 在设计FAQ中,回答了“为什么生成器不支持with语句?”
bpo-27752: csv.Dialect的文档更加描述性。
bpo-44453: 修复了
sysconfig.get_path()返回类型的文档。bpo-44392: 在C API文档中新增了一个关于类型提示中使用的类型的部分。记录了``Py_GenericAlias``和
Py_GenericAliasType。bpo-38291: 在文档中标记
typing.io和typing.re为自Python 3.8起弃用。它们从未得到类型检查器的适当支持。bpo-44322: 记录了SyntaxError的参数有一个details元组,并且对于f-string字段替换表达式中的错误调整了details。
bpo-44195: 更正了文档中对
TraversableResources的引用。没有TraversableReader。bpo-41963: 记录了
ConfigParser在读取配置文件时会去掉注释。bpo-44072: 更正了在数字ABC层次结构中
**支持被添加的位置,即numbers.Complex,而非numbers.Integral。bpo-43558: 在
dataclasses的文档中添加了备注,说明任何基类的__init__()必须在__post_init__()中被调用,并附带了一个代码示例。bpo-44025: 澄清了在match语句中,何时'_'是关键字,何时不是。
bpo-41706: 修正了关于如何调用像
__add__这样的方法来评估操作符表达式的文档。bpo-41621: 记录了
collections.defaultdict参数default_factory默认为``None``且为仅位置参数。bpo-41576: 记录了BaseException优于裸except
bpo-21760: 修复了 __file__ 的描述。Furkan Onder 提供的补丁。
bpo-39498: 添加一个“安全考虑”索引,链接到有明确记录安全考虑的标准库模块。
bpo-33479: 移除了关于 tkinter 线程安全的未经证实的声明。这一说法已经多年不成立,可能从来就不是真的。关于什么是真的解释可能会在更多的讨论之后,甚至可能在修补 _tkinter.c 之后添加。
测试¶
bpo-40173: 修复
test.support.import_helper.import_fresh_module()。bpo-45280: 为空的
typing.NamedTuple添加测试用例。bpo-45269: 覆盖当向
c_make_encoder提供无效markers类型的情况。bpo-45128: 修复由于
test_logging和sys.modules操作导致的test_multiprocessing_fork失败。bpo-45209: 修复
_test_multiprocessing._TestSharedMemory.test_shared_memory_cleaned_after_process_termination中的UserWarning: resource_tracker警告。bpo-45185: 在
test_ssl套件中启用TestEnumerations测试用例。bpo-45195: 修复 test_readline.test_nonascii():有时,换行符不会在末尾写入,因此不要期望在输出中看到它。Victor Stinner 提供的补丁。
bpo-45156: 修复了由
create_autospec()创建的模拟在unittest.mock.seal()上的无限循环问题。bpo-45125: 改进了
SharedMemory和SharableList对象的序列化测试和文档。bpo-44860: 为 posix_user 方案更新
test_sysconfig.test_user_similar():platlib不使用sys.platlibdir。Victor Stinner 提供的补丁。bpo-45052:
WithProcessesTestSharedMemory.test_shared_memory_basics测试被忽略,因为self.assertEqual(sms.size, sms2.size)行失败。现在这一行被移除,测试不再跳过。从测试中移除这一行的主要动机是
SharedMemory的size并不保证总是相同。它由平台决定。bpo-44895: libregrtest 现在更晚清除类型缓存,以减少在检查引用泄漏时产生误报的风险。之前,类型缓存清除得太早,libregrtest 在非常特定的条件下会关于引用泄漏产生误报。由 Irit Katriel 和 Victor Stinner 提供补丁。
bpo-45042: 修复了使用
@hashlib_helper.requires_hashdigest装饰的测试类总是被跳过的问题。bpo-25130: 在测试中添加
gc.collect()的调用以支持 PyPy。bpo-45011: 使依赖
_asyncioC 扩展模块的测试变为可选,以允许在替代的 Python 实现上运行。由 Serhiy Storchaka 提供补丁。bpo-44949: 修复 test_readline 的自动历史测试:有时,换行符不会在末尾写入,因此不要期望它在输出中出现。
bpo-44891: 添加了测试以澄清当在
str和bytes对象上使用obj * 1时id()被保留。由 Nikita Sobolev 提供补丁。bpo-44852: 添加了在运行回归测试套件时全面静默 DeprecationWarnings 的能力。
bpo-40928: 通知在 macOS 上运行 test_decimal 回归测试的用户,test_decimal 可能会输出无害的“malloc can't allocate region”消息。
bpo-44734: 修复了 turtle 测试中的浮点精度问题。
bpo-44708: 回归测试现在在使用 -w 运行时,仅重新运行受影响的测试方法,而不是重新运行整个测试文件。
bpo-42095: 添加了 Apple plists 的互操作性测试:用 Python plistlib 生成 plist 文件并用 Apple plutil 解析;反之亦然。
bpo-44647: 向回归测试添加了一个永久的 Unicode 值环境变量,以确保它们将来能处理这种用例。如果您的测试环境因此中断,请向我们报告错误,并在测试环境中临时设置 PYTHONREGRTEST_UNICODE_GUARD=0。
bpo-44515: 调整最近添加的contextlib测试,避免假设使用引用计数的垃圾回收。
bpo-44287: 通过使用更长的超时时间来修复asyncio的test_popen()测试_windows_utils。使用军用级经过实战检验的
test.support.SHORT_TIMEOUT超时而不是硬编码的10秒超时:默认为30秒,但在慢速构建机器人上会更长。由Victor Stinner提供补丁。bpo-44451: 在``test.test_importlib.test_metadata_api.APITests.test_entry_points_by_index``中重置``DeprecationWarning``过滤器,以避免如果
DeprecationWarnings被忽略时出现``StopIteration``错误。bpo-44363: 在test_capi中考虑地址消毒器。当运行GCC地址消毒器时,test_capi现在可以通过。
bpo-44364: 为
math.sqrt()函数添加非整数测试。bpo-43921: 修复test_ssl.test_wrong_cert_tls13():使用
suppress_ragged_eofs=False,因为在Windows上read()可能会引发ssl.SSLEOFError。由Victor Stinner提供补丁。bpo-43921: 修复test_ssl的test_pha_required_nocert():捕获另外两种EOF情况(当``recv()``方法返回一个空字符串时)。由Victor Stinner提供补丁。
bpo-44131: 在test_embed中添加test_frozenmain以测试
Py_FrozenMain()C函数。补丁由Victor Stinner提供。bpo-31904: 在test_file_not_exists()中忽略错误字符串的大小写。
bpo-42083: 添加测试以检查
PyStructSequence_NewType是否接受doc字段设置为``NULL``的PyStructSequence_Desc。bpo-35753: 通过跳过那些函数来修复doctest在解析包含不可包装函数的模块时的崩溃。
bpo-30256: 添加嵌套队列的测试,当在
ListProxy和DictProxy中使用``multiprocessing``共享对象AutoProxy[Queue]时。
构建¶
bpo-45220: 避免自动使用Windows 11 SDK预览版构建。可以通过在构建前设置``DefaultWindowsSDKVersion``环境变量来覆盖此设置。
bpo-45020: 冻结在启动期间导入的标准库模块。这显著提高了启动性能。如有需要,可使用之前添加的"-X frozen_modules=off"命令行选项强制导入源代码模块。
bpo-45188: Windows构建现在将重新生成冻结模块作为构建的第一部分。之前重新生成是在构建的后期进行的,如果任何模块发生了变化,就需要重新开始构建。
bpo-45163: 修复Haiku平台构建。
bpo-45067: ncurses函数extended_color_content是在2017年引入的
(https://invisible-island.net/ncurses/NEWS.html#index-t20170401)。
CentOS 7中的ncurses-devel包有一个较旧版本的ncurses,导致编译错误。为了编译支持扩展颜色的ncurses,我们验证ncurses库的版本>=20170401。
bpo-45019: 为冻结模块在相关文件中生成行。直到现在,每个文件都必须手动编辑。这一变化使得添加和修改冻结模块变得更加容易。
bpo-44340: 添加支持通过--with-lto=thin/full使用clang thin lto构建。由Donghee Na和Brett Holman提供补丁。
bpo-44535: 支持在Windows上使用Visual Studio 2022安装进行构建。
bpo-43298: 改进了在没有安装Windows SDK时构建的错误消息。
bpo-44381: Windows构建现在接受
EnableControlFlowGuard设置为guard以启用CFG。bpo-41282: 修复了导致标准库扩展模块在cpython的安装阶段不必要且错误地重新构建的``make install``问题。
Windows¶
bpo-45375: 修复了由于在非规范化路径中搜索标准库而导致的断言失败。
bpo-45022: 更新Windows版本以包含libffi 3.4.2
bpo-45007: 在Windows构建中更新到OpenSSL 1.1.1l
bpo-44848: 升级Windows安装程序以使用SQLite 3.36.0。
bpo-41299: 修复在
threading模块中使用超时功能(如threading.Lock.acquire()或threading.Condition.wait())时出现的16毫秒抖动问题。bpo-40263: 这是 https://bugs.python.org/issue26903 的后续错误。一旦应用了该修复,我们会遇到一个差一的断言问题。该断言不正确。
macOS¶
bpo-45007: 更新 macOS 安装程序构建以使用 OpenSSL 1.1.1l。
bpo-34602: 在 macOS 上使用
./configure --with-undefined-behavior-sanitizer --with-pydebug构建 CPython 时,现在将栈大小翻两番以允许整个测试套件通过。bpo-44848: 更新 macOS 安装程序以使用 SQLite 3.36.0。
bpo-44689:
ctypes.util.find_library()现在在 macOS 11 Big Sur 上即使是在旧版 macOS 上构建的 Python 也能正确工作。之前,当在旧版 macOS 系统上构建时,由于系统库存储方式的改变,find_library在 Big Sur 上运行时无法找到 macOS 系统库。bpo-41972: 修改框架构建在 sysconfig 中的用户头文件路径,添加 'pythonX.Y' 组件以匹配 distutils 的行为。
bpo-43109: 允许 --with-lto 配置选项与 Apple 提供的 Xcode 或 Command Line Tools 一起工作。
bpo-34932: 为 macOS 添加 socket.TCP_KEEPALIVE 支持。由 Shane Harvey 提供补丁。
IDLE¶
bpo-45296: 在 Windows 上,将退出/退出的提示信息改为建议使用 Ctrl-D(这是有效的),而不是 <Ctrl-Z Return>(在 IDLE 中无效)。
bpo-45193: 使完成框在 Ubuntu 上再次出现。
bpo-40128: 主要修复在 macOS 上不使用 tcl/tk 8.6.11(如 3.9 版本)时的补全问题。添加的 update_idletask 调用应该是无害的,可能在其他情况下也有帮助。
bpo-33962: 将缩进空格设置从字体选项卡移至新的Windows选项卡。由Mark Roseman和Terry Jan Reedy提供补丁。
bpo-40468: 将设置对话框的常规选项卡拆分为Windows和Shell/ED选项卡。将扩展帮助菜单的帮助源移至扩展选项卡。为新选项腾出空间并缩短对话框。后者使对话框更好地适应小屏幕。
bpo-41611: 避免在
AutoCompleteWindow.winconfig_event()中出现未捕获的异常。bpo-41611: 修复在macOS上有时因标签补全导致IDLE冻结的问题。
bpo-44010: 高亮显示新的 match 语句的 soft keywords:
match、case和_。然而,这种高亮显示并不完美,在某些罕见情况下会不正确,包括一些case模式中的_。bpo-44026: 在NameErrors和AttributeErrors的消息行中包含解释器的拼写修正建议。由E. Paine提供补丁。
工具/示例¶
bpo-44786: 修复c-analyzer脚本中正则表达式的警告。
bpo-44967: 当模块无法找到时,pydoc现在返回非零状态码。
bpo-44978: 允许Argument Clinic工具处理
__complex__特殊方法。bpo-43425: 删除了'demo2to3'演示项目,该项目演示了在distutils包中使用lib2to3支持Python 2.x和Python 3.x的单一源。由Donghee Na提供补丁。
bpo-44074: 使patchcheck自动检测正确的基础分支名称(之前硬编码为'master')
bpo-20291: 在Argument Clinic中添加了对可变位置参数的支持。
C API¶
bpo-41710: PyThread_acquire_lock_timed()函数现在会在超时时间过长时进行钳制,而不是中止进程。由Victor Stinner提供补丁。
bpo-44687:
BufferedReader.peek()在文件已全部缓冲时不再引发ValueError。bpo-45116: 添加
Py_ALWAYS_INLINE宏以请求编译器始终内联一个静态内联函数。编译器可以忽略此请求并决定不内联该函数。由 Victor Stinner 提供补丁。bpo-45094: 添加
Py_NO_INLINE宏以禁用函数的内联。补丁由 Victor Stinner 提供。bpo-45061: 为
bool类型添加一个析构器,以检测 C 扩展中错误调用Py_DECREF(Py_True);或Py_DECREF(Py_False);的引用计数错误。由 Victor Stinner 提供补丁。bpo-42035: 添加一个新的
PyType_GetQualName()函数以获取类型的限定名称。bpo-41103: 恢复旧缓冲区协议的移除,因为它们是稳定 ABI 的一部分。
bpo-44751: 从公共
Python.h头文件中移除crypt.h包含。bpo-42747:
Py_TPFLAGS_HAVE_VERSION_TAG类型标志现在不做任何事情。Py_TPFLAGS_HAVE_AM_SEND标志(在 3.10 中添加)被移除。这两者都是不必要的,因为不可能有相关字段缺失的类型对象。bpo-44530: 向
PyCodeObject结构添加co_qualname,以将限定名称从编译器传播到代码对象。由 Gabriele N. Tornetta 提供补丁
bpo-44441: 现在
Py_RunMain()会在退出时将PyImport_Inittab重围为其初始值。 必须能够在每次 Python 初始化时调用PyImport_AppendInittab()或PyImport_ExtendInittab()。 由 Victor Stinner 编写补丁。bpo-39947: 移除 4 个私有的 trashcan C API 函数,这些函数仅为了保持与 Python 3.8 及更早版本的稳定 ABI 的向后兼容性而保留,因为在 Python 3.8 及更早版本中,trashcan API 无法与有限的 C API 一起使用。trashcan API 在 Python 3.9 中被排除在有限的 C API 之外。
已移除的函数:
_PyTrash_deposit_object()
_PyTrash_destroy_chain()
_PyTrash_thread_deposit_object()
_PyTrash_thread_destroy_chain()
垃圾回收C API从未能与有限的C API一起使用,因为旧的垃圾回收宏直接访问了
PyThreadState成员如_tstate->trash_delete_nesting,而PyThreadState结构在有限的C API中是不透明的。同时从C API中排除
PyTrash_UNWIND_LEVEL常量。由Victor Stinner提供补丁。
bpo-40939: 移除了关于已移除的
PyParser_*C API的文档。bpo-43795: 受限 API 的内容 中的列表现在显示公共名称
PyFrameObject而非_frame。列表中不再出现不存在的条目_node。bpo-44378:
Py_IS_TYPE()不再使用Py_TYPE()以避免编译器警告:不再将``const PyObject*``强制转换为PyObject*。由Victor Stinner提供补丁。bpo-39573: 将
Py_TYPE()和Py_SIZE()宏转换为静态内联函数。现在必须使用Py_SET_TYPE()和Py_SET_SIZE()函数来设置对象类型和大小。由Victor Stinner提供补丁。bpo-44263: 如果类型定义时设置了
Py_TPFLAGS_HAVE_GC标志但没有遍历函数(PyTypeObject.tp_traverse),PyType_Ready()函数现在会引发错误。由Victor Stinner提供补丁。bpo-43795: 未记录的函数
Py_FrozenMain()已从有限API中移除。bpo-44113: 弃用以下用于配置Python初始化的函数:
PySys_AddWarnOptionUnicode()PySys_AddWarnOption()PySys_AddXOption()PySys_HasWarnOptions()Py_SetPath()Py_SetProgramName()Py_SetPythonHome()Py_SetStandardStreamEncoding()_Py_SetProgramFullPath()
请改用 Python 初始化配置 中新增的
PyConfigAPI(参见 PEP 587)。bpo-44094: 移除
PyErr_SetFromErrnoWithUnicodeFilename()、PyErr_SetFromWindowsErrWithUnicodeFilename()``和``PyErr_SetExcFromWindowsErrWithUnicodeFilename()。这些函数未被记录,并且自Python 3.3以来已被弃用。bpo-43795:
PyCodec_Unregister()现在作为Windows稳定ABI DLL中的函数被正确导出。bpo-44029: 移除已弃用的
Py_UNICODEAPI:PyUnicode_Encode、PyUnicode_EncodeUTF7、PyUnicode_EncodeUTF8、PyUnicode_EncodeUTF16、PyUnicode_EncodeUTF32、PyUnicode_EncodeLatin1、PyUnicode_EncodeMBCS、PyUnicode_EncodeDecimal、PyUnicode_EncodeRawUnicodeEscape、PyUnicode_EncodeCharmap、PyUnicode_EncodeUnicodeEscape、PyUnicode_TransformDecimalToASCII、PyUnicode_TranslateCharmap、PyUnicodeEncodeError_Create、PyUnicodeTranslateError_Create。参考 PEP 393 和 PEP 624。bpo-42035: 新增
PyType_GetName()函数以获取类型的短名称。
Python 3.10.0 beta 1¶
发布日期: 2021-05-03
安全性¶
bpo-43434: 现在创建
sqlite3.Connection对象时也会产生sqlite3.connect和sqlite3.connect/handleauditing events。之前这些事件仅由sqlite3.connect()调用产生。由 Erlend E. Aasland 提供补丁。bpo-43998:
ssl模块设置了更安全的密码套件默认值。默认禁用不具有前向保密性和使用 SHA-1 MAC 的密码。安全级别 2 禁止使用安全性低于 112 位的弱 RSA、DH 和 ECC 密钥。SSLContext默认最低协议版本为 TLS 1.2。设置基于 Hynek Schlawack 的研究。bpo-43882: URL 部分中存在的换行符或制表符可能允许某些形式的攻击。
遵循 WHATWG 定义的 URL 控制规范,
urllib.parse()现在从 URL 中移除 ASCII 换行符和制表符,防止此类攻击。bpo-43472: 确保解释器级审计钩子在通过
_xxsubinterpreters模块调用时接收到cpython.PyInterpreterState_New事件。bpo-43362: 修复 _sha3 模块中的无效释放。此问题在 3.10.0a1 中引入。Python 3.9 及更早版本不受影响。
bpo-43762: 为
sqlite3.connect/handle()、sqlite3.Connection.enable_load_extension()和sqlite3.Connection.load_extension()添加审计事件。由 Erlend E. Aasland 提供补丁。bpo-43756: 添加新的审计事件
glob.glob/2以包含新增的 root_dir 和 dir_fd 参数,这些参数已添加到glob.glob()和glob.iglob()中。bpo-36384:
ipaddress模块不再接受 IPv4 地址字符串中的任何前导零。前导零是模糊的,并被一些库解释为八进制表示法。例如,旧函数socket.inet_aton()将前导零视为八进制表示法。现代inet_pton()的 glibc 实现不接受任何前导零。ipaddress模块曾一度接受模糊的前导零。bpo-43075: 修复
urllib.request.AbstractBasicAuthHandler中的正则表达式拒绝服务(ReDoS)漏洞。易受 ReDoS 攻击的正则表达式具有二次最坏情况复杂度,当识别精心制作的无效 RFC 时,它可能导致拒绝服务。此 ReDoS 问题位于客户端,需要远程攻击者控制 HTTP 服务器。bpo-42800: 现在为 frame.f_code、traceback.tb_frame 和生成器代码/帧属性访问触发审计钩子。
bpo-37363: 向
http.client模块添加审计事件。
核心与内置函数¶
bpo-43977: 防止类在模式匹配时同时是序列和映射。
bpo-43977: 在模式匹配时,使用
tp_flags在类对象上确定主题是序列还是映射。避免在模式匹配时需要导入collections.abc。bpo-43892: 在解析
match块时,恢复对复杂字面值模式的正确验证。bpo-43933: 在执行
__exit__调用时,将 frame.f_lineno 设置为 'with' 关键字的行号。bpo-43933: 如果帧中的当前位置没有行号,则将 f_lineno 属性设置为 None,而不是 -1,以符合 PEP 626。这通常不应该发生,但在一些不寻常的情况下可能会出现。
bpo-43963: 在子解释器中导入
_signal模块不再有副作用。bpo-42739: 行号表的内部表示已更改为不使用哨兵,并且向进程外 API 函数
PyLineTable_InitAddressRange添加了一个显式的长度参数。这使得在某些情况下处理行号表更加健壮。
库¶
bpo-43908: 使
array.array类型不可变。由 Erlend E. Aasland 提供补丁。
核心与内置函数¶
bpo-43901: 更改类和模块对象以按需延迟创建空的注释字典。为了向后兼容,注释字典存储在对象的 __dict__ 中。
bpo-43892: 匹配模式现在使用新的专用 AST 节点(
MatchValue、MatchSingleton、MatchSequence、MatchStar、MatchMapping、MatchClass),而不是重用表达式 AST 节点。MatchAs和MatchOr现在被定义为模式节点而不是表达式节点。由 Nick Coghlan 提供补丁。bpo-42725: 当 PEP 563 被激活时,现在禁止在注释中使用
await/yield/yield from和命名表达式。bpo-42737: 对于复杂目标(除了简单名称之外的所有内容)的注释,在使用
from __future__ import annotations时不再产生任何运行时效果。bpo-43914: 解释器引发的
SyntaxError异常现在会高亮显示构成语法错误的整个表达式范围,而不仅仅是问题被检测到的位置。由 Pablo Galindo 提供补丁。bpo-38605: 撤销将
from __future__ import annotations设为默认值。这一决定遵循了指导委员会的决定,将 PEP 563 的更改推迟到至少 Python 3.11。有关该决定的更多信息,请参阅原始邮件:https://mail.python.org/archives/list/python-dev@python.org/thread/CLVXXPQ2T2LQ5MP2Y53VVQFCXYWQJHKZ/。由 Pablo Galindo 提供补丁。bpo-43475: NaN 值的哈希现在依赖于对象身份。以前,它们总是哈希为 0,即使 NaN 值彼此不相等。为不相等的值使用相同的哈希会导致哈希表中的堆积。
bpo-43859: 改进了
IndentationError异常的错误消息。由 Pablo Galindo 提供补丁。bpo-41323: 字节码优化器中的常量元组折叠现在重用常量表中的元组。
bpo-43846: 对于大型字面量和调用表达式,数据堆栈的使用大大减少。
bpo-38530: 当打印解释器引发的
NameError时,PyErr_Display()将提供函数中相似变量名的建议。由 Pablo Galindo 提供补丁。bpo-43823: 改进了无效字典字面量的语法错误。由 Pablo Galindo 提供补丁。
bpo-43822: 改进了解析器中表达式间缺少逗号的语法错误。由 Pablo Galindo 提供补丁。
bpo-43797: 改进了无效比较的
SyntaxError错误消息。由 Pablo Galindo 提供补丁。bpo-43760: 将检查是否启用跟踪的标志从堆移动到 C 堆栈。应该可以加速解释器中的调度。
bpo-43682: 静态方法 (
@staticmethod) 和类方法 (@classmethod) 现在将继承方法属性 (__module__,__name__,__qualname__,__doc__,__annotations__) 并具有新增的__wrapped__属性。 由 Victor Stinner 编写补丁。bpo-43751: 修复了
anext(ait, default)错误返回 None 的 bug。bpo-42128:
__match_args__不再允许为列表。bpo-43683: 添加 GEN_START 操作码。标记生成器的开始,包括异步或协程,并处理向新创建的生成器或协程发送值。
库¶
bpo-43105: Importlib 现在在从文件位置创建模块规范对象时解析相对路径。
核心与内置函数¶
bpo-43682: 静态方法 (
@staticmethod) 现在像常规函数一样属于可调用对象。 由 Victor Stinner 编写补丁。bpo-42609: 防止在编译某些极端长的表达式如
"+0"*1000000时 AST 验证器和优化器崩溃。现在会抛出RecursionError。bpo-38530: 当打印
AttributeError时,PyErr_Display()将提供引发异常的对象的相似属性名称的建议。由 Pablo Galindo 提交的补丁
库¶
bpo-44015: 在 @dataclass() 中,如果多次指定 KW_ONLY,则抛出 TypeError。
bpo-25478: 为 collections.Counter() 添加了一个 total() 方法,用于计算计数的总和。
bpo-43733: 修改
netrc.netrc在使用区域设置编码之前使用 UTF-8 编码。bpo-43979: 从
urllib.parse.parse_qsl()中移除了循环前不必要的列表推导。由 Christoph Zwerschke 和 Donghee Na 提交的补丁。bpo-43993: 更新捆绑的 pip 到 21.1.1。
bpo-43957: [枚举] 弃用当非成员用于包含检查时抛出
TypeError的行为;在 3.12 版本中,将返回True或False,如果该值是枚举的成员或其成员的值之一,则包含检查将返回True。bpo-42904: 为了与之前次要版本的 Python 向后兼容,如果
typing.get_type_hints()没有接收到命名空间字典参数,typing.get_type_hints()将在评估类中字符串化的类型注释(字符串前向引用)时搜索全局然后局部命名空间。bpo-43945: [枚举] 弃用非标准的混合格式()行为:在 3.12 版本中,将使用枚举成员而非成员的值进行 format() 调用。
bpo-41139: 弃用未记录的
cgi.log()API。bpo-43930: 更新捆绑的 pip 到 21.1 和 setuptools 到 56.0.0
bpo-43907: 修复了在使用协议 5 时纯 Python pickle 实现中的一个 bug,其中在 pickled 对象图中多次出现的 bytearray 实例会错误地 unpickle 为 bytearray 对象的重复副本。
bpo-43926: 在
importlib.metadata中,为Description提供统一接口,允许任何字段编码为多行值,从多行值中移除续行,并添加.json属性以便轻松访问 PEP 566 JSON 兼容形式。与importlib_metadata 4.0同步。bpo-43920: OpenSSL 3.0.0: 当 cadata 不包含有效证书时,
load_verify_locations()现在返回一致的错误消息。bpo-43817: 添加
inspect.get_annotations(),该函数安全地计算对象上定义的注解。它解决了从各类对象访问注解时的怪癖,并对传入的对象做出极少假设。inspect.get_annotations()还能正确反字符串化字符串化的注解。inspect.signature()、inspect.from_callable()和inspect.from_function()现在调用inspect.get_annotations()来检索注解。这意味着inspect.signature()和inspect.from_callable()现在也能反字符串化字符串化的注解。bpo-43284: platform.win32_ver 从 sys.getwindowsversion().platform_version 派生 Windows 版本,而后者又从 kernel32.dll 派生版本(可能与 Windows 本身的版本不同)。因此,更改 platform.win32_ver 以使用平台模块的 _syscmd_ver 私有函数来确定版本,以返回准确的版本。
bpo-42854:
ssl模块现在内部使用SSL_read_ex和SSL_write_ex。这些函数支持读写大于 2 GB 的数据。写入零长度数据不再因协议违规错误而失败。bpo-42333: 将
_ssl扩展模块移植到多阶段初始化。bpo-43880:
ssl现在对 OP_NO_SSL/TLS* 选项、旧 TLS 版本、旧协议以及自 Python 3.6、3.7 或 OpenSSL 1.1.0 以来已弃用的其他功能发出 DeprecationWarning。bpo-41559: PEP 612 现在仅在 Python 中实现;内置的
types.GenericAlias对象不再在__parameters__中包含typing.ParamSpec``(除了 ``collections.abc.Callable的GenericAlias)。这意味着之前无效的ParamSpec使用(如list[P])在 Python 3.10 alpha 早期版本中有效,现在在替换过程中会引发TypeError。bpo-43867:
multiprocessing的Server类现在明确捕获SystemExit并在这种情况下关闭客户端连接。当Server.serve_client()方法到达文件末尾 (EOF) 时会发生这种情况。bpo-40443: 移除未使用的导入:pyclbr 不再使用 copy,typing 不再使用 ast。由 Victor Stinner 提供补丁。
bpo-43820: 移除了传递给 dataclasses.make_dataclass() 的命名空间的一个不需要的副本。
bpo-43787: 向
bz2.BZ2File、gzip.GzipFile和lzma.LZMAFile添加了__iter__()方法。这使得迭代它们快约 2 倍。由 Inada Naoki 提供补丁。bpo-43680: 弃用 io.OpenWrapper 和 _pyio.OpenWrapper:改用 io.open 和 _pyio.open。在 Python 3.9 之前,_pyio.open 不是一个静态方法,而 builtins.open 被设置为 OpenWrapper,以避免在设置为类变量时成为绑定方法。_io.open 是一个内置函数,而 _pyio.open 是一个 Python 函数。在 Python 3.10 中,_pyio.open() 现在是一个静态方法,builtins.open() 现在是 io.open()。
bpo-43680: Python 的
_pyio.open()函数成为一个静态方法,以表现得像io.open()内置函数:当存储为类变量时不会成为绑定方法。这成为可能,因为静态方法在 Python 3.10 中现在是可调用的。此外,_pyio.OpenWrapper()变成了_pyio.open()的一个简单别名。由 Victor Stinner 提供补丁。bpo-41515: 修复了由于不显示在
sys.modules中的合成模块而在typing.get_type_hints()中引发的KeyError。bpo-43776: 当
subprocess.Popen的参数以字符串或pathlib.Path形式提供时,Popen 实例的 repr 现在显示正确的内容。bpo-42248: [枚举] 确保在
_missing__中引发的异常被释放bpo-43744: 修复了枚举成员名称与私有变量名称开头匹配的问题
bpo-43772: 修复了
TypeVar.__ror__的返回值。由 Jelle Zijlstra 提供补丁。bpo-43764: 为@dataclass装饰器添加match_args参数以允许抑制__match_args__的生成。
bpo-43799: OpenSSL 3.0.0:定义
OPENSSL_API_COMPAT为1.1.1以抑制弃用警告。Python需要OpenSSL 1.1.1的API。bpo-43478: Mock对象不能再作为其他Mock对象的specs使用。因此,已经mock的对象不能使用``autospec=True``来mock一个属性,也不能成为
create_autospec(...)调用的对象。这可能会在测试中暴露出bug,因为这些由Mock派生的Mock总是能通过某些测试(例如isinstance()),并且内置的断言函数(例如assert_called_once_with)将无条件通过。bpo-43794: 添加
ssl.OP_IGNORE_UNEXPECTED_EOF常量(OpenSSL 3.0.0)bpo-43785: 通过从BZ2File中移除RLock来提高
bz2.BZ2File的性能。这使得BZ2File在面对多个同时进行的读取或写入操作时线程不安全,就像gzip和lzma中的等效类一直以来那样。由Inada Naoki提供补丁。bpo-43789: OpenSSL 3.0.0:当第一次调用已经发出错误信号时,不再第二次调用密码回调函数。
bpo-43788:
ssl错误代码的头文件现在是特定于OpenSSL版本的。异常现在会显示正确的原因和库代码。``make_ssl_data.py``脚本已被重写,以使用OpenSSL带有错误代码的文本文件。bpo-25264:
os.path.realpath()现在接受一个仅限关键词的 strict 参数。当设置为``True``时,如果路径不存在或遇到符号链接循环,将引发OSError。bpo-43780: 在
importlib.metadata中,整合了importlib_metadata 3.10的更改:在分发发现期间添加基于mtime的缓存。标记使用entry_points()返回的字典结果为已弃用。gh-47383:
typing.ParamSpec的P.args和P.kwargs属性现在是新类typing.ParamSpecArgs和typing.ParamSpecKwargs的实例,这使得repr()更加有用。由 Jelle Zijlstra 提供补丁。bpo-43731: 为
logging.fileConfig()添加了一个encoding参数。bpo-43712: 为
fileinput.input()和fileinput.FileInput添加了encoding和errors参数。bpo-38659: 向
enum模块添加了一个simple_enum装饰器,用于将普通类转换为 Enum。添加了test_simple_enum来测试简单枚举与相应的普通枚举。更新了标准库模块以使用simple_enum。bpo-43764: 修复了某些
dataclasses中__match_args__生成可能失败的问题。bpo-43752: 修复了带有转换器的零大小 blob 的
sqlite3回归问题,其中返回了b""而不是None。这个回归是由 PR 24723 引入的。由 Erlend E. Aasland 提供补丁。bpo-43723: 以下
threading方法现在已被弃用,应替换为:currentThread=>threading.current_thread()activeCount=>threading.active_count()Condition.notifyAll=>threading.Condition.notify_all()Event.isSet=>threading.Event.is_set()Thread.setName=>threading.Thread.namethread.getName=>threading.Thread.nameThread.isDaemon=>threading.Thread.daemonThread.setDaemon=>threading.Thread.daemon
由 Jelle Zijlstra 提供补丁。
bpo-2135: 弃用了 importlib 和 zipimport 中的 find_module() 和 find_loader() 实现。
bpo-43534:
turtle.textinput()和turtle.numinput()现在创建了一个代表画布窗口工作的瞬态窗口。bpo-43532: 添加了为数据类指定仅关键字字段的功能。这些字段将成为生成的 __init__ 方法的仅关键字参数。
bpo-43522: 修复了
hostname_checks_common_name的问题。OpenSSL 不会将主机标志从 struct SSL_CTX 复制到 struct SSL。bpo-8978: 当
lzma/bz2不可用时,改进了tarfile.open()的错误消息。由 Anthony Sottile 提供补丁。bpo-42967: 在解析
str查询字符串时,允许bytesseparator参数在urllib.parse.parse_qs和urllib.parse.parse_qsl中使用。之前这会引发TypeError。bpo-43296: 改进了
sqlite3的错误处理:设置SQLITE_NOMEM的sqlite3_value_blob()错误现在会引发MemoryError。补丁由 Erlend E. Aasland 提供。bpo-43312: 新增函数
sysconfig.get_preferred_scheme()和sysconfig.get_default_scheme(),用于查询平台的首选“用户”、“家”和“前缀”(默认)方案名称。bpo-43265: 改进了
sqlite3.Connection.backup()的错误处理。现在对于不存在的目标数据库名称的错误消息是unknown database <database name>而不是SQL logic error。补丁由 Erlend E. Aasland 提供。bpo-41282:
distutils.command.install中的安装方案现在从sysconfig加载。bpo-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: 修复带有
InitVars 和replace()的数据类。由 Claudiu Popa 提供补丁。bpo-40849: 公开 X509_V_FLAG_PARTIAL_CHAIN ssl 标志
bpo-35114:
ssl.RAND_status()现在返回一个布尔值(如文档所述)而不是1或0。bpo-39906:
pathlib.Path.stat()和chmod()现在接受一个仅关键字参数 follow_symlinks 以与os模块中的相应函数保持一致。bpo-39899:
os.path.expanduser()现在拒绝猜测 Windows 主目录,如果当前用户主目录的基本名称与他们的用户名不匹配。pathlib.Path.expanduser()和home()现在在无法解析家目录时一致地抛出RuntimeError异常。之前在 Windows 上当"USERNAME"环境变量未设置时可能会抛出KeyError异常。bpo-36076: 为
ssl.get_server_certificate()添加了 SNI 支持。bpo-38490: 向 statistics 模块添加了协方差、皮尔逊相关系数和简单线性回归功能。由 Tymoteusz Wołodźko 提供补丁。
bpo-33731: 提供了一个 locale.localize() 函数,用于将规范化的数字字符串转换为区域格式。
bpo-32745: 修复了处理 ctypes 的
ctypes.c_wchar_p类型时的一个回归问题:嵌入的空字符会导致抛出ValueError。由 Zackery Spytz 提供补丁。
文档¶
bpo-43987: 添加“注释最佳实践”文档作为新的 HOWTO。
bpo-43977: 记录了新的
Py_TPFLAGS_MAPPING和Py_TPFLAGS_SEQUENCE类型标志。bpo-43959: 澄清了关于 PyContextVar C-API 的文档。
bpo-43938: 更新 dataclasses 文档以表达 FrozenInstanceError 派生自 AttributeError。
bpo-43778: 修复 Sphinx glossary_search 扩展:如果 _static/ 子目录不存在则创建它。
bpo-43755: 更新文档以反映自 Python 3.9 起,无括号的 lambda 表达式不能再作为理解和生成器表达式中
if子句的表达式部分。bpo-43739: 修复 Doc/extending/extending.rst 中的示例代码,声明并初始化 pmodule 变量为正确的类型。
测试¶
bpo-43961: 在 Windows 上修复 test_logging.test_namer_rotator_inheritance():使用
os.replace()而不是os.rename()。由 Victor Stinner 提供补丁。bpo-43842: 修复test_logging的SMTP测试中的竞态条件。不要在asyncore.loop()轮询文件描述符时,从另一个线程关闭文件描述符(套接字)。由Victor Stinner提供补丁。
bpo-43843:
test.libregrtest现在如果一个线程抛出异常但没有捕获它,则将测试标记为ENV_CHANGED(改变了执行环境)。它在threading.excepthook()上设置了一个钩子。使用``--fail-env-changed``选项将测试标记为失败。由Victor Stinner提供补丁。bpo-43811: 在GitHub Actions上测试多个OpenSSL版本。使用ccache加速测试。
bpo-43791: OpenSSL 3.0.0:禁用对旧协议TLS 1.0和1.1的测试。测试因TLSV1_ALERT_INTERNAL_ERROR而失败。
构建¶
Windows¶
bpo-35306: 向
os.startfile()函数添加额外的参数。bpo-43538: 避免在传递无效文件名时从
pathlib.Path.exists()引发错误。bpo-38822: 修复了
os.stat()在无法访问的目录(带有尾部斜杠)上失败的问题,而不是回退到父目录的元数据。这隐式影响了os.path.exists()和os.path.isdir()。bpo-26227: 修复了
socket.gethostbyaddr()和socket.gethostbyname_ex()中主机名的解码。bpo-40432: 更新了Windows上的pegen再生脚本,以查找并使用Python 3.8或更高版本。在此之前,pegen再生已经需要3.8或更高版本,但脚本可能使用了较低版本的Python。
bpo-43745: 实际上将Windows版本更新到OpenSSL 1.1.1k。早期的版本被错误标记,实际上再次包含了1.1.1i。
bpo-43652: 在Windows安装程序中更新Tcl和Tk到8.6.11版本。
bpo-43492: 升级Windows安装程序以使用SQLite 3.35.5。
bpo-30555: 修复在存在文件描述符重定向时的
WindowsConsoleIO错误。由Segev Finer提供补丁。
macOS¶
bpo-42119: 修复构建Python时对macOS SDK路径的检查。缩小搜索范围以匹配SDKs的内容,即仅包括
/System/Library、/System/IOSSupport``和 ``/usr中除/usr/local外的文件。之前,任何在/System下的内容都被假定为在SDK中,这在10.15+的新文件系统布局中会导致问题,因为用户文件系统可能看似挂载在/System下。/Library中的路径也被错误地视为SDK位置。bpo-43568: 放弃对MACOSX_DEPLOYMENT_TARGET < 10.3的支持
bpo-44009: 提供"python3.x-intel64"可执行文件,以便在Apple Silicon Mac上可靠地强制macOS universal2框架构建在Rosetta 2 Intel-64仿真下运行。这对于测试或当universal2 wheel尚不可用时非常有用。
bpo-43851: 在macOS上使用
SQLITE_OMIT_AUTOINIT构建SQLite。由Erlend E. Aasland提供补丁。bpo-43492: 更新macOS安装程序以使用SQLite 3.35.4。
bpo-42235:
Mac/BuildScript/build-installer.py现在在macOS 10.15或更高版本上构建时将使用"--enable-optimizations"和--with-lto。
IDLE¶
bpo-37903: 向shell侧边栏添加鼠标操作。左键点击和可选拖动选择一个或多个行,与编辑器行号侧边栏相同。选择后右键点击会弹出一个带有'copy with prompts'的上下文菜单。这将侧边栏的提示与所选文本的行压缩在一起。
bpo-43981: 修复test_sidebar和test_squeezer中的引用泄漏。由Terry Jan Reedy和Pablo Galindo提供补丁
bpo-37892: 使用空格而非制表符缩进IDLE Shell输入
bpo-43655: IDLE对话框窗口现在被macOS和X Window的窗口管理器识别为对话框。
bpo-37903: IDLE的shell现在在一个单独的侧边栏中显示提示。
C API¶
bpo-43916: 添加一个新的
Py_TPFLAGS_DISALLOW_INSTANTIATION类型标志,以禁止创建类型实例。由Victor Stinner提供补丁。bpo-43774: 移除现在未使用的
PYMALLOC_DEBUG宏。如果Python是以调试模式构建的(如果定义了Py_DEBUG宏),现在默认安装内存分配器的调试钩子。此外,它们现在可以在发布模式的Python构建中使用(例如:使用PYTHONMALLOC=debug环境变量)。bpo-43962: _PyInterpreterState_IDIncref() 现在调用 _PyInterpreterState_IDInitref() 并且总是增加 id_refcount。之前,调用 _xxsubinterpreters.get_current() 在 _xxsubinterpreters.InterpreterID 对象被释放时可能会创建一个 id_refcount 不一致。由Victor Stinner提供补丁。
bpo-28254: 添加新的C-API函数来控制垃圾收集器的状态:
PyGC_Enable()、PyGC_Disable()、PyGC_IsEnabled(),对应于gc模块中的函数。bpo-43908: 为不可变类型对象引入
Py_TPFLAGS_IMMUTABLETYPE标志,并修改PyType_Ready()为静态类型设置它。由Erlend E. Aasland提供补丁。bpo-43795:
PyMem_Calloc()现在在有限C API(Py_LIMITED_API)中可用。bpo-43868:
PyOS_ReadlineFunctionPointer()不再由有限C API头文件和Windows上的python3.dll导出。像任何接受FILE*的函数一样,它不是稳定ABI的一部分。bpo-43753: 添加
Py_Is(x, y)函数来测试 x 对象是否为 y 对象,等同于Python中的x is y。还添加了Py_IsNone()、Py_IsTrue()、Py_IsFalse()函数来分别测试对象是否为None单例、True单例或False单例。由Victor Stinner提供补丁。
Python 3.10.0 alpha 7¶
发布日期: 2021-04-05
安全性¶
bpo-42988: CVE 2021-3426: 移除
pydoc模块的getfile功能,该功能可能被滥用来读取磁盘上的任意文件(目录遍历漏洞)。此外,即使是 Python 模块的源代码也可能包含敏感数据,如密码。漏洞由 David Schwörer 报告。bpo-43285:
ftplib默认不再信任服务器响应 PASV 命令返回的 IP 地址值。这可以防止恶意 FTP 服务器利用响应探测客户端网络的 IPv4 地址和端口组合。需要之前易受攻击行为的代码可以在它们的
ftplib.FTP实例上设置trust_server_pasv_ipv4_address属性为True以重新启用它。bpo-43439: 为
gc.get_objects()、gc.get_referrers()和gc.get_referents()添加审计钩子。由 Pablo Galindo 提供补丁。
核心与内置函数¶
库¶
bpo-40645: 修复
_hashopenssl扩展中的引用泄漏。由 Pablo Galindo 提供补丁。
核心与内置函数¶
bpo-42134: 导入系统对 find_module() 的调用现在会发出 ImportWarning。
bpo-41064: 改进了在 f-strings 中无效使用双星号元素('**')的语法错误提示。由 Pablo Galindo 提供补丁。
bpo-43575: 通过使用 PEP 590
vectorcall调用约定,加速map()调用。由 Donghee Na 提供补丁。bpo-42137: 导入系统现在更倾向于使用
__spec__而非module_repr()来进行ModuleType.__repr__。bpo-43452: 对
_PyType_Lookup()进行了微优化,以提高缓存命中的常见情况下的查找性能。bpo-43555: 为无效的行继续字符报告
SyntaxError的列偏移。由 Pablo Galindo 提供补丁。bpo-43517: 修复了在使用
from pkg.mod import attr时循环导入的错误检测,这导致了非平凡的多线程代码中的假阳性。bpo-43497: 对带有元组常量的断言发出 SyntaxWarnings,这是在 python3.7 中引入的回归问题。
bpo-39316: 当属性位于对象的另一行时,跟踪现在具有正确的行号。改进了多行方法链的调试和分析。
bpo-35883: 如果命令行参数包含无效的 Unicode 字符,Python 不再在启动时以致命错误失败。
Py_DecodeLocale()函数现在会转义将被解码为 [U+0000; U+10ffff] 范围之外的 Unicode 字符的字节序列。bpo-43410: 修复了一个在从标准输入读取输入时发出语法错误导致解析器崩溃的错误。由 Pablo Galindo 提供补丁。
bpo-43406: 修复了一个可能的竞态条件,其中
PyErr_CheckSignals尝试执行非 Python 信号处理程序。bpo-42128: 向 struct sequence objects 添加了
__match_args__。由 Pablo Galindo 提供补丁。bpo-43390: CPython 现在在
PyOS_setsig中为 VM 的默认信号处理程序设置了SA_ONSTACK标志。这对于扩展模块或嵌入使用可能引入的其他进程内代码(如 Golang 的 cgo)更为友好,其中小线程栈是常态,并且使用了sigaltstack()来为信号处理程序提供支持。对于绝大多数不使用 sigaltstack 的进程来说,这是一个无操作更改。bpo-43287: 通过使用 PEP 590
vectorcall调用约定,加快了对filter()的调用。由 Donghee Na 提供补丁。bpo-37448:添加基于基数树的内存映射来跟踪使用中的obmalloc竞技场。用于替换旧的address_in_range()实现。基数树方法使得可以轻松将池大小增加到超过操作系统页面大小。增加池和竞技场大小使得obmalloc能够从其超快速路径处理显著更高比例的请求。
它还有消除之前address_in_range()的内存不卫生行为的优势。旧的address_in_range()被标记为_Py_NO_SANITIZE_ADDRESS、_Py_NO_SANITIZE_THREAD和_Py_NO_SANITIZE_MEMORY注释。这些注释不再需要。
要禁用基数树映射,设置如下预处理器标志:
-DWITH_PYMALLOC_RADIX_TREE=0。合著者:Tim Peters <tim.peters@gmail.com>
bpo-29988:仅在从调用返回或循环的后边缘时处理异步异常和请求放弃GIL。确保在with语句中总是调用
__exit__(),即使对于中断也是如此。
库¶
bpo-43720:记录imp、pkgutil和importlib.util中各种标准库的弃用,计划在Python 3.12中移除。
bpo-43433:
xmlrpc.client.ServerProxy不再忽略服务器URL中的查询和片段。bpo-31956:
array.array的index()方法现在有可选的 start*和*stop 形参。bpo-40066:Enum:调整
repr()仅显示枚举和成员名称(不显示值,也不显示尖括号),``str()``仅显示成员名称。更新并改进文档以匹配。bpo-42136:弃用importlib中找到的所有module_repr()方法,因为它们的使用将在Python 3.12中逐步淘汰。
bpo-35930:在“future”实例中引发的异常将创建引用循环。
bpo-41369:完成更新vendored libmpdec到版本2.5.1。由Stefan Krah提供补丁。
bpo-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_resources3.2 中引入的,包括通过 5.0.3 的附带更改。bpo-43295:
datetime.datetime.strptime()现在在匹配'z'和%z格式说明符时引发ValueError而不是IndexError。bpo-43125: 如果 base64mime.body_encode 接收到空字节,返回空字符串。
bpo-43084:
curses.window.enclose()现在返回True或False(如文档所述) 而不是1或0。bpo-42994: 为 opus、AAC、3gpp 和 3gpp2 添加 MIME 类型。
bpo-14678: 向 zipimport.zipimporter 类添加 invalidate_caches() 方法以支持 importlib.invalidate_caches()。由 Desmond Cheong 提供补丁。
bpo-42782: 在
shutil.move()中快速失败,以避免在失败时创建目标目录。bpo-40066: Enum 的
repr()和str()已更改:repr()现在是 EnumClass.MemberName,而str()是 MemberName。此外,标准库中 Enum 的内容可作为模块属性使用,例如RegexFlag.IGNORECASE,其repr()为 module.name,例如re.IGNORECASE。bpo-26053: 修复了
pdb交互式运行命令回显 shell 命令行参数的错误,即使这些参数已在 pdb 提示符下被覆盖。bpo-40701: 当
tempfile.tempdir全局变量设置为 bytes 类型的值时,现在会一致处理。以前在这种情况下,如果目录不存在,一些 tempfile API 可能会引发异常。同时确保tempfile.gettempdir()和tempfile.gettempdirb()函数 总是 分别返回str和bytes。bpo-39342: 将
X509_V_FLAG_ALLOW_PROXY_CERTS暴露为VERIFY_ALLOW_PROXY_CERTS,以允许代理证书验证,如 https://docs.openssl.org/1.1.1/man7/proxy-certificates/ 所述。bpo-31861: 添加 builtins.aiter 和 builtins.anext。由 Joshua Bronson (@jab)、Daniel Pope (@lordmauve) 和 Justin Wang (@justin39) 提供补丁。
文档¶
bpo-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: 使
xml.etree.ElementTree的纯Python实现与C实现(_elementree)在默认属性值方面行为一致(通过不设置specified_attributes=1)。bpo-29753: 在ctypes中,现在正确计算了打包位字段,并且打包位字段的第一项现在正确地缩小了。
文档¶
测试¶
bpo-43288: 修复了test_importlib,如果文件系统不支持Unicode文件测试,则正确跳过。
构建¶
bpo-43174: Windows构建现在使用
/utf-8编译器选项。bpo-43103: 添加了一个新的配置选项
--without-static-libpython,用于不构建``libpythonMAJOR.MINOR.a``静态库且不安装python.o对象文件。bpo-13501: 配置脚本现在可以使用命令行选项
--with-readline=editline来使用 libedit 代替 readline。bpo-42603: 使配置脚本使用pkg-config来检测Tcl/Tk头文件和库的位置,用于构建tkinter。
在macOS上,由pkg-config提供的Tcl/Tk配置将优先于安装在
/{System/,}Library/Frameworks中的Tcl/Tk框架。如果两者都存在且后者优先,则需要明确设置适当的--with-tcltk-*配置选项。bpo-39448: 添加了“regen-frozen”makefile目标,用于重新生成冻结的
__hello__模块的代码。
Windows¶
bpo-43155:
PyCMethod_New()现在存在于python3.lib中。
macOS¶
bpo-41837: 更新macOS安装程序构建以使用OpenSSL 1.1.1j。
IDLE¶
bpo-43283: 文档说明了为什么打印到IDLE的Shell通常比打印到系统终端慢,以及通过打印前预格式化单个字符串可以使其更快。
C API¶
bpo-43278: 始终将编译器和系统信息放在REPL欢迎消息的第一行。
bpo-43270: 移除了私有的
_PyErr_OCCURRED()宏:改用公共的PyErr_Occurred()函数。bpo-35134: 将odictobject.h、parser_interface.h、picklebufobject.h、pydebug.h和pyfpe.h移动到cpython/目录中。它们不应被直接包含,因为这些文件已经被Python.h包含:参见 包含文件。
bpo-35134: 将pyarena.h、pyctype.h和pytime.h移动到cpython/目录中。它们不应被直接包含,因为这些文件已经被Python.h包含:参见 包含文件。
bpo-40170:
PyExceptionClass_Name()现在总是被声明为一个函数,以隐藏实现细节。该宏直接访问了PyTypeObject.tp_name。由Erlend E. Aasland提供补丁。bpo-43239: 当使用
-fvisibility=hidden编译时,PyCFunction_New()函数现在被导出到ABI中。bpo-40170:
PyIter_Check()现在总是被声明为一个函数,以隐藏实现细节。该宏直接访问了PyTypeObject.tp_iternext。由Erlend E. Aasland提供补丁。bpo-40170: 将
PyDescr_IsData()宏转换为函数以隐藏实现细节:该宏直接访问了PyTypeObject.tp_descr_set。由Erlend E. Aasland提供补丁。bpo-43181: 将
PyObject_TypeCheck()宏转换为静态内联函数。由Erlend E. Aasland提供补丁。
Python 3.10.0 alpha 5¶
发布日期: 2021-02-02
安全性¶
bpo-42938: 在计算
ctypes.c_double和ctypes.c_longdouble值的repr时避免使用静态缓冲区。
核心与内置函数¶
bpo-42990: 重构
PyEval_系列函数。bpo-38631: 将编译器中的
Py_FatalError()调用替换为常规的SystemError异常。由Victor Stinner提供补丁。bpo-42997: 为块前缺少的":"改进错误信息。由Pablo Galindo提供补丁。
bpo-43017: 在解析器中使用未加括号的元组时改善了错误信息。由Pablo Galindo提供补丁。
bpo-42986: 修复了在报告包含换行符的f字符串中的语法错误时解析器崩溃的问题。由Pablo Galindo提供补丁。
bpo-40176: 现在,对于未终止的字符串字面量的语法错误会指向字符串的开始,而不是报告EOF/EOL。
bpo-42927:
LOAD_ATTR的内联缓存现在也优化了对通过__slots__定义的属性的访问。这使得读取此类属性的速度提高了30%。bpo-42864: 当括号未关闭时,改善了解析器中的错误信息。由Pablo Galindo提供补丁。
bpo-42924: 修复了
bytearray重复错误地从缓冲区开始复制数据的问题,即使数据在缓冲区中偏移(例如,在将bytearray开始的切片重新分配给较短的字节字符串后)。bpo-42882: 修复了
_PyUnicode_FromId()函数(_Py_IDENTIFIER(var) API)在多次调用Py_Initialize()/Py_Finalize()时的问题:保留了``_PyRuntime.unicode_ids.next_index``值。bpo-42827: 修复了在某些多行表达式中处理
SyntaxError的错误行时崩溃的问题。bpo-42823: 即使frame.f_trace被设置为True,frame.f_lineno也是正确的
库¶
bpo-37324: 从
collections模块中移除了对 容器抽象基类 的废弃别名。
核心与内置函数¶
库¶
bpo-43077: 将捆绑的pip更新到21.0.1,setuptools更新到52.0.0。
bpo-41282: 在文档中弃用
distutils并在导入时添加警告。bpo-42323: 修复 AIX 上
math.nextafter()对于 NaN 的处理。bpo-42955: 添加
sys.stdlib_module_names,包含标准库模块名称的列表。由 Victor Stinner 提交补丁。bpo-42944: 修复
random.Random.sample当counts参数不为None时的问题。bpo-42934: 在
TestResult中使用TracebackException的新compact参数,以减少回溯格式化消耗的时间和内存。bpo-42931: 将
randbytes()添加到random.__all__中。bpo-38250: [Enum] 由单个位组成的标志现在被认为是规范的,并且将是唯一从 Flag 类或 Flag 成员的列表和迭代中返回的标志。多位标志被认为是别名;它们将从查找和操作中返回,这些操作导致了它们的值。Flag 和 Flag 成员的迭代都是按照定义顺序进行的。
bpo-42877: 向
traceback.TracebackException的构造函数添加了compact参数,以减少仅需要调用TracebackException.format()和TracebackException.format_exception_only()的使用情况下的时间和内存消耗。bpo-42923:
Py_FatalError()函数和faulthandler模块现在会在致命错误时转储扩展模块列表。bpo-42848: 从
TracebackException中移除了递归,以允许其处理长的异常链。bpo-42901: [Enum] 将成员创建从
EnumMeta.__new__移动到_proto_member.__set_name__,允许成员在__init_subclass__中被创建并可见。bpo-42780: 修复 Linux 上 O_PATH 文件描述符的 os.set_inheritable()。
bpo-42866: 修复 CJK 编解码器的
getcodec()函数中的一个引用泄漏。由 Victor Stinner 提交补丁。bpo-42846: 将 6 个 CJK 编解码器扩展模块(_codecs_cn, _codecs_hk, _codecs_iso2022, _codecs_jp, _codecs_kr 和 _codecs_tw)转换为多阶段初始化 API (PEP 489)。由 Victor Stinner 提交补丁。
bpo-42851: 移除对枚举成员的
__init_subclass__支持bpo-42834: 使
_json模块的内部缓存与子解释器兼容bpo-41748: 修复 HTMLParser 解析包含逗号和空格的元素属性的规则。补丁由 Karl Dubost 提供
bpo-40810: 要求 SQLite 3.7.15 或更新版本。由 Erlend E. Aasland 提供补丁
bpo-1635741: 将 _multibytecodec 扩展模块(CJK 编解码器)转换为多阶段初始化(PEP 489)。由 Erlend E. Aasland 提供补丁
bpo-42802: Python 3.8 中弃用的 distutils
bdist_wininst命令已被移除。现在推荐使用 distutilsbdist_wheel命令在 Windows 上分发二进制包bpo-24464: 未记录的 built-in 函数
sqlite3.enable_shared_cache现已弃用,计划在 Python 3.12 中移除。SQLite3 文档强烈反对使用该函数。由 Erlend E. Aasland 提供补丁bpo-42384: 使 pdb 填充 sys.path[0] 的方式与常规 python 执行完全相同
bpo-42383: 修复 pdb:如果调试目标使用相对路径指定且当前目录发生变化,pdb 将无法重新启动调试目标的问题
bpo-42005: 修复
cProfile和profile的 CLI 以捕获BrokenPipeErrorbpo-41604: 当 set_panel_userptr 失败时,不减少先前 user_ptr 的引用计数
bpo-41149: 允许执行传递给
Threading.thread作为目标的可调用对象,即使其布尔值为False。由 Barney Stratford 提供补丁bpo-38307: 为 pyclbr 函数返回的树中出现的类和函数对象添加 'end_lineno' 属性。此属性与现有的 'lineno' 属性共同定义类和 def 语句的范围。由 Aviral Srivastava 提供补丁
bpo-33289: 修正对
tkinter.colorchooser的调用,使其返回整型RGB三元组而非浮点数。由 Cheryl Sabella 提供补丁。
文档¶
测试¶
构建¶
bpo-43031: 将
--timeout=$(TESTTIMEOUT)选项传递给默认配置文件任务./python -m test --pgo命令。bpo-36143:
make regen-all现在也会运行regen-keyword。由 Victor Stinner 提供补丁。bpo-42874: 在配置脚本的 tzpath 验证部分移除了 grep -q 和 -E 标志,以更好地适应某些平台(特别是 Solaris 10)的用户。
bpo-31904: 为 VxWorks 在 add_cross_compiling_paths() 中添加库搜索路径,由 wr-cc 提供。
bpo-42856: 向
./configure脚本添加--with-wheel-pkg-dir=PATH选项。如果指定,ensurepip模块会在此目录中查找setuptools和pip轮包:如果两者都存在,则使用这些轮包而非 ensurepip 捆绑的轮包。某些 Linux 发行版的打包策略建议不要绑定依赖关系。比如 Fedora 在
/usr/share/python-wheels/目录下安装 wheel 包,而不安装ensurepip._bundled包。
Windows¶
macOS¶
bpo-42504: 确保 sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') 的值始终为字符串,即使在值可解析为整数时也是如此。
IDLE¶
bpo-43008: 使 IDLE 在正常的双进程模式下调用
sys.excepthook()。由 Ken Hilton 提供补丁。bpo-33065: 修复调试带有 __repr__ 方法的用户类时的问题。
bpo-23544: 当用户代码正在运行或调试器处于活动状态时,禁用 Debug=>Stack Viewer,以防止挂起或崩溃。由 Zackery Spytz 提供补丁。
bpo-32631: 完成zzdummy示例扩展模块:使菜单条目正常工作;添加文档字符串和覆盖率为100%的测试。
C API¶
bpo-42979: 当Python在调试模式下构建(带有C断言)时,调用类型槽如
sq_length``(Python中的 ``__len__())现在如果槽成功但设置了异常,或失败但未设置异常,会以致命错误失败。错误消息包含槽、类型名称和当前异常(如果设置了异常)。由Victor Stinner提供补丁。bpo-43030: 修复了在带有符号
wchar_t的平台上的Py_UNICODE_ISSPACE()中的编译器警告。
Python 3.10.0 alpha 4¶
发布日期: 2021-01-04
核心与内置函数¶
bpo-42814: 修复
Objects/genericaliasobject.c中的未定义行为。bpo-42806: 修复被括号包围的f-字符串
ast节点和跨越多行节点的列偏移。由Pablo Galindo提供补丁。bpo-40631: 修复回归,其中单个括号包围的星号表达式是有效的赋值目标。
bpo-27794: 改进对属性对象写入/删除失败的错误消息。在可能的情况下,现在会显示属性名称。由Yurii Karabas提供补丁。
bpo-42745: 使类型属性查找缓存为每个解释器。由Victor Stinner提供补丁。
bpo-42246: 当会破坏PEP 626时,不会消除跳转到跳转。
bpo-42246: 确保在引发或重新引发异常时,帧的
f_lasti和f_lineno属性设置正确。PEP 626所需。bpo-32381: 现在在传递给
-c命令行选项的命令中忽略编码cookie(例如:# coding: latin1)。由Victor Stinner提供补丁。bpo-30858: 改进包含赋值的表达式中的错误位置。由Pablo Galindo和Lysandros Nikolaou提供补丁。
bpo-42615: 删除由于删除不可达字节码块而变得冗余的跳转命令。
库¶
核心与内置函数¶
bpo-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-42257: 在 platform.libc_ver() 中处理变量可执行文件中的空字符串
bpo-42772: randrange() 现在在指定步长而没有停止参数时引发 TypeError。以前,它会默默地忽略步长参数。
bpo-42759: 修复了
tkinter.Variable和tkinter.font.Font的相等比较问题。现在,属于不同 Tcl 解释器的对象即使名称相同也会被视为不同。bpo-42756: 当未明确提供超时时间时,配置 LMTP Unix 域套接字使用套接字全局默认超时。
bpo-23328: 允许在 _PROXY 环境变量的用户名和密码字段中使用 / 字符。
bpo-42740:
typing.get_args()和typing.get_origin()现在支持 PEP 604 联合类型和 PEP 612 对Callable的补充。bpo-42655:
subprocess的 extra_groups 现在正确地传递到 setgroups() 系统调用中。bpo-42727:
EnumMeta.__prepare__现在接受**kwds以正确支持__init_subclass__。bpo-38308: 向 statistics.harmonic_mean() 添加了可选的 weights 参数。
bpo-42721: 当创建简单查询对话框 (
tkinter.simpledialog)、消息框 (tkinter.messagebox) 或颜色选择对话框 (tkinter.colorchooser) 时,如果没有提供 master 和 parent 参数,且默认根窗口尚未创建,并且未调用NoDefaultRoot(),将自动创建一个新的临时隐藏根窗口。它不会被设置为默认根窗口,并在对话框窗口关闭后立即销毁。这将有助于在不需要其他 GUI 的程序中使用这些简单对话框窗口。bpo-35728: 向
tkinter.font.nametofont()添加了一个 root 参数。bpo-42685: 改进了 Tkinter 中简单查询窗口(如
tkinter.simpledialog.askinteger())的放置位置。如果指定了父窗口并显示,则现在将窗口居中于父窗口的中心,否则居中于屏幕中心。bpo-9694: Argparse 帮助不再使用令人困惑的短语“可选参数”,而是使用“选项”。
bpo-1635741: 将
_thread扩展模块移植到多阶段初始化 API (PEP 489),并将其静态类型转换为堆类型。bpo-37961: 修复
tracemalloc.Traceback.__repr__()中的崩溃问题(在 Python 3.9 中回归)。bpo-42630: 需要默认根窗口的
tkinter函数和构造函数现在会引发带有描述性消息的RuntimeError,而不是晦涩的AttributeError或NameError,如果它尚未创建或无法自动创建。bpo-42639:
atexit._run_exitfuncs()现在使用sys.unraisablehook记录回调异常,而不是直接将它们记录到sys.stderr并引发最后一个异常。bpo-42644:
logging.disable现在会验证其参数的类型和值。它还接受表示级别的字符串(如logging.setLevel所做的那样),而不仅仅是数值。bpo-42639: 在 Python 退出时,如果使用
atexit.register()注册的回调失败,现在会记录其异常。以前,只有一些异常被记录,最后一个异常总是被默默忽略。bpo-36541: 修复了 lib2to3.pgen2 能够解析 PEP-570 仅位置参数语法的问题。
bpo-42382: 在
importlib.metadata中: -EntryPoint对象现在在从Distribution构造时公开一个.dist对象引用Distribution。 - 添加了对包发现规则下的包发现的支持。 - 由metadata()返回的对象现在有一个正式定义的协议,称为PackageMetadata,并声明支持.get_all()方法。 - 与 importlib_metadata 3.3 同步。bpo-41877: 添加了对拼写错误的 autospect、auto_spec 和 set_spec 作为参数传递给 patch、patch.object 和 create_autospec 的检查。
bpo-39717: [tarfile] 更新嵌套异常抛出,使用
from None或from ebpo-41877: 对于模拟对象上疑似断言拼写错误的 AttributeError,现在会指出原因是拼写错误的断言,并说明如果拼写实际上是预期的属性名时应该怎么做。unittest.mock 文档也已更新,以反映当前识别出的拼写错误集合。
bpo-41559: 实现了 PEP 612:将
ParamSpec和Concatenate添加到typing模块。由 Ken Jin 提供补丁。bpo-42385: StrEnum:修复 _generate_next_value_ 方法以返回字符串
bpo-31904: 为 VxWorks 定义 THREAD_STACK_SIZE。
bpo-34750: [Enum] 现在支持
_EnumDict.update()方法。bpo-42517: Enum:私有名称不会成为成员/不会生成错误——它们保持为普通属性
bpo-42678:
Enum:在成员被添加后调用__init_subclass__方法bpo-28964:
ast.literal_eval()为格式错误的节点在错误消息中添加行号信息(如果可用)。bpo-42470:
random.sample()不再对同时也是集合的序列发出警告。bpo-31904:
posixpath.expanduser()如果用户主目录在 VxWorks 上为 None,则返回输入 path 不变。bpo-42388: 修复 subprocess.check_output(..., input=None) 当 text=True 时的行为,使其与文档和 universal_newlines=True 的行为一致。
bpo-34463: 修复了
traceback和解释器在格式化未设置 lineno 的 SyntaxError 时的不一致(traceback被更改为匹配解释器)。bpo-42393: 在
socket.ntohs()和socket.htons()中抛出OverflowError而不是静默截断。静默截断在 Python 3.7 中已被弃用。由 Erlend E. Aasland 提供补丁bpo-42222: 统一
random.randrange()的参数处理以匹配range()。randrange()中的整数测试和转换现在使用operator.index()。randrange()函数的非整数参数已被弃用。ValueError已被弃用,改为使用TypeError。现在它比以前运行得更快一些。
(由 Raymond Hettinger 和 Serhiy Storchaka 贡献。)
bpo-42163: 恢复
uname_result在 deepcopy 和 _replace 时的兼容性。bpo-42090:
zipfile.Path.joinpath现在接受任意参数,与pathlib.Path.joinpath相同。bpo-1635741: 将 _csv 模块移植到多阶段初始化 API (PEP 489)。
bpo-42059: 使用替代调用样式语法创建的
typing.TypedDict类型现在在设置其__required_keys__和__optional_keys__类属性时正确尊重total关键字参数。bpo-41960: 向
inspect.signature()和inspect.Signature.from_callable()添加globalns和localns参数。bpo-41907: 修复
IntFlag的format()行为bpo-41891: 确保 asyncio.wait_for 等待任务完成
bpo-24792: 修复了
zipimporter有时报告导入错误错误原因的 bug。bpo-31904: 为没有主目录的 VxWorks RTOS 修复 site 和 sysconfig 模块。
bpo-41462: 为 VxWorks RTOS 添加
os.set_blocking()支持。bpo-40219: 降低
tkinter.ttk.LabeledScale虚拟小部件以防止隐藏部分内容标签。bpo-37193: 修复了 Python 3.7 中引入的
socketserver.ThreadingMixIn内存泄漏。bpo-39068: 修复
base64中a85encode()和b85encode()的初始化竞争条件。由 Brandon Stansbury 提供补丁。
文档¶
bpo-17140: 为
multiprocessing.pool.ThreadPool类添加文档。bpo-34398: 在文档搜索结果中突出显示词汇表中的列表。由 Ammar Askar 提供补丁。
测试¶
bpo-42794: 更新 test_nntplib 以使用 news.aioe.org 的官方组名进行测试。由 Donghee Na 提供补丁。
bpo-31904: 在 VxWorks 上跳过一些 asyncio 测试。
bpo-42641: 增强
test_select.test_select():现在只需500毫秒而非10秒。使用Python而非shell使测试更具可移植性。bpo-31904: 在VxWorks上跳过 _test_all_chown_common() 中的一些测试。
bpo-42199: 修复字节码助手 assertNotInBytecode。
bpo-41443: 在 test_posix.py 中添加更多属性检查。
bpo-31904: 在VxWorks上禁用 os.popen 和受影响的测试。
bpo-41439: 将 test_ssl 和 test_uuid 移植到VxWorks RTOS。
构建¶
bpo-42692: 修复旧编译器上的 __builtin_available 检查。由Joshua Root提供补丁。
bpo-27640: 向
configure脚本添加--disable-test-modules选项:不构建也不安装测试模块。由Xavier de Gaye、Thomas Petazzoni和Peixing Xin提供补丁。bpo-42604: 现在所有平台都使用基于SOABI的"EXT_SUFFIX"构建变量值(例如在freeBSD中,"EXT_SUFFIX"现在是".cpython-310d.so"而非".so")。之前只有Linux、Mac和VxWorks使用的"EXT_SUFFIX"值包含"SOABI"。
bpo-42598: 修复configure中的隐式函数声明,这可能导致错误的配置检查。由Joshua Root提供补丁。
bpo-31904: 为VxWorks启用 libpython3.so。
bpo-29076: 向macOS安装程序添加fish shell支持。
macOS¶
工具/示例¶
C API¶
bpo-42591: 导出
Py_FrozenMain()函数:修复Python 3.9.0的回归问题。Python 3.9使用-fvisibility=hidden并且该函数未被显式导出,因此未被导出。bpo-32381: 移除不再需要的私有函数
_Py_fopen()。改用_Py_wfopen()或_Py_fopen_obj()。由 Victor Stinner 提交补丁。bpo-1635741: 将
resource扩展模块移植到模块状态bpo-42111: 更新
xxlimited模块,使其成为如何使用有限 C API 的更好示例。bpo-40052: 修复函数
PyVectorcall_Function()中的对齐构建警告/错误。补丁由 Andreas Schneider、Antoine Pitrou 和 Petr Viktorin 提交。
Python 3.10.0 alpha 3¶
发布日期: 2020-12-07
安全性¶
bpo-40791: 在
hmac.compare_digest中为累加器变量添加volatile,减少破坏恒定时间优化的可能性。
核心与内置函数¶
bpo-42576:
types.GenericAlias现在会在尝试使用关键字参数初始化时引发TypeError。之前,如果解释器编译时包含调试符号,这将导致解释器崩溃。这不影响为发布编译的解释器。补丁由 Ken Jin 提交。bpo-42536: 现在,几个内置和标准库类型确保它们的内部结果元组总是被 垃圾收集器 跟踪:
之前,它们可能会被前一次垃圾回收取消追踪。 由 Brandt Bucher 提供补丁。
bpo-42500: 改进递归限制附近的异常处理。将一些致命错误转换为 RecursionErrors。
bpo-42246: PEP 626: 在返回后,帧的 f_lineno 属性总是最后执行的行。
bpo-42435: 当指定选项
-b时,加快 bytes 对象与非 bytes 对象的比较速度。加快 bytearray 对象与非缓冲对象的比较速度。
库¶
bpo-1635741: 将
_warnings扩展模块移植到多阶段初始化 API (PEP 489)。补丁由 Victor Stinner 提交。
核心与内置函数¶
bpo-41686: 在 Windows 上,即使 Python 配置为不安装信号处理程序(如果
PyConfig.install_signal_handlers等于 0,或Py_InitializeEx(0)),现在也会创建SIGINT事件_PyOS_SigintEvent()。bpo-42381: 根据PEP 572,允许在集合字面量和集合推导式中使用赋值表达式。由Pablo Galindo提供补丁。
bpo-42202: 将函数参数注解的内部表示更改为字符串元组。由Yurii Karabas提供补丁。
bpo-42374: 修复了新解析器引入的一个回归问题,即在生成器表达式中不允许使用未加括号的海象运算符。
bpo-42316: 允许在下标索引中使用未加括号的海象运算符。
bpo-42349: 确保编译器前端产生格式良好的控制流图。在编译器后端更加积极,因为现在这样做是安全的。
bpo-42296: 在Windows上,修复了信号处理中的一个回归问题,该问题阻止了使用CTRL+C中断程序。信号处理程序可以在与Python线程不同的线程中运行,在这种情况下,判断线程是否可以处理信号的测试是错误的。
bpo-42332:
types.GenericAlias对象现在可以作为弱引用的目标。bpo-42282: 优化作为命名表达式一部分出现的常量子表达式(之前AST优化器没有深入到命名表达式中)。由Nick Coghlan提供补丁。
bpo-42266: 修复了LOAD_ATTR操作码缓存的一个错误,该错误没有尊重将一个类级别属性猴子补丁为描述符。由Pablo Galindo提供补丁。
库¶
核心与内置函数¶
bpo-42246: 提高了行跟踪事件和Frame对象的f_lineno属性的准确性。详见PEP 626。
库¶
核心与内置函数¶
bpo-42233: 允许
GenericAlias对象使用 union type expressions。这使得像list[int] | dict[float, str]这样的表达式成为可能,而之前会抛出TypeError。这也修复了联合类型表达式未去重GenericAlias对象的问题。(由Ken Jin在 bpo-42233 中贡献。)bpo-26131: 当导入系统回退到使用
load_module()时,会触发ImportWarning。
库¶
bpo-5054: CGIHTTPRequestHandler.run_cgi() 中 HTTP_ACCEPT 解析不当。用通用的 get_all 方法替换特殊用途的 getallmatchingheaders,并添加相关测试。
原始由 Martin Panter 提供补丁,由 Senthil Kumaran 修改。
bpo-42562: 修复了当 dis 无法解析没有行号的函数时的问题。由 Yurii Karabas 提供补丁。
bpo-17735:
inspect.findsource()现在在代码对象的co_lineno大于文件长度时,会引发OSError而不是IndexError。例如,当文件在导入后被编辑时可能会发生此情况。PR 由 Irit Katriel 提供。bpo-42116: 修复了
inspect.getsource()处理尾部注释的问题。bpo-42532: 当向 Mock 传递
spec_arg参数时,移除了对__bool__的意外调用。bpo-38200: 添加了 itertools.pairwise()
bpo-41818: 修复了 test_master_read(),使其在所有平台上都能成功,这些平台在从主设备读取时要么引发 OSError,要么返回 b""。
bpo-42487: ChainMap.__iter__ 不再调用底层映射的 __getitem__
bpo-42482:
TracebackException不再持有对异常回溯对象的引用。因此,对于等效但不相等的异常,TracebackException 的实例现在比较为相等。bpo-41818: 使 test_openpty() 避免由于行数和/或列数 == 0 而导致的意外成功。
bpo-42392: 从
asyncio.subprocess和asyncio.tasks函数中移除 loop 参数。补丁由 Yurii Karabas 提供。bpo-42392: 从
asyncio.open_connection和asyncio.start_server函数中移除 loop 参数。由 Yurii Karabas 提供补丁。bpo-28468: 添加了
platform.freedesktop_os_release()函数以解析 freedesktop.org 的os-release文件。bpo-42299: 移除了在Python 3.4中已弃用的
formatter模块。该模块有些过时,使用较少,且未经测试。原计划在Python 3.6中移除,但此类移除被推迟到Python 2.7 EOL之后。现有用户应将其使用的任何类复制到自己的代码中。由Donghee Na和Terry J. Reedy提供补丁。bpo-26131: 弃用zipimport.zipimporter.load_module(),推荐使用exec_module()。
bpo-41818: 更新了pty库的测试。test_basic()已改为test_openpty();此外还检查了slave termios和slave winsize是否被pty.openpty()正确设置。为了增加对FreeBSD、NetBSD、OpenBSD和Darwin的支持,还增加了test_master_read(),演示了pty.spawn()不应依赖于OSError从其复制循环中退出。
bpo-42392: 从所有
asyncio.locks``和 ``asyncio.Queue类的__init__中移除loop参数。由Yurii Karabas提供补丁。bpo-15450: 使
filecmp.dircmp尊重子类化。现在filecmp.dircmp.subdirs在子类化dircmp时的行为符合预期。bpo-42413: 异常
socket.timeout现在是TimeoutError的别名。bpo-31904: 在VxWorks上支持signal模块。
bpo-42406: 我们修复了
pickle.whichmodule中的一个问题,其中导入 ``multiprocessing``可能会改变pickle如何识别对象属于哪个模块,潜在地破坏这些对象的unpickling。bpo-42403: 简化
importlib外部引导代码:importlib._bootstrap_external现在使用常规导入来导入内置模块。当它被导入时,内置的__import__()函数已经完全可以工作,因此可以用来导入如sys这样的内置模块。由Victor Stinner提供补丁。bpo-1635741: 将_sre模块类型转换为堆类型(PEP 384)。由Erlend E. Aasland提供补丁。
bpo-42375: subprocess 模块更新以支持 DragonFlyBSD。
bpo-41713: 将
_signal扩展模块移植到多阶段初始化 API (PEP 489)。由 Victor Stinner 和 Mohamed Koubaa 提供补丁。bpo-37205:
time.time()、time.perf_counter()和time.monotonic()函数不再因 Python 致命错误而失败,而是在失败时引发常规的 Python 异常。bpo-42328: 修复了
tkinter.ttk.Style.map()。该函数现在接受默认状态的表示为空序列(由Style.map()返回)。结果的结构现在在所有平台上都是相同的,不依赖于wantobjects的值。bpo-42345: 修复了
typing.Literal参数处理中的各种问题(扁平化、去重、使用类型缓存键)。由 Yurii Karabas 提供补丁。bpo-37205: Windows 上的
time.perf_counter()和 macOS 上的time.monotonic()现在是系统范围的。以前,它们使用启动时计算的偏移量来减少由浮点类型引起的精度损失。使用 Python 3.7 中添加的time.perf_counter_ns()和time.monotonic_ns()来避免这种精度损失。bpo-42350: 修复了
threading.Thread类在 fork 时的问题:如果线程已经停止(例如:在 Python 退出时调用 fork),则不执行任何操作。以前,在子进程中会记录一个错误。bpo-42333: 将 _ssl 扩展模块移植到堆类型。
bpo-42014: 现在,当
os.open失败时,shutil.rmtree的onerror回调会接收到正确的函数。bpo-42237: 在 illumos 上修复了
os.sendfile()。bpo-42308: 添加
threading.__excepthook__以允许在threading.excepthook()被设置为损坏或不同的值时检索其原始值。由 Mario Corchero 提供补丁。bpo-42131: 在 zipimport.zipimporter 上实现 PEP 451/规范方法:find_spec()、create_module() 和 exec_module()。
这也允许了对find_loader()、find_module()和load_module()的文档化弃用。
bpo-41877:非不安全的Mock对象现在如果访问带有前缀asert、aseert或assrt的属性,将引发AttributeError,此外,对于前缀assert或assret,这种情况已经发生。
bpo-42264:``sqlite3.OptimizedUnicode``自Python 3.3起已无文档且过时,当时它被设为
str的别名。现在它已被弃用,计划在Python 3.12中移除。bpo-42251:添加了
threading.gettrace()和threading.getprofile()以分别获取由threading.settrace()和threading.setprofile()设置的函数。由Mario Corchero提供的补丁。bpo-42249:修复了写入大于4 GiB的二进制Plist文件的问题。
bpo-42236:在Unix上,如果启用了 Python UTF-8模式,
os.device_encoding()函数现在返回'UTF-8'而不是设备编码。bpo-41754:webbrowser:调用
xdg-settings时忽略*NotADirectoryError*。bpo-42183:修复了asyncio任务或Future的repr()导致的堆栈溢出错误。
在 Task 或 Future 递归返回自身的情形下会导致栈溢出。
bpo-42140:改进asyncio.wait函数,使其仅创建一次futures集合。
bpo-42133:更新标准库中的各个模块,以便在模块上未定义
__loader__时回退到``__spec__.loader``。bpo-26131:现在在
importlib中找到的load_module()方法会触发``DeprecationWarning``。bpo-39825:Windows:将
sysconfig.get_config_var('EXT_SUFFIX')更改为预期的完整``platform_tag.extension``格式。之前它被硬编码为.pyd,现在它与distutils.sysconfig``兼容,将产生类似 ``.cp38-win_amd64.pyd的结果。这使Windows与其他平台一致。bpo-26389:
traceback.format_exception()、traceback.format_exception_only()和traceback.print_exception()函数现在可以接受异常对象作为仅位置参数。bpo-41889: Enum: 修复涉及继承多重继承枚举的回归问题
bpo-41861: 将
sqlite3转换为使用堆类型(PEP 384)。由Erlend E. Aasland提供补丁。bpo-40624: 在xml.etree中增加了对XPath
!=操作符的支持bpo-28850: 修复
pprint.PrettyPrinter.format()对小容器内容的覆盖被忽略的问题。pprint._safe_repr()函数已被移除。bpo-41625: 将
splice()作为os.splice()暴露在os模块中。由Pablo Galindo提供补丁。bpo-34215: 当
expected为None时,澄清asyncio.IncompleteReadError的错误消息。bpo-41543: 为contextlib.nullcontext添加异步上下文管理器支持。
bpo-21041:
pathlib.PurePath.parents现在支持负索引。补丁由Yaroslav Pankovych贡献。bpo-41332: 向
asyncio.AbstractEventLoop添加了缺失的connect_accepted_socket()方法。bpo-12800: 从tarball中提取符号链接应该成功,并在符号链接已存在时覆盖它。修复方法是在提取前移除现有的文件或符号链接。基于Chris AtLee、Jeffrey Kintscher和Senthil Kumaran的补丁。
bpo-40968:
urllib.request和http.client现在在没有提供自定义上下文时,在TLS握手期间发送http/1.1ALPN扩展。bpo-41001: 添加
os.eventfd()以提供Linux事件通知文件描述符的低级接口。bpo-40816: 向contextlib添加AsyncContextDecorator以支持异步上下文管理器作为装饰器。
bpo-40550: 修复subprocess.Popen.send_signal中的检查时间/动作时间问题。
bpo-39411: 向
pyclbr的Function对象添加一个is_async标识符。由Batuhan Taskaya提供补丁。bpo-35498: 为
pathlib.PurePath.parents添加切片支持。
文档¶
测试¶
bpo-41473: 在gdb 9.2及更新版本上重新启用test_gdb:https://bugzilla.redhat.com/show_bug.cgi?id=1866884 在gdb 10.1中修复。
bpo-42553: 修复
test_asyncio.test_call_later()的竞争条件:不在call_later()单元测试中测量asyncio性能。测试在CI上随机失败。bpo-31904: 在VxWorks上修复test_netrc:使用temp_cwd()创建临时目录。
bpo-31904: 在VxWorks上跳过test_getaddrinfo_ipv6_scopeid_symbolic和test_getnameinfo_ipv6_scopeid_symbolic。
bpo-31904: 在VxWorks上跳过test_test的test_mailcap。
bpo-31904: 为test_pipes添加shell要求。
bpo-31904: 在VxWorks上跳过一些与fifo相关的测试。
bpo-31904: 修复VxWorks的test_doctest.py失败。
bpo-40754: 在Windows安装程序中包含
_testinternalcapi模块用于测试套件。bpo-41561: test_ssl:当TLS 1.0不可用时跳过test_min_max_version_mismatch。
bpo-31904: 修复VxWorks RTOS的os模块失败。
bpo-31904: 修复VxWorks RTOS的fifo测试用例。
构建¶
bpo-31904: 为VxWorks的detect_socket()移除libnet依赖。
bpo-42398: 当使用make -jN选项并行运行作业时,修复"make regen-all"中的竞争条件。clinic.py脚本现在仅使用原子写入来写入文件。此外,如果内容未更改,则生成的文件现在保持不变,以不更改文件修改时间。
bpo-41617: 修复在旧版 clang(如 Mac OS X 10.7 上的 Xcode 4.6.3)没有
__builtin_bswap16()时构建pycore_bitutils.h内部头文件的问题。由 Joshua Root 和 Victor Stinner 提供补丁。bpo-38823: 现在没有
wchar_t类型就无法构建_ctypes扩展模块:移除了CTYPES_UNICODE宏。无论如何,构建 Python 需要wchar_t类型。由 Victor Stinner 提供补丁。bpo-40998: 解决了未定义行为消毒器(ubsan)发现的三个编译器警告。
Windows¶
macOS¶
bpo-42504: 修复了在 MACOSX_DEPLOYMENT_TARGET=11 时在 macOS Big Sur 上的构建问题。
bpo-41116: 确保 distutils.unixxcompiler.find_library_file 可以在 macOS 11 上找到系统提供的库。
bpo-41100: 添加了对 macOS 11 和 Apple Silicon 系统的支持。
现在可以使用 "--enable-universalsdk --with-universal-archs=universal2" 构建 "Universal 2" 二进制文件。
当使用正确的部署目标时,可以在较旧的 macOS 版本(测试到 macOS 10.9)上部署在较新的 macOS 版本上构建的二进制文件。这是使用 Xcode 11 及更高版本测试的。
bpo-42232: 向 mmap 模块添加了 Darwin 特定的 madvise 选项。
bpo-38443: 配置脚本的
--enable-universalsdk和--with-universal-archs选项现在检查指定的架构是否可以使用。
IDLE¶
工具/示例¶
C API¶
bpo-42423:
PyType_FromSpecWithBases()和PyType_FromModuleAndSpec()函数现在接受单个类作为 bases 参数。bpo-1635741: 将
select扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将 _posixsubprocess 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-1635741: 将 _posixshmem 扩展模块移植到多阶段初始化 (PEP 489)
bpo-1635741: 将 _struct 扩展模块移植到多阶段初始化 (PEP 489)
bpo-1635741: 将
spwd扩展模块移植到多阶段初始化 (PEP 489)bpo-1635741: 将
gc扩展模块移植到多阶段初始化 (PEP 489)bpo-1635741: 将 _queue 扩展模块移植到多阶段初始化 (PEP 489)
bpo-39573: 将
Py_TYPE()和Py_SIZE()转换回宏,以允许将它们用作左值。许多第三方 C 扩展模块依赖于使用 Py_TYPE() 和 Py_SIZE() 来设置对象类型和大小的能力:Py_TYPE(obj) = type;和Py_SIZE(obj) = size;。bpo-1635741: 将
symtable扩展模块移植到多阶段初始化 (PEP 489)bpo-1635741: 将
grp和pwd扩展模块移植到多阶段初始化 (PEP 489)bpo-1635741: 将 _random 扩展模块移植到多阶段初始化 (PEP 489)
bpo-1635741: 将 _hashlib 扩展模块移植到多阶段初始化 (PEP 489)
bpo-41713: 移除了未文档化的
PyOS_InitInterrupts()函数。初始化 Python 已经隐式安装了信号处理器:参见PyConfig.install_signal_handlers。由 Victor Stinner 提供补丁。bpo-40170:
Py_TRASHCAN_BEGIN宏不再访问 PyTypeObject 属性,而是通过调用新的私有函数_PyTrash_cond()来获取条件,该函数隐藏了实现细节。bpo-42260: 如果在
Py_Initialize()之前(即 Python 初始化之前)调用Py_GetPath()、Py_GetPrefix()、Py_GetExecPrefix()、Py_GetProgramFullPath()、Py_GetPythonHome()和Py_GetProgramName()函数,这些函数现在会返回NULL。使用新的 Python 初始化配置 API 来获取 Python 路径配置。由 Victor Stinner 提供补丁。bpo-42260:
PyConfig_Read()函数现在只解析PyConfig.argv参数一次:参数解析后PyConfig.parse_argv被设为2。由于 Python 参数已从PyConfig.argv中剥离,解析参数两次会将应用程序选项作为 Python 选项解析。bpo-42262: 添加了
Py_NewRef()和Py_XNewRef()函数,用于增加对象的引用计数并返回该对象。由 Victor Stinner 提供补丁。bpo-42260: 当
Py_Initialize()被调用两次时,第二次调用现在会更新更多配置相关的sys属性,而不仅仅是sys.argv。由 Victor Stinner 提供补丁。bpo-41832:
PyType_FromModuleAndSpec()函数现在接受 NULLtp_doc槽。bpo-1635741: 添加了
PyModule_AddObjectRef()函数:类似于PyModule_AddObject(),但在成功时不窃取对值的引用。由 Victor Stinner 提供补丁。bpo-42171:
METH_FASTCALL调用约定被添加到有限 API 中。函数PyModule_AddType()、PyType_FromModuleAndSpec()、PyType_GetModule()和PyType_GetModuleState()被添加到 Windows 上的有限 API 中。bpo-42085: 为发送值添加了 PyAsyncMethods 的专用条目
bpo-41073:
PyType_GetSlot()现在可以接受静态类型。bpo-30459:
PyList_SET_ITEM(),PyTuple_SET_ITEM()和PyCell_SET()宏不能再被用作左值或右值。例如,x = PyList_SET_ITEM(a, b, c)和PyList_SET_ITEM(a, b, c) = x现在会引发编译器错误。这防止了像if (PyList_SET_ITEM (a, b, c) < 0) ...这样的测试。由 Zackery Spytz 和 Victor Stinner 提供补丁。
Python 3.10.0 alpha 2¶
发布日期: 2020-11-03
安全性¶
核心与内置函数¶
bpo-42236: 如果
nl_langinfo(CODESET)函数返回空字符串,Python现在使用UTF-8作为文件系统编码。由 Victor Stinner 提供补丁。bpo-42218: 修复了PEG解析器中导致调试模式下崩溃的一个错误。现在在左递归规则中检查错误,以避免这些错误未能及时处理并在其他地方表现为长距离崩溃的情况。
bpo-42214: 修复了在
barry_as_flufl规则中检查 '!=' 标记时PEG解析器可能崩溃的问题。由 Pablo Galindo 提供补丁。bpo-42206: 在解析器中传播并引发由
PyAST_Validate()引起的错误。bpo-42143: 修复了在创建
PyFunctionObject过程中错误处理的问题,该问题导致了对未初始化内存的操作。由 Yonatan Goldschmidt 提供补丁。bpo-41659: 修复解析器中的一个错误,其中在
primary后跟随一个大括号时未立即失败。这导致像a {b}这样的无效表达式抛出SyntaxError时带有错误的偏移量,或者像a {这样以大括号结尾的无效表达式在 REPL 中未立即失败。bpo-42150: 修复新解析器在检查续行时可能出现的缓冲区溢出。由 Pablo Galindo 提供补丁。
bpo-42123: 运行解析器两次。第一次运行时,禁用所有仅生成更好错误消息的规则以提高性能。如果解析失败,则第二次运行时启用这些规则。
bpo-42093:
LOAD_ATTR指令现在使用新的“每个操作码缓存”机制,速度提高了约 36%。补丁由 Pablo Galindo 和 Yury Selivanov 提供。bpo-42030: 移除了对旧版 AIX 特定共享库加载的支持。自 4.3 版本以来,所有 AIX 版本都支持并默认使用通用的 Unix 机制。
bpo-41984: 垃圾收集器现在跟踪所有用户定义的类。由 Brandt Bucher 提供补丁。
bpo-41993: 修复了在导入失败时从
sys.modules中删除未完全初始化的模块可能引发的问题。bpo-41979: PEG 解析器现在允许在 with 项目的目标中使用星号解包。
bpo-41974: 移除了
complex类的特殊方法__int__,__float__,__floordiv__,__mod__,__divmod__,__rfloordiv__,__rmod__和__rdivmod__。这些方法总是抛出TypeError。bpo-41902: 在计算
range的sq_item和mp_subscript时进行了微优化。由 Donghee Na 提供补丁。bpo-41894: 在加载本地模块并且加载失败时,防止在不使用 UTF-8 语言环境运行时可能出现的 UnicodeDecodeError,通过使用当前语言环境的编码解码加载错误消息。
bpo-41902: 如果步长为1,对range.index进行微优化。由Donghee Na提供补丁。
库¶
bpo-41435: 添加
sys._current_exceptions()函数,用于检索一个字典,该字典将每个线程的标识符映射到调用该函数时该线程中当前活动的顶层异常。
核心与内置函数¶
bpo-38605: 默认启用
from __future__ import annotations(PEP 563)。现在__annotations__字典中的值是字符串,例如{"x": "int"}而不是``{"x": int}``。
库¶
bpo-35455: 在Solaris上,
thread_time()现在通过gethrvtime()实现,因为``clock_gettime(CLOCK_THREAD_CPUTIME_ID)``并不总是可用。由Jakub Kulik提供补丁。bpo-42233:对于包含 Generic Alias Types 的
typing类型,其repr()表示形式此前不会在GenericAlias中显示参数化类型。现在这一行为已调整为会显示参数化类型。bpo-29566:
binhex.binhex()一致地写入macOS 9行结束符。bpo-26789:
logging.FileHandler类现在保留对内置open()函数的引用,以便在Python终止期间能够打开或重新打开文件。修复如NameError: name 'open' is not defined的错误。由Victor Stinner提供补丁。bpo-42157: 移除了
unicodedata.ucnhash_CAPI属性,这是一个内部的PyCapsule对象。相关的私有_PyUnicode_Name_CAPI结构被移动到内部C API。由Victor Stinner提供补丁。bpo-42157: 将
unicodedata扩展模块转换为多阶段初始化API (PEP 489),并将``unicodedata.UCD``静态类型转换为堆类型。由Mohamed Koubaa和Victor Stinner提供补丁。bpo-42146: 修复
subprocess.Popen()在user``(``group,extra_groups)中指定的uid(gid)溢出uid_t``(``gid_t)时的内存泄漏问题。bpo-42103:
InvalidFileException和RecursionError现在是加载损坏的二进制 Plist 文件时仅会引发的错误(在之前的一些特定情况下可能会引发 ValueError 和 TypeError)。bpo-41490: 在
importlib.resources中,.path方法更加积极地提前释放对 zipfile 对象的句柄,使得像 certifi 这样的用例可以在保持上下文打开的同时删除底层的 zip 文件。bpo-41052: 现在,使用协议 0 和 1 对 C 中实现的堆类型进行 Pickle 操作会引发错误,而不是产生不正确的数据。
bpo-42089: 在
importlib.metadata.PackageNotFoundError中,引用缺失的包元数据以改善用户体验。bpo-41491: plistlib: 修复解析带有十六进制整数值的 XML plists 的问题
bpo-42065: 修复了当使用一个超出有效 Unicode 码点范围的映射值调用
_codecs.charmap_decode()时错误格式化的问题。由 Max Bernstein 提交的 PR。bpo-41966: 修复纯 Python
datetime.time子类的 Pickle 操作。由 Dean Inwood 提供的补丁。bpo-19270:
sched.scheduler.cancel()现在会取消正确的事件,如果两个具有相同优先级的事件被安排在相同的时间。由 Bar Harel 提供的补丁。bpo-28660:
textwrap.wrap()现在在break_long_words=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对象,将正确写入文件。
文档¶
测试¶
构建¶
Windows¶
macOS¶
bpo-41471: 忽略系统代理排除中的无效前缀长度。
IDLE¶
C API¶
bpo-42157: PyCapsule API
unicodedata.ucnhash_CAPI的私有_PyUnicode_Name_CAPI结构已移至内部C API。由Victor Stinner提供补丁。bpo-42015: 修复了在动态分配的
PyMethodDef的生命周期通过PyCFunction的self参数管理时,释放方法对象时可能发生的崩溃。bpo-40423:
subprocess模块和os.closerange现在将在可用时使用``close_range(low, high, flags)``系统调用来更高效地关闭描述符范围。bpo-41845:
PyObject_GenericGetDict()在针对3.10或更高版本时再次在有限API中可用。bpo-40422: 添加
_Py_closerange函数以提供高效关闭一系列文件描述符的能力。bpo-41986:
Py_FileSystemDefaultEncodeErrors和Py_UTF8Mode再次在有限 API 中可用。bpo-41756: 添加
PyIter_Send函数,允许向生成器/协程/迭代器发送值而不抛出 StopIteration 异常来信号返回。bpo-41784: 将
PyUnicode_AsUTF8AndSize添加到有限的 C API 中。
Python 3.10.0 alpha 1¶
发布日期: 2020-10-05
安全性¶
bpo-41304: 修复了在 Windows 上
python3x._pth被忽略的问题,该问题由对 bpo-29778 的修复引起 (CVE 2020-15801)。bpo-41162: 审计钩子现在在最终化过程的后期被清除,以避免错过事件。
bpo-29778: 确保当 Python 被嵌入时
python3.dll从正确的位置加载 (CVE 2020-15523)。bpo-41004: ipaddress.IPv4Interface 和 ipaddress.IPv6Interface 的 __hash__() 方法错误地生成了分别为 32 和 128 的常量哈希值。这导致了总是发生哈希冲突。修复使用 hash() 来为 (地址, 掩码长度, 网络地址) 的元组生成哈希值。
bpo-39603: 通过拒绝 http.client.putrequest(...) 中的控制字符来防止 http 头注入。
核心与内置函数¶
bpo-41909: 修复了在
issubclass()和isinstance()中当获取__bases__属性导致无限递归时的堆栈溢出问题。bpo-41922: 通过使用 PEP 590
vectorcall调用约定来加速对reversed()的调用。由 Donghee Na 提供补丁。bpo-41873: 由于
vectorcall调用约定,对float()的调用现在更快。由 Dennis Sweeney 提供补丁。bpo-41870: 通过使用 PEP 590
vectorcall调用约定来加速对bool()的调用。补丁由 Donghee Na 提供。
库¶
bpo-1635741: 将
_bisect模块移植到多阶段初始化 API (PEP 489)。
核心与内置函数¶
bpo-39934: 在编译器中正确计算 'except' 中的控制块。确保对于深层嵌套的命名异常处理程序产生语法错误而非致命错误。
bpo-41780: 修复
types.GenericAlias的__dir__()方法。由 Batuhan Taskaya 提供补丁。
库¶
bpo-1635741: 将
_lsprof扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将
cmath扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将
_scproxy扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将
termios扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将
_sha256扩展模块类型转换为堆类型。
核心与内置函数¶
bpo-41690: 修复解析器在解析具有大量参数的函数和类时可能出现的栈溢出问题。由 Pablo Galindo 提供补丁。
库¶
bpo-1635741: 将
_overlapped扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将
_curses_panel扩展模块移植到多阶段初始化 (PEP 489)。bpo-1635741: 将
_opcode扩展模块移植到多阶段初始化 (PEP 489)。
核心与内置函数¶
bpo-41681: 修复在 f-string 和
str.format()中使用两个,时引发的错误描述错误的问题。
库¶
bpo-41675:
signal.siginterrupt()的实现现在使用sigaction()(如果系统中可用) 而非已弃用的siginterrupt()。由 Pablo Galindo 提供补丁。
核心与内置函数¶
bpo-41670: 防止在未编译
USE_COMPUTED_GOTOS的平台上跳过行跟踪。修复了 Windows 上 try-except 块内某些行未被跟踪的问题。bpo-41654: 修复销毁
MemoryError子类时发生的崩溃问题。由 Pablo Galindo 提供补丁。
库¶
bpo-1635741: 将
zlib扩展模块移植到多阶段初始化 (PEP 489)。
核心与内置函数¶
bpo-41631:
_ast模块再次使用了全局状态。每个模块实例使用模块状态会导致一些微妙的实际问题。例如,Mercurial 项目替换了__import__()函数以实现延迟导入,而 Python 期望import _ast总是返回一个完全初始化的_ast模块。
库¶
bpo-40077: 将
_operator转换为使用PyType_FromSpec()。
核心与内置函数¶
bpo-1653741: 将
_sha3移植到多阶段初始化。将静态类型转换为堆类型。
库¶
bpo-1635741: 将
_blake2扩展模块移植到多阶段初始化 API (PEP 489)。
核心与内置函数¶
库¶
bpo-1635741: 将
_sha1、_sha512和_md5扩展模块移植到多阶段初始化 API (PEP 489)。
核心与内置函数¶
bpo-41431: 为复制字典(例如
dict(d)和{}.update(d))优化dict_merge()。bpo-41428: 实现 PEP 604。这支持使用 (int | str) 等替代 Union[str, int]。
bpo-41340: 移除了
strdup的回退实现。bpo-38156: 正确处理在
PyOS_StdioReadline中 EOF 之后到来的中断。bpo-41334: 构造函数
str()、bytes()和bytearray()现在更快(对于小对象大约快 30--40%)。bpo-41295: 解决了 CPython 3.8.4 中的一个回归问题,即在多重继承设置中定义 "__setattr__" 并调用层次链时,如果基类型涉及内置/扩展类型,可能会失败。
bpo-41323: 字节码优化直接在控制流图上执行。这将在某些情况下使代码对象稍微更紧凑。
bpo-41247: 运行
asyncio.set_running_loop时,始终缓存运行循环持有者。bpo-41252: 修复 _ssl.c 中
_servername_callback()的错误引用计数。bpo-1635741: 将
multiprocessing移植到多阶段初始化。
库¶
bpo-1635741: 将
winapi移植到多阶段初始化。
核心与内置函数¶
库¶
bpo-1635741: 将
faulthandler移植到多阶段初始化。bpo-1635741: 将
sha256移植到多阶段初始化。
核心与内置函数¶
bpo-41175: 防止
bytearray() + bytearray()操作触发的 bytearrayobject 内的 NULL 指针解引用。bpo-41100: 在 mpdecimal.h 中将 arm64 添加到允许的 Mac OS 架构中。
bpo-41094: 修复在非 UTF-8 语言环境下打开非 ASCII 名称文件时的解码错误。
bpo-39960: 防止通过调用超类方法绕过类型的 __setattr__() 的“hackcheck”被重写,以允许 C 实现的堆类型。
bpo-41084: 在解析抛出
SyntaxError的 f-string 表达式时,在错误消息前加上 'f-string: '。bpo-40521: 空的 frozensets 不再是单例。
bpo-41076: 预填充解析器时提供 f-string 表达式的位置,而不是 f-string 本身,这允许我们在解析完成后跳过 AST 节点位置的移动。
bpo-41056: 修复了在启动时通过 -c 提供代码时,涉及相对符号链接构造 sys.path 过程中引用已释放堆栈空间的问题。(通过 Coverity 发现)
bpo-41061: 修复了哈希表代码和测试中的错误表达式和断言。
bpo-41052: 为 _random.Random 选择退出序列化/反序列化。
bpo-40939: 将
PyPegen*函数重命名为PyParser*,以便我们可以移除使用旧解析器的那组PyParser*函数,但保持一切向后兼容。bpo-35975: Stefan Behnel 报告称,即使 PyCF_ONLY_AST 未设置,也会使用 cf_feature_version。这与意图和文档行为相违背,因此已修复。
bpo-40939: 移除旧解析器和
symbol模块的剩余文件。
库¶
bpo-40077: 将
_bz2转换为使用PyType_FromSpec()。
核心与内置函数¶
bpo-41006:
encodings.latin_1模块不再在启动时导入。现在仅当它是文件系统编码或 stdio 编码时才导入。bpo-40636:
zip()现在支持 PEP 618 的strict参数,如果参数长度不同,则会引发ValueError。由 Brandt Bucher 提供补丁。bpo-1635741: 将
_gdbm移植到多阶段初始化。bpo-40985: 修复了一个导致文件以行继续字符(即反斜杠)结尾时,
SyntaxError文本为空的错误。错误文本应包含最后一行的文本。bpo-40958: 修复了 PEG 解析器在收集信息以发出语法错误时可能存在的缓冲区溢出。由 Pablo Galindo 提供补丁。
bpo-1635741: 将
_dbm移植到多阶段初始化。bpo-40957: 修复 _Py_fopen_obj() 在 PySys_Audit() 失败时的反射泄漏
库¶
核心与内置函数¶
bpo-40947: Python 的 Path Configuration 现在考虑了
PyConfig.platlibdir。bpo-40939: 移除了旧解析器、
parser模块以及所有相关的支持代码、命令行选项和环境变量。由 Pablo Galindo 提供补丁。bpo-40847: 修复了一个错误,即在分词器级别,仅包含行继续符的行不被视为空行。在这种情况下,会发出多个
NEWLINE令牌。旧解析器绕过了这个问题,但新解析器因此对有效输入抛出了SyntaxError。例如,行继续符后的空行被解释为SyntaxError。bpo-40890: 现在每个字典视图都有一个
mapping属性,该属性提供了一个包装原始字典的types.MappingProxyType。补丁由 Dennis Sweeney 贡献。bpo-40889: 改进了字典项视图上对称差异操作的性能。由 Dennis Sweeney 提供补丁。
bpo-40904: 修复了在解析包含无值 yield 语句的 f-string(如
f"{yield}")时,新的 PEG 解析器可能出现的段错误。由 Pablo Galindo 提供补丁。bpo-40903: 修复了新的 PEG 解析器在为形式如
p=p=的无效赋值生成错误消息时可能出现的段错误。由 Pablo Galindo 提供补丁。bpo-40880: 修复了在检查字符串字面量中的换行符时,新解析器中的无效内存读取问题。补丁由 Pablo Galindo 提供。
bpo-40883: 修复了在新解析器中解析 f-strings 时的内存泄漏问题。补丁由 Pablo Galindo 提供。
bpo-40870: 在验证自定义 AST 时,如果常量
True、False和None在ast.Name节点中使用,则抛出ValueError。bpo-40854: 允许通过新的环境变量
PYTHONPLATLIBDIR覆盖sys.platlibdir。bpo-40826: 修复
PyOS_Readline()中的GIL使用:锁定GIL以设置异常,并在检查是否有待处理信号时传递Python线程状态。bpo-1635741: 将
fcntl移植到多阶段初始化。bpo-19468: 删除 importlib.reload() 中不必要的实例检查。由Furkan Önder提供补丁。
bpo-40824: 在
in操作符和operator模块的函数contains()、indexOf()和countOf()中,调用__iter__方法时不再因TypeError而掩盖意外错误。bpo-40792:
range对象的属性start、stop和step现在总是具有确切的int类型。之前,它们可能是int子类的实例。bpo-40780: 修复了浮点数g风格字符串格式化未能移除尾部零的一个边缘情况。
bpo-38964: 当fstring的表达式部分出现
SyntaxError时,SyntaxError的filename属性现在被正确设置为fstring所在文件的名称。bpo-40750: 在新的PEG解析器中支持 "-d" 调试标志。由Pablo Galindo提供补丁
bpo-40217: 使用
PyType_FromSpecWithBases()创建的类型实例在垃圾收集器中遍历引用时将不再自动访问其类对象。用户需要手动访问对象的类。由Pablo Galindo提供补丁。bpo-40696: 修复了由于异常上下文链中的循环而在
generator.throw()后可能出现的挂起问题。bpo-40521: 每个解释器现在都有自己的空闲列表、单例和缓存:
空闲列表:float、tuple、list、dict、frame、context、异步生成器、MemoryError。
单例:空元组、空字节字符串、空Unicode字符串、单字节字符、单个Unicode(latin1)字符。
切片缓存。
它们不再被所有解释器共享。
bpo-40679: 某些关于缺少或多余参数的
TypeError消息现在包括函数的 qualified name。由 Dennis Sweeney 提供补丁。bpo-29590: 在生成器上调用
generator.throw()后,使堆栈跟踪正确,该生成器已经从yield from中产出。bpo-4022: 通过不引发内部 StopIteration 来提高生成器的性能。
库¶
bpo-1635741: 将
mmap移植到多阶段初始化。bpo-1635741: 将
_lzma移植到多阶段初始化。
核心与内置函数¶
bpo-37999: 接受整数参数的内置和扩展函数不再接受
Decimals、Fractions 和其他只能以损失方式转换为整数的对象(例如,具有__int__()方法但不具有__index__()方法的对象)。bpo-29882: 添加
int.bit_count(),计算整数二进制表示中1的数量。由 Niklas Fiekas 提供补丁。
库¶
bpo-36982: 当可用时使用 ncurses 扩展颜色功能以支持具有256色的终端,并添加新函数
curses.has_extended_color_support()以指示底层 ncurses 库是否提供扩展颜色支持。
核心与内置函数¶
库¶
bpo-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: 为 VxWorks RTOS 添加
os.cpu_count()支持。bpo-41384: 当向 tkinter.OptionMenu 传递未知选项时,抛出 TclError 而不是 TypeError。
bpo-41317: 在 asyncio.loop.sock_accept() 中使用 add_done_callback() 以在取消时尽早取消订阅读取器。
bpo-41341: 在
get_type_hints中递归评估typing.ForwardRef。bpo-41344: 防止创建
size=0的shared_memory.SharedMemory对象。bpo-41333:
collections.OrderedDict.pop()现在速度提高了 2 倍。bpo-41288: 使用C实现时,反序列化无效的NEWOBJ_EX操作码现在会引发UnpicklingError,而不是崩溃。
bpo-39017: 避免在使用tarfile模块读取特制的TAR文件时出现无限循环(CVE 2019-20907)。
bpo-41273: 通过调用
recv_into而非recv,加快使用_ProactorReadPipeTransport``的任何传输速度,从而不在传输的读取循环中为每次 ``recv调用创建新缓冲区。bpo-41235: 修复了
ssl.SSLContext.load_dh_params()中的错误处理。bpo-41207: 在distutils.spawn中,恢复了当命令未找到时引发DistutilsExecError的预期行为。
bpo-29727: 将
array.array注册为MutableSequence。由Pablo Galindo提供补丁。bpo-39168: 移除了
typing.Generic的__new__方法。bpo-41194: 修复了
_ast模块中的崩溃问题:它现在不能被多次加载。它现在使用全局状态而非模块状态。bpo-41195: 添加了只读的ssl.SSLContext.security_level属性,用于检索上下文的安全级别。
bpo-41193: readline completer的
write_history()atexit函数现在忽略任何OSError,以在文件系统为只读时忽略错误,而不仅仅是忽略FileNotFoundError和PermissionError。bpo-41182: selector: 根据实现使用DefaultSelector
bpo-41161: decimal模块现在需要libmpdec-2.5.0。使用--with-system-libmpdec的用户应更新其系统库。
bpo-40874: decimal模块现在需要libmpdec-2.5.0。
bpo-31082: 在
functools.reduce()的文档字符串中使用术语“可迭代对象”。bpo-40521: 从collections.deque()中移除freelist。
bpo-41068: 修复了直接从ZIP存档中读取非ASCII名称文件后立即写入的问题。
bpo-41058:
pdb.find_function()现在能正确确定源文件的编码。bpo-41056: 现在阻止将无效的文件描述符值传递给os.fpathconf。(由Coverity发现)
bpo-41056: 修复了ssl模块中在keylog回调中发生MemoryError时的NULL指针解引用问题。(由Coverity发现)
bpo-41056: 修复了zoneinfo模块中MemoryError可能未被报告或未在其源头报告的情况。(由Coverity发现)
bpo-41048:
mimetypes.read_mime_types()函数现在使用UTF-8编码而非本地编码读取规则文件。由Srinivas Reddy Thatiparthy提供补丁。bpo-41025: 修复了阻止
zoneinfo.ZoneInfo的C实现被子类化的问题。bpo-35018: 添加了其他SAX XML实现中存在的
xml.sax.handler.LexicalHandler类。bpo-41002: 提高了HTTPResponse.read在给定数量下的性能。由Bruce Merry提供补丁。
bpo-40448:
ensurepip现在在安装捆绑版本的pip和setuptools时禁用pip缓存。由Krzysztof Konopko提供补丁。bpo-40967: 移除了
asyncio.Task.current_task()和asyncio.Task.all_tasks()。补丁由Rémi Lapeyre贡献。bpo-40924: 确保
importlib.resources.path为SourceFileLoader的资源阅读器返回一个存在的路径。在制定长期解决方案的同时避免了在主分支中发现的回归。bpo-40955: 修复了
subprocess模块中在指定extra_groups时的一个小内存泄漏。bpo-40855: statistics模块中的标准差和方差函数忽略了它们的mu和xbar参数。
bpo-23427: 添加
sys.orig_argv属性:传递给Python可执行文件的原始命令行参数列表。bpo-33689: 忽略.pth文件中的空行或仅包含空白的行。这与文档中描述的行为相匹配。在此之前,空行会导致site-packages目录在sys.path中多次出现。由Ido Michael贡献,贡献者包括Malcolm Smith和Tal Einat。
bpo-40884: 向
logging.Formatter添加了一个defaults参数,允许为自定义字段指定默认值。由Asaf Alon和Bar Harel提供补丁。bpo-39791: 从importlib_metadata 1.6.1刷新importlib.metadata。
bpo-40807: 停止codeop._maybe_compile(由code.InteractiveInterpreter(和IDLE)使用)每次发出三次警告。
bpo-39791: 内置加载器(SourceFileLoader和ZipImporter)现在为
ResourceReader提供TraversableResources实现,并且移除了回退函数。bpo-39314:
rlcompleter.Completer和标准Python shell现在为不带参数的函数闭合括号。由Rémi Lapeyre提供补丁。bpo-17005: 最初在
functools模块中引入的拓扑排序功能已被移动到一个新的graphlib模块,以更好地适应新工具并保持functools模块的原始范围。由Pablo Galindo提供补丁bpo-40834: 修复在发送str对象时使用_xxsubinterpreters.channel_send的截断问题。
bpo-40755: 向collections.Counter()添加富比较方法。
bpo-26407: 在
csv.reader(),csv.writer.writerow()和csv.writer.writerows()中调用__iter__方法时不再因TypeError掩盖意外错误。bpo-39384: 修复了email.contentmanager,允许set_content()设置空字符串。
bpo-40744:
sqlite3模块使用了需要SQLite v3.7.3或更高版本的SQLite API函数。此补丁移除了对旧版本SQLite的支持,并在构建、编译和运行时明确要求SQLite 3.7.3。由Sergey Fedoseev和Erlend E. Aasland提供补丁。bpo-40777: 在运行时初始化PyDateTime_IsoCalendarDateType.tp_base,以避免在某些编译器上出现错误。
bpo-38488: 更新ensurepip以安装pip 20.1.1和setuptools 47.1.0。
bpo-40792:
operator.index()的结果现在总是具有确切的int类型。以前,结果可能是int子类的实例。bpo-40767:
webbrowser现在通过检查WAYLAND_DISPLAY环境变量,在纯Wayland系统中正确找到默认浏览器。补丁由Jérémy Attali贡献。bpo-40791: 当OpenSSL可用时,
hashlib.compare_digest()使用OpenSSL的``CRYPTO_memcmp()``函数。bpo-40795:
ctypes模块:如果ctypes未能转换回调的结果,或者如果ctypes回调函数引发异常,现在会调用带有异常设置的sys.unraisablehook。以前,错误由PyErr_Print()记录到stderr。bpo-16995: 添加
base64.b32hexencode()和base64.b32hexdecode()以支持使用扩展十六进制字母表的Base32编码。bpo-30008: 修复
ssl代码以兼容使用no-deprecated和--api=1.1.0构建的OpenSSL 1.1.x。bpo-30064: 修复asyncio
loop.sock_*竞争条件问题bpo-40759: 弃用
symbol模块。bpo-40756:
LoggerAdapter.__init__的第二个参数(extra)现在默认为None。bpo-37129: 为
os.pwritev()添加一个新的os.RWF_APPEND标志。bpo-40726: 处理在
ast.increment_lineno()中end_lineno为None的情况。bpo-40698:
distutils上传创建了 SHA2-256 和 Blake2b-256 摘要。如果平台阻止 MD5,则跳过 MD5 摘要。bpo-9216:
hashlib.new()将usedforsecurity传递给 OpenSSL EVP 构造函数_hashlib.new()。test_hashlib 和 test_smtplib 更好地处理严格的安全策略。bpo-40614:
ast.parse()在传递的feature_version小于(3, 8)时不会解析 f-strings 中的自文档化表达式。bpo-40626: 根据 HDF Group 对 HDF5 格式化数据文件的建议,添加 h5 文件扩展名作为 MIME 类型 application/x-hdf5。补丁由 Mark Schwab 贡献。
bpo-25920: 在 macOS 上,当为 macOS 10.4 及更早版本构建 Python 时(这不是 python.org macOS 安装程序的情况),
socket.getaddrinfo()不再使用内部锁来防止在调用getaddrinfo()时出现竞争条件,因为自 macOS 10.5 起它就是线程安全的。Python 3.9 需要 macOS 10.6 或更新版本。当另一个线程调用socket.getaddrinfo()时,内部锁会导致 fork 时随机挂起。该锁也用于比 5.3 旧的 FreeBSD,比 201311 旧的 OpenBSD 和比 4 旧的 NetBSD。bpo-40671: 为 PEP 489 准备
_hashlib并使用PyModule_AddType()。bpo-32309: 添加了一个新的 coroutine
asyncio.to_thread()。它主要用于在单独的线程中运行 IO 密集型函数以避免阻塞事件循环,本质上是一个可以直接接受关键字参数的高级版本的run_in_executor()。bpo-36543: 恢复了已弃用的
xml.etree.cElementTree模块。bpo-40611:
MAP_POPULATE常量已被添加到导出的mmap模块标志列表中。bpo-39881: 在测试套件中使用PEP 554。(由Joannah Nanjekye提供补丁)
bpo-13097:
ctypes现在在回调函数被调用时传递超过1024个参数时会引发ArgumentError。bpo-39385: 一个新的测试断言上下文管理器
unittest.assertNoLogs()将确保给定的代码块不产生任何使用日志模块的日志消息。由Kit Yan Choi贡献。bpo-23082: 更新了PurePath.relative_to()的错误信息和文档,以更好地反映函数行为。
bpo-40318: 如果可用,使用SQLite3跟踪v2 API。
bpo-40105: 在附加("a")模式下提供较短的注释时,ZipFile会截断文件以避免损坏。由Jan Mazur提供补丁。
bpo-40084: 修复了
Enum.__dir__: dir(Enum.member) 现在包括属性和方法。bpo-31122: ssl.wrap_socket() 现在在TLS协商期间对等方关闭连接时引发ssl.SSLEOFError而不是OSError。
bpo-39728: 修复默认的
_missing_以便重复的ValueError不会被设置为原始ValueError的__context__。bpo-39244: 修复了
multiprocessing.context.get_all_start_methods,以在macOS上正确首先返回默认方法。bpo-39040: 通过折叠裸引号字符串中编码字词之间的空白,修复了无效mime头参数的解析。
bpo-38731: 向
py_compile的命令行界面添加了--quiet选项。由Gregory Schevchenko提供补丁。bpo-35714: 如果
struct格式字符串中有空字符,现在会引发struct.error。bpo-38144: 在
glob.glob()中添加了 root_dir 和 dir_fd 参数。bpo-26543: 修复了
IMAP4.noop()在调试模式启用时(例如: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现在支持创建带有非ASCII文件路径的CAB文件,并向其中添加带有非ASCII文件路径的文件。bpo-41074: 修复了在函数
msilib.OpenDatabase()和msilib.init_database()中对非ASCII名称的支持,以及在方法msilib.Database.OpenView()中对非ASCII SQL的支持。bpo-41039: 稳定的ABI重定向DLL(python3.dll)现在使用
#pragma comment(linker)进行重新导出。bpo-40164: 将Windows上的OpenSSL更新至1.1.1g。
bpo-39631: 将Windows上
.py文件的注册MIME类型更改为text/x-python,而不是``text/plain``。bpo-40677: 手动定义IO_REPARSE_TAG_APPEXECLINK,以防某些旧的Windows SDK没有它。
bpo-37556: 扩展py.exe帮助,提及通过venv、shebang、环境变量和ini文件进行的覆盖。
macOS¶
bpo-41557: 更新macOS安装程序,使用SQLite 3.33.0。
bpo-39580: 如果从命令行运行安装程序,避免打开Finder窗口。补丁由Rick Heil贡献。
bpo-41100: 修复在macOS 11上构建时的配置错误。请注意,当前的Python版本是在macOS 11(Big Sur)的第一个开发者预览版发布后不久发布的;在开发者预览版上构建和运行还有其他已知问题。预计在Python 3.8.x的未来错误修复版本和3.9.0中完全支持Big Sur。
bpo-40741: 更新 macOS 安装程序以使用 SQLite 3.32.3。
bpo-41005: 修复了 webbrowser.py 中不允许 macOS 打开浏览器的 XDG 设置问题。
bpo-40741: 更新 macOS 安装程序以使用 SQLite 3.32.2。
IDLE¶
bpo-41775: 使用 'IDLE Shell' 作为 shell 标题。
bpo-35764: 重写 Calltips 文档部分。
bpo-40181: 在 calltips 中,停止提醒 '/' 标记仅位置参数的结束。
bpo-41468: 改进 IDLE 运行崩溃错误消息(用户应该永远不会看到)。
bpo-41373: 通过将其行结束符设置为系统默认值,保存没有行结束符加载的文件,如空白或不同行结束符。修复 3.8.4 和 3.9.0b4 中的回归。
bpo-41300: 保存含有非 ASCII 字符的文件。修复 3.9.0b4 和 3.8.4 中发布的回归。
bpo-37765: 将关键字添加到模块名称完成列表。重写 IDLE 文档的 Completions 部分。
bpo-41152: IDLE 中
stdin、stdout和stderr的编码现在始终为 UTF-8。bpo-41144: 使 Open Module 可以打开特殊模块如 os.path。
bpo-39885: 使上下文菜单中的剪切和复制在右击选择内容时再次工作。
bpo-40723: 使 test_idle 在导入后运行时通过。
C API¶
bpo-41936: 移除了未文档化的宏
Py_ALLOW_RECURSION和Py_END_ALLOW_RECURSION以及PyInterpreterState结构的recursion_critical字段。bpo-41692:
PyUnicode_InternImmortal()函数现在已被弃用,并将在 Python 3.12 中移除:改用PyUnicode_InternInPlace()。由 Victor Stinner 提供补丁。bpo-41842: 添加
PyCodec_Unregister()函数以取消注册一个编解码器搜索函数。bpo-41834: 移除
_Py_CheckRecursionLimit变量:它已被PyInterpreterState结构的ceval.recursion_limit取代。由 Victor Stinner 提供补丁。bpo-41689: 使用
PyType_FromSpec()创建的类型现在可以从__text_signature__访问其tp_doc槽中的任何签名。bpo-41524: 修复Fix bug in
PyOS_mystrnicmp()和PyOS_mystricmp()中增加指针超出字符串末尾的程序缺陷。bpo-41324: 添加一个最小的十进制胶囊 API。该 API 支持最多 38 位数字的 Decimal 与其作为 C 结构体的三元表示之间的快速转换。
bpo-30155: 添加
PyDateTime_DATE_GET_TZINFO()和PyDateTime_TIME_GET_TZINFO()宏,用于访问datetime.datetime和datetime.time对象的tzinfo属性。bpo-40170: 回滚
PyType_HasFeature()更改:当不使用有限的 C API 时,它再次直接读取PyTypeObject.tp_flags成员,而不是总是调用隐藏实现细节的PyType_GetFlags()。bpo-41123: 移除
PyUnicode_AsUnicodeCopy。bpo-41123: 移除
PyLong_FromUnicode()。bpo-41123: 移除
PyUnicode_GetMax()。bpo-41123: 移除操作
Py_UNICODE*字符串的Py_UNICODE_str*函数。bpo-41103: 移除
PyObject_AsCharBuffer()、PyObject_AsReadBuffer()、PyObject_CheckReadBuffer()和PyObject_AsWriteBuffer()。请迁移到新的缓冲区协议;PyObject_GetBuffer()和PyBuffer_Release()。bpo-36346: 对于
PyUnicode_FromUnicode(NULL, size)和PyUnicode_FromStringAndSize(NULL, size)当size > 0时引发 DeprecationWarning。bpo-36346: 在 C 中标记
Py_UNICODE_COPY、Py_UNICODE_FILL、PyUnicode_WSTR_LENGTH、PyUnicode_FromUnicode、PyUnicode_AsUnicode和PyUnicode_AsUnicodeAndSize为弃用。移除自 Python 3.3 以来已被弃用且损坏的Py_UNICODE_MATCH。bpo-40989:
PyObject_INIT()和PyObject_INIT_VAR()宏分别成为PyObject_Init()和PyObject_InitVar()函数的别名。bpo-36020: 在 Windows 上,
#include "pyerrors.h"不再定义snprintf和vsnprintf宏。bpo-40943: 现在必须定义
PY_SSIZE_T_CLEAN宏才能使用PyArg_ParseTuple()和Py_BuildValue()格式,这些格式使用#:es#、et#、s#、u#、y#、z#、U#和Z#。参见 Parsing arguments and building values 和 PEP 353。bpo-40910: 显式地将
Py_GetArgcArgv()函数导出到 C API 并记录该函数。之前,它是隐式导出的,由于 Python 是用-fvisibility=hidden构建的,这种方式不再有效。bpo-40724: 允许在类型规范中定义缓冲区槽。
bpo-40679: 修复了如果 qualname 参数为 NULL 时
_PyEval_EvalCode()的崩溃问题。bpo-40839: 由于历史原因,允许在不持有 GIL 的情况下调用
PyDict_GetItem()。现在不再允许这样做。bpo-40826: 现在如果在 GIL 释放的情况下调用
PyOS_InterruptOccurred(),将会失败并产生致命错误。bpo-40792:
PyNumber_Index()的结果现在总是具有确切的int类型。以前,结果可能是int的子类的实例。bpo-39573: 将
Py_REFCNT()和Py_SIZE()宏转换为静态内联函数。它们不能再被用作左值:使用Py_SET_REFCNT()和Py_SET_SIZE()来设置对象的引用计数和大小。这一变化是有意为之的不兼容更改,目的是为 C API 准备一个不透明的PyObject结构。bpo-40703: PyType_FromSpec*() 函数不再覆盖类型的 "__module__" 属性,如果该属性是通过 "Py_tp_members" 或 "Py_tp_getset" 设置的。
bpo-39583: 从
Include/cpython/*.h中删除了多余的 "extern C" 声明。
Python 3.9.0 beta 1¶
发布日期: 2020-05-19
安全性¶
核心与内置函数¶
bpo-40663: 正确生成省略了括号但需要的地方的注释(例如:
Type[(str, int, *other))])。bpo-40596: 修复了 Windows 上
str.isidentifier()对于包含非 BMP 字符的非规范化字符串的处理。bpo-40593: 改进了源代码中无效字符的语法错误提示。
bpo-40585: 修复了使用
codeop.compile_command()时的一个 bug,该 bug 导致新解析器吞没了异常。由 Pablo Galindo 提供补丁。bpo-40502: 初始化
n->n_col_offset。(由 Joannah Nanjekye 提供补丁)bpo-40527: 修复命令行参数解析:不再多次将错误写入 stderr。
bpo-1635741: 将
errno移植到多阶段初始化 (PEP 489)。bpo-40523: 为
weakref.proxy对象添加hash()和reversed()的透传。由 Pablo Galindo 提供补丁。bpo-1635741: 将
syslog移植到多阶段初始化 (PEP 489)。bpo-40246: 由于向后兼容性的考虑,对于紧跟在保留关键字后且两者之间没有空格的字符串,撤销了在 bpo-40246 中引入的针对无效字符串前缀的专门错误消息报告。像
bg="#d00" if clear else"#fca"这样的构造无法解析,这在如此短的通知时间内是不可接受的破坏。bpo-40417: 修复了当调用 PyImport_ReloadModule 时 imp 模块的弃用警告。由 Robert Rouhani 提供补丁。
bpo-40408: 修复了在 GenericAlias 中嵌套类型变量(如
list[list[T]])的支持。bpo-1635741: 将 _stat 模块移植到多阶段初始化 (PEP 489)。
bpo-29587: 在调用
generator.throw()时启用隐式异常链。bpo-40328: 为 CJKCodecs 添加生成映射头文件的工具。
bpo-40228: 现在设置 frame.f_lineno 对于源代码到字节码编译器的变化是健壮的。
bpo-38880: 在内置子解释器模块中添加了列出与通道端相关联的解释器的能力。
bpo-37986: 对于适合 long 的值,提高
PyLong_FromDouble()的性能。
库¶
bpo-40662: 修复了
ast.get_source_segment()对于具有不完整位置信息的 ast 节点的问题。由 Irit Katriel 提供补丁。bpo-40536: 在
zoneinfo模块中增加了available_timezones()函数。由 Paul Ganssle 提供补丁。bpo-40645:
hmac.HMAC暴露了内部实现细节。属性digest_cons、inner和outer已被弃用,并将在未来移除。bpo-40645: 内部模块
_hashlib包装并暴露了 OpenSSL 的 HMAC API。新的代码将在 Python 3.10 中使用,在纯 Python HMAC 模块的内部实现细节不再作为公共 API 的一部分之后。bpo-40637: 现在可以通过
configure --with-builtin-hashlib-hashes=sha3,blake1或--without-builtin-hashlib-hashes禁用或有选择地启用内置哈希模块。bpo-37630:
hashlib模块现在可以在可用时使用 OpenSSL 的 SHA3 哈希和 SHAKE XOF。bpo-40257: 恢复对
inspect.getdoc()的更改。bpo-40607: 当由于超时取消任务时,
asyncio.wait_for()现在会在取消过程中发生错误时传播异常。由 Roman Skurikhin 提供补丁。bpo-40612: 修复了 SyntaxError 格式化中的边缘情况。如果偏移量 <= 0,则不打印插入符号。如果偏移量 > 行长度,则打印指向最后一个字符之后的插入符号。
bpo-40597: 如果文本内容行比 policy.max_line_length 长,则始终使用内容编码以确保它们被换行。
bpo-40571: 添加了 functools.cache() 作为访问 lru_cache(maxsize=None) 的无界缓存变体的更简单、更易发现的方式。
bpo-40397: 从特殊泛型别名如
typing.List(未下标) 中移除了属性__args__和__parameters__。bpo-40549: 将 posixmodule.c("posix" 或 "nt" 模块)转换为多阶段初始化(PEP 489)。
bpo-31033: 向
Future.cancel()和Task.cancel()添加了一个msg参数。bpo-40541: 向 random.sample() 添加了一个可选的 counts 参数。
bpo-40515:
ssl和hashlib模块现在主动检查 OpenSSL 是否构建了线程支持。Python 3.7.0 使线程支持成为强制性要求,不再安全地工作于无线程构建。bpo-31033: 当一个
asyncio.Task被取消时,异常回溯现在一直链接回任务首次被中断的地方。bpo-40504:
functools.lru_cache()对象现在可以是弱引用的目标。bpo-40559: 修复了
asyncio.Task的 C 实现中可能的内存泄漏。bpo-40480:
fnmatch.fnmatch()在存在多个*模式字符时可能花费指数时间。通过生成更复杂的正则表达式来避免无用的回溯,修复了这一问题。bpo-40495:
compileall现在能够使用硬链接来防止在不同优化级别的.pyc文件内容相同的情况下产生重复。bpo-40457: ssl 模块现在支持不包含 TLS 1.0 和 1.1 方法的 OpenSSL 构建。
bpo-40355: 在存在格式错误的
ast.Dict节点时,改进ast.literal_eval()的错误报告,而不是静默忽略任何不符合要求的元素。由 Curtis Bucher 提供补丁。bpo-40465: 弃用了 random.shuffle() 的可选 random 参数。
bpo-40459:
platform.win32_ver()现在生成正确的 ptype 字符串而不是空字符串。bpo-39435:
pickle.loads()的第一个参数现在是仅位置参数。bpo-39305: 更新
nntplib以合并nntplib.NNTP和nntplib._NNTPBase。由 Donghee Na 提供补丁。bpo-32494: 更新
dbm.gnu在调用len()时尽可能使用 gdbm_count。由 Donghee Na 提供补丁。bpo-40453: 添加
isolated=True关键字参数到_xxsubinterpreters.create()。一个孤立的子解释器不能生成线程、生成子进程或调用os.fork()。bpo-40286: 移除
_random.Random.randbytes():randbytes()的 C 实现。为实现子类化,该方法现在直接在 Python 中实现:randbytes()现在直接重用getrandbits()。bpo-40394: 为
difflib.SequenceMatcher.find_longest_match()添加了默认参数。bpo-39995: 修复 concurrent.futures._ThreadWakeup 中的竞争条件:现在对 _ThreadWakeup 的访问受到关闭锁的保护。
bpo-30966:
concurrent.futures的Process.shutdown(wait=True)现在显式关闭结果队列。bpo-30966: 为
SimpleQueue类添加一个新的close()方法以显式关闭队列。bpo-39966: 撤销 bpo-25597。设置了 wraps 的
unittest.mock.MagicMock对魔术方法使用默认返回值。bpo-39791: 向 importlib.resources 添加了
files()函数,支持包数据中的子目录,与 importlib_resources 1.5 中的回传匹配。bpo-40375: 添加了
imaplib.IMAP4.unselect()。由 Donghee Na 提供补丁。bpo-40389:
repr()现在当被调用于typing.Union两个类型之一为NoneType时返回typing.Optional[T]。bpo-40291: 添加对 CAN_J1939 套接字的支持(Linux 5.4+ 可用)
bpo-40273:
types.MappingProxyType现在是可逆的。bpo-39075:
types.SimpleNamespace的 repr 现在是插入顺序而非字母顺序。bpo-40192: 在AIX上,
thread_time()现在通过具有纳秒级分辨率的``thread_cputime()``实现,而非之前具有10毫秒分辨率的``clock_gettime(CLOCK_THREAD_CPUTIME_ID)``。由Batuhan Taskaya提供补丁。bpo-40025: 当_generate_next_value_在成员之后定义时,抛出TypeError。由Ethan Onstott提供补丁。
bpo-39058: 在argparse模块中,Namespace()和其他参数持有者的repr现在按照属性添加的顺序显示。以前,尽管模块的用户可见部分保留了参数顺序,但它是按字母顺序显示的。
bpo-24416:
datetime.date和datetime.datetime的isocalendar()方法现在返回一个 named tuple 而不是tuple。
文档¶
bpo-34790: 在
asyncio.wait()的文档中添加了显式传递coros的移除版本说明。bpo-40561: 为webbrowser的open函数提供文档字符串。
bpo-40499: 提到
asyncio.wait()需要一个非空的awaitables集合。bpo-39705: 在循环技术部分,为sorted()的教程示例提供了更好的解释。还包括一个新示例来解释sorted()的基本行为。
bpo-39435: 修正了文档中
pickle.loads()的错误签名。
测试¶
构建¶
Windows¶
macOS¶
工具/示例¶
C API¶
bpo-39465: 从C API中移除
_PyUnicode_ClearStaticStrings()函数。bpo-38787: 添加PyCFunction_CheckExact()宏用于精确类型检查,现在我们允许PyCFunction的子类型,以及PyCMethod_CheckExact()和PyCMethod_Check()用于新的PyCMethod子类型。
bpo-40545: 使用
PyAPI_FUNC()声明_PyErr_GetTopmostException()以在C API中正确导出函数。该函数保持私有(``_Py``前缀)。bpo-40412: 在最终化期间将inittab_copy置空,防止在嵌入式情况下未来的解释器初始化崩溃。由Gregory Szorc提供补丁。
bpo-40429:
PyThreadState_GetFrame()函数现在返回一个对帧的强引用。bpo-40428: 从C API中移除以下函数。显式调用
PyGC_Collect()以释放所有自由列表。PyAsyncGen_ClearFreeLists()PyContext_ClearFreeList()PyDict_ClearFreeList()PyFloat_ClearFreeList()PyFrame_ClearFreeList()PyList_ClearFreeList()PySet_ClearFreeList()PyTuple_ClearFreeList()
bpo-40421: 新增
PyFrame_GetBack()函数:获取外层框架的下一个框架。bpo-40421: 新增
PyFrame_GetCode()函数:返回框架代码的一个借用引用。bpo-40217: 确保使用
PyType_FromSpecWithBases()创建的类型实例在垃圾收集器中遍历引用时会访问其类对象(作为提供的tp_traverse的扩展实现)。由 Pablo Galindo 提供补丁。bpo-38787: 现在可以从C定义的堆类型方法访问模块C状态(PEP 573)。由 Marcel Plch 和 Petr Viktorin 提供补丁。
Python 3.9.0 alpha 6¶
发布日期: 2020-04-27
安全性¶
bpo-40121: 修复了在创建新套接字时引发的审计事件。
bpo-39073: 禁止在 email.headerregistry.Address 参数中使用 CR 或 LF,以防止头部注入攻击。
bpo-39503: CVE 2020-8492:
urllib.request模块的AbstractBasicAuthHandler类使用了一个低效的正则表达式,攻击者可以利用此漏洞导致拒绝服务。修复正则表达式以防止灾难性回溯。漏洞由 Ben Caller 和 Matt Schwager 报告。
核心与内置函数¶
bpo-40313: 提高 bytes.hex() 的性能。
bpo-40334: 切换到基于 PEG 的新解析器。更多详情见 PEP 617。要暂时切换回旧解析器,使用
-X oldparser或PYTHONOLDPARSER=1。在 Python 3.10 中,我们将完全移除旧解析器,包括parser模块(已弃用)以及依赖于它的任何内容。bpo-40267: 修复了分词器以显示正确的错误消息,当最后一个输入字符上有
SyntaxError且没有换行符时。过去显示的是unexpected EOF while parsing,而应该是invalid syntax。bpo-39522: 当激活注释的延迟评估时,正确反解析字符串的显式
u前缀。由 Batuhan Taskaya 提供补丁。bpo-40246: 当标记器遇到带有无效前缀的字符串时,报告专门的错误消息“无效字符串前缀”。
bpo-40082: 修复信号处理程序:现在总是使用主解释器,而不是尝试获取当前的Python线程状态。
bpo-37388: str.encode()和str.decode()在开发模式或Python终止期间的调试模式下不再检查编码和错误。编解码器机制在非常晚调用str.encode()和str.decode()时不再工作。
bpo-40077: 修复
_json中可能的反射泄漏,应遍历PyScannerObject的备忘录。bpo-40141: 向“ast.keyword”节点添加列和行信息。由Pablo Galindo提供补丁。
bpo-1635741: 将
resource移植到多阶段初始化(PEP 489)。bpo-1635741: 将
math移植到多阶段初始化(PEP 489)。bpo-1635741: 将_uuid模块移植到多阶段初始化(PEP 489)。
bpo-40077: 将json模块转换为使用
PyType_FromSpec()。bpo-40067: 改进赋值中多个星号表达式的错误消息。由Furkan Onder提供补丁。
bpo-1635741: 将_functools模块移植到多阶段初始化(PEP 489)。由Paulo Henrique Silva提供补丁。
bpo-1635741: 将operator模块移植到多阶段初始化(PEP 489)。由Paulo Henrique Silva提供补丁。
bpo-20526: 修复
PyThreadState_Clear()。“PyThreadState.frame”是一个借用引用,不是强引用:“PyThreadState_Clear()”不能调用“Py_CLEAR(tstate->frame)”。bpo-1635741: 将time模块移植到多阶段初始化(PEP 489)。由Paulo Henrique Silva提供补丁。
bpo-1635741: 将_weakref扩展模块移植到多阶段初始化(PEP 489)。
bpo-40020: 修复parsetok.c中由于在罕见代码路径上错误使用realloc导致的泄漏和随后的崩溃。
bpo-39939: 添加了str.removeprefix和str.removesuffix方法以及相应的bytes、bytearray和collections.UserString方法,用于移除字符串中可能存在的前缀和后缀。完整描述请参见 PEP 616。由Dennis Sweeney提供补丁。
bpo-39481: 实现了PEP 585。这支持了list[int]、tuple[str, ...]等类型注解。
bpo-32894: 支持在延迟注解中解析无穷大数。由Batuhan Taşkaya提供补丁。
bpo-37207: 通过使用 PEP 590
vectorcall调用约定,加快了对list()的调用速度。由Mark Shannon提供补丁。
库¶
bpo-40398:
typing.get_args()现在对于特殊的通用别名总是返回一个空元组。bpo-40396: 函数
typing.get_origin()、typing.get_args()和typing.get_type_hints()现在支持如list[int]这样的通用别名。bpo-38061: 在FreeBSD上使用
closefrom()优化了subprocess模块。单个close(fd)系统调用是廉价的,但当sysconf(_SC_OPEN_MAX)很高时,循环调用close(fd)在每个文件描述符上可能会花费几毫秒。在FreeBSD上提高性能的解决方法是加载并挂载fdescfs内核模块,但默认情况下未启用此功能。
初始由Ed Maste (emaste)、Conrad Meyer (cem)、Kyle Evans (kevans) 和 Kubilay Kocak (koobs) 提供补丁:https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274
bpo-38061: 在FreeBSD上,
os.closerange(fd_low, fd_high)现在如果 fd_high 大于或等于sysconf(_SC_OPEN_MAX)则调用closefrom(fd_low)。初始由Ed Maste (emaste)、Conrad Meyer (cem)、Kyle Evans (kevans) 和 Kubilay Kocak (koobs) 提供补丁:https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274
bpo-40138: 修复了
os.waitpid()在Windows上对于退出码大于INT_MAX >> 8的实现。退出状态现在被解释为一个无符号数。bpo-39942: 当
typing.TypeVar中缺少 "__name__" 时,将 "__main__" 设置为默认模块名。由Weipeng Hong提供补丁。bpo-40275: 现在,
logging包在unittest中仅当使用assertLogs()断言时才会被延迟导入。bpo-40275: 现在,
asyncio包在unittest中仅当使用IsolatedAsyncioTestCase类时才会被延迟导入。bpo-40330: 在
ShareableList.__setitem__()中,检查新字符串项的大小是在将其编码为 utf-8 之后,而不是之前。bpo-40148: 新增了
pathlib.Path.with_stem()方法来创建一个新路径,其中 stem 被替换。bpo-40325: 弃用了在 random.sample() 中对集合对象的支持。
bpo-40257: 改进了
typing模块的帮助信息。现在所有特殊形式和特殊泛型别名(如Union和List)的文档字符串都会被显示。使用help()查看像List[int]这样的泛型别名时,会显示相应具体类型(在这个例子中是list)的帮助信息。bpo-40257:
inspect.getdoc()不再返回从对象类型或父类继承的文档字符串,如果这些文档字符串不是在对象本身定义的。在pydoc中,现在不仅对类、函数、方法等显示文档字符串,对任何拥有自己的__doc__属性的对象也会显示。bpo-40287: 修复了
SpooledTemporaryFile.seek()返回位置的问题。bpo-40290: 在 statistics.NormalDist() 中添加了 zscore() 方法。
bpo-40282: 允许
random.getrandbits(0)成功执行并返回 0。bpo-40286: 新增了
random.randbytes()函数和random.Random.randbytes()方法来生成随机字节。bpo-40277:
collections.namedtuple()现在为其字段访问器提供了一个人类可读的 repr。bpo-40270: 现在 Windows 上包含的 sqlite3 编译时带有 json 扩展。这使得可以使用诸如
json_object这样的函数。bpo-29255: 在
KqueueSelector.select中,当没有注册的 fds 时等待。bpo-40260: 确保
modulefinder使用io.open_code()并遵守编码注释。bpo-40234: 再次允许在子解释器中生成守护线程(撤销之前禁止它们的更改)。
bpo-39207: 现在
ProcessPoolExecutor中的工作器是按需生成的,只有在没有可用的空闲工作器可以重用时才会生成。这优化了启动开销并减少了因空闲工作器而损失的CPU时间。由Kyle Stanley提供补丁。bpo-40091: 修复了日志模块中的fork挂起问题:现在使用新的私有方法 _at_fork_reinit() 在子进程中fork时重新初始化锁。
bpo-40149: 在 _abc._abc_data 类型中实现了遍历和清除槽。
bpo-40208: 移除了已弃用的
symtable.SymbolTable.has_exec()。bpo-40196: 修复了
symtable模块中的一个错误,该错误导致错误地将全局变量报告为局部变量。由Pablo Galindo提供补丁。bpo-40190: 向
posix.sysconf()添加了对_SC_AIX_REALMEM的支持。bpo-40182: 移除了
typing.NamedTuple类的_field_types属性。bpo-36517: 现在使用
typing.NamedTuple进行多重继承时会引发错误,而不是静默忽略其他类型。bpo-40126: 修复了在unittest.mock中还原多个补丁的问题。如果补丁的
__enter__()失败,其__exit__()现在永远不会被调用。现在从__exit__()返回true会静默异常。bpo-40094: http.server的CGIHTTPRequestHandler现在记录CGI脚本的退出代码,而不是os.waitpid()的CGI脚本退出状态。例如,如果脚本被信号11杀死,现在会记录:“CGI脚本退出代码 -11。”
bpo-40108: 当尝试使用
runpy导入模块并在模块名称末尾错误地使用“.py”扩展名时,改进了错误消息。由Pablo Galindo提供补丁。bpo-40094: 添加了
os.waitstatus_to_exitcode()函数:将等待状态转换为退出代码。bpo-40089: 修复 threading._after_fork(): 如果 fork 不是由 threading.Thread 生成的线程调用的,threading._after_fork() 现在会为 _main_thread 创建一个 _MainThread 实例,而不是 _DummyThread 实例。
bpo-40089: 为
_thread.Lock、_thread.RLock、threading.RLock和threading.Condition类添加一个私有的_at_fork_reinit()方法:在子进程的 fork 时重新初始化锁,将锁重置为未锁定状态。同时将threading.Event的私有方法_reset_internal_locks()重命名为_at_fork_reinit()。bpo-25780: 在
socket模块中公开CAN_RAW_JOIN_FILTERS。bpo-39503:
urllib.request的AbstractBasicAuthHandler现在解析所有 WWW-Authenticate HTTP 头部,并接受每个头部多个挑战:使用第一个 Basic 挑战的领域。bpo-39812: 通过添加一个内部的
threading._register_atexit(),从concurrent.futures中移除了守护线程,该函数在加入所有非守护线程之前调用注册的函数。这允许与不支持守护线程的子解释器兼容。bpo-40050: 修复
importlib._bootstrap_external: 如果winreg内置模块已经在sys.modules中可用,避免创建新的winreg内置模块,并移除冗余导入。bpo-40014: 修复
os.getgrouplist(): 如果getgrouplist()函数因为组列表太小而失败,尝试使用更大的组列表。在失败时,glibc 实现的getgrouplist()将ngroups设置为组的总数。对于其他实现,将组列表大小加倍。bpo-40017: 如果操作系统支持,添加
time.CLOCK_TAI常量。bpo-40016: 在 re 文档字符串中,阐明内联和参数编译标志之间的关系。
bpo-39953: 更新
ssl模块中 OpenSSL 错误代码的内部表。bpo-36144: 在
weakref.WeakValueDictionary中添加了 PEP 584 运算符。bpo-36144: 在
weakref.WeakKeyDictionary中添加了 PEP 584 运算符。bpo-38891: 修复了
multiprocessing.shared_memory.ShareableList中__getitem__和__setitem__方法的线性运行时行为。这避免了在迭代ShareableList时的二次性能问题。由 Thomas Krennwallner 提供补丁。bpo-39682: 移除了通过上下文管理器*关闭*
pathlib.Path对象的未文档化支持。上下文管理器的魔术方法仍然保留,但它们现在是无操作的,使得Path对象不可变。bpo-36144: 在
collections.ChainMap中添加了 PEP 584 运算符(|和|=)。bpo-39011: 移除了 ElementTree 属性中的行尾规范化,因为被实体编号替换的行尾应保留其原始形式。
bpo-38410: 在
sys.set_asyncgen_hooks()中正确处理sys.audit()失败。bpo-36541: lib2to3 现在可以识别命名赋值表达式(海象运算符,
:=)。bpo-35967: 在平台中,延迟调用 'uname -p' 直到请求处理器属性。
bpo-35113:
inspect.getsource()现在为与模块级别类同名的内部类返回正确的源代码。装饰器也作为类源代码的一部分返回。由 Karthikeyan Singaravelan 提供补丁。bpo-33262: 弃用将 None 作为
shlex.split()的s参数传递。由 Zackery Spytz 提供补丁。bpo-31758: 防止使用未初始化的
_elementtree.XMLParser对象时崩溃。由 Oren Milman 提供补丁。
文档¶
测试¶
bpo-31904: 在 test_c_locale_coercion.py 中为 VxWorks RTOS 设置预期的默认编码。
bpo-40162: 更新 Travis CI 配置至 OpenSSL 1.1.1f。
bpo-40146: 在 Azure Pipelines 中更新 OpenSSL 至 1.1.1f。
bpo-40094: 添加
test.support.wait_process()函数。bpo-40003:
test.bisect_cmd现在会复制 Python 命令行选项如-O或-W。此外,如果test.bisect_cmd与-w/--verbose2选项一起使用,会发出警告。bpo-39380: 将编码作为仅关键字参数添加至
ftplib.FTP和ftplib.FTP_TLS的构造函数中,并将默认编码从latin-1更改为utf-8以遵循 RFC 2640。bpo-39793: 在测试
make_msgid时使用相同的域。由 Batuhan Taskaya 提供补丁。bpo-1812: 修复了在从具有 get_data 方法的包加载时,doctest.testfile 中的新行处理。由 Peter Donis 提供补丁。
构建¶
Windows¶
macOS¶
IDLE¶
工具/示例¶
bpo-40385: 移除了checkpyc.py工具。请考虑使用不带force模式的compileall作为潜在替代方案。
bpo-40179: 修复了Argument Clinic中
#elif的翻译问题。bpo-40094: 修复了
which.py脚本的退出码:现在使用os.waitstatus_to_exitcode()将os.system()的退出状态转换为退出码。
C API¶
bpo-40241: 将
PyGC_Head结构移至内部C API。bpo-40170: 将
PyObject_IS_GC()宏转换为函数以隐藏实现细节。bpo-40241: 向公共API添加函数
PyObject_GC_IsTracked()和PyObject_GC_IsFinalized(),以分别查询Python对象是否正在被跟踪或已经被垃圾收集器终结。由Pablo Galindo提供补丁。bpo-40170:
PyObject_NEW()宏成为PyObject_New()宏的别名,PyObject_NEW_VAR()宏成为PyObject_NewVar()宏的别名,以隐藏实现细节。它们不再直接访问PyTypeObject.tp_basicsize成员。bpo-40170:
PyType_HasFeature()现在总是调用PyType_GetFlags()以隐藏实现细节。以前,当不使用有限C API时,它直接访问PyTypeObject.tp_flags成员。bpo-40170: 将
PyObject_GET_WEAKREFS_LISTPTR()宏转换为函数以隐藏实现细节:该宏直接访问PyTypeObject.tp_weaklistoffset成员。bpo-40170: 将
PyObject_CheckBuffer()宏转换为函数以隐藏实现细节:该宏直接访问PyTypeObject.tp_as_buffer成员。bpo-40170: 始终将
PyIndex_Check()声明为不透明函数以隐藏实现细节:移除PyIndex_Check()宏。该宏直接访问了PyTypeObject.tp_as_number成员。bpo-39947: 添加
PyThreadState_GetID()函数:获取 Python 线程状态的唯一标识符。
Python 3.9.0 alpha 5¶
发布日期: 2020-03-23
安全性¶
bpo-38576: 在 http.client 中禁止主机名中的控制字符,解决 CVE 2019-18348。此类潜在的恶意头部注入 URL 现在会引发 InvalidURL。
核心与内置函数¶
bpo-40010: 优化多线程应用中的待处理调用。如果非主线程调度了一个待处理调用(
Py_AddPendingCall()),字节码评估循环不再在每条字节码指令处中断以检查无法执行的待处理调用。只有主线程可以执行待处理调用。此前,字节码评估循环在每条指令处中断,直到主线程执行待处理调用。
bpo-1635741: 将_weakref扩展模块移植到多阶段初始化(PEP 489)。
bpo-1635741: 将 _collections 模块移植到多阶段初始化(PEP 489)。
bpo-40010: 优化多线程应用中的信号处理。如果非主线程接收到信号,字节码评估循环不再在每条字节码指令处中断以检查无法处理的待处理信号。只有主解释器的主线程可以处理信号。
此前,字节码评估循环在每条指令处中断,直到主线程处理信号。
bpo-39984: 如果在子解释器中调用
Py_AddPendingCall(),现在该函数将被安排从子解释器调用,而不是从主解释器调用。每个子解释器现在都有自己预定的调用列表。bpo-1635741: 将 _heapq 模块移植到多阶段初始化。
bpo-1635741: 将 itertools 模块移植到多阶段初始化(PEP 489)。
bpo-37207: 通过使用 PEP 590
vectorcall调用约定,加速对frozenset()的调用。由 Donghee Na 提供补丁。bpo-39984: 子解释器:将
_PyRuntimeState.ceval.tracing_possible移动到PyInterpreterState.ceval.tracing_possible:每个解释器现在拥有自己的变量。bpo-37207: 通过使用 PEP 590
vectorcall调用约定,加速对set()的调用。补丁由 Donghee Na 提供。bpo-1635741: 将 _statistics 模块移植到多阶段初始化 (PEP 489)。
bpo-39968: 使用内联函数替换扩展模块的 get_module_state 宏。
bpo-39965: 如果在非异步函数内部使用 await 并且设置了
PyCF_ALLOW_TOP_LEVEL_AWAIT``(如在 asyncio REPL 中),则正确引发 ``SyntaxError。由 Pablo Galindo 提供补丁。bpo-39562: 当给定
PyCF_ALLOW_TOP_LEVEL_AWAIT标志时,允许在顶层执行异步推导式。补丁由 Batuhan Taskaya 提供。bpo-37207: 通过使用 PEP 590
vectorcall调用约定,加速对tuple()的调用。补丁由 Donghee Na 提供。bpo-38373: 更改了列表的超额分配策略。如果新大小更接近超额分配的大小而不是旧大小,并且添加了填充,则不再进行超额分配。
bpo-39926: 将 Unicode 数据库更新到 Unicode 版本 13.0.0。
bpo-19466: 在 Python 关闭期间更早地清除守护线程的帧以调用对象析构函数。因此,现在可以更可靠地为守护线程发出“未关闭文件”资源警告。
bpo-38894: 修复了一个错误,该错误在存在指向用户没有读取权限的文件的符号链接时,调用
pathlib.Path.glob会导致结果不完整。由 Pablo Galindo 和 Matt Wozniski 提供补丁。bpo-39877: 修复
PyEval_RestoreThread()在退出时由于守护线程导致的随机崩溃问题。现在直接访问_PyRuntime变量,而不是使用tstate->interp->runtime,因为在调用Py_Finalize()后tstate可能成为悬垂指针。此外,守护线程现在在尝试获取 GIL 之前退出。bpo-39871: 修复
math.{atan2,copysign,remainder}()中当第一个参数无法转换为float时可能出现的SystemError。由 Zackery Spytz 提供补丁。bpo-39776: 修复由 PyGILState_Ensure() 创建的线程可能获得重复 ID 的竞态条件。
这影响了像 contextvar 缓存机制这样的 tstate->id 的消费者,在高线程负载下(在嵌入场景中观察到)可能返回无效的缓存对象。
bpo-39778: 修复了由于
collections.OrderedDict类中弱引用处理不当导致的崩溃。补丁由 Pablo Galindo 提供。bpo-1635741: 将 audioop 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-38091: 调整导入死锁检测代码以避免自身死锁。
bpo-1635741: 将 _locale 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-39087: 在需要创建内部 UTF-8 缓存时,轻微优化
PyUnicode_AsUTF8()和PyUnicode_AsUTF8AndSize()。bpo-39520: 修复无项的外部切片(
foo[:,])的反解析问题。补丁由 Batuhan Taskaya 提供。bpo-39220: 如果使用了 'from __future__ import annotations',则不优化注释。由 Pablo Galindo 提供补丁。
bpo-35712: 在布尔上下文中使用
NotImplemented已被弃用。补丁由 Josh Rosenberg 贡献。bpo-22490: 在 macOS 上,不将环境变量
__PYVENV_LAUNCHER__泄漏到解释器会话中。
库¶
bpo-39830: 在
zipfile模块的__all__中添加zipfile.Path。bpo-40000: 改进了对
ast.Constant节点验证的错误消息。由 Batuhan Taskaya 提供补丁。bpo-39999: AST 节点类的
__module__现在设置为 "ast" 而不是 "_ast"。为虚拟 AST 节点类和弃用的属性添加了文档字符串。bpo-39991:
uuid.getnode()现在跳过与 MAC 地址相同字符串长度(17个字符)的 IPv6 地址:仅使用 MAC 地址。bpo-39988: 弃用了
ast.AugLoad和ast.AugStore节点类,因为它们不再被使用。bpo-39656: 确保在 POSIX 平台的虚拟环境中始终存在
bin/python3.#- 由 Anthony Sottile 提供。bpo-39969: 弃用了
ast.Param节点类,因为它不再被使用。由 Batuhan Taskaya 提供补丁。bpo-39360: 确保所有工作线程在通过多处理模块的最终化处理程序隐式完成
multiprocessing.Pool时退出。这修复了当 Pool 没有通过上下文管理器或调用multiprocessing.Pool.terminate正确完成时可能遇到的死锁情况。由 Batuhan Taskaya 和 Pablo Galindo 提供补丁。bpo-35370: sys.settrace()、sys.setprofile() 和 _lsprof.Profiler.enable() 现在如果 "sys.setprofile" 或 "sys.settrace" 审计事件被拒绝,会正确报告
PySys_Audit()错误。bpo-39936: AIX:在从头构建 Python 时,修复了当子进程不可用时的 _aix_support 模块。现在它使用新的私有 _bootsubprocess 模块,而不是根据子进程是否可用有两个实现。因此,_aix_support.aix_platform() 的结果现在在子进程是否可用时是相同的。
bpo-36144:
collections.OrderedDict现在实现了|和|=(PEP 584)。bpo-39652: 在
sqlite3.Cursor.description中找到的列名现在仅在设置了 PARSE_COLNAMES 选项时在第一个 '[' 处截断。bpo-39915: 确保
unittest.mock.AsyncMock.await_args_list中的调用对象按照等待参数的顺序排列,而不是使用unittest.mock.Mock.call_args,后者具有调用的最后一个值。由 Karthikeyan Singaravelan 提供补丁。bpo-36144: 更新了
os.environ和os.environb以支持 PEP 584 的合并(|)和更新(|=)操作符。bpo-38662:
ensurepip模块现在通过runpy模块调用pip。因此,它不再与捆绑的pip版本的内部 API 紧密耦合,使得内部和分发者都更容易更新到新版本的pip。bpo-38075: 修复了当
bool作为种子传递时random.Random.seed()方法的问题。bpo-39916: 在
Path.glob()中更可靠地使用os.scandir()。当被中断时,它不再发出 ResourceWarning。bpo-39850:
multiprocessing现在支持抽象套接字地址(如果运行的平台支持抽象套接字)。在创建任意地址时(如默认构造multiprocessing.connection.Listener对象时),优先选择抽象套接字以避免临时文件生成的地址对于 AF_UNIX 套接字地址来说过大的情况。由 Pablo Galindo 提供补丁。bpo-36287:
ast.dump()不再输出具有默认值的可选字段和属性。AST 节点的可选字段和属性的默认值现在设置为类属性(例如,Constant.kind设置为None)。bpo-39889: 修复了
ast.unparse()对于包含单个元素的扩展切片(例如a[i:j,])的问题。当使用元组索引时(例如a[i, j]),移除冗余的元组。bpo-39828: 修复
json.tool以捕获BrokenPipeError。由 Donghee Na 提供补丁。bpo-13487: 避免了当
inspect.getmodule()尝试遍历sys.modules时可能出现的 "RuntimeError: dictionary changed size during iteration"。bpo-39674: 恢复 "bpo-37330: open() 不再接受文件模式中的 'U'"。为了便于从 Python 2.7 过渡,Python 3.9 中保留了 open() 的 "U" 模式,但将在 Python 3.10 中移除。
bpo-28577: 32位前缀长度的 IPv4Networks 和 128位前缀的 IPv6Networks 的 hosts 方法现在返回包含单个 Address 的列表,而不是空列表。
bpo-39826: 向 logging HTTPHandler 添加 getConnection 方法,以启用自定义连接。
bpo-39763: 使用
subprocess模块重新实现distutils.spawn.spawn函数。bpo-39794: 添加 --without-decimal-contextvar 构建选项。这启用了线程本地而非协程本地的上下文。
bpo-36144:
collections.defaultdict现在实现了|操作符 (PEP 584)。bpo-39517: 修复 runpy.run_path() 在使用路径类对象时的问题。
bpo-39775: 将
inspect.Signature.parameters改回collections.OrderedDict。在 Python 3.9.0a4 中,这被改为dict。bpo-39678: 重构
concurrent.futures.ProcessPoolExecutor中的 queue_manager,使其更易于维护。bpo-39764: 修复在 PyAsyncGenObject Task 上调用 get_stack 时的 AttributeError。
bpo-39769:
compileall.compile_dir()函数的 ddir 参数和 compileall 命令行标志-d不再为正在编译的目录树根下的子模块生成错误的路径名到 pyc 文件中。这修复了自 Python 3.5 引入的回归问题。bpo-36144:
types.MappingProxyType对象现在支持来自 PEP 584 的合并 (|) 操作符。bpo-38691: 当使用
-E或-I命令行选项时,importlib模块现在忽略PYTHONCASEOK环境变量。bpo-39719: 移除
tempfile.SpooledTemporaryFile.softspace(),因为文件在 Python 3 中不再有softspace属性。由 Shantanu 提供补丁。bpo-39667: 提升zipfile.Path与pathlib.Path的兼容性,并修复zipp 3.0中发现的性能下降问题。
bpo-39638: 保留
AST节点文档字符串中的ASDL签名。由Batuhan Taskaya提供补丁。bpo-39639: 弃用
ast.Suite节点类,因为它不再被使用。由Batuhan Taskaya提供补丁。bpo-39609: 向默认的asyncio执行器添加thread_name_prefix。
bpo-39548: 修复
urllib.request.AbstractDigestAuthHandler中当可选参数qop不存在时的头部处理问题。bpo-39509: HTTP状态码
103 EARLY_HINTS和425 TOO_EARLY被添加到http.HTTPStatus中。由Donghee Na提供补丁。bpo-39507: 向http库的HTTPStatus添加HTTP状态418 "I'm a Teapot"。由Ross Rhodes提供补丁。
bpo-39495: 为保持Python和C实现之间的一致性,移除
xml.etree.ElementTree.TreeBuilder.start()中 attrs 参数的默认值。bpo-38971: BPO中的开放问题表明希望使codecs.open()的实现与io.open()保持一致,后者实现了try/except以确保在引发异常之前关闭文件流。
bpo-38641: 向
lib2to3``添加了对 ``return和yield语句中星号表达式的支持。由Vlad Emelianov提供补丁。bpo-37534: 使用minidom模块生成XML文档时,增加了添加独立文档声明的能力。所有更改均旨在生成符合可扩展标记语言(XML)1.0(第五版)W3C推荐标准的文档(参见:https://www.w3.org/TR/xml/#sec-prolog-dtd)。
bpo-34788: 为
ipaddress添加对范围限定IPv6地址的支持。由Oleksandr Pavliuk提供补丁。bpo-34822: 简化了订阅的AST。简单索引现在由其值表示,扩展切片表示为元组。
ast类Index和ExtSlice被认为已弃用,将在未来的Python版本中移除。在此期间,Index(value)现在返回value本身,ExtSlice(slices)返回Tuple(slices, Load())。
文档¶
测试¶
构建¶
bpo-39761: 修复了在没有额外DFLAGS的情况下使用DTrace构建的问题。
bpo-39763: 如果
subprocess模块不可用,setup.py 现在使用subprocess模块的基本实现:在构建所需的C扩展模块之前。bpo-1294959: 在配置脚本中添加
--with-platlibdir选项:平台特定的库目录名称,存储在新的sys.platlibdir属性中。它用于构建平台特定的扩展模块路径和标准库路径。在大多数平台上,它等于"lib"。在 Fedora 和 SuSE 上,64位平台上它等于"lib64"。补丁由 Jan Matějek、Matěj Cepl、Charalampos Stratakis 和 Victor Stinner 提供。
Windows¶
bpo-39930: 确保安装包中包含所需的
vcruntime140.dll。bpo-39847: 避免在计算机休眠时等待互斥锁(用于来自
threading的锁相关对象)时挂起,大约49天的运行时间。bpo-38597: 当不可再发行的版本不可用时,
distutils将不再静态链接vcruntime140.dll。CPython 的所有未来版本都将包含此 DLL 的副本,以确保分发的扩展可以继续加载。bpo-38380: 更新 Windows 构建以使用 SQLite 3.31.1。
bpo-39789: 更新 Windows 发布构建机器到 Visual Studio 2019 (MSVC 14.2)。
bpo-34803: 现在为 nuget.org 提供的包包括存储库引用和捆绑的图标图像。
macOS¶
bpo-38380: 更新 macOS 构建以使用 SQLite 3.31.1。
IDLE¶
工具/示例¶
C API¶
bpo-40024: 添加
PyModule_AddType()辅助函数:将类型添加到模块。由 Donghee Na 提供补丁。bpo-39946: 移除
_PyRuntime.getframe钩子并移除作为_PyRuntime.getframe别名的_PyThreadState_GetFrame宏。它们仅由内部 C API 暴露。同时移除PyThreadFrameGetter类型。bpo-39947: 添加
PyThreadState_GetFrame()函数:获取 Python 线程状态的当前帧。bpo-37207: 添加 _PyArg_NoKwnames 辅助函数。由 Donghee Na 提供补丁。
bpo-39947: 添加
PyThreadState_GetInterpreter():获取 Python 线程状态的解释器。bpo-39947: 将
PyInterpreterState_Get()函数添加到有限的 C API 中。bpo-35370: 如果在
PyEval_SetProfile()或PyEval_SetTrace()中PySys_Audit()失败,将错误记录为不可引发的异常。bpo-39947: 将 Py_EnterRecursiveCall() 和 Py_LeaveRecursiveCall() 的静态内联函数版本移至内部 C API:它们访问 PyThreadState 属性。有限的 C API 提供了隐藏实现细节的常规函数。
bpo-39947: Py_TRASHCAN_BEGIN_CONDITION 和 Py_TRASHCAN_END 宏不再访问 PyThreadState 属性,而是调用新的私有 _PyTrash_begin() 和 _PyTrash_end() 函数,这些函数隐藏了实现细节。
bpo-39884:
PyDescr_NewMethod()和PyCFunction_NewEx()现在在 SystemError "bad call flags" 错误消息中包含方法名称,以方便调试。bpo-39877: 弃用
PyEval_InitThreads()和PyEval_ThreadsInitialized()。现在调用PyEval_InitThreads()不执行任何操作。bpo-38249:
Py_UNREACHABLE现在在发布模式下使用__builtin_unreachable()和类似实现。bpo-38643:
PyNumber_ToBase()现在在被调用时使用无效的基数会引发SystemError而不是崩溃。bpo-39882:
Py_FatalError()函数被一个宏替换,该宏自动记录当前函数的名称,除非定义了Py_LIMITED_API宏。bpo-39824: 扩展模块:如果模块状态被请求但尚未分配,
m_traverse、m_clear和m_free函数将不再被调用。这种情况发生在模块创建后立即和模块执行前(Py_mod_exec函数)。更准确地说,如果m_size大于 0 且模块状态(由PyModule_GetState()返回)为NULL,这些函数不会被调用。没有模块状态的扩展模块 (
m_size <= 0) 不会受到影响。bpo-38913: 修复了在设置了异常的情况下,使用包含 "#" 且未定义 PY_SSIZE_T_CLEAN 的格式调用
Py_BuildValue()时的段错误。bpo-38500: 添加了一个私有 API 来获取和设置帧评估函数:添加了
_PyInterpreterState_GetEvalFrameFunc()和_PyInterpreterState_SetEvalFrameFunc()C 函数。_PyFrameEvalFunction函数类型现在接受一个 tstate 参数。
Python 3.9.0 alpha 4¶
发布日期: 2020-02-25
安全性¶
核心与内置函数¶
bpo-39382: 修复了
issubclass()单继承路径中的一个释放后使用问题,当对象的__bases__有一个单一引用时,其第一个项目也是如此。由 Yonatan Goldschmidt 提供补丁。bpo-39573: 更新 clinic 工具以使用
Py_IS_TYPE()。由 Donghee Na 提供补丁。bpo-39619: 在 HP-UX 系统上启用
os.chroot()的使用。bpo-39573: 添加
Py_IS_TYPE()静态内联函数,用于检查对象 o 的类型是否为 type。bpo-39606: 修复由 bpo-39386 的修复引起的回归问题,该问题阻止了对已经关闭或耗尽的异步生成器调用
aclose。bpo-39579: 更改
ast_for_dotted_name中构造的Attribute节点的结束列偏移量,使其指向当前节点的末尾,而不是最后一个NAME节点的末尾。bpo-1635741: 将 _crypt 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-1635741: 将 _contextvars 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-39510: 修复在已关闭的 BufferedReader 上的
readinto()方法中的段错误。bpo-39502: 修复 64 位 AIX 上的
time.localtime(),以支持 1902 年之前和 2038 年之后的年份。由 M Felt 提供补丁。bpo-39492: 修复 C Pickler 中的一个引用循环,该循环阻止了被删除、腌制的对象的垃圾回收。
bpo-39453: 修复了
list.__contains__()中在比较项目时列表被更改可能导致的崩溃。由 Donghee Na 提供补丁。bpo-39434: floor division 浮点运算现在有更好的性能。同时,更新了此操作的
ZeroDivisionError消息。由 Donghee Na 提供补丁。bpo-1635741: 将 _codecs 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-1635741: 将 _bz2 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-1635741: 将 _abc 扩展模块移植到多阶段初始化 (PEP 489)。
bpo-39320: 用两个更简单的字节码替换构建字典的两个复杂字节码。添加了新的字节码
DICT_MERGE和DICT_UPDATE,移除了旧的字节码BUILD_MAP_UNPACK和BUILD_MAP_UNPACK_WITH_CALL。bpo-39219: 分词器中引发的语法错误现在总是设置正确的 "text" 和 "offset" 属性。
bpo-36051: 在大型
bytes.join操作期间释放 GIL。由 Bruce Merry 提供补丁。bpo-38960: 修复 FreeBSD 上的 DTrace 构建问题。由 David Carlier 提供补丁。
bpo-37207: 通过使用 PEP 590 的
vectorcall调用约定,将range()的调用速度提高约 30%。由 Mark Shannon 提供补丁。bpo-36144:
dict(和collections.UserDict) 对象现在支持 PEP 584 的合并(|)和更新(|=)操作符。由 Brandt Bucher 提供补丁。bpo-32856: 优化了在推导式中赋值临时变量的惯用法。现在在推导式中使用
for y in [expr]与简单赋值y = expr一样快。
库¶
bpo-30566: 修复尝试使用 punycode 编解码器解码无效字符串时的
IndexError。bpo-39649: 移除
bdb.Bdb.format_stack_entry中对__args__的过时检查。bpo-39648: 扩展
math.gcd()和math.lcm()以处理多个参数。bpo-39681: 修复一个回归问题,即 C pickle 模块不允许从没有暴露 readinto() 方法的类文件对象中反序列化。
bpo-35950: 在只读的
io.BufferedReader实例上调用io.BufferedReader.truncate()时抛出io.UnsupportedOperation。bpo-39479: 添加
math.lcm()函数:最小公倍数。bpo-39674: 撤销“不在 collections 模块中暴露抽象集合类”的更改(bpo-25988)。像 collections.Mapping 这样的 ABC 别名在 Python 3.9 中保留以方便从 Python 2.7 过渡,但将在 Python 3.10 中移除。
bpo-39104: 修复当任务序列化失败时
shutdown(wait=False)上的 ProcessPoolExecutor 挂起问题。bpo-39627: 修复了 TypedDict 对继承键的总体验证。
bpo-39474: 修复了像
(a)(b)、(a)[b]和(a).b这类表达式的 AST 起始位置。bpo-21016:
pydoc和trace模块现在使用sysconfig模块来获取 Python 标准库的路径,以支持像 Fedora 上的/usr/lib64/python3.9/这样的不常见安装路径。由 Jan Matějek 提供补丁。bpo-39590: Collections.deque 现在在 deque.__contains__ 和 deque.count 期间保持强引用,修复了崩溃问题。
bpo-39586: Python 3.9 中已弃用 distutils 的
bdist_msi命令,改用bdist_wheel(wheel 包) 。bpo-39595: 提高了 zipfile.Path 对于包含大量条目的文件的性能。同时提高了性能并修复了与 importlib_metadata 1.5 发布的小问题。
bpo-39350: 修复了
fractions.Fraction如果分子和/或分母是int子类时的回归问题。现在使用math.gcd()函数来规范化 分子 和 分母。math.gcd()总是返回int类型。以前,GCD 类型依赖于 分子 和 分母。bpo-39567: 为
os.walk()、os.fwalk()、pathlib.Path.glob()和pathlib.Path.rglob()添加了审计。bpo-39559: 从
uuid.getnode()中移除了未使用的、未记录的参数getters。bpo-38149: 现在每次调用
glob.glob()和glob.iglob()时,sys.audit()只被调用一次。bpo-39546: 修复了
ArgumentParser中的一个回归问题,其中allow_abbrev=False对于使用除 "-" 之外的前缀字符的长选项被忽略。bpo-39450: 在从
unittest.case.shortDescription()返回之前,去除了文档字符串中的空白。bpo-12915: 在
pkgutil模块中添加了一个新函数resolve_name。该函数将形如'a.b.c.d'或'a.b:c.d'的字符串解析为一个对象。在示例中,a.b是一个包/模块,而c.d是通过递归属性访问到达的该包/模块内的一个对象。bpo-39353:
binascii.crc_hqx()函数不再被弃用。bpo-39493: 将
typing.IO.closed标记为属性bpo-39491: 添加
typing.Annotated和include_extras参数到typing.get_type_hints()作为 PEP 593 的一部分。由 Till Varoquaux 提供补丁,文档由 Till Varoquaux 和 Konstantin Kashin 编写。bpo-39485: 修复
unittest.mock.create_autospec()中的一个错误,该错误会抱怨在扩展模块中定义的自定义描述符返回函数时的参数数量不正确。bpo-38932: Mock 在 reset_mock() 时完全重置子对象。由 Vegard Stikbakke 提供补丁
bpo-39082: 允许 AsyncMock 正确修补静态/类方法
bpo-39432: 在 distutils 中实现了 PEP-489 算法,用于非 ASCII "PyInit_..." 符号名称,以确保在 Windows 上也导出正确的初始化符号。
bpo-18819: 在
tarfile存档中为非设备文件省略devmajor和devminor字段,实现与 GNUtar(1)的比特级兼容。bpo-39349: 向
concurrent.futures.Executor.shutdown()添加了一个新的 cancel_futures 参数,该参数会取消所有尚未开始运行的待处理期货,而不是在关闭执行器之前等待它们完成。bpo-39274:
bool(fraction.Fraction)现在即使 (numerator != 0) 不返回布尔值(例如 numpy 数字),也会返回一个布尔值。bpo-34793: 移除了对
with (await asyncio.lock):和with (yield from asyncio.lock):的支持。对于asyncio.Condition和asyncio.Semaphore同样适用。bpo-25597: 确保在向
unittest.mock.MagicMock提供wraps时,它被用于计算魔术方法的返回值,而不是使用默认返回值。由Karthikeyan Singaravelan提供的补丁。bpo-36350:
inspect.Signature.parameters和inspect.BoundArguments.arguments现在是字典而不是有序字典。由Rémi Lapeyre贡献的补丁。bpo-35727: 修复了在multiprocessing.Process中使用sys.exit()和sys.exit(None)时的退出代码传播问题。
bpo-32173: * 将
lazycache``函数添加到 ``__all__中。 * 使用dict.clear来清除缓存。 * 重构getline函数和checkcache函数。
文档¶
bpo-17422: 语言参考现在指定了对类命名空间的限制。基于Ethan Furman的补丁改编。
bpo-39572: 更新了
TypedDict的total标志的文档。bpo-39654: 在pyclbr文档中,将'class'更新为'module'并在适当的地方添加readmodule注释。由Hakan Çelik提供的补丁。
bpo-39153: 澄清了以下函数的引用计数语义:- PyObject_SetItem - PyMapping_SetItemString - PyDict_SetItem - PyDict_SetItemString
bpo-39392: 解释在使用turtle填充时,重叠区域可能不会被填充。
bpo-39369: 更新mmap readline方法的描述。readline方法确实会更新文件位置,这一点不应被忽视,因为这可能会给程序员留下它不更新的印象。
bpo-9056: 在文档的PDF版本中为子章节添加目录。
测试¶
bpo-38325: 在test_winconsoleio的非BMP字符测试中跳过测试。
bpo-39502: 如果
time.localtime()因OverflowError失败,则跳过test_zipfile.test_add_file_after_2107()。例如在AIX 6.1上就是这种情况。
构建¶
bpo-39489: 移除
COUNT_ALLOCS特殊构建。
Windows¶
bpo-39553: 删除与SxS清单相关的未使用代码。
bpo-39439: 在Windows上激活virtualenv时,尊重Python路径。
bpo-39393: 改进尝试加载具有未解决依赖项的DLL时的错误消息。
bpo-38883:
home()和expanduser()在Windows上现在更倾向于使用USERPROFILE,不再使用HOME,因为普通用户账户通常不设置后者。这使得它们再次表现得像os.path.expanduser(),后者在3.8版本中被改为忽略HOME,参见 bpo-36264。bpo-39185: build.bat脚本新增了非常安静的输出选项(-q)和非常详细的输出选项(-vv)。
IDLE¶
C API¶
bpo-35081: 将
bytes_methods.h头文件移动到内部C API中,更名为pycore_bytes_methods.h:它仅包含私有符号(前缀为_Py),除了PyDoc_STRVAR_shared()宏。bpo-35081: 将
dtoa.h头文件移动到内部C API中,更名为pycore_dtoa.h:它仅包含私有函数(前缀为_Py)。现在编译math和cmath模块时必须定义Py_BUILD_CORE宏。bpo-39573: 添加
Py_SET_SIZE()函数以设置对象的大小。bpo-39500:
PyUnicode_IsIdentifier()不再在字符串未准备好时调用Py_FatalError()。bpo-39573: 添加
Py_SET_TYPE()函数以设置对象的类型。bpo-39573: 添加
Py_SET_REFCNT()函数以设置对象的引用计数器。bpo-39542: 将
PyType_HasFeature()、PyType_Check()和PyType_CheckExact()宏转换为静态内联函数。bpo-39542: 在受限 C API 中,
PyObject_INIT()和PyObject_INIT_VAR()现在被定义为PyObject_Init()和PyObject_InitVar()的别名,以使它们的实现变得不透明。这避免了在受限 C API 中泄露实现细节。将以下函数从受限 C API 中排除:_Py_NewReference()、_Py_ForgetReference()、_PyTraceMalloc_NewReference()和_Py_GetRefTotal()。bpo-39542: 将垃圾回收机制从受限 C API 中排除:它需要访问 PyTypeObject 和 PyThreadState 结构体字段,而这些结构在受限 C API 中是不透明的。
bpo-39511:
PyThreadState_Clear()函数现在会调用PyThreadState.on_delete回调。在此之前,这是在PyThreadState_Delete()中进行的。bpo-38076: 修复了仅在清除模块全局变量后清除解释器状态的问题,以保证在运行时销毁期间从 C 扩展访问模块状态。
bpo-39245: Vectorcall API (PEP 590) 被公开,增加了函数
PyObject_Vectorcall、PyObject_VectorcallMethod、PyVectorcall_Function、PyObject_CallOneArg、PyObject_CallMethodNoArgs、PyObject_CallMethodOneArg、PyObject_FastCallDict,以及标志Py_TPFLAGS_HAVE_VECTORCALL。
Python 3.9.0 alpha 3¶
发布日期: 2020-01-24
核心与内置函数¶
bpo-39427: 在命令行帮助部分记录了
-X选项的所有可能性。由 Pablo Galindo 提供补丁。bpo-39386: 防止异步迭代器的双重等待。
bpo-17005: 向
functools模块添加functools.TopologicalSorter,以提供执行图拓扑排序的功能。由 Pablo Galindo、Tim Peters 和 Larry Hastings 提供补丁。bpo-39320: 用三个更简单的字节码替换四个用于构建序列的复杂字节码。
以下四个字节码已被移除:
BUILD_LIST_UNPACK
BUILD_TUPLE_UNPACK
BUILD_SET_UNPACK
BUILD_TUPLE_UNPACK_WITH_CALL
新增了以下三个字节码:
LIST_TO_TUPLE
LIST_EXTEND
SET_UPDATE
bpo-39336: 发布不可变模块对象的导入加载器现在除了可以发布单个模块外,还可以发布不可变包。
bpo-39322: 新增了一个函数
gc.is_finalized()用于检查对象是否已被垃圾收集器终结。由Pablo Galindo提供补丁。bpo-39048: 通过查找
__aenter__()特殊方法在__aexit__()特殊方法之前进入异步上下文管理器时,改进了当传递错误类型给async with语句时显示的错误消息。由Géry Ogam提供补丁。bpo-39235: 修复了函数调用中单独生成器表达式的AST结束位置,例如 f(i for i in a)。
bpo-39209: 正确处理交互模式下的多行令牌。由Pablo Galindo提供补丁。
bpo-1635741: 将_json扩展模块移植到多阶段初始化(PEP 489)。
bpo-39216: 修复了仅位置参数的常量折叠优化 - 由Anthony Sottile提供。
bpo-39215: 修复了当嵌套函数在仅位置参数上有注释时引发的
SystemError- 由Anthony Sottile提供。bpo-39200: 修正了在没有参数的情况下调用
min()或max()时的错误消息。补丁由Donghee Na提供。bpo-39200: 修正了尝试在没有参数的情况下构造
range对象时的错误消息。由Pablo Galindo提供补丁。bpo-39166: 修复了在跟踪异步for循环的最后一次迭代时,跟踪函数中错误的行执行报告。补丁由Pablo Galindo提供。
bpo-39114: 修复了在跟踪带有名称绑定的异常处理程序时,跟踪函数中错误的行执行报告。补丁由Pablo Galindo提供。
bpo-39156: 将COMPARE_OP字节码指令拆分成四个不同的指令。
用于富比较的COMPARE_OP
用于'is'和'is not'测试的IS_OP
用于'in'和'is not'测试的CONTAINS_OP
JUMP_IF_NOT_EXC_MATCH 用于在 'try-except' 语句中检查异常。
这提高了解释器的清晰度,并应提供适度的加速。
bpo-38588: 修复了在调用
PyObject_RichCompareBool()时 dict 和 list 可能崩溃的问题。bpo-13601: 默认情况下,
sys.stderr现在是行缓冲的,即使stderr被重定向到文件。你仍然可以通过传递-u命令行选项或设置PYTHONUNBUFFERED环境变量来使sys.stderr无缓冲。(由 Jendrik Seipp 在 bpo-13601 中贡献。)
bpo-38610: 通过在调用
PyObject_RichCompareBool()时保持对列表元素的强引用,修复了几个列表方法可能崩溃的问题。bpo-32021: 在 mimetypes encodings_map 中包括 brotli .br 编码。
库¶
bpo-39413:
os.unsetenv()函数现在在 Windows 上也可用。bpo-39390: 修复了
shutil.copytree()的ignore回调的一个回归问题。参数类型现在再次为str和List[str]。bpo-39395:
os.putenv()和os.unsetenv()函数现在总是可用。bpo-39406: 如果
setenv()C 函数可用,os.putenv()现在用setenv()而不是putenv()实现,因此 Python 不必处理环境变量内存。bpo-39396: 在 AIX 7.1 上修复
math.nextafter(-0.0, +0.0)。bpo-29435: 允许
tarfile.is_tarfile()与文件和类文件对象一起使用,就像zipfile.is_zipfile()一样。由 William Woodruff 提供补丁。bpo-39377: 从
json.loads()中移除了encoding选项。自 Python 3.1 起已被弃用。bpo-39366: 之前弃用的
nntplib.NNTP的xpath()和xgtitle()方法已被移除。bpo-39357: 移除
bz2.BZ2File的 buffering 参数。自 Python 3.0 起,该参数被忽略,使用它会发出DeprecationWarning。传递一个已打开的文件对象以控制文件的打开方式。compresslevel 参数变为仅关键字参数。bpo-39353: 弃用 binhex4 和 hexbin4 标准。弃用
binhex模块以及以下binascii函数:b2a_hqx()、a2b_hqx()、rlecode_hqx()、rledecode_hqx()、crc_hqx()。bpo-39351: 移除
base64.encodestring()和base64.decodestring(),这两个别名自 Python 3.1 起已被弃用:改用base64.encodebytes()和base64.decodebytes()。bpo-39350: 移除
fractions.gcd()函数,该函数自 Python 3.5 起已被弃用 (bpo-22486):改用math.gcd()。bpo-39313: 为
RefactoringTool添加一个新的exec_function选项(CLI 中的 --exec-function)以使exec成为函数。由 Batuhan Taskaya 提供补丁。bpo-39259:
FTP_TLS和FTP_TLS现在如果构造函数的给定超时为零,则会引发ValueError,以防止创建非阻塞套接字。由 Donghee Na 提供补丁。bpo-39259:
SMTP和SMTP_SSL现在如果构造函数的给定超时为零,则会引发ValueError,以防止创建非阻塞套接字。由 Donghee Na 提供补丁。bpo-39310: 添加
math.ulp():返回一个浮点数的最低有效位的值。bpo-39297: 提高了 importlib.metadata 分发发现的性能以及对无法访问的 sys.path 条目的恢复能力(importlib_metadata v1.4.0)。
bpo-39259: 现在,如果给
NNTP和NNTP_SSL的构造函数的超时时间为零,它们会抛出一个ValueError,以防止创建非阻塞套接字。由Donghee Na提供补丁。bpo-38901: 当您指定prompt='.'或等效地使用python -m venv --prompt . ...时,当前目录的basename将被用来设置创建的venv在激活时的提示符。
bpo-39288: 添加
math.nextafter(): 返回 x 向 y 方向的下一个浮点数值。bpo-39259: 现在,如果给
POP3和POP3_SSL的构造函数的超时时间为零,它们会抛出一个ValueError,以防止创建非阻塞套接字。补丁由Donghee Na提供。bpo-39242: 更新了Gmane域名,从news.gmane.org改为news.gmane.io,用作
NNTP新闻阅读器服务器和nntplib测试的示例。bpo-35292: 将
SimpleHTTPRequestHandler.guess_type代理到mimetypes.guess_type,以便mimetypes.init被延迟调用,避免在导入http.server模块时产生不必要的开销。bpo-39239:
select.epoll.unregister()方法不再忽略EBADF错误。bpo-38907: 在http.server脚本中,恢复在Windows上绑定到IPv4。
bpo-39152: 修复ttk.Scale.configure([name])返回名称或所有选项的配置元组。Giovanni Lombardo贡献了部分补丁。
bpo-39198: 如果在
Logger.isEnabledFor中抛出异常(例如,由于asyncio超时或stopit),logging``全局锁可能不会被适当释放,导致死锁。此更改用 ``try...finally包装该代码块,以确保锁被释放。bpo-39191: 在
loop.run_until_complete()中开始新任务前检查是否有运行循环,以快速失败;它防止在引发异常之前新任务产生的副作用。bpo-38871:在
:mod:!lib2to3` 中正确地为包含 lambda 表达式的基于过滤器的语句添加括号。由 Donghee Na 提供补丁。bpo-39142:对 logging.config.dictConfig 进行了更改,以避免将具名元组的实例转换为 ConvertingTuple。假设命名元组过于专门化,不能像普通元组那样处理;如果具名元组的用户需要 ConvertingTuple 的功能,他们必须自己在具名元组类中实现。
bpo-39158:ast.literal_eval() 现在支持空集合。
bpo-39129:修复了
asyncio.TimeoutError的导入路径。bpo-39057:
urllib.request.proxy_bypass_environment()现在忽略前导点,并且不再忽略尾随换行符。bpo-39056:修复了在 -W 选项中处理无效警告类别的问题。如果不需要,不再导入 re 模块。
bpo-39055:当输入以单个
\n结尾时,带有validate=True的base64.b64decode()现在会引发 binascii.Error。bpo-21600:修复
mock.patch.stopall()以停止使用mock.patch.dict()创建的活跃补丁。bpo-39019:为
tempfile.SpooledTemporaryFile实现了虚拟的__class_getitem__。bpo-39019:为
subprocess.Popen,subprocess.CompletedProcess实现了虚拟的__class_getitem__。bpo-38914:调整了 distutils 的
check命令在提供author和maintainer字段但未找到相应电子邮件字段(author_email或maintainer_email)时发出的警告的措辞。措辞现在反映了这些字段是建议的,但不是必需的。由 Juergen Gmach 提供补丁。bpo-38878:修复了
os.PathLike的 __subclasshook__ 以在继承时返回正确的结果。由 Bar Harel 提供补丁。bpo-38615:
IMAP4和IMAP4_SSL现在在其构造函数中有一个可选的 timeout 参数。此外,open()方法现在也有一个可选的 timeout 参数。这一变更也应用到了IMAP4_SSL和IMAP4_stream的重写方法上。由 Donghee Na 提供补丁。bpo-35182: 修复了当子进程已经关闭了任何管道标准流但仍然继续运行时,
Popen.communicate()后续调用崩溃的问题。由 Andriy Maletsky 提供补丁。bpo-38630: 在 Unix 上,
subprocess.Popen.send_signal()现在会轮询进程状态。轮询减少了在进程已完成但subprocess.Popen.returncode属性仍为None且 pid 已被重新分配(回收)给一个新的不同进程时向错误进程发送信号的风险。bpo-38536: 移除了在使用
international=True和符号跟随值的区域设置时格式化货币中的尾部空格。例如,locale.currency(12.34, international=True)返回'12,34 EUR '而不是'12,34 EUR'。bpo-38473: 对通过
unittest.mock.attach_mock()附加的自动指定方法使用内部模拟的签名。由 Karthikeyan Singaravelan 提供补丁。bpo-38361: 修复了一个问题,即在没有参数调用
syslog.openlog()时,ident可能包含前导路径分隔符。bpo-38293: 向
property()对象添加copy.copy()和copy.deepcopy()支持。bpo-37958: 添加了 pstats.Stats.get_profile_dict() 方法,以 StatsProfile 实例的形式返回分析数据。
bpo-28367: 以下波特率的 Termios 魔法常量: - B500000 - B576000 - B921600 - B1000000 - B1152000 - B1500000 - B2000000 - B2500000 - B3000000 - B3500000 - B4000000 由 Andrey Smirnov 提供补丁。
文档¶
构建¶
IDLE¶
C API¶
bpo-39372: 清理定义了但未实现的接口的头文件。被移除的公共API符号有:
_PyBytes_InsertThousandsGroupingLocale、_PyBytes_InsertThousandsGrouping、_Py_InitializeFromArgs、_Py_InitializeFromWideArgs、_PyFloat_Repr、_PyFloat_Digits、_PyFloat_DigitsInit、PyFrame_ExtendStack、_PyAIterWrapper_Type、PyNullImporter_Type、PyCmpWrapper_Type、PySortWrapper_Type、PyNoArgsFunction。bpo-39164: 添加一个私有的
_PyErr_GetExcInfo()函数来检索指定Python线程状态的异常信息。
Python 3.9.0 alpha 2¶
发布日期: 2019-12-18
安全性¶
bpo-38945: 为了防止换行符溢出到编码文件的内容部分,在进行uu编码时已对换行符进行了转义。这可以防止在解码过程中数据被恶意或意外修改。
bpo-37228: 由于重大的安全问题,
asyncio.loop.create_datagram_endpoint()的 reuse_address 参数不再被支持。这是因为UDP中SO_REUSEADDR的行为。更多详情,请参见loop.create_datagram_endpoint()的文档。(由Kyle Stanley、Antoine Pitrou和Yury Selivanov在 bpo-37228 中贡献。)bpo-38804: 修复了
http.cookiejar中的一个ReDoS漏洞。由Ben Caller提供补丁。
核心与内置函数¶
bpo-39028: 通过加强kwargs是interned字符串的假设,略微提高了在有许多kwargs时关键字参数解析的速度。
bpo-39080: 当Starred Expression AST节点位于Call AST节点的 args 属性中的元素之间时,修复了 end_col_offset 的值。
bpo-39031: 当解析一个"elif"节点时,节点的lineno和col_offset现在指向"elif"关键字而不是其条件,使其与"if"节点保持一致。由Lysandros Nikolaou提供补丁。
bpo-20443: 在Python 3.9.0a1中,如果在命令行中指定了文件名,sys.argv[0]会被设置为绝对路径。撤销这一更改,因为大多数用户期望sys.argv保持不变。
bpo-39008:
PySys_Audit()现在要求在格式字符串中使用Py_ssize_t作为大小参数,不管在包含时是否定义了PY_SSIZE_T_CLEAN。bpo-38673: 在REPL模式下,如果行以注释或空白开始,不切换到PS2。基于Batuhan Taşkaya的工作。
bpo-38922: 现在在代码对象上调用
replace会引发code.__new__审计事件。bpo-38920: 添加了当
sys.excepthook()和sys.unraisablehook()被调用时的审计钩子。bpo-38892: 改进审计事件表格和函数的文档。
bpo-38852: 在安卓平台的调试版本中将线程堆栈大小设置为8 Mb。
bpo-38858: 每个Python子解释器现在都有自己的“小整数单例”:范围在[-5; 257]的数字。现在不再可能通过在构建时覆盖
NSMALLNEGINTS和NSMALLPOSINTS宏来更改小整数的数量:宏现在应该在pycore_pystate.h头文件中手动修改。bpo-36854: 垃圾收集器状态变为每个解释器(
PyInterpreterState.gc),而不是全局的(_PyRuntimeState.gc)。bpo-38835:
PyFPE_START_PROTECT()和PyFPE_END_PROTECT()宏为空:它们在过去一年中什么也没做,因此停止使用它们。bpo-38707:
MainThread.native_id现在在使用multiprocessing.Process生成的子进程中被正确重置,而不是保留父进程的值。bpo-38629: 向float对象添加了
__floor__和__ceil__方法。由Batuhan Taşkaya提供补丁。bpo-27145: int + int和int - int操作符现在可以返回小整数单例。由hongweipeng提供补丁。
bpo-38021: 为AIX提供一个足以用于PEP425二进制分发识别的平台标签。由Michael Felt提供补丁。
bpo-35409: 在向异步生成器的aclose协程抛出异常时忽略GeneratorExit异常。
bpo-33387: 移除了WITH_CLEANUP_START、WITH_CLEANUP_FINISH、BEGIN_FINALLY、END_FINALLY、CALL_FINALLY和POP_FINALLY字节码。替换为RERAISE和WITH_EXCEPT_START字节码。编译器现在为'with'和'try-except'语句的异常和非异常分支生成不同的代码。对于'try-finally'语句,'finally'块为'try'主体的每次退出复制。
库¶
bpo-39033: 修复
zipimport中的NameError。由Karthikeyan Singaravelan提供补丁。bpo-39022: 更新importlib.metadata以包含来自importlib_metadata 1.3的改进,包括EntryPoints的更好的序列化和自定义查找器的改进文档。
bpo-39006: 修复当ssl模块缺失时的asyncio问题:仅在ssl模块可用时检查ssl.SSLSocket实例。
bpo-38708: 修复电子邮件解析器在解析空msg-id时可能出现的IndexError。
bpo-38698: 向电子邮件解析器添加一个新的
InvalidMessageID标记,以表示无效的Message-ID头。此外,在解析头之后还有剩余值时添加缺陷。bpo-38994: 为
os.PathLike、pathlib.Path实现__class_getitem__。bpo-38979: 从
ContextVar.__class_getitem__返回类以简化子类化。bpo-38978: 在asyncio对象(Future, Task, Queue)上实现
__class_getitem__。由Batuhan Taskaya提供补丁。bpo-38916:
array.array: 移除tostring()和fromstring()方法。它们是``tobytes()``和frombytes()的别名,自Python 3.2起已弃用。bpo-38986: 使C加速的TaskWakeupMethWrapper的repr与纯Python版本的相同。
bpo-38982: 修复asyncio
PidfdChildWatcher:处理waitpid()错误。如果在其他地方调用waitpid(),waitpid()调用会失败并抛出ChildProcessError:在这种情况下使用返回码255,并记录一个警告。这确保了如果此错误发生,pidfd文件描述符会被关闭。bpo-38529: 取消关于未显式调用
.close()删除流的过于嘈杂的asyncio警告。bpo-27413: 增加了在
json.tool命令行界面中将ensure_ascii选项传递给json.dumps的能力。bpo-38634:
readline模块现在在所有平台上运行时检测Python是否链接到libedit。以前,此检查仅在macOS上进行。bpo-33684: 修复当区域编码不是UTF-8时,
json.tool无法读取包含非ASCII字符的JSON文件的问题。bpo-38698: 防止在parse_message_id中出现UnboundLocalError。
parse_message_id() 不适当地使用了在异常处理程序中定义的令牌,这会在解析无效值时引发
UnboundLocalError。由Claudiu Popa提供补丁。bpo-38927: 在venv中使用
python -m pip而不是pip来升级依赖。bpo-26730: 修复
SpooledTemporaryFile.rollover()在文本模式下可能会损坏文件的问题。由Serhiy Storchaka提供补丁。bpo-38881: 当所有权重为零时,random.choices() 现在会引发 ValueError。
bpo-38876: 当从memo加载无效输入的项时,引发pickle.UnpicklingError。
之前的代码在Python和C实现中都引发了
KeyError。这是由于指定的无效输入索引在memo结构中不存在,而pickle在此结构中存储了它所见过的对象。格式错误的输入会导致从memo中进行BINGET或LONG_BINGET加载,由于确定的索引是伪造的,因此会引发KeyError。由Claudiu Popa提供补丁。bpo-38688: 调用函数
shutil.copytree将目录树从一个目录复制到另一个子目录会导致无限循环和RecursionError。添加了一个修复,消耗迭代器并创建要复制的条目列表,避免对新创建的目录进行递归。由Bruno P. Kinoshita提供补丁。bpo-38863: 改进
http.server中的is_cgi()函数,使其能够处理cgi目录是除根目录外的另一个目录的子目录的情况。bpo-37838:
typing.get_type_hints()正确处理了用functools.wraps()装饰的函数。bpo-38870: 将
ast.unparse()作为ast模块的一个函数公开,可用于反解析一个ast.AST对象,并生成一个字符串,该字符串在被解析时会生成一个等效的ast.AST对象。由 Pablo Galindo 和 Batuhan Taskaya 提供补丁。bpo-38859: AsyncMock 现在在 side_effects 可迭代对象耗尽时返回 StopAsyncIteration。由于 PEP-479,从协程中引发 StopIteration 异常是不可能的。
bpo-38857: AsyncMock 修复了返回值为可等待类型的问题。这还包括了那些恰好是可等待的 side_effect 可迭代值,并包装了返回可等待类型的可调用对象。在此之前,这些可等待对象是被等待而不是原样返回。
bpo-38834:
typing.TypedDict子类现在使用__required_keys__和__optional_keys__属性来跟踪哪些键是可选的,以便下游项目进行运行时验证。由 Zac Hatfield-Dodds 提供补丁。bpo-38821: 修复了
argparse在国际化错误消息时对于nargs设置为特殊(非整数)值的参数未处理的异常。由 Federico Bond 提供补丁。bpo-38820: 使 Python 与 OpenSSL 3.0.0 兼容。
ssl.SSLSocket.getpeercert()不再返回带有尾随换行符的 IPv6 地址。bpo-38811: 修复了
pathlib在os.link()缺失时的未处理异常。由 Toke Høiland-Jørgensen 提供补丁。bpo-38686: 在
urllib.request.AbstractDigestAuthHandler中添加了对多个qop值的支持。bpo-38712: 添加了 Linux 特有的
signal.pidfd_send_signal()函数,该函数允许向由文件描述符而非 pid 标识的进程发送信号。bpo-38348: 向 ast 解析工具添加了
-i和--indent(缩进级别) 以及--no-type-comments(类型注释) 命令行选项。bpo-37523: 修改
zipfile.ZipExtFile在尝试访问已关闭的底层文件对象时抛出ValueError。这一新行为与 Python 其他部分处理访问已关闭文件的方式保持一致。bpo-38045: 提高
enum中enum._decompose()的性能。由 hongweipeng 提供补丁。bpo-36820: 在 socket.py、codeop.py 和 dyld.py 中保存异常时生成的循环被打破,因为它们不仅通过
__traceback__属性保持异常活跃,还保持了用户对象。由 Mario Corchero 提供补丁。bpo-36406: 在
doctest中处理命名空间包。由 Karthikeyan Singaravelan 提供补丁。bpo-34776: 修复数据类以支持类型注解中的前向引用。
bpo-20928: ElementTree 支持递归 XInclude 处理。由 Stefan Behnel 提供补丁。
bpo-29636: 为
json.toolCLI 添加格式化 JSON 的空格选项。现在支持以下互斥选项:--indent用于设置空格缩进级别;--tab用于使用制表符缩进;--no-indent用于抑制换行;--compact用于抑制所有空格。默认行为仍与--indent=4相同。
文档¶
bpo-38928: 更正 venv 的
upgrade_dependencies()和--upgrade-deps的添加时机。bpo-38899: 更新文档,说明在 fish 下激活虚拟环境应使用
source,而非.,如 https://fishshell.com/docs/current/cmds/source.html 所述。bpo-22377: 改进
datetime.datetime.strptime()接受的%Z值的文档。由 Karl Dubost 提供补丁。
测试¶
bpo-38546: 修复 test_concurrent_futures 的 test_ressources_gced_in_workers():显式停止管理器以防止测试完成后泄漏在后台运行的子进程。
bpo-38546: 多处理和 concurrent.futures 测试现在在测试完成时停止资源跟踪器进程。
bpo-38614: 在测试中用新的
test.support常量替换硬编码的超时常量:LOOPBACK_TIMEOUT、INTERNET_TIMEOUT、SHORT_TIMEOUT和LONG_TIMEOUT。这样更容易一次性为所有测试调整这四个超时常量,而不必调整每一个测试文件。bpo-38547: 修复 test_pty:如果进程是会话领导者,关闭主文件描述符会引发 SIGHUP 信号:在运行测试时简单地忽略 SIGHUP。
bpo-38992: 修复一个因常数折叠而失败的
math.fsum()测试。bpo-38991:
test.support:run_python_until_end()、assert_python_ok()和assert_python_failure()函数不再从 stderr 中去除空格。移除test.support.strip_python_stderr()函数。bpo-38965: 在 GCC 10 上修复 test_faulthandler。在
faulthandler._stack_overflow()中使用 "volatile" 关键字来防止在任何编译器上进行尾调用优化,而不是依赖于编译器特定的编译指示。bpo-38875: test_capi:垃圾回收测试现在需要测试 "cpu" 资源。
bpo-38841: 在缺乏对命名 Unix 域套接字有功能 bind() 的平台上跳过 asyncio test_create_datagram_endpoint_existing_sock_unix。
bpo-38692: 如果
os.pidfd_open()因为PermissionError失败,则跳过 test_posix.test_pidfd_open() 测试。这种情况可能发生在使用系统调用白名单但不允许pidfd_open()系统调用的 Linux 沙箱中。bpo-38839: 修复测试中一些未使用的函数。由 Adam Johnson 提供补丁。
bpo-38669: 当用字符串传递目标时,
unittest.mock.patch.object()抛出TypeError。bpo-37957: test.regrtest 现在可以接收一个要忽略的测试模式列表(使用 -i/--ignore 参数)或一个包含要忽略模式列表的文件(使用 --ignore-file 参数)。由 Pablo Galindo 提供补丁。
构建¶
bpo-37404:
asyncio现在在调用与ssl.SSLSocket套接字不兼容的方法时会引发TypeError。由 Ido Michael 提供补丁。bpo-36500: 在 Visual Studio 解决方案中添加了一个可选的 "regen" 项目,该项目将重新生成所有语法、标记和操作码。
Windows¶
macOS¶
bpo-37931: 修复了 OSX 动态构建中的一个崩溃问题,该问题发生在 Py_Finalize 后重新初始化 posix 模块时,如果环境自上次
import posix以来发生了变化。补丁由 Benoît Hudson 提供。
IDLE¶
C API¶
Python 3.9.0 alpha 1¶
发布日期: 2019-11-19
安全性¶
bpo-38722:
runpy现在使用io.open_code()来打开代码文件。由 Jason Killen 提供补丁。bpo-38418: 修复
os.system()的审计事件名称为os.system。bpo-38243: 在将文档页面渲染为 HTML 时,对
xmlrpc.server.DocXMLRPCServer的服务器标题进行转义。(由 Donghee Na 在 bpo-38243 中贡献。)bpo-38174: 将供应商化的 expat 库版本更新至 2.2.8,解决了 CVE 2019-15903。
bpo-37764: 修复了 email._header_value_parser.get_unstructured 在特定情况下进入无限循环的问题,这些情况包括电子邮件头部没有尾随空白,以及包含无效编码字的情况。由 Ashwin Ramaswami 提供补丁。
bpo-37461: 修复解析特别构造的电子邮件头部时出现的无限循环问题。补丁由 Abhilash Raj 提供。
bpo-37463: ssl.match_hostname() 不再接受 IPv4 地址后面附加额外文本,且仅接受不带尾随空格的四点表示法。某些 inet_aton() 实现会忽略空格及空格后的所有数据,例如 '127.0.0.1 whatever'。
bpo-37363: 为
ensurepip、ftplib、glob、imaplib、nntplib、pdb、poplib、shutil、smtplib、sqlite3、subprocess、telnetlib、tempfile和webbrowser,以及os.listdir()、os.scandir()和breakpoint()添加审计事件。bpo-37364: 现在在读取
.pth文件时使用io.open_code()。bpo-34631: 在 Windows 安装程序中更新 OpenSSL 至 1.1.1c。
bpo-34155: 修复解析包含多个
@的无效电子邮件地址(例如 a@b@c.com)时的问题,确保不会将第二个@之前的部分作为有效电子邮件地址返回。由 maxking 和 jpic 提供补丁。
核心与内置函数¶
bpo-38631: 在
float.__getformat__()中将Py_FatalError()调用替换为常规的RuntimeError异常。bpo-38639: 对
math.floor()、math.ceil()和math.trunc()针对浮点数进行了优化。bpo-38640: 修复了编译器中的一个bug,该bug在总是为假的while循环中存在break语句和continue语句时会引发错误。由Pablo Galindo提供补丁。
bpo-38613: 优化了
dict_keys的一些集合操作(例如|、^、和-)。d.keys() | other``之前比 ``set(d) | other慢,但现在它们的性能几乎相同。bpo-28029:
"".replace("", s, n)``现在对于所有非零 ``n返回s而不是空字符串。bytes和bytearray对象也有类似的更改。bpo-38535: 修复了装饰器中无参数调用的AST节点的行号和列偏移。
bpo-38525: 修复了在使用空
dict对象的反向迭代器时出现的段错误。由Donghee Na和Inada Naoki提供补丁。bpo-38469: 修复了一个bug,即在存在 global 关键字时,命名表达式的作用域未被正确解析。由Pablo Galindo提供补丁。
bpo-38437: 为解释器的调试版本(当设置
Py_DEBUG时)激活GC_DEBUG宏。由Pablo Galindo提供补丁。bpo-38379: 当垃圾回收器进行回收时,其中一些对象复活(在执行完终结器后可以从隔离的循环外部访问),不要阻止回收所有仍然无法访问的对象。由Pablo Galindo和Tim Peters提供补丁。
bpo-38379: 当循环垃圾回收(gc)运行终结器使无法访问的对象复活时,当前的gc运行结束,不收集任何循环垃圾。然而,
collect()``和 ``get_stats()报告的统计信息声称所有发现的循环垃圾都被回收了,并且复活的对象也被回收了。更改了统计信息以报告没有收集到任何对象。bpo-38392: 在调试模式下,
PyObject_GC_Track()现在会调用对象类型的tp_traverse()以确保对象有效:测试被tp_traverse()访问的对象是否有效。bpo-38210: 移除字典视图与空集之间不必要的交集和更新集操作。(由 Donghee Na 在 bpo-38210 中贡献。)
bpo-38402: 检查系统底层
crypt或crypt_r的错误。bpo-37474: 在 FreeBSD 上,Python 不再在启动时调用
fedisableexcept()来控制浮点控制模式。自 FreeBSD 6 起,这个调用变得无用:它成为了默认模式。bpo-38006: 修复了一个由于弱引用和循环垃圾收集器交互导致的错误。我们必须清除垃圾中的任何弱引用,以防止它们的回调执行并导致崩溃。
bpo-38317: 修复警告选项的优先级:
PyConfig.warnoptions拥有最高优先级,如 PEP 587 所述。bpo-38310: 在主解释器循环中预测
BUILD_MAP_UNPACK_WITH_CALL->CALL_FUNCTION_EX操作码对。由 Brandt Bucher 提供补丁。bpo-36871: 改进了对模拟的 assert_has_calls 和 assert_has_awaits 方法的错误处理。修复了一个错误,其中在将预期调用绑定到模拟的规范时遇到的任何错误都被静默吞噬,导致误导性的错误输出。
bpo-11410: 通过使用 gcc >= 4.0 中可用的可见性属性,在 POSIX 和 Windows 上以统一的方式提供了更好的符号可见性控制。POSIX 构建文件已更新,以使用 -fvisibility=hidden 编译,最小化导出的符号。
bpo-38236: 如果 Python 无法导入文件系统和标准 IO 编码的 Python 编解码器,现在会转储路径配置。
bpo-38013: 允许为未启动的异步生成器助手调用
async_generator_athrow().throw(...)。这修复了在asyncio.run()调用结束时出现的烦人警告。bpo-38124: 修复了 PyState_AddModule 中的一个差一错误,该错误可能导致内存越界访问。
bpo-38116: select 模块现在符合 PEP-384 标准,不再有静态状态。
bpo-38113: ast 模块已更新至 PEP-384 标准,所有静态内容已被移除。
bpo-38076: struct 模块现在兼容 PEP-384。
bpo-38075: random 模块现在兼容 PEP-384。
bpo-38074: zlib 模块已兼容 PEP-384。
bpo-38073: 使 pwd 扩展模块兼容 PEP-384。
bpo-38072: grp 模块已兼容 PEP-384。
bpo-38069: 使 _posixsubprocess 兼容 PEP-384。
bpo-38071: 使 termios 扩展模块兼容 PEP-384。
bpo-38005: 修复了 InterpreterID 和 ChannelID 的比较和创建。
bpo-36946: 修复了处理切片时可能发生的有符号整数溢出。由 hongweipeng 提供补丁。
bpo-37994: 修复了在多个站点中如果属性查找失败时静默任意错误的问题。只有 AttributeError 应该被静默。
bpo-8425: 优化了当另一个集合远大于基础集合时的集合 difference_update 操作。(由 Evgeny Kapun 建议,Michele Orrù 贡献代码)。
bpo-37966:
is_normalized()的实现对于未规范化的字符串已经大大加速,这是通过实现 Unicode 标准中的完整规范化快速检查算法完成的。bpo-37947: 正确调整了命名表达式符号表生成中的递归级别。由 Pablo Galindo 提供补丁。
bpo-37812:
Object/longobject.c中使用的CHECK_SMALL_INT宏已被替换为在每个调用站点显式的return。bpo-37751: 修复
codecs.lookup()以与encodings.normalize_encoding()相同的方式标准化编码名称,除了codecs.lookup()还将名称转换为小写。bpo-37830: 修复了当相应的
try块包含带有非常量值的return时,在finally块中编译break和continue的问题。bpo-20490: 通过Anthony Sottile的贡献,改进了循环
from导入时部分初始化模块的导入错误消息。bpo-37840: 修复了
bytearray的sq_item中负索引的处理。由Sergey Fedoseev提供补丁。bpo-37802: 略微提高了
PyLong_FromUnsignedLong()、PyLong_FromUnsignedLongLong()和PyLong_FromSize_t()的性能。由Sergey Fedoseev提供补丁。bpo-37409: 确保在交互式会话和没有父包的脚本中,显式相对导入总是引发ImportError,而不是将当前模块视为包。由Ben Lewis提供补丁。
bpo-32912: 回退了 bpo-32912:对于字符串和字节字面量中的无效转义序列,现在发出
SyntaxWarning而不是DeprecationWarning。bpo-37757: PEP 572: 如PEP所述,当赋值表达式与理解作用域的交互导致目标作用域不明确时,现在会引发
SyntaxError。最初由PEP提出的
TargetScopeError子类已被移除,改为仅对不允许的情况引发常规语法错误。bpo-36279: 修复了
os.wait3()中可能使用未初始化内存的问题。bpo-36311: 解码大于2GiB的字节对象更快,并且当多字节字符跨越块边界时不再失败。
bpo-34880: 如果
AssertionError异常被遮蔽,assert语句现在可以正常工作。由Zackery Spytz提供补丁。bpo-37340: 移除了绑定方法对象(
free_list)的对象缓存。由于LOAD_METHOD操作码和_PyObject_VectorcallMethodC API 的存在,临时绑定方法对象的使用比以前少。bpo-37648: 修复了
list.__contains__()、tuple.__contains__()及其他几处的小不一致性。集合的项现在始终位于==的左侧,而针位于右侧。bpo-37444: 更新了
builtins.__import__()和importlib.__import__()之间的异常差异。bpo-37619: 当将包装描述符从一个类添加到另一个类时(例如,在
int子类上设置__add__ = str.__add__),调用操作符时会正确引发异常。bpo-37593: 在
ast.parameters节点的构造函数中交换了 posonlyargs 和 args 参数的位置。bpo-37543: 为非 PGO 构建优化了 pymalloc。
bpo-37537: 在 _Py_GetAllocatedBlocks() 内部计算分配的 pymalloc 块。这减慢了 _Py_GetAllocatedBlocks() 的速度,但为 _PyObject_Malloc() 和 _PyObject_Free() 带来了小幅加速。
bpo-37467: 修复了
sys.excepthook()和PyErr_Display(),如果文件名是字节字符串。例如,对于文件名属性是字节字符串的 SyntaxError 异常。bpo-37433: 修复了
SyntaxError指示器在多行字符串中打印过多空格的问题 - 由 Anthony Sottile 提供。bpo-37417:
bytearray.extend()现在正确处理了迭代过程中出现的错误。由 Brandt Bucher 提供补丁。bpo-37414: 未文档化的
sys.callstats()函数已被移除。自 Python 3.7 起,它已被弃用,并总是返回None。它需要一个特殊的构建选项CALL_PROFILE,该选项已在 Python 3.7 中移除。bpo-37392: 移除
sys.getcheckinterval()和sys.setcheckinterval()函数。这两个函数自 Python 3.2 起已被弃用。请改用sys.getswitchinterval()和sys.setswitchinterval()。同时移除PyInterpreterState结构中的check_interval字段。bpo-37388: 在开发模式和调试构建中,现在会对字符串编码和解码操作的 encoding 和 errors 参数进行检查。例如:
open()、str.encode()和bytes.decode()。默认情况下,为了获得最佳性能,errors 参数仅在第一次编码/解码错误时检查,encoding 参数有时会为空字符串忽略。
bpo-37348: 优化了使用 UTF-8 和 ASCII 编解码器解码短 ASCII 字符串的性能。
b"foo".decode()大约快了 15%。由 Inada Naoki 提供补丁。bpo-24214: 改进了 UTF-8 和 UTF-16 增量解码器中对 surrogatepass 错误处理程序的支持。
bpo-37330:
open()、io.open()、codecs.open()和fileinput.FileInput不再接受文件模式中的'U'("通用换行") 。此标志自 Python 3.3 起已被弃用。bpo-35224: 按照 PEP 572 的提议,反向评估字典推导式中 key: value 的求值顺序。即在
{k: v for ...}中,k将在v之前被评估。bpo-37316: 修复了
mmap.mmap中的PySys_Audit()调用。bpo-37300: 移除了 classobject.c 中一个不必要的 Py_XINCREF。
bpo-37269: 修复了窥孔优化器中的一个错误,该错误未正确处理带有二元运算符的常量条件。补丁由 Pablo Galindo 提供。
bpo-20443: Python 现在获取命令行中指定的脚本文件名的绝对路径(例如:“python3 script.py”):__main__ 模块的 __file__ 属性和 sys.path[0] 现在变为绝对路径,而非相对路径。
bpo-37257: Python的小对象分配器(
obmalloc.c)现在允许(不超过)一个空arena保持可用以便立即重用,而不将其返回给操作系统。这防止了在简单循环中可能每次迭代都创建和销毁一个新arena的颠簸现象。bpo-37231: 类型槽到特殊方法的派发(例如在执行
x * y时调用__mul__)已经变得更快。bpo-36974: 为内置函数和方法的所有调用约定实现了单独的vectorcall函数。这提高了调用的性能。
bpo-37213: 在窥孔优化器中正确处理负的行偏移。由Pablo Galindo提供补丁。
bpo-37219: 移除了空集差异的错误优化。
bpo-15913: 实现了
PyBuffer_SizeFromFormat()函数(之前有文档记录但未实现):调用struct.calcsize()。由Joannah Nanjekye提供补丁。bpo-36922: 槽函数优化了任何带有
Py_TPFLAGS_METHOD_DESCRIPTOR的可调用对象,而不仅仅是function的实例。bpo-36974: 槽
tp_vectorcall_offset被无条件继承以支持当基类使用vectorcall时的``super().__call__()``。bpo-37160:
threading.get_native_id()现在也支持NetBSD。bpo-37077: 为AIX添加了
threading.get_native_id()支持。由M. Felt提供补丁bpo-34556: 向venv模块添加了
--upgrade-deps。由Cooper Ry Lees提供补丁bpo-20523:
pdb.Pdb支持Windows 7中的~/.pdbrc。由Tim Hopper和Dan Lidral-Porter提供补丁。bpo-35551: 更新了编码:- 移除了“tis260”编码,这是一个不存在的“tactis”编解码器的别名。- 添加了“mac_centeuro”作为mac_latin2编码的别名。
bpo-19072:
classmethod装饰器现在可以包装其他描述符,如property对象。根据Graham Dumpleton编写的补丁改编。bpo-27575: 通过直接使用集合交集逻辑提高字典视图交集的速度。由David Su提供补丁。
bpo-30773: 禁止并行运行aclose() / asend() / athrow()。修复ag_running以反映AG的实际运行状态。
库¶
bpo-36589: 现在,
curses.update_lines_cols()函数在成功时返回None而不是``1``。bpo-38807: 更新
TypeError消息,为os.path.join()包括os.PathLike对象作为可接受的输入类型。bpo-38724: 为
subprocess.Popen对象添加repr。由Andrey Doroschenko提供补丁。bpo-38786: pydoc现在可以识别并解析HTTPS URL。由python273提供补丁。
bpo-38785: 如果从
asyncio.Future派生的对象的构造函数中没有调用父__init__,则防止asyncio崩溃。bpo-38723:
pdb现在使用io.open_code()来触发审计事件。bpo-38761: WeakSet现在被注册为collections.abc.MutableSet。
bpo-38716: logging: 将RotatingHandler的namer和rotator更改为类级别属性。这会阻止__init__在子类用同名方法定义它们的情况下将它们设置为None。
bpo-38713: 添加
os.P_PIDFD常量,可以传递给os.waitid()以等待Linux进程文件描述符。bpo-38692: 添加
asyncio.PidfdChildWatcher,一个特定于Linux的子监视器实现,它轮询进程文件描述符。bpo-38692: 将Linux的
pidfd_open系统调用暴露为os.pidfd_open()。bpo-38602: 向
fcntl模块添加常量F_OFD_GETLK、F_OFD_SETLK和F_OFD_SETLKW。由Donghee Na提供补丁。bpo-38334: 修复了在加密的
zipfile.ZipExtFile上向后查找的问题。bpo-38312: 添加
curses.get_escdelay()、curses.set_escdelay()、curses.get_tabsize()和curses.set_tabsize()函数 - 由 Anthony Sottile 提供。bpo-38586: 现在
fileConfig()正确设置了加载的处理程序的 .name。bpo-38565: 为 functools.lru_cache() 添加新的 cache_parameters() 方法,以更好地支持 pickle。
bpo-34679: asynci.ProactorEventLoop.close() 现在只在主线程中调用 signal.set_wakeup_fd()。
bpo-31202:
pathlib.WindowsPath.glob()的结果现在匹配字面部分的大小写。bpo-36321: 移除拼写错误的属性。3.8 的变更日志指出这将在 3.9 中移除。
bpo-38521: 修复了 statistics.NormalDist() 中的错误等式比较。
bpo-38493: 为
si_code添加了CLD_KILLED和CLD_STOPPED。由 Donghee Na 提供补丁。bpo-38478: 修复了
inspect.signature.bind()中的一个 bug,该 bug 导致处理与位置唯一参数同名的关键字参数时失败。由 Pablo Galindo 提供补丁。bpo-33604: 修复了
hmac.new和hmac.HMAC,当省略了 3.8 中现在必需的 digestmod 参数时,抛出 TypeError 而不是 ValueError。同时澄清了 hmac 模块的文档和文档字符串。bpo-38378:
os.sendfile()的参数 out 和 in 被重命名为 out_fd 和 in_fd。bpo-38417: 在 POSIX 系统上为子进程添加了设置 umask 的支持到 subprocess 模块。
bpo-38449: 撤销 PR 15522,由于对文件名作为 url 的不正确处理,导致
mimetypes.guess_type()中的回归。bpo-38431: 修复
dataclasses.InitVar的__repr__方法以支持类型对象,补丁由 Samuel Colvin 提供。bpo-38109: 在 Python 的
stat模块实现中添加缺失的stat.S_IFDOOR,stat.S_IFPORT,stat.S_IFWHT,stat.S_ISDOOR(),stat.S_ISPORT(), 和stat.S_ISWHT()值。bpo-38422: 澄清 pathlib 后缀(es) 的文档字符串。
bpo-38405: 现在
typing.NamedTuple的嵌套子类可以被 pickle。bpo-38332: 防止当
_encoded_words.decode()给定一个内容类型编码无效的编码字时抛出的KeyError一直传播到email.message.get()。bpo-38371: 弃用了
_tkinter.TkappType中的split()方法,转而支持splitlist()方法,因为后者有更一致和可预测的行为。bpo-38341: 将
smtplib.SMTPNotSupportedError添加到smtplib的导出名称中。bpo-38319: 在 socket 和 shutil 模块中使用的 sendfile() 在 32 位架构上对于 >= 2GiB 的文件会引发 OverflowError。(由 Giampaolo Rodola 提供补丁)
bpo-38242: 回滚新的 asyncio Streams API
bpo-13153: 现在使用操作系统原生编码在 Python 字符串和 Tcl 对象之间进行转换。这允许显示、复制和粘贴到剪贴板的 emoji 和其他非 BMP 字符。从现在开始,从 Tcl 到 Python 以及反向的字符串转换永远不会失败(除了 MemoryError)。
bpo-38019: 正确处理已关闭的 asyncio unix 管道的暂停/恢复读取。
bpo-38163: 子 mock 现在会检测它们的类型是同步还是异步的,异步子 mock 将是 AsyncMocks,同步子 mock 将是 MagicMock 或 Mock(取决于它们的父类型)。
bpo-38161: 从 AsyncMock 中移除 _AwaitEvent。
bpo-38216: 允许那些罕见的代码从
http.client库发送无效的 http 请求。bpo-30458 的修复导致了一些项目在测试它们在面对错误请求时的行为时依赖此能力的项目出现问题。bpo-38108: 现在,AsyncMock 上的任何同步魔术方法都返回一个 MagicMock。MagicMock 上的任何异步魔术方法都返回一个 AsyncMock。
bpo-38265: 更新
os.pread()的 length 参数,接受Py_ssize_t而不是 int。bpo-38112:
compileall具有更高的默认递归限制和新的命令行参数,用于路径操作、符号链接处理和多级优化。bpo-38248: asyncio: 修复了立即任务取消不一致的问题
bpo-38237: 内置 pow 函数的参数更具描述性。现在也可以通过关键字传递这些参数。
bpo-34002: 通过将 while-pop 改为 for 循环,使用 isdisjoint 而不是集合交集,提高了 email 包中部分的效率。
bpo-38191:
NamedTuple和TypedDict类型的构造函数现在接受任意关键字参数名称,包括 "cls"、"self"、"typename"、"_typename"、"fields" 和 "_fields"。bpo-38185: 修复了
sqlite3.Row索引中不区分大小写的字符串比较。bpo-38136: 将 AsyncMock 的调用计数和等待计数更改为两个不同的计数器。现在等待计数仅在协程被等待时计数,而不是在被调用时,反之亦然。更新了相关文档。
bpo-37828: 修复了
unittest.mock.Mock.assert_called()异常中的默认模拟名称。补丁由 Abraham Toriz Cruz 提供。bpo-38175: 修复了
sqlite3.Row对象比较中的内存泄漏。bpo-33936: _hashlib 不再调用 OpenSSL 1.1.0+ 中过时的 OpenSSL 初始化函数。
bpo-34706: 在 inspect.Signature.from_callable 中保留子类化。
bpo-38153: OpenSSL的哈希算法名称现在被规范化以遵循Python的命名约定。例如,OpenSSL使用sha3-512而不是sha3_512,或使用blake2b512而不是blake2b。
bpo-38115: 修复了dis.findlinestarts()中的一个错误,该错误会导致返回无效的字节码偏移量。记录了代码对象的co_lnotab可能包含无效字节码偏移量的情况。
bpo-38142: _hashlib OpenSSL包装器扩展模块现在符合PEP-384标准。
bpo-9216: hashlib构造函数现在支持usedforsecurity标志,以指示哈希算法不用于安全上下文。
bpo-36991: 修复了在某些不支持的输入错误情况下,ZipFile.extract()可能错误地抛出AttributeError异常的问题。
bpo-38134: 移除了过时的PBKDF2_HMAC_fast副本。所有支持的OpenSSL版本都包含快速实现。
bpo-38132: OpenSSL的hashlib包装器使用了更简单的实现。几个宏和无用的缓存已被移除。哈希名称现在来自OpenSSL的EVP。算法名称保持不变,除了现在总是小写。
bpo-38008: 修复了协议中的父类检查,以正确识别提供内置协议的模块,而不是假设它们都来自
collections.abc模块。bpo-34037: 对于
asyncio,添加了一个新的协程loop.shutdown_default_executor()。这个新协程提供了一个API来安排执行器的关闭,等待线程池关闭完成。此外,asyncio.run()已被更新以利用这个新协程。补丁由Kyle Stanley提供。bpo-37405: 通过返回1元组而不是字符串,修复了非CAN_ISOTP AF_CAN地址族套接字的socket.getsockname()的回归错误。
bpo-38121: 更新了importlib.metadata中函数的参数名称,与importlib_metadata 0.22版本的更改相匹配。
bpo-38110: os.closewalk() 实现现在在可用平台上使用 libc fdwalk() API。
bpo-38093: 修复 AsyncMock,使其在使用 AsyncContextManagers 或 AsyncIterators 时不会崩溃。
bpo-37488: 向
datetime.utctimetuple(),datetime.utcnow()和datetime.utcfromtimestamp()添加警告。bpo-35640: 允许将 path-like object 作为
directory参数传递给http.server.SimpleHTTPRequestHandler类。由 Géry Ogam 提供的补丁。bpo-38086: 使用来自 importlib_metadata 0.21 的更改更新 importlib.metadata。
bpo-37251: 移除 AsyncMock 中的
__code__检查,该检查错误地将函数规范评估为异步对象,但未能评估定义了__await__但没有__code__属性的类为异步对象。bpo-38066: 隐藏 asyncio.Stream 的内部方法:feed_eof(), feed_data(), set_exception() 和 set_transport()。
bpo-38059: inspect.py 现在使用 sys.exit() 而不是 exit()。
bpo-37953: 在
typing中,改进了ForwardReferences的__hash__和__eq__方法。bpo-38026: 修复了
inspect.getattr_static()在使用isinstance时应避免动态查找的问题。bpo-35923: 更新
importlib.machinery.BuiltinImporter以使用loader._ORIGIN而不是硬编码值。由 Donghee Na 提供的补丁。bpo-38010: 在
importlib.metadata中与importlib_metadata0.20 同步,澄清files()的行为并修复requires()在dist-info包上只返回一个要求的问题。bpo-38006: weakref.WeakValueDictionary 定义了一个局部 remove() 函数,用作弱引用的回调。这个函数是通过闭包创建的。修改实现以避免闭包。
bpo-37995: 向
ast.dump()添加了 indent 选项,允许其产生多行缩进的输出。bpo-34410: 修复了重新进入
tee()迭代器时的崩溃问题。现在在这种情况下会抛出 RuntimeError。bpo-37140: 修复了 Python 3.8 的一个 ctypes 回归问题。当 ctypes.Structure 通过拷贝传递给函数时,ctypes 内部创建了一个临时对象,这个临时对象的副作用是调用了结构体的终结器(__del__)两次。Python 语义要求终结器只被调用一次。修复 ctypes 内部不再两次调用终结器。
bpo-37587: 当 JSON 字符串中有许多反斜杠转义字符时,
_json.scanstring现在快了多达 3 倍。bpo-37834: 防止在没有 fd 系统调用支持的非 Windows 系统(如旧版本的 macOS)上构建时 shutil.rmtree 抛出异常。
bpo-10978: 信号量和 BoundedSemaphores 现在可以一次释放多个等待的线程。
bpo-37972:
unittest.mock.call对象的下标现在接收与其他自定义属性相同的链式机制,因此以下用法不再引发TypeError:call().foo().__getitem__('bar')由 blhsing 提供补丁
bpo-37965: 修复由 distutils.ccompiler.CCompiler.has_function 引起的 C 编译器警告。
bpo-37960: 缓冲流和文本流的
repr()现在在获取 "name" 和 "mode" 属性值时只静默预期的异常。bpo-37961: 向 tracemalloc 模块收集的跟踪添加一个
total_nframe字段。这个字段表示在被截断之前的原始帧数。bpo-37951: subprocess模块的大部分功能现在在子解释器中再次可用。仅在子解释器中限制了*preexec_fn*。
bpo-36205: 修复time.process_time()的rusage实现,正确报告系统和用户CPU时间的总和。
bpo-37950: 修复
ast.dump()在调用未完全初始化的节点时的行为。bpo-34679: 恢复从非主线程实例化Windows IOCP事件循环的能力。
bpo-36917: 添加
ast.NodeVisitor.visit_Constant()方法的默认实现,该方法发出弃用警告并调用相应的方法visit_Num()、visit_Str()等。bpo-37798: 更新test_statistics.py以验证statistics模块在C和Python实现中都能良好工作。由Donghee Na提供补丁。
bpo-26589: 向http模块添加了一个新的状态码:451 UNAVAILABLE_FOR_LEGAL_REASONS。
bpo-37915: 修复在比较
datetime.timezone和datetime.tzinfo对象实例时出现的段错误。由Pablo Galindo提供补丁。bpo-32554: 弃用在random.seed()中对任意类型调用hash的行为。
bpo-9938: 为
ArgumentParser添加可选关键字参数exit_on_error。bpo-37851:
faulthandler模块不再在Python启动时分配其替代堆栈。现在堆栈仅在首次使用faulthandler时分配。bpo-32793: 修复当调用
smtplib.SMTP.connect()时出现的重复调试消息。bpo-37885: venv: 在deactivate时不生成未设置变量警告。
bpo-37868: 修复dataclasses.is_dataclass,当给定一个在__getattr__中从不引发AttributeError的实例时。也就是说,一个对象即使不是dataclass,也为__dataclass_fields__返回某些内容。
bpo-37811: 修复
socket模块的socket.connect(address)函数在系统调用中断时无法建立连接的问题。此问题在所有poll(2)系统调用仅接受非负整数和-1作为超时值的操作系统上观察到。bpo-37863: Tim Peters 提出的对 Fraction.__hash__ 的优化建议。
bpo-21131: 修复
faulthandler.register(chain=True)堆栈。faulthandler 现在分配一个专用的SIGSTKSZ*2字节堆栈,而不是仅SIGSTKSZ字节。在某些平台上,调用 faulthandler 信号处理程序中的先前信号处理程序使用的堆栈内存超过SIGSTKSZ字节。bpo-37798: 为 statistics.NormalDist.inv_cdf() 添加 C 快速路径。由 Donghee Na 提供补丁。
bpo-37804: 移除已弃用的方法
threading.Thread.isAlive()。由 Donghee Na 提供补丁。bpo-37819: 添加 Fraction.as_integer_ratio() 以匹配 bool、int、float 和 decimal 中的相应方法。
bpo-14465: 为美化打印 XML 树添加 xml.etree.ElementTree.indent() 函数。由 Stefan Behnel 贡献。
bpo-37810: 修复
difflib在处理制表符时 diff 输出中的?提示。由 Anthony Sottile 提供补丁。bpo-37772: 在
zipfile.Path中,添加隐式目录时,确保添加祖先目录并排除重复项。bpo-18578: 将
test.bytecode_helper重命名为并记录为test.support.bytecode_helper。由 Joannah Nanjekye 提供补丁。bpo-34488:
io.BytesIO的writelines()方法在传递许多小行时现在稍微快一些。由 Sergey Fedoseev 提供补丁。bpo-37449:
ensurepip现在使用importlib.resources.read_binary()而不是pkgutil.get_data()来读取数据。由 Joannah Nanjekye 提供补丁。bpo-28292: 将calendar.py中的辅助函数标记为私有。这遵循了PEP 8的指导原则,保持了模块中的风格约定,并解决了一个已知的用户困惑案例。
bpo-18049: 在Python/thread_pthread.h中为AIX添加THREAD_STACK_SIZE的定义。默认的线程堆栈大小导致了在默认递归限制下的崩溃。由M Felt提供补丁。
bpo-37742: logging.getLogger() API现在在传递名称'root'时返回根日志记录器,而之前它返回一个名为'root'的非根日志记录器。这可能会影响那些明确需要一个名为'root'的非根日志记录器,或者在某些名为'root.py'的顶级模块中使用logging.getLogger(__name__)实例化日志记录器的用户代码。
bpo-37738: 修复curses
addch(str, color_pair)的实现:将颜色对传递给``setcchar()``,而不是总是传递0作为颜色对。bpo-37723: 修复了在解析包含巨大字符集的正则表达式时的性能回归。补丁由Yann Vaginay提供。
bpo-35943: 函数
PyImport_GetModule()现在确保它返回的任何模块都已完全初始化。补丁由Joannah Nanjekye提供。bpo-37268:
parser模块已被弃用,并将在Python的未来版本中移除。bpo-37685: 修复了
datetime.timedelta和datetime.timezone的比较。bpo-37697: 将
importlib.metadata与`importlib_metadata 0.19 <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()现在也支持在wchar_t为 16 位的平台(例如 Windows 和 AIX)上使用非 BMP 字符。bpo-37266: 在子解释器中,现在尝试生成守护线程会引发异常。子解释器从未支持守护线程。之前,如果守护线程仍在运行,子解释器终止时会因 Python 致命错误而崩溃。
bpo-21872: 修复
lzma模块解压数据不完整的问题。当解压 FORMAT_ALONE 格式的文件且没有结束标记时,有时最后的一些字节无法输出。由马林提供补丁。bpo-35922: 修复
RobotFileParser.crawl_delay()和RobotFileParser.request_rate(),当 robots.txt 文件中没有定义相关规则时返回None而不是引发AttributeError。由 Rémi Lapeyre 提供补丁。bpo-35766: 将 feature_version 的格式更改为 (major, minor) 元组。
bpo-36607: 消除
asyncio.all_tasks()在迭代期间如果内部任务的弱引用集被另一个线程更改时引发的RuntimeError。bpo-18748:
_pyio.IOBase析构函数现在在获取closed属性失败时不执行任何操作,以更好地模拟_io.IOBase终结器。bpo-36402: 修复 Python 关闭时等待线程的竞争条件。等待所有非守护线程的 Python 线程状态被删除(加入所有非守护线程),而不仅仅是等待非守护 Python 线程完成。
bpo-37206: 无法表示为 Python 对象的默认值不再在函数签名中错误地表示为
None。bpo-37111: 向
logging.basicConfig添加了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提供补丁。
问题`20504`: 修复了
cgi模块中的一个bug,当multipart/form-data请求没有`Content-Length`头时。问题`25988`:
collections.abc中的抽象基类不再暴露在常规的collections模块中。问题`11122`: Distutils不会仅在指定的路径中检查rpmbuild。
问题`34775`: 当传递的不是str或PurePath的实例时,PurePath的除法处理现在返回NotImplemented而不是引发TypeError。由Roger Aiudi提供补丁。
问题`34749`:
binascii.a2b_base64()现在快了2倍。由Sergey Fedoseev提供补丁。问题`34519`: 为HP Roman 8添加了额外的别名。由Michael Osipov提供补丁。
bpo-28009: 修复在MAC地址分隔符为'.'的平台以及MAC地址值中省略前导0的MAC地址格式情况下uuid.getnode()的问题。目前,AIX是唯一已知具有这些设置的平台。由Michael Felt提供补丁。
bpo-30618: 添加
readlink()。由Girts Folkmanis提供补丁。bpo-32498: 使
urllib.parse.unquote()接受字节以及字符串。由Stein Karlsen提供补丁。bpo-33348: lib2to3现在可以识别在
*和**之后的表达式,例如f(*[] or [])。bpo-32689: 更新
shutil.move()函数以允许使用Path对象作为源参数。由Emily Morehouse和Maxwell "5.13b" McKinnon提供补丁。bpo-32820: 为IPv4和IPv6类添加了
__format__。总是输出一个完全零填充的字符串。支持b/x/n修饰符(bin/hex/native格式)。IPv4的本机格式是bin,IPv6的本机格式是hex。还支持'#'和'_'修饰符。bpo-27657: 修复带有数字路径的urllib.parse.urlparse()。像"path:80"这样的字符串不再被解析为路径,而是被解析为方案("path")和路径("80")。
bpo-4963: 修复了与mimetypes扩展映射和模块重新初始化相关的非确定性行为。
文档¶
bpo-21767: 在functools.singledispatch中明确提及abc支持。
bpo-38816: 提供了关于
fork()与CPython运行时之间交互的更多细节,仅关注C-API。这包括关于在何处应该和不应该调用fork()的警告。bpo-38778: 记录了如果在子解释器中调用
os.fork()会引发RuntimeError的事实。bpo-38592: 在Python文档网站的语言切换器中添加巴西葡萄牙语。
bpo-38294: 将不再转义的字符列表添加到re.escape文档中。
bpo-38053: 更新了plistlib文档。
bpo-26868: 修复
PyModule_AddObject()的示例用法以正确处理错误。bpo-36797: 修复 distutils API 参考中的死链接。
bpo-37977: 更强烈和明确地警告关于 pickle 的不安全性。
bpo-37979: 在 datetime.fromisoformat 文档中添加了到 dateutil.parser.isoparse 的链接。由 Paul Ganssle 提供补丁。
bpo-12707: 弃用 info()、geturl()、getcode() 方法,分别推荐使用 headers、url 和 status 属性,针对 HTTPResponse 和 addinfourl。同时弃用 addinfourl 的 code 属性,推荐使用 status 属性。由 Ashwin Ramaswami 提供补丁。
bpo-37937: 在
sys.settrace()文档中提及frame.f_trace。bpo-37759: 开始编辑 Whatsnew 3.8。
bpo-37726: 停止在教程中推荐使用 getopt 进行命令行参数解析,并推广 argparse。
bpo-32910: 移除关于 venv 的 Deactivate 如何工作的实现特定行为。
bpo-37256: 修正
urllib.request中Request的参数措辞。bpo-37284: 添加简短说明,指出任何新的
sys.implementation必需属性必须经过 PEP 流程。bpo-30088: 文档说明
mailbox.Maildir构造函数不尝试验证 maildir 文件夹布局的正确性。由 Sviatoslav Sydorenko 提供补丁。bpo-37521: 修复
importlib示例,通过 importlib.util.module_from_spec() 立即将新创建的模块插入 sys.modules,而不是在调用 loader.exec_module() 之后。感谢 Benjamin Mintz 发现这个错误。
bpo-37456: 斜杠 ('/') 现在成为语法的一部分。
bpo-37487: 修正 PyList_GetItem 索引描述以包含 0。
bpo-37149: 将死链接 Tkinter 8.5 参考(作者:John Shipman, New Mexico Tech)替换为 archive.org 的副本链接。
bpo-37478: 在 os.chdir() 的描述中添加了可能的异常。
bpo-34903: 记录了在
datetime.datetime.strptime()中,某些两位数格式的前导零是可选的。由 Mike Gleen 提供补丁。bpo-36260: 在 zipfile 模块文档中添加了解压缩的陷阱。
bpo-37004: 在 difflib 的文档中,添加了一个明确警告,指出 SequenceMatcher 的 ratio 方法的结果可能依赖于输入字符串的顺序。
bpo-36960: 重构了
datetime文档,旨在使其更加用户友好并提高可读性。由 Brad Solomon 提供补丁。bpo-36487: 在 C-API 文档中明确了“主”解释器的含义。
bpo-23460: 更新了使用
:g说明符进行十进制字符串格式化的文档,以反映正确的指数表示法截止点。原始由 Tuomas Suutari 提供补丁。bpo-35803: 记录并测试了
tempfile函数可能接受一个 path-like object 作为dir参数。由 Anthony Sottile 提供补丁。bpo-33944: 添加了关于 .pth 文件中代码预期用途的说明。
bpo-34293: 修复了 Doc/Makefile 关于 PAPER 环境变量和 PDF 构建的问题。
bpo-25237: 为 tkinter 模块添加文档。
测试¶
bpo-38614: 修复了 test_asyncio.test_subprocess 的 test_communicate():使用
support.LONG_TIMEOUT(5 分钟) 而不是仅 1 分钟。bpo-38614: 向
test.support添加超时常量:LOOPBACK_TIMEOUT、INTERNET_TIMEOUT、SHORT_TIMEOUT和LONG_TIMEOUT。bpo-38502: 如果进程组可用(
os.setsid()和os.killpg()函数可用),test.regrtest 现在在多进程模式(-jN 命令行选项)中使用进程组。bpo-35998: 修复 test_asyncio.test_start_tls_server_1() 中的竞态条件。之前,测试 main() 函数替换协议和测试 ServerProto 协议在收到 HELLO 后发送 ANSWER 之间存在竞态条件。现在,只有测试 main() 函数负责发送数据,ServerProto 不再发送数据。
bpo-38470: 在没有长路径支持的 Windows 上修复
test_compileall.test_compile_dir_maxlevels():仅创建 3 个子目录,而不是创建 20 到 100 个子目录。bpo-37531: 在超时时,regrtest 不再尝试再次调用
popen.communicate():它可能会挂起,直到所有使用 stdout 和 stderr 管道的子进程完成。杀死工作进程并忽略其输出。还将主进程的 faulthandler 超时从 1 分钟更改为 5 分钟,以适应 Python 最慢的构建机器人。bpo-38239: 为链接时优化 (LTO) 构建修复 test_gdb。
bpo-38275: test_ssl 现在更好地处理禁用的 TLS/SSL 版本。识别 OpenSSL 的加密策略和运行时设置,并跳过禁用版本的测试。测试还接受更多的 TLS minimum_versions,以适应那些用严格设置覆盖 OpenSSL 默认值的平台。
bpo-38271: test_ssl 的私钥之前是用 3DES 加密的传统 PKCS#5 格式。一些严格的加密策略会阻止 3DES 和 PKCS#5 的摘要算法。现在改用 PKCS#8 格式并使用 AES256 加密。
bpo-38270: test.support 现在有一个辅助函数来检查哈希摘要函数的可用性。重构了几个测试以避免使用 MD5 并使用 SHA256 代替。其他测试被标记为使用 MD5,并在 MD5 被禁用时跳过。
bpo-37123: 多处理测试 test_mymanager() 现在也期望 -SIGTERM,不仅仅是退出码 0。如果管理器进程停止时间超过 1 秒,BaseManager._finalize_manager() 会向管理器进程发送 SIGTERM,这在慢速构建机器人上会发生。
bpo-38212: 多进程测试:将 test_queue_feeder_donot_stop_onexc() 的超时时间从 1 秒增加到 60 秒。
bpo-38117: 使用 OpenSSL 1.1.1d 进行测试
bpo-38018: 提高 multiprocessing.shared_memory 的代码覆盖率。
bpo-37805: 为 json.dump(..., skipkeys=True) 添加测试。由 Donghee Na 提供补丁。
bpo-37531: 增强 regrtest 多进程超时功能:在终止工作进程时写入消息,捕获 popen.kill() 和 popen.wait() 异常,对第二次调用 popen.communicate() 设置超时。
bpo-37876: 为 ROT-13 编解码器添加测试。
bpo-36833: 为
datetime模块的 C API 中的PyDateTime_xxx_GET_xxx()宏添加测试。由 Joannah Nanjekye 提供补丁。bpo-37558: 修复 test_shared_memory_cleaned_after_process_termination 名称处理
bpo-37526: 添加
test.support.catch_threading_exception():使用threading.excepthook()捕获threading.Thread异常的上下文管理器。bpo-37421: test_concurrent_futures 现在如果 ForkServer 实例正在运行,则明确停止它。
bpo-37421: 多进程测试现在如果 ForkServer 实例正在运行,则停止它:关闭“alive”文件描述符以请求服务器停止,然后移除其 UNIX 地址。
bpo-37421: test_distutils.test_build_ext() 现在能够在 Windows 上移除临时目录:不在当前进程中导入新构建的 C 扩展(“xx”),而是在一个单独的进程中测试它。
bpo-37421: test_concurrent_futures 现在清理多进程以立即移除由 multiprocessing.util.get_temp_dir() 创建的临时目录。
bpo-37421: test_winconsoleio 不再泄漏临时文件:使用 tempfile.TemporaryFile() 在测试完成时移除它。
bpo-37421: 多进程测试现在明确调用
_run_finalizers()以立即移除测试创建的临时目录。bpo-37421: urllib.request 测试现在调用
urlcleanup()来移除由urlretrieve()测试创建的临时文件,并清除由urlopen()和间接调用urlopen()的函数设置的_opener全局变量。bpo-37472: 移除
Lib/test/outstanding_bugs.py。bpo-37199: 修复当 IPv6 不可用或禁用时的测试失败问题。
bpo-19696: 在 "test_pkg_import.py" 中用 "random.choice" 替换已弃用的方法 "random.choose"。
bpo-37335: 从 c 语言环境强制测试中移除不再必要的代码。
bpo-37421: 修复 test_shutil 以不再泄漏临时文件。
bpo-37411: 修复 test_wsgiref.testEnviron() 以不再依赖环境变量(如果设置了 "X" 变量也不会失败)。
bpo-37400: 修复 test_os.test_chown():使用 os.getgroups() 而不是 grp.getgrall() 来获取组。同时将测试重命名为 test_chown_gid()。
bpo-37359: 向 python3 -m test 添加 --cleanup 选项以移除之前失败作业的
test_python_*目录。添加 "make cleantest" 以运行python3 -m test --cleanup。bpo-37362: 如果 test_gdb 在 stderr 上接收到“意外”消息,它不再失败:现在它会忽略 stderr。test_gdb 的目的是测试 python-gdb.py 命令是否按预期工作,而不是测试 gdb。
bpo-35998: 在 test_asyncio: test_start_tls_server_1() 中避免 TimeoutError。
bpo-37278: 修复 test_asyncio ProactorLoopCtrlC:加入线程以防止泄漏运行中的线程和引用。
bpo-37261: 修复
test.support.catch_unraisable_exception():它的 __exit__() 方法现在忽略在清除其unraisable属性时引发的不可捕获异常。bpo-37069: regrtest 现在使用
sys.unraisablehook()来标记测试为“环境已更改”(ENV_CHANGED),如果它发出了“不可捕获的异常”。此外,regrtest 在这种情况下会记录一个警告。使用
python3 -m test --fail-env-changed来捕获测试中的不可捕获异常。bpo-37252: 修复devpoll测试中
test_close和test_events_mask_overflow的断言。bpo-37169: 重写
_PyObject_IsFreed()单元测试。bpo-37153:
test_venv.test_multiprocessing()现在显式调用pool.terminate()以等待池完成。bpo-34001: 使test_ssl能够与LibreSSL一起通过。LibreSSL处理最小和最大TLS版本的方式与OpenSSL不同。
bpo-36919: 使
test_source_encoding.test_issue2301实现独立。该测试现在适用于CPython和IronPython。bpo-30202: 更新
test.test_importlib.test_abc以测试find_spec()。bpo-28009: 修改test_uuid逻辑,以测试当程序可用且可用于获取MACADDR作为UUID基础时的情况。由M. Felt提供补丁。
bpo-34596: 当
unittest.skip()未被调用时,回退到默认原因。由Naitree Zhu提供补丁。
构建¶
bpo-38809: 在Windows上,构建脚本现在可以识别并使用活动虚拟环境中的python.exe。
bpo-38684: 当Blake2被禁用但OpenSSL支持它时,修复_hashlib构建。
bpo-38468: Misc/python-config.in现在对所有仍存在的
sysconfig.get_config_var()调用使用getvar()。由Joannah Nanjekye提供补丁。bpo-37415: 修复ICC编译器的stdatomic.h头文件检查:ICC实现缺少Python所需的atomic_uintptr_t类型。
bpo-38301: 在Solaris系列中,我们必须确保使用
-D_REENTRANT。由Jesús Cea Avión提供补丁。bpo-36002: 使用
AC_PATH_TOOL``而非 ``AC_PATH_TARGET_TOOL定位llvm-profdata和``llvm-ar``二进制文件。bpo-37936:
.gitignore文件系统地“根植”所有规则,规则末尾不带斜杠,这些规则旨在应用于仓库中特定位置的文件。以前,当要忽略的文件恰好在仓库的根目录时,我们经常会意外地忽略树中任何地方同名的文件和目录。bpo-37760: 用于将Unicode字符数据库中的信息转换为由
str方法和unicodedata模块使用的生成代码和数据的脚本Tools/unicode/makeunicodedata.py,现在将每个字符的数据作为一个具有命名属性的dataclass处理,而不是一个长度为18的不同字段列表。bpo-37936:
.gitignore文件不再适用于实际上在Git仓库中被跟踪的任何文件。由Greg Price提供补丁。bpo-37725: 更改“clean”makefile目标,以同时清除程序引导优化(PGO)数据。以前,您必须使用“make clean”和“make profile-removal”,或者“make clobber”。
bpo-37707: 标记一些单独的测试在使用--pgo时跳过。标记的测试显著增加PGO任务时间,并且可能无助于改进最终可执行文件的优化。
bpo-36044: 减少为PGO生成任务运行的单元测试数量。这使任务速度提高了约15倍。运行完整的单元测试套件很慢。这一变化可能导致构建稍微不那么优化,因为不会执行那么多代码分支。如果您愿意等待更慢的构建,可以使用'./configure [..] PROFILE_TASK="-m test --pgo-extended"'恢复旧行为。我们不保证哪个PGO任务集会产生更快的构建。关心的用户应该运行自己的相关基准测试,因为结果可能依赖于环境、工作负载和编译器工具链。
bpo-37468:
make install不再安装distutils bdist_wininst使用的wininst-*.exe文件:bdist_wininst仅在Windows上工作。bpo-37189: 许多
PyRun_XXX()函数如PyRun_String()不再错误地导出在``libpython38.dll`` 中。再次导出它们以修复ABI兼容性。bpo-25361: 在Windows 32位构建中启用SSE2指令的使用。
bpo-36210: 更新AIX的可选扩展模块检测。osssaudiodev和spwd不适用于AIX,不再报告为缺失。第三方打包的ncurses(支持ASIS)与官方支持的AIX curses库冲突,因此配置AIX使用libcurses.a。但是,跳过尝试构建_curses_panel。
由M Felt提供补丁
Windows¶
bpo-38589: 修复当Windows未安装在C盘时的HTML帮助快捷方式
bpo-38453: 确保ntpath.realpath()正确解析相对路径。
bpo-38519: 恢复nuget.org和Microsoft Store包中缺失的内部C头文件。
bpo-38492: 移除
pythonw.exe对Microsoft C++运行时的依赖。bpo-38344: 修复activate.bat中的错误消息
bpo-38359: 确保
pyw.exe启动器读取正确的注册表键。bpo-38355: 修复
ntpath.realpath在sys.executable上失败的问题。bpo-38117: 更新捆绑的OpenSSL至1.1.1d
bpo-38092: 减少在Windows虚拟环境中使用多进程时的开销。
bpo-38133: 允许py.exe启动器定位来自Microsoft Store的安装,并改进活动虚拟环境的显示。
bpo-38114:
pip.ini不再包含在Nuget包中。bpo-32592: 将Windows 8设置为API支持的最低要求版本
bpo-36634:
os.cpu_count()现在返回活动处理器而非最大处理器。bpo-36634: 当现有变量包含双引号字符时,venv activate.bat现在可以工作。
bpo-38081: 防止在
'NUL'上调用os.path.realpath()时出错。bpo-38087: 修复test_pathlib和test_ntpath中的大小写敏感性。
bpo-38088: 修复仅安装v142工具集时,distutils找不到vcruntime140.dll的问题。
bpo-37283: 确保命令行和unattend.xml设置覆盖Windows安装程序中先前检测到的状态。
bpo-38020: 修复在调用
os.readlink()(或间接通过realpath()) 时,如果文件不是支持的链接可能导致崩溃的问题。bpo-37705: 改进
winerror_to_errno()的实现。bpo-1311: Windows 上的
nul文件现在从exists()返回 True,并从os.stat()返回一个有效结果,设置了S_IFCHR。bpo-9949: 在
os.realpath()中启用对符号链接的支持。bpo-37834: 在
os.lstat()中将 Windows 上的所有名称代理重解析点和其他重解析点在os.stat()中视为常规文件。bpo-36266: 在
_PyImport_FindSharedFuncptrWindows()中模块导入期间发生 DLL 加载失败时,在格式化的错误消息中添加模块名称。由 Srinivas Nyayapati 提供补丁。bpo-25172: 尝试在 Windows 上导入
crypt模块将导致ImportError,并附带一条消息说明该模块在 Windows 上不受支持。在其他平台上,如果底层的_crypt模块不可用,ImportError 将包含一条解释问题的消息。bpo-37778: 修复用于 Microsoft Store 包的文件关联的图标。
bpo-37734: 修复使用注册表值从 Microsoft Store 应用启动 Python 的问题。
bpo-37702: 修复在 Windows 上创建 SSLContext 对象或运行
urllib.request.urlopen('https://...')时的内存泄漏。bpo-37672: 将 Windows Store 包的 pip 切换到使用捆绑的
pip.ini而不是PIP_USER变量。bpo-10945: 正式放弃在非 Windows 系统上创建 bdist_wininst 安装程序的支持。
bpo-37445: 在
FormatMessageW()调用中包含FORMAT_MESSAGE_IGNORE_INSERTS标志。bpo-37369: 修复从 Microsoft Store 运行时
sys.executable的路径。bpo-37380: 在Windows上,不再通过
subprocess._active收集未完成的进程以供后续清理。由Ruslan Kuprieiev提供补丁。bpo-37351: 从标准的Windows发行版中移除libpython38.a。
bpo-35360: 更新Windows构建以使用SQLite 3.28.0。
bpo-36779: 确保在活动代码页设置为CP_UTF7或CP_UTF8时,Windows上的
time.tzname是正确的。bpo-32587: 使
winreg.REG_MULTI_SZ支持零长度字符串。bpo-28269: 将
strcasecmp()的使用替换为系统函数_stricmp()。由Minmin Gong提供补丁。bpo-36590: 向socket模块添加原生蓝牙RFCOMM支持。
macOS¶
bpo-38117: 在macOS安装程序中更新OpenSSL至1.1.1d。
bpo-38089: 将Azure Pipelines迁移至最新的VM版本,并使macOS测试变为可选。
bpo-18049: 在macOS上将线程的默认堆栈大小从5MB增加到16MB,以匹配主线程的堆栈大小。这避免了线程深度递归时的崩溃。
bpo-34602: 通过在运行时不再调用resource.setrlimit来增加进程堆栈大小限制,避免在macOS上的测试套件失败。由于解释器正在构建为更大的默认堆栈大小,运行时更改不再需要。
bpo-35360: 更新macOS安装程序以使用SQLite 3.28.0。
bpo-34631: 在macOS安装程序中更新OpenSSL至1.1.1c。
IDLE¶
bpo-26353: 停止在保存IDLE shell窗口时添加新行。
bpo-4630: 添加一个选项来切换IDLE的shell、编辑器和输出窗口的光标闪烁。参见设置、常规、窗口首选项、光标闪烁。由Zackery Spytz提供补丁。
bpo-38598: 不尝试编译IDLE shell或输出窗口
bpo-36698: IDLE在向stderr写入不可编码的字符时不再失败。现在它会像常规的Python解释器一样用反斜杠转义它们。添加了标准流的
errors字段。bpo-35379: 退出IDLE时,捕获任何AttributeError。当EditorWindow.close被调用两次时会发生一次。当IDLE从终端运行时,打印回溯是无用且烦人的。
bpo-38183: 为避免问题,test_idle忽略用户配置目录。它不再尝试创建或访问.idlerc或其中的任何文件。用户必须运行IDLE来发现保存设置时的问题。
bpo-38077: IDLE在初始化用户命名空间时不再添加'argv'。此错误仅影响3.7.4和3.8.0b2至3.8.0b4版本。
bpo-38041: Shell重启行现在填满窗口宽度,始终以'='开头,并避免不必要的换行。如果包含的文件名相对于宽度较长,行仍会换行。
bpo-35771: 为避免在较慢的机器上偶尔出现的虚假test_idle失败,增加test_tooltip中的``hover_delay``。
bpo-37824: 正确处理IDLE shell中的用户输入警告。停止将SyntaxWarnings转为SyntaxErrors。
bpo-37929: 当没有shell窗口时,IDLE设置对话框现在能正确关闭。
bpo-37902: 为IDLE模块、路径和堆栈浏览器添加鼠标滚轮滚动。由George Zhang提供补丁。
bpo-37849: 修复了补全列表在当前行上方显示时过高或过低的问题。
bpo-36419: 重构IDLE自动补全并改进测试。
bpo-37748: 重新排序运行菜单。将最常见的选择,运行模块,放在顶部。
bpo-37692: 通过示例shell交互和改进的shell元素标签来改善高亮配置示例。
bpo-37628: 设置对话框不再随字体大小扩展。
bpo-37627: 使用最近一次输入的命令行参数初始化自定义运行对话框。用户可以在提交前选择编辑。
bpo-33610: 修复首次切换时代码上下文未显示正确上下文的问题。
bpo-37530: 优化代码上下文以减少不必要的后台活动。字体和高亮更改现在与文本更改同时进行,而不是在随机延迟后。
bpo-27452: 通过内联
RemoveFile和简化CreateConfigHandlers中file的处理来清理config.py。bpo-37325: 修复帮助源和自定义运行对话框的标签焦点遍历顺序。
bpo-37321: 现在,两个子进程连接错误消息都指向IDLE文档的'启动失败'部分。
bpo-17535: 为IDLE编辑器窗口添加可选的行号。除非在配置对话框的常规标签中设置,否则窗口打开时不显示行号。
bpo-26806: 为了补偿由IDLE添加的堆栈帧并避免低递归限制可能带来的问题,用户代码执行过程中的限制增加了30。报告递归限制时减去30,使这一增加大部分透明。
bpo-37177: 正确地将搜索对话框'附加'到其主窗口,使其行为类似于其他对话框,并且不会隐藏在主窗口后面。
bpo-37039: 通过首次使用特定屏幕时暂时最大化窗口来调整“缩放高度”以适应单个屏幕。更改屏幕设置可能会使保存的高度无效。窗口最大化时,“缩放高度”无效。
bpo-35763: 通过仅在首行有空间时添加关于'/'仅表示位置的提示,使调用提示提醒不那么显眼。
bpo-5680: 在运行菜单中添加'运行...定制'以使用定制设置运行模块。输入的任何'命令行参数'都会添加到sys.argv。可以抑制正常的Shell主模块重启。
bpo-36390: 将格式菜单功能收集到format.py中。合并paragraph.py、rstrip.py和editor.py中的格式方法。
工具/示例¶
bpo-38118: 更新Valgrind抑制文件以忽略在使用GCC内置strcmp()时
PyUnicode_Decode()中的误报。bpo-38347: pathfix.py:递归工作时,假设所有以'.py'结尾的文件都是Python脚本。
bpo-37803: pdb的
--help和--version长选项现在可以工作了。bpo-37942: 改进ArgumentClinic对浮点数的转换器。
bpo-37704: 移除
Tools/scripts/h2py.py:使用cffi在Python中访问C API。bpo-37675: 2to3现在可以从压缩的标准库中运行。
bpo-37034: Argument Clinic现在在使用仅关键字参数的错误时使用参数名称而不是它们的位置。补丁由Rémi Lapeyre贡献。
bpo-37064: 向pathscript.py脚本添加选项-k:保留shebang标志。向pathscript.py脚本添加选项-a:添加标志。
C API¶
bpo-37633: 重新导出
pythonrun.h中一些宏的函数兼容性包装器。bpo-38644: 为有限API提供
Py_EnterRecursiveCall()和Py_LeaveRecursiveCall()作为常规函数。之前,它们被定义为宏,但这些宏无法与有限API一起工作,因为有限API无法访问PyThreadState.recursion_depth字段。从稳定ABI中移除``_Py_CheckRecursionLimit``。bpo-38650: 全局变量
PyStructSequence_UnnamedField现在是一个常量,并引用一个常量字符串。bpo-38540: 修复了在未定义宏
PY_SSIZE_T_CLEAN时,PyArg_Parse()及类似函数对于格式单元"es#"和"et#"可能的内存泄漏。bpo-38395: 修复了由于在调用可能删除代理引用的对象的最后一个引用的某些关联方法时,
weakref.proxy对象的生命周期管理不正确而导致的崩溃。由Pablo Galindo提供补丁。bpo-36389:
_PyObject_CheckConsistency()函数现在在发布模式下也可用。例如,它可以用于调试GC中visit_decref()函数的崩溃。bpo-38266: 恢复PyThreadState_DeleteCurrent()的移除,并附带文档。
bpo-38303: 更新audioop扩展模块以使用稳定的ABI(PEP-384)。由Tyler Kieft提供补丁。
bpo-38234:
Py_SetPath()现在将sys.executable设置为程序完整路径 (Py_GetProgramFullPath()) 而不是程序名称 (Py_GetProgramName())。bpo-38234: Python忽略了传递给
Py_SetPath()、Py_SetPythonHome()和Py_SetProgramName()的参数:修复Python初始化以使用指定的参数。bpo-38205:
Py_UNREACHABLE()宏现在调用Py_FatalError()。bpo-38140: 通过PyMemberDef传递偏移量,使dict和weakref的偏移量对于C堆类型变得不透明。
bpo-15088: C函数
PyGen_NeedsFinalizing已被移除。它没有被记录、测试或在CPython中任何地方使用,在 PEP 442 的实现之后。由Joannah Nanjekye提供补丁。(由Joannah Nanjekye提供补丁)bpo-36763: 由
PySys_AddXOption()添加的选项现在与PyConfig.xoptions和命令行-X选项以相同的方式处理。bpo-37926: 修复
PySys_SetArgvEx(0, NULL, 0)中的崩溃。bpo-37879: 修复subtype_dealloc以在基类型为C堆类型时抑制类型递减引用计数。
bpo-37645: 添加
_PyObject_FunctionStr()以获取函数类对象的用户友好字符串表示。由Jeroen Demeyer提供补丁。bpo-29548: 函数
PyEval_CallObject、PyEval_CallFunction、PyEval_CallMethod和PyEval_CallObjectWithKeywords已被弃用。请改用PyObject_Call()及其变体。bpo-37151:
PyCFunction_Call现在是PyObject_Call()的弃用别名。bpo-37540: vectorcall协议现在要求调用者仅将字符串作为关键字名称传递。
bpo-37207: vectorcall协议现在对
type对象启用:将tp_vectorcall设置为一个vectorcall函数,用于在调用类本身时替代tp_new和tp_init。bpo-21120: 将Python-ast.h、ast.h和asdl.h排除在有限API之外。
bpo-37483: 新增函数
_PyObject_CallOneArg,用于调用带有一个位置参数的对象。bpo-37337: 为方法调用添加快速函数:
_PyObject_VectorcallMethod()、_PyObject_CallMethodNoArgs()和_PyObject_CallMethodOneArg()。bpo-28805: 已记录
METH_FASTCALL调用约定。bpo-37221: 新函数
PyCode_NewWithPosOnlyArgs()允许像PyCode_New()一样创建代码对象,但带有一个额外的 posonlyargcount 参数,用于指示位置仅参数的数量。bpo-37194: 向C API添加一个新的公共
PyObject_CallNoArgs()函数:调用一个可调用的Python对象而不带任何参数。这是调用不带任何参数的回调函数的最有效方式。例如,在x86-64上,``PyObject_CallFunctionObjArgs(func, NULL)``每次调用在栈上分配960字节,而``PyObject_CallNoArgs(func)``每次调用仅分配624字节。bpo-37170: 修复
PyLong_AsUnsignedLongLongMask()中的错误转换。bpo-35381: 将posixmodule.c中静态分配的类型
DirEntryType和ScandirIteratorType转换为堆分配类型。bpo-34331: 在实例化带有未覆盖抽象方法的抽象类时,在错误消息中使用单数/复数名词。
Python 3.8.0 beta 1¶
发布日期: 2019-06-04
安全性¶
bpo-35907: CVE 2019-9948: 通过禁止在
urllib.request的URLopener().open()``和 ``URLopener().retrieve()中使用local-file://和local_file://URL方案来避免文件读取。bpo-33529: 防止在电子邮件头编码中使用的fold函数在头中有太多非ASCII字符时进入无限循环。
bpo-33164: 更新了blake2实现,使用平台提供的安全memset实现。
核心与内置函数¶
bpo-35814: 允许在带注释的赋值的右侧进行解包。特别是,现在允许``t: Tuple[int, ...] = x, y, *z``。
bpo-37126: 现在所有structseq对象都由垃圾收集器跟踪。由Pablo Galindo提交的补丁。
bpo-37122: 使代码对象的 co_argcount 属性表示位置参数的总数(包括仅限位置参数)。co_posonlyargcount 的值可用于区分哪些参数是仅限位置的,而差值(co_argcount - co_posonlyargcount)是位置或关键字参数的数量。由Pablo Galindo提交的补丁。
bpo-20092:
int、float和complex的构造函数现在将使用__index__()特殊方法,如果可用且相应的__int__()、__float__()或__complex__()方法不可用。bpo-37087: 向OpenBSD添加原生线程ID(TID)支持。
bpo-26219: 实现了每操作码缓存机制,``LOAD_GLOBAL``指令使用它。``LOAD_GLOBAL``现在快了约40%。由Yury Selivanov和Inada Naoki贡献。
bpo-37072: 当flags为NULL时,修复PyAST_FromNodeObject()中的崩溃。
bpo-37029: 由于使用线性搜索来保持
obmalloc.c的可用的arena列表按空闲内存池数量的顺序排序,释放大量小对象可能需要与arena数量的平方成正比的时间。现在无需搜索即可完成,使最坏情况下的时间与arena数量成线性关系。对于这一点非常明显的程序(通常同时有超过10万个小对象存活),这可以大大减少释放其内存所需的时间。bpo-26423: 当
sizeof(long) < sizeof(Py_ssize_t)(例如,64位Windows) 时,修复``wrap_lenfunc()``中可能的溢出。bpo-37050: 改进用于“调试”f字符串的AST,这些字符串使用'='来打印出正在评估的表达式的源代码。从FormattedValue节点中删除expr_text,转而使用一个Constant字符串节点(可能与f字符串内部的相邻常量表达式合并)。
bpo-22385:
bytes.hex、bytearray.hex和memoryview.hex方法以及``binascii.hexlify``和b2a_hex函数现在能够在十六进制字节之间包含可选的分隔符。这一功能受到MicroPython的hexlify实现的启发。bpo-37032: 向代码类型(
types.CodeType)添加了新的replace()方法。bpo-37007: 在Windows上实现
socket.if_nameindex()、socket.if_nametoindex()和socket.if_indextoname()。bpo-36829:
PyErr_WriteUnraisable()现在在没有当前回溯的情况下创建一个回溯对象。此外,调用PyErr_NormalizeException()和PyException_SetTraceback()以规范化异常值。忽略任何错误。bpo-36878: 仅当第一个字符是ASCII时才接受
# type: ignore之后的文本。这是为了不允许像# type: ignoreé这样的东西。bpo-36878: 将出现在
# type: ignore注释之后的文本存储在AST中。例如,像``# type: ignore[E1000]``这样的类型忽略将在其AST节点中存储字符串"[E1000]"。bpo-2180: 由Anthony Sottile处理的,将EOF处的行延续视为
SyntaxError。bpo-36907: 修复了在调用带有关键字字典(
f(**kwargs))的C函数并在该函数运行时更改字典``kwargs``时崩溃的问题。bpo-36946: 修复处理切片时可能出现的带符号整数溢出。
bpo-36826: 向ast_unparse.c添加NamedExpression种类支持。
bpo-1875: 如果将被优化掉的代码块(例如总是为假的if条件)包含语法错误,现在会引发
SyntaxError。由Pablo Galindo提供补丁。bpo-36027: 允许通过三参数
pow计算模逆:现在在第一个和第三个参数互质的情况下,允许第二个参数为负数。bpo-36861: 更新Unicode数据库至版本12.1.0。
bpo-28866: 避免缓存类型定义了mro()的类的属性,以避免硬缓存无效问题。
bpo-36851: 如果执行以返回结束且堆栈不为空,现在会正确清理
FrameType堆栈。bpo-34616:
compile()内置函数现在支持ast.PyCF_ALLOW_TOP_LEVEL_AWAIT标志,该标志允许编译包含顶层await、async with或async for的源代码。这在已经异步的函数中评估异步代码时非常有用;例如在自定义REPL中。bpo-36842: 实现PEP 578,添加sys.audit、io.open_code及相关API。
bpo-27639: 修正UserList切片操作的返回类型。由Michael Blahay、Erick Cervantes和vaultah提供补丁。
bpo-36737: 将PyRuntimeState.warnings移动到每个解释器状态(通过“模块状态”)。
bpo-36793: 从内置类型
bool、int、float、complex和标准库中的几个类中移除__str__实现。它们现在从object继承__str__()。bpo-36817: 为调试目的在f-字符串中添加
=``特性。这可以放在 ``!s、!r或!a之前。它会生成表达式的文本,后跟等号,然后是表达式值的repr。因此,f'{3*9+15=}'``将等于字符串 ``'3*9+15=42'。如果指定了=,则默认转换设置为!r,除非给出了格式说明符,在这种情况下,格式化行为不变,将使用__format__。bpo-24048: 在import.c的
remove_module()期间保存实时异常。bpo-27987: 在64位平台上,pymalloc返回的内存块对齐方式由8字节改为16字节,以符合x86-64 ABI。最近的编译器更频繁地假设这种对齐方式。由Inada Naoki提供补丁。
bpo-36601: 从Python内部的C信号处理器中移除了一个早已无意义的 ``getpid() == main_pid``检查。
bpo-36594: 修复了格式字符串中
%p的错误使用。由Zackery Spytz提供补丁。bpo-36045:
builtins.help()现在为异步函数前缀async。bpo-36084: 向threading.Thread对象添加原生线程ID(TID)(支持的平台:Windows、FreeBSD、Linux、macOS)
bpo-36035: 添加了针对与pathlib组合使用的损坏符号链接的修复。
bpo-35983: 添加了新的trashcan宏来处理当子类的
tp_dealloc调用基类的tp_dealloc且该基类使用trashcan机制时可能发生的双重释放问题。由Jeroen Demeyer提供补丁。bpo-20602: 在关闭期间不清除
sys.flags和sys.float_info。由Zackery Spytz提供补丁。bpo-32388: 移除tp_flags中的跨版本二进制兼容性要求。
bpo-31862: 将binascii移植到PEP 489多阶段初始化。由Marcel Plch提供补丁。
库¶
bpo-37128: 添加了
math.perm()。bpo-37120: 添加SSLContext.num_tickets以控制TLSv1.3会话票证的数量。
bpo-12202: 修复了
msilib.SummaryInformation.GetProperty()中的错误处理。由 Zackery Spytz 提供补丁。bpo-26835: fcntl 模块现在包含了用于 memfd 密封的文件密封常量。
bpo-29262: 向
typing模块添加了get_origin()和get_args()内省辅助函数。bpo-12639:
msilib.Directory.start_component()现在在 keyfile 不为None时不再失败。bpo-36999: 添加了
asyncio.Task.get_coro()方法,以公开暴露任务的协程对象。bpo-35246: 使
asyncio.create_subprocess_exec()接受路径类参数。bpo-35279: 将
ThreadPoolExecutor的默认 max_workers 从cpu_count() * 5改为min(32, cpu_count() + 4)。之前的值在多核机器上不合理地大。bpo-37076:
_thread.start_new_thread()现在使用sys.unraisablehook()而非sys.excepthook()记录函数抛出的未捕获异常,以便钩子能够访问抛出异常的函数。bpo-33725: 在 macOS 上,
multiprocessing模块现在默认使用 spawn 启动方法。bpo-37054: 修复了
_pyio.BytesIO和_pyio.TextIOWrapper的析构函数:尽可能早地在类体中初始化它们的_buffer属性,因为它被__del__()调用close()时使用。bpo-37058: PEP 544:向
typing模块添加了Protocol和@runtime_checkable。bpo-36933: 已在 3.8 版本中弃用并标记为移除的函数
sys.set_coroutine_wrapper和sys.get_coroutine_wrapper已被移除。bpo-37047: 在
unittest.mock.AsyncMock设置中处理延迟绑定和属性访问以进行自动规范。记录在unittest.mock.MagicMock中新实现的异步方法。bpo-37049: PEP 589:向
typing模块添加了TypedDict。bpo-37046: PEP 586:向
typing模块添加了Literal。bpo-37045: PEP 591: 向
typing模块添加Final限定符和@final装饰器。bpo-37035: 如果 asyncio 传输中发生致命错误,则不要记录基于 OSError 的异常。对端可以生成几乎任何 OSError,用户无法通过修复自己的代码来避免这些异常。错误仍然会传播到用户代码,只是记录它们没有意义,并且会污染 asyncio 日志。
bpo-37001:
symtable.symtable()现在接受与内置compile()函数相同的源代码输入类型。由 Dino Viehland 提供补丁。bpo-37028: 实现 asyncio REPL
bpo-37027: 从 transport.get_extra_info('socket') 返回安全使用的代理套接字对象
bpo-32528: 使 asyncio.CancelledError 成为 BaseException。
这将解决许多 asyncio 用户常犯的一个错误:一个“except Exception”子句破坏了任务的取消。
除了这一变更,我们还将停止让 asyncio.TimeoutError 和 asyncio.InvalidStateError 继承自它们的 concurrent.futures.* 对应项。这些异常共享继承链没有意义。
bpo-1230540: 添加一个新的
threading.excepthook()函数,用于处理未捕获的threading.Thread.run()异常。可以重写此函数以控制如何处理未捕获的threading.Thread.run()异常。bpo-36996: 处理
unittest.mock.patch()用作异步函数装饰器的情况。bpo-37008: 添加支持对由
unittest.mock.mock_open()产生的 mock 调用next()bpo-27737: 在
email.header中允许仅包含空白的头编码 - 由 Batuhan Taskaya 提供bpo-36969: PDB 命令
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: 修复
asyncio.SelectorEventLoop.subprocess_exec()在Popen失败且以``stdin=subprocess.PIPE``调用时泄露文件描述符的问题。由Niklas Fiekas提供补丁。bpo-31855:
unittest.mock.mock_open()结果现在尊重read([size])的参数。补丁由Rémi Lapeyre贡献。bpo-35431: 实现
math.comb()函数,返回二项式系数,计算从n个项目中无重复且无序地选择k个项目的方式数。由Yash Aggarwal和Keller Fuchs提供补丁。bpo-26660: 修复
TemporaryDirectory清理中的权限错误。之前当在临时目录中创建了不可写或不可搜索的文件或目录时,``TemporaryDirectory.cleanup()``会失败。bpo-34271: 向ssl模块添加调试辅助功能。现在可以转储密钥材料并跟踪TLS协议。默认和stdlib上下文也支持SSLKEYLOGFILE环境变量。
bpo-26467: 添加了AsyncMock以支持使用unittest来模拟asyncio协程。由Lisa Roach提供补丁。
bpo-33569: dataclasses.InitVar: 暴露用于创建init变量的类型。
bpo-34424: 修复了当policy.linesep设置为多字符字符串时,包含编码字符串的消息的序列化问题。由Jens Troeger提供补丁。
bpo-34303:
functools.reduce()的性能略有提升。由Sergey Fedoseev提供补丁。bpo-33361: 修复了
codecs.StreamRecoder中的一个错误,其中搜索可能会在缓冲区中留下旧数据并破坏后续的读取调用。由Ammar Askar提供补丁。bpo-22454:
shlex模块现在暴露了shlex.join(),这是shlex.split()的反向操作。由Bo Bayles提供补丁。bpo-31922:
asyncio.AbstractEventLoop.create_datagram_endpoint(): 当允许广播时,不连接UDP套接字。这允许在UDP广播后接收回复。bpo-24882: 更改ThreadPoolExecutor以在创建新线程之前使用现有的空闲线程。
bpo-31961: 在Windows上的
subprocess.Popen()中添加了对bytes和path-like对象的支持。如果 shell 为False,args 参数现在接受一个 path-like object 和一个包含bytes和path-like对象的序列。executable 参数现在接受bytes和 path-like object。cwd 参数现在接受bytes对象。基于Anders Lorentsen的补丁。bpo-33123:
pathlib.Path.unlink现在接受一个 missing_ok 参数以避免引发FileNotFoundError。由Robert Buchholz提供补丁。bpo-32941: 允许
mmap.mmap对象访问madvise()系统调用(通过mmap.mmap.madvise())。bpo-22102: 添加了对磁盘设置为0的ZIP文件的支持。这类文件通常由Windows上的内置工具在使用ZIP64扩展时创建。由Francisco Facioni提供补丁。
bpo-32515: trace.py现在可以通过python3 -m trace -t --module module_name来运行模块。
bpo-32299: 修改了
unittest.mock.patch.dict(),使其作为上下文管理器使用时返回被修补的字典。由Vadim Tsander提供补丁。bpo-27141: 为
collections.UserList``和 ``collections.UserDict添加了__copy__()方法,以正确实现对象的浅拷贝。由Bar Harel提供补丁。bpo-31829: 现在在协议0的Unicode字符串pickle中,
\r、\0``和 ``\x1a(Windows上的文件结束符) 会被转义。这使得可以从Python 2中以文本模式打开的文件中无损失地加载它们。bpo-23395:
_thread.interrupt_main()现在在SIGINT信号被忽略或未被Python处理时避免设置Python错误状态。
文档¶
bpo-36896: 澄清了一些类型在Python版本间构造函数签名不稳定。
bpo-36686: 改进了
asyncio.subprocess_exec函数stdin、stdout和stderr参数的文档,指定了哪些值受支持。同时提到不支持作为文本解码。添加了一些测试来验证传递给std*参数的各种值是否实际工作。
bpo-36984: 改进了
typing模块中添加版本引用的说明 - 由Anthony Sottile提供。bpo-36868: 新变化现在提到SSLContext.hostname_checks_common_name而不是SSLContext.host_flags。
bpo-35924: 在
curses.addstr()文档中添加了一条说明,警告由于ncurses的bug,多行字符串可能导致段错误。bpo-36783: 根据PEP 495,为Time_FromTimeAndFold和PyDateTime_FromDateAndTimeAndFold添加了C API文档。由Edison Abahurire提供补丁。
bpo-36797: 更多遗留的distutils文档已被删除,或者更明确地标记为仅在setuptools文档独立覆盖之前保留。
bpo-22865: 增加了关于
pty.spawn函数的文档细节。bpo-35397: 移除弃用并记录urllib.parse.unwrap()。由Rémi Lapeyre提供补丁。
bpo-32995: 在词汇表中添加了上下文变量。
bpo-33519: 澄清
copy()不是MutableSequenceABC的一部分。bpo-33482: 使
codecs.StreamRecoder.writelines接受字节列表。bpo-25735: 为func factorial添加了文档,以表明返回整数值。
bpo-20285: 扩展object.__doc__(文档字符串)以使其更清晰。修改pydoc.py,以便help(object)列出对象方法(对于其他类,help省略了object基类的方法)。
测试¶
bpo-37069: 修改test_coroutines、test_cprofile、test_generators、test_raise、test_ssl和test_yield_from,使用
test.support.catch_unraisable_exception()而非test.support.captured_stderr()。bpo-37098: 修复旧版Linux内核上的test_memfd_create。
bpo-37081: 使用OpenSSL 1.1.1c进行测试。
bpo-36829: 添加
test.support.catch_unraisable_exception(): 使用sys.unraisablehook()捕获不可报告异常的上下文管理器。bpo-36915: 主regrtest进程现在即使工作进程崩溃或在KeyboardInterrupt(CTRL+c)时被杀死,也会始终移除所有工作进程的临时目录。
bpo-36719: "python3 -m test -jN ..."现在在工作者进程崩溃(CHILD_ERROR状态)时继续执行下一个测试。以前,测试套件会立即停止。使用--failfast在第一个错误处停止。
bpo-36816: 更新Lib/test/selfsigned_pythontestdotnet.pem以匹配self-signed.pythontest.net的新TLS证书。
bpo-35925: 当现代操作系统或发行版默认的OpenSSL策略拒绝连接到证书较弱的服务器时,跳过httplib和nntplib的网络测试。
bpo-36782: 为
datetime模块中的几个C API函数添加测试。补丁由Edison Abahurire提供。bpo-36342: 如果平台缺少可正常工作的sem_open,则在test_venv中修复test_multiprocessing。
构建¶
bpo-36721: 要将Python嵌入到应用程序中,必须向
python3-config --libs --embed传递一个新的--embed选项以获取-lpython3.8(将应用程序链接到libpython) 。为了同时支持3.8及更早版本,首先尝试python3-config --libs --embed,如果前一个命令失败,则回退到``python3-config --libs`` (不带--embed) 。增加一个 pkg-config
python-3.8-embed模块用来将 Python 嵌入到一个应用中:pkg-config python-3.8-embed --libs包含-lpython3.8。 要同时支持 3.8 和旧版本,请先尝试pkg-config python-X.Y-embed --libs并在此命令失败时回退到pkg-config python-X.Y --libs(即不带--embed) (请将X.Y替换为 Python 版本号)。另一方面,
pkg-config python3.8 --libs``不再包含 ``-lpython3.8。C扩展不应该链接到libpython(除了在Android上,这种情况由脚本处理);这一变化是有意为之的向后不兼容。bpo-36786: "make install"现在并行运行compileall。
Windows¶
bpo-36965: 包含STATUS_CONTROL_C_EXIT而不依赖于MSC编译器
bpo-35926: 为Windows更新到OpenSSL 1.1.1b。
bpo-29883: 为Proactor Event Loop添加对UDP传输的Windows支持。由Adam Meily提供补丁。
bpo-33407: 对MSVC实现了
Py_DEPRECATED()宏。
macOS¶
bpo-36231: 支持在macOS上在没有安装/usr/include的情况下构建Python。从macOS 10.14开始,系统头文件仅通过Command Line Tools或Xcode应用程序提供的SDK可用。
IDLE¶
工具/示例¶
bpo-37053: 在Tools/parser/unparse.py中正确处理像u"bar"这样的字符串。由Chih-Hsuan Yen提供补丁。
C API¶
bpo-36379: 修复当在C中实现
__ipow__时尝试使用 modulo 参数导致的崩溃。bpo-37107: 更新
PyObject_CallMethodObjArgs()和``_PyObject_CallMethodIdObjArgs``以使用_PyObject_GetMethod,避免在许多情况下创建绑定方法对象。由Michael J. Sullivan提供补丁。bpo-36974: 实现 PEP 590: Vectorcall: CPython的快速调用协议。这是一个新的协议,用于优化自定义可调用对象的调用。
bpo-36763:
Py_Main()现在在调用PyErr_Print()时如果当前异常类型是SystemExit``则返回退出码而不是调用 ``Py_Exit(exitcode)。bpo-36922: 为行为类似于未绑定方法的对象添加新的类型标志``Py_TPFLAGS_METHOD_DESCRIPTOR``。这些对象支持由
LOAD_METHOD/CALL_METHOD操作码给出的优化。参见PEP 590。bpo-36728:
PyEval_ReInitThreads()函数已从C API中移除。不应显式调用它:应改用PyOS_AfterFork_Child()。
Python 3.8.0 alpha 4¶
发布日期: 2019-05-06
安全性¶
bpo-36742: 修复urlsplit()中预规范化字符的处理错误。
bpo-30458: 通过不允许带有嵌入空格或控制字符的URL路径进入底层http客户端请求来解决 CVE 2019-9740。此类潜在的恶意头部注入URL现在会导致抛出http.client.InvalidURL异常。
bpo-35755:
shutil.which()现在如果可用且PATH环境变量未设置时,会使用os.confstr("CS_PATH")。同时从posixpath.defpath中移除当前目录。在 Unix 上,如果PATH环境变量未设置,shutil.which()和subprocess模块不再在当前目录中搜索可执行文件。
核心与内置函数¶
bpo-36722: 在调试构建中,导入现在也会查找以发布模式编译的 C 扩展和以稳定 ABI 编译的 C 扩展。
bpo-32849: 修复 FreeBSD 上的 Python 初始化代码,以正确检测 stdin 文件描述符(fd 0)何时无效。
bpo-36623: 移除解析器头部和移除 pgen 后缺乏实现的函数声明。
bpo-20180: 由于 Argument Clinic 的贡献,
dict.pop()现在快了 33%。由 Inada Naoki 提供补丁。bpo-36611: 调试内存分配器:默认从 Python 内存分配器的调试钩子中禁用 serialno 字段,以减少内存占用 5%。当记录致命内存错误时,启用
tracemalloc以获取内存块分配的跟踪信息,以决定在哪里放置断点。编译 Python 时定义PYMEM_DEBUG_SERIALNO以恢复该字段。bpo-36588: 在 AIX 上,
sys.platform不再包含主版本号。总是返回'aix',而不是'aix3'..'aix7'。由于旧的 Python 版本包含版本号,建议总是使用sys.platform.startswith('aix')。由 M. Felt 贡献。bpo-36549: 将 str.capitalize 改为对第一个字符使用标题大小写而不是大写。
bpo-36475:
PyEval_AcquireLock()和PyEval_AcquireThread()现在如果解释器正在终止时被调用,将终止当前线程,使其与PyEval_RestoreThread()、Py_END_ALLOW_THREADS()和PyGILState_Ensure()保持一致。bpo-36504: 修复了 _ctypes.c 中
PyCArrayType_new()的有符号整数溢出问题。bpo-20844: 修复了在 Windows 上运行带有编码 cookie 和 LF 行结尾的脚本可能失败的问题。
bpo-24214: 修复了 UTF-8 增量解码器中 surrogatpass 错误处理程序的支持。
bpo-36452: 在迭代字典自身、
keys()、values()或items()时更改dict键,现在在某些键被删除/添加的情况下会被检测到,因此键的数量没有改变。在len(dict)次迭代后将引发RuntimeError。由 Thomas Perl 贡献。bpo-36459: 修复了 tokenizer.c 的
tok_nextc()可能导致的双重PyMem_FREE()问题。bpo-36433: 修复了 classmethoddescr_call 中的 TypeError 消息。
bpo-36430: 修复了
itertools.count()中可能存在的引用泄漏问题。bpo-36440: 在
ParserError消息中包含节点名称,而不是数字 ID。由 A. Skrobov 提供补丁。bpo-36143: 使用 pgen 从 Grammar 和 Tokens 文件重新生成
keyword。由 Pablo Galindo 提供补丁。bpo-18372: 在
pickle模块中添加缺失的PyObject_GC_Track()调用。由 Zackery Spytz 提供补丁。
库¶
bpo-35952: 修复了当编译器缺失时的 pythoninfo。
bpo-28238: xml.etree.ElementTree 的
.find*()方法现在可以搜索像{*}tag和{ns}*这样的通配符,它们可以匹配任何命名空间中的标签或命名空间中的所有标签。由 Stefan Behnel 提供补丁。bpo-26978:
pathlib.path.link_to()现在已实现。它创建一个指向路径的硬链接。bpo-1613500: 当向构造函数传递
inplace=True时,fileinput.FileInput现在使用输入文件模式来正确设置输出文件模式(之前是硬编码为'w')。bpo-36734: 修复在 HP-UX 上编译
faulthandler.c的问题。使用memset()将stack_t current_stack初始化为零。bpo-13611: xml.etree.ElementTree 包增加了对 C14N 2.0 序列化的支持。由 Stefan Behnel 提供补丁。
bpo-36669: 向 weakref.proxy 添加缺失的矩阵乘法运算符支持。
bpo-36676: 如果解析器目标定义了回调方法 "start_ns()" 和/或 "end_ns()",xml.etree.ElementTree 中的 XMLParser() 会向解析器目标提供命名空间前缀上下文。由 Stefan Behnel 提供补丁。
bpo-36673: xml.etree.ElementTree 中的 TreeBuilder 和 XMLPullParser 增加了对解析注释和处理指令的支持。由 Stefan Behnel 提供补丁。
bpo-36650: functools.lru_cache() 的 C 版本将带有空
**kwargs字典的调用视为与完全没有关键字的调用不同。这不会导致错误的答案,但确实会触发意外的缓存未命中。bpo-28552: 如果
sys.executable为None或空字符串,修复distutils.sysconfig:使用os.getcwd()来初始化project_base。同时修复 distutils build 命令:如果sys.executable为None或空字符串,则不使用它。bpo-35755: 如果
PATH环境变量未设置,shutil.which()和distutils.spawn.find_executable现在使用os.confstr("CS_PATH")(如果可用) 代替os.defpath。此外,如果PATH环境变量设置为空字符串,则不使用os.confstr("CS_PATH")或os.defpath。bpo-25430: 提高
IPNetwork.__contains__()的性能。bpo-30485: xml.etree.ElementTree中的路径表达式现在可以通过传递一个空字符串前缀的默认命名空间,避免为标签使用显式的命名空间前缀(或“{命名空间}标签”符号)。
bpo-36598: 修复当代码在追踪下执行时,Mock对象与spec的
isinstance检查。由Karthikeyan Singaravelan提供补丁。bpo-18748: 在开发模式(
-Xdev)和调试版本中,io.IOBase析构函数现在会记录close()异常。在发布模式下,这些异常默认是静默的。bpo-36575:
_lsprof模块现在默认使用与time.perf_counter()相同的内部计时器。Unix上以前使用gettimeofday(2)。新计时器在大多数Unix平台上具有更好的分辨率,并且由于``perf_counter()``是单调的,计时不再受系统时钟更新的影响。由Inada Naoki提供补丁。bpo-33461: 当指定
encoding选项时,json.loads现在会发出DeprecationWarning。由Matthias Bussonnier提供补丁。bpo-36559: 为了优化导入时间,random模块现在在seed(version=2)时更倾向于使用精简的内部_sha512模块,而不是hashlib。
bpo-17561: 将backlog=None设置为socket.create_server的默认值。
bpo-34373: 修复
time.mktime()在AIX上对1970年之前年份的错误处理。bpo-36232: 当尝试打开实际上不存在的现有DBM数据库时,改进错误消息。由Marco Rougeth提供补丁。
bpo-36546: 添加statistics.quantiles()
bpo-36050: 优化
http.client.HTTPResponse.read()以处理大响应。补丁由Inada Naoki提供。bpo-36522: 如果在
http.client中 debuglevel 设置为>0,打印同一头部名称下多个值的所有值。由Matt Houglum提供补丁。bpo-36492: 弃用在应接受任意关键字参数并将其传递给其他函数的函数中,将必需参数(如 func)作为关键字参数传递的做法。现在,如果必需参数作为位置参数传递,则可以向这些函数传递任意关键字参数(即使名称是"self"和"func")。
bpo-27181: 添加 statistics.geometric_mean()。
bpo-30427:
os.path.normcase()依赖os.fspath()来检查其参数的类型。其posixpath.normcase()和ntpath.normcase()实现中的冗余检查已被移除。由 Wolfgang Maier 提供补丁。bpo-36385: 停止因IPv4八位组可能为八进制而拒绝它们。前导零被忽略,不再假定为指定八进制八位组。八位组始终是十进制数字。八位组仍必须不超过三位数字,包括前导零。
bpo-36434: 写入ZIP文件时的错误不再阻止其正确关闭。
bpo-36407: 修复了xml.dom.minidom中CDATA部分写入时的错误缩进。由Vladimir Surjaninov提供补丁。
bpo-36326: inspect.getdoc()现在可以在__slots__是字典时为成员对象找到文档字符串。
bpo-36366: 在未启动或已停止的
unittest.mock.patch()对象上调用stop()现在会返回None而不是引发RuntimeError,使该方法幂等。补丁由Karthikeyan Singaravelan提供。bpo-36348:
imap.IMAP4.logout()方法不再静默忽略任意异常。bpo-31904: 为VxWorks添加时间模块支持并修复test_time失败。
bpo-36227: 在函数
ElementTree.tostring()和ElementTree.tostringlist()中添加了对关键字参数default_namespace和xml_declaration的支持。bpo-36004: 新增了替代构造函数
datetime.date.fromisocalendar()和datetime.datetime.fromisocalendar(),这些函数可以从ISO年、周数和工作日构建日期对象;这些是每个类的isocalendar方法的逆操作。由Paul Ganssle提供补丁。bpo-35936:
modulefinder不再依赖于已弃用的imp模块,并且modulefinder.ModuleFinder的初始化器现在具有不可变的默认参数。由Brandt Bucher提供补丁。bpo-35376:
modulefinder正确处理了与错误包同名的模块。由Brandt Bucher提供补丁。bpo-17396:
modulefinder在遇到跟随导入中的语法错误时不再崩溃。由Brandt Bucher提供补丁。bpo-35934: 新增了
create_server()和has_dualstack_ipv6()便利函数,用于自动化创建服务器套接字时通常涉及的必要任务,包括在同一套接字上接受IPv4和IPv6连接。(由Giampaolo Rodola在 bpo-17561 中贡献。)bpo-23078: 向
unittest.mock.create_autospec()添加了对classmethod()和staticmethod()的支持。初始由Felipe Ochoa提供补丁。bpo-35416: 修复了distutils中潜在的资源警告。由Mickaël Schoentgen提供补丁。
bpo-25451: 向
tkinter.PhotoImage添加了透明度方法。由Zackery Spytz提供补丁。bpo-35082: 在调用
unittest.mock.Mock上的dir时不再返回已删除的属性。bpo-34547:
wsgiref.handlers.BaseHandler现在能够优雅地处理客户端连接的突然终止。由Petter Strandmark提供补丁。bpo-31658:
xml.sax.parse()现在支持 路径类对象。由Mickaël Schoentgen提供补丁。bpo-34139: 在绑定前移除旧的unix数据报套接字。
bpo-33530: 在
asyncio.create_connection()中实现了Happy Eyeballs。新增了两个参数 happy_eyeballs_delay 和*interleave*,用于指定Happy Eyeballs的行为。bpo-33291: 当在由任意可调用对象创建的方法上调用inspect函数isgeneratorfunction、iscoroutinefunction、isasyncgenfunction时,不再抛出AttributeError。而是返回False。
bpo-31310: 修复multiprocessing.semaphore_tracker,使其被子进程重用。
bpo-31292: 修复
setup.py check --restructuredtext对于包含include指令的文件的支持。
文档¶
bpo-36625: 从fractions.Fraction的文档字符串中移除过时的注释。
bpo-30840: 文档化相对导入。
bpo-36523: 为io.IOBase.writelines()添加文档字符串。
bpo-36345: 避免在
wsgiref文档中使用literalinclude指令时从``Tools/scripts/serve.py`` 复制代码。由Stéphane Wirtel贡献。bpo-36345: 在
wsgiref文档中使用Tools/scripts/serve.py脚本的代码作为示例。由Stéphane Wirtel贡献。bpo-36157: 为PyInterpreterState_Main()添加文档。
bpo-33043: 更新docs.python.org页面,在页面末尾(在'Reporting Bugs'和'About Documentation'之间)添加了一个'Contributing to Docs'链接。在'Found a Bug'页面的文档错误部分添加了额外的链接和信息。
bpo-35581: @typing.type_check_only现在允许类型存根标记在运行时不可用的函数和类。
bpo-33832: 在术语表中添加了'magic method'条目。
bpo-32913: 在正则表达式HOWTO中添加了re.Match.groupdict示例。
测试¶
bpo-36719: regrtest 现在总是检测不可回收的对象。之前,这个检查只在
--findleaks启用时才进行。现在这个检查也能与-jN/--multiprocess N一起工作。--findleaks成为--fail-env-changed的一个弃用别名。bpo-36725: 当使用多进程模式 (-jN) 时,regrtest 现在能更好地报告工作进程失败的错误,并且在工作者线程失败或被中断时立即退出。
bpo-36454: 将 test_time.test_monotonic() 改为仅测试睡眠命令后经过时间的下限而非上限。这避免了在慢速构建机器人上不必要的测试失败。由 Victor Stinner 提供补丁。
bpo-32424: 提高 xml.etree.ElementTree 的测试覆盖率。由 Gordon P. Hemsley 提供补丁。
bpo-32424: 修复 xml.etree.ElementTree 中 test_cyclic_gc() 测试的拼写错误。由 Gordon P. Hemsley 提供补丁。
bpo-36635: 添加一个新的
_testinternalcapi模块来测试内部 C API。bpo-36629: 修复
test_imaplib的test_imap4_host_default_value():同时捕获errno.ENETUNREACH错误。bpo-36611: 当
tracemalloc启用时,修复test_sys.test_getallocatedblocks()。bpo-36560: 修复 regrtest 中的引用泄漏检测:在热身期间也计算(引用计数、分配的内存块、文件描述符计数的)增量,以确保在开始检测引用泄漏前一切均已初始化。
bpo-36565: 当 Python 没有内置的 abc 模块时,修复引用检测(
python3 -m test -R 3:3)。bpo-31904: 将 test_resource 移植到 VxWorks:跳过设置 RLIMIT_FSIZE 和 RLIMIT_CPU 的测试用例。
bpo-31904: 修复 VxWorks 上的 test_tabnanny:调整 ENOENT 错误消息。
bpo-36436: 修复
_testcapi.pymem_buffer_overflow():处理内存分配失败。bpo-31904: 修复 VxWorks 上的 test_utf8_mode:Python 在 VxWorks 上总是使用 UTF-8。
bpo-36341: 修复可能在调用 AF_UNIX 套接字的 bind() 时因 PermissionError 而失败的测试。
构建¶
bpo-36747: 移除陈旧的scriptsinstall Makefile目标。
bpo-21536: 在Unix上,除了Android和Cygwin,C扩展不再链接到libpython。
通过共享库的 Python 构建的 C 扩展现在可以被静态链接的 Python 加载了。
当Python被嵌入时,
libpython必须不被RTLD_LOCAL加载,而应使用RTLD_GLOBAL。之前,使用RTLD_LOCAL时,已经无法加载未链接到libpython的C扩展,例如由Modules/Setup的*shared*部分构建的标准库的C扩展。distutils,python-config 和 python-config.py 已被修改。
bpo-36707:
./configure --with-pymalloc不再向SOABI(sys.implementation.cache_tag)添加m标志。启用或禁用pymalloc对ABI没有影响。bpo-36635: 当定义
Py_BUILD_CORE_MODULE时,更改pyport.h的PyAPI_FUNC(type)、PyAPI_DATA(type)和PyMODINIT_FUNC宏。现在必须使用Py_BUILD_CORE_MODULE定义来构建作为动态库访问Python内部的C扩展:在Windows上的DLL导出中导出PyInit_xxx()函数。bpo-31904: 不在VxWorks上构建
_crypt扩展。bpo-36618: 当检测到clang编译器时,向CFLAGS添加
-fmax-type-align=8。pymalloc内存分配器将内存对齐于8字节。在x86-64上,clang默认期望对齐于16字节,因此使用MOVAPS指令,这可能导致分段错误。指示clang Python限制对齐于8字节以使用MOVUPS指令代替:虽然较慢,但如果内存未对齐于16字节,则不会触发SIGSEGV。遗憾的是,该标志必须添加到CFLAGS而不仅仅是CFLAGS_NODIST,因为第三方C扩展也可能有相同的问题。bpo-36605:
make tags和make TAGS现在也解析Modules/_io/*.c和Modules/_io/*.h。bpo-36465: 发布版本和调试版本现在ABI兼容:定义
Py_DEBUG宏不再隐含Py_TRACE_REFS宏,后者引入了唯一的ABI不兼容性。Py_TRACE_REFS宏添加了sys.getobjects()函数和PYTHONDUMPREFS环境变量,可以通过新的./configure --with-trace-refs构建选项设置。bpo-36577: setup.py 现在再次正确报告缺少的OpenSSL头文件和库。
bpo-36508:
python-config --ldflags不再包含LINKFORSHARED变量的标志。LINKFORSHARED变量必须仅用于构建可执行文件。bpo-36503: 移除了对 "aix3" 和 "aix4" 的引用。由 M. Felt 提供补丁。
Windows¶
bpo-35920: 添加了 platform.win32_edition() 和 platform.win32_is_iot()。添加了对为 Windows ARM32 交叉编译包的支持。跳过在 Windows IoT Core ARM32 上预期不工作的测试。
bpo-36649: 通过商店安装时,移除注册表键的尾随空格。
bpo-34144: 修复了 activate.bat,当 chcp.com 在输出中返回点时正确更新代码页。由 Lorenz Mende 提供补丁。
bpo-36509: 为 Windows IoT ARM 容器添加了预设的 IoT 布局。此布局不包含 UI 组件如 tkinter 或 IDLE。也不包含支持在目标上构建的文件,因为在使用 MSVC 时 Windows ARM32 构建必须交叉编译。
bpo-35941: ssl模块的enum_certificates函数现在在查询中返回Windows内所有可用证书存储中的证书,而不仅仅是返回系统范围内的证书存储中的证书。这包括来自以下证书存储的证书:本地机器、本地机器企业、本地机器组策略、当前用户、当前用户组策略、服务、用户。ssl.enum_crls()函数以同样的方式更改,以返回Windows证书吊销列表存储中的所有证书吊销列表。
bpo-36441: 修复了安装调试二进制文件时创建venv的问题。
bpo-36085: 通过使用安全的DLL搜索路径和添加
os.add_dll_directory(),在Windows上启用更好的DLL解析。bpo-36010: 将venv标准库模块添加到Windows的nuget分发中。
bpo-29515: 在Windows上添加以下socket模块常量:IPPROTO_AH IPPROTO_CBT IPPROTO_DSTOPTS IPPROTO_EGP IPPROTO_ESP IPPROTO_FRAGMENT IPPROTO_GGP IPPROTO_HOPOPTS IPPROTO_ICLFXBM IPPROTO_ICMPV6 IPPROTO_IDP IPPROTO_IGMP IPPROTO_IGP IPPROTO_IPV4 IPPROTO_IPV6 IPPROTO_L2TP IPPROTO_MAX IPPROTO_ND IPPROTO_NONE IPPROTO_PGM IPPROTO_PIM IPPROTO_PUP IPPROTO_RDP IPPROTO_ROUTING IPPROTO_SCTP IPPROTO_ST
bpo-35947: 将当前版本的libffi添加到cpython-source-deps。更改_ctypes以在Windows上使用当前版本的libffi。
bpo-34060: 在Windows上运行测试套件时报告系统负载。由Ammar Askar提供补丁。基于Jeremy Kloth的先前工作。
bpo-31512: 随着Windows 10 Creators Update的发布,非特权用户现在可以创建符号链接,只要计算机启用了开发者模式。
macOS¶
IDLE¶
bpo-36429: 修复启动IDLE时使用pyshell的问题。在顶部添加idlelib.pyshell别名;移除底部的pyshell别名。移除过时的__name__=='__main__'命令。
工具/示例¶
bpo-14546: 修复Tools/scripts/lll.py中的参数处理问题。
C API¶
bpo-36763: 修复
Py_SetStandardStreamEncoding()中的内存泄漏:如果函数被调用两次,释放内存。bpo-36641: PyDoc_VAR(name) 和 PyDoc_STRVAR(name, str) 现在创建的是``static const char name[]``而非
static char name[]。由Inada Naoki提供的补丁。bpo-36389: 更改Python内存分配器调试钩子(
PyMem_SetupDebugHooks()函数)中使用的内部常量CLEANBYTE、DEADDYTE``和 ``FORBIDDENBYTE的值。字节模式0xCB、0xDB和``0xFB``已被替换为0xCD、0xDD和0xFD,以使用与Windows CRT调试malloc()和``free()``相同的值。bpo-36443: 自Python 3.7.0起,如果在
LC_CTYPE区域设置被强制转换和/或用户配置启用了UTF-8模式的情况下,在Py_Initialize()之前调用Py_DecodeLocale()会产生乱码。现在默认禁用LC_CTYPE强制转换和UTF-8模式以修复乱码问题。现在必须使用新的_Py_PreInitialize()API与_PyPreConfig显式启用(选择加入)。bpo-36025: 修复了datetime C API中的一个意外更改,其中
PyDate_FromTimestamp()函数的参数被错误地解释为单个时间戳而非参数元组,这导致现有代码开始引发TypeError。这一不向后兼容的更改仅出现在Python 3.8的alpha版本中。由Paul Ganssle提供的补丁。bpo-35810: 修改
PyObject_Init以正确增加堆分配类型对象的引用计数。同时修复那些要么手动执行此操作,要么未在tp_dealloc中减少类型引用计数的堆分配类型的引用计数。
Python 3.8.0 alpha 3¶
发布日期: 2019-03-25
安全性¶
bpo-36216: 修改 urlsplit(),当 URL 包含在 IDNA 编码(NFKC 规范化)下分解为影响 URL 解析方式的字符时抛出 ValueError。
bpo-35121: 在使用带有
http.cookiejar.DefaultCookiePolicy策略的 cookiejar 时,不要将没有 Domain 属性的域 A 的 cookies 发送到域 B,当域 A 是域 B 的后缀匹配时。补丁由 Karthikeyan Singaravelan 提供。
核心与内置函数¶
bpo-36421: 修复 _ctypes.c 的
PyCArrayType_new()中可能出现的双重递减引用。bpo-36412: 修复创建新字典时可能发生的崩溃。
bpo-36398: 修复
structseq_repr()中可能发生的崩溃。bpo-36256: 修复 parsermodule 在解析 DFA 中具有两个或更多相同类型标签弧的状态时的错误。由 Pablo Galindo 提供补丁。
bpo-36365: repr(structseq) 不再限制为 512 字节。
bpo-36374: 修复
merge_consts_recursive()中可能的空指针解引用。由 Zackery Spytz 提供补丁。bpo-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: 添加 statistics.fmean() 作为现有 mean() 函数的更快、浮点变体。
bpo-35918: 从 multiprocessing.managers.SyncManager.dict 中移除了损坏的
has_key方法。由 Rémi Lapeyre 贡献。bpo-18283: 添加对 bytes 的支持到
shutil.which()。bpo-35960: 修复
dataclasses.field()丢弃作为元数据传递的空映射对象的问题。bpo-35500: 在
unittest.mock.Mock.assert_called_with()断言错误中,将预期和实际的调用参数分别写在单独的行上。由 Susan Su 贡献。bpo-24209: 在http.server脚本中,依赖getaddrinfo根据bind参数绑定到首选地址。现在默认绑定或绑定到一个名称可能会绑定到IPv6或双栈,取决于环境。
bpo-35321: 设置
_frozen_importlib的__spec__.origin为frozen,以匹配``_frozen_importlib_external``的行为。由Nina Zakharenko提供补丁。bpo-35378: 修复
multiprocessing.Pool内部的一个引用问题,该问题导致如果池在没有显式关闭或终止的情况下被删除,池将保持活动状态。为池迭代器添加了一个新的强引用,将池的生命周期与其迭代器的生命周期联系起来,因此如果池迭代器仍然存活,池不会被销毁。bpo-34294: re模块,在罕见情况下修复错误的捕获组。
re.search()、re.findall()、re.sub()和其他扫描字符串寻找匹配的函数,应在两次匹配尝试之间重置捕获组。由Ma Lin提供补丁。bpo-35615:
weakref: 修复在复制WeakKeyDictionary或WeakValueDictionary时由于某些键或值在迭代过程中消失而导致的RuntimeError。bpo-35606: 实现
math.prod()作为sum()的类似函数,返回'start'值(默认:1)乘以数字可迭代对象的乘积。由Pablo Galindo提供补丁。bpo-32417: 在
datetime.datetime子类和datetime.timedelta之间执行算术现在返回与datetime.datetime子类相同类型的对象。因此,datetime.datetime.astimezone()和替代构造函数如datetime.datetime.now()和带``tz`` 参数调用的datetime.fromtimestamp()现在 也 保留它们的子类。bpo-35153: 向
xmlrpc.client.ServerProxy、xmlrpc.client.Transport和xmlrpc.client.SafeTransport添加 headers 可选仅关键字参数。补丁由Cédric Krier提供。bpo-34572: 修复 pickle.loads 的 C 实现以使用 importlib 的锁定机制,从而避免使用部分加载的模块。由 Tim Burgess 提供补丁。
文档¶
测试¶
bpo-27313: 避免 test_ttk_guionly ComboboxTest 在 macOS Cocoa Tk 上失败。
bpo-36019: 添加 test.support.TEST_HTTP_URL 并用此新常量替换对 http://www.example.com 的引用。由 Stéphane Wirtel 贡献。
bpo-36037: 为严格的 OpenSSL 配置(如 RHEL8 严格加密策略)修复 test_ssl。如果需要,为服务器 SSL 上下文的最低 TLS 版本使用较旧的 TLS 版本,以测试比默认最低 TLS 版本更旧的 TLS 版本。
bpo-35798: 添加了
test.support.check_syntax_warning()。bpo-35505: 使 test_imap4_host_default_value 不依赖于本地 IMAP 服务器是否运行。
bpo-35917: multiprocessing:为 SyncManager 和 SharedMemoryManager 类提供单元测试 + 所有应该由它们支持的共享类型。(由 Giampaolo Rodola 提供补丁)
bpo-35704: 跳过
test_shutil.test_unpack_archive_xztar以防止在 32 位 AIX 上当 MAXDATA 设置小于 0x20000000 时发生 MemoryError。由 Michael Felt (aixtools) 提供补丁
bpo-34720: 断言 m_state != NULL 以模仿 GC 遍历函数,这些函数在模块状态尚未创建时不正确处理模块创建。
Windows¶
IDLE¶
Python 3.8.0 alpha 1¶
发布日期: 2019-02-03
安全性¶
bpo-35746: CVE 2019-5010: 修复ssl模块中的NULL指针解引用问题。证书解析器未能正确处理具有空DP或URI的CRL分发点。恶意或错误的证书可能导致段错误。漏洞(TALOS-2018-0758)由Cisco的Colin Read和Nicolas Edet报告。
bpo-34812:
-I命令行选项(在隔离模式下运行Python)现在在生成子进程时也被multiprocessing和distutils模块复制。以前,只有由-I启用的-E和-s选项被复制。bpo-34791: 当sys.flags.ignore_environment由-E或-I参数设置时,xml.sax和xml.dom.domreg不再使用环境变量来覆盖解析器实现。
bpo-17239: xml.sax和xml.dom.minidom解析器默认不再处理外部实体。外部DTD和ENTITY声明不再加载文件或创建网络连接。
bpo-34623: CVE 2018-14647: C加速的_elementtree模块现在从_Py_HashSecret初始化哈希随机化盐,而不是libexpat的默认CSPRNG。
bpo-34405: 更新Windows构建的OpenSSL至1.1.0i版本。
bpo-33871: 修复在macOS上
os.sendfile()中发送文件部分的问题。使用 trailers 参数可能导致从输入文件发送的字节数多于指定数量。bpo-32533: 修复_ssl中错误处理的线程安全性。
bpo-33136: 加固ssl模块以抵御LibreSSL的 CVE 2018-8970。调用X509_VERIFY_PARAM_set1_host()时使用明确的namelen。新增测试确保不允许NULL字节。
bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。
bpo-32981: difflib 和 poplib 中的正则表达式容易受到灾难性回溯的影响。这些正则表达式构成了潜在的 DOS 向量(REDOS)。它们已被重构。这解决了 CVE 2018-1060 和 CVE 2018-1061。由 Jamie Davis 提供补丁。
bpo-28414: ssl 模块现在允许用户在使用 SNI 时执行自己的 IDN 编码/解码。
核心与内置函数¶
bpo-35877: 在 while 语句中使括号对于命名表达式可选。由 Karthikeyan Singaravelan 提供补丁。
bpo-35814: 允许注解赋值中的右侧表达式与普通赋值中的相同。特别是,
x: Tuple[int, int] = 1, 2(右侧不带括号) 现在是被允许的。bpo-35766: 添加了在 ast 模块中解析 PEP 484 类型注释的选项。(默认关闭。)这是合并了其第三方分支 [typed_ast](https://github.com/python/typed_ast) 的关键功能。
bpo-35713: 重新组织 Python 初始化以更早地获得工作异常和 sys.stderr。
bpo-33416: 向 Python AST 节点添加结束行和结束列位置信息。这是一个 C 级别的向后不兼容的更改。
bpo-35720: 修复了 Modules/main.c 中 pymain_parse_cmdline_impl 函数的一个小内存泄漏。
bpo-35634:
func(**kwargs)现在会在kwargs是一个包含多个相同键的映射时引发错误。自 Python 3.6 起,当其他关键字参数在**kwargs之前传递时,已经会引发错误。bpo-35623: 修复了排序非常长的列表时的一个崩溃。由 Stephan Hohe 提供补丁。
bpo-35214: 添加了 clang Memory Sanitizer 构建工具,以解决来自 posix、socket、time、test_io 和 test_faulthandler 的误报。
bpo-35560: 修复了调试构建中
format()对于使用 "n" 格式、零填充和小宽度的浮点格式化的断言错误。发布构建不受影响。由 Karthikeyan Singaravelan 提供补丁。bpo-35552: 在
PyUnicode_FromFormat()中的格式字符%s和%V以及PyBytes_FromFormat()中的%s不再读取超过 precision 指定限制的内存。bpo-35504: 修复了删除某些属性时的段错误和
SystemErrors。由 Zackery Spytz 提供补丁。bpo-35504: 修复了删除 OSError 的 characters_written 属性时出现的 SystemError。
bpo-35494: 改进了 f-string 中括号不匹配的语法错误消息。
bpo-35444: 修复了在无法查找内置 "getattr" 时,pickling 方法中的错误处理。加快了 pickling 迭代器的速度。
bpo-35436: 修复了内存分配错误处理中的多个问题。由 Zackery Spytz 提供补丁。
bpo-35423: 将 eval 循环中的信号处理触发器与 "pending calls" 机制分离。没有语义上的变化,性能差异也不显著。
bpo-35357: unittest.mock._Call 和 unittest.mock.MagicProxy 的内部属性名(name, parent & from_kall)现在以 _mock_ 为前缀,以防止与广泛使用的对象属性冲突。修复了测试函数名称中的小错字。
bpo-35372: 修复了对于长度超过 2 GiB 且包含不可解码字节的输入的代码页解码器。
bpo-35336: 修复 PYTHONCOERCECLOCALE=1 环境变量:仅当 LC_CTYPE 区域设置为 "C" 时才强制使用 C 区域设置。
bpo-31241: 列表推导式、生成器表达式和元组的 AST 节点的 lineno 和 col_offset 属性现在指向开括号或方括号。对于没有括号的元组,它们指向第一个项目的位置。
bpo-33954: 对于
str.format()、float.__format__()和complex.__format__()方法,当使用 "n" 格式化器时处理非 ASCII 小数点。bpo-35269: 修复了涉及新创建的协程的可能段错误。由 Zackery Spytz 提供补丁。
bpo-32492: 通过为名称描述符使用C快速路径,将
namedtuple()属性访问速度提高了1.6倍。由Pablo Galindo提供补丁。bpo-35214: 修复了在解析字符串末尾被截断的Unicode转义序列(如
'\N')时超出边界的内存访问问题。它会读取超出内存分配末尾的一个字节。bpo-35214: 解释器和扩展模块已添加注释,以便它们在clang的内存清理器下正常工作。新增了一个配置标志--with-memory-sanitizer,使得执行此类测试构建更加容易。
bpo-35193: 修复了字节码窥孔优化器中的一个偏差一个错误,该错误在移除不可达代码时可能会读取数组边界之外的字节。这个错误在Python 3.6和3.7的每个版本中都存在,直到现在。
bpo-35169: 改进了禁止赋值的错误消息。
bpo-34022: 修复了在
zipimport中处理基于哈希的字节码文件的问题。由Elvis Pranskevichus提供补丁。bpo-28401: 调试构建将不再尝试导入为ABI构建的扩展模块,因为它们从一开始就不兼容。补丁由Stefano Rivera提供。
bpo-29743: 在
ctypes.Array子类中,对于负的_length_,现在会引发ValueError而不是OverflowError。对于非整数的_length_,也会引发TypeError而不是AttributeError。原始由Oren Milman提供补丁。bpo-16806: 修复了多行字符串标记的
lineno和col_offset。bpo-35029: 在代码生成时作为异常引发的
SyntaxWarning现在将被替换为SyntaxError,以便更好地报告错误。bpo-34983: 在 symtable 模块中公开
symtable.Symbol.is_nonlocal()方法。由 Pablo Galindo 提供补丁。bpo-34974:
bytes和bytearray构造函数不再将意外异常(如MemoryError和KeyboardInterrupt)转换为TypeError。bpo-34939: 允许在模块命名空间中使用在注解前声明为全局的注解名称。由 Pablo Galindo 提供补丁。
bpo-34876: AST 中装饰函数和类的 lineno 和 col_offset 属性现在指向对应的
def、async def和class的位置,而不是第一个装饰器的位置。这使得在跟踪时行号报告更加准确。这是唯一一种子 AST 节点的位置可能先于父 AST 节点位置的情况。bpo-34879: 修复了 bytesobject.c 中可能的空指针解引用问题。由 Zackery Spytz 提供补丁。
bpo-34784: 修复了 PyStructSequence_NewType 的实现,以便创建堆分配的 StructSequences。
bpo-32912: 现在对于字符串和字节字面量中的无效转义序列,会发出
SyntaxWarning而不是DeprecationWarning。bpo-34854: 修复了在编译包含有关键字唯一参数但没有默认值的 lambda 的字符串注解时的崩溃问题。
bpo-34850: 当身份检查(
is和is not)与某些类型的字面量(例如字符串、整数)一起使用时,编译器现在会产生一个SyntaxWarning。这些在 CPython 中可能偶然工作,但语言规范不保证。警告建议用户改用相等测试(==和!=)。bpo-34824: 修复了 Modules/_ssl.c 中可能的空指针解引用问题。补丁由 Zackery Spytz 提供。
bpo-30156: C函数
property_descr_get()使用了一个"缓存"元组来优化函数调用。但这个元组在调试模式下可以通过sys.getobjects()发现。移除这一优化,它并不真正值得,并且在过去几年中导致了3次不同的崩溃。bpo-34762: 修复contextvars C API以使用PyObject*指针类型。
bpo-34751: 元组的哈希函数现在基于xxHash,这在(以前的)病态情况下提供了更好的碰撞结果。此外,在64位系统上,它总体上改善了元组的哈希。由Jeroen Demeyer提供补丁,Tim Peters做出了重要贡献。
bpo-34735: 修复Modules/timemodule.c中的内存泄漏。由Zackery Spytz提供补丁。
bpo-34683: 修复了一个错误,其中一些SyntaxError错误指向了位置偏移一位的位置。
bpo-34651: 只允许主解释器进行fork。这避免了影响主解释器的可能性,这对运行时的操作至关重要。
bpo-34653: 移除未使用的函数PyParser_SimpleParseStringFilename。
bpo-34641: 进一步限制函数调用中关键字参数左侧的语法。特别是,``f((keyword)=arg)``现在是不允许的。
bpo-34637: 使 sum() 的 start 参数作为关键字参数可见。
bpo-1621: 在执行集合哈希表调整大小时,不假定有符号整数溢出行为(C未定义行为)。
bpo-34588: 修复回溯格式化中递归调用修剪特性的一个偏移一位的错误。
bpo-34485: 在Windows上,LC_CTYPE现在在启动时设置为用户首选区域设置。以前,LC_CTYPE区域设置在启动时为"C",但在调用setlocale(LC_CTYPE, "")或setlocale(LC_ALL, "")时会更改。
bpo-34485: 在POSIX区域设置(当C区域未被强制且UTF-8模式被禁用时),像sys.stdout这样的标准流现在使用"surrogateescape"错误处理程序,而不是"strict"。
bpo-34485: 修复像sys.stdout这样的标准流的错误处理程序:PYTHONIOENCODING=":"现在被忽略,而不是将错误处理程序设置为"strict"。
bpo-34485: Python现在使用C代码获取区域编码,以初始化像sys.stdout这样的标准流的编码。此外,编码现在初始化为Python编解码器名称,以获取规范化的编码名称并确保编解码器被加载。这一改变默认避免了在启动时导入_bootlocale和_locale模块。
bpo-34527: 在FreeBSD上,如果LC_CTYPE区域是"POSIX",Py_DecodeLocale()和Py_EncodeLocale()现在也会强制使用ASCII编码,而不仅仅是当LC_CTYPE区域是"C"时。
bpo-34527: UTF-8模式现在也由"POSIX"区域启用,而不仅仅是"C"区域。
bpo-34403: 在HP-UX上,如果使用C或POSIX区域设置,sys.getfilesystemencoding()现在返回"ascii"而不是"roman8"(当UTF-8模式被禁用且C区域未被强制时)。
bpo-34523: Python文件系统编码现在在Python初始化期间更早地读取。
bpo-12458: 回溯现在显示多行表达式中子表达式的正确行号。回溯现在显示多行表达式的第一行的行号,而不是最后一个子表达式的行号。
bpo-34408: 防止
PyInterpreterState_New()中的空指针解引用和资源泄漏。bpo-34400: 修复parsetok.c中的未定义行为。由Zackery Spytz提供补丁。
bpo-33073: 向ints添加了as_integer_ratio,以使它们更易于与floats互操作。
bpo-34377: 更新valgrind抑制列表,使用
_PyObject_Free/_PyObject_Realloc代替``PyObject_Free``/PyObject_Realloc。bpo-34353: 在Python实现的
stat.filemode()中添加了"socket"选项以匹配C实现。bpo-34320: 修复了
dict(od)未复制OrderedDict的迭代顺序的问题。bpo-34113: 修复了在调试版本中,当操作码堆栈被调整为负数时崩溃的问题。由Constantin Petrisor提供补丁。
bpo-34100: 编译器现在递归合并元组和冻结集合中的常量。代码属性如
co_names也被合并。bpo-34151: 列表连接、重复和切片操作的性能略有提升。由Sergey Fedoseev提供补丁。
bpo-34170: -X dev: 现在即使启用了开发者模式,也可以使用PYTHONMALLOC覆盖内存分配器。
bpo-33237: 改进了部分初始化模块的
AttributeError消息。bpo-34149: 修复min和max函数在key为None时获取默认行为的问题。
bpo-34125: 当给出
**kwargs时,现在可以对未绑定的内置方法进行性能分析。bpo-34141: 优化了原子类型(None, bool, int, float, bytes, str)的pickling。
bpo-34126: 修复了在分析某些无效调用的未绑定方法时的崩溃问题。由Jeroen Demeyer提供补丁。
bpo-24618: 修复了在创建代码对象时,当varnames元组过小或参数计数过大时读取无效内存的问题。
bpo-34068: 在
io.IOBase.close()中,确保在存在活动异常时不设置closed属性。由Zackery Spytz和Serhiy Storchaka提供补丁。bpo-34087: 修复了将unicode转换为数值时的缓冲区溢出问题。
bpo-34080: 修复了编译器在词法分析过程中引发一些不常见错误时的内存泄漏问题。
bpo-34066: 在
with open()中,禁止在调用open()和进入 with 块之间通过Ctrl-C中断。bpo-34042: 修复dict.copy()以维持正确的总引用计数(如sys.gettotalrefcount()报告的那样)。
bpo-33418: 修复了函数对象在创建引用循环时潜在的内存泄漏问题。
bpo-33985: 实现 contextvars.ContextVar.name 属性。
bpo-33956: 将集成的 Expat 库更新至版本 2.2.5。
bpo-24596: 在调用
PyErr_Print()之前,先在PyRun_SimpleFileExFlags()中减少模块对象的引用计数。由 Zackery Spytz 提供补丁。bpo-33451: 在调用
PyEval_EvalCode()之前关闭直接执行的 pyc 文件。bpo-1617161:
BuiltinMethodType实例(内置类的方法)的哈希现在依赖于 __self__ 的身份哈希而非其值。ModuleType和MethodWrapperType实例(用户定义类的方法和一些内置类的方法如str.__add__)的哈希和相等性现在依赖于 __self__ 的身份哈希和相等性而非其值。MethodWrapperType实例不再支持排序。bpo-33824: 修复 "LC_ALL=C python3.7 -V":在读取 Python 配置后编码更改时正确重置命令行解析器。
bpo-33803: 修复 hamt.c 中的一个崩溃问题,该问题是由于为一个对象启用 GC 跟踪时,其所有字段未设置为 NULL 引起的。
bpo-33738: 修复了七个与有限 API 不兼容的宏,并将宏
PyIter_Check()、PyIndex_Check()和PyExceptionClass_Name()作为函数添加。添加了一个用于自动检查宏的脚本。bpo-33786: 修复异步生成器以正确处理 athrow() 中的 GeneratorExit。
bpo-30167:
PyRun_SimpleFileExFlags除了移除模块中的__file__外,还移除了__cached__。bpo-33706: 修复解析命令行选项时 Python 初始化过程中的崩溃问题。感谢 Christoph Gohlke 的报告和修复!
bpo-33597: 将
PyGC_Head的大小从 3 个字减少到 2 个字。bpo-30654: 修复了即使之前设置了自定义处理程序,在解释器关闭时 SIGINT 处理程序重置为 SIG_DFL 的问题。由 Philipp Kerling 提供补丁。
bpo-33622: 修复了当垃圾收集器无法将带有
__del__方法或被其引用的对象添加到gc.garbage列表时的内存泄漏问题。现在可以在设置异常时调用PyGC_Collect(),并保留异常。bpo-33462: 使字典和字典视图可逆。由 Rémi Lapeyre 提供补丁。
bpo-23722: 当自定义元类没有在传递给
type.__new__的命名空间中提供__classcell__条目时,现在会引发RuntimeError。在 Python 3.6--3.7 中会发出DeprecationWarning。bpo-33499: 添加了
PYTHONPYCACHEPREFIX环境变量和-Xpycache_prefix命令行选项,用于设置写入模块字节码缓存文件的备用根目录。bpo-33509: 修复了 warnings.warn_explicit() 的 module_globals 参数:如果 module_globals 不是字典,不会崩溃。
bpo-31849: 修复了 pyhash.c 中的有符号/无符号比较警告。
bpo-33475: 修复了将注释转换为字符串时的杂项错误,并优化了字符串表示中的括号。
bpo-20104: 添加了对
posix_spawn的setpgroup、resetids、setsigmask、setsigdef和scheduler参数的支持。由 Pablo Galindo 提供补丁。bpo-33391: 修复了 set_symmetric_difference() 中的内存泄漏。
bpo-33363: 对于异步函数外的
async with和async for语句,现在会引发 SyntaxError。bpo-28055: 修复了 siphash24() 中的未对齐访问。由 Rolf Eike Beer 提供补丁。
bpo-33128: 修复了一个导致 PathFinder 在 sys.meta_path 上出现两次的 bug。由 Pablo Galindo Salgado 提供补丁。
bpo-33331: 现在在解释器关闭时,最后导入的模块会首先被清除。
bpo-33312: 通过调整内部结构 _dictkeysobject 共享键结构的声明方式,修复了 dictobject.c 中的 clang ubsan(未定义行为消毒剂)警告。
bpo-33305: 改进了无效数值字面量的语法错误提示信息。
bpo-33306: 改进了不平衡括号的语法错误提示信息。
bpo-33234: 当输入长度已知时,列表构造函数会预分配大小而不会过度分配。
bpo-33270: 为所有匿名代码对象内部化名称。由Zackery Spytz提供补丁。
bpo-30455: 现在,与令牌相关的C和Python代码以及文档都从一个单一源文件
Grammar/Tokens生成。bpo-33176: 向memoryviews添加了一个
toreadonly()方法。bpo-33231: 修复了
normalizestring()中潜在的内存泄漏问题。bpo-33205: 将字典增长函数从
round_up_to_power_2(used*2+hashtable_size/2)更改为``round_up_to_power_2(used*3)``。以前,字典仅在used == 0时收缩。现在字典有更多机会被收缩。bpo-29922: 改进了'async with'中当
__aenter__()或__aexit__()返回不可等待对象时的错误消息。bpo-33199: 修复了在从键共享字典复制时,字典实现中的
ma_version_tag未初始化的问题。bpo-33053: 当使用-m开关时,sys.path[0]现在明确扩展为 起始 工作目录,而不是保留为空路径(允许在导入时从当前工作目录导入)。
bpo-33138: 更改了不可pickle和不可复制类型的标准错误消息。现在显示"cannot pickle"而不是"can't pickle"或"cannot serialize"。
bpo-33018: 提高了当
issubclass()的第一个参数是非类而第二个参数是抽象基类时引发错误的一致性。由Josh Bronson提供补丁。bpo-33083:
math.factorial不再接受非int-like的参数。由Pablo Galindo提供补丁。bpo-33041: 添加了新操作码
END_ASYNC_FOR并修复了以下问题:设置全局
StopAsyncIteration不再破坏async for循环。跳入一个
async for循环现在被禁止了。跳出一个
async for循环不再会破坏堆栈了。
bpo-25750: 修复了由于描述符从类中删除自身时`type_getattro()`中的引用计数错误导致的Python罕见崩溃。由Jeroen Demeyer提供补丁。
bpo-33041: 修复了带有复杂目标的“async for”的字节码生成问题。现在,在赋值或解包时引发的StopAsyncIteration将被传播,而不是停止迭代。
bpo-33026: 通过设置f_lineno修复了跳出“with”块的问题。
bpo-33005: 修复了在使用自定义内存分配器(例如:使用PYTHONMALLOC环境变量)时fork导致的崩溃。_PyGILState_Reinit()和_PyInterpreterState_Enable()现在使用默认的RAW内存分配器在fork时分配新的解释器互斥锁。
bpo-32911: 由于在下游beta测试期间发现的意外兼容性问题,恢复了 bpo-29463。从Module、ClassDef、FunctionDef和AsyncFunctionDef ast节点中移除了在3.7a1中添加的`docstring` 字段。docstring表达式被恢复为其主体的第一条语句。基于Inada Naoki的补丁。
bpo-17288: 防止从'return'和'exception'跟踪事件跳转。
bpo-32946: 如果模块不是包,从已导入模块中使用“from ... import ...”导入名称现在快30%。
bpo-32932: 当`__all__`中有非str对象时,使错误消息更加揭示问题。
bpo-32925: 优化了对由非常量组成的字面列表的迭代和包含测试:
x in [a, b]`和`for x in [a, b]。所有元素均为常量的情况已经被优化。bpo-32889: 更新Valgrind抑制列表,以考虑`Py_ADDRESS_IN_RANG`重命名为`address_in_range`的情况。
bpo-32836: 在列表/字典/集合推导式的情况下不使用临时变量。
bpo-31356: 移除了在 bpo-31356 中添加的新API(gc.ensure_disabled()上下文管理器)。
bpo-32305: 对于命名空间包,确保`__file__`和`__spec__.origin`都被设置为None。
bpo-32303: 确保对于命名空间包,
__spec__.loader与__loader__相匹配。bpo-32711: 修复 Python/ast_unparse.c 中的警告信息。由 Stéphane Wirtel 提供补丁。
bpo-32583: 修复在使用自定义解码错误处理程序时,内置 Unicode 解码器可能因越界写入错误而崩溃的问题。
bpo-17611: 通过将展开块栈的逻辑移至编译器,简化了解释器循环。编译器现在会为调整值栈和调用
break、continue及return的清理代码发出明确的指令。移除了操作码
BREAK_LOOP、CONTINUE_LOOP、SETUP_LOOP和SETUP_EXCEPT。新增了操作码ROT_FOUR、BEGIN_FINALLY、CALL_FINALLY和POP_FINALLY。改变了END_FINALLY和WITH_CLEANUP_START的行为。bpo-32285: 新增函数 unicodedata.is_normalized,可用于检查字符串是否符合特定的正规形式。
bpo-10544: 现在禁止在推导式和生成器表达式中使用 yield 表达式,除了最外层可迭代对象的表达式。
bpo-32117: 现在允许在 yield 和 return 语句中不加括号进行可迭代对象的解包,例如
yield 1, 2, 3, *rest。感谢 David Cuthbert 的更改和 Jordan Chapman 增加的测试。bpo-31902: 修复 ast 节点
ast.AsyncFor、ast.AsyncFunctionDef和ast.AsyncWith的col_offset属性。之前,col_offset指向async后的关键字。bpo-25862: 修复
io.TextIOWrapper的tell()方法中的断言失败。由 Zackery Spytz 提供补丁。bpo-21983: 修复当类型参数是 ctypes 结构化数据类型时,
ctypes.cast()中的崩溃问题。由 Eryk Sun 和 Oren Milman 提供补丁。bpo-31577: 修复在`os.utime()`中当ns参数错误时导致的崩溃问题。由Oren Milman提供补丁。
bpo-29832: 从各种socket错误消息中移除对'getsockaddrarg'的引用。补丁由Oren Milman提供。
库¶
bpo-35845: 向memoryview.tobytes()添加'order'参数。
bpo-35864: collections.namedtuple的_asdict()方法现在返回一个常规的dict而不是OrderedDict。
bpo-35537: 现在subprocess.Popen内部使用ExitStack来清理管道文件句柄。在正常操作中没有行为变化。但如果关闭一个句柄时引发异常,其他句柄现在会被关闭而不是泄露。(由Giampaolo Rodola提供补丁)
bpo-35847: RISC-V需要CTYPES_PASS_BY_REF_HACK。修复了ctypes Structure的test_pass_by_value测试。
bpo-35813: 向multiprocessing添加了共享内存子模块,以避免进程间需要序列化。
bpo-35780: 修复在递归、可重入或多线程代码中出现的lru_cache()错误。这些错误可能导致孤儿链接和缓存被捕获在指定最大链接数更少的状态中。修复了负maxsize的处理,应该被当作零处理。修复了切换“满”状态标志时的错误。修复了遇到错误时链接的错误排序。同步了C代码和纯Python代码,针对具有单个位置参数的函数的空间节省路径。在这种常见情况下,lru缓存条目的空间开销减少了近一半。修复了缓存未命中的计数。在错误情况下,未命中计数与实际调用底层用户函数的次数不同步。
bpo-35537:
os.posix_spawn()和os.posix_spawnp()现在有一个 setsid 参数。bpo-23846:
asyncio.ProactorEventLoop现在捕获并记录当自管道满时的发送错误。bpo-34323:
asyncio: 增强IocpProactor.close()日志: 在第一次日志前等待1秒,然后每秒记录一次。同时记录自close()调用以来的秒数。bpo-35674: 新增
os.posix_spawnp()函数。由 Joannah Nanjekye 提供补丁。bpo-35733:
ast.Constant(boolean)不再是ast.Num的实例。由 Anthony Sottile 提供补丁。bpo-35726: QueueHandler.prepare() 现在在修改和入队之前复制记录,以避免影响链中的其他处理程序。
bpo-35719: 通过 1.3--2.5 倍加速了多参数
math函数 atan2(), copysign(), remainder() 和 hypot()。bpo-35717: 修复了在使用枚举和编译时引发的 KeyError 异常。由 Rémi Lapeyre 提供补丁。
bpo-35699: 修复了 distutils 中对 Visual Studio Build Tools 2017 的检测。
bpo-32710: 修复了 asyncio ProactorEventLoop 在重叠操作失败时的内存泄漏。
bpo-35702: 现在 macOS 10.12 可以使用
time.CLOCK_UPTIME_RAW常量。bpo-32710: 修复了 asyncio 中 ProactorEventLoop 在
ReadFile()或WSASend()重叠操作立即失败时的内存泄漏:释放内部缓冲区。bpo-35682: 修复
asyncio.ProactorEventLoop.sendfile(): 如果内部 future 已经完成,不再尝试设置其结果。bpo-35283: 为
threading.Thread.isAlive()方法添加了弃用警告。由 Donghee Na 提供补丁。bpo-35664: 通过优化参数处理和为元组中单个非负整数索引的常见情况添加快速路径(这是标准库中的典型用例),将 operator.itemgetter() 的性能提高了 33%。
bpo-35643: 修复了 Modules/_sha3/cleanup.py 中的 SyntaxWarning: 无效的转义序列。补丁由 Mickaël Schoentgen 提供。
bpo-28503:
crypt模块现在在可用时内部使用crypt_r()库函数而不是crypt()。bpo-35614: 修复了 metaclasses 上的 help()。由 Sanyam Khurana 提供补丁。
bpo-35568: 将
raise(signum)作为raise_signal公开bpo-35588:
fractions.Fraction类型上的地板除法和模运算以及divmod()函数速度提高了 2--4 倍。由 Stefan Behnel 提供补丁。bpo-35585: 通过值构建枚举的速度提升,例如 http.HTTPStatus(200)。
bpo-30561: random.gammavariate(1.0, beta) 现在计算的结果与 random.expovariate(1.0 / beta) 相同。这同步了两种算法并消除了旧实现中的一些特性。然而,它确实产生了与以前不同的随机变量流。
bpo-35537:
subprocess模块现在在某些情况下可以使用os.posix_spawn()函数以获得更好的性能。bpo-35526: 将 barry_as_FLUFL.mandatory 的'笑话'延迟到 Python 4.0 版本
bpo-35523: 移除
ctypes回调的变通方法:不再在启动时创建回调。避免在import ctypes和import uuid时触发 SELinux 警报。bpo-31784:
uuid.uuid1()现在调用time.time_ns()而不是int(time.time() * 1e9)。bpo-35513:
unittest.runner的TextTestRunner现在使用time.perf_counter()而不是time.time()来测量测试的执行时间:time.time()可以倒退,而time.perf_counter()是单调的。bpo-35502: 修复了
xml.etree.ElementTree.TreeBuilder在树构建未完成时(特别是解析 XML 时引发错误的情况下)的引用泄漏问题。bpo-35348: 使
platform.architecture()解析file命令输出更加可靠:向file命令添加-b选项以省略文件名,强制使用 C 语言环境,并搜索“共享对象”模式。bpo-35491:
multiprocessing: 添加Pool.__repr__()并增强BaseProcess.__repr__()(添加 pid 和父 pid) 以便于调试。Pool 的状态常量值现在是字符串而不是整数,例如RUN值变为'RUN'而不是0。bpo-35477:
multiprocessing.Pool.__enter__()现在在池未运行时失败:如果多次使用with pool:会失败。bpo-31446: 复制传递给 CreateProcessW 的命令行,因为此函数可以更改输入缓冲区的内容。
bpo-35471: Python 2.4 放弃了对 MacOS 9 的支持。macpath 模块在 Python 3.7 中被弃用。该模块现已被移除。
bpo-23057: 在 Windows 上接收到键盘中断时解除 Proactor 事件循环的阻塞。
bpo-35052: 修复了 xml.dom.minidom 在带有实体的文档上的 cloneNode():向实体的用户数据处理器传递正确的参数。
bpo-20239: 允许重复分配删除
unittest.mock.Mock属性。由 Pablo Galindo 提供补丁。bpo-17185: 在 mock 上设置
__signature__以便inspect获取签名。由 Karthikeyan Singaravelan 提供补丁。bpo-35445: 创建 posix.environ 时的内存错误不再被忽略。
bpo-35415: 验证 socket.socket() 的 fileno= 参数。
bpo-35424:
multiprocessing.Pool析构函数现在在池仍在运行时发出ResourceWarning。bpo-35330: 当
Mock实例用于包装对象时,如果side_effect用于其方法的 mock 之一,则不调用原始实现并返回使用 side effect 的结果,与使用 return_value 的方式相同。bpo-35346: 从
platform模块中删除对 Mac OS 9 和 Rhapsody 的支持。Rhapsody 的最后一个版本发布于 2000 年。Mac OS 9 的最后一个版本发布于 2001 年。bpo-10496:
distutils.utils模块中的check_environ()现在在调用pwd.getpwuid()时会捕获KeyError:在这种情况下不创建HOME环境变量。bpo-10496:
posixpath.expanduser()现在在HOME环境变量未设置且当前用户没有家目录(如果当前用户标识在密码数据库中不存在)时,返回输入的 path 不变。这一更改修复了site模块在当前用户在密码数据库中不存在(如果用户没有家目录)时的问题。bpo-35389:
platform.libc_ver()现在在可用且未设置 executable 参数时使用os.confstr('CS_GNU_LIBC_VERSION')。bpo-35394: 向 asyncio 抽象协议添加空槽。
bpo-35310: 修复
select.select()中的一个错误,在某些情况下,文件描述符序列在信号中断后未修改返回,即使文件描述符可能尚未准备就绪。现在,如果发生超时,select.select()将始终返回空列表。由 Oran Avraham 提供补丁。bpo-35380: 为 proactor asyncio 事件循环在 Windows 上启用 TCP_NODELAY。
bpo-35341: 向
typing模块添加collections.OrderedDict的通用版本。由 Ismo Toijala 提供补丁。bpo-35371: 修复了在 Windows 上传递不正确参数时
os.utime()可能崩溃的问题。bpo-35346:
platform.uname()现在在运行外部程序(如cmd /c ver)时将stderr重定向到os.devnull。bpo-35066: 之前,在格式字符串中带有尾随 '%' 的 datetime 对象上调用 strftime() 方法会导致异常。然而,这仅在 datetime C 模块被使用时发生;Python 实现不匹配此行为。现在 datetime 符合 PEP-399,不会在尾随 '%' 上抛出异常。
bpo-35345: 函数
platform.popen已被移除,自 Python 3.3 起已弃用:请改用os.popen()。bpo-35344: 在 macOS 上,
platform.platform()现在使用platform.mac_ver(),如果它返回一个非空的发布字符串,以获取 macOS 版本而非 darwin 版本。bpo-35312: 使
lib2to3.pgen2.parse.ParseError可往返 pickle。由 Anthony Sottile 提供补丁。bpo-35308: 修复
webbrowser中的回归问题,其中默认浏览器可能优先于BROWSER环境变量中的浏览器。bpo-24746: 避免在 doctest 花式差异中去除尾部空格。原始由 R. David Murray 和 Jairo Trad 提供补丁。由 Sanyam Khurana 增强。
bpo-28604:
locale.localeconv()现在如果两个区域设置不同且货币字符串非 ASCII,会临时将LC_CTYPE区域设置改为LC_MONETARY区域设置。这一临时更改会影响其他线程。bpo-35277: 更新 ensurepip 以安装 pip 18.1 和 setuptools 40.6.2。
bpo-24209: 直接调用 http.server 时增加 IPv6 支持。
bpo-35226: 在测试
unittest.mock.call对象相等性时递归检查参数,并添加说明,在mock_calls中追踪用于创建模拟祖先的参数是不可能的。bpo-29564: warnings 模块现在建议如果指定了源,tracemalloc 模块可用但 tracemalloc 未跟踪内存分配时启用 tracemalloc。
bpo-35189: 修改以下 fnctl 函数,在信号中断 (EINTR) 时重试:flock, lockf, fnctl
bpo-30064: 在 sock_* asyncio API 中使用 add_done_callback() 以在取消时早期取消订阅 reader/writer。
bpo-35186: 移除当
setup.py upload与bdist_rpm或bdist_dumb一起使用时添加的“built with”注释。bpo-35152: 允许在非 Windows 系统上的多进程连接中一次发送超过 2 GB 的数据。
bpo-35062: 修复了对
io.IncrementalNewlineDecoder的 translate 参数的错误解析。bpo-35065: 移除了
StreamReaderProtocol._untrack_reader。当前对_untrack_reader``的调用执行得过早,导致协议在 ``connection_lost能够运行并将EOF传递给读取器之前就忘记了读取器。bpo-34160: ElementTree和minidom现在保留了用户指定的属性顺序。
bpo-35079: 通过添加'non-overlapping'和将'!='改为'<'来改进difflib.SequenceManager.get_matching_blocks的文档。
bpo-33710: 弃用了
gettext模块中的l*gettext()函数和方法。它们返回编码的字节而不是Unicode字符串,是Python 2时代的产物。同时也弃用了与设置l*gettext()函数和方法字符集相关的函数和方法。bpo-35017: 现在,如果 :socketserver.BaseServer.serve_forever`的
shutdown()方法在轮询新事件时被调用,它会立即退出。bpo-35024:
importlib不再在(created|could not create) <bytecode path>已经被记录后冗余地记录wrote <bytecode path>。由Quentin Agren提供的补丁。bpo-35047: 现在,如果
assert_not_called、assert_called_once或``assert_called_once_with``失败,``unittest.mock``会在异常消息中包含模拟调用。由Petter Strandmark提供的补丁。bpo-31047: 修复了
ntpath.abspath在Windows上未移除尾部分隔符的回归问题。由Tim Graham提供的补丁。bpo-35053: tracemalloc现在尝试在对象从"自由列表"(用于更快创建对象的优化,例如内置列表类型使用)中重用时更新回溯。
bpo-31553: 向json.tool添加了--json-lines选项。由hongweipeng提供的补丁。
bpo-34794: 修复了在将Tcl_Obj的Python包装器传回Tcl/Tk时Tkinter中的泄漏问题。
bpo-34909: 枚举:修复当父类与具体数据类型混合时子类的子类化问题。
bpo-35022:
unittest.mock.MagicMock现在支持__fspath__方法(来自os.PathLike)。bpo-35008: 修复了在 C 实现中调用已初始化元素的
xml.etree.ElementTree.Element的__setstate__()方法时的引用泄漏问题。bpo-23420: 验证 cProfile CLI 的 '-s' 参数的值。由 Robert Kuska 提供补丁。
bpo-33947: 数据类现在可以处理递归 repr 而不会引发 RecursionError。
bpo-34890: 使
inspect.iscoroutinefunction()、inspect.isgeneratorfunction()和inspect.isasyncgenfunction()与functools.partial()一起工作。由 Pablo Galindo 提供补丁。bpo-34521: 使用
socket.CMSG_SPACE()而不是socket.CMSG_LEN()在multiprocessing.reduction.recvfds()中计算辅助数据大小,因为 RFC 3542 要求便携式应用程序使用前者。bpo-31522:
mailbox.mbox.get_string函数的 from_ 参数现在可以成功设置为非默认值。bpo-34970: 在
asyncio.all_tasks()中保护任务弱集操作。bpo-34969: gzip:在 gzip CLI 上添加 --fast、--best 参数,这些参数将用于快速压缩方法(quick)或最佳压缩方法(较慢,但文件更小)。同时,将默认压缩级别更改为 6(折中)。
bpo-16965: 2to3 的
execfile修复器现在以'rb'模式打开文件。由 Zackery Spytz 提供补丁。bpo-34966:
pydoc现在不仅支持对最终类中定义的方法的别名,还支持对继承的方法的别名。文档字符串不会为别名重复。bpo-34926:
mimetypes.MimeTypes.guess_type()现在除了接受 URL 字符串外,还接受 path-like object。由 Mayank Asthana 提供补丁。bpo-23831: 向
tkinter.Canvas小部件添加moveto()方法。由 Juliette Monsel 提供补丁。bpo-34941:
xml.etree.ElementTree模块中Element类的find()、findtext()和findall()方法现在能够查找Element子类实例的子元素。bpo-32680: 现在
smtplib.SMTP对象始终有一个sock属性。bpo-34769: 修复了当事件循环处于调试模式且垃圾收集器在另一个线程中运行时异步生成器未完成的问题。
bpo-34936: 修复
tkinter.Spinbox.selection_element()中的TclError。由 Juliette Monsel 提供补丁。bpo-34829: 为了与
tkinter.Entry组件保持一致,向tkinter.Spinbox添加了selection_from、selection_range、selection_present和selection_to方法。由 Juliette Monsel 提供补丁。bpo-34911: 向 http.cookiejar.DefaultCookiePolicy 添加了 secure_protocols 参数,以允许调整协议,并默认支持 *wss*(安全的 websocket 协议)。
bpo-34922: 修复了
hashlib模块中 SHAKE 算法的digest()和hexdigest()方法的整数溢出问题。bpo-34925: bisect 模块中函数的参数解析速度提高了 25%。
bpo-34900: 修复了
unittest.TestCase.debug()在调用带有子测试的测试方法时的问题。由 Bruno Oliveira 提供补丁。bpo-34844: logging.Formatter 增强 - 确保 logging.Formatter 中的样式和 fmt 匹配 - 在每个格式样式类(StrFormatStyle、PercentStyle、StringTemplateStyle)中添加了 validate 方法。 - 此方法在 logging.Formatter 类的构造函数中调用 - 同时在每个样式类的 format 方法中重新引发 KeyError,以便更清楚地表明这是无效格式字段的错误。
bpo-34897: 调整 test.support.missing_compiler_executable 检查,以便忽略名义命令名为 "" 的情况。由 Michael Felt 提供补丁。
bpo-34871: 修复 inspect 模块在解析可调用对象的
__text_signature__时污染sys.modules的问题。bpo-34898: 向
gzip.compress添加mtime参数以实现可重现的输出。由 Guo Ci Teo 提交补丁。bpo-28441: 在 Cygwin 和 MinGW 上,确保
sys.executable始终包含路径中的完整文件名,包括.exe后缀(除非它是符号链接)。bpo-34866: 向
cgi.FieldStorage添加max_num_fields,通过限制FieldStorage创建的MiniFieldStorage对象数量来增加 DOS 攻击的难度。bpo-34711: http.server 确保当本地路径以 "/" 结尾且不是目录时报告 HTTPStatus.NOT_FOUND,即使底层操作系统(如 AIX)接受此类路径作为有效文件引用。由 Michael Felt 提交补丁。
bpo-34872: 修复 asyncio.Task 的 C 实现中的自我取消问题。
bpo-34849: 不在 asyncio 循环迭代中记录等待
selector.select。等待对于任何 asyncio 程序来说都是非常正常的,记录其时间只会给日志添加噪音而不提供任何有用信息。bpo-34022: 环境变量
SOURCE_DATE_EPOCH不再覆盖py_compile.compile()的 invalidation_mode 参数的值,而是决定其默认值。bpo-34819: 在
Executor.map()和as_completed()中使用单调时钟计算超时,以防止系统时钟调整时超时偏离。bpo-34758: 将 .wasm -> application/wasm 添加到识别的文件类型和内容类型头列表中。
bpo-34789:
xml.sax.make_parser()现在接受任何可迭代对象作为其 parser_list 参数。由 Andrés Delfino 提交补丁。bpo-34334: 在
QueueHandler中,清除LogRecord中的exc_text以防止追踪信息被写入两次。bpo-34687: 在 Windows 上,asyncio 现在默认使用 ProactorEventLoop,而不是 SelectorEventLoop。
bpo-32892: 解析器现在将所有常量表示为
ast.Constant,而不是使用特定的常量 AST 类型(Num、Str、Bytes、NameConstant和Ellipsis)。这些类被视为已弃用,将在未来的 Python 版本中移除。bpo-34728: 当在方法
asyncio.sleep、asyncio.wait和asyncio.wait_for中使用loop时,添加弃用警告。bpo-34738: 由
distutils创建的 ZIP 文件现在将包含目录条目。bpo-34659: 向 itertools.accumulate() 添加一个可选的 initial 参数。
bpo-29577: 支持在创建 Enums 时使用多个混合类。
bpo-34670: 为 TLS 1.3 的握手后认证功能添加 SSLContext.post_handshake_auth 和 SSLSocket.verify_client_post_handshake。
bpo-32718: venv 的 Activate.ps1 脚本现在可以与 PowerShell Core 6.1 一起使用,并且在所有操作系统下都可用。
bpo-31177: 修复了在使用
reset_mock时,无法在删除属性的模拟实例上使用的问题。bpo-34672: 添加一个变通方法,使得在某些情况下,musl C 库上的
'Z'time.strftime()说明符可以工作。bpo-34666: 实现
asyncio.StreamWriter.awrite和asyncio.StreamWriter.aclose()协程。这些方法是为了提供一致的流 API,默认情况下开启控制流。bpo-6721: 在 fork() 过程中获取日志模块常用的内部锁,以避免子进程中的死锁。
bpo-34658: 修复了一个罕见的解释器未处理异常状态 SystemError,仅在以下情况下出现:使用 subprocess 与 preexec_fn 同时,os.register_at_fork 注册了 after_parent 处理程序,并且 fork 系统调用失败。
bpo-34652: 确保
os.lchmod()永远不会在 Linux 上定义。bpo-34638: 存储对流读取器的弱引用,以打破读取器和协议之间的强引用循环。这允许在流被删除(垃圾回收)而未调用
close()时检测并关闭套接字。bpo-34536:
Enum._missing_: 如果返回None则抛出ValueError,如果返回非成员则抛出``TypeError``。bpo-34636: 加快对字节对象中s w和d的多次不匹配字符的重新扫描。(微优化)
bpo-24412: 向unittest添加
addModuleCleanup()和addClassCleanup()以支持setUpModule()和setUpClass()的清理工作。由Lisa Roach提供补丁。bpo-34630: 不在asyncio代码中记录SSL证书错误(连接错误记录已被跳过)。
bpo-32490: 防止在
subprocess异常消息中文件名重复。由Zackery Spytz提供补丁。bpo-34363: dataclasses.asdict()和.astuple()现在能正确处理命名元组。
bpo-34625: 更新供应商化的expat库版本至2.2.6。
bpo-32270: subprocess模块不再错误地关闭被重定向的文件描述符,即使它们在pass_fds中且不在默认的{0, 1, 2}集合内。
bpo-34622: 创建专用的
asyncio.CancelledError、asyncio.InvalidStateError和``asyncio.TimeoutError``异常类。使它们继承自concurrent.futures包中对应的异常。将``asyncio``异常提取到一个单独的文件中。bpo-34610: 修复了
multiprocessing.managers.DictProxy的迭代器。bpo-34421: 修复distutils对非ASCII字符串的日志记录。这曾导致Windows上的安装问题。
bpo-34604: 修复了由于不可见字符或尾部空格导致的
pwd.getpwnam和grp.getgrnam错误消息中可能的乱码问题,通过使用字符串表示。由William Grzybowski提供补丁。bpo-30977: 使uuid.UUID使用
__slots__以减少其内存占用。基于Wouter Bolsterlee的原始补丁。bpo-34574: OrderedDict迭代器在pickling时不再耗尽。由Sergey Fedoseev提供补丁。
bpo-8110: 重构
subprocess以检查Windows特定模块,而非``sys.platform == 'win32'``。bpo-34530:
distutils.spawn.find_executable()现在在没有设置PATH环境变量时回退到os.defpath。bpo-34563: 在Windows上,修复multiprocessing.Connection对于非常大的读取的修复:修复_winapi.PeekNamedPipe()和_winapi.ReadFile()对于大于INT_MAX(通常是
2**31-1)的读取。bpo-34558: 修正Lib/ctypes/_aix.py中的拼写错误。
bpo-34282: 将
Enum._convert移动到EnumMeta._convert_并修复枚举成员被父属性遮蔽的问题。bpo-22872: 当队列关闭时,
multiprocessing.Queue.put()和multiprocessing.Queue.get()现在分别抛出ValueError而不是AssertionError和OSError。由Zackery Spytz提供补丁。bpo-34515: 修复
lib2to3.pgen2.tokenize中解析非ASCII标识符的问题(PEP 3131)。bpo-13312: 避免时间模块的年处理代码在传递非常低的负年值时可能出现的整数下溢(未定义行为)。
bpo-34472: 提高
zipfile中流式文件的兼容性。之前未写入可选签名,不支持某些ZIP应用程序。由Silas Sewell提供补丁。bpo-34454: 修复datetime类型的.fromisoformat()方法在给定非UTF-8可编码的Unicode时崩溃的问题。具体来说,datetime.fromisoformat()现在接受用作分隔符的代理Unicode码点。报告和测试由Alexey Izbyshev提供,由Paul Ganssle提供补丁。
bpo-6700: 修复inspect.getsourcelines对于模块级别的帧/回溯的问题。由Vladimir Matveev提供补丁。
bpo-34441: 修复当传递一个具有无效
__subclasses__的ABC派生类作为issubclass()的第二个参数时崩溃的问题。由 Alexey Izbyshev 提供补丁。bpo-34427: 修复
MutableSequence子类中a.extend(a)导致的无限循环问题。bpo-34412: 使
signal.strsignal()在 HP-UX 上工作。由 Michael Osipov 提供补丁。bpo-20849: shutil.copytree 现在接受一个新的
dirs_exist_ok关键字参数。由 Josh Bronson 提供补丁。bpo-31715: 将
.mjs文件扩展名与application/javascriptMIME 类型关联。bpo-34384:
os.readlink()现在在 Windows 上接受 路径类 和bytes对象。bpo-22602: UTF-7 解码器现在对以 "+" 开头的不良序列(如 RFC 2152 中指定)引发
UnicodeDecodeError。由 Zackery Spytz 提供补丁。bpo-2122:
mmap.flush()方法现在在成功时返回None,在所有平台上的错误时引发异常。bpo-34341: 使用 ZIP64 扩展附加到 ZIP 存档不再增加现有条目的额外字段的大小。
bpo-34333: 修复
pathlib.PurePath.with_suffix()中格式化错误消息时的 %-格式化问题。bpo-18540:
imaplib.IMAP4和imaplib.IMAP4_SSL类现在在使用 host 参数的默认值('')时正确解析到本地主机 IP。bpo-26502: 实现
traceback.FrameSummary.__len__()方法以保持与旧元组 API 的兼容性。bpo-34318:
assertRaises(),assertRaisesRegex(),assertWarns()和assertWarnsRegex()如果传递的可调用对象为 None 则不再成功。它们在上下文管理器模式下不再忽略未知关键字参数。自 Python 3.5 以来,在这些情况下会引发 DeprecationWarning。bpo-9372: 弃用
xml.dom.pulldom.DOMEventStream、wsgiref.util.FileWrapper和fileinput.FileInput的__getitem__()方法。bpo-33613: 修复
multiprocessing.semaphore_tracker中的竞态条件,该条件发生在追踪器接收到 SIGINT 信号但尚未注册信号处理程序以忽略它之前。bpo-34248: 当由于操作系统相关错误
dbm.gnu.open()和dbm.ndbm.open()无法打开数据库文件时,在引发的异常中报告文件名。由 Zsolt Cserna 提供补丁。bpo-33089: 添加 math.dist() 以计算两点之间的欧几里得距离。
bpo-34246:
smtplib.SMTP.send_message()不再修改 mail_options 参数的内容。补丁由 Pablo S. Blum de Aguiar 提供。bpo-31047: 修复 Windows 上无效路径的
ntpath.abspath。由 Franz Woellert 提供补丁。bpo-32321: 为 functools.reduce 添加纯 Python 回退。由 Robert Wright 提供补丁。
bpo-34270: 默认的 asyncio 任务类现在始终有一个名称,可以使用两个新方法 (
get_name()和set_name()) 获取或设置,并且在repr()输出中可见。初始名称也可以使用asyncio.create_task()的新name关键字参数或事件循环的create_task()方法设置。如果未设置初始名称,默认的任务实现会使用单调计数器生成类似Task-1的名称。bpo-34263: asyncio 的事件循环不会将超过一天的超时传递给 epoll/select 等。
bpo-34035: 修复 zipfile seek() 方法中的几个 AttributeError。由 Mickaël Schoentgen 提供补丁。
bpo-34075: 弃用将非 ThreadPoolExecutor 实例传递给
AbstractEventLoop.set_default_executor()。bpo-34251: 恢复
msilib.Win64以保持向后兼容性,因为它已经被distutils的bdist_msi命令使用。bpo-19891: 在交互式会话退出时写入历史记录时,忽略由于主目录缺失或不可写导致的错误。补丁由 Anthony Sottile 提供。
bpo-33089: 增强了 math.hypot() 以支持超过两个维度。
bpo-34228: tracemalloc: PYTHONTRACEMALLOC=0 环境变量和 -X tracemalloc=0 命令行选项现在可以用来在启动时显式禁用 tracemalloc。
bpo-13041: 使用
shutil.get_terminal_size()在argparse.HelpFormatter类中正确计算终端宽度。初始由 Zbyszek Jędrzejewski-Szmek 提供补丁。bpo-34213: 允许冻结的数据类有一个名为“object”的字段。之前这与内部使用的“object”冲突。
bpo-34052:
sqlite3.Connection.create_aggregate(),sqlite3.Connection.create_function(),sqlite3.Connection.set_authorizer(),sqlite3.Connection.set_progress_handler()方法在传递不可哈希对象作为可调用对象时抛出 TypeError。这些方法现在不会将这样的对象传递给 SQLite API。之前的行为可能导致段错误。由 Sergey Fedoseev 提供补丁。bpo-34197:
csv读取器的 dialect 属性的 skipinitialspace, doublequote 和 strict 属性现在是bool实例,而不是整数 0 或 1。bpo-32788: 在
sqlite3模块中的__adapt__()和__conform__()方法中引发的除TypeError以外的错误现在会传播给用户。bpo-21446:
reload修复器现在使用importlib.reload()而不是已弃用的imp.reload()。bpo-940286: pydoc 的
Helper.showtopic()方法现在正确打印主题的交叉引用。bpo-34164:
base64.b32decode()可能会因错误的填充引发 UnboundLocalError 或 OverflowError。现在在这些情况下总是引发base64.Error。bpo-34097: ZipFile 现在可以通过新的
strict_timestamps参数压缩早于 1980-01-01 和晚于 2107-12-31 的文件,代价是将时间戳设置为限制值。bpo-34108: 在 2to3 重构中移除了多余的 CR。
bpo-34070: 确保在打开文件时
buffering=-1的情况下,仅检查句柄是否为 tty。bpo-33967: functools.singledispatch 现在在没有传递位置参数时抛出 TypeError 而不是 IndexError。
bpo-34041: 向
sqlite3.Connection.create_function()方法添加了 deterministic 参数。由 Sergey Fedoseev 提供补丁。bpo-34056: 确保由
imp.load_module创建的加载器 shim 总是从其get_data()函数返回字节。这修复了imp.load_module与基于 PEP 552 哈希的 pycs 一起使用的问题。bpo-34054: multiprocessing 模块现在使用单调时钟
time.monotonic()而不是系统时钟time.time()来实现超时。bpo-34043: 当使用 gzip 时,优化 tarfile 解压性能约 15%。
bpo-34044:
subprocess.Popen现在复制 startupinfo 参数以保持其不变:它将修改副本,因此同一个STARTUPINFO对象可以被多次使用。bpo-34010: 修复了使用 tarfile 读取流时的性能回归。缓冲读取应使用列表,而不是追加到字节对象。
bpo-34019: webbrowser: 使用
webbrowser模块打开新 URL 时,正确传递参数给 Opera 浏览器。由 Bumsik Kim 提供补丁。bpo-34003: csv.DictReader 现在创建 dicts 而不是 OrderedDicts。补丁由 Michael Selik 提供。
bpo-33978: 在通过 fileConfig 和 dictConfig 重新配置之前关闭现有的日志处理程序。补丁由 Karthikeyan Singaravelan 提供。
bpo-14117: 对turtledemo进行小幅调整。'wikipedia'示例现更名为'rosette',以更准确描述其绘制内容。'penrose'的打印输出已减少。'tree'的'1024'输出已被移除。
bpo-33974: 修复了将包含特殊字符
",\,{,}和\n的字符串列表或元组作为选项传递给ttk部件的问题。bpo-27500: 修复getaddrinfo以正确解析IPv6地址。
bpo-24567: 改进random.choices()以处理偶尔会触发IndexError的次正规输入权重。
bpo-33871: 修复了
os.readv(),os.writev(),os.preadv()和os.pwritev()以及os.sendfile()(在基于BSD的操作系统和macOS上,带有 headers 或 trailers 参数时) 中的整数溢出问题。bpo-25007: 为zlib压缩器和解压缩器添加
copy.copy()和copy.deepcopy()支持。补丁由Zackery Spytz提供。bpo-33929: 多进程处理:修复了multiprocessing.popen_spawn_win32中Popen的一个竞态条件。子进程现在复制管道的读取端而不是“窃取”它。之前,子进程会“窃取”管道的读取端,但如果子进程在从父进程窃取句柄之前被终止,则会泄漏一个句柄。
bpo-33899: Tokenize模块现在在提供的输入没有尾随换行符时隐式发出NEWLINE。此行为现在与C tokenizer内部的行为匹配。由Ammar Askar贡献。
bpo-33897: 向logging.basicConfig()添加了一个'force'关键字参数。
bpo-33695:
shutil.copytree()使用os.scandir()函数以及所有依赖于它的复制函数都使用了缓存的os.stat()值。在Linux上复制一个包含8000个文件的目录时,速度提升约+9%,在Windows上约+20%,在Windows SMB共享上约+30%。同时,os.stat()系统调用的次数减少了38%,使得shutil.copytree()在网络文件系统上特别快。(由Giampaolo Rodola'在 bpo-33695 中贡献。)bpo-33916: bz2和lzma:当Decompressor.__init__()被调用两次时,释放旧的锁以防止内存泄漏。
bpo-32568: 使select.epoll()及其文档在 sizehint 和 flags 方面保持一致。
bpo-33833: 修复了asyncio中的一个bug,该bug导致ProactorSocketTransport在写操作期间强制关闭时会记录AssertionError。
bpo-33663: 在将内容长度放入头部之前,将其转换为字符串。
bpo-33721:
os.path函数如exists(),lexists(),isdir(),isfile(),islink(), 和ismount(),以及pathlib.Path方法如exists(),is_dir(),is_file(),is_mount(),is_symlink(),is_block_device(),is_char_device(),is_fifo(),is_socket()现在对于在操作系统级别无法表示的字符或字节的路径返回False,而不是引发ValueError或其子类UnicodeEncodeError和UnicodeDecodeError。bpo-26544: 修正了
platform.libc_ver()的实现。它几乎总是为glibc返回版本'2.9'。bpo-33843: 移除了已弃用的
cgi.escape,cgi.parse_qs和cgi.parse_qsl。bpo-33842: 移除了自Python 3.3以来已弃用的
tarfile.filemode。bpo-30167: 如果设置了PYTHONSTARTUP,防止site.main()异常。由Steve Weber提供补丁。
bpo-33805: 当未指定InitVar时,改进dataclasses.replace()的错误消息
bpo-33687: 如果给定或解码了模式,修复
uu.decode()对os.chmod()的调用。由Timo Furrer提供补丁。bpo-33812: 对于tzinfo非None但d.tzinfo.utcoffset(d)返回None的Datetime实例d,现在astimezone()方法将其视为naive。
bpo-32108: 在configparser中,当节被分配给自己时不清除它。
bpo-27397: 使email模块正确处理长度无效的base64字符串。
bpo-33578: 实现多字节编码器/解码器状态方法
bpo-30805: 避免调试日志记录中的竞态条件
bpo-33476: 当地址组缺少最后的';'时,修复_header_value_parser.py。由Enrique Perez-Terron贡献
bpo-33694: asyncio: 修复在使用ProactorEventLoop时,pause_reading()/resume_reading()导致数据丢失的竞态条件。
bpo-32493: 在
configure.ac中更正对uuid_enc_be可用性的测试。由Michael Felt提供补丁。bpo-33792: 添加asyncio.WindowsSelectorEventLoopPolicy和asyncio.WindowsProactorEventLoopPolicy。
bpo-33274: W3C DOM Level 1指定Element.removeAttributeNode()的返回值为"The Attr node that was removed." xml.dom.minidom现在符合这一要求。
bpo-33778: 更新
unicodedata的数据库至Unicode版本11.0.0。bpo-33165: 为日志记录调用添加了stacklevel参数,以允许使用包装器/辅助函数进行日志记录API的调用。
bpo-33770: 针对长度无效的编码输入,改进base64异常消息
bpo-33769: asyncio/start_tls: 修复错误消息;在未处理错误的情况下取消回调;如果SSLTransport被中止,则标记为已关闭。
bpo-33767: 在
mmap.mmap对象上执行时,连接(+)和重复(*)序列操作现在会引发TypeError而不是SystemError。由 Zackery Spytz 提供补丁。bpo-33734: asyncio/ssl:修复 AttributeError,增加默认的握手超时时间
bpo-31014: 修复了当用户在 BROWSER 环境变量中指定条目路径时为
webbrowser创建控制器的问题。基于 John Still 的补丁。bpo-2504: 添加 gettext.pgettext() 及其变体。
bpo-33197: 为 _ParameterKind 添加描述属性
bpo-32751: 当由于超时取消任务时,
asyncio.wait_for()现在将等待直到取消完成。bpo-32684: 修复 gather 即使在 return_exceptions 的情况下也能传播自身的取消。
bpo-33654: 在 SSLTransport.set_protocol() 中支持协议类型切换。
bpo-33674: 尽早暂停传输,以进一步降低在 connection_made() 之前调用 data_received() 的风险。
bpo-33671:
shutil.copyfile()、shutil.copy()、shutil.copy2()、shutil.copytree()和shutil.move()在 Linux 和 macOS 上使用平台特定的快速复制系统调用,以更高效地复制文件。在 Windows 上,shutil.copyfile()使用更大的默认缓冲区大小(1 MiB 而不是 16 KiB),并且使用了基于memoryview()的shutil.copyfileobj()变体。复制 512MiB 文件的速度在 Linux 上提高了约 +26%,在 macOS 上提高了 +50%,在 Windows 上提高了 +40%。同时,消耗的 CPU 周期大大减少。(由 Giampaolo Rodola' 在 bpo-25427 中贡献。)bpo-33674: 修复 asyncio.sslproto 中 SSLProtocol.connection_made() 的竞态条件:立即开始握手而不是使用 call_soon()。之前,data_received() 可能在握手开始前被调用,导致握手挂起或失败。
bpo-31647: 修复了在 _SelectorSocketTransport 已经关闭后调用 write_eof() 会引发 AttributeError 的错误。
bpo-32610: 使 asyncio.all_tasks() 仅返回待处理的任务。
bpo-32410: 在 sendfile 回退代码中避免阻塞文件 IO。
bpo-33469: 修复了使用 run_in_executor 后关闭循环时引发的 RuntimeError。
bpo-33672: 修复 Task.__repr__ 与 Cython 的虚假协程一起使用时崩溃的问题。
bpo-33654: 修复 transport.set_protocol() 以支持在 asyncio.Protocol 和 asyncio.BufferedProtocol 之间切换。修复 loop.start_tls() 以支持 asyncio.BufferedProtocols。
bpo-33652: 类型变量和下标泛型的 pickle 现在具有未来兼容性,并与旧版 Python 兼容。
bpo-32493: 修复了 FreeBSD 上的
uuid.uuid1()。bpo-33238: 将
InvalidStateError添加到concurrent.futures。如果 futures 不是待处理或运行状态,Future.set_result和Future.set_exception现在会引发InvalidStateError。由 Jason Haydaman 提供补丁。bpo-33618: 完成并记录与 OpenSSL 1.1.1 的初步和实验性 TLS 1.3 支持。
bpo-33625: 如果这些函数的可重入变体可用,则在
grp.getgrnam、grp.getgrgid、pwd.getpwnam和pwd.getpwuid上释放 GIL。由 William Grzybowski 提供补丁。bpo-33623: 修复在 __del__ 中创建 asyncio.Future 时可能出现的 SIGSGV。
bpo-11874: 当将用法分解为可包装部分时使用更好的正则表达式。避免来自自定义 metavar 字符串的错误断言错误。
bpo-30877: 修复了 JSON 解码器 Python 实现中的一个错误,该错误阻止了在完成解码后清除已解析字符串的缓存。基于 c-fos 的补丁。
bpo-33604: 移除标记为在 3.8 中移除的 HMAC 默认 md5(原计划在 3.6 中移除,PR 7062 中推迟到 3.8)。
bpo-33582: 为 inspect.formatargspec 发出弃用警告。
bpo-21145: 添加
functools.cached_property装饰器,用于计算属性,这些属性在实例的生命周期内被缓存。bpo-33570: 更改 TLS 1.3 密码套件设置,以兼容 OpenSSL 1.1.1-pre6 及更新版本。OpenSSL 1.1.1 将默认启用 TLS 1.3 密码。
bpo-28556: 不再简化
typing.Union的参数。现在Union[Manager, Employee]在运行时不会简化为Employee。之前的简化导致了一些错误,并限制了内省的可能性。bpo-12486:
tokenize.generate_tokens()现在被记录为一个公共 API,用于对 Unicode 字符串进行分词。它之前存在但未被记录。bpo-33540: 向
socketserver的ForkingMixIn和ThreadingMixIn类添加一个新的block_on_close类属性。bpo-33548: tempfile._candidate_tempdir_list 应考虑常见的 TEMP 位置
bpo-33109: argparse 子解析器默认再次不需要,恢复了在 3.7.0a2 中由 bpo-26510 引入的行为变化。
bpo-33541: 移除未使用的私有方法
_strptime.LocaleTime.__pad``(又名 ``_LocaleTime__pad)。bpo-33536: dataclasses.make_dataclass 现在检查无效的字段名和重复的字段。此外,添加了对无效字段规范的检查。
bpo-33542: 防止
uuid.get_node在 Windows 上使用 DUID 而不是 MAC。由 Zvi Effron 提供补丁bpo-26819: 修复 Windows proactor 事件循环中
ReadTransport.resume_reading的竞争条件。修复当 ClassVar 作为字符串前向引用提供时
typing.get_type_hints()的失败。bpo-33516:
unittest.mock.MagicMock现在支持__round__魔术方法。bpo-28612: 向 urllib 的
RobotFileParser添加了对站点地图的支持,作为RobotFileParser.site_maps()。补丁由 Lady Red 提供,基于 Peter Wirtz 的补丁。bpo-28167: 移除自3.5版起已弃用的platform.linux_distribution。
bpo-33504: 将
configparser的默认字典实现从collections.OrderedDict切换为标准dict类型。bpo-33505: 通过重新排序if检查优化asyncio.ensure_future():速度提升1.17倍。
bpo-33497: 向cgi.parse_multipart添加errors参数,并使FieldStorage中的编码使用给定的errors(Twisted所需)。由Amber Brown提供补丁。
bpo-29235:
cProfile.Profile类现在可用作上下文管理器。补丁由Scott Sanderson提供。bpo-33495: 更改dataclasses.Fields的repr以使用其每个成员的repr,而非str。这使得每个字段实际代表的内容更加清晰。这对于'type'成员尤为明显。
bpo-26103: 修正
inspect.isdatadescriptor以查找__set__或__delete__。由Aaron Hall提供补丁。bpo-29209: 移除了
XMLParser构造函数的doctype()方法和 html 参数。子类中定义的doctype()方法将不再被调用。ElementTree模块中已弃用的方法getchildren()和getiterator()现在发出DeprecationWarning而非PendingDeprecationWarning。bpo-33453: 修复dataclasses以在使用字面字符串类型注解或使用PEP 563“推迟的注解评估”时工作。仅为ClassVar("ClassVar"和"typing.ClassVar")和InitVar("InitVar"和"dataclasses.InitVar")检测特定的字符串前缀。
bpo-28556: typing模块中的小修复:向
NamedTuple.__new__添加注解,在``Generic.__new__``中传递*args和**kwds。原始PR由Paulius Šarka和Chad Dombrova提供。bpo-33365: 如果在
http.client中将 debuglevel 设置为>0,除了头键外还打印头值。补丁由Marco Strigl提供。bpo-20087: 更新了支持glibc 2.27地区设置的别名映射。
bpo-33422: 修复在pydoc上查找字节/字符串字面量时尾随引号被删除的问题。由Andrés Delfino提供补丁。
bpo-28167: 函数
platform.linux_distribution和platform.dist现在触发``DeprecationWarning``,并已被标记为在Python 3.8中移除。bpo-33281: 修复macOS上ctypes.util.find_library的回归问题。
bpo-33311: 由cgitb生成的文本和html输出现在如果当前调用直接在模块中进行时不会显示括号。由Stéphane Blondon提供补丁。
bpo-27300: tempfile*中的文件类现在接受一个 *errors 参数,补充了已经存在的 encoding 参数。由Stephan Hohe提供补丁。
bpo-32933:
unittest.mock.mock_open()现在支持对文件内容进行迭代。由Tony Flury提供补丁。bpo-33197: 更新构造无效inspect.Parameters时的错误信息。由Donghee Na提供补丁。
bpo-33375: warnings模块现在从代码对象而非帧的全局命名空间找到与警告相关联的Python文件。这与tracebacks和pdb如何查找文件名一致,应该能更好地处理动态执行的代码。
bpo-33336:
imaplib``现在允许在 ``IMAP4.uid()中使用MOVE命令(RFC 6851: IMAP MOVE扩展)并可能作为IMAP4对象支持的方法名称。bpo-32455: 向
dis.stack_effect()添加了 jump 参数。bpo-27485: 重命名并弃用
urllib.parse()中未文档化的函数。bpo-33332: 添加
signal.valid_signals()以暴露POSIX sigfillset()功能。bpo-33251: 修复了
ConfigParser.items(),使其不再将通过vars()传递的键值对包含在结果输出中。bpo-33329: 修复了在新版 glibc 上的多进程回归问题。
bpo-33334:
dis.stack_effect()现在支持所有定义的 opcode,包括 NOP 和 EXTENDED_ARG。bpo-991266: 修复了
http.cookies.SimpleCookie的Comment属性的引用问题。bpo-33131: 将捆绑的 pip 版本升级至 10.0.1。
bpo-33308: 修复了
parser模块在将 ST 对象转换为元组或列表树时,当line_info=False且col_info=True时的崩溃问题。bpo-23403: lib2to3 现在对预计算的语法使用 pickle 协议 4。
bpo-33266: lib2to3 现在能识别
rf'...'字符串。bpo-11594: 确保在使用 lib2to3 时尊重行尾。
bpo-33254: 使
importlib.resources.contents()和importlib.abc.ResourceReader.contents()返回 iterable 而非 iterator。bpo-33265:
contextlib.ExitStack和contextlib.AsyncExitStack现在使用方法而不是包装函数来处理退出回调。bpo-33263: 修复了
_SelectorSocketTransport中的文件描述符泄漏问题。由 Vlad Starostin 提供补丁。bpo-33256: 修复了
cgitb.html()生成的 html 中<module>调用的显示问题。补丁由 Stéphane Blondon 提供。bpo-33144: 优化了
random.Random()及其子类机制,仅在类/子类实例化时检查一次其getrandbits()方法是否可以被其他方法(包括randrange())依赖,用于生成任意大的随机整数。由 Wolfgang Maier 提供补丁。bpo-33185: 修复了使用
-m开关运行 pydoc 时的回归问题。(此回归问题由解决 bpo-33053 在 3.7.0b3 版本引入)此修复还改变了 pydoc,使其在必要时将
os.getcwd()添加到sys.path中,而不是添加"."。bpo-29613: 在
http.cookies模块中添加了对SameSitecookie 标志的支持。bpo-33169: 当调用
importlib.machinery.invalidate_caches()时,删除sys.path_importer_cache中的None条目。bpo-33203:
random.Random.choice()现在对于空序列会一致地引发IndexError,即使是从没有getrandbits()实现的子类中调用也是如此。bpo-33224: 为 PEP 479 更新 difflib.mdiff()。将生成器中未捕获的 StopIteration 转换为 return 语句。
bpo-33209: 在
pickle.Pickler.dump()的 C 实现结束时结束帧。bpo-32861: urllib.robotparser 的
__str__表示现在包括通配符条目和 "Crawl-delay" 和 "Request-rate" 字段。还移除了被附加到字符串末尾的额外换行符。由 Michael Lazar 提供补丁。bpo-23403:
pickle中的DEFAULT_PROTOCOL被提升到 4。协议 4 在 PEP 3154 中有描述,自 Python 3.4 起可用。与 Python 3.0 中引入的协议 3 相比,它提供了更好的性能和更小的尺寸。bpo-20104: 改进了
os.posix_spawn()中的错误处理并修复了一个引用泄漏。bpo-33106: 从只读 dbm 数据库中删除键会引发模块特定的错误,而不是 KeyError。
bpo-33175: 在数据类中,Field.__set_name__ 现在查找默认值的类上的 __set_name__ 特殊方法,而不是实例上的。
bpo-32380: 创建 functools.singledispatchmethod 以支持对描述符和方法的通用单分派。
bpo-33141: 如果 Field 对象有自己的 __set_name__,则让它们将 __set_name__ 传递给它们的默认值。
bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。
bpo-32873: 通过复制和pickle操作将类型变量和特殊类型形式视为不可变。这修复了几个小问题和不一致性,并提高了与Python 3.6的向后兼容性。
bpo-33134: 在计算数据类的__hash__时,使用查找表包含返回__hash__值的函数。这比查找字符串然后测试该字符串以决定做什么有所改进。
bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。
bpo-32505: 如果数据类的成员变量是Field类型但没有类型注解,则抛出TypeError。
bpo-33078: 修复了由于测试依赖sem_getvalue而在OSX上导致的失败。
bpo-33116: 将'Field'添加到dataclasses.__all__中。
bpo-32896: 修复了一个错误,即当子类化一个使用default_factory字段的数据类时会生成一个不正确的类。
bpo-33100: 数据类:如果一个字段有一个默认值是MemberDescriptorType,那么它是因为该字段在__slots__中,而不是一个实际的默认值。
bpo-32953: 如果一个非数据类继承自一个冻结的数据类,允许向派生类添加属性。只有来自冻结数据类的属性不能被赋值。要求层次结构中的所有数据类要么全部冻结,要么全部非冻结。
bpo-33097: 在解释器关闭期间调用
executor.submit时抛出RuntimeError。bpo-32968: 涉及Fraction和float的模和地板除法应返回float。
bpo-33061: 在typing.py的
__all__中添加缺失的NoReturn。bpo-33078: 修复当发生pickling错误时multiprocessing.Queue中的大小处理。
bpo-33064: lib2to3现在正确支持函数签名中
*args和**kwargs后的尾随逗号。bpo-33056: 修复concurrent.futures.ProcessPoolExecutor中泄漏的文件描述符未正确关闭的问题。
bpo-33021: 在fstat()调用期间释放GIL,避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。
bpo-31804: 避免在标准流在退出时被关闭或为None时,multiprocessing.Process失败。
bpo-33034: 当使用
urlparse()和urlsplit()将port属性转换为非整数值时,提供明确的错误消息。由Matt Eaton提供补丁。bpo-30249: 改进struct.unpack_from()在缓冲区大小和偏移量问题上的异常消息。
bpo-33037: 在SSL传输关闭后跳过发送/接收数据。
bpo-27683: 修复
ipaddress中的一个回归问题,当网络由包含整数掩码且仅剩1位地址的元组构造时,hosts()的结果为空。bpo-22674: 在signal模块中添加strsignal()函数,该函数返回给定信号的系统描述,如同strsignal(3)返回的那样。
bpo-32999: 修复
ABC.__subclasscheck__(cls, subclass)的C实现,在subclass不是类型对象时崩溃的问题。bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。
bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。
bpo-32056: 改进在模块
aifc、wave和sunau中读取音频文件时,对于无效通道数和样本宽度引发的异常。bpo-32970: 改进MAKE_FUNCTION指令的反汇编。
bpo-32844: 修复在subprocess中如果另一个低描述符被关闭时,将低描述符(0或1)错误重定向到stderr的问题。
bpo-32960: 对于数据类,禁止从非冻结类继承冻结类,也禁止从冻结类继承非冻结类。这一限制将在未来放宽。
bpo-32713: 修复tarfile.itn对超出界限的浮点值的处理。由Joffrey Fuhrer提供补丁。
bpo-32257: ssl模块现在包含OP_NO_RENEGOTIATION常量,适用于OpenSSL 1.1.0h或1.1.1版本。
bpo-32951: 现在禁止直接实例化SSLSocket和SSLObject对象。这些构造函数从未被记录、测试或设计为公共构造函数。用户应该使用ssl.wrap_socket()或SSLContext。
bpo-32929: 移除了三态参数"hash",并添加了布尔型"unsafe_hash"。如果unsafe_hash为True,添加一个__hash__函数,但如果__hash__已存在,则抛出TypeError。如果unsafe_hash为False,根据eq=和frozen=的值添加__hash__。unsafe_hash=False的行为与旧的hash=None行为相同。unsafe_hash=False是默认值,就像hash=None曾经是默认值一样。
bpo-32947: 添加OP_ENABLE_MIDDLEBOX_COMPAT和测试解决方法,以便未来与OpenSSL 1.1.1兼容的TLSv1.3。
bpo-32146: 记录了冻结可执行文件与multiprocessing中spawn和forkserver启动方法之间的交互。
bpo-30622: ssl模块现在能检测到LibreSSL中缺少的NPN支持。
bpo-32922: dbm.open()现在使用文件系统编码而不是默认编码对文件名进行编码。
bpo-32759: 在multiprocessing.heap中释放未使用的竞技场。
bpo-32859: 在
os.dup2中,不再每次调用时检查dup3系统调用是否存在。bpo-32556: nt._getfinalpathname、nt._getvolumepathname和nt._getdiskusage现在能正确地从字节转换。
bpo-21060: 将setup.py upload中令人困惑的消息从"No dist file created in earlier command"重写为更有帮助的"Must create and upload files in one command"。
bpo-32857: 在
tkinter中,after_cancel(None)现在会引发ValueError异常,而不是取消第一个预定的函数。由Cheryl Sabella提供补丁。bpo-32852: 确保在运行trace时sys.argv保持为列表。
bpo-31333: 添加了
_abc模块。这是一个加速模块,为abc中的各种函数和方法提供了C语言实现。创建ABC子类及调用isinstance或issubclass与ABC子类的速度提高了1.5倍。此外,这使得Python的启动速度提高了10%。注意,新实现隐藏了内部注册表和缓存,之前可以通过私有属性
_abc_registry、_abc_cache和_abc_negative_cache访问。有三个调试辅助方法可以替代使用:_dump_registry、_abc_registry_clear和_abc_caches_clear。bpo-32841: 修复了
asyncio.Condition问题,该问题在通知并取消条件锁后默默忽略了取消。由Bar Harel提供补丁。bpo-32819: ssl.match_hostname() 已被简化,不再依赖 re 和 ipaddress 模块处理通配符和IP地址。对于无效通配符的错误报告已改进。
bpo-19675: 如果初始化失败,
multiprocessing.Pool不再泄漏进程。bpo-32394: socket: 在旧版本Windows运行时移除TCP_FASTOPEN、TCP_KEEPCNT、TCP_KEEPIDLE、TCP_KEEPINTVL标志。
bpo-31787: 修复了多个模块中
__init__()方法的内存泄漏问题。(由Oren Milman贡献)bpo-30157: 修复了在只有最后一个字段被引用时,csv.Sniffer.sniff() 中猜测引用和分隔符的问题。由Jake Davis提供补丁。
bpo-30688: 在正则表达式中添加了对
\N{name}转义的支持。基于Jonathan Eunice的补丁。bpo-32792: collections.ChainMap() 保留了底层映射的顺序。
bpo-32775:
fnmatch.translate()不再生成包含集合操作的模式。以'['开头或包含'--'、'&&'、'~~'或'||'的集合在未来版本的正则表达式中将被不同解释。目前它们会发出警告。fnmatch.translate() 现在避免意外生成包含此类集合的模式。bpo-32622: 为Windows proactor事件循环实现原生快速发送文件功能。
bpo-32777: 修复了在POSIX系统的子进程中,当标记文件描述符为可继承时,subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。
bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在,在支持dl的平台上,共享扩展已明确链接到libdl。
bpo-32749: 使用'r'标志打开的
dbm.dumb数据库现在变为只读。使用'r'和'w'标志的dbm.dumb.open()如果数据库不存在,将不再创建数据库。bpo-32741: 实现
asyncio.TimerHandle.when()方法。bpo-32691: 在使用pdb运行模块时使用mod_spec.parent。
bpo-32734: 修复了
asyncio.Lock()的安全问题,该问题允许多次获取和锁定同一个锁,而锁并未释放。由Bar Harel提供补丁。bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。
bpo-31453: 添加TLSVersion常量和SSLContext.maximum_version / minimum_version属性。新API封装了OpenSSL 1.1 https://web.archive.org/web/20180309043602/https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html 的特性。
bpo-24334: 清理了ssl模块的内部实现细节。SSLSocket减少了一层间接引用。所有者与会话信息现在由SSLSocket和SSLObject的构造函数处理。通道绑定实现已被简化。
bpo-31848: 修复Aifc_read.initfp()中当SSND块未找到时的错误处理。补丁由Zackery Spytz提供。
bpo-32585: 向
tkinter.ttk添加Ttk spinbox小部件。由Alan D Moore提供补丁。bpo-8525: 现在,一个类型上的help()会显示内置的子类。这主要是为了帮助通知更具体的异常子类。
由Sanyam Khurana提供补丁。
bpo-31639: http.server现在公开了一个ThreadingHTTPServer类,并在使用
-m运行模块时使用它,以应对web浏览器预打开套接字的情况。bpo-29877: compileall: 仅在需要时导入ProcessPoolExecutor,防止在资源低的平台上挂起
bpo-32221: 现在,返回包含IPv6地址的元组的各种函数省略了
%scope部分,因为相同的信息已经在 scopeid 元组项中编码。特别是这加快了socket.recvfrom()在接收多播数据包时的速度,因为省略了无用的网络接口名称解析。bpo-32147:
binascii.unhexlify()现在快了2倍。由Sergey Fedoseev提供补丁。bpo-30693: TarFile类现在以一种可重复的方式递归目录。
bpo-30693: ZipFile类现在以一种可重复的方式递归目录。
bpo-31908: 修复了
trace模块命令行工具的封面文件输出。之前仅在使用了--missing选项时才会发出封面文件。由Michael Selik提供补丁。bpo-31608: 如果
collections.deque子类从__new__返回非队列,现在会引发一个``TypeError``而不是崩溃。由Oren Milman提供补丁。bpo-31425: 添加了对AF_QIPCRTR地址族套接字的支持,这是Linux内核支持的。这用于与运行在Qualcomm设备上的服务(如GPS或无线电)通信。由Bjorn Andersson提供补丁。
bpo-22005: 实现了对Python 2腌制的
datetime、date和time实例的解腌。应该使用encoding='latin1'以成功解码。bpo-27645: 如果底层的SQLite库版本为3.6.11或更高,
sqlite3.Connection现在公开了一个backup方法。由Lele Gaifax提供补丁。bpo-31508: 移除了
tkinter.ttk.Treeview.selection中对参数的支持。这在3.6中已被弃用。使用像selection_set这样的专门方法来更改选择。bpo-29456: 修复韩文音节标准化中的漏洞:u1176、u11a7和u11c3。
文档¶
bpo-34764: 改进了iter()带有第二个哨兵参数的示例。
bpo-35564: 为了符合Sphinx 2.0,明确设置了conf.py中的master_doc变量。
bpo-35511: 指定了profile.Profile类不支持enable或disable方法。并且详细说明了Profile对象作为上下文管理器仅在cProfile模块中支持。
bpo-10536: 增强gettext文档。由Éric Araujo提供补丁。
bpo-35089: 移除了对
typing.io和typing.re的提及。它们的类型应该直接从 ``typing``导入。bpo-35038: 修复了关于frame对象中不存在的
f_restricted属性的文档。由Stéphane Wirtel提供补丁。bpo-35042: 用pep角色替换PEP XYZ,并允许直接链接到PEPs。
bpo-35044: 修复了文档中使用
exc角色指向适当异常的错误。由Stéphane Wirtel提供补丁。bpo-35035: 将
email.utils的文档重命名为email.utils.rst。bpo-34967: 使用app.add_object_type()代替已弃用的Sphinx函数app.description_unit()。
bpo-34913: 添加了关于gzip模块新命令行界面的文档。
bpo-32174: chm文档在某些MBCS Windows系统上正确显示非ASCII字符。
bpo-11233: 为文档创建可用性指令。原始由Georg Brandl提供补丁。
bpo-34790: 文档说明将协程传递给 asyncio.wait() 可能会引起混淆。
bpo-34552: 明确说明
==操作符有时等同于is。<、<=、>和>=操作符仅在它们有意义的地方定义。bpo-28617: 修复了 stdtypes 文档中关于支持成员资格测试的类型的错误信息。
bpo-20177: 将 datetime.date.fromtimestamp 迁移到 Argument Clinic。由 Tim Hoffmann 提供补丁。
bpo-34065: 修复了 basicConfig 文档标记语法的错误写法。
bpo-33460: 在教程第3章中,用正确的错误代码替换了省略号。
bpo-33847: 在索引中添加 '@' 操作符条目。
bpo-33409: 澄清了 PEP 538 的 PYTHONCOERCECLOCALE 和 PEP 540 的 PYTHONUTF8 模式之间的关系。
bpo-33197: 在 ParameterKind.description 的文档中添加了 versionadded 标签。
bpo-17045: 改进了 PyTypeObject 的 C-API 文档。包括添加了几个快速参考表和许多缺失的槽/类型定义条目。现有的条目也被清理,格式更加一致。
bpo-33736: 改进了
asyncio.open_connection()、asyncio.start_server()及其 UNIX 套接字对应函数的文档。bpo-23859: 文档说明
asyncio.wait()在超时时不会取消它的 futures。bpo-33604: 将 HMAC md5 的默认警告更新为 DeprecationWarning,移除时间推迟到 3.8。
bpo-33594: 在各自的文档字符串中将
getargspec、from_function和from_builtin标记为已弃用,并在 DeprecationWarning 消息中包含弃用版本。bpo-33503: 修复损坏的 pypi 链接
bpo-33421: 为
typing.AsyncContextManager添加缺失的文档。bpo-33487: 当传递 buffering=None 时,BZ2file 现在会发出 DeprecationWarning,弃用消息和文档现在也明确说明自 3.0 起已弃用。
bpo-33378: 为 https://docs.python.org/3/ 添加韩语语言切换器。
bpo-33276: 澄清模块上的
__path__属性不能是任意值。bpo-33201: 现代化编写 C 扩展类型的文档。
bpo-33195: 在
c-api/arg文档中弃用Py_UNICODE的使用。自 Python 3.3 起,Py_UNICODE相关 API 已被弃用,但文档中遗漏了这一点。bpo-33126: 文档化 PyBuffer_ToContiguous()。
bpo-27212: 修改
islice()函数示例代码的文档说明,使其在起始索引前消耗初始值。bpo-18802: ipaddress 的文档更改。由 Jon Foster 和 Berker Peksag 提供补丁。
bpo-27428: 更新文档以澄清
WindowsRegistryFinder实现了MetaPathFinder。(补丁由 Himanshu Lakhara 提供)bpo-28124: ssl 模块函数 ssl.wrap_socket() 已被弱化并弃用,推荐使用更安全高效的 SSLContext.wrap_socket() 方法。
bpo-17232: 澄清 -O 和 -OO 的文档。由 Terry Reedy 提供补丁。
bpo-32436: 为 contextvars 模块(PEP 567)添加文档。
bpo-32800: 更新 xml 默认命名空间的 w3c 文档链接。
bpo-11015: 更新
test.support文档。bpo-32613: 更新 faq/windows.html,使用 PEP 397 中的 py 命令而非 python。
bpo-8722: 文档化当属性
get()方法引发AttributeError时__getattr__()的行为。bpo-32614: 修改文档中的正则表达式示例,使用原始字符串以防止
DeprecationWarning,并在正则表达式 HOWTO 中添加文本以突出弃用。bpo-20709: 删除解释 os.utime() 在 Windows 下不支持目录作为路径的段落。由 Jan-Philip Gehrcke 提供补丁。
bpo-32722: 移除生成器表达式教程中的不良示例。由 Stéphane Wirtel 提供补丁。
bpo-31972: 改进
pathlib.PurePath子类的文档字符串。bpo-30607: 在构建文档时使用外部化的
python-docs-theme包。bpo-8243: 添加关于 curses.addch 和 curses.addstr 在窗口或 pad 外部写入时的异常行为的注释。
bpo-32337: 更新与
dict顺序相关的文档。bpo-31432: 澄清 ssl.SSLContext.verify_mode 的 CERT_NONE、CERT_OPTIONAL 和 CERT_REQUIRED 标志的含义。
测试¶
bpo-35772: 在 ppc64 上使用 tmpfs 文件系统修复 test_tarfile 的稀疏文件测试。修复测试文件系统是否支持稀疏文件的函数:创建一个包含数据和“空洞”的文件,而不是创建一个不包含数据的文件。tmpfs 的有效块大小是一个页面大小(tmpfs 存在于页面缓存中)。RHEL 在 aarch64、ppc64、ppc64le 上使用 64 KiB 页面,只有 s390x 和 x86_64 使用 4 KiB 页面,而测试打孔的是 4 KiB。
bpo-35045: 使 ssl 测试不那么严格,也接受 TLSv1 作为系统默认值。这些更改修复了 Fedora 29 上的 test_min_max_version。
bpo-32710:
test_asyncio/test_sendfile.py现在像其他测试一样使用tearDownModule()重置事件循环策略,以防止在 Windows 上运行测试时出现警告。bpo-33717: test.pythoninfo 现在记录所有时钟的信息,而不仅仅是 time.time() 和 time.perf_counter()。
bpo-35488: 向 pathlib 的 Path.match() 添加一个测试,以验证它不支持 glob 风格的 ** 递归模式匹配。
bpo-31731: 修复 test_io 的
check_interrupted_write()中的竞争条件:直接创建带有 SIGALRM 信号阻塞的线程,而不是稍后从线程中阻塞信号。以前,有可能线程在信号被阻塞之前就收到了信号。bpo-35424: 修复 test_multiprocessing_main_handling:使用
multiprocessing.Pool与上下文管理器,然后显式加入池。bpo-35519: 将
test.bisect模块重命名为test.bisect_cmd,以避免在直接运行测试如./python Lib/test/test_xmlrpc.py时与bisect模块冲突。bpo-35513: 在测试中用
time.monotonic()替换time.time()来测量时间差。bpo-34279:
test.support.run_unittest()不再在测试结果包含跳过的测试时引发TestDidNotRun异常。现在只有在没有运行任何测试且没有跳过任何测试时才会引发该异常。bpo-35412: 向
test_future4添加测试用例:检查 unicode 字面量。bpo-26704: 添加了演示实例方法双重修补的测试。由 Anthony Sottile 提供补丁。
bpo-33725: 在 macOS 的较新版本上,test_multiprocessing_fork 可能会崩溃。在问题解决之前,在 macOS 上跳过该测试。
bpo-35352: 修改 test_asyncio 以使用测试目录中的证书集。
bpo-35317: 修复
test_email中的mktime()溢出错误:在特定时区下运行test_localtime_daylight_true_dst_true()和test_localtime_daylight_false_dst_true()。bpo-21263: 在多次报告 test_gdb 在 macOS 上无法正常工作后,并且由于 gdb 不再默认附带,当使用 LLVM Clang 编译 Python 时,现在在 macOS 上跳过 test_gdb。由 Lysandros Nikolaou 提供补丁
bpo-34279: 当在特定测试文件中没有执行任何测试时,regrtest 发出警告。此外,如果在所有测试文件中没有执行任何测试,则发出新的最终结果状态。由 Pablo Galindo 提供补丁。
bpo-34962: Doc 中的 docstest 现在通过了,并且在 CI 中强制执行。
bpo-23596: 为 gzip 模块的命令行使用 argparse。由 Antony Lee 提供补丁
bpo-34537: 当
LC_ALL=C且 GDB 是用 Python 3.6 或更早版本编译时,修复test_gdb.test_strings()。bpo-34587: test_socket: 移除RDSTest.testCongestion()。该测试试图填满接收者的套接字缓冲区并期望出现错误。但RDS协议并不要求这一点。此外,RDS的Linux实现期望消息的生产者降低其速率,触发错误不是接收者的角色。该测试在Fedora 28上按设计失败,因此直接移除它。
bpo-34661: 如果unzip不支持-t,修复test_shutil。
bpo-34200: 通过不使用可怕的test.support.module_cleanup()逻辑来保存和恢复测试用例之间的sys.modules内容,修复了test_pkg的非确定性波动。
bpo-34569: 实验性的PEP 554数据通道现在在32位系统上正确地在子解释器之间传递负的PyLong对象。由Michael Felt提供补丁。
bpo-34594: 修复测试中硬编码的
errno值的使用。bpo-34579: 为AIX修复test_embed,由Michael Felt提供补丁
bpo-34542: 使用3072位的RSA密钥和SHA-256签名用于测试证书和密钥。
bpo-11193: 移除
test_subprocess.test_undecodable_env中对AIX的特殊条件bpo-34347: 为AIX修复
test_utf8_mode.test_cmd_linebpo-34490: 在AIX上,使用AF_UNIX家族套接字的getsockname()不提供'sockname',因此跳过对transport.get_extra_info('sockname')的调用
bpo-34391: 通过从数据套接字读取,为TLS 1.3修复ftplib测试。
bpo-11192: 在AIX 6.1及更高版本上修复
test_socket,IPv6区域ID仅由``inet_pton6_zone()``支持。切换到基于运行时的platform.system()来确定当前平台,而不是基于构建时的sys.platform()bpo-34399: 更新所有RSA密钥和DH参数以使用至少2048位。
bpo-34373: 为AIX修复
test_mktime和test_pthread_getcpuclickid测试,为AIX添加对``_PyTime_localtime``的范围检查,由Michael Felt提供补丁bpo-11191: 当使用XLC作为编译器时,跳过distutils测试'test_search_cpp',由aixtools(Michael Felt)提供补丁
改进了当模拟 assert_has_calls 失败时的错误信息。
bpo-33746: 修复在详细模式下运行时的 test_unittest。
bpo-33901: 在 macOS 上使用 gdbm 1.15 修复 test_dbm_gnu:添加一个更大的值以确保文件大小发生变化。
bpo-33873: 修复
regrtest中的一个错误,该错误在使用了 --huntrleaks/-R 时会导致额外运行一个测试。如果指定了无效的参数给 --huntrleaks/-R(至少必须使用一次预热运行和一次重复运行),则退出并报错。bpo-33562: 检查任何测试是否没有留下全局 asyncio 事件循环策略。
bpo-33655: 忽略在可能由于在 ZFS 上运行而导致的 BSD 平台上的 test_posix_fallocate 失败。
bpo-32962: 当 Python 使用标志 -mcet -fcf-protection -O0 编译时,修复 test_gdb。
bpo-33358: 当解释器使用
--enable-shared构建时,修复test_embed.test_pre_initialization_sys_options()。bpo-32872: 避免 regrtest 与命名空间包的兼容性问题。
bpo-32517: 修复由于
KqueueSelector循环的传输未被关闭而在 macOS 10.12.2+ 上失败的test_asyncio。bpo-32663: 确保
test_smtplib.py中的SMTPUTF8SimTests测试类被运行。bpo-27643: Test_C 测试用例需要“有符号短”位字段,但 IBM XLC 编译器(在 AIX 上)不支持此功能,当使用 AIX 和 XLC 时跳过代码和测试
适用于 Python2-2.7 及以后版本
bpo-19417: 添加 test_bdb.py。
bpo-31809: 添加测试以验证与 secp ECDH 曲线的连接。
构建¶
bpo-34691: _contextvars 模块现在被内置到 Windows 上的核心 Python 库中。
bpo-35683: 改进了 Azure Pipelines 构建步骤,现在正确验证布局
bpo-35642: 从 pythoncore.vcxproj 中移除 asynciomodule.c
bpo-35550: 修复编译时错误的 Solaris #ifdef 检查,改为查找 __sun && __SVR4 而不是 sun。
bpo-35499:
make profile-opt不再用CFLAGS替换CFLAGS_NODIST。现在它将配置文件引导优化(PGO)标志添加到CFLAGS_NODIST中:原有的CFLAGS_NODIST标志被保留。bpo-35257: 在编译 C 扩展时,避免将链接时间优化(LTO)的链接器标志泄漏到 distutils 中。
bpo-35351: 当使用 clang 和 LTO 构建 Python 时,不再将 LTO 标志传递到 CFLAGS 中,以通过 distutils 构建第三方 C 扩展。
bpo-35139: 修复在
Modules/Setup中静态链接pyexpat时的编译器错误。bpo-35059: PCbuild:在 Debug 模式下将 InlineFunctionExpansion 设置为 OnlyExplicitInline("/Ob1" 选项)在 pyproject.props 中,以展开标记为内联的函数。这一变化应该会使在 Windows 上以 Debug 模式编译的 Python 稍微快一些。
bpo-35011: 恢复使用 pyexpatns.h 来隔离我们嵌入的 expat C 库副本,以便其符号在链接或动态加载时不会与嵌入应用程序或其他带有自己版本 libexpat 的扩展模块冲突。
bpo-28015: 使 --with-lto 与 clang 正确工作。
bpo-34765: 将过时的 install-sh 文件更新至 automake v1.16.1 的最新修订版。
bpo-34585: 在 configure.ac 中使用编译测试而不是执行代码来检查浮点字节顺序,以便这些检查在交叉编译构建中工作。
bpo-34710: 修复了使用 OpenSSL 和严格 CFLAGS 构建 SSL 模块的问题。
bpo-34582: 为回归测试添加 JUnit XML 输出并更新 Azure DevOps 构建。
bpo-34081: 在 Docs Makefile 中将 Sphinx 警告视为错误。
bpo-34555: 修复了无法同时未定义
HAVE_LINUX_VM_SOCKETS_H和HAVE_SOCKADDR_ALG的情况。bpo-33015: 修复了
PyThread_start_new_thread()的 pthread 实现中的一个未定义行为:添加一个函数包装器以始终返回NULL。bpo-34245: Python共享库现在以写权限(模式0755)安装,这是安装此类库的标准方式。
bpo-34121: 修复在clang上对C11原子支持的检测。
bpo-32430: 将Modules/Setup.dist重命名为Modules/Setup,并消除在更新本地源代码树时需要手动将前者复制到后者的必要性。
bpo-30345: 在使用LTO编译时添加-g到LDFLAGS以获取调试符号。
bpo-5755: 将
-Wstrict-prototypes选项从OPT移到CFLAGS_NODIST。此选项在用C++编写扩展模块时会产生烦人的警告。bpo-33614: 确保Windows上稳定ABI的模块定义文件被正确重新生成。
bpo-33648: 已移除--with-c-locale-warning配置标志。它已经大约一年没有效果了。
bpo-33522: 在https://python.visualstudio.com/cpython上启用Visual Studio Team Services的CI构建。
bpo-33522: 配置对"long double"的检查已被简化
bpo-33483: 现在可以从标准环境变量中正确检测C编译器。--without-gcc和--with-icc选项已被移除。
bpo-33394: 当GNU make在命令行上传递宏时,为扩展模块启用详细构建。
bpo-33393: 更新config.guess和config.sub文件。
bpo-33377: 为mips r6和riscv变体添加新的三元组(用于扩展后缀)。
bpo-32232: 默认情况下,配置在
Modules/Setup中的模块不再使用-DPy_BUILD_CORE构建。相反,特别需要该预处理器定义的模块在其单独条目中包含它。bpo-33182: 嵌入测试可以再次用clang 6.0构建。
bpo-33163: 将pip升级到9.0.3,setuptools升级到v39.0.1。
bpo-33012: gcc 8 新增了一个警告启发式方法来检测无效的函数转换,而标准的 Python 构建似乎经常触发该警告。最常见的是将 METH_NOARGS 函数(仅使用一个参数)转换为 PyCFunction。通过为所有实现 METH_NOARGS 的函数添加一个虚拟参数来解决这个问题。
bpo-32898: 修复了在使用 COUNT_ALLOCS 时的 Python 调试构建问题。
bpo-29442: 在 setup.py 中用 argparse 替换 optparse。
Windows¶
bpo-35890: 修复 GetVersionEx 和 wcstok 的 API 调用一致性。
bpo-32560:
py启动器现在将其STARTUPINFO结构转发给子进程。bpo-35854: 在 Windows 上修复 EnvBuilder 和 --symlinks 在 venv 中的问题。
bpo-35811: 避免在通过 py.exe 启动时传播 venv 设置。
bpo-35797: 修复 multiprocessing 模块使用的默认可执行文件。
bpo-35758: 允许在 ARM 上使用 MSVC 进行构建。
bpo-29734: 修复 Windows 上 os.stat 中的句柄泄漏问题。
bpo-35596: 为嵌入式发行版使用未检查的 PYC,以避免 zipimport 限制。
bpo-35596: 修复 vcruntime140.dll 被多次添加到嵌入式发行版的问题。
bpo-35402: 更新 Windows 构建以使用 Tcl 和 Tk 8.6.9。
bpo-35401: 将 Windows 构建更新至 OpenSSL 1.1.0j。
bpo-34977: Windows 上的 venv 现在将使用 python.exe 重定向器,而不是从基础环境中复制实际的二进制文件。
bpo-34977: 添加了对构建 Windows 应用商店包的支持。
bpo-35067: 移除 _distutils_findvs 模块并改用 vswhere.exe。
bpo-32557: 允许 shutil.disk_usage 在 Windows 上接受文件路径。
bpo-34770: 修复 pyshellext.cpp 中可能的空指针解引用问题。
bpo-34603: 修复由 MSVC 生成的函数返回结构体的问题。
bpo-34581: 在 socketmodule.c 中使用
#ifdef _MSC_VER保护 MSVC 特定代码。bpo-34532: 修复了 py.exe 的列表版本参数的退出代码。
bpo-34062: 修复了 py.exe 启动器的 '--list' 和 '--list-paths' 参数。
bpo-34225: 确保INCLUDE和LIB目录不以反斜杠结尾。
bpo-34011: 一套代码已被更改,这些代码从运行的Python位置复制DLLs和init.tcl到正在创建的venv中。这些复制仅在从Python源代码构建运行时需要,现在复制代码仅在这种情况下运行,而不是在创建venv时总是运行。
bpo-34006: 恢复Windows帮助文档的行长度限制。行长度限制不需要,因为页面显示在单独的应用程序中而不是浏览器标签中。它也可能与DPI设置产生不良互动。
bpo-31546: 恢复在提示符等待用户输入时运行PyOS_InputHook。这恢复了交互式GUI窗口(如Matplotlib图形)与Windows上提示符的集成。
bpo-30237: 当ReadConsole被CancelSynchronousIo取消时输出错误而不是崩溃。
bpo-33895: 在调用获取Windows加载器锁的函数时释放GIL。
bpo-33720: 减少发布版本上的最大marshal递归深度。
bpo-29097: 修复
datetime.fromtimestamp()在Windows上对0到86400之间的值错误抛出OSError的bug。由Ammar Askar提供补丁。bpo-33316: PyThread_release_lock总是失败
bpo-33184: 更新Windows安装程序以使用OpenSSL 1.1.0h。
bpo-32890: 修复os.execve()和os.truncate()中使用GetLastError()而不是errno的问题。
bpo-33016: 修复nt._getfinalpathname中潜在使用未初始化内存的问题。
bpo-32903: 修复如果当前目录设置为UNC路径时Windows上os.chdir()的内存泄漏。
bpo-32901: 将Tcl和Tk版本更新到8.6.8
bpo-31966: 修复WindowsConsoleIO.write()写入空数据的问题。
bpo-32409: 确保activate.bat可以处理Unicode内容。
bpo-32457: 改进启动Python时对非规范化可执行路径的处理。
bpo-32370: 在uuid模块中为ipconfig输出使用正确的编码。由Segev Finer提交补丁。
bpo-29248: 修复Windows上的
os.readlink(),它错误地将重新解析数据缓冲区的``PrintNameOffset`` 字段视为字符数而非字节数。由Craig Holmquist和SSE4提交补丁。bpo-1104: 正确处
msilib.SummaryInfo.GetProperty()中的字符串长度,以防止其截断最后一个字符。
macOS¶
bpo-35401: 更新macOS安装程序以使用OpenSSL 1.1.0j。
bpo-35025: 在macOS上正确保护
timemodule中使用CLOCK_GETTIME等宏。bpo-24658: 在macOS上,修复从大小超过2 GiB的文件读取和写入的问题。
bpo-34405: 为macOS安装程序构建更新至OpenSSL 1.1.0i。
bpo-33635: 在macOS上,某些文件描述符(例如/dev/fd/3)的stat将导致坏文件描述符OSError。在is_dir、is_file及类似方法中添加了对这一异常的防护。DirEntry.is_dir也可能抛出此异常,因此_RecursiveWildcardSelector._iterate_directories也扩展了相同的错误忽略模式。
bpo-13631: 在macOS上通过editline模拟初始化readline时,现在可以正确处理用户主目录中的.editrc文件。
bpo-33184: 更新macOS安装程序构建以使用OpenSSL 1.1.0h。
bpo-32726: 为macOS 10.6+安装程序构建并链接Tcl/Tk 8.6的私有副本。10.9+安装程序变体已经这样做了。这意味着python.org macOS安装程序提供的Python 3.7不再需要或使用任何外部版本的Tcl/Tk,无论是系统提供的还是用户安装的,如ActiveTcl。
bpo-32901: 将macOS 10.9+安装程序更新至Tcl/Tk 8.6.8。
bpo-31903: 在
_scproxy中,调用SystemConfiguration时释放GIL以避免死锁。
IDLE¶
bpo-35770: IDLE在macosx上删除了选项 => 配置IDLE。之前错误地删除了窗口 => 缩放高度(缩放高度现在在选项菜单中)。在Mac上,设置对话框通过IDLE菜单中的偏好设置访问。
bpo-35769: 将IDLE的新文件名从'Untitled'改为'untitled'。
bpo-35660: 修复idlelib.window中的导入。
bpo-35641: 当函数没有文档字符串时,正确格式化
calltip。bpo-33987: 为ttk小部件使用ttk框架。
bpo-34055: 修复IDLE Shell中错误的'智能'缩进和换行。
bpo-35591: 现在,当未找到选择时,查找选择也能工作。
bpo-35196: 加速squeezer的行计数。
bpo-35598: 更新config_key:使用PEP 8命名和ttk小部件,使一些对象全局化,并添加测试。
bpo-28097: 在Shell菜单中添加上一个/下一个历史记录条目。
bpo-35208: Squeezer现在在新行之前正确计算换行。
bpo-35555: 当代码上下文菜单条目不适用时,将其置灰。
bpo-35521: 记录IDLE编辑器代码上下文功能。在IDLE文档中添加一些内部引用。
bpo-22703: 代码上下文菜单标签现在在显示/隐藏代码上下文之间切换。缩放高度菜单现在在缩放/恢复高度之间切换。缩放高度已从窗口菜单移动到选项菜单。
bpo-35213: 在适当的地方,在idlelib中使用'macOS'。
bpo-34864: 在macOS上,如果系统偏好设置“打开文档时偏好标签页”设置为“总是”,则发出警告。
bpo-34864: 记录两个在MacOS上的IDLE问题。系统偏好设置Dock“总是偏好标签页”设置禁用了一些IDLE功能。菜单与Windows和Linux的描述有些不同。
bpo-35202: 从lib/idlelib中移除未使用的导入。
bpo-33000: 记录IDLE的Shell没有行限制。一个无限运行的程序可能会耗尽内存。
bpo-23220: 解释IDLE的Shell如何显示输出。
bpo-35099: 改进关于IDLE运行用户代码的文档。该部分从“IDLE -- 控制台差异”更名为“运行用户代码”。主要涵盖了使用自定义
sys.stdxxx对象的影响。bpo-35097: 在IDLE文档中添加解释编辑器窗口的子章节。主题包括打开、标题和状态栏、.py*扩展名以及运行。
bpo-35093: 在IDLE文档中记录IDLE文档查看器。在“帮助和偏好设置”中的“帮助来源”子部分添加一段。
bpo-35088: 更新idlelib.help.copy_string的文档字符串。我们现在使用git和后向移植而不是hg和前向合并。
bpo-35087: 为当前文档构建更新idlelib帮助文件。主要变化是消除了章节-节号。
bpo-34548: 为只读文本视图使用配置的颜色主题。
bpo-1529353: 启用shell中长输出的“压缩”,以避免性能下降并在不丢失历史记录的情况下清理历史。压缩的输出可以复制、在单独窗口中查看并“解压”。
bpo-34047: 修复了macOS上鼠标滚轮的滚动方向。
bpo-34275: 使IDLE的调用提示在Mac上始终可见。某些MacOS-tk组合需要.update_idletasks()。由Kevin Walzer提供的补丁。
bpo-34120: 修复关闭某些窗口和对话框后的无响应问题。
bpo-33975: 在运行htests时避免小字体。由于人类查看测试的部分目的是确定小部件看起来是否正确,因此重要的是它们在测试时看起来与运行IDLE时相同。
bpo-33905: 为idlelib.stackview.StackBrowser添加测试。
bpo-33924: 将mainmenu.menudefs键'windows'更改为'window'。每个其他menudef键都是主菜单项的小写版本。
bpo-33906: 将idlelib.windows重命名为window,以匹配主菜单上的Window,并移除最后一个复数模块名称。
bpo-33917: 修复并记录idlelib/idle_test/template.py。修订后的文件编译、运行和测试均正常。idle_test/README.txt说明了如何使用它来创建新的IDLE测试文件。
bpo-33904: IDLE:在rstrip中,将类RstripExtension重命名为Rstrip
bpo-33907: 为了保持一致性和清晰度,重命名一个IDLE模块和类。模块calltips及其类CallTips现在更名为calltip和Calltip。在模块calltip_w中,类CallTip现在更名为CalltipWindow。
bpo-33856: 在IDLE的欢迎消息中添加“帮助”
bpo-33839: IDLE:重构ToolTip和CallTip并添加文档和测试
bpo-33855: 对所有IDLE模块进行最小化测试。添加缺失的文件,导入模块,实例化类,并检查覆盖率。检查现有文件。
bpo-33656: 在Windows上,添加API调用表明tk针对DPI进行缩放。在Windows 8.1+或10上,Python二进制文件的DPI兼容性属性未更改,且显示器分辨率大于96 DPI时,这应使文本和线条更清晰。否则应无影响。
bpo-33768: 点击上下文行将该行移动到编辑器窗口的顶部。
bpo-33763: IDLE:使用只读文本小部件代替标签小部件作为代码上下文。
bpo-33664: 按行滚动IDLE编辑器文本。之前,鼠标滚轮和滚动条滑块以固定像素数移动文本,导致编辑器盒顶部出现部分行。此更改也适用于shell和grep输出窗口,但不适用于只读文本视图。
bpo-33679: 启用代码上下文的主题特定颜色配置。使用“高亮”选项卡查看内置主题的设置或为自定义主题添加设置。
bpo-33642: 为代码上下文显示最多maxlines非空行。如果没有当前上下文,则显示单个空行。
bpo-33628: IDLE:清理codecontext.py及其测试。
bpo-33564: IDLE的代码上下文现在能识别async作为一个块的开头。
bpo-21474: 将单词/标识符的定义从ASCII更新为Unicode。在文本和输入框中,这会影响通过双击选择、通过control-left/right左右移动以及通过control-BACKSPACE/DEL左右删除。
bpo-33204: IDLE:一致地着色无效的字符串前缀。'u'字符串前缀不能与'r'或'f'配对。从右边开始,尽可能多地着色有效的部分。修订并扩展颜色化器测试。
bpo-32984: 在运行启动文件时设置
__file__。与Python一样,IDLE在展示第一个交互式输入提示之前,可选地在Shell窗口中运行一个启动文件。对于IDLE,-s``运行环境变量 :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-34008: Py_Main() 可以再次在 Py_Initialize() 之后被调用,就像在 Python 3.6 中一样。
bpo-32500: 修复了当
PySequence_Size()、PySequence_GetItem()、PySequence_SetItem()和PySequence_DelItem()被映射调用以及PyMapping_Size()被序列调用时的错误消息。bpo-33818:
PyExceptionClass_Name()现在将返回const char *而不是char *。bpo-33042: 嵌入应用程序可以再次在调用 Py_Initialize 之前调用 PySys_ResetWarnOptions、PySys_AddWarnOption 和 PySys_AddXOption。
bpo-32374: 文档说明多阶段初始化模块的 m_traverse 可以在 m_state=NULL 时调用,并添加健全性检查
bpo-30863:
PyUnicode_AsWideChar()和PyUnicode_AsWideCharString()不再缓存字符串对象的wchar_t*表示。
Python 3.7.0 正式版¶
发布日期: 2018-06-27
库¶
bpo-33851: 修复
ast.get_docstring()对于缺少文档字符串的节点的问题。
C API¶
bpo-33932: 调用 Py_Initialize() 两次不做任何操作,而不是以致命错误失败:恢复 Python 3.6 的行为。
Python 3.7.0 rc1¶
发布日期: 2018-06-12
核心与内置函数¶
库¶
bpo-30167: 如果设置了PYTHONSTARTUP,防止site.main()异常。由Steve Weber提供补丁。
bpo-33812: 对于tzinfo非None但d.tzinfo.utcoffset(d)返回None的Datetime实例d,现在astimezone()方法将其视为naive。
bpo-30805: 避免调试日志记录中的竞态条件
bpo-33694: asyncio: 修复在使用ProactorEventLoop时,pause_reading()/resume_reading()导致数据丢失的竞态条件。
bpo-32493: 在
configure.ac中更正对uuid_enc_be可用性的测试。由Michael Felt提供补丁。bpo-33792: 添加asyncio.WindowsSelectorEventLoopPolicy和asyncio.WindowsProactorEventLoopPolicy。
bpo-33778: 更新
unicodedata的数据库至Unicode版本11.0.0。bpo-33770: 针对长度无效的编码输入,改进base64异常消息
bpo-33769: asyncio/start_tls: 修复错误消息;在未处理错误的情况下取消回调;如果SSLTransport被中止,则标记为已关闭。
bpo-33767: 在
mmap.mmap对象上执行时,连接(+)和重复(*)序列操作现在会引发TypeError而不是SystemError。由 Zackery Spytz 提供补丁。bpo-33734: asyncio/ssl:修复 AttributeError,增加默认的握手超时时间
bpo-11874: 当将用法分解为可包装部分时使用更好的正则表达式。避免来自自定义 metavar 字符串的错误断言错误。
bpo-33582: 为 inspect.formatargspec 发出弃用警告。
文档¶
bpo-33409: 澄清了 PEP 538 的 PYTHONCOERCECLOCALE 和 PEP 540 的 PYTHONUTF8 模式之间的关系。
bpo-33736: 改进了
asyncio.open_connection()、asyncio.start_server()及其 UNIX 套接字对应函数的文档。bpo-31432: 澄清 ssl.SSLContext.verify_mode 的 CERT_NONE、CERT_OPTIONAL 和 CERT_REQUIRED 标志的含义。
构建¶
bpo-5755: 将
-Wstrict-prototypes选项从OPT移到CFLAGS_NODIST。此选项在用C++编写扩展模块时会产生烦人的警告。
Windows¶
bpo-33720: 减少发布版本上的最大marshal递归深度。
IDLE¶
bpo-33656: 在Windows上,添加API调用表明tk针对DPI进行缩放。在Windows 8.1+或10上,Python二进制文件的DPI兼容性属性未更改,且显示器分辨率大于96 DPI时,这应使文本和线条更清晰。否则应无影响。
bpo-33768: 点击上下文行将该行移动到编辑器窗口的顶部。
bpo-33763: IDLE:使用只读文本小部件代替标签小部件作为代码上下文。
bpo-33664: 按行滚动IDLE编辑器文本。之前,鼠标滚轮和滚动条滑块以固定像素数移动文本,导致编辑器盒顶部出现部分行。此更改也适用于shell和grep输出窗口,但不适用于只读文本视图。
bpo-33679: 启用代码上下文的主题特定颜色配置。使用“高亮”选项卡查看内置主题的设置或为自定义主题添加设置。
bpo-33642: 为代码上下文显示最多maxlines非空行。如果没有当前上下文,则显示单个空行。
Python 3.7.0 beta 5¶
发布日期: 2018-05-30
核心与内置函数¶
bpo-33622: 修复了当垃圾收集器无法将带有
__del__方法或被其引用的对象添加到gc.garbage列表时的内存泄漏问题。现在可以在设置异常时调用PyGC_Collect(),并保留异常。bpo-33509: 修复了 warnings.warn_explicit() 的 module_globals 参数:如果 module_globals 不是字典,不会崩溃。
bpo-20104: 在 3.7.0b1 中添加的新
os.posix_spawn已被移除,因为我们仍在研究 API 应该是什么样子。预计将在 3.8 中提供。bpo-33475: 修复了将注释转换为字符串时的杂项错误,并优化了字符串表示中的括号。
bpo-33391: 修复了 set_symmetric_difference() 中的内存泄漏。
bpo-28055: 修复了 siphash24() 中的未对齐访问。由 Rolf Eike Beer 提供补丁。
bpo-32911: 由于在下游beta测试期间发现的意外兼容性问题,恢复了 bpo-29463。从Module、ClassDef、FunctionDef和AsyncFunctionDef ast节点中移除了在3.7a1中添加的`docstring` 字段。docstring表达式被恢复为其主体的第一条语句。基于Inada Naoki的补丁。
bpo-21983: 修复当类型参数是 ctypes 结构化数据类型时,
ctypes.cast()中的崩溃问题。由 Eryk Sun 和 Oren Milman 提供补丁。
库¶
bpo-32751: 当由于超时取消任务时,
asyncio.wait_for()现在将等待直到取消完成。bpo-32684: 修复 gather 即使在 return_exceptions 的情况下也能传播自身的取消。
bpo-33654: 在 SSLTransport.set_protocol() 中支持协议类型切换。
bpo-33674: 尽早暂停传输,以进一步降低在 connection_made() 之前调用 data_received() 的风险。
bpo-33674: 修复 asyncio.sslproto 中 SSLProtocol.connection_made() 的竞态条件:立即开始握手而不是使用 call_soon()。之前,data_received() 可能在握手开始前被调用,导致握手挂起或失败。
bpo-31647: 修复了在 _SelectorSocketTransport 已经关闭后调用 write_eof() 会引发 AttributeError 的错误。
bpo-32610: 使 asyncio.all_tasks() 仅返回待处理的任务。
bpo-32410: 在 sendfile 回退代码中避免阻塞文件 IO。
bpo-33469: 修复了使用 run_in_executor 后关闭循环时引发的 RuntimeError。
bpo-33672: 修复 Task.__repr__ 与 Cython 的虚假协程一起使用时崩溃的问题。
bpo-33654: 修复 transport.set_protocol() 以支持在 asyncio.Protocol 和 asyncio.BufferedProtocol 之间切换。修复 loop.start_tls() 以支持 asyncio.BufferedProtocols。
bpo-33652: 类型变量和下标泛型的 pickle 现在具有未来兼容性,并与旧版 Python 兼容。
bpo-32493: 修复了 FreeBSD 上的
uuid.uuid1()。bpo-33618: 完成并记录与 OpenSSL 1.1.1 的初步和实验性 TLS 1.3 支持。
bpo-33623: 修复在 __del__ 中创建 asyncio.Future 时可能出现的 SIGSGV。
bpo-30877: 修复了 JSON 解码器 Python 实现中的一个错误,该错误阻止了在完成解码后清除已解析字符串的缓存。基于 c-fos 的补丁。
bpo-33570: 更改 TLS 1.3 密码套件设置,以兼容 OpenSSL 1.1.1-pre6 及更新版本。OpenSSL 1.1.1 将默认启用 TLS 1.3 密码。
bpo-28556: 不再简化
typing.Union的参数。现在Union[Manager, Employee]在运行时不会简化为Employee。之前的简化导致了一些错误,并限制了内省的可能性。bpo-33540: 向
socketserver的ForkingMixIn和ThreadingMixIn类添加一个新的block_on_close类属性。bpo-33548: tempfile._candidate_tempdir_list 应考虑常见的 TEMP 位置
bpo-33109: argparse 子解析器默认再次不需要,恢复了在 3.7.0a2 中由 bpo-26510 引入的行为变化。
bpo-33536: dataclasses.make_dataclass 现在检查无效的字段名和重复的字段。此外,添加了对无效字段规范的检查。
bpo-33542: 防止
uuid.get_node在 Windows 上使用 DUID 而不是 MAC。由 Zvi Effron 提供补丁bpo-26819: 修复 Windows proactor 事件循环中
ReadTransport.resume_reading的竞争条件。修复当 ClassVar 作为字符串前向引用提供时
typing.get_type_hints()的失败。bpo-33505: 通过重新排序if检查优化asyncio.ensure_future():速度提升1.17倍。
bpo-33497: 向cgi.parse_multipart添加errors参数,并使FieldStorage中的编码使用给定的errors(Twisted所需)。由Amber Brown提供补丁。
bpo-33495: 更改dataclasses.Fields的repr以使用其每个成员的repr,而非str。这使得每个字段实际代表的内容更加清晰。这对于'type'成员尤为明显。
bpo-33453: 修复dataclasses以在使用字面字符串类型注解或使用PEP 563“推迟的注解评估”时工作。仅为ClassVar("ClassVar"和"typing.ClassVar")和InitVar("InitVar"和"dataclasses.InitVar")检测特定的字符串前缀。
bpo-28556: typing模块中的小修复:向
NamedTuple.__new__添加注解,在``Generic.__new__``中传递*args和**kwds。原始PR由Paulius Šarka和Chad Dombrova提供。bpo-20087: 更新了支持glibc 2.27地区设置的别名映射。
bpo-33422: 修复在pydoc上查找字节/字符串字面量时尾随引号被删除的问题。由Andrés Delfino提供补丁。
bpo-28167: 函数
platform.linux_distribution和platform.dist现在触发``DeprecationWarning``,并已被标记为在Python 3.8中移除。bpo-33197: 更新构造无效inspect.Parameters时的错误信息。由Donghee Na提供补丁。
bpo-33263: 修复了
_SelectorSocketTransport中的文件描述符泄漏问题。由 Vlad Starostin 提供补丁。bpo-32861: urllib.robotparser 的
__str__表示现在包括通配符条目以及 "Crawl-delay" 和 "Request-rate" 字段。由 Michael Lazar 提供补丁。bpo-32257: ssl模块现在包含OP_NO_RENEGOTIATION常量,适用于OpenSSL 1.1.0h或1.1.1版本。
文档¶
测试¶
构建¶
macOS¶
bpo-13631: 在macOS上通过editline模拟初始化readline时,现在可以正确处理用户主目录中的.editrc文件。
IDLE¶
Python 3.7.0 beta 4¶
发布日期: 2018-05-02
核心与内置函数¶
bpo-33363: 对于异步函数外的
async with和async for语句,现在会引发 SyntaxError。bpo-33128: 修复了一个导致 PathFinder 在 sys.meta_path 上出现两次的 bug。由 Pablo Galindo Salgado 提供补丁。
bpo-33312: 通过调整内部结构 _dictkeysobject 共享键结构的声明方式,修复了 dictobject.c 中的 clang ubsan(未定义行为消毒剂)警告。
bpo-33231: 修复了
normalizestring()中潜在的内存泄漏问题。bpo-33205: 将字典增长函数从
round_up_to_power_2(used*2+hashtable_size/2)更改为``round_up_to_power_2(used*3)``。以前,字典仅在used == 0时收缩。现在字典有更多机会被收缩。bpo-29922: 改进了'async with'中当
__aenter__()或__aexit__()返回不可等待对象时的错误消息。bpo-33199: 修复了在从键共享字典复制时,字典实现中的
ma_version_tag未初始化的问题。
库¶
bpo-33281: 修复macOS上ctypes.util.find_library的回归问题。
bpo-33329: 修复了在新版 glibc 上的多进程回归问题。
bpo-991266: 修复了
http.cookies.SimpleCookie的Comment属性的引用问题。bpo-33131: 将捆绑的 pip 版本升级至 10.0.1。
bpo-33308: 修复了
parser模块在将 ST 对象转换为元组或列表树时,当line_info=False且col_info=True时的崩溃问题。bpo-33266: lib2to3 现在能识别
rf'...'字符串。bpo-11594: 确保在使用 lib2to3 时尊重行尾。
bpo-33254: 使
importlib.resources.contents()和importlib.abc.ResourceReader.contents()返回 iterable 而非 iterator。bpo-33256: 修复了
cgitb.html()生成的 html 中<module>调用的显示问题。补丁由 Stéphane Blondon 提供。bpo-33185: 修复了使用
-m开关运行 pydoc 时的回归问题。(此回归问题由 bpo-33053 的解决在 3.7.0b3 中引入)此修复还更改了 pydoc,在必要时将os.getcwd()添加到sys.path中,而不是添加"."。bpo-33169: 当调用
importlib.machinery.invalidate_caches()时,删除sys.path_importer_cache中的None条目。bpo-33217: 弃用在 Enum 类和 Enum 成员中查找非 Enum 对象的行为(在 3.8+ 中将引发
TypeError)。bpo-33203:
random.Random.choice()现在对于空序列会一致地引发IndexError,即使是从没有getrandbits()实现的子类中调用也是如此。bpo-33224: 为 PEP 479 更新 difflib.mdiff()。将生成器中未捕获的 StopIteration 转换为 return 语句。
bpo-33209: 在
pickle.Pickler.dump()的 C 实现结束时结束帧。bpo-20104: 改进了
os.posix_spawn()中的错误处理并修复了一个引用泄漏。bpo-33175: 在数据类中,Field.__set_name__ 现在查找默认值的类上的 __set_name__ 特殊方法,而不是实例上的。
bpo-33097: 在解释器关闭期间调用
executor.submit时抛出RuntimeError。bpo-31908: 修复了
trace模块命令行工具的封面文件输出。之前仅在使用了--missing选项时才会发出封面文件。由Michael Selik提供补丁。
文档¶
bpo-33378: 为 https://docs.python.org/3/ 添加韩语语言切换器。
bpo-33276: 澄清模块上的
__path__属性不能是任意值。bpo-33201: 现代化编写 C 扩展类型的文档。
bpo-33195: 在
c-api/arg文档中弃用Py_UNICODE的使用。自 Python 3.3 起,Py_UNICODE相关 API 已被弃用,但文档中遗漏了这一点。bpo-8243: 添加关于 curses.addch 和 curses.addstr 在窗口或 pad 外部写入时的异常行为的注释。
bpo-32337: 更新与
dict顺序相关的文档。
测试¶
bpo-33358: 当解释器使用
--enable-shared构建时,修复test_embed.test_pre_initialization_sys_options()。
构建¶
Windows¶
bpo-33184: 更新Windows安装程序以使用OpenSSL 1.1.0h。
macOS¶
bpo-33184: 更新macOS安装程序构建以使用OpenSSL 1.1.0h。
IDLE¶
工具/示例¶
Python 3.7.0 beta 3¶
发布日期: 2018-03-29
安全性¶
bpo-33136: 加固ssl模块以抵御LibreSSL的 CVE 2018-8970。调用X509_VERIFY_PARAM_set1_host()时使用明确的namelen。新增测试确保不允许NULL字节。
bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。
bpo-32981: difflib 和 poplib 中的正则表达式容易受到灾难性回溯的影响。这些正则表达式构成了潜在的 DOS 向量(REDOS)。它们已被重构。这解决了 CVE 2018-1060 和 CVE 2018-1061。由 Jamie Davis 提供补丁。
核心与内置函数¶
bpo-33053: 当使用-m开关时,sys.path[0]现在明确扩展为 起始 工作目录,而不是保留为空路径(允许在导入时从当前工作目录导入)。
bpo-33018: 提高了当
issubclass()的第一个参数是非类而第二个参数是抽象基类时引发错误的一致性。由Josh Bronson提供补丁。bpo-33041: 修复了当函数包含
async for循环时的跳转问题。bpo-33026: 通过设置f_lineno修复了跳出“with”块的问题。
bpo-33005: 修复了在使用自定义内存分配器(例如:使用PYTHONMALLOC环境变量)时fork导致的崩溃。_PyGILState_Reinit()和_PyInterpreterState_Enable()现在使用默认的RAW内存分配器在fork时分配新的解释器互斥锁。
bpo-17288: 防止从'return'和'exception'跟踪事件跳转。
bpo-32836: 在列表/字典/集合推导式的情况下不使用临时变量。
库¶
bpo-33141: 如果 Field 对象有自己的 __set_name__,则让它们将 __set_name__ 传递给它们的默认值。
bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。
bpo-32873: 通过复制和pickle操作将类型变量和特殊类型形式视为不可变。这修复了几个小问题和不一致性,并提高了与Python 3.6的向后兼容性。
bpo-33134: 在计算数据类的__hash__时,使用查找表包含返回__hash__值的函数。这比查找字符串然后测试该字符串以决定做什么有所改进。
bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。
bpo-32505: 如果数据类的成员变量是Field类型但没有类型注解,则抛出TypeError。
bpo-33078: 修复了由于测试依赖sem_getvalue而在OSX上导致的失败。
bpo-33116: 将'Field'添加到dataclasses.__all__中。
bpo-32896: 修复了一个错误,即当子类化一个使用default_factory字段的数据类时会生成一个不正确的类。
bpo-33100: 数据类:如果一个字段有一个默认值是MemberDescriptorType,那么它是因为该字段在__slots__中,而不是一个实际的默认值。
bpo-32953: 如果一个非数据类继承自一个冻结的数据类,允许向派生类添加属性。只有来自冻结数据类的属性不能被赋值。要求层次结构中的所有数据类要么全部冻结,要么全部非冻结。
bpo-33061: 在typing.py的
__all__中添加缺失的NoReturn。bpo-33078: 修复当发生pickling错误时multiprocessing.Queue中的大小处理。
bpo-33064: lib2to3现在正确支持函数签名中
*args和**kwargs后的尾随逗号。bpo-33056: 修复concurrent.futures.ProcessPoolExecutor中泄漏的文件描述符未正确关闭的问题。
bpo-33021: 在fstat()调用期间释放GIL,避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。
bpo-31804: 避免在标准流在退出时被关闭或为None时,multiprocessing.Process失败。
bpo-33037: 在SSL传输关闭后跳过发送/接收数据。
bpo-27683: 修复
ipaddress中的一个回归问题,当网络由包含整数掩码且仅剩1位地址的元组构造时,hosts()的结果为空。bpo-32999: 修复
ABC.__subclasscheck__(cls, subclass)的C实现,在subclass不是类型对象时崩溃的问题。bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。
bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。
bpo-32056: 改进在模块
aifc、wave和sunau中读取音频文件时,对于无效通道数和样本宽度引发的异常。bpo-32844: 修复在subprocess中如果另一个低描述符被关闭时,将低描述符(0或1)错误重定向到stderr的问题。
bpo-32857: 在
tkinter中,after_cancel(None)现在会引发ValueError异常,而不是取消第一个预定的函数。由Cheryl Sabella提供补丁。bpo-31639: http.server 现在暴露了一个 ThreadedHTTPServer 类,并在模块使用
-m运行时使用它以应对网络浏览器预打开套接字的情况。bpo-27645: 如果底层的SQLite库版本为3.6.11或更高,
sqlite3.Connection现在公开了一个backup方法。由Lele Gaifax提供补丁。
文档¶
测试¶
构建¶
bpo-33163: 将pip升级到9.0.3,setuptools升级到v39.0.1。
Windows¶
macOS¶
bpo-32726: 为macOS 10.6+安装程序构建并链接Tcl/Tk 8.6的私有副本。10.9+安装程序变体已经这样做了。这意味着python.org macOS安装程序提供的Python 3.7不再需要或使用任何外部版本的Tcl/Tk,无论是系统提供的还是用户安装的,如ActiveTcl。
IDLE¶
bpo-32984: 在运行启动文件时设置
__file__。与Python一样,IDLE在展示第一个交互式输入提示之前,可选地在Shell窗口中运行一个启动文件。对于IDLE,-s``运行环境变量 :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()不再生成包含集合操作的模式。以'['开头或包含'--'、'&&'、'~~'或'||'的集合在未来版本的正则表达式中将被不同解释。目前它们会发出警告。fnmatch.translate() 现在避免意外生成包含此类集合的模式。bpo-32622: 为Windows proactor事件循环实现原生快速发送文件功能。
bpo-32777: 修复了在POSIX系统的子进程中,当标记文件描述符为可继承时,subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。
bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在,在支持dl的平台上,共享扩展已明确链接到libdl。
bpo-32741: 实现
asyncio.TimerHandle.when()方法。bpo-32691: 在使用pdb运行模块时使用mod_spec.parent。
bpo-32734: 修复了
asyncio.Lock()的安全问题,该问题允许多次获取和锁定同一个锁,而锁并未释放。由Bar Harel提供补丁。bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。
bpo-31453: 添加TLSVersion常量和SSLContext.maximum_version / minimum_version属性。新API封装了OpenSSL 1.1 https://web.archive.org/web/20180309043602/https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html 的特性。
bpo-24334: 清理了ssl模块的内部实现细节。SSLSocket减少了一层间接引用。所有者与会话信息现在由SSLSocket和SSLObject的构造函数处理。通道绑定实现已被简化。
bpo-31848: 修复Aifc_read.initfp()中当SSND块未找到时的错误处理。补丁由Zackery Spytz提供。
bpo-32585: 向
tkinter.ttk添加Ttk spinbox小部件。由Alan D Moore提供补丁。bpo-32221: 现在,返回包含IPv6地址的元组的各种函数省略了
%scope部分,因为相同的信息已经在 scopeid 元组项中编码。特别是这加快了socket.recvfrom()在接收多播数据包时的速度,因为省略了无用的网络接口名称解析。bpo-30693: TarFile类现在以一种可重复的方式递归目录。
bpo-30693: ZipFile类现在以一种可重复的方式递归目录。
文档¶
bpo-28124: ssl 模块函数 ssl.wrap_socket() 已被弱化并弃用,推荐使用更安全高效的 SSLContext.wrap_socket() 方法。
bpo-17232: 澄清 -O 和 -OO 的文档。由 Terry Reedy 提供补丁。
bpo-32436: 为 contextvars 模块(PEP 567)添加文档。
bpo-32800: 更新 xml 默认命名空间的 w3c 文档链接。
bpo-11015: 更新
test.support文档。bpo-8722: 文档化当属性
get()方法引发AttributeError时__getattr__()的行为。bpo-32614: 修改文档中的正则表达式示例,使用原始字符串以防止
DeprecationWarning,并在正则表达式 HOWTO 中添加文本以突出弃用。bpo-31972: 改进
pathlib.PurePath子类的文档字符串。
测试¶
bpo-31809: 添加测试以验证与 secp ECDH 曲线的连接。
构建¶
bpo-32898: 修复了在使用 COUNT_ALLOCS 时的 Python 调试构建问题。
Windows¶
bpo-32901: 将Tcl和Tk版本更新到8.6.8
bpo-31966: 修复WindowsConsoleIO.write()写入空数据的问题。
bpo-32409: 确保activate.bat可以处理Unicode内容。
bpo-32457: 改进启动Python时对非规范化可执行路径的处理。
bpo-32370: 在uuid模块中为ipconfig输出使用正确的编码。由Segev Finer提交补丁。
bpo-29248: 修复Windows上的
os.readlink(),它错误地将重新解析数据缓冲区的``PrintNameOffset`` 字段视为字符数而非字节数。由Craig Holmquist和SSE4提交补丁。
macOS¶
bpo-32901: 将macOS 10.9+安装程序更新至Tcl/Tk 8.6.8。
IDLE¶
bpo-32916: 在pyparse中将
str更改为code。bpo-32905: 移除pyparse模块中未使用的代码。
bpo-32874: 为pyparse添加测试。
bpo-32837: 对于IDLE的系统和位置无关文件,使用系统和位置相关的默认编码对于open()来说是一个坏主意。
bpo-32826: 在IDLE的test_help_about的open()中添加"encoding=utf-8"。GUI测试test_file_buttons()仅查看初始的ascii-only行,但在open()默认为'ascii'的系统上失败,因为readline()内部读取和解码足够远,以在CREDITS.txt中遇到非ascii字符。
bpo-32765: 更新configdialog General标签的文档字符串,将新部件添加到部件列表中。
工具/示例¶
bpo-32222: 修复 pygettext 不提取带有类型注释参数的函数的文档字符串的问题。由 Toby Harradine 提供的补丁。
Python 3.7.0 beta 1¶
发布日期: 2018-01-30
核心与内置函数¶
bpo-32703: 修复了协程在最终化时存在活动错误集时的 ResourceWarning 问题。
bpo-32650: Pdb 和其他依赖于 bdb.py 的调试器现在能够正确地单步跳过(next 命令)原生协程。由 Pablo Galindo 提供补丁。
bpo-28685: 通过尽可能使用类型专用比较,优化了 list.sort() 和 sorted()。
bpo-32685: 改进了当 Python 2 形式的 print 语句出现在复合语句的同一行或以分号而非换行符终止时的建议。由 Nitish Chandra 提供补丁。
bpo-32697: Python 现在明确保留了仅关键字参数的定义顺序。虽然之前总是保留其顺序,但这一行为从未得到保证;现在这一行为得到了保证和测试。
bpo-32690: locals() 字典现在按照变量定义的词法顺序显示。之前顺序是相反的。
bpo-32677: 向
str、bytes和bytearray添加了.isascii()方法。可用于测试字符串是否仅包含 ASCII 字符。bpo-32670: 对所有代码强制执行 PEP 479。这意味着从生成器中手动引发 StopIteration 异常对所有代码都是禁止的,无论是否使用了 'from __future__ import generator_stop'。
bpo-32591: 添加了对跟踪协程对象来源的内置支持;参见 sys.set_coroutine_origin_tracking_depth 和 CoroutineType.cr_origin。这取代了 asyncio 调试模式对原生协程对象使用协程包装的做法。
bpo-31368: 在 os 模块中暴露了 preadv 和 pwritev 系统调用。由 Pablo Galindo 提供补丁
bpo-32544:
hasattr(obj, name)和getattr(obj, name, default)在name未找到且obj未重写__getattr__或__getattribute__时,速度比以前快了约4倍。bpo-26163: 改进了 frozenset() 的哈希函数,当面对包含许多相似值的数据集时,能生成更多不同的哈希值。
bpo-32550: 移除了 STORE_ANNOTATION 字节码。
bpo-20104: 在 os 模块中暴露了 posix_spawn 作为低级 API。(在 3.7.0rc1 之前移除)
bpo-24340: 修复了代码堆栈大小的估计问题。
bpo-18533:
repr()在包含其自身的values()或items()的字典上不再引发RecursionError;OrderedDict 同理。相反,像其他递归结构一样使用...。由 Ben North 提供补丁。bpo-20891: Py_Initialize() 现在会创建 GIL。GIL 不再“按需”创建,以修复在非 Python 线程中调用 PyGILState_Ensure() 时的竞态条件。
bpo-32028: 在为将 Py2 打印语句转换为 Py3 内置打印函数调用生成建议时,现在正确地忽略了前导空白。由 Sanyam Khurana 提供补丁。
bpo-31179: 使 dict.copy() 速度提高了多达5.5倍。
bpo-31113: 在编译器中消除了对正常控制流的递归。
库¶
bpo-25988: 弃用在常规 collections 模块中暴露 collections.abc 的内容。
bpo-31429: ssl模块的默认密码套件选择现在使用黑名单方法,而不是硬编码的白名单。Python不再重新启用被OpenSSL安全更新阻止的密码。默认密码套件选择可以在编译时配置。
bpo-30306: contextlib.contextmanager现在一旦进入上下文管理器,就会释放传递给底层生成器的参数。以前,它会保持它们活跃,只要上下文管理器是活跃的,即使不作为函数装饰器使用。由Martin Teichmann提供补丁。
bpo-21417: 增加了对设置zipfile.ZipFile压缩级别的支持。
bpo-32251: 实现了asyncio.BufferedProtocol(临时API)。
bpo-32513: 在数据类中,允许更容易地覆盖dunder方法,而无需指定装饰器参数。
bpo-32660:
termios在Solaris/衍生系统下也提供FIONREAD,FIONCLEX,FIOCLEX,FIOASYNC和FIONBIO。bpo-27931: 修复当用户名为空引号字符串时的电子邮件地址头解析错误。由Xiang Zhang提供补丁。
bpo-32659: 在Solaris及其衍生系统下,
os.stat_result提供了一个st_fstype属性。bpo-32662: 实现了Server.start_serving()、Server.serve_forever()和Server.is_serving()方法。向loop.create_server()和loop.create_unix_server()添加了'start_serving'关键字参数。
bpo-32391: 实现了
asyncio.StreamWriter.wait_closed()和asyncio.StreamWriter.is_closing()方法。bpo-32643: 将Task._step、Task._wakeup和Future._schedule_callbacks方法设为私有。
bpo-32630: 重构decimal模块以使用contextvars存储decimal上下文。
bpo-32622: 添加
asyncio.AbstractEventLoop.sendfile()方法。bpo-32304: distutils的上传命令不再损坏以CR字节结尾的tar文件,并且不再尝试在上传的任何文本字段中将CR转换为CRLF。
bpo-32502: 当遇到64位硬件地址时,uuid.uuid1不再抛出异常。
bpo-32596:
concurrent.futures现在懒加载ThreadPoolExecutor和ProcessPoolExecutor(使用 PEP 562) 。这使得import asyncio大约快15%,因为 asyncio 默认只使用ThreadPoolExecutor。bpo-31801: 在
Enum中添加_ignore_,以便在类构造期间可以使用临时变量而不会将其转换为成员。bpo-32576: 在可以从弱引用回调调用的地方使用 queue.SimpleQueue()。
bpo-32574: 修复 asyncio.Queue 中的内存泄漏问题,当队列大小有限且已满时,取消 queue.put() 可能导致内存泄漏。补丁由:José Melero。
bpo-32521: nis 模块现在与新的 libnsl 和头文件位置兼容。
bpo-32467: collections.abc.ValuesView 现在继承自 collections.abc.Collection。
bpo-32473: 提高 ABCMeta._dump_registry() 输出的可读性
bpo-32102: subprocess.run 的新参数
capture_outputbpo-32521: glibc 已移除 Sun RPC。在 nis 模块中使用替代的 libtirpc 头文件和库。
bpo-32493: UUID 模块修复了 FreeBSD/OpenBSD 的构建
bpo-32503: 使用协议4进行pickle时不再创建过小的帧。
bpo-29237: 为 pstats 排序选项创建枚举
bpo-32454: 向 socket 模块添加 close(fd) 函数。
bpo-25942: subprocess 模块现在在 subprocess.call、subprocess.run 或 Popen 上下文管理器期间处理 Ctrl-C KeyboardInterrupt 时更加优雅。现在它会在继续 KeyboardInterrupt 异常处理之前等待子进程(假设也收到了 SIGINT)短暂退出。这仍然包括在 call() 和 run() API 中的 SIGKILL,但至少子进程有机会首先退出。
bpo-32433: hmac 模块现在有了 hmac.digest(),它提供了一个优化的 HMAC 摘要。
bpo-28134: 现在默认情况下,套接字会自动从文件描述符中检测家族、类型和协议。
bpo-32404: 修复了
datetime.datetime.fromtimestamp()在datetime.datetime子类中不调用 __new__ 的 bug。bpo-32403: 提高了
datetime.date和datetime.datetime替代构造器的速度。bpo-32228: 确保
truncate()在写入长度超过缓冲区大小后保留文件位置(由tell()报告)。bpo-32410: 为 asyncio 事件循环实现了
loop.sock_sendfile。bpo-22908: 向 ZipExtFile 类添加了 seek 和 tell。这仅在用于打开 zipfile 的文件对象可查找时有效。
bpo-32373: 添加了 socket.getblocking() 方法。
bpo-32248: 添加
importlib.resources和importlib.abc.ResourceReader作为读取包中资源的统一 API。希望支持资源读取的加载器必须实现get_resource_reader()方法。基于文件和基于 zipimport 的加载器都实现了这些 API。importlib.abc.ResourceLoader已被弃用,推荐使用这些新 API。bpo-32320: collections.namedtuple() 现在支持默认值。
bpo-29302: 添加了 contextlib.AsyncExitStack。由 Alexander Mohr 和 Ilya Kulakov 提供补丁。
bpo-31961: 已在 Python 3.7.0b2 中移除。 subprocess.Popen 的 args 参数现在可以是 path-like object。如果 args 以序列形式给出,其第一个元素现在也可以是 path-like object。
bpo-31900: 现在
locale.localeconv()函数会临时将LC_CTYPE区域设置改为``LC_NUMERIC``区域设置,以解码decimal_point和thousands_sep字节字符串,如果它们是非ASCII或长度超过1字节,并且LC_NUMERIC区域设置与LC_CTYPE区域设置不同。这一临时变更会影响其他线程。对于str.format()方法,当使用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作为加载器提供读取包中资源的统一 API 的 ABC。同时添加importlib.resources作为importlib_resources的移植版本。bpo-32311: 实现asyncio.create_task(coro)快捷方式
bpo-32327: 将文档中标记为协程的asyncio函数转换为协程。受影响的函数包括:loop.sock_sendall、loop.sock_recv、loop.sock_accept、loop.getaddrinfo、loop.getnameinfo。
bpo-32323:
urllib.parse.urlsplit()现在不会将作用域IPv6地址的主机名中的区域ID(作用域)转换为小写。bpo-32302: 修复了distutils的bdist_wininst对于CRT v142的支持:它二进制兼容于CRT v140。
bpo-29711: 修复了asyncio proactor循环中的
stop_serving会杀死所有监听服务器的问题。bpo-29970: 如果握手在10秒内未完成,则中止asyncio SSLProtocol连接。
bpo-32314: 实现了asyncio.run()。
bpo-17852: 基于对_Py_PyAtExit()语义的误解,撤销了不正确的修复。
bpo-32296: 在C中实现了asyncio._get_running_loop()和get_event_loop()。这使得它们的速度提高了4倍。
bpo-32250: 实现了
asyncio.current_task()和asyncio.all_tasks()。添加了旨在供替代任务实现使用的助手:asyncio._register_task、asyncio._enter_task、asyncio._leave_task``和 ``asyncio._unregister_task。弃用了``asyncio.Task.current_task()``和asyncio.Task.all_tasks()。bpo-32255: 现在,当写入CSV文件时,单个空字段总是会被引用。这允许区分空行和由单个空字段组成的行。由Licht Takeuchi提供补丁。
bpo-32277: 在不支持
chmod(..., follow_symlinks=False)的平台上,引发``NotImplementedError``而不是SystemError。由Anthony Sottile提供补丁。bpo-30050: signal.set_wakeup_fd的新参数warn_on_full_buffer让你控制当唤醒fd缓冲区溢出时Python是否在stderr上打印警告。
bpo-29137:
fpectl库已被移除。它从未默认启用,在 x86-64 上从未正确工作,并且它以导致 C 扩展意外中断的方式改变了 Python ABI。bpo-32273: 将 asyncio.test_utils 移动到 test.test_asyncio。
bpo-32272: 移除 asyncio.async() 函数。
bpo-32269: 添加 asyncio.get_running_loop() 函数。
bpo-32265: 内置类型的所有类和静态方法现在被 inspect.classify_class_attrs() 正确分类并在 pydoc 输出中分组。添加了 types.ClassMethodDescriptorType 用于内置类型的未绑定类方法。
bpo-32253: 弃用
yield from lock,await lock,with (yield from lock)和with await lock用于 asyncio 同步原语。bpo-22589: 将 .bmp 的 MIME 类型从 'image/x-ms-bmp' 改为 'image/bmp'。
bpo-32193: 将 asyncio 转换为使用 async/await 语法。旧式的
yield from仍然支持。bpo-32206: 添加支持以使用 pdb 运行模块。
bpo-32227:
functools.singledispatch现在支持使用类型注释注册实现。bpo-15873: 添加了新的替代构造函数
datetime.datetime.fromisoformat(),datetime.time.fromisoformat()和datetime.date.fromisoformat()作为各自类isoformat方法的逆操作。bpo-32199: getnode() ip 获取器现在使用 'ip link' 而不是 'ip link list'。
bpo-32143: os.statvfs() 包含来自 statvfs(2) 的 f_fsid 字段。
bpo-26439: 通过实现 ctypes._aix.find_library() 修复 ctypes.util.find_library() 在 AIX 上的问题。补丁由:Michael Felt
bpo-31993: 当将大的 bytes 和 str 对象序列化到文件时,pickler 现在使用更少的内存。使用协议 4 创建的 pickle 将需要更少的内存来反序列化大的 bytes 和 str 对象。
bpo-27456: 确保在 Linux 上设置 TCP_NODELAY。测试由 Victor Stinner 完成。
bpo-31778: 现在ast.literal_eval()更加严格。不再允许任意数字的加减法。
bpo-31802: 即使`os`模块尚未导入,导入原生路径模块(
posixpath,ntpath)现在也能正常工作。bpo-30241: 添加contextlib.AbstractAsyncContextManager。由Jelle Zijlstra提供补丁。
bpo-31699: 修复了当任务参数或结果导致pickling或unpickling错误时
concurrent.futures.ProcessPoolExecutor中的死锁问题。这应确保对ProcessPoolExecutorAPI的调用最终总能返回。bpo-15216:
TextIOWrapper.reconfigure()支持更改*encoding*, errors, 和*newline*。
文档¶
bpo-32418: 向Server和AbstractServer类添加get_loop()方法。
测试¶
Windows¶
bpo-19764: 在Windows上实现支持
subprocess.Popen(close_fds=True)。由Segev Finer提供补丁。
工具/示例¶
bpo-24960: 2to3和lib2to3现在可以使用pkgutil.get_data()读取pickled语法文件,而不是探测文件系统。这使得2to3和lib2to3在从zipfile运行时也能工作。
C API¶
Python 3.7.0 alpha 3¶
发布日期: 2017-12-05
核心与内置函数¶
bpo-32176: 现在,代码对象构造函数会根据freevars和cellvars正确设置co_flags.CO_NOFREE,而不是需要调用者正确设置。这确保了当额外的cell引用被注入到修改后的代码对象和函数中时,它会自动清除。
bpo-10544: 现在在推导式和生成器表达式中不推荐使用yield表达式。它们仍然允许在最外层可迭代对象的定义中使用,因为那是在封闭作用域中直接评估的。
bpo-32137: 现在,深度嵌套字典的repr会引发RecursionError,而不是因为堆栈溢出而崩溃。
bpo-32096: 在C API中恢复内存分配器的更改:将结构体从_PyRuntime移回Objects/obmalloc.c。内存分配器再次静态初始化,因此PyMem_RawMalloc()和Py_DecodeLocale()可以在_PyRuntime_Initialize()之前调用。
bpo-32043: 添加了一个新的“开发者模式”:新的“-X dev”命令行选项,用于在运行时启用调试检查。
bpo-32023: 现在,当在类定义中使用没有括号的生成器表达式代替继承列表时,会正确引发SyntaxError。只有在调用时可以省略括号的重复。
bpo-32012: 现在,当传递一个没有括号的生成器表达式作为参数,但后面跟着一个尾随逗号时,会正确引发SyntaxError。生成器表达式总是需要直接在一组括号内,并且不能在两边有任何逗号。
bpo-28180: 添加了一个新的内部
_Py_SetLocaleFromEnv(category)辅助函数,以提高不同``libc``实现之间行为的一致性(例如,Android默认不支持从环境设置区域设置)。bpo-31949: 修复了打印回溯(PyTraceBack_Print())中的若干问题。现在将sys.tracebacklimit设置为0或更小会抑制回溯的打印。将sys.tracebacklimit设置为None现在会导致使用默认限制。将sys.tracebacklimit设置为大于LONG_MAX的整数现在意味着使用LONG_MAX限制而不是默认限制。修复了Windows上超过
2**31个回溯项时的整数溢出问题。修复了输出错误处理。bpo-30696: 修复了在没有内存时交互式解释器无限循环的问题。
bpo-20047: Bytearray方法partition()和rpartition()现在仅接受类似字节的对象作为分隔符,如文档所述。特别是,现在当传递整数作为分隔符时,它们会引发TypeError而不是返回一个虚假的结果。
bpo-21720: 当
__import__()的 fromlist 参数或模块的__all__属性包含bytes实例时,不再发出BytesWarning。bpo-31845: 环境变量在解释器启动时再次被正确读取。
bpo-28936: 确保在给定范围内首先检测到涉及参数和
global或nonlocal的词法上第一个语法错误。由Ivan Levkivskyi提供补丁。bpo-31825: 修复了在解码转义的非ascii字节时'unicode-escape'编解码器和codecs.escape_decode()中的OverflowError。
bpo-31618: 3.7a1中添加的每帧跟踪逻辑已更改,以便在发出
"line"或"opcode"事件之前更新frame->f_lineno。以前,操作码事件首先发出,因此偶尔会在帧上看到过时的行号。此功能的行为因此略有变化:当同时启用f_trace_lines和f_trace_opcodes时,行事件现在首先发生。bpo-28603: 在解释器退出时打印异常的完整上下文/原因链,即使链中的异常不可哈希或与后面的异常相等。由Zane Bitter提供补丁。
bpo-31786: 修复 select 模块中负超时时间在 -1.0 和 0.0 之间的正确舍入问题。现在函数会按预期阻塞等待事件。此前,调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。
bpo-31781: 防止在调用未初始化的
zipimport.zipimporter对象方法时崩溃。由 Oren Milman 提供补丁。bpo-30399: 单一参数的 BaseException 的标准 repr() 不再包含多余的尾随逗号。
bpo-31626: 修复了调试内存分配器中的一个错误。在缩小内存块后存在对已释放内存的写入。
bpo-30817:
PyErr_PrintEx()现在会清除可能由_PySys_SetObjectId()引发的忽略异常,例如在没有内存时。
库¶
bpo-28556: 对
typing模块的两项小修复:允许浅复制泛型类的实例,改进__init_subclass__与泛型的交互。原始 PR 由 Ivan Levkivskyi 提供。bpo-32214: PEP 557,数据类。提供了一个装饰器,为使用类型注解指定字段的类添加样板方法。
bpo-27240: 新电子邮件策略的头部折叠算法已被重写,这也修复了 bpo-30788、bpo-31831 和 bpo-32182。特别是,现在可以正确进行 RFC2231 折叠。
bpo-32186: io.FileIO.readall() 和 io.FileIO.read() 现在在获取文件大小时释放 GIL。修复了所有线程因无法访问的 NFS 服务器而挂起的问题。由 Nir Soffer 提供补丁。
bpo-32101: 添加
sys.flags.dev_mode标志bpo-32154: 已移除
asyncio.windows_utils.socketpair()函数:直接使用socket.socketpair(),该函数自 Python 3.5 起在所有平台上可用(此前在 Windows 上不可用)。asyncio.windows_utils.socketpair()在 Python 3.5 及更新版本上只是socket.socketpair的别名。bpo-32089: 警告:在开发(-X dev)和调试模式(pydebug 构建)中,默认警告过滤器中对 ResourceWarning 使用“default”操作,而非“always”操作。
bpo-32107:
uuid.getnode()现在优先返回普遍管理的 MAC 地址(如果可用),而不是本地管理的 MAC 地址。这为uuid.uuid1()返回的 UUID 提供了更好的全局唯一性保证。如果只有本地管理的 MAC 地址可用,则返回找到的第一个此类地址。bpo-23033: 在
ssl.match_hostname()的第二个参数中,当主机名的最左侧段是且仅是一个字符时,现在支持通配符。由 Mandeep Singh 提供补丁。bpo-12239: 当属性的值为
VT_EMPTY时,使msilib.SummaryInformation.GetProperty()返回None。初始由 Mark Mc Mahon 提供补丁。bpo-28334: 在
netrc.netrc中使用os.path.expanduser()来查找~/.netrc文件。如果文件不存在,则抛出FileNotFoundError。由 Dimitri Merejkowsky 提供补丁。bpo-32121: 使
tracemalloc.Traceback的行为更类似于 traceback 模块,将帧从最旧到最新排序。Traceback.format()现在接受负的 limit 参数,将结果截断为abs(limit)个最旧的帧。要获得旧的行为,可以使用Traceback.format()的新参数 most_recent_first。(补丁由 Jesse Bakker 提供。)bpo-31325: 修复了
RobotFileParser.parse()方法中collections.namedtuple()的错误用法。初始由 Robin Wellner 提供补丁。bpo-12382:
msilib.OpenDatabase()现在在无法打开或创建 MSI 文件时引发更好的异常消息。初始由 William Tisäter 提供补丁。bpo-19610:
setup()现在会对某些字段的无效类型发出警告。当classifiers、keywords和platforms字段未指定为列表或字符串时,distutils.dist.Distribution类现在会发出警告。bpo-32071: 为
python -m unittest添加了-k命令行选项,以仅运行与给定模式匹配的测试。bpo-10049: 向 contextlib 添加了 nullcontext 无操作上下文管理器。这为处理可选上下文管理器时提供了比 ExitStack() 更简单、更快的替代方案。
bpo-28684: 这里使用了新的 test.support.skip_unless_bind_unix_socket() 装饰器来跳过 asyncio 测试,这些测试因为平台缺少对 unix 域套接字的功能性 bind() 函数而失败(如在现在以强制模式运行 SELinux 的较新 Android 版本上的非 root 用户就是这种情况)。
bpo-32110:
codecs.StreamReader.read(n)现在对于非负的 n,返回不超过 n 个字符/字节。这使得它与其他类似文件对象的read()方法兼容。bpo-27535: warnings 模块在警告过滤器的 "ignore" 操作的隐藏警告注册表中不再泄漏内存。warn_explicit() 函数不再为 "ignore" 操作将警告键添加到注册表中。
bpo-32088: warnings: 当 Python 以调试模式构建(
Py_DEBUG)时,DeprecationWarning、PendingDeprecationWarning和ImportWarning警告现在默认显示。bpo-1647489: 修复了可以匹配空字符串的正则表达式模式的搜索。现在可以在匹配空字符串后正确找到非空字符串。
bpo-25054: 添加了对可以匹配空字符串的模式进行拆分的支持。
bpo-32072: 修复了二进制 plists 的问题:修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。
bpo-32069: 从asyncio中移除遗留的SSL传输,反正总是使用ssl.MemoryBIO。
bpo-32066: asyncio: 在create_unix_connection中支持pathlib.Path;sock参数应为可选的
bpo-32046: 更新2to3,将operator.isCallable(obj)转换为callable(obj)。由Donghee Na提供补丁。
bpo-32018: inspect.signature应遵循 PEP 8,如果参数有注解和默认值。由Donghee Na提供补丁。
bpo-32025: 添加time.thread_time()和time.thread_time_ns()
bpo-32037: 适应有符号32位整数的整数现在将使用协议0的INT操作码进行pickle。这将减少pickle的大小,加快pickle和unpickle的速度,并使这些整数在Python 2中作为int实例被unpickle。
bpo-32034: 使asyncio.IncompleteReadError和LimitOverrunError可pickle。
bpo-32015: 修复了在等待异步读写套接字期间重新连接套接字时asyncio的循环问题。
bpo-32011: 恢复了对加载带有TYPE_INT64代码的marshal文件的支持。这些文件可以在Python 2.7中生成。
bpo-28369: 增强add_reader/writer检查,确保套接字未被某些传输使用。之前,仅支持使用int FD调用add_reader/writer的情况。现在,对所有类文件对象都正确实现了检查。
bpo-31976: 修复了当文件刷新缓慢时可能导致的竞态条件,如果从另一个线程关闭文件可能会导致段错误。
bpo-31985: 正式弃用aifc.openfp、sunau.openfp和wave.openfp。自1993年的变更7bc817d5ba917528e8bd07ec461c635291e7b06a以来,这三个模块中的openfp作为向后兼容性问题,一直指向该模块的open函数,尽管它既未经测试也无文档记录。
bpo-21862: cProfile命令行现在接受
-m module_name作为脚本路径的替代方案。由Sanyam Khurana提供补丁。bpo-31970: 降低asyncio调试模式的性能开销。
bpo-31843: sqlite3.connect()的 database 参数现在接受一个 path-like object,而不仅仅是一个字符串。
bpo-31945: 为
HTTPConnection和HTTPSConnection添加可配置的 blocksize 以提高上传吞吐量。由Nir Soffer提供补丁。bpo-31943: 向
asyncio.Handle添加一个cancelled()方法。由Marat Sharafutdinov提供补丁。bpo-9678: 修复了uuid模块中确定MAC地址的问题:在NetBSD和OpenBSD上使用ifconfig。在Linux、FreeBSD、NetBSD和OpenBSD上使用arp。基于Takayuki Shimizukawa的补丁。
bpo-30057: 修复了signal.signal()中潜在的信号丢失问题。
bpo-31933: 修复Blake2参数leaf_size和node_offset在大端平台上的问题。由Jack O'Connor提供补丁。
bpo-21423: 向{Process,Thread}PoolExecutor添加一个初始化参数。
bpo-31927: 修复了socket模块在NetBSD 8上的编译问题。修复了在NetBSD和DragonFly BSD上解析AF_BLUETOOTH地址时的断言失败或读取任意数据的问题。
bpo-27666: 修复了当类型chtype或mmask_t的大小小于C long的大小时,curses.box()和curses.ungetmouse()中的堆栈损坏问题。curses.box()现在接受字符作为参数。基于Steve Fink的补丁。
bpo-31917: 添加3个新的时钟标识符:
time.CLOCK_BOOTTIME、time.CLOCK_PROF和time.CLOCK_UPTIME。bpo-31897: plistlib现在在读取二进制plist时会捕获更多错误,并抛出InvalidFileException而不是意外的异常。
bpo-25720: 修复了检查curses WINDOW填充状态的方法。由Masayuki Yamamoto提供补丁。
bpo-31893: 修复了OpenBSD和NetBSD上kqueue_event结构的布局。修复了kqueue_event对象的比较。
bpo-31891: 修复了在NetBSD上构建curses模块的问题。
bpo-31884: 向subprocess模块添加了在Windows上设置优先级所需的常量。
bpo-28281: 移除了Calendar.weekday()函数对年份(1-9999)的限制。由Mark Gollahon提供补丁。
bpo-31702: crypt.mksalt() 现在允许指定 SHA-256 和 SHA-512 哈希的轮数。
bpo-30639:
inspect.getfile()不再计算未知对象的 repr 以显示在错误消息中,以防止不良行为的自定义 repr。bpo-30768: 修复了当 timeout > 0 和 intr_flag=0 时 PyThread_acquire_lock_timed() 的 pthread+semaphore 实现:如果 sem_timedwait() 被信号(EINTR)中断,则重新计算超时。另见 PEP 475。
bpo-31854: 添加
mmap.ACCESS_DEFAULT常量。bpo-31834: 仅在 SSSE3+ 上使用优化的 BLAKE2 代码。纯 SSE2 实现比纯 C 参考实现慢。
bpo-28292: 当日期超出 0001-01-01 到 9999-12-31 范围时,Calendar.itermonthdates() 将始终引发异常。为了支持不能容忍此类异常的应用程序,添加了新方法 itermonthdays3() 和 itermonthdays4()。新方法返回元组,不受 datetime.date 支持的范围限制。
bpo-28564: shutil.rmtree() 函数的速度提高了 20--40%。这是通过使用 os.scandir() 函数实现的。
bpo-28416: 具有 persistent_id() 方法的 pickle.Pickler 子类和具有 persistent_load() 方法的 pickle.Unpickler 子类的实例不再创建引用循环。
bpo-31653: 如果可以立即获取多处理信号量,则不释放 GIL。
bpo-28326: 修复当 stdout 和/或 stderr 关闭或为 None 时的 multiprocessing.Process。
bpo-20825: 向
ipaddress.IPv6Network和ipaddress.IPv4Network添加subnet_of和superset_of包含测试。由 Michel Albert 和 Cheryl Sabella 提供补丁。bpo-31827: 移除 os.stat_float_times() 函数。该函数在 Python 2.3 中引入,用于向后兼容 Python 2.2,并从 Python 3.1 开始弃用。
bpo-31756: 向
subprocess函数添加一个subprocess.Popen(text=False)关键字参数,以更明确地指示库何时应尝试将输出解码为文本。由 Andrew Clegg 提供补丁。bpo-31819: 添加 AbstractEventLoop.sock_recv_into()。
bpo-31457: 如果使用嵌套的日志适配器,内部
process()方法不再被省略。bpo-31457: LoggerAdapter 对象的
manager属性现在可以正确设置了。bpo-31806: 修复 time.sleep(), threading.Lock.acquire() 和 socket.socket.settimeout() 中的超时舍入,以正确舍入 -1.0 和 0.0 之间的负超时。这些函数现在会按预期阻塞等待事件。之前,调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。
bpo-31803: time.clock() 和 time.get_clock_info('clock') 现在会发出 DeprecationWarning 警告。
bpo-31800: 扩展了对解析 UTC 偏移的支持。strptime '%z' 现在可以解析由 datetime.isoformat 生成的输出,包括秒和微秒。
bpo-28603: traceback: 修复了在打印异常回溯时,当当前异常或其上下文/原因链中的异常不可哈希时发生的 TypeError。由 Zane Bitter 提供补丁。
bpo-30541: 添加新功能以密封模拟对象并防止自动创建子模拟对象。由 Mario Corchero 提供补丁。
bpo-31784: 实现 PEP 564,向
time模块添加 6 个具有纳秒分辨率的新函数:clock_gettime_ns(),clock_settime_ns(),monotonic_ns(),perf_counter_ns(),process_time_ns(),time_ns()。bpo-30143: 2to3 现在生成的代码使用 collections.abc 中的抽象集合类而不是 collections。
bpo-31770: 防止多次调用
sqlite3.Cursor对象的__init__()方法时崩溃。由 Oren Milman 提供补丁。bpo-31764: 防止在
sqlite3.Cursor.close()中当Cursor对象未初始化时发生崩溃。补丁由 Oren Milman 提供。bpo-31752: 修复在调用自定义整数的 timedelta 构造函数时可能发生的崩溃。
bpo-31620: 空的 asyncio.Queue 现在在队列获取轮询超时时不会泄漏内存。
bpo-31690: 允许将 re.ASCII、re.LOCALE 和 re.UNICODE 标志用作正则表达式的组标志。
bpo-30349: 如果正则表达式包含将来会语义变化的字符集构造(嵌套集和集操作),现在会发出 FutureWarning。
bpo-31664: 在 crypt 模块中添加了对 Blowfish 哈希的支持。
bpo-31632: 修复 asyncio 模块中 _SSLProtocolTransport 类的 set_protocol() 方法。此方法之前修改了错误的协议引用。
bpo-15037: 为 ncurses 5.7 及更早版本的 curses 中的 getkey() 添加了一个变通方案。
bpo-31307: 允许使用字节对象作为
configparser.ConfigParser.read()的参数。补丁由 Vincent Michel 提供。bpo-31334: 修复
select模块中的poll.poll([timeout]),在所有操作系统上对于任意的负超时值,现在可以仅接受非负整数或 -1。由 Riccardo Coccioli 提供补丁。bpo-31310: 如果崩溃,multiprocessing 的信号量跟踪器应该重新启动。
bpo-31308: 使 multiprocessing 的 forkserver 进程免受 Ctrl-C 和其他用户中断的影响。如果崩溃,必要时重启它。
bpo-31245: 在 asyncio 的
create_datagram_endpoint中添加了对 AF_UNIX 套接字的支持。bpo-30553: 将 HTTP/2 状态码 421(Misdirected Request)添加到
http.HTTPStatus。由 Vitor Pereira 提供补丁。
文档¶
bpo-32105: 添加了 asyncio.BaseEventLoop.connect_accepted_socket 的 versionadded 标记。
测试¶
bpo-31380: 在 macOS 上跳过 test_httpservers 的 test_undecodable_file 测试:在 APFS 上失败。
bpo-31705: 在早于4.5版本的Linux内核上跳过test_socket.test_sha256()测试。该测试在内核3.10(ppc64le架构)上会因ENOKEY而失败。此问题已在4.5内核中修复。
bpo-32138: 在Android上跳过引发SIGSEGV的test_faulthandler测试,并移除test.support.requires_android_level装饰器。
bpo-32136: 运行时嵌入测试已从
Lib/test/test_capi.py分离出来,移至新文件``Lib/test/test_embed.py``。bpo-28668: 移除了test.support.requires_multiprocessing_queue。当信号量实现损坏或缺失时,改用test.support.import_module('multiprocessing.synchronize')跳过测试。
bpo-32126: 当sem_open()功能不正常时,跳过test.test_asyncio.test_events中的test_get_event_loop_new_process测试。
bpo-31174: 修复test_tools.test_unparse:DirectoryTestCase现在存储样本名称以始终测试相同的文件。这避免了在查找引用泄漏时产生误报。
构建¶
bpo-28538: 撤销之前的更改,if_nameindex结构由统一头文件定义。
bpo-28762: 撤销最后一次提交,F_LOCK宏由Android统一头文件定义。
bpo-29040: 支持使用统一头文件构建Android。首个支持统一头文件的NDK版本是android-ndk-r14。
bpo-32059:
setup.py中的detect_modules()现在在交叉编译时也会搜索sysroot路径。bpo-31957: 修复为Windows构建时的Windows SDK版本检测。
bpo-31609: 修复PCbuild/clean.bat中的引号问题。
bpo-31934: 当构建源树不干净时中止构建。
bpo-31926: 修复了当.c文件中有多个同名函数和/或方法时,Argument Clinic有时会导致编译错误的问题。
bpo-28791: 更新Windows构建以使用SQLite 3.21.0。
bpo-28791: 更新OS X安装程序以使用SQLite 3.21.0。
bpo-28643: 使用stamp文件记录profile-opt构建进度。
bpo-31866: 完成移除对AtheOS的支持。
Windows¶
macOS¶
bpo-31392: 更新macOS安装程序以使用OpenSSL 1.0.2m。
IDLE¶
bpo-32207: 在IDLE中改进tk事件异常回溯。当tk事件处理由IDLE的运行循环驱动时,不再向tk事件异常回溯中添加令人困惑和分散注意力的queue.EMPTY回溯上下文。现在,回溯与事件处理由用户代码驱动时相同。基于Serhiy Storchaka的建议的补丁。
bpo-32164: 删除未使用的文件idlelib/tabbedpages.py。在configdialog中使用TabbedPageSet已被ttk.Notebook替代。
bpo-32100: IDLE: 修复pathbrowser中的旧错误和新错误;改进测试。补丁主要由Cheryl Sabella提供。
bpo-31858: IDLE -- 将shell提示符操作限制在shell中。编辑器和输出窗口仅看到一个空的最后提示行。这简化了代码并修复了插入换行时的一个小错误。如果存在Sys.ps1,则在Shell启动时读取,但不设置或更改。
bpo-31860: IDLE配置对话框中的字体样本现在可编辑。更改在IDLE保持打开时持续存在。
bpo-31836: 现在如果在设置ps1的test_idle之后运行,Test_code_module将通过。代码模块如果存在则使用sys.ps1,如果不存在则设置为'>>> '。Test_code_module现在正确测试了这两种行为。ps2同理。
bpo-28603: 修复了一个TypeError,该错误在打印包含不可哈希异常的追溯时导致shell重启。补丁由Zane Bitter提供。
bpo-13802: 在IDLE的字体设置示例中使用非拉丁字符。即使用户选择的字体仅定义了Unicode基本多语言平面的一个有限子集,tcl/tk也会使用定义了该字符的其他字体。扩展后的示例让使用非拉丁字符的用户更清楚地了解他们在IDLE的shell和编辑器中可能会看到的内容。为了给扩展后的示例腾出空间,字体标签页上的框架被重新排列。字体/标签帮助文档对这些新增内容进行了一些说明。
工具/示例¶
C API¶
bpo-20891: 修复PyGILState_Ensure()。当PyGILState_Ensure()在非Python线程中且在PyEval_InitThreads()之前被调用时,仅在调用PyThreadState_New()之后调用PyEval_InitThreads(),以修复崩溃问题。
bpo-32125: 已移除
Py_UseClassExceptionsFlag标志。该标志自Python 2.0以来已被弃用且不再使用。bpo-25612: 将当前的异常状态从帧对象移动到协程。这简化了解释器,并修复了一些由于在进入或退出生成器时交换异常状态而导致的晦涩错误。
bpo-23699: 添加Py_RETURN_RICHCOMPARE宏以减少富比较函数中的样板代码。
bpo-30697: 移除了
PyExc_RecursionErrorInst单例,PyErr_NormalizeException()也不再使用它。这个单例是持久的,其成员从未被清除可能会导致解释器在最终化期间出现段错误。另见 bpo-22898。
Python 3.7.0 alpha 2¶
发布日期: 2017-10-16
核心与内置函数¶
bpo-31558:
gc.freeze()是一个新的API,它允许将垃圾收集器当前跟踪的所有对象移动到永久代,从而有效地将它们从未来的收集事件中移除。这可以用来保护这些对象的PyGC_Head不被改变。实际上,这为fork()提供了极佳的写时复制稳定性。bpo-31642: 通过将sys.modules["package.module"]设置为None,恢复了阻塞的"from package import module"。
bpo-31708: 允许在同步函数中使用异步生成器表达式。
bpo-31709: 放弃对异步__aiter__的支持。
bpo-30404: -u选项现在使stdout和stderr流变为无缓冲而非行缓冲。
bpo-31619: 修复了将带有大量下划线的字符串转换为二进制基数整数时的ValueError。
bpo-31602: 修复了在
zlib.decompress()出错时zipimporter.get_source()中的断言失败。由Oren Milman提供补丁。bpo-31592: 修复了在
unicodedata.normalize()出错时Python解析器中的断言失败。由Oren Milman提供补丁。bpo-31588: 当类创建由于元类的
__prepare__()方法出错而失败时,抛出一个带有有用错误信息的TypeError。由Oren Milman提供补丁。bpo-31574: 为importlib装备了两个dtrace探针以分析导入时间。
bpo-31566: 修复了在
__name__全局变量出错时_warnings.warn()中的断言失败。由Oren Milman提供补丁。bpo-31506: 改进了
object.__new__和object.__init__的错误消息逻辑。bpo-31505: 修复了在
_json.make_encoder()``接收到错误的 ``encoder()参数时json中的断言失败。由Oren Milman提供补丁。bpo-31492: 修复了在从具有错误
__name__属性的模块导入失败时,以及在访问此类模块的属性失败时的断言失败。由Oren Milman提供补丁。bpo-31478: 修复
_random.Random.seed()中当参数有坏的__abs__()方法时的断言失败。由 Oren Milman 提供补丁。bpo-31336: 通过减少必要的特殊方法查找的开销,加快类创建速度10-20%。由 Stefan Behnel 提供补丁。
bpo-31415: 添加
-X importtime选项以显示每个导入花费的时间。可用于优化应用程序的启动时间。支持使用PYTHONPROFILEIMPORTTIME作为启用此功能的等效方式。bpo-31410: 优化了调用包装器和类方法描述符。
bpo-31353: PEP 553 - 添加一个名为
breakpoint()的新内置函数,它会调用sys.breakpointhook()。默认情况下,这会导入pdb并调用pdb.set_trace(),但用户可以覆盖sys.breakpointhook()来调用他们想要的任何调试器。钩子的原始值保存在sys.__breakpointhook__中。bpo-17852: 维护一个打开的缓冲文件列表,在退出解释器之前刷新它们。基于 Armin Rigo 的补丁。
bpo-31315: 修复 imp.create_dynamic() 中当 spec.name 不是字符串时的断言失败。由 Oren Milman 提供补丁。
bpo-31311: 修复
ctypes._CData的__setstate__()方法在__dict__有问题时的崩溃。由 Oren Milman 提供补丁。bpo-31293: 修复 timedelta 对象与具有坏的 as_integer_ratio() 方法的浮点数进行真除法和乘法时的崩溃。由 Oren Milman 提供补丁。
bpo-31285: 修复
warnings.warn_explicit中当接收的加载器的get_source()的返回值有坏的splitlines()方法时的断言失败。由 Oren Milman 提供补丁。
库¶
bpo-30058: 修复 select.kqueue.control() 中的缓冲区溢出。
bpo-31672:
string.Template中的idpattern匹配了一些非ASCII字符。现在它使用-i正则表达式本地标志来避免非ASCII字符。bpo-31701: 在Windows上,faulthandler.enable()现在会忽略MSC和COM异常。
bpo-31728: 防止由于
Element.text和Element.tail的不安全清理导致的``_elementtree``崩溃。由Oren Milman提供补丁。bpo-31671: 现在
re.compile()在编译前将传递的RegexFlag转换为普通的int对象。bm_regex_compile基准测试显示性能提升了14%。bpo-30397: 编译的正则表达式对象和匹配对象的类型现在暴露为
re.Pattern和``re.Match``。这为re模块的pydoc输出增加了信息。bpo-31675: 修复了Tkinter的splitlist()和split()方法在传递大于2 GiB的字符串时的内存泄漏问题。
bpo-31673: 修复了Tkinter方法adderrorinfo()名称中的拼写错误。
bpo-31648: 对ElementTree中的路径谓词进行了改进:允许谓词部分周围有空格,例如"[a = 'text']",而不是要求不太可读的"[a='text']"。添加了对当前节点文本比较的支持,如"[.='text']"。由Stefan Behnel提供补丁。
bpo-30806: 修复了netrc对象的字符串表示。
bpo-31638: 向
zipapp.create_archive添加可选参数compressed,并向zipapp的命令行界面添加选项--compress。bpo-25351: 避免venv激活时因未定义变量而失败。
bpo-20519: 尽可能避免使用ctypes并提高uuid的导入时间。
bpo-28293: 当正则表达式缓存满时,不再完全清空。
bpo-31596: 向time模块添加了pthread_getcpuclockid()。
bpo-27494: 使2to3接受生成器表达式中的尾随逗号。例如,现在允许``set(x for x in [],)``。
bpo-30347: 修复了在并发迭代itertools.groupby()迭代器时的崩溃问题。
bpo-30346: 由itertools.groupby()迭代器生成的迭代器现在在推进groupby迭代器后会耗尽。
bpo-31556: 如果超时<=0,则更快地取消asyncio.wait_for未来。
bpo-31540: 允许在
concurrent.futures.ProcessPoolExecutor构造函数中传递上下文对象。同时,提前释放concurrent.futures.ProcessPoolExecutor中的作业资源,以改善工作线程等待新作业时的内存使用情况。bpo-31516:
threading.current_thread()在关闭时不应返回一个虚拟线程。bpo-31525: 在 sqlite 模块中,要求 sqlite3_prepare_v2 API。因此,sqlite 模块现在要求 sqlite 版本至少为 3.3.9。
bpo-26510: argparse 子解析器现在默认是必需的。这与 Python 2 的行为一致。对于可选的子解析器,使用新参数
add_subparsers(required=False)。由 Anthony Sottile 提供补丁。(截至 3.7.0rc1,默认值更改为非必需,这是自 Python 3.3 以来的情况。)bpo-27541: 一些集合和迭代器类的子类(
bytearray、array.array、collections.deque、collections.defaultdict、itertools.count、itertools.repeat)的 repr 现在包含实际的类型名,而不是基类的硬编码名称。bpo-31351: 如果 pip 引导失败,python -m ensurepip 现在会以非零退出代码退出。
bpo-31389:
pdb.set_trace()现在接受一个可选的关键字参数header。如果提供,这将在调试开始前打印到控制台。
文档¶
构建¶
IDLE¶
bpo-31460: 简化IDLE模块浏览器的API。传递一个小部件而不是带有根部件的flist,开启了创建一个仅是窗口一部分的浏览器框架的可能性。传递一个完整的文件名而不是假定来自.py文件的片段,开启了浏览不以.py结尾的python文件的可能性。
bpo-31649: IDLE - 使_htest, _utest参数仅关键字。
bpo-31559: 在idle_test.test_browser中移除测试顺序依赖。
bpo-31459: 将IDLE的模块浏览器从类浏览器重命名为模块浏览器。原始的模块级类和方法浏览器多年前就变成了一个模块浏览器,增加了模块级函数。昨天又增加了嵌套类和函数。为了向后兼容,设置对话框的键标签上出现的虚拟事件<<open-class-browser>>没有被更改。补丁由Cheryl Sabella提供。
bpo-31500: 现在默认字体在高DPI显示器上会进行缩放。
bpo-1612262: IDLE模块浏览器现在显示嵌套类和函数。代码和测试的原始补丁分别由Guilherme Polo和Cheryl Sabella提供。
C API¶
bpo-28280: 使
PyMapping_Keys()、PyMapping_Values()和PyMapping_Items()总是返回一个list(而不是一个list或一个tuple) 。由Oren Milman提供补丁。bpo-31532: 修复由于在getpath.c中Py_GetPath()和Py_SetPath()之间的分配器混合导致的内存损坏。
bpo-25658: 实现线程特定存储(TSS)API的 PEP 539:这是CPython的一个新的线程本地存储(TLS)API,将取代CPython解释器中现有的TLS API的使用,同时弃用现有的API。PEP由Erik M. Bray撰写,由Masayuki Yamamoto提供补丁。
Python 3.7.0 alpha 1¶
发布日期: 2017-09-19
安全性¶
bpo-29781: 当尚未通过 BIO 执行握手时,SSLObject.version() 现在正确返回 None。
bpo-29505: 为 oss-fuzz 添加 float(str)、int(str)、unicode(str) 的模糊测试。
bpo-30947: 将内嵌的 libexpat 从版本 2.2.1 升级到 2.2.3 以获取安全修复。
bpo-30730: 在 Windows 上防止子进程中的环境变量注入。防止传递其他环境变量和命令参数。
bpo-30694: 将 expat 从 2.2.0 升级到 2.2.1 以修复多个安全漏洞,包括:CVE 2017-9233`(外部实体无限循环 DoS)、:cve:`2016-9063 (整数溢出,重新修复) 、CVE 2016-0718`(修复 2.2.0 对 :cve:`2016-0718 的修复引起的回归错误)和 CVE 2012-0876`(使用 SipHash 抵御哈希洪水攻击)。注意::cve:`2016-5300 (使用操作系统特定的熵源如 getrandom) 不影响 Python,因为 Python 已经通过
XML_SetHashSalt()从操作系统获取熵来设置 expat 的密钥。bpo-30500: 修复 urllib.parse.splithost() 正确解析片段。例如,
splithost('//127.0.0.1#@evil.com/')现在正确返回127.0.0.1主机,而不是将@evil.com视为认证中的主机(login@host)。bpo-29591: 将 expat 从 2.1.1 更新到 2.2.0 以修复 CVE 2016-0718 和 CVE 2016-4472。更多信息请见 https://sourceforge.net/p/expat/bugs/537/。
核心与内置函数¶
bpo-31490: 修复
ctypes类定义中的断言失败,当类有一个属性其名称在_anonymous_中指定但不在_fields_中时。由 Oren Milman 提供补丁。bpo-31471: 修复 Windows 上
subprocess.Popen()中的断言失败,当 env 参数有一个坏的keys()方法时。由 Oren Milman 提供补丁。bpo-31418: 修复
PyErr_WriteUnraisable()中的断言失败,当异常有一个坏的__module__属性时。由 Oren Milman 提供补丁。bpo-31416: 修复当warnings.filters或warnings.defaultaction错误时的断言失败。由Oren Milman提供补丁。
bpo-28411: 将直接使用PyInterpreterState.modules改为使用PyImport_GetModuleDict()。同时,在处理sys.modules的其他代码中引入更多一致性。这有助于减少在处理sys.modules时的复杂性。
bpo-28411: 在处理
PyInterpreterState.modules时切换到抽象API。这为以后支持所有字典子类和其他映射实现提供了可能。同时添加了一个PyImport_GetModule()函数以减少大量重复代码。bpo-31411: 当warnings.onceregistry不是字典时,抛出TypeError而不是SystemError。由Oren Milman提供补丁。
bpo-31344: 为了更精细地控制测试解释器时的跟踪行为,添加了两个新的帧属性来控制特定跟踪事件的发出:
f_trace_lines``(默认为 ``True)用于关闭每行跟踪事件;f_trace_opcodes(默认为False) 用于开启每操作码跟踪事件。bpo-31373: 修复了几个由于浮点降级可能导致的未定义行为实例。
bpo-30465: f-字符串中的位置信息(
lineno``和 ``col_offset)现在(大部分)正确。这修复了像flake8这样的工具在错误行(通常是文件的第一行)显示警告的问题。bpo-30860: 将CPython的全局运行时状态整合到一个结构体中。这提高了运行时状态的可发现性。
bpo-31347: 修复了_PyObject_FastCall_Prepend中可能存在的未定义行为。
bpo-31343: 包含sys/sysmacros.h以获取major()、minor()和makedev()。GNU C库计划从sys/types.h中移除这些函数。
bpo-31291: 修复了Windows上
zipimport.zipimporter.get_data中的一个断言失败,当``pathname.replace('/','\')``的返回值不是字符串时。由Oren Milman提供补丁。bpo-31271: 修复当编码器未返回字节对象时,
io.TextIOWrapper``的 ``write()方法中的断言失败。由Oren Milman提供补丁。bpo-31243: 修复当解码器状态无效时,``io.TextIOWrapper``的某些方法中的崩溃问题。由Oren Milman提供补丁。
bpo-30721:
print现在显示使用Python 2重定向语法的正确用法提示。由Sanyam Khurana提供补丁。bpo-31070: 修复importlib中_get_module_lock()的竞态条件。
bpo-30747: 在MSVC上添加_Py_atomic_store和_Py_atomic_load的非虚拟实现。
bpo-31095: 修复由未调用
PyObject_GC_UnTrack()的tp_dealloc引起的GC期间潜在崩溃问题。bpo-31071: 当传递其他参数时,避免在使用*解包调用中掩盖原始TypeError。
bpo-30978: str.format_map()现在传递键查找异常。之前任何异常都被替换为KeyError异常。
bpo-30808: 对并发敏感的信号状态使用_Py_atomic API。
bpo-30876: 从未加载的包中进行相对导入现在会重新导入包,而不是因SystemError失败。从非包中进行相对导入现在会因ImportError而非SystemError失败。
bpo-30703: 改进信号传递。避免在信号处理程序中使用Py_AddPendingCall,以避免调用信号不安全函数。这里添加的测试在没有补丁的其他部分的情况下,在Linux和OS X上失败。这意味着我们的信号传递逻辑存在缺陷(某些信号可能会丢失)。
bpo-30765: 当PyThread_acquire_lock()被要求不阻塞时,避免在pthread_mutex_lock()中阻塞。
bpo-31161: 确保'Missing parentheses'语法错误消息仅应用于SyntaxError,而不是子类。补丁由Martijn Pieters提供。
bpo-30814: 修复从包中导入子模块时的竞态条件。
bpo-30736: 内部unicodedata数据库已升级到Unicode 10.0。
bpo-30604: 将 co_extra_freefuncs 从每线程转移到每解释器以避免崩溃。
bpo-30597:
print现在在作为 Python 2 语句使用时,自定义错误消息中显示预期的输入。由 Sanyam Khurana 提供补丁。bpo-30682: 移除了对某些 f-字符串过于严格的断言,例如 eval("f'\n'") 和 eval("f'\r'")。
bpo-30501: 编译器现在为 "if"、"while" 和 "assert" 语句、"if" 表达式、生成器表达式和推导式中的复杂条件表达式生成更优化的代码。
bpo-28180: 实现 :pep:`538`(传统 C 语言环境强制)。这意味着当有合适的强制目标区域设置可用时,核心解释器和区域设置感知的 C 扩展将假定使用 UTF-8 作为默认文本编码,而不是 ASCII。
bpo-30486: 允许为 __closure__ 设置单元格值。由 Lisa Roach 提供补丁。
bpo-30537: itertools.islice 现在接受类似整数的对象(具有 __index__ 方法)作为开始、停止和切片参数
bpo-25324: Python 解析所需的令牌已移至 C。
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: 当尝试移除"待定键"(尚未插入分裂表的键)时,修复split字典的dict.pop()。由Xiang Zhang提供补丁。
bpo-26182: 当async和await关键字被用作变量/属性/类/函数名时,发出DeprecationWarning。
bpo-26182: 修复在引发DeprecationWarning的代码中的内存泄漏。
bpo-28721: 修复异步生成器的aclose()和athrow()以正确处理StopAsyncIteration传播。
bpo-26110: 加速方法调用:添加LOAD_METHOD和CALL_METHOD操作码。
库¶
bpo-31499: xml.etree:修复当解析器是引用循环的一部分时的崩溃问题。
bpo-31482:
random.seed()现在在version=1时可以与bytes一起工作。bpo-28556: typing.get_type_hints现在默认(当调用者未指定
globalns时)为类和模块找到正确的globalns。bpo-28556: 对
typing模块的速度改进。原始PR由Ivan Levkivskyi和Mitar提供。bpo-31544: ElementTree的C加速器模块忽略了在XMLParser()中查找TreeBuilder目标方法时引发的异常。
bpo-31234: socket.create_connection()现在手动修复了一个引用循环:成功时清除存储最后一个异常的变量。
bpo-31457: LoggerAdapter对象现在可以嵌套。
bpo-31431: SSLContext.check_hostname现在自动将SSLContext.verify_mode设置为ssl.CERT_REQUIRED,而不是以ValueError失败。
bpo-31233: socketserver.ThreadingMixIn 现在维护一个非守护线程列表,在 server_close() 中等待所有这些线程完成。
bpo-28638: 改变了 collections.namedtuple() 的实现策略,大幅减少了 exec() 的使用,转而采用预计算的方法。因此,不再支持 verbose 参数和 _source 属性。这一变化带来了以下好处:1) 对于使用多个命名元组的应用程序,内存占用更小;2) 命名元组类的创建速度更快(大约快 4 到 6 倍,具体取决于测量方式);3) 使用 __new__、_make 和 _replace 创建实例时的速度略有提升。(主要补丁贡献者是 Jelle Zijlstra,INADA Naoki、Serhiy Storchaka 和 Raymond Hettinger 进一步改进。)
bpo-31400: 改进了 SSL 错误处理,避免丢失错误编号。
bpo-27629: 使 SSLContext.wrap_bio() 和 SSLContext.wrap_socket() 的返回类型可定制。
bpo-28958: ssl.SSLContext() 现在在无法实例化上下文时使用 OpenSSL 错误信息。
bpo-28182: 当 OpenSSL 无法验证对等证书时,SSL 模块现在会引发 SSLCertVerificationError 异常。该异常包含更多关于错误的信息。
bpo-27340: SSLSocket.sendall() 现在使用 memoryview 来创建数据切片。这修复了对所有类似于字节对象的支持。同时,这也更高效,避免了昂贵的复制。
bpo-14191: 新增函数
argparse.ArgumentParser.parse_intermixed_args提供了解析命令行中用户混合选项和位置参数的能力。bpo-31178: 修复了 subprocess 模块中在罕见错误路径下的字符串连接错误
bpo-31350: 对
asyncio._get_running_loop()进行微优化,使其速度提升高达 10%。bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题(libexpat bug 115):https://github.com/libexpat/libexpat/issues/115
bpo-29136: 添加 TLS 1.3 密码套件和 OP_NO_TLSv1_3。
bpo-1198569:
string.Template子类可以选择性地定义braceidpattern,如果它们想要在花括号内外指定不同的占位符模式。如果为 None(默认值),则回退到idpattern。bpo-31326: concurrent.futures.ProcessPoolExecutor.shutdown() 现在显式关闭调用队列。此外,shutdown(wait=True) 现在也会加入调用队列线程,以防止泄漏悬挂线程。
bpo-27144:
concurrent.futures中的map()和as_completed()迭代器现在避免保留对生成对象的引用。bpo-31281: 修复
fileinput.FileInput(files, inplace=True)当files包含pathlib.Path对象时的问题。bpo-27584:
AF_VSOCK已被添加到套接字接口中,允许虚拟机与其主机之间的通信。bpo-22536: 在 POSIX 系统上由于找不到可执行文件或 cwd 而引发 FileNotFoundError 时,子进程模块现在会设置文件名。
bpo-29741: 更新 _pyio 模块中的一些方法,以也接受整数类型。由 Oren Milman 提供补丁。
bpo-31249: concurrent.futures: ThreadPoolExecutor 使用的 WorkItem.run() 现在打破了异常对象和 WorkItem 对象之间的循环引用。
bpo-31247: xmlrpc.server 现在在处理异常的代码中使用 sys.exc_info() 时显式地打破循环引用。
bpo-23835: configparser: 现在在
ConfigParser()构造器中读取默认值使用read_dict(),使其行为与解析器的其余部分一致。默认字典中的非字符串键和值现在被隐式转换为字符串。由 James Tocknell 提供补丁。bpo-31238: pydoc: 私有 ServerThread 类的 stop() 方法现在会等待 DocServer.serve_until_quit() 完成,然后显式将其 docserver 属性设置为 None 以打破循环引用。
bpo-5001:
multiprocessing中的许多断言现在提供了更多信息,并且一些错误类型已更改为更具体的类型。bpo-31109: 将 zipimport 转换为使用 Argument Clinic。
bpo-30102: ssl 和 hashlib 模块现在在 OpenSSL < 1.1.0 时调用 OPENSSL_add_all_algorithms_noconf()。该函数检测 CPU 特性并在一些 CPU 架构(如 POWER8)上启用优化。补丁基于 Gustavo Serra Scalet 的研究。
bpo-18966: 由 multiprocessing.Process 创建的非守护线程现在在子进程退出时被 join。
bpo-31183:
dis现在可以与异步生成器和协程对象一起工作。由 George Collins 提供补丁,基于 Luciano Ramalho 的诊断。bpo-5001: 如问题 5001 所述,
multiprocessing模块中有许多不提供信息的断言。此更改修复了其中两个最有可能造成问题的断言,因为它们位于错误报告代码中,在multiprocessing.managers.convert_to_error函数中。(它还使 ValueError 消息更具信息性。)唯一可能造成问题的变化是 AssertionError 现在是一个 TypeError;然而,这也应该有助于将其与函数/其调用者报告的 AssertionError 区分开来(如问题 31169 中)。 - 由 Allen W. Smith(github 上的 drallensmith)提供补丁。bpo-31185: 修复了 asyncio 加速模块中的杂项错误。
bpo-31151: socketserver.ForkingMixIn.server_close() 现在会等待所有子进程完成,以防止僵尸进程泄漏。
bpo-31072: 向
zipapp.create_archive()添加一个include_file形参。bpo-24700: 优化 array.array 比较。当比较持有相同整数类型值的数组时,现在速度提高了 10 倍到 70 倍。
bpo-31135: ttk:修复LabeledScale和OptionMenu类的destroy()方法。即使使用的属性不存在,也调用父类的destroy()方法。LabeledScale.destroy()方法现在还显式清除了label和scale属性,以帮助垃圾回收器销毁所有小部件。
bpo-31107: 修复
copyreg._slotnames()对于名称以下划线开头的类的损坏属性计算。由Shane Harvey提供补丁。bpo-31080: 允许
logging.config.fileConfig接受kwargs和/或args。bpo-30897:
pathlib.Path对象现在包含一个is_mount()方法(仅在POSIX上实现)。这与os.path.ismount(p)类似。由Cooper Ry Lees提供补丁。bpo-31061: 修复了在使用asyncio和线程时的崩溃问题。
bpo-30987: 在socket模块中增加了对CAN ISO-TP协议的支持。
bpo-30522: 向
logging.StreamHandler添加了一个setStream方法,允许在创建后设置流。bpo-30502: 修复了ssl中长oids的处理。基于Christian Heimes的补丁。
bpo-5288: 支持具有不足一分钟偏移的tzinfo对象。
bpo-30919: 修复了Python 3.x版本中多进程模块(multiprocessing)的共享内存性能回归问题。在Python 2.x中,共享内存使用匿名内存映射实现,而Python 3.x则改为映射实际文件。本次修复尝试尽可能减少磁盘I/O操作以提升性能。
bpo-26732: 修复了使用“forkserver”方法启动的进程中fd过多的问题。子进程会继承与仍在运行的子进程数量一样多的fd。
bpo-29403: 修复``unittest.mock``模块的autospec功能,使其不再对绑定到方法的内置函数报错。由Aaron Gallagher提供补丁。
bpo-30961: 修复了tracemalloc中借用引用的递减问题。
bpo-19896: 修复multiprocessing.sharedctypes以识别类型码
'q'和'Q'。bpo-30946: 移除了readline模块中对于GNU readline版本低于2.1或select()不可用平台的过时代码。
bpo-25684: 修改
ttk.OptionMenu单选按钮,使其在不同OptionMenu实例间保持唯一。bpo-30886: 修复 multiprocessing.Queue.join_thread():现在即使线程是由创建队列的同一进程启动的,它也会等待线程完成。
bpo-29854: 修复使用 readline 的 history-size 选项时 readline 中的段错误。由 Nir Soffer 提供补丁。
bpo-30794: 在 Unix 上添加了 multiprocessing.Process.kill 方法,用于使用 SIGKILL 信号终止。
bpo-30319: socket.close() 现在忽略 ECONNRESET 错误。
bpo-30828: 修复
asyncio.CFuture.remove_done_callback()中的越界写入问题。bpo-30302: 在
datetime.timedelta的repr中使用关键字。bpo-30807: 当传递一个极小的值时,signal.setitimer() 可能会禁用计时器。极小的值(如 1e-6)是 setitimer() 有效的非零值,它被指定为采取微秒级间隔。然而,在某些平台上,我们的转换例程可能将 1e-6 转换为零间隔,从而禁用计时器而不是(重新)调度它。
bpo-30441: 修复在迭代 os.environ 时修改它导致的错误。
bpo-29585: 避免从
site导入sysconfig以提高启动速度。Python 在 Linux 上的启动速度提高了约 5%,在 macOS 上提高了约 30%。bpo-29293: 在 multiprocessing.Condition.notify() 上添加缺失的参数 "n"。文档声称 multiprocessing.Condition 的行为类似于 threading.Condition,但其 notify() 方法缺少 threading.Condition.notify() 接受的 "n" 参数(指定要唤醒的睡眠者数量)。
bpo-30532: 修复电子邮件头值解析器在某些情况下丢弃折叠空白的问题。
bpo-30596: 向
multiprocessing.Process添加一个close()方法。bpo-9146: 修复 _hashopenssl 在链接的 OpenSSL 库中不可用标准哈希函数(如 md5)时的段错误。如在某些特殊的 FIPS-140 构建环境中。
bpo-29169: 将 zlib 更新至 1.2.11。
bpo-30119: ftplib.FTP.putline() 现在会在命令包含 CR 或 LF 时抛出 ValueError。由 Donghee Na 提供补丁。
bpo-30879: os.listdir() 和 os.scandir() 现在在使用字节类参数调用时会发出字节名称。
bpo-30746: 禁止在
os.putenv()和os.spawn*()的环境变量名中使用 '=' 字符。bpo-30664: unittest 子测试的描述现在会保留 TestCase.subTest() 的关键字参数的顺序。
bpo-29212: 修复 concurrent.futures.thread.ThreadPoolExecutor 线程在没有提供 thread_name_prefix 时默认使用非 repr() 基础的线程名。它们现在会自称为 "ThreadPoolExecutor-y_n"。
bpo-29755: 修复了 gettext 模块中的 lgettext() 系列函数。它们现在总是返回字节。
bpo-30616: enum 的功能 API 允许创建空的枚举。由 Donghee Na 提供补丁
bpo-30038: 修复了信号传递和唤醒文件描述符之间的竞争条件。补丁由 Nathaniel Smith 提供。
bpo-23894: lib2to3 现在能识别
rb'...'和f'...'字符串。bpo-24744: pkgutil.walk_packages 函数现在会在 path 是字符串时抛出 ValueError。补丁由 Sanyam Khurana 提供。
bpo-24484: 避免多进程清理中的竞争条件。
bpo-30589: 修复 multiprocessing.Process.exitcode 在使用 "forkserver" 方法时,当进程被信号杀死时返回信号数的相反数(而不是 255)。
bpo-28994: 对于由 atexit 注册的回调中引发的 SystemExit,不再显示回溯。
bpo-30508: 如果调用了 Task/Future 的 "cancel()" 方法,则不记录异常。
bpo-30645: 修复
imp.load_package()中的路径计算,修复了当包仅随字节码提供时的情况。由 Alexandru Ardelean 提供补丁。bpo-11822: dis.dis() 函数现在能够反汇编嵌套的代码对象。
bpo-30624: selectors 没有考虑到 KeyboardInterrupt 和 SystemExit,导致在出错时文件描述符处于不良状态。由 Giampaolo Rodola' 提供补丁。
bpo-30595: multiprocessing.Queue.get() 现在在非阻塞模式下轮询其读取器,如果成功获取锁但获取时间超过了超时时间。
bpo-28556: typing 模块的更新:添加通用的 AsyncContextManager,为所有版本添加对 ContextManager 的支持。原始 PR 由 Jelle Zijlstra 和 Ivan Levkivskyi 提供。
bpo-30605: re.compile() 在编译带有错误放置的内联修饰符的 bytes 实例时不再引发 BytesWarning。由 Roy Williams 提供补丁。
bpo-29870: 修复 asyncio/ssl 实现中当连接被中止时 SSL 套接字的泄漏问题。由 Michaël Sghaïer 提供补丁。
bpo-29743: 在握手过程中关闭传输会导致打开的套接字泄漏。由 Nikolay Kim 提供补丁。
bpo-27585: 修复 asyncio.Lock 中的等待者取消问题。由 Mathieu Sornay 提供补丁。
bpo-30014: selectors 模块中基于 poll()、epoll() 和 devpoll() 的类的 modify() 方法现在快了约 10%。由 Giampaolo Rodola' 提供补丁。
bpo-30418: 在 Windows 上,如果子进程仍在运行但关闭了管道,subprocess.Popen.communicate() 现在也会忽略 stdin.write() 上的 EINVAL。
bpo-30463: 向 abc.ABC 添加了空的 __slots__。这允许子类拒绝 __dict__ 和 __weakref__ 的创建。由 Aaron Hall 提供补丁。
bpo-30520: 现在 Logger 可以被 pickle 序列化。
bpo-30557: faulthandler 现在能够正确过滤和显示 Windows 上的异常代码。
bpo-30526: 添加了 TextIOWrapper.reconfigure() 和 TextIOWrapper.write_through 属性。
bpo-30245: 修复在组织 struct.pack_into 错误消息时可能出现的溢出问题。由 Yuan Liu 提供补丁。
bpo-30378: 修复 logging.handlers.SysLogHandler 无法处理 IPv6 地址的问题。
bpo-16500: 允许注册 at-fork 处理程序。
bpo-30470: 弃用 Windows 上的无效 ctypes 调用保护。由 Mariatta Wijaya 提供补丁。
bpo-30414: multiprocessing.Queue._feed 后台运行线程在异常时不从主循环中中断。
bpo-30003: 修复HZ编解码器中转义字符的处理。基于Ma Lin的补丁。
bpo-30149: inspect.signature() 现在支持带有被partialmethod包装的可变参数参数的可调用对象。由Donghee Na提供补丁。
bpo-30436: 如果指定的父模块不是一个包(即缺少__path__属性),importlib.find_spec() 现在会引发ModuleNotFoundError而不是AttributeError。
bpo-30301: 修复在 spawn 和 forkserver 启动方法下使用SimpleQueue.empty()时的AttributeError。
bpo-30375: 编译正则表达式时发出的警告现在总是指向用户代码中的行。之前如果从组或条件内部发出,它们可能指向re模块的内部。
bpo-30329: imaplib和poplib现在在shutdown(SHUT_RDWR)时捕获Windows socket WSAEINVAL错误(代码10022):尝试了无效操作。此错误有时发生在SSL连接上。
bpo-29196: 移除了plistlib模块中以前在Python 2.4中弃用的类Plist、Dict和_InternalDict。readPlist()和readPlistFromBytes()函数的结果中的Dict值现在是普通的dict。你不能再使用属性访问来访问这些字典的项目。
bpo-9850:
macpath现在已被弃用,并将在Python 3.8中移除。bpo-30299: 在CPython上以调试模式编译正则表达式现在以人类可读的形式显示编译后的字节码。
bpo-30048: 修复了当任务运行协程且协程返回而没有任何更多
await时,``Task.cancel()``可能被忽略的问题。bpo-30266: contextlib.AbstractContextManager现在支持通过设置__enter__ = None或__exit__ = None进行反注册,遵循 bpo-25958 中引入的模式。由Jelle Zijlstra提供补丁。
bpo-30340: 增强正则表达式优化。这使某些模式的匹配性能提高了25倍。
bpo-30298: 放宽内联修饰符的弃用警告条件。现在允许在模式开始处连续使用多个内联修饰符(例如
'(?i)(?s)...')。在详细模式下,现在允许在内联修饰符之前和之间使用空格和注释(例如'(?x) (?i) (?s)...')。bpo-30285: 优化了正则表达式的不区分大小写的匹配和搜索。
bpo-29990: 修复GB18030解码器中的范围检查。原由Ma Lin提供补丁。
bpo-29979: 重写cgi.parse_multipart,重用FieldStorage类,并使其结果与FieldStorage对于multipart/form-data请求的结果一致。由Pierre Quentel提供补丁。
bpo-30243: 移除了_json的扫描器和编码器的__init__方法。误用它们可能导致内存泄漏或崩溃。现在扫描器和编码器对象在__new__方法中完全初始化。
bpo-30215: 使用re.LOCALE标志编译的正则表达式对象不再依赖于编译时的区域设置。只有匹配时的区域设置会影响匹配结果。
bpo-30185: 在收到Ctrl-C时,避免forkserver辅助进程中的KeyboardInterrupt回溯。
bpo-30103: binascii.b2a_uu()和uu.encode()现在支持使用
'`'代替空格作为零。bpo-28556: 对typing模块的各种更新:添加typing.NoReturn类型,使用WrapperDescriptorType,小错误修复。原PR由Jim Fasarakis-Hilliard和Ivan Levkivskyi提供。
bpo-30205: 修复Linux上未绑定的AF_UNIX套接字的getsockname()。
bpo-30228: io.FileIO的seek()和tell()方法现在设置内部seekable属性,以避免在open()时(在缓冲或文本模式下)进行一次系统调用。
bpo-30190: unittest的assertAlmostEqual和assertNotAlmostEqual在失败时提供了更好的消息,包括左右参数的差异。(由Giampaolo Rodola提供补丁)
bpo-30101: 添加对curses.A_ITALIC的支持。
bpo-29822: inspect.isabstract()现在在__init_subclass__期间工作。补丁由Nate Soares提供。
bpo-29960: 当_random.Random.setstate()引发异常时,保留生成器状态。补丁由Bryan Olson提供。
bpo-30070: 修复了解析模块中错误处理的内存泄漏和崩溃问题。
bpo-22352: dis.dis()的输出中的列宽现在针对大行号和指令偏移进行了调整。
bpo-30061: 修复了当readline()或__next__()分别返回不可大小化的对象时,IOBase方法__next__()和readlines()中的崩溃。修复了由不检查PyObject_Size()、PySequence_Size()或PyMapping_Size()的结果可能引起的其他错误。
bpo-30218: 修复了shutil.unpack_archive的PathLike支持。由Jelle Zijlstra提供补丁。
bpo-10076: re模块中的编译正则表达式和匹配对象现在支持copy.copy()和copy.deepcopy()(它们被认为是原子的)。
bpo-30068: 当存在hint时,_io._IOBase.readlines将首先检查是否关闭。
bpo-29694: 修复了pathlib mkdir与flags parents=True时的竞争条件。补丁由Armin Rigo提供。
bpo-29692: 修复了contextlib.contextmanager中RuntimeError异常的任意解链。由Siddharth Velankar提供补丁。
bpo-26187: 测试sqlite3跟踪回调在模式更改时不被多次调用。通过切换到在 bpo-9303 中使用sqlite3_prepare_v2()间接修复。由Aviv Palivoda提供补丁。
bpo-30017: 允许多次调用zip条目写入器对象的close()方法。向已关闭的写入器写入现在总是产生ValueError。
bpo-29998: Pickling和复制ImportError现在保留name和path属性。
bpo-29995: re.escape() 现在仅转义正则表达式特殊字符。
bpo-29962: 添加 math.remainder 操作,实现 IEEE 754 中规定的余数。
bpo-29649: 改进 struct.pack_into() 对于缓冲区大小和偏移量问题的异常消息。由 Andrew Nester 提供补丁。
bpo-29654: 支持 If-Modified-Since HTTP 头部(浏览器缓存)。补丁由 Pierre Quentel 提供。
bpo-29931: 修复了 ipaddress.ip_interface 对象的比较检查。补丁由 Sanjay Sundaresan 提供。
bpo-29953: 修复了当传递超出范围的 fold 参数时,datetime 和 time 对象的 replace() 方法中的内存泄漏问题。
bpo-29942: 修复了在遇到长串空可迭代对象时,itertools.chain.from_iterable 的崩溃问题。
bpo-10030: 通过加密 ZIP 文件的读取速度提高了2倍。
bpo-29204: Element.getiterator() 和 XMLParser() 的 html 参数仅在文档中被弃用(分别自 Python 3.2 和 3.4 起)。现在使用它们会发出弃用警告。
bpo-27863: 修复了由竞争条件和错误类型引起的 ElementTree 中的多个崩溃问题。
bpo-25996: 在 Unix 上添加了对 os.scandir() 中文件描述符的支持。通过使用 os.scandir(),os.fwalk() 的速度提高了2倍。
bpo-28699: 修复了 multiprocessing.pool 中池的一个 bug,即在可迭代对象的最开始引发异常可能会吞掉异常或使程序挂起。由 Davin Potts 和 Xiang Zhang 提供补丁。
bpo-23890: unittest.TestCase.assertRaises() 现在手动打破引用循环,以避免对象存活时间超过预期。
bpo-29901: zipapp 模块现在支持一般的路径类对象,而不仅仅是 pathlib.Path。
bpo-25803: 当操作系统优先考虑如 EACCES 而不是 EEXIST 的错误时,避免 Path.mkdir(exist_ok=True) 引发不正确的错误。
bpo-29861: 在 multiprocessing.Pool 中,任务、它们的参数和结果一旦完成就释放引用。
bpo-19930: os.makedirs()的mode参数不再影响新创建的中间级别目录的文件权限位。
bpo-29884: faulthandler: 在拆卸期间恢复旧的sigaltstack。由Christophe Zeitouny提供补丁。
bpo-25455: 修复了递归缓冲文件类对象repr中的崩溃。
bpo-29800: 修复了如果partial.keywords的键不是字符串时partial.__repr__的崩溃。由Michael Seifert提供补丁。
bpo-8256: 修复了如果sys.stdin或sys.stdout的属性"encoding"或"errors"未设置或不是字符串时可能导致的input()失败或崩溃。
bpo-28692: 现在弃用使用非整数值在gettext中选择复数形式。
bpo-26121: 使用C库实现math函数erf()和erfc()。
bpo-29619: os.stat()和os.DirEntry.inode()现在使用无符号整数转换inode(st_ino)。
bpo-28298: 修复了一个阻止数组'Q'、'L'和'I'接受大整数(具有__int__的对象)作为元素的错误。
bpo-29645: 加快了导入webbrowser模块的速度。webbrowser.register()现在是线程安全的。
bpo-28231: zipfile模块现在接受路径类对象作为外部路径。
bpo-26915: collections.abc.Sequence的index()和count()方法在进行比较时现在在检查相等性之前检查身份。
bpo-28682: 在 os.fwalk() 中添加了对字节路径的支持。
bpo-29728: 添加新的
socket.TCP_NOTSENT_LOWAT(Linux 3.12) 常量。由 Nathaniel J. Smith 提供补丁。bpo-29623: 允许在 ConfigParser.read() 中使用路径类对象作为单一参数。由 David Ellis 提供补丁。
bpo-9303: 将sqlite3模块迁移到 _v2 API。由 Aviv Palivoda 提供补丁。
bpo-28963: 修复了在 C 中实现的 asyncio.Future.remove_done_callback 中的越界迭代。
bpo-29704: asyncio.subprocess.SubprocessStreamProtocol 在所有管道关闭之前不再关闭。
bpo-29271: 修复 Task.current_task 和 Task.all_tasks 在 C 中的实现,使其能够接受 None 参数,如同它们的纯 Python 实现一样。
bpo-29703: 修复 asyncio,支持在子进程中实例化新的事件循环。
bpo-29615: SimpleXMLRPCDispatcher 不再将 KeyError(或任何其他异常)链接到调度方法中引发的异常。由 Petr Motejlek 提供补丁。
bpo-7769: xmlrpc.server.SimpleXMLRPCDispatcher 及其子类的 register_function() 方法现在可以用作装饰器。
bpo-29376: 修复 threading._DummyThread.is_alive() 中的断言错误。
bpo-28624: 添加一个测试,检查 Popen() 的 cwd 参数是否接受 PathLike 对象。由 Sayan Chowdhury 提供补丁。
bpo-28518: 在 DML 语句之前隐式开始一个事务。由 Aviv Palivoda 提供补丁。
bpo-29742: 如果 get_extra_info() 在关闭的 ssl 传输上调用,将引发异常。由 Nikolay Kim 提供补丁。
bpo-16285: urllib.parse.quote 现在基于 RFC 3986,因此默认情况下不引用 '~' 字符。补丁由 Christian Theune 和 Ratnadeep Debnath 提供。
bpo-29532: 修改传递给 functools.partial() 的 kwarg 字典不再影响创建后的 partial 对象。
bpo-29110: 修复 aifc.open() 中当文件作为文件系统路径给出且不是有效的 AIFF 格式时的文件对象泄漏问题。由 Anthony Zhang 提供补丁。
bpo-22807: 添加 uuid.SafeUUID 和 uuid.UUID.is_safe,以传递平台关于生成的 UUID 是否使用多进程安全方法生成的信息。
bpo-29576: 改进了 importlib 中的一些弃用。一些弃用的方法现在会发出 DeprecationWarnings,并有更好的描述性消息。
bpo-29534: 修复了 Decimal.from_float() 在 _decimal 和 _pydecimal 中的不同行为。感谢 Andrew Nester。
bpo-10379: locale.format_string 现在支持 'monetary' 关键字参数,而 locale.format 已被弃用。
bpo-29851: importlib.reload() 现在会在模块缺少 spec 时抛出 ModuleNotFoundError。
bpo-28556: 对 typing 模块进行了多项更新:typing.Counter、typing.ChainMap、改进的 ABC 缓存等。原始 PR 由 Jelle Zijlstra、Ivan Levkivskyi、Manuel Krebber 和 Łukasz Langa 提供。
bpo-29100: 修复了 Python 3.6.0 中引入的 datetime.fromtimestamp() 的回归问题:检查最小和最大年份。
bpo-29416: 防止 pathlib.Path.mkdir 中的无限循环。
bpo-29444: 修复了 match 对象的 group() 方法中的越界缓冲区访问。基于 WGH 的补丁。
bpo-29377: 将 WrapperDescriptorType、MethodWrapperType 和 MethodDescriptorType 内置类型添加到 types 模块。原始由 Manuel Krebber 提供补丁。
bpo-29218: 现在移除了未使用的 install_misc 命令。自 2000 年以来,它已被记录为未使用。由 Eric N. Vander Weele 提供补丁。
bpo-29368: 现在在反序列化 collections.deque 和其他类似列表的对象时,调用 extend() 方法而不是 append() 方法。这可以将反序列化速度提高至 2 倍。
bpo-29338: 现在,如果为类提供了 __text_signature__,内置或扩展类的帮助信息会包括构造函数签名。
bpo-29335: 修复了当子进程已退出到停止状态而不是终止状态(例如:在 ptrace 下)时的 subprocess.Popen.wait()。
bpo-29290: 修复了 argparse 中帮助消息会在非断行空格处换行的回归问题。
bpo-28735: 修复了 mock.MagickMock 与 mock.ANY 的比较。
bpo-29197: 移除了已弃用的函数 ntpath.splitunc()。
bpo-29210: 移除了对 tarfile.TarFile.add() 中已弃用参数 "exclude" 的支持。
bpo-29219: 修复了未初始化的 ctypes.CDLL 实例的 repr 中的无限递归。
bpo-29192: 移除了 http.cookies 模块中已弃用的功能。
bpo-29193: string.Formatter.format() 的格式字符串参数现在仅为位置参数。
bpo-29195: 移除了对正则表达式对象方法中已弃用的未记录关键字参数的支持。
bpo-28969: 修复了functools.lru_cache的C实现中的竞态条件。当缓存函数满时,如果同时从不同线程以相同的未缓存参数调用,可能会引发KeyError。
bpo-20804: unittest.mock.sentinel属性现在在复制或pickle时保持其身份。
bpo-29142: 在urllib.request中,no_proxy环境变量中带有前导点的后缀可以再次匹配相关的主机名(例如.b.c匹配a.b.c)。由Milan Oberkirch提供补丁。
bpo-28961: 修复unittest.mock._Call辅助函数:不再忽略name参数。由Jiajun Huang提供补丁。
bpo-15812: inspect.getframeinfo()现在正确显示上下文的第行。由Sam Breese提供补丁。
bpo-28985: 更新sqlite3模块中的授权者常量。由Dingyuan Wang提供补丁。
bpo-29079: 防止pathlib.resolve()在Windows上陷入无限循环。
bpo-13051: 修复了大型或调整大小的curses.textpad.Textbox中的递归错误。基于Tycho Andersen的补丁。
bpo-9770: curses.ascii谓词现在正确处理负整数。
bpo-28427: 当从另一个线程收集时,旧键不应从WeakValueDictionary中移除新值。
bpo-28923: 从Tix.py中移除编辑器工件。
bpo-28871: 修复了在深度ElementTree释放时的崩溃。
bpo-19542: 修复WeakValueDictionary.setdefault()和WeakValueDictionary.pop()中的bug,这些bug在另一个线程发生GC收集时出现。
bpo-20191: 修复了resource.prlimit()中的崩溃,当传递一个不拥有其元素的序列作为限制时。
bpo-16255: subprocess.Popen在Android上使用/system/bin/sh作为shell,而不是/bin/sh。
bpo-28779: 如果预加载的模块实例化了某些多处理对象(如锁),multiprocessing.set_forkserver_preload()会使forkserver进程崩溃。
bpo-26937: tarfile.TarFile 类的 chown() 方法现在在无法导入 grp 模块时不会失败,例如在 Android 平台上。
bpo-28847: dbm.dumb 现在支持读取只读文件,并且在索引文件未更改时不再写入。如果在 'r' 和 'w' 模式下索引文件丢失并重新创建,现在会发出弃用警告(在未来的 Python 版本中将会是错误)。
bpo-27030: 在 re.sub() 替换模板正则表达式中,由
'\'和一个 ASCII 字母组成的未知转义现在会引发错误。bpo-28835: 修复了 warnings.catch_warnings() 中引入的一个回归问题:如果在上下文管理器内部覆盖了 warnings.showwarning(),则调用它。
bpo-27172: 为了协助从 2.7 版本升级,之前文档中关于
inspect.getfullargspec()的弃用已被撤销。在 Python 2.7 分支不再官方支持后,可能会重新考虑这一决定。bpo-28740: 添加 sys.getandroidapilevel():返回 Android 的构建时 API 版本作为整数。此函数仅在 Android 上可用。
bpo-26273: 新增
socket.TCP_CONGESTION(Linux 2.6.13) 和socket.TCP_USER_TIMEOUT(Linux 2.6.37) 常量。补丁由 Omar Sandoval 编写。bpo-28752: 恢复了 datetime 对象的 __reduce__() 方法。
bpo-28727: 正则表达式模式,由 re.compile() 创建的 _sre.SRE_Pattern 对象,现在可以比较(仅限 x==y 和 x!=y 操作符)。这一更改应该修复了 bpo-18383:当 warnings 模块重新加载时不要重复警告过滤器(通常只在单元测试中这样做)。
bpo-20572: 移除了 subprocess.Popen.wait 的 endtime 参数。它在 3.4 版本中被弃用,在此之前也未在文档中记录。
bpo-25659: 在 ctypes 中,防止在抽象类(如 Array)上调用 from_buffer() 和 from_buffer_copy() 方法时崩溃。
bpo-28548: 在"http.server"模块中,尽可能解析协议版本,以避免在某些错误响应中使用HTTP 0.9。
bpo-19717: 使Path.resolve()在不存在的路径上也能成功。由Vajrasky Kok提供补丁。
bpo-28563: 修复了在gettext模块中处理复数形式选择时可能导致的DoS和任意代码执行问题。表达式解析器现在支持GNU gettext所支持的精确语法。
bpo-28387: 修复了当垃圾收集器在其他线程中调用时,_io.TextIOWrapper解构器可能崩溃的问题。基于Sebastian Cufre的补丁。
bpo-27517: LZMA压缩器和解压器在两次接收到空数据时不再抛出异常。补丁由Benjamin Fogle提供。
bpo-28549: 修复了curses的addch()在使用ncurses6时的段错误。
bpo-28449: tarfile.open()以模式"r"或"r:"现在会先尝试以压缩方式打开tar文件,再尝试无压缩方式打开。否则在使用ignore_zeros=True时有50%的几率失败。
bpo-23262: webbrowser模块现在支持Firefox 36+及衍生浏览器。基于Oleg Broytman的补丁。
bpo-24241: 在X环境下,webbrowser现在更倾向于直接使用默认浏览器。此外,webbrowser的register()函数现在有一个文档化的'preferred'参数,用于指定无参数调用get()时返回的浏览器。补丁由David Steele提供。
bpo-27939: 修复了tkinter.ttk.LabeledScale和tkinter.Scale中由于在Tk内部将比例表示为浮点值而导致的错误。如果底层Tk变量设置为浮点值,tkinter.IntVar现在可以正常工作。
bpo-28255: calendar.TextCalendar.prweek()不再在周历后打印空格。calendar.TextCalendar.pryear()不再在年历后打印多余的换行符。基于Xiang Zhang的补丁。
bpo-28255: calendar.TextCalendar.prmonth()在打印月历后的新行开头不再打印空格。由Xiang Zhang提供补丁。
bpo-20491: textwrap.TextWrapper 类现在支持不换行空格。基于 Kaarle Ritvanen 的补丁。
bpo-28353: os.fwalk() 不再因损坏的链接而失败。
bpo-28430: 修复了 C 实现的 asyncio.Future 迭代器不接受非 None 值传递给 it.send(val) 的问题。
bpo-27025: 为提升可读性,Tkinter 部件的生成名称现在以 "!" 前缀开头。
bpo-25464: 通过为 Tix 库的 bug 添加变通方法,修复了 tkinter.tix 模块中的 HList.header_exists()。
bpo-28488: shutil.make_archive() 不再向 ZIP 归档添加 "./" 条目。
bpo-25953: re.sub() 现在即使在字符串中未找到模式,也会为替换模板中的无效数字组引用引发错误。无效组引用的错误消息现在包括组索引和引用的位置。基于 SilentGhost 的补丁。
bpo-28469: timeit 现在使用 1, 2, 5, 10, 20, 50,... 序列代替 1, 10, 100,... 进行自动范围调整。
bpo-28115: zipfile 模块的命令行界面现在使用 argparse。添加了对长选项的支持。
bpo-18219: 为大量列优化 csv.DictWriter。Mariatta Wijaya 的补丁。
bpo-28448: 修复了 C 实现的 asyncio.Future 在 Windows 上不工作的问题。
bpo-23214: 在 "io" 模块中,BufferedReader 和 BytesIO 的 read1() 方法的参数现在是可选的,并且可以是 -1,以匹配 BufferedIOBase 的规范。
bpo-28480: 修复在禁用多线程时构建 socket 模块时的错误。
bpo-28240: timeit: 移除自 Python 3.3 以来已弃用的
-c/--clock和-t/--time命令行选项。bpo-28240: timeit 现在将基准测试重复 5 次而非仅 3 次,以使基准测试更加可靠。
bpo-28240: 如果基准测试耗时少于 10 秒,timeit 自动范围调整现在使用单次循环迭代而非 10 次迭代。"python3 -m timeit -s 'import time' 'time.sleep(1)'" 现在耗时 4 秒而非 40 秒。
Distutils.sdist 现在对 README 和 setup.py 文件的查找区分大小写。这一行为与 Setuptools 6.0 及以后版本中的行为一致。理由参见 setuptools 100。
bpo-24452: 使 webbrowser 支持 Mac OS X 上的 Chrome。由 Ned Batchelder 提供补丁。
bpo-20766: 修复了 pdb 在处理 SIGINT 处理器时的引用泄漏问题。
bpo-27998: 修复了 Windows 上 os.scandir() 对字节路径的支持。由 Eryk Sun 提供补丁。
bpo-28317: 反汇编器现在解码 FORMAT_VALUE 参数。
bpo-28380: unittest.mock 的 Mock autospec 函数现在正确支持 assert_called、assert_not_called 和 assert_called_once。
bpo-28229: lzma 模块现在支持 pathlib。
bpo-28321: 修复了在 plistlib 中使用二进制格式写入非 BMP 字符的问题。
bpo-28225: bz2 模块现在支持 pathlib。初始由 Ethan Furman 提供补丁。
bpo-28227: gzip 现在支持 pathlib。由 Ethan Furman 提供补丁。
bpo-28332: 弃用了 socket.htons 和 socket.ntohs 中的静默截断。原始由 Oren Milman 提供补丁。
bpo-27358: 优化了合并可变关键字参数的过程,并改进了当传递非映射作为可变关键字参数时的错误信息。
bpo-28257: 改进了当传递非可迭代对象作为可变位置参数时的错误信息。添加了操作码 BUILD_TUPLE_UNPACK_WITH_CALL。
bpo-28322: 修复了当从错误的 pickle 数据反序列化 itertools 对象时可能发生的崩溃。基于 John Leitch 的补丁。
bpo-28228: imghdr 现在支持 pathlib。
bpo-28226: compileall 现在支持 pathlib。
bpo-28314: 修复了 xml.etree.ElementTree.Element 的 getiterator() 方法的函数声明(C 标志)。
bpo-28148: 停止在 time 模块中使用 localtime() 和 gmtime()。引入了平台无关的 _PyTime_localtime API,该 API 类似于 POSIX 的 localtime_r,但在所有平台上都可用。由 Ed Schouten 提供补丁。
bpo-28253: 修复了极端月份(0001-01和9999-12)的日历功能。重新实现了itermonthdays()和itermonthdays2()方法,使其不再调用可能导致datetime.date下溢/溢出的itermonthdates()。
bpo-28275: 修复了LZMADecompressor和BZ2Decompressor类中decompress()方法可能存在的释放后使用问题。原始由John Leitch提供补丁。
bpo-27897: 修复了如果传递无效的字符串类似对象作为名称时,sqlite3.Connection.create_collation()可能崩溃的问题。由Xiang Zhang提供补丁。
bpo-18844: random.choices()现在将k作为仅关键字参数,以提高常见情况的可读性,并与其他语言中使用的签名保持一致。
bpo-18893: 修复了Lib/ctypes/macholib/dyld.py中无效的异常处理。由Madison May提供补丁。
bpo-27611: 修复了tkinter.tix模块中对默认根窗口的支持。在DisplayStyle构造函数中添加了master参数。
bpo-27348: 在traceback模块中,恢复了类似于"Exception: None"的异常消息的格式化。这修复了3.5a2中引入的回归问题。
bpo-25651: 允许在subTest()的msg参数中使用假值。
bpo-27778: 修复了当getrandom()被信号中断且信号处理程序引发Python异常时,os.getrandom()中的内存泄漏问题。
bpo-28200: 修复了Windows上os模块中的内存泄漏问题(修复了path_converter()函数)。
bpo-25400: RobotFileParser现在正确返回crawl_delay和request_rate的默认值。初始由Peter Wirtz提供补丁。
bpo-27932: 防止win32_ver()中的内存泄漏。
修复socket._sendfile_use_sendfile中的UnboundLocalError。
bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。
bpo-22493: 现在,通过在正则表达式中间使用内联标志发出的警告消息包含(截断的)正则表达式模式。由Tim Graham提供补丁。
bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。
bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。
bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。
bpo-28114: 修复当env包含字节字符串时parse_envlist()崩溃的问题。由Eryk Sun提供补丁。
bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。
bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。
bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。
bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。
bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。
bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。
bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。
bpo-28325: 移除遗留的MacOS 9 macurl2path模块及其测试。
bpo-28368: 如果子监视器没有附加循环,则拒绝监视进程。由Vincent Michel提供补丁。
bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。
bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。
bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。
bpo-28372: 修复asyncio以支持非python协程的格式化。
bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。
bpo-27972: 禁止Tasks等待自身。
bpo-24142: 读取损坏的配置文件会使configparser处于无效状态。原始补丁由Florian Höch提供。
bpo-29581: ABCMeta.__new__现在接受
**kwargs,允许抽象基类在__init_subclass__中使用关键字参数。由Nate Soares提供补丁。bpo-25532: inspect.unwrap()现在只会尝试解包对象sys.getrecursionlimit()次,以防止在每次属性访问时创建新对象的对象。
bpo-30177: path.resolve(strict=False)不再在文件系统中不存在的第一个元素后截断路径。补丁由Antoine Pietri提供。
文档¶
bpo-31294: 修复ZeroMQSocketListener和ZeroMQSocketHandler示例中的不完整代码片段,并将它们适配到Python 3。
bpo-21649: 在SSL文档中添加RFC 7525和Mozilla服务器端TLS链接。
bpo-31128: 允许pydoc服务器绑定到任意主机名。
bpo-30803: 澄清关于真值测试的文档。原始由Peter Thomassen提供补丁。
bpo-30176: 在curses文档中添加缺失的属性相关常量。
bpo-30052:
bytes()和bytearray()的链接目标现在是它们各自的类型定义,而不是相应的内置函数条目。使用 bytes 和 bytearray 来引用后者。为了确保这一及未来的交叉引用更新能自动应用,每日文档构建现在禁用了Sphinx中的默认输出缓存功能。bpo-26985: 在inspect文档中添加缺失的代码对象信息。
bpo-19824: 通过强调模板字符串在国际化中的实用性,并澄清一些使用限制,改进模板字符串的文档和链接。(另见 : bpo-20314, bpo-12518)
bpo-28929: 将文档链接到其在GitHub上的源文件。
bpo-25008: 将smtpd.py文档标记为实际上已弃用,并添加指向aiosmtpd的指针,这是一个基于asyncio的第三方替代品。
bpo-26355: 在每个页面上添加指向相应主要版本文档的规范头部链接。由Matthias Bussonnier提供补丁。
bpo-29349: 修复构建文档代码中的Python 2语法。
bpo-23722: 3.6 新特性指南中的数据模型参考和移植部分现在涵盖了自定义元类为实现完全支持 PEP 487 和无参数
super()所需的额外__classcell__处理。bpo-28513: 记录了 zipfile 的命令行接口。
测试¶
bpo-29639: test.support.HOST 现在是 "localhost",新增了一个 HOSTv4 常量用于满足
127.0.0.1的需求,类似于现有的 HOSTv6 常量。bpo-31320: 在 test_ssl 中静默回溯。
bpo-31346: 对于 SSLContext,优先使用 PROTOCOL_TLS_CLIENT 和 PROTOCOL_TLS_SERVER 协议。
bpo-25674: 移除 sha256.tbs-internet.com 的 ssl 测试。
bpo-30715: 处理 OpenSSL 1.1.0f 的 ALPN 回调变更。最新版本的行为类似于 OpenSSL 1.0.2,不再中止握手。
bpo-30822: regrtest: 从 regrtest --all 中排除 tzdata。当使用 --use=all / -u all 运行测试套件时,排除 tzdata,因为它会使 test_datetime 变得太慢(在某些构建机器人上需要 15-20 分钟),从而导致某些构建机器人超时。同时修复 regrtest 命令行解析器,允许传递 -u extralargefile 来运行 test_zipfile64。
bpo-30695: 向
_testcapi模块添加了set_nomemory(start, stop)和remove_mem_hooks()函数。bpo-30357: test_thread: setUp() 现在使用 support.threading_setup() 和 support.threading_cleanup() 来等待线程完成,以避免对后续测试产生随机副作用。初始补丁由 Grzegorz Grzywacz 编写。
bpo-30197: 增强了 test.support 模块中的 swap_attr() 和 swap_item() 函数。它们现在可以在 with 语句内部删除替换的属性或项目时工作。属性或项目的旧值(如果不存在则为 None)现在将被赋值给 "as" 子句的目标,如果有的话。
bpo-24932: 在 _testembed 中使用正确的命令行解析。
bpo-28950: 在 regrtest 命令行参数中禁止将 -j0 与 -T/-l 结合使用。
bpo-28683: 修复在Android上为非root用户绑定Unix socket并引发PermissionError的测试。
bpo-26936: 修复Android上的test_socket失败 - getservbyname()、getservbyport()和getaddrinfo()在某些Android API级别上被破坏。
bpo-28666: 现在test.support.rmtree能够删除不可写或不可读的目录。
bpo-23839: 现在在运行每个测试文件之前清除各种缓存。
bpo-26944: 修复Android上的test_posix,其中'id -G'完全错误或缺少有效的gid。
bpo-28409: regrtest: 修复命令行参数的解析器。
bpo-28217: 添加_testconsole模块以测试控制台输入。
bpo-26939: 添加support.setswitchinterval()函数以修复在Android armv7 qemu模拟器上挂起的test_functools。
构建¶
bpo-31354: 允许
--with-lto用于所有构建,而不仅仅是make profile-opt。bpo-31370: 移除对构建--without-threads的支持。在21世纪,这个选项已经不再真正有用。移除大量条件路径允许我们简化代码库,包括难以维护的低级内部代码。
bpo-30854: 修复编译--without-threads时的编译错误。由Masayuki Yamamoto提供补丁。
bpo-30687: 在Windows上构建时定位msbuild.exe而不是vcvarsall.bat。
bpo-20210: 支持Setup文件中的 disabled 标记。在此标记之后列出的扩展模块完全不被构建,无论是通过Makefile还是setup.py。
bpo-29941: 添加
--with-assertions配置标志以明确启用Cassert()检查。默认为关闭。--with-pydebug``意味着 ``--with-assertions。bpo-28787: 修复使用
--with--dtrace配置时Python的树外构建。bpo-29243: 在配置为
--enable-optimizations时,防止在make test、``make install``和一些其他make目标期间不必要的Python重新构建。bpo-23404: 不再基于文件修改时间重新生成已生成的文件:该操作现在是显式的。用``make regen-all``替换
make touch。bpo-29643: 修复
--enable-optimization不起作用的问题。bpo-27593: 当从仓库构建时,sys.version和platform模块的python_build()、python_branch()和python_revision()函数现在使用git信息而不是hg。
bpo-29572: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2k。
bpo-27659: 禁止隐式C函数声明:在可能的情况下使用``-Werror=implicit-function-declaration`` (GCC和Clang,但这取决于编译器版本) 。补丁由Chi Hsuan Yen编写。
bpo-29384: 移除旧的Be OS辅助脚本。
bpo-26851: 设置Android编译和链接标志。
bpo-28768: 修复函数_setmode的隐式声明。由Masayuki Yamamoto提供补丁
bpo-29080: 从PCBuild/build.bat中移除对hg.exe的硬依赖
bpo-23903: 向PC/python3.def添加遗漏的名称。
bpo-28762: lockf()在Android API level 24上可用,但F_LOCK宏在android-ndk-r13中未定义。
bpo-28538: 修复因if_nameindex()在Android API level 24上可用但if_nameindex结构未定义而导致的编译错误。
bpo-20211: 不要将安装C头文件的目录和安装对象代码库的目录添加到交叉编译搜索路径中。原始由Thomas Petazzoni提供补丁。
bpo-28849: 不要在Android上定义sys.implementation._multiarch。
bpo-10656: 修复AIX上的树外构建。由Tristan Carel和Michael Haubenwallner提供补丁。
bpo-26359: 将--with-optimiations重命名为--enable-optimizations。
bpo-28444: 修复交叉编译时缺少扩展模块的问题。
bpo-28208: 更新Windows构建和OS X安装程序以使用SQLite 3.14.2。
bpo-28248: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2j。
bpo-21124: 通过在PyVarObject_HEAD_INIT中传递
NULL而不是&PyType_Type修复在Cygwin上构建_struct模块的问题。由Masayuki Yamamoto提供补丁。bpo-13756: 修复在Cygwin上构建扩展模块的问题。由Roumen Petrov提供补丁,基于Jason Tishler的原始补丁。
bpo-21085: 添加对siginfo_t.si_band的配置检查,Cygwin不提供此功能。由Masayuki Yamamoto提供补丁,Erik Bray进行审查和重新基于。
bpo-28258: 修复了在爱沙尼亚语言环境下构建的问题(Makefile中的python-config和distclean目标)。由Arfrever Frehtes Taifersar Arahesis提供补丁。
bpo-26661: setup.py现在可以检测到带有multiarch包装的系统libffi。
bpo-27979: 不再为在非OSX UNIX平台上构建_ctypes捆绑libffi的完整副本。现在在这样的平台上构建_ctypes需要安装libffi。
bpo-15819: 移除了为在源码树外构建而冗余的包含搜索目录选项。
bpo-28676: 防止在macOS上出现缺失'getentropy'声明的警告。由Gareth Rees提供补丁。
Windows¶
bpo-31392: 更新Windows构建以使用OpenSSL 1.1.0f。
bpo-30389: 在Windows上的distutils中添加对Visual Studio 2017的检测。
bpo-31358: zlib不再捆绑在CPython源代码中,而是像bz2、lzma、OpenSSL、Tcl/Tk和SQLite一样按需下载。
bpo-31340: 更改为使用MSVC v141(包含在Visual Studio 2017中)构建。
bpo-30581: os.cpu_count()现在在Windows上当逻辑处理器数量大于64时返回正确的处理器数量。
bpo-30916: 预构建OpenSSL、Tcl和Tk,并将二进制文件包含在构建中。
bpo-30731: 向python.manifest添加缺失的xmlns,以使其匹配模式。
bpo-30291: 允许使用-64后缀从py.exe要求64位解释器。由Steve (Gadget) Barnes贡献。
bpo-30362: 向py.exe启动器添加列表选项(-0, -0p)。由Steve Barnes贡献。
bpo-23451: 修复 socketmodule.c 中的 socket 弃用警告。由 Segev Finer 提供补丁。
bpo-30450: Windows 上的构建过程不再依赖于 Subversion,而是通过 Python 脚本从 GitHub 拉取外部代码。如果系统中未找到 Python 3.6(通过
py -3.6),则使用 NuGet 下载 32 位 Python 的副本。bpo-29579: 从安装程序中移除 readme.txt。
bpo-25778: winreg 未正确截断字符串(由 Eryk Sun 提供补丁)
bpo-28896: 弃用 WindowsRegistryFinder 并默认禁用它
bpo-28522: 修复 getpathp.c 中错误处理的缓冲区重新分配
bpo-28402: 为 Windows 上的标准库添加签名目录文件。
bpo-28333: 为 ps1/ps2 和 input() 提示启用 Unicode。(由 Eryk Sun 提供补丁)
bpo-28251: 改进 Windows 上的帮助手册。
bpo-28110: launcher.msi 在 32 位和 64 位之间有不同的产品代码
bpo-28161: 以写权限打开 CON 失败
bpo-28162: 如果第一行以 Ctrl+Z 开头,WindowsConsoleIO readall() 失败
bpo-28163: WindowsConsoleIO fileno() 将错误的标志传递给 _open_osfhandle
bpo-28164: 对于各种路径,_PyIO_get_console_type 失败
bpo-28137: 将 Windows 路径文件重命名为 ._pth
bpo-28138: Windows ._pth 文件应允许导入站点
IDLE¶
bpo-31493: IDLE 代码上下文——修复代码更新和字体更新计时器。取消计时器可以防止 test_idle 完成时出现警告消息。
bpo-31488: IDLE - 更新前扩展类中的非键选项。应用配置对话框更改时,为每个特性类调用 .reload。更改 ParenMatch,使更新的选项影响附加到现有编辑器窗口的现有实例。
bpo-31477: IDLE - 改进文档中的 rstrip 条目。剥离尾随空白会剥离比空格更多的内容。多行字符串文字不被跳过。
bpo-31480: IDLE - 使测试在默认禁用 zzdummy 扩展的情况下通过。
bpo-31421: 文档说明IDLE如何运行tkinter程序。IDLE在后台调用tcl/tk更新,以使与tkinter应用程序的实时交互和实验更加容易。
bpo-31414: IDLE -- 通过首先删除来修复tk输入框测试。向整数输入框中添加内容与删除并插入不同,因为int('')会失败。
bpo-31051: 将IDLE的configdialog GenPage重新排列为窗口、编辑器和帮助部分。
bpo-30617: IDLE - 为outwin子类添加文档字符串和测试,这是editor的子类。将一些数据和函数从类移到模块级别。由Cheryl Sabella提供补丁。
bpo-31287: IDLE - 在test_configdialog中不要修改tkinter.message。
bpo-27099: 将IDLE的内置'extensions'转换为常规功能。大约10个IDLE功能作为所谓的可选扩展实现。它们的不同行为可能会让用户感到困惑或更糟,对维护也不利。因此进行了转换。对用户的主要区别是,现在对内置功能的用户可配置键绑定的处理是统一的。现在,编辑键集中的绑定只会影响其在键集中的值。所有绑定都在config-extensions.def中系统特定的默认键集中一起定义。所有自定义键集作为一个整体保存在config-extension.cfg中。所有更改在点击Apply或Ok后立即生效。受影响的事件有'<<force-open-completions>>', '<<expand-word>>', '<<force-open-calltip>>', '<<flash-paren>>', '<<format-paragraph>>', '<<run-module>>', '<<check-module>>', 和'<<zoom-height>>'。任何在3.6.3之前进行的(全局)自定义将不会影响到3.6.3之后的键集特定自定义,反之亦然。初始由Charles Wohlganger提供补丁。
bpo-31206: IDLE: 从ConfigDialog中提取HighPage(Frame)类。由Cheryl Sabella提供补丁。
bpo-31001: 为configdialog高亮标签添加测试。由Cheryl Sabella提供补丁。
bpo-31205: IDLE:从ConfigDialog中提取KeysPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。
bpo-31130: IDLE -- 修复test_configdialog中的内存泄漏。初始由Victor Stinner提供补丁。
bpo-31002: 为configdialog的keys标签页添加测试。由Cheryl Sabella提供补丁。
bpo-19903: IDLE:使用
inspect.signature代替inspect.getfullargspec生成调用提示。这将改进使用Argument Clinic转换的内置函数的调用提示。由Louie Lu提供补丁。bpo-31083: IDLE - 在configdialog中添加TabPage类的概要。更新现有类以匹配概要。初始补丁由Cheryl Sabella提供。
bpo-31050: 从ConfigDialog中提取GenPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。
bpo-31004: IDLE - 从ConfigDialog中提取FontPage(Frame)类。经过轻微修改的测试仍然通过。修复通用测试。补丁主要由Cheryl Sabella提供。
bpo-30781: IDLE - 在ConfigDialog中使用ttk部件。由Terry Jan Reedy和Cheryl Sabella提供补丁。
bpo-31060: IDLE - 完成ConfigDialog中方法的重新排列。将与每个标签页和按钮相关的方法分组有助于编写测试和改进标签页,并将使这些组能够分割成类。
bpo-30853: IDLE -- 从ConfigDialog中提取VarTrace类。实例跟踪器管理由tk变量和回调函数组成的对。当跟踪开启时,设置变量会调用函数。新类的测试覆盖率为100%。
bpo-31003: IDLE:为通用标签页添加更多测试。
bpo-30993: IDLE - 改进配置对话框字体页面及测试。在配置对话框中:在create_font_tab文档字符串中记录因果路径。简化一些属性名称。将set_samples调用移至var_changed_font(来自Cheryl Sabella的想法)。将相关函数移动到创建小部件函数之后的位置。在test_configdialog中:修复test_font_set使其不依赖于顺序。修复重命名的test_indent_scale以测试小部件。调整测试以适应set_samples调用的移动。为加载函数添加测试。将所有字体测试放在一个类中,将标签缩进测试放在另一个类中。除了两行代码外,这些测试完全覆盖了相关函数。
bpo-30981: IDLE -- 为配置对话框字体页面添加更多测试。
bpo-28523: IDLE:在配置对话框中将'colour'替换为'color'。
bpo-30917: 为idlelib.config.IdleConf添加测试。将覆盖率从46%提高到96%。由Louie Lu提供补丁。
bpo-30934: 记录idlelib测试的覆盖率详情。在idlelib/idle-test/README.txt中添加部分内容。包括检查分支是否双向执行。排除在单元测试期间不运行的IDLE特定代码。
bpo-30913: IDLE:在文档字符串中记录ConfigDialog的tk变量、方法和部件。这将有助于改进对话框和分割类。原始由Cheryl Sabella提供补丁。
bpo-30899: IDLE:为config中的ConfigParser子类添加测试。由Louie Lu提供补丁。
bpo-30881: IDLE:为browser.py添加文档字符串。由Cheryl Sabella提供补丁。
bpo-30851: IDLE:移除configdialog中未使用的变量。一个是重复的,一个是设置但用户无法更改的。由Cheryl Sabella提供补丁。
bpo-30870: IDLE:在设置对话框中,使用上下键以及鼠标选择字体。初始由Louie Lu提供补丁。
bpo-8231: IDLE:仅调用config.IdleConf.GetUserCfgDir一次。
bpo-30779: IDLE:从configdialog中提取ConfigChanges类,放入config;测试。* 在config中,将转储测试代码放入一个函数;运行它和'unittest'在'if __name__ == '__main__'中。* 基于bpo问题上的changes_class_v4.py添加config.ConfigChanges类。* 添加test_config.ChangesTest类,部分使用configdialog_tests_v1.py。* 修改configdialog以使用ConfigChanges;参见tracker msg297804。* 修改test_configdialog以匹配configdialog的更改。* 移除未使用或已移至ConfigChanges的configdialog函数。Cheryl Sabella贡献了部分补丁。
bpo-30777: IDLE:configdialog - 添加文档字符串并修复注释。由Cheryl Sabella提供补丁。
bpo-30495: IDLE:通过添加文档字符串、PEP8命名和更多测试来改进textview。由Cheryl Sabella提供补丁。
bpo-30723: IDLE:对parenmatch进行多项改进。添加'parens'风格以同时高亮开启和关闭符号。使'default'风格(非默认)成为'opener'的同义词。使时间延迟在所有风格中工作方式相同。为配置对话框扩展标签添加帮助,包括parenmatch的帮助。添加新测试。原始补丁由Charles Wohlganger提供。
bpo-30674: IDLE:向grep模块添加文档字符串。由Cheryl Sabella提供补丁。
bpo-21519: IDLE的基本自定义键输入对话框现在能正确检测重复项。原始由Saimadhav Heblikar提供补丁。
bpo-29910: IDLE不再通过快捷键注释掉一个区域后删除一个字符。为此添加 ``return 'break'``以及IDLE和默认键绑定之间的其他潜在冲突。
bpo-30728: 审查并更改idlelib.configdialog的名称。将方法和属性名称小写。将'colour'替换为'color',扩展过于隐晦的名称,删除不需要的下划线。用特定的导入替换
import *。由Cheryl Sabella提供补丁。bpo-6739: IDLE:通过尝试用tk绑定用户输入的键序列来验证它们。为所有3个验证函数添加测试。原始由G Polo提供补丁。测试由Cheryl Sabella添加。
bpo-15786: 修复IDLE自动完成框的几个问题。现在以下功能应该可以正常工作:点击选择框中的项目;使用滚动条;通过按回车键选择项目。MacOSX上的挂起问题应该不会再发生。补丁由Louie Lu提供。
bpo-25514: 添加关于IDLE启动失败的文档子节。无连接弹出消息会引导用户查看此部分。
bpo-30642: 修复IDLE测试中的引用泄露。由Louie Lu和Terry Jan Reedy提供补丁。
bpo-30495: 为textview.py添加文档字符串并使用PEP8命名。由Cheryl Sabella和Terry Jan Reedy提供补丁。
bpo-30290: 帮助-关于:使用pep8命名并添加测试。将覆盖率提高到100%。由Louie Lu、Cheryl Sabella和Terry Jan Reedy提供补丁。
bpo-30303: 向textview添加_utest选项;添加新测试。将覆盖率提高到100%。由Louie Lu和Terry Jan Reedy提供补丁。
bpo-29071: IDLE为f-字符串前缀着色(但不包括无效的ur前缀)。
bpo-28572: 将IDLE的test_configdialog覆盖率提高10%。更新并增强配置系统的描述。
工具/示例¶
bpo-30983: gdb集成命令(py-bt等)现在也可以在优化的共享构建上工作了。PEP 523 引入了_PyEval_EvalFrameDefault,它在非调试共享构建上内联了PyEval_EvalFrameEx。这破坏了使用py-bt、py-up和其他一些Python特定的gdb集成的能力。问题通过在python-gdb.py中仅查找_PyEval_EvalFrameDefault帧来修复。原始由Bruno "Polaco" Penteado提供补丁。
bpo-29748: 在Argument Clinic中添加了切片索引转换器。
bpo-24037: Argument Clinic现在使用转换器
bool(accept={int})而不是int来表示语义布尔值。这避免了为Python和C重复默认值,并将有助于未来转换为bool。bpo-29367: python-gdb.py现在也支持
method-wrapper(wrapperobject) 对象。bpo-28023: 修复python-gdb.py不支持新字典实现的问题。
bpo-15369: pybench和pystone微基准测试已从Tools中移除。请使用新的Python基准测试套件https://github.com/python/pyperformance,它更可靠,并包含一个可在Python 2和Python 3上工作的pybench便携版本。
bpo-28102: zipfile模块的CLI现在将用法打印到stderr。由Stephen J. Turnbull提供补丁。
C API¶
bpo-31338: 添加了
Py_UNREACHABLE()宏,用于永远不会预期到达的代码路径。这个和其他一些有用的宏现在已在C API手册中记录。bpo-30832: 移除了线程本地存储的自实现。CPython在Python/thread.c中提供了线程本地存储(TLS)的自实现,用于平台没有提供原生TLS的情况。然而,当前所有支持的平台(Windows和pthreads)都已提供原生TLS,并且在任何情况下都无条件定义了Py_HAVE_NATIVE_TLS宏。
bpo-30708: 如果第二个参数为NULL且wchar_t*字符串包含空字符,PyUnicode_AsWideCharString()现在会引发ValueError。
bpo-16500: 弃用PyOS_AfterFork()并添加PyOS_BeforeFork()、PyOS_AfterFork_Parent()和PyOS_AfterFork_Child()。
bpo-6532: PyThread_start_new_thread()和PyThread_get_thread_ident()的结果类型,以及PyThreadState_SetAsyncExc()的id参数类型从"long"改为"unsigned long"。
bpo-27867: 函数PySlice_GetIndicesEx()被弃用,如果Py_LIMITED_API未设置或设置为0x03050400到0x03060000(不包括)或0x03060100或更高的值,则替换为宏。添加了函数PySlice_Unpack()和PySlice_AdjustIndices()。
bpo-29083: 修正了一些公共API函数的声明。PyArg_VaParse()和PyArg_VaParseTupleAndKeywords()在有限API中不可用。当定义了PY_SSIZE_T_CLEAN时,PyArg_ValidateKeywordArguments()、PyArg_UnpackTuple()和Py_BuildValue()在版本<3.3的有限API中不可用。
bpo-28769: PyUnicode_AsUTF8AndSize() 和 PyUnicode_AsUTF8() 的结果现在是
const char *类型,而不是char *。bpo-29058: 所有在 Python 3.2 之后添加的稳定 API 扩展现在只有在 Py_LIMITED_API 设置为支持此 API 的最低 Python 版本的 PY_VERSION_HEX 值时才可用。
bpo-28822: PyUnicode_FindChar() 的索引参数 start 和 end 现在被调整为像
str[start:end]一样行为。bpo-28808: PyUnicode_CompareWithASCIIString() 现在永远不会引发异常。
bpo-28761: 结构体 PyMemberDef、PyGetSetDef、PyStructSequence_Field、PyStructSequence_Desc 和 wrapperbase 的字段 name 和 doc 现在是
const char *类型,而不是char *。bpo-28748: 私有变量 _Py_PackageContext 现在是
const char *类型,而不是char *。bpo-19569: 如果使用大多数已弃用的函数,现在会发出编译器警告。
bpo-28426: 已弃用未记录的函数 PyUnicode_AsEncodedObject()、PyUnicode_AsDecodedObject()、PyUnicode_AsDecodedUnicode() 和 PyUnicode_AsEncodedUnicode()。
Python 3.6.6 正式版¶
发布日期: 2018-06-27
在 3.6.6 版本中没有新的更改。
Python 3.6.6 rc1¶
发布日期: 2018-06-11
核心与内置函数¶
bpo-33786: 修复异步生成器以正确处理 athrow() 中的 GeneratorExit。
bpo-30654: 修复了即使之前设置了自定义处理程序,在解释器关闭时 SIGINT 处理程序重置为 SIG_DFL 的问题。由 Philipp Kerling 提供补丁。
bpo-33622: 修复了当垃圾收集器无法将带有
__del__方法或被其引用的对象添加到gc.garbage列表时的内存泄漏问题。现在可以在设置异常时调用PyGC_Collect(),并保留异常。bpo-31849: 修复了 pyhash.c 中的有符号/无符号比较警告。
bpo-33391: 修复了 set_symmetric_difference() 中的内存泄漏。
bpo-28055: 修复了 siphash24() 中的未对齐访问。由 Rolf Eike Beer 提供补丁。
bpo-33231: 修复了
normalizestring()中潜在的内存泄漏问题。bpo-29922: 改进了'async with'中当
__aenter__()或__aexit__()返回不可等待对象时的错误消息。bpo-33199: 修复了在从键共享字典复制时,字典实现中的
ma_version_tag未初始化的问题。bpo-33041: 修复了当函数包含
async for循环时的跳转问题。bpo-32282: 修复 Windows 上 socketmodule 中 VersionHelpers.h 包含的不必要的 ifdef。
bpo-21983: 修复当类型参数是 ctypes 结构化数据类型时,
ctypes.cast()中的崩溃问题。由 Eryk Sun 和 Oren Milman 提供补丁。
库¶
bpo-30167: 如果设置了PYTHONSTARTUP,防止site.main()异常。由Steve Weber提供补丁。
bpo-33812: 对于tzinfo非None但d.tzinfo.utcoffset(d)返回None的Datetime实例d,现在astimezone()方法将其视为naive。
bpo-30805: 避免调试日志记录中的竞态条件
bpo-33767: 在
mmap.mmap对象上执行时,连接(+)和重复(*)序列操作现在会引发TypeError而不是SystemError。由 Zackery Spytz 提供补丁。bpo-32684: 修复 gather 即使在 return_exceptions 的情况下也能传播自身的取消。
bpo-33674: 修复 asyncio.sslproto 中 SSLProtocol.connection_made() 的竞态条件:立即开始握手而不是使用 call_soon()。之前,data_received() 可能在握手开始前被调用,导致握手挂起或失败。
bpo-31647: 修复了在 _SelectorSocketTransport 已经关闭后调用 write_eof() 会引发 AttributeError 的错误。
bpo-33672: 修复 Task.__repr__ 与 Cython 的虚假协程一起使用时崩溃的问题。
bpo-33469: 修复了使用 run_in_executor 后关闭循环时引发的 RuntimeError。
bpo-11874: 当将用法分解为可包装部分时使用更好的正则表达式。避免来自自定义 metavar 字符串的错误断言错误。
bpo-30877: 修复了 JSON 解码器 Python 实现中的一个错误,该错误阻止了在完成解码后清除已解析字符串的缓存。基于 c-fos 的补丁。
bpo-33548: tempfile._candidate_tempdir_list 应考虑常见的 TEMP 位置
bpo-33542: 防止
uuid.get_node在 Windows 上使用 DUID 而不是 MAC。由 Zvi Effron 提供补丁bpo-26819: 修复 Windows proactor 事件循环中
ReadTransport.resume_reading的竞争条件。bpo-28556: typing模块中的小修复:向
NamedTuple.__new__添加注解,在``Generic.__new__``中传递*args和**kwds。原始PR由Paulius Šarka和Chad Dombrova提供。bpo-20087: 更新了支持glibc 2.27地区设置的别名映射。
bpo-33422: 修复在pydoc上查找字节/字符串字面量时尾随引号被删除的问题。由Andrés Delfino提供补丁。
bpo-33197: 更新构造无效inspect.Parameters时的错误信息。由Donghee Na提供补丁。
bpo-33329: 修复了在新版 glibc 上的多进程回归问题。
bpo-991266: 修复了
http.cookies.SimpleCookie的Comment属性的引用问题。bpo-33131: 将捆绑的 pip 版本升级至 10.0.1。
bpo-33308: 修复了
parser模块在将 ST 对象转换为元组或列表树时,当line_info=False且col_info=True时的崩溃问题。bpo-33263: 修复了
_SelectorSocketTransport中的文件描述符泄漏问题。由 Vlad Starostin 提供补丁。bpo-33256: 修复了
cgitb.html()生成的 html 中<module>调用的显示问题。补丁由 Stéphane Blondon 提供。bpo-33203:
random.Random.choice()现在对于空序列会一致地引发IndexError,即使是从没有getrandbits()实现的子类中调用也是如此。bpo-33224: 为 PEP 479 更新 difflib.mdiff()。将生成器中未捕获的 StopIteration 转换为 return 语句。
bpo-33209: 在
pickle.Pickler.dump()的 C 实现结束时结束帧。bpo-32861: urllib.robotparser 的
__str__表示现在包括通配符条目以及 "Crawl-delay" 和 "Request-rate" 字段。由 Michael Lazar 提供补丁。bpo-33096: 允许 ttk.Treeview.insert 插入具有假布尔值的 iid。注意 iid=0 和 iid=False 会是相同的。由 Garvit Khatri 提供补丁。
bpo-33127: ssl模块现在可以编译使用LibreSSL 2.7.1。
bpo-33021: 在fstat()调用期间释放GIL,避免在调用mmap.mmap()、os.urandom()和random.seed()时所有线程挂起。由Nir Soffer提供补丁。
bpo-27683: 修复
ipaddress中的一个回归问题,当网络由包含整数掩码且仅剩1位地址的元组构造时,hosts()的结果为空。bpo-32844: 修复在subprocess中如果另一个低描述符被关闭时,将低描述符(0或1)错误重定向到stderr的问题。
bpo-31908: 修复了
trace模块命令行工具的封面文件输出。之前仅在使用了--missing选项时才会发出封面文件。由Michael Selik提供补丁。bpo-31457: 如果使用嵌套的日志适配器,内部
process()方法不再被省略。bpo-31238: pydoc: 私有 ServerThread 类的 stop() 方法现在会等待 DocServer.serve_until_quit() 完成,然后显式将其 docserver 属性设置为 None 以打破循环引用。
文档¶
bpo-33503: 修复损坏的 pypi 链接
bpo-33421: 为
typing.AsyncContextManager添加缺失的文档。bpo-33378: 为 https://docs.python.org/3/ 添加韩语语言切换器。
bpo-33276: 澄清模块上的
__path__属性不能是任意值。bpo-33201: 现代化编写 C 扩展类型的文档。
bpo-33195: 在
c-api/arg文档中弃用Py_UNICODE的使用。自 Python 3.3 起,Py_UNICODE相关 API 已被弃用,但文档中遗漏了这一点。bpo-33126: 文档化 PyBuffer_ToContiguous()。
bpo-27212: 修改
islice()函数示例代码的文档说明,使其在起始索引前消耗初始值。bpo-18802: ipaddress 的文档更改。由 Jon Foster 和 Berker Peksag 提供补丁。
bpo-27428: 更新文档以澄清
WindowsRegistryFinder实现了MetaPathFinder。(补丁由 Himanshu Lakhara 提供)bpo-8243: 添加关于 curses.addch 和 curses.addstr 在窗口或 pad 外部写入时的异常行为的注释。
bpo-31432: 澄清 ssl.SSLContext.verify_mode 的 CERT_NONE、CERT_OPTIONAL 和 CERT_REQUIRED 标志的含义。
测试¶
构建¶
bpo-5755: 将
-Wstrict-prototypes选项从OPT移到CFLAGS_NODIST。此选项在用C++编写扩展模块时会产生烦人的警告。bpo-33614: 确保Windows上稳定ABI的模块定义文件被正确重新生成。
bpo-33522: 在https://python.visualstudio.com/cpython上启用Visual Studio Team Services的CI构建。
bpo-33012: 为 gcc 8 添加
-Wno-cast-function-type以静默关于函数类型转换的警告,如在方法定义列表中转换为 PyCFunction 的警告。bpo-33394: 当GNU make在命令行上传递宏时,为扩展模块启用详细构建。
Windows¶
bpo-33184: 将 Windows 安装程序更新到 OpenSSL 1.0.2o。
macOS¶
bpo-33184: 将 macOS 安装程序构建更新为使用 OpenSSL 1.0.2o。
IDLE¶
bpo-33656: 在Windows上,添加API调用表明tk针对DPI进行缩放。在Windows 8.1+或10上,Python二进制文件的DPI兼容性属性未更改,且显示器分辨率大于96 DPI时,这应使文本和线条更清晰。否则应无影响。
bpo-33768: 点击上下文行将该行移动到编辑器窗口的顶部。
bpo-33763: IDLE:使用只读文本小部件代替标签小部件作为代码上下文。
bpo-33664: 按行滚动IDLE编辑器文本。之前,鼠标滚轮和滚动条滑块以固定像素数移动文本,导致编辑器盒顶部出现部分行。此更改也适用于shell和grep输出窗口,但不适用于只读文本视图。
bpo-33679: 启用代码上下文的主题特定颜色配置。使用“高亮”选项卡查看内置主题的设置或为自定义主题添加设置。
bpo-33642: 为代码上下文显示最多maxlines非空行。如果没有当前上下文,则显示单个空行。
bpo-33628: IDLE:清理codecontext.py及其测试。
bpo-33564: IDLE的代码上下文现在能识别async作为一个块的开头。
bpo-29706: IDLE 现在在 3.6 版本中将 async 和 await 作为关键字着色。它们在 3.7 版本中成为完全的关键字。
bpo-21474: 将单词/标识符的定义从ASCII更新为Unicode。在文本和输入框中,这会影响通过双击选择、通过control-left/right左右移动以及通过control-BACKSPACE/DEL左右删除。
bpo-33204: IDLE:一致地着色无效的字符串前缀。'u'字符串前缀不能与'r'或'f'配对。从右边开始,尽可能多地着色有效的部分。修订并扩展颜色化器测试。
bpo-32831: 为codecontext添加文档字符串和测试。
工具/示例¶
bpo-33189: pygettext.py 现在只识别字面字符串作为文档字符串和可翻译字符串,并拒绝字节字面量和 f-string 表达式。
bpo-31920: 修复了
pygettext脚本中将目录作为参数处理的问题。基于 Oleg Krasnikov 的补丁。bpo-29673: 修复 pystackv 和 pystack gdbinit 宏。
bpo-32885: 为
Tools/scripts/pathfix.py添加-n标志以禁用自动备份创建(带有~后缀的文件)。bpo-31583: 修复 2to3 在使用 --add-suffix 选项但没有 --output-dir 选项时对当前目录中文件的相对路径的处理。
C API¶
bpo-32374: 文档说明多阶段初始化模块的 m_traverse 可以在 m_state=NULL 时调用,并添加健全性检查
Python 3.6.5 正式版¶
发布日期: 2018-03-28
测试¶
bpo-32872: 避免 regrtest 与命名空间包的兼容性问题。
构建¶
bpo-33163: 将pip升级到9.0.3,setuptools升级到v39.0.1。
Python 3.6.5 rc1¶
发布日期: 2018-03-13
安全性¶
bpo-33001: Windows 上 os.symlink 防止缓冲区溢出的最小修复。
bpo-32981: difflib 和 poplib 中的正则表达式容易受到灾难性回溯的影响。这些正则表达式构成了潜在的 DOS 向量(REDOS)。它们已被重构。这解决了 CVE 2018-1060 和 CVE 2018-1061。由 Jamie Davis 提供补丁。
核心与内置函数¶
bpo-33026: 通过设置f_lineno修复了跳出“with”块的问题。
bpo-17288: 防止从'return'和'exception'跟踪事件跳转。
bpo-32889: 更新Valgrind抑制列表,以考虑`Py_ADDRESS_IN_RANG`重命名为`address_in_range`的情况。
bpo-32650: Pdb 和其他依赖于 bdb.py 的调试器现在能够正确地单步跳过(next 命令)原生协程。由 Pablo Galindo 提供补丁。
bpo-32685: 改进了当 Python 2 形式的 print 语句出现在复合语句的同一行或以分号而非换行符终止时的建议。由 Nitish Chandra 提供补丁。
bpo-32583: 修复在使用自定义解码错误处理程序时,内置 Unicode 解码器可能因越界写入错误而崩溃的问题。
bpo-26163: 改进了 frozenset() 的哈希函数,当面对包含许多相似值的数据集时,能生成更多不同的哈希值。
bpo-32329: 当通过
PYTHONHASHSEED=0关闭哈希随机化时,sys.flags.hash_randomization现在被正确设置为 0。bpo-30416: 优化器现在受到保护,不会花费大量时间进行复杂计算和在常量折叠中创建大常量时消耗大量内存。
bpo-18533:
repr()在包含其自身的values()或items()的字典上不再引发RecursionError;OrderedDict 同理。相反,像其他递归结构一样使用...。由 Ben North 提供补丁。bpo-32028: 在为将 Py2 打印语句转换为 Py3 内置打印函数调用生成建议时,现在正确地忽略了前导空白。由 Sanyam Khurana 提供补丁。
bpo-32137: 现在,深度嵌套字典的repr会引发RecursionError,而不是因为堆栈溢出而崩溃。
库¶
bpo-33064: lib2to3现在正确支持函数签名中
*args和**kwargs后的尾随逗号。bpo-31804: 避免在标准流在退出时被关闭或为None时,multiprocessing.Process失败。
bpo-33037: 在SSL传输关闭后跳过发送/接收数据。
bpo-30353: 修复 64 位 Cygwin/MinGW 上结构体的 ctypes 按值传递问题。
bpo-33009: 修复inspect.signature()对于单参数partialmethods的处理。
bpo-32969: 在zlib中暴露几个缺失的常量并修复相应的文档。
bpo-32713: 修复tarfile.itn对超出界限的浮点值的处理。由Joffrey Fuhrer提供补丁。
bpo-30622: ssl模块现在能检测到LibreSSL中缺少的NPN支持。
bpo-32922: dbm.open()现在使用文件系统编码而不是默认编码对文件名进行编码。
bpo-32859: 在
os.dup2中,不再每次调用时检查dup3系统调用是否存在。bpo-21060: 将setup.py upload中令人困惑的消息从"No dist file created in earlier command"重写为更有帮助的"Must create and upload files in one command"。
bpo-32857: 在
tkinter中,after_cancel(None)现在会引发ValueError异常,而不是取消第一个预定的函数。由Cheryl Sabella提供补丁。bpo-32852: 确保在运行trace时sys.argv保持为列表。
bpo-32841: 修复了
asyncio.Condition问题,该问题在通知并取消条件锁后默默忽略了取消。由Bar Harel提供补丁。bpo-31787: 修复了多个模块中
__init__()方法的内存泄漏问题。(由Oren Milman贡献)bpo-30157: 修复了在只有最后一个字段被引用时,csv.Sniffer.sniff() 中猜测引用和分隔符的问题。由Jake Davis提供补丁。
bpo-32394: socket: 在运行时移除旧版本 Windows 上的 TCP_FASTOPEN、TCP_KEEPCNT 标志。
bpo-32777: 修复了在POSIX系统的子进程中,当标记文件描述符为可继承时,subprocess中一个罕见但潜在的子进程死锁问题。此bug似乎是在3.4版本中引入的。
bpo-32647: ctypes模块过去依赖间接链接来使用dlopen。现在,在支持dl的平台上,共享扩展已明确链接到libdl。
bpo-32734: 修复了
asyncio.Lock()的安全问题,该问题允许多次获取和锁定同一个锁,而锁并未释放。由Bar Harel提供补丁。bpo-32727: 不在SMTP信封的发送地址中包含名字字段。由Stéphane Wirtel提供补丁。
bpo-27931: 修复当用户名为空引号字符串时的电子邮件地址头解析错误。由Xiang Zhang提供补丁。
bpo-32304: distutils的上传命令不再损坏以CR字节结尾的tar文件,并且不再尝试在上传的任何文本字段中将CR转换为CRLF。
bpo-32502: 当遇到64位硬件地址时,uuid.uuid1不再抛出异常。
bpo-31848: 修复Aifc_read.initfp()中当SSND块未找到时的错误处理。补丁由Zackery Spytz提供。
bpo-32555: 在 FreeBSD 和 Solaris 上,os.strerror() 现在总是从当前区域设置编码解码字节字符串,而不是在某些情况下使用 ASCII/替代转义。
bpo-32521: nis 模块现在与新的 libnsl 和头文件位置兼容。
bpo-32473: 提高 ABCMeta._dump_registry() 输出的可读性
bpo-32521: glibc 已移除 Sun RPC。在 nis 模块中使用替代的 libtirpc 头文件和库。
bpo-32228: 确保
truncate()在写入长度超过缓冲区大小后保留文件位置(由tell()报告)。bpo-26133: 在解释器关闭时不要在asyncio UNIX事件循环中取消订阅信号。
bpo-32185: 在装有OpenSSL 1.0.2+或inet_pton的平台上,SSL模块不再在SNI TLS扩展中发送IP地址。
bpo-32323:
urllib.parse.urlsplit()现在不会将作用域IPv6地址的主机名中的区域ID(作用域)转换为小写。bpo-32302: 修复了distutils的bdist_wininst对于CRT v142的支持:它二进制兼容于CRT v140。
bpo-32255: 现在,当写入CSV文件时,单个空字段总是会被引用。这允许区分空行和由单个空字段组成的行。由Licht Takeuchi提供补丁。
bpo-32277: 在不支持
chmod(..., follow_symlinks=False)的平台上,引发``NotImplementedError``而不是SystemError。由Anthony Sottile提供补丁。bpo-32199: getnode() ip 获取器现在使用 'ip link' 而不是 'ip link list'。
bpo-27456: 确保在 Linux 上设置 TCP_NODELAY。测试由 Victor Stinner 完成。
bpo-31900: 现在
locale.localeconv()函数会临时将LC_CTYPE区域设置改为``LC_NUMERIC``区域设置,以解码decimal_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: 当属性的值为
VT_EMPTY时,使msilib.SummaryInformation.GetProperty()返回None。初始由 Mark Mc Mahon 提供补丁。bpo-31325: 修复了
RobotFileParser.parse()方法中collections.namedtuple()的错误用法。初始由 Robin Wellner 提供补丁。bpo-12382:
msilib.OpenDatabase()现在在无法打开或创建 MSI 文件时引发更好的异常消息。初始由 William Tisäter 提供补丁。bpo-32110:
codecs.StreamReader.read(n)现在对于非负的 n,返回不超过 n 个字符/字节。这使得它与其他类似文件对象的read()方法兼容。bpo-32072: 修复了二进制 plists 的问题:修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。
bpo-32034: 使asyncio.IncompleteReadError和LimitOverrunError可pickle。
bpo-32015: 修复了在等待异步读写套接字期间重新连接套接字时asyncio的循环问题。
bpo-32011: 恢复了对加载带有TYPE_INT64代码的marshal文件的支持。这些文件可以在Python 2.7中生成。
bpo-31970: 降低asyncio调试模式的性能开销。
bpo-9678: 修复了uuid模块中确定MAC地址的问题:在NetBSD和OpenBSD上使用ifconfig。在Linux、FreeBSD、NetBSD和OpenBSD上使用arp。基于Takayuki Shimizukawa的补丁。
bpo-30057: 修复了signal.signal()中潜在的信号丢失问题。
bpo-31933: 修复Blake2参数leaf_size和node_offset在大端平台上的问题。由Jack O'Connor提供补丁。
bpo-31927: 修复了socket模块在NetBSD 8上的编译问题。修复了在NetBSD和DragonFly BSD上解析AF_BLUETOOTH地址时的断言失败或读取任意数据的问题。
bpo-27666: 修复了当类型chtype或mmask_t的大小小于C long的大小时,curses.box()和curses.ungetmouse()中的堆栈损坏问题。curses.box()现在接受字符作为参数。基于Steve Fink的补丁。
bpo-31897: plistlib现在在读取二进制plist时会捕获更多错误,并抛出InvalidFileException而不是意外的异常。
bpo-25720: 修复了检查curses WINDOW填充状态的方法。由Masayuki Yamamoto提供补丁。
bpo-31893: 修复了OpenBSD和NetBSD上kqueue_event结构的布局。修复了kqueue_event对象的比较。
bpo-31891: 修复了在NetBSD上构建curses模块的问题。
bpo-28416: 具有 persistent_id() 方法的 pickle.Pickler 子类和具有 persistent_load() 方法的 pickle.Unpickler 子类的实例不再创建引用循环。
bpo-28326: 修复当 stdout 和/或 stderr 关闭或为 None 时的 multiprocessing.Process。
bpo-31457: 如果使用嵌套的日志适配器,内部
process()方法不再被省略。bpo-31457: LoggerAdapter 对象的
manager属性现在可以正确设置了。bpo-31806: 修复 time.sleep(), threading.Lock.acquire() 和 socket.socket.settimeout() 中的超时舍入,以正确舍入 -1.0 和 0.0 之间的负超时。这些函数现在会按预期阻塞等待事件。之前,调用错误地是非阻塞的。由 Pablo Galindo 提供补丁。
bpo-28603: traceback: 修复了在打印异常回溯时,当当前异常或其上下文/原因链中的异常不可哈希时发生的 TypeError。由 Zane Bitter 提供补丁。
bpo-30058: 修复 select.kqueue.control() 中的缓冲区溢出。
bpo-31770: 防止多次调用
sqlite3.Cursor对象的__init__()方法时崩溃。由 Oren Milman 提供补丁。bpo-31672:
string.Template中的idpattern匹配了一些非ASCII字符。现在它使用-i正则表达式本地标志来避免非ASCII字符。bpo-31764: 防止在
sqlite3.Cursor.close()中当Cursor对象未初始化时发生崩溃。补丁由 Oren Milman 提供。bpo-31752: 修复在调用自定义整数的 timedelta 构造函数时可能发生的崩溃。
bpo-31701: 在Windows上,faulthandler.enable()现在会忽略MSC和COM异常。
bpo-31728: 防止由于
Element.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: 包含sys/sysmacros.h以获取major()、minor()和makedev()。GNU C库计划从sys/types.h中移除这些函数。
bpo-31291: 修复了Windows上
zipimport.zipimporter.get_data中的一个断言失败,当``pathname.replace('/','\')``的返回值不是字符串时。由Oren Milman提供补丁。bpo-31271: 修复当编码器未返回字节对象时,
io.TextIOWrapper``的 ``write()方法中的断言失败。由Oren Milman提供补丁。bpo-31243: 修复当解码器状态无效时,``io.TextIOWrapper``的某些方法中的崩溃问题。由Oren Milman提供补丁。
bpo-30721:
print现在显示使用Python 2重定向语法的正确用法提示。由Sanyam Khurana提供补丁。bpo-31070: 修复importlib中_get_module_lock()的竞态条件。
bpo-31095: 修复由未调用
PyObject_GC_UnTrack()的tp_dealloc引起的GC期间潜在崩溃问题。bpo-31071: 当传递其他参数时,避免在使用*解包调用中掩盖原始TypeError。
bpo-30978: str.format_map()现在传递键查找异常。之前任何异常都被替换为KeyError异常。
bpo-30808: 对并发敏感的信号状态使用_Py_atomic API。
bpo-30876: 从未加载的包中进行相对导入现在会重新导入包,而不是因SystemError失败。从非包中进行相对导入现在会因ImportError而非SystemError失败。
bpo-30703: 改进信号传递。避免在信号处理程序中使用Py_AddPendingCall,以避免调用信号不安全函数。这里添加的测试在没有补丁的其他部分的情况下,在Linux和OS X上失败。这意味着我们的信号传递逻辑存在缺陷(某些信号可能会丢失)。
bpo-30765: 当PyThread_acquire_lock()被要求不阻塞时,避免在pthread_mutex_lock()中阻塞。
bpo-31161: 确保'Missing parentheses'语法错误消息仅应用于SyntaxError,而不是子类。补丁由Martijn Pieters提供。
bpo-30814: 修复从包中导入子模块时的竞态条件。
bpo-30597:
print现在在作为 Python 2 语句使用时,自定义错误消息中显示预期的输入。由 Sanyam Khurana 提供补丁。
库¶
bpo-31499: xml.etree:修复当解析器是引用循环的一部分时的崩溃问题。
bpo-28556: typing.get_type_hints现在默认(当调用者未指定
globalns时)为类和模块找到正确的globalns。bpo-28556: 对
typing模块的速度改进。原始PR由Ivan Levkivskyi和Mitar提供。bpo-31544: ElementTree的C加速器模块忽略了在XMLParser()中查找TreeBuilder目标方法时引发的异常。
bpo-31234: socket.create_connection()现在手动修复了一个引用循环:成功时清除存储最后一个异常的变量。
bpo-31457: LoggerAdapter对象现在可以嵌套。
bpo-31400: 改进了 SSL 错误处理,避免丢失错误编号。
bpo-28958: ssl.SSLContext() 现在在无法实例化上下文时使用 OpenSSL 错误信息。
bpo-27340: SSLSocket.sendall() 现在使用 memoryview 来创建数据切片。这修复了对所有类似于字节对象的支持。同时,这也更高效,避免了昂贵的复制。
bpo-31178: 修复了 subprocess 模块中在罕见错误路径下的字符串连接错误
bpo-31350: 对
asyncio._get_running_loop()进行微优化,使其速度提升高达 10%。bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题(libexpat bug 115):https://github.com/libexpat/libexpat/issues/115
bpo-29136: 添加 TLS 1.3 密码套件和 OP_NO_TLSv1_3。
bpo-29212: 修复 concurrent.futures.thread.ThreadPoolExecutor 线程在没有提供 thread_name_prefix 时默认使用非 repr() 基础的线程名。它们现在会自称为 "ThreadPoolExecutor-y_n"。
bpo-9146: 修复 _hashopenssl 在链接的 OpenSSL 库中不可用标准哈希函数(如 md5)时的段错误。如在某些特殊的 FIPS-140 构建环境中。
bpo-27144:
concurrent.futures中的map()和as_completed()迭代器现在避免保留对生成对象的引用。bpo-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的内置'extensions'转换为常规功能。大约10个IDLE功能作为所谓的可选扩展实现。它们的不同行为可能会让用户感到困惑或更糟,对维护也不利。因此进行了转换。对用户的主要区别是,现在对内置功能的用户可配置键绑定的处理是统一的。现在,编辑键集中的绑定只会影响其在键集中的值。所有绑定都在config-extensions.def中系统特定的默认键集中一起定义。所有自定义键集作为一个整体保存在config-extension.cfg中。所有更改在点击Apply或Ok后立即生效。受影响的事件有'<<force-open-completions>>', '<<expand-word>>', '<<force-open-calltip>>', '<<flash-paren>>', '<<format-paragraph>>', '<<run-module>>', '<<check-module>>', 和'<<zoom-height>>'。任何在3.6.3之前进行的(全局)自定义将不会影响到3.6.3之后的键集特定自定义,反之亦然。初始由Charles Wohlganger提供补丁。
bpo-31206: IDLE: 从ConfigDialog中提取HighPage(Frame)类。由Cheryl Sabella提供补丁。
bpo-31001: 为configdialog高亮标签添加测试。由Cheryl Sabella提供补丁。
bpo-31205: IDLE:从ConfigDialog中提取KeysPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。
bpo-31130: IDLE -- 修复test_configdialog中的内存泄漏。初始由Victor Stinner提供补丁。
bpo-31002: 为configdialog的keys标签页添加测试。由Cheryl Sabella提供补丁。
bpo-19903: IDLE:使用
inspect.signature代替inspect.getfullargspec生成调用提示。这将改进使用Argument Clinic转换的内置函数的调用提示。由Louie Lu提供补丁。bpo-31083: IDLE - 在configdialog中添加TabPage类的概要。更新现有类以匹配概要。初始补丁由Cheryl Sabella提供。
bpo-31050: 从ConfigDialog中提取GenPage(Frame)类。经过轻微修改的测试仍然通过。由Cheryl Sabella提供补丁。
bpo-31004: IDLE - 从ConfigDialog中提取FontPage(Frame)类。经过轻微修改的测试仍然通过。修复通用测试。补丁主要由Cheryl Sabella提供。
bpo-30781: IDLE - 在ConfigDialog中使用ttk部件。由Terry Jan Reedy和Cheryl Sabella提供补丁。
bpo-31060: IDLE - 完成ConfigDialog中方法的重新排列。将与每个标签页和按钮相关的方法分组有助于编写测试和改进标签页,并将使这些组能够分割成类。
bpo-30853: IDLE -- 从ConfigDialog中提取VarTrace类。实例跟踪器管理由tk变量和回调函数组成的对。当跟踪开启时,设置变量会调用函数。新类的测试覆盖率为100%。
bpo-31003: IDLE:为通用标签页添加更多测试。
bpo-30993: IDLE - 改进配置对话框字体页面及测试。在配置对话框中:在create_font_tab文档字符串中记录因果路径。简化一些属性名称。将set_samples调用移至var_changed_font(来自Cheryl Sabella的想法)。将相关函数移动到创建小部件函数之后的位置。在test_configdialog中:修复test_font_set使其不依赖于顺序。修复重命名的test_indent_scale以测试小部件。调整测试以适应set_samples调用的移动。为加载函数添加测试。将所有字体测试放在一个类中,将标签缩进测试放在另一个类中。除了两行代码外,这些测试完全覆盖了相关函数。
bpo-30981: IDLE -- 为配置对话框字体页面添加更多测试。
bpo-28523: IDLE:在配置对话框中将'colour'替换为'color'。
bpo-30917: 为idlelib.config.IdleConf添加测试。将覆盖率从46%提高到96%。由Louie Lu提供补丁。
bpo-30934: 记录idlelib测试的覆盖率详情。在idlelib/idle-test/README.txt中添加部分内容。包括检查分支是否双向执行。排除在单元测试期间不运行的IDLE特定代码。
bpo-30913: IDLE:在文档字符串中记录ConfigDialog的tk变量、方法和部件。这将有助于改进对话框和分割类。原始由Cheryl Sabella提供补丁。
bpo-30899: IDLE:为config中的ConfigParser子类添加测试。由Louie Lu提供补丁。
bpo-30881: IDLE:为browser.py添加文档字符串。由Cheryl Sabella提供补丁。
bpo-30851: IDLE:移除configdialog中未使用的变量。一个是重复的,一个是设置但用户无法更改的。由Cheryl Sabella提供补丁。
bpo-30870: IDLE:在设置对话框中,使用上下键以及鼠标选择字体。初始由Louie Lu提供补丁。
bpo-8231: IDLE:仅调用config.IdleConf.GetUserCfgDir一次。
bpo-30779: IDLE:从configdialog中提取ConfigChanges类,放入config;测试。* 在config中,将转储测试代码放入一个函数;运行它和'unittest'在'if __name__ == '__main__'中。* 基于bpo问题上的changes_class_v4.py添加config.ConfigChanges类。* 添加test_config.ChangesTest类,部分使用configdialog_tests_v1.py。* 修改configdialog以使用ConfigChanges;参见tracker msg297804。* 修改test_configdialog以匹配configdialog的更改。* 移除未使用或已移至ConfigChanges的configdialog函数。Cheryl Sabella贡献了部分补丁。
bpo-30777: IDLE:configdialog - 添加文档字符串并修复注释。由Cheryl Sabella提供补丁。
bpo-30495: IDLE:通过添加文档字符串、PEP8命名和更多测试来改进textview。由Cheryl Sabella提供补丁。
bpo-30723: IDLE:对parenmatch进行多项改进。添加'parens'风格以同时高亮开启和关闭符号。使'default'风格(非默认)成为'opener'的同义词。使时间延迟在所有风格中工作方式相同。为配置对话框扩展标签添加帮助,包括parenmatch的帮助。添加新测试。原始补丁由Charles Wohlganger提供。
bpo-30674: IDLE:向grep模块添加文档字符串。由Cheryl Sabella提供补丁。
bpo-21519: IDLE的基本自定义键输入对话框现在能正确检测重复项。原始由Saimadhav Heblikar提供补丁。
bpo-29910: IDLE不再通过快捷键注释掉一个区域后删除一个字符。为此添加 ``return 'break'``以及IDLE和默认键绑定之间的其他潜在冲突。
bpo-30728: 审查并更改idlelib.configdialog的名称。将方法和属性名称小写。将'colour'替换为'color',扩展过于隐晦的名称,删除不需要的下划线。用特定的导入替换
import *。由Cheryl Sabella提供补丁。bpo-6739: IDLE:通过尝试用tk绑定用户输入的键序列来验证它们。为所有3个验证函数添加测试。原始由G Polo提供补丁。测试由Cheryl Sabella添加。
工具/示例¶
Python 3.6.2 正式版¶
发布日期: 2017-07-17
自rc2起没有更改
Python 3.6.2 rc2¶
发布日期: 2017-07-07
安全性¶
bpo-30730: 在 Windows 上防止子进程中的环境变量注入。防止传递其他环境变量和命令参数。
bpo-30694: 将 expat 从 2.2.0 升级到 2.2.1 以修复多个安全漏洞,包括:CVE 2017-9233`(外部实体无限循环 DoS)、:cve:`2016-9063 (整数溢出,重新修复) 、CVE 2016-0718`(修复 2.2.0 对 :cve:`2016-0718 的修复引起的回归错误)和 CVE 2012-0876`(使用 SipHash 抵御哈希洪水攻击)。注意::cve:`2016-5300 (使用操作系统特定的熵源如 getrandom) 不影响 Python,因为 Python 已经通过
XML_SetHashSalt()从操作系统获取熵来设置 expat 的密钥。bpo-30500: 修复 urllib.parse.splithost() 正确解析片段。例如,
splithost('//127.0.0.1#@evil.com/')现在正确返回127.0.0.1主机,而不是将@evil.com视为认证中的主机(login@host)。
Python 3.6.2 rc1¶
发布日期: 2017-06-17
安全性¶
bpo-29591: 将 expat 从 2.1.1 更新到 2.2.0 以修复 CVE 2016-0718 和 CVE 2016-4472。更多信息请见 https://sourceforge.net/p/expat/bugs/537/。
核心与内置函数¶
bpo-30682: 移除了对某些 f-字符串过于严格的断言,例如 eval("f'\n'") 和 eval("f'\r'")。
bpo-30604: 将co_extra_freefuncs移动到非每线程以避免崩溃
bpo-29104: 修复了 f-字符串中反斜杠的解析。
bpo-27945: 修复了在搜索、插入或比较过程中输入集合被修改时,字典的各种段错误。基于 Duane Griffin 和 Tim Mitchell 的补丁。
bpo-25794: 修复了 type.__setattr__() 和 type.__delattr__() 对于非 interned 属性名称的问题。基于 Eryk Sun 的补丁。
bpo-30039: 如果解释器在恢复一系列嵌套的 'yield from' 或 'await' 调用过程中发生 KeyboardInterrupt,现在会正确地传递到最内层的帧。
bpo-12414: sys.getsizeof() 在代码对象上现在返回的大小包括代码结构及其引用对象的大小。由 Donghee Na 提交的补丁。
bpo-29949: 修复了 set 和 frozenset 对象的内存使用回归问题。
bpo-29935: 修复了在传递错误类型的索引时,tuple、list 和 deque 的 index() 方法中的错误消息。
bpo-29859: 当 thread_pthread.h 中的任何 pthread_* 调用失败时,显示正确的错误消息。
bpo-28876: 即使
len(range)引发OverflowError,bool(range)也能正常工作。bpo-29600: 修复在StopIteration中包装协程返回值的问题。
bpo-28856: 修复了一个疏忽,即 %b 格式的字节应支持遵循缓冲区协议的对象。
bpo-29714: 修复了一个回归问题,即当包含零字节时,字节格式可能会失败。
bpo-29478: 在使用Compat32策略时,如果指定了max_line_length=None,它将不再被忽略。补丁由Mircea Cosbuc提供。
库¶
bpo-30616: enum 的功能 API 允许创建空的枚举。由 Donghee Na 提供补丁
bpo-30038: 修复了信号传递和唤醒文件描述符之间的竞争条件。补丁由 Nathaniel Smith 提供。
bpo-23894: lib2to3 现在能识别
rb'...'和f'...'字符串。bpo-23890: unittest.TestCase.assertRaises() 现在手动打破引用循环,以避免对象存活时间超过预期。
bpo-30149: inspect.signature() 现在支持带有被partialmethod包装的可变参数参数的可调用对象。由Donghee Na提供补丁。
bpo-30645: 修复imp.load_package()中的路径计算,修复仅随字节码一起提供包的情况。由Alexandru Ardelean提供补丁。
bpo-29931: 修复了 ipaddress.ip_interface 对象的比较检查。补丁由 Sanjay Sundaresan 提供。
bpo-30605: re.compile() 在编译带有错误放置的内联修饰符的 bytes 实例时不再引发 BytesWarning。由 Roy Williams 提供补丁。
bpo-24484: 避免多进程清理中的竞争条件(#2159)
bpo-28994: 对于由 atexit 注册的回调中引发的 SystemExit,不再显示回溯。
bpo-30508: 如果调用了 Task/Future 的 "cancel()" 方法,则不记录异常。
bpo-28556: typing 模块的更新:添加通用的 AsyncContextManager,为所有版本添加对 ContextManager 的支持。原始 PR 由 Jelle Zijlstra 和 Ivan Levkivskyi 提供。
bpo-29870: 修复 asyncio/ssl 实现中当连接被中止时 SSL 套接字的泄漏问题。由 Michaël Sghaïer 提供补丁。
bpo-29743: 在握手过程中关闭传输会导致打开的套接字泄漏。由 Nikolay Kim 提供补丁。
bpo-27585: 修复 asyncio.Lock 中的等待者取消问题。由 Mathieu Sornay 提供补丁。
bpo-30418: 在 Windows 上,如果子进程仍在运行但关闭了管道,subprocess.Popen.communicate() 现在也会忽略 stdin.write() 上的 EINVAL。
bpo-29822: inspect.isabstract()现在在__init_subclass__期间工作。补丁由Nate Soares提供。
bpo-29581: ABCMeta.__new__现在接受
**kwargs,允许抽象基类在__init_subclass__中使用关键字参数。由Nate Soares提供补丁。bpo-30557: faulthandler 现在能够正确过滤和显示 Windows 上的异常代码。
bpo-30378: 修复 logging.handlers.SysLogHandler 无法处理 IPv6 地址的问题。
bpo-29960: 当_random.Random.setstate()引发异常时,保留生成器状态。补丁由Bryan Olson提供。
bpo-30414: multiprocessing.Queue._feed 后台运行线程在异常时不从主循环中中断。
bpo-30003: 修复HZ编解码器中转义字符的处理。基于Ma Lin的补丁。
bpo-30301: 修复在 spawn 和 forkserver 启动方法下使用SimpleQueue.empty()时的AttributeError。
bpo-30329: imaplib和poplib现在在shutdown(SHUT_RDWR)时捕获Windows socket WSAEINVAL错误(代码10022):尝试了无效操作。此错误有时发生在SSL连接上。
bpo-30375: 编译正则表达式时发出的警告现在总是指向用户代码中的行。之前如果从组或条件内部发出,它们可能指向re模块的内部。
bpo-30048: 修复了当任务运行协程且协程返回而没有任何更多
await时,``Task.cancel()``可能被忽略的问题。bpo-30266: contextlib.AbstractContextManager现在支持通过设置__enter__ = None或__exit__ = None进行反注册,遵循 bpo-25958 中引入的模式。由Jelle Zijlstra提供补丁。
bpo-30298: 放宽内联修饰符的弃用警告条件。现在允许在模式开始处连续使用多个内联修饰符(例如
'(?i)(?s)...')。在详细模式下,现在允许在内联修饰符之前和之间使用空格和注释(例如'(?x) (?i) (?s)...')。bpo-29990: 修复GB18030解码器中的范围检查。原由Ma Lin提供补丁。
bpo-30243: 移除了_json的扫描器和编码器的__init__方法。误用它们可能导致内存泄漏或崩溃。现在扫描器和编码器对象在__new__方法中完全初始化。
bpo-30185: 在收到Ctrl-C时,避免forkserver辅助进程中的KeyboardInterrupt回溯。
bpo-28556: 对typing模块的各种更新:添加typing.NoReturn类型,使用WrapperDescriptorType,小错误修复。原PR由Jim Fasarakis-Hilliard和Ivan Levkivskyi提供。
bpo-30205: 修复Linux上未绑定的AF_UNIX套接字的getsockname()。
bpo-30070: 修复了解析模块中错误处理的内存泄漏和崩溃问题。
bpo-30061: 修复了当readline()或__next__()分别返回不可大小化的对象时,IOBase方法__next__()和readlines()中的崩溃。修复了由不检查PyObject_Size()、PySequence_Size()或PyMapping_Size()的结果可能引起的其他错误。
bpo-30017: 允许多次调用zip条目写入器对象的close()方法。向已关闭的写入器写入现在总是产生ValueError。
bpo-30068: 当存在hint时,_io._IOBase.readlines将首先检查是否关闭。
bpo-29694: 修复了pathlib mkdir与flags parents=True时的竞争条件。补丁由Armin Rigo提供。
bpo-29692: 修复了contextlib.contextmanager中RuntimeError异常的任意解链。由Siddharth Velankar提供补丁。
bpo-29998: Pickling和复制ImportError现在保留name和path属性。
bpo-29953: 修复了当传递超出范围的 fold 参数时,datetime 和 time 对象的 replace() 方法中的内存泄漏问题。
bpo-29942: 修复了在遇到长串空可迭代对象时,itertools.chain.from_iterable 的崩溃问题。
bpo-27863: 修复了由竞争条件和错误类型引起的 ElementTree 中的多个崩溃问题。
bpo-28699: 修复了 multiprocessing.pool 中池的一个 bug,即在可迭代对象的最开始引发异常可能会吞掉异常或使程序挂起。由 Davin Potts 和 Xiang Zhang 提供补丁。
bpo-25803: 当操作系统优先考虑如 EACCES 而不是 EEXIST 的错误时,避免 Path.mkdir(exist_ok=True) 引发不正确的错误。
bpo-29861: 在 multiprocessing.Pool 中,任务、它们的参数和结果一旦完成就释放引用。
bpo-29884: faulthandler: 在拆卸期间恢复旧的sigaltstack。由Christophe Zeitouny提供补丁。
bpo-25455: 修复了递归缓冲文件类对象repr中的崩溃。
bpo-29800: 修复了如果partial.keywords的键不是字符串时partial.__repr__的崩溃。由Michael Seifert提供补丁。
bpo-29742: 如果 get_extra_info() 在关闭的 ssl 传输上调用,将引发异常。由 Nikolay Kim 提供补丁。
bpo-8256: 修复了如果sys.stdin或sys.stdout的属性"encoding"或"errors"未设置或不是字符串时可能导致的input()失败或崩溃。
bpo-28298: 修复了一个bug,该bug阻止了数组'Q'、'L'和'I'接受大整数(具有__int__方法的对象)作为元素。由Oren Milman提供补丁。
bpo-28231: zipfile模块现在接受路径类对象作为外部路径。
bpo-26915: collections.abc.Sequence的index()和count()方法在进行比较时现在在检查相等性之前检查身份。
bpo-29615: SimpleXMLRPCDispatcher 不再将 KeyError(或任何其他异常)链接到调度方法中引发的异常。由 Petr Motejlek 提供补丁。
bpo-30177: path.resolve(strict=False)不再在文件系统中不存在的第一个元素后截断路径。补丁由Antoine Pietri提供。
IDLE¶
bpo-15786: 修复IDLE自动完成框的几个问题。现在以下功能应该可以正常工作:点击选择框中的项目;使用滚动条;通过按回车键选择项目。MacOSX上的挂起问题应该不会再发生。补丁由Louie Lu提供。
bpo-25514: 添加关于IDLE启动失败的文档子节。无连接弹出消息会引导用户查看此部分。
bpo-30642: 修复IDLE测试中的引用泄露。由Louie Lu和Terry Jan Reedy提供补丁。
bpo-30495: 为textview.py添加文档字符串并使用PEP8命名。由Cheryl Sabella和Terry Jan Reedy提供补丁。
bpo-30290: 帮助-关于:使用pep8命名并添加测试。将覆盖率提高到100%。由Louie Lu、Cheryl Sabella和Terry Jan Reedy提供补丁。
bpo-30303: 向textview添加_utest选项;添加新测试。将覆盖率提高到100%。由Louie Lu和Terry Jan Reedy提供补丁。
C API¶
bpo-27867: 如果未设置Py_LIMITED_API,函数PySlice_GetIndicesEx()不再被宏替换。
构建¶
bpo-29941: 添加
--with-assertions配置标志以明确启用Cassert()检查。默认为关闭。--with-pydebug``意味着 ``--with-assertions。bpo-28787: 修复使用
--with--dtrace配置时Python的树外构建。bpo-29243: 在配置为
--enable-optimizations时,防止在make test、``make install``和一些其他make目标期间不必要的Python重新构建。bpo-23404: 不再基于文件修改时间重新生成已生成的文件:该操作现在是显式的。用``make regen-all``替换
make touch。bpo-29643: 修复
--enable-optimization不起作用的问题。
文档¶
工具/示例¶
bpo-29367: python-gdb.py现在也支持
method-wrapper(wrapperobject) 对象。
测试¶
Windows¶
Python 3.6.1 正式版¶
发布日期: 2017-03-21
核心与内置函数¶
构建¶
bpo-27593: 修复了sys.version中使用的git信息格式。
修复python.h中不兼容的注释。
Python 3.6.1 rc1¶
发布日期: 2017-03-04
核心与内置函数¶
bpo-28893: 为从 __aiter__ 和 __anext__ 返回的无效可等待对象引发的错误设置了正确的 __cause__。
bpo-29683: 修复了 _PyCode_SetExtra 中的内存分配问题。由 Brian Coleman 提供补丁。
bpo-29684: 修复了 PyEval_CallObjectWithKeywords 的一个小回归问题。当 kwargs 不是字典时,它应该引发 TypeError。但当 args=NULL 且 kwargs 不是字典时,可能会导致段错误。
bpo-28598: 支持在调用 str.__mod__ 之前调用 str 子类的 __rmod__。由 Martijn Pieters 提供补丁。
bpo-29607: 修复了 CALL_FUNCTION_EX 的 stack_effect 计算。补丁由 Matthieu Dartiailh 提供。
bpo-29602: 修复了在复杂子类的构造函数和具有 __complex__ 方法的输入中对有符号零的错误处理。由 Serhiy Storchaka 提供补丁。
bpo-29347: 修复了在创建弱引用对象时可能解引用未定义指针的问题。
bpo-29438: 修复了key sharing dict中的use-after-free问题。
bpo-29319: 防止RunMainFromImporter覆盖sys.path[0]。
bpo-29337: 修复了比较代码对象时可能出现的BytesWarning。警告可能在编译时发出。
bpo-29327: 修复了将可迭代关键字参数传递给sorted()时崩溃的问题。
bpo-29034: 修复了os模块(path_converter)中的内存泄漏和use-after-free问题。
bpo-29159: 修复了当x.__index__()引发异常时bytes(x)的回归问题。
bpo-28932: 如果不存在<sys/random.h>,则不包含它。
bpo-25677: 修正了缩进块语法错误提示符的位置。基于Michael Layzell的补丁。
bpo-29000: 修复了八进制数在交替形式下零填充的bytes格式化。
bpo-26919: 在Android上,操作系统数据现在总是以UTF-8编码/解码,而不是使用区域设置编码,以避免与已经使用UTF-8的os.fsencode()和os.fsdecode()不一致。
bpo-28991: functools.lru_cache()容易受到一个由猴子补丁len()函数触发的晦涩的重入错误的影响。
bpo-28739: f字符串表达式不再被接受为文档字符串和由ast.literal_eval()处理,即使它们不包含表达式。
bpo-28512: 修复了通过PyErr_SyntaxLocationEx()和PyErr_SyntaxLocationObject()设置SyntaxError的offset属性。
bpo-28918: 修复了当Python使用Py_DEBUG定义构建时,xxlimited的交叉编译问题。
bpo-28731: 优化_PyDict_NewPresized()以创建正确大小的字典。将具有常量键的字典字面量的速度提高至30%。
库¶
bpo-29169: 将 zlib 更新至 1.2.11。
bpo-29623: 允许在 ConfigParser.read() 中使用路径类对象作为单一参数。由 David Ellis 提供补丁。
bpo-28963: 修复了在 C 中实现的 asyncio.Future.remove_done_callback 中的越界迭代。
bpo-29704: asyncio.subprocess.SubprocessStreamProtocol 在所有管道关闭之前不再关闭。
bpo-29271: 修复 Task.current_task 和 Task.all_tasks 在 C 中的实现,使其能够接受 None 参数,如同它们的纯 Python 实现一样。
bpo-29703: 修复 asyncio,支持在子进程中实例化新的事件循环。
bpo-29376: 修复 threading._DummyThread.is_alive() 中的断言错误。
bpo-28624: 添加一个测试,检查 Popen() 的 cwd 参数是否接受 PathLike 对象。由 Sayan Chowdhury 提供补丁。
bpo-28518: 在 DML 语句之前隐式开始一个事务。由 Aviv Palivoda 提供补丁。
bpo-29532: 修改传递给 functools.partial() 的 kwarg 字典不再影响创建后的 partial 对象。
bpo-29110: 修复 aifc.open() 中当文件作为文件系统路径给出且不是有效的 AIFF 格式时的文件对象泄漏问题。由 Anthony Zhang 提供补丁。
bpo-28556: 对 typing 模块进行了多项更新:typing.Counter、typing.ChainMap、改进的 ABC 缓存等。原始 PR 由 Jelle Zijlstra、Ivan Levkivskyi、Manuel Krebber 和 Łukasz Langa 提供。
bpo-29100: 修复了 Python 3.6.0 中引入的 datetime.fromtimestamp() 的回归问题:检查最小和最大年份。
bpo-29519: 修复了在与multiprocessing和自定义编解码器的罕见组合使用时,weakref在解释器关闭期间抛出异常的问题。
bpo-29416: 防止 pathlib.Path.mkdir 中的无限循环。
bpo-29444: 修复了 match 对象的 group() 方法中的越界缓冲区访问。基于 WGH 的补丁。
bpo-29335: 修复了当子进程已退出到停止状态而不是终止状态(例如:在 ptrace 下)时的 subprocess.Popen.wait()。
bpo-29290: 修复了 argparse 中帮助消息会在非断行空格处换行的回归问题。
bpo-28735: 修复了 mock.MagickMock 与 mock.ANY 的比较。
bpo-29316: 恢复typing模块的临时状态,向文档添加相应说明。由Ivan L.提供补丁。
bpo-29219: 修复了未初始化的 ctypes.CDLL 实例的 repr 中的无限递归。
bpo-29011: 通过向typing模块添加Deque来修复一个重要的遗漏。
bpo-28969: 修复了functools.lru_cache的C实现中的竞态条件。当缓存函数满时,如果同时从不同线程以相同的未缓存参数调用,可能会引发KeyError。
bpo-29142: 在urllib.request中,no_proxy环境变量中带有前导点的后缀可以再次匹配相关的主机名(例如.b.c匹配a.b.c)。由Milan Oberkirch提供补丁。
bpo-28961: 修复unittest.mock._Call辅助函数:不再忽略name参数。由Jiajun Huang提供补丁。
bpo-29203: functools.lru_cache()现在尊重 PEP 468 并保留关键字参数的顺序。f(a=1, b=2)现在与f(b=2, a=1)分开缓存,因为这两个调用可能产生不同的结果。
bpo-15812: inspect.getframeinfo()现在正确显示上下文的第行。由Sam Breese提供补丁。
bpo-29094: 使用外部文件对象和模式"w"和"x"创建的ZIP文件中的偏移量现在相对于文件的开始位置。
bpo-29085: 允许random.Random.seed()使用高质量的OS随机性,而不是pid和时间。
bpo-29061: 修复了secrets.randbelow()中的一个bug,该bug在给定负输入时会挂起。由Brendan Donegan提供补丁。
bpo-29079: 防止pathlib.resolve()在Windows上陷入无限循环。
bpo-13051: 修复了大型或调整大小的curses.textpad.Textbox中的递归错误。基于Tycho Andersen的补丁。
bpo-29119: 修复collections.OrderedDict move_to_end()方法的纯Python版本中的weakrefs。由Andra Bogildea贡献。
bpo-9770: curses.ascii谓词现在正确处理负整数。
bpo-28427: 当从另一个线程收集时,旧键不应从WeakValueDictionary中移除新值。
bpo-28923: 从Tix.py中移除编辑器工件。
bpo-29055: 通过抑制上游异常,清理了random.choice()上的空种群错误。
bpo-28871: 修复了在深度ElementTree释放时的崩溃。
bpo-19542: 修复WeakValueDictionary.setdefault()和WeakValueDictionary.pop()中的bug,这些bug在另一个线程发生GC收集时出现。
bpo-20191: 修复了resource.prlimit()中的崩溃,当传递一个不拥有其元素的序列作为限制时。
bpo-28779: 如果预加载的模块实例化了某些多处理对象(如锁),multiprocessing.set_forkserver_preload()会使forkserver进程崩溃。
bpo-28847: dbm.dumb现在支持读取只读文件,并且在索引文件未更改时不再写入索引文件。
bpo-26937: tarfile.TarFile 类的 chown() 方法现在在无法导入 grp 模块时不会失败,例如在 Android 平台上。
IDLE¶
Windows¶
C API¶
bpo-27867: 如果未设置 Py_LIMITED_API 或其值设置在 0x03050400 和 0x03060000(不包括)之间或 0x03060100 或更高,则函数 PySlice_GetIndicesEx() 将被宏替换。
bpo-29083: 修正了一些公共API函数的声明。PyArg_VaParse()和PyArg_VaParseTupleAndKeywords()在有限API中不可用。当定义了PY_SSIZE_T_CLEAN时,PyArg_ValidateKeywordArguments()、PyArg_UnpackTuple()和Py_BuildValue()在版本<3.3的有限API中不可用。
bpo-29058: 所有在 Python 3.2 之后添加的稳定 API 扩展现在只有在 Py_LIMITED_API 设置为支持此 API 的最低 Python 版本的 PY_VERSION_HEX 值时才可用。
文档¶
测试¶
bpo-28087: 在 macOS 上跳过 test_asyncore 和 test_eintr 的 poll 失败。由于某些 macOS 版本上底层系统 poll 函数的未解决问题,在 macOS 上运行时跳过 select.poll 的一些测试。
bpo-29571: 为了匹配
re.LOCALE标志的行为,test_re.test_locale_flag 现在使用locale.getpreferredencoding(False)来确定测试正则表达式的候选编码(允许它在默认区域编码是多字节编码时正确跳过测试)bpo-28950: 在 regrtest 命令行参数中禁止将 -j0 与 -T/-l 结合使用。
bpo-28683: 修复在Android上为非root用户绑定Unix socket并引发PermissionError的测试。
bpo-26939: 添加support.setswitchinterval()函数以修复在Android armv7 qemu模拟器上挂起的test_functools。
构建¶
bpo-27593: 当从仓库构建时,sys.version和platform模块的python_build()、python_branch()和python_revision()函数现在使用git信息而不是hg。
bpo-29572: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2k。
bpo-26851: 设置Android编译和链接标志。
bpo-28768: 修复函数_setmode的隐式声明。由Masayuki Yamamoto提供补丁
bpo-29080: 从PCBuild/build.bat中移除对hg.exe的硬依赖
bpo-23903: 向PC/python3.def添加遗漏的名称。
bpo-28762: lockf()在Android API level 24上可用,但F_LOCK宏在android-ndk-r13中未定义。
bpo-28538: 修复因if_nameindex()在Android API level 24上可用但if_nameindex结构未定义而导致的编译错误。
bpo-20211: 不要将安装C头文件的目录和安装对象代码库的目录添加到交叉编译搜索路径中。原始由Thomas Petazzoni提供补丁。
bpo-28849: 不要在Android上定义sys.implementation._multiarch。
Python 3.6.0 正式版¶
发布日期: 2016-12-23
自rc2起没有更改
Python 3.6.0 rc2¶
发布日期: 2016-12-16
核心与内置函数¶
工具/示例¶
bpo-28770: 修复 python-gdb.py 以支持 fastcalls。
Windows¶
bpo-28896: 弃用 WindowsRegistryFinder。
构建¶
bpo-28898: 防止由于 HAVE_LONG_LONG 重定义导致的 gdb 构建错误。
Python 3.6.0 rc1¶
发布日期: 2016-12-06
核心与内置函数¶
bpo-23722: 而不是无声地产生一个不支持方法中零参数
super()的类,未能将新的``__classcell__``命名空间条目传递给type.__new__现在会导致一个DeprecationWarning和一个支持零参数super()的类。bpo-28797: 修改类__dict__在一个描述符的__set_name__方法内部,该描述符在那个类内部使用,不再阻止调用其他描述符的__set_name__方法。
bpo-28782: 修复了在检查下一条指令是否为YIELD_FROM时
yield from实现中的一个错误。由WORDCODE(bpo-26647)引入的回归问题。
库¶
bpo-27030: 再次允许 re.sub() 替换模板中的未知转义。但它们仍然被弃用,并将在 3.7 中禁用。
bpo-28835: 修复了 warnings.catch_warnings() 中引入的一个回归问题:如果在上下文管理器内部覆盖了 warnings.showwarning(),则调用它。
bpo-27172: 为了协助从 2.7 版本升级,之前文档中关于
inspect.getfullargspec()的弃用已被撤销。在 Python 2.7 分支不再官方支持后,可能会重新考虑这一决定。bpo-26273: 新增
socket.TCP_CONGESTION(Linux 2.6.13) 和socket.TCP_USER_TIMEOUT(Linux 2.6.37) 常量。补丁由 Omar Sandoval 编写。bpo-24142: 读取损坏的配置文件会使configparser处于无效状态。原始补丁由Florian Höch提供。
bpo-28843: 修复 asyncio C Task 以处理异常的 __traceback__。
C API¶
bpo-28808: PyUnicode_CompareWithASCIIString() 现在永远不会引发异常。
文档¶
工具/示例¶
bpo-28023: 修复python-gdb.py不支持新字典实现的问题。
Python 3.6.0 beta 4¶
发布日期: 2016-11-21
核心与内置函数¶
bpo-28532: 当提供-V选项两次时显示sys.version。
bpo-27100: with语句现在在检查__exit__之前先检查__enter__。当两种方法都缺失时,这会给出不那么令人困惑的错误信息。由Jonathan Ellington提供补丁。
bpo-28746: 在没有ioctl FIOCLEX和FIONCLEX命令的平台上修复set_inheritable()文件描述符方法。
bpo-26920: 在没有langinfo的平台上修复初始化解释器时未获取区域设置的字符集的问题。
bpo-28648: 修复了在Mac OS X上调试版本中解码星体字符时Py_DecodeLocale()崩溃的问题。补丁由Xiang Zhang提供。
bpo-19398: 在编译时PYTHONPATH组件为空的情况下,不再向sys.path组件添加额外的斜杠。
bpo-28665: 将STORE_DEREF操作码的速度提高40%。
bpo-28583: PyDict_SetDefault在需要时未合并分割表。由Xiang Zhang提供补丁。
bpo-27243: 将 PendingDeprecationWarning 改为 DeprecationWarning。如问题中达成的共识,__aiter__ 返回一个可等待对象应在 3.5 中导致 PendingDeprecationWarning,在 3.6 中导致 DeprecationWarning。
bpo-26182: 修复在引发DeprecationWarning的代码中的内存泄漏。
bpo-28721: 修复异步生成器的aclose()和athrow()以正确处理StopAsyncIteration传播。
库¶
bpo-28752: 恢复了 datetime 对象的 __reduce__() 方法。
bpo-28727: 正则表达式模式,由 re.compile() 创建的 _sre.SRE_Pattern 对象,现在可以比较(仅限 x==y 和 x!=y 操作符)。这一更改应该修复了 bpo-18383:当 warnings 模块重新加载时不要重复警告过滤器(通常只在单元测试中这样做)。
bpo-20572: subprocess.Popen.wait 方法的未记录参数 endtime 现在会引发 DeprecationWarning。
bpo-25659: 在 ctypes 中,防止在抽象类(如 Array)上调用 from_buffer() 和 from_buffer_copy() 方法时崩溃。
bpo-19717: 使Path.resolve()在不存在的路径上也能成功。由Vajrasky Kok提供补丁。
bpo-28563: 修复了在gettext模块中处理复数形式选择时可能导致的DoS和任意代码执行问题。表达式解析器现在支持GNU gettext所支持的精确语法。
bpo-28387: 修复了当垃圾收集器在其他线程中调用时,_io.TextIOWrapper解构器可能崩溃的问题。基于Sebastian Cufre的补丁。
bpo-28600: 优化 loop.call_soon。
bpo-28613: 修复 get_event_loop() 在协程/回调中调用时返回当前循环的问题。
bpo-28634: 修复 asyncio.isfuture() 以支持 unittest.Mock。
bpo-26081: 修复 _asyncio.Future.__iter__().throw 中的 refleak。
bpo-28639: 修复 inspect.isawaitable 始终返回布尔值,由 Justin Mayfield 提供补丁。
bpo-28652: 使循环方法拒绝它们不支持的套接字类型。
bpo-28653: 修复 functools.lru_cache 中的 refleak。
bpo-28703: 修复 asyncio.iscoroutinefunction 以处理 Mock 对象。
bpo-28704: 修复 create_unix_server 以支持类路径对象 (PEP 519)。
bpo-28720: 添加 collections.abc.AsyncGenerator。
文档¶
bpo-28513: 记录了 zipfile 的命令行接口。
测试¶
构建¶
Python 3.6.0 beta 3¶
发布日期: 2016-10-31
核心与内置函数¶
bpo-28128: 无效的str和byte转义序列的弃用警告现在会打印出关于错误发生位置的更好信息。由Serhiy Storchaka和Eric Smith提供补丁。
bpo-28509: dict.update()不再分配不必要的大内存。
bpo-28426: 修复了调试版本中PyUnicode_AsDecodedObject()潜在的崩溃问题。
bpo-28517: 修复了窥孔优化器中的一个偏移错误,该错误导致保留无法到达的代码。
bpo-28214: 改进了对有问题的 __set_name__ 属性的异常报告。
bpo-23782: 修复了 _PyTraceback_Add() 中可能的内存泄漏和 PyTraceBack_Here() 中的异常丢失问题。
bpo-28471: 修复 socket.setblocking 中“Python 内存分配器在未持有 GIL 的情况下被调用”的崩溃问题。
库¶
bpo-27517: LZMA压缩器和解压器在两次接收到空数据时不再抛出异常。补丁由Benjamin Fogle提供。
bpo-28549: 修复了curses的addch()在使用ncurses6时的段错误。
bpo-28449: tarfile.open()以模式"r"或"r:"现在会先尝试以压缩方式打开tar文件,再尝试无压缩方式打开。否则在使用ignore_zeros=True时有50%的几率失败。
bpo-23262: webbrowser模块现在支持Firefox 36+及衍生浏览器。基于Oleg Broytman的补丁。
bpo-27939: 修复了tkinter.ttk.LabeledScale和tkinter.Scale中由于在Tk内部将比例表示为浮点值而导致的错误。如果底层Tk变量设置为浮点值,tkinter.IntVar现在可以正常工作。
bpo-18844: random.choices() 中指定权重的各种方式现在产生相同的结果序列。
bpo-28255: calendar.TextCalendar().prmonth() 在打印月历后不再在新行的开头打印空格。由 Xiang Zhang 提供补丁。
bpo-20491: textwrap.TextWrapper 类现在支持不换行空格。基于 Kaarle Ritvanen 的补丁。
bpo-28353: os.fwalk() 不再因损坏的链接而失败。
bpo-28430: 修复了 C 实现的 asyncio.Future 迭代器不接受非 None 值传递给 it.send(val) 的问题。
bpo-27025: 为提升可读性,Tkinter 部件的生成名称现在以 "!" 前缀开头。
bpo-25464: 通过为 Tix 库的 bug 添加变通方法,修复了 tkinter.tix 模块中的 HList.header_exists()。
bpo-28488: shutil.make_archive() 不再向 ZIP 归档添加 "./" 条目。
bpo-25953: re.sub() 现在即使在字符串中未找到模式,也会为替换模板中的无效数字组引用引发错误。无效组引用的错误消息现在包括组索引和引用的位置。基于 SilentGhost 的补丁。
bpo-18219: 为大量列优化 csv.DictWriter。Mariatta Wijaya 的补丁。
bpo-28448: 修复了 C 实现的 asyncio.Future 在 Windows 上不工作的问题。
bpo-28480: 修复在禁用多线程时构建 socket 模块时的错误。
bpo-24452: 使 webbrowser 支持 Mac OS X 上的 Chrome。
bpo-20766: 修复了 pdb 在处理 SIGINT 处理器时的引用泄漏问题。
bpo-28492: 修复 _asyncio.Future 中如何引发 StopIteration 异常。
bpo-28500: 修复 asyncio 以处理来自另一个线程的异步生成器 GC。
bpo-26923: 修复 asyncio.Gather 一旦所有子项完成就拒绝被取消的问题。由 Johannes Ebke 提供补丁。
bpo-26796: 不要为默认的线程池执行器配置工作线程数量。初始由 Hans Lawrenz 提供补丁。
bpo-28544: 用 C 实现 asyncio.Task。
Windows¶
bpo-28522: 修复 getpathp.c 中错误处理的缓冲区重新分配
构建¶
测试¶
Python 3.6.0 beta 2¶
发布日期: 2016-10-10
核心与内置函数¶
bpo-28183: 优化并清理了字典迭代。
bpo-26081: 添加了 asyncio.Future 的 C 实现。原始由 Yury Selivanov 提供补丁。
bpo-28379: 为 PyUnicode_CopyCharacters() 添加了健全性检查和测试。由 Xiang Zhang 提供补丁。
bpo-28376: 长范围迭代器的类型现在注册为 Iterator。由 Oren Milman 提供补丁。
bpo-28376: 现在不推荐通过调用 range_iterator 类型来创建 range_iterator 实例。由 Oren Milman 提供补丁。
bpo-28376: range_iterator 的构造函数现在检查步长不为 0。由 Oren Milman 提供补丁。
bpo-26906: 现在解析未初始化类型的特殊方法会导致类型的隐式初始化而不是失败。
bpo-18287: PyType_Ready() 现在检查 tp_name 是否为 NULL。原始由 Niklas Koep 提供补丁。
bpo-24098: 修复了在编译过程中 AST 被更改时可能发生的崩溃。
bpo-28201: 当哈希值具有相同的低位时,字典减少了哈希表中第二次冲突的可能性。
bpo-28350: 不再对含有空字符的字符串常量进行内部化。
bpo-26617: 修复了在弱引用回调过程中运行垃圾收集时发生的崩溃。
bpo-27942: 现在在元组和冻结集合中递归内部化字符串常量。
bpo-21578: 修复了当 ImportError 使用无效关键字参数调用时误导性的错误消息。
bpo-28203: 修复了 complex(1.0, {2:3}) 错误消息中的不正确类型。补丁由 Soumya Sharma 提供。
bpo-28086: 元组子类型的单个可变位置参数现在被转换为确切的元组,而不是原封不动地传递给 C 定义的函数。
bpo-28214: 现在 __set_name__ 是在类上查找而不是在实例上查找。
bpo-27955: 当 getrandom() 系统调用因 EPERM 失败时(例如被 SECCOMP 阻止时),回退读取 /dev/urandom 设备。
bpo-28192: 在隔离模式下不导入readline。
升级内部unicode数据库至Unicode 9.0.0版本。
bpo-28131: 修复zipimport的compile_source()中的回归问题。zipimport应使用与解释器相同的优化级别。
bpo-28126: 用memcpy()替换Py_MEMCPY。Visual Studio能正确优化memcpy()。
bpo-28120: 当尝试移除"待定键"(尚未插入分裂表的键)时,修复split字典的dict.pop()。由Xiang Zhang提供补丁。
bpo-26182: 当async和await关键字被用作变量/属性/类/函数名时,发出DeprecationWarning。
库¶
bpo-27998: 修复了 Windows 上 os.scandir() 对字节路径的支持。由 Eryk Sun 提供补丁。
bpo-28317: 反汇编器现在解码 FORMAT_VALUE 参数。
bpo-26293: 修复了不从文件开头开始写入 ZIP 文件的问题。ZIP 文件中的偏移量现在相对于存档的开始,以符合规范。
bpo-28380: unittest.mock 的 Mock autospec 函数现在正确支持 assert_called、assert_not_called 和 assert_called_once。
bpo-27181: 移除 statistics.geometric_mean 并推迟至 3.7 版本。
bpo-28229: lzma 模块现在支持 pathlib。
bpo-28321: 修复了在 plistlib 中使用二进制格式写入非 BMP 字符的问题。
bpo-28225: bz2 模块现在支持 pathlib。初始由 Ethan Furman 提供补丁。
bpo-28227: gzip 现在支持 pathlib。由 Ethan Furman 提供补丁。
bpo-27358: 优化了合并可变关键字参数的过程,并改进了当传递非映射作为可变关键字参数时的错误信息。
bpo-28257: 改进了当传递非可迭代对象作为可变位置参数时的错误信息。添加了操作码 BUILD_TUPLE_UNPACK_WITH_CALL。
bpo-28322: 修复了当从错误的 pickle 数据反序列化 itertools 对象时可能发生的崩溃。基于 John Leitch 的补丁。
bpo-28228: imghdr 现在支持 pathlib。
bpo-28226: compileall 现在支持 pathlib。
bpo-28314: 修复了 xml.etree.ElementTree.Element 的 getiterator() 方法的函数声明(C 标志)。
bpo-28148: 停止在 time 模块中使用 localtime() 和 gmtime()。引入了平台无关的 _PyTime_localtime API,该 API 类似于 POSIX 的 localtime_r,但在所有平台上都可用。由 Ed Schouten 提供补丁。
bpo-28253: 修复了极端月份(0001-01和9999-12)的日历功能。重新实现了itermonthdays()和itermonthdays2()方法,使其不再调用可能导致datetime.date下溢/溢出的itermonthdates()。
bpo-28275: 修复了LZMADecompressor和BZ2Decompressor类中decompress()方法可能存在的释放后使用问题。原始由John Leitch提供补丁。
bpo-27897: 修复了如果传递无效的字符串类似对象作为名称时,sqlite3.Connection.create_collation()可能崩溃的问题。由Xiang Zhang提供补丁。
bpo-18844: random.choices()现在将k作为仅关键字参数,以提高常见情况的可读性,并与其他语言中使用的签名保持一致。
bpo-18893: 修复了Lib/ctypes/macholib/dyld.py中无效的异常处理。由Madison May提供补丁。
bpo-27611: 修复了tkinter.tix模块中对默认根窗口的支持。在DisplayStyle构造函数中添加了master参数。
bpo-27348: 在traceback模块中,恢复了类似于"Exception: None"的异常消息的格式化。这修复了3.5a2中引入的回归问题。
bpo-25651: 允许在subTest()的msg参数中使用假值。
bpo-27778: 修复了当getrandom()被信号中断且信号处理程序引发Python异常时,os.getrandom()中的内存泄漏问题。
bpo-28200: 修复了Windows上os模块中的内存泄漏问题(修复了path_converter()函数)。
bpo-25400: RobotFileParser现在正确返回crawl_delay和request_rate的默认值。初始由Peter Wirtz提供补丁。
bpo-27932: 防止win32_ver()中的内存泄漏。
修复socket._sendfile_use_sendfile中的UnboundLocalError。
bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。
bpo-22493: 现在,通过在正则表达式中间使用内联标志发出的警告消息包含(截断的)正则表达式模式。由Tim Graham提供补丁。
bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。
bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。
bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。
bpo-28114: 修复当env包含字节字符串时parse_envlist()崩溃的问题。由Eryk Sun提供补丁。
bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。
bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。
bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。
bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。
bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。
bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。
bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。
bpo-28368: 如果子监视器没有附加循环,则拒绝监视进程。由Vincent Michel提供补丁。
bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。
bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。
bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。
bpo-28372: 修复asyncio以支持非python协程的格式化。
bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。
bpo-27972: 禁止Tasks等待自身。
Windows¶
bpo-28402: 为 Windows 上的标准库添加签名目录文件。
bpo-28333: 为 ps1/ps2 和 input() 提示启用 Unicode。(由 Eryk Sun 提供补丁)
bpo-28251: 改进 Windows 上的帮助手册。
bpo-28110: launcher.msi 在 32 位和 64 位之间有不同的产品代码
bpo-28161: 以写权限打开 CON 失败
bpo-28162: 如果第一行以 Ctrl+Z 开头,WindowsConsoleIO readall() 失败
bpo-28163: WindowsConsoleIO fileno() 将错误的标志传递给 _open_osfhandle
bpo-28164: 对于各种路径,_PyIO_get_console_type 失败
bpo-28137: 将 Windows 路径文件重命名为 ._pth
bpo-28138: Windows ._pth 文件应允许导入站点
C API¶
bpo-28426: 已弃用未记录的函数 PyUnicode_AsEncodedObject()、PyUnicode_AsDecodedObject()、PyUnicode_AsDecodedUnicode() 和 PyUnicode_AsEncodedUnicode()。
构建¶
测试¶
bpo-28217: 添加_testconsole模块以测试控制台输入。
Python 3.6.0 beta 1¶
发布日期: 2016-09-12
核心与内置函数¶
bpo-23722: 由零参数 super() 使用的 __class__ 单元现在从 type.__new__ 而不是 __build_class__ 初始化,因此在类创建期间从元类方法调用时,依赖于此的类方法现在将正常工作。由 Martin Teichmann 提供补丁。
bpo-25221: 当 Python 编译时设置 NSMALLPOSINTS = 0 时,修复 PyLong_FromLong(0) 的损坏结果。
bpo-27199: 在 tarfile 中,公开 copyfileobj 的 bufsize 以提高吞吐量。由 Jason Fried 提供补丁。
bpo-27948: 在 f-字符串中,仅允许在花括号内(表达式所在处)使用反斜杠。这是与 3.6 alpha 版本的破坏性变更,其中反斜杠允许在 f-字符串的任何地方使用。同时,要求 f-字符串内的表达式必须包围在字面花括号内,而不是像
f'\x7b"hi"\x7d'这样的转义。bpo-28046: 从 sys.path 中移除平台特定的目录。
bpo-28071: 为与空集的差异添加早期退出。
bpo-25758: 防止 zipimport 不必要地编码文件名(由 Eryk Sun 提供补丁)
bpo-25856: 扩展类和函数的 __module__ 属性现在被 interned。这导致协议 4 的 pickle 数据更加紧凑。
bpo-27213: 重做 CALL_FUNCTION* 操作码以产生更短更高效的字节码。补丁由 Demur Rumed 提供,设计由 Serhiy Storchaka 完成,由 Serhiy Storchaka 和 Victor Stinner 审核。
bpo-27999: 将“使用后全局”设为 SyntaxError,同样适用于 nonlocal。由 Ivan Levkivskyi 提供补丁。
bpo-26058: 为内置字典类型添加一个新的私有版本,每次字典创建和每次字典更改时递增。PEP 509的实现。
bpo-27364: 现在,不是一个有效转义序列的反斜杠字符对会生成一个DeprecationWarning。补丁由Emanuel Barry提供。
bpo-27350:
dict的实现改为类似PyPy的方式。它更紧凑并保持插入顺序。(概念由Raymond Hettinger开发,由Inada Naoki提供补丁。)bpo-27911: 移除
exec_builtin_or_dynamic()中不必要的错误检查。bpo-27078: 添加了BUILD_STRING操作码。优化了f-字符串的评估。
bpo-17884: Python现在要求系统支持inttypes.h和stdint.h。
bpo-27961: 要求平台支持
long long。Python多年来已不再编译不支持long long的版本,因此这基本上是一个形式上的要求。bpo-27355: 移除了对Windows CE的支持。它从未完成,而且Windows CE不再是Python的相关平台。
实现 PEP 523。
bpo-27870: 零的大整数左移不再尝试分配大量内存。
bpo-25402: 在整数到十进制字符串的转换中,改进了对所需中间内存的估计,并移除了一个不必要的严格溢出检查。由Serhiy Storchaka提供补丁。
bpo-27214: 在long_invert中,更加小心地修改由long_add返回的对象,并移除了对小long的不必要检查。感谢Oren Milman的分析和补丁。
bpo-27506: 支持通过关键字传递bytes/bytearray.translate()的"delete"参数。
bpo-27812: 正确清除生成器帧对生成器的反向引用,以防止frame.clear()中的崩溃。
bpo-27811: 修复了一个在启用警告即错误时,未等待的协程被最终化时崩溃的问题。
bpo-27587: 修复了PVS-Studio发现的另一个问题:在_PyState_AddModule()中使用'def'后的空指针检查。初始由Christian Heimes提供补丁。
bpo-27792: 现在对
bool和其他int子类应用的模运算总是返回一个int。以前返回类型依赖于输入值。由 Xiang Zhang 提供补丁。bpo-26984: int() 现在总是返回一个精确的 int 实例。
bpo-25604: 修复了整数真除法中的一个次要错误;这个错误可能导致在具有不可靠 ldexp 实现的平台上出现 off-by-one-ulp 结果。
bpo-24254: 默认情况下,使类定义命名空间有序。
bpo-27662: 修复了
List_New中的一个溢出检查:原始代码检查的是Py_SIZE_MAX而不是正确的上限Py_SSIZE_T_MAX。由 Xiang Zhang 提供补丁。bpo-27782: 多阶段扩展模块导入现在正确地允许使用
m_methods字段来向Py_create_mod返回的非模块类型实例添加模块级函数。由 Xiang Zhang 提供补丁。bpo-27936: round() 函数对某些类型接受第二个 None 参数,但对其他类型不接受。通过接受所有数值类型的 None 来修复这种不一致性。
bpo-27487: 如果在导入父包之后但在执行子模块之前,在 sys.modules 中找到了 "python -m" 或 runpy.run_module() 的子模块参数,则发出警告。
bpo-27157: 使只有 type() 本身接受单参数形式。由 Eryk Sun 和 Emanuel Barry 提供补丁。
bpo-27558: 修复 "raise" 语句实现中的一个 SystemError。在一个全新的线程中,引发一个 RuntimeError,因为没有活动的异常可以重新引发。补丁由 Xiang Zhang 编写。
bpo-27942: 修复 codeobject.c 中的内存泄漏
库¶
bpo-28732: 修复 os.spawnv() 在 args 中没有元素时的崩溃
bpo-28485: 对于 compileall.compile_dir(workers=...) 参数的负值,即使多线程不可用,也总是引发 ValueError。
bpo-28037: 使用 sqlite3_get_autocommit() 而不是手动设置 Connection->inTransaction。
bpo-25283: 现在,在所有平台上,time.localtime() 和 time.gmtime() 的返回值中都提供了属性 tm_gmtoff 和 tm_zone。
bpo-24454: 现在可以使用 __getitem__ 访问正则表达式匹配对象组。"mo[x]" 等同于 "mo.group(x)"。
bpo-10740: sqlite3 不再在 DDL 语句之前隐式提交一个打开的事务。
bpo-17941: 向 collections.namedtuple() 添加了一个 module 参数。
bpo-22493: 内联标志现在应该只在正则表达式的开头使用。如果在正则表达式的中间使用它们,则会发出弃用警告。
bpo-26885: xmlrpc 现在支持解组 Apache XML-RPC 实现用于数字和 None 的附加数据类型。
bpo-28070: 修复了正则表达式中解析内联详细标志的问题。
bpo-19500: 向 ssl 模块添加了客户端 SSL 会话恢复功能。
bpo-28022: 弃用有利于 SSLContext 的 ssl 相关参数。弃用包括在 ftplib、httplib、imaplib、smtplib、poplib 和 urllib 中手动创建 SSLSocket 和 certfile/keyfile(或类似)。
bpo-28043: SSLContext 改进了默认设置:OP_NO_SSLv2、OP_NO_SSLv3、OP_NO_COMPRESSION、OP_CIPHER_SERVER_PREFERENCE、OP_SINGLE_DH_USE、OP_SINGLE_ECDH_USE 和没有 MD5 的 HIGH 密码。
bpo-24693: 将 zipfile 模块中的一些 RuntimeError 更改为更合适的类型。改进了一些错误消息和调试输出。
bpo-17909:
json.load和json.loads现在支持以 UTF-8、UTF-16 或 UTF-32 编码的二进制输入。由 Serhiy Storchaka 提供补丁。bpo-27137:
functools.partial的纯 Python 回退实现现在在子类化、pickling 和文本表示目的方面与其加速的 C 对应物行为匹配。由 Emanuel Barry 和 Serhiy Storchaka 提供补丁。修复了 mmap 模块中在异常使用模式下可能出现的整数溢出和崩溃问题。
bpo-1703178: 修复了向distutils的build_ext命令传递--link-objects选项的功能。
bpo-28019: itertools.count()不再将1.0到2.0之间的非整数步长四舍五入为1。
bpo-18401: Pdb现在支持'readrc'关键字参数,以控制是否应读取.pdbrc文件。由Martin Matusiak和Sam Kimbrel提供的补丁。
bpo-25969: 更新lib2to3语法以处理3.5中添加的解包泛化。
bpo-14977: mailcap现在遵循mailcap文件中的行顺序(“首次匹配”),符合RFC 1542的要求。由Michael Lazar提供的补丁。
bpo-28082: 将re标志常量转换为IntFlag。
bpo-28025: 将所有ssl模块常量转换为IntEnum和IntFlags。SSLContext属性现在返回标志和枚举。
bpo-23591: 向enum模块添加Flag、IntFlag和auto()。
bpo-433028: 增加了对正则表达式中修饰符跨度的支持。
bpo-24594: 在打开MSI数据库时验证persist参数。
bpo-17582: xml.etree.ElementTree现在保留属性中的空白(由Duane Griffin提供补丁。由Stefan Behnel审查和批准。)。
bpo-28047: 修复了用于新电子邮件策略中base64 CTE的行长度计算。
bpo-27576: 修复OrderedDict.__init__()中的调用顺序。
email.generator.DecodedGenerator现在支持policy关键字。
bpo-28027: 从
Lib/plat-*中移除未记录的模块:IN、CDROM、DLFCN、TYPES、CDIO和STROPTS。bpo-27445: 不将str(_charset)传递给MIMEText.set_payload()。由Claude Paroz提供的补丁。
bpo-24277: 新的电子邮件API不再是临时的,文档已经重新组织和重写以强调新API。
bpo-22450: urllib现在在默认头中包括一个
Accept: */*头。这使得REST API请求的结果更加一致和可预测,尤其是在涉及代理服务器时。lib2to3.pgen3.driver.load_grammar() 现在在相同的Grammar.txt输入下,无论哈希随机化设置如何,都会创建一个稳定的缓存文件。
bpo-28005: 允许编码实现中的ImportErrors传播。
bpo-26667: 在importlib.util中支持路径类对象。
bpo-27570: 在“ctypes”和“array”模块中避免使用空源指针进行零长度memcpy()等调用。
bpo-22233: 仅在RFC指定的CR和LF字符上断开电子邮件标题行,而不是在任意Unicode换行符上。这也修复了HTTP标题解析中的一个错误。
bpo-27331: email.mime类现在都接受一个可选的policy关键字。
bpo-27988: 修复email iter_attachments对payload列表的错误修改。
bpo-16113: 向hashlib模块添加SHA-3和SHAKE支持。
消除_scproxy.c中的一个同义指针比较警告。
bpo-27776:
os.urandom()函数现在在Linux 3.17及更新版本上会阻塞,直到系统urandom熵池初始化以提高安全性。这一变更是 PEP 524 的一部分。bpo-27778: 将Linux的
getrandom()系统调用作为一个新的os.getrandom()函数公开。这一变更是 PEP 524 的一部分。bpo-27691: 修复ssl模块对X.509证书中GEN_RID主题替代名字段的解析。
bpo-18844: 添加random.choices()。
bpo-25761: 改进了关于C实现解pickler中截断pickle数据的错误报告。在某些情况下,现在会抛出UnpicklingError而不是AttributeError和ValueError。
bpo-26798: 向hashlib添加BLAKE2(blake2b和blake2s)。
bpo-26032: 通过使用os.scandir()优化了pathlib中的globing;现在大约快了1.5到4倍。
bpo-25596: 优化了glob模块中的glob()和iglob()函数;现在大约快了3到6倍。
bpo-27928: 向hashlib模块添加scrypt(基于密码的密钥派生函数)(需要OpenSSL 1.1.0)。
bpo-27850: 从ssl模块的默认加密列表中移除3DES以应对sweet32攻击(CVE 2016-2183)。
bpo-27766: 向ssl模块的默认加密列表中添加ChaCha20 Poly1305。(需要OpenSSL 1.1.0或LibreSSL)。
bpo-25387: 检查winsound.MessageBeep的返回值。
bpo-27866: 添加SSLContext.get_ciphers()方法以获取所有启用的加密列表。
bpo-27744: 向socket模块添加AF_ALG(Linux内核加密)。
bpo-26470: 将ssl和hashlib模块移植到OpenSSL 1.1.0。
bpo-11620: 修复winsound.PlaySound中对SND_MEMORY的支持。基于Tim Lesher的补丁。
bpo-11734: 向struct模块添加对IEEE 754半精度浮点数的支持。基于Eli Stevens的补丁。
bpo-27919: 弃用distutils打包中的
extra_path分发选项。bpo-23229: 添加新的
cmath``常量:``cmath.inf``和 ``cmath.nan以匹配math.inf和``math.nan``,以及cmath.infj和cmath.nanj以匹配复数repr使用的格式。bpo-27842: csv.DictReader现在返回OrderedDict类型的行。(由Steve Holden贡献。)
移除对传递文件描述符给os.access的支持。它从未工作过,但以前不会引发错误。
bpo-12885: 修复distutils遇到符号链接时的错误。
bpo-27881: 修复了设置sqlite3.Connection.isolation_level时可能的错误。基于Xiang Zhang的补丁。
bpo-27861: 修复了当工厂创建的不是游标时sqlite3.Connection.cursor()中的崩溃。由Xiang Zhang提供补丁。
bpo-19884: 避免在OS X上使用Gnu Readline时产生虚假输出。
bpo-27706: 恢复random.Random().seed()对于使用种子版本1的字符串种子的确定性行为。允许random()的调用序列与Python 2中完全匹配。由Nofar Schnider提供补丁。
bpo-10513: 修复Connection.commit()中的回归问题。提交后不应重置语句。
bpo-12319: 在http.client.HTTPConnection请求中添加了分块传输编码支持。urllib.request.AbstractHTTPHandler类不再强制要求Content-Length头部。如果一个HTTP请求有一个文件或可迭代体,但没有Content-Length头部,库现在会转而使用分块传输编码。
来自https://github.com/python/typing的typing.py新版本:- Collection(仅适用于3.6)(bpo-27598) - 将FrozenSet添加到__all__(上游#261) - 修复_get_type_vars()中的崩溃(上游#259) - 移除ForwardRef._eval_type中的字典约束(上游#252)
bpo-27832: 使
_normalize参数成为Fraction构造器的仅关键字参数,这样``Fraction(2, 3, 4)``现在会引发TypeError。bpo-27539: 修复了在负指数和负基数情况下未归一化的
Fraction.__pow__结果。bpo-21718: 现在,使用CTEs的查询可以使用cursor.description了。
bpo-27819: 在distutils的sdists中,除非提供了"formats",否则简单地在所有平台上生成"gztar"(gzip压缩的tar格式)分发。
bpo-2466: posixpath.ismount现在能正确识别用户没有权限访问的挂载点。
bpo-9998: 在Linux上,ctypes.util.find_library现在会在LD_LIBRARY_PATH中查找共享库。
bpo-27573: code.interact的退出消息现在可以配置。
bpo-27930: 改进了logging.handlers.QueueListener的行为。感谢Paulo Andrade和Petr Viktorin的分析和补丁。
bpo-6766: 向multiprocessing添加了分布式引用计数以支持共享值/代理对象的嵌套。
bpo-21201: 提高了multiprocessing错误消息的可读性。感谢Wojciech Walczak的补丁。
asyncio: 在各Transport类中添加了 set_protocol / get_protocol 方法。
bpo-27456: asyncio:默认设置TCP_NODELAY。
IDLE¶
C API¶
测试¶
构建¶
bpo-27566: 修复冻结makefile中的clean目标(Lisa Roach提供补丁)
bpo-27705: 更新validate_ucrtbase.py中的消息
bpo-27976: 弃用在非OSX UNIX平台上使用捆绑的libffi副本构建_ctypes。
bpo-27983: 当启用
--with-optimizations时,将使用clang作为PGO链接所需的llvm-profdata工具的缺失变为配置时错误,而不是制作时。同时提高我们在MacOS和一些Linux上找到llvm-profdata工具的能力。bpo-21590: 支持DTrace和SystemTap探针。
bpo-26307: profile-opt构建现在将PGO应用于内置模块。
bpo-26359: 添加--with-optimizations标志以在可用时开启LTO和PGO构建支持。
bpo-27917: 为Android构建设置平台三元组。
bpo-25825: 更新AIX上对$(LIBPL)安装路径的引用。此路径在3.2a4中更改。
更新 OS X 安装包,使用SQLite 3.14.1 和 XZ 5.2.2版本。
bpo-21122: 修复OS X上的LTO构建。
bpo-17128: 构建带有OpenSSL私有副本的OS X安装程序。同时提供一个安装证书命令脚本示例,用于从第三方certifi模块安装一组根证书。
工具/示例¶
bpo-27952: 使Tools/scripts/fixcid.py能够在Python 3和当前的"re"模块下工作,避免无效的Python反斜杠转义,并修复解析转义C引号符号时的错误。
Windows¶
bpo-28065: 将xz依赖更新至5.2.2版本并从源代码构建。
bpo-25144: 确保在继续自定义安装之前设置TargetDir。
bpo-1602: Windows控制台不支持输入或打印Unicode(PEP 528)。
bpo-27781: 在Windows上将文件系统编码更改为UTF-8(PEP 529)。
bpo-27731: 在Windows 10上选择退出MAX_PATH限制。
bpo-6135: 向subprocess添加encoding和errors参数。
bpo-27959: 添加oem编码,将ansi别名设为mbcs,将aliasmbcs移动到编解码器查找。
bpo-27982: winsound模块的函数现在接受关键字参数。
bpo-20366: 在Windows上构建SQLite的全文搜索支持。
bpo-27756: 为Windows上的Python文件和进程添加新图标。设计由Cherry Wang提供。
bpo-27883: 在Windows上将sqlite更新至3.14.1.0版本。
Python 3.6.0 alpha 4¶
发布日期: 2016-08-15
核心与内置函数¶
bpo-27704: 优化从字节类对象和可迭代对象创建bytes和bytearray。对于短对象速度提升可达3倍。原始由Naoki Inada提供补丁。
bpo-26823: 回溯中大量重复的行现在被内置回溯渲染缩写为"[Previous line repeated {count} more times]"。由Emanuel Barry提供补丁。
bpo-27574: 减少了在使用Argument Clinic实现的函数中解析关键字参数的开销。
bpo-22557: 现在导入已经导入的模块速度提升可达2.5倍。
bpo-17596: 包含<wincrypt.h>以帮助Min GW构建。
bpo-17599: 在Windows上,重命名私有定义的REPARSE_DATA_BUFFER结构以避免与Min GW的定义冲突。
bpo-27507: 在bytearray.extend()中添加整数溢出检查。由张翔提供补丁。
bpo-27581: 在PySequence_Tuple()中不依赖包装进行溢出检查。由张翔提供补丁。
bpo-1621: 避免在列表和元组操作中出现有符号整数溢出。由张翔提供补丁。
bpo-27419: 标准的__import__()不再在全局或内置变量中查找"__import__"以导入子模块或"from import"。修复了如果从__spec__或__package__无法解析包时发出警告导致崩溃的问题。
bpo-27083: 在Windows下尊重PYTHONCASEOK环境变量。
bpo-27514: 将静态嵌套块过多的情况改为SyntaxError而非SystemError。
bpo-27366: 实现了 PEP 487 (类创建的简化定制) 。在子类化时,__init_subclass__类方法会在基类上调用。描述符在类创建后通过__set_name__初始化。
库¶
bpo-26027: 向os和os.path模块添加 PEP 519/__fspath__()支持。包含来自Jelle Zijlstra的代码。(另见 bpo-27524)
bpo-27598: 将Collections添加到collections.abc。由Ivan Levkivskyi提供补丁,文档由Neil Girdhar提供。
bpo-25958: 支持从各种ABC中"反注册"特殊方法,如__hash__、__iter__或__len__。所有这些(以及更多)可以在实现类中设置为None,行为将如同方法根本未定义。(以前,这种机制仅存在于__hash__,以使可变类不可哈希。)代码由Andrew Barnert和Ivan Levkivskyi贡献。
bpo-16764: 支持zlib.decompress()的关键字参数。由张翔提供补丁。
bpo-27736: 防止由于在3.6.0a3中为 bpo-27038 引入的代码导致的引用计数问题在解释器重新初始化后出现段错误。由张翔提供补丁。
bpo-25628: collections.namedtuple的 verbose 和 rename 参数现在仅为关键字参数。
bpo-26823: traceback.StackSummary.format 现在将重复行的大段缩写为 "[前一行重复了 {count} 次]"(这一变化进一步影响了模块中的其他 traceback 显示操作)。由 Emanuel Barry 提供补丁。
bpo-27664: 向 concurrent.futures.thread.ThreadPoolExecutor() 添加了指定线程名前缀的能力。
bpo-27181: 向 statistics 模块添加 geometric_mean 和 harmonic_mean。
bpo-27573: code.interact 现在在退出时打印一条消息。
bpo-6422: 向 timeit.Timer 对象添加 autorange 方法。
bpo-27773: 更正 _ssl.wrap_socket() 中 server_hostname 的一些内存管理错误。
bpo-26750: unittest.mock.create_autospec() 现在可以正确用于 property() 和其他数据描述符的子类。移除从未公开使用、从未文档化的 unittest.mock.DescriptorTypes 元组。
bpo-26754: 现在弃用 compile() 及类似函数中未文档化的对一般 bytes-like 对象作为路径的支持。
bpo-26800: 现在弃用 os 函数中未文档化的对一般 bytes-like 对象作为路径的支持。
bpo-26981: 向 enum.Enum 添加 _order_ 兼容性垫片,用于 Python 2/3 代码库。
bpo-27661: 向 datetime.combine 添加 tzinfo 关键字参数。
在 curses 模块中,如果向 window.getstr() 或 window.instr() 传递负值,则引发错误。
bpo-27783: 修复 operator.methodcaller 中可能使用未初始化内存的问题。
bpo-27774: 修复 _sre 中可能对未拥有对象进行 Py_DECREF 的问题。
bpo-27760: 修复 binascii.b2a_qp 中可能的整数溢出。
bpo-27758: 修复 _csv 模块中对于大记录长度可能的整数溢出。
bpo-27568: 防止 HTTPoxy 攻击 (CVE 2016-1000110)。当设置了 REQUEST_METHOD 环境变量时忽略 HTTP_PROXY 变量,这表明脚本处于 CGI 模式。
bpo-7063: 从“array”模块的切片处理中移除无用代码。由Chuck提交补丁。
bpo-27656: 不再假设sched.h定义了任何SCHED_*常量。
bpo-27130: 在“zlib”模块中,修复了压缩和解压缩大缓冲区(通常为4 GiB)时的处理问题。之前,输入被限制在4 GiB,压缩和解压缩操作未能正确处理4 GiB的结果。
在select模块中公开EPOLLEXCLUSIVE常量(当它被定义时)。
bpo-27567: 在select模块中公开EPOLLRDHUP和POLLRDHUP常量。
bpo-1621: 在“audioop”模块中避免有符号整数否定溢出。
bpo-27533: 在nt._isdir中释放GIL。
bpo-17711: 修复了使用协议0的持久ID进行反序列化的问题。原始补丁由Alexandre Vassalotti提交。
bpo-27522: 避免在email.feedparser中无意中创建的引用循环。
bpo-27512: 修复了当os.fspath()调用一个引发异常的__fspath__()方法时的段错误。补丁由Xiang Zhang提交。
IDLE¶
bpo-27714: text_textview和test_autocomplete现在在同一个进程中重新运行时通过。这发生在test_idle使用-w选项运行但未使用-jn选项时失败时。修复test_config的警告。
bpo-27621: 将查询响应验证错误消息放在查询框本身中,而不是放在单独的消息框中。重做测试以匹配。添加Mac OSX改进。原始补丁由Mark Roseman提交。
bpo-27620: 现在按Esc键会取消关闭查询框。
bpo-27609: IDLE:在初始空白后按Tab键应制表,而不是自动完成。这解决了至少两次缩进编写文档字符串的问题。
bpo-27609: 当也有非None返回时,显式返回None。在少数情况下,反转条件并消除返回。
bpo-25507: IDLE不再因为其tkinter导入而运行有bug的代码。用户必须包含直接在Python中运行所需的相同导入。
bpo-27173: 将'IDLE Modern Unix'添加到内置键集中。使默认键集依赖于平台。为配置模块的更改添加测试。
bpo-27452: 在IDLE configHandler测试转储中添加行计数器和crc。
测试¶
Windows¶
构建¶
bpo-27713: 在更新importlib的引导文件时抑制虚假的构建警告。由Xiang Zhang提供补丁。
bpo-25825: 更正对Modules/python.exp的引用,这在AIX上是必需的。这些引用在3.5.0a1中意外被更改。
bpo-27453: 配置中的CPP调用必须使用CPPFLAGS。由Chi Hsuan Yen提供补丁。
bpo-27641: 配置脚本现在在makefile中插入注释,以防止pgen和_freeze_importlib可执行文件被交叉编译。
bpo-26662: 在配置中设置PYTHON_FOR_GEN作为构建期间用于文件生成的Python程序。
bpo-10910: 避免在FreeBSD和OS X上出现C++编译错误。同时更新FreedBSD版本检查以应对原始的ctype UTF-8变通方案。
Python 3.6.0 alpha 3¶
发布日期: 2016-07-11
安全性¶
核心与内置函数¶
bpo-27473: 修复了 bytes 和 bytearray 连接中可能的整数溢出问题。补丁由 Xiang Zhang 提供。
bpo-23034: 现在默认关闭了定义了 COUNT_ALLOCS、SHOW_ALLOC_COUNT 或 SHOW_TRACK_COUNT 宏的特殊 Python 构建的输出。可以通过 "-X showalloccount" 选项重新启用。现在输出到 stderr 而不是 stdout。
bpo-27443: bytearray 迭代器的 __length_hint__() 不再为调整大小的 bytearray 返回负整数。
bpo-27007: bytes 和 bytearray 子类的 fromhex() 类方法现在返回相应子类的实例。
库¶
bpo-26844: 修复 imp.find_module() 的错误消息,使其引用 'path' 而不是 'name'。由 Lev Maximov 提供补丁。
bpo-23804: 修复 SSL 零长度 recv() 调用,使其不阻塞且不引发关于不干净 EOF 的错误。
bpo-27466: 更改 http.cookie.time2netscape 返回的时间格式,确认 netscape cookie 格式并使其与文档一致。
bpo-21708: 弃用了 dbm.dumb 与常见 dbm 行为不同的行为:在 'r' 和 'w' 模式下创建数据库以及在 'r' 模式下修改数据库。
bpo-26721: 将 socketserver.StreamRequestHandler.wfile 属性更改为实现 BufferedIOBase。特别是,write() 方法不再进行部分写入。
bpo-22115: 在 tkinter.Variable 类中添加了 trace_add、trace_remove 和 trace_info 方法。它们取代了使用过时 Tcl 命令的旧方法 trace_variable、trace、trace_vdelete 和 trace_vinfo,这些旧方法在未来的 Tcl 版本中可能不起作用。修复了旧跟踪方法:trace_vdelete() 在模式错误时不再中断跟踪,trace_vinfo() 现在总是返回字符串对的列表,"u" 模式的跟踪现在正常工作。
bpo-26243: 现在 zlib.compress() 只有 level 参数是关键字参数。第一个参数是仅位置参数。
bpo-27038: 将DirEntry类型公开为os.DirEntry。代码由Jelle Zijlstra提供补丁。
bpo-27186: 更新os.fspath()/PyOS_FSPath()以检查__fspath__()的返回值为str或bytes。
bpo-18726: json模块中的dump()、dumps()、load()和loads()函数以及JSONEncoder和JSONDecoder类构造函数的所有可选参数现在仅为关键字参数。
bpo-27319: ttk.TreeView的selection_set()、selection_add()、selection_remove()和selection_toggle()方法现在允许将多个项作为多个参数传递,而不是将它们作为元组传递。弃用了selection()方法带参数调用的未记录功能。
bpo-27079: 修复了curses.ascii函数isblank()、iscntrl()和ispunct()。
bpo-27294: Tkinter事件对象的repr中的数值状态现在表示为已知标志的组合。
bpo-27177: re模块中的Match对象现在支持类似索引的对象作为组索引。基于Jeroen Demeyer和Xiang Zhang的补丁。
bpo-26754: 一些函数(如compile()等)接受以整数可迭代对象编码的文件名参数。现在只接受字符串和字节类对象。
bpo-26536: socket.ioctl现在支持SIO_LOOPBACK_FAST_PATH。由Daniel Stokes提供补丁。
bpo-27048: 防止distutils在Windows上因环境变量包含非ASCII字符而失败。
bpo-27330: 修复了ctypes模块中可能的泄漏。
bpo-27238: 移除了turtle模块中的裸except。原始由Jelle Zijlstra提供补丁。
bpo-27122: 当在由contextlib.ExitStack()管理的上下文中引发异常,并且退出堆栈生成器之一捕获并在链中引发它时,退出时不再重新引发原始异常,而是让新的链式异常通过。这避免了issue25782中描述的 PEP 479 错误。
bpo-16864: sqlite3.Cursor.lastrowid现在支持REPLACE语句。初始补丁由Alex LordThorsen提供。
bpo-26386: 修复了 ttk.TreeView 选中操作中项目 ID 包含空格的问题。
bpo-8637: 优先使用环境变量 MANPAGER 设置的页面浏览程序(而非环境变量 PAGER 设置的)。
bpo-16182: 修复 "readline" 模块中的多个函数以使用区域设置编码,并修复 get_begidx() 和 get_endidx() 返回代码点索引。
bpo-27392: 添加 loop.connect_accepted_socket()。由 Jim Fulton 提供补丁。
IDLE¶
bpo-27477: IDLE 搜索对话框现在使用 ttk 部件。
bpo-27173: 将'IDLE Modern Unix'添加到内置键集中。使默认键集依赖于平台。为配置模块的更改添加测试。
bpo-27452: 使命令行 "idle-test> python test_help.py" 正常工作。当 python 在文件目录中启动时,__file__ 是相对的。
bpo-27452: 在IDLE configHandler测试转储中添加行计数器和crc。
bpo-27380: IDLE:添加 query.py 包含基本查询对话框和 ttk 部件。模块有子类 SectionName、ModuleName 和 HelpSource,用于通过 configdialog 和 file =>Load Module 从用户获取信息。每个子类有其自己的有效性检查。使用 ModuleName 允许用户编辑错误的模块名而不是重新开始。添加测试并删除合并到新文件中的两个文件。
bpo-27372: Test_idle 不再更改区域设置。
bpo-27365: 允许在 IDLE NEWS.txt 中使用非 ASCII 字符,用于贡献者姓名。
bpo-27245: IDLE:干净地删除自定义主题和键绑定。以前,当 IDLE 从控制台或通过导入启动时,会发出一系列警告。由 Serhiy Storchaka 提供补丁。
bpo-24137: 运行 IDLE、test_idle 和 htest 时禁用 tkinter 默认根。修复因此限制而失败的代码和测试。修复 htests 不创建第二个冗余的根和主循环。
bpo-27310: 修复 IDLE.app 在 OS X 上因遗留导入而无法启动的问题。
C API¶
bpo-26754: PyUnicode_FSDecoder() 接受以整数迭代形式编码的文件名参数。现在只接受字符串和类字节对象。
构建¶
bpo-28066: 修复在源代码树外构建时搜索构建目录中生成的包含文件的逻辑。
bpo-27442: 在sysconfig.get_config_vars()中暴露Python构建所针对的Android API级别,作为'ANDROID_API_LEVEL'。
bpo-27434: 运行交叉构建的解释器,位于PATH中,现在必须与正在构建的源代码具有相同的特性版本(例如3.6)。
bpo-26930: 更新Windows构建以使用OpenSSL 1.0.2h。
bpo-23968: 将平台目录从plat-$(MACHDEP)重命名为plat-$(PLATFORM_TRIPLET)。将配置目录(LIBPL)从config-$(LDVERSION)重命名为config-$(LDVERSION)-$(PLATFORM_TRIPLET)。将特定于平台的_sysconfigdata模块安装到平台目录,并重命名以包含ABIFLAGS。
在 GNU/Hurd 系统中不使用大文件支持。
工具/示例¶
文档¶
测试¶
bpo-27027: 添加了test.support.is_android,当这是一个Android构建时为True。
Python 3.6.0 alpha 2¶
发布日期: 2016-06-13
安全性¶
bpo-26556: 将expat更新到2.1.1,修复了 CVE 2015-1283。
修复smtplib中的TLS剥离漏洞,CVE 2016-0772。由Team Oststrom报告。
bpo-26839: 在Linux上,
os.urandom()现在调用getrandom()与GRND_NONBLOCK,如果urandom熵池尚未初始化,则回退到读取/dev/urandom。补丁由Colm Buckley编写。
核心与内置函数¶
bpo-27095: 简化了MAKE_FUNCTION并移除了MAKE_CLOSURE操作码。由Demur Rumed提供补丁。
bpo-27190: 如果sqlite3版本低于3.3.1,则引发NotSupportedError。由Dave Sawyer提供补丁。
bpo-27286: 修复了编译BUILD_MAP_UNPACK_WITH_CALL操作码的问题。使用广义解包(PEP 448)和冲突的关键字名称调用函数可能导致未定义行为。
bpo-27140: 添加了BUILD_CONST_KEY_MAP操作码。
bpo-27066: 修复了如果自定义 opener(为 open())返回一个负数而没有设置异常时的 SystemError。
bpo-26983: float() 现在总是返回一个精确的 float 实例。如果 __float__ 返回一个 float 的严格子类的实例,将发出弃用警告。在 Python 的未来版本中,这可能是一个错误。
bpo-27097: Python 解释器现在由于优化的指令解码而大约快了 7%。基于 Demur Rumed 的补丁。
bpo-26647: Python 解释器现在使用 16 位字码代替字节码。由 Demur Rumed 提供补丁。
bpo-23275: 允许在圆括号中赋值给空的目标列表:() = iterable。
bpo-27243: 更新 __aiter__ 协议:异步迭代器应该直接返回,而不是返回一个解析为异步迭代器的 awaitable。执行前者将触发 PendingDeprecationWarning。
库¶
注释掉在 API 上暴露的未在 GNU/Hurd 上实现的 socket (SO_REUSEPORT) 和 posix (O_SHLOCK, O_EXLOCK) 常量。无论如何,它们在运行时都不会工作。
bpo-27025: 现在 Tkinter 小部件生成的名称更有意义且更易于识别。
bpo-25455: 修复了递归 ElementTree.Element 和 functools.partial 对象的 repr 中的崩溃。
bpo-27294: 改进了 Tkinter 事件对象的 repr。
bpo-20508: 改进了 IPv{4,6}Network.__getitem__ 的异常消息。由 Gareth Rees 提供补丁。
bpo-21386: 实现了缺失的 IPv4Address.is_global 属性。自 07a5610bae9d 以来已有文档记录。初始由 Roger Luethi 提供补丁。
bpo-27029: 从 ZipFile.open() 中移除了对通用换行模式的已弃用支持。
bpo-27030: 现在,由
'\'和一个 ASCII 字母组成的未知转义在正则表达式中是错误。re.LOCALE 标志现在只能用于字节模式。bpo-27186: 向 DirEntry 添加 os.PathLike 支持(作为 PEP 519 的一部分)。初始由 Jelle Zijlstra 提供补丁。
bpo-20900: distutils register 命令现在能正确解码 HTTP 响应。初始由 ingrid 提供补丁。
bpo-27186: 向 pathlib 添加 os.PathLike 支持,移除其临时状态(作为 PEP 519 的一部分)。初始由 Dusty Phillips 提供补丁。
bpo-27186: 向 os.fsencode() 和 os.fsdecode() 添加对 os.PathLike 对象的支持(作为 PEP 519 的一部分)。
新版本的 typing.py 提供了几个新类和特性:stubs 外的 @overload、Reversible、DefaultDict、Text、ContextManager、Type[]、NewType()、TYPE_CHECKING,以及众多错误修复(注意,一些新特性尚未在 mypy 或其他静态分析器中实现)。同时,为 PEP 492 (Awaitable、AsyncIterable、AsyncIterator) 添加的类也已加入(实际上它们已在 3.5.1 中实现,但从未被提及)。
bpo-25738: 停止 http.server.BaseHTTPRequestHandler.send_error() 为 205 Reset Content 发送消息体。同时,不在没有正文的响应中发送 Content 头字段。由 Susumu Koshiba 提供补丁。
bpo-21313: 修复 "platform" 模块以容忍 sys.version 包含截断的构建信息。
bpo-23883: 向 __all__ 添加缺失的 API 以匹配以下模块的文档化 API:cgi、mailbox、mimetypes、plistlib 和 smtpd。由 Jacek Kołodziej 提供补丁。
bpo-27164: 在 zlib 模块中,允许使用预定义的 zdict 解压原始 Deflate 流。基于 Xiang Zhang 的补丁。
bpo-24291: 修复 wsgiref.simple_server.WSGIRequestHandler 以完全向客户端写入数据。之前它可能进行部分写入并截断数据。同时,wsgiref.handler.ServerHandler 现在可以处理 stdout 进行部分写入,但此功能已被弃用。
bpo-21272: 使用 _sysconfigdata.py 初始化 distutils.sysconfig。
bpo-19611:
inspect现在将编译器为推导式和生成器表达式作用域生成的隐式.0参数报告为名为implicit0的位置参数。由 Jelle Zijlstra 提供补丁。bpo-26373: subprocess.Popen.communicate 现在在更多/所有情况下,当子进程在调用 .communicate() 之前死亡时,正确地忽略 BrokenPipeError。
signal、socket 和 ssl 模块的 IntEnum 常量名称查找现在为具有多个名称的值返回一致的名称。例如:signal.Signals(6) 现在自称为 signal.SIGALRM,而不是根据解释器的哈希随机化种子在 signal.SIGALRM 和 signal.SIGIOT 之间切换。
bpo-27167: 当子进程因信号死亡时,澄清 subprocess.CalledProcessError 错误消息文本。
bpo-25931: 在像 Windows 这样不支持 os.fork() 的平台上不定义 socketserver.Forking* 名称。
bpo-21776: distutils.upload 现在正确处理 HTTPError。初始由 Claudiu Popa 提供补丁。
bpo-26526: 用简单的 DFA 验证器替换解析器模块中的自定义解析树验证。
bpo-27114: 修复 SSLContext._load_windows_store_certs 因 PermissionError 失败的问题。
bpo-18383: 避免在使用 filterwarnings 和 simplefilter 时创建重复的过滤器。基于 Alex Shkop 的补丁。
bpo-23026: winreg.QueryValueEx() 现在为 REG_QWORD 类型返回一个整数。
bpo-26741: 如果子进程仍在运行,subprocess.Popen 析构函数现在会发出 ResourceWarning 警告。
bpo-27056: 优化 pickle.load() 和 pickle.loads(),反序列化大量小对象时速度提高高达 10%。
bpo-21271: reset_mock 调用中的新关键字参数。
IDLE¶
bpo-5124: 在 X11 上,现在粘贴选中的文本会替换选中内容。这匹配了 Windows、Mac、大多数现代 Linux 应用和 ttk 小部件上的粘贴工作方式。原始由 Serhiy Storchaka 提供补丁。
bpo-24750: 将 IDLE 中的所有滚动条切换为 ttk 版本。必要时,添加最小测试以覆盖更改。
bpo-24759: IDLE 需要 tk 8.5 及 ttk 小部件的可用性。删除现在不再需要的 tk 版本测试和旧版本代码。添加 IDLE 语法着色器的测试。
bpo-27239: idlelib.macosx.isXyzTk 函数按需初始化。
bpo-27262: 将 Aqua 解绑代码(启用上下文菜单)移至 macosx。
bpo-24759: 在 idlelib.idle_test.__init__ 中明确表示该目录是 test.test_idle 的私有实现和维护者的工具。
bpo-27196: 在运行 IDLE 测试时停止 'ThemeChanged' 警告。这些警告在其他警告被 #20567 抑制后仍然存在。将 Serhiy Storchaka 的 update_idletasks 解决方案应用于四个测试文件。在 idle_test/README.txt 中记录这一额外建议。
bpo-20567: 修改 idle_test/README.txt,提供避免测试中 tk 警告信息的建议。将建议应用于几个 IDLE 测试。
bpo-24225: 使用新文件名和事件处理程序更新 idlelib/README.txt。
bpo-27156: 移除 IDLE 未使用的过时代码。
bpo-27117: 使颜色器 htest 和 turtledemo 支持深色主题。将配置文本小部件颜色的代码移至新函数。
bpo-24225: 重命名许多
idlelib/*.py和idle_test/test_*.py文件。编辑文件,当旧名称引用模块而非其包含的类时,用新名称替换旧名称。更多信息见问题和 IDLE 在 3.6 中的新功能部分。bpo-26673: 当 tk 报告字体大小为 0 时,更改为大小 10。Linux 上的此类字体阻止了配置对话框的打开。
bpo-21939: 添加 IDLE 的渗滤器测试。原始由 Saimadhav Heblikar 提供补丁。
bpo-21676: 添加 IDLE 的替换对话框测试。原始由 Saimadhav Heblikar 提供补丁。
bpo-18410: 添加 IDLE 的搜索对话框测试。原始由 Westley Martínez 提供补丁。
bpo-21703: 添加撤销委托器的测试。补丁主要由 Saimadhav Heblikar 提供。
bpo-27044: 添加ConfigDialog.remove_var_callbacks以防止内存泄漏。
bpo-23977: 在test_delegator中添加更多断言。
文档¶
测试¶
Windows¶
bpo-27064: py.exe启动器现在默认使用Python 3。Windows启动器
py.exe在交互使用时不再默认优先选择已安装的Python 2版本而不是Python 3。bpo-17500: 移除未使用和过时的图标。(另见:https://github.com/python/pythondotorg/issues/945)
构建¶
C API¶
工具/示例¶
bpo-26282: Argument Clinic现在支持在同一函数中的仅位置和关键字参数。
Python 3.6.0 alpha 1¶
发布日期: 2016-05-16
安全性¶
核心与内置函数¶
bpo-20041: 修复当frame.f_trace被设置为None时的TypeError。由Xavier de Gaye提供补丁。
bpo-26168: 修复了在使用 "N" 格式化单元时 Py_BuildValue() 失败可能导致的内存泄漏问题。
bpo-26991: 修复了创建带有注解的函数时可能出现的内存泄漏问题。
bpo-27039: 修复了 bytearray.remove() 对于大于127的值的处理。基于 Joe Jevnik 的补丁。
bpo-23640: int.from_bytes() 不再绕过子类的构造函数。
bpo-27005: 优化了 float.fromhex() 类方法对于精确浮点数的处理。现在速度提高了2倍。
bpo-18531: 单一的可变关键字参数如果是字典子类,将不再原封不动地传递给C定义的函数。现在会被转换为确切的字典。
bpo-26811: gc.get_objects() 不再包含带有 NULL 指针的损坏元组。
bpo-20120: 使用 RawConfigParser 来解析 .pypirc 文件,移除了无意中随着迁移到 Python 3 而添加的插值支持。现在的行为不会再在 .pypirc 文件中进行任何插值,与 Python 2.7 和 Setuptools 19.0 的行为一致。
bpo-26249:
PyMem_Malloc()域(PYMEM_DOMAIN_MEM)的内存函数现在使用 pymalloc allocator 而非系统的malloc()。应用程序在不持有 GIL 的情况下调用PyMem_Malloc()现在可能会崩溃:使用PYTHONMALLOC=debug环境变量来验证你的应用程序中内存分配器的使用情况。bpo-26802: 优化了仅使用解包的函数调用,如
func(*tuple)(没有其他位置参数,没有关键字参数) :避免复制元组。补丁由 Joe Jevnik 编写。bpo-26659: 使内置的 slice 类型支持循环回收。
bpo-26718: super.__init__ 如果被多次调用,将不再泄露内存。注意:不推荐直接调用 super.__init__!
bpo-27138: 修正了 FileFinder.find_spec() 的文档注释。
bpo-25339: 现在在设置 stdin 和 stdout 的错误处理器时,PYTHONIOENCODING 优先于 locale。
bpo-26494: 修复了在迭代耗尽迭代器时的崩溃问题。受影响的类包括通用序列迭代器、str、bytes、bytearray、list、tuple、set、frozenset、dict、OrderedDict的迭代器,相应的视图以及os.scandir()迭代器。
bpo-26574: 优化了
bytes.replace(b'', b'.')和bytearray.replace(b'', b'.')。补丁由Josh Snider编写。bpo-26581: 如果在Python源代码文件中一行内多次指定编码声明,只有第一个会被考虑。
bpo-19711: 为重新加载命名空间包添加了测试。
bpo-26563: 如果调用
PyMem_Malloc()系列函数时没有持有GIL,Python内存分配器的调试钩子现在会引发致命错误。bpo-26564: 在错误时,Python内存分配器的调试钩子现在使用
tracemalloc模块来获取内存块分配时的回溯。bpo-26558: Python内存分配器
PyObject_Malloc()的调试钩子现在可以检测到在没有持有GIL时调用函数的情况。bpo-26516: 添加了
PYTHONMALLOC环境变量来设置Python内存分配器和/或安装调试钩子。bpo-26516:
PyMem_SetupDebugHooks()函数现在也可以在发布模式下编译的Python中使用。bpo-26516:
PYTHONMALLOCSTATS环境变量现在也可以在发布模式下编译的Python中使用。如果设置为空字符串,则现在无效。bpo-26516: 在调试模式下,当Python配置为不使用pymalloc时,调试钩子现在也会安装在Python内存分配器上。
bpo-26464: 修复了当字符串为ASCII且第一个替换移除了字符,但下一个替换使用非ASCII字符或长度超过1个字符的字符串时str.translate()的问题。这是在Python 3.5.0中引入的回归问题。
bpo-22836: 确保即使格式化产生次要错误时,PyErr_Display()和PyErr_WriteUnraisable()产生的异常报告也是合理的。这影响sys.__excepthook__()产生的报告以及__del__()引发异常时的情况。
bpo-26302: 修正行为,拒绝将逗号作为cookie名称的合法字符。
bpo-26136: 当生成器引发StopIteration时,将警告从PendingDeprecationWarning升级为DeprecationWarning。由Anish Shah提供补丁。
bpo-26204: 编译器现在忽略所有常量语句:bytes、str、int、float、complex、名称常量(None、False、True)、Ellipsis和ast.Constant;不仅仅是str和int。例如,``1.0``现在在``def f(): 1.0``中被忽略。
bpo-4806: 在函数调用中使用星号(
*)解包时,避免掩盖原始的TypeError异常。基于Hagen Fürstenau和Daniel Urban的补丁。bpo-26146: 添加一种新的AST节点:
ast.Constant。它可以被外部AST优化器使用,但编译器不直接发出这样的节点。bpo-23601: 通过使用Python的小对象分配器,加速了字典键对象的分配。(由Julian Taylor贡献。)
bpo-18018: 如果尝试在没有已知父包的情况下进行相对导入,导入将引发ImportError而不是SystemError。
bpo-25843: 编译代码时,如果常量相等但类型不同,则不合并它们。例如,
f1, f2 = lambda: 1, lambda: 1.0``现在被正确编译为两个不同的函数:``f1()``返回 ``1(int) 和``f2()``返回1.0(float) ,即使1和1.0相等。bpo-26107: 代码对象的
co_lnotab属性的格式更改以支持负行号增量。bpo-26154: 新增一个私有函数_PyThreadState_UncheckedGet()用于获取当前Python线程状态,但如果其为NULL时不发出致命错误。必须使用此新函数而非直接访问_PyThreadState_Current变量。自Python 3.5.1起,该变量不再暴露以隐藏原子C类型的精确实现,避免编译器问题。
bpo-25791: 如果__package__ != __spec__.parent或既未定义__package__也未定义__spec__,则引发ImportWarning。
bpo-22995: [更新] 由于在基于Cython的项目中观察到的回归问题,注释掉_PyObject_GetState()中的一个可pickle性测试。
bpo-25961: 类型名称中不允许空字符。
bpo-25973: 修复当无效的非局部语句绑定一个以两个下划线开头的名称时导致的段错误。
bpo-22995: 不是列表或字典的子类且未实现任何与pickle相关的方法(__reduce__、__reduce_ex__、__getnewargs__、__getnewargs_ex__或__getstate__)的扩展类型实例,包括memoryview,将不能再被pickle。
bpo-20440: 大量替换不安全的属性设置代码为特殊宏Py_SETREF。
bpo-25766: 特殊方法__bytes__()现在在str子类中工作。
bpo-25421: 内置类型的__sizeof__方法现在使用动态基本大小。这使得sys.getsize()能够正确工作于定义了__slots__的子类。
bpo-25709: 修复了原地字符串连接和utf-8缓存的问题。
bpo-5319: 新增Py_FinalizeEx() API,允许Python在刷新缓冲流失败时设置退出状态为120。
bpo-25485: telnetlib.Telnet现在是一个上下文管理器。
bpo-24097: 修复了如果槽名称在__getattr__内部被释放时object.__reduce__()中的崩溃问题。
bpo-24731: 修复了在将具有特殊方法 __bytes__、__trunc__ 和 __float__ 的对象转换为 bytes、int 和 float 的子类时,返回这些子类实例导致的崩溃问题。
bpo-25630: 修复了在接受文件系统路径的函数中,参数解析时可能发生的段错误。
bpo-23564: 修复了 _posixsubprocess 内部关于如何将 fds_to_pass 传递给子进程的部分损坏的健全性检查。由于 subprocess.py 已经避免了这个问题,这个错误没有实际影响。
bpo-25388: 修复了在处理包含空字节的不可解码源代码时,分词器崩溃的问题。
bpo-25462: 在 OrderedDict 的 C 实现中,大多数操作现在只计算一次键的哈希值。
bpo-22995: __reduce__ 和 __reduce_ex__ 的默认实现现在拒绝那些未定义 __new__ 的内置类型。
bpo-24802: 当 int()、float()、compile()、exec() 和 eval() 传递类似字节的对象时,避免缓冲区过度读取。这些对象不一定以空字节终止,但函数假设它们是。
bpo-25555: 修复解析器和 AST:当从 Python 对象编译 AST 时,填充 "arg" 节点的 lineno 和 col_offset。
bpo-24726: 修复了 OrderedDict 在直接调用 dict 方法后被 repr() 时崩溃和泄漏 NULL 的问题。
bpo-25449: 现在在 C 实现和 Python 实现中,迭代具有不稳定哈希键的 OrderedDict 都会引发 KeyError。
bpo-25395: 修复了在垃圾回收高度嵌套的 OrderedDict 结构时崩溃的问题。
bpo-25395: 优化了 bytes.fromhex() 和 bytearray.fromhex():它们现在快了 2 到 3.5 倍。
bpo-25399: 使用新的私有 _PyBytesWriter API 优化了 bytearray % args 操作。格式化现在快了 2.5 到 5 倍。
bpo-25274: sys.setrecursionlimit() 现在如果新的递归限制根据当前递归深度太低会引发 RecursionError。同时修改“低水位标记”公式使其单调。这个标记用于决定何时重置线程状态的溢出标志。
bpo-24402: 修复 input() 在 sys.stdout.fileno() 失败时提示重定向的 stdout。
bpo-25349: 使用新的私有 _PyBytesWriter API 优化 bytes % args。格式化现在快达2倍。
bpo-24806: 防止不允许被继承的内置类型通过多重继承被继承。
bpo-25301: UTF-8 解码器现在对于错误处理程序
ignore、replace和surrogateescape快达15倍。bpo-24848: 修复了UTF-7解码畸形数据时的一些错误。
bpo-25267: UTF-8 编码器现在对于错误处理程序
ignore、replace、surrogateescape、surrogatepass快达75倍。补丁与Serhiy Storchaka共同编写。bpo-25280: 在详细模式(-v)下发出的导入跟踪消息不再格式化两次。
bpo-25227: 使用
surrogateescape错误处理程序优化ASCII和latin1编码器:编码器现在快达3倍。初始补丁由Serhiy Storchaka编写。bpo-25003: 在Solaris 11.3或更新版本上,os.urandom() 现在使用 getrandom() 函数而不是 getentropy() 函数。getentropy() 函数为了生成非常高质量的熵是阻塞的,os.urandom() 不需要如此高质量的熵。
bpo-9232: 修改Python的语法以允许函数声明的参数列表中的尾随逗号。例如,“def f(*, a = 3,): pass”现在是合法的。补丁来自Mark Dickinson。
bpo-24965: 实现 PEP 498 "字面字符串插值"。这允许你在f-字符串中嵌入表达式,这些表达式在运行时被转换为普通字符串。给定x=3,那么 f'value={x}' == 'value=3'。由Eric V. Smith提供补丁。
bpo-26478: 修复在使用二进制运算符与字典视图和元组时的语义错误。
bpo-26171: 修复zipimporter.get_data()中可能的整数溢出和堆损坏问题。
bpo-25660: 修复REPL中使用readline时的TAB键行为。
bpo-26288: 优化PyLong_AsDouble。
bpo-26289: 优化单数字长整数的地板除和模除运算。微基准测试显示有2-2.5倍的提升。内置的'divmod'函数现在也快了约10%。(另见:bpo-26315)
bpo-25887: 当协程对象被多次等待时,抛出RuntimeError。
库¶
bpo-27057: 修复Android上的os.set_inheritable(),ioctl()被SELinux阻止并因EACCESS失败。该函数现在回退到使用fcntl()。补丁由Michał Bednarski编写。
bpo-27014: 修复使用typing.py时的无限递归问题。感谢Kalle Tuure!
bpo-27031: 移除了Tkinter小部件类中的虚拟方法:tk_menuBar()和tk_bindForTraversal()。
bpo-14132: 修复urllib.request在目标仅有查询字符串时的重定向处理。原始修复由Ján Janech提供。
bpo-17214: "urllib.request"模块现在对重定向目标URL中的非ASCII字节进行百分比编码。一些服务器发送含有非ASCII字节的Location头字段,但"http.client"要求请求目标必须可ASCII编码,否则会抛出UnicodeEncodeError。基于Christian Heimes的补丁。
bpo-27033: smtpd.SMTPChannel和smtpd.SMTPServer构造函数的decode_data参数的默认值更改为False。
bpo-27034: 移除了已弃用的类asynchat.fifo。
bpo-26870: 添加了readline.set_auto_history(),可以阻止条目自动添加到历史列表中。基于Tyler Crompton的补丁。
bpo-26039: zipfile.ZipFile.open()现在可用于向ZIP文件中写入数据,以及提取数据。由Thomas Kluyver提供补丁。
bpo-26892: 在urllib.request.HTTPHandler中尊重debuglevel标志。补丁由Chi Hsuan Yen贡献。
bpo-22274: 在subprocess模块中,即使stdout未被重定向,也允许将stderr重定向到stdout。补丁由Akira Li提供。
bpo-26807: mock_open 'files' 在文件末尾的readline操作不再报错。补丁由Yolanda Robla提供。
bpo-25745: 修复了curses panel析构函数中userptr的泄漏问题。
bpo-26977: 在statistics.pvariance中移除了不必要且被忽略的平方和辅助函数调用。
bpo-26002: 在statistics.median中使用二分查找替代线性搜索。由Upendra Kuma提供补丁。
bpo-25974: 在统计模块中利用了新的Decimal.as_integer_ratio()方法。补丁由Stefan Krah提供。
bpo-26881: modulefinder模块现在支持扩展的操作码参数。
bpo-23815: 修复了直接创建_tkinter和curses.panel模块中类型实例相关的崩溃问题。
bpo-17765: weakref.ref()不再默默忽略关键字参数。由Georg Brandl提供补丁。
bpo-26873: xmlrpc现在会在遇到不支持的类型标签时抛出ResponseError,而不是默默返回错误结果。
bpo-26915: collections ABCs中的__contains__方法现在在检查相等性之前先检查标识。这更好地匹配了具体类的行为,允许合理处理NaNs,并使容器不变量的推理更加容易。
bpo-26711: 修复了plistlib.Data与其他类型的比较问题。
bpo-24114: 修复了
ctypes.util中一个未初始化的变量问题。此bug仅在SunOS上,当ctypes实现搜索crle程序时出现。由Xiang Zhang提供补丁。在SunOS上由Kees Bos测试。bpo-26864: 在urllib.request中,将代理绕过主机检查对no_proxy的匹配改为不区分大小写,并且不匹配那些恰好以后缀形式包含被绕过主机名的无关主机名。由Xiang Zhang提供补丁。
bpo-24902: 在http.server启动时打印服务器URL。初始由Felix Kaiser提供补丁。
bpo-25788: fileinput.hook_encoded() 现在支持传递一个 "errors" 参数给 open。原始补丁由 Joseph Hackman 提供。
bpo-26634: recursive_repr() 现在设置包装器的 __qualname__。由 Xiang Zhang 提供补丁。
bpo-26804: urllib.request 现在会优先选择小写的代理环境变量,而不是大写或混合大小写的。补丁由 Hans-Peter Jansen 贡献。
bpo-26837: assertSequenceEqual() 现在能正确输出非字符串化的不同项(如 -b 模式下的字节)。这影响了 assertListEqual() 和 assertTupleEqual()。
bpo-26041: 从 platform.dist() 和 platform.linux_distribution() 的弃用消息中移除了 "将在 Python 3.7 中移除"。由 Kumaripaba Miyurusara Athukorala 提供补丁。
bpo-26822: itemgetter、attrgetter 和 methodcaller 对象不再静默忽略关键字参数。
bpo-26733: 反汇编一个类现在会反汇编类和静态方法。由 Xiang Zhang 提供补丁。
bpo-26801: 修复
shutil.get_terminal_size()中的错误处理,捕获AttributeError而不是NameError。补丁由 Emanuel Barry 编写。bpo-24838: tarfile 的 ustar 和 gnu 格式现在能正确计算多字节字符编码(如 utf-8)的名称和链接字段限制。
bpo-26717: 停止用 UTF-8 编码拉丁-1 化的 WSGI 路径。由 Anthony Sottile 提供补丁。
bpo-26782: 在 Windows 上向 subprocess.__all__ 添加 STARTUPINFO。
bpo-26404: 向 socketserver 添加上下文管理器。由 Aviv Palivoda 提供补丁。
bpo-26735: 修复 Solaris 11.3 及更新版本上
os.urandom()当读取超过 1,024 字节时的问题:多次调用getrandom(),每次调用限制为 1024 字节。bpo-26585: 移除 http.server._quote_html() 并使用 html.escape(quote=False)。由 Xiang Zhang 提供补丁。
bpo-26685: 如果关闭套接字失败,则引发 OSError。
bpo-16329: 向 mimetypes.types_map 添加 .webm。由 Giampaolo Rodola' 提供补丁。
bpo-13952: 向 mimetypes.types_map 添加 .csv。由 Geoff Wilson 提供补丁。
bpo-26587: 站点模块现在允许 .pth 文件指定要添加到 sys.path 的文件(例如 zip 文件)。
bpo-25609: 引入了 contextlib.AbstractContextManager 和 typing.ContextManager。
bpo-26709: 修复了加载二进制 PLists 时的 Y2038 问题。
bpo-23735: 通过安装我们自己的 SIGWINCH 处理程序,处理 Readline 6.3+ 的终端调整大小。由 Eric Price 提供补丁。
bpo-25951: 将 SSLSocket.sendall() 更改为返回 None,如明文套接字对象文档中明确所述。补丁由 Aviv Palivoda 提供。
bpo-26586: 在 http.server 中,如果头字段太多无法解析,则响应 "413 请求头字段太大",而不是终止连接并引发未处理的异常。由 Xiang Zhang 提供补丁。
bpo-26676: 将缺失的 XMLPullParser 添加到 ElementTree.__all__。
bpo-22854: 将 BufferedReader.writable() 和 BufferedWriter.readable() 更改为总是返回 False。
bpo-26492: array.array 的耗尽迭代器现在与其他可变序列的迭代器行为一致:即使迭代的数组被扩展,它也会保持耗尽状态。
bpo-26641: doctest.DocFileTest 和 doctest.testfile() 现在支持 package 参数用于包(模块分割到多个目录)。
bpo-25195: 修复了 mock.MagicMock 中的一个回归问题。_Call 是 tuple 的子类(changeset 3603bae63c13 仅适用于类),所以我们需要自己实现 __ne__。由 Andrew Plummer 提供补丁。
bpo-26644: 当向 SSLSocket.recv() 或 read() 传递负长度时,引发 ValueError 而不是 SystemError。
bpo-23804: 修复 SSL recv(0) 和 read(0) 方法返回零字节而不是最多 1024 字节的问题。
bpo-26616: 修复了 datetime.astimezone() 方法中的一个错误。
bpo-26637: 现在,如果在 Python 关闭过程中尝试
__import__()但sys.path已经被清除(设置为None),importlib模块会发出ImportError而不是TypeError。bpo-21925:
warnings.formatwarning()现在在调用linecache.getline()和tracemalloc.get_object_traceback()时会捕获异常,以便能够记录在Python关闭过程中晚期发出的ResourceWarning。bpo-23848: 在Windows上,faulthandler.enable() 现在也会安装一个异常处理器,以在任何Windows异常(不仅仅是UNIX信号(SIGSEGV、SIGFPE、SIGABRT))上转储所有Python线程的跟踪信息。
bpo-26530: 添加C函数
_PyTraceMalloc_Track()和_PyTraceMalloc_Untrack()来使用tracemalloc模块跟踪内存块。添加_PyTraceMalloc_GetTraceback()来获取对象的跟踪信息。bpo-26588: _tracemalloc 现在支持跟踪多个地址空间(域)的内存分配。
bpo-24266: 在编译时使用Readline 7的情况下,Readline历史搜索期间的Ctrl+C现在会取消搜索模式。
bpo-26590: 为_socket.socket类型实现了一个安全的终结器。它现在会释放GIL来关闭套接字。
bpo-18787: 如果用户没有权限,spwd.getspnam() 现在会引发一个PermissionError。
bpo-26560: 避免BaseHandler.start_response中潜在的ValueError。初始由Peter Inglesby提供补丁。
bpo-26567: 添加一个新函数
PyErr_ResourceWarning()来传递被销毁的对象。向warnings.WarningMessage添加一个 source 属性。添加warnings._showwarnmsg(),它使用tracemalloc来获取源对象分配时的跟踪信息。bpo-26569: 修复
pyclbr.readmodule()和pyclbr.readmodule_ex()以支持导入包。bpo-26499: 在HTTPResponse.readline()和read1()中考虑剩余的Content-Length。基于Silent Ghost的补丁。同时记录HTTPResponse现在支持这些方法。
bpo-25320: 处理unittest发现扫描的目录中的套接字。补丁来自Victor van den Elzen。
bpo-16181: 现在如果年份高于datetime.MAXYEAR,cookiejar.http2time()会返回None。
bpo-26513: 修复了平台模块对Windows Server的检测。
bpo-23718: 修复了在1月1日前的第0周解析时间的问题。原始由Tamás Bence Gedai提供补丁。
bpo-26323: 向unittest.mock添加了Mock.assert_called()和Mock.assert_called_once()方法。补丁由Amit Saha编写。
bpo-20589: 在Windows上调用Path.owner()和Path.group()现在会引发NotImplementedError而不是ImportError。
bpo-26177: 修复了Canvas和Scrollbar小部件的keys()方法。
bpo-15068: 消除了fileinput中过度的缓冲。bufsize参数现在已被弃用并被忽略。
bpo-19475: 向datetime的isoformat()方法添加了一个可选参数timespec,用于选择时间组件的精度。
bpo-2202: 修复了AbstractDigestAuthHandler.get_algorithm_impls中的UnboundLocalError。初始由Mathieu Dupuy提供补丁。
bpo-26167: 最小化了copy.copy()和copy.deepcopy()的开销。优化了bytearrays、NotImplemented、slices、短列表、元组、字典和集合的复制和深复制。
bpo-25718: 修复了当total为None时,对accumulate()迭代器的pickling和复制。
bpo-26475: 修复了带有(?x)标志的正则表达式的调试输出。
bpo-26482: 允许pickling递归的dequeues。
bpo-26335: 使mmap.write()像其他write方法一样返回写入的字节数。补丁由Jakub Stasiak提供。
bpo-26457: 修复了当结果前缀长度等于最大前缀长度时,IP网络类中的subnets()方法。基于Xiang Zhang的补丁。
bpo-26385: 如果NamedTemporaryFile()中的内部open()调用失败,则删除文件。由Silent Ghost提供补丁。
bpo-26402: 修复了XML-RPC客户端在服务器关闭持久连接时重试的问题。这是与3.5.0a4中的新http.client.RemoteDisconnected异常相关的回归问题。
bpo-25913: 在adobe=True时,base64.a85decode()中前导的
<~现在是可选的。由Swati Jaiswal提供补丁。bpo-26186: 移除importlib.util.LazyLoader中的一个无效类型检查。
bpo-26367: 当指定了
level但没有指定相应的包时,importlib.__import__()会像builtins.__import__()一样引发ImportError。bpo-26309: 在"socketserver"模块中,当verify_request()返回false时,关闭请求(关闭连接的套接字)。由Aviv Palivoda提供补丁。
bpo-23430: 更改socketserver模块,只捕获源自Exception(而不是BaseException)的请求处理程序引发的异常。因此,SystemExit和KeyboardInterrupt不再触发handle_error()方法,现在将停止单线程服务器。
bpo-25995: os.walk()不再使用与树深度成比例的FDs。
bpo-25994: 为os.scandir()迭代器添加了close()方法和上下文管理器协议的支持。
bpo-23992: multiprocessing:使MapResult在异常时不快速失败。
bpo-26243: 支持zlib.compress()的关键字参数。由Aviv Palivoda提供补丁。
bpo-26117: os.scandir()迭代器现在不仅在迭代完成时关闭文件描述符,而且在因错误失败时也关闭。
bpo-25949: OrderedDict实例的__dict__现在只在需要时创建。
bpo-25911: 恢复了在Windows上os.walk()中对字节路径的支持。
bpo-26045: 在使用http.client发布非Latin-1字符串时,向错误消息添加UTF-8建议。
bpo-26039: 添加了zipfile.ZipInfo.from_file()和zipinfo.ZipInfo.is_dir()。由Thomas Kluyver提供补丁。
bpo-12923: 即使有异常也重置FancyURLopener的重定向计数器。基于Brian Brazil和Daniel Rocco的补丁。
bpo-25945: 修复了解除 pickle functools.partial 对象时状态错误导致的崩溃问题。修复了 functools.partial 构造函数失败时的内存泄漏。functools.partial 的 "args" 和 "keywords" 属性现在总是分别具有 tuple 和 dict 类型。
bpo-26202: copy.deepcopy() 现在能正确复制具有非原子属性的 range() 对象。
bpo-23076: Path.glob() 现在在调用无效模式时会引发 ValueError。补丁由 Thomas Nyberg 提供。
bpo-19883: 修复了 zipimport 中可能的整数溢出问题。
bpo-26227: 在 Windows 上,socket 模块的 getnameinfo()、gethostbyaddr() 和 gethostbyname_ex() 函数现在从 ANSI 代码页而非 UTF-8 解码主机名。
bpo-26099: site 模块现在会在 sitecustomize 模块可以导入但执行该模块时引发 ImportError 时,向 stderr 写入错误信息。对 usercustomize 做了相同的更改。
bpo-26147: xmlrpc 现在可以处理无法用所使用的非 UTF-8 编码编码的字符串。
bpo-25935: 垃圾回收器现在可以打破 OrderedDict 的引用循环。
bpo-16620: 修复了 msilib.Directory.glob() 中的 AttributeError。
bpo-26013: 增加了对旧 Python 3 版本(3.4.3 及以下)创建的损坏协议 2 pickle 的兼容性。
bpo-26129: 废弃了在 grp.getgrgid() 中接受非整数。
bpo-25850: 默认使用交叉编译为 64 位 Windows。
bpo-25822: 向 urllib.parse 结果的字段添加了文档字符串。由 Swati Jaiswal 提供补丁。
bpo-22642: 将 trace 模块的选项解析机制转换为 argparse。由 SilentGhost 提供补丁。
bpo-24705: 修复了 sysconfig._parse_makefile 不扩展出现在 $() 变量之前的 ${} 变量的问题。
bpo-26069: 移除了 trace 模块中已弃用的 API。
bpo-22138: 修复了 mock.patch 在修补描述符时的行为。修补后恢复原始值。由 Sean McCully 提供补丁。
bpo-25672: 在 ssl 模块中,如果安全的话,启用 SSL_MODE_RELEASE_BUFFERS 模式选项。
bpo-26012: 在 pathlib.Path.[r]glob() 中不对符号链接进行
**模式的遍历。bpo-24120: 在使用 pathlib.Path.[r]glob() 遍历树时忽略 PermissionError。由 Ulrich Petri 提供补丁。
bpo-21815: 在 imap 响应的数据部分接受 ] 字符,以处理由 gmail 等服务器接受和产生的带有方括号的标志。
bpo-25447: 如果 sys.stdin 没有缓冲区属性,fileinput 现在会直接使用它(恢复了向后兼容性)。
bpo-25971: 通过 2 倍的速度优化了从浮点数创建 Fractions,通过 3 倍的速度优化了从 Decimals 创建 Fractions。
bpo-25802: 将 importlib.abc.Loader.load_module() 的剩余实现文档化为已弃用。
bpo-25928: 添加了 Decimal.as_integer_ratio()。
bpo-25447: 复制 lru_cache() 包装器对象现在总是有效,与被包装对象的类型无关(通过返回未更改的原始对象)。
bpo-25768: 使 compileall 中的函数返回布尔值而不是整数,并为返回值添加了适当的文档和测试。
bpo-24103: 修复了 ElementTree.XMLPullParser 中可能的使用后释放问题。
bpo-25860: os.fwalk() 在发生错误时不再跳过剩余的目录。原始由 Samson Lee 提供补丁。
bpo-25914: 修复并简化了 OrderedDict.__sizeof__。
bpo-25869: 优化了 ElementTree 的深拷贝;现在速度快了 20 倍。
bpo-25873: 优化了 ElementTree 的迭代。迭代元素 Element.iter() 现在快了 40%,迭代文本 Element.itertext() 现在快了最多 2.5 倍。
bpo-25902: 修复了 ElementTree 迭代中的各种引用计数问题。
bpo-22227: TarFile 迭代器使用生成器重新实现。这个实现比使用类更简单。
bpo-25638: 优化了 ElementTree.iterparse();现在快了 2 倍。优化了 ElementTree 解析;现在快了 10%。
bpo-25761: 改进了对损坏的 pickle 数据中错误的检测。
bpo-25717: 恢复在打开文件时容忍大多数fstat()错误的先前行为。这是3.5a1版本中的一个回归问题,阻止了匿名临时文件在特殊情况下的工作。
bpo-24903: 修复了当指定'-d'时compileall接受的参数数量的回归问题。对参数数量的检查已被完全删除,因为它从未正确工作过。
bpo-25764: 在subprocess模块中,当使用preexec_fn时,保留由fork()失败引起的任何异常。
bpo-25771: 当'package'未指定但必要时,调整importlib.util.resolve_name()的异常消息。
bpo-6478: 在更改时区后,_strptime的正则表达式缓存现在会被time.tzset()重置。
bpo-14285: 当使用"python -m package"选项执行包且包初始化失败时,现在会报告正确的回溯。"runpy"模块现在让包初始化的异常传递回调用者,而不是引发ImportError。
bpo-19771: 同样在runpy和"-m"选项中,如果包甚至无法初始化(例如由于坏的
*.pyc文件),则省略不相关的消息"...是一个包,不能直接执行"。bpo-25177: 修复了非常小和非常大的数字的平均值问题。作为副作用,statistics.mean和statistics.variance应该会显著更快。
bpo-25718: 修复了复制状态为布尔值false的对象的问题。
bpo-10131: 修复了minidom文档的深拷贝问题。基于Marian Ganisin的补丁。
bpo-7990: ElementTree.Element上的dir()现在列出属性:"tag", "text", "tail"和"attrib"。原始由Santoso Wijaya提供补丁。
bpo-25725: 修复了在解包含元组指令的无效数据时pickle.loads()中的引用泄漏问题。
bpo-25663: 在Readline completer中,避免列出重复的全局名称,并在搜索内置名称之前搜索全局命名空间。
bpo-25688: 修复了ElementTree.iterparse()在引发错误时的文件泄露问题。
bpo-23914: 修复了解pickle数据损坏时unpickler引发的SystemError。
bpo-25691: 修复了删除ElementTree.Element属性时的崩溃问题。
bpo-25624: ZipFile现在总是为目录条目写入ZIP_STORED头。由王定远提供补丁。
bpo-25626: 修改了三个zlib函数以接受适合Py_ssize_t的大小,但在内部将这些大小限制为UINT_MAX。这解决了3.5版本中GzipFile.read()无法读取大于2或4 GiB块的回归问题。此更改影响zlib.Decompress.decompress()的max_length参数、zlib.decompress()的bufsize参数和zlib.Decompress.flush()的length参数。
bpo-25583: 当操作系统优先考虑如EACCES这样的错误而不是EEXIST时,避免os.makedirs(exist_ok=True)引发错误。
bpo-25593: 修改了asyncio中EventLoop.stop()的语义。
bpo-6973: 当我们知道一个subprocess.Popen进程已经死亡时,不允许send_signal()、terminate()或kill()方法执行任何操作,因为它们可能会信号到不同的进程。
bpo-23883: 添加了缺失的API到__all__以匹配以下模块的文档API:calendar、csv、enum、fileinput、ftplib、logging、optparse、tarfile、threading和wave。还添加了一个test.support.check__all__()辅助函数。由Jacek Kołodziej、Mauro S. M. Rodrigues和Joel Taddei提供补丁。
bpo-25590: 在Readline completer中,每个属性只调用一次getattr()。同时完成如属性和槽这样的属性名称,这些属性由dir()列出但尚未在实例上创建。
bpo-25498: 修复了在垃圾回收由包装memoryview创建的ctypes对象时的崩溃问题。这是3.5a1中的一个回归。基于Eryksun的补丁。
bpo-25584: 将"escape"添加到glob模块的__all__列表中。
bpo-25584: 修复了以
**开头的递归glob()模式。bpo-25446: 修复 smtplib 的 AUTH LOGIN 支持中的回归问题。
bpo-18010: 修复 pydoc web 服务器的模块搜索功能,以处理导入包时的异常。
bpo-25554: 消除了正则表达式解析中的循环引用。
bpo-18973: 日历模块的命令行界面现在使用 argparse 而不是 optparse。
bpo-25510: 如果 FileInput 以二进制模式打开,fileinput.FileInput.readline() 现在在末尾返回 b'' 而不是 ''。由 Ryosuke Ito 提供补丁。
bpo-25503: 修复了 inspect.getdoc() 对于属性的继承文档字符串的处理。原始由 John Mark Vandenberg 提供补丁。
bpo-25515: 在 uuid.uuid4 中始终使用 os.urandom 作为随机性来源。
bpo-21827: 修复了 textwrap.dedent() 当最大公共空白是最小前导空白的子字符串时的情况。基于 Robert Li 的补丁。
bpo-25447: lru_cache() 包装器对象现在可以被复制和 pickle(通过返回未更改的原始对象)。
bpo-25390: typing: 不因 Union[str, Pattern] 而崩溃。
bpo-25441: asyncio: 当套接字关闭时从 drain() 引发错误。
bpo-25410: 清理并修复了 OrderedDict 的 C 实现中的小错误。
bpo-25411: 通过更好地使用 email 包,改进了 SMTPHandler 中的 Unicode 支持。感谢用户 simon04 的补丁。
将 imp 模块从 PendingDeprecationWarning 移动到 DeprecationWarning。
bpo-25407: 移除了关于 formatter 模块在 Python 3.6 中被移除的提及。
bpo-25406: 修复了 OrderedDict.move_to_end() 的 C 实现中的一个错误,该错误导致在将几个项目移动到有序字典的开头后在迭代中出现分段错误或挂起。
bpo-25382: pickletools.dis() 现在为 MEMOIZE 操作码输出隐式备忘录索引。
bpo-25357: 向 binascii.b2a_base64() 添加了一个可选的新行参数。base64.b64encode() 使用它来避免内存拷贝。
bpo-24164: 需要使用关键字参数调用
__new__的对象,现在可以使用低于协议版本4的pickle协议进行序列化。bpo-25364: zipfile 现在可以在禁用线程的构建中工作。
bpo-25328: 如果 decode_data 和 enable_SMTPUTF8 都被设置为 true,smtpd 的 SMTPChannel 现在会正确地引发 ValueError。
bpo-16099: RobotFileParser 现在支持 Crawl-delay 和 Request-rate 扩展。由 Nikolay Bogoychev 提供补丁。
bpo-25316: 当未安装 MSVC 时,distutils 会引发 OSError 而不是 DistutilsPlatformError。
bpo-25380: 修复了 pickletools.opcodes 中 STACK_GLOBAL 操作码的协议。
bpo-23972: 更新了 asyncio 的数据报创建方法,允许在绑定套接字之前设置 reuseport 和 reuseaddr 套接字选项。与现有的 asyncio create_server 方法类似,如果操作系统是 'posix'(除非平台是 Cygwin),数据报套接字的 reuseaddr 选项默认为 True。由 Chris Laws 提供补丁。
bpo-25304: 添加了 asyncio.run_coroutine_threadsafe()。这让你可以从另一个线程向循环提交一个协程,返回一个 concurrent.futures.Future。由 Vincent Michel 提供。
bpo-25232: 修复 CGIRequestHandler,使其在第一个问号 (?) 处而不是最后一个问号处将查询与 URL 分开。补丁来自 Xiang Zhang。
bpo-24657: 防止 CGIRequestHandler 像处理路径一样在 URL 的查询部分折叠斜杠。补丁来自 Xiang Zhang。
bpo-25287: 如果不支持 crypt.METHOD_CRYPT,则不要将其添加到 crypt.methods 中。检查是否支持,例如在 OpenBSD 上可能不支持。
bpo-23600: tzinfo.fromutc() 的默认实现在某些情况下返回了错误的结果。
bpo-25203: 失败的 readline.set_completer_delims() 不再使模块处于不一致状态。
bpo-25011: rlcompleter 现在会省略私有和特殊属性名称,除非前缀以下划线开头。
bpo-25209: rlcompleter 现在可以在完成的关键字后添加空格或冒号。
bpo-22241: timezone.utc 名称现在是简单的 'UTC',而不是 'UTC-00:00'。
bpo-23517: datetime.datetime 的 fromtimestamp() 和 utcfromtimestamp() 方法现在将微秒四舍五入到最近的偶数整数(ROUND_HALF_EVEN),如同 round(float),而不是向负无穷方向舍入(ROUND_FLOOR)。
bpo-23552: Timeit 现在在最佳和最差时间之间存在显著(4倍)差异时发出警告。补丁来自 Serhiy Storchaka。
bpo-24633: site-packages/README -> README.txt。
bpo-24879: help() 和 pydoc 现在可以按照命名元组字段定义的顺序而非字母顺序列出它们。排序由 _fields 属性(如果存在)决定。
bpo-24874: 提高 itertools.cycle() 的速度并使其 pickle 更加紧凑。
修复了当第一个参数不是列表时 itertools.cycle.__setstate__() 的崩溃问题。
bpo-20059: urllib.parse 在所有无效端口上引发 ValueError。补丁来自 Martin Panter。
bpo-24360: 为无效标识符改进 argparse.Namespace() 的 __repr__。补丁来自 Matthias Bussonnier。
bpo-23426: distutils 中的 run_setup 被破坏。补丁来自 Alexander Belopolsky。
bpo-13938: 2to3 将 StringTypes 转换为元组。补丁来自 Mark Hammond。
bpo-2091: open() 接受包含 '+' 的 'U' 模式字符串,但 'U' 只能与 'r' 一起使用。补丁来自 Jeff Balogh 和 John O'Connor。
bpo-8585: 改进了 zipimporter2 的测试。补丁来自 Mark Lawrence。
bpo-18622: unittest.mock.mock_open().reset_mock 会无限递归。补丁来自 Nicola Palumbo 和 Laurent De Buyst。
bpo-24426: 正则表达式中的快速搜索优化现在适用于以捕获组开始的模式。快速搜索优化现在不能在编译时禁用。
bpo-23661: unittest.mock 的 side_effects 现在可以再次是异常。这是对 Python 3.4 的一个回归。补丁来自 Ignacio Rossi
bpo-13248: 移除已弃用的 inspect.getmoduleinfo 函数。
bpo-25578: 修复 SSLSocket.getpeercer() 中的另一个内存泄漏问题。
bpo-25530: 默认情况下,在创建 ssl.SSLContext 时禁用易受攻击的 SSLv3 协议。
bpo-25569: 修复 SSLSocket.getpeercert() 中的内存泄漏问题。
bpo-25471: 从 accept() 返回的套接字不应显示为非阻塞。
bpo-25319: 当 threading.Event 被重新初始化时,底层条件应使用常规锁而不是递归锁。
如果主机已解析,则跳过 getaddrinfo。由 A. Jesse Jiryu Davis 提供补丁。
bpo-26050: 添加 asyncio.StreamReader.readuntil() 方法。由 Марк Коренберг 提供补丁。
bpo-25924: 在 OS X 10.5 或更高版本上避免不必要的 getaddrinfo(3) 调用序列化。原始补丁由 A. Jesse Jiryu Davis 提供。
bpo-26406: 在当前版本的 OpenBSD 和 NetBSD 上避免不必要的 getaddrinfo(3) 调用序列化。由 A. Jesse Jiryu Davis 提供补丁。
bpo-26848: 修复 asyncio/subprocess.communicate() 以处理空输入。由 Jack O'Connor 提供补丁。
bpo-27040: 添加 loop.get_exception_handler 方法
bpo-27041: asyncio: 添加 loop.create_future 方法
IDLE¶
bpo-20640: 为 idlelib.configHelpSourceEdit 添加测试。由 Saimadhav Heblikar 提供补丁。
在 IDLE 文档的 'IDLE-控制台差异' 部分,澄清使用 IDLE 运行如何影响 sys.modules 和标准流。
bpo-25507: 修复 IOBinding 中阻止打印的错误更改。增强 IOBinding htest 以包括所有主要 IOBinding 功能。
bpo-25905: 恢复 README.txt 中 ' 到 ’ 右单引号的不必要转换,并用 'ascii' 打开此文件和 NEWS.txt。将 CREDITS.txt 重新编码为 utf-8 并用 'utf-8' 打开。
bpo-15348: 在关闭调试器窗口(在 IDLE 进程中运行)之前停止调试器引擎(通常在用户进程中)。这防止了被捕获并忽略的 RuntimeErrors。
bpo-24455: 防止IDLE在以下情况下挂起:a) 当调试器处于活动状态时关闭shell(15347);b) 使用[X]按钮关闭调试器(15348);以及c) 当调试器已经处于活动状态时再次激活(24455)。Mark Roseman的补丁通过两个更改来实现这一点。1. 使用为此目的设计的tcl vwait机制(而不是root.mainloop & .quit)暂停和恢复gui.interaction方法。2. 在gui.run中,允许任何现有的交互首先终止。
在IDLE的'终止程序?'消息中,将'程序'改为'您的程序',以更清楚地表明所指的是当前运行的用户程序,而不是IDLE本身。
bpo-24750: 改善IDLE编辑器窗口状态栏的外观。Patch by Mark Roseman。
bpo-25313: 更改新内置文本颜色主题的处理,以更好地解决由IDLE Dark的添加引入的兼容性问题。在idlelib中一致地使用修订后的idleConf.CurrentTheme。
bpo-24782: 扩展配置现在是IDLE首选项对话框中的一个标签,而不是一个单独的对话框。原来的标签现在是一个排序列表。Patch by Mark Roseman。
bpo-22726: 重新激活配置对话框帮助按钮,包含一些关于其他按钮和新IDLE Dark主题的内容。
bpo-24820: IDLE现在有一个'IDLE Dark'内置文本颜色主题。它或多或少是IDLE Classic的反转,背景为钴蓝色。字符串、注释、关键字等仍然是绿色、红色、橙色等。要在2015年11月之前发布的IDLEs中使用它,点击'保存为新的自定义主题'按钮并输入一个新名称,如'Custom Dark'。自定义主题适用于任何IDLE版本,并且可以修改。
bpo-25224: README.txt现在是IDLE开发者和好奇用户的idlelib索引。以前的用户内容现在在IDLE文档章节中。'IDLE'现在意味着'集成开发和学习环境'。
bpo-24820: 用户现在可以在设置->自定义高亮中设置断点颜色。原始由Mark Roseman提供补丁。
bpo-24972: 非活动选择背景现在在所有系统上都与用户配置的活动选择背景相匹配。在Windows上,找到的项目现在总是高亮显示。初始由Mark Roseman提供补丁。
bpo-24570: Idle:在受tk回归影响的Mac上显示调用提示和完成框。初始补丁由Mark Roseman提供。
bpo-24988: Idle ScrolledList上下文菜单(在调试器中使用)现在在Mac Aqua上工作。由Mark Roseman提供补丁。
bpo-24801: 使右键点击上下文菜单在Mac Aqua上工作。由Mark Roseman提供补丁。
bpo-25173: 将tkinter消息框与特定小部件关联。对于Mac OSX,使它们成为'表单'。由Mark Roseman提供补丁。
bpo-25198: 增强现在用于Idle Help的初始html查看器。正确缩进固定间距文本(由Mark Roseman提供补丁)。给代码片段一个非常类似Sphinx的浅蓝灰色背景。重用用户为shell和编辑器设置的初始宽度和高度。当使用目录(TOC)菜单时,将部分标题放在屏幕顶部。
bpo-25225: 压缩并重写Idle文档中关于文本颜色的部分。
bpo-21995: 解释IDLE和控制台Python之间的一些差异。
bpo-22820: 解释在从Idle编辑器运行文件时需要 print 的原因。
bpo-25224: 文档:增加Idle功能列表和无子进程部分。
bpo-25219: 更新Idle命令行选项的文档。有些选项缺失,注释也不正确。
bpo-24861: 大多数idlelib是私有的,可能会更改。使用idleib.idle.*来启动Idle。参见idlelib.__init__.__doc__。
bpo-25199: Idle:为未来的维护者添加同步注释。
bpo-16893: 将 Idle 文档显示的 help.txt 替换为 help.html。新的 idlelib/help.html 是去除右侧空格的 Doc/build/html/library/idle.html。它看起来比 help.txt 更好,并将更好地记录发布的 Idle。适用于此文件的 tkinter html 查看器是由 Rose Roseman 编写的。现在未使用的 EditorWindow.HelpDialog 类和 helt.txt 文件已被弃用。
bpo-24199: 弃用未使用的 idlelib.idlever,可能在 3.6 中移除。
bpo-24790: 移除多余的代码(这也造成了 2 和 3 的冲突)。
文档¶
bpo-26736: 尽可能在文档中使用 HTTPS 作为外部链接。
bpo-6953: 重新组织 Readline 模块文档,将相关函数分组,并添加更多细节,如访问哪些底层的 Readline 函数和变量。
bpo-23606: 向 ctypes 文档添加关于 cdll.msvcrt 的注释。
bpo-24952: 阐明 "threading" 和 "_thread" 模块中 stack_size() 的默认 size 参数。来自 Mattip 的补丁。
bpo-26014: 更新 3.x 打包文档:* 现在在旧版页面中提供了指向新文档的 "参见" 链接 * 更新了指向 setuptools 文档的链接
测试¶
bpo-21916: 为 turtle 模块添加了测试。由 ingrid、Gregory Loyse 和 Jelle Zijlstra 提供补丁。
bpo-26295: 当使用 "python3 -m test --testdir=TESTDIR" 时,regrtest 不会给测试模块名添加 "test." 前缀。
bpo-26523: 多进程线程池(multiprocessing.dummy.Pool)未经测试。
bpo-26015: 为可变序列的迭代器的 pickle 操作添加了新测试。
bpo-26325: 添加了 test.support.check_no_resource_warning() 来检查是否未发出 ResourceWarning。
bpo-25940: 更改 test_ssl 以更多地使用其内部本地服务器。这避免依赖 svn.python.org,后者最近更改了根证书。
bpo-25616: OrderedDict 的测试从 test_collections 中提取出来,放入单独的文件 test_ordered_dict 中。
bpo-25449: 为 OrderedDict 的子类添加了测试。
bpo-25188: 添加 -P/--pgo 到 test.regrtest,以在运行测试套件用于PGO构建时抑制错误输出。初始由Alecsandru Patrascu提供补丁。
bpo-22806: 添加
python -m test --list-tests命令以列出测试。bpo-18174:
python -m test --huntrleaks ...现在也会检查文件描述符的泄漏。补丁由Richard Oudkerk编写。bpo-25260: 修复
python -m test --coverage在Windows上的问题。移除忽略目录的列表。PCbuild\rt.bat现在可以接受无限数量的参数传递给regrtest.py。之前有9个的限制。bpo-26583: 如果无法写入字节码文件,则在test_import中跳过test_timestamp_overflow测试。
构建¶
bpo-21277: 不要试图将_ctypes与ffi_convenience库链接。
bpo-26884: 修复交叉构建中扩展模块的链接问题。由Xavier de Gaye提供补丁。
bpo-26932: 修复了对定义为枚举值而非宏的RTLD_*常量的支持(特别是在Android上)。由Chi Hsuan Yen提供补丁。
bpo-22359: 在交叉编译时禁用运行_freeze_importlib和pgen的规则。这些程序的输出通常与源代码一起保存,并且在本地构建时仍会重新生成。由Xavier de Gaye提供补丁。
bpo-21668: 将audioop、_datetime、_ctypes_test模块链接到libm,除了Mac OS X。补丁由Chi Hsuan Yen编写。
bpo-25702: 添加了一个--with-lto配置选项,该选项将在make profile-opt期间启用构建时的链接时间优化。已知一些编译器和工具链在使用LTO时不会产生稳定的代码,因此在依赖它之前确保彻底测试。它可以比仅使用profile-opt提供几个%的速度提升。
bpo-26624: 添加了对ucrtbase[d].dll版本的验证,并对旧版本发出警告。
bpo-17603: 通过使用struct stat中st_blocks的低级检查,避免关于不存在的fileblocks.o文件的错误。
bpo-26079: 修复 tix-8.4.3.6 的构建输出文件夹。由 Bjoern Thiel 提交补丁。
bpo-26465: 更新 Windows 构建以使用 OpenSSL 1.0.2g。
bpo-25348: 添加了
--pgo和--pgo-job参数到PCbuild\build.bat以便使用 Profile-Guided Optimization 构建。旧的PCbuild\build_pgo.bat脚本已被移除。bpo-25827: 向
configure添加了对使用 ICC 构建的支持,包括一个新的--with-icc标志。bpo-25696: 修复了在 UNIX 上使用 make -j9 安装 Python 的问题。
bpo-24986: 现在可以在 Windows 上构建 Python 而不会在没有外部库的情况下出现错误。
bpo-24421: 在构建扩展之前,先编译 Modules/_math.c 一次。之前如果数学和 cmath 构建同时进行,可能会导致编译失败。
bpo-26465: 更新 OS X 10.5+ 仅 32 位安装程序,以构建和链接 OpenSSL 1.0.2g。
bpo-26268: 更新 Windows 构建以使用 OpenSSL 1.0.2f。
bpo-25136: 支持 Apple Xcode 7 的新文本 SDK stub 库。
bpo-24324: 当使用 gcc 时不启用不可达代码警告,因为该选项在旧版本的 gcc 中不起作用,并且在 gcc-4.5 之后已被静默移除。
Windows¶
工具/示例¶
bpo-26799: 修复 python-gdb.py:不要在 Python 代码加载时一次性获取 C 类型,而是按需获取 C 类型。如果在 Python 可执行文件之前加载 python-gdb.py,C 类型可以改变。补丁由 Thomas Ilsche 编写。
bpo-26271: 修复Freeze工具以正确使用通过configure传递的标志。补丁由Daniel Shaulov提供。
bpo-26489: 向Tools/parser/unparse.py添加字典解包支持。由Guo Ci Teo提供补丁。
bpo-26316: 修复Argument Clinic中的变量名拼写错误。
bpo-25440: 修复python-config --extension-suffix的输出。
bpo-25154: pyvenv脚本已被弃用,推荐使用
python3 -m venv。
C API¶
Python 3.5.5 正式版¶
发布日期e: 2018-02-04
在 3.5.5 版本中没有新的更改。
Python 3.5.5 rc1¶
发布日期: 2018-01-23
安全性¶
bpo-32551: bpo-29139 中对
sys.path[0]初始化的更改导致了一个回归问题,揭示了在执行来自zipfile、目录或其他导入位置的__main__时sys.path初始化的不一致性。这被认为是一个潜在的安全问题,因为在之前不会出现的情况下,可能导致特权进程从用户控制的目录意外加载代码。解释器现在一致地避免将导入位置的父目录添加到sys.path中,并确保在插入命令行指定的导入位置时不会无意中修改其他sys.path条目。(最初作为 bpo-29723 针对Python 3.6rc1报告,但当时忽略了即将发布的Python 3.5.4也会受到影响)bpo-30657: 修复了PyBytes_DecodeEscape中可能的整数溢出,CVE 2017-1000158。原始补丁由Jay Bosamiya提供;由Miro Hrončok重新基于Python 3。
bpo-30947: 将内嵌的 libexpat 从版本 2.2.1 升级到 2.2.3 以获取安全修复。
核心与内置函数¶
bpo-31095: 修复由未调用
PyObject_GC_UnTrack()的tp_dealloc引起的GC期间潜在崩溃问题。
库¶
bpo-32072: 修复了二进制 plists 的问题:修复了保存 bytearrays。相同的对象将只保存一次。相等的引用将作为相同的对象加载。添加了对保存和加载递归数据结构的支持。
bpo-31170: expat: 将 libexpat 从 2.2.3 更新至 2.2.4。修复了 UTF-8 输入部分字符的复制问题(libexpat bug 115):https://github.com/libexpat/libexpat/issues/115
Python 3.5.4 正式版¶
发布日期: 2017-08-07
库¶
bpo-30119: ftplib.FTP.putline() 现在会在命令包含 CR 或 LF 时抛出 ValueError。由 Donghee Na 提供补丁。
Python 3.5.4 rc1¶
发布日期: 2017-07-23
安全性¶
bpo-30730: 在 Windows 上防止子进程中的环境变量注入。防止传递其他环境变量和命令参数。
bpo-30694: 将 expat 从 2.2.0 升级到 2.2.1 以修复多个安全漏洞,包括:CVE 2017-9233`(外部实体无限循环 DoS)、:cve:`2016-9063 (整数溢出,重新修复) 、CVE 2016-0718`(修复 2.2.0 对 :cve:`2016-0718 的修复引起的回归错误)和 CVE 2012-0876`(使用 SipHash 抵御哈希洪水攻击)。注意::cve:`2016-5300 (使用操作系统特定的熵源如 getrandom) 不影响 Python,因为 Python 已经通过
XML_SetHashSalt()从操作系统获取熵来设置 expat 的密钥。bpo-30500: 修复 urllib.parse.splithost() 正确解析片段。例如,
splithost('//127.0.0.1#@evil.com/')现在正确返回127.0.0.1主机,而不是将@evil.com视为认证中的主机(login@host)。bpo-29591: 将 expat 从 2.1.1 更新到 2.2.0 以修复 CVE 2016-0718 和 CVE 2016-4472。更多信息请见 https://sourceforge.net/p/expat/bugs/537/。
核心与内置函数¶
bpo-30876: 从未加载的包中进行相对导入现在会重新导入包,而不是因SystemError失败。从非包中进行相对导入现在会因ImportError而非SystemError失败。
bpo-30765: 当PyThread_acquire_lock()被要求不阻塞时,避免在pthread_mutex_lock()中阻塞。
bpo-27945: 修复了在搜索、插入或比较过程中输入集合被修改时,字典的各种段错误。基于 Duane Griffin 和 Tim Mitchell 的补丁。
bpo-25794: 修复了 type.__setattr__() 和 type.__delattr__() 对于非 interned 属性名称的问题。基于 Eryk Sun 的补丁。
bpo-29935: 修复了在传递错误类型的索引时,tuple、list 和 deque 的 index() 方法中的错误消息。
bpo-28876: 即使
len(range)引发OverflowError,bool(range)也能正常工作。bpo-29600: 修复在StopIteration中包装协程返回值的问题。
bpo-29537: 恢复与由 CPython 3.5.0 至 3.5.2 生成的字节码文件的运行时兼容性,并调整 eval 循环以避免可能由它们可能包含的 BUILD_MAP_UNPACK_WITH_CALL 操作码的错误变体引起的问题。由 Petr Viktorin、Serhiy Storchaka 和 Nick Coghlan 提供补丁。
bpo-28598: 支持在调用 str.__mod__ 之前调用 str 子类的 __rmod__。由 Martijn Pieters 提供补丁。
bpo-29602: 修复了在复杂子类的构造函数和具有 __complex__ 方法的输入中对有符号零的错误处理。由 Serhiy Storchaka 提供补丁。
bpo-29347: 修复了在创建弱引用对象时可能解引用未定义指针的问题。
bpo-29438: 修复了key sharing dict中的use-after-free问题。
bpo-29319: 防止RunMainFromImporter覆盖sys.path[0]。
bpo-29337: 修复了比较代码对象时可能出现的BytesWarning。警告可能在编译时发出。
bpo-29478: 在使用Compat32策略时,如果指定了max_line_length=None,它将不再被忽略。补丁由Mircea Cosbuc提供。
库¶
bpo-29403: 修复``unittest.mock``模块的autospec功能,使其不再对绑定到方法的内置函数报错。由Aaron Gallagher提供补丁。
bpo-30961: 修复了tracemalloc中借用引用的递减问题。
bpo-30886: 修复 multiprocessing.Queue.join_thread():现在即使线程是由创建队列的同一进程启动的,它也会等待线程完成。
bpo-29854: 修复使用 readline 的 history-size 选项时 readline 中的段错误。由 Nir Soffer 提供补丁。
bpo-30807: 当传递一个极小的值时,signal.setitimer() 可能会禁用计时器。极小的值(如 1e-6)是 setitimer() 有效的非零值,它被指定为采取微秒级间隔。然而,在某些平台上,我们的转换例程可能将 1e-6 转换为零间隔,从而禁用计时器而不是(重新)调度它。
bpo-30441: 修复在迭代 os.environ 时修改它导致的错误。
bpo-30532: 修复电子邮件头值解析器在某些情况下丢弃折叠空白的问题。
bpo-29169: 将 zlib 更新至 1.2.11。
bpo-30879: os.listdir() 和 os.scandir() 现在在使用字节类参数调用时会发出字节名称。
bpo-30746: 禁止在
os.putenv()和os.spawn*()的环境变量名中使用 '=' 字符。bpo-29755: 修复了 gettext 模块中的 lgettext() 系列函数。它们现在总是返回字节。
bpo-30645: 修复imp.load_package()中的路径计算,修复仅随字节码一起提供包的情况。由Alexandru Ardelean提供补丁。
bpo-23890: unittest.TestCase.assertRaises() 现在手动打破引用循环,以避免对象存活时间超过预期。
bpo-30149: inspect.signature() 现在支持带有被partialmethod包装的可变参数参数的可调用对象。由Donghee Na提供补丁。
bpo-29931: 修复了 ipaddress.ip_interface 对象的比较检查。补丁由 Sanjay Sundaresan 提供。
bpo-24484: 避免多进程清理中的竞争条件。
bpo-28994: 对于由 atexit 注册的回调中引发的 SystemExit,不再显示回溯。
bpo-30508: 如果调用了 Task/Future 的 "cancel()" 方法,则不记录异常。
bpo-28556: typing 模块的更新:添加通用的 AsyncContextManager,为所有版本添加对 ContextManager 的支持。原始 PR 由 Jelle Zijlstra 和 Ivan Levkivskyi 提供。
bpo-29870: 修复 asyncio/ssl 实现中当连接被中止时 SSL 套接字的泄漏问题。由 Michaël Sghaïer 提供补丁。
bpo-29743: 在握手过程中关闭传输会导致打开的套接字泄漏。由 Nikolay Kim 提供补丁。
bpo-27585: 修复 asyncio.Lock 中的等待者取消问题。由 Mathieu Sornay 提供补丁。
bpo-30418: 在 Windows 上,如果子进程仍在运行但关闭了管道,subprocess.Popen.communicate() 现在也会忽略 stdin.write() 上的 EINVAL。
bpo-30378: 修复 logging.handlers.SysLogHandler 无法处理 IPv6 地址的问题。
bpo-29960: 当_random.Random.setstate()引发异常时,保留生成器状态。补丁由Bryan Olson提供。
bpo-30414: multiprocessing.Queue._feed 后台运行线程在异常时不从主循环中中断。
bpo-30003: 修复HZ编解码器中转义字符的处理。基于Ma Lin的补丁。
bpo-30301: 修复在 spawn 和 forkserver 启动方法下使用SimpleQueue.empty()时的AttributeError。
bpo-30329: imaplib和poplib现在在shutdown(SHUT_RDWR)时捕获Windows socket WSAEINVAL错误(代码10022):尝试了无效操作。此错误有时发生在SSL连接上。
bpo-30375: 编译正则表达式时发出的警告现在总是指向用户代码中的行。之前如果从组或条件内部发出,它们可能指向re模块的内部。
bpo-30048: 修复了当任务运行协程且协程返回而没有任何更多
await时,``Task.cancel()``可能被忽略的问题。bpo-29990: 修复GB18030解码器中的范围检查。原由Ma Lin提供补丁。
bpo-30243: 移除了_json的扫描器和编码器的__init__方法。误用它们可能导致内存泄漏或崩溃。现在扫描器和编码器对象在__new__方法中完全初始化。
bpo-30185: 在收到Ctrl-C时,避免forkserver辅助进程中的KeyboardInterrupt回溯。
bpo-28556: 对typing模块的各种更新:添加typing.NoReturn类型,使用WrapperDescriptorType,小错误修复。原PR由Jim Fasarakis-Hilliard和Ivan Levkivskyi提供。
bpo-30205: 修复Linux上未绑定的AF_UNIX套接字的getsockname()。
bpo-30070: 修复了解析模块中错误处理的内存泄漏和崩溃问题。
bpo-30061: 修复了当readline()或__next__()分别返回不可大小化的对象时,IOBase方法__next__()和readlines()中的崩溃。修复了由不检查PyObject_Size()、PySequence_Size()或PyMapping_Size()的结果可能引起的其他错误。
bpo-30068: 当存在hint时,_io._IOBase.readlines将首先检查是否关闭。
bpo-29694: 修复了pathlib mkdir与flags parents=True时的竞争条件。补丁由Armin Rigo提供。
bpo-29692: 修复了contextlib.contextmanager中RuntimeError异常的任意解链。由Siddharth Velankar提供补丁。
bpo-29998: Pickling和复制ImportError现在保留name和path属性。
bpo-29942: 修复了在遇到长串空可迭代对象时,itertools.chain.from_iterable 的崩溃问题。
bpo-27863: 修复了由竞争条件和错误类型引起的 ElementTree 中的多个崩溃问题。
bpo-28699: 修复了 multiprocessing.pool 中池的一个 bug,即在可迭代对象的最开始引发异常可能会吞掉异常或使程序挂起。由 Davin Potts 和 Xiang Zhang 提供补丁。
bpo-25803: 当操作系统优先考虑如 EACCES 而不是 EEXIST 的错误时,避免 Path.mkdir(exist_ok=True) 引发不正确的错误。
bpo-29861: 在 multiprocessing.Pool 中,任务、它们的参数和结果一旦完成就释放引用。
bpo-29884: faulthandler: 在拆卸期间恢复旧的sigaltstack。由Christophe Zeitouny提供补丁。
bpo-25455: 修复了递归缓冲文件类对象repr中的崩溃。
bpo-29800: 修复了如果partial.keywords的键不是字符串时partial.__repr__的崩溃。由Michael Seifert提供补丁。
bpo-29742: 如果 get_extra_info() 在关闭的 ssl 传输上调用,将引发异常。由 Nikolay Kim 提供补丁。
bpo-8256: 修复了如果sys.stdin或sys.stdout的属性"encoding"或"errors"未设置或不是字符串时可能导致的input()失败或崩溃。
bpo-28298: 修复了一个bug,该bug阻止了数组'Q'、'L'和'I'接受大整数(具有__int__方法的对象)作为元素。由Oren Milman提供补丁。
bpo-29615: SimpleXMLRPCDispatcher 不再将 KeyError(或任何其他异常)链接到调度方法中引发的异常。由 Petr Motejlek 提供补丁。
bpo-29704: asyncio.subprocess.SubprocessStreamProtocol 在所有管道关闭之前不再关闭。
bpo-29703: 修复 asyncio,支持在子进程中实例化新的事件循环。
bpo-29376: 修复 threading._DummyThread.is_alive() 中的断言错误。
bpo-29110: 修复 aifc.open() 中当文件作为文件系统路径给出且不是有效的 AIFF 格式时的文件对象泄漏问题。由 Anthony Zhang 提供补丁。
bpo-28961: 修复unittest.mock._Call辅助函数:不再忽略name参数。由Jiajun Huang提供补丁。
bpo-29532: 修改传递给 functools.partial() 的 kwarg 字典不再影响创建后的 partial 对象。
bpo-28556: 对 typing 模块进行了多项更新:typing.Counter、typing.ChainMap、改进的 ABC 缓存等。原始 PR 由 Jelle Zijlstra、Ivan Levkivskyi、Manuel Krebber 和 Łukasz Langa 提供。
bpo-29100: 修复了 Python 3.6.0 中引入的 datetime.fromtimestamp() 的回归问题:检查最小和最大年份。
bpo-29519: 修复了在与multiprocessing和自定义编解码器的罕见组合使用时,weakref在解释器关闭期间抛出异常的问题。
bpo-29416: 防止 pathlib.Path.mkdir 中的无限循环。
bpo-29444: 修复了 match 对象的 group() 方法中的越界缓冲区访问。基于 WGH 的补丁。
bpo-29335: 修复了当子进程已退出到停止状态而不是终止状态(例如:在 ptrace 下)时的 subprocess.Popen.wait()。
bpo-29290: 修复了 argparse 中帮助消息会在非断行空格处换行的回归问题。
bpo-28735: 修复了 mock.MagickMock 与 mock.ANY 的比较。
bpo-29011: 通过向typing模块添加Deque来修复一个重要的遗漏。
bpo-29219: 修复了未初始化的 ctypes.CDLL 实例的 repr 中的无限递归。
bpo-28969: 修复了functools.lru_cache的C实现中的竞态条件。当缓存函数满时,如果同时从不同线程以相同的未缓存参数调用,可能会引发KeyError。
bpo-29142: 在urllib.request中,no_proxy环境变量中带有前导点的后缀可以再次匹配相关的主机名(例如.b.c匹配a.b.c)。由Milan Oberkirch提供补丁。
文档¶
测试¶
bpo-30822: 修复 regrtest 命令行解析器以允许传递 -u extralargefile 来运行 test_zipfile64。
bpo-30383: regrtest: 增强 regrtest 并从主分支回传功能。添加选项:--coverage、--testdir、--list-tests(列出测试文件,不运行它们)、--list-cases(列出测试标识符,不运行它们,bpo-30523)、--matchfile(从文本文件加载测试过滤器列表,bpo-30540)、--slowest(--slow 的别名)。增强输出:添加时间戳、测试结果、当前运行的测试、“Tests result: xxx”总结与总持续时间等。修复 regrtest 中的引用泄漏狩猎,--huntrleaks:regrtest 现在预热缓存,显式创建所有按需创建的内部单例以防止在检查引用泄漏时出现假阳性。(bpo-30675)。
bpo-30357: test_thread: setUp() 现在使用 support.threading_setup() 和 support.threading_cleanup() 来等待线程完成,以避免对后续测试产生随机副作用。初始补丁由 Grzegorz Grzywacz 编写。
bpo-28087: 在 macOS 上跳过 test_asyncore 和 test_eintr 的 poll 失败。由于某些 macOS 版本上底层系统 poll 函数的未解决问题,在 macOS 上运行时跳过 select.poll 的一些测试。
bpo-30197: 增强了 test.support 模块中的 swap_attr() 和 swap_item() 函数。它们现在可以在 with 语句内部删除替换的属性或项目时工作。属性或项目的旧值(如果不存在则为 None)现在将被赋值给 "as" 子句的目标,如果有的话。
bpo-29571: 为了匹配
re.LOCALE标志的行为,test_re.test_locale_flag 现在使用locale.getpreferredencoding(False)来确定测试正则表达式的候选编码(允许它在默认区域编码是多字节编码时正确跳过测试)
构建¶
Windows¶
C API¶
bpo-27867: 如果 Py_LIMITED_API 设置为介于 0x03050400 和 0x03060000(不包括)或 0x03060100 或更高之间的值,则函数 PySlice_GetIndicesEx() 被替换为宏。
bpo-29083: 修正了一些公共API函数的声明。PyArg_VaParse()和PyArg_VaParseTupleAndKeywords()在有限API中不可用。当定义了PY_SSIZE_T_CLEAN时,PyArg_ValidateKeywordArguments()、PyArg_UnpackTuple()和Py_BuildValue()在版本<3.3的有限API中不可用。
Python 3.5.3 正式版¶
发布日期: 2017-01-17
在 3.5.3rc1 和 3.5.3 最终版之间没有代码更改。
Python 3.5.3 rc1¶
发布日期: 2017-01-02
安全性¶
核心与内置函数¶
bpo-29073: bytearray 格式化不再在第一个空字节处截断。
bpo-28932: 如果不存在<sys/random.h>,则不包含它。
bpo-28147: 修复 split-table 字典中的内存泄漏:setattr() 不得将组合表转换为分裂表。
bpo-25677: 修正了缩进块语法错误提示符的位置。基于Michael Layzell的补丁。
bpo-29000: 修复了八进制数在交替形式下零填充的bytes格式化。
bpo-28512: 修复了通过PyErr_SyntaxLocationEx()和PyErr_SyntaxLocationObject()设置SyntaxError的offset属性。
bpo-28991: functools.lru_cache() 容易受到由猴子补丁 len() 函数引起的隐蔽重入错误的影响。
bpo-28648: 修复了在Mac OS X上调试版本中解码星体字符时Py_DecodeLocale()崩溃的问题。补丁由Xiang Zhang提供。
bpo-19398: 在编译时PYTHONPATH组件为空的情况下,不再向sys.path组件添加额外的斜杠。
bpo-28426: 修复了调试版本中PyUnicode_AsDecodedObject()潜在的崩溃问题。
bpo-23782: 修复了 _PyTraceback_Add() 中可能的内存泄漏和 PyTraceBack_Here() 中的异常丢失问题。
bpo-28379: 为 PyUnicode_CopyCharacters() 添加了健全性检查和测试。由 Xiang Zhang 提供补丁。
bpo-28376: 长范围迭代器的类型现在注册为 Iterator。由 Oren Milman 提供补丁。
bpo-28376: range_iterator 的构造函数现在检查步长不为 0。由 Oren Milman 提供补丁。
bpo-26906: 现在解析未初始化类型的特殊方法会导致类型的隐式初始化而不是失败。
bpo-18287: PyType_Ready() 现在检查 tp_name 是否为 NULL。原始由 Niklas Koep 提供补丁。
bpo-24098: 修复了在编译过程中 AST 被更改时可能发生的崩溃。
bpo-28350: 不再对含有空字符的字符串常量进行内部化。
bpo-26617: 修复了在弱引用回调过程中运行垃圾收集时发生的崩溃。
bpo-27942: 现在在元组和冻结集合中递归内部化字符串常量。
bpo-21578: 修复了当 ImportError 使用无效关键字参数调用时误导性的错误消息。
bpo-28203: 修复来自
complex(1.0, {2:3})的错误消息中的错误类型。由 Soumya Sharma 提供补丁。bpo-27955: 当 getrandom() 系统调用因 EPERM 失败时(例如被 SECCOMP 阻止时),回退读取 /dev/urandom 设备。
bpo-28131: 修复zipimport的compile_source()中的回归问题。zipimport应使用与解释器相同的优化级别。
bpo-25221: 当 Python 编译时设置 NSMALLPOSINTS = 0 时,修复 PyLong_FromLong(0) 的损坏结果。
bpo-25758: 防止 zipimport 不必要地编码文件名(由 Eryk Sun 提供补丁)
bpo-28189: dictitems_contains 不再吞下比较错误。(由 Xiang Zhang 提供补丁)
bpo-27812: 正确清除生成器帧对生成器的反向引用,以防止frame.clear()中的崩溃。
bpo-27811: 修复了一个在启用警告即错误时,未等待的协程被最终化时崩溃的问题。
bpo-27587: 修复了PVS-Studio发现的另一个问题:在_PyState_AddModule()中使用'def'后的空指针检查。初始由Christian Heimes提供补丁。
bpo-26020: 集合字面量评估顺序与文档行为不匹配。
bpo-27782: 多阶段扩展模块导入现在正确地允许使用
m_methods字段来向Py_create_mod返回的非模块类型实例添加模块级函数。由 Xiang Zhang 提供补丁。bpo-27936: round() 函数对某些类型接受第二个 None 参数,但对其他类型不接受。通过接受所有数值类型的 None 来修复这种不一致性。
bpo-27487: 如果在导入父包之后但在执行子模块之前,在 sys.modules 中找到了 "python -m" 或 runpy.run_module() 的子模块参数,则发出警告。
bpo-27558: 修复 "raise" 语句实现中的一个 SystemError。在一个全新的线程中,引发一个 RuntimeError,因为没有活动的异常可以重新引发。补丁由 Xiang Zhang 编写。
bpo-27419: 标准 __import__() 不再在全局或内置中查找 "__import__" 以导入子模块或 "from import"。修复了非字符串包名错误的处理。
bpo-27083: 在Windows下尊重PYTHONCASEOK环境变量。
bpo-27514: 将静态嵌套块过多的情况改为SyntaxError而非SystemError。
bpo-27473: 修复了 bytes 和 bytearray 连接中可能的整数溢出问题。补丁由 Xiang Zhang 提供。
bpo-27507: 在bytearray.extend()中添加整数溢出检查。由张翔提供补丁。
bpo-27581: 在PySequence_Tuple()中不依赖包装进行溢出检查。由张翔提供补丁。
bpo-27443: bytearray 迭代器的 __length_hint__() 不再为调整大小的 bytearray 返回负整数。
bpo-27942: 修复 codeobject.c 中的内存泄漏
库¶
bpo-15812: inspect.getframeinfo()现在正确显示上下文的第行。由Sam Breese提供补丁。
bpo-29094: 使用外部文件对象和模式"w"和"x"创建的ZIP文件中的偏移量现在相对于文件的开始位置。
bpo-13051: 修复了大型或调整大小的curses.textpad.Textbox中的递归错误。基于Tycho Andersen的补丁。
bpo-29119: 修复collections.OrderedDict move_to_end()方法的纯Python版本中的weakrefs。由Andra Bogildea贡献。
bpo-9770: curses.ascii谓词现在正确处理负整数。
bpo-28427: 当从另一个线程收集时,旧键不应从WeakValueDictionary中移除新值。
bpo-28923: 从Tix.py中移除编辑器工件。
bpo-28871: 修复了在深度ElementTree释放时的崩溃。
bpo-19542: 修复WeakValueDictionary.setdefault()和WeakValueDictionary.pop()中的bug,这些bug在另一个线程发生GC收集时出现。
bpo-20191: 修复了当传递一个不拥有其元素的序列作为限制时,resource.prlimit() 崩溃的问题。
bpo-28779: 如果预加载的模块实例化了某些多处理对象(如锁),multiprocessing.set_forkserver_preload()会使forkserver进程崩溃。
bpo-28847: dbm.dumb现在支持读取只读文件,并且在索引文件未更改时不再写入索引文件。
bpo-25659: 在 ctypes 中,防止在抽象类(如 Array)上调用 from_buffer() 和 from_buffer_copy() 方法时崩溃。
bpo-28732: 修复 os.spawnv() 在 args 中没有元素时的崩溃
bpo-28485: 对于 compileall.compile_dir(workers=...) 参数的负值,即使多线程不可用,也总是引发 ValueError。
bpo-28387: 修复了当垃圾收集器在其他线程中调用时,_io.TextIOWrapper解构器可能崩溃的问题。基于Sebastian Cufre的补丁。
bpo-27517: LZMA压缩器和解压器在两次接收到空数据时不再抛出异常。补丁由Benjamin Fogle提供。
bpo-28549: 修复了curses的addch()在使用ncurses6时的段错误。
bpo-28449: tarfile.open()以模式"r"或"r:"现在会先尝试以压缩方式打开tar文件,再尝试无压缩方式打开。否则在使用ignore_zeros=True时有50%的几率失败。
bpo-23262: webbrowser模块现在支持Firefox 36+及衍生浏览器。基于Oleg Broytman的补丁。
bpo-27939: 修复了tkinter.ttk.LabeledScale和tkinter.Scale中由于在Tk内部将比例表示为浮点值而导致的错误。如果底层Tk变量设置为浮点值,tkinter.IntVar现在可以正常工作。
bpo-28255: calendar.TextCalendar().prmonth() 在打印月历后不再在新行的开头打印空格。由 Xiang Zhang 提供补丁。
bpo-20491: textwrap.TextWrapper 类现在支持不换行空格。基于 Kaarle Ritvanen 的补丁。
bpo-28353: os.fwalk() 不再因损坏的链接而失败。
bpo-25464: 通过为 Tix 库的 bug 添加变通方法,修复了 tkinter.tix 模块中的 HList.header_exists()。
bpo-28488: shutil.make_archive() 不再向 ZIP 存档添加条目 "./"。
bpo-24452: 使 webbrowser 支持 Mac OS X 上的 Chrome。
bpo-20766: 修复了 pdb 在处理 SIGINT 处理器时的引用泄漏问题。
bpo-26293: 修复了不从文件开头开始写入 ZIP 文件的问题。ZIP 文件中的偏移量现在相对于存档的开始,以符合规范。
bpo-28321: 修复了在 plistlib 中使用二进制格式写入非 BMP 字符的问题。
bpo-28322: 修复了当从错误的 pickle 数据反序列化 itertools 对象时可能发生的崩溃。基于 John Leitch 的补丁。
修复了 mmap 模块中在异常使用模式下可能出现的整数溢出和崩溃问题。
bpo-1703178: 修复了向distutils的build_ext命令传递--link-objects选项的功能。
bpo-28253: 修复了极端月份(0001-01和9999-12)的日历功能。重新实现了itermonthdays()和itermonthdays2()方法,使其不再调用可能导致datetime.date下溢/溢出的itermonthdates()。
bpo-28275: 修复了LZMADecompressor和BZ2Decompressor类中decompress()方法可能存在的释放后使用问题。原始由John Leitch提供补丁。
bpo-27897: 修复了如果传递无效的字符串类似对象作为名称时,sqlite3.Connection.create_collation()可能崩溃的问题。由Xiang Zhang提供补丁。
bpo-18893: 修复了Lib/ctypes/macholib/dyld.py中无效的异常处理。由Madison May提供补丁。
bpo-27611: 修复了 tkinter.tix 模块中默认根窗口的支持。
bpo-27348: 在traceback模块中,恢复了类似于"Exception: None"的异常消息的格式化。这修复了3.5a2中引入的回归问题。
bpo-25651: 允许在subTest()的msg参数中使用假值。
bpo-27932: 防止win32_ver()中的内存泄漏。
修复socket._sendfile_use_sendfile中的UnboundLocalError。
bpo-28075: 在Windows的os.stat()实现中检查ERROR_ACCESS_DENIED。由Eryk Sun提供补丁。
bpo-25270: 防止在传递空字节串时codecs.escape_encode()引发SystemError。
bpo-28181: 通过HTTPS获取antigravity。由Kaartic Sivaraam提供补丁。
bpo-25895: 在urllib.parse.urljoin中启用WebSocket URL方案。由Gergely Imreh和Markus Holtermann提供补丁。
bpo-27599: 修复binascii.b2a_qp()和binascii.a2b_qp()中的缓冲区溢出问题。
bpo-19003: email.generator 现在按照 RFC,仅替换
\r和/或\n行结束符,而不是所有的 Unicode 行结束符。bpo-28019: itertools.count()不再将1.0到2.0之间的非整数步长四舍五入为1。
bpo-25969: 更新lib2to3语法以处理3.5中添加的解包泛化。
bpo-14977: mailcap现在遵循mailcap文件中的行顺序(“首次匹配”),符合RFC 1542的要求。由Michael Lazar提供的补丁。
bpo-24594: 在打开MSI数据库时验证persist参数。
bpo-17582: xml.etree.ElementTree现在保留属性中的空白(由Duane Griffin提供补丁。由Stefan Behnel审查和批准。)。
bpo-28047: 修复了用于新电子邮件策略中base64 CTE的行长度计算。
bpo-27445: 不将str(_charset)传递给MIMEText.set_payload()。由Claude Paroz提供的补丁。
bpo-22450: urllib现在在默认头中包括一个
Accept: */*头。这使得REST API请求的结果更加一致和可预测,尤其是在涉及代理服务器时。lib2to3.pgen3.driver.load_grammar() 现在在相同的Grammar.txt输入下,无论哈希随机化设置如何,都会创建一个稳定的缓存文件。
bpo-27570: 在“ctypes”和“array”模块中避免使用空源指针进行零长度memcpy()等调用。
bpo-22233: 仅在RFC指定的CR和LF字符上断开电子邮件标题行,而不是在任意Unicode换行符上。这也修复了HTTP标题解析中的一个错误。
bpo-27988: 修复email iter_attachments对payload列表的错误修改。
bpo-27691: 修复ssl模块对X.509证书中GEN_RID主题替代名字段的解析。
bpo-27850: 从ssl模块的默认加密列表中移除3DES以应对sweet32攻击(CVE 2016-2183)。
bpo-27766: 向ssl模块的默认加密列表中添加ChaCha20 Poly1305。(需要OpenSSL 1.1.0或LibreSSL)。
bpo-26470: 将ssl和hashlib模块移植到OpenSSL 1.1.0。
移除对传递文件描述符给os.access的支持。它从未工作过,但以前不会引发错误。
bpo-12885: 修复distutils遇到符号链接时的错误。
bpo-27881: 修复了设置sqlite3.Connection.isolation_level时可能的错误。基于Xiang Zhang的补丁。
bpo-27861: 修复了当工厂创建的不是游标时sqlite3.Connection.cursor()中的崩溃。由Xiang Zhang提供补丁。
bpo-19884: 避免在OS X上使用Gnu Readline时产生虚假输出。
bpo-27706: 恢复random.Random().seed()对于使用种子版本1的字符串种子的确定性行为。允许random()的调用序列与Python 2中完全匹配。由Nofar Schnider提供补丁。
bpo-10513: 修复Connection.commit()中的回归问题。提交后不应重置语句。
来自 https://github.com/python/typing 的 typing.py 新版本:Collection(仅适用于 3.6)(bpo-27598)。将 FrozenSet 添加到 __all__(上游 #261)。修复 _get_type_vars() 中的崩溃(上游 #259)。移除 ForwardRef._eval_type 中的字典约束(上游 #252)。
bpo-27539: 修复了在负指数和负基数情况下未归一化的
Fraction.__pow__结果。bpo-21718: 现在,使用CTEs的查询可以使用cursor.description了。
bpo-2466: posixpath.ismount现在能正确识别用户没有权限访问的挂载点。
bpo-27773: 更正 _ssl.wrap_socket() 中 server_hostname 的一些内存管理错误。
bpo-26750: unittest.mock.create_autospec() 现在能正确处理 property() 及其他数据描述符的子类。
在 curses 模块中,如果向 window.getstr() 或 window.instr() 传递负值,则引发错误。
bpo-27783: 修复 operator.methodcaller 中可能使用未初始化内存的问题。
bpo-27774: 修复 _sre 中可能对未拥有对象进行 Py_DECREF 的问题。
bpo-27760: 修复 binascii.b2a_qp 中可能的整数溢出。
bpo-27758: 修复 _csv 模块中对于大记录长度可能的整数溢出。
bpo-27568: 防止 HTTPoxy 攻击 (CVE 2016-1000110)。当设置了 REQUEST_METHOD 环境变量时忽略 HTTP_PROXY 变量,这表明脚本处于 CGI 模式。
bpo-27656: 不再假设sched.h定义了任何SCHED_*常量。
bpo-27130: 在“zlib”模块中,修复了压缩和解压缩大缓冲区(通常为4 GiB)时的处理问题。之前,输入被限制在4 GiB,压缩和解压缩操作未能正确处理4 GiB的结果。
bpo-27533: 在nt._isdir中释放GIL。
bpo-17711: 修复了使用协议0的持久ID进行反序列化的问题。原始补丁由Alexandre Vassalotti提交。
bpo-27522: 避免在email.feedparser中无意中创建的引用循环。
bpo-26844: 修复 imp.find_module() 的错误消息,使其引用 'path' 而不是 'name'。由 Lev Maximov 提供补丁。
bpo-23804: 修复 SSL 零长度 recv() 调用,使其不阻塞且不引发关于不干净 EOF 的错误。
bpo-27466: 更改 http.cookie.time2netscape 返回的时间格式,确认 netscape cookie 格式并使其与文档一致。
bpo-26664: 通过移除
$的错误使用修复 activate.fish。bpo-22115: 修复了跟踪 Tkinter 变量的功能:trace_vdelete() 使用错误的模式不再破坏跟踪,trace_vinfo() 现在总是返回字符串对的列表,"u" 模式下的跟踪现在可以工作。
修复了 importlib.util.LazyLoader 中的一个作用域问题,该问题在懒加载一个已经被放入 sys.modules 的模块时会触发 UnboundLocalError。
bpo-27079: 修复了curses.ascii函数isblank()、iscntrl()和ispunct()。
bpo-26754: 一些函数(如compile()等)接受以整数可迭代对象编码的文件名参数。现在只接受字符串和字节类对象。
bpo-27048: 防止distutils在Windows上因环境变量包含非ASCII字符而失败。
bpo-27330: 修复了ctypes模块中可能的泄漏。
bpo-27238: 移除了turtle模块中的裸except。原始由Jelle Zijlstra提供补丁。
bpo-27122: 当在由contextlib.ExitStack()管理的上下文中引发异常,并且退出堆栈生成器之一捕获并在链中引发它时,退出时不再重新引发原始异常,而是让新的链式异常通过。这避免了issue25782中描述的 PEP 479 错误。
bpo-26386: 修复了 ttk.TreeView 选中操作中项目 ID 包含空格的问题。
bpo-16182: 修复 "readline" 模块中的多个函数以使用区域设置编码,并修复 get_begidx() 和 get_endidx() 返回代码点索引。
bpo-27392: 添加 loop.connect_accepted_socket()。由 Jim Fulton 提供补丁。
bpo-27930: 改进了logging.handlers.QueueListener的行为。感谢Paulo Andrade和Petr Viktorin的分析和补丁。
bpo-21201: 提高了multiprocessing错误消息的可读性。感谢Wojciech Walczak的补丁。
bpo-27456: asyncio:默认设置TCP_NODELAY。
bpo-27906: 在高TCP流量期间修复socket接受耗尽问题。由Kevin Conway提供补丁。
bpo-28174: 处理当SO_REUSEPORT未被正确支持时的情况。由Seth Michael Larson提供补丁。
bpo-26654: 在asyncio.Handle.__repr__中检查functools.partial。由iceboy提供补丁。
bpo-26909: 修复asyncio中慢速管道IO的问题。由INADA Naoki提供补丁。
bpo-28176: 修复asyncio.SelectorLoop.sock_connect中的回调竞争问题。
bpo-27759: 修复选择器错误保留无效文件描述符的问题。由Mark Williams提供补丁。
bpo-28368: 如果子监视器没有附加循环,则拒绝监视进程。由Vincent Michel提供补丁。
bpo-28369: 当传输的FD与add_reader、add_writer等一起使用时引发RuntimeError。
bpo-28370: 加速asyncio.StreamReader.readexactly。由Коренберг Марк提供补丁。
bpo-28371: 弃用将asyncio.Handles传递给run_in_executor的做法。
bpo-28372: 修复asyncio以支持非python协程的格式化。
bpo-28399: 在绑定前从文件系统中移除UNIX套接字。由Коренберг Марк提供补丁。
bpo-27972: 禁止Tasks等待自身。
bpo-26923: 修复 asyncio.Gather 一旦所有子项完成就拒绝被取消的问题。由 Johannes Ebke 提供补丁。
bpo-26796: 不要为默认的线程池执行器配置工作线程数量。初始由 Hans Lawrenz 提供补丁。
bpo-28600: 优化 loop.call_soon()。
bpo-28613: 修复 get_event_loop() 在协程/回调中调用时返回当前循环的问题。
bpo-28639: 修复 inspect.isawaitable 始终返回布尔值,由 Justin Mayfield 提供补丁。
bpo-28652: 使循环方法拒绝它们不支持的套接字类型。
bpo-28653: 修复 functools.lru_cache 中的 refleak。
bpo-28703: 修复 asyncio.iscoroutinefunction 以处理 Mock 对象。
bpo-24142: 读取损坏的配置文件会使解析器处于无效状态。原始由 Florian Höch 提供补丁。
bpo-28990: 修复了如果在握手完成前关闭连接会导致 SSL 挂起的问题。(补丁由 HoHo-Ho 提供)
IDLE¶
bpo-15308: 向Shell菜单添加了'中断执行'(^C)。由Roger Serwy提供补丁,由Bayard Randel更新。
bpo-27922: 停止IDLE测试在屏幕上'闪烁'gui小部件。
在 IDLE 帮助窗口的标题中加入版本号
bpo-25564: 在IDLE与控制台差异的部分,提到使用exec意味着每个语句都定义了__builtins__。
bpo-27714: text_textview和test_autocomplete现在在同一个进程中重新运行时通过。这发生在test_idle使用-w选项运行但未使用-jn选项时失败时。修复test_config的警告。
bpo-25507: IDLE不再因为其tkinter导入而运行有bug的代码。用户必须包含直接在Python中运行所需的相同导入。
bpo-27452: 在IDLE configHandler测试转储中添加行计数器和crc。
bpo-27365: 允许在 IDLE NEWS.txt 中使用非 ASCII 字符,用于贡献者姓名。
bpo-27245: IDLE:干净地删除自定义主题和键绑定。以前,当 IDLE 从控制台或通过导入启动时,会发出一系列警告。由 Serhiy Storchaka 提供补丁。
C API¶
文档¶
bpo-28513: 记录了 zipfile 的命令行接口。
测试¶
工具/示例¶
Windows¶
构建¶
bpo-29080: 从PCBuild/build.bat中移除对hg.exe的硬依赖
bpo-23903: 向PC/python3.def添加遗漏的名称。
bpo-10656: 修复AIX上的树外构建。由Tristan Carel和Michael Haubenwallner提供补丁。
bpo-26359: 将--with-optimiations重命名为--enable-optimizations。
bpo-28444: 修复交叉编译时缺少扩展模块的问题。
bpo-28248: 更新Windows构建和OS X安装程序以使用OpenSSL 1.0.2j。
bpo-28258: 修复了在爱沙尼亚语言环境下构建的问题(Makefile中的python-config和distclean目标)。由Arfrever Frehtes Taifersar Arahesis提供补丁。
bpo-26661: setup.py现在可以检测到带有multiarch包装的系统libffi。
bpo-28066: 修复在源代码树外构建时搜索构建目录中生成的包含文件的逻辑。
bpo-15819: 移除了为在源码树外构建而冗余的包含搜索目录选项。
bpo-27566: 修复冻结makefile中的clean目标(Lisa Roach提供补丁)
bpo-27705: 更新validate_ucrtbase.py中的消息
bpo-27983: 当使用clang作为PGO链接所需工具时,由于缺少llvm-profdata工具,在启用--with-optimizations时将配置时错误变为make时错误。同时提高我们在MacOS和一些Linux上找到llvm-profdata工具的能力。
bpo-26307: profile-opt构建现在将PGO应用于内置模块。
bpo-26359: 添加--with-optimizations配置标志。
bpo-27713: 在更新importlib的引导文件时抑制虚假的构建警告。由Xiang Zhang提供补丁。
bpo-25825: 更正对Modules/python.exp和ld_so_aix的引用,这些在AIX上是必需的。这更新了对在3.2a4中更改的安装路径的引用,并撤销了在3.5.0a1中对构建树的引用更改。
bpo-27453: 配置中的CPP调用必须使用CPPFLAGS。由Chi Hsuan Yen提供补丁。
bpo-27641: 配置脚本现在在makefile中插入注释,以防止pgen和_freeze_importlib可执行文件被交叉编译。
bpo-26662: 在配置中设置PYTHON_FOR_GEN作为构建期间用于文件生成的Python程序。
bpo-10910: 避免在FreeBSD和OS X上出现C++编译错误。同时更新FreedBSD版本检查以应对原始的ctype UTF-8变通方案。
bpo-28676: 防止在macOS上出现缺失'getentropy'声明的警告。由Gareth Rees提供补丁。
Python 3.5.2 正式版¶
发布日期: 2016-06-26
核心与内置函数¶
bpo-26930: 更新Windows构建以使用OpenSSL 1.0.2h。
测试¶
bpo-26867: Ubuntu的openssl OP_NO_SSLv3默认强制开启;修复测试。
IDLE¶
bpo-27365: 允许在idlelib/NEWS.txt中使用非ASCII字符 - 3.5.2的最小部分。
Python 3.5.2 rc1¶
发布日期: 2016-06-12
安全性¶
bpo-26556: 将expat更新到2.1.1,修复了 CVE 2015-1283。
修复smtplib中的TLS剥离漏洞,CVE 2016-0772。由Team Oststrom报告。
bpo-26839: 在Linux上,
os.urandom()现在调用getrandom()与GRND_NONBLOCK,如果urandom熵池尚未初始化,则回退到读取/dev/urandom。补丁由Colm Buckley编写。bpo-26657: 修复Windows上http.server的目录遍历漏洞。这修复了在3.3.4rc1和3.4.0rc1中引入的回归问题。基于Philipp Hagemeister的补丁。
bpo-26313: 如果windows证书存储为空,ssl.py _load_windows_store_certs失败。由Baji提供补丁。
bpo-25939: 在Windows上以只读方式打开证书存储于ssl.enum_certificates中。
核心与内置函数¶
bpo-27066: 修复了如果自定义 opener(为 open())返回一个负数而没有设置异常时的 SystemError。
bpo-20041: 修复当frame.f_trace被设置为None时的TypeError。由Xavier de Gaye提供补丁。
bpo-26168: 修复了在使用 "N" 格式化单元时 Py_BuildValue() 失败可能导致的内存泄漏问题。
bpo-26991: 修复了创建带有注解的函数时可能出现的内存泄漏问题。
bpo-27039: 修复了bytearray.remove()对于大于127的值的问题。由Joe Jevnik提供补丁。
bpo-23640: int.from_bytes() 不再绕过子类的构造函数。
bpo-26811: gc.get_objects() 不再包含带有 NULL 指针的损坏元组。
bpo-20120: 使用 RawConfigParser 来解析 .pypirc 文件,移除了无意中随着迁移到 Python 3 而添加的插值支持。现在的行为不会再在 .pypirc 文件中进行任何插值,与 Python 2.7 和 Setuptools 19.0 的行为一致。
bpo-26659: 使内置的 slice 类型支持循环回收。
bpo-26718: super.__init__ 如果被多次调用,将不再泄露内存。注意:不推荐直接调用 super.__init__!
bpo-25339: 现在在设置 stdin 和 stdout 的错误处理器时,PYTHONIOENCODING 优先于 locale。
bpo-26494: 修复了在迭代耗尽迭代器时的崩溃问题。受影响的类包括通用序列迭代器、str、bytes、bytearray、list、tuple、set、frozenset、dict、OrderedDict的迭代器,相应的视图以及os.scandir()迭代器。
bpo-26581: 如果在Python源代码文件中一行内多次指定编码声明,只有第一个会被考虑。
bpo-26464: 修复了当字符串为ASCII且第一个替换移除了字符,但下一个替换使用非ASCII字符或长度超过1个字符的字符串时str.translate()的问题。这是在Python 3.5.0中引入的回归问题。
bpo-22836: 确保即使格式化产生次要错误时,PyErr_Display()和PyErr_WriteUnraisable()产生的异常报告也是合理的。这影响sys.__excepthook__()产生的报告以及__del__()引发异常时的情况。
bpo-26302: 修正行为,拒绝将逗号作为cookie名称的合法字符。
bpo-4806: 在函数调用中使用星号(
*)解包时,避免掩盖原始的TypeError异常。基于Hagen Fürstenau和Daniel Urban的补丁。bpo-27138: 修正了 FileFinder.find_spec() 的文档注释。
bpo-26154: 新增一个私有函数_PyThreadState_UncheckedGet()用于获取当前Python线程状态,但如果其为NULL时不发出致命错误。必须使用此新函数而非直接访问_PyThreadState_Current变量。自Python 3.5.1起,该变量不再暴露以隐藏原子C类型的精确实现,避免编译器问题。
bpo-26194: Deque.insert()对于已达到最大大小的有界deque给出了奇怪的结果。现在当尝试向一个已满的deque插入时会引发IndexError。
bpo-25843: 编译代码时,如果常量相等但类型不同,则不合并它们。例如,
f1, f2 = lambda: 1, lambda: 1.0``现在被正确编译为两个不同的函数:``f1()``返回 ``1(int) 和``f2()``返回1.0(float) ,即使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: 修复了 functools.singledispatch 在具有假元类的类上的问题。补丁来自 Ethan Furman。
asyncio: ensure_future() 现在接受可等待对象。
IDLE¶
bpo-15348: 在关闭调试器窗口(在 IDLE 进程中运行)之前停止调试器引擎(通常在用户进程中)。这防止了被捕获并忽略的 RuntimeErrors。
bpo-24455: 防止IDLE在以下情况下挂起:a) 当调试器处于活动状态时关闭shell(15347);b) 使用[X]按钮关闭调试器(15348);以及c) 当调试器已经处于活动状态时再次激活(24455)。Mark Roseman的补丁通过两个更改来实现这一点。1. 使用为此目的设计的tcl vwait机制(而不是root.mainloop & .quit)暂停和恢复gui.interaction方法。2. 在gui.run中,允许任何现有的交互首先终止。
在IDLE的'终止程序?'消息中,将'程序'改为'您的程序',以更清楚地表明所指的是当前运行的用户程序,而不是IDLE本身。
bpo-24750: 改善IDLE编辑器窗口状态栏的外观。Patch by Mark Roseman。
bpo-25313: 更改新内置文本颜色主题的处理,以更好地解决由IDLE Dark的添加引入的兼容性问题。在idlelib中一致地使用修订后的idleConf.CurrentTheme。
bpo-24782: 扩展配置现在是IDLE首选项对话框中的一个标签,而不是一个单独的对话框。原来的标签现在是一个排序列表。Patch by Mark Roseman。
bpo-22726: 重新激活配置对话框帮助按钮,包含一些关于其他按钮和新IDLE Dark主题的内容。
bpo-24820: IDLE现在有一个'IDLE Dark'内置文本颜色主题。它或多或少是IDLE Classic的反转,背景为钴蓝色。字符串、注释、关键字等仍然是绿色、红色、橙色等。要在2015年11月之前发布的IDLEs中使用它,点击'保存为新的自定义主题'按钮并输入一个新名称,如'Custom Dark'。自定义主题适用于任何IDLE版本,并且可以修改。
bpo-25224: README.txt现在是IDLE开发者和好奇用户的idlelib索引。以前的用户内容现在在IDLE文档章节中。'IDLE'现在意味着'集成开发和学习环境'。
bpo-24820: 用户现在可以在设置->自定义高亮中设置断点颜色。原始由Mark Roseman提供补丁。
bpo-24972: 非活动选择背景现在在所有系统上都与用户配置的活动选择背景相匹配。在Windows上,找到的项目现在总是高亮显示。初始由Mark Roseman提供补丁。
bpo-24570: Idle:在受tk回归影响的Mac上显示调用提示和完成框。初始补丁由Mark Roseman提供。
bpo-24988: Idle ScrolledList上下文菜单(在调试器中使用)现在在Mac Aqua上工作。由Mark Roseman提供补丁。
bpo-24801: 使右键点击上下文菜单在Mac Aqua上工作。由Mark Roseman提供补丁。
bpo-25173: 将tkinter消息框与特定小部件关联。对于Mac OSX,使它们成为'表单'。由Mark Roseman提供补丁。
bpo-25198: 增强现在用于Idle Help的初始html查看器。正确缩进固定间距文本(由Mark Roseman提供补丁)。给代码片段一个非常类似Sphinx的浅蓝灰色背景。重用用户为shell和编辑器设置的初始宽度和高度。当使用目录(TOC)菜单时,将部分标题放在屏幕顶部。
bpo-25225: 压缩并重写Idle文档中关于文本颜色的部分。
bpo-21995: 解释IDLE和控制台Python之间的一些差异。
bpo-22820: 解释在从Idle编辑器运行文件时需要 print 的原因。
bpo-25224: 文档:增加Idle功能列表和无子进程部分。
bpo-25219: 更新Idle命令行选项的文档。有些选项缺失,注释也不正确。
bpo-24861: 大多数idlelib是私有的,可能会更改。使用idleib.idle.*来启动Idle。参见idlelib.__init__.__doc__。
bpo-25199: Idle:为未来的维护者添加同步注释。
bpo-16893: 用 help.html 替换 help.txt 用于 Idle 文档显示。新的 idlelib/help.html 是从 Doc/build/html/library/idle.html 去除右侧空白的版本。它看起来比 help.txt 更好,并且能更好地记录发布的 Idle。为此文件工作的 tkinter html 查看器由 Mark Roseman 编写。现在未使用的 EditorWindow.HelpDialog 类和 helt.txt 文件已被弃用。
bpo-24199: 弃用未使用的 idlelib.idlever,可能在 3.6 中移除。
bpo-24790: 移除多余的代码(这也造成了 2 和 3 的冲突)。
文档¶
bpo-22558: 将剩余的文档链接添加到Python编码模块的源代码中。由Yoni Lavi提供补丁。
bpo-12067: 重写语言参考中表达式章节的比较部分。一些关于比较混合类型的细节不正确或含糊。NotImplemented 仅在比表达式章节更低的层次相关。增加了比较 range() 对象的细节,以及用户定义类的默认行为和一致性建议。补丁来自 Andy Maier。
bpo-24952: 阐明 "threading" 和 "_thread" 模块中 stack_size() 的默认 size 参数。来自 Mattip 的补丁。
bpo-23725: 彻底修改 tempfile 文档。注意 mktemp 的弃用状态。补丁来自 Zbigniew Jędrzejewski-Szmek。
bpo-24808: 更新一些 PyTypeObject 字段的类型。补丁来自 Joseph Weston。
bpo-22812: 修复 unittest 发现示例。补丁来自 Pam McA'Nulty。
测试¶
构建¶
Windows¶
bpo-25450: 更新快捷方式以在安装目录中启动 Python。
bpo-25164: 将默认所有用户安装目录更改为与每用户目录匹配。
bpo-25143: 改进了对不支持平台的安装程序错误消息。
bpo-25163: 在使用非默认设置时,在安装程序中显示正确的目录。
bpo-25361: 在Windows 32位构建中禁用SSE2指令的使用。
bpo-25089: 在升级时未选择启动器的情况下,为安装程序添加日志记录。
bpo-25165: 如果其他版本仍存在,Windows卸载不应移除启动器。
bpo-25112: py.exe启动器缺少图标。
bpo-25102: Windows安装程序未预编译-O或-OO。
bpo-25081: 在升级时,使安装程序中的返回按钮返回到升级页面。
bpo-25091: 增加安装程序的字体大小。
bpo-25126: 澄清非Web安装程序将下载一些组件。
bpo-25213: 恢复manifest中的requestedExecutionLevel以禁用UAC虚拟化。
bpo-25022: 删除了非常过时的 PC/example_nt/ 目录。
工具/示例¶
bpo-25440: 修复python-config --extension-suffix的输出。
Python 3.5.0 正式版¶
发布日期: 2015-09-13
构建¶
bpo-25071: Windows安装程序在静默安装时不应需要TargetDir参数。
Python 3.5.0 rc4¶
发布日期: 2015-09-09
库¶
bpo-25029: 修复test_strptime中的MemoryError。
构建¶
bpo-25027: 恢复部分静态构建选项并将vcruntime140.dll添加到Windows安装中。
Python 3.5.0 rc3¶
发布日期: 2015-09-07
核心与内置函数¶
库¶
bpo-24917: time_strftime()缓冲区过度读取。
bpo-24748: 为了解决与py2exe和pywin32发现的兼容性问题,imp.load_dynamic()再次忽略先前加载的模块,以支持Python模块用扩展模块替换自己。由Petr Viktorin提供补丁。
bpo-24635: 修复了typing.py中的一个错误,其中isinstance([], typing.Iterable)会返回一次True,然后在后续调用中返回False。
bpo-24989: 如果设置的位置超出大小,修复BytesIO.readline()中的缓冲区过度读取。基于John Leitch的补丁。
bpo-24913: 修复 deque.index() 中的溢出错误。由 John Leitch 和 Bryce Darling 发现。
Python 3.5.0 rc2¶
发布日期: 2015-08-25
核心与内置函数¶
库¶
Python 3.5.0 rc1¶
发布日期: 2015-08-09
核心与内置函数¶
bpo-24667: 在所有底层字典调整大小的情况下调整odict的大小。
库¶
bpo-24824: codecs.encode()和codecs.decode()的签名现在与pydoc兼容。
bpo-24634: 在Windows上导入uuid不应该尝试加载libc
bpo-24798: _msvccompiler.py没有正确支持清单
bpo-4395: 更好的二进制运算符测试和文档。由Martin Panter提供补丁。
bpo-23973: 从GitHub仓库更新typing.py。
bpo-23004: mock_open()现在当read_data的类型是bytes时能正确读取二进制数据。初始由Aaron Hill提供补丁。
bpo-23888: 处理cookie过期时间中的小数时间。由ssh提供补丁。
bpo-23652: 使得可以针对Linux标准基础的libc头文件编译select模块,这些头文件不包含一些EPOLL宏。由Matt Frank提供补丁。
bpo-22932: 修复email.utils.formatdate中的时区问题。补丁来自Dmitry Shachnev。
bpo-23779: 如果认证器尝试中止,imaplib会引发TypeError。补丁来自Craig Holmquist。
bpo-23319: 修复ctypes.BigEndianStructure,正确交换字节。补丁由Matthieu Gautier编写。
bpo-23254: 记录如何关闭TCPServer监听套接字。补丁来自Martin Panter。
bpo-19450: 更新Windows和OS X安装程序构建以使用SQLite 3.8.11。
bpo-17527: 向wsgiref.validator添加PATCH。补丁来自Luca Sbardella。
bpo-24791: 修复调用语法 'g(*a or b)' 的语法回归问题。
IDLE¶
bpo-23672: 允许Idle编辑和运行名称中包含星体字符的文件。由Mohd Sanad Zaki Rizvi提供补丁。
bpo-24745: Idle编辑器默认字体。从Courier切换到平台敏感的TkFixedFont。这不应影响当前自定义的字体选择。如果存在问题,请编辑$HOME/.idlerc/config-main.cfg并从[Editor Window]中移除'
fontxxx'条目。由Mark Roseman提供补丁。bpo-21192: Idle编辑器。当运行文件时,将其名称放入重启栏。不打印虚假提示。原始由Adnan Umer提供补丁。
bpo-13884: Idle菜单。移除撕裂线。由Roger Serwy提供补丁。
文档¶
测试¶
bpo-24751: 当使用
-w命令行选项运行regrtest时,如果所有测试在重新运行时成功,则不再将测试运行标记为失败。
Python 3.5.0 beta 4¶
发布日期: 2015-07-26
核心与内置函数¶
库¶
bpo-23441: rcompleter现在打印一个制表符而不是显示空字的可能完成项。初始由Martin Sekera提供补丁。
bpo-24683: 修复了使用不适当类型的参数调用_json函数时的崩溃问题。
bpo-21697: shutil.copytree()现在正确处理指向目录的符号链接。由Eduardo Seabra和Thomas Kluyver提供补丁。
bpo-14373: 修复了在构建lru_cache(C实现)期间调用gc.collect()时出现的段错误。
bpo-24695: 修复了traceback.print_exception()中的一个回归问题。如果exc_traceback为None,我们不应该像文档中描述的那样打印回溯头。
bpo-24620: Random.setstate()现在验证state最后一个元素的值。
bpo-22485: 修复了导致
inspect.getsource在嵌套函数上返回不正确结果的问题。bpo-22153: 改进unittest文档。补丁来自Martin Panter和evilzero。
bpo-24580: 在re模式中,现在明确禁止对开放组的符号组引用以及数字组引用。
bpo-24206: 修复了inspect类的__eq__和__ne__方法。
bpo-24631: 修复了timeit模块中多行设置的回归问题。
bpo-18622: unittest.mock.mock_open().reset_mock 会无限递归。补丁来自 Nicola Palumbo 和 Laurent De Buyst。
bpo-23661: unittest.mock 的 side_effects 现在可以再次是异常。这是对 Python 3.4 的一个回归。补丁来自 Ignacio Rossi
bpo-24608: chunk.Chunk.read()现在总是返回字节,而不是str。
bpo-18684: 修复了re模块中读取缓冲区的问题。
bpo-24259: 如果存档在数据段内被截断,tarfile现在会引发ReadError。
bpo-15014: SMTP.auth()和SMTP.login()现在支持RFC 4954中SMTP AUTH命令的可选初始响应参数。
bpo-24669: 修复inspect.getsource()对于'async def'函数的问题。由Kai Groner提供补丁。
bpo-24688: ast.get_docstring()对于'async def'函数。
构建¶
bpo-24603: 更新Windows构建和OS X 10.5安装程序以使用OpenSSL 1.0.2d。
Python 3.5.0 beta 3¶
发布日期: 2015-07-05
核心与内置函数¶
bpo-24467: 修复了 bytearray 中可能的缓冲区越界读取问题。bytearray 对象现在总是为尾随的空字节分配空间,其缓冲区现在总是以空字符结尾。
升级到 Unicode 8.0.0。
bpo-24345: 为稳定 ABI 添加 Py_tp_finalize 插槽。
bpo-24400: 为 PEP 492 协程引入一个独特的类型;添加 types.CoroutineType, inspect.getcoroutinestate, inspect.getcoroutinelocals;协程不再使用 CO_GENERATOR 标志;sys.set_coroutine_wrapper 仅适用于 'async def' 协程;inspect.iscoroutine 不再使用 collections.abc.Coroutine,它旨在仅测试纯 'async def' 协程;添加新的操作码:GET_YIELD_FROM_ITER;修复 types.coroutine 中使用的生成器包装器为 collections.abc.Generator 的实例;collections.abc.Awaitable 和 collections.abc.Coroutine 不能再用于检测基于生成器的协程——请使用 inspect.isawaitable 代替。
bpo-24450: 向生成器添加 gi_yieldfrom 和向协程添加 cr_await。由 Benno Leslie 和 Yury Selivanov 贡献。
bpo-19235: 添加新的 RecursionError 异常。由 Georg Brandl 提供补丁。
库¶
bpo-21750: mock_open.read_data 现在可以从每个实例中读取,就像在 Python 3.3 中一样。
bpo-24552: 修复 _pickle 模块在错误情况下的释放后使用问题。
bpo-24514: tarfile 现在容忍仅由空白组成的数字字段。
bpo-19176: 修复了 ElementTree 的 C 实现中与 doctype() 相关的错误。XMLParser 子类不再发出带有默认 doctype() 方法的弃用警告。直接调用 doctype() 现在会发出警告。如果目标的 doctype() 被调用,解析器的 doctype() 现在不会被调用。基于 Martin Panter 的补丁。
bpo-20387: 在 tab 缩进的块中恢复 tokenize/untokenize 的语义往返正确性。
bpo-24456: 修复了 audioop 模块的 adpcm2lin() 和 lin2adpcm() 函数中可能的缓冲区越界读取问题。
bpo-24336: contextmanager装饰器现在可以与名为"func"和"self"的关键字参数的函数一起工作。由Martin Panter提供补丁。
bpo-24522: 修复json加速模块中可能的整数溢出问题。
bpo-24489: 确保先前设置的C errno不会干扰cmath.polar()。
bpo-24408: 修复了tkinter.Font的measure()和metrics()方法中的AttributeError。
bpo-14373: functools.lru_cache()的C实现现在可以与方法一起使用。
bpo-24347: 如果PyDict_GetItemWithError返回NULL,则设置KeyError。
bpo-24348: 删除多余的incref/decref。
bpo-24359: 在迭代期间检查OrderedDict大小的变化。
bpo-24368: 支持OrderedDict方法中的关键字参数。
bpo-24362: 简化C OrderedDict快速节点调整大小的逻辑。
bpo-24377: 修复OrderedDict.__repr__中的引用泄漏。
bpo-24369: 防御迭代期间的键变更。
测试¶
文档¶
构建¶
bpo-24432: 更新Windows构建和OS X 10.5安装程序以使用OpenSSL 1.0.2c。
Python 3.5.0 beta 2¶
发布日期: 2015-05-31
核心与内置函数¶
库¶
bpo-23247: 修复了CJK编解码器中StreamWriter.reset()的崩溃问题。
bpo-24270: 根据 PEP 485 添加了math.isclose()和cmath.isclose()函数。由Chris Barker和Tal Einat贡献。
bpo-5633: 修复了当语句是字符串而设置不是时的timeit问题。
bpo-24326: 修复了audioop.ratecv()使用非默认weightB参数的问题。原始补丁由David Moore提供。
bpo-16991: 添加了OrderedDict的C实现。
bpo-23934: 修复inspect.signature以正确失败于缺乏签名信息的内置类型。初始由James Powell提供补丁。
Python 3.5.0 beta 1¶
发布日期: 2015-05-24
核心与内置函数¶
bpo-24276: 修复了属性描述符getter的优化。
bpo-24268: PEP 489: 多阶段扩展模块初始化。由Petr Viktorin提供补丁。
bpo-23955: 添加pyvenv.cfg选项以抑制在Windows上生成sys.path时的注册表/环境查找。
bpo-24257: 修复了伪造的types.SimpleNamespace比较中的系统错误。
bpo-22939: 修复了迭代器对象中的整数溢出问题。由Clement Rouault提供补丁。
bpo-23985: 修复了从bytearray前端删除一个切片后追加其他字节数据时可能发生的缓冲区溢出问题。
bpo-24102: 修复了标准错误处理程序中的异常类型检查。
bpo-15027: UTF-32编码器现在快3到7倍。
bpo-23290: 为目标为空的情况优化了set_merge()。(由Serhiy Storchaka贡献。)
bpo-2292: PEP 448: 额外的解包泛化。
bpo-24096: 使warnings.warn_explicit对warnings.filters列表的突变更加健壮。
bpo-23996: 避免当委托的生成器引发未标准化的StopIteration异常时崩溃。由Stefan Behnel提供补丁。
bpo-23910: 优化property() getter调用。由Joe Jevnik提供补丁。
bpo-23911: 将基于路径的importlib引导代码移动到一个单独的冻结模块。
bpo-24192: 修复命名空间包的导入问题。
bpo-24022: 修复处理不可解码源代码时标记器的崩溃问题。
bpo-9951: 为bytes、bytearray和memoryview添加了hex()方法。
bpo-22906: PEP 479: 改变生成器内部StopIteration的处理方式。
bpo-24017: PEP 492: 使用async和await语法实现协程。
库¶
bpo-14373: 添加了functools.lru_cache()的C实现。基于Matt Joiner和Alexey Kachayev的补丁。
bpo-24230: tempfile模块现在接受prefix、suffix和dir参数的bytes类型,并在这种情况下返回bytes(与os模块的API相匹配)。
bpo-22189: collections.UserString现在支持__getnewargs__()、__rmod__()、casefold()、format_map()、isprintable()和maketrans()。由Joe Jevnik提供补丁。
bpo-24244: 防止在Windows上遇到无效格式字符串时strftime终止。
bpo-23973: PEP 484: 添加typing模块。
bpo-23086: collections.abc.Sequence()抽象基类为index()混入添加了 start 和 stop 参数。由Devin Jeanpierre提供补丁。
bpo-20035: 将用于在Windows上设置Tcl/Tk环境的
tkinter._fix模块替换为_tkinter模块中的私有函数,该函数不会对环境进行永久性更改。bpo-24257: 修复了使用伪造游标类型时sqlite3.Row构造函数中的段错误。
bpo-15836: assertRaises()、assertRaisesRegex()、assertWarns()和assertWarnsRegex()断言现在检查第一个参数的类型以防止可能的用户错误。基于Daniel Wagner-Hall的补丁。
bpo-9858: 为_io.RawIOBase添加缺失的方法存根。由Laura Rupprecht提供补丁。
bpo-22955: operator模块中的attrgetter、itemgetter和methodcaller对象现在支持pickle。为这些对象添加了可读和可评估的repr。基于Josh Rosenberg的补丁。
bpo-22107: tempfile.gettempdir() 和 tempfile.mkdtemp() 现在在 Windows 和 Unix 上都会在所选名称的目录已存在时重试。tempfile.mkstemp() 现在在 Windows 上如果父目录无效(不存在或是文件)时会提前失败。
bpo-23780: 改进了 os.path.join() 在单个参数时的错误信息。
bpo-6598: 提高了 email.utils.make_msgid() 中的时间精度和随机数范围,以增强消息 ID 的唯一性。
bpo-24091: 修复了 ElementTree 的 C 实现中各种角落情况的崩溃问题。
bpo-21931: msilib.FCICreate() 现在在参数错误的情况下会引发 TypeError 而不是带有虚假 FCI 错误号的 ValueError。由 Jeffrey Armstrong 提供补丁。
bpo-13866: 为 urllib.parse.urlencode 添加了 quote_via 参数。
bpo-20098: 为 email 添加了新的 mangle_from 策略选项,对于 compat32 默认为 True,但对于所有其他策略默认为 False。
bpo-24211: email 库现在支持 RFC 6532:它可以生成使用 utf-8 而不是编码单词的头部。
bpo-16314: 在 distutils 中添加了对 LZMA 压缩的支持。
bpo-21804: poplib 现在支持 RFC 6856 (UTF8)。
bpo-18682: 优化了内置标量类型的 pprint 函数。
bpo-22027: smtplib 现在支持 RFC 6531 (SMTPUTF8)。
bpo-23488: 随机生成器对象现在在 64 位系统上消耗的内存减少了一半。
bpo-1322: platform.dist() 和 platform.linux_distribution() 函数现在已被弃用。初始补丁由 Vajrasky Kok 提供。
bpo-22486: 添加了 math.gcd() 函数。fractions.gcd() 函数现在已被弃用。基于 Mark Dickinson 的补丁。
bpo-24064: Property() 的文档字符串现在可写。(由 Berker Peksag 提供补丁。)
bpo-22681: 添加了对 koi8_t 编码的支持。
bpo-22682: 添加了对 kz1048 编码的支持。
bpo-23796: BufferedReader 的 peek 和 read1 方法现在在对象已关闭时调用会引发 ValueError。由 John Hergenroeder 提供补丁。
bpo-21795: 当新的 decode_data 构造函数参数设置为 False 时,smtpd 现在支持 8BITMIME 扩展。
bpo-24155: 优化 heapq.heapify() 以提高在堆化大型列表时的缓存性能。
bpo-21800: imaplib 现在支持 RFC 5161(启用)、RFC 6855(utf8/国际化邮件)并自动将非 ASCII 用户名和密码编码为 UTF8。
bpo-20274: 当调用 _sqlite.Connection 时,如果传递了任何关键字参数,现在会报错。之前是默默地忽略它们。
bpo-20274: 从 _sqlite.Connection 上的三个 METH_VARARGS 方法中移除被忽略和错误的 "kwargs" 参数。
bpo-24134: assertRaises()、assertRaisesRegex()、assertWarns() 和 assertWarnsRegex() 检查现在当 callable 为 None 或在上下文管理器模式下传递了除 msg 外的关键字参数时,会发出弃用警告。
bpo-24018: 添加 collections.abc.Generator 抽象基类。由 Stefan Behnel 贡献。
bpo-23880: Tkinter 的 getint() 和 getdouble() 现在支持 Tcl_Obj。Tkinter 的 getdouble() 现在支持任何数字(特别是整数)。
bpo-22619: 在 traceback 模块中添加了对负限制的支持。基于 Dmitry Kazakov 的补丁。
bpo-24094: 修复了在 json.encode 中可能因为行为不良的字典子类而导致的崩溃。
bpo-9246: 在 POSIX 上,os.getcwd() 现在支持超过 1025 字节的路径。补丁由 William Orr 编写。
bpo-17445: 添加 difflib.diff_bytes() 以支持字节字符串的比较(修复了从 Python 2 开始的回归)。
bpo-23917: 当 ProcessPoolExecutor 不存在时,回退到顺序编译。补丁由 Claudiu Popa 提供。
bpo-23008: 修复了在 pydoc 中解析布尔值为 False 的属性时的错误。
修复 asyncio 问题 235:LifoQueue 和 PriorityQueue 的 put 没有增加未完成任务(这个错误是在 JoinableQueue 与 Queue 合并时引入的)。
bpo-23908: os 函数现在在 Windows 上拒绝含有嵌入空字符的路径,而不是默默地截断它们。
bpo-23728: 对于空数据,binascii.crc_hqx() 可能返回一个超出 0-0xffff 范围的整数。
bpo-23887: urllib.error.HTTPError 现在有了一个正确的 repr() 表示。由 Berker Peksag 提供补丁。
asyncio: 新增事件循环 API: set_task_factory() 和 get_task_factory()。
asyncio: async() 函数已弃用,推荐使用 ensure_future()。
bpo-24178: asyncio.Lock、Condition、Semaphore 和 BoundedSemaphore 支持新的 'async with' 语法。由 Yury Selivanov 贡献。
bpo-24179: 为 asyncio.StreamReader 支持 'async for'。由 Yury Selivanov 贡献。
bpo-24184: 将 AsyncIterator 和 AsyncIterable ABCs 添加到 collections.abc。由 Yury Selivanov 贡献。
bpo-22547: 为 inspect.BoundArguments 实现信息丰富的 __repr__。由 Yury Selivanov 贡献。
bpo-24190: 实现 inspect.BoundArgument.apply_defaults() 方法。由 Yury Selivanov 贡献。
bpo-20691: 向 inspect.Signature.from_callable() 和 inspect.signature() 添加 'follow_wrapped' 参数。由 Yury Selivanov 贡献。
bpo-24248: 弃用 inspect.Signature.from_function() 和 inspect.Signature.from_builtin()。
bpo-23898: 修复 inspect.classify_class_attrs() 以支持具有重载 __eq__ 和 __bool__ 的属性。由 Mike Bayer 提供补丁。
bpo-24298: 修复 inspect.signature() 以正确解包绑定方法的包装器。
IDLE¶
bpo-23184: 移除 idlelib 中未使用的名称和导入。初始由 Al Sweigart 提供补丁。
测试¶
文档¶
工具/示例¶
Python 3.5.0 alpha 4¶
发布日期: 2015-04-19
核心与内置函数¶
bpo-22980: 在 Linux、GNU/KFreeBSD 和 Hurd 下,C 扩展现在在扩展名中包括架构三元组,以便在同一工作树中轻松测试不同 ABI 的构建。在 OS X 下,扩展名现在包括 PEP 3149 风格的信息。
bpo-22631: 添加了 Linux 特定的套接字常量 CAN_RAW_FD_FRAMES。由 Joe Jevnik 提供补丁。
bpo-23726: 对于没有添加任何新字段的非 GC 类型的用户子类,不启用 GC。由 Eugene Toder 提供补丁。
bpo-23309: 如果在关闭时守护线程在被持有缓冲 I/O 对象的锁时被中止,并且主线程尝试使用相同的 I/O 对象(通常是 stdout 或 stderr),则避免死锁。相反,会发出致命错误。
bpo-22977: 修复了在 Wine 上格式化 Windows 错误消息的问题。由 Martin Panter 提供补丁。
bpo-23466: 在字节格式化中,%c、%o、%x 和 %X 现在对非整数输入引发 TypeError。
bpo-24044: 修复了在内存不足情况下 list.sort 中可能的空指针解引用。
bpo-21354: PyCFunction_New 函数再次由 python DLL 暴露。
库¶
bpo-23840: tokenize.open() 现在在错误时关闭临时二进制文件以修复资源警告。
bpo-16914: smtplib 中的新调试级别 2 在调试输出中添加了时间戳。
bpo-7159: urllib.request 现在支持在第一次 401 后自动发送认证凭据。此增强是 bpo-19494 增强的超集,并取代了该更改。
bpo-23703: 修复在901e4e52b20a中引入的urljoin()回归问题。由Demian Brecht提供补丁。
bpo-4254: 添加_curses.update_lines_cols()。由Arnon Yaari提供补丁。
bpo-19933: 为round提供ndigits的默认参数。由Vajrasky Kok提供补丁。
bpo-23193: 向tarfile.TarFile.extract和tarfile.TarFile.extractall添加numeric_owner参数。由Michael Vogt和Eric Smith提供补丁。
bpo-23342: 添加subprocess.run()函数,该函数返回CalledProcess实例,提供了比现有call*函数更一致的API。
bpo-21217: inspect.getsourcelines()现在尝试从代码对象计算开始和结束行,修复了当lambda函数用作装饰器参数时的问题。由Thomas Ballinger和Allison Kaptur提供补丁。
bpo-24521: 修复pickle模块中可能的整数溢出。
bpo-22931: 允许cookie值中包含'['和']'。
functools.partial的keywords属性现在总是一个字典。
bpo-23811: 向PyCompileError错误消息添加缺失的换行符。由Alex Shkop提供补丁。
bpo-21116: 避免在分配大于可用RAM 50%的多进程共享数组时耗尽内存。由Médéric Boquien提供补丁。
bpo-22982: 改进在可写文本文件的多位置查找时的BOM处理。
bpo-23464: 移除已弃用的asyncio JoinableQueue。
bpo-23529: 限制从GzipFile、BZ2File或LZMAFile读取时的解压数据大小。这防止了使用压缩炸弹(即解压后尺寸巨大的压缩负载)的拒绝服务攻击。由Martin Panter和Nikolaus Rath提供补丁。
bpo-21859: 添加了io.FileIO的Python实现。
bpo-23865: 多个模块中的close()方法现在在关闭时是幂等的且更健壮。如果需要释放多个资源,即使发生错误,所有资源也会被释放。
bpo-23400: 如果sem_open不可用,在Python 2和3上抛出相同的异常。由Davin Potts提供补丁。
bpo-10838: subprocess模块现在在其导出的名称列表中包括SubprocessError和TimeoutError,以供那些大胆使用
from subprocess import *的用户使用。bpo-23411: 将DefragResult、ParseResult、SplitResult、DefragResultBytes、ParseResultBytes和SplitResultBytes添加到urllib.parse.__all__中。由Martin Panter提供补丁。
bpo-23881: urllib.request.ftpwrapper构造函数现在会在FTP连接失败时关闭套接字,以修复ResourceWarning。
bpo-23853:
socket.socket.sendall()不再在每次数据成功发送时重置套接字超时。套接字超时现在是发送所有数据的最大总持续时间。bpo-22721: 包含可排序和不可排序元素的集合或多行pprint输出的字典的顺序不再依赖于集合或字典的迭代顺序。
bpo-15133: _tkinter.tkapp.getboolean()现在支持Tcl_Obj并始终返回bool。tkinter.BooleanVar现在验证输入值(接受bool、int、str和Tcl_Obj)。tkinter.BooleanVar.get()现在始终返回bool。
bpo-10590: xml.sax.parseString()现在支持字符串参数。
bpo-23338: 修复了在Cygwin上格式化ctypes错误消息的问题。由Makoto Kato提供补丁。
bpo-15582: inspect.getdoc()现在遵循继承链。
bpo-2175: SAX解析器现在支持InputSource对象的字符流。
bpo-16840: Tkinter现在支持Tcl 8.4中添加的64位整数和Tcl 8.5中添加的任意精度整数。
bpo-23834: 修复socket.sendto(),使用C Py_ssize_t类型来存储sendto()的结果,而不是C int类型。
bpo-23618:
socket.socket.connect()现在等待连接完成,而不是在连接被信号中断时抛出InterruptedError,前提是信号处理程序没有抛出异常且套接字是阻塞的或具有超时。对于非阻塞套接字,socket.socket.connect()仍然会抛出InterruptedError。bpo-21526: Tkinter 现在支持 Tcl 8.5 中的新布尔类型。
bpo-23836: 修复 faulthandler 模块以处理对其信号处理程序的可重入调用。
bpo-23838: linecache 现在可以在 MemoryError 时清除缓存并返回空结果。
bpo-10395: 添加了 os.path.commonpath()。在 posixpath 和 ntpath 中实现。基于 Rafik Draoui 的补丁。
bpo-23611: 现在支持使用 pickle 协议 < 4 序列化更多“可查找”对象(如未绑定方法或嵌套类)。
bpo-13583: sqlite3.Row 现在支持切片索引。
bpo-18473: 修复了 2to3 和 3to2 兼容的 pickle 映射。修复了模糊的反向映射。添加了许多新映射。导入映射不再应用于已使用全名映射的模块。
bpo-23485: select.select() 现在在被信号中断时会自动重试,并重新计算超时,除非信号处理程序引发异常。此变更是 PEP 475 的一部分。
bpo-23752: 当从现有文件描述符构建时,io.FileIO() 现在只调用 fstat() 一次。之前 fstat() 被调用了两次,这是不必要的。
bpo-23704: collections.deque() 对象现在支持 __add__, __mul__, 和 __imul__()。
bpo-23171: csv.Writer.writerow() 现在支持任意可迭代对象。
bpo-23745: 新的电子邮件头解析器现在可以无错误地处理重复的 MIME 参数名称,类似于 get_param 的行为。
bpo-22117: 修复 os.utime(),现在它将时间戳向负无穷(-inf)舍入,而不是向零舍入。
bpo-23310: 修复 MagicMock 的初始化器以与 __methods__ 一起工作,就像 configure_mock() 一样。由 Kasia Jachim 提供的补丁。
构建¶
测试¶
工具/示例¶
bpo-18128: pygettext 现在在 POT-Creation-Date 头中使用标准的 +NNNN 格式。
bpo-23935: Argument Clinic 现在对接受字节、字节数组和缓冲区的格式单元的理解与文档和实现一致。
bpo-23944: Argument Clinic 现在在第78列换行长 impl 原型。
bpo-20586: Argument Clinic 现在确保没有文档字符串的函数也有签名。
bpo-23492: Argument Clinic 现在尽可能使用 PyArg_Parse 而不是 PyArg_ParseTuple 生成参数解析代码。
bpo-23500: Argument Clinic 现在更智能地生成 methoddef 宏的“#ifndef”(空)定义:即使 Argument Clinic 多次处理相同的符号,它也只会生成一次,并且是在所有处理完成后而不是在第一次使用后立即发出。
C API¶
bpo-23998: PyImport_ReInitLock() 现在检查锁分配错误
Python 3.5.0 alpha 3¶
发布日期: 2015-03-28
核心与内置函数¶
bpo-23573: 提高了字符串搜索操作(str.find、str.index、str.count、in 操作符、str.split、str.partition)与不同类型参数(UCS1、UCS2、UCS4)的性能。
bpo-23753: Python 不再支持没有 stat() 或 fstat() 的平台,这些函数现在总是必需的。
bpo-23681: -b 选项现在影响 bytes 与 int 的比较。
bpo-23632: Memoryviews 现在允许元组索引(包括多维 memoryviews)。
bpo-23192: 修复了生成器 lambda。由 Bruno Cauet 提供补丁。
bpo-23629: 修复了可变大小对象的默认 __sizeof__ 实现。
库¶
bpo-14260: 正则表达式模式对象的 groupindex 属性现在是非可修改的映射。
bpo-23792: 当 pydoc 分页器处于活动状态时忽略 KeyboardInterrupt。这模拟了标准 unix 分页器的行为,并防止 pipepager 在分页器本身仍在运行时关闭。
bpo-23775: pprint() 现在输出的 OrderedDict 表示与 repr() 相同。
bpo-23765: 移除了 ctypes 中的 IsBadStringPtr 调用。
bpo-22364: 使用正则表达式提示改进了部分 re 错误消息。
bpo-23742: ntpath.expandvars() 不再丢失不平衡的单引号。
bpo-21717: zipfile.ZipFile.open 函数现在支持 'x'(独占创建)模式。
bpo-21802: 现在,即使写入器关闭失败,BufferedRWPair.close() 中的读取器也会被关闭。
bpo-23622: 现在,由
'\'和 ASCII 字母组成的正则表达式中的未知转义将引发弃用警告,并将在 Python 3.6 中禁止使用。bpo-23671: string.Template 现在允许将 "self" 参数指定为关键字参数。string.Formatter 现在允许将 "self" 和 "format_string" 参数指定为关键字参数。
bpo-23502: pprint 模块现在支持映射代理。
bpo-17530: pprint 现在会换行显示长的 bytes 对象和 bytearrays。
bpo-22687: 修复了 textwrap 中分割单词的一些极端情况。消除了分割长单词时的二次复杂度。
bpo-4727: copy 模块现在使用 pickle 协议 4(PEP 3154),并支持复制其 __new__ 方法接受仅关键字参数的类实例。
bpo-23491: 添加了一个 zipapp 模块以支持创建 Python 代码的可执行 zip 文件归档。为这些归档在 Windows 上注册了 ".pyz" 和 ".pyzw" 扩展名(PEP 441)。
bpo-23657: 避免在 zipapp 中显式检查 str,增加了对 pathlib.Path 对象作为参数的支持。
bpo-23688: 添加了对任意字节类对象的支持,并避免了在 gzip.GzipFile.write() 中不必要地复制 memoryview。原始由 Wolfgang Maier 提供补丁。
bpo-23252: 添加了对将 ZIP 文件写入不可寻址流的支持。
bpo-23647: 增加了 imaplib 的 MAXLINE 以适应现代邮箱大小。
bpo-23539: 如果 body 为 None,http.client.HTTPConnection.request 现在会为 PUT、POST 和 PATCH 头设置 Content-Length 为 0,以避免某些 web 服务器返回 411 错误。
bpo-22351: nntplib.NNTP 构造函数不再保持连接和 socket 打开直到垃圾回收器清理它们。补丁由 Martin Panter 提供。
bpo-23704: collections.deque() 对象现在支持 index()、insert() 和 copy() 方法。这使得 deque 可以注册为 MutableSequence 并且提高了它们替代列表的能力。
bpo-23715:
signal.sigwaitinfo()和signal.sigtimedwait()现在当被不在 sigset 参数中的信号中断时,如果信号处理器没有引发异常,会重试。signal.sigtimedwait() 在重试时使用单调时钟重新计算超时。bpo-23001: 在 mmap、ossaudiodev、socket、ssl 和 codecs 模块中,一些之前只接受只读 bytes-like 对象的函数现在也接受可写的 bytes-like 对象。
bpo-23646: 如果 time.sleep() 被信号中断,现在会使用重新计算的延迟重试睡眠,除非信号处理器引发异常(PEP 475)。
bpo-23136: _strptime 现在统一处理第 0 周的所有天,包括上一年的 12 月 30 日。基于 Jim Carroll 的补丁。
bpo-23700: NamedTemporaryFile 的迭代器现在保持对 NamedTemporaryFile 实例的引用。补丁由 Bohuslav Kabrda 提供。
bpo-22903: unittest.loader 在导入测试模块失败时创建的假测试用例现在可以 pickle。
bpo-22181: 在 Linux 上,os.urandom() 现在如果可用会使用新的 getrandom() 系统调用,该系统调用在 Linux 内核 3.17 中引入。它更可靠也更安全,因为它避免了文件描述符的需要,并等待内核有足够的熵。
bpo-2211: 更新了http.cookies.Morsel类的实现。现在直接设置属性key、value和coded_value已被弃用。update()和setdefault()现在会转换并检查键。比较相等性现在会考虑属性key、value和coded_value。copy()现在返回一个Morsel,而不是dict。repr()现在包含所有属性。优化了键的检查和值的引用。添加了新的测试。原始由Demian Brecht提供补丁。
bpo-18983: 允许在timeit中选择输出单位。由Julian Gindi提供补丁。
bpo-23631: 修复traceback.format_list当traceback被修改时的问题。
bpo-23568: 向MagicMock()对象添加rdivmod支持。由Håkan Lövdahl提供补丁。
bpo-2052: 向HtmlDiff.make_file()添加charset参数。
bpo-23668: 在Windows上支持os.truncate和os.ftruncate。
bpo-23138: 修复了在cookiejar中解析缺少键或值的cookie的问题。由Demian Brecht提供补丁。
bpo-23051: multiprocessing.Pool方法imap()和imap_unordered()现在可以处理迭代器引发的异常。由Alon Diamant和Davin Potts提供补丁。
bpo-23581: 向MagicMock添加matmul支持。由Håkan Lövdahl提供补丁。
bpo-23566: faulthandler的enable()、register()、dump_traceback()和dump_traceback_later()函数现在接受文件描述符。由Wei Wu提供补丁。
bpo-22928: 在http.client中禁用了HTTP头注入。原始由Demian Brecht提供补丁。
bpo-23615: 模块bz2、tarfile和tokenize现在可以通过imp.reload()重新加载。由Thomas Kluyver提供补丁。
bpo-23605: os.walk()现在调用os.scandir()而不是os.listdir()。使用os.scandir()减少了对os.stat()的调用次数。初始补丁由Ben Hoyt编写。
构建¶
bpo-23585: make patchcheck将确保解释器被构建。
测试¶
工具/示例¶
bpo-22826: Tools/freeze/bkfile.py 中的 open() 函数结果现在与常规文件更兼容(特别是现在支持上下文管理协议)。
Python 3.5.0 alpha 2¶
发布日期: 2015-03-09
核心与内置函数¶
bpo-23571: PyObject_Call() 和 PyCFunction_Call() 现在会在函数返回结果并引发异常时抛出 SystemError。SystemError 会被链接到前一个异常。
库¶
bpo-22524: 新增 os.scandir() 函数,属于 PEP 471: "os.scandir() 函数 -- 一个更好更快的目录迭代器"。补丁由 Ben Hoyt 编写。
bpo-23103: 减少了 IPv4Address 和 IPv6Address 的内存消耗。
bpo-21793: BaseHTTPRequestHandler 再次将响应代码记录为数字,而不是字符串化的枚举。补丁由 Demian Brecht 提供。
bpo-23476: 在 ssl 模块中,当可用时,在证书存储上启用 OpenSSL 的 X509_V_FLAG_TRUSTED_FIRST 标志。
bpo-23576: 当 SSL 层已到达 EOF 但底层连接尚未关闭时,避免在 SSL 读取中停滞。
bpo-23504: 在 types 模块中添加了 __all__。
bpo-23563: 优化了 urllib.parse 中的实用函数。
bpo-7830: 扁平化嵌套的 functools.partial。
bpo-20204: 为 _tkinter 类添加了 __module__ 属性。
bpo-19980: 改进了对非识别字符串的 help()。help('') 现在显示关于 str 的帮助。help('help') 现在显示关于 help() 的帮助。原始由 Mark Lawrence 提供补丁。
bpo-23521: 更正了 timedelta 除法的纯 Python 实现。对于某些浮点数,消除了
timedelta * float中的 OverflowError;更正了 timedelta 真除法中的舍入。bpo-21619: 如果管道已断开,Popen 对象在 with 语句退出后不再留下僵尸进程。由 Martin Panter 提供补丁。
bpo-22936: 使得可以在 traceback 模块和 unittest 中显示跟踪回溯中的局部变量。
bpo-15955: 在 bz2.decompress() 中添加了一个选项以限制输出大小。由 Nikolaus Rath 提供补丁。
bpo-6639: 关闭窗口后,模块级的turtle函数不再引发TclError。
bpo-814253: 现在,在正则表达式的后向断言中,组引用和条件组引用可以正常工作。(另见:bpo-9179)
bpo-23215: 使用自定义错误处理程序的多字节编解码器在忽略错误时消耗了过多内存并引发了SystemError或MemoryError。原始由Aleksi Torhamo提供补丁。
bpo-5700: io.FileIO()在关闭文件后调用了flush()。如果closefd=False,则在close()中不会调用flush()。
bpo-23374: 修复了当标准输出编码与文件系统编码不同(例如在Mac OS上)时,pydoc处理非ASCII文件失败的问题。
bpo-23481: 从SSL模块的默认密码列表中移除RC4。
bpo-21548: 修复了pydoc.synopsis()和pydoc.apropos()在模块文档字符串为空时的行为。
bpo-22885: 修复了dbm.dumb模块中的任意代码执行漏洞。原始由Claudiu Popa提供补丁。
bpo-23239: ssl.match_hostname()现在支持IP地址的匹配。
bpo-23146: 修复了pathlib中处理带有正斜杠的绝对Windows路径时的错误。
bpo-23096: 现在,协议0下的浮点数的pickle表示在Python和C实现中是相同的。
bpo-19105: pprint现在更有效地利用右侧的自由空间。
bpo-14910: 向argparse.ArgumentParser添加了allow_abbrev参数。由Jonathan Paugh、Steven Bethard、paul j3和Daniel Eriksson提供补丁。
bpo-21717: tarfile.open()现在支持'x'(独占创建)模式。
bpo-23344: marshal.dumps()现在平均快了20-25%。
bpo-20416: 使用协议3和4的marshal.dumps()现在平均快了40-50%。
bpo-23421: 修复了tarfile CLI中的压缩问题。由wdv4758h提供补丁。
bpo-23367: 修复了unicodedata模块中可能的溢出问题。
bpo-23361: 修复了Windows子进程创建代码中可能的溢出问题。
logging.handlers.QueueListener 现在接受一个 respect_handler_level 关键字参数,如果设置为 True,将会在考虑处理器级别的情况下将消息传递给处理器。
bpo-19705: turtledemo 现在有一个视觉排序算法演示。原始补丁来自 Jason Yeo。
bpo-23801: 修复了 cgi.FieldStorage 不总是忽略多部分主体的整个前导部分的问题。
构建¶
C API¶
bpo-20204: 现在对于没有 __module__ 属性的内置类型会发出弃用警告。
Windows¶
Python 3.5.0 alpha 1¶
发布日期: 2015-02-08
核心与内置函数¶
bpo-23285: PEP 475 - EINTR 处理。
bpo-22735: 修复了许多涉及自定义 mro() 实现的边缘情况(包括崩溃)。
bpo-22896: 避免使用 PyObject_AsCharBuffer(), PyObject_AsReadBuffer() 和 PyObject_AsWriteBuffer()。
bpo-22986: 在某些情况下允许更改对象的 __class__ 在动态类型和静态类型之间。
bpo-15859: PyUnicode_EncodeFSDefault(), PyUnicode_EncodeMBCS() 和 PyUnicode_EncodeCodePage() 现在如果对象不是 Unicode 对象则会引发异常。对于 PyUnicode_EncodeFSDefault(),在非 Windows 平台上已经是这种情况。补丁由 Campbell Barton 编写。
bpo-21408: 默认的 __ne__() 现在如果 __eq__() 返回 NotImplemented 则返回 NotImplemented。原始由 Martin Panter 提供补丁。
bpo-23321: 修复了当错误处理程序返回的替换字符串比畸形输入数据长时 str.decode() 中的崩溃。
bpo-22286: "backslashreplace" 错误处理程序现在可以用于解码和转换。
bpo-23253: 在Windows上延迟加载ShellExecute[AW]以减少os.startfile的启动开销。
bpo-22038: pyatomic.h现在使用stdatomic.h或GCC内置函数进行原子内存访问(如果可用)。补丁由Vitor de Lima和Gustavo Temple编写。
bpo-20284: 为bytes和bytearray添加了%-插值(即printf)格式化。
bpo-23048: 修复了在pdb中跳出无限while循环的问题。
bpo-20335: bytes构造函数现在在编码或错误与非字符串参数一起指定时引发TypeError。基于Renaud Blanch的补丁。
bpo-22834: 如果当前工作目录最终被设置为不存在的目录,则导入将不再引发FileNotFoundError。
bpo-22869: 将解释器启动和关闭代码移动到一个新的专用pylifecycle.c模块中。
bpo-22847: 提高方法缓存的效率。
bpo-22335: 修复在32位平台上尝试将bytearray扩大到0x7fffffff字节时的崩溃问题。
bpo-22653: 修复在调试模式下进行可重入字典插入时的断言失败。
bpo-22643: 修复Unicode大小写操作(大写、小写、标题、交换大小写、casefold)中的整数溢出问题。
bpo-17636: 现在支持涉及相对导入的循环导入。
bpo-22604: 修复在调试模式下将复数除以(nan+0j)时的断言错误。
bpo-21052: 当sys.path_hooks或sys.meta_path设置为None时,不引发ImportWarning。
bpo-16518: 在错误消息中使用'需要类似字节的对象',而不是之前使用的更为晦涩的"'x'不支持缓冲区协议"。
bpo-22470: 修复了"backslashreplace"、"xmlcharrefreplace"和"surrogatepass"错误处理程序中的整数溢出问题。
bpo-22540: 在第二个参数具有元类
type的常见情况下,加速PyObject_IsInstance和``PyObject_IsSubclass``。bpo-18711: 添加了一个新的
PyErr_FormatV函数,类似于PyErr_Format,但接受一个``va_list``参数。bpo-22520: 修复生成 unicode 对象 repr 时的溢出检查。
bpo-22519: 修复 PyBytes_Repr 中的溢出检查。
bpo-22518: 修复 latin-1 编码中的整数溢出问题。
bpo-16324: MIMEText 的 _charset 参数现在也接受 email.charset.Charset 实例。初始补丁由 Claude Paroz 提供。
bpo-1764286: 修复 inspect.getsource() 以支持装饰函数。由 Claudiu Popa 提供补丁。
bpo-18554: os.__all__ 包括 posix 函数。
bpo-21391: 在 shutil 模块中使用 os.path.abspath。
bpo-11471: 避免在 if 块的末尾生成 JUMP_FORWARD 指令,如果没有 else 子句。原始由 Eugene Toder 提供补丁。
bpo-22215: 现在当 str 或 bytes 参数包含不允许的空字符或字节时,会引发 ValueError 而不是 TypeError。
bpo-22258: 修复 Illumos 上的内部函数 set_inheritable()。该平台暴露了函数
ioctl(FIOCLEX),但调用它会失败,errno 是 ENOTTY: "Inappropriate ioctl for device"。set_inheritable() 现在回退到较慢的fcntl()(F_GETFD然后F_SETFD)。bpo-21389: 在绑定方法的 repr 中显示底层函数的 __qualname__。
bpo-22206: 使用 pthread 时,PyThread_create_key() 现在在整数溢出时将 errno 设置为 ENOMEM 并返回 -1(错误)。
bpo-20184: 为 30 个内置函数添加了基于 Argument Clinic 的签名内省。
bpo-22116: C 函数和方法('builtin_function_or_method' 类型)现在可以被弱引用。由 Wei Wu 提供补丁。
bpo-22077: 通过添加 'or slices' 改善 bytearrays、bytes、lists 和 tuples 的索引错误消息。为 bytearrays 添加了 ', not <typename>'。原始由 Claudiu Popa 提供补丁。
bpo-20179: 将 Argument Clinic 应用于 bytes 和 bytearray。由 Tal Einat 提供补丁。
bpo-22082: 清除 slotdefs 中的内部字符串。
升级 Unicode 数据库到 7.0.0 版本。
bpo-21897: 修复当 frame.clear() 被调用时带有闭包变量的 f_locals 属性的崩溃问题。
bpo-21205: 为生成器添加一个新的
__qualname__属性,即限定名称,并在生成器的表示中使用它(repr(gen))。生成器的默认名称(__name__属性)现在从函数中获取,而不是从代码中获取。使用gen.gi_code.co_name获取代码的名称。bpo-21669: 借助 SyntaxError.__init__ 中的启发式方法,解析器现在尝试在“exec”和“print”被用作语句时生成更有意义(或至少更搜索引擎友好)的错误消息。
bpo-21642: 在条件 if-else 表达式中,允许整数与
else关键字之间没有空格(例如True if 42else False)的写法作为有效语法。bpo-21523: 修复了编译器中一些操作码堆栈效应的过度悲观计算。这也修复了当编译包含大量“and”和“or”运算符的代码时明显的二次编译时间问题。
bpo-21418: 修复了在没有参数且没有当前帧(例如嵌入式 Python)时调用内置函数 super() 时的崩溃问题。
bpo-21425: 修复了交互式解释器中标准流的刷新问题。
bpo-21435: 在极少数情况下,对循环垃圾中的对象运行终结器时,由于内部迭代逻辑的微妙缺陷,可能会发生错误的指针解引用。
bpo-21377: PyBytes_Concat() 现在尝试在第一个参数的引用计数为1时原地连接。由 Nikolaus Rath 提供补丁。
bpo-20355: -W 命令行选项现在比 PYTHONWARNINGS 环境变量具有更高的优先级。由 Arfrever 提供补丁。
bpo-21274: 在 Python/pythonrun.c 中为 GNU/Hurd 定义 PATH_MAX。
bpo-20904: 支持在 m68k 上设置 FPU 精度。
bpo-21209: 修复使用 yield from 语法向自定义生成器对象发送元组的问题。
bpo-21193: 当 b 为负数时,pow(a, b, c) 现在会引发 ValueError 而不是 TypeError。补丁由 Josh Rosenberg 提供。
bpo-21176: PEP 465: 为矩阵乘法添加'@'运算符。
bpo-21134: 修复在未初始化的UnicodeEncodeError、UnicodeDecodeError或UnicodeTranslateError对象上调用str时出现的段错误。
bpo-19537: 修复m68k下PyUnicode_DATA()的对齐问题。由Andreas Schwab提供补丁。
bpo-20929: 添加类型转换以避免负数移位。
bpo-20731: 即使以文本模式打开,也能正确定位源代码文件中的位置。由Serhiy Storchaka提供补丁。
bpo-20637: 键共享现在也适用于子类的实例字典。由Peter Ingebretson提供补丁。
bpo-8297: 模块中缺失的属性现在在错误文本中包含模块名称。原始由ysj.ray提供补丁。
bpo-19995: %c、%o、%x和%X现在对非整数输入引发TypeError。
bpo-19655: ASDL解析器 - 用于构建过程中生成用于在C中管理Python AST的代码 - 被重写。新解析器是自包含的,不需要携带spark.py解析器生成器库;spark.py已从源代码库中移除。
bpo-12546: 允许在使用str、int、float和complex的__format__方法时使用
\x00作为填充字符。bpo-20480: 添加ipaddress.reverse_pointer。由Leon Weber提供补丁。
bpo-13598: 修改string.Formatter以支持替换字段的自动编号。现在在这方面它与str.format()的行为相匹配。由Phil Elson和Ramchandra Apte提供补丁。
bpo-8931: 使类型'c'的替代格式('#')引发异常。在3.5之前的版本中,'#'与'c'一起使用没有效果。现在指定它是一个错误。由Torsten Landschoff提供补丁。
bpo-23165: 在_Py_char2wchar函数中分配内存之前执行溢出检查。
库¶
bpo-23399: pyvenv尽可能创建相对符号链接。
bpo-20289: cgi.FieldStorage()现在支持上下文管理协议。
bpo-13128: 当debuglevel > 0时,打印CONNECT请求的响应头。由Demian Brecht提供补丁。
bpo-15381: 优化了 io.BytesIO 以减少分配和复制操作。
bpo-22818: 现在,对可能匹配空字符串的模式进行拆分时会发出警告。只能匹配空字符串的模式现已被拒绝。
bpo-23099: 现在拒绝关闭带有导出缓冲区的 io.BytesIO,以防止损坏导出的缓冲区。
bpo-23326: 移除了 __ne__ 实现。由于在 bpo-21408 中修复了默认的 __ne__ 实现,它们现在是多余的。
bpo-23363: 修复了 itertools.permutations 中可能的溢出问题。
bpo-23364: 修复了 itertools.product 中可能的溢出问题。
bpo-23366: 修复了 itertools.combinations 中可能的整数溢出问题。
bpo-23369: 修复了 _json.encode_basestring_ascii 中可能的整数溢出问题。
bpo-23353: 修复了 PyEval_EvalFrameEx() 中生成器的异常处理。在入口处,即使 PyEval_EvalFrameEx() 以 throwflag=0 调用,也会保存或交换异常状态。在退出时,异常状态现在总是被恢复或交换,不仅当 why 是 WHY_YIELD 或 WHY_RETURN 时。补丁由 Antoine Pitrou 共同编写。
bpo-14099: 恢复了对可定位但不可寻址流的 ZIP 文件写入支持。
bpo-14099: 现在,写入 ZipFile 和读取多个 ZipExtFiles 是线程安全的。
bpo-19361: JSON 解码器现在引发 JSONDecodeError 而不是 ValueError。
bpo-18518: timeit 现在拒绝不能在函数或循环外编译的语句(例如 "return" 或 "break")。
bpo-23094: 修复了 pickle 的 Python 实现中带有帧的 readline 问题。
bpo-23268: 修复了 ipaddress 类比较中的错误。
bpo-21408: 移除了不正确的 __ne__() 实现,这些实现在 __eq__() 返回 NotImplemented 时没有返回 NotImplemented。现在默认的 __ne__() 工作正常。
bpo-19996:
email.feedparser.FeedParser现在处理(格式错误的)没有键的头部,而不是假设主体已经开始。bpo-20188: 在ssl模块中支持应用层协议协商(ALPN)。
bpo-23133: ipaddress对象的pickle现在生成更紧凑且可移植的表示。
bpo-23248: 从最新的OpenSSL git master更新ssl错误代码。
bpo-23266: 当存在许多非连续地址时,ipaddress.collapse_addresses()的实现速度大幅提升。
bpo-23098: os模块现在支持64位的dev_t。
bpo-21817: 当提交给ProcessPoolExecutor的任务中抛出异常时,现在会在父进程中显示远程回溯。由Claudiu Popa提供补丁。
bpo-15955: 添加一个选项以限制解压LZMA数据时的输出大小。由Nikolaus Rath和Martin Panter提供补丁。
bpo-23250: 在http.cookies模块中,将"HttpOnly"和"Secure"按照标准中的写法大写。
bpo-23063: 在distutils的check命令中,修复带有code或code-block指令的reST的解析。
bpo-23209: 如果选择器已关闭,selectors.BaseSelector.get_key()现在会抛出RuntimeError。并且selectors.BaseSelector.close()现在会清除其对选择器映射的内部引用以打破引用循环。初始补丁由Martin Richard编写。(另见:bpo-23225)
bpo-17911: 提供一种方式来为PEP-302模块的linecache播种,而无需实际加载代码。
bpo-17911: 为traceback提供一个新的对象API,包括能够不在回溯实际渲染之前查找行,且不保留原始对象的任何痕迹。
bpo-19777: 在Path对象上提供一个home()类方法。由Victor Salgado和Mayank Tripathi贡献。
bpo-23206: 使
json.dumps(..., ensure_ascii=False)与默认情况ensure_ascii=True一样快。由Naoki Inada提供补丁。bpo-23185: 添加math.inf和math.nan常量。
bpo-23186: 添加 ssl.SSLObject.shared_ciphers() 和 ssl.SSLSocket.shared_ciphers() 以获取客户端在握手时发送的加密套件列表。
bpo-23143: 移除对早于0.9.8版本的OpenSSL的兼容性支持。
bpo-23132: 改进由functool.total_ordering创建的比较方法的性能和内省支持。
bpo-19776: 在Path对象上添加expanduser()方法。
bpo-23112: 修复SimpleHTTPServer在重定向添加尾部斜杠时正确携带查询字符串和片段的问题。
bpo-21793: 添加了http.HTTPStatus枚举(例如HTTPStatus.OK, HTTPStatus.NOT_FOUND)。补丁由Demian Brecht提供。
bpo-23093: 在io模块中,允许更多操作在已分离的流上工作。
bpo-23111: 在ftplib中,使ssl.PROTOCOL_SSLv23成为默认协议版本。
bpo-22585: 在OpenBSD 5.6及更新版本上,os.urandom()现在调用getentropy(),而不是读取/dev/urandom,来获取伪随机字节。
bpo-19104: pprint现在为包装的字符串生成可评估的输出。
bpo-23071: 向codecs.__all__添加了缺失的名称。由Martin Panter提供补丁。
bpo-22783: 如果可能,Pickling现在使用NEWOBJ操作码而不是NEWOBJ_EX操作码。
bpo-15513: 为pickle类添加了__sizeof__实现。
bpo-19858: pickletools.optimize()现在能够识别MEMOIZE操作码,可以生成更紧凑的结果,并且在输入数据包含与PUT或BINPUT操作码一起的MEMOIZE操作码时不再生成无效输出。
bpo-22095: 修复了HTTPConnection.set_tunnel的默认端口问题。主机头中的端口值被设置为"None"。由Demian Brecht提供补丁。
bpo-23016: 当程序使用pythonw.exe运行时,警告不再产生AttributeError。
bpo-21775: shutil.copytree(): 修复在复制到VFAT时崩溃的问题。异常处理程序假设OSError对象总是有'winerror'属性。但事实并非如此,因此在Linux(以及任何其他非Windows操作系统)上运行时,异常处理程序本身会引发AttributeError。由Greg Ward提供补丁。
bpo-1218234: 修复inspect.getsource()以加载重新加载模块的更新源代码。初始由Berker Peksag提供补丁。
bpo-21740: 在doctest中支持包装的可调用对象。由Claudiu Popa提供补丁。
bpo-23009: 确保selectors.EpollSelector.select()在没有FD注册时也能工作。
bpo-22959: 在http.client.HTTPSConnection的构造函数中,优先使用上下文的check_hostname属性而不是 check_hostname 参数。
bpo-22696: 添加函数
sys.is_finalizing()以了解解释器关闭状态。bpo-16043: 为xmlrpclib.gzip_decode返回的数据量添加默认限制。这解决了 CVE 2013-1753。
bpo-14099: ZipFile.open()不再重新打开底层文件。ZipFile.open()返回的对象现在可以独立于ZipFile操作,即使ZipFile是通过将类似文件的对象作为构造函数的第一个参数传递而创建的。
bpo-22966: 修复当pyc_compile被要求编译包含源文件名中多个点的源文件时,__pycache__ pyc文件名冲突的问题。
bpo-21971: 更新turtledemo文档并将模块添加到索引中。
bpo-21032: 修复如果HTTPConnection.getresponse()失败时的套接字泄漏问题。原始由Martin Panter提供补丁。
bpo-22407: 弃用re.LOCALE标志与str模式或re.ASCII一起使用。它从未工作过。
bpo-22902: 在Linux上现在使用“ip”命令在uuid.getnode()中确定MAC地址。由Bruno Cauet提供补丁。
bpo-22960: 向xmlrpclib.ServerProxy构造函数添加上下文参数。
bpo-22389: 添加contextlib.redirect_stderr()。
bpo-21356: 使 ssl.RAND_egd() 成为可选项以支持 LibreSSL。该函数的可用性在编译期间进行检查。补丁由 Bernard Spil 编写。
bpo-22915: SAX 解析器现在支持通过文件描述符或字节路径打开的文件。
bpo-22609: collections 模块中的映射类的构造函数和更新方法现在接受 self 关键字参数。
bpo-22940: 添加 readline.append_history_file。
bpo-19676: 添加了 "namereplace" 错误处理程序。
bpo-22788: 向 logging.handlers.HTTPHandler 添加 context 参数。
bpo-22921: 允许 SSLContext 接受 hostname 参数,即使 OpenSSL 不支持 SNI。
bpo-22894: TestCase.subTest() 在 failfast 模式下会导致测试套件停止,即使没有失败。
bpo-22796: HTTP cookie 解析现在更加严格,以防范潜在的注入攻击。
bpo-22370: pathlib 中的 Windows 检测现在更加健壮。
bpo-22841: 在 asyncio add_signal_handler() 中拒绝协程。由 Ludovic.Gasc 提供补丁。
bpo-19494: 添加了 urllib.request.HTTPBasicPriorAuthHandler。由 Matej Cepl 提供补丁。
bpo-22578: 向 re.error 类添加了属性。
bpo-22849: 修复了 io.TextIOWrapper 构造函数中可能的双重释放问题。
bpo-12728: 现在在不区分大小写的正则表达式中匹配具有相同大写但不同小写的不同 Unicode 字符。
bpo-22821: 修复了在 64 位大端平台上使用整数参数的 fcntl()。
bpo-21650: 向
json.toolCLI 添加了一个--sort-keys选项。bpo-22824: 更新了 reprlib 中集合的输出格式以使用集合字面量。补丁由 Berker Peksag 贡献。
bpo-22824: 更新了 reprlib 中数组的输出格式,以显示没有不必要空列表的空数组。建议由 Serhiy Storchaka 提出。
bpo-22406: 修复了错误移植到 3.x 的 uu_codec 编解码器。基于 Martin Panter 的补丁。
bpo-17293: uuid.getnode() 现在在 AIX 上使用 netstat 确定 MAC 地址。基于 Aivars Kalvāns 的补丁。
bpo-22769: 修复了 ttk.Treeview.tag_has() 在没有参数调用时的问题。
bpo-22417: 在 httplib 中默认验证证书 (PEP 476)。
bpo-22775: 修复了使用协议 2 及以上版本对 http.cookies.SimpleCookie 的反序列化。补丁由 Tim Graham 提供。
bpo-22776: 在 SysLogHandler.emit() 中将排除的代码移至 try 块的作用域内。
bpo-22665: 将缺失的 get_terminal_size 和 SameFileError 添加到 shutil.__all__。
bpo-6623: 移除了 ftplib 模块中已弃用的 Netrc 类。由 Matt Chaput 提供补丁。
bpo-17381: 修复了正则表达式中不区分大小写范围的处理。
bpo-22410: re 模块中的模块级函数现在会缓存考虑到区域的依赖于区域设置的编译后的正则表达式。
bpo-22759: pathlib.Path() 上的查询方法 (exists(), is_dir() 等) 现在在底层 stat 调用引发 NotADirectoryError 时返回 False。
bpo-8876: distutils 现在在硬链接不起作用时回退到复制文件。这允许使用如 VirtualBox 共享文件夹这样的特殊文件系统。
bpo-22217: 实现了 zipfile 模块中类的 reprs。
bpo-22457: 在发现的 start_dir 中尊重 load_tests。
bpo-18216: gettext 现在在 .mo 文件有不受支持的主版本号时引发错误。由 Aaron Hill 提供补丁。
bpo-13918: 提供了一个 locale.delocalize() 函数,可以从表示数字的字符串中移除区域特定的数字格式,而不将其转换为特定类型。由 Cédric Krier 提供补丁。
bpo-22676: 使没有 __module__ 属性的全局对象的序列化不那么慢。
bpo-18853: 修复了 shlex.__nain__ 中的 ResourceWarning。
bpo-9351: 使用 set_defaults 在 argparse 子解析器上设置的默认值不再在父解析器上也设置时被忽略。
bpo-7559: unittest 测试加载时的 ImportErrors 现在会在导入失败后作为导入异常报告,而不是属性错误。
bpo-19746: 使得无需执行测试套件即可检查 unittest 发现过程中的错误。
TestLoader的新errors属性暴露了在发现过程中遇到的这些非致命错误。bpo-21991: 使 email.headerregistry 的头 'params' 属性变为只读(MappingProxyType)。之前字典是可修改的,但每次访问属性时都会创建一个新的字典。
bpo-22638: 现在整个标准库中 SSLv3 已被禁用。仍然可以通过手动实例化 SSLContext 来启用它。
bpo-22641: 在 asyncio 中,客户端连接的默认 SSL 上下文现在使用 ssl.create_default_context() 创建,以提高安全性。
bpo-17401: 在 io.FileIO 的 repr 中包含 closefd。
bpo-21338: 为 compileall 添加静默模式。compile_{dir, file, path} 函数的 quiet 参数现在具有多级值。此外,CLI 的 -q 选项现在也具有多级值。由 Thomas Kluyver 提供补丁。
bpo-20152: 将 array 和 cmath 模块转换为 Argument Clinic。
bpo-18643: 在 Windows 上添加 socket.socketpair()。
bpo-22435: 修复 socketserver 绑定失败时的文件描述符泄漏问题。
bpo-13096: 修复了 CTypes POINTER 处理大值时出现的段错误。
bpo-11694: 如文档所述,在 xdrlib 中引发 ConversionError。由 Filip Gruszczyński 和 Claudiu Popa 提供补丁。
bpo-19380: 优化了正则表达式的解析。
bpo-1519638: 现在在 re.sub() 和 re.subn() 中,未匹配的组将被空字符串替换。
bpo-18615: sndhdr.what/whathdr 现在返回一个 namedtuple。
bpo-22462: 修复 pyexpat 创建虚拟帧以使其出现在异常回溯中的问题。
bpo-21965: 为 ssl 模块添加对内存中 SSL 的支持。由 Geert Jansen 提供补丁。
bpo-21173: 修复了在调用.clear()时有迭代器存活时,对WeakKeyDictionary的len()操作的问题。
bpo-11866: 消除了新线程名称计算中的竞态条件。
bpo-21905: 在迭代过程中当sys.modules被修改时,避免pickle.whichmodule()中的RuntimeError。由Olivier Grisel提供补丁。
bpo-11271: concurrent.futures.Executor.map()现在接受一个 chunksize 参数,允许在子进程中批量处理任务并提高ProcessPoolExecutor的性能。由Dan O'Reilly提供补丁。
bpo-21883: os.path.join()和os.path.relpath()现在对于不支持或参数类型不匹配的情况,会抛出带有更有帮助的错误信息的TypeError。
bpo-22219: zipfile模块的命令行接口现在为ZIP文件中的目录(包括空目录)添加条目。
bpo-22449: 在ssl.SSLContext.load_default_certs中,在Windows上查询环境变量SSL_CERT_DIR和SSL_CERT_FILE。
bpo-22508: 移除了email.__version__变量;email代码不再与标准库分开提供,并且__version__在多个版本中未更新。
bpo-20076: 向语言环境别名表添加了非派生的UTF-8别名。
bpo-20079: 向语言环境别名表添加了glibc 2.18支持的语言环境。
bpo-20218: 向pathlib.Path对象添加了便利方法read_text/write_text和read_bytes/write_bytes。
bpo-22396: 在32位AIX平台上,不暴露os.posix_fadvise()和os.posix_fallocate(),因为它们在系统头文件中的原型是错误的。
bpo-22517: 当io.BufferedRWPair对象被析构时,清除其弱引用。
bpo-22437: 正则表达式中的捕获组数量不再限制为100。
bpo-17442: InteractiveInterpreter现在在其showtraceback方法中显示完整的链式回溯,以匹配内置的交互式解释器。
bpo-23392: 添加了与FILE*一起工作的marshal C API的测试。
bpo-10510: distutils的register和upload方法现在使用符合HTML标准的CRLF行尾。
bpo-9850: 修复了macpath.join()对于空的第一组件的问题。由Oleg Oshmyan提供补丁。
bpo-5309: distutils的build和build_ext命令现在接受一个
-j选项以启用扩展模块的并行构建。bpo-22448: 改进取消的定时器句柄清理以防止无限制的内存使用。补丁由Joshua Moore-Oliva提供。
bpo-22427: 当在生成器中使用with语句时,TemporaryDirectory不再尝试两次清理。
bpo-22362: 禁止在正则表达式中使用超出0-0o377范围的模糊八进制转义。
bpo-20912: 现在添加到ZIP文件的目录具有正确的Unix和MS-DOS目录属性。
bpo-21866: 如果allowZip64为false,ZipFile.close()不再写入ZIP64中央目录记录。
bpo-22278: 修复了urljoin在处理相对URL时的问题,这是在提交issue22118的更改后观察到的回归。
bpo-22415: 修复了re模块中GROUPREF_EXISTS操作码的调试输出。移除了调试输出中的尾随空格。
bpo-22423: 线程中的未处理异常不再导致当sys.stderr为None时未处理的AttributeError。
bpo-21332: 确保subprocess.Popen()中的
bufsize=1选择行缓冲,而不是块缓冲。由Akira Li提供补丁。bpo-21091: 修复API错误:email.message.EmailMessage.is_attachment现在是一个方法。
bpo-21079: 修复email.message.EmailMessage.is_attachment以在头部既有参数又有值时返回正确的结果。
bpo-22247: 将NNTPError添加到nntplib.__all__。
bpo-22366: urllib.request.urlopen将接受一个上下文对象(SSLContext)作为参数,该对象将用于HTTPS连接。由Alex Gaynor提供补丁。
bpo-4180: 当过滤器被修改时,警告注册表现在被重置。
bpo-22419: 限制 wsgiref 服务器中传入 HTTP 请求的长度为 65536 字节,对于超出此长度的请求发送 414 错误代码。由 Devin Cook 提供补丁。
http.cookies 中的宽松 cookie 解析在与某些网页浏览器的非标准 cookie 处理结合使用时可能成为安全问题。由 Sergey Bobrov 报告。
bpo-20537: 日志记录方法现在接受异常实例以及布尔值或异常元组。感谢 Yury Selivanov 提供的补丁。
bpo-22384: 当使用 pythonw.exe 运行时,Tkinter 回调中的异常不再导致程序崩溃。
bpo-22168: 在 OS X 上使用非默认 Canvas 时防止 turtle 的 AttributeError。
bpo-21147: 如果请求包含空字符,sqlite3 现在会引发异常而不是截断它。基于 Victor Stinner 的补丁。
bpo-13968: glob 模块现在支持使用
**模式在子目录中进行递归搜索。bpo-21951: 修复了在 AIX 上当使用空字符串或元组参数调用 Tcl 命令时 Tkinter 的崩溃问题。
bpo-21951: 如果内存分配失败,Tkinter 现在更可能引发 MemoryError 而不是崩溃。
bpo-22338: 修复了 json 模块在内存分配失败时的崩溃问题。
bpo-12410: imaplib.IMAP4 现在支持上下文管理协议。原始由 Tarek Ziadé 提供补丁。
bpo-21270: 我们现在在 mock.call 对象中覆盖元组方法,以便它们可以用作普通的调用属性。
bpo-16662: 当
load_tests()存在于包的__init__.py中时,现在无条件运行。TestLoader.loadTestsFromModule()仍然接受 use_load_tests,但它已被弃用并被忽略。新增并文档化了一个仅关键字的属性pattern。由 Robert Collins 提供补丁,Barry Warsaw 进行了调整。bpo-22226: Treeview.heading() 的结果中 "status" 键的第一个字母不再被剥离。
bpo-19524: 修复了在接收到无效响应时HTTP连接的资源泄漏问题。由Martin Panter提供补丁。
bpo-20421: 向SSL套接字添加了.version()方法,暴露实际使用的协议版本。
bpo-19546: configparser异常不再暴露实现细节。移除了链式KeyErrors,使得跟踪回溯更加清晰。由Claudiu Popa提供补丁。
bpo-22051: turtledemo不再重新加载示例来重新运行它们。变量初始化和GUI设置应该在main()中完成,每次运行演示时都会调用main(),但不会在导入时调用。
bpo-21933: Turtledemo用户可以通过菜单选择或控制(command) '-'或'+'或控制鼠标滚轮来更改代码字体大小。原始由Lita Cho提供补丁。
bpo-21597: 现在可以通过鼠标抓取和拖动turtledemo文本窗格和绘图画布之间的分隔符。可以加宽代码文本窗格以便轻松查看或复制文本的完整宽度。在小屏幕上可以加宽画布。原始由Jan Kanis和Lita Cho提供补丁。
bpo-18132: 当窗口缩小时,Turtledemo按钮不再消失。原始由Jan Kanis和Lita Cho提供补丁。
bpo-22043: time.monotonic()现在总是可用。
threading.Lock.acquire()、``threading.RLock.acquire()``和套接字操作现在在使用超时时使用单调时钟,而不是系统时钟。bpo-21527: 向ThreadPoolExecutor添加了默认的工作线程数,等于CPU数量的5倍。由Claudiu Popa提供补丁。
bpo-22216: smtplib现在在退出后更完全地重置其状态。之前行为的最明显后果是在connect/starttls/quit/connect/starttls序列中的STARTTLS失败。
bpo-22098: ctypes的BigEndianStructure和LittleEndianStructure现在定义了一个空的__slots__,这样子类不会总是得到一个实例字典。由Claudiu Popa提供补丁。
bpo-22185: 修复了threading.Condition.wait()中因不持有锁而修改等待队列导致的偶尔出现的RuntimeError。由Doug Zongker提供补丁。
bpo-22287: 在UNIX上,_PyTime_gettimeofday()现在使用clock_gettime(CLOCK_REALTIME)(如果可用)。作为副作用,Python现在在Solaris和Linux上(仅glibc版本低于2.17时)依赖于librt库。
bpo-22182: 在distutils.file_util.move_file中正确使用e.args来解包异常。由Claudiu Popa提供补丁。
webbrowser模块现在使用subprocess的start_new_session=True,而不是潜在风险的preexec_fn=os.setsid调用。
bpo-22042: 如果文件描述符处于阻塞模式,signal.set_wakeup_fd(fd)现在会引发异常。
bpo-16808: inspect.stack()现在返回一个命名元组而不是元组。由Daniel Shahaf提供补丁。
bpo-22236: 修复了在NoDefaultRoot模式下的Tkinter图像复制操作。
bpo-2527: 向timeit函数添加了一个 globals 参数,以便覆盖执行定时代码的全局命名空间。补丁由Ben Roberts提供。
bpo-22118: 将urllib.parse切换到使用RFC 3986语义解析相对URL,而不是RFCs 1808和2396。补丁由Demian Brecht提供。
bpo-21549: 向TarFile.list()添加了“members”参数。
bpo-19628: 允许通过-r选项指定compileall的递归深度。
bpo-15696: 为Windows上的mmap对象添加了__sizeof__实现。
bpo-22068: 避免了Tkinter中Variables和Fonts的引用循环。
bpo-22165: SimpleHTTPRequestHandler现在支持不可解码的文件名。
bpo-15381: 优化了io.BytesIO中的行读取。
bpo-8797: 在基本认证失败时立即引发HTTPError。初始由Sam Bull提供补丁。
bpo-20729: 恢复了mailbox模块中lazy iterkeys()/itervalues()/iteritems()的使用。
bpo-21448: 更改了FeedParser的feed()方法,以避免在解析长行时的*O*(n2)行为。原始由Raymond Hettinger提供补丁。
bpo-22184: 当用户忘记必需的参数时,functools LRU Cache装饰器工厂现在会提供更早更清晰的错误信息。
bpo-17923: 在AIX上,以斜杠结尾的glob()模式不再匹配非目录。基于Delhallt的补丁。
bpo-21725: 在smtpd中添加了对RFC 6531(SMTPUTF8)的支持。
bpo-22176: 将ctypes模块的libffi更新到v3.1。此版本增加了对Linux AArch64和POWERPC ELF ABIv2小端架构的支持。
bpo-5411: 在shutil模块中添加了对"xztar"格式的支持。
bpo-21121: 不再强制第三方C扩展使用-Werror=declaration-after-statement构建。
bpo-21975: 修复了使用未初始化的sqlite3.Row(特别是在解pickle pickled sqlite3.Row时)时的崩溃问题。sqlite3.Row现在在__new__()方法中初始化。
bpo-20170: 将posixmodule转换为使用Argument Clinic。
bpo-21539: 向
Pathlib.mkdir()添加了一个 exists_ok 参数,以模拟mkdir -p和``os.makedirs()``的功能。当为真时,忽略FileExistsErrors。由Berker Peksag提供补丁。bpo-22127: 在socket模块中绕过IDNA处理纯ASCII主机名(特别是数字IP)。
bpo-21047: 将HTMLParser的 convert_charrefs 参数的默认值设置为True。由Berker Peksag提供补丁。
在 html.entities 包中增加 __all__ 变量。
bpo-15114: HTMLParser的严格模式和参数,HTMLParser.error,以及HTMLParserError异常已被移除。
bpo-22085: 在Tkinter中放弃了对Tk 8.3的支持。
bpo-21580: 现在Tkinter正确处理传递给Tk的字节参数。特别是这允许从二进制数据初始化图像。
bpo-22003: 当从字节对象初始化时,io.BytesIO()现在延迟复制直到它被修改,从而在某些用例中提高了性能和内存使用。由David Wilson提供补丁。
bpo-22018: 在Windows上,signal.set_wakeup_fd()现在也支持套接字。一个副作用是Python依赖于WinSock库。
bpo-22054: 添加 os.get_blocking() 和 os.set_blocking() 函数以获取和设置文件描述符的阻塞模式(如果设置了 O_NONBLOCK 标志则为 False,否则为 True)。这些函数在 Windows 上不可用。
bpo-17172: 即使在通过子进程运行时,也使 turtledemo 在 OS X 上作为活动状态启动。补丁由 Lita Cho 提供。
bpo-21704: 当信号量不可用时,修复 _multiprocessing 的构建错误。由 Arfrever Frehtes Taifersar Arahesis 提供补丁。
bpo-20173: 将 sha1、sha256、sha512 和 md5 转换为 ArgumentClinic。由 Vajrasky Kok 提供补丁。
修复 Windows 64 位上的 repr(_socket.socket):不要在关闭的套接字上因 OverflowError 而失败。repr(socket.socket) 已经工作良好。
bpo-22033: 大多数 Python 实现的类的 repr 现在包含实际的类名而不是硬编码的名称。
bpo-21947: dis 模块现在可以根据 generator-iterator 对象的 gi_code 属性对其进行反汇编。由 Clement Rouault 提供补丁。
bpo-16133: asynchat.async_chat.handle_read() 方法现在忽略 BlockingIOError 异常。
bpo-22044: 修复了 call_tzinfo_method 中的过早 DECREF。由 Tom Flanagan 提供补丁。
bpo-19884: readline:如果标准输出不是终端,则禁用元修饰键,以避免将 ANSI 序列
"\033[1034h"写入标准输出。此序列用于某些终端(例如:TERM=xterm-256color)以启用 8 位字符支持。bpo-4350: 移除了许多长期过时且不工作的 Tkinter 方法。
bpo-6167: Scrollbar.activate() 现在在未指定参数时返回活动元素的名称。Scrollbar.set() 现在总是只接受 2 个参数。
bpo-15275: 清理并加速 ntpath 模块。
bpo-21888: plistlib 的 load() 和 loads() 现在在指定 fmt 参数时可以工作。
bpo-22032: 现在总是使用 __qualname__ 而不是 __name__ 来格式化 Python 实现的类的完全限定类名。
bpo-22031: 当包含形如" at 0x..."的id时,Reprs现在总是使用带有"0x"前缀的十六进制格式。
bpo-22018: signal.set_wakeup_fd()现在在
fstat()失败时引发OSError而不是ValueError。bpo-21044: tarfile.open()现在可以处理具有整数'name'属性的fileobj。基于Antoine Pietri的补丁。
bpo-21966: 当运行代码模块时,尊重-q命令行选项。
bpo-19076: 不再向self.error()传递冗余的'file'参数。
bpo-16382: 改进了warnings.warn()对于错误类别的异常消息。初始由Phil Elson提供补丁。
bpo-21932: os.read()现在使用
Py_ssize_t()类型而不是 int 来支持一次性读取超过2GB的数据。在Windows上,大小被截断为INT_MAX。如同任何对os.read()的调用,操作系统可能读取的字节数少于请求的字节数。bpo-21942: 修复了Windows上pydoc服务器模式下查看源文件的问题。
bpo-11259: asynchat.async_chat().set_terminator()现在如果接收到的字节数为负值时会引发ValueError。
bpo-12523: asynchat.async_chat.push()现在如果没有接收到字节字符串时会引发TypeError。
bpo-21707: 向ModuleFinder.replace_paths_in_code()添加了缺失的kwonlyargcount参数。
bpo-20639: 调用Path.with_suffix('')允许再次移除后缀。由July Tikhonov提供补丁。
bpo-21714: 禁止使用Path.with_name()构造无效路径。原始由Antony Lee提供补丁。
bpo-15014: 向smtplib添加了'auth'方法以使实现认证机制更简单,并在login方法内部使用它。
bpo-21151: 修复了当向SetValueEx传递
None作为REG_BINARY值时winreg模块中的段错误。由John Ehresman提供补丁。bpo-21090: io.FileIO.readall()不再忽略I/O错误。在此之前,如果至少第一次C调用read()成功,它会忽略I/O错误。
bpo-5800: wsgiref.headers.Headers 的 headers 参数现在是可选的。初始由 Pablo Torres Navarrete 和 SilentGhost 提供补丁。
bpo-21781: ssl.RAND_add() 现在支持超过 2 GB 的字符串。
bpo-21679: 防止在 open() 过程中进行多余的 fstat() 调用。由 Bohuslav Kabrda 提供补丁。
bpo-21863: cProfile 现在除了显示 C 扩展函数的名称外,还会显示其模块名。
bpo-11453: asyncore: 当未关闭的 file_wrapper 对象被销毁时发出 ResourceWarning。现在析构函数会在需要时关闭文件。close() 方法现在可以被调用两次:第二次调用不做任何操作。
bpo-21858: 在 sqlite3 模块中更好地处理 Python 异常。
bpo-21476: 确保 email.parser.BytesParser TextIOWrapper 在解析后被丢弃,这样输入文件不会意外关闭。
bpo-20295: imghdr 现在可以识别 OpenEXR 格式的图像。
bpo-21729: 在 dbm.dumb 模块中使用 "with" 语句确保文件关闭。补丁由 Claudiu Popa 提供。
bpo-21491: socketserver: 修复子进程回收中的一个竞争条件。
bpo-21719: 在 Windows 上为 os.stat_result 添加了
st_file_attributes字段。bpo-21832: 要求命名元组的输入必须是确切的字符串。
bpo-21722: distutils 的 "upload" 命令现在在上传失败时以非零返回码退出。由 Martin Dengler 提供补丁。
bpo-21723: asyncio.Queue: 支持任何类型的数字(例如浮点数)作为最大大小。补丁由 Vajrasky Kok 编写。
bpo-21711: 现在已从 site 模块中移除了对 "site-python" 目录的支持(已在 3.4 中弃用)。
bpo-17552: 新的 socket.sendfile() 方法允许通过 UNIX 上的高性能 os.sendfile() 发送文件。由 Giampaolo Rodola' 提供补丁。
bpo-18039: dbm.dump.open() 现在当标志值为 'n' 时总是创建一个新的数据库。由 Claudiu Popa 提供补丁。
bpo-21326: 向asyncio.BaseEventLoop添加了一个新的is_closed()方法。如果事件循环已关闭,asyncio.BaseEventLoop的run_forever()和run_until_complete()方法现在会抛出异常。
bpo-21766: 通过在检查路径是否为CGI脚本之前对路径进行URL解码,防止了CGIHTTPServer中的安全漏洞。
bpo-21310: 修复了在open()失败时可能发生的资源泄漏问题。
bpo-21256: 在模拟函数调用中,关键字参数的打印输出现在按确定性顺序进行。这将有助于编写更好的文档测试。
bpo-21677: 修复了在io close()方法中链接非规范化异常的问题。
bpo-11709: 修复了pydoc.help函数在sys.stdin不是有效文件时不失败的问题。
bpo-21515: tempfile.TemporaryFile现在在可用时使用os.O_TMPFILE标志。
bpo-13223: 修复了pydoc.writedoc,使得在示例代码中使用'self'的方法的HTML文档能够正确生成。
bpo-21463: 在urllib.request中,修复了FTP缓存的修剪问题。
bpo-21618: subprocess模块现在能够关闭调用进程继承的打开文件描述符,即使这些描述符已经高于POSIX资源限制所允许的值。在具有正常工作的/proc/self/fd或/dev/fd接口的系统上,现在忽略最大值并关闭所有文件描述符。
bpo-20383: 引入了importlib.util.module_from_spec()作为创建新模块的首选方式。
bpo-21552: 修复了在64位平台上,tkinter模块中过长的字符串长度可能导致整数溢出的问题。
bpo-14315: zipfile模块现在会忽略中央目录中太短而无法解析的额外字段,而不是让struct.unpack错误冒泡,因为这种“坏数据”在现实世界的许多zip文件中出现,并被其他zip工具忽略。
bpo-13742: 向heapq.merge()添加了“key”和“reverse”参数。(补丁的第一版由Simon Sapin贡献。)
bpo-21402: 当未设置默认根窗口时,tkinter.ttk现在可以正常工作。
bpo-3015:
_tkinter.create()现在默认以wantobjects=1创建tkapp对象。bpo-10203: sqlite3.Row 现在真正支持序列协议,特别是它支持 reverse() 和负索引。原始补丁由 Claudiu Popa 提供。
bpo-18807: 如果为 venv 指定了复制(无符号链接),则现在通过复制而非符号链接创建 python 解释器别名(python, python3)。
bpo-20197: 在 imghdr 模块中添加了对 WebP 图像类型的支持。由 Fabrice Aneche 和 Claudiu Popa 提供补丁。
bpo-21513: 加速了 IP 地址(IPv4Address, IPv6Address)的一些属性,如 .is_private 或 .is_multicast。
bpo-21137: 通过显示“锁定”或“未锁定”状态改进了 threading.Lock() 及其变体的 repr。补丁由 Berker Peksag 提供。
bpo-21538: plistlib 模块现在支持在引用或偏移大小不是二的幂时加载二进制 plist 文件。
bpo-21455: 为 socket.listen() 添加了一个默认的 backlog。
bpo-21525: 大多数接受元组的 Tkinter 方法现在也接受列表。
bpo-22166: 在新内部 _codecs._forget_codec 辅助函数的帮助下,test_codecs 现在清除编码缓存以避免出现引用泄露。
bpo-22236: Tkinter 测试现在不再重用默认的根窗口。为每个测试类创建新的根窗口。
bpo-20826: 优化 ipaddress.collapse_addresses()。
bpo-21487: 优化 ipaddress.summarize_address_range() 和 ipaddress.{IPv4Network,IPv6Network}.subnets()。
bpo-21486: 优化 ipaddress.IPv4Network 和 ipaddress.IPv6Network 中网络掩码的解析。
bpo-13916: 禁止了非 UTF-* 编码的 surrogatepass 错误处理器。
bpo-20998: 修复了忽略大小写的重复单字符模式的 re.fullmatch()。原始由 Matthew Barnett 提供补丁。
bpo-21075: 如果指定了二进制模式,fileinput.FileInput 现在可以从标准流中读取字节。由 Sam Kimbrel 提供补丁。
bpo-19775: 向 pathlib Path 对象添加 samefile() 方法。初始由 Vajrasky Kok 提供补丁。
bpo-21226: 在 PyImport_ExecCodeModuleObject(及其相关函数)中正确设置模块。
bpo-21398: 修复 pydoc 分页器中的一个 unicode 错误,当文档包含无法编码为标准输出编码的字符时。
bpo-16531: ipaddress.IPv4Network 和 ipaddress.IPv6Network 现在接受一个(地址,网络掩码)元组参数,以便从现有地址轻松构建网络对象。
bpo-21156: importlib.abc.InspectLoader.source_to_code() 现在是一个静态方法。
bpo-21424: 简化和优化了 heapq.nlargest() 和 nsmallest(),以减少元组比较的次数。
bpo-21396: 修复 TextIOWrapper(..., write_through=True) 不强制底层二进制流 flush() 的问题。由 akira 提供补丁。
bpo-18314: 在 Windows 上,Unlink 现在可以移除 junctions。由 Kim Gräsman 提供补丁。
bpo-21088: 修复 curses.window.addch() 在 3.4.0 版本中的回归问题。在迁移到 Argument Clinic 时,前两个参数被反转了。
bpo-21407: _decimal: 模块现在支持函数签名。
bpo-10650: 从 Python 版本的 Decimal.quantize() 方法中移除了非标准的 'watchexp' 参数。它从未在 C 版本中出现过。
bpo-21469: 通过检查确保 robots.txt 已被读取或不存在,在 can_fetch() 返回 True 之前,减少了 robotparser 中误报的风险。
bpo-19414: 让 OrderedDict 将被删除的链接标记为不可用。如果在迭代过程中链接被删除,这会提前失败。
bpo-21421: 向 MappingViews ABC 添加 __slots__。由 Josh Rosenberg 提供补丁。
bpo-21101: 在 collections.Counter() 的 C 加速代码中消除双重哈希。
bpo-21321: itertools.islice() 现在在切片耗尽时会释放对源迭代器的引用。由 Anton Afanasyev 提供补丁。
bpo-21057: TextIOWrapper 现在允许底层的二进制流的 read() 或 read1() 方法返回任意的 bytes-like 对象(如 memoryview)。由 Nikolaus Rath 提供补丁。
bpo-20951: 在非阻塞套接字上,如果操作会阻塞,SSLSocket.send() 现在会引发 SSLWantReadError 或 SSLWantWriteError。之前,它会返回 0。由 Nikolaus Rath 提供补丁。
bpo-13248: 移除了之前弃用的 asyncore.dispatcher __getattr__ 廉价继承 hack。
bpo-9815: assertRaises 现在尝试清除异常回溯中对局部变量的引用。
bpo-19940: ssl.cert_time_to_seconds() 现在将给定的时间字符串解释为 UTC 时区(如 RFC 5280 所指定),而不是本地时区。
bpo-13204: 调用 sys.flags.__new__ 会崩溃解释器,现在它会引发 TypeError。
bpo-19385: 对已关闭的 dbm.dumb 数据库的操作现在总是引发相同的异常。
bpo-21207: 检测 os.urandom 缓存的 fd 是否被关闭或替换,并重新打开它。
bpo-21291: subprocess 的 Popen.wait() 现在是线程安全的,因此多个线程可以同时调用 Popen 实例的 wait() 或 poll() 而不会丢失 Popen.returncode 值。
bpo-21127: Path 对象现在可以从 str 子类实例(如
numpy.str_)实例化。bpo-15002: urllib.response 对象使用 _TemporaryFileWrapper(和 _TemporaryFileCloser)设施。提供了一种更好的处理文件描述符关闭的方法。由 Christian Theune 提供补丁。
bpo-12220: mindom 现在会引发一个自定义的 ValueError,指示它不支持 URI 中的空格,而不是让 'split' ValueError 冒泡。
bpo-21068: ssl.PROTOCOL* 常量现在是枚举成员。
bpo-21276: posixmodule: 不要在 KFreeBSD 和 Hurd 上定义 USE_XATTRS。
bpo-21262: Mock 的新方法 assert_not_called。如果 mock 被调用过,它会引发 AssertionError。
bpo-21238: Mock 的新关键字参数
unsafe。如果属性以 assert 或 assret 开头,它会引发AttributeError。bpo-20896: ssl.get_server_certificate() 现在使用 PROTOCOL_SSLv23,而不是 PROTOCOL_SSLv3,以获得最大的兼容性。
bpo-21239: 当同一个名字被多次 patch 时,patch.stopall() 没有确定性地工作。
bpo-21203: 更新了 fileConfig 和 dictConfig 以消除不一致。感谢 Jure Koren 的补丁。
bpo-21222: 现在,将 name 关键字参数传递给 mock.create_autospec 可以工作了。
bpo-21197: 在 64 位非 OS X POSIX 上,venvs 中添加了 lib64 -> lib 的符号链接。
bpo-17498: 一些 SMTP 服务器在特定错误后断开连接,违反了严格的 RFC 一致性。smtplib 现在返回错误代码,并在发出下一个命令时延迟引发 SMTPServerDisconnected 错误,而不是在我们发出后续 RSET 时丢失错误代码。
bpo-17826: 现在,在由 create_autospec 创建的 mock 函数上设置可迭代的 side_effect 可以工作了。由 Kushal Das 提供的补丁。
bpo-7776: 修复了在使用 http.client.HTTPConnection.set_tunnel() 时的
Host:标头和重新连接。由 Nikolaus Rath 提供的补丁。bpo-20968: unittest.mock.MagicMock 现在支持除法。由 Johannes Baiter 提供的补丁。
bpo-21529: 修复了 JSONDecoder.raw_decode 中第二个参数为负数时的任意内存访问。由 Guido Vranken 报告的错误。(另见:CVE 2014-4616)
bpo-21169: getpass 现在通过使用 replace 错误处理程序重新编码,处理输入流编码无法编码的非 ASCII 字符。
bpo-21171: 修复了 rot13 编解码器未记录的过滤器 API。由 Berker Peksag 提供的补丁。
bpo-20539: 改进了 math.factorial 对于大正数输入的错误消息,并更改了大负数输入的异常类型(OverflowError -> ValueError)。
bpo-21172: isinstance 检查从 dict 放宽到 collections.Mapping。
bpo-21155: asyncio.EventLoop.create_unix_server() 现在如果同时指定了 path 和 sock 会抛出 ValueError。
bpo-21136: 避免了由于幂和其他操作导致的 Fractions 不必要的规范化。由 Raymond Hettinger 提供补丁。
bpo-17621: 引入了 importlib.util.LazyLoader。
bpo-21076: signal 模块的常量被转换为枚举。由 Giampaolo Rodola' 提供补丁。
bpo-20636: 改进了 Tkinter 小部件的 repr。
bpo-19505: OrderedDict 的 items、keys 和 values 视图现在支持使用 reversed() 进行反向迭代。
bpo-21149: 改进了解释器关闭期间日志清理的线程安全性。感谢 Devin Jeanpierre 提供的补丁。
bpo-21058: 修复了
tempfile.NamedTemporaryFile()中的文件描述符泄漏问题,如果io.open()失败则关闭文件描述符。bpo-21200: 当 __spec__ 缺失时,从 pkgutil.get_loader() 返回 None。
bpo-21013: 增强 ssl.create_default_context() 用于服务器端套接字时的默认安全性。
bpo-20145:
assertRaisesRegex和assertWarnsRegex现在如果第二个参数不是字符串或编译的正则表达式会抛出TypeError。bpo-20633: 用绝对导入替换相对导入。
bpo-20980: 使用 ThreadPool 时停止包装异常。
bpo-21082: 在 os.makedirs 中,不设置进程级的 umask。注意这改变了 makedirs 当 exist_ok=True 时的行为。
bpo-20990: 修复了 pyflakes 为 multiprocessing 发现的问题。
bpo-21015: SSL 上下文现在会在 OpenSSL 1.0.2 及更高版本上自动为 ECDH 密钥交换选择椭圆曲线,否则默认为 "prime256v1"。
bpo-21000: 改进了 json.tool 的命令行界面。
bpo-20995: 增强了 ssl 模块使用的默认密码,以实现更好的安全性并优先考虑完美前向保密。
bpo-20884: 不假设 __file__ 在 importlib.__init__ 上有定义。
bpo-21499: 在几个 test_importlib.test_api 测试中忽略 __builtins__。
bpo-20627: xmlrpc.client.ServerProxy 现在是一个上下文管理器。
bpo-19165: formatter 模块现在引发 DeprecationWarning 而不是 PendingDeprecationWarning。
bpo-13936: 移除了 datetime.time 实例在布尔上下文中被视为假的能力。
bpo-18931: selectors 模块现在支持 Solaris 上的 /dev/poll。补丁由 Giampaolo Rodola' 提供。
bpo-19977: 当
LC_TYPE语言环境是 POSIX 语言环境(C语言环境)时,sys.stdin和sys.stdout现在使用surrogateescape错误处理程序,而不是strict错误处理程序。bpo-20574: 为 cp65001 代码(Windows 代码页 65001,Microsoft UTF-8)实现增量解码器。
bpo-20879: 延迟初始化 base64 模块中 base32、ascii85 和 base85 编解码器的编码和解码表,并延迟初始化 urllib.parse 模块的 unquote_to_bytes() 表,以避免在这些模块未使用时浪费内存。
bpo-19157: 在 ipaddress 中为 IPv6 包含广播地址到可用主机中。
bpo-11599: 当外部命令(例如编译器)失败时,如果设置了环境变量 DISTUTILS_DEBUG,distutils 现在会打印出整个命令行(而不仅仅是命令名称)。
bpo-4931: distutils 不应再产生无帮助的“error: None”消息。distutils.util.grok_environment_error 被保留但文档标记为弃用。
bpo-20875: 防止可能的 gzip "'read' is not defined" NameError。由 Claudiu Popa 提供补丁。
bpo-11558:
email.message.Message.attach现在在is_multipart为 False 的消息上调用attach时返回更有用的错误消息。bpo-20283: RE 模式方法现在接受字符串关键字参数如文档所述。模式和源关键字参数作为弃用的别名保留。
bpo-20778: 修复 modulefinder 以与仅字节码的模块一起工作。
bpo-20791: copy.copy() 现在当输入是 bytes 对象时不再制作副本。初始由 Peter Otten 提供补丁。
bpo-19748: 在 AIX 上,time.mktime() 现在对于超出范围 [1902; 2037] 的年份会引发 OverflowError。
bpo-19573: inspect.signature: 使用枚举作为参数种类常量。
bpo-20726: inspect.signature: 使 Signature 和 Parameter 可 pickle。
bpo-17373: 添加 inspect.Signature.from_callable 方法。
bpo-20378: 改进 inspect.Signature 和 inspect.Parameter 的 repr。
bpo-20816: 修复 inspect.getcallargs() 以对缺少的关键字参数引发正确的 TypeError。补丁由 Jeremiah Lowin 提供。
bpo-20817: 修复 inspect.getcallargs() 以在缺少超过 3 个参数时正确失败。由 Jeremiah Lowin 提供补丁。
bpo-6676: 确保在尝试为每个 pyexpat xmlparser 实例解析多个 XML 文档时引发有意义的异常。(原始由 Hirokazu Yamamoto 和 Amaury Forgeot d'Arc 提供补丁,建议措辞由 David Gutteridge 提出)
bpo-21117: 修复 inspect.signature 以更好地支持 functools.partial。由于 functools.partial 实现的特殊性,作为关键字参数传递的位置或关键字参数变为仅关键字。
bpo-20334: inspect.Signature 和 inspect.Parameter 现在可哈希。感谢 Antony Lee 的错误报告和建议。
bpo-15916: 如果 doctest.DocTestSuite 没有找到测试,则返回一个空的 unittest.TestSuite 而不是引发 ValueError。
bpo-21209: 修复 asyncio.tasks.CoroWrapper 以解决在 CPython 3.4.1 之前的 yield-from 实现中的一个错误。
asyncio: 向 CoroWrapper 添加 gi_{frame,running,code} 属性(上游 bpo-163)。
bpo-21311: 避免在 _osx_support 中因非标准编译器配置而引发异常。由 John Szakmeister 提供补丁。
bpo-11571: 确保在 OS X 上启动时 turtle 窗口成为最顶层窗口。
bpo-21801: 验证 __signature__ 是否为 None 或 Signature 的实例。
bpo-21923: 防止由于_config_vars可能未初始化而在distutils.sysconfig.customize_compiler中引发AttributeError。
bpo-21323: 修复http.server再次处理CGI子目录中的脚本的问题,此功能因修复安全问题 bpo-19435 而损坏。由Zach Byrne提供补丁。
bpo-22733: 修复ffi_prep_args在64位Windows上未能正确零扩展参数值的问题。
bpo-23302: 在建立HTTPConnection时默认设置TCP_NODELAY=1。移除了对硬编码MSS的使用,因为这是一个在Nagle禁用后不再需要的优化。
IDLE¶
bpo-20577: FormatParagraph扩展的最大行长配置已从Idle偏好对话框的General标签页移动到Config Extensions对话框的FormatParagraph标签页。由Tal Einat提供补丁。
bpo-16893: 更新Idle文档章节以匹配当前Idle并添加新信息。
bpo-3068: 在Options菜单中添加Idle扩展配置对话框。更改将写入HOME/.idlerc/config-extensions.cfg。原始由Tal Einat提供补丁。
bpo-16233: 模块浏览器(文件 : 类浏览器,Alt+C)需要一个有文件名的编辑器窗口。当从shell、输出窗口或'Untitled'编辑器请求类浏览器时,Idle不再显示错误框。现在会弹出一个打开模块框(Alt+M)。如果输入了一个有效的名称并打开了一个模块,相应的浏览器也会被打开。
bpo-4832: 保存为Python文件时自动为你输入的名称添加.py扩展名(即使你的系统不显示它)。某些系统在类型为文本文件时会自动添加.txt。
bpo-21986: 代码对象通常不被pickle模块pickle。为了匹配这一点,当在Idle下运行时,它们不再被pickle。
bpo-17390: 调整编辑器窗口标题;移除'Python',将版本号移至末尾。
bpo-14105: 在插入或删除行时,Idle调试器的断点不再消失。
bpo-17172: Turtledemo 现在可以从 Idle 运行。目前,该入口位于帮助菜单上,但可能会移至运行菜单。由 Ramchandra Apt 和 Lita Cho 提供的补丁。
bpo-21765: 为 HyperParser 添加对非 ASCII 标识符的支持。
bpo-21940: 为 WidgetRedirector 添加单元测试。初始由 Saimadhav Heblikar 提供补丁。
bpo-18592: 为 SearchDialogBase 添加单元测试。由 Phil Webster 提供的补丁。
bpo-21694: 为 ParenMatch 添加单元测试。由 Saimadhav Heblikar 提供的补丁。
bpo-21686: 为 HyperParser 添加单元测试。原始由 Saimadhav Heblikar 提供补丁。
bpo-12387: 为 Idle 添加默认 Windows 键绑定的大写(小写)版本,以便 Caps Lock 不会禁用它们。由 Roger Serwy 提供的补丁。
bpo-21695: 在搜索仍在进行时关闭“在文件中查找”输出窗口不再关闭 Idle。
bpo-18910: 为 textView 添加单元测试。由 Phil Webster 提供的补丁。
bpo-18292: 为 AutoExpand 添加单元测试。由 Saihadhav Heblikar 提供的补丁。
bpo-18409: 为 AutoComplete 添加单元测试。由 Phil Webster 提供的补丁。
bpo-21477: htest.py - 改进框架,完成测试集。由 Saimadhav Heblikar 提供的补丁
bpo-18104: 添加 idlelib/idle_test/htest.py,包含几个示例测试,开始整合和改进 Idle 的人工验证测试。根据需要更改其他文件以与 htest 协同工作。将模块作为 __main__ 运行会运行所有测试。
bpo-21284: 用户更改重新格式化宽度后,段落重新格式化测试通过。
bpo-17654: 确保在 OS X 上为非框架构建和所有 Tk 变体正确自定义 IDLE 菜单。
bpo-23180: 将 IDLE 的“Windows”菜单项重命名为“Window”。由 Al Sweigart 提供的补丁。
构建¶
bpo-15506: 在配置脚本中使用标准的 PKG_PROG_PKG_CONFIG autoconf 宏。
bpo-22935: 如果 openssl 不支持 SSL 3,也允许编译 ssl 模块。
bpo-22592: 放弃对使用 Borland C 编译器构建 Python 的支持。distutils 模块仍支持使用该编译器构建扩展。
bpo-22591: 放弃对 MS-DOS 的支持,特别是 DJGPP 编译器(MS-DOS 版的 GCC)。
bpo-16537: 在 setup.py 中检查 self.extensions 是否为空。由 Jonathan Hosmer 提供补丁。
bpo-22359: 移除递归 make 的错误使用。由 Jonas Wagner 提供补丁。
bpo-21958: 当使用 Visual Studio 2013 及以上版本构建时,定义 HAVE_ROUND。由 Zachary Turner 提供补丁。
bpo-18093: 嵌入 CPython 运行时的程序现在放在单独的 "Programs" 目录中,而不是保留在 Modules 目录中。
bpo-15759: 在 Doc/ 中的 "make suspicious"、"make linkcheck" 和 "make doctest" 现在仅在失败时显示特殊消息。
bpo-21141: Windows 构建过程不再尝试查找 Perl,而是依赖已配置并准备好构建的 OpenSSL 源代码。
PCbuild\build_ssl.py脚本已被重写并重命名为PCbuild\prepare_ssl.py,并负责为 32 位和 64 位平台配置 OpenSSL 源代码。从 svn.python.org 获取的 OpenSSL 源代码将始终预先配置并准备好构建。bpo-21037: 添加构建选项以启用 AddressSanitizer 支持。
bpo-19962: Windows 构建过程现在在源代码树的根目录中创建 "python.bat",它将所有参数传递给最近构建的解释器。
bpo-21285: 重构并修复 curses 配置检查,始终在 ncursesw 目录中搜索。
bpo-15234: 对于 BerkeleyDB 和 Sqlite,仅当未搜索到库和包含目录时才添加它们。这避免了显式的运行时库依赖。
bpo-17861: Tools/scripts/generate_opcode_h.py 如果 Lib/opcode.py 有任何更改,会自动从 Lib/opcode.py 重新生成 Include/opcode.h。
bpo-20644: OS X 安装程序构建支持3.4.1中文档构建的更改:假设外部提供的sphinx-build在/usr/bin中可用。
bpo-20022: 在OS X构建中消除对已弃用的bundlebuilder的使用。
bpo-15968: 将Tcl、Tk和Tix构建集成到Windows构建解决方案中。
bpo-17095: 修复Modules/Setup shared 支持。
bpo-21811: 预期修复以支持OS X版本 > 10.9。
bpo-21166: 防止python --generate-posix-vars在pybuilddir.txt构建目标中可能出现的段错误和其他随机故障。
bpo-18096: 修复python-config返回的库顺序。
bpo-17219: 为Python扩展跨构建添加库构建目录。
bpo-22919: Windows构建更新以支持VC 14.0(Visual Studio 2015),这将用于官方发布。
bpo-21236: 使用cabinet.lib而非fci.lib构建_msi.pyd。
bpo-17128: 为OS X 10.5+安装程序使用OpenSSL的私有版本。
C API¶
bpo-14203: 移除了对PyBuffer_FillInfo()、bytearray_getbuffer()、bytesiobuf_getbuffer()和array_buffer_getbuf()中view==NULL的过时支持。所有函数在那种情况下现在都会引发BufferError。
bpo-22445: PyBuffer_IsContiguous()现在实现了精确的连续性测试,与NumPy的NPY_RELAXED_STRIDES_CHECKING编译标志兼容。之前该函数在角落案例中报告了假阴性。
bpo-22079: PyType_Ready()现在检查静态分配的类型没有动态分配的基类。
bpo-22453: 移除了未记录的宏PyObject_REPR()。
bpo-18395: 将
_Py_char2wchar()重命名为Py_DecodeLocale(),将``_Py_wchar2char()`` 重命名为Py_EncodeLocale(),并记录这些函数。bpo-21233: 添加新的C函数:PyMem_RawCalloc()、PyMem_Calloc()、PyObject_Calloc()、_PyObject_GC_Calloc()。bytes(int)现在对于大对象使用
calloc()而非malloc(),这样更快且使用更少的内存。bpo-20942: PyImport_ImportFrozenModuleObject() 不再设置 __file__ 以匹配 importlib 的行为;这影响了 _frozen_importlib 以及任何使用 imp.init_frozen() 加载的模块。
文档¶
bpo-19548: 更新 codecs 模块文档,以更好地涵盖文本编码和其他编解码器之间的区别,以及其他一些澄清。由 Martin Panter 提供补丁。
bpo-22394: Doc/Makefile 现在支持
make venv PYTHON=../python来创建一个用于生成文档的 venv,例如,make html PYTHON=venv/bin/python3。bpo-21514: json 模块的文档现在引用新的 JSON RFC 7159 而不是过时的 RFC 4627。
bpo-21777: bytes 和 bytearray 的二进制序列方法现在被明确文档化,而不是假设用户能够从相应的 str 方法的行为中推导出预期行为。
bpo-6916: 取消文档中已弃用的 asynchat.fifo 类的记录。
bpo-17386: 扩展了
Doc/make.bat脚本的功能,使其更加接近Doc/Makefile。bpo-21312: 更新 thread_foobar.h 模板文件,包括更新的线程 API。由 Jack McCracken 提供补丁。
bpo-21043: 移除对特定 CA 组织的推荐,并提及加载操作系统证书的能力。
bpo-20765: 添加 PurePath.with_name() 和 PurePath.with_suffix() 的缺失文档。
bpo-19407: 基于 Python Packaging Authority 工具的新包安装和分发指南。现有的指南作为遗留链接保留在 distutils 文档中,因为它们仍然包含一些工具开发者所需的参考材料,这些材料在其他地方没有记录。
bpo-19697: 文档化 __main__.__spec__ 为 None 的情况。
测试¶
bpo-18982: 为 calendar 模块的 CLI 添加测试。
bpo-19548: 向 test_codecs 添加了一些额外的检查,以确保更新后的文档中的陈述保持准确。由 Martin Panter 提供补丁。
bpo-22838: 所有的test_re测试现在都可以通过unittest测试发现来运行。
bpo-22173: 更新lib2to3测试以使用unittest测试发现。
bpo-16000: 将test_curses转换为使用unittest。
bpo-21456: 如果_ssl模块不存在,则跳过test_urllib2net.py中的两个测试。由Remi Pointel提供补丁。
bpo-20746: 修复test_pdb以在refleak模式(-R)下运行。由Xavier de Gaye提供补丁。
bpo-22060: test_ctypes已经进行了一定程度的清理和简化;现在它使用unittest测试发现来找到它的测试。
bpo-22104: regrtest.py不再持有对从没有定义test_main()的测试模块加载的测试套件的引用。
bpo-22111: 在test_imaplib中进行了一些清理。由Milan Oberkirch提供补丁。
bpo-22002: 向test.support添加了
load_package_tests函数,并用它在test_asyncio、test_email、test_importlib、test_json和test_tools中实现/增强测试发现。bpo-21976: 修复test_ssl以接受LibreSSL版本字符串。感谢William Orr。
bpo-21918: 将test_tools从一个模块转换为一个包,包含每个测试脚本的单独测试文件。
bpo-9554: 在test_argparse中使用现代的unittest特性。由Denver Coneybeare和Radu Voicilas提供初始补丁。
bpo-20155: 更改test_httpservers中失败测试的HTTP方法名称,以便数据包过滤软件(特别是Windows基础过滤引擎)不会干扰测试预期的事务语义。
bpo-19493: 重构了ctypes测试包,明确跳过测试而不是静默跳过。
bpo-18492: 当测试不是由regrtest.py运行时,现在允许所有资源。
bpo-21634: 修复pystone微基准测试:使用地板除法代替真除法来对整数而不是浮点数进行基准测试。将pystone版本设置为1.2。补丁由Lennart Regebro编写。
bpo-21605: 为Tkinter图像添加了测试。
bpo-21493: 为ntpath.expanduser()添加了测试。原始由Claudiu Popa提供补丁。
bpo-19925: 为spwd模块添加了测试。原始由Vajrasky Kok提供补丁。
bpo-21522: 为Listbox.itemconfigure()、PanedWindow.paneconfigure()和Menu.entryconfigure()添加了Tkinter测试。
bpo-17756: 修复从安装位置运行时的test_code测试。
bpo-17752: 修复从安装位置运行时的distutils测试。
bpo-18604: 合并了对GUI可用性的检查。现在所有平台在请求GUI资源时至少会检查是否可以实例化Tk。
bpo-21275: 修复 KFreeBSD 上的一个套接字测试。
bpo-21223: 当某些扩展作为内置模块编译时传入 test_site/test_startup_imports。
bpo-20635: 添加了针对 Tk geometry 管理器的测试。
增加freeze包的测试用例。
bpo-20743: 修复了 test_tcl 中的一个引用泄漏。
bpo-21097: 将 test_namespace_pkgs 移至 test_importlib。
bpo-21503: 在 test_importlib 中一致地使用 test_both()。
bpo-20939: 避免由于新增从 http://www.python.org/ 到 https://www.python.org 的重定向导致的网络测试失败:改用 http://www.example.com。
bpo-20668: asyncio 测试不再依赖 tests.txt 文件。 (由 Vajrasky Kok 提供补丁)
bpo-21093: 在 OS X 上防止当 libz 的副本存在于 $HOME/lib 或 /usr/local/lib 中时 ctypes test_macholib 的失败。
bpo-22770: 在 OS X 上防止当运行图形用户界面测试时的某些 Tk 段错误。
bpo-23211: 在某些 OS X 10.6 系统上绕过 test_logging 失败。
bpo-23345: 防止较大 OpenSSL 补丁级别值 (如 0.9.8zc) 导致的 test_ssl 失败。
工具/示例¶
bpo-22314: 现在当设置了 LINES 环境变量时 pydoc 将会可用。
bpo-22615: Argument Clinic 现在支持 int 转换器的 "type" 参数。 这允许将 int 转换器用于枚举和 typedef。
bpo-20076: makelocalealias.py 脚本将不再忽略 UTF-8 映射。
bpo-20079: makelocalealias.py 脚本现在能够解析 glibc 源代码中的 SUPPORTED 文件并支持针对源代码路径的命令行选项。
bpo-22201: zipfile 模块的命令行界面现在能正确地提取带有目录项的 ZIP 文件。 由 Ryan Wilson 提供补丁。
bpo-22120: 对于使用无符号整数返回转换器的函数,现在 Argument Clinic 会在所生成的代码中为与 -1 的比较生成到该类型的强制转换。 (这将抑制一个编译警告。)
bpo-18974: Tools/scripts/diff.py 现在将使用 argparse 而不是 optparse。
bpo-21906: 让 Tools/scripts/md5sum.py 适用于 Python 3。 由 Zachary Ware 提供补丁。
bpo-21629: 修复 Argument Clinic 的 "--converters" 特性。
为2to3添加
yield from的支持。为 2to3 添加对 PEP 465 矩阵乘法运算符的支持。
bpo-16047: 修正冻结中的模块异常列表和 __file__ 处理。 由 Meador Inge 提供补丁。
bpo-11824: 考虑冻结中的 ABI 标签。 由 Meador Inge 提供补丁。
bpo-20535: PYTHONWARNING 不再影响 run_tests.py 脚本。 由 Arfrever Frehtes Taifersar Arahesis 提供补丁。
Windows¶
bpo-23260: 更新 Windows 安装器
捆绑的 Tcl/Tk 版本已被更新至 8.6.3。 这项改变最显示的结果是当在 Windows Vista 或更新版本上运行时增加了新的原生文件对话框。 请参阅 Tcl/Tk 的 TIP 432 了解详情。 此外,该 Tcl/Tk 版本还包括了对 Windows 10 的支持。
bpo-17896: 现在 Windows 构建脚本将预期外部库源代码位于
PCbuild\..\externals而不是PCbuild\..\..。bpo-17717: 现在 Windows 构建脚本将使用来自 svn.python.org的 NASM 副本来构建 OpenSSL。
bpo-21907: 改进了供构建 Python 的处理脚本。
bpo-22644: 捆绑的 OpenSSL 版本已更新到 1.0.1j。
bpo-10747: 在 Windows 开始菜单中使用带版本号的标签。 由 Olive Kilburn 提供补丁。
bpo-22980: 带有版本号和平台标记的 .pyd 文件 (例如 ".cp35-win32.pyd") 现在将优先于不带标记的文件被加载。
(有关旧版本的信息,请参阅HISTORY文件。)