Содержание страницы
Список изменений¶Changelog
Python 3.8.20 финальный¶Python 3.8.20 final
Дата выпуска: 2024-09-06
Windows¶
Тесты¶Tests
gh-112769: Теперь тесты корректно сравнивают версию zlib, когда
zlib.ZLIB_RUNTIME_VERSIONсодержит нецелочисленные суффиксы. Например, zlib-ng определяет версию как1.3.0.zlib-ng.gh-117187: Исправлены XML-тесты для обычного Expat <2.6.0.
Безопасность¶Security
gh-123678: Обновление libexpat до версии 2.6.3
gh-121957: Исправлена недостача событий аудита вокруг интерактивного использования Python, теперь также корректно срабатывают для
python -i, а также дляpython -m asyncio. Рассматриваемое событие –cpython.run_stdin.gh-122133: Выполняется аутентификация сокетного соединения для запасного варианта
socket.socketpair()на платформах, где недоступенAF_UNIX, например на Windows.Патч от Gregory P. Smith <greg@krypto.org> и Seth Larson <seth@python.org>. Сообщено Ellie <el@horse64.org>
gh-121285: Удалён возврат (backtracking) при разборе заголовков tarfile для
hdrcharset, PAX и GNU sparse-заголовков.gh-118486:
os.mkdir()в Windows теперь принимает режим0o700для ограничения новой директории текущим пользователем. Это исправляет CVE-2024-4030, затрагивающуюtempfile.mkdtemp()в сценариях, где базовая временная директория имеет более разрешительные права, чем по умолчанию.gh-114572:
ssl.SSLContext.cert_store_stats()иssl.SSLContext.get_ca_certs()теперь корректно блокируют доступ к хранилищу сертификатов, когдаssl.SSLContextиспользуется совместно несколькими потоками.gh-116741: Обновить встроенную libexpat до версии 2.6.2
Библиотека¶Library
gh-123270: Применено более точечное исправление для повреждённых полезных нагрузок в
zipfile.Path, вызывавших бесконечные циклы (gh-122905), без нарушения содержимого, использующего допустимые символы.gh-123067: Исправлена квадратичная сложность при разборе
"-quoted значений cookie с обратными слешами черезhttp.cookies.gh-121650:
emailзаголовки с внедрёнными символами новой строки теперь заключаются в кавычки при выводе.generatorтеперь отказывается сериализовать (записывать) заголовки, которые небезопасно свёрнуты или разделены; см.verify_generated_headers. (Авторы: Bas Bloemsaat и Petr Viktorin в gh-121650.)gh-113171: Исправлены различные ложноположительные и ложноотрицательные срабатывания в
ipaddress.IPv4Address.is_private(см. документацию для подробностей)
А также в соответствующих атрибутах
ipaddress.IPv4Networkиipaddress.IPv6Network.gh-102988:
email.utils.getaddresses()иemail.utils.parseaddr()теперь возвращают кортежи из двух элементов('', '')в большем числе ситуаций, когда встречаются недопустимые адреса электронной почты, вместо потенциально неточных значений. Добавлен необязательный параметр strict в эти две функции: используйтеstrict=Falseдля получения старого поведения, принимайте некорректные входные данные.getattr(email.utils, 'supports_strict_parsing', False)можно использовать для проверки доступности параметра strict. Патч от Thomas Dwyer и Victor Stinner для улучшения исправления CVE-2023-27043.gh-67693: Исправлены
urllib.parse.urlunparse()иurllib.parse.urlunsplit()для URI с путём, начинающимся с нескольких слешей и без authority. На основе исправления от Ashwin Ramaswami.
Ядро и встроенные модули¶Core and Builtins
gh-112275: Исправлена взаимоблокировка с участием
pystate.c'sHEAD_LOCKвposixmodule.cпри fork. Патч от ChuBoning на основе предыдущего исправления Python 3.12 от Victor Stinner.
Python 3.8.19 финальный¶Python 3.8.19 final
Дата выпуска: 2024-03-19
Безопасность¶Security
Ядро и встроенные модули¶Core and Builtins
gh-102388: Исправлена ошибка, при которой кодеки
iso2022_jp_3иiso2022_jp_2004выполняли чтение за границами.
Библиотека¶Library
gh-115197:
urllib.requestбольше не разрешает имя хоста перед проверкой его по списку исключений прокси системы на macOS и Windows.gh-115133: Исправлены тесты для
XMLPullParserс Expat 2.6.0.gh-81194: Исправлен сбой в
socket.if_indextoname()при определённом значении (UINT_MAX). Исправлено целочисленное переполнение вsocket.if_indextoname()на 64-битных платформах, отличных от Windows.gh-109858: Защита
zipfileот zip-бомбы с перекрывающимися записями (quoted-overlap). Теперь он вызывает BadZipFile при попытке прочитать запись, перекрывающуюся с другой записью или центральным каталогом.gh-107077: Похоже, что в некоторых условиях OpenSSL возвращает
SSL_ERROR_SYSCALLвместоSSL_ERROR_SSL, когда верификация сертификата не удалась, но параметры ошибки по-прежнему содержатERR_LIB_SSLиSSL_R_CERTIFICATE_VERIFY_FAILED. Теперь мы обнаруживаем эту ситуацию и возбуждаем соответствующееssl.SSLCertVerificationError. Исправление от Pablo Galindo.gh-91133: Исправлена ошибка в очистке
tempfile.TemporaryDirectory, которая теперь больше не разыменовывает символические ссылки при обходе ошибок прав доступа файловой системы.
Документация¶Documentation
gh-115399: Документировано CVE-2023-52425 Expat <2.6.0 в разделе "XML vulnerabilities".
Тесты¶Tests
gh-108310: SSL-тесты для закрытия до рукопожатия ранее не были включены в Python 3.8 из-за некорректного бэкпорта. Теперь это исправлено. Исправление от Lumír Balhar.
Windows¶
gh-111239: Обновление сборок Windows для использования zlib v1.3.1.
gh-109991: Сборки Windows теперь используют OpenSSL 1.1.1w. Обратите внимание, что OpenSSL 1.1 достиг конца жизни и впредь не будет получать исправлений; эта версия Python больше не получает исправлений поддержки и не будет обновлена до OpenSSL 3.0.
Python 3.8.18 финальный¶Python 3.8.18 final
Дата выпуска: 2023-08-24
Безопасность¶Security
gh-108310: Исправлена проблема, при которой экземпляры
ssl.SSLSocketбыли уязвимы для обхода рукопожатия TLS и включённых защит (например, проверка сертификата), а также обрабатывали отправленные незашифрованные данные так, как если бы это были зашифрованные данные после рукопожатия TLS. Проблема безопасности зарегистрирована как CVE-2023-40217 Aapo Oksman. Патч от Gregory P. Smith.
Библиотека¶Library
gh-107845:
tarfile.data_filter()теперь учитывает расположение симлинков при определении их цели, поэтому больше не будет отклонять некоторые корректные tar-архивы сLinkOutsideDestinationError.
Инструменты/Демонстрации¶Tools/Demos
gh-107565: Обновление multissltests и рабочих процессов GitHub CI для использования OpenSSL 1.1.1v, 3.0.10 и 3.1.2.
Python 3.8.17 финальный¶Python 3.8.17 final
Дата выпуска: 2023-06-06
Безопасность¶Security
gh-103142: Версия OpenSSL, используемая в наших бинарных сборках, обновлена до 1.1.1u для устранения нескольких CVE.
gh-99889: Исправлена уязвимость в системе безопасности в
uu.decode(), которая могла позволить обход каталога на основе ввода, если не был указанout_file.gh-104049: Не раскрывать локальное расположение на диске в индексах каталогов, создаваемых
http.client.SimpleHTTPRequestHandler.gh-102153:
urllib.parse.urlsplit()теперь удаляет начальные управляющие символы C0 и пробелы в соответствии со спецификацией URL, определённой WHATWG, в ответ на CVE-2023-24329. Патч от Illia Volochii.gh-101727: Обновлена версия OpenSSL, используемая в бинарных сборках для Windows и macOS, до 1.1.1t для устранения CVE-2023-0286, CVE-2022-4303 и CVE-2022-4303 в соответствии с уведомлением безопасности OpenSSL от 2023-02-07.
gh-101283:
subprocess.Popenтеперь использует более безопасный подход для поискаcmd.exeпри запуске сshell=True. Исправление от Eryk Sun, основанное на исправлении от Oleg Iarygin.
Библиотека¶Library
gh-103935: Использовать
io.open_code()для исполняемых файлов вместо сырыхopen().gh-102953: Методы извлечения в
tarfileиshutil.unpack_archive()получили новый аргумент filter, позволяющий ограничить возможности tar, которые могут быть неожиданными или опасными, например создание файлов за пределами целевого каталога. Подробнее см. Фильтры извлечения.gh-101997: Обновлен pip wheel, поставляемый с ensurepip (pip 23.0.1).
Сборка¶Build
gh-102306: [3.8] Избежать сбоя test_posix в GHA CI macOS, используя соответствующий macOS SDK.
Windows¶
gh-100180: Обновление установщика Windows до OpenSSL 1.1.1s
macOS¶
gh-103142: Обновление установщика macOS для использования OpenSSL 1.1.1u.
Python 3.8.16 финальный¶Python 3.8.16 final
Дата выпуска: 2022-12-06
Безопасность¶Security
gh-100001:
python -m http.serverбольше не допускает вывод управляющих символов терминала, отправленных в мусорном запросе, в журнал stderr сервера.Это достигается изменением метода
http.serverBaseHTTPRequestHandler.log_messageдля замены управляющих символов на\xHHшестнадцатеричную escape-последовательность перед выводом.gh-87604: Предотвращена публикация списка активных аудит-хуков на интерпретатор через модуль
gcgh-98433: Декодер IDNA codec, используемый для DNS-имён хостов функциями разрешения имён
socketилиasyncio, больше не использует квадратичный алгоритм. Это предотвращает потенциальный отказ в обслуживании по CPU, если декодируется нестандартное имя хоста чрезмерной длины, содержащее двунаправленные символы. Некоторые протоколы, такие какurllibhttp3xxредиректы, потенциально позволяют злоумышленнику указать такое имя.gh-98739: Обновление встроенной библиотеки libexpat до версии 2.5.0
gh-98517: Перенесено исправление XKCP для переполнения буфера в SHA-3 (CVE-2022-37454).
gh-68966: Устаревший модуль mailcap теперь отказывается вставлять небезопасный текст (имена файлов, MIME-типы, параметры) в команды оболочки. Вместо использования такого текста он выдаёт предупреждение и действует так, как если бы совпадение не было найдено (или для тестовых команд – как будто тест провалился).
Python 3.8.15 финальный¶Python 3.8.15 final
Дата выпуска: 2022-10-11
Безопасность¶Security
gh-97616: Исправлено умножение списка на целое число (
list *= int): теперь обнаруживается целочисленное переполнение, когда новая выделенная длина близка к максимальному размеру. Проблема сообщена Jordan Limor. Патч от Victor Stinner.gh-97612: Исправлена уязвимость внедрения shell-кода в пример скрипта
get-remote-certificate.py. Скрипт больше не использует оболочку для выполнения командopenssl. Проблема сообщена и первоначальное исправление от Caleb Shortt. Патч от Victor Stinner.
Ядро и встроенные модули¶Core and Builtins
gh-96848: Исправлен разбор командной строки: отклоняется опция
-X int_max_str_digitsбез значения (недопустимо), когда переменная окруженияPYTHONINTMAXSTRDIGITSустановлена в допустимый предел. Патч от Victor Stinner.gh-95778: Если
ValueErrorвозбуждается из-за целого числа, превышающего предел, в сообщении об ошибке упоминается функцияsys.set_int_max_str_digits(). Патч от Victor Stinner.
Библиотека¶Library
gh-97005: Обновить встроенную библиотеку libexpat до версии 2.4.9
Windows¶
Python 3.8.14 финальный¶Python 3.8.14 final
Дата выпуска: 2022-09-06
Безопасность¶Security
gh-95778: Преобразование между
intиstrв системах счисления, отличных от 2 (двоичной), 4, 8 (восьмеричной), 16 (шестнадцатеричной) или 32, например, по основанию 10 (десятичной), теперь вызываетValueError, если количество цифр в строковом представлении превышает лимит, установленный для предотвращения потенциальных DoS-атак из-за алгоритмической сложности. Это смягчение для CVE-2020-10735.Этот новый лимит можно настроить или отключить с помощью переменной окружения, флага командной строки или API
sys. См. документацию ограничения длины преобразования целых чисел из строки. По умолчанию лимит составляет 4300 цифр в строковом представлении.Исправление от Gregory P. Smith [Google] и Christian Heimes [Red Hat] с обратной связью от Victor Stinner, Thomas Wouters, Steve Dower, Ned Deily и Mark Dickinson.
gh-87389:
http.server: Исправлена уязвимость открытого перенаправления в HTTP-сервере, когда путь URI начинается с//. Уязвимость обнаружена и первоначальное исправление предложено Hamza Avvan.
Ядро и встроенные модули¶Core and Builtins
gh-93065: Исправлена реализация HAMT в contextvars для обработки итерации по глубоким деревьям.
Ошибка была обнаружена и исправлена Eli Libman. Подробнее см. MagicStack/immutables#84.
Библиотека¶Library
bpo-46197: Исправлена изоляция окружения
ensurepipдля подпроцесса, запускающегоpip.bpo-36073: Вместо падения с ошибкой сегментации при рекурсивном использовании курсоров в конвертерах
sqlite3теперь возбуждаетсяProgrammingError. Запись от Сергея Федосеева.
Документация¶Documentation
Тесты¶Tests
gh-94208:
test_sslтеперь проверяет поддерживаемые версии TLS и протоколы в большем количестве тестов.bpo-47016: Создан workflow GitHub Actions для проверки встроенных pip и setuptools. Патч от Illia Volochii и Adam Turner.
bpo-46114: Исправлен тестовый случай для версии OpenSSL 3.0.1. OpenSSL 3.0 использует
0xMNN00PP0L.
Windows¶
bpo-47194: Обновить
zlibдо версии v1.2.12 для устранения CVE-2018-25032.
Python 3.8.13 финальный¶Python 3.8.13 final
Дата выпуска: 2022-03-15
Ядро и встроенные модули¶Core and Builtins
bpo-46794: Версия libexpat обновлена до 2.4.6.
Библиотека¶Library
bpo-46985: Обновление pip wheel, входящего в состав ensurepip (pip 22.0.4)
bpo-46932: Обновление встроенного libexpat до версии 2.4.7
bpo-46811: Обеспечить поддержку Expat >=2.4.5 в тестовом наборе.
bpo-46784: Исправление коллизий символов libexpat с динамически загружаемой или статически слинкованной пользователем libexpat во встроенном Python.
bpo-46756: Исправлена ошибка в
urllib.request.HTTPPasswordMgr.find_user_password()иurllib.request.HTTPPasswordMgrWithPriorAuth.is_authenticated(), которая позволяла обходить авторизацию. Например, доступ к URIexample.org/foobarбыл разрешён, если пользователь был авторизован для URIexample.org/foo.bpo-46400: expat: обновление libexpat с 2.4.1 до 2.4.4
bpo-46474: В
importlib.metadata.EntryPoint.patternизбежать потенциального REDoS, ограничивая неоднозначность в последовательных пробелах.bpo-44849: Исправлена функция
os.set_inheritable()на FreeBSD 14 для файлового дескриптора, открытого с флагомO_PATH: игнорируется ошибкаEBADFнаioctl(), используется запасная реализацияfcntl(). Исправление от Victor Stinner.
Документация¶Documentation
bpo-41028: Переключатели языка и версии, ранее поддерживаемые в каждой ветке cpython, теперь обрабатываются docsbuild-script.
Тесты¶Tests
bpo-45195: Исправлен test_readline.test_nonascii(): иногда символ новой строки не записывается в конце, поэтому не нужно ожидать его в выводе. Патч от Victor Stinner.
bpo-44949: Исправлены тесты автодополнения истории в test_readline: иногда символ новой строки не записывается в конце, поэтому не нужно его ожидать в выводе.
Сборка¶Build
bpo-47024: Обновить сборки Windows и установщик macOS для использования OpenSSL 1.1.1n.
bpo-45405: Предотвращать
internal configure errorпри запускеconfigureс новыми версиями clang. Исправление от David Bohman.bpo-45220: Избегать автоматической сборки с предварительными версиями Windows 11 SDK. Это можно переопределить, установив переменную окружения
DefaultWindowsSDKVersionперед сборкой.
Windows¶
macOS¶
bpo-44828: Предотвращение сбоя диалога выбора файла tkinter в macOS 12 Monterey при использовании Tk 8.6.11, предоставляемого установщиками python.org для macOS. Патч от Marc Culler из проекта Tk.
Python 3.8.12 финальный¶Python 3.8.12 final
Дата выпуска: 2021-08-30
Безопасность¶Security
bpo-42278: Замена использования
tempfile.mktemp()наTemporaryDirectoryдля предотвращения потенциального состояния гонки.bpo-44394: Обновить поставляемую копию libexpat до версии 2.4.1 (с 2.2.8) для исправления уязвимости CVE-2013-0340 «Billion Laughs». Эта копия чаще всего используется в Windows и macOS.
bpo-43124: Внутренняя функция
putcmdвsmtplibтеперь проверяет входные данные на наличие символов\rи\nдля предотвращения (маловероятной) инъекции команд.bpo-36384: Модуль
ipaddressбольше не принимает начальные нули в строках IPv4-адресов. Начальные нули неоднозначны и интерпретируются некоторыми библиотеками как восьмеричная запись. Например, устаревшая функцияsocket.inet_aton()рассматривает начальные нули как восьмеричную запись. Реализация glibc современногоinet_pton()не принимает начальные нули. Некоторое время модульipaddressпринимал неоднозначные начальные нули.
Ядро и встроенные модули¶Core and Builtins
bpo-44872: В frameobject.c используются новые макросы trashcan (Py_TRASHCAN_BEGIN/END) вместо старых (Py_TRASHCAN_SAFE_BEGIN/END).
bpo-33930: Исправлено падение с segmentation fault при глубокой рекурсии во время очистки объектов методов. Исправление от Augusto Goulart и Pablo Galindo.
bpo-44856: Исправлены утечки ссылок в ошибочных путях
update_bases()и__build_class__. Исправление от Pablo Galindo.
Библиотека¶Library
bpo-45001: Разбор даты в email сделан более устойчивым к некорректным входным данным, а именно к заголовку
Date:, состоящему только из пробелов. Исправление от Wouter Bolsterlee.
Документация¶Documentation
bpo-30511: Уточнено, что
shutil.make_archive()не является потокобезопасным из-за зависимости от смены текущего рабочего каталога.
Windows¶
bpo-45007: Обновление до OpenSSL 1.1.1l в сборке Windows
macOS¶
bpo-45007: Обновление сборок установщика macOS для использования OpenSSL 1.1.1l.
bpo-44689:
ctypes.util.find_library()теперь корректно работает на macOS 11 Big Sur, даже если Python собран на более старой версии macOS. Ранее при сборке на старых системах macOSfind_libraryне мог найти системные библиотеки macOS при запуске на Big Sur из-за изменений в способе хранения системных библиотек.
Python 3.8.11 final¶
Дата выпуска: 2021-06-28
Безопасность¶Security
bpo-44022: mod:
http.clientтеперь избегает бесконечного чтения потенциальных HTTP- заголовков после ответа100 Continueот сервера.bpo-43882: Наличие символов новой строки или табуляции в частях URL может допускать некоторые формы атак.
Следуя управляющей спецификации URL, определённой WHATWG,
urllib.parse()теперь удаляет ASCII-символы новой строки и табуляции из URL, предотвращая такие атаки.bpo-42800: Перехватчики аудита теперь срабатывают для frame.f_code, traceback.tb_frame и доступа к атрибутам кода/фрейма генератора.
Ядро и встроенные модули¶Core and Builtins
bpo-44070: Имена файлов при импорте больше не преобразуются в абсолютные заранее, за исключением модулей расширения; это поведение было введено в версии 3.8.10.
Библиотека¶Library
bpo-44061: Исправлена регрессия в предыдущем выпуске при вызове
pkgutil.iter_modules()со списком объектовpathlib.Path
Python 3.8.10 final¶
Дата выпуска: 2021-05-03
Безопасность¶Security
bpo-43434: Теперь при создании объекта
sqlite3.Connectionтакже возникаетsqlite3.connectсобытие аудита. Ранее это событие вызывалось только вызовамиsqlite3.connect(). Патч от Erlend E. Aasland.bpo-43472: Обеспечивает получение перехватчиками аудита на уровне интерпретатора события
cpython.PyInterpreterState_Newпри вызове через модуль_xxsubinterpreters.bpo-43075: Исправлена уязвимость типа «Отказ в обслуживании через регулярные выражения» (ReDoS) в
urllib.request.AbstractBasicAuthHandler. Уязвимое регулярное выражение имеет квадратичную сложность в худшем случае и позволяет вызвать отказ в обслуживании при распознавании специально созданных недействительных RFC. Эта проблема ReDoS находится на стороне клиента и требует от удалённых злоумышленников контроля над HTTP-сервером.
Ядро и встроенные модули¶Core and Builtins
bpo-43105: Importlib теперь разрешает относительные пути при создании объектов спецификации модулей из файловых расположений.
bpo-42924: Исправление повторения
bytearray, которое некорректно копировало данные с начала буфера, даже если данные были смещены внутри буфера (например, после присваивания среза в началеbytearrayболее короткой строке байтов).
Библиотека¶Library
bpo-43993: Обновление встроенного pip до 21.1.1.
bpo-43937: Исправлена работа модуля
turtleс окном корня, отличным от стандартного.bpo-43930: Обновление встроенного pip до 21.1 и setuptools до 56.0.0
bpo-43920: OpenSSL 3.0.0:
load_verify_locations()теперь возвращает единообразное сообщение об ошибке, когда cadata не содержит действительного сертификата.bpo-43607:
urllibтеперь может преобразовывать пути Windows с префиксами\\?\в URL-пути.bpo-43284: platform.win32_ver получает версию Windows из sys.getwindowsversion().platform_version, который в свою очередь получает версию из kernel32.dll (которая может быть другой версии, чем сама Windows). Поэтому изменено: platform.win32_ver теперь определяет версию с помощью частной функции _syscmd_ver модуля platform, чтобы возвращать точную версию.
bpo-42248: [Enum] обеспечить освобождение исключений, возникших в
_missing__bpo-43799: OpenSSL 3.0.0: определено
OPENSSL_API_COMPAT1.1.1 для подавления предупреждений об устаревании. Python требует API OpenSSL 1.1.1.bpo-43794: Добавлены константы
ssl.OP_IGNORE_UNEXPECTED_EOF(OpenSSL 3.0.0)bpo-43789: OpenSSL 3.0.0: Не вызывать функцию обратного вызова для пароля второй раз, когда первый вызов сигнализировал об ошибке.
bpo-43788: Заголовочные файлы для кодов ошибок
sslтеперь специфичны для версии OpenSSL. Исключения теперь будут отображать правильные коды причины и библиотеки. Скриптmake_ssl_data.pyбыл переписан для использования текстового файла OpenSSL с кодами ошибок.bpo-43655: Диалоговые окна
tkinterтеперь распознаются как диалоги оконными менеджерами на macOS и X Window.bpo-43534:
turtle.textinput()иturtle.numinput()теперь создают временное окно, работающее от имени окна холста.bpo-43522: Исправлена проблема с
hostname_checks_common_name. OpenSSL не копирует hostflags из struct SSL_CTX в struct SSL.bpo-42967: Добавлена поддержка аргумента
bytesseparatorвurllib.parse.parse_qsиurllib.parse.parse_qslпри разборе строк запросаstr. Ранее это вызывалоTypeError.bpo-43176: Исправлена обработка dataclass, наследующего от замороженного dataclass без полей. Теперь это корректно определяется как ошибка.
bpo-34463: Исправлено несоответствие между
tracebackи интерпретатором в форматировании SyntaxError с не заданным lineno (tracebackизменено в соответствии с интерпретатором).bpo-41735: Исправлена редкая ошибка с блокировками потоков в модуле zlib. Патч от Ma Lin.
bpo-26053: Исправлена ошибка, из-за которой интерактивная команда запуска
pdbповторяла аргументы из командной строки оболочки, даже если они были переопределены в приглашении pdb.bpo-36470: Исправлены dataclasses с
InitVarиreplace(). Патч от Claudiu Popa.bpo-28577: Метод hosts для IPv4Networks с префиксом 32 бита и IPv6Networks с префиксом 128 бит теперь возвращает список, содержащий единственный адрес, вместо пустого списка.
bpo-32745: Исправлен регресс в обработке типа ctypes
ctypes.c_wchar_p: встроенные нулевые символы вызывалиValueError. Патч от Zackery Spytz.
Документация¶Documentation
bpo-43959: Уточнена документация по C-API PyContextVar.
bpo-43938: Обновлена документация dataclasses: указано, что FrozenInstanceError наследуется от AttributeError.
bpo-43739: Исправлен пример кода в Doc/extending/extending.rst: объявление и инициализация переменной pmodule теперь имеют правильный тип.
Тесты¶Tests
bpo-43842: Исправлено состояние гонки в SMTP-тесте test_logging. Нельзя закрывать файловый дескриптор (сокет) из другого потока, пока asyncore.loop() опрашивает этот дескриптор. Патч от Victor Stinner.
bpo-43811: Тестирование нескольких версий OpenSSL на GitHub Actions. Используется ccache для ускорения тестирования.
bpo-43791: OpenSSL 3.0.0: отключено тестирование устаревших протоколов TLS 1.0 и 1.1. Тесты завершаются ошибкой TLSV1_ALERT_INTERNAL_ERROR.
Windows¶
bpo-35306: Исключить возникновение ошибок в
pathlib.Path.exists()при передаче недопустимого имени файла.bpo-38822: Исправлена ошибка
os.stat()на недоступных каталогах с косой чертой в конце: теперь не происходит возврат к метаданным родительского каталога. Это косвенно затрагивалоos.path.exists()иos.path.isdir().bpo-26227: Исправлено декодирование имён хостов в
socket.gethostbyaddr()иsocket.gethostbyname_ex().bpo-43745: Исправлено: сборка Windows теперь действительно использует OpenSSL 1.1.1k. Ранее выпуски были ошибочно помечены и на самом деле снова включали 1.1.1i.
bpo-43492: Установщик Windows обновлён для использования SQLite 3.35.5.
macOS¶
bpo-44009: Добавлен исполняемый файл «python3.x-intel64», позволяющий надёжно запускать сборки универсального фреймворка (universal2) macOS под эмуляцией Intel-64 (Rosetta 2) на Mac с Apple Silicon. Это может быть полезно для тестирования или когда ещё нет колёс (wheels) для universal2.
bpo-41100: Начиная с версии 3.8.10, Python поддерживает сборку и работу на macOS 11 (Big Sur) и на Apple Silicon Mac (на базе архитектуры
ARM64). Также доступна новая универсальная сборкаuniversal2, которая нативно поддерживает какARM64, так иIntel 64в одном наборе исполняемых файлов. Этот бэкпорт из Python 3.9 не включает поддержку «weaklinking» (слабого связывания); для поддержки диапазона версий macOS необходимо нацеливаться на самую старую версию и собирать на ней; для 3.8.x сборкаuniversal2полезна только на macOS 11 и новее.bpo-43492: Установщик macOS обновлён для использования SQLite 3.35.4.
IDLE¶
bpo-43655: Окна диалогов IDLE теперь распознаются оконными менеджерами как диалоги на macOS и X Window.
C API¶
bpo-43962: _PyInterpreterState_IDIncref() теперь вызывает _PyInterpreterState_IDInitref() и всегда увеличивает id_refcount. Ранее вызов _xxsubinterpreters.get_current() мог создать несогласованность id_refcount при освобождении объекта _xxsubinterpreters.InterpreterID. Исправление от Victor Stinner.
Python 3.8.9 final¶
Дата выпуска: 2021-04-02
Безопасность¶Security
bpo-42988: CVE-2021-3426: Удалена возможность
getfileмодуляpydoc, которая могла быть использована для чтения произвольных файлов на диске (уязвимость обхода каталогов). Более того, даже исходный код модулей Python может содержать чувствительные данные, такие как пароли. Уязвимость сообщена David Schwörer.bpo-43285:
ftplibбольше не доверяет значению IP-адреса, возвращаемому сервером в ответ на команду PASV по умолчанию. Это предотвращает использование ответа вредоносным FTP-сервером для проверки комбинаций IPv4-адресов и портов в сети клиента.Код, которому требуется прежнее уязвимое поведение, может установить атрибут
trust_server_pasv_ipv4_addressв своих экземплярахftplib.FTPвTrue, чтобы снова включить его.bpo-43439: Добавлены аудит-хуки для
gc.get_objects(),gc.get_referrers()иgc.get_referents(). Исправление от Pablo Galindo.
Ядро и встроенные модули¶Core and Builtins
bpo-43660: Исправлен сбой, возникающий при замене
sys.stderrна вызываемый объект, который может удалить объект во время вывода исключения. Исправление от Pablo Galindo.bpo-35883: Python больше не завершает работу с фатальной ошибкой при запуске, если аргумент командной строки содержит недопустимый символ Unicode. Функция
Py_DecodeLocale()теперь экранирует последовательности байтов, которые декодировались бы как символы Unicode вне диапазона [U+0000; U+10ffff].bpo-43406: Исправлена возможная гонка состояний, при которой
PyErr_CheckSignalsпытается выполнить обработчик сигнала, не относящегося к Python.
Библиотека¶Library
bpo-35930: Возбуждение исключения, возникшего в экземпляре «future», будет создавать циклические ссылки.
bpo-43577: Исправлена взаимная блокировка при использовании отладочного колбэка
ssl.SSLContextсssl.SSLContext.sni_callback().bpo-43423:
subprocess.communicate()больше не вызывает IndexError, когда при таймауте в Windows пуст буфер ввода-вывода stdout или stderr.bpo-27820: Исправлена давняя ошибка smtplib.SMTP, при которой выполнение AUTH LOGIN с initial_response_ok=False завершалось неудачей.
Причина в том, что SMTP.auth_login _всегда_ возвращает пароль, если ему передана строка запроса (challenge), что не соответствует стандарту AUTH LOGIN.
Также исправлена ошибка в тесте для smtpd.
bpo-43399: Исправлена ошибка, из-за которой
ElementTree.extendне работала с итераторами при использовании реализации на Python.bpo-43316: Приложение командной строки
python -m gzipтеперь корректно завершается с ошибкой при обнаружении неподдерживаемого расширения. Оно завершается с ненулевым кодом возврата и выводит сообщение об ошибке в stderr.bpo-43260: Исправлена ситуация, когда TextIOWrapper не мог сбросить внутренний буфер после записи очень большого текста.
bpo-42782: Добавлен быстрый отказ в
shutil.move(), чтобы избежать создания целевых каталогов при сбое.bpo-37193: Исправлена утечка памяти в
socketserver.ThreadingMixIn, появившаяся в Python 3.7.
Документация¶Documentation
bpo-43199: Ответ на вопрос «Почему нет goto?» в FAQ по дизайну и истории.
bpo-43407: Уточнено, что результат
time.monotonic(),time.perf_counter(),time.process_time()илиtime.thread_time()можно сравнивать с результатом любого последующего вызова той же функции, а не только следующего сразу за ним.bpo-27646: уточнено, что конструкция 'yield from <expr>' работает с любым итерируемым объектом, а не только с итераторами.
bpo-36346: обновлены некоторые устаревшие Unicode API, для которых в документации указано «будет удалено в 4.0» – теперь указано «3.12». Подробнее см. PEP 623.
Тесты¶Tests
Сборка¶Build
macOS¶
bpo-41837: обновлена сборка установщика macOS для использования OpenSSL 1.1.1j.
IDLE¶
bpo-42225: Документировано, что IDLE может завершаться ошибкой в Unix либо из-за неправильно настроенных правил маскировки IP, либо из-за проблем с отображением сложных цветных (не-ASCII) символов.
bpo-43283: описано, почему вывод в оболочку IDLE часто медленнее вывода в системный терминал и что его можно ускорить, предварительно отформатировав одну строку перед выводом.
Python 3.8.8 final¶
Дата выпуска: 2021-02-19
В версии 3.8.8 не было новых изменений.
Python 3.8.8 release candidate 1¶
Дата выпуска: 2021-02-16
Безопасность¶Security
bpo-42967: Исправлена уязвимость отравления веб-кэша: теперь по умолчанию разделителем аргументов запроса установлен
&, и пользователь может выбрать собственный разделитель.bpo-42938: Отказ от статических буферов при вычислении repr значений
ctypes.c_doubleиctypes.c_longdouble.
Ядро и встроенные модули¶Core and Builtins
bpo-42819:
readline: Явное отключение bracketed paste в интерактивном интерпретаторе, даже если он задан в inputrc, включён по умолчанию (например, GNU Readline 8.1) или пользователь вызываетreadline.read_init_file(). В Python REPL не реализована поддержка bracketed paste. Кроме того, bracketed mode записывает управляющую последовательность"\x1b[?2004h"в stdout, что вызывает сбои тестов в приложениях, не поддерживающих его. Его по-прежнему можно явно включить, вызвавreadline.parse_and_bind("set enable-bracketed-paste on"). Исправление от Dustin Rodrigues.
Библиотека¶Library
bpo-43108: Исправлена утечка ссылок в модуле
curses. Патч от Pablo Galindobpo-42780: Исправлено os.set_inheritable() для файловых дескрипторов O_PATH в Linux.
bpo-41748: Исправлены правила парсинга HTMLParser для атрибутов элементов, содержащих запятые с пробелами. Автор исправления – Карл Дюбост (Karl Dubost).
bpo-42759: Исправлено сравнение на равенство
tkinter.Variableиtkinter.font.Font. Объекты, принадлежащие разным интерпретаторам Tcl, теперь всегда различны, даже если имеют одинаковое имя.bpo-23328: Разрешить символ / в полях имени пользователя и пароля в переменных окружения _PROXY.
bpo-42681: Исправлены проверки диапазона для цветов и номеров пар в
curses.bpo-42531:
importlib.resources.path()теперь работает для пакетов, у которых отсутствует необязательный атрибут__file__(точнее, пакетов, у которых__spec__.originisNone).bpo-42388: Исправлено поведение subprocess.check_output(…, input=None) при text=True для согласованности с документацией и universal_newlines=True.
bpo-42384: Исправлено поведение pdb: теперь sys.path[0] заполняется в точности так же, как при обычном запуске python.
bpo-42383: Исправлена ошибка в pdb: ранее pdb не удавалось перезапустить цель отладки, если она была указана с относительным путём, а текущий каталог изменился.
bpo-42318: Исправлена поддержка символов не из BMP в
tkinterна macOS.bpo-42005: Исправлен интерфейс командной строки
cProfileиprofileдля обработкиBrokenPipeError.bpo-41604: Не уменьшать счётчик ссылок предыдущего user_ptr при сбое set_panel_userptr.
bpo-26407: Неожиданные ошибки при вызове метода
__iter__больше не маскируютсяTypeErrorвcsv.reader(),csv.writer.writerow()иcsv.writer.writerows().bpo-39068: Исправлено состояние гонки при инициализации в
a85encode()иb85encode()вbase64. Патч от Brandon Stansbury.bpo-36589: функция
curses.update_lines_cols()теперь возвращаетNoneвместо1в случае успеха.bpo-33289: Исправлен вызов
tkinter.colorchooserдля возврата тройки RGB целых чисел вместо чисел с плавающей запятой. Автор исправления – Шерил Сабелла (Cheryl Sabella).
Документация¶Documentation
Тесты¶Tests
Сборка¶Build
bpo-29076: Добавлена поддержка оболочки fish в установщик macOS.
Windows¶
macOS¶
IDLE¶
bpo-43008: Сделать, чтобы IDLE вызывал
sys.excepthook()в обычном двухпроцессном режиме. Патч от Кена Хилтона.bpo-33065: Исправлена проблема отладки пользовательских классов с методом __repr__.
bpo-42508: Обеспечена работа IDLE на macOS. Удалён устаревший обходной приём, который мешал запускать файлы с помощью ярлыков при использовании новых установщиков universal2, собранных на macOS 11.
bpo-23544: Отключать пункт Debug=>Stack Viewer при выполнении пользовательского кода или активном отладчике для предотвращения зависания или сбоя. Патч от Закери Спайтца.
bpo-32631: Завершение примера модуля расширения zzdummy: заставить пункты меню работать; добавлены строки документации и тесты со 100% покрытием.
Инструменты/Демонстрации¶Tools/Demos
bpo-42726: Исправлена проблема совместимости с Python 3 в gdb/libpython.py при обработке словарей атрибутов.
C API¶
bpo-43030: Исправлено предупреждение компилятора в
Py_UNICODE_ISSPACE()на платформах со знаковымwchar_t.bpo-40052: Исправлено предупреждение/ошибка сборки о выравнивании в функции
PyVectorcall_Function(). Патч от Andreas Schneider, Antoine Pitrou и Petr Viktorin.
Python 3.8.7 final¶
Дата выпуска: 2020-12-21
Ядро и встроенные модули¶Core and Builtins
bpo-32381: Исправлено имя кодировки при запуске файла
.pycв Windows:PyRun_SimpleFileExFlags()теперь использует правильную кодировку для декодирования имени файла.bpo-42536: Несколько встроенных типов и типов из стандартной библиотеки теперь гарантируют, что их внутренние кортежи результатов всегда отслеживаются сборщиком мусора:
Ранее они могли стать неотслеживаемыми при предыдущей сборке мусора. Патч от Brandt Bucher.
Библиотека¶Library
bpo-42630: Функции и конструкторы
tkinter, которым требуется корневое окно по умолчанию, теперь вызываютRuntimeErrorс понятным сообщением вместо непонятныхAttributeErrorилиNameError, если оно ещё не создано или не может быть создано автоматически.bpo-42644:
logging.disableтеперь проверяет типы и значение своего параметра. Он также принимает строки, представляющие уровни (как иloging.setLevel), вместо только числовых значений.bpo-36541: Исправлен lib2to3.pgen2 для возможности разбора синтаксиса только позиционных аргументов из PEP-570.
bpo-42375: Обновление модуля подпроцесса для поддержки DragonFlyBSD.
bpo-39825: Windows: изменён
sysconfig.get_config_var('EXT_SUFFIX')на ожидаемый полный форматplatform_tag.extension. Ранее он был жёстко привязан к.pyd, теперь совместим сdistutils.sysconfigи будет давать результат вида.cp38-win_amd64.pyd. Это приводит Windows к единообразию с другими платформами.bpo-39101: Исправлены тесты, использующие IsolatedAsyncioTestCase, которые зависали при BaseExceptions.
bpo-41889: Enum: исправление регрессии, связанной с наследованием множественно наследуемого перечисления.
bpo-41891: Обеспечено ожидание завершения задачи в asyncio.wait_for
bpo-40219: Уменьшен фиктивный виджет
tkinter.ttk.LabeledScale, чтобы не скрывать часть метки содержимого.bpo-40084: Исправлено
Enum.__dir__: dir(Enum.member) теперь включает атрибуты, а также методы.
Документация¶Documentation
bpo-17140: Добавлена документация для класса
multiprocessing.pool.ThreadPool.
Сборка¶Build
bpo-42604: Теперь на всех платформах используется значение для переменной сборки «EXT_SUFFIX», полученное из SOABI (например, в freeBSD «EXT_SUFFIX» теперь «.cpython-310d.so» вместо «.so»). Ранее только Linux, Mac и VxWorks использовали значение для «EXT_SUFFIX», включавшее «SOABI».
bpo-42598: Исправлены неявные объявления функций в configure, которые могли привести к некорректным проверкам конфигурации. Патч предоставлен Joshua Root.
Инструменты/Демонстрации¶Tools/Demos
bpo-42613: Исправлен инструмент
freeze.pyдля использования правильных каталогов конфигурации и библиотек. Патч от Victor Stinner.
Python 3.8.7 release candidate 1¶
Дата релиза: 2020-12-07
Безопасность¶Security
bpo-42103: Предотвращена потенциальная DoS-атака через исчерпание CPU и RAM при обработке некорректных файлов Apple Property List в двоичном формате.
bpo-42051: Модуль
plistlibбольше не принимает объявления сущностей в XML plist-файлах для предотвращения XML-уязвимостей. Это не должно повлиять на пользователей, так как объявления сущностей не используются в обычных plist-файлах.bpo-40791: Добавлен
volatileв переменную-аккумулятор вhmac.compare_digest, что делает менее вероятными оптимизации, разрушающие константное время.
Ядро и встроенные модули¶Core and Builtins
bpo-41686: В Windows событие
SIGINT,_PyOS_SigintEvent(), теперь создаётся, даже если Python настроен не устанавливать обработчики сигналов (еслиPyConfig.install_signal_handlersравно 0 илиPy_InitializeEx(0)).bpo-42143: Исправлена обработка ошибок при создании
PyFunctionObject, которая приводила к операциям с неинициализированной памятью. Патч от Yonatan Goldschmidt.bpo-41984: Сборщик мусора теперь отслеживает все определённые пользователем классы. Патч от Brandt Bucher.
bpo-41909: Исправлено переполнение стека в
issubclass()иisinstance(), когда получение атрибута__bases__приводило к бесконечной рекурсии.bpo-41894: При загрузке нативного модуля и возникновении ошибки загрузки предотвращается возможная UnicodeDecodeError при работе не в локали UTF-8 путём декодирования сообщения об ошибке загрузки с использованием кодировки текущей локали.
Библиотека¶Library
bpo-17735:
inspect.findsource()теперь возбуждаетOSErrorвместоIndexError, когдаco_linenoобъекта кода превышает длину файла. Это возможно, например, если файл был изменён после импорта. PR от Ирит Катриэль (Irit Katriel).bpo-42116: Исправлена обработка завершающих комментариев в
inspect.getsource().bpo-42482:
TracebackExceptionбольше не хранит ссылку на объект traceback исключения. В результате экземпляры TracebackException для эквивалентных, но не равных исключений теперь считаются равными.bpo-42406: Исправлена проблема в
pickle.whichmodule, при которой импортmultiprocessingмог изменять то, как pickle определяет, какому модулю принадлежит объект, что потенциально нарушало распаковку этих объектов.bpo-42328: Исправлено
tkinter.ttk.Style.map(). Функция теперь принимает представление состояния по умолчанию в виде пустой последовательности (как возвращаетсяStyle.map()). Структура результата теперь одинакова на всех платформах и не зависит от значенияwantobjects.bpo-42014: Колбэк
onerrorизshutil.rmtreeтеперь получает правильную функцию при сбоеos.open.bpo-42237: Исправлен
os.sendfile()на illumos.bpo-42249: Исправлена запись бинарных Plist-файлов размером более 4 ГиБ.
bpo-35455: На Solaris
thread_time()теперь реализована с помощьюgethrvtime(), так какclock_gettime(CLOCK_THREAD_CPUTIME_ID)не всегда доступна. Патч от Jakub Kulik.bpo-41754: webbrowser: игнорировать NotADirectoryError при вызове
xdg-settings.bpo-29566:
binhex.binhex()теперь последовательно записывает концы строк в формате macOS 9.bpo-42183: Исправлена ошибка переполнения стека для asyncio-задачи или Future repr().
Переполнение происходит в некоторых случаях, когда задача или Future рекурсивно возвращает себя.
bpo-42103:
InvalidFileExceptionиRecursionErrorтеперь являются единственными ошибками, возникающими при загрузке повреждённого бинарного Plist-файла (ранее в некоторых случаях могли возникать ValueError и TypeError).bpo-41491: plistlib: исправлен разбор XML-файлов plist с шестнадцатеричными целочисленными значениями
bpo-32498: Более понятное сообщение об исключении при передаче аргумента типа bytes в
urllib.parse.unquote(). Это относится только к версии 3.8; в 3.9 и новее эта функция также принимает входные данные типа bytes. PR от Irit Katriel.bpo-42065: Исправлена некорректно отформатированная ошибка из
_codecs.charmap_decode()при вызове с отображённым значением вне диапазона допустимых кодовых точек Unicode. PR от Max Bernstein.bpo-41966: Исправлена сериализация подклассов чистого Python
datetime.time. Патч от Dean Inwood.bpo-41976: Исправлена ошибка, из-за которой
ctypes.util.find_library()возвращалNoneпри попытке найти библиотеку в окружении, где доступен gcc>=9, аldconfigнет. Патч от Pablo Galindo.bpo-41900: Сериализация C14N 2.0 в xml.etree.ElementTree не работала для атрибутов без префикса, если было определено пространство имён по умолчанию.
bpo-41855: В
importlib.metadataисправлена проблема, из-за которой могло возвращаться несколько дочерних элементов изFastPath.zip_children(). Бэкпорт из python-devs/importlib_metadata#117.bpo-41840: Исправлена ошибка в модуле
symtable, из-за которой глобальные переменные на уровне модуля не сообщались как локальные и глобальные. Патч от Pablo Galindo.bpo-41831:
str()для атрибутаtypeобъектаtkinter.Eventтеперь всегда возвращает числовой код, возвращённый Tk, а не имя типа события.bpo-41662: больше не переопределяются исключения, возникшие в
__len__()последовательности параметров вsqlite3, с помощьюProgrammingError.bpo-41662: исправлен сбой при изменении списка параметров во время итерации в
sqlite3.bpo-34215: Уточнено сообщение об ошибке для
asyncio.IncompleteReadError, когдаexpectedравноNone.bpo-41316: исправлен модуль
tarfileдля записи только базового имени TAR-файла в заголовок сжатия GZIP.bpo-12800: Извлечение символической ссылки из tarball должно выполняться успешно и перезаписывать существующую символическую ссылку. Исправление: удаление существующего файла или символической ссылки перед извлечением. Основано на патче от Chris AtLee, Jeffrey Kintscher и Senthil Kumaran.
bpo-16936: Разрешён импорт
ctypes.wintypesв системах, отличных от Windows.bpo-40592:
shutil.which()теперь игнорирует пустые записи вPATHEXTвместо того, чтобы считать их совпадением.bpo-40492: Исправлена
--outfileдляcProfile/profile: теперь выходной файл записывается в исходный каталог, даже если профилируемая программа меняет рабочий каталог. PR от Anthony Sottile.bpo-40105: ZipFile усекает файлы, чтобы избежать повреждения, когда в режиме добавления (“a”) указан более короткий комментарий. Патч от Яна Мазура.
bpo-27321: Исправлено исключение KeyError, возникавшее при преобразовании email в строку, когда производилась попытка заменить несуществующий заголовок Content-Transfer-Encoding.
bpo-32793: Исправлена дублированная отладочная информация при вызове
smtplib.SMTP.connect().
Документация¶Documentation
bpo-42153: Исправлен URL для документов протокола IMAP.
bpo-41910: Документирована реализация по умолчанию
object.__eq__.bpo-41774: В разделе «Sequences (Tuples/Lists)» из FAQ по программированию добавлен вопрос «Как удалить несколько элементов из списка?».
bpo-39416: Документированы некоторые ограничения на строковые представления числовых классов по умолчанию.
Тесты¶Tests
bpo-41473: Повторное включение test_gdb на gdb 9.2 и новее: https://bugzilla.redhat.com/show_bug.cgi?id=1866884 ошибка исправлена в gdb 10.1.
bpo-42553: Исправлено состояние гонки в
test_asyncio.test_call_later(): не измерять производительность asyncio в модульном тестеcall_later(). Тест случайно падал на CI.bpo-40754: Включён модуль
_testinternalcapiв установщик Windows для набора тестов.bpo-41739: Исправлен test_logging.test_race_between_set_target_and_flush(): тест теперь ожидает завершения всех потоков, чтобы избежать утечки работающих потоков.
bpo-41944: Тесты для CJK-кодеков больше не вызывают
eval()для содержимого, полученного по HTTP.bpo-41939: Исправлен test_site.test_license_exists_at_url(): вызов
urllib.request.urlcleanup()для сброса глобальногоurllib.request._opener. Исправление от Victor Stinner.bpo-41561: test_ssl: пропускать test_min_max_version_mismatch, если TLS 1.0 недоступен
bpo-41602: Добавлены тесты для обработки SIGINT в модуле runpy.
bpo-41306: Исправлена ошибка в
test_tk.test_widgets.ScaleTest, возникающая при выполнении теста с Tk 8.6.10.
Сборка¶Build
bpo-42398: Исправлена гонка в «make regen-all» при использовании опции make -jN для параллельного запуска задач. Теперь скрипт clinic.py использует только атомарную запись файлов. Кроме того, сгенерированные файлы теперь остаются без изменений, если содержимое не поменялось, чтобы не изменять время модификации файла.
Windows¶
bpo-42120: Удалено определение макроса
copysign(в_copysign) в заголовках.bpo-38439: Обновление иконок для IDLE в пакете Windows Store.
bpo-41557: Обновление установщика Windows для использования SQLite 3.33.0.
bpo-38324: Предотвращение ошибок Unicode при доступе к некоторым данным локали в Windows.
macOS¶
bpo-38443: Опции
--enable-universalsdkи--with-universal-archsскрипта configure теперь проверяют, что указанные архитектуры могут быть использованы.bpo-41471: Игнорирование недопустимых длин префиксов в исключениях системного прокси.
bpo-41557: Обновление установщика macOS для использования SQLite 3.33.0.
IDLE¶
bpo-42426: Исправлено сообщение о смещении ошибки RE в searchengine.
bpo-42415: Докстринги для подсказок IDLE теперь получаются чаще с помощью inspect.getdoc.
bpo-33987: В основном завершено использование виджетов ttk, главным образом для редактора, настроек и поиска. Некоторые патчи от Mark Roseman.
bpo-41775: Использовать «IDLE Shell» в качестве заголовка оболочки.
bpo-40511: Набор открывающих и закрывающих круглых скобок внутри круглых скобок вызова функции больше не вызывает ненужное «мерцание» включения/выключения открытой подсказки вызова, например, при вводе в строковом литерале.
bpo-38439: Добавлена иконка IDLE размером 256×256 пикселей в файл .ico для Windows. Создана Andrew Clover. Удалены низкоцветные варианты gif из файла .ico.
C API¶
bpo-41986:
Py_FileSystemDefaultEncodeErrorsиPy_UTF8Modeснова доступны в ограниченном API.
Python 3.8.6 final¶
Дата выпуска: 2020-09-23
Ядро и встроенные модули¶Core and Builtins
bpo-41525: Теперь вывод
python --helpсодержит только ASCII-символы.
Библиотека¶Library
bpo-41817: исправлено
tkinter.EventTypeEnum, теперь все элементы являются строками, а не кортежамиbpo-41815: Исправлено падение SQLite3 при резервном копировании закрытой базы данных. Патч предоставлен Peter David McCormick.
bpo-41517: исправлена ошибка, позволявшая расширять перечисления с помощью множественного наследования
bpo-39587: использование правильного типа данных примеси при создании перечислений
bpo-41789: Учитывать переопределения
objectпри создании классаEnum(а именно__str__,__repr__,__format__и__reduce_ex__).bpo-39651: Исправлено состояние гонки в методе
call_soon_threadsafe()классаasyncio.ProactorEventLoop: ничего не делать, если сокет самопайпа (self-pipe) был закрыт.bpo-41720: исправлен
turtle.Vec2D.__rmul__()для аргументов, которые не являются int или float.bpo-39728: исправлено значение по умолчанию
_missing_, чтобы дубликатValueErrorне устанавливался в качестве__context__исходногоValueErrorbpo-37479: When
Enum.__str__is overridden in a derived class, the override will be used byEnum.__format__regardless of whether mixin classes are present.
Документация¶Documentation
bpo-35293: Исправлено предупреждение RemovedInSphinx40Warning при сборке документации. Патч от Dong-hee Na.
bpo-37149: Изменена ссылка на документацию по tkinter от Шипмана с archive.org на TkDocs. (Документация была удалена с сервера NMT.) Новая ссылка отвечает гораздо быстрее и включает краткое пояснение.
Тесты¶Tests
bpo-41731: Обеспечено прохождение test_cmd_line_script с опцией «-vv».
Windows¶
bpo-41744: Исправлен автоматический импорт файла props при использовании пакета Nuget.
IDLE¶
Python 3.8.6 release candidate 1¶
Дата выпуска: 2020-09-07
Ядро и встроенные модули¶Core and Builtins
bpo-41654: Исправляет аварийное завершение, возникавшее при уничтожении подклассов
MemoryError. Исправление от Pablo Galindo.bpo-41533: Освобождает стек, выделенный в
va_build_stack, еслиdo_mkstackзавершается неудачей и стек не являетсяsmall_stack.bpo-38156: Корректно обрабатывает прерывания, поступающие после EOF, в
PyOS_StdioReadline.
Библиотека¶Library
bpo-41696: исправлена обработка режима отладки в
asyncio.run(). Это позволяет установитьPYTHONASYNCIODEBUGили-X devдля включения режима отладки asyncio при использованииasyncio.run().bpo-39010: перезапуск
ProactorEventLoopв Windows больше не регистрирует ложныеConnectionResetErrors.bpo-41609: команда pdb whatis теперь правильно сообщает о методах экземпляра как «Method», а не «Function».
bpo-32751: при отмене задачи из-за тайм-аута
asyncio.wait_for()теперь будет ждать завершения отмены также в случае, когда тайм-аут <= 0, как это делается с положительными тайм-аутами.bpo-37658:
asyncio.wait_for()теперь правильно обрабатывает гонки между своей отменой и завершением обёрнутого ожидаемого объекта.bpo-40782: изменить метод asyncio.AbstractEventLoop.run_in_executor, чтобы он не был корутиной.
bpo-41520: исправлен регресс
codeop, который не позволял превращать предупреждения компиляции в ошибки.bpo-41503: исправлена гонка между setTarget и flush в logging.handlers.MemoryHandler.
bpo-41497: исправлена потенциальная ошибка UnicodeDecodeError в модуле dis.
bpo-41490: Обновление
ensurepipдля установки pip 20.2.1 и setuptools 49.2.1.bpo-41467: в Windows исправлено возвращаемое значение asyncio
recv_into()при закрытии сокета/канала (BrokenPipeError): возвращается0вместо пустой строки байтов (b'').bpo-41425: сделать пример документации tkinter запускаемым.
bpo-41384: возбуждается TclError вместо TypeError, когда неизвестная опция передаётся в tkinter.OptionMenu.
bpo-38731: Исправление
NameErrorв интерфейсе командной строкиpy_compile.bpo-41344: предотвратить создание
shared_memory.SharedMemoryобъектов с помощьюsize=0.bpo-40726: Обрабатывать случаи, когда
end_linenoравноNoneнаast.increment_lineno().bpo-31122: ssl.wrap_socket() теперь вызывает ssl.SSLEOFError вместо OSError, когда удалённая сторона закрывает соединение во время согласования TLS.
bpo-33660: Исправлен pathlib.PosixPath для корректного разрешения относительного пути, находящегося в корневом каталоге.
Документация¶Documentation
bpo-41624: Исправлена сигнатура
typing.Coroutine.bpo-40204: Включена опция
c_allow_pre_v3Sphinx 3.2 и отключена опцияc_warn_on_allowed_pre_v3для обеспечения совместимости документации с Sphinx 2 и Sphinx 3.bpo-41045: Добавлена документация по отладочной возможности f-строк.
bpo-41314: Изменён номер версии, когда
from __future__ import annotationsстановится значением по умолчанию, с4.0на3.10(вслед за изменениями в PEP 563).bpo-39883: Код, примеры и рецепты в документации Python теперь лицензированы также под более разрешительной лицензией BSD0 в дополнение к существующей лицензии Python 2.0.
Windows¶
IDLE¶
C API¶
bpo-41524: Исправлена ошибка в PyOS_mystrnicmp и PyOS_mystricmp, при которой указатели выходили за конец строки.
Python 3.8.5 final¶
Дата выпуска: 2020-07-20
Безопасность¶Security
Ядро и встроенные модули¶Core and Builtins
bpo-41295: Устраняет регрессию в CPython 3.8.4, при которой определение «__setattr__» в сценарии множественного наследования и вызов по цепочке иерархии могли завершаться неудачей, если в базовых типах были задействованы встроенные типы/типы расширений.
Библиотека¶Library
Документация¶Documentation
bpo-37703: Обновлена документация для всестороннего описания поведения gather.cancel().
Сборка¶Build
bpo-41302: Разрешена сборка Python 3.8 с libmpdec-2.5.0 для упрощения сопровождения в дистрибутивах Linux. Исправление от Felix Yan.
macOS¶
bpo-40741: Обновление установщика macOS для использования SQLite 3.32.3.
IDLE¶
bpo-41300: Сохранение файлов с не-ASCII символами. Исправлен регресс, выпущенный в 3.9.0b4 и 3.8.4.
Python 3.8.4 final¶
Дата выпуска: 2020-07-13
Безопасность¶Security
Ядро и встроенные модули¶Core and Builtins
bpo-41247: Всегда кэширует владельца работающего цикла при выполнении
asyncio.set_running_loop.bpo-41252: Исправляет некорректный подсчет ссылок в _ssl.c’s
_servername_callback().bpo-41218: В Python 3.8.3 наблюдался регресс: компиляция с ast.PyCF_ALLOW_TOP_LEVEL_AWAIT агрессивно помечала list comprehension флагом CO_COROUTINE. Теперь только list comprehension, использующие async/await, будут помечены как таковые.
bpo-41175: Защита от разыменования NULL-указателя внутри bytearrayobject, вызванного операцией
bytearray() + bytearray().bpo-39960: «Хак-проверка», которая предотвращает обход __setattr__() типа через вызов метода суперкласса, была переписана, чтобы поддерживать типы кучи, реализованные на C.
Библиотека¶Library
bpo-41235: Исправлена обработка ошибок в
ssl.SSLContext.load_dh_params().bpo-41193: Функция
write_history()atexit в дополнении readline теперь игнорирует любыеOSError, чтобы пропускать ошибки, если файловая система доступна только для чтения, вместо того чтобы игнорировать толькоFileNotFoundErrorиPermissionError.bpo-41043: Исправлено использование
glob()в stdlib: литеральная часть пути теперь всегда корректно экранируется.bpo-39384: Исправлен модуль email.contentmanager: теперь set_content() может устанавливать пустую строку.
IDLE¶
Python 3.8.4 release candidate 1¶
Дата выпуска: 2020-06-29
Безопасность¶Security
bpo-41004: Методы __hash__() классов ipaddress.IPv4Interface и ipaddress.IPv6Interface некорректно генерировали постоянные хеш-значения 32 и 128 соответственно. Это приводило к постоянным коллизиям хешей. Исправление использует hash() для генерации хеш-значений кортежа (address, mask length, network address).
bpo-39073: Запрет символов CR и LF в аргументах email.headerregistry.Address для защиты от атак внедрения заголовков.
Ядро и встроенные модули¶Core and Builtins
bpo-41094: Исправление ошибок декодирования при аудите при открытии файлов с не-ASCII именами в локали, отличной от UTF-8.
bpo-41056: Исправление ссылки на освобождённое стековое пространство во время запуска при построении sys.path с использованием относительной символьной ссылки, когда код передавался через -c. (обнаружено через Coverity)
bpo-35975: Stefan Behnel сообщил, что cf_feature_version используется даже если PyCF_ONLY_AST не установлен. Это противоречит намерению и задокументированному поведению, поэтому было исправлено.
bpo-40957: Исправление утечки ссылки в _Py_fopen_obj() при сбое PySys_Audit()
bpo-40870: Возбуждать
ValueErrorпри проверке пользовательских AST, где константыTrue,FalseиNoneиспользуются внутри узлаast.Name.bpo-40826: Исправлено использование GIL в
PyOS_Readline(): блокировать GIL для установки исключения и передачи состояния потока Python при проверке наличия ожидающего сигнала.bpo-40824: Неожиданные ошибки при вызове метода
__iter__больше не маскируютсяTypeErrorв оператореinи функцияхcontains(),indexOf()иcountOf()модуляoperator.bpo-40663: Корректная генерация аннотаций в тех случаях, когда скобки опущены, но требуются (например:
Type[(str, int, *other))]).
Библиотека¶Library
bpo-41138: Исправлен CLI модуля
traceдля исходных файлов Python с кодировкой, отличной от UTF-8.bpo-31938: Исправлены сигнатуры значений по умолчанию нескольких функций в модуле
select– автор Anthony Sottile.bpo-41068: Исправлено чтение файлов с не-ASCII именами из ZIP-архива сразу после их записи.
bpo-41058:
pdb.find_function()теперь корректно определяет кодировку исходного файла.bpo-41056: Исправлено разыменование нулевого указателя в модуле ssl при возникновении MemoryError в колбэке keylog. (обнаружено Coverity)
bpo-41048: Функция
mimetypes.read_mime_types()читает файл правил, используя кодировку UTF-8, а не кодировку локали. Патч от Srinivas Reddy Thatiparthy.bpo-40448:
ensurepipтеперь отключает использование кэшаpipпри установке встроенных версийpipиsetuptools. Патч от Krzysztof Konopko.bpo-40855: Функции стандартного отклонения и дисперсии в модуле statistics игнорировали свои аргументы mu и xbar.
bpo-40807: Прекращено троекратное повторение предупреждений в codeop._maybe_compile (используется в code.InteractiveInterpreter и IDLE).
bpo-40834: Исправить усечение при отправке строкового объекта с помощью _xxsubinterpreters.channel_send.
bpo-38488: Обновить ensurepip для установки pip 20.1.1 и setuptools 47.1.0.
bpo-40767:
webbrowserтеперь корректно находит браузер по умолчанию в чистых системах Wayland, проверяя переменную окружения WAYLAND_DISPLAY. Патч предоставлен Jérémy Attali.bpo-40795: Модуль
ctypes: Если ctypes не удаётся преобразовать результат колбэка или если функция колбэка ctypes вызывает исключение, теперь вызывается sys.unraisablehook с установленным исключением. Раньше ошибка записывалась в stderr с помощьюPyErr_Print().bpo-30008: Исправить код
sslдля совместимости со сборками OpenSSL 1.1.x, использующимиno-deprecatedи--api=1.1.0.bpo-40614:
ast.parse()не будет разбирать самодокументирующиеся выражения в f-строках, если переданноеfeature_versionменьше(3, 8).bpo-40626: Добавлено расширение файла .h5 как MIME-тип application/x-hdf5 в соответствии с рекомендацией HDF Group для файлов данных в формате HDF5. Патч предоставлен Марком Швабом.
bpo-25872:
linecacheмогла аварийно завершаться сKeyErrorпри доступе из нескольких потоков. Исправление от Michael Graczyk.bpo-40597: Если строки текстового содержимого длиннее, чем policy.max_line_length, всегда используется content-encoding, чтобы гарантировать их перенос.
bpo-40515: Модули
sslиhashlibтеперь активно проверяют, что OpenSSL собран с поддержкой потоков. Python 3.7.0 сделал поддержку потоков обязательной и больше не работает безопасно со сборками без поддержки потоков.bpo-13097:
ctypesтеперь вызываетArgumentError, когда колбэк вызывается с более чем 1024 аргументами.bpo-40457: Модуль ssl теперь поддерживает сборки OpenSSL без методов TLS 1.0 и 1.1.
bpo-39830: Добавлен
zipfile.Pathв__all__в модулеzipfile.bpo-40025: Возбуждать TypeError, если _generate_next_value_ определён после членов. Патч от Ethan Onstott.
bpo-39244: Исправлено
multiprocessing.context.get_all_start_methods, чтобы правильно возвращать метод по умолчанию первым в macOS.bpo-39040: Исправлен разбор недопустимых параметров mime-заголовков путём сжатия пробелов между закодированными словами в bare-quote-string.
bpo-35714:
struct.errorтеперь вызывается, если в строке форматаstructесть нулевой символ.bpo-36290: Узлы AST теперь вызывают
TypeErrorпри конфликтующих именованных аргументах. Патч предоставлен Реми Лапейром.bpo-29620:
assertWarns()больше не вызываетRuntimeException, когда при доступе к__warningregistry__модуля происходит импорт нового модуля, или когда новый модуль импортируется в другом потоке. Патч от Kernc.bpo-34226: Исправлено
cgi.parse_multipartбез content_length. Патч от Роджера Дурана.
Тесты¶Tests
bpo-41085: Исправлено целочисленное переполнение в методе
array.array.index()на 64-разрядной Windows для индекса больше2**31.bpo-38377: В Linux пропускать тесты, использующие multiprocessing, если текущий пользователь не может создать файл в каталоге
/dev/shm/. Добавлена функцияskip_if_broken_multiprocessing_synchronize()в модульtest.support.bpo-41009: Исправлено использование декораторов
support.require_{linux|mac|freebsd}_version()в качестве декоратора класса.bpo-41003: Исправлено
test_copyreg, когда установленnumpy:test.pickletesterтеперь сохраняет/восстанавливает фильтры предупреждений при импортеnumpy, чтобы игнорировать фильтры, установленныеnumpy.bpo-40964: Отключены удалённые тесты
imaplib: хост cyrus.andrew.cmu.edu блокирует входящие соединения.bpo-40055: distutils.tests теперь сохраняет/восстанавливает фильтры предупреждений, оставляя их без изменений. Импорт тестов приводит к импорту docutils, который импортирует pkg_resources, что добавляет фильтр предупреждений.
bpo-34401: Исправление test_gdb для корректной работы на HP-UX. Исправление от Michael Osipov.
Сборка¶Build
Windows¶
bpo-41074: Исправлена поддержка не-ASCII имён в функциях
msilib.OpenDatabase()иmsilib.init_database(), а также не-ASCII SQL в методеmsilib.Database.OpenView().bpo-40164: Обновление Windows OpenSSL до версии 1.1.1g
bpo-39631: Изменение зарегистрированного MIME-типа для файлов
.pyна Windows наtext/x-pythonвместоtext/plain.bpo-40677: Явное определение IO_REPARSE_TAG_APPEXECLINK на случай, если в старом Windows SDK его нет.
bpo-40650: Добавлен winsock2.h в pytime.c для timeval.
bpo-39148: Добавлена поддержка IPv6 для датаграммных конечных точек
asyncioв ProactorEventLoop. Возбуждаемое исключение для неизвестных семейств адресов изменено на ValueError, так как оно не поступает от Windows API.
macOS¶
bpo-39580: Предотвращение открытия окна Finder при запуске установщика из командной строки. Исправление предоставлено Rick Heil.
bpo-41100: Исправление ошибки configure при сборке на macOS 11. Обратите внимание, что текущий релиз Python был выпущен вскоре после первой предварительной версии для разработчиков macOS 11 (Big Sur); есть и другие известные проблемы со сборкой и запуском в этой предварительной версии. Ожидается, что Big Sur будет полностью поддерживаться в будущем исправляющем релизе Python 3.8.x и в версии 3.9.0.
bpo-41005: Исправлена проблема с настройками XDG, не позволявшая macOS открывать браузер в webbrowser.py.
bpo-40741: Обновление установщика macOS для использования SQLite 3.32.2.
IDLE¶
Инструменты/Демонстрации¶Tools/Demos
bpo-40479: Обновление вспомогательного инструмента multissltest для тестирования с последними версиями OpenSSL 1.0.2, 1.1.0, 1.1.1 и 3.0.0-alpha.
bpo-40163: Исправление инструмента multissltest. OpenSSL изменил URL загрузки для старых выпусков. Теперь multissltest пытается загрузить и с текущего, и со старого URL.
Python 3.8.3 final¶
Дата выпуска: 2020-05-13
Ядро и встроенные модули¶Core and Builtins
bpo-40527: Исправлен разбор аргументов командной строки: сообщения об ошибках больше не записываются несколько раз в stderr.
bpo-40417: Исправлено предупреждение об устаревании модуля imp при вызове PyImport_ReloadModule. Патч от Robert Rouhani.
bpo-39562: Константные значения флагов future в модуле
__future__обновлены, чтобы предотвратить пересечение с флагами компилятора. РанееPyCF_ALLOW_TOP_LEVEL_AWAITконфликтовало сCO_FUTURE_DIVISION.
Библиотека¶Library
bpo-40559: Исправлена возможная утечка памяти в C-реализации
asyncio.Task.bpo-40355: Улучшено сообщение об ошибках в
ast.literal_eval()при наличии некорректных узловast.Dictвместо молчаливого игнорирования любых несоответствующих элементов. Патч от Curtis Bucher.bpo-40459:
platform.win32_ver()теперь создаёт корректные строки ptype вместо пустых строк.bpo-40398:
typing.get_args()теперь всегда возвращает пустой кортеж для специальных обобщённых псевдонимов.
Документация¶Documentation
bpo-40561: Добавлены докстринги для функций открытия в webbrowser.
bpo-39435: Исправлена неверная сигнатура для
pickle.loads()в документации.
Windows¶
bpo-40458: Увеличен зарезервированный стек для предотвращения аварийного переполнения на Windows.
C API¶
bpo-40412: Обнуление inittab_copy во время финализации, что предотвращает крах при последующих инициализациях интерпретатора во встроенном сценарии. Патч от Gregory Szorc.
Python 3.8.3 release candidate 1¶
Дата выпуска: 2020-04-29
Безопасность¶Security
bpo-40121: Исправление событий аудита, возникающих при создании нового сокета.
bpo-38576: Запрещены управляющие символы в именах хостов в http.client, адресует CVE-2019-18348. Такие потенциально вредоносные URL-адреса с внедрением заголовков теперь вызывают исключение InvalidURL.
bpo-39503: CVE-2020-8492: Класс
AbstractBasicAuthHandlerмодуляurllib.requestиспользует неэффективное регулярное выражение, которое может быть использовано злоумышленником для отказа в обслуживании. Исправлено регулярное выражение для предотвращения катастрофического возврата. Уязвимость сообщена Ben Caller и Matt Schwager.
Ядро и встроенные модули¶Core and Builtins
bpo-20526: Исправить
PyThreadState_Clear().PyThreadState.frameявляется заёмной ссылкой, а не сильной ссылкой:PyThreadState_Clear()не должен вызыватьPy_CLEAR(tstate->frame).bpo-39965: Корректное возбуждение
SyntaxError, если await используется внутри не-асинхронных функций и установленPyCF_ALLOW_TOP_LEVEL_AWAIT(как в asyncio REPL). Исправление от Pablo Galindo.bpo-39562: Разрешение выполнения асинхронных выражений на верхнем уровне при указании флага
PyCF_ALLOW_TOP_LEVEL_AWAIT. Исправление от Batuhan Taskaya.bpo-38894: Исправление ошибки, которая приводила к неполным результатам при вызове
pathlib.Path.globпри наличии символических ссылок, указывающих на файлы, на чтение которых у пользователя нет прав. Исправление от Pablo Galindo и Matt Wozniski.bpo-39871: Исправление возможного
SystemErrorвmath.{atan2,copysign,remainder}(), когда первый аргумент не может быть преобразован вfloat. Исправление от Zackery Spytz.bpo-39776: Исправление состояния гонки, при котором потоки, созданные PyGILState_Ensure(), могли получить дублирующийся идентификатор.
Это затрагивает потребителей tstate->id, такие как механизм кеширования contextvar, который мог возвращать недействительные кешированные объекты при высокой нагрузке потоков (наблюдалось во встраиваемых сценариях).
bpo-39778: Исправление падения из-за некорректной обработки слабых ссылок в классах
collections.OrderedDict. Исправление от Pablo Galindo.bpo-39520: Исправление обратной обработки расширенных срезов без элементов (
foo[:,]). Исправление от Batuhan Taskaya.bpo-22490: Предотвращение утечки переменной окружения
__PYVENV_LAUNCHER__в сессию интерпретатора на macOS.
Библиотека¶Library
bpo-40138: Исправить реализацию
os.waitpid()в Windows для кода возврата большего, чемINT_MAX >> 8. Статус выхода теперь интерпретируется как беззнаковое число.bpo-39942: Установить “__main__” в качестве имени модуля по умолчанию, когда “__name__” отсутствует в
typing.TypeVar. Патч от Вейпэн Хонга.bpo-40330: В
ShareableList.__setitem__()проверять размер нового строкового элемента после кодирования его в utf-8, а не до.bpo-40287: Исправлен
SpooledTemporaryFile.seek(): теперь возвращает позицию.bpo-40260: Обеспечить, чтобы
modulefinderиспользовалio.open_code()и учитывал комментарии о кодировке.bpo-40196: Исправлена ошибка в модуле
symtable, из-за которой глобальные переменные ошибочно сообщались как локальные. Патч от Pablo Galindo.bpo-40126: Исправлено откатывание нескольких патчей в unittest.mock. Метод
__exit__()патчера теперь никогда не вызывается, если его__enter__()завершился неудачей. Возврат true из__exit__()теперь подавляет исключение.bpo-40089: Исправлен threading._after_fork(): если fork не был вызван потоком, порождённым threading.Thread, threading._after_fork() теперь создаёт экземпляр _MainThread для _main_thread вместо экземпляра _DummyThread.
bpo-39503:
AbstractBasicAuthHandlerизurllib.requestтеперь разбирает все HTTP-заголовки WWW-Authenticate и принимает несколько вызовов (challenge) на заголовок: используется realm первого Basic-вызова.bpo-40014: Исправлен
os.getgrouplist(): если функцияgetgrouplist()завершается неудачей, потому что список групп слишком мал, повторить с большим списком групп. В случае неудачи реализацияgetgrouplist()в glibc устанавливаетngroupsв общее количество групп. Для других реализаций удваивать размер списка групп.bpo-40016: В docstring модуля re разъяснена взаимосвязь между встроенными флагами компиляции и флагами аргументов.
bpo-39953: Обновлена внутренняя таблица кодов ошибок OpenSSL в модуле
ssl.bpo-39360: Обеспечен выход всех рабочих процессов при неявном завершении
multiprocessing.Poolчерез обработчики финализации модуля multiprocessing. Это устраняет взаимоблокировку, которая могла возникнуть, если Pool не был корректно завершён через контекстный менеджер или вызовmultiprocessing.Pool.terminate. Исправление от Batuhan Taskaya и Pablo Galindo.bpo-39652: Имя столбца, найденное в
sqlite3.Cursor.description, теперь обрезается по первому символу ‘[’ только если установлена опция PARSE_COLNAMES.bpo-39915: Обеспечено, что
unittest.mock.AsyncMock.await_args_listсодержит объекты вызовов в порядке ожидаемых аргументов, а не используетunittest.mock.Mock.call_args, который содержит последнее значение вызова. Исправление от Karthikeyan Singaravelan.bpo-38662: Модуль
ensurepipтеперь вызываетpipчерез модульrunpy. Поэтому он больше не привязан к внутреннему программному интерфейсу встроенной версииpip, что упрощает обновление до более новой версииpipкак в составе Python, так и для распространителей.bpo-39916: Более надёжное использование
os.scandir()вPath.glob(). Больше не выдаётся ResourceWarning при прерывании.bpo-39850:
multiprocessingтеперь поддерживает абстрактные адреса сокетов (если абстрактные сокеты поддерживаются на используемой платформе). Исправление от Pablo Galindo.bpo-39828: Исправлен
json.tool, чтобы перехватыватьBrokenPipeError. Патч от Dong-hee Na.bpo-13487: Предотвращена возможная ошибка «RuntimeError: dictionary changed size during iteration» в
inspect.getmodule()при попытке обходаsys.modules.bpo-39794: Добавлен параметр сборки –without-decimal-contextvar. Он включает поточный контекст вместо контекста корутины.
bpo-39769: Параметр ddir функции
compileall.compile_dir()и флаг командной строки-dв compileall больше не записывают ошибочный путь в генерируемый pyc-файл для подмодулей, находящихся ниже корня компилируемого дерева каталогов. Это исправляет регрессию, появившуюся в Python 3.5.bpo-39517: Исправлен runpy.run_path() при использовании pathlike-объектов
bpo-39764: Исправление AttributeError при вызове get_stack на объекте PyAsyncGenObject Задача
bpo-30566: Исправлена
IndexErrorпри попытке декодировать недопустимую строку с помощью кодека punycode.bpo-39667: Исправлено снижение производительности в
zipfile.Path, обнаруженное в zipp 3.0. Сохраняя совместимость, это изменение не рекомендует использованиеzipfile.Path.openиз-за изменения сигнатуры в Python 3.9. Для совместимости между Python 3.8 и более поздними версиями рекомендуется использоватьzipp.Pathна Python 3.8.x и более ранних версиях.bpo-39548: Исправлена обработка заголовка в
urllib.request.AbstractDigestAuthHandler, когда необязательный параметрqopотсутствует.bpo-38971: Открытый вопрос в BPO указывал на желание привести реализацию codecs.open() к паритету с io.open(), которая реализует try/except, чтобы гарантировать закрытие файлового потока до того, как будет вызвано исключение.
bpo-38410: Правильная обработка ошибок
sys.audit()вsys.set_asyncgen_hooks(). Основано на исправлении от Zackery Spytz.bpo-36541: lib2to3 теперь распознаёт именованные выражения присваивания (оператор walrus,
:=).bpo-31758: Предотвращение аварийных завершений при использовании неинициализированного объекта
_elementtree.XMLParser. Патч от Oren Milman.
Документация¶Documentation
bpo-27635: Документация pickle неверно утверждала, что
__new__не вызывается по умолчанию при распаковке.bpo-39879: Обновлена документация модели данных, чтобы включить сохранение порядка вставки
dict(). Патч от Furkan Onder и Samy Lahfa.bpo-13790: Изменено слово ‘string’ на ‘specification’ в документации по format.
bpo-17422: Справочник по языку больше не ограничивает пространства имён классов по умолчанию только словарями.
bpo-39530: Исправлена вводящая в заблуждение документация о сравнениях чисел разных типов.
bpo-39718: Обновлена документация
token, чтобы отразить дополнения в Python 3.8bpo-39677: Изменено имя операнда MAKE_FUNCTION с argc на flags для модуля
disbpo-38387: Документирован макрос
PyDoc_STRVARв справочнике C-API.
Тесты¶Tests
bpo-40436: test_gdb и test.pythoninfo теперь проверяют код завершения команды gdb.
bpo-40162: Обновлена конфигурация Travis CI до OpenSSL 1.1.1f.
bpo-40146: Обновлён OpenSSL до версии 1.1.1f в Azure Pipelines.
bpo-40019: test_gdb теперь пропускает тесты, если обнаруживает, что gdb не смог прочитать отладочную информацию, потому что бинарный файл Python оптимизирован.
bpo-27807:
test_site.test_startup_imports()теперь пропускается, если путьsys.pathсодержит файл.pth.bpo-39793: Используется тот же домен при тестировании
make_msgid. Патч от Batuhan Taskaya.bpo-1812: Исправлена обработка символов новой строки в doctest.testfile при загрузке из пакета, загрузчик которого имеет метод get_data. Патч от Peter Donis.
bpo-37957: test.regrtest теперь может принимать список шаблонов тестов для игнорирования (с помощью аргумента -i/–ignore) или файл со списком шаблонов для игнорирования (с помощью аргумента –ignore-file). Патч от Pablo Galindo.
bpo-38502: test.regrtest теперь использует группы процессов в режиме multiprocessing (опция командной строки -jN), если группы процессов доступны: если доступны функции
os.setsid()иos.killpg().
Сборка¶Build
bpo-38360: Поддержка одноаргументной формы флага -isysroot для macOS.
bpo-40204: Зафиксирована версия Sphinx на 1.8.2 в
Doc/Makefile.bpo-40158: Исправлены свойства MSBuild CPython в пакете NuGet (build/native/python.props).
bpo-38527: Исправлена проверка конфигурации на Solaris для «float word ordering»: иногда использовалась неверная команда «grep». Патч от Arnon Yaari.
Windows¶
bpo-40164: Обновление Windows до OpenSSL 1.1.1f
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¶
IDLE¶
bpo-27115: Для «Go to Line» используется подкласс Query box со стандартным поведением IDLE и улучшенной проверкой ошибок.
bpo-39885: Поскольку щелчок для вызова контекстного меню IDLE перемещает курсор, любое выделение текста должно было и теперь очищается.
bpo-39852: Команда «Go to line» теперь очищает любое выделение, предотвращая случайное удаление. Она также обновляет номера строки и столбца на строке состояния.
bpo-39781: Выделение строк контекста кода больше не вызывает перехода.
bpo-38439: Добавлен значок IDLE размером 256×256 пикселей для поддержки более современных окружений. Создан Andrew Clover. Удалён неиспользуемый файл значка macOS idle.icns .
bpo-38689: IDLE больше не будет зависать, когда inspect.signature выдаёт ошибку при получении подсказки по вызову.
Инструменты/Демонстрации¶Tools/Demos
bpo-40179: Исправлен перевод
#elifв Argument Clinic.bpo-36184: Портирован python-gdb.py на FreeBSD. python-gdb.py теперь проверяет имя функции «take_gil», чтобы определить, пытается ли фрейм захватить GIL, вместо проверки «pthread_cond_timedwait», которая специфична для Linux и может относиться к другому условию, а не к GIL.
bpo-39889: Исправлено
unparse.pyдля расширенных срезов, содержащих один элемент (например,a[i:j,]). Удалены избыточные кортежи при индексации кортежем (например,a[i, j]).
C API¶
bpo-35370: Если
PySys_Audit()завершается ошибкой вPyEval_SetProfile()илиPyEval_SetTrace(), ошибка логируется как невыбрасываемое исключение.bpo-39884:
PyDescr_NewMethod()иPyCFunction_NewEx()теперь включают имя метода в сообщение об ошибке SystemError «bad call flags» для упрощения отладки.bpo-38643:
PyNumber_ToBase()теперь вызываетSystemErrorвместо аварийного завершения при вызове с недопустимым основанием.bpo-38913: Исправлен segfault в
Py_BuildValue()при вызове с форматом, содержащим «#», и неопределённом PY_SSIZE_T_CLEAN, когда установлено исключение.
Python 3.8.2 final¶
Дата выпуска: 2020-02-24
Ядро и встроенные модули¶Core and Builtins
bpo-39382: Исправлена ошибка use-after-free в пути одиночного наследования
issubclass(), когда__bases__объекта имеет одну ссылку, и то же самое для его первого элемента. Патч от Yonatan Goldschmidt.bpo-39427: Описать все возможности для опции
-Xв разделе справки командной строки. Исправление от Pablo Galindo.
Библиотека¶Library
bpo-39649: Удалена устаревшая проверка на
__args__в bdb.Bdb.format_stack_entry.bpo-39681: Исправлен регресс, при котором C-модуль pickle не позволял десериализовать данные из файлоподобного объекта, не поддерживающего метод readinto().
bpo-39546: Исправлен регресс в
ArgumentParser, когдаallow_abbrev=Falseигнорировался для длинных опций, использующих префикс, отличный от «-».bpo-39432: реализован алгоритм PEP-489 для не-ASCII имён символов "PyInit_…" в distutils, чтобы он экспортировал правильный init-символ и в Windows.
Документация¶Documentation
bpo-17422: в справочнике по языку теперь указаны ограничения на пространства имён классов. Адаптировано из патча от Ethan Furman.
bpo-39572: Обновлена документация флага
totalв TypeDict.bpo-39654: в документации pyclbr заменено 'class' на 'module' где необходимо, и добавлен комментарий readmodule. Патч от Hakan Çelik.
IDLE¶
bpo-39663: добавлены тесты для pyparse find_good_parse_start().
Python 3.8.2 release candidate 2¶
Дата выпуска: 2020-02-17
Безопасность¶Security
Ядро и встроенные модули¶Core and Builtins
bpo-39619: Включена поддержка
os.chroot()в системах HP-UX.bpo-39606: Исправлена регрессия, вызванная исправлением для bpo-39386, которая не позволяла вызвать
acloseдля асинхронного генератора, который уже был закрыт или исчерпан.bpo-39453: Исправлена возможная ошибка в
list.__contains__(), когда список изменяется во время сравнения элементов. Патч от Dong-hee Na.bpo-39219: Синтаксические ошибки, возникающие в токенизаторе, теперь всегда устанавливают правильные атрибуты «text» и «offset».
Библиотека¶Library
bpo-27657: Исходное исправление для bpo-27657, «Исправление urlparse() с числовыми путями» (PR 16839), включённое в 3.8.1, непреднамеренно внесло изменение поведения, которое нарушило несколько сторонних пакетов, полагавшихся на исходное неопределённое поведение при разборе. Это изменение отменено в 3.8.2, восстанавливая поведение версии 3.8.0 и более ранних.
bpo-39474: Исправлена начальная позиция AST для выражений, таких как
(a)(b),(a)[b]и(a).b.bpo-21016: Модули
pydocиtraceтеперь используют модульsysconfigдля получения пути к стандартной библиотеке Python, чтобы поддерживать нестандартные пути установки, такие как/usr/lib64/python3.9/на Fedora. Исправление от Яна Матейека.bpo-39595: Повышена производительность zipfile.Path для файлов с большим количеством записей. Также улучшена производительность и исправлена небольшая проблема, как описано в importlib_metadata 1.5.
IDLE¶
bpo-39600: в окне настройки шрифта удалены повторяющиеся названия шрифтов.
Python 3.8.2 release candidate 1¶
Дата выпуска: 2020-02-10
Безопасность¶Security
Ядро и встроенные модули¶Core and Builtins
bpo-39579: Изменено конечное смещение колонки узлов
Attribute, создаваемых вast_for_dotted_name, чтобы оно указывало на конец текущего узла, а не на конец последнего узлаNAME.bpo-39510: Исправлен segfault в методе
readinto()на закрытом BufferedReader.bpo-39492: Исправлен цикл ссылок в C Pickler, который препятствовал сборке мусора удалённых, сериализованных объектов.
bpo-39421: Исправление возможных сбоев при работе с функциями модуля
heapqи пользовательскими операторами сравнения.bpo-39386: Предотвращение двойного ожидания асинхронного итератора.
bpo-39235: Исправлена конечная позиция в AST для одиночного выражения-генератора в вызове функции, например f(i for i in a).
bpo-39209: Исправлена обработка многострочных токенов в интерактивном режиме. Исправление от Pablo Galindo.
bpo-39216: Исправлена оптимизация свёртки констант для позиционных аргументов (только позиционные) – Anthony Sottile.
bpo-39215: Исправлено
SystemError, когда во вложенной функции есть аннотация для позиционного аргумента – Anthony Sottile.bpo-38588: Исправлены возможные крахи в dict и list при вызове
PyObject_RichCompareBool().bpo-38610: Исправлены возможные крахи в нескольких методах списков за счёт удержания сильных ссылок на элементы списка при вызове
PyObject_RichCompareBool().
Библиотека¶Library
bpo-39590: Collections.deque теперь хранит сильные ссылки во время deque.__contains__ и deque.count, что устраняет сбои.
bpo-38149:
sys.audit()теперь вызывается только один раз за вызовglob.glob()иglob.iglob().bpo-39450: Удаляются пробельные символы из docstring перед возвратом его из
unittest.case.shortDescription().bpo-39493: Отметить
typing.IO.closedкак свойствоbpo-39485: Исправлена ошибка в
unittest.mock.create_autospec(), которая вызывала сообщение о неверном количестве аргументов для пользовательских дескрипторов, определённых в модуле расширения, возвращающих функции.bpo-39082: Разрешить AsyncMock корректно патчить статические и классовые методы
bpo-39430: Исправлено состояние гонки при ленивом импорте в
tarfile.bpo-39390: Исправлена регрессия с колбэком
ignoreвshutil.copytree(). Типы аргументов теперь снова str и List[str].bpo-39389: Запись точных метаданных уровня сжатия в
gzipархивах вместо постоянного указания максимального сжатия.bpo-39274:
bool(fraction.Fraction)теперь возвращает булево значение даже если (numerator != 0) не возвращает булево значение (например, число из numpy).bpo-39297: Улучшена производительность обнаружения дистрибутивов importlib.metadata и устойчивость к недоступным записям sys.path (importlib_metadata v1.4.0).
bpo-39242: Обновлён домен Gmane с news.gmane.org на news.gmane.io который используется для примеров
NNTPсервера новостей и тестов nntplib.bpo-38907: В скрипте http.server восстановлена привязка к IPv4 в Windows.
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: Правильная расстановка скобок в filter-выражениях, содержащих лямбда-выражения в mod:
lib2to3. Патч от Dong-hee Na.bpo-39142: В logging.config.dictConfig внесено изменение, чтобы избежать преобразования экземпляров именованных кортежей в ConvertingTuple. Предполагается, что именованные кортежи слишком специализированы, чтобы обращаться с ними как с обычными кортежами; если пользователю именованных кортежей требуется функциональность ConvertingTuple, ему придётся реализовать её самостоятельно в своём классе именованного кортежа.
bpo-39129: Исправлен путь импорта для
asyncio.TimeoutErrorbpo-39057:
urllib.request.proxy_bypass_environment()теперь игнорирует начальные точки и больше не игнорирует завершающий символ новой строки.bpo-39056: Исправлена обработка недопустимой категории предупреждений в опции -W. Больше не импортируется модуль re, если он не нужен.
bpo-39055:
base64.b64decode()сvalidate=Trueтеперь вызывает binascii.Error, если ввод заканчивается одним символом\n.bpo-39033: Исправлен
NameErrorвzipimport. Патч от Картикеяна Сингаравелана.bpo-38878: Исправлен __subclasshook__ у
os.PathLike, чтобы возвращать корректный результат при наследовании. Исправление от Bar Harel.bpo-35182: Исправлен сбой при последующем вызове
Popen.communicate(), когда дочерний процесс уже закрыл какой-либо перенаправленный стандартный поток, но всё ещё продолжает выполняться. Исправление от Andriy Maletsky.bpo-38473: Использовать сигнатуру внутреннего mock-объекта для методов с автоматической спецификацией, присоединённых с помощью
unittest.mock.attach_mock(). Исправление от Karthikeyan Singaravelan.bpo-38293: Добавлена поддержка
copy.copy()иcopy.deepcopy()для объектовproperty().
Документация¶Documentation
bpo-39153: уточнена семантика подсчёта ссылок для следующих функций: - PyObject_SetItem - PyMapping_SetItemString - PyDict_SetItem - PyDict_SetItemString
bpo-39392: поясняется, что при заливке с помощью turtle области перекрытия могут остаться незаполненными.
bpo-39381: Упомянуть в документации, что
asyncio.get_event_loop()неявно создаёт новый цикл событий только при вызове из главного потока.bpo-38918: Добавлена запись для
__module__в разделы «function» и «method» таблицы типов и членов документации inspectbpo-3530: В документации модуля
astисправить вводящий в заблуждение примерNodeTransformerи добавить рекомендации о том, когда использовать функциюfix_missing_locations.
Тесты¶Tests
bpo-39502: пропускать test_zipfile.test_add_file_after_2107() если
time.localtime()завершается сOverflowError. Например, это происходит на AIX 6.1.bpo-38546: Исправлен test_ressources_gced_in_workers() из test_concurrent_futures: явная остановка менеджера для предотвращения утечки дочернего процесса, работающего в фоне после завершения теста.
Сборка¶Build
bpo-39144: Цели сборки ctags и etags теперь включают Modules/_ctypes и исходные файлы стандартной библиотеки Python.
Windows¶
bpo-39439: учитывать путь Python, когда активна виртуальная среда (virtualenv) на Windows.
bpo-39393: улучшено сообщение об ошибке при попытке загрузки DLL с неразрешёнными зависимостями.
bpo-38883:
home()иexpanduser()в Windows теперь предпочитаютUSERPROFILEи больше не используютHOME, которые обычно не устанавливаются для обычных учётных записей. Это снова делает их поведение похожим наos.path.expanduser(), которое было изменено, чтобы игнорироватьHOMEв 3.8, см. bpo-36264.bpo-39185: скрипт build.bat получил дополнительные опции для очень тихого вывода (-q) и очень подробного вывода (-vv)
IDLE¶
bpo-30780: добавлены оставшиеся тесты configdialog для вкладок кнопок, подсветки и клавиш.
bpo-39388: Кнопка «Отмена» в настройках IDLE теперь отменяет ожидающие изменения
bpo-39050: Снова включить работу кнопки «Справка» в диалоге настроек IDLE.
bpo-34118: Пометьте memoryview, range и tuple как классы, так же как list и т.д., в списке встроенных функций в справочнике библиотеки.
bpo-38792: Закрывать подсказку вызова в оболочке IDLE, если происходит
KeyboardInterruptили перезапуск оболочки. Исправление от Zackery Spytz.bpo-32989: Добавлены тесты для метода editor.newline_and_indent_event. Удалён мёртвый код из метода pyparse.find_good_parse_start.
Python 3.8.1 final¶
Дата выпуска: 2019-12-18
Ядро и встроенные модули¶Core and Builtins
bpo-39080: Исправлено значение end_col_offset для узлов AST Starred Expression, когда они входят в число элементов атрибута args узлов Call AST.
bpo-39031: При разборе узла «elif» атрибуты lineno и col_offset узла теперь указывают на ключевое слово «elif», а не на его условие, что приводит к согласованности с узлом «if». Патч от Лисандроса Николау.
bpo-39008:
PySys_Audit()теперь требует использованияPy_ssize_tдля аргументов размера в строке форматирования, независимо от того, был лиPY_SSIZE_T_CLEANопределён во время включения.
Библиотека¶Library
bpo-39022: Обновлён importlib.metadata – включены улучшения из importlib_metadata 1.3, включая улучшенную сериализацию точек входа (EntryPoints) и улучшенную документацию для пользовательских искателей.
bpo-38811: Исправлено необработанное исключение в
pathlibпри отсутствииos.link(). Патч от Toke Høiland-Jørgensen.bpo-36406: Обработка пакетов пространства имён (namespace packages) в
doctest. Патч от Karthikeyan Singaravelan.
Тесты¶Tests
bpo-38546: Тесты multiprocessing и concurrent.futures теперь останавливают процесс resource tracker при завершении тестов.
Windows¶
macOS¶
bpo-38295: Предотвращён сбой test_relative_path в test_py_compile на macOS Catalina.
IDLE¶
Python 3.8.1 release candidate 1¶
Дата выпуска: 2019-12-09
Безопасность¶Security
bpo-38945: Символы новой строки теперь экранируются при uu-кодировании, чтобы предотвратить их попадание в раздел содержимого закодированного файла. Это предотвращает вредоносное или случайное изменение данных в процессе декодирования.
bpo-37228: Из-за серьёзных проблем безопасности параметр reuse_address функции
asyncio.loop.create_datagram_endpoint()больше не поддерживается. Это связано с поведениемSO_REUSEADDRв UDP. Подробнее см. документациюloop.create_datagram_endpoint(). (Авторы: Kyle Stanley, Antoine Pitrou и Yury Selivanov, bpo-37228.)bpo-38722:
runpyтеперь используетio.open_code()для открытия файлов с кодом. Патч от Jason Killen.bpo-38804: Исправлена уязвимость ReDoS в
http.cookiejar. Патч от Бена Коллера.bpo-38622: Добавлены дополнительные события аудита для модуля
ctypes.bpo-38418: Исправлено событие аудита для
os.system(): теперь оно называетсяos.system.
Ядро и встроенные модули¶Core and Builtins
bpo-38673: В режиме REPL не переключаться на PS2, если строка начинается с комментария или пробела. На основе работы Батухана Ташкая.
bpo-38922: Вызов
replaceдля объекта кода теперь вызывает аудит-событиеcode.__new__.bpo-38920: Добавлены аудит-хуки для случаев вызова
sys.excepthook()иsys.unraisablehook()bpo-38892: Улучшена документация для таблицы аудит-событий и функций.
bpo-38707:
MainThread.native_idтеперь корректно сбрасывается в дочерних процессах, порождённых с помощьюmultiprocessing.Process, вместо сохранения родительского значения.bpo-38640: Исправлена ошибка в компиляторе, которая приводила к возникновению исключения при наличии операторов break и continue внутри циклов while с условием, всегда равным False. Патч от Pablo Galindo.
bpo-38535: Исправлены номера строк и смещения столбцов для узлов AST, соответствующих вызовам без аргументов в декораторах.
bpo-38525: Исправлена ошибка сегментации при использовании обратных итераторов пустых объектов
dict. Патч от Dong-hee Na и Inada Naoki.bpo-35409: Игнорировать исключения GeneratorExit при выбрасывании исключения в корутину aclose асинхронного генератора.
Библиотека¶Library
bpo-39006: Исправлен asyncio при отсутствии модуля ssl: проверять экземпляр ssl.SSLSocket только если модуль ssl доступен.
bpo-38708: Исправлена потенциальная ошибка IndexError в парсере email при разборе пустого msg-id.
bpo-38698: Добавлен новый токен
InvalidMessageIDв парсер email для представления недопустимых заголовков Message-ID. Также добавлены дефекты, когда после разбора заголовка остаётся значение.bpo-38979: Возвращать класс из
ContextVar.__class_getitem__для упрощения создания подклассов.bpo-38986: Сделать repr ускоренной C-версии TaskWakeupMethWrapper таким же, как у чистой Python-версии.
bpo-38529: Убрано слишком шумное предупреждение asyncio об удалении потока данных без явного вызова
.close().bpo-38634: Модуль
readlineтеперь определяет, связан ли Python с libedit во время выполнения на всех платформах. Ранее проверка выполнялась только на macOS.bpo-33684: Исправлена ошибка
json.tool, из-за которой не удавалось прочитать JSON-файл с не-ASCII символами, когда кодировка локали не UTF-8.bpo-38698: Предотвращено появление UnboundLocalError в parse_message_id
Функция parse_message_id() некорректно использовала токен, определённый внутри обработчика исключений, что вызывало
UnboundLocalErrorпри разборе недопустимого значения. Патч от Claudiu Popa.bpo-26730: Исправлена ошибка
SpooledTemporaryFile.rollover(), которая могла повредить файл в текстовом режиме. Патч от Serhiy Storchaka.bpo-38668: Вызов func:
shutil.copytreeдля копирования дерева каталогов из одного каталога в другой подкаталог приводил к бесконечному циклу и RecursionError. Добавлено исправление, которое потребляет итератор и создаёт список копируемых записей, избегая рекурсии для вновь созданных каталогов. Исправление от Bruno P. Kinoshita.bpo-37838:
typing.get_type_hints()корректно обрабатывает функции, декорированныеfunctools.wraps().bpo-38859: AsyncMock теперь возвращает StopAsyncIteration при исчерпании итерируемого объекта side_effects. Согласно PEP-479, невозможно возбудить исключение StopIteration из корутины.
bpo-38857: Исправление AsyncMock для возвращаемых значений, которые являются ожидаемыми типами. Также исправление касается итерируемых значений side_effect, которые оказались ожидаемыми, и обёртки вызываемых объектов, возвращающих ожидаемый тип. Раньше такие ожидаемые объекты ожидались (await) вместо того, чтобы возвращаться как есть.
bpo-38821: Исправлены необработанные исключения в
argparseпри интернационализации сообщений об ошибках для аргументов сnargs, установленным в специальные (нецелые) значения. Патч от Federico Bond.bpo-38820: Обеспечить совместимость Python с OpenSSL 3.0.0.
ssl.SSLSocket.getpeercert()больше не возвращает IPv6-адреса с завершающим переводом строки.bpo-38807: обновлены сообщения
TypeErrorдляos.path.join(), чтобы включить объектыos.PathLikeв качестве допустимых типов входных данных.bpo-38785: предотвращение аварийного завершения asyncio, если родительский
__init__не вызывается из конструктора объекта, производного отasyncio.Future.bpo-38723:
pdbтеперь используетio.open_code()для запуска событий аудита.bpo-27805: разрешено открытие каналов и других непозиционируемых файлов в режиме добавления с помощью
open().bpo-38686: Добавлена поддержка нескольких значений
qopвurllib.request.AbstractDigestAuthHandler.bpo-38334: Исправлён поиск назад на зашифрованном
zipfile.ZipExtFile.bpo-34679: asynci.ProactorEventLoop.close() теперь вызывает signal.set_wakeup_fd() только в главном потоке.
bpo-31202: Регистр результата
pathlib.WindowsPath.glob()теперь совпадает с регистром шаблона для литеральных частей.bpo-38521: Исправлено ошибочное сравнение на равенство в statistics.NormalDist().
bpo-38478: Исправлена ошибка в
inspect.signature.bind(), из-за которой она завершалась с ошибкой при обработке именованного аргумента с тем же именем, что и позиционно-обязательный параметр. Патч от Pablo Galindo.bpo-33604: Исправлены
hmac.newиhmac.HMAC, чтобы они вызывали TypeError вместо ValueError, если опущен параметр digestmod, который теперь обязателен в 3.8. Также уточнена документация модуля hmac и строки документации.bpo-38422: Уточнены докстринги pathlib suffix(es).
bpo-36993: Improve error reporting for corrupt zip files with bad zip64 extra data. Patch by Daniel Hillier.
bpo-36820: Разорван цикл, возникающий при сохранении исключения в socket.py, codeop.py и dyld.py, так как они удерживают не только исключение, но и пользовательские объекты через атрибут
__traceback__. Патч от Mario Corchero.bpo-34776: Исправлены dataclasses для поддержки прямых ссылок (forward references) в аннотациях типов.
bpo-33348: lib2to3 теперь распознаёт выражения после
*и**, как вf(*[] or []).bpo-27657: Исправлен urllib.parse.urlparse() при числовых путях. Строка вида “path:80” больше не разбирается как путь, а как схема (“path”) и путь (“80”).
Документация¶Documentation
bpo-38816: Предоставляет больше сведений о взаимодействии между
fork()и средой выполнения CPython, сосредоточившись только на C-API. Это включает предостережения о том, гдеfork()должна и не должна вызываться.bpo-38351: Модернизированы примеры
emailс %-форматирования на f-строки.bpo-38778: Документирован факт, что
RuntimeErrorвозбуждается, еслиos.fork()вызван в подынтерпретаторе.bpo-38592: Добавлен бразильский португальский в переключатель языков на сайте документации Python.
Тесты¶Tests
bpo-38547: Исправлен test_pty: если процесс является лидером сессии, закрытие мастер-файлового дескриптора вызывает сигнал SIGHUP; теперь при запуске тестов просто игнорируется SIGHUP.
bpo-38992: Исправлен тест для
math.fsum(), который падал из-за свертки констант.bpo-38965: Исправлен test_faulthandler на GCC 10. Использование ключевого слова “volatile” в
faulthandler._stack_overflow()для предотвращения оптимизации хвостовых вызовов на любом компиляторе, вместо использования специфичных для компилятора прагм.bpo-38875: test_capi: тесты trashcan теперь требуют ресурс “cpu”.
bpo-38841: Пропуск asyncio test_create_datagram_endpoint_existing_sock_unix на платформах, где отсутствует рабочая bind() для именованных сокетов Unix domain.
bpo-38669: Возбуждается
TypeErrorпри передаче target в виде строки сunittest.mock.patch.object().bpo-35998: Исправлено состояние гонки в test_asyncio.test_start_tls_server_1(). Ранее существовало состояние гонки между функцией test main(), которая заменяет протокол, и протоколом тестового ServerProto, который отправляет ANSWER после получения HELLO. Теперь только функция test main() отвечает за отправку данных, ServerProto больше не отправляет данные.
Сборка¶Build
bpo-37404:
asyncioтеперь возбуждаетTyperErrorпри вызове несовместимых методов с сокетомssl.SSLSocket. Патч от Ido Michael.bpo-38809: В Windows сборочные скрипты теперь распознают и используют python.exe из активного виртуального окружения.
bpo-38684: Исправить сборку _hashlib, когда Blake2 отключён, но OpenSSL его поддерживает.
bpo-37415: Исправить проверку заголовка stdatomic.h для компилятора ICC: в реализации ICC отсутствует тип atomic_uintptr_t, необходимый Python.
Windows¶
bpo-33125: Добавлена поддержка сборки и выпуска пакетов Windows ARM64.
bpo-38589: Исправляет ярлык HTML Help, когда Windows установлен не на диск C
bpo-38453: Обеспечить правильное разрешение относительных путей в ntpath.realpath().
bpo-38519: Восстанавливает внутренние заголовки C, отсутствовавшие в пакетах nuget.org и Microsoft Store.
bpo-38492: Удалить зависимость
pythonw.exeот Microsoft C++ runtime.
macOS¶
bpo-37931: Исправлен сбой в динамических сборках на OSX, возникавший при повторной инициализации модуля posix после Py_Finalize, если окружение изменилось с момента предыдущего
import posix. Патч от Benoît Hudson.
IDLE¶
bpo-38862: Пункт «Strip Trailing Whitespace» в меню Format теперь удаляет лишние пустые строки в конце файлов, не являющихся shell-файлами.
bpo-26353: Прекращено добавление символа новой строки при сохранении окна оболочки IDLE.
bpo-38636: Исправлены переключение табуляции и ширина отступа файла в меню Format IDLE. Эти функции (сочетания клавиш Alt-T и Alt-U по умолчанию) были ошибочно отключены в версиях 3.7.5 и 3.8.0.
bpo-4630: Добавлена опция для переключения мигания курсора IDLE в окнах оболочки, редактора и вывода. См. Настройки, Общие, Параметры окна, Мигание курсора. Патч от Закери Спайтца.
bpo-38598: Не пытаться компилировать окна оболочки или вывода IDLE
C API¶
bpo-37633: Повторный экспорт некоторых оберток совместимости функций для макросов в
pythonrun.h.bpo-38540: Исправлена возможная утечка в
PyArg_Parse()и аналогичных функциях для единиц форматирования"es#"и"et#", когда макросPY_SSIZE_T_CLEANне определен.bpo-36389: Функция
_PyObject_CheckConsistency()теперь также доступна в релизном режиме. Например, ее можно использовать для отладки сбоя в функцииvisit_decref()сборщика мусора.
Python 3.8.0 final¶
Дата выпуска: 2019-10-14
Ядро и встроенные модули¶Core and Builtins
bpo-38469: Исправлена ошибка, из-за которой область видимости именованных выражений неправильно определялась при наличии ключевого слова global. Патч от Pablo Galindo.
bpo-38379: Когда циклический сборщик мусора (gc) запускает финализаторы, которые воскрешают недостижимые объекты, текущий проход gc завершается, не собирая циклический мусор. Однако статистика, сообщаемая
collect()иget_stats(), утверждала, что весь найденный циклический мусор был собран, а воскрешённые объекты были собраны. Статистика изменена: теперь сообщается, что ничего не было собрано.
Библиотека¶Library
bpo-38449: Откат PR 15522, который внёс регрессию в
mimetypes.guess_type()из-за некорректной обработки имён файлов как URL.bpo-38431: Исправлен метод
__repr__дляdataclasses.InitVar, чтобы поддерживать объекты typing; патч от Samuel Colvin.bpo-38109: Добавлены недостающие значения
stat.S_IFDOOR,stat.S_IFPORT,stat.S_IFWHT,stat.S_ISDOOR(),stat.S_ISPORT()иstat.S_ISWHT()в Python-реализациюstat.bpo-38405: Вложенные подклассы
typing.NamedTupleтеперь могут быть упакованы (pickleable).bpo-38332: Предотвращает распространение
KeyError, вызываемого_encoded_words.decode()при передаче закодированного слова с некорректной кодировкой типа содержимого, вплоть доemail.message.get().bpo-38341: Добавлен
smtplib.SMTPNotSupportedErrorв экспортируемые именаsmtplib.bpo-13153: Теперь для преобразования между строками Python и объектами Tcl используется родная кодировка ОС. Это позволяет отображать, копировать и вставлять в буфер обмена эмодзи и другие символы вне BMP. Преобразование строк из Tcl в Python и обратно теперь никогда не завершается ошибкой (кроме MemoryError).
Документация¶Documentation
bpo-38294: Добавить список символов, которые больше не экранируются, в документацию re.escape.
Тесты¶Tests
bpo-37531: При таймауте regrtest больше не пытается снова вызвать
popen.communicate(): он может зависнуть до завершения всех дочерних процессов, использующих каналы stdout и stderr. Теперь рабочий процесс убивается, а его вывод игнорируется. Также изменён таймаут faulthandler главного процесса с 1 минуты на 5 минут для самых медленных сборочных ферм Python.
Windows¶
IDLE¶
bpo-36698: IDLE больше не завершается с ошибкой при записи не кодируемых символов в stderr. Теперь он экранирует их обратной косой чертой, как обычный интерпретатор Python. Добавлено поле
errorsв стандартные потоки.
Инструменты/Демонстрации¶Tools/Demos
bpo-38118: Файл подавления Valgrind обновлен, чтобы игнорировать ложное срабатывание в
PyUnicode_Decode()при использовании встроенного strcmp() из GCC.bpo-38347: pathfix.py: при рекурсивной обработке все файлы, оканчивающиеся на ‘.py’, считаются скриптами Python.
C API¶
bpo-38395: Исправлен сбой в объектах
weakref.proxyиз-за неверного управления временем жизни при вызове некоторых связанных методов, которые могут удалить последнюю ссылку на объект, на который ссылается прокси. Исправление предоставлено Pablo Galindo.
Python 3.8.0 release candidate 1¶
Дата выпуска: 2019-10-01
Безопасность¶Security
bpo-38243: Экранирование заголовка сервера в
xmlrpc.server.DocXMLRPCServerпри рендеринге страницы документа в HTML. (Предоставлено Dong-hee Na в bpo-38243.)bpo-38174: Обновление встроенной версии библиотеки expat до 2.2.8, что устраняет CVE-2019-15903.
bpo-37764: Исправлена ситуация, когда email._header_value_parser.get_unstructured входила в бесконечный цикл в двух случаях: когда заголовок письма не содержит завершающего пробела, и когда он содержит некорректное закодированное слово. Патч от Ashwin Ramaswami.
Ядро и встроенные модули¶Core and Builtins
bpo-38006: Исправлена ошибка, связанная с взаимодействием слабых ссылок и циклического сборщика мусора. Необходимо очищать любые слабые ссылки в мусоре, чтобы предотвратить выполнение их колбэков и возникновение аварийного завершения.
bpo-38317: Исправлен приоритет опций предупреждений:
PyConfig.warnoptionsимеет наивысший приоритет, как указано в PEP 587.bpo-36871: Улучшена обработка ошибок для методов assert_has_calls и assert_has_awaits в моках. Исправлена ошибка, из-за которой любые ошибки, возникающие при привязке ожидаемых вызовов к спецификации мока, молча проглатывались, что приводило к вводящему в заблуждение выводу ошибок.
bpo-38236: Python теперь выводит конфигурацию путей, если не удаётся импортировать кодеки Python для кодировок файловой системы и stdio.
bpo-38013: Разрешён вызов
async_generator_athrow().throw(...)даже для незапущенного асинхронного генератора-помощника. Это исправляет надоедливое предупреждение в конце вызоваasyncio.run().bpo-38124: Исправлена ошибка «off-by-one» в PyState_AddModule, которая могла приводить к обращению к памяти за пределами выделенной области.
bpo-38005: Исправлено сравнение и создание InterpreterID и ChannelID.
bpo-37994: Исправлено замалчивание произвольных ошибок при неудачном поиске атрибута в нескольких местах. Должно замалчиваться только AttributeError.
bpo-37990: Исправлено некорректное отображение прошедшего времени в статистике gc. Ошибка была регрессией в 3.8b4.
bpo-37966: Реализация
is_normalized()была значительно ускорена для строк, которые не нормализованы, за счёт применения полного алгоритма быстрой проверки нормализации из стандарта Unicode.bpo-20490: Улучшено сообщение об ошибке импорта для частично инициализированного модуля при циклических
fromимпортах. – Патч от Anthony Sottile.bpo-37409: Обеспечено, что явные относительные импорты из интерактивных сессий и скриптов (не имеющих родительского пакета) всегда вызывают ImportError, а не рассматривают текущий модуль как пакет. Патч от Ben Lewis.
bpo-37619: При добавлении дескриптора-обёртки из одного класса в другой (например, установка
__add__ = str.__add__на подклассint), теперь корректно возбуждается исключение при вызове оператора.bpo-30773: запрещён параллельный запуск aclose() / asend() / athrow(). Исправлено ag_running для отражения фактического состояния выполнения AG.
Библиотека¶Library
bpo-38319: sendfile(), используемая в модулях socket и shutil, возбуждала OverflowError для файлов размером >= 2GiB на 32-битных архитектурах. (патч от Giampaolo Rodola)
bpo-38242: Откат нового API asyncio Streams
bpo-38019: Корректная обработка приостановки/возобновления чтения закрытого asyncio unix-канала.
bpo-38163: Дочерние mocks теперь определяют свой тип как синхронный или асинхронный: асинхронные дочерние mocks будут AsyncMocks, а синхронные дочерние mocks – MagicMock или Mock (в зависимости от типа родителя).
bpo-38161: Удалён _AwaitEvent из AsyncMock.
bpo-38216: Редкому коду, который хочет отправлять недопустимые HTTP-запросы из библиотеки
http.client, предоставлен способ делать это. Исправления для bpo-30458 привели к поломке некоторых проектов, которые полагались на эту возможность для тестирования собственного поведения при получении некорректных запросов.bpo-38108: Любые синхронные магические методы у AsyncMock теперь возвращают MagicMock. Любые асинхронные магические методы у MagicMock теперь возвращают AsyncMock.
bpo-38248: asyncio: исправлена непоследовательная немедленная отмена задачи.
bpo-38237: Аргументы встроенной функции pow стали более описательными. Теперь их также можно передавать как ключевые.
bpo-38191: Конструкторы типов
NamedTupleиTypedDictтеперь принимают произвольные имена именованных аргументов, включая «cls», «self», «typename», «_typename», «fields» и «_fields». Передача позиционных аргументов по ключевому слову устарела.bpo-38185: Исправлено сравнение строк без учёта регистра в индексации
sqlite3.Row.bpo-38136: Изменено: счётчик вызовов AsyncMock и счётчик ожиданий стали двумя разными счётчиками. Теперь счётчик ожиданий увеличивается только при ожидании корутины, а не при её вызове, и наоборот. Обновлена документация.
bpo-37828: Исправлено имя по умолчанию для mock в исключениях
unittest.mock.Mock.assert_called(). Патч от Abraham Toriz Cruz.bpo-38175: Исправлена утечка памяти при сравнении объектов
sqlite3.Row.bpo-33936: _hashlib больше не вызывает устаревшую функцию инициализации OpenSSL при использовании OpenSSL 1.1.0+.
bpo-34706: Сохранение наследования в inspect.Signature.from_callable.
bpo-38153: Названия алгоритмов хеширования из OpenSSL теперь нормализованы в соответствии с соглашениями об именах в Python. Например, OpenSSL использует sha3-512 вместо sha3_512 или blake2b512 вместо blake2b.
bpo-38115: Исправлена ошибка в dis.findlinestarts(), из-за которой возвращались неверные смещения байткода. Документировано, что co_lnotab объекта кода может содержать неверные смещения байткода.
bpo-38148: Добавлены слоты в транспортные классы
asyncio, что может снизить использование памяти.bpo-36991: Исправлена потенциальная утечка неверного исключения AttributeError из ZipFile.extract() в некоторых ошибочных ситуациях с неподдерживаемым вводом.
bpo-38134: Удалена устаревшая копия PBKDF2_HMAC_fast. Все поддерживаемые версии OpenSSL содержат быструю реализацию.
bpo-38132: Обёртка hashlib для OpenSSL использует более простую реализацию. Несколько макросов и бесполезных кешей удалены. Имя хеша теперь берётся из EVP OpenSSL. Имя алгоритма остаётся прежним, за исключением того, что теперь оно всегда в нижнем регистре.
bpo-38008: Исправлена проверка родительского класса в протоколах для корректного определения модуля, предоставляющего встроенный протокол, вместо предположения, что все они происходят из модуля
collections.abcbpo-37405: Исправлена регрессия в socket.getsockname() для сокетов семейства адресов AF_CAN, не являющихся CAN_ISOTP: теперь возвращается кортеж из одного элемента вместо строки.
bpo-38121: Обновлены имена параметров функций в importlib.metadata в соответствии с изменениями в релизе 0.22 importlib_metadata.
bpo-38110: Реализация os.closewalk() теперь использует API libc fdwalk() на платформах, где оно доступно.
bpo-38093: Исправлен AsyncMock, чтобы он не падал при использовании с AsyncContextManagers или AsyncIterators.
bpo-37488: Добавлено предупреждение к
datetime.utctimetuple(),datetime.utcnow()иdatetime.utcfromtimestamp().bpo-38086: Обновлён importlib.metadata в соответствии с изменениями из importlib_metadata 0.21.
bpo-37251: Удалена проверка
__code__в AsyncMock, которая ошибочно определяла спецификации функций как асинхронные объекты, но не определяла классы с__await__, но без атрибута__code__как асинхронные объекты.bpo-38066: Скрыты внутренние методы asyncio.Stream: feed_eof(), feed_data(), set_exception() и set_transport().
bpo-38059: inspect.py теперь использует sys.exit() вместо exit()
bpo-37953: В
typingулучшены методы__hash__и__eq__дляForwardReferences.bpo-38026: Исправлено
inspect.getattr_static(), использовавшееisinstance, хотя должно было избегать динамического поиска.bpo-38010: В
importlib.metadataпроизведена синхронизация сimportlib_metadata0.20, уточнено поведениеfiles()и исправлена ошибка, при которой дляrequires()наdist-infoвозвращалось только одно требование.bpo-38006: weakref.WeakValueDictionary определяет локальную функцию remove(), используемую как колбэк для слабых ссылок. Эта функция создавалась с замыканием. Изменить реализацию, чтобы избежать замыкания.
bpo-34410: Исправлен сбой в итераторе
tee()при повторном входе. Теперь в этом случае возбуждается RuntimeError.bpo-37140: Исправление регрессии ctypes в Python 3.8. Когда ctypes.Structure передаётся копией в функцию, внутренние механизмы ctypes создавали временный объект, который приводил к вызову финализатора структуры (__del__) дважды. Семантика Python требует, чтобы финализатор вызывался ровно один раз. Исправлены внутренние механизмы ctypes, чтобы финализатор больше не вызывался дважды.
bpo-37972: Обращения по индексу к объектам
unittest.mock.callтеперь получают тот же механизм цепочек, что и любые другие пользовательские атрибуты, так что следующее использование больше не вызываетTypeError:call().foo().__getitem__(‘bar’)
Исправление от blhsing
bpo-22347: Обновлён mimetypes.guess_type для корректного разбора URL, содержащих только имя хоста. Патч от Dong-hee Na.
bpo-37885: venv: не генерировать предупреждение о неопределённой переменной при деактивации.
bpo-37424: Fixes a possible hang when using a timeout on
subprocess.run()while capturing output. If the child process spawned its own children or otherwise connected its stdout or stderr handles with another process, we could hang after the timeout was reached and our child was killed when attempting to read final output from the pipes.bpo-37212:
unittest.mock.call()теперь сохраняет порядок именованных аргументов в выводе repr. Исправление от Karthikeyan Singaravelan.bpo-37305: Добавлено .webmanifest -> application/manifest+json в список распознаваемых типов файлов и заголовков типа содержимого.
bpo-21872: Исправлен
lzma: модуль распаковывает данные не полностью. При распаковке файла формата FORMAT_ALONE, в котором отсутствует маркер конца, иногда не выводится от одного до десятков байт. Исправление от Ma Lin.bpo-37206: Значения по умолчанию, которые не могут быть представлены как объекты Python, больше не представляются некорректно как
Noneв сигнатурах функций.bpo-12144: Обеспечена обработка кук с атрибутом
expiresвCookieJar.make_cookies().bpo-31163: Методы rename и replace экземпляра pathlib.Path теперь возвращают новый экземпляр Path.
bpo-25068:
urllib.request.ProxyHandlerтеперь приводит к нижнему регистру ключи переданного словаря.bpo-21315: Заголовки email, содержащие слова, закодированные в RFC2047, разбираются, несмотря на отсутствие пробелов, и регистрируется дефект. Также отсутствие завершающего пробела после закодированных слов теперь регистрируется как дефект.
bpo-36250: Игнорировать
ValueErrorизsignalсinteractionв не основном потоке.bpo-35168:
shlex.shlex.punctuation_charsтеперь является свойством только для чтения.bpo-20504: Исправлена ошибка в модуле
cgi, когда запрос multipart/form-data не содержит заголовкаContent-Length.bpo-34519: Добавлены дополнительные псевдонимы для HP Roman 8. Исправление от Michael Osipov.
Документация¶Documentation
bpo-26868: Исправлен пример использования
PyModule_AddObject()для корректной обработки ошибок.bpo-36797: Исправлена битая ссылка в API Reference distutils.
bpo-37977: Более строгое и чёткое предупреждение о небезопасности pickle
bpo-37937: Упоминание
frame.f_traceв документацииsys.settrace().bpo-36260: Добавлены подводные камни распаковки в документацию модуля zipfile.
bpo-36960: Переработана структура документации
datetimeдля повышения удобства использования и читаемости. Патч от Брэда Соломона.bpo-23460: Документация по форматированию десятичных чисел с использованием спецификатора
:gобновлена: теперь указана правильная точка перехода к экспоненциальной записи. Оригинальный патч от Tuomas Suutari.bpo-35803: Документировано и протестировано, что функции
tempfileмогут принимать объект, подобный пути в качестве аргументаdir. Патч от Энтони Соттила.bpo-33944: Добавлено примечание о предполагаемом использовании кода в .pth файлах.
bpo-34293: Исправлен Doc/Makefile в части переменной окружения PAPER и сборки PDF
Тесты¶Tests
bpo-38239: Исправлен test_gdb для сборок с Link Time Optimization (LTO).
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. BaseManager._finalize_manager() отправляет SIGTERM процессу-менеджеру, если его остановка занимает более 1 секунды, что происходит на медленных сборочных фермах.
bpo-38212: Многопроцессные тесты: увеличен таймаут test_queue_feeder_donot_stop_onexc() с 1 до 60 секунд.
bpo-38117: Тестирование с OpenSSL 1.1.1d
bpo-37531: Улучшен тайм-аут многопроцессного regrtest: теперь при завершении рабочего процесса выводится сообщение, перехватываются исключения popen.kill() и popen.wait(), устанавливается тайм-аут на второй вызов popen.communicate().
bpo-37876: Добавлены тесты для кодека ROT-13.
bpo-37252: Исправлены утверждения в тестах
test_closeиtest_events_mask_overflowdevpoll.bpo-34001: Обеспечено прохождение тестов test_ssl с LibreSSL. LibreSSL обрабатывает минимальную и максимальную версию TLS иначе, чем OpenSSL.
bpo-36919: Сделать реализацию
test_source_encoding.test_issue2301независимой. Теперь тест будет работать и для CPython, и для IronPython.bpo-34596: Использовать причину по умолчанию, когда
unittest.skip()не вызывается. Патч от Naitree Zhu.
Сборка¶Build
bpo-38301: В семействе Solaris необходимо убедиться, что используется
-D_REENTRANT. Патч от Jesús Cea Avión.bpo-36210: Обновить обнаружение необязательных модулей расширения для AIX. ossaudiodev и spwd не применимы для AIX и больше не сообщаются как отсутствующие. Сторонняя упаковка ncurses (с поддержкой ASIS) конфликтует с официально поддерживаемой библиотекой curses AIX, поэтому настраивать AIX на использование libcurses.a. Однако пропускать попытку сборки _curses_panel.
патч от M Felt
bpo-36002: Находить двоичные файлы
llvm-profdataиllvm-arс помощьюAC_PATH_TOOL, а неAC_PATH_TARGET_TOOL.bpo-37936: Файл
.gitignoreтеперь систематически сохраняет «rooted» с незавершающей косой черты все правила, которые должны применяться к файлам в определённом месте репозитория. Ранее, когда нужный файл для игнорирования оказывался в корне репозитория, мы чаще всего случайно также игнорировали файлы и каталоги с тем же именем в любом месте дерева.bpo-37936: Файл
.gitignoreбольше не применяется к файлам, которые на самом деле отслеживаются в Git-репозитории. Патч от Greg Price.
Windows¶
bpo-38117: Обновить встроенную OpenSSL до версии 1.1.1d
bpo-38092: Снизить накладные расходы при использовании multiprocessing в виртуальном окружении Windows.
bpo-38133: Разрешить программе запуска py.exe находить установки из Microsoft Store и улучшить отображение активных виртуальных окружений.
bpo-38114:
pip.iniбольше не включается в пакет Nuget.bpo-36634:
os.cpu_count()теперь возвращает активные процессоры, а не максимальное количество процессоров.bpo-36634: venv activate.bat теперь работает, когда существующие переменные содержат символы двойных кавычек.
bpo-38081: Предотвращение ошибки при вызове
os.path.realpath()на'NUL'.bpo-38087: Исправление чувствительности к регистру в test_pathlib и test_ntpath.
bpo-38088: Исправляет проблему, когда distutils не находит vcruntime140.dll при установленном только наборе инструментов v142.
bpo-37283: Обеспечить переопределение ранее обнаруженных состояний в установщике Windows с помощью параметров командной строки и unattend.xml.
bpo-38030: Исправляет ошибку
os.stat()для блочных устройств в Windowsbpo-38020: Исправляет потенциальный сбой при вызове
os.readlink()(или косвенно черезrealpath()) для файла, который не является поддерживаемой ссылкой.bpo-37705: Улучшение реализации
winerror_to_errno().bpo-37702: Исправлена утечка памяти в Windows при создании объекта SSLContext или вызове urllib.request.urlopen(’https://…’).
bpo-37445: Включить флаг
FORMAT_MESSAGE_IGNORE_INSERTSв вызовыFormatMessageW().bpo-37380: Не собирать незавершенные процессы с помощью
subprocess._activeв Windows для последующей очистки. Исправление от Ruslan Kuprieiev.bpo-32587: Обеспечить поддержку строк нулевой длины в
winreg.REG_MULTI_SZ.
macOS¶
IDLE¶
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: Строки перезапуска оболочки теперь заполняют ширину окна, всегда начинаются с ‘=’ и избегают ненужного переноса. Строка всё же будет переноситься, если включённое имя файла слишком длинное относительно ширины.
bpo-35771: Во избежание редких ложных сбоев test_idle на медленных машинах увеличено значение
hover_delayв test_tooltip.bpo-37902: Добавлена прокрутка колёсиком мыши для обозревателей модулей, путей и стека IDLE. Патч от Джорджа Чжана.
Инструменты/Демонстрации¶Tools/Demos
C API¶
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-37879: Исправлена функция subtype_dealloc: теперь подавляется уменьшение счётчика ссылок на тип, когда базовый тип является C-типом кучи.
Python 3.8.0 beta 4¶
Дата выпуска: 2019-08-29
Безопасность¶Security
bpo-34155: Исправлен разбор некорректных адресов электронной почты с более чем одним
@(например, a@b@c.com.) – теперь часть до второго@не возвращается как корректный адрес. Патч от maxking и jpic.
Ядро и встроенные модули¶Core and Builtins
bpo-37947: Корректно настроен уровень рекурсии в генерации symtable для именованных выражений. Патч от Pablo Galindo.
bpo-37830: Исправлена компиляция
breakиcontinueв блокеfinally, когда соответствующий блокtryсодержитreturnс неконстантным значением.bpo-32912: Отменено bpo-32912: генерация
SyntaxWarningвместоDeprecationWarningдля недопустимых escape-последовательностей в строковых и байтовых литералах.bpo-37757: PEP 572: Как описано в PEP, выражения присваивания теперь вызывают
SyntaxError, когда их взаимодействие с областью видимости генераторных выражений приводит к неоднозначной области цели.Подкласс
TargetScopeError, изначально предложенный в PEP, был удалён в пользу простого возбуждения обычных синтаксических ошибок для недопустимых случаев.bpo-36311: Декодирование bytes-объектов размером более 2 ГБ выполняется быстрее и больше не завершается ошибкой, когда многобайтовый символ пересекает границу чанка.
bpo-37433: Исправлено отображение индикатора
SyntaxError, печатавшего слишком много пробелов для многострочных строк. – Патч от Anthony Sottile.bpo-20523:
pdb.Pdbподдерживает ~/.pdbrc в Windows 7. Патч от Tim Hopper и Dan Lidral-Porter.
Библиотека¶Library
bpo-37834: Предотвращение исключения shutil.rmtree при сборке в не-Windows системе без поддержки системного вызова fd, как в старых версиях macOS.
bpo-37965: Исправление предупреждения компилятора C, вызванного distutils.ccompiler.CCompiler.has_function.
bpo-37960:
repr()буферизованных и текстовых потоков теперь подавляет только ожидаемые исключения при получении значений атрибутов «name» и «mode».bpo-37951: Большинство возможностей модуля подпроцесса теперь снова работают в субинтерпретаторах. Только preexec_fn ограничена в субинтерпретаторах.
bpo-36205: Исправление реализации rusage в time.process_time() для корректного отображения суммы системного и пользовательского времени ЦП.
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. Патч от Dong-hee Na.
bpo-26589: Добавлен новый код состояния в модуль http: 451 UNAVAILABLE_FOR_LEGAL_REASONS
bpo-37915: Исправлено segmentation fault, возникавшее при сравнении экземпляров объектов
datetime.timezoneиdatetime.tzinfo. Исправление от Pablo Galindo.bpo-37868: Исправлен dataclasses.is_dataclass при передаче экземпляра, который никогда не вызывает AttributeError в __getattr__. То есть объекта, который возвращает что-то для __dataclass_fields__, даже если это не dataclass.
bpo-37811: Исправлена ошибка, из-за которой функция
socketмодуляsocket.connect(address)не могла установить соединение при прерывании системного вызова. Проблема наблюдалась на всех ОС, где системный вызовpoll(2)может принимать только неотрицательные целые числа и -1 в качестве значения таймаута.bpo-21131: Исправлен стек
faulthandler.register(chain=True). Модуль faulthandler теперь выделяет отдельный стек размеромSIGSTKSZ*2байт, вместо всегоSIGSTKSZбайт. Вызов предыдущего обработчика сигналов внутри обработчика faulthandler потребляет болееSIGSTKSZбайт стековой памяти на некоторых платформах.bpo-37798: Добавлен быстрый путь на C для statistics.NormalDist.inv_cdf(). Патч от Dong-hee Na.
bpo-37819: Добавлен метод Fraction.as_integer_ratio() для соответствия аналогичным методам в bool, int, float и decimal.
bpo-37810: Исправлено отображение подсказки
difflib?в выводе diff при работе с табуляцией. Исправление от Anthony Sottile.bpo-37772: В
zipfile.Pathпри добавлении неявных каталогов теперь гарантируется, что родительские каталоги добавляются, а дубликаты исключаются.bpo-28292: Вспомогательные функции calendar.py помечены как приватные. Это соответствует рекомендации PEP 8 по соблюдению стилевых соглашений в модуле и устраняет известный случай путаницы у пользователей.
bpo-18049: Добавлено определение THREAD_STACK_SIZE для AIX в Python/thread_pthread.h. Размер стека потока по умолчанию приводил к сбоям при стандартном ограничении рекурсии. Исправление от M Felt.
bpo-37738: Исправлена реализация curses
addch(str, color_pair): теперь передаётся цветовая пара вsetcchar()вместо постоянной передачи 0 в качестве цветовой пары.bpo-37723: Исправлено снижение производительности при разборе регулярных выражений с огромными наборами символов. Исправление от Yann Vaginay.
bpo-32178: Исправлен IndexError в пакете
emailпри попытке разобрать некорректные поля адреса, начинающиеся с:.bpo-37685: Исправлены сравнения
datetime.timedeltaиdatetime.timezone.bpo-37695: Исправлено сообщение об ошибке
curses.unget_wch(). Исправление от Anthony Sottile.bpo-37354: Сценарий Activate.ps1 Powershell сделан статическим, чтобы можно было его подписать.
bpo-37664: Обновлены wheels, поставляемые с ensurepip (pip 19.2.3 и setuptools 41.2.0)
bpo-37642: Allowed the pure Python implementation of
datetime.timezoneto represent sub-minute offsets close to minimum and maximum boundaries, specifically in the ranges (23:59, 24:00) and (-23:59, 24:00). Patch by Ngalim Siregarbpo-16970: Adding a value error when an invalid value in passed to nargs Patch by Robert Leenders
bpo-37587: Make json.loads faster for long strings. (Patch by Marco Paolini)
bpo-18378: Recognize “UTF-8” as a valid value for LC_CTYPE in locale._parse_localename.
bpo-37531: “python3 -m test -jN –timeout=TIMEOUT” now kills a worker process if it runs longer than TIMEOUT seconds.
bpo-37482: Fix serialization of display name in originator or destination address fields with both encoded words and special chars.
bpo-37372: Исправлена ошибка при распаковке объектов datetime.time из Python 2 с секундами >=24. Исправление от Justin Blanchard.
bpo-37085: Добавлены опциональные константы Broadcast Manager для Linux SocketCAN, используемые в качестве флагов для настройки поведения BCM, в модуль socket. Исправление от Karl Ding.
bpo-36871: Обеспечено использование сигнатуры метода вместо сигнатуры конструктора класса при проверке mock-объекта на вызовы методов. Патч от Karthikeyan Singaravelan.
bpo-36582: Исправлен
UserString.encode()для корректного возвратаbytesвместо экземпляраUserString.bpo-34775: Обработка операции деления в PurePath теперь возвращает NotImplemented вместо возбуждения TypeError, если передан объект, не являющийся экземпляром str или PurePath. Исправление от Roger Aiudi.
Документация¶Documentation
bpo-37979: Добавлена ссылка на dateutil.parser.isoparse в документацию datetime.fromisoformat. Исправление от Paul Ganssle
bpo-37759: Начальные правки в Whatsnew 3.8
bpo-37726: Прекращение рекомендации getopt в руководстве по разбору аргументов командной строки и продвижение argparse.
bpo-37256: Исправлена формулировка аргументов для
Requestвurllib.requestbpo-37004: В документацию difflib добавлено примечание с явным предупреждением, что результаты метода ratio из SequenceMatcher могут зависеть от порядка входных строк.
bpo-36487: В документации C-API уточнено, что такое «главный» интерпретатор.
Тесты¶Tests
bpo-37805: Добавлены тесты для json.dump(…, skipkeys=True). Патч от Dong-hee Na.
Сборка¶Build
bpo-37707: Пометить некоторые отдельные тесты для пропуска при использовании –pgo. Отмеченные тесты значительно увеличивают время задачи PGO и, вероятно, не помогают улучшить оптимизацию конечного исполняемого файла.
Windows¶
bpo-37549:
os.dup()больше не завершается ошибкой для стандартных потоков в Windows 7.bpo-1311: Файл
nulв Windows теперь возвращает True изexists()и корректный результат изos.stat()при установленномS_IFCHR.bpo-9949: Включение поддержки перехода по символическим ссылкам в
os.realpath().bpo-37834: Обрабатывать в
os.lstat()все точки повторной обработки суррогата имени в Windows, а другие точки повторной обработки – как обычные файлы вos.stat().bpo-36266: Добавить имя модуля в форматированное сообщение об ошибке при сбое загрузки DLL во время импорта модуля в
_PyImport_FindSharedFuncptrWindows(). Исправление от Srinivas Nyayapati.bpo-25172: Попытка импортировать модуль
cryptв Windows приведёт кImportErrorс сообщением о том, что модуль не поддерживается в Windows. На других платформах, если базовый модуль_cryptнедоступен, ImportError будет содержать сообщение, объясняющее проблему.bpo-37778: Исправляет значки, используемые для ассоциации файлов с пакетом Microsoft Store.
bpo-37734: Исправление использования значений реестра для запуска Python из приложения Microsoft Store.
bpo-28269: Заменить использование
strcasecmp()для системной функции_stricmp(). Исправление от Minmin Gong.
macOS¶
bpo-18049: Увеличен размер стека по умолчанию для потоков с 5 МБ до 16 МБ на macOS для соответствия размеру стека главного потока. Это предотвращает сбои при глубокой рекурсии в потоках.
IDLE¶
bpo-37824: Корректная обработка предупреждений пользовательского ввода в оболочке IDLE. Прекращено превращение SyntaxWarnings в SyntaxErrors.
bpo-37929: Диалоговое окно настроек IDLE теперь корректно закрывается, когда нет окна оболочки.
bpo-37849: Исправлено отображение списка завершений слишком высоко или низко при показе над текущей строкой.
bpo-36419: Рефакторинг автодополнения IDLE и улучшение тестирования.
bpo-37748: Изменён порядок в меню Run. Самый популярный пункт, Run Module, помещён вверх.
Инструменты/Демонстрации¶Tools/Demos
C API¶
Python 3.8.0 beta 3¶
Дата выпуска: 2019-07-29
Безопасность¶Security
bpo-37461: Исправлен бесконечный цикл при разборе специально сформированных заголовков писем. Патч от Abhilash Raj.
Ядро и встроенные модули¶Core and Builtins
Библиотека¶Library
bpo-37697: Синхронизирован
importlib.metadataс importlib_metadata 0.19; улучшена обработка файлов EGG-INFO и исправлен сбой, когда имена точек входа содержали двоеточия.bpo-37691: Функция math.dist() теперь принимает координаты как последовательности (или итерабельные объекты), а не только кортежи.
bpo-37664: Обновлены wheels, поставляемые с ensurepip (pip 19.2.1 и setuptools 41.0.1)
bpo-36324: Make internal attributes for statistics.NormalDist() private.
bpo-37491: Fix
IndexErrorwhen parsing email headers with unexpectedly ending bare-quoted string value. Patch by Abhilash Raj.bpo-37579: Return
NotImplementedin Python implementation of__eq__fortimedeltaandtimewhen the other object being compared is not of the same type to match C implementation. Patch by Karthikeyan Singaravelan.bpo-21478: Record calls to parent when autospecced object is attached to a mock using
unittest.mock.attach_mock(). Patch by Karthikeyan Singaravelan.bpo-37502: pickle.loads() no longer raises TypeError when the buffers argument is set to None
bpo-37520: Correct behavior for zipfile.Path.parent when the path object identifies a subdirectory.
bpo-18374: Fix the
.col_offsetattribute of nestedast.BinOpinstances which had a too large value in some situations.bpo-37421: Fix
multiprocessing.util.get_temp_dir()finalizer: clear also the ‘tempdir’ configuration of the current process, so next call toget_temp_dir()will create a new temporary directory, rather than reusing the removed temporary directory.bpo-37481: The distutils
bdist_wininstcommand is deprecated in Python 3.8, usebdist_wheel(wheel packages) instead.bpo-26967:
ArgumentParserсallow_abbrev=Falseбольше не отключает группировку коротких флагов, таких как-vv, а только отключает сокращение длинных флагов, как и описано в документации. Исправление от Zac Hatfield-Dodds.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-36564: Исправлен бесконечный цикл в логике переноса заголовков email, который возникал, когда max_line_length политики email была недостаточной для включения необходимой разметки и значений в сообщении. Патч от Paul Ganssle.
Документация¶Documentation
bpo-32910: Удалено зависящее от реализации поведение работы Deactivate в venv.
bpo-37284: Добавлена краткая заметка о том, что любые новые обязательные атрибуты
sys.implementationдолжны проходить процесс PEP.bpo-30088: Документировано, что конструктор
mailbox.Maildirне пытается проверять корректность структуры каталогов maildir. Патч от Святослава Сидоренко.bpo-37521: Исправлены примеры
importlib: теперь вновь созданные модули добавляются в sys.modules через importlib.util.module_from_spec() сразу, а не после вызова loader.exec_module().Спасибо Benjamin Mintz за обнаружение ошибки.
bpo-37456: Слеш (‘/’) теперь часть синтаксиса.
bpo-37487: Исправлено описание индекса в PyList_GetItem: теперь включает 0.
bpo-37149: Заменена битая ссылка на справочник по Tkinter 8.5 от Джона Шипмана (New Mexico Tech) на ссылку на копию на archive.org.
bpo-37478: В описание os.chdir() добавлены возможные исключения.
Тесты¶Tests
bpo-37558: Исправлена обработка имени test_shared_memory_cleaned_after_process_termination
bpo-37526: Добавлен
test.support.catch_threading_exception(): контекстный менеджер, перехватывающий исключениеthreading.Threadс помощьюthreading.excepthook().bpo-37421: test_concurrent_futures теперь явно останавливает экземпляр ForkServer, если он запущен.
bpo-37421: Тесты multiprocessing теперь останавливают экземпляр ForkServer, если он запущен: закрывают файловый дескриптор «alive», чтобы сервер остановился, а затем удаляют его UNIX-адрес.
Сборка¶Build
bpo-36044: Уменьшить количество модульных тестов, запускаемых для задачи генерации PGO. Это ускоряет задачу примерно в 15 раз. Запуск полного набора модульных тестов медленный. Это изменение может привести к чуть менее оптимизированной сборке, поскольку будет выполняться не так много ветвей кода. Если вы готовы ждать гораздо более медленную сборку, прежнее поведение можно восстановить с помощью ‘./configure [..] PROFILE_TASK=”-m test –pgo-extended”’. Мы не даём гарантий, какой набор задач PGO даёт более быструю сборку. Пользователи, которым это важно, должны запускать свои собственные релевантные бенчмарки, так как результаты могут зависеть от окружения, нагрузки и цепочки инструментов компилятора.
Windows¶
bpo-37672: Переключить pip в пакете Windows Store на использование встроенного
pip.iniвместо переменнойPIP_USER.
IDLE¶
bpo-37692: Улучшен образец конфигурации подсветки с примером взаимодействия с оболочкой и улучшенными метками для элементов оболочки.
bpo-37628: Диалоговое окно настроек больше не расширяется при изменении размера шрифта.
bpo-37627: Диалоговое окно настройки запуска инициализируется последними введёнными аргументами командной строки. Пользователь может при необходимости отредактировать их перед отправкой.
bpo-33610: Исправлена ошибка, когда контекст кода не показывал правильный контекст при первом включении.
bpo-37530: Оптимизирован контекст кода для уменьшения ненужной фоновой активности. Изменения шрифта и подсветки теперь происходят одновременно с изменениями текста, а не после случайной задержки.
bpo-27452: Очистка
config.pyпутём встраиванияRemoveFileи упрощения обработкиfileвCreateConfigHandlers.bpo-17535: Добавлена опциональная нумерация строк для окон редактора IDLE. Окна открываются без номеров строк, если не указано иное на вкладке General диалога настроек.
bpo-26806: Чтобы компенсировать кадры стека, добавленные IDLE, и избежать возможных проблем с низкими лимитами рекурсии, к лимитам в процессе выполнения пользовательского кода добавляется 30. При выводе лимитов рекурсии 30 вычитается, чтобы это добавление было в основном незаметным.
bpo-36390: Функции меню Format собраны в format.py. Объединены paragraph.py, rstrip.py и методы форматирования из editor.py.
Инструменты/Демонстрации¶Tools/Demos
bpo-37675: 2to3 теперь работает при запуске из zip-архива стандартной библиотеки.
Python 3.8.0 beta 2¶
Дата выпуска: 2019-07-04
Безопасность¶Security
bpo-37363: Добавлены события аудита для набора поддерживаемых команд run (см. Командная строка и окружение).
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:
io.open_code()теперь используется при чтении файлов.pth.bpo-34631: Обновлён OpenSSL до версии 1.1.1c в установщике Windows.
Ядро и встроенные модули¶Core and Builtins
bpo-37467: Исправлены
sys.excepthook()иPyErr_Display(), если имя файла является строкой байтов. Например, для исключения SyntaxError, где атрибут filename является строкой байтов.bpo-37417:
bytearray.extend()теперь корректно обрабатывает ошибки, возникающие во время итерации. Патч от Brandt Bucher.bpo-24214: Улучшена поддержка обработчика ошибок surrogatepass в инкрементальных декодерах UTF-8 и UTF-16.
bpo-35224: Изменён порядок вычисления key: value в словарных генераторах, как предложено в PEP 572. То есть в
{k: v for ...}выражениеkбудет вычисляться передv.bpo-37316: Исправлен вызов
PySys_Audit()вmmap.mmap.bpo-37269: Исправлена ошибка в peephole-оптимизаторе, которая неправильно обрабатывала константные условия с бинарными операторами. Патч от Pablo Galindo.
bpo-37213: корректная обработка отрицательных смещений строк в оптимизаторе peephole. Патч от Pablo Galindo.
bpo-37219: Удалена ошибочная оптимизация для пустых разностей множеств.
bpo-36922: слотовые функции оптимизируют любой вызываемый объект с
Py_TPFLAGS_METHOD_DESCRIPTORвместо только экземпляровfunction.bpo-36974: слот
tp_vectorcall_offsetнаследуется безусловно для поддержкиsuper().__call__(), когда базовый класс использует vectorcall.bpo-37160:
threading.get_native_id()теперь также поддерживает NetBSD.bpo-37077: добавлена поддержка
threading.get_native_id()для AIX. Патч от M. Felt.
Библиотека¶Library
bpo-37440: http.client now enables TLS 1.3 post-handshake authentication for default context or if a cert_file is passed to HTTPSConnection.
bpo-37437: Update vendorized expat version to 2.2.7.
bpo-37428: SSLContext.post_handshake_auth = True no longer sets SSL_VERIFY_POST_HANDSHAKE verify flag for client connections. Although the option is documented as ignored for clients, OpenSSL implicitly enables cert chain validation when the flag is set.
bpo-37420:
os.sched_setaffinity()now correctly handles errors that arise during iteration over itsmaskargument. Patch by Brandt Bucher.bpo-37412: The
os.getcwdb()function now uses the UTF-8 encoding on Windows, rather than the ANSI code page: see PEP 529 for the rationale. The function is no longer deprecated on Windows.bpo-29412: Fix IndexError in parsing a header value ending unexpectedly. Patch by Abhilash Raj.
bpo-36546: The dist argument for statistics.quantiles() is now positional only. The current name doesn’t reflect that the argument can be either a dataset or a distribution. Marking the parameter as positional avoids confusion and makes it possible to change the name later.
bpo-37394: Fix a bug that was causing the
queuemodule to fail if the accelerator module was not available. Patch by Pablo Galindo.bpo-33972: Письмо с одной частью, но с типом содержимого, установленным в
multipart/*, больше не вызывает AttributeError.bpo-37280: Использовать пул потоков для чтения из файла в запасном режиме sendfile.
bpo-37279: Исправлена поддержка asyncio sendfile, когда sendfile отправляет лишние данные в запасном режиме.
bpo-19865:
ctypes.create_unicode_buffer()теперь также поддерживает символы вне BMP на платформах с 16-битнымwchar_t(например, Windows и AIX).bpo-37210: Разрешить чистой реализации на Python
pickleработать даже когда модуль C_pickleнедоступен.bpo-35922: Исправлены
RobotFileParser.crawl_delay()иRobotFileParser.request_rate(), чтобы они возвращалиNoneвместо вызоваAttributeError, когда в файле robots.txt не определено соответствующее правило. Исправление от Rémi Lapeyre.bpo-35766: Изменён формат feature_version на кортеж (major, minor).
bpo-36607: Устранение
RuntimeError, вызываемогоasyncio.all_tasks(), если внутреннее слабое множество задач изменяется другим потоком во время итерации.bpo-18748: Деструктор
_pyio.IOBaseтеперь ничего не делает, если получение атрибутаclosedзавершается неудачей, чтобы лучше имитировать финализатор_io.IOBase.bpo-36402: Исправлено состояние гонки при завершении Python во время ожидания потоков. Ожидание теперь продолжается до удаления состояния потока Python всех не-демонических потоков (join всех не-демонических потоков), а не просто до завершения не-демонических потоков Python.
bpo-34886: Исправлена непреднамеренная ValueError в
subprocess.run(), возникавшая при проверке конфликтующих аргументовinputиstdinилиcapture_outputиstdoutилиstderr, когда они были явно указаны, но со значениямиNoneвнутри переданного словаря**kwargs, а не переданы напрямую по имени. Патч от Rémi Lapeyre.bpo-37173: Сообщение об исключении для
inspect.getfile()теперь корректно сообщает переданный класс, а не модуль builtins.bpo-37178: Добавлена форма math.perm() с одним аргументом, которая означает то же, что и math.factorial().
bpo-37178: Для math.perm(n, k) параметр k по умолчанию равен n, что даёт тот же результат, что и factorial.
bpo-37163: Устарела передача аргумента
objдляdataclasses.replace()в качестве именованного аргумента.bpo-37165: Функция _collections._count_elements переведена на использование Argument Clinic.
bpo-34767: Не всегда создавать
collections.dequeвasyncio.Lock.bpo-37158: Ускорена statistics.fmean() за счёт перехода от функции к генератору.
bpo-37150:
argparse._ActionsContainer.add_argumentтеперь вызывает ошибку, если кто-то случайно передаёт объект класса FileType вместо экземпляра FileType в качестве аргументаtype.bpo-35621: Поддержка запуска подпроцессов asyncio при выполнении цикла событий в потоке на UNIX.
bpo-36520: Длинные заголовки email с символами UTF-8 теперь правильно кодируются при переносе. Патч от Jeffrey Kintscher.
bpo-30835: Исправлена ошибка в разборе email, когда сообщение с недопустимыми байтами в content-transfer-encoding многокомпонентного сообщения могло вызывать AttributeError. Патч от Andrew Donnellan.
bpo-35805: Добавлен парсер для заголовка Message-ID, и он добавлен в стандартный HeaderRegistry. Это должно предотвратить перенос Message-ID с использованием слов, закодированных по RFC 2048.
bpo-35070: posix.getgrouplist() теперь работает корректно, когда пользователь принадлежит к NGROUPS_MAX дополнительным группам. Патч от Jeffrey Kintscher.
bpo-32627: Исправлена ошибка компиляции при включении конфликтующих заголовков
_uuid.bpo-11122: Distutils больше не будет проверять наличие rpmbuild только в указанных путях.
bpo-4963: Исправлено недетерминированное поведение при сопоставлении расширений mimetypes и повторной инициализации модуля.
Документация¶Documentation
bpo-34903: Документировано, что в
datetime.datetime.strptime()ведущий ноль в некоторых двузначных форматах является необязательным. Патч от Майка Глина.
Тесты¶Tests
bpo-37421: test_distutils.test_build_ext() теперь может удалять временную директорию в Windows: не импортировать только что собранное C-расширение («xx») в текущем процессе, а тестировать его в отдельном процессе.
bpo-37421: test_concurrent_futures теперь очищает multiprocessing, чтобы немедленно удалить временные директории, созданные multiprocessing.util.get_temp_dir().
bpo-37421: test_winconsoleio больше не допускает утечки временного файла: использует tempfile.TemporaryFile() для его удаления после завершения теста.
bpo-37421: Тесты multiprocessing теперь явно вызывают
_run_finalizers()для немедленного удаления временных директорий, созданных тестами.bpo-37199: Исправлены ошибки тестов, когда IPv6 недоступен или отключён.
bpo-37335: Удалён более не нужный код из тестов приведения локали c locale
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: Добавлена опция –cleanup в python3 -m test для удаления каталогов
test_python_*предыдущих неудачных заданий. Добавлена цель «make cleantest» для запускаpython3 -m test --cleanup.bpo-37362: test_gdb больше не завершается ошибкой, если получает «неожиданное» сообщение в stderr: теперь он игнорирует stderr. Цель test_gdb – проверить, что команды python-gdb.py работают как ожидается, а не тестировать gdb.
bpo-35998: Избежать TimeoutError в test_asyncio: test_start_tls_server_1()
bpo-37278: Исправлен test_asyncio ProactorLoopCtrlC: теперь поток присоединяется, чтобы предотвратить утечку работающего потока и ссылки.
bpo-37261: Исправлен
test.support.catch_unraisable_exception(): его метод __exit__() теперь игнорирует неперехватываемое исключение, возникающее при очистке его атрибутаunraisable.bpo-37169: Переписаны модульные тесты
_PyObject_IsFreed().bpo-37153:
test_venv.test_mutiprocessing()теперь явно вызываетpool.terminate()для ожидания завершения пула.bpo-28009: Изменить логику test_uuid для проверки, доступна ли программа И может ли она использоваться для получения MACADDR как основы для UUID. Патч от M. Felt.
Сборка¶Build
bpo-37189: Многие функции
PyRun_XXX(), такие какPyRun_String(), по ошибке перестали экспортироваться вlibpython38.dll. Повторный экспорт исправляет совместимость ABI.
Windows¶
bpo-10945: Официальное прекращение поддержки создания установщиков bdist_wininst в системах, отличных от Windows.
bpo-37369: Исправляет путь для
sys.executableпри запуске из Microsoft Store.bpo-37351: Удаляет libpython38.a из стандартного дистрибутива Windows.
bpo-35360: Обновление сборок Windows для использования SQLite 3.28.0.
bpo-37267: В Windows
os.dup()больше не создает наследуемый файловый дескриптор при обработке символьного файла.bpo-36779: Обеспечить корректность
time.tznameв Windows, когда активная кодовая страница установлена в CP_UTF7 или CP_UTF8.
macOS¶
bpo-34602: Устранены сбои тестового набора на macOS за счет прекращения вызова resource.setrlimit для увеличения лимита размера стека процесса во время выполнения. Изменение во время выполнения больше не требуется, так как интерпретатор теперь собирается с большим размером стека по умолчанию.
bpo-35360: Обновлен установщик macOS для использования SQLite 3.28.0.
bpo-34631: Обновлена OpenSSL до версии 1.1.1c в установщике macOS.
IDLE¶
bpo-37325: Исправлен порядок обхода фокуса вкладок для диалоговых окон справки и настраиваемого запуска.
bpo-37321: Оба сообщения об ошибке подключения подпроцесса теперь ссылаются на раздел «Ошибка запуска» документации IDLE.
bpo-37177: Диалоги поиска теперь правильно прикрепляются к своему главному окну, чтобы они вели себя как остальные диалоги и не прятались за своим главным окном.
bpo-37039: Адаптация поведения «Zoom Height» под отдельные экраны: при первом использовании на конкретном экране окно временно разворачивается на весь экран. Изменение настроек экрана может сделать сохранённую высоту недействительной. Пока окно развёрнуто, «Zoom Height» не действует.
bpo-35763: Напоминание в подсказке вызова о том, что ‘/’ означает позиционный параметр, сделано менее заметным: оно добавляется только при наличии места на первой строке.
bpo-5680: Добавлен пункт «Run… Customized» в меню Run для запуска модуля с настраиваемыми параметрами. Любые введенные «аргументы командной строки» добавляются в sys.argv. Можно отключить обычный перезапуск главного модуля оболочки.
C API¶
bpo-36763: Добавлена функция
PyConfig_SetWideStringList().bpo-28805: Соглашение о вызове
METH_FASTCALLтеперь задокументировано.bpo-37221:
tp_printвозвращён в конец структурыPyTypeObjectдля восстановления поддержки старого кода (в частности, сгенерированного Cython), устанавливающегоtp_print = 0. Обратите внимание, чтоtp_printбудет полностью удалён в Python 3.9.bpo-37221: Новая функция
PyCode_NewWithPosOnlyArgs()позволяет создавать объекты кода, какPyCode_New(), но с дополнительным параметром posonlyargcount для указания количества позиционных аргументов.bpo-37215: Исправлена проблема dtrace, возникшая в bpo-36842.
bpo-37191: Python.h больше не требует поддержки компилятором смешанных объявлений (GCC
-Wdeclaration-after-statement), которые были добавлены в 3.8.0 Beta 1. Обратите внимание, что в Python 3.9 смешанные объявления снова потребуются.bpo-37170: Исправлено приведение типов при ошибке в
PyLong_AsUnsignedLongLongMask().
Python 3.8.0 бета 1¶Python 3.8.0 beta 1
Дата выпуска: 2019-06-04
Безопасность¶Security
bpo-35907: CVE-2019-9948: предотвращение чтения файлов путём запрета схем URL
local-file://иlocal_file://вURLopener().open()иURLopener().retrieve()изurllib.request.bpo-33529: Предотвращение бесконечного цикла в функции fold, используемой при кодировании заголовков электронных писем, когда в заголовке слишком много не-ASCII символов.
bpo-33164: Обновлена реализация blake2, которая использует безопасную реализацию memset, предоставляемую платформой.
Ядро и встроенные модули¶Core and Builtins
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: Добавлена поддержка нативного идентификатора потока (TID) в OpenBSD.
bpo-26219: Реализован механизм кэширования для каждой операции (opcode), и инструкция
LOAD_GLOBALиспользует его.LOAD_GLOBALтеперь работает примерно на 40% быстрее. Вклад от Yury Selivanov и Inada Naoki.bpo-37072: Исправлен сбой в PyAST_FromNodeObject(), когда flags равен NULL.
bpo-37029: Освобождение большого количества мелких объектов могло занимать время, квадратично зависящее от количества арен, из-за линейного поиска для поддержания списка используемых арен
obmalloc.cв отсортированном порядке по количеству свободных пулов памяти. Теперь это делается без поиска, и наихудшее время стало линейно от количества арен. Для программ, где это заметно (обычно с более чем 100 тысячами одновременно живых мелких объектов), это может значительно сократить время, необходимое для освобождения их памяти.bpo-26423: Исправлено возможное переполнение в
wrap_lenfunc()приsizeof(long) < sizeof(Py_ssize_t)(например, 64-разрядная Windows).bpo-37050: Улучшено AST для отладочных f-строк, использующих ‘=’ для вывода исходного текста вычисляемого выражения. Удалён expr_text из узла FormattedValue; вместо него теперь используется узел Constant string (возможно, объединённый с соседними константными выражениями внутри f-строки).
bpo-22385: Методы
bytes.hex,bytearray.hexиmemoryview.hex, а также функцииbinascii.hexlifyиb2a_hexтеперь могут включать необязательный разделитель между шестнадцатеричными байтами. Эта возможность вдохновлена реализацией hexlify в MicroPython.bpo-26836: Добавлен
os.memfd_create().bpo-37032: Добавлен новый метод
replace()к типу code (types.CodeType).bpo-37007: Реализованы
socket.if_nameindex(),socket.if_nametoindex()иsocket.if_indextoname()в Windows.bpo-36829:
PyErr_WriteUnraisable()теперь создаёт объект traceback, если текущего traceback нет. Кроме того, вызываетPyErr_NormalizeException()иPyException_SetTraceback()для нормализации значения исключения. Любые ошибки игнорируются.bpo-36878: Текст после
# type: ignoreпринимается только в том случае, если первый символ является ASCII. Это необходимо, чтобы запретить такие конструкции, как# type: ignoreé.bpo-36878: Текст, находящийся после комментария
# type: ignore, сохраняется в AST. Например, для игнорирования типа вида# type: ignore[E1000]в узле AST будет сохранена строка"[E1000]".bpo-2180: Продолжение строки в EOF теперь считается
SyntaxError(автор: Энтони Соттиле).bpo-36907: Исправлен сбой при вызове C-функции со словарём ключевых аргументов (
f(**kwargs)) и изменении словаряkwargsво время выполнения этой функции.bpo-36946: Исправлено возможное переполнение знакового целого при обработке срезов.
bpo-36826: Добавлена поддержка типа NamedExpression в ast_unparse.c
bpo-1875:
SyntaxErrorтеперь возбуждается, если блок кода, который будет оптимизирован (например, условия, которые всегда ложны), содержит синтаксические ошибки. Патч от Пабло Галиндо.bpo-36027: Разрешено вычисление обратных по модулю с помощью трёхаргументного
pow: второй аргумент теперь может быть отрицательным в случае, когда первый и третий аргументы взаимно просты.bpo-36861: Обновлена база данных Unicode до версии 12.1.0.
bpo-28866: Избегайте кэширования атрибутов классов, тип которых определяет mro(), чтобы избежать сложной проблемы инвалидации кэша.
bpo-36851: Стек
FrameTypeтеперь корректно очищается, если выполнение завершается return, и стек не пуст.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. Патч от Майкла Блэйхая, Эрика Сервантеса и vaultah.
bpo-36737: Перенесено PyRuntimeState.warnings в состояние каждого интерпретатора (через «состояние модуля»).
bpo-36793: Удалены реализации
__str__из встроенных типовbool,int,float,complexи нескольких классов стандартной библиотеки. Теперь они наследуют__str__()отobject.bpo-36817: Добавлена функция
=для f-строк отладки. Она может предшествовать!s,!rили!a. Результат – текст выражения, затем знак равенства, затем repr значения выражения. Так,f'{3*9+15=}'будет равно строке'3*9+15=42'. Если=указан, то по умолчанию используется преобразование!r, за исключением случая, когда задан спецификатор формата. В этом случае поведение форматирования не меняется и используется __format__.bpo-24048: Сохранять текущее исключение во время
remove_module()в import.c.bpo-27987: pymalloc теперь возвращает блоки памяти, выровненные по 16 байт (вместо 8 байт) на 64-битных платформах, чтобы соответствовать ABI x86-64. Современные компиляторы чаще предполагают такое выравнивание. Патч от Инада Наоки.
bpo-36601: Давно потерявшая смысл проверка на
getpid() == main_pidбыла удалена из внутреннего C-обработчика сигналов Python.bpo-36594: Исправлено некорректное использование
%pв строках форматирования. Патч от Закери Спайца.bpo-36045: builtins.help() теперь добавляет префикс
asyncдля асинхронных функций.bpo-36084: Добавлен нативный идентификатор потока (TID) в объекты threading.Thread (поддерживаемые платформы: Windows, FreeBSD, Linux, macOS).
bpo-36035: Добавлено исправление для битых символических ссылок в сочетании с pathlib.
bpo-35983: Добавлены новые макросы trashcan для обработки двойного освобождения, которое могло произойти, когда
tp_deallocподкласса вызываетtp_deallocбазового класса, а базовый класс использует механизм trashcan. Патч от Йеруна Демейера.bpo-20602: не очищать
sys.flagsиsys.float_infoпри завершении работы. Исправление от Zackery Spytz.bpo-26826: Предоставить
copy_file_range()как низкоуровневый API в модулеos.bpo-32388: Убрать требование двоичной совместимости между версиями в tp_flags.
bpo-31862: Перенести binascii на многофазную инициализацию PEP 489. Исправление от Marcel Plch.
Библиотека¶Library
bpo-37128: Добавлен
math.perm().bpo-37120: Добавить SSLContext.num_tickets для управления количеством сессионных билетов TLSv1.3.
bpo-12202: Исправить обработку ошибок в
msilib.SummaryInformation.GetProperty(). Исправление от Zackery Spytz.bpo-26835: Модуль fcntl теперь содержит константы для запечатывания memfd (файловых дескрипторов памяти).
bpo-29262: Добавить вспомогательные функции интроспекции
get_origin()иget_args()в модульtyping.bpo-12639:
msilib.Directory.start_component()больше не завершается ошибкой, если keyfile не являетсяNone.bpo-36999: Добавить метод
asyncio.Task.get_coro()для публичного доступа к объекту корутины задачи.bpo-35246: Сделать
asyncio.create_subprocess_exec()принимающим аргументы, подобные пути (path-like).bpo-35279: Изменить значение по умолчанию max_workers для
ThreadPoolExecutorс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: Добавить
Protocolи@runtime_checkableв модульtyping.bpo-36933: Функции
sys.set_coroutine_wrapperиsys.get_coroutine_wrapper, которые были объявлены устаревшими и отмечены к удалению в версии 3.8, удалены.bpo-37047: Обрабатывать позднее связывание и доступ к атрибутам в настройке
unittest.mock.AsyncMockдля autospeccing. Документировать недавно реализованные асинхронные методы вunittest.mock.MagicMock.bpo-37049: PEP 589: Добавить
TypedDictв модульtyping.bpo-37046: PEP 586: Добавить
Literalв модульtyping.bpo-37045: PEP 591: Добавить квалификатор
Finalи декоратор@finalв модульtyping.bpo-37035: Не записывать в журнал исключения на основе OSError, если в транспорте asyncio произошла фатальная ошибка. Удалённый узел может возбудить почти любое OSError, пользователь не может избежать этих исключений, исправляя свой код. Ошибки по-прежнему передаются в пользовательский код, просто их запись в журнал бессмысленна и засоряет журналы asyncio.
bpo-37001:
symtable.symtable()теперь принимает те же типы входных данных для исходного кода, что и встроенная функцияcompile(). Исправление от Dino Viehland.bpo-37028: Реализовать REPL asyncio
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: Добавлена поддержка вызова
next()с макетом (mock), полученным изunittest.mock.mock_open()bpo-27737: Разрешена кодировка заголовка, состоящего только из пробелов, в
email.header. Автор: Batuhan Taskayabpo-36969: Команда PDB
argsтеперь отображает только позиционные аргументы. Исправление предоставлено Rémi Lapeyre.bpo-36969: Команда PDB
argsтеперь отображает только именованные аргументы. Исправление предоставлено Rémi Lapeyre.bpo-36983: Добавлены недостающие имена в
typing.__all__:ChainMap,ForwardRef,OrderedDict. Автор: Anthony Sottile.bpo-36972: Добавлен протокол SupportsIndex в модуль typing, чтобы проверка типов могла определять классы, которые можно передавать в
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 импорт ABC из
collectionsустарел, импорт следует выполнять изcollections.abc. Возможность импорта изcollectionsпланировалось удалить в 3.8, но отложили до 3.9; документация иDeprecationWarningуточнены.bpo-36949: Реализован __repr__ для объектов WeakSet.
bpo-36948: Исправлен
NameErrorвurllib.request.URLopener.retrieve(). Исправление от Karthikeyan Singaravelan.bpo-33524: Исправлена переноска заголовка email, когда max_line_length равен 0 или None и заголовок содержит не-ASCII символы. Предоставлено Licht Takeuchi (@Licht-T).
bpo-24564:
shutil.copystat()теперь игнорируетerrno.EINVALнаos.setxattr(), которые могут возникать при копировании файлов в файловых системах без поддержки расширенных атрибутов.Оригинальное исправление от Giampaolo Rodola, обновлено Ying Wang.
bpo-36888: Дочерние процессы Python теперь могут получать статус своего родительского процесса с помощью multiprocessing.process.parent_process
bpo-36921:
@coroutineобъявлен устаревшим в пользуasync def.bpo-25652: Исправлена ошибка в
__rmod__модуляUserString. Автор: 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.FlowControlMixingиasyncio.StreamReaderProtocol, вне пакета asyncio.bpo-36845: Добавлена проверка целочисленных префиксов при создании IP-сетей и интерфейсов в модуле ipaddress.
bpo-23378: Добавлено действие extend в argparse.
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: При использовании
type_comments=Trueвast.parseконструкция# 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: Объекты
CacheиStatementиз модуляsqlite3не предоставляются пользователю. Исправление от Aviv Palivoda.bpo-24538: В
shutil.copystat()сначала копируются расширенные атрибуты файлов, а затем права доступа, поскольку расширенные атрибуты можно установить только пока конечный файл доступен для записи.bpo-36829: добавлена новая функция
sys.unraisablehook(), которую можно переопределить для управления поведением при «невыбрасываемых исключениях». Она вызывается, когда возникло исключение, но у Python нет возможности его обработать. Например, при возникновении исключения в деструкторе или во время сборки мусора (gc.collect()).bpo-36832: представлена
zipfile.Path– совместимая с pathlib обёртка для навигации по zip-файлам.bpo-36814: исправлена ошибка, из-за которой os.posix_spawnp() некорректно вызывала TypeError, когда file_actions равно None.
bpo-33110: корректная обработка исключений, возникающих в функциях, добавленных через add_done_callback модуля concurrent.futures, когда Future уже завершён.
bpo-26903: ограничение
max_workersвProcessPoolExecutorдо 61 для обхода ограничения WaitForMultipleObjects.bpo-36813: исправлен
QueueListener: теперь он вызываетqueue.task_done()при остановке. Патч от Bar Harel.bpo-36806: запрещено создание объектов потоков asyncio, таких как StreamReader, StreamWriter, процесс и их протоколов, за пределами пакета asyncio.
bpo-36802: добавлены как синхронные, так и асинхронные вызовы для StreamWriter.write() и StreamWriter.close()
bpo-36801: корректная обработка закрытия SSL-соединения при вызове asyncio StreamWriter.drain().
bpo-36785: реализация PEP 574 (протокол pickle 5 с внешними буферами).
bpo-36772: functools.lru_cache() теперь можно использовать как обычный декоратор, а не только как функцию, возвращающую декоратор.
bpo-6584: добавлено исключение
BadGzipFileв модульgzip.bpo-36748: оптимизирована буферизация записи в реализации
TextIOWrapperна C. Запись строки ASCII вTextIOWrapperс кодировками ascii, latin1 или utf-8 ускорена примерно на 20%. Патч от Inada Naoki.bpo-8138: не помечать
wsgiref.simple_server.SimpleServerкак многопоточный, так какwsgiref.simple_server.WSGIServerоднопоточный.bpo-22640:
py_compile.compile()теперь поддерживает тихий режим. Патч от Joannah Nanjekye.bpo-29183: исправлены двойные исключения в
wsgiref.handlers.BaseHandler– методclose()вызывается только при отсутствии исключения.bpo-36548: улучшено представление (repr) флагов регулярных выражений.
bpo-36542: сигнатуру функций Python теперь можно переопределять, указав атрибут
__text_signature__.bpo-36533: блокировки logging.Handler переинициализируются в порождённых дочерних процессах вместо попытки захватить их все в родителе перед порождением, чтобы потом освободить в дочернем процессе. Шаблон захват/освобождение приводил к взаимоблокировкам в коде, где реализованы цепочки обработчиков логирования, зависящих друг от друга, так как порядок захвата блокировок не гарантирован.
bpo-35252: выбрасывается TypeError вместо AssertionError при использовании недопустимой аннотации типа с singledispatch.
bpo-35900: методы reduction теперь могут возвращать кортеж из 6 элементов, где шестой элемент указывает пользовательский метод установки состояния, который вызывается вместо обычного метода
__setstate__.bpo-35900: включена регистрация пользовательских колбэков reduction для функций и классов в _pickle.c через новый атрибут Pickler
reducer_overridebpo-36368: исправлена ошибка, приводившая к аварийному завершению экземпляров SharedMemoryManager в интерактивных сессиях после отправки ctrl-c (KeyboardInterrupt)
bpo-31904: исправлена ошибка mmap для VxWorks
bpo-27497:
csv.DictWriter.writeheader()теперь возвращает значение, возвращаемое нижележащим методомcsv.Writer.writerow(). Патч предоставлен Ashish Nitin Patil.bpo-36239: при разборе .mo-файлов теперь игнорируются комментарии, начинающиеся и заканчивающиеся на #-#-#-#-#.
bpo-26707: plistlib теперь может читать и записывать бинарные plist-файлы, созданные как KeyedArchive. В частности, plistlib обрабатывает токены 0x80 как объекты UID.
bpo-31904: добавлена поддержка модуля posix для VxWorks.
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(), возвращающая биномиальный коэффициент – число способов выбрать k элементов из n без повторений и без учёта порядка. Патч от Yash Aggarwal и Keller Fuchs.bpo-26660: Исправлены ошибки прав доступа при очистке
TemporaryDirectory. РанееTemporaryDirectory.cleanup()завершался ошибкой, если внутри временной директории создавались файлы или каталоги, недоступные для записи или поиска.bpo-34271: Добавлены средства отладки в модуль ssl. Теперь можно выгружать ключевые материалы и трассировать протокол TLS. Контексты по умолчанию и из стандартной библиотеки также поддерживают переменную окружения SSLKEYLOGFILE.
bpo-26467: Добавлен AsyncMock для поддержки мокирования корутин asyncio с помощью unittest. Патч от Лизы Роуч (Lisa Roach).
bpo-33569: dataclasses.InitVar: теперь доступен тип, используемый для создания переменной инициализации.
bpo-34424: Исправлена сериализация сообщений, содержащих закодированные строки, когда policy.linesep установлен в строку из нескольких символов. Патч от Йенса Трёгера (Jens Troeger).
bpo-34303: Производительность
functools.reduce()немного улучшена. Патч от Сергея Федосеева.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: Добавлена поддержка bytes и объектов, подобных пути, в
subprocess.Popen()на Windows. Параметр args теперь принимает объект, подобный пути, если shell равноFalse, а также последовательность, содержащую bytes и объекты, подобные пути. Параметр executable теперь принимает bytes и объект, подобный пути. Параметр cwd теперь принимает bytes. Основано на патче Андерса Лорентсена.bpo-33123:
pathlib.Path.unlinkтеперь принимает параметр missing_ok, чтобы избежать возникновенияFileNotFoundError. Патч от Роберта Бухгольца (Robert Buchholz).bpo-32941: Объекты
mmap.mmapтеперь могут вызывать системный вызов madvise() (черезmmap.mmap.madvise()).bpo-22102: Добавлена поддержка ZIP-файлов с номером диска, установленным в 0. Такие файлы часто создаются встроенными инструментами 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: Добавлен
__copy__()вcollections.UserListиcollections.UserDictдля правильной реализации поверхностного копирования объектов. Патч от Бара Хареля (Bar Harel).bpo-31829:
\r,\0и\x1a(конец файла в Windows) теперь экранируются в объектах pickle протокола 0 для строк Юникода. Это позволяет загружать их без потерь из файлов, открытых в текстовом режиме в Python 2.bpo-23395:
_thread.interrupt_main()теперь не устанавливает статус ошибки Python, если сигналSIGINTигнорируется или не обрабатывается Python.
Документация¶Documentation
bpo-36896: Уточнено, что некоторые типы имеют нестабильную сигнатуру конструктора между версиями Python.
bpo-36686: Улучшена документация аргументов stdin, stdout и stderr функции
asyncio.subprocess_exec: указано, какие значения поддерживаются. Также отмечено, что декодирование как текст не поддерживается.Добавлено несколько тестов для проверки работоспособности различных значений, передаваемых аргументам std*.
bpo-36984: Улучшены ссылки на версии добавления в модуле
typing. Автор: Anthony Sottile.bpo-36868: В разделе «Что нового» теперь упоминается SSLContext.hostname_checks_common_name вместо SSLContext.host_flags.
bpo-35924: Добавлено примечание в документацию
curses.addstr(), предупреждающее, что многострочные строки могут вызывать ошибку сегментации из-за ошибки в ncurses.bpo-36783: Добавлена документация C API для Time_FromTimeAndFold и PyDateTime_FromDateAndTimeAndFold в соответствии с PEP 495. Патч от Эдисона Абахурире (Edison Abahurire).
bpo-36797: Большая часть устаревшей документации distutils была либо удалена, либо более явно помечена как временно сохранённая, пока документация setuptools не покроет эти темы самостоятельно.
bpo-22865: Добавлены подробности в документацию функции
pty.spawn.bpo-35397: Удалено устаревание и документирована функция urllib.parse.unwrap(). Патч предоставлен Rémi Lapeyre.
bpo-32995: Добавлена переменная контекста в глоссарий.
bpo-33519: Уточнено, что
copy()не является частью абстрактного базового классаMutableSequence.bpo-33482: Сделать
codecs.StreamRecoder.writelinesпринимающим список байтов.bpo-25735: Добавлена документация для func factorial, указывающая, что она возвращает целые числа.
bpo-20285: Расширить object.__doc__ (докстринг) для большей ясности. Изменить pydoc.py, чтобы help(object) перечислял методы объекта (для других классов help опускает методы базового класса object.)
Тесты¶Tests
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: Исправить test_memfd_create на старых ядрах Linux.
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 в соответствии с новым TLS-сертификатом self-signed.pythontest.net.
bpo-35925: Пропускать сетевые тесты httplib и nntplib, если они иначе завершатся ошибкой из-за современной ОС или дистрибутива с политикой OpenSSL по умолчанию, отклоняющей подключения к серверам со слабыми сертификатами.
bpo-36782: Добавить тесты для нескольких функций C API в модуле
datetime. Патч от Edison Abahurire.bpo-36342: Исправить test_multiprocessing в test_venv, если на платформе отсутствует работоспособный sem_open.
Сборка¶Build
bpo-36721: Чтобы встроить Python в приложение, необходимо передать новую опцию
--embedвpython3-config --libs --embedдля получения-lpython3.8(линковка приложения с libpython). Для поддержки обеих версий 3.8 и старше попробуйте сначалаpython3-config --libs --embedи откатитесь кpython3-config --libs(без--embed), если предыдущая команда не удалась.Add a pkg-config
python-3.8-embedmodule to embed Python into an application:pkg-config python-3.8-embed --libsincludes-lpython3.8. To support both 3.8 and older, trypkg-config python-X.Y-embed --libsfirst and fallback topkg-config python-X.Y --libs(without--embed) if the previous command fails (replaceX.Ywith the Python version).On the other hand,
pkg-config python3.8 --libsno longer contains-lpython3.8. C extensions must not be linked to libpython (except on Android, case handled by the script); this change is backward incompatible on purpose.bpo-36786: "make install" теперь запускает compileall параллельно.
Windows¶
macOS¶
bpo-36231: Поддержка сборки Python на macOS без установленного /usr/include. Начиная с macOS 10.14, системные заголовочные файлы доступны только в SDK, предоставляемом либо Command Line Tools, либо приложением Xcode.
IDLE¶
bpo-35610: Заменить теперь избыточный .context_use_ps1 на .prompt_last_line. Это завершает изменение, начатое в bpo-31858.
bpo-37038: Сделать idlelib.run запускаемым; добавить тестовое условие.
bpo-36958: Печатать любой аргумент, отличный от None или int, переданный в SystemExit или sys.exit().
bpo-36807: При сохранении файла вызывать os.fsync(), чтобы данные сбрасывались на, например, USB-накопитель.
bpo-32411: В browser.py удалить лишнюю сортировку по номеру строки, так как словарь создавался в порядке номеров строк.
Инструменты/Демонстрации¶Tools/Demos
bpo-37053: Правильно обрабатывает строки вида u»bar» в Tools/parser/unparse.py. Исправление от Chih-Hsuan Yen.
C API¶
bpo-36763: Реализована PEP 587 «Python Initialization Configuration».
bpo-36379: Исправлены падения при попытке использовать параметр modulo, когда
__ipow__реализован на C.bpo-37107: Обновлены
PyObject_CallMethodObjArgs()и_PyObject_CallMethodIdObjArgsдля использования_PyObject_GetMethod, чтобы избежать создания объекта связанного метода во многих случаях. Исправление от Michael J. Sullivan.bpo-36974: Реализован PEP 590: Vectorcall – быстрый протокол вызова для CPython. Это новый протокол для оптимизации вызовов пользовательских вызываемых объектов.
bpo-36763:
Py_Main()теперь возвращает код выхода вместо вызоваPy_Exit(exitcode)при вызовеPyErr_Print(), если текущий тип исключения –SystemExit.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 альфа 4¶Python 3.8.0 alpha 4
Дата выпуска: 2019-05-06
Безопасность¶Security
bpo-36742: Исправлена некорректная обработка символов предварительной нормализации в urlsplit().
bpo-30458: Устранение CVE-2019-9740 путём запрета URL-путей, содержащих пробелы или управляющие символы, в базовом запросе http-клиента. Такие потенциально вредоносные URL для внедрения заголовков теперь вызывают исключение http.client.InvalidURL.
bpo-35755:
shutil.which()теперь используетos.confstr("CS_PATH"), если доступно и если переменная окруженияPATHне установлена. Также удален текущий каталог изposixpath.defpath. В Unixshutil.which()и модульsubprocessбольше не ищут исполняемый файл в текущем каталоге, если переменная окруженияPATHне установлена.
Ядро и встроенные модули¶Core and Builtins
bpo-36722: В отладочной сборке import теперь также ищет C-расширения, скомпилированные в режиме выпуска, и C-расширения, скомпилированные со стабильным ABI.
bpo-32849: Исправлен код инициализации Python на FreeBSD для правильного определения недопустимости дескриптора файла stdin (fd 0).
bpo-36623: Удалены заголовки парсера и связанные объявления функций, у которых отсутствуют реализации после удаления pgen.
bpo-20180:
dict.pop()теперь работает до 33% быстрее благодаря Argument Clinic. Исправление от Inada Naoki.bpo-36611: Отладочные распределители памяти: отключено поле serialno по умолчанию в отладочных перехватчиках распределителей памяти Python для уменьшения потребления памяти на 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: теперь для первого символа используется заглавная буква в стиле titlecase вместо верхнего регистра.
bpo-36540: Реализован PEP 570 (только позиционные параметры Python). Исправление от Pablo Galindo.
bpo-36475:
PyEval_AcquireLock()иPyEval_AcquireThread()теперь завершают текущий поток, если вызваны во время финализации интерпретатора, что делает их согласованными сPyEval_RestoreThread(),Py_END_ALLOW_THREADS()иPyGILState_Ensure().bpo-36504: Исправлено переполнение знакового целого в _ctypes.c’s
PyCArrayType_new().bpo-20844: Исправлена ошибка: выполнение скрипта с encoding cookie и LF-окончаниями строк может завершаться неудачей в Windows.
bpo-24214: Исправлена поддержка обработчика ошибок surrogatepass в инкрементальном декодере UTF-8.
bpo-36452: Изменение ключей
dictво время итерации самого словаря,keys(),values()илиitems()теперь будет обнаруживаться в некоторых крайних случаях, когда ключи удаляются/добавляются таким образом, что количество ключей не меняется. ИсключениеRuntimeErrorбудет возбуждено послеlen(dict)итераций. Предложено Thomas Perl.bpo-36459: Исправлено возможное двойное
PyMem_FREE()из-за tokenizer.c’stok_nextc().bpo-36433: Исправлено сообщение TypeError в classmethoddescr_call.
bpo-36430: Исправлена возможная утечка ссылок в
itertools.count().bpo-36440: В сообщения
ParserErrorдобавлены имена узлов вместо числовых идентификаторов. Патч от A. Skrobov.bpo-36143: Перегенерирован
keywordиз файлов Grammar и Tokens с помощью pgen. Патч от Pablo Galindo.bpo-18372: Добавлены недостающие вызовы
PyObject_GC_Track()в модулеpickle. Патч от Zackery Spytz.
Библиотека¶Library
bpo-35952: Исправлена работа pythoninfo при отсутствии компилятора.
bpo-28238: Методы
.find*()модуля xml.etree.ElementTree теперь могут выполнять поиск по шаблонам, таким как{*}tagи{ns}*, которые соответствуют тегу в любом пространстве имён или всем тегам в пространстве имён. Патч от Stefan Behnel.bpo-26978:
pathlib.path.link_to()теперь реализована. Она создаёт жёсткую ссылку, указывающую на путь.bpo-1613500: Теперь
fileinput.FileInputиспользует режим входного файла для корректной установки режима выходного файла (ранее было жёстко задано'w'), когда в его конструктор передаётсяinplace=True.bpo-36734: Исправлена компиляция
faulthandler.cна HP-UX. Инициализацияstack_t current_stackнулём с помощьюmemset().bpo-13611: Пакеты xml.etree.ElementTree получили поддержку сериализации C14N 2.0. Патч от Stefan Behnel.
bpo-36669: Добавлена поддержка оператора матричного умножения в weakref.proxy, которой не хватало.
bpo-36676: XMLParser() в xml.etree.ElementTree предоставляет контекст префиксов пространств имён цели парсера, если она определяет методы колбэков "start_ns()" и/или "end_ns()". Патч от Stefan Behnel.
bpo-36673: TreeBuilder и XMLPullParser в xml.etree.ElementTree получили поддержку разбора комментариев и инструкций обработки. Патч от Stefan Behnel.
bpo-36650: C-версия functools.lru_cache() считала вызовы с пустым словарём
**kwargsотличными от вызовов без ключевых слов вообще. Это не приводило к неверному результату, но вызывало неожиданный промах кеша.bpo-28552: Исправлен
distutils.sysconfig, еслиsys.executableравноNoneили пустой строке: используйтеos.getcwd()для инициализацииproject_base. Также исправлена команда сборки distutils: не используйтеsys.executable, если он равенNoneили пустой строке.bpo-35755:
shutil.which()иdistutils.spawn.find_executable()теперь используютos.confstr("CS_PATH"), если он доступен, вместоos.defpath, если переменная окруженияPATHне установлена. Кроме того, не используютсяos.confstr("CS_PATH")иos.defpath, если переменная окруженияPATHустановлена в пустую строку.bpo-25430: Повышение производительности
IPNetwork.__contains__()bpo-30485: Выражения путей в xml.etree.ElementTree теперь могут избегать явных префиксов пространств имён для тегов (или нотации "{namespace}tag") путём передачи пространства имён по умолчанию с пустым строковым префиксом.
bpo-36613: Исправлено, что
asyncio.wait() не удаляет колбэк при исключении.bpo-36598: Исправлена проверка
isinstanceдля Mock-объектов со спецификацией при выполнении кода под трассировкой. Патч от Karthikeyan Singaravelan.bpo-18748: В режиме разработки (
-Xdev) и в отладочной сборке деструкторio.IOBaseтеперь регистрирует исключенияclose(). В релизной сборке эти исключения по умолчанию не выводятся.bpo-36575: Модуль
_lsprofтеперь по умолчанию использует внутренний таймер, совпадающий сtime.perf_counter(). Ранее на Unix использовалсяgettimeofday(2). Новый таймер имеет лучшее разрешение на большинстве платформ Unix, и временные показатели больше не подвержены влиянию обновлений системных часов, так какperf_counter()является монотонным. Патч от Inada Naoki.bpo-33461:
json.loadsтеперь выводитDeprecationWarningпри указании опцииencoding. Патч от Matthias Bussonnier.bpo-36559: Модуль random теперь предпочитает компактный внутренний модуль _sha512 вместо hashlib для seed(version=2) для оптимизации времени импорта.
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: Если debuglevel установлен >0 в
http.client, выводятся все значения для заголовков с несколькими значениями для одного и того же имени заголовка. Патч от Matt Houglum.bpo-36492: Устарела передача обязательных аргументов, таких как func, в качестве именованных аргументов в функциях, которые должны принимать произвольные именованные аргументы и передавать их другой функции. Произвольные именованные аргументы (даже с именами "self" и "func") теперь можно передавать этим функциям, если обязательные аргументы переданы как позиционные.
bpo-27181: Добавлена статистическая функция geometric_mean().
bpo-30427:
os.path.normcase()используетos.fspath()для проверки типа своего аргумента. Избыточные проверки удалены из реализацийposixpath.normcase()иntpath.normcase(). Исправление от Wolfgang Maier.bpo-36385: Прекращено отклонение октетов IPv4 из-за неоднозначности восьмеричной записи. Начальные нули игнорируются и больше не считаются указанием на восьмеричные октеты. Октеты всегда являются десятичными числами. Октеты по-прежнему должны содержать не более трёх цифр, включая начальные нули.
bpo-36434: Ошибки при записи в ZIP-файл больше не препятствуют его корректному закрытию.
bpo-36407: Исправлено неправильное форматирование отступа при записи секции CDATA в xml.dom.minidom. Исправление от Владимира Сурьянинова.
bpo-36326: inspect.getdoc() теперь может находить докстринги для объектов-членов, когда __slots__ является словарём.
bpo-36366: Вызов
stop()на незапущенном или остановленном объектеunittest.mock.patch()теперь будет возвращатьNoneвместо выбрасыванияRuntimeError, что делает метод идемпотентным. Исправление от Karthikeyan Singaravelan.bpo-36348: Метод
imap.IMAP4.logout()больше не игнорирует молча произвольные исключения.bpo-31904: Добавлена поддержка модуля time и исправлены ошибки test_time для VxWorks.
bpo-36227: Добавлена поддержка именованных аргументов
default_namespaceиxml_declarationв функциях ElementTree.tostring() и ElementTree.tostringlist().bpo-36004: Добавлены новые альтернативные конструкторы
datetime.date.fromisocalendar()иdatetime.datetime.fromisocalendar(), которые создают объекты date из года по 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: Добавлена поддержка
classmethod()иstaticmethod()вunittest.mock.create_autospec(). Первоначальное исправление от Felipe Ochoa.bpo-35416: Исправлены потенциальные предупреждения о ресурсах в distutils. Исправление от Mickaël Schoentgen.
bpo-25451: Добавлены методы прозрачности в
tkinter.PhotoImage. Исправление от Zackery Spytz.bpo-35082: Не возвращать удалённые атрибуты при вызове dir на
unittest.mock.Mock.bpo-34547:
wsgiref.handlers.BaseHandlerтеперь корректно обрабатывает внезапные разрывы соединений клиентов. Исправление от Petter Strandmark.bpo-31658:
xml.sax.parse()теперь поддерживает путеподобные объекты. Исправление от Mickaël Schoentgen.bpo-34139: Удалять устаревший unix-датаграммный сокет перед привязкой
bpo-33530: Реализована технология Happy Eyeballs в
asyncio.create_connection(). Добавлены два новых аргумента, happy_eyeballs_delay и interleave, для настройки поведения Happy Eyeballs.bpo-33291: Не выбрасывать AttributeError при вызове функций inspect isgeneratorfunction, iscoroutinefunction, isasyncgenfunction для метода, созданного из произвольного вызываемого объекта. Вместо этого возвращать False.
bpo-31310: Исправлен multiprocessing.semaphore_tracker, чтобы он повторно использовался дочерними процессами
bpo-31292: Исправлен
setup.py check --restructuredtextдля файлов, содержащих директивыinclude.
Документация¶Documentation
bpo-36625: Удалены устаревшие комментарии из докстрингов в fractions.Fraction
bpo-30840: Документированы относительные импорты
bpo-36523: Добавлен докстринг для io.IOBase.writelines().
bpo-36425: Новый перевод документации: упрощённый китайский.
bpo-36345: Устранено дублирование кода из
Tools/scripts/serve.pyпри использовании директивыliteralincludeдля базового веб-сервера на основе wsgiref в документацииwsgiref. Предложено Stéphane Wirtel.bpo-36345: Использование кода скрипта
Tools/scripts/serve.pyв качестве примера в документацииwsgiref. Вклад от Stéphane Wirtel.bpo-36157: Добавлена документация для PyInterpreterState_Main().
bpo-33043: Обновляет страницу docs.python.org добавлением ссылки «Contributing to Docs» в конце страницы (между «Reporting Bugs» и «About Documentation»). Обновляет страницу «Found a Bug» дополнительными ссылками и информацией в разделе Documentation Bugs.
bpo-35581: @typing.type_check_only теперь позволяет заглушкам типов помечать функции и классы, недоступные во время выполнения.
bpo-33832: Добавлена запись в глоссарий для «магического метода».
bpo-32913: Добавлен пример re.Match.groupdict в regex HOWTO.
Тесты¶Tests
bpo-36719: regrtest теперь всегда обнаруживает несобираемые объекты. Ранее проверка включалась только с помощью
--findleaks. Теперь проверка также работает с-jN/--multiprocess N.--findleaksстановится устаревшим псевдонимом для--fail-env-changed.bpo-36725: При использовании многопроцессорного режима (-jN) regrtest теперь лучше сообщает об ошибках, если рабочий процесс завершается сбоем, и немедленно завершает работу при сбое рабочего потока или при прерывании.
bpo-36454: Изменён test_time.test_monotonic() так, чтобы проверялась только нижняя граница прошедшего времени после команды sleep, а не верхняя. Это предотвращает лишние сбои тестов на медленных сборочных ботах. Исправление от Victor Stinner.
bpo-32424: Улучшено тестовое покрытие для xml.etree.ElementTree. Исправление от Gordon P. Hemsley.
bpo-32424: Исправлена опечатка в тесте test_cyclic_gc() для xml.etree.ElementTree. Исправление от Gordon P. Hemsley.
bpo-36635: Добавлен новый модуль
_testinternalcapiдля тестирования внутреннего C API.bpo-36629: Исправлено
test_imap4_host_default_value()изtest_imaplib: теперь также перехватывается ошибкаerrno.ENETUNREACH.bpo-36611: Исправлено
test_sys.test_getallocatedblocks(), когдаtracemallocвключён.bpo-36560: Исправлена охота за утечками ссылок в regrtest: теперь также вычисляются дельты (счётчика ссылок, выделенных блоков памяти, количества файловых дескрипторов) во время прогрева, чтобы гарантировать, что всё инициализировано перед началом охоты за утечками ссылок.
bpo-36565: Исправлена охота за ссылками (
python3 -m test -R 3:3), когда в Python нет встроенного модуля abc.bpo-31904: Перенесён test_resource на VxWorks: пропущены тестовые случаи, устанавливающие RLIMIT_FSIZE и RLIMIT_CPU.
bpo-31904: Исправлен test_tabnanny на VxWorks: скорректировано сообщение об ошибке ENOENT.
bpo-36436: Исправлено
_testcapi.pymem_buffer_overflow(): обработка сбоя выделения памяти.bpo-31904: Исправлен test_utf8_mode на VxWorks: Python всегда использует UTF-8 на VxWorks.
bpo-36341: Исправлены тесты, которые могут завершаться с PermissionError при вызове bind() на сокетах AF_UNIX.
Сборка¶Build
bpo-36747: Удалена устаревшая цель Makefile scriptsinstall.
bpo-21536: В Unix расширения C больше не линкуются с libpython, кроме Android и Cygwin.
Теперь стало возможным для статически слинкованного Python загружать расширение C, собранное с использованием Python в виде разделяемой библиотеки.
Когда Python встраивается,
libpythonне должен загружаться сRTLD_LOCAL, а вместо этого сRTLD_GLOBAL. Ранее при использованииRTLD_LOCALуже было невозможно загрузить расширения C, которые не были слинкованы сlibpython, такие как расширения C стандартной библиотеки, собранные разделом*shared*файлаModules/Setup.distutils, python-config и python-config.py были изменены.
bpo-36707:
./configure --with-pymallocбольше не добавляет флагmв SOABI (sys.implementation.cache_tag). Включение или отключение pymalloc не влияет на ABI.bpo-36635: Изменены макросы
PyAPI_FUNC(type),PyAPI_DATA(type)иPyMODINIT_FUNCизpyport.h, когда определёнPy_BUILD_CORE_MODULE. ОпределениеPy_BUILD_CORE_MODULEтеперь должно использоваться для сборки C-расширения в виде динамической библиотеки, обращающейся к внутренностям Python: экспортируйте функцию PyInit_xxx() в экспортах DLL в Windows.bpo-31904: Не собирать расширение
_cryptна VxWorks.bpo-36618: Добавлен
-fmax-type-align=8в CFLAGS при обнаружении компилятора clang. Аллокатор памяти pymalloc выравнивает память по 8 байтам. На x86-64 clang по умолчанию ожидает выравнивание по 16 байтам и поэтому использует инструкцию MOVAPS, что может привести к segmentation fault. Указание clang, что Python ограничен выравниванием по 8 байтам, заставляет использовать инструкцию MOVUPS вместо неё: медленнее, но не вызывает SIGSEGV, если память не выравнена по 16 байтам. К сожалению, флаг должен быть добавлен вCFLAGS, а не только вCFLAGS_NODIST, поскольку сторонние расширения C могут иметь ту же проблему.bpo-36605:
make tagsиmake TAGSтеперь также разбираютModules/_io/*.cиModules/_io/*.h.bpo-36465: Релизные сборки и отладочные сборки теперь ABI-совместимы: определение макроса
Py_DEBUGбольше не подразумевает макросPy_TRACE_REFS, который вносил единственную несовместимость ABI. МакросPy_TRACE_REFS, добавляющий функциюsys.getobjects()и переменную окруженияPYTHONDUMPREFS, теперь можно задать с помощью новой опции сборки./configure --with-trace-refs.bpo-36577: setup.py теперь снова корректно сообщает об отсутствующих заголовках и библиотеках OpenSSL.
bpo-36544: Исправлена регрессия, внесённая при рефакторинге setup.py в bpo-36146.
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: Добавлен макет preset-iot для контейнеров Windows IoT ARM. Этот макет не содержит компонентов пользовательского интерфейса, таких как tkinter или IDLE. Также он не содержит файлов для поддержки сборки на целевой платформе, так как сборки Windows ARM32 должны выполняться кросс-компиляцией с использованием MSVC.
bpo-35941: Функция enum_certificates модуля ssl теперь возвращает сертификаты из всех доступных хранилищ сертификатов Windows в одном запросе, а не только сертификаты из общесистемного хранилища сертификатов. Это включает сертификаты из следующих хранилищ сертификатов: локальная машина, локальная машина (предприятие), локальная машина (групповая политика), текущий пользователь, текущий пользователь (групповая политика), службы, пользователи. Функция ssl.enum_crls() изменена аналогичным образом: теперь она возвращает все списки отзыва сертификатов из хранилищ списков отзыва сертификатов Windows.
bpo-36441: Исправлено создание venv при установленных отладочных сборках.
bpo-36085: Улучшено разрешение DLL в Windows за счёт использования безопасных путей поиска DLL и добавления
os.add_dll_directory().bpo-36010: Добавлен модуль стандартной библиотеки venv в дистрибутив nuget для Windows.
bpo-29515: Добавлены следующие константы модуля socket в Windows: 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 для использования текущей версии libffi в Windows.
bpo-34060: Добавлена информация о загрузке системы при запуске набора тестов в Windows. Патч от Ammar Askar. Основано на предыдущей работе Jeremy Kloth.
bpo-31512: С обновлением Windows 10 Creators Update пользователи без прав администратора теперь могут создавать символьные ссылки, если на компьютере включён режим разработчика.
macOS¶
IDLE¶
bpo-36429: Исправлен запуск IDLE с pyshell. Добавлен псевдоним idlelib.pyshell в начале; удалён псевдоним pyshell в конце. Удалена устаревшая команда __name__==’__main__’.
Инструменты/Демонстрации¶Tools/Demos
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: Изменены значения внутренних констант
CLEANBYTE,DEADDYTEиFORBIDDENBYTE, используемых отладочными хуками в распределителях памяти Python (функцияPyMem_SetupDebugHooks()). Байтовые последовательности0xCB,0xDBи0xFBзаменены на0xCD,0xDDи0xFD, чтобы использовать те же значения, что и отладочныеmalloc()иfree()CRT Windows.bpo-36443: Начиная с Python 3.7.0, вызов
Py_DecodeLocale()передPy_Initialize()приводит к кракозябрам (mojibake), если принудительно изменена локальLC_CTYPEи/или включён режим UTF-8 в конфигурации пользователя. Принудительное изменение LC_CTYPE и режим UTF-8 теперь по умолчанию отключены для исправления проблемы с кракозябрами. Теперь их нужно включать явно (opt-in) с помощью нового API_Py_PreInitialize()с параметром_PyPreConfig.bpo-36025: Исправлено случайное изменение в datetime C API, при котором аргументы функции
PyDate_FromTimestamp()ошибочно интерпретировались как одна временная метка, а не как кортеж аргументов, что приводило к тому, что существующий код начинал выбрасыватьTypeError. Это обратно несовместимое изменение присутствовало только в альфа-выпусках Python 3.8. Патч от Paul Ganssle.bpo-35810: Изменить
PyObject_Initдля корректного увеличения счётчика ссылок выделенных в куче объектов типа. Также исправить счётчики ссылок выделенных в куче типов, которые либо делали это вручную, либо не уменьшали счётчик ссылок типа в tp_dealloc.
Python 3.8.0 альфа 3¶Python 3.8.0 alpha 3
Дата выпуска: 2019-03-25
Безопасность¶Security
bpo-36216: Изменяет urlsplit() так, что при наличии в URL символов, которые при IDNA-кодировании (нормализация NFKC) разлагаются на символы, влияющие на разбор URL, возникает ValueError.
bpo-35121: Не отправлять куки домена A без атрибута Domain в домен B, когда домен A является суффиксом домена B, при использовании cookiejar с политикой
http.cookiejar.DefaultCookiePolicy. Исправление от Karthikeyan Singaravelan.
Ядро и встроенные модули¶Core and Builtins
bpo-36421: Исправлена возможная двойная декреф в
PyCArrayType_new()из _ctypes.c.bpo-36412: Исправлена возможная аварийная остановка при создании нового словаря.
bpo-36398: Исправлена возможная аварийная остановка в
structseq_repr().bpo-36256: Исправлена ошибка в parsermodule при разборе состояния в ДКА, имеющего две или более дуги с метками одного типа. Исправление от Pablo Galindo.
bpo-36365: repr(structseq) больше не ограничено 512 байтами.
bpo-36374: Исправлена возможная ошибка разыменования нулевого указателя в
merge_consts_recursive(). Исправление от Zackery Spytz.bpo-36236: При инициализации Python текущий каталог больше не добавляется в начало
sys.path, если он был удалён.bpo-36352: Инициализация Python теперь завершается с ошибкой, а не молча обрезает пути, если путь слишком длинный.
bpo-36301: Инициализация Python теперь завершается ошибкой, если при запуске не удаётся декодировать конфигурационный файл
pybuilddir.txt.bpo-36333: Исправлена утечка в _PyRuntimeState_Fini. Предоставлено Stéphane Wirtel.
bpo-36332: Встроенная функция
compile()теперь может обрабатывать объекты AST, содержащие выражения присваивания. Исправление от Pablo Galindo.bpo-36282: Улучшено сообщение об ошибке при слишком большом количестве позиционных аргументов в некоторых встроенных функциях.
bpo-30040: Новый пустой словарь теперь использует меньше памяти. Ранее он занимал больше памяти, чем пустой словарь, созданный с помощью
dict.clear(). Создание и удаление пустого словаря выполняется примерно в 2 раза быстрее. Исправление от Inada Naoki.bpo-36262: Исправлена маловероятная утечка памяти при преобразовании строки в число с плавающей запятой в функции
_Py_dg_strtod(), используемой вfloat(str),complex(str),pickle.load(),marshal.load()и т. д.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: Добавлен флаг
feature_versionвast.parse()(документировано) иcompile()(скрыто), позволяющий настраивать парсер для поддержки более старых версий грамматики. В частности, еслиfeature_versionравно 5 или 6, восстанавливаются хаки для ключевых словasyncиawaitиз PEP 492. (Для 7 и выше эти слова безусловно обрабатываются как ключевые, но они по-прежнему остаются специальными токенами, а не токенамиNAME, которые распознаёт драйвер парсера.)bpo-31904: Использовать UTF-8 в качестве системной кодировки на VxWorks.
bpo-36048: Специальный метод
__index__()будет использоваться вместо__int__()для неявного преобразования чисел Python в целые числа C. Использование метода__int__()в неявных преобразованиях признано устаревшим.bpo-35808: Прекращено использование pgen; для генерации парсера теперь используется модифицированная версия pgen2. Исправление от Pablo Galindo.
Библиотека¶Library
bpo-36401: Документация классов, создаваемая pydoc, теперь содержит отдельный раздел для свойств, доступных только для чтения.
bpo-36320: Класс typing.NamedTuple() объявил устаревшим атрибут _field_types в пользу атрибута __annotations__, который содержит ту же информацию. Кроме того, оба атрибута были преобразованы из OrderedDict в обычный dict.
bpo-34745: Исправлены
asyncioпроблемы с памятью в ssl, вызванные циклическими ссылками.bpo-36324: Добавлен метод в statistics.NormalDist для вычисления обратной кумулятивной функции нормального распределения.
bpo-36321: collections.namedtuple() содержал опечатку в имени атрибута. Для согласованности с typing.NamedTuple имя атрибута должно было быть «_field_defaults» вместо «_fields_defaults». Для обратной совместимости теперь создаются оба варианта. Вариант с опечаткой может быть удалён в будущем.
bpo-36297: Кодек «unicode_internal» удалён. Он был помечен как устаревший начиная с Python 3.3. Патч от Inada Naoki.
bpo-36298: В pyclbr теперь вызывается ModuleNotFoundError, если модуль не найден. Спасибо «mental» за сообщение об ошибке.
bpo-36268: Изменён формат по умолчанию для записи tar-архивов с помощью mod:
tarfileна современный стандарт POSIX.1-2001 pax вместо вендор-специфичного GNU. Вклад C.A.M. Gerlach.bpo-36285: Исправлены целочисленные переполнения в модуле array. Патч от Stephan Hohe.
bpo-31904: Добавлена поддержка модулем _signal для VxWorks.
bpo-36272:
loggingбольше не игнорирует молча RecursionError. Патч предоставлен Rémi Lapeyre.bpo-36280: Добавлено поле kind в ast.Constant. Оно равно 'u', если литерал имеет префикс 'u' (то есть литерал Unicode в стиле Python 2), иначе None.
bpo-35931: Команда
pdbdebugтеперь корректно обрабатывает все исключения.bpo-36251: Исправлены строки форматирования, используемые для представлений stderrprinter и re.Match. Патч от Stephan Hohe.
bpo-36235: Исправлена
CFLAGSвcustomize_compiler()модуляdistutils.sysconfig: если определена переменная окруженияCFLAGS, переменнаяCFLAGSбольше не переопределяется переменнойOPT. Начальный патч написал David Malcolm.bpo-35807: Обновлён ensurepip для установки pip 19.0.3 и setuptools 40.8.0.
bpo-36179: Исправлены две маловероятные утечки ссылок в _hashopenssl. Утечки происходят только в ситуациях нехватки памяти.
bpo-36169: Добавлен метод overlap() в statistics.NormalDist. Вычисляет коэффициент перекрытия для двух нормальных распределений.
bpo-36103: Размер буфера по умолчанию, используемый
shutil.copyfileobj(), изменён с 16 КБ на 64 КБ на платформах, отличных от Windows, для снижения накладных расходов на системные вызовы. Сообщение от Inada Naoki.bpo-36130: Исправлена
pdbсskip=...при входе во фрейм без глобальной переменной__name__. Патч от Anthony Sottile.bpo-35652: shutil.copytree(copy_function=…) ошибочно передавал DirEntry вместо строки пути.
bpo-35178: Обеспечено, чтобы пользовательская функция
warnings.formatwarning()могла получатьlineв качестве позиционного аргумента. Основано на патче Tashrif Billah.bpo-36106: Устранено потенциальное совпадение имён с sinpi() из libm. Патч от Dmitrii Pasechnik.
bpo-36091: Очистка ссылок на асинхронный генератор в Lib/types. Патч от Henry Chen.
bpo-36043:
FileCookieJarsupports path-like object. Contributed by Stéphane Wirtelbpo-35899: Enum исправлен для корректной обработки пустых строк и строк с нелатинскими символами (например, 'α', 'א') без аварийного завершения. Оригинальный патч предоставлен Maxwell. Помощь: Stéphane Wirtel.
bpo-21269: Добавлены свойства
argsиkwargsк объектам вызовов mock. Сообщение от Kumar Akshay.bpo-30670: Добавлена
pprint.ppдля форматированного вывода объектов, в котором ключи словаря сортируются в порядке вставки по умолчанию. Параметр sort_dicts добавлен вpprint.pprint,pprint.pformatиpprint.PrettyPrinter. Вклад Rémi Lapeyre.bpo-35843: Реализован
__getitem__для_NamespacePath. Патч от Anthony Sottile.bpo-35802: Очищен код, проверявший наличие
os.stat/os.lstat/os.chmod, которые присутствуют всегда. Патч от Anthony Sottile.bpo-35715: Освобождается возвращаемое значение ProcessPoolExecutor._process_worker после того, как оно больше не нужно, для освобождения памяти.
bpo-35493: Используется
multiprocessing.connection.wait()вместо опроса каждые 0,2 секунды для обновлений рабочих процессов вmultiprocessing.Pool. Патч от Pablo Galindo.bpo-35661: Приглашение venv сохраняется в pyvenv.cfg.
bpo-35121: Куки не устанавливаются для запроса, когда путь запроса является префиксом атрибута пути куки, но не заканчивается символом «/». Патч от Karthikeyan Singaravelan.
bpo-21478: Вызовы дочерней функции, созданной с помощью
unittest.mock.create_autospec(), должны доходить до родительской. Патч от Картикеяна Сингаравелана.bpo-35198: Исправление компиляции расширения C++ на AIX.
Документация¶Documentation
bpo-36329: Объявление пути к двоичному файлу Python для использования
Tools/scripts/serve.pyпри выполненииmake -C Doc/ serve. Автор: Стефан Виртель.bpo-36138: Улучшена документация по преобразованию datetime.timedelta в скаляры.
bpo-21314: Добавлен новый раздел в «Основные возможности языка» в FAQ по программированию, в котором объясняется использование косой черты (/) в сигнатуре функции. Патч от Лисандра Николау.
Тесты¶Tests
bpo-36234: test_posix.PosixUidGidTests: добавлены тесты для недопустимых типов uid/gid (str). Первоначальный патч написан Дэвидом Малкольмом.
bpo-29571: Исправление
test_re.test_locale_flag(): используйтеlocale.getpreferredencoding()вместоlocale.getlocale()для получения кодировки локали. В некоторых локаляхlocale.getlocale()возвращает неверную кодировку.bpo-36123: Исправлено состояние гонки в test_socket.
Сборка¶Build
bpo-36356: Исправлены утечки, которые приводили к сбою сборки при настройке с санитайзером адресов.
bpo-36146: Добавлена константа
TEST_EXTENSIONSвsetup.py, чтобы разрешить не собирать тестовые расширения, такие как_testcapi.bpo-36146: Исправлен setup.py на macOS: добавлять
/usr/include/ffiтолько в include-каталоги _ctypes, а не для всех расширений.bpo-31904: Включена возможность кросс-сборки для ОСРВ VxWorks.
Windows¶
bpo-36312: Исправлены декодеры для следующих кодовых страниц: 50220, 50221, 50222, 50225, 50227, 50229, 57002–57011, 65000 и 42.
bpo-36264: Не учитывать POSIX
HOMEвos.path.expanduserв Windows. Патч от Энтони Соттила.bpo-24643: Исправление коллизий имён из-за
#define timezone _timezoneв PC/pyconfig.h.
IDLE¶
bpo-36405: Использование распаковки словарей в idlelib.
bpo-36396: Удалён параметр fgBg у idlelib.config.GetHighlight(). Этот параметр использовался всего дважды и менял тип возвращаемого значения.
bpo-36176: Исправлены цвета всплывающих подсказок автодополнения и вызовов в IDLE. Предотвращены конфликты с тёмными темами Linux (а также немного затемнён фон подсказок вызовов).
bpo-23205: Для модуля grep добавлены тесты для findfiles, выполнено преобразование findfiles в функцию уровня модуля и переработка findfiles для использования os.walk.
bpo-23216: Добавлены строки документации в модули поиска IDLE.
bpo-36152: Удалены colorizer.ColorDelegator.close_when_done и соответствующий аргумент .close(). В IDLE оба всегда были None или False с 2007 года.
bpo-32129: Устранение размытости значка приложения IDLE в macOS с Tk 8.6. Патч от Кевина Уолцера.
bpo-36096: Переработка переменных класса в переменные экземпляра в colorizer.
bpo-30348: Увеличение покрытия тестами idlelib.autocomplete на 30%. Патч от Луи Лу.
Инструменты/Демонстрации¶Tools/Demos
C API¶
bpo-36381: Возбуждается
DeprecationWarningпри использовании форматов '#' для построения или разбора значений безPY_SSIZE_T_CLEAN.bpo-36142: Весь заголовочный файл coreconfig.h теперь исключён из Py_LIMITED_API. Определения функций перемещены в новый внутренний заголовочный файл pycore_coreconfig.h.
Python 3.8.0 альфа 2¶Python 3.8.0 alpha 2
Дата выпуска: 2019-02-25
Ядро и встроенные модули¶Core and Builtins
bpo-36052: Возбуждается
SyntaxErrorпри присваивании значения__debug__с помощью оператора присваивания. Авторы: Stéphane Wirtel и Pablo Galindo.bpo-36012: Удвоена скорость записи переменных класса. При обновлении атрибута, не являющегося dunder, происходил ненужный вызов update slots.
bpo-35942: Сообщение об ошибке, выдаваемое при возврате недопустимых типов из
__fspath__в интерфейсах, допускающих передачу объектовPathLike, улучшено и теперь объясняет источник ошибки.bpo-36016:
gc.get_objectsтеперь может получать необязательный параметр, указывающий поколение, из которого нужно получить объекты. Патч от Pablo Galindo.bpo-1054041: Когда главный интерпретатор завершается из-за необработанного KeyboardInterrupt, процесс теперь завершается способом, позволяющим родительскому процессу обнаружить, что SIGINT или ^C прервали процесс. Это позволяет оболочкам и пакетным сценариям понять, что пользователь попросил их остановиться.
bpo-35992: Исправлена проблема, когда
__class_getitem__()не вызывался для класса с пользовательским неиндексируемым метаклассом.bpo-35993: Исправлен сбой при fork с использованием под-интерпретаторов. Автор: Stéphane Wirtel
bpo-35991: Исправлена потенциальная двойная очистка памяти в Modules/_randommodule.c.
bpo-35961: Исправлен сбой в slice_richcompare(): теперь используются сильные ссылки (strong references) вместо похищенных ссылок (stolen references) для двух временных внутренних кортежей.
bpo-35911: Добавлен метод
cell.__new__для создания объектов cell, а типcellтеперь доступен вLib/types.pyпод именем CellType. Патч от Pierre Glaser.bpo-12822: Использовать монотонные часы для
pthread_cond_timedwait, когда доступныpthread_condattr_setclockиCLOCK_MONOTONIC.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.
Библиотека¶Library
bpo-35512:
unittest.mock.patch.dict(), используемый как декоратор со строковой целью, разрешает цель во время вызова функции, а не во время создания декоратора. Патч от Karthikeyan Singaravelan.bpo-36018: Добавлен statistics.NormalDist – инструмент для создания и манипуляции нормальными распределениями случайных величин. Предоставляет составной класс, который трактует среднее и стандартное отклонение измерительных данных как единую сущность.
bpo-35904: Добавлена statistics.fmean() как более быстрая версия с плавающей запятой существующей функции mean().
bpo-35918: Удалён сломанный метод
has_keyиз multiprocessing.managers.SyncManager.dict. Автор: Rémi Lapeyre.bpo-18283: Добавлена поддержка bytes для
shutil.which().bpo-35960: Исправлено
dataclasses.field(), отбрасывающее пустые объекты отображения, переданные в качестве метаданных.bpo-35500: Ожидаемые и фактические параметры вызова теперь выводятся на отдельных строках в сообщениях об ошибках утверждений
unittest.mock.Mock.assert_called_with(). Автор: Susan Su.bpo-35931: Команда
pdbdebugтеперь корректно обрабатывает синтаксические ошибки.bpo-24209: В скрипте http.server используется getaddrinfo для привязки к предпочтительному адресу на основе параметра bind. Теперь привязка по умолчанию или привязка к имени может привести к привязке к IPv6 или двойному стеку в зависимости от окружения.
bpo-35321: Установить
__spec__.originобъекта_frozen_importlibв frozen, чтобы это соответствовало поведению_frozen_importlib_external. Исправление от Нины Захаренко.bpo-35378: Исправлена проблема со ссылками внутри
multiprocessing.Pool, которая приводила к тому, что пул оставался активным после удаления без явного закрытия или завершения. Добавлена новая сильная ссылка на итераторы пула, чтобы время жизни пула было привязано к времени жизни его итераторов – пул не уничтожается, пока хотя бы один итератор ещё жив.bpo-34294: Модуль re: исправлена некорректная работа захватывающих групп в редких случаях. Функции
re.search(),re.findall(),re.sub()и другие, сканирующие строку в поиске совпадения, теперь сбрасывают захватывающие группы между попытками. Исправление от Ma Lin.bpo-35615:
weakref: Исправлена ошибка RuntimeError при копировании WeakKeyDictionary или WeakValueDictionary, возникавшая из-за исчезновения некоторых ключей или значений во время итерации.bpo-35606: Добавлена функция
math.prod()– аналогsum(), которая возвращает произведение начального значения (по умолчанию: 1) и элементов переданной последовательности чисел. Исправление от Pablo Galindo.bpo-32417: Выполнение арифметических операций между подклассами
datetime.datetimeиdatetime.timedeltaтеперь возвращает объект того же типа, что и подклассdatetime.datetime. В результате вызовыdatetime.datetime.astimezone()и альтернативных конструкторов, таких какdatetime.datetime.now()иdatetime.fromtimestamp(), с аргументомtzтеперь также сохраняют свой подкласс.bpo-35153: Добавлен необязательный именованный параметр headers в функции
xmlrpc.client.ServerProxy,xmlrpc.client.Transportиxmlrpc.client.SafeTransport. Исправление от Cédric Krier.bpo-34572: Исправлена реализация pickle.loads на C для использования механизмов блокировки importlib, что позволяет избежать использования частично загруженных модулей. Патч от Tim Burgess.
Документация¶Documentation
bpo-36083: Исправлено форматирование параметров –check-hash-based-pycs в разделе Synopsis справочной страницы.
bpo-36007: Минимальная версия Sphinx увеличена до 1.8. Исправление от Anthony Sottile.
bpo-22062: Обновлена документация и строки документации для pathlib. Исходное исправление от Mike Short.
Тесты¶Tests
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: Исправлен test_ssl для строгих конфигураций OpenSSL, таких как строгая криптополитика RHEL8. При необходимости используется более старая версия TLS в качестве минимальной версии TLS контекста SSL сервера, чтобы тестировать версию 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, чтобы предотвратить MemoryError на 32-битной AIX, когда значение MAXDATA меньше 0x20000000.Исправление от Michael Felt (aixtools)
bpo-34720: Добавлено утверждение m_state != NULL, имитирующее функции обхода GC, которые некорректно обрабатывают создание модуля, если состояние модуля ещё не создано.
Windows¶
bpo-35976: Добавлена поддержка сборки для ARM в файлы сборки Windows в PCBuild.
bpo-35692:
pathlibбольше не вызывает исключение при проверке существования файлов и каталогов на дисках, которые не готовы.bpo-35872: При вызове venv в виртуальном окружении теперь используется базовый исполняемый файл Python.
bpo-35873: Предотвращает наследование путей venv дочерними процессами.
bpo-35299: Исправлено обнаружение исходного каталога в sysconfig и обработка pyconfig.h в distutils во время PGO-профилирования.
IDLE¶
Python 3.8.0 альфа 1¶Python 3.8.0 alpha 1
Дата выпуска: 2019-02-03
Безопасность¶Security
bpo-35746: [CVE-2019-5010] Исправление разыменования нулевого указателя в модуле ssl. Парсер сертификатов некорректно обрабатывал точки распространения CRL с пустым DP или URI. Вредоносный или ошибочный сертификат мог привести к ошибке сегментации. Уязвимость (TALOS-2018-0758) обнаружена Colin Read и Nicolas Edet из Cisco.
bpo-34812: Параметр командной строки
-I(запуск Python в изолированном режиме) теперь также копируется модулямиmultiprocessingиdistutilsпри порождении дочерних процессов. Ранее копировались только параметры-Eи-s(включаемые-I).bpo-34791: xml.sax и xml.dom.domreg больше не используют переменные окружения для переопределения реализаций парсеров, когда sys.flags.ignore_environment установлен аргументами -E или -I.
bpo-17239: Парсеры xml.sax и xml.dom.minidom больше не обрабатывают внешние сущности по умолчанию. Внешние объявления DTD и ENTITY больше не загружают файлы и не создают сетевые соединения.
bpo-34623: CVE-2018-14647: Ускоренный на C модуль _elementtree теперь инициализирует соль рандомизации хеша из _Py_HashSecret вместо стандартного CSPRNG библиотеки libexpat.
bpo-34405: Обновлено до OpenSSL 1.1.0i для сборок Windows.
bpo-33871: Исправлена отправка части файла в
os.sendfile()на macOS. Использование аргумента trailers могло приводить к отправке большего количества байт из входного файла, чем было указано.bpo-32533: Исправлена потокобезопасность обработки ошибок в _ssl.
bpo-33136: Усиление защиты модуля ssl от CVE-2018-8970 в LibreSSL. X509_VERIFY_PARAM_set1_host() вызывается с явным namelen. Новый тест гарантирует, что нулевые байты не допускаются.
bpo-33001: Минимальное исправление для предотвращения переполнения буфера в os.symlink в Windows.
bpo-32981: Регулярные выражения в difflib и poplib были уязвимы к катастрофическому обратному отслеживанию. Эти регулярные выражения представляли потенциальные векторы DOS (REDOS). Они были переработаны. Это устраняет CVE-2018-1060 и CVE-2018-1061. Патч от Jamie Davis.
bpo-28414: Модуль ssl теперь позволяет пользователям выполнять собственное кодирование/декодирование IDN при использовании SNI.
Ядро и встроенные модули¶Core and Builtins
bpo-35877: Сделаны круглые скобки необязательными для именованных выражений в операторе while. Патч от Картикейана Сингаравелана.
bpo-35814: Разрешены такие же выражения в правой части в аннотированных присваиваниях, как и в обычных. В частности, теперь разрешено
x: Tuple[int, int] = 1, 2(без круглых скобок справа).bpo-35766: Добавлена возможность разбора комментариев с типами PEP 484 в модуле ast. (По умолчанию выключено.) Это объединяет ключевую функциональность стороннего форка [typed_ast](https://github.com/python/typed_ast).
bpo-35713: Реорганизована инициализация Python для получения работающих исключений и sys.stderr раньше.
bpo-33416: Добавлена информация о позиции конца строки и конца столбца в узлы AST Python. Это обратно несовместимое изменение на уровне C.
bpo-35720: Исправлена небольшая утечка памяти в функции pymain_parse_cmdline_impl в Modules/main.c
bpo-35634:
func(**kwargs)теперь будет вызывать ошибку, когдаkwargsявляется отображением, содержащим несколько записей с одним и тем же ключом. Ошибка уже вызывалась, когда другие именованные аргументы передавались перед**kwargs, начиная с Python 3.6.bpo-35623: Исправлен сбой при сортировке очень длинных списков. Патч от Штефана Хохе.
bpo-35214: Добавлена инструментация сборки Memory Sanitizer от clang для обхода ложных срабатываний от posix, socket, time, test_io и test_faulthandler.
bpo-35560: Исправление ошибки утверждения в
format()в отладочной сборке для форматирования чисел с плавающей запятой с форматом «n», заполнением нулями и малой шириной. Релизная сборка не затронута. Исправление от Karthikeyan Singaravelan.bpo-35552: Символы форматирования
%sи%VвPyUnicode_FromFormat()и%sвPyBytes_FromFormat()больше не читают память за пределами лимита, если указана precision.bpo-35504: Исправлены segfaults и
SystemErrorпри удалении некоторых атрибутов. Патч от Закери Спайтца.bpo-35504: Исправлена SystemError при удалении атрибута characters_written объекта OSError.
bpo-35494: Улучшены сообщения об ошибках синтаксиса для несбалансированных скобок в f-строках.
bpo-35444: Исправлена обработка ошибок в методах сериализации при неудачном поиске встроенной функции “getattr”. Ускорена сериализация итераторов.
bpo-35436: Исправлены различные проблемы с обработкой ошибок выделения памяти. Патч от Zackery Spytz.
bpo-35423: Триггер обработки сигналов в цикле вычислений отделён от механизма «отложенных вызовов». Семантических изменений нет, разница в производительности незначительна.
bpo-35357: Имена внутренних атрибутов unittest.mock._Call и unittest.mock.MagicProxy (name, parent и from_kall) теперь имеют префикс _mock_, чтобы избежать конфликтов с часто используемыми атрибутами объектов. Исправлена опечатка в имени тестовой функции.
bpo-35372: Исправлен декодер кодовой страницы для входных данных длиной более 2 ГиБ, содержащих нераскодируемые байты.
bpo-35336: Исправлена переменная окружения PYTHONCOERCECLOCALE=1: принудительное использование локали C выполняется только если LC_CTYPE установлена в «C».
bpo-31241: Атрибуты lineno и col_offset узлов AST для списковых включений, генераторных выражений и кортежей теперь указывают на открывающую скобку (круглую или квадратную). Для кортежей без скобок они указывают на позицию первого элемента.
bpo-33954: Для методов
str.format(),float.__format__()иcomplex.__format__()исправлена обработка десятичного разделителя, не являющегося ASCII, при использовании форматировщика «n».bpo-35269: Исправлена возможная ошибка сегментации, связанная с только что созданной корутиной. Патч от Zackery Spytz.
bpo-35224: Реализованы PEP 572 (выражения присваивания). Патч от Emily Morehouse.
bpo-32492: Ускорен доступ к атрибуту
namedtupleв 1,6 раза за счёт использования быстрого пути на C для дескрипторов имён. Патч от Pablo Galindo.bpo-35214: Исправлен выход за границы памяти при разборе усечённой escape-последовательности Unicode в конце строки, например
'\N'. Происходило чтение на один байт за пределами выделенной памяти.bpo-35214: В интерпретатор и модули расширения добавлены аннотации для корректной работы под Memory Sanitizer от clang. Добавлен новый флаг configure –with-memory-sanitizer, упрощающий сборку тестовых версий такого типа.
bpo-35193: Исправлена ошибка на единицу в оптимизаторе байткода (peephole), из-за которой при удалении недостижимого кода могло происходить чтение байтов за границами массива. Эта ошибка присутствовала во всех версиях Python 3.6 и 3.7 до настоящего времени.
bpo-35169: Улучшены сообщения об ошибках для запрещённых присваиваний.
bpo-34022: Исправлена обработка файлов байткода на основе хэша в
zipimport. Патч от Elvis Pranskevichus.bpo-28401: Отладочные сборки больше не будут пытаться импортировать модули расширения, собранные для ABI, так как они изначально были несовместимы. Патч от Stefano Rivera.
bpo-29341: В докстрингах методов
osуточнено, что объекты, подобные пути, также принимаются в качестве входных параметров.bpo-35050:
socket: Исправлена ошибка на единицу при проверке длины дляAF_ALGимени и типа.bpo-29743: Возбуждается
ValueErrorвместоOverflowErrorв случае отрицательного_length_в подклассеctypes.Array. Также возбуждаетсяTypeErrorвместоAttributeErrorдля нецелого_length_. Оригинальный патч от Oren Milman.bpo-16806: Исправлены
linenoиcol_offsetдля многострочных строковых токенов.bpo-35029:
SyntaxWarning, возбуждаемое как исключение во время генерации кода, теперь заменяется наSyntaxErrorдля улучшения сообщения об ошибке.bpo-34983: Экспортирован
symtable.Symbol.is_nonlocal()в модуле symtable. Патч от Pablo Galindo.bpo-34974: Конструкторы
bytesиbytearrayбольше не преобразуют неожиданные исключения (например,MemoryErrorиKeyboardInterrupt) вTypeError.bpo-34939: Разрешены аннотированные имена в пространстве имён модуля, объявленные как global до аннотации. Патч от Pablo Galindo.
bpo-34973: Исправлен сбой в
bytes(), когда аргументlistизменяется во время итерации.bpo-34876: Атрибуты lineno и col_offset AST для декорированных функций и классов теперь указывают на позицию соответствующего
def,async defиclass, а не на позицию первого декоратора. Это улучшает корректность сообщений о строках при трассировке. Это единственный случай, когда позиция дочерних узлов AST может предшествовать позиции родительского узла.bpo-34879: Исправлено возможное разыменование нулевого указателя в bytesobject.c. Патч от Zackery Spytz.
bpo-34784: Исправлена реализация PyStructSequence_NewType для создания StructSequences, выделяемых в куче.
bpo-32912: Для недопустимых escape-последовательностей в строковых и байтовых литералах теперь выдаётся
SyntaxWarningвместоDeprecationWarning.bpo-34854: Исправлен сбой при компиляции строковых аннотаций, содержащих lambda с аргументом, передаваемым только по ключевому слову и не имеющим значения по умолчанию.
bpo-34850: Компилятор теперь выдаёт
SyntaxWarning, когда проверки идентичности (isиis not) используются с определёнными типами литералов (например, строки, целые числа). В CPython они часто могут срабатывать случайно, но спецификация языка этого не гарантирует. Предупреждение советует пользователям использовать вместо этого проверки на равенство (==и!=).bpo-34824: Исправлено возможное разыменование нулевого указателя в Modules/_ssl.c. Патч от Zackery Spytz.
bpo-30156: Функция на C
property_descr_get()использовала «кэшированный» кортеж для оптимизации вызовов функций. Но этот кортеж можно было обнаружить в режиме отладки с помощьюsys.getobjects(). Оптимизация удалена – она того не стоила и вызывала три разных аварийных завершения за последние годы.bpo-34762: Исправлен C API модуля contextvars: теперь используются указатели типа PyObject*.
bpo-34751: Хеш-функция для кортежей теперь основана на xxHash, что даёт лучшие результаты коллизий на (ранее) проблемных случаях. Кроме того, на 64-битных системах улучшены хеши кортежей в целом. Патч от Jeroen Demeyer со значительным вкладом от Tim Peters.
bpo-34735: Исправлена утечка памяти в Modules/timemodule.c. Патч от Zackery Spytz.
bpo-34683: Исправлена ошибка, из-за которой некоторые SyntaxError указывали на позиции со смещением на один символ.
bpo-34651: Теперь только основной интерпретатор может создавать дочерние процессы (fork). Это исключает возможность воздействия на основной интерпретатор, что критично для работы среды выполнения.
bpo-34653: Удалена неиспользуемая функция PyParser_SimpleParseStringFilename.
bpo-32236: Добавлено предупреждение о том, что построчная буферизация не поддерживается, если
open()вызывается в двоичном режиме и заданbuffering=1.bpo-34641: Дополнительно ограничен синтаксис левой части именованных аргументов в вызовах функций. В частности, теперь запрещено
f((keyword)=arg).bpo-34637: Аргумент start функции sum() теперь виден как именованный аргумент.
bpo-1621: Больше не предполагается, что переполнение знаковых целых чисел ведёт себя определённым образом (неопределённое поведение C) при изменении размера хеш-таблицы множества.
bpo-34588: Исправлена ошибка со смещением на один символ при обрезке рекурсивных вызовов в форматировании трассировки.
bpo-34485: В Windows при запуске LC_CTYPE теперь устанавливается в предпочитаемую пользователем локаль. Ранее LC_CTYPE была равна «C» при запуске, но менялась при вызове setlocale(LC_CTYPE, «») или setlocale(LC_ALL, «»).
bpo-34485: Стандартные потоки, такие как sys.stdout, теперь используют обработчик ошибок «surrogateescape» вместо «strict» в локали POSIX (когда локаль C не принудительно изменена и режим UTF-8 отключён).
bpo-34485: Исправлен обработчик ошибок для стандартных потоков, таких как sys.stdout: теперь PYTHONIOENCODING=«:» игнорируется, а не устанавливает обработчик ошибок в «strict».
bpo-34485: Python теперь получает кодировку локали с помощью кода на C для инициализации кодировки стандартных потоков, таких как sys.stdout. Кроме того, кодировка теперь инициализируется как имя кодека Python для получения нормализованного имени кодировки и обеспечения загрузки кодека. Это изменение позволяет избежать импорта модулей _bootlocale и _locale при запуске по умолчанию.
bpo-34527: На FreeBSD функции Py_DecodeLocale() и Py_EncodeLocale() теперь также принудительно используют кодировку ASCII, если локаль LC_CTYPE – «POSIX», а не только если локаль 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: Для целых чисел добавлен метод as_integer_ratio, чтобы сделать их более совместимыми с числами с плавающей точкой.
bpo-34377: Обновлён список подавления valgrind: теперь используется
_PyObject_Free/_PyObject_ReallocвместоPyObject_Free/PyObject_Realloc.bpo-34353: В реализацию
stat.filemode()на Python добавлена опция «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: Оптимизирована сериализация (pickling) атомарных типов (None, bool, int, float, bytes, str).
bpo-34126: Исправлены сбои при профилировании некоторых некорректных вызовов несвязанных методов. Патч от Jeroen Demeyer.
bpo-24618: Исправлено чтение недопустимой памяти при создании объекта кода с слишком коротким кортежем varnames или слишком большим количеством аргументов.
bpo-34068: В
io.IOBase.close(), обеспечить, чтобы атрибутclosedне устанавливался с живым исключением. Патч от Zackery Spytz и Serhiy Storchaka.bpo-34087: Исправлено переполнение буфера при преобразовании Unicode в числовые значения.
bpo-34080: Исправлена утечка памяти в компиляторе при возникновении некоторых необычных ошибок во время токенизации.
bpo-34066: Отключено прерывание по Ctrl-C между вызовом
open()и входом в блок with вwith open().bpo-34042: Исправлено dict.copy() для поддержания корректного общего счётчика ссылок (как сообщается sys.gettotalrefcount()).
bpo-33418: Исправлена потенциальная утечка памяти в объекте функции при создании цикла ссылок.
bpo-33985: Реализован атрибут contextvars.ContextVar.name.
bpo-33956: Обновлена включённая копия библиотеки Expat до версии 2.2.5.
bpo-24596: Уменьшить счётчик ссылок объекта модуля в
PyRun_SimpleFileExFlags()перед вызовомPyErr_Print(). Патч от Zackery Spytz.bpo-33451: Закрывать непосредственно выполняемые pyc-файлы перед вызовом
PyEval_EvalCode().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: Исправлены семь несовместимостей макросов с Limited API, а макросы
PyIter_Check(),PyIndex_Check()иPyExceptionClass_Name()добавлены как функции. Добавлен скрипт для автоматической проверки макросов.bpo-33786: Исправлена обработка GeneratorExit в athrow() для асинхронных генераторов.
bpo-30167:
PyRun_SimpleFileExFlagsудаляет__cached__из модуля в дополнение к__file__.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: Сделаны обращаемыми (reversible) dict и представления dict. Патч от Rémi Lapeyre.
bpo-23722: Теперь возникает
RuntimeError, когда пользовательский метакласс не предоставляет запись__classcell__в пространстве имён, переданном вtype.__new__. В Python 3.6–3.7 выдавалосьDeprecationWarning.bpo-33499: Добавлена переменная окружения
PYTHONPYCACHEPREFIXи параметр командной строки-Xpycache_prefixдля указания альтернативного корневого каталога для записи кэш-файлов байт-кода модулей.bpo-33509: Исправлен параметр module_globals функции warnings.warn_explicit(): не падать, если module_globals не является словарём.
bpo-31849: Исправлено предупреждение о сравнении знаковых/беззнаковых типов в pyhash.c.
bpo-33475: Исправлены различные ошибки при преобразовании аннотаций в строки и оптимизированы скобки в строковом представлении.
bpo-20104: Добавлена поддержка параметров
setpgroup,resetids,setsigmask,setsigdefиschedulerфункцииposix_spawn. Патч от Pablo Galindo.bpo-33391: Исправлена утечка в set_symmetric_difference().
bpo-33363: Вызывать SyntaxError для операторов
async withиasync forвне асинхронных функций.bpo-28055: Исправлены невыровненные обращения в siphash24(). Исправление от Rolf Eike Beer.
bpo-33128: Исправлена ошибка, из-за которой PathFinder появлялся дважды в sys.meta_path. Исправление от Pablo Galindo Salgado.
bpo-33331: Модули, импортированные последними, теперь очищаются первыми при завершении интерпретатора.
bpo-33312: Исправлены предупреждения clang ubsan (санитайзер неопределённого поведения) в dictobject.c за счёт корректировки объявления внутренней структуры _dictkeysobject с разделяемыми ключами.
bpo-33305: Улучшены сообщения об ошибках синтаксиса для неверных числовых литералов.
bpo-33306: Улучшены сообщения об ошибках синтаксиса для несбалансированных скобок.
bpo-33234: Конструктор list теперь предварительно задаёт размер и не выделяет лишнюю память, когда известна длина входных данных.
bpo-33270: Имена всех анонимных объектов кода теперь интернируются. Патч от Zackery Spytz.
bpo-30455: Код на C и Python, а также документация, связанная с токенами, теперь генерируются из единого исходного файла
Grammar/Tokens.bpo-33176: Добавлен метод
toreadonly()для memoryviews.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в реализации dict не инициализируется при копировании из key-sharing dict.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больше не принимает аргументы, не являющиеся целочисленными. Патч от Pablo Galindo.bpo-33041: Добавлен новый опкод
END_ASYNC_FORи исправлены следующие проблемы:Установка глобальной
StopAsyncIterationбольше не нарушает работуasync forциклов.Переход внутрь
async forцикла теперь запрещён.Выход из
async forцикла больше не повреждает стек.
bpo-25750: Исправлен редкий сбой Python из-за неправильного подсчёта ссылок в
type_getattro(), если дескриптор удаляет себя из класса. Патч от Jeroen Demeyer.bpo-33041: Исправлена генерация байт-кода для «async for» со сложной целью. StopAsyncIteration, возникающий при присваивании или распаковке, теперь распространяется, а не останавливает итерацию.
bpo-33026: Исправлен выход из блока “with” путем установки f_lineno.
bpo-33005: Исправлен сбой при fork при использовании пользовательского распределителя памяти (например, с использованием переменной окружения PYTHONMALLOC). _PyGILState_Reinit() и _PyInterpreterState_Enable() теперь используют стандартный распределитель RAW памяти для выделения нового мьютекса интерпретатора при fork.
bpo-32911: Из-за неожиданных проблем совместимости, обнаруженных во время бета-тестирования у потребителей, отменён bpo-29463. Поле
docstringудалено из узлов AST Module, ClassDef, FunctionDef и AsyncFunctionDef, которое было добавлено в 3.7a1. Выражение docstring восстановлено как первый оператор в их теле. На основе патча от Inada Naoki.bpo-17288: Предотвращены переходы из событий трассировки 'возврат' и 'исключение'.
bpo-32946: Импорт имён из уже импортированного модуля с помощью «from … import …» теперь на 30% быстрее, если модуль не является пакетом.
bpo-32932: Сделать сообщение об ошибке более информативным, когда в
__all__есть нестроковые объекты.bpo-32925: Оптимизированы итерация и проверка вхождения для литеральных списков, состоящих из неконстантных элементов:
x in [a, b]иfor x in [a, b]. Случай со всеми константными элементами уже был оптимизирован.bpo-32889: Обновлен список подавления Valgrind с учетом переименования
Py_ADDRESS_IN_RANGвaddress_in_range.bpo-32836: Не использовать временные переменные в list/dict/set comprehensions
bpo-31356: Удалён новый API, добавленный в bpo-31356 (менеджер контекста gc.ensure_disabled()).
bpo-32305: Для пакетов пространств имён обеспечено, что и
__file__, и__spec__.originустановлены в None.bpo-32303: Обеспечено соответствие
__spec__.loaderи__loader__для пакетов пространств имён.bpo-32711: Исправлены предупреждающие сообщения для Python/ast_unparse.c. Патч от Stéphane Wirtel
bpo-32583: Исправлена возможная аварийная остановка встроенных декодеров Unicode, вызванная ошибками записи за границы при использовании пользовательских обработчиков ошибок декодирования.
bpo-32489: Оператор
continueтеперь разрешён в предложенииfinally.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: Исправить атрибут
col_offsetдля узлов ASTast.AsyncFor,ast.AsyncFunctionDefиast.AsyncWith. Ранееcol_offsetуказывал на ключевое слово послеasync.bpo-25862: Исправить ошибки утверждений в методе
tell()классаio.TextIOWrapper. Исправление от Zackery Spytz.bpo-21983: Исправлен сбой в
ctypes.cast(), если аргумент типа является структурированным типом данных ctypes. Исправление от Eryk Sun и Oren Milman.bpo-31577: Исправлен сбой в
os.utime()при неверном аргументе ns. Патч от Oren Milman.bpo-29832: Удалить ссылки на ‘getsockaddrarg’ из различных сообщений об ошибках сокетов. Исправление от Oren Milman.
Библиотека¶Library
bpo-35845: Добавить параметр ‘order’ в memoryview.tobytes().
bpo-35864: Метод _asdict() для collections.namedtuple теперь возвращает обычный 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(), возникающие в рекурсивном, реентерабельном или многопоточном коде. Эти ошибки могли приводить к появлению orphan-ссылок и к тому, что кэш застревал в состоянии с количеством ссылок меньше заданного максимального. Исправить обработку отрицательного maxsize, который должен был трактоваться как ноль. Исправить ошибки переключения флага статуса «full». Исправить нарушение порядка ссылок при возникновении ошибок. Синхронизировать код на C и чистый Python для пути экономии пространства в функциях с одним позиционным аргументом. В этом распространённом случае накладные расходы на запись кэша lru сокращены почти вдвое. Исправить подсчёт промахов кэша. В ошибочных случаях счётчик промахов рассинхронизировался с фактическим количеством вызовов базовой пользовательской функции.
bpo-35537:
os.posix_spawn()иos.posix_spawnp()теперь имеют параметр setsid.bpo-23846:
asyncio.ProactorEventLoopтеперь перехватывает и логирует ошибки отправки, когда self-pipe полон.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: Увеличена скорость многоаргументных функций
mathatan2(), copysign(), remainder() и hypot() в 1.3–2.5 раза.bpo-35717: Исправлено исключение KeyError, возникавшее при использовании перечислений и compile. Патч предоставлен Rémi Lapeyre.
bpo-35699: Исправлено обнаружение Visual Studio Build Tools 2017 в distutils
bpo-32710: Исправлена утечка памяти в asyncio ProactorEventLoop при сбое перекрывающейся операции.
bpo-35702: Константа
time.CLOCK_UPTIME_RAWтеперь доступна для macOS 10.12.bpo-32710: Исправлена утечка памяти в asyncio в ProactorEventLoop, когда
ReadFile()илиWSASend()перекрывающаяся операция немедленно завершается с ошибкой: освобождается внутренний буфер.bpo-35682: Исправлено
asyncio.ProactorEventLoop.sendfile(): не предпринимать попыток установить результат внутреннего future, если он уже завершён.bpo-35283: Добавлено предупреждение об устаревании для метода
threading.Thread.isAlive(). Патч от Dong-hee Na.bpo-35664: Повышена производительность operator.itemgetter() на 33% за счёт оптимизированной обработки аргументов и добавления быстрого пути для частого случая – одного неотрицательного целочисленного индекса в кортеже (что является типичным сценарием использования в стандартной библиотеке).
bpo-35643: Исправлено SyntaxWarning: недопустимая управляющая последовательность в Modules/_sha3/cleanup.py. Патч от Mickaël Schoentgen.
bpo-35619: Улучшена поддержка пользовательских дескрипторов данных в
help()иpydoc.bpo-28503: Модуль
cryptтеперь внутри использует библиотечную функциюcrypt_r()вместоcrypt(), когда это возможно.bpo-35614: Исправлена работа help() для метаклассов. Патч от Sanyam Khurana.
bpo-35568: Предоставлен
raise(signum)какraise_signalbpo-35588: Операции целочисленного деления и взятия остатка, а также функция
divmod()для типовfractions.Fractionвыполняются в 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: больше не создаётся колбэк при запуске. Предотвращается предупреждение SELinux оimport ctypesиimport uuid.bpo-31784:
uuid.uuid1()теперь вызываетtime.time_ns()вместоint(time.time() * 1e9).bpo-35513:
TextTestRunnerизunittest.runnerтеперь используетtime.perf_counter()вместоtime.time()для измерения времени выполнения теста:time.time()может идти назад, тогда какtime.perf_counter()является монотонным.bpo-35502: Исправлена утечка ссылок в
xml.etree.ElementTree.TreeBuilderв случае незавершённого построения дерева (в частности, когда при разборе XML возникла ошибка).bpo-35348: Сделать разбор
platform.architecture()вывода командыfileболее надёжным: добавить опцию-bв командуfile, чтобы опускать имя файла, принудительно использовать локаль C, а также искать шаблон «shared object».bpo-35491:
multiprocessing: ДобавленPool.__repr__()и улучшенBaseProcess.__repr__()(добавлены PID и PPID) для упрощения отладки. Значения констант состояния пула теперь строки, а не целые числа, например значение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: Разблокировать цикл событий Proactor при получении прерывания с клавиатуры в Windows
bpo-35052: Исправлен xml.dom.minidom cloneNode() для документа с сущностью: передавать корректные аргументы обработчику пользовательских данных сущности.
bpo-20239: Разрешено повторное удаление присваивания атрибутов
unittest.mock.Mock. Патч от Pablo Galindo.bpo-17185: Установка
__signature__на mock дляinspectдля получения сигнатуры. Исправление от Karthikeyan Singaravelan.bpo-35445: Ошибки памяти при создании posix.environ больше не игнорируются.
bpo-35415: Проверка аргумента fileno= для socket.socket().
bpo-35424: Деструктор
multiprocessing.Poolтеперь генерируетResourceWarning, если пул всё ещё работает.bpo-35330: Когда экземпляр
Mockиспользуется для обёртки объекта, еслиside_effectприменяется в одном из моков его методов, не вызывать исходную реализацию и возвращать результат использования побочного эффекта так же, как это делается с return_value.bpo-35346: Удалена поддержка Mac OS 9 и Rhapsody из модуля
platform. Последний выпуск Rhapsody был в 2000 году. Mac OS 9 – в 2001.bpo-10496:
check_environ()изdistutils.utilsтеперь перехватываетKeyErrorпри вызовеpwd.getpwuid(): не создавать переменную окруженияHOMEв этом случае.bpo-10496:
posixpath.expanduser()теперь возвращает входной путь без изменений, если переменная окруженияHOMEне установлена и у текущего пользователя нет домашнего каталога (если идентификатор текущего пользователя отсутствует в базе данных паролей). Это изменение исправляет модульsite, если текущий пользователь отсутствует в базе данных паролей (если у пользователя нет домашнего каталога).bpo-35389:
platform.libc_ver()теперь используетos.confstr('CS_GNU_LIBC_VERSION'), если он доступен, и параметр executable не установлен.bpo-35394: Добавлены пустые слоты в абстрактные протоколы asyncio.
bpo-35310: Исправлена ошибка в
select.select(), когда в некоторых случаях последовательности файловых дескрипторов возвращались без изменений после прерывания сигналом, даже если файловые дескрипторы могли быть ещё не готовы.select.select()теперь всегда возвращает пустые списки, если произошёл тайм-аут. Исправление от Oran Avraham.bpo-35380: Включение TCP_NODELAY в Windows для цикла событий asyncio proactor.
bpo-35341: Добавлена обобщённая версия
collections.OrderedDictв модульtyping. Исправление от Ismo Toijala.bpo-35371: Исправлена возможная аварийная остановка в
os.utime()в Windows при передаче некорректных аргументов.bpo-35346:
platform.uname()теперь перенаправляетstderrвos.devnullпри запуске внешних программ, таких какcmd /c ver.bpo-35066: Ранее вызов метода strftime() для объекта datetime с завершающим символом '%' в строке формата приводил к исключению. Однако это происходило только при использовании C-модуля datetime; реализация на 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 (round-trip). Исправление от Anthony Sottile.bpo-35308: Исправлена регрессия в
webbrowser, когда браузеры по умолчанию могли получать приоритет перед браузерами из переменной окруженияBROWSER.bpo-24746: Избегать удаления завершающих пробелов в fancy diff для doctest. Оригинальное исправление от R. David Murray и Jairo Trad. Улучшено Sanyam Khurana.
bpo-28604:
locale.localeconv()теперь временно устанавливает локальLC_CTYPEв локальLC_MONETARY, если две локали различаются и денежные строки не-ASCII. Это временное изменение влияет на другие потоки.bpo-35277: Обновлён ensurepip для установки pip 18.1 и setuptools 40.6.2.
bpo-24209: Добавлена поддержка IPv6 при прямом вызове http.server.
bpo-35226: Рекурсивно проверять аргументы при проверке равенства объектов
unittest.mock.callи добавить примечание, что отслеживание параметров, используемых для создания предков моков вmock_calls, невозможно.bpo-29564: Модуль warnings теперь предлагает включить tracemalloc, если указан источник, модуль tracemalloc доступен, но tracemalloc не отслеживает выделения памяти.
bpo-35189: Изменены следующие функции fnctl для повторной попытки при прерывании сигналом (EINTR): flock, lockf, fnctl
bpo-30064: Использовать add_done_callback() в sock_* API asyncio для отмены подписки читателя/писателя при отмене.
bpo-35186: Удалён комментарий «built with», добавляемый при использовании
setup.py uploadсbdist_rpmилиbdist_dumb.bpo-35152: Разрешена отправка более 2 ГБ за раз через соединение multiprocessing в системах, отличных от Windows.
bpo-35062: Исправлено некорректное разбор аргумента translate у
_io.IncrementalNewlineDecoder.bpo-35065: Удалён
StreamReaderProtocol._untrack_reader. Вызов_untrack_readerв настоящее время выполняется слишком рано, из-за чего протокол забывает о читателе до того, какconnection_lostсможет запуститься и передать EOF читателю.bpo-34160: ElementTree и minidom теперь сохраняют порядок атрибутов, указанный пользователем.
bpo-35079: Улучшена документация difflib.SequenceManager.get_matching_blocks: добавлено слово «non-overlapping» и изменён «!=» на «<».
bpo-33710: Устарели функции и методы
l*gettext()в модулеgettext. Они возвращают закодированные байты вместо строк Unicode и являются артефактами времён Python 2. Также устарели функции и методы, связанные с установкой кодировки для функций и методовl*gettext().bpo-35017:
socketserver.BaseServer.serve_forever()теперь завершается немедленно, если его методshutdown()вызывается во время опроса новых событий.bpo-35024:
importlibбольше не записывает в журналwroteизбыточно после того, как(created|could not create)уже залогирован. Патч от Quentin Agren.bpo-35047:
unittest.mockтеперь включает mock-вызовы в сообщения об исключениях, еслиassert_not_called,assert_called_onceилиassert_called_once_withзавершается неудачей. Патч от Petter Strandmark.bpo-31047: Исправлена регрессия в
ntpath.abspath, когда он не удалял конечный разделитель в Windows. Патч от Tim Graham.bpo-35053: tracemalloc теперь пытается обновить трассировку, когда объект повторно используется из «списка свободных» (оптимизация для более быстрого создания объектов, используемая, например, встроенным типом list).
bpo-31553: Добавлена опция –json-lines в json.tool. Патч от hongweipeng.
bpo-34794: Исправлена утечка в Tkinter при передаче Python-оболочки вокруг Tcl_Obj обратно в Tcl/Tk.
bpo-34909: Enum: исправлено наследование «внуков» при смешивании родителя с конкретными типами данных.
bpo-35022:
unittest.mock.MagicMockтеперь поддерживает метод__fspath__(изos.PathLike).bpo-35008: Исправлена утечка ссылок при вызове метода
__setstate__()объектаxml.etree.ElementTree.Elementв C-реализации для уже инициализированного элемента.bpo-23420: Проверка значения параметра «-s» интерфейса командной строки cProfile. Патч от 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: Параметр from_ функции
mailbox.mbox.get_stringтеперь можно успешно установить в нестандартное значение.bpo-34970: Защита манипуляций со слабым множеством задач в
asyncio.all_tasks().bpo-34969: gzip: Добавлены параметры –fast, –best в интерфейс командной строки gzip; эти параметры будут использоваться для быстрого метода сжатия (quick) или наилучшего метода сжатия (медленнее, но файл меньше). Также изменён уровень сжатия по умолчанию на 6 (компромисс).
bpo-16965: Фиксер 2to3
execfileтеперь открывает файл в режиме'rb'. Патч от Закери Спайтца.bpo-34966:
pydocтеперь поддерживает псевдонимы не только для методов, определённых в конечном классе, но и для унаследованных методов. Строка документации не дублируется для псевдонимов.bpo-34926:
mimetypes.MimeTypes.guess_type()теперь принимает объект, подобный пути в дополнение к строкам URL. Патч от Mayank Asthana.bpo-23831: Добавлен метод
moveto()к виджетуtkinter.Canvas. Патч от Juliette Monsel.bpo-34941: Методы
find(),findtext()иfindall()классаElementв модулеxml.etree.ElementTreeтеперь могут находить дочерние элементы, которые являются экземплярами подклассовElement.bpo-32680: Объекты
smtplib.SMTPтеперь всегда имеют атрибутsock.bpo-34769: Исправление для асинхронных генераторов, не выполняющих финализацию, когда цикл событий находится в режиме отладки, а сборщик мусора работает в другом потоке.
bpo-34936: Исправлен
TclErrorвtkinter.Spinbox.selection_element(). Патч от Juliette Monsel.bpo-34829: Добавлены методы
selection_from,selection_range,selection_presentиselection_toк виджетуtkinter.Spinboxдля согласованности с виджетомtkinter.Entry. Патч от Juliette Monsel.bpo-34911: Добавлен аргумент secure_protocols в http.cookiejar.DefaultCookiePolicy для настройки протоколов и добавления поддержки по умолчанию для wss, защищённого протокола websocket.
bpo-34922: Исправлено целочисленное переполнение в методах
digest()иhexdigest()для алгоритма SHAKE в модулеhashlib.bpo-34925: Ускорение разбора аргументов для функций в модуле bisect на 25%.
bpo-34900: Исправлена
unittest.TestCase.debug()при использовании для вызова тестовых методов с подтестами. Исправление от Bruno Oliveira.bpo-34844: Улучшение logging.Formatter – гарантия соответствия стилей и fmt в logging.Formatter – добавлен метод validate в каждый класс стиля форматирования: StrFormatStyle, PercentStyle, StringTemplateStyle. – Этот метод вызывается в конструкторе класса logging.Formatter – также повторно возбуждается KeyError в методе format каждого класса стиля, чтобы было яснее, что это ошибка из-за неверных полей формата.
bpo-34897: Изменена проверка test.support.missing_compiler_executable, чтобы пустое имя команды («») игнорировалось. Исправление от Michael Felt.
bpo-34871: Исправлено загрязнение модуля inspect
sys.modulesпри разборе__text_signature__вызываемого объекта.bpo-34898: Добавлен аргумент
mtimeкgzip.compressдля воспроизводимого вывода. Исправление от Guo Ci Teo.bpo-28441: В Cygwin и MinGW теперь гарантируется, что
sys.executableвсегда включает полное имя файла в путь, включая суффикс.exe(если это не символическая ссылка).bpo-34866: Добавление
max_num_fieldsвcgi.FieldStorageдля усложнения DOS-атак путём ограничения количества объектовMiniFieldStorage, создаваемыхFieldStorage.bpo-34711: http.server теперь гарантированно возвращает HTTPStatus.NOT_FOUND, когда локальный путь заканчивается на «/» и не является каталогом, даже если базовая ОС (например, AIX) считает такие пути допустимыми ссылками на файлы. Исправление от Michael Felt.
bpo-34872: Исправлена самоотмена в C-реализации asyncio.Task
bpo-34849: Больше не логируется ожидание
selector.selectв итерации цикла asyncio. Ожидание – обычное дело для любой asyncio-программы, логирование его времени только засоряет логи, не предоставляя полезной информации.bpo-34022: Переменная окружения
SOURCE_DATE_EPOCHбольше не переопределяет значение аргумента invalidation_mode дляpy_compile.compile(), а вместо этого определяет его значение по умолчанию.bpo-34819: Используются монотонные часы для вычисления тайм-аутов в
Executor.map()иas_completed(), чтобы предотвратить отклонение тайм-аутов при корректировке системных часов.bpo-34758: Добавлено .wasm -> application/wasm в список распознаваемых типов файлов и заголовков content-type
bpo-34789:
xml.sax.make_parser()теперь принимает любой итерируемый объект в качестве аргумента parser_list. Исправление от Andrés Delfino.bpo-34334: В
QueueHandlerочищаетсяexc_textизLogRecord, чтобы предотвратить двойную запись traceback.bpo-34687: В Windows asyncio теперь по умолчанию использует ProactorEventLoop вместо SelectorEventLoop.
bpo-5950: Поддержка чтения zip-файлов с комментариями архива в
zipimport.bpo-32892: Парсер теперь представляет все константы как
ast.Constantвместо использования конкретных типов констант AST (Num,Str,Bytes,NameConstantиEllipsis). Эти классы считаются устаревшими и будут удалены в будущих версиях Python.bpo-34728: Добавлено предупреждение об устаревании при использовании
loopв методах:asyncio.sleep,asyncio.waitиasyncio.wait_for.bpo-34738: ZIP-файлы, создаваемые
distutils, теперь будут содержать записи для каталогов.bpo-34659: Добавлен необязательный аргумент initial в itertools.accumulate().
bpo-29577: Поддержка нескольких примесных классов при создании перечислений.
bpo-34670: Добавлены SSLContext.post_handshake_auth и SSLSocket.verify_client_post_handshake для функции аутентификации после рукопожатия TLS 1.3.
bpo-32718: Сценарий Activate.ps1 из venv работает с PowerShell Core 6.1 и теперь доступен во всех операционных системах.
bpo-31177: Исправлена ошибка, препятствовавшая использованию
reset_mockна экземплярах mock с удалёнными атрибутамиbpo-34672: Добавлен обходной путь, чтобы спецификатор
'Z'time.strftime()в библиотеке C musl мог работать в некоторых случаях.bpo-34666: Реализованы корутины
asyncio.StreamWriter.awriteиasyncio.StreamWriter.aclose(). Эти методы необходимы для предоставления согласованного API потоков с включённым по умолчанию управлением потоком выполнения.bpo-6721: Захватывать часто используемые внутренние блокировки модуля logging при вызове fork(), чтобы избежать взаимоблокировок в дочернем процессе.
bpo-34658: Исправлено редкое состояние необработанного исключения интерпретатора SystemError, возникавшее только при использовании подпроцесса с preexec_fn, когда обработчик after_parent был зарегистрирован через os.register_at_fork и системный вызов fork завершался ошибкой.
bpo-34652: Гарантируется, что
os.lchmod()никогда не определяется в Linux.bpo-34638: Хранить слабую ссылку на объект чтения потока, чтобы разорвать цикл сильных ссылок между читателем и протоколом. Это позволяет обнаружить и закрыть сокет, если поток удаляется (сборщиком мусора) без вызова
close().bpo-34536:
Enum._missing_: возбуждатьValueError, если возвращено None, иTypeError, если возвращён не член.bpo-34636: Ускорено сканирование re для множества несовпадающих символов для \s, \w и \d в байтовых объектах (микрооптимизация).
bpo-24412: Добавлены
addModuleCleanup()иaddClassCleanup()в unittest для поддержки очистки дляsetUpModule()иsetUpClass(). Патч от Lisa Roach.bpo-34630: Не логировать ошибки SSL-сертификатов в коде asyncio (логирование ошибок соединения уже пропускается).
bpo-32490: Предотвращено дублирование имени файла в сообщениях исключения
subprocess. Патч от Zackery Spytz.bpo-34363: dataclasses.asdict() и .astuple() теперь корректно обрабатывают именованные кортежи.
bpo-34625: Обновлена версия вендоризированной библиотеки expat до 2.2.6.
bpo-32270: Модуль подпроцесса больше не закрывает ошибочно перенаправленные файловые дескрипторы, даже если они были в 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: Итераторы упорядоченного словаря больше не исчерпываются при сериализации pickle. Патч от Sergey Fedoseev.
bpo-8110: Проведен рефакторинг
subprocessдля проверки Windows-специфичных модулей вместоsys.platform == 'win32'.bpo-34530:
distutils.spawn.find_executable()теперь используетos.defpathкак запасной вариант, если переменная окруженияPATHне установлена.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_и исправлено затенение элементов enum атрибутами родительского класса.bpo-22872: Теперь при закрытии очереди
multiprocessing.Queue.put()иmultiprocessing.Queue.get()генерируютValueErrorвместоAssertionErrorиOSErrorсоответственно. Патч от Zackery Spytz.bpo-34515: Исправлен разбор не-ASCII идентификаторов в
lib2to3.pgen2.tokenize(PEP 3131).bpo-13312: Предотвращено возможное целочисленное переполнение в меньшую сторону (неопределённое поведение) в коде обработки года модуля time при передаче очень малого отрицательного значения года.
bpo-34472: Улучшена совместимость для потоковых файлов в
zipfile. Ранее не записывалась необязательная сигнатура и не поддерживались некоторые ZIP-приложения. Патч от Silas Sewell.bpo-34454: Исправлено падение методов .fromisoformat() типов datetime при передаче unicode с кодовыми точками, не кодируемыми в UTF-8. В частности, datetime.fromisoformat() теперь принимает суррогатные кодовые точки unicode, используемые как разделитель. Отчёт и тесты от Alexey Izbyshev, патч от Paul Ganssle.
bpo-6700: Исправлен inspect.getsourcelines для фреймов и трассировок уровня модуля. Патч от Vladimir Matveev.
bpo-34171: Запуск модуля
traceбольше не создаёт файлtrace.cover.bpo-34441: Исправлен сбой, когда класс, производный от
ABC, с некорректным__subclasses__передаётся вторым аргументом вissubclass(). Патч от Alexey Izbyshev.bpo-34427: Исправлен бесконечный цикл в
a.extend(a)для подклассовMutableSequence.bpo-34412: Обеспечена работа
signal.strsignal()на HP-UX. Патч от Michael Osipov.bpo-20849: shutil.copytree теперь принимает новый именованный аргумент
dirs_exist_ok. Патч от Josh Bronson.bpo-31715: Расширение файла
.mjsсвязано с MIME-типомapplication/javascript.bpo-34384:
os.readlink()теперь принимает path-like иbytesобъекты в Windows.bpo-22602: Декодер UTF-7 теперь генерирует
UnicodeDecodeErrorдля некорректных последовательностей, начинающихся с «+» (как указано в RFC 2152). Патч от Zackery Spytz.bpo-2122: Метод
mmap.flush()теперь возвращаетNoneв случае успеха и вызывает исключение при ошибке на всех платформах.bpo-34341: Добавление в ZIP-архив с расширением ZIP64 больше не увеличивает размер дополнительных полей существующих записей.
bpo-34333: Исправлено %-форматирование в
pathlib.PurePath.with_suffix()при форматировании сообщения об ошибке.bpo-18540: Классы
imaplib.IMAP4иimaplib.IMAP4_SSLтеперь правильно определяют IP-адрес локального хоста, когда используется значение по умолчанию параметра host ('').bpo-26502: Реализован метод
traceback.FrameSummary.__len__()для сохранения совместимости со старым API кортежей.bpo-34318:
assertRaises(),assertRaisesRegex(),assertWarns()иassertWarnsRegex()больше не считаются успешными, если переданный вызываемый объект равен None. Они больше не игнорируют неизвестные именованные аргументы в режиме менеджера контекста. Начиная с Python 3.5 в этих случаях выдавалось предупреждение DeprecationWarning.bpo-9372: Устарели методы
__getitem__()классовxml.dom.pulldom.DOMEventStream,wsgiref.util.FileWrapperиfileinput.FileInput.bpo-33613: Исправлено состояние гонки в
multiprocessing.semaphore_tracker, когда трекер получает SIGINT до того, как сможет зарегистрировать обработчики сигналов для его игнорирования.bpo-34248: Имя файла теперь сообщается в исключении, когда файл базы данных не может быть открыт с помощью
dbm.gnu.open()иdbm.ndbm.open()из-за ошибки, связанной с ОС. Патч от Zsolt Cserna.bpo-33089: Добавлена функция math.dist() для вычисления евклидова расстояния между двумя точками.
bpo-34246:
smtplib.SMTP.send_message()больше не изменяет содержимое аргумента mail_options. Патч от Pablo S. Blum de Aguiar.bpo-31047: Исправлен
ntpath.abspathдля недопустимых путей в Windows. Патч от Franz Woellert.bpo-32321: Добавлена реализация на чистом Python для functools.reduce. Патч от Robert Wright.
bpo-34270: Класс задачи asyncio по умолчанию теперь всегда имеет имя, которое можно получить или установить с помощью двух новых методов (
get_name()иset_name()), и оно отображается в выводеrepr(). Начальное имя также можно задать с помощью нового именованного аргументаnameдляasyncio.create_task()или методаcreate_task()цикла событий. Если начальное имя не задано, реализация задачи по умолчанию генерирует имя видаTask-1, используя монотонный счётчик.bpo-34263: Цикл событий asyncio больше не будет передавать таймауты длиннее одного дня в epoll/select и т.д.
bpo-34035: Исправлено несколько AttributeError в методах seek() модуля zipfile. Патч от Mickaël Schoentgen.
bpo-32215: Исправлена регрессия производительности в
sqlite3, когда оператор DML находился в другой строке, чем остальная часть SQL-запроса.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: Атрибуты skipinitialspace, doublequote и strict атрибута dialect модуля
csvтеперь являются экземплярамиboolвместо целых чисел 0 или 1.bpo-32788: Ошибки, отличные от
TypeError, возникающие в методах__adapt__()и__conform__()модуляsqlite3, теперь передаются пользователю.bpo-21446: Фиксер
reloadтеперь используетimportlib.reload()вместо устаревшегоimp.reload().bpo-940286: Метод
Helper.showtopic()модуля pydoc теперь корректно выводит перекрёстные ссылки темы.bpo-34164:
base64.b32decode()мог вызывать UnboundLocalError или OverflowError при неправильном дополнении. Теперь в этих случаях он всегда вызываетbase64.Error.bpo-33729: Исправлены проблемы с разбором аргументов в
hashlib.bpo-34097: ZipFile теперь может архивировать файлы старше 1980-01-01 и новее 2107-12-31 с помощью нового параметра
strict_timestampsценой установки временной метки на предельное значение.bpo-34108: Удалены лишние символы CR в модуле 2to3.
bpo-34070: Теперь проверка на то, что дескриптор является tty, выполняется только при открытии файла с помощью
buffering=-1.bpo-27494: Откат bpo-27494. Теперь 2to3 отклоняет завершающую запятую в выражениях-генераторах.
bpo-33967: functools.singledispatch теперь возбуждает TypeError вместо IndexError, если не передано позиционных аргументов.
bpo-34041: Добавлен параметр deterministic в метод
sqlite3.Connection.create_function(). Исправление от Sergey Fedoseev.bpo-34056: Гарантируется, что загрузчик-прокладка, созданный
imp.load_module, всегда возвращает байты из своей функцииget_data(). Это исправляет использованиеimp.load_moduleс PEP 552 хеш-файлами .pyc.bpo-34054: Модуль multiprocessing теперь использует монотонные часы
time.monotonic()вместо системных часовtime.time()для реализации тайм-аута.bpo-34043: Оптимизация производительности распаковки tarfile при использовании gzip – ускорение около 15%.
bpo-34044:
subprocess.Popenтеперь копирует аргумент startupinfo, чтобы оставить его неизменным: изменения вносятся в копию, что позволяет использовать один и тот же объектSTARTUPINFOнесколько раз.bpo-34010: Исправлено падение производительности при чтении потоков с помощью tarfile. Буферизованное чтение теперь должно использовать список, а не добавлять данные в объект bytes.
bpo-34019: webbrowser: исправлены аргументы, передаваемые браузеру Opera при открытии нового URL с помощью модуля
webbrowser. Исправление от Bumsik Kim.bpo-34003: csv.DictReader теперь создаёт обычные словари, а не упорядоченные словари. Исправление от Michael Selik.
bpo-33978: Перед переконфигурацией через fileConfig и dictConfig закрываются существующие обработчики логов. Исправление от Karthikeyan Singaravelan.
bpo-14117: Небольшие доработки в turtledemo. Пример 'wikipedia' теперь называется 'rosette' и описывает то, что рисует. Вывод 'penrose' сокращён. Вывод '1024' из 'tree' удалён.
bpo-33974: Fixed passing lists and tuples of strings containing special characters
",\,{,}and\nas options tottkwidgets.bpo-27500: Исправлен getaddrinfo для корректного разрешения IPv6-адресов.
bpo-24567: Улучшена random.choices() для обработки субнормальных весов на входе, которые иногда могли вызывать IndexError.
bpo-33871: Исправлено целочисленное переполнение в
os.readv(),os.writev(),os.preadv()иos.pwritev(), а также вos.sendfile()с аргументами headers или trailers (на ОС на базе BSD и macOS).bpo-25007: Добавлена поддержка
copy.copy()иcopy.deepcopy()в компрессоры и декомпрессоры zlib. Исправление от Zackery Spytz.bpo-33929: multiprocessing: исправлено состояние гонки в Popen из multiprocessing.popen_spawn_win32. Теперь дочерний процесс дублирует конец канала для чтения вместо того, чтобы «похищать» его. Ранее дочерний процесс «похищал» этот конец канала, что приводило к утечке дескриптора, если дочерний процесс завершался до того, как успевал забрать дескриптор у родительского процесса.
bpo-33899: Модуль tokenize теперь неявно генерирует NEWLINE, если входные данные не содержат завершающего перевода строки. Такое поведение теперь соответствует тому, что делает C-токенизатор внутри. Вклад – Ammar Askar.
bpo-33897: Добавлен аргумент ‘force’ в logging.basicConfig().
bpo-33695:
shutil.copytree()использует функциюos.scandir(), и все функции копирования, зависящие от неё, используют кешированные значенияos.stat(). Ускорение копирования каталога с 8000 файлами составляет около +9% на Linux, +20% на Windows и +30% на сетевой папке SMB в Windows. Также количество системных вызововos.stat()уменьшено на 38%, что делаетshutil.copytree()особенно быстрее на сетевых файловых системах. (Вклад – Giampaolo Rodola’ в bpo-33695.)bpo-33916: bz2 и lzma: при повторном вызове Decompressor.__init__() освобождается старая блокировка, чтобы избежать утечки памяти.
bpo-32568: Привести select.epoll() и его документацию к единообразию в отношении sizehint и flags.
bpo-33833: Исправлена ошибка в asyncio, из-за которой 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(). Она почти всегда возвращала версию '2.9' для glibc.bpo-33843: Удалены устаревшие
cgi.escape,cgi.parse_qsиcgi.parse_qsl.bpo-33842: Удалён
tarfile.filemode, который устарел с Python 3.3.bpo-30167: Предотвращено исключение в site.main(), если установлен PYTHONSTARTUP. Исправление от Steve Weber.
bpo-33805: Улучшено сообщение об ошибке в dataclasses.replace(), когда InitVar не указан.
bpo-33687: Исправлен вызов
os.chmod()дляuu.decode(), если задан или декодирован режим. Патч от Timo Furrer.bpo-33812: Экземпляр datetime d с не-None tzinfo, но с d.tzinfo.utcoffset(d), возвращающим None, теперь считается наивным методом astimezone().
bpo-32108: В configparser больше не очищается секция при присваивании её самой себе.
bpo-27397: Модуль email теперь корректно обрабатывает строки base64 некорректной длины.
bpo-33578: Реализованы методы состояния многобайтового кодировщика/декодировщика.
bpo-30805: Устранено состояние гонки при ведении отладочного журнала.
bpo-33476: Исправлен _header_value_parser.py, когда в группе адресов отсутствует завершающая точка с запятой. Вклад Enrique Perez-Terron.
bpo-33694: asyncio: Исправлено состояние гонки, приводящее к потере данных при pause_reading()/resume_reading() при использовании ProactorEventLoop.
bpo-32493: Исправлена проверка доступности
uuid_enc_beвconfigure.ac. Патч от Michael Felt.bpo-33792: Добавлены asyncio.WindowsSelectorEventLoopPolicy и asyncio.WindowsProactorEventLoopPolicy.
bpo-33274: Спецификация W3C DOM Level 1 определяет возвращаемое значение Element.removeAttributeNode() как «Узел Attr, который был удалён». 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: Операции конкатенации (
+) и повторения (*) последовательностей теперь вызываютTypeErrorвместоSystemErrorпри выполнении над объектамиmmap.mmap. Исправление от Zackery Spytz.bpo-33734: asyncio/ssl: исправлен AttributeError, увеличено время ожидания рукопожатия по умолчанию
bpo-31014: Исправлено создание контроллера для
webbrowser, когда пользователь указывает путь к записи в переменной окружения BROWSER. Основано на патче от John Still.bpo-2504: Добавлены gettext.pgettext() и варианты.
bpo-33197: Добавлено свойство description для _ParameterKind.
bpo-32751: При отмене задачи из-за тайм-аута
asyncio.wait_for()теперь будет ждать завершения отмены.bpo-32684: Исправлено: gather теперь распространяет отмену самой себя даже с return_exceptions.
bpo-33654: Добавлена поддержка переключения типа протокола в SSLTransport.set_protocol().
bpo-33674: Транспорт приостанавливается как можно раньше, чтобы ещё больше снизить риск вызова data_received() до connection_made().
bpo-33671:
shutil.copyfile(),shutil.copy(),shutil.copy2(),shutil.copytree()иshutil.move()теперь используют платформенно-зависимые быстрые системные вызовы копирования на Linux и macOS для более эффективного копирования файлов. На Windowsshutil.copyfile()использует больший размер буфера по умолчанию (1 МиБ вместо 16 КиБ) и применяется вариантshutil.copyfileobj()на основеmemoryview(). Прирост скорости копирования файла размером 512 МиБ составляет около +26% на Linux, +50% на macOS и +40% на Windows. Кроме того, потребляется гораздо меньше циклов CPU. (Вклад Giampaolo Rodola в bpo-25427.)bpo-33674: Исправлено состояние гонки в SSLProtocol.connection_made() из asyncio.sslproto: запускать рукопожатие немедленно, а не через call_soon(). Ранее data_received() мог быть вызван до начала рукопожатия, что приводило к зависанию или сбою рукопожатия.
bpo-31647: Исправлена ошибка, при которой вызов write_eof() на _SelectorSocketTransport после его закрытия вызывал AttributeError.
bpo-32610: asyncio.all_tasks() теперь возвращает только ожидающие задачи.
bpo-32410: Устранена блокировка при файловом вводе-выводе в резервном коде sendfile.
bpo-33469: Исправлен RuntimeError после закрытия цикла, который использовал run_in_executor.
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: Исправлен
uuid.uuid1()на FreeBSD.bpo-33238: Добавлен
InvalidStateErrorкconcurrent.futures.Future.set_resultиFuture.set_exceptionтеперь вызываютInvalidStateError, если future не находятся в состоянии ожидания или выполнения. Исправление от Jason Haydaman.bpo-33618: Завершена и задокументирована предварительная и экспериментальная поддержка TLS 1.3 с OpenSSL 1.1.1.
bpo-33625: Освобождать GIL в
grp.getgrnam,grp.getgrgid,pwd.getpwnamиpwd.getpwuid, если доступны реентерабельные варианты этих функций. Патч от William Grzybowski.bpo-33623: Исправлена возможная ошибка SIGSGV при создании asyncio.Future в __del__.
bpo-11874: Использовать улучшенное регулярное выражение при разбиении usage на части для переноса. Избегает ложных ошибок утверждения из пользовательских строк metavar.
bpo-30877: Исправлена ошибка в Python-реализации декодера JSON, которая препятствовала очистке кэша разобранных строк после завершения декодирования. Основано на исправлении от c-fos.
bpo-33604: Удалён HMAC по умолчанию на md5, помеченный к удалению в 3.8 (изначально планировалось в 3.6, перенесено на 3.8 в PR 7062).
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 для токенизации строк в Юникоде. Ранее он присутствовал, но не был документирован.bpo-33540: Добавлен новый атрибут класса
block_on_closeв классыForkingMixInиThreadingMixInмодуляsocketserver.bpo-33548: tempfile._candidate_tempdir_list должен учитывать общие расположения TEMP
bpo-33109: Подпарсеры argparse снова не являются обязательными по умолчанию, отменяя изменение поведения, введённое bpo-26510 в 3.7.0a2.
bpo-33541: Удалён неиспользуемый закрытый метод
_strptime.LocaleTime.__pad(он же_LocaleTime__pad).bpo-33536: dataclasses.make_dataclass теперь проверяет некорректные имена полей и дублирующиеся поля. Также добавлена проверка некорректных спецификаций полей.
bpo-33542: Предотвратить использование
uuid.get_nodeDUID вместо MAC на Windows. Исправление от Zvi Effronbpo-26819: Исправлено состояние гонки с
ReadTransport.resume_readingв цикле событий Windows proactor.Исправлена ошибка в
typing.get_type_hints(), когда ClassVar был указан в виде строковой прямой ссылки.bpo-33516:
unittest.mock.MagicMockтеперь поддерживает магический метод__round__.bpo-28612: Добавлена поддержка карт сайтов для
RobotFileParserв urllib в видеRobotFileParser.site_maps(). Исправление от Lady Red, основано на исправлении от Peter Wirtz.bpo-28167: Удалена platform.linux_distribution, устаревшая с версии 3.5.
bpo-33504: Изменена реализация словаря по умолчанию для
configparserсcollections.OrderedDictна стандартный типdict.bpo-33505: Оптимизирован asyncio.ensure_future() за счёт перестановки проверок: в 1.17 раза быстрее.
bpo-33497: Добавлен параметр errors в cgi.parse_multipart, и кодировка в FieldStorage теперь использует переданное значение errors (необходимо для Twisted). Патч от Amber Brown.
bpo-29235: Класс
cProfile.Profileтеперь можно использовать как контекстный менеджер. Исправление от Scott Sanderson.bpo-33495: Изменено представление dataclasses.Fields: теперь используется repr каждого из его членов вместо str. Это позволяет лучше понять, что именно представляет каждое поле. Особенно это актуально для члена «type».
bpo-26103: Исправлено
inspect.isdatadescriptor: теперь ищет__set__или__delete__. Исправление от Aaron Hall.bpo-29209: Удалён метод
doctype()и параметр html конструктораXMLParser. Методdoctype(), определённый в подклассе, больше не будет вызываться. Устаревшие методыgetchildren()иgetiterator()в модулеElementTreeтеперь вызываютDeprecationWarningвместоPendingDeprecationWarning.bpo-33453: Исправлена работа dataclasses при использовании строковых литералов в аннотациях типов или при использовании PEP 563 («Отложенное вычисление аннотаций»). Для ClassVar («ClassVar» и «typing.ClassVar») и InitVar («InitVar» и «dataclasses.InitVar») обнаруживаются только определённые строковые префиксы.
bpo-28556: Небольшие исправления в модуле typing: добавлены аннотации к
NamedTuple.__new__, передаются*argsи**kwdsвGeneric.__new__. Оригинальные PR от Paulius Šarka и Chad Dombrova.bpo-33365: Выводить значения заголовков вместе с ключами, а не только ключи, если debuglevel установлен в >0 в
http.client. Патч от 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: Исправлен регресс ctypes.util.find_library на macOS.
bpo-33311: Текстовый и HTML-вывод, созданный cgitb, не показывает круглые скобки, если текущий вызов выполняется непосредственно в модуле. Патч от Stéphane Blondon.
bpo-27300: Классы файлов в tempfile теперь принимают параметр errors, дополняющий уже существующий encoding. Патч от Stephan Hohe.
bpo-32933:
unittest.mock.mock_open()теперь поддерживает итерацию по содержимому файла. Патч от Tony Flury.bpo-33217: Вызывать
TypeErrorпри поиске не-Enum объектов в Enum-классах и членах Enum.bpo-33197: Обновлено сообщение об ошибке при создании некорректных inspect.Parameters. Патч от Dong-hee Na.
bpo-33383: Исправлен сбой в методе get() объекта базы данных
dbm.ndbmпри вызове с одним аргументом.bpo-33375: Модуль warnings теперь находит Python-файл, связанный с предупреждением, через объект кода, а не через глобальное пространство имён фрейма. Это согласуется с тем, как traceback и pdb находят имена файлов, и должно лучше работать для динамически выполняемого кода.
bpo-33336:
imaplibтеперь допускает командуMOVEвIMAP4.uid()(RFC 6851: IMAP MOVE Extension) и, возможно, как имя поддерживаемого метода объектаIMAP4.bpo-32455: Добавлен параметр jump в
dis.stack_effect().bpo-27485: Переименованы и помечены как устаревшие недокументированные функции в
urllib.parse().bpo-33332: Добавлен
signal.valid_signals()для предоставления функциональности POSIX sigfillset().bpo-33251:
ConfigParser.items()была исправлена так, что пары ключ-значение, переданные черезvars, не включаются в результирующий вывод.bpo-33329: Исправлена регрессия модуля multiprocessing на новых версиях glibc
bpo-33334:
dis.stack_effect()теперь поддерживает все определённые опкоды, включая NOP и EXTENDED_ARG.bpo-991266: Исправлено экранирование атрибута
Commenthttp.cookies.SimpleCookie.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(): теперь они возвращают итерируемый объект вместо итератора.bpo-33265:
contextlib.ExitStackиcontextlib.AsyncExitStackтеперь используют метод вместо функции-обёртки для колбэков выхода.bpo-33263: Исправлена утечка файловых дескрипторов в
_SelectorSocketTransport. Патч от Vlad Starostin.bpo-33256: Исправлено отображение вызова
<module>в HTML, созданномcgitb.html(). Патч от Stéphane Blondon.bpo-33144:
random.Random()и его механизм создания подклассов был оптимизирован: теперь только один раз при создании класса или подкласса проверяется, можно ли полагаться на его методgetrandbits()для генерации произвольно больших случайных целых чисел в других методах, включаяrandrange(). Патч Вольфганга Майера.bpo-33185: Исправлена регрессия при запуске pydoc с ключом
-m. (Регрессия была внесена в 3.7.0b3 исправлением bpo-33053).Это исправление также изменило поведение pydoc: теперь при необходимости
os.getcwd()добавляется вsys.path, а не".".bpo-29613: Добавлена поддержка флага cookie
SameSiteв модульhttp.cookies.bpo-33169: Удаление записей
Noneизsys.path_importer_cacheпри вызовеimportlib.machinery.invalidate_caches().bpo-33203:
random.Random.choice()теперь последовательно вызываетIndexErrorдля пустых последовательностей, даже при вызове из подклассов без реализацииgetrandbits().bpo-33224: Обновлён difflib.mdiff() в соответствии с PEP 479. Непойманное StopIteration в генераторе преобразуется в return.
bpo-33209: Завершение фрейминга в конце C-реализации
pickle.Pickler.dump().bpo-32861: Представление
__str__в urllib.robotparser теперь включает подстановочные записи и поля «Crawl-delay» и «Request-rate». Также удалены лишние символы новой строки, которые добавлялись в конец строки. Патч Майкла Лазаря.bpo-23403:
DEFAULT_PROTOCOLвpickleповышен до версии 4. Протокол 4 описан в PEP 3154 и доступен начиная с Python 3.4. Он обеспечивает лучшую производительность и меньший размер по сравнению с протоколом 3, представленным в Python 3.0.bpo-20104: Улучшена обработка ошибок и исправлена утечка ссылок в
os.posix_spawn().bpo-33106: Удаление ключа из базы данных dbm, открытой только для чтения, теперь вызывает ошибку, специфичную для модуля, а не KeyError.
bpo-33175: В dataclasses метод Field.__set_name__ теперь ищет специальный метод __set_name__ в классе, а не в экземпляре значения по умолчанию.
bpo-32380: Создан functools.singledispatchmethod для поддержки обобщённой единичной диспетчеризации для дескрипторов и методов.
bpo-33141: Объекты Field передают __set_name__ своим значениям по умолчанию, если у них есть свой __set_name__.
bpo-33096: Разрешена вставка iid с ложным булевым значением в ttk.Treeview.insert. Обратите внимание, что iid=0 и iid=False будут одинаковы. Патч от Garvit Khatri.
bpo-32873: Обрабатывать переменные типов и специальные формы typing как неизменяемые при копировании и pickle. Это исправляет несколько мелких проблем и несоответствий, а также улучшает обратную совместимость с Python 3.6.
bpo-33134: При вычислении __hash__ для dataclass используйте таблицу поиска для хранения функции, возвращающей значение __hash__. Это улучшение по сравнению с поиском строки, а затем проверкой этой строки, чтобы решить, что делать.
bpo-33127: Модуль ssl теперь компилируется с LibreSSL 2.7.1.
bpo-32505: Вызывать TypeError, если переменная-член dataclass имеет тип Field, но не имеет аннотации типа.
bpo-33078: Исправление сбоя на OSX, вызванного тестами, полагающимися на sem_getvalue
bpo-33116: Добавить 'Field' в dataclasses.__all__.
bpo-32896: Исправление ошибки, когда наследование от dataclass с полем, использующим default_factory, приводило к созданию некорректного класса.
bpo-33100: Dataclasses: Если у поля есть значение по умолчанию, являющееся MemberDescriptorType, то это от того, что поле находится в __slots__, а не фактическое значение по умолчанию.
bpo-32953: Если не-dataclass наследуется от замороженного dataclass, разрешить добавление атрибутов в производный класс. Назначать можно только атрибуты, не принадлежащие замороженному dataclass. Требовать, чтобы все dataclass в иерархии были либо все замороженными, либо все незамороженными.
bpo-33097: Вызов RuntimeError при вызове
executor.submitво время завершения работы интерпретатора.bpo-32968: Операции взятия остатка и целочисленного деления с участием Fraction и float должны возвращать float.
bpo-33061: Добавить отсутствующий
NoReturnв__all__в typing.pybpo-33078: Исправить обработку размера в multiprocessing.Queue при возникновении ошибки пиклинга.
bpo-33064: lib2to3 теперь корректно поддерживает завершающие запятые после
*argsи**kwargsв сигнатурах функций.bpo-33056: FIX: корректно закрывать утекающие файловые дескрипторы в concurrent.futures.ProcessPoolExecutor.
bpo-33021: Освобождение GIL при вызовах fstat(), что предотвращает зависание всех потоков при вызове mmap.mmap(), os.urandom() и random.seed(). Патч от Nir Soffer.
bpo-31804: Исправлена ошибка в multiprocessing.Process, если стандартные потоки были закрыты или равны None при завершении.
bpo-33034: Добавлено явное сообщение об ошибке при приведении свойства port к чему-либо, кроме целого числа, с помощью
urlparse()иurlsplit(). Исправление от Matt Eaton.bpo-30249: Улучшены сообщения исключений struct.unpack_from() при проблемах с размером буфера и смещением.
bpo-33037: Пропуск отправки/получения данных после закрытия SSL-транспорта.
bpo-27683: Исправлена регрессия в
ipaddress, из-за которой результатhosts()оказывался пустым, когда сеть строится из кортежа, содержащего целочисленную маску и только 1 бит для адресов.bpo-22674: Добавлена функция strsignal() в модуль signal, которая возвращает системное описание переданного сигнала, как возвращается strsignal(3).
bpo-32999: Исправить аварийное завершение C-реализации
ABC.__subclasscheck__(cls, subclass), когдаsubclassне является объектом типа.bpo-33009: Исправлена работа inspect.signature() для partialmethod с одним параметром.
bpo-32969: Открыт доступ к нескольким отсутствовавшим константам в zlib и исправлена соответствующая документация.
bpo-32056: Улучшены исключения, вызываемые при недопустимом количестве каналов и разрядности сэмпла при чтении аудиофайла в модулях
aifc,waveиsunau.bpo-32970: Улучшена дизассемблировка инструкции MAKE_FUNCTION.
bpo-32844: Исправлена некорректная перенаправление низкого дескриптора (0 или 1) в stderr в подпроцессе, если другой низкий дескриптор закрыт.
bpo-32960: Для dataclasses запрещено наследование frozen от non-frozen классов, а также наследование non-frozen от frozen классов. Это ограничение будет снято в будущем.
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, __hash__ добавляется на основе значений eq= и frozen=. Поведение unsafe_hash=False совпадает со старым поведением hash=None. unsafe_hash=False используется по умолчанию, как и раньше hash=None.
bpo-32947: Добавлены OP_ENABLE_MIDDLEBOX_COMPAT и тестовый обходной путь для TLSv1.3 для будущей совместимости с OpenSSL 1.1.1.
bpo-32146: Документировано взаимодействие между замороженными исполняемыми файлами и методами запуска spawn и forkserver в multiprocessing.
bpo-30622: Модуль ssl теперь обнаруживает отсутствие поддержки NPN в LibreSSL.
bpo-32922: dbm.open() теперь кодирует имя файла с использованием кодировки файловой системы вместо кодировки по умолчанию.
bpo-32759: Освобождение неиспользуемых арен в multiprocessing.heap.
bpo-32859: В
os.dup2больше не проверяется каждый вызов на существование системного вызоваdup3.bpo-32556: nt._getfinalpathname, nt._getvolumepathname и nt._getdiskusage теперь корректно преобразуют из bytes.
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: Обеспечено сохранение sys.argv в виде списка при запуске trace.
bpo-31333: Добавлен модуль
_abc. Это модуль ускорения с реализациями на C для различных функций и методов вabc. Создание подкласса ABC и вызовisinstanceилиissubclassс подклассом ABC выполняются до 1.5 раза быстрее. Кроме того, это ускоряет запуск Python до 10%.Note that the new implementation hides internal registry and caches, previously accessible via private attributes
_abc_registry,_abc_cache, and_abc_negative_cache. There are three debugging helper methods that can be used instead_dump_registry,_abc_registry_clear, and_abc_caches_clear.bpo-32841: Исправлена проблема
asyncio.Condition, которая молча игнорировала отмену после уведомления и отмены условной блокировки. Исправление от Bar Harel.bpo-32819: ssl.match_hostname() упрощён и больше не зависит от модулей re и ipaddress для подстановочных знаков и IP-адресов. Улучшено сообщение об ошибках для недопустимых подстановочных знаков.
bpo-19675:
multiprocessing.Poolбольше не вызывает утечку процессов при сбое инициализации.bpo-32394: socket: удалены флаги TCP_FASTOPEN, TCP_KEEPCNT, TCP_KEEPIDLE, TCP_KEEPINTVL в старых версиях Windows во время выполнения.
bpo-31787: Исправлены утечки ссылок (refleaks) методов
__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: Реализован нативный быстрый sendfile для цикла событий proactor в Windows.
bpo-32777: Исправлена редкая, но потенциальная взаимоблокировка дочернего процесса перед exec в подпроцессе на системах POSIX при пометке файловых дескрипторов наследуемыми при exec в дочернем процессе. Эта ошибка, по-видимому, была введена в 3.4.
bpo-32647: Модуль ctypes ранее зависел от косвенной компоновки для dlopen. Теперь общее расширение явно компонуется с libdl на платформах, где есть dl.
bpo-32749: База данных
dbm.dumb, открытая с флагами 'r', теперь доступна только для чтения.dbm.dumb.open()с флагами 'r' и 'w' больше не создаёт базу данных, если она не существует.bpo-32741: Реализован метод
asyncio.TimerHandle.when().bpo-32691: Использовать mod_spec.parent при запуске модулей с pdb
bpo-32734: Исправлена проблема безопасности
asyncio.Lock(), которая позволяла захватывать и блокировать одну и ту же блокировку несколько раз, не освобождая её. Исправление от Bar Harel.bpo-32727: Не включать поле name в адрес отправителя SMTP-конверта. Исправление от Stéphane Wirtel.
bpo-31453: Добавлены константы TLSVersion и атрибуты SSLContext.maximum_version / minimum_version. Новый API оборачивает функциональность OpenSSL 1.1 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: Добавлен виджет Ttk spinbox в
tkinter.ttk. Патч от Alan D Moore.bpo-32512:
profileCLI принимает-m module_nameв качестве альтернативы пути к скрипту.bpo-8525: help() для типа теперь отображает встроенные подклассы. Это предназначено в первую очередь для помощи в уведомлении о более конкретных подклассах исключений.
Патч от Sanyam Khurana.
bpo-31639: http.server теперь предоставляет класс ThreadingHTTPServer и использует его при запуске модуля с
-m, чтобы справляться с предварительным открытием сокетов веб-браузерами.bpo-29877: compileall: импортировать ProcessPoolExecutor только при необходимости, предотвращая зависания на платформах с низкими ресурсами.
bpo-32221: Различные функции, возвращающие кортеж с IPv6-адресами, теперь опускают часть
%scope, поскольку та же информация уже закодирована в элементе кортежа scopeid. Это особенно ускоряетsocket.recvfrom()при получении multicast-пакета, так как исключается бесполезное разрешение имени сетевого интерфейса.bpo-32147:
binascii.unhexlify()теперь работает до 2 раз быстрее. Патч от Sergey Fedoseev.bpo-30693: Класс TarFile теперь рекурсивно обходит каталоги воспроизводимым образом.
bpo-30693: Класс ZipFile теперь рекурсивно обходит каталоги воспроизводимым образом.
bpo-31680: Добавлен
curses.ncurses_version.bpo-31908: Исправлен вывод файлов покрытия для инструмента командной строки модуля
trace. Ранее файлы покрытия создавались только при использовании опции--missing. Патч от Michael Selik.bpo-31608: Возникает исключение
TypeErrorвместо аварийного завершения, если подклассcollections.dequeвозвращает не-deque из__new__. Патч от Oren Milman.bpo-31425: Добавлена поддержка сокетов адресного семейства AF_QIPCRTR, поддерживаемого ядром Linux. Это используется для связи с сервисами, такими как GPS или радио, работающими на устройствах Qualcomm. Патч от Bjorn Andersson.
bpo-22005: Реализована распаковка (unpickling) экземпляров
datetime,dateиtime, упакованных (pickled) Python 2. Для успешного декодирования следует использоватьencoding='latin1'.bpo-27645:
sqlite3.Connectionтеперь предоставляет методbackup, если используемая библиотека SQLite имеет версию 3.6.11 или выше. Патч от Lele Gaifax.bpo-16865: Поддержка массивов размером >=2 ГБ в
ctypes. Патч от Segev Finer.bpo-31508: Удалена поддержка аргументов в
tkinter.ttk.Treeview.selection. Они были объявлены устаревшими в 3.6. Используйте специализированные методы, такие какselection_set, для изменения выделения.bpo-29456: Исправлены ошибки в нормализации хангыля: u1176, u11a7 и u11c3
Документация¶Documentation
bpo-21257: Документирован
http.client.parse_headers().bpo-34764: Улучшен пример iter() со вторым аргументом-стражем.
bpo-35564: Явно установлена переменная master_doc в conf.py для совместимости с Sphinx 2.0
bpo-35511: Указано, что класс profile.Profile не поддерживает методы enable или disable. Также разъяснено, что объект Profile в качестве контекстного менеджера поддерживается только в модуле cProfile.
bpo-10536: Улучшена документация gettext. Исправление от Éric Araujo
bpo-35089: Удалены упоминания
typing.ioиtyping.re. Их типы следует импортировать напрямую изtyping.bpo-35038: Исправлена документация о несуществующем атрибуте
f_restrictedв объекте frame. Исправление от Stéphane Wirtelbpo-35042: Замена PEP XYZ на роль pep и возможность использовать прямые ссылки на PEP.
bpo-35044: Исправлена документация с использованием роли
excдля соответствующего исключения. Исправление от Stéphane Wirtelbpo-35035: Переименована документация с
email.utilsнаemail.utils.rst.bpo-34967: Использовать app.add_object_type() вместо устаревшей функции Sphinx app.description_unit()
bpo-34913: Добавлена документация о новом интерфейсе командной строки модуля gzip.
bpo-32174: CHM-документ корректно отображает не-ASCII символы на некоторых MBCS системах Windows.
bpo-11233: Создана директива availability для документации. Оригинальное исправление от 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's PYTHONCOERCECLOCALE и режимом PYTHONUTF8 из PEP 540.
bpo-33197: Добавлен тег versionadded в документацию ParameterKind.description
bpo-17045: Улучшена документация C-API для PyTypeObject. Включает добавление нескольких таблиц быстрого доступа и множества отсутствовавших записей слотов/typedef. Существующие записи также были приведены к более единообразному формату.
bpo-33736: Улучшена документация по
asyncio.open_connection(),asyncio.start_server()и их аналогам для UNIX-сокетов.bpo-23859: Документировать, что
asyncio.wait()не отменяет свои futures при тайм-ауте.bpo-32436: Документировать изменения PEP 567 в asyncio.
bpo-33604: Обновлено поведение HMAC md5 по умолчанию: теперь вызывает DeprecationWarning, удаление отложено до версии 3.8.
bpo-33594:
getargspec,from_functionиfrom_builtinобъявлены устаревшими в их соответствующих строковых документах и указана версия, с которой они считаются устаревшими, в сообщении DeprecationWarning.bpo-33503: Исправлена битая ссылка на PyPI
bpo-33421: Добавлена недостающая документация для
typing.AsyncContextManager.bpo-33487: BZ2file теперь выводит DeprecationWarning при передаче buffering=None; сообщение об устаревании и документация теперь также явно указывают, что параметр считается устаревшим начиная с версии 3.0.
bpo-33378: Добавлен переключатель на корейский язык для https://docs.python.org/3/
bpo-33276: Уточнено, что атрибут
__path__у модулей не может быть произвольным значением.bpo-33201: Модернизация документации по написанию C-расширений типов.
bpo-33195: Помечено как устаревшее использование
Py_UNICODEв документеc-api/arg. Связанные сPy_UNICODEAPI устарели начиная с Python 3.3, но это было пропущено в документе.bpo-33126: Документирована функция PyBuffer_ToContiguous().
bpo-27212: Изменена документация рецепта
islice(), чтобы он потреблял начальные значения до начального индекса.bpo-28247: Обновлена документация
zipappс описанием создания автономных приложений.bpo-18802: Изменения в документации для ipaddress. Патч от Jon Foster и Berker Peksag.
bpo-27428: Обновлена документация, чтобы уточнить, что
WindowsRegistryFinderреализуетMetaPathFinder. (Патч от Himanshu Lakhara)bpo-28124: Функция ssl.wrap_socket() модуля ssl устарела и больше не рекомендуется к использованию; вместо неё следует применять более безопасный и эффективный метод SSLContext.wrap_socket().
bpo-17232: Уточнена документация для -O и -OO. Патч от Terry Reedy.
bpo-32436: Добавлена документация для модуля contextvars (PEP 567).
bpo-32800: Обновлена ссылка на документ w3c для пространств имён XML по умолчанию.
bpo-11015: Обновлена документация
test.support.bpo-32613: файл faq/windows.html обновлён: вместо python теперь используется команда py (PEP 397).
bpo-8722: Документировать поведение
__getattr__(), когда метод свойстваget()возбуждаетAttributeError.bpo-32614: Изменены примеры регулярных выражений в документации для использования сырых строк во избежание
DeprecationWarning, и добавлен текст в REGEX 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: Уточнено значение флагов CERT_NONE, CERT_OPTIONAL и CERT_REQUIRED для ssl.SSLContext.verify_mode.
Тесты¶Tests
bpo-35772: исправлены тесты разрежённых файлов в test_tarfile на ppc64 с файловой системой tmpfs. Исправлена функция, проверяющая, поддерживает ли файловая система разрежённые файлы: создаётся файл, содержащий данные и «дыры», вместо файла, не содержащего данных. Эффективный размер блока tmpfs равен размеру страницы (tmpfs живёт в кеше страниц). RHEL использует 64-килобайтные страницы на aarch64, ppc64, ppc64le, только s390x и x86_64 используют 4-килобайтные страницы, тогда как тест пробивает дыры по 4 КБ.
bpo-35045: Ослабить проверки ssl-тестов и также принимать TLSv1 в качестве системного значения по умолчанию. Изменения устраняют сбой test_min_max_version на Fedora 29.
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: Исправлено состояние гонки в
check_interrupted_write()из test_io: поток создаётся с уже заблокированным сигналом SIGALRM, а не блокирует сигнал уже из самого потока. Ранее было возможно, что поток получит сигнал до его блокировки.bpo-35424: Исправлен test_multiprocessing_main_handling: использовать
multiprocessing.Poolс контекстным менеджером, а затем явно дождаться завершения пула.bpo-35519: Переименовать модуль
test.bisectвtest.bisect_cmd, чтобы избежать конфликта с модулемbisectпри прямом запуске теста, например./python Lib/test/test_xmlrpc.py.bpo-35513: Заменить
time.time()наtime.monotonic()в тестах для измерения разницы во времени.bpo-34279:
test.support.run_unittest()больше не вызываетTestDidNotRun, если результат теста содержит пропущенные тесты. Исключение теперь возникает только в том случае, если не было выполнено ни одного теста и не было пропущено ни одного теста.bpo-35412: Добавить тестовый пример в
test_future4: проверка Unicode-литерала.bpo-26704: Добавлен тест, демонстрирующий двойное патчирование метода экземпляра. Патч от Anthony Sottile.
bpo-33725: test_multiprocessing_fork может аварийно завершаться на новых версиях macOS. Пока проблема не решена, тест на macOS пропускается.
bpo-35352: Изменить test_asyncio, чтобы он использовал набор сертификатов из тестового каталога.
bpo-35317: Исправить ошибку переполнения
mktime()вtest_email: запускатьtest_localtime_daylight_true_dst_true()иtest_localtime_daylight_false_dst_true()с определённым часовым поясом.bpo-21263: После нескольких сообщений о том, что test_gdb работает некорректно на macOS, и поскольку gdb больше не поставляется по умолчанию, test_gdb теперь пропускается на macOS, если для компиляции Python использовался LLVM Clang. Патч от Lysandros Nikolaou.
bpo-34279: regrtest выдаёт предупреждение, если в конкретном тестовом файле не было выполнено ни одного теста. Также выводится новое итоговое состояние результата, если ни один тест не был выполнен во всех тестовых файлах. Патч от Pablo Galindo.
bpo-34962: make docstest в Doc теперь проходит успешно и проверяется в CI.
bpo-23596: Использовать argparse для командной строки модуля gzip. Патч от Antony Lee.
bpo-34537: Исправить
test_gdb.test_strings(), когдаLC_ALL=Cи GDB был скомпилирован с Python 3.6 или более ранней версией.bpo-34587: test_socket: удалён RDSTest.testCongestion(). Тест пытался заполнить буфер сокета получателя и ожидал ошибки. Но протокол RDS этого не требует. Более того, реализация RDS в Linux ожидает, что производитель сообщений снижает свою скорость, и не входит в обязанности получателя вызывать ошибку. Тест заведомо падает на Fedora 28, поэтому он просто удалён.
bpo-34661: Исправить test_shutil, если unzip не поддерживает -t.
bpo-34200: Устранена недетерминированная нестабильность test_pkg за счёт отказа от использования опасной логики test.support.module_cleanup() для сохранения и восстановления содержимого sys.modules между тестовыми случаями.
bpo-34569: Экспериментальные каналы данных PEP 554 теперь корректно передают отрицательные объекты PyLong между подынтерпретаторами на 32-битных системах. Патч от Michael Felt.
bpo-34594: Исправить использование жёстко заданных значений
errnoв тестах.bpo-34579: Исправить test_embed для AIX. Патч от Michael Felt.
bpo-34542: Использовать RSA-ключи 3072 бит и подпись SHA-256 для тестовых сертификатов и ключей.
bpo-11193: Убрать специальное условие для AIX в
test_subprocess.test_undecodable_env.bpo-34347: Исправить
test_utf8_mode.test_cmd_lineдля AIX.bpo-34490: На AIX с сокетами семейства AF_UNIX функция getsockname() не предоставляет 'sockname', поэтому пропускаются вызовы transport.get_extra_info('sockname').
bpo-34391: Исправить тест ftplib для TLS 1.3 с помощью чтения из сокета данных.
bpo-11192: Исправлен
test_socketна AIX 6.1 и более новых: поддержка идентификаторов зон IPv6 поддерживается только функцией inet_pton6_zone(). Переход на определение платформы во время выполнения через platform.system() вместо определения во время сборки через sys.platform().bpo-34399: Обновить все RSA-ключи и параметры DH до использования не менее 2048 бит.
bpo-34373: Исправлены тесты
test_mktimeиtest_pthread_getcpuclickidдля AIX. Добавлена проверка диапазона для_PyTime_localtime. Патч от Michael Feltbpo-11191: Пропуск теста distutils ‘test_search_cpp’ при использовании XLC в качестве компилятора. Патч от aixtools (Michael Felt)
Улучшено сообщение об ошибке при сбое mock.assert_has_calls.
bpo-33746: Исправлен test_unittest при запуске в подробном режиме.
bpo-33901: Исправлен test_dbm_gnu на macOS с gdbm 1.15: добавлено большее значение, чтобы гарантировать изменение размера файла.
bpo-33873: Исправлена ошибка в
regrtest, из-за которой запускался лишний тест при использовании –huntrleaks/-R. Завершение с ошибкой в случае указания недопустимых параметров для –huntrleaks/-R (необходимо указать хотя бы один прогревочный прогон и одно повторение).bpo-33562: Проверка, что глобальная политика цикла событий asyncio не остаётся после тестов.
bpo-33655: Игнорировать сбои test_posix_fallocate на платформах BSD, которые могут быть связаны с работой на ZFS.
bpo-32962: Исправлен test_gdb при компиляции Python с флагами -mcet -fcf-protection -O0.
bpo-33358: Исправлено
test_embed.test_pre_initialization_sys_options(), когда интерпретатор собран с--enable-shared.bpo-32872: Устранена проблема совместимости regrtest с пакетами пространств имен.
bpo-32517: Исправлен сбой
test_asyncioна macOS 10.12.2+, возникший из-за того, что транспорт циклаKqueueSelectorне закрывался.bpo-32663: Обеспечено выполнение класса тестов
SMTPUTF8SimTestsв test_smtplib.py.bpo-27643: Тестовый случай Test_C требует битовых полей «signed short», но компилятор IBM XLC (на AIX) этого не поддерживает. Пропустить код и тест при использовании AIX и XLC.
Применимо к Python 2.7 и новее.
bpo-19417: Добавлен test_bdb.py.
bpo-31809: Добавлены тесты для проверки соединения с кривыми secp ECDH.
Сборка¶Build
bpo-34691: Модуль _contextvars теперь встроен в основную библиотеку Python на Windows.
bpo-35683: Улучшены шаги сборки Azure Pipelines, теперь корректно проверяются макеты (layouts).
bpo-35642: Удалён asynciomodule.c из pythoncore.vcxproj.
bpo-35550: Исправлены неверные проверки #ifdef для Solaris: теперь ищется __sun && __SVR4 вместо sun при компиляции.
bpo-35499:
make profile-optбольше не заменяетCFLAGS_NODISTнаCFLAGS. Теперь он добавляет флаги профильной оптимизации (PGO) вCFLAGS_NODIST: существующие флагиCFLAGS_NODISTсохраняются.bpo-35257: Предотвращение утечки флагов компоновщика из LTO в distutils при компиляции расширений C.
bpo-35351: При сборке Python с clang и LTO флаги LTO больше не передаются в CFLAGS для сборки сторонних расширений C через distutils.
bpo-35139: Исправлена ошибка компиляции при статической линковке
pyexpatвModules/Setup.bpo-35059: PCbuild: В pyproject.props в режиме Debug установлено InlineFunctionExpansion в OnlyExplicitInline (опция «/Ob1») для развёртывания функций, помеченных как inline. Это изменение должно сделать Python, скомпилированный в режиме Debug, немного быстрее на Windows.
bpo-35011: Восстановлено использование pyexpatns.h для изоляции встроенной копии библиотеки expat, чтобы её символы не конфликтовали при линковке или динамической загрузке с внедряющим приложением или другими модулями расширения, имеющими собственную версию libexpat.
bpo-28015: Обеспечение корректной работы –with-lto с clang.
bpo-34765: Обновлён устаревший файл install-sh до последней ревизии из automake v1.16.1.
bpo-34585: Проверка порядка байтов чисел с плавающей запятой в configure.ac с использованием тестов компиляции вместо выполнения кода, чтобы эти проверки работали в кросс-компилируемых сборках.
bpo-34710: Исправлена сборка модуля SSL с OpenSSL и педантичными CFLAGS.
bpo-34582: Добавлен вывод в формате JUnit XML для регрессионных тестов и обновлены сборки Azure DevOps.
bpo-34081: Предупреждения Sphinx теперь обрабатываются как ошибки в Makefile документации.
bpo-34555: Исправление случая, когда невозможно было оставить неопределёнными как
HAVE_LINUX_VM_SOCKETS_H, так иHAVE_SOCKADDR_ALG.bpo-33015: Исправлено неопределённое поведение в реализации pthread для
PyThread_start_new_thread(): добавлена функция-обёртка, которая всегда возвращаетNULL.bpo-34245: Разделяемая библиотека Python теперь устанавливается с правом на запись (режим 0755), что является стандартным способом установки таких библиотек.
bpo-34121: Исправлено определение поддержки атомарных операций C11 в clang.
bpo-32430: Файл Modules/Setup.dist переименован в Modules/Setup; при обновлении локального дерева исходников больше не требуется вручную копировать первый во второй.
bpo-30345: Добавлен флаг -g в LDFLAGS при компиляции с LTO для получения отладочных символов.
bpo-5755: Переместить параметр
-Wstrict-prototypesвCFLAGS_NODISTизOPT. Этот параметр выдавал раздражающие предупреждения при сборке расширений, написанных на C++.bpo-33614: Обеспечивает корректное пересоздание файлов определений модулей для стабильного ABI на Windows.
bpo-33648: Флаг конфигурации –with-c-locale-warning удалён. Он уже около года не оказывал никакого эффекта.
bpo-33522: Включены сборки CI на Visual Studio Team Services на https://python.visualstudio.com/cpython
bpo-33512: Проверка configure для «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: Исправлена отладочная сборка Python при использовании COUNT_ALLOCS.
bpo-29442: Замена optparse на argparse в setup.py
Windows¶
bpo-35890: Исправлена согласованность вызовов API GetVersionEx и wcstok.
bpo-32560: Загрузчик
pyтеперь передаёт свою структуруSTARTUPINFOдочерним процессам.bpo-35854: Исправлены EnvBuilder и --symlinks в venv на Windows
bpo-35811: Избежание распространения настроек venv при запуске через py.exe
bpo-35797: Исправлен исполняемый файл по умолчанию, используемый модулем multiprocessing
bpo-35758: Разрешена сборка на ARM с помощью MSVC.
bpo-29734: Исправлена утечка дескрипторов в os.stat на Windows.
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 App Store
bpo-35067: Удалён модуль _distutils_findvs; вместо него используется vswhere.exe.
bpo-32557: Разрешено передавать путь к файлу в shutil.disk_usage в Windows
bpo-34770: Исправлено возможное разыменование нулевого указателя в pyshellext.cpp.
bpo-34603: Исправлено возвращение структур из функций, созданных MSVC
bpo-34581: Код, специфичный для MSVC, в socketmodule.c защищён директивой
#ifdef _MSC_VER.bpo-34532: Исправлен код выхода для аргументов списка версий в py.exe.
bpo-34062: Исправлены аргументы ‘–list’ и ‘–list-paths’ в запускателе py.exe
bpo-34225: Обеспечено, что каталоги INCLUDE и LIB не заканчиваются обратной косой чертой.
bpo-34011: Изменён набор кода, который копировал DLL и init.tcl из запущенного Python в создаваемое виртуальное окружение. Такие копии нужны только при запуске из сборки из исходного кода Python, и теперь копирование выполняется только в этом случае, а не при каждом создании виртуального окружения.
bpo-34006: Отменено ограничение длины строк для справочных документов Windows. Ограничение длины строк не требуется, так как страницы отображаются в отдельном приложении, а не на вкладке браузера. Кроме того, оно может плохо взаимодействовать с настройками DPI.
bpo-31546: Восстановлен вызов PyOS_InputHook во время ожидания ввода пользователя в приглашении. Это восстанавливает интеграцию интерактивных окон GUI (например, графиков Matplotlib) с приглашением в Windows.
bpo-30237: Вывод ошибки при отмене ReadConsole с помощью CancelSynchronousIo вместо аварийного завершения.
bpo-33895: GIL освобождается при вызове функций, которые захватывают блокировку загрузчика Windows.
bpo-33720: Уменьшена максимальная глубина рекурсии маршала в сборках release.
bpo-29097: Исправлена ошибка, при которой
datetime.fromtimestamp()ошибочно выбрасываетOSErrorв Windows для значений от 0 до 86400. Патч от Ammar Askar.bpo-33316: PyThread_release_lock всегда завершается неудачей
bpo-33184: Обновлён установщик Windows для использования OpenSSL 1.1.0h.
bpo-32890: Исправлено использование GetLastError() вместо errno в os.execve() и os.truncate().
bpo-33016: Исправлено потенциальное использование неинициализированной памяти в nt._getfinalpathname.
bpo-32903: Исправлена утечка памяти в os.chdir() на Windows, если текущий каталог задан через UNC-путь.
bpo-32901: Обновлены версии Tcl и Tk до 8.6.8.
bpo-31966: Исправлен WindowsConsoleIO.write() для записи пустых данных.
bpo-32409: Обеспечена возможность activate.bat обрабатывать содержимое в Юникоде.
bpo-32457: Улучшена обработка денормализованного пути к исполняемому файлу при запуске Python.
bpo-32370: Использовать правильную кодировку для вывода ipconfig в модуле uuid. Патч от Segev Finer.
bpo-29248: Исправлена
os.readlink()в Windows, которая ошибочно tрактовала полеPrintNameOffsetбуфера данных reparse как количество символов вместо количества байтов. Патч от Craig Holmquist и SSE4.bpo-1104: Корректная обработка длины строки в
msilib.SummaryInfo.GetProperty()для предотвращения усечения последнего символа.
macOS¶
bpo-35401: Обновлён установщик macOS для использования OpenSSL 1.1.0j.
bpo-35025: Корректно защищено использование макросов
CLOCK_GETTIMEи др. вtimemoduleна macOS.bpo-24658: На macOS исправлено чтение из файла и запись в файл размером более 2 GiB.
bpo-34405: Обновлён установщик macOS до OpenSSL 1.1.0i.
bpo-33635: На macOS stat для некоторых файловых дескрипторов (например, /dev/fd/3) приводит к OSError с сообщением о плохом файловом дескрипторе. Добавлена защита от этого исключения в методах is_dir, is_file и подобных. DirEntry.is_dir также может вызывать это исключение, поэтому _RecursiveWildcardSelector._iterate_directories расширен тем же шаблоном игнорирования ошибок.
bpo-13631: Файл .editrc в домашнем каталоге пользователя теперь правильно обрабатывается во время инициализации readline через эмуляцию editline на macOS.
bpo-33184: Обновлена сборка установщика macOS для использования OpenSSL 1.1.0h.
bpo-32726: Сборка и компоновка с собственной копией Tcl/Tk 8.6 для установщика macOS 10.6+. Вариант установщика для 10.9+ уже делает это. Это означает, что Python 3.7, предоставляемый установщиками macOS с python.org, больше не требует и не использует внешние версии Tcl/Tk, будь то системные или установленные пользователем, например ActiveTcl.
bpo-32901: Установщик для macOS 10.9+ обновлён до Tcl/Tk 8.6.8.
bpo-31903: В
_scproxyосвобождён GIL при вызовеSystemConfiguration, чтобы избежать взаимоблокировок.
IDLE¶
bpo-35770: IDLE macosx удалил Options ⇒ Configure IDLE. Ранее он ошибочно удалял Window ⇒ Zoom Height. (Zoom Height теперь находится в меню Options). На Mac диалог настроек открывается через Preferences в меню IDLE.
bpo-35769: Имя нового файла IDLE изменено с «Untitled» на «untitled».
bpo-35660: Исправлены импорты в idlelib.window.
bpo-35641: Корректно отформатирован
calltip, когда функция не имеет docstring.bpo-33987: Для виджетов ttk теперь используется ttk Frame.
bpo-34055: Исправлены ошибочные «умные» отступы и переносы строк в IDLE Shell.
bpo-35591: Find Selection теперь работает, когда выделение не найдено.
bpo-35196: Ускорен подсчёт строк в squeezer.
bpo-35598: Обновлён config_key: используются имена по PEP 8 и виджеты ttk, некоторые объекты сделаны глобальными, добавлены тесты.
bpo-28097: Добавлены пункты Previous/Next History в меню Shell.
bpo-35208: Squeezer теперь корректно подсчитывает перенесённые строки перед символами новой строки.
bpo-35555: Пункт меню Code Context теперь отображается серым, когда он неприменим.
bpo-35521: Документирована функция Code Context редактора IDLE. Добавлены некоторые внутренние ссылки в документации IDLE.
bpo-22703: Метка меню Code Context теперь переключается между Show/Hide Code Context. Меню Zoom Height переключается между Zoom/Restore Height. Zoom Height перемещён из меню Window в меню Options.
bpo-35213: Где уместно, используется «macOS» в idlelib.
bpo-34864: На macOS выводится предупреждение, если системная настройка «Prefer tabs when opening documents» установлена в «Always».
bpo-34864: Документированы две проблемы IDLE на macOS. Настройка System Preferences Dock «prefer tabs always» отключает некоторые функции IDLE. Меню немного отличаются от описанных для Windows и Linux.
bpo-35202: Удалены неиспользуемые импорты из lib/idlelib.
bpo-33000: Документировано, что оболочка IDLE не имеет ограничения на количество строк. Бесконечно выполняющаяся программа может переполнить память.
bpo-23220: Объяснено, как оболочка IDLE отображает вывод.
bpo-35099: Улучшена документация о выполнении пользовательского кода в IDLE. Раздел переименован с «IDLE – console differences» на «Running user code». В основном он охватывает последствия использования пользовательских объектов sys.stdxxx.
bpo-35097: Добавлен подраздел документации IDLE, описывающий окна редактора. Темы включают открытие, строку заголовка и состояния, расширение .py* и запуск.
bpo-35093: Документирован просмотрщик документов IDLE. Добавлен абзац в подразделе «Справка и настройки», «Источники справки».
bpo-35088: Обновлена строка документации idlelib.help.copy_string. Теперь используется git и бэкпортирование вместо hg и слияния вперёд.
bpo-35087: Обновлены файлы справки idlelib для текущей сборки документации. Основное изменение – удаление номеров глав и разделов.
bpo-34548: Использовать настроенную цветовую тему для текстовых представлений только для чтения.
bpo-1529353: Включено «сжатие» длинных выводов в оболочке, чтобы избежать снижения производительности и очистить историю без её потери. Сжатые выводы можно копировать, просматривать в отдельном окне и «разжимать».
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: Добавлено «help» в приветственное сообщение IDLE
bpo-33839: IDLE: рефакторинг ToolTip и CallTip, добавление документации и тестов
bpo-33855: Минимальное тестирование всех модулей IDLE. Добавлены недостающие файлы, импорт модуля, создание экземпляров классов и проверка покрытия. Проверены существующие файлы.
bpo-33656: В Windows добавлен вызов API, указывающий, что tk масштабирует под DPI. На Windows 8.1+ или 10, если свойства совместимости DPI двоичного файла Python не изменены, а разрешение монитора больше 96 DPI, это должно сделать текст и линии более чёткими. В остальных случаях эффекта не будет.
bpo-33768: Щелчок по строке контекста перемещает эту строку в начало окна редактора.
bpo-33763: IDLE: используется виджет только для чтения для контекста кода вместо виджета метки.
bpo-33664: Прокрутка текста редактора IDLE по строкам. Раньше колесо мыши и ползунок полосы прокрутки перемещали текст на фиксированное количество пикселей, в результате чего в верхней части окна редактора отображались неполные строки. Это изменение также применяется к окнам оболочки и вывода grep, но не к текстовым представлениям только для чтения.
bpo-33679: Включена конфигурация цветов для контекста кода, зависящая от темы. Используйте вкладку Highlights, чтобы увидеть настройки для встроенных тем или добавить настройки в пользовательские темы.
bpo-33642: Отображать до maxlines непустых строк для контекста кода. Если текущий контекст отсутствует, показывать одну пустую строку.
bpo-33628: IDLE: очистка codecontext.py и его теста.
bpo-33564: Контекст кода IDLE теперь распознаёт async как открывающий блок.
bpo-21474: Обновлено определение слова/идентификатора с ascii до unicode. В текстовых полях и полях ввода это влияет на выделение двойным щелчком, перемещение влево/вправо с помощью Control+влево/вправо и удаление влево/вправо с помощью Control+BACKSPACE/DEL.
bpo-33204: IDLE: последовательно подсвечивать недопустимые префиксы строк. Префикс строки ‘u’ не может сочетаться с ‘r’ или ‘f’. Последовательно подсвечивать столько символов префикса, начиная справа, сколько является допустимым. Исправлен и расширен тест раскраски.
bpo-32984: Установка
__file__во время выполнения файла запуска. Как и Python, IDLE опционально выполняет один файл запуска в окне Shell перед выводом первого интерактивного приглашения. Для IDLE-sзапускает файл, указанный в переменной окруженияIDLESTARTUPилиPYTHONSTARTUP;-r fileзапускаетfile. Python устанавливает__file__в имя файла запуска перед его выполнением и сбрасывает его перед первым приглашением. Теперь IDLE делает то же самое при нормальном запуске, без опции-n.bpo-32940: Упрощение и переименование StringTranslatePseudoMapping в pyparse.
bpo-32916: Изменение
strнаcodeв pyparse.bpo-32905: Удаление неиспользуемого кода в модуле pyparse.
bpo-32874: Добавлены тесты для pyparse.
bpo-32837: Использование системной и зависимой от локали кодировки по умолчанию для open() – плохая идея для системно-независимых файлов IDLE.
bpo-32826: Добавлено “encoding=utf-8” для open() в тесте test_help_about IDLE. GUI-тест test_file_buttons() проверяет только начальные строки, содержащие исключительно ascii, но завершался ошибкой в системах, где open() по умолчанию использует ‘ascii’, поскольку readline() внутренне читает и декодирует достаточно далеко, чтобы встретить не-ascii символ в CREDITS.txt.
bpo-32831: Добавлены докстринги и тесты для codecontext.
bpo-32765: Обновлена docstring вкладки General в configdialog для добавления новых виджетов в список виджетов.
Инструменты/Демонстрации¶Tools/Demos
bpo-35884: Добавить скрипт для бенчмаркинга, измеряющего различные способы доступа к переменным:
Tools/scripts/var_access_benchmark.py.bpo-34989: python-gdb.py теперь обрабатывает ошибки при вычислении номера строки фрейма Python.
bpo-20260: Argument Clinic теперь имеет конвертеры беззнаковых целых без поразрядных операций.
bpo-32962: python-gdb теперь перехватывает исключения
UnicodeDecodeErrorпри вызовеstring().bpo-32962: python-gdb теперь перехватывает ValueError в read_var(): например, когда у Python нет отладочных символов.
bpo-33189: pygettext.py теперь распознает только строковые литералы как докстринги и переводимые строки, и отвергает байтовые литералы и f-строковые выражения.
bpo-31920: Исправлена обработка каталогов как аргументов в скрипте
pygettext. Основано на патче Олега Красникова.bpo-29673: Исправлены макросы pystackv и pystack gdbinit.
bpo-25427: Удалить скрипт pyvenv в пользу
python3 -m venv, чтобы уменьшить путаницу относительно того, для какого интерпретатора Python будет создано виртуальное окружение.bpo-32885: Добавлен флаг
-nдляTools/scripts/pathfix.py, чтобы отключить автоматическое создание резервных копий (файлы с суффиксом~).bpo-32222: Исправлена ошибка pygettext, не извлекавшей docstrings для функций с аннотированными типами аргументов. Патч от 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()для пустых объектов bytes.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: Внутренние API, окруженные
#ifdef Py_BUILD_CORE, были перемещены из заголовковInclude/*.hв новые заголовочные файлыInclude/internal/pycore_*.h.bpo-35259: Условно объявлять
Py_FinalizeEx()(новое в 3.6) на основе Py_LIMITED_API. Патч от Артура Нойфельда.bpo-35081: Макросы
_PyObject_GC_TRACK()и_PyObject_GC_UNTRACK()были удалены из публичного C API.bpo-35134: Создание нового подкаталога
Include/cpython/.bpo-34725: Добавлен _Py_SetProgramFullPath, чтобы разработчики, встраивающие Python, могли переопределять sys.executable
bpo-34910: Обеспечить, чтобы
PyObject_Print()всегда возвращал-1при ошибке. Патч от Закери Спайтца.bpo-34523: Py_DecodeLocale() и Py_EncodeLocale() теперь используют кодировку UTF-8 в Windows, если Py_LegacyWindowsFSEncodingFlag равен нулю.
bpo-34193: Исправлена форма множественного числа в сообщениях TypeError в getargs.c и typeobject.c: ‘1 argument’ вместо ‘1 arguments’ и ‘1 element’ вместо ‘1 elements’.
bpo-34127: Возвращает грамматически корректное сообщение об ошибке в зависимости от количества аргументов. Патч от Karthikeyan Singaravelan.
bpo-23927: Исправлен
SystemErrorвPyArg_ParseTupleAndKeywords(), когда единица форматаw*используется для необязательного параметра.bpo-32455: Добавлен
PyCompile_OpcodeStackEffectWithJump().bpo-34008: Py_Main() снова можно вызывать после Py_Initialize(), как в Python 3.6.
bpo-32500: Исправлены сообщения об ошибках для
PySequence_Size(),PySequence_GetItem(),PySequence_SetItem()иPySequence_DelItem(), вызванных с отображением, иPyMapping_Size(), вызванного с последовательностью.bpo-33818:
PyExceptionClass_Name()теперь будет возвращатьconst char *вместоchar *.bpo-33042: Встраиваемые приложения снова могут вызывать PySys_ResetWarnOptions, PySys_AddWarnOption и PySys_AddXOption до вызова Py_Initialize.
bpo-32374: Документировано, что m_traverse для модулей, инициализируемых в несколько этапов, может вызываться с m_state=NULL, и добавлена проверка корректности.
bpo-30863:
PyUnicode_AsWideChar()иPyUnicode_AsWideCharString()больше не кэшируютwchar_t*-представление строковых объектов.
Python 3.7.0 финальная¶Python 3.7.0 final
Дата выпуска: 2018-06-27
Библиотека¶Library
bpo-33851: Исправлен
ast.get_docstring()для узла, у которого отсутствует docstring.
C API¶
bpo-33932: Двойной вызов Py_Initialize() не делает ничего, вместо того чтобы завершаться с фатальной ошибкой: восстановлено поведение Python 3.6.
Python 3.7.0 кандидат в релизы 1¶Python 3.7.0 release candidate 1
Дата релиза: 2018-06-12
Ядро и встроенные модули¶Core and Builtins
bpo-33803: Исправлен сбой в hamt.c, вызванный включением отслеживания GC для объекта, у которого не все поля были установлены в NULL.
bpo-33706: Исправлен сбой при инициализации Python во время разбора параметров командной строки. Спасибо Christoph Gohlke за сообщение об ошибке и исправление!
bpo-30654: Исправлен сброс обработчика SIGINT на SIG_DFL при завершении интерпретатора, даже если ранее был установлен пользовательский обработчик. Исправление от Philipp Kerling.
bpo-31849: Исправлено предупреждение о сравнении знаковых/беззнаковых типов в pyhash.c.
Библиотека¶Library
bpo-30167: Предотвращено исключение в site.main(), если установлен PYTHONSTARTUP. Исправление от Steve Weber.
bpo-33812: Экземпляр datetime d с не-None tzinfo, но с d.tzinfo.utcoffset(d), возвращающим None, теперь считается наивным методом astimezone().
bpo-30805: Устранено состояние гонки при ведении отладочного журнала.
bpo-33694: asyncio: Исправлено состояние гонки, приводящее к потере данных при pause_reading()/resume_reading() при использовании ProactorEventLoop.
bpo-32493: Исправлена проверка доступности
uuid_enc_beвconfigure.ac. Патч от 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: Операции конкатенации (
+) и повторения (*) последовательностей теперь вызываютTypeErrorвместоSystemErrorпри выполнении над объектамиmmap.mmap. Исправление от Zackery Spytz.bpo-33734: asyncio/ssl: исправлен AttributeError, увеличено время ожидания рукопожатия по умолчанию
bpo-11874: Использовать улучшенное регулярное выражение при разбиении usage на части для переноса. Избегает ложных ошибок утверждения из пользовательских строк metavar.
bpo-33582: Выдача предупреждения об устаревании для inspect.formatargspec
Документация¶Documentation
bpo-33409: Уточнена взаимосвязь между PEP 538's PYTHONCOERCECLOCALE и режимом PYTHONUTF8 из PEP 540.
bpo-33736: Улучшена документация по
asyncio.open_connection(),asyncio.start_server()и их аналогам для UNIX-сокетов.bpo-31432: Уточнено значение флагов CERT_NONE, CERT_OPTIONAL и CERT_REQUIRED для ssl.SSLContext.verify_mode.
Сборка¶Build
bpo-5755: Переместить параметр
-Wstrict-prototypesвCFLAGS_NODISTизOPT. Этот параметр выдавал раздражающие предупреждения при сборке расширений, написанных на C++.
Windows¶
bpo-33720: Уменьшена максимальная глубина рекурсии маршала в сборках release.
IDLE¶
bpo-33656: В Windows добавлен вызов API, указывающий, что tk масштабирует под DPI. На Windows 8.1+ или 10, если свойства совместимости DPI двоичного файла Python не изменены, а разрешение монитора больше 96 DPI, это должно сделать текст и линии более чёткими. В остальных случаях эффекта не будет.
bpo-33768: Щелчок по строке контекста перемещает эту строку в начало окна редактора.
bpo-33763: IDLE: используется виджет только для чтения для контекста кода вместо виджета метки.
bpo-33664: Прокрутка текста редактора IDLE по строкам. Раньше колесо мыши и ползунок полосы прокрутки перемещали текст на фиксированное количество пикселей, в результате чего в верхней части окна редактора отображались неполные строки. Это изменение также применяется к окнам оболочки и вывода grep, но не к текстовым представлениям только для чтения.
bpo-33679: Включена конфигурация цветов для контекста кода, зависящая от темы. Используйте вкладку Highlights, чтобы увидеть настройки для встроенных тем или добавить настройки в пользовательские темы.
bpo-33642: Отображать до maxlines непустых строк для контекста кода. Если текущий контекст отсутствует, показывать одну пустую строку.
Python 3.7.0 бета 5¶Python 3.7.0 beta 5
Дата выпуска: 2018-05-30
Ядро и встроенные модули¶Core and Builtins
bpo-33622: Исправлена утечка, когда сборщик мусора не может добавить объект с методом
__del__или объект, на который он ссылается, в списокgc.garbage. ТеперьPyGC_Collect()можно вызывать, когда установлено исключение, и он его сохраняет.bpo-33509: Исправлен параметр module_globals функции warnings.warn_explicit(): не падать, если module_globals не является словарём.
bpo-20104: Новый
os.posix_spawn, добавленный в 3.7.0b1, был удалён, так как мы всё ещё работаем над тем, как должен выглядеть API. Ожидайте его в 3.8 вместо этого.bpo-33475: Исправлены различные ошибки при преобразовании аннотаций в строки и оптимизированы скобки в строковом представлении.
bpo-33391: Исправлена утечка в set_symmetric_difference().
bpo-28055: Исправлены невыровненные обращения в siphash24(). Исправление от Rolf Eike Beer.
bpo-32911: Из-за неожиданных проблем совместимости, обнаруженных во время бета-тестирования у потребителей, отменён bpo-29463. Поле
docstringудалено из узлов AST Module, ClassDef, FunctionDef и AsyncFunctionDef, которое было добавлено в 3.7a1. Выражение docstring восстановлено как первый оператор в их теле. На основе патча от Inada Naoki.bpo-21983: Исправлен сбой в
ctypes.cast(), если аргумент типа является структурированным типом данных ctypes. Исправление от Eryk Sun и Oren Milman.
Библиотека¶Library
bpo-32751: При отмене задачи из-за тайм-аута
asyncio.wait_for()теперь будет ждать завершения отмены.bpo-32684: Исправлено: gather теперь распространяет отмену самой себя даже с return_exceptions.
bpo-33654: Добавлена поддержка переключения типа протокола в SSLTransport.set_protocol().
bpo-33674: Транспорт приостанавливается как можно раньше, чтобы ещё больше снизить риск вызова data_received() до connection_made().
bpo-33674: Исправлено состояние гонки в SSLProtocol.connection_made() из asyncio.sslproto: запускать рукопожатие немедленно, а не через call_soon(). Ранее data_received() мог быть вызван до начала рукопожатия, что приводило к зависанию или сбою рукопожатия.
bpo-31647: Исправлена ошибка, при которой вызов write_eof() на _SelectorSocketTransport после его закрытия вызывал AttributeError.
bpo-32610: asyncio.all_tasks() теперь возвращает только ожидающие задачи.
bpo-32410: Устранена блокировка при файловом вводе-выводе в резервном коде sendfile.
bpo-33469: Исправлен RuntimeError после закрытия цикла, который использовал run_in_executor.
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: Исправлен
uuid.uuid1()на FreeBSD.bpo-33618: Завершена и задокументирована предварительная и экспериментальная поддержка TLS 1.3 с OpenSSL 1.1.1.
bpo-33623: Исправлена возможная ошибка SIGSGV при создании asyncio.Future в __del__.
bpo-30877: Исправлена ошибка в Python-реализации декодера JSON, которая препятствовала очистке кэша разобранных строк после завершения декодирования. Основано на исправлении от 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: Добавлен новый атрибут класса
block_on_closeв классыForkingMixInиThreadingMixInмодуляsocketserver.bpo-33548: tempfile._candidate_tempdir_list должен учитывать общие расположения TEMP
bpo-33109: Подпарсеры argparse снова не являются обязательными по умолчанию, отменяя изменение поведения, введённое bpo-26510 в 3.7.0a2.
bpo-33536: dataclasses.make_dataclass теперь проверяет некорректные имена полей и дублирующиеся поля. Также добавлена проверка некорректных спецификаций полей.
bpo-33542: Предотвратить использование
uuid.get_nodeDUID вместо MAC на Windows. Исправление от Zvi Effronbpo-26819: Исправлено состояние гонки с
ReadTransport.resume_readingв цикле событий Windows proactor.Исправлена ошибка в
typing.get_type_hints(), когда ClassVar был указан в виде строковой прямой ссылки.bpo-33505: Оптимизирован asyncio.ensure_future() за счёт перестановки проверок: в 1.17 раза быстрее.
bpo-33497: Добавлен параметр errors в cgi.parse_multipart, и кодировка в FieldStorage теперь использует переданное значение errors (необходимо для Twisted). Патч от Amber Brown.
bpo-33495: Изменено представление dataclasses.Fields: теперь используется repr каждого из его членов вместо str. Это позволяет лучше понять, что именно представляет каждое поле. Особенно это актуально для члена «type».
bpo-33453: Исправлена работа dataclasses при использовании строковых литералов в аннотациях типов или при использовании PEP 563 («Отложенное вычисление аннотаций»). Для ClassVar («ClassVar» и «typing.ClassVar») и InitVar («InitVar» и «dataclasses.InitVar») обнаруживаются только определённые строковые префиксы.
bpo-28556: Небольшие исправления в модуле typing: добавлены аннотации к
NamedTuple.__new__, передаются*argsи**kwdsвGeneric.__new__. Оригинальные 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. Патч от Dong-hee Na.
bpo-33263: Исправлена утечка файловых дескрипторов в
_SelectorSocketTransport. Патч от Vlad Starostin.bpo-32861: Представление
__str__в urllib.robotparser теперь включает записи с подстановочными символами и поля «Crawl-delay» и «Request-rate». Патч от Michael Lazar.bpo-32257: Модуль ssl теперь содержит константу OP_NO_RENEGOTIATION, доступную в OpenSSL 1.1.0h или 1.1.1.
bpo-16865: Поддержка массивов размером >=2 ГБ в
ctypes. Патч от Segev Finer.
Документация¶Documentation
bpo-23859: Документировать, что
asyncio.wait()не отменяет свои futures при тайм-ауте.bpo-32436: Документировать изменения PEP 567 в asyncio.
bpo-33604: Обновлено поведение HMAC md5 по умолчанию: теперь вызывает DeprecationWarning, удаление отложено до версии 3.8.
bpo-33503: Исправлена битая ссылка на PyPI
bpo-33421: Добавлена недостающая документация для
typing.AsyncContextManager.
Тесты¶Tests
Сборка¶Build
bpo-33614: Обеспечивает корректное пересоздание файлов определений модулей для стабильного ABI на Windows.
bpo-33522: Включены сборки CI на Visual Studio Team Services на https://python.visualstudio.com/cpython
bpo-33012: Добавлен
-Wno-cast-function-typeдля gcc 8 для подавления предупреждений о приведении типов функций, например, приведении к PyCFunction в списках определений методов.
macOS¶
bpo-13631: Файл .editrc в домашнем каталоге пользователя теперь правильно обрабатывается во время инициализации readline через эмуляцию editline на macOS.
IDLE¶
Python 3.7.0 бета 4¶Python 3.7.0 beta 4
Дата выпуска: 2018-05-02
Ядро и встроенные модули¶Core and Builtins
bpo-33363: Вызывать SyntaxError для операторов
async withиasync forвне асинхронных функций.bpo-33128: Исправлена ошибка, из-за которой PathFinder появлялся дважды в sys.meta_path. Исправление от Pablo Galindo Salgado.
bpo-33312: Исправлены предупреждения clang ubsan (санитайзер неопределённого поведения) в dictobject.c за счёт корректировки объявления внутренней структуры _dictkeysobject с разделяемыми ключами.
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в реализации dict не инициализируется при копировании из key-sharing dict.
Библиотека¶Library
bpo-33281: Исправлен регресс ctypes.util.find_library на macOS.
bpo-33383: Исправлен сбой в методе get() объекта базы данных
dbm.ndbmпри вызове с одним аргументом.bpo-33329: Исправлена регрессия модуля multiprocessing на новых версиях glibc
bpo-991266: Исправлено экранирование атрибута
Commenthttp.cookies.SimpleCookie.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(): теперь они возвращают итерируемый объект вместо итератора.bpo-33256: Исправлено отображение вызова
<module>в HTML, созданномcgitb.html(). Патч от Stéphane Blondon.bpo-33185: Исправлен регресс при запуске pydoc с ключом
-m. (Регресс был внесён в 3.7.0b3 при исправлении bpo-33053). Это исправление также изменило pydoc: теперь при необходимости добавляетсяos.getcwd()вsys.pathвместо".".bpo-33169: Удаление записей
Noneизsys.path_importer_cacheпри вызовеimportlib.machinery.invalidate_caches().bpo-33217: Устарело: поиск объектов, не являющихся перечислениями, в классах Enum и их элементах (начиная с версии 3.8 будет вызывать
TypeError).bpo-33203:
random.Random.choice()теперь последовательно вызываетIndexErrorдля пустых последовательностей, даже при вызове из подклассов без реализацииgetrandbits().bpo-33224: Обновлён difflib.mdiff() в соответствии с PEP 479. Непойманное StopIteration в генераторе преобразуется в return.
bpo-33209: Завершение фрейминга в конце C-реализации
pickle.Pickler.dump().bpo-20104: Улучшена обработка ошибок и исправлена утечка ссылок в
os.posix_spawn().bpo-33175: В dataclasses метод Field.__set_name__ теперь ищет специальный метод __set_name__ в классе, а не в экземпляре значения по умолчанию.
bpo-33097: Вызов RuntimeError при вызове
executor.submitво время завершения работы интерпретатора.bpo-31908: Исправлен вывод файлов покрытия для инструмента командной строки модуля
trace. Ранее файлы покрытия создавались только при использовании опции--missing. Патч от Michael Selik.
Документация¶Documentation
bpo-33378: Добавлен переключатель на корейский язык для https://docs.python.org/3/
bpo-33276: Уточнено, что атрибут
__path__у модулей не может быть произвольным значением.bpo-33201: Модернизация документации по написанию C-расширений типов.
bpo-33195: Помечено как устаревшее использование
Py_UNICODEв документеc-api/arg. Связанные сPy_UNICODEAPI устарели начиная с Python 3.3, но это было пропущено в документе.bpo-8243: Добавлено примечание об исключениях curses.addch и curses.addstr при записи за пределами окна или pad.
bpo-32337: Обновление документации, связанной с порядком
dict.
Тесты¶Tests
bpo-33358: Исправлено
test_embed.test_pre_initialization_sys_options(), когда интерпретатор собран с--enable-shared.
Сборка¶Build
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
Windows¶
bpo-33184: Обновлён установщик Windows для использования OpenSSL 1.1.0h.
macOS¶
bpo-33184: Обновлена сборка установщика macOS для использования OpenSSL 1.1.0h.
IDLE¶
bpo-21474: Обновлено определение слова/идентификатора с ascii до unicode. В текстовых полях и полях ввода это влияет на выделение двойным щелчком, перемещение влево/вправо с помощью Control+влево/вправо и удаление влево/вправо с помощью Control+BACKSPACE/DEL.
bpo-33204: IDLE: последовательно подсвечивать недопустимые префиксы строк. Префикс строки ‘u’ не может сочетаться с ‘r’ или ‘f’. Последовательно подсвечивать столько символов префикса, начиная справа, сколько является допустимым. Исправлен и расширен тест раскраски.
Инструменты/Демонстрации¶Tools/Demos
bpo-33189: pygettext.py теперь распознает только строковые литералы как докстринги и переводимые строки, и отвергает байтовые литералы и f-строковые выражения.
bpo-31920: Исправлена обработка каталогов как аргументов в скрипте
pygettext. Основано на патче Олега Красникова.bpo-29673: Исправлены макросы pystackv и pystack gdbinit.
bpo-31583: Исправлена работа 2to3 при использовании с опцией –add-suffix без опции –output-dir для относительного пути к файлам в текущем каталоге.
Python 3.7.0 бета 3¶Python 3.7.0 beta 3
Дата выпуска: 2018-03-29
Безопасность¶Security
bpo-33136: Усиление защиты модуля ssl от CVE-2018-8970 в LibreSSL. X509_VERIFY_PARAM_set1_host() вызывается с явным namelen. Новый тест гарантирует, что нулевые байты не допускаются.
bpo-33001: Минимальное исправление для предотвращения переполнения буфера в os.symlink в Windows.
bpo-32981: Регулярные выражения в difflib и poplib были уязвимы к катастрофическому обратному отслеживанию. Эти регулярные выражения представляли потенциальные векторы DOS (REDOS). Они были переработаны. Это устраняет CVE-2018-1060 и CVE-2018-1061. Патч от Jamie Davis.
Ядро и встроенные модули¶Core and Builtins
bpo-33053: При использовании переключателя -m sys.path[0] теперь явно раскрывается как начальный рабочий каталог, а не оставляется пустым путём (который разрешает импорт из текущего рабочего каталога на момент импорта)
bpo-33018: Улучшена согласованность ошибок, вызываемых
issubclass(), когда он вызывается с не-классом и абстрактным базовым классом в качестве первого и второго аргументов соответственно. Патч от Josh Bronson.bpo-33041: Исправлен переход, когда функция содержит цикл
async for.bpo-33026: Исправлен выход из блока “with” путем установки f_lineno.
bpo-33005: Исправлен сбой при fork при использовании пользовательского распределителя памяти (например, с использованием переменной окружения PYTHONMALLOC). _PyGILState_Reinit() и _PyInterpreterState_Enable() теперь используют стандартный распределитель RAW памяти для выделения нового мьютекса интерпретатора при fork.
bpo-17288: Предотвращены переходы из событий трассировки 'возврат' и 'исключение'.
bpo-32836: Не использовать временные переменные в list/dict/set comprehensions
Библиотека¶Library
bpo-33141: Объекты Field передают __set_name__ своим значениям по умолчанию, если у них есть свой __set_name__.
bpo-33096: Разрешена вставка iid с ложным булевым значением в ttk.Treeview.insert. Обратите внимание, что iid=0 и iid=False будут одинаковы. Патч от Garvit Khatri.
bpo-32873: Обрабатывать переменные типов и специальные формы typing как неизменяемые при копировании и pickle. Это исправляет несколько мелких проблем и несоответствий, а также улучшает обратную совместимость с Python 3.6.
bpo-33134: При вычислении __hash__ для dataclass используйте таблицу поиска для хранения функции, возвращающей значение __hash__. Это улучшение по сравнению с поиском строки, а затем проверкой этой строки, чтобы решить, что делать.
bpo-33127: Модуль ssl теперь компилируется с LibreSSL 2.7.1.
bpo-32505: Вызывать TypeError, если переменная-член dataclass имеет тип Field, но не имеет аннотации типа.
bpo-33078: Исправление сбоя на OSX, вызванного тестами, полагающимися на sem_getvalue
bpo-33116: Добавить 'Field' в dataclasses.__all__.
bpo-32896: Исправление ошибки, когда наследование от dataclass с полем, использующим default_factory, приводило к созданию некорректного класса.
bpo-33100: Dataclasses: Если у поля есть значение по умолчанию, являющееся MemberDescriptorType, то это от того, что поле находится в __slots__, а не фактическое значение по умолчанию.
bpo-32953: Если не-dataclass наследуется от замороженного dataclass, разрешить добавление атрибутов в производный класс. Назначать можно только атрибуты, не принадлежащие замороженному dataclass. Требовать, чтобы все dataclass в иерархии были либо все замороженными, либо все незамороженными.
bpo-33061: Добавить отсутствующий
NoReturnв__all__в typing.pybpo-33078: Исправить обработку размера в multiprocessing.Queue при возникновении ошибки пиклинга.
bpo-33064: lib2to3 теперь корректно поддерживает завершающие запятые после
*argsи**kwargsв сигнатурах функций.bpo-33056: FIX: корректно закрывать утекающие файловые дескрипторы в concurrent.futures.ProcessPoolExecutor.
bpo-33021: Освобождение GIL при вызовах fstat(), что предотвращает зависание всех потоков при вызове mmap.mmap(), os.urandom() и random.seed(). Патч от Nir Soffer.
bpo-31804: Исправлена ошибка в multiprocessing.Process, если стандартные потоки были закрыты или равны None при завершении.
bpo-33037: Пропуск отправки/получения данных после закрытия SSL-транспорта.
bpo-27683: Исправлена регрессия в
ipaddress, из-за которой результатhosts()оказывался пустым, когда сеть строится из кортежа, содержащего целочисленную маску и только 1 бит для адресов.bpo-32999: Исправить аварийное завершение C-реализации
ABC.__subclasscheck__(cls, subclass), когдаsubclassне является объектом типа.bpo-33009: Исправлена работа inspect.signature() для partialmethod с одним параметром.
bpo-32969: Открыт доступ к нескольким отсутствовавшим константам в zlib и исправлена соответствующая документация.
bpo-32056: Улучшены исключения, вызываемые при недопустимом количестве каналов и разрядности сэмпла при чтении аудиофайла в модулях
aifc,waveиsunau.bpo-32844: Исправлена некорректная перенаправление низкого дескриптора (0 или 1) в stderr в подпроцессе, если другой низкий дескриптор закрыт.
bpo-32857: В
tkinter,after_cancel(None)теперь вызываетValueErrorвместо отмены первой запланированной функции. Исправление от Cheryl Sabella.bpo-31639: http.server теперь предоставляет класс ThreadedHTTPServer и использует его при запуске модуля с
-mдля работы с предварительным открытием сокетов веб-браузерами.bpo-27645:
sqlite3.Connectionтеперь предоставляет методbackup, если используемая библиотека SQLite имеет версию 3.6.11 или выше. Патч от Lele Gaifax.
Документация¶Documentation
bpo-33126: Документирована функция PyBuffer_ToContiguous().
bpo-27212: Изменена документация рецепта
islice(), чтобы он потреблял начальные значения до начального индекса.bpo-28247: Обновлена документация
zipappс описанием создания автономных приложений.bpo-18802: Изменения в документации для ipaddress. Патч от Jon Foster и Berker Peksag.
bpo-27428: Обновлена документация, чтобы уточнить, что
WindowsRegistryFinderреализуетMetaPathFinder. (Патч от Himanshu Lakhara)
Тесты¶Tests
Сборка¶Build
bpo-33163: Обновлены pip до 9.0.3 и setuptools до v39.0.1.
Windows¶
macOS¶
bpo-32726: Сборка и компоновка с собственной копией Tcl/Tk 8.6 для установщика macOS 10.6+. Вариант установщика для 10.9+ уже делает это. Это означает, что Python 3.7, предоставляемый установщиками macOS с python.org, больше не требует и не использует внешние версии Tcl/Tk, будь то системные или установленные пользователем, например ActiveTcl.
IDLE¶
bpo-32984: Установка
__file__во время выполнения файла запуска. Как и Python, IDLE опционально выполняет один файл запуска в окне Shell перед выводом первого интерактивного приглашения. Для IDLE-sзапускает файл, указанный в переменной окруженияIDLESTARTUPилиPYTHONSTARTUP;-r fileзапускаетfile. Python устанавливает__file__в имя файла запуска перед его выполнением и сбрасывает его перед первым приглашением. Теперь IDLE делает то же самое при нормальном запуске, без опции-n.bpo-32940: Упрощение и переименование StringTranslatePseudoMapping в pyparse.
Инструменты/Демонстрации¶Tools/Demos
bpo-32885: Добавлен флаг
-nдляTools/scripts/pathfix.py, чтобы отключить автоматическое создание резервных копий (файлы с суффиксом~).
C API¶
bpo-33042: Встраиваемые приложения снова могут вызывать PySys_ResetWarnOptions, PySys_AddWarnOption и PySys_AddXOption до вызова Py_Initialize.
bpo-32374: Документировано, что m_traverse для модулей, инициализируемых в несколько этапов, может вызываться с m_state=NULL, и добавлена проверка корректности.
Python 3.7.0 бета 2¶Python 3.7.0 beta 2
Дата выпуска: 2018-02-27
Безопасность¶Security
bpo-28414: Модуль ssl теперь позволяет пользователям выполнять собственное кодирование/декодирование IDN при использовании SNI.
Ядро и встроенные модули¶Core and Builtins
bpo-32889: Обновлен список подавления Valgrind с учетом переименования
Py_ADDRESS_IN_RANGвaddress_in_range.bpo-31356: Удалён новый API, добавленный в bpo-31356 (менеджер контекста 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, вызванная ошибками записи за границы при использовании пользовательских обработчиков ошибок декодирования.
Библиотека¶Library
bpo-32960: Для dataclasses запрещено наследование frozen от non-frozen классов, а также наследование non-frozen от frozen классов. Это ограничение будет снято в будущем.
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, __hash__ добавляется на основе значений eq= и frozen=. Поведение unsafe_hash=False совпадает со старым поведением hash=None. unsafe_hash=False используется по умолчанию, как и раньше hash=None.
bpo-32947: Добавлены OP_ENABLE_MIDDLEBOX_COMPAT и тестовый обходной путь для TLSv1.3 для будущей совместимости с OpenSSL 1.1.1.
bpo-30622: Модуль ssl теперь обнаруживает отсутствие поддержки NPN в LibreSSL.
bpo-32922: dbm.open() теперь кодирует имя файла с использованием кодировки файловой системы вместо кодировки по умолчанию.
bpo-32859: В
os.dup2больше не проверяется каждый вызов на существование системного вызоваdup3.bpo-32556: nt._getfinalpathname, nt._getvolumepathname и nt._getdiskusage теперь корректно преобразуют из bytes.
bpo-25988: Выдавать
DeprecationWarningпри использовании или импорте ABC напрямую изcollections, а не изcollections.abc.bpo-21060: Запутанное сообщение от setup.py upload переписано с «No dist file created in earlier command» на более понятное «Must create and upload files in one command».
bpo-32852: Обеспечено сохранение sys.argv в виде списка при запуске trace.
bpo-31333: Добавлен модуль
_abc. Это модуль ускорения с реализациями на C различных функций и методов изabc. Создание подкласса 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-32394: socket: удалены флаги TCP_FASTOPEN, TCP_KEEPCNT, TCP_KEEPIDLE, TCP_KEEPINTVL в старых версиях Windows во время выполнения.
bpo-31787: Исправлены утечки ссылок (refleaks) методов
__init__()в различных модулях. (Вклад от Oren Milman)bpo-30157: Исправлено угадывание символа кавычек и разделителя в csv.Sniffer.sniff(), когда только последнее поле заключено в кавычки. Исправление от Jake Davis.
bpo-32792: collections.ChainMap() сохраняет порядок базовых отображений.
bpo-32775:
fnmatch.translate()больше не создаёт шаблоны, содержащие операции над наборами. Наборы, начинающиеся с ‘[’ или содержащие ‘–’, ‘&&’, ‘~~’ или ‘||’, будут интерпретироваться иначе в регулярных выражениях в будущих версиях. Сейчас они вызывают предупреждения. fnmatch.translate() теперь избегает случайного создания шаблонов, содержащих такие наборы.bpo-32622: Реализован нативный быстрый sendfile для цикла событий proactor в Windows.
bpo-32777: Исправлена редкая, но потенциальная взаимоблокировка дочернего процесса перед exec в подпроцессе на системах POSIX при пометке файловых дескрипторов наследуемыми при exec в дочернем процессе. Эта ошибка, по-видимому, была введена в 3.4.
bpo-32647: Модуль ctypes ранее зависел от косвенной компоновки для dlopen. Теперь общее расширение явно компонуется с libdl на платформах, где есть dl.
bpo-32741: Реализован метод
asyncio.TimerHandle.when().bpo-32691: Использовать mod_spec.parent при запуске модулей с pdb
bpo-32734: Исправлена проблема безопасности
asyncio.Lock(), которая позволяла захватывать и блокировать одну и ту же блокировку несколько раз, не освобождая её. Исправление от Bar Harel.bpo-32727: Не включать поле name в адрес отправителя SMTP-конверта. Исправление от Stéphane Wirtel.
bpo-31453: Добавлены константы TLSVersion и атрибуты SSLContext.maximum_version / minimum_version. Новый API оборачивает функциональность OpenSSL 1.1 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: Добавлен виджет Ttk spinbox в
tkinter.ttk. Патч от Alan D Moore.bpo-32221: Различные функции, возвращающие кортеж с IPv6-адресами, теперь опускают часть
%scope, поскольку та же информация уже закодирована в элементе кортежа scopeid. Это особенно ускоряетsocket.recvfrom()при получении multicast-пакета, так как исключается бесполезное разрешение имени сетевого интерфейса.bpo-30693: Класс TarFile теперь рекурсивно обходит каталоги воспроизводимым образом.
bpo-30693: Класс ZipFile теперь рекурсивно обходит каталоги воспроизводимым образом.
Документация¶Documentation
bpo-28124: Функция ssl.wrap_socket() модуля ssl устарела и больше не рекомендуется к использованию; вместо неё следует применять более безопасный и эффективный метод SSLContext.wrap_socket().
bpo-17232: Уточнена документация для -O и -OO. Патч от Terry Reedy.
bpo-32436: Добавлена документация для модуля contextvars (PEP 567).
bpo-32800: Обновлена ссылка на документ w3c для пространств имён XML по умолчанию.
bpo-11015: Обновлена документация
test.support.bpo-8722: Документировать поведение
__getattr__(), когда метод свойстваget()возбуждаетAttributeError.bpo-32614: Изменены примеры регулярных выражений в документации для использования сырых строк во избежание
DeprecationWarning, и добавлен текст в REGEX HOWTO, чтобы подчеркнуть устаревание.bpo-31972: Улучшены строки документации для подклассов
pathlib.PurePath.
Тесты¶Tests
bpo-31809: Добавлены тесты для проверки соединения с кривыми secp ECDH.
Сборка¶Build
bpo-32898: Исправлена отладочная сборка Python при использовании COUNT_ALLOCS.
Windows¶
bpo-32901: Обновлены версии Tcl и Tk до 8.6.8.
bpo-31966: Исправлен WindowsConsoleIO.write() для записи пустых данных.
bpo-32409: Обеспечена возможность activate.bat обрабатывать содержимое в Юникоде.
bpo-32457: Улучшена обработка денормализованного пути к исполняемому файлу при запуске Python.
bpo-32370: Использовать правильную кодировку для вывода ipconfig в модуле uuid. Патч от Segev Finer.
bpo-29248: Исправлена
os.readlink()в Windows, которая ошибочно tрактовала полеPrintNameOffsetбуфера данных reparse как количество символов вместо количества байтов. Патч от Craig Holmquist и SSE4.
macOS¶
bpo-32901: Установщик для macOS 10.9+ обновлён до Tcl/Tk 8.6.8.
IDLE¶
bpo-32916: Изменение
strнаcodeв pyparse.bpo-32905: Удаление неиспользуемого кода в модуле pyparse.
bpo-32874: Добавлены тесты для pyparse.
bpo-32837: Использование системной и зависимой от локали кодировки по умолчанию для open() – плохая идея для системно-независимых файлов IDLE.
bpo-32826: Добавлено “encoding=utf-8” для open() в тесте test_help_about IDLE. GUI-тест test_file_buttons() проверяет только начальные строки, содержащие исключительно ascii, но завершался ошибкой в системах, где open() по умолчанию использует ‘ascii’, поскольку readline() внутренне читает и декодирует достаточно далеко, чтобы встретить не-ascii символ в CREDITS.txt.
bpo-32765: Обновлена docstring вкладки General в configdialog для добавления новых виджетов в список виджетов.
Инструменты/Демонстрации¶Tools/Demos
bpo-32222: Исправлена ошибка pygettext, не извлекавшей docstrings для функций с аннотированными типами аргументов. Патч от Toby Harradine.
Python 3.7.0 бета 1¶Python 3.7.0 beta 1
Дата выпуска: 2018-01-30
Ядро и встроенные модули¶Core and Builtins
bpo-32703: Исправлено ResourceWarning корутины, когда при её финализации установлена активная ошибка.
bpo-32650: Pdb и другие отладчики, зависящие от bdb.py, теперь корректно выполняют шаг (команда next) через нативные корутины. Патч от Pablo Galindo.
bpo-28685: Оптимизированы list.sort() и sorted() за счёт использования специализированных по типу сравнений, где это возможно.
bpo-32685: Улучшено предложение, когда форма оператора print из Python 2 находится на той же строке, что и заголовок составного оператора, или завершается точкой с запятой вместо перевода строки. Патч от Nitish Chandra.
bpo-32697: Python теперь явно сохраняет порядок определения параметров только по ключевым словам. Раньше порядок всегда сохранялся, но это поведение никогда не гарантировалось; теперь оно гарантировано и протестировано.
bpo-32690: Словарь locals() теперь отображается в лексическом порядке, в котором были определены переменные. Ранее порядок был обратным.
bpo-32677: Добавлен метод
.isascii()кstr,bytesиbytearray. Его можно использовать для проверки, что строка содержит только 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: Открыты системные вызовы preadv и pwritev в модуле os. Патч от Pablo Galindo.
bpo-32544:
hasattr(obj, name)иgetattr(obj, name, default)примерно в 4 раза быстрее, чем раньше, когдаnameне найден, аobjне переопределяет__getattr__или__getattribute__.bpo-26163: Улучшен хеш frozenset() для создания более различающихся значений хеша при работе с наборами данных, содержащими много похожих значений.
bpo-32550: Удалён байткод STORE_ANNOTATION.
bpo-20104: Открыт posix_spawn как низкоуровневый API в модуле os. (удалено до 3.7.0rc1)
bpo-24340: Исправлена оценка размера стека кода.
bpo-18533:
repr()для словаря, содержащего свой собственныйvalues()илиitems(), больше не вызываетRecursionError; аналогично для OrderedDict. Вместо этого используйте..., как и для других рекурсивных структур. Патч от Ben North.bpo-20891: Py_Initialize() теперь создаёт GIL. GIL больше не создаётся «по требованию» для исправления состояния гонки, когда PyGILState_Ensure() вызывается в потоке, не являющемся потоком Python.
bpo-32028: Начальные пробелы теперь корректно игнорируются при генерации подсказок для преобразования операторов print из Python 2 во встроенную функцию print в Python 3. Исправление от Sanyam Khurana.
bpo-31179: Ускорение dict.copy() до 5.5 раз.
bpo-31113: Устранена рекурсия в компиляторе для обычного потока управления.
Библиотека¶Library
bpo-25988: Объявлено устаревшим раскрытие содержимого collections.abc в обычном модуле collections.
bpo-31429: Выбор набора шифров по умолчанию в модуле ssl теперь использует подход с чёрным списком вместо жёстко заданного белого списка. Python больше не включает повторно шифры, заблокированные обновлением безопасности OpenSSL. Выбор набора шифров по умолчанию можно настроить во время компиляции.
bpo-30306: contextlib.contextmanager теперь освобождает аргументы, переданные базовому генератору, сразу после входа в менеджер контекста. Ранее они сохранялись всё время жизни менеджера контекста, даже если он не использовался как декоратор функции. Патч от Martin Teichmann.
bpo-21417: Добавлена поддержка задания уровня сжатия для zipfile.ZipFile.
bpo-32251: Реализован asyncio.BufferedProtocol (экспериментальный API).
bpo-32513: В dataclasses упрощено переопределение dunder-методов без указания параметров декоратора.
bpo-32660:
termiosделает доступнымиFIONREAD,FIONCLEX,FIOCLEX,FIOASYNCиFIONBIOтакже в Solaris и производных.bpo-27931: Исправлена ошибка парсинга заголовка email-адреса, когда имя пользователя – пустая строка в кавычках. Исправление от Xiang Zhang.
bpo-32659: В Solaris и производных
os.stat_resultпредоставляет атрибут st_fstype.bpo-32662: Реализованы методы Server.start_serving(), Server.serve_forever(), и Server.is_serving(). Добавлен параметр ‘start_serving’ в loop.create_server() и loop.create_unix_server().
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: Команда upload из distutils больше не повреждает tar-файлы, заканчивающиеся байтом CR, и больше не пытается преобразовывать CR в CRLF в любых текстовых полях загрузки.
bpo-32502: uuid.uuid1 больше не вызывает исключение при обнаружении 64-битного аппаратного адреса.
bpo-32596:
concurrent.futuresимпортируетThreadPoolExecutorиProcessPoolExecutorлениво (с использованием PEP 562). Это делаетimport asyncioпримерно на 15% быстрее, поскольку asyncio по умолчанию использует толькоThreadPoolExecutor.bpo-31801: Добавлен
_ignore_вEnum, чтобы временные переменные можно было использовать во время конструирования класса без превращения их в члены.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: Новый аргумент
capture_outputдля subprocess.runbpo-32521: glibc удалил Sun RPC. Используйте замену – заголовки и библиотеку libtirpc в модуле nis.
bpo-32493: Модуль UUID: исправлена сборка для FreeBSD/OpenBSD
bpo-32503: Pickling с протоколом 4 больше не создаёт слишком маленькие фреймы.
bpo-29237: Создано перечисление для опций сортировки pstats
bpo-32454: Добавлена функция close(fd) в модуль socket.
bpo-25942: Модуль subprocess теперь более корректно обрабатывает Ctrl-C (KeyboardInterrupt) во время subprocess.call, subprocess.run или менеджера контекста Popen. Он ожидает короткое время, пока дочерний процесс (предположительно также получивший SIGINT) завершится, прежде чем продолжить обработку исключения KeyboardInterrupt. Это всё ещё включает SIGKILL в API call() и run(), но по крайней мере дочерний процесс сначала получил шанс.
bpo-32433: В модуле hmac теперь есть hmac.digest(), который предоставляет оптимизированную HMAC-дайджест.
bpo-28134: Сокеты теперь по умолчанию автоматически определяют семейство, тип и протокол из файлового дескриптора.
bpo-32404: Исправлена ошибка, когда
datetime.datetime.fromtimestamp()не вызывал __new__ в подклассахdatetime.datetime.bpo-32403: Увеличена скорость альтернативных конструкторов
datetime.dateиdatetime.datetime.bpo-32228: Обеспечено сохранение
truncate()позиции в файле (как сообщаетtell()) после записи длиннее размера буфера.bpo-32410: Реализован
loop.sock_sendfileдля цикла событий asyncio.bpo-22908: Добавлены методы seek и tell в класс ZipExtFile. Это работает только в том случае, если файловый объект, используемый для открытия zip-файла, поддерживает позиционирование.
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. Аргумент args функции subprocess.Popen теперь может быть объектом, подобным пути. Если args передан как последовательность, его первый элемент теперь также может быть объектом, подобным пути.
bpo-31900: Функция
locale.localeconv()теперь временно устанавливает локальLC_CTYPEна локальLC_NUMERICдля декодирования байтовых строкdecimal_pointиthousands_sep, если они не-ASCII или длиннее 1 байта, и локальLC_NUMERICотличается от локалиLC_CTYPE. Это временное изменение затрагивает другие потоки. Аналогичное изменение для методаstr.format()при форматировании числа (int,float,floatи подклассы) с типомn(например,'{:n}'.format(1234)).bpo-31853: Используйте super().method вместо socket.method в SSLSocket. Они там были, скорее всего, по историческим причинам.
bpo-31399: Модуль ssl теперь использует API OpenSSL X509_VERIFY_PARAM_set1_host() и X509_VERIFY_PARAM_set1_ip() для проверки имени хоста и IP-адресов. Резервное использование Common Name может быть отключено с помощью SSLContext.hostname_checks_common_name.
bpo-14976: Добавлен класс queue.SimpleQueue, неограниченная очередь FIFO с реентерабельной C-реализацией метода put().
Документация¶Documentation
bpo-32724: Добавлены ссылки на некоторые команды в документации Pdb. Патч от Stéphane Wirtel
bpo-32649: Дополнена документация C API, часть по профилированию и трассировке недавно добавленными событиями на уровне опкодов.
bpo-17799: Объяснить реальное поведение sys.settrace и sys.setprofile и их аналогов из C API относительно того, какие типы событий принимаются в каждой функции. Патч от Pablo Galindo Salgado.
Тесты¶Tests
bpo-32721: Исправлен test_hashlib, чтобы он не падал, если модуль _md5 не собран.
bpo-28414: Добавлены тесты для IDNA 2003 и 2008 имен хостов. Интернационализированные имена хостов IDNA 2003 работают с момента выхода bpo-31399. 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 для тестирования.
Сборка¶Build
bpo-32635: Исправлено падение (segfault) модуля crypt, когда в системе предоставляется libxcrypt вместо libcrypt.
bpo-32598: Используйте autoconf для обнаружения библиотек OpenSSL, заголовков и поддерживаемых возможностей. Макрос M4 ax_check_openssl использует pkg-config для поиска OpenSSL и переходит к ручному поиску в случае неудачи.
bpo-32593: Прекращена поддержка FreeBSD 9 и старше.
bpo-29708: Если установлена переменная окружения
SOURCE_DATE_EPOCH,py_compileвсегда будет создавать файлы.pycна основе хеша.
Windows¶
bpo-32588: Создан отдельный модуль _distutils_findvs и добавлен отсутствующий модуль _queue в установщик.
bpo-29911: Обеспечено отображение отдельных кнопок «Изменить» и «Удалить».
bpo-32507: Используется локальная для приложения установка UCRT вместо соответствующего обновления для старых версий Windows.
macOS¶
bpo-32726: Предоставлен дополнительный, более современный вариант установщика macOS, который поддерживает системы macOS 10.9+ только в 64-битном режиме. Обновлены поставляемые сторонние библиотеки до OpenSSL 1.1.0g и SQLite 3.22.0. Установщик для 10.9+ теперь связывается и поставляет собственную копию Tcl/Tk 8.6.
bpo-28440: Путь /Library/Python/3.x/site-packages больше не добавляется в sys.path для сборок фреймворков macOS, чтобы избежать будущих конфликтов.
C API¶
Python 3.7.0 альфа 4¶Python 3.7.0 alpha 4
Дата выпуска: 2018-01-08
Ядро и встроенные модули¶Core and Builtins
bpo-31975: Список фильтров предупреждений по умолчанию теперь начинается с записи “default::DeprecationWarning:__main__”, поэтому предупреждения об устаревании снова показываются по умолчанию в однофайловых скриптах и в интерактивном режиме.
bpo-32226:
__class_getitem__теперь является автоматическим методом класса.bpo-32399: Добавлена поддержка библиотеки uuid для AIX для RFC4122 с использованием uuid_create() в libc.a
bpo-32390: Исправлена ошибка компиляции на AIX после добавления поля f_fsid в объект, возвращаемый os.statvfs() (bpo-32143). Оригинальное исправление от Michael Felt.
bpo-32379: Ускорено вычисление MRO, когда класс наследуется от одного базового класса.
bpo-32259: Сообщение об ошибке TypeError, возникающей при распаковке неитерируемого объекта, теперь более конкретное.
bpo-27169: Константа
__debug__теперь оптимизируется на этапе компиляции. Это также исправляет bpo-22091.bpo-32329: Опция
-Rтеперь включает рандомизацию хэша, когда переменная окруженияPYTHONHASHSEEDустановлена в0. Ранее опция игнорировалась. Более того,sys.flags.hash_randomizationтеперь корректно устанавливается в 0, когда рандомизация хэша отключаетсяPYTHONHASHSEED=0.bpo-30416: Оптимизатор теперь защищён от затрат большого времени на сложные вычисления и большого объёма памяти на создание больших констант при свёртке констант. Увеличены лимиты на константы, которые могут быть получены при свёртке констант.
bpo-32282: Исправлен лишний ifdef в include VersionHelpers.h в socketmodule на Windows.
bpo-30579: Реализован TracebackType.__new__ для создания объектов traceback на уровне Python, и сделано изменяемым свойство TracebackType.tb_next.
bpo-32260: Не выполнять перестановку байтов входных ключей для алгоритма SipHash на платформах с обратным порядком байтов. Это должно обеспечить согласованные результаты siphash на разных платформах.
bpo-31506: Улучшена логика сообщений об ошибках для object.__new__ и object.__init__. Исправление от Sanyam Khurana.
bpo-20361:
-bи-bbтеперь вставляют записи'default::BytesWarning'иerror::BytesWarningвsys.warnoptions, обеспечивая их приоритет над любыми другими фильтрами предупреждений, настроенными с помощью опции-Wили переменной окруженияPYTHONWARNINGS.bpo-32230:
-X devтеперь вставляет запись'default'в sys.warnoptions, гарантируя, что это ведёт себя так же, как и при фактической передаче-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 (Детерминированные pyc). Python теперь поддерживает аннулирование файлов кэша байт-кода на основе хэша содержимого исходного кода, а не времени последнего изменения исходного кода.
bpo-29469: Перенесена свёртка констант из слоя байт-кода на слой AST. Оригинальное исправление от Eugene Toder.
Библиотека¶Library
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), возвращающая True, если obj является классом данных или экземпляром такого класса.
bpo-32468: Улучшено представление repr() для фреймов: теперь оно включает имя файла, имя кода и номер текущей строки.
bpo-23749: asyncio: реализован метод loop.start_tls()
bpo-32441: Теперь
os.dup2возвращает новый файловый дескриптор (то есть второй аргумент). Ранее всегда возвращалсяNone.bpo-32422:
functools.lru_cacheиспользует меньше памяти (3 слова на каждый кешированный ключ) и занимает примерно 1/3 времени для циклической сборки мусора.bpo-31721: Предотвращено аварийное завершение Python при ручной установке Future._log_traceback в True. Теперь этот атрибут можно установить только в 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: Оптимизированы asyncio.iscoroutine() и loop.create_task() для неродных корутин (например, async/await, скомпилированных с Cython). Ранее 'loop.create_task(python_coroutine)' был на 20% быстрее, чем 'loop.create_task(cython_coroutine)'. Теперь последний работает с той же скоростью.
bpo-32356: asyncio.transport.resume_reading() и pause_reading() теперь идемпотентны. Добавлен новый метод transport.is_reading().
bpo-32355: Оптимизирован asyncio.gather(); теперь работает до 15% быстрее.
bpo-32351: Использование быстрого пути в asyncio.sleep при delay<0 (ускорение в 2 раза)
bpo-32348: Оптимизированы методы планирования/добавления/удаления колбэков asyncio.Future. Оптимизация даёт улучшение производительности async/await кода на 3-6%.
bpo-32331: Исправлено поведение socket.settimeout() и socket.setblocking() – теперь они не изменяют socket.type. Исправлен конструктор socket.socket() – теперь он сбрасывает любые битовые флаги, применённые к типу сокета. Это изменение затрагивает только ОС, в которых определены SOCK_NONBLOCK и/или SOCK_CLOEXEC.
bpo-32248: добавлен
importlib.abc.ResourceReaderв качестве ABC для загрузчиков, чтобы предоставить единый API для чтения ресурсов внутри пакетов. Также добавленimportlib.resourcesкак портimportlib_resources.bpo-32311: Реализован краткий вызов asyncio.create_task(coro)
bpo-32327: Функции asyncio, которые были задокументированы как корутины, теперь реализованы как корутины. Затронутые функции: loop.sock_sendall, loop.sock_recv, loop.sock_accept, loop.getaddrinfo, loop.getnameinfo.
bpo-32323:
urllib.parse.urlsplit()больше не приводит zone-id (scope) к нижнему регистру для адресов IPv6 с областью действия в именах хостов.bpo-32302: Исправление bdist_wininst из distutils для CRT v142: теперь он бинарно совместим с CRT v140.
bpo-29711: Исправлено
stop_servingв proactor-цикле asyncio, который убивал все слушающие серверыbpo-32308:
re.sub()теперь заменяет пустые совпадения, примыкающие к предыдущему непустому совпадению.bpo-29970: Прерывать соединение asyncio SSLProtocol, если рукопожатие не завершено в течение 10 секунд.
bpo-32314: Реализован asyncio.run().
bpo-17852: Откат некорректного исправления, основанного на неверном понимании семантики _Py_PyAtExit().
bpo-32296: Реализованы asyncio._get_running_loop() и get_event_loop() на C. Это делает их в 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: Возбуждать
NotImplementedErrorвместоSystemErrorна платформах, гдеchmod(..., follow_symlinks=False)не поддерживается. Патч от Anthony Sottile.bpo-30050: Новый аргумент warn_on_full_buffer для signal.set_wakeup_fd позволяет управлять выводом предупреждения в stderr при переполнении буфера файлового дескриптора пробуждения.
bpo-29137: Библиотека
fpectlудалена. Она никогда не была включена по умолчанию, никогда корректно не работала на x86-64 и изменяла ABI Python таким образом, что это приводило к неожиданным поломкам C-расширений.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: Изменён MIME-тип файлов .bmp с '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: Геттер ip в getnode() теперь использует «ip link» вместо «ip link list».
bpo-32143: os.statvfs() теперь включает поле f_fsid из statvfs(2).
bpo-26439: Исправлена работа ctypes.util.find_library() на AIX с помощью реализации ctypes._aix.find_library(). Автор исправления: Michael Felt.
bpo-31993: Теперь при сериализации больших объектов bytes и str в файл pickler использует меньше памяти. Пиклы, созданные с протоколом 4, потребуют меньше памяти для десериализации больших объектов bytes и str.
bpo-27456: Обеспечена установка TCP_NODELAY на Linux. Тесты от Victor Stinner.
bpo-31778: ast.literal_eval() теперь более строгий. Сложение и вычитание произвольных чисел больше не допускается.
bpo-31802: Импорт нативного модуля путей (
posixpath,ntpath) теперь работает, даже если модульosещё не импортирован.bpo-30241: Добавлен contextlib.AbstractAsyncContextManager. Автор исправления: Jelle Zijlstra.
bpo-31699: Исправлены взаимоблокировки в
concurrent.futures.ProcessPoolExecutor, когда аргументы или результаты задач вызывают ошибки сериализации или десериализации. Это гарантирует, что вызовы APIProcessPoolExecutorв конечном итоге всегда завершаются.bpo-15216:
TextIOWrapper.reconfigure()поддерживает изменение кодировки, обработки ошибок и символа новой строки.
Документация¶Documentation
bpo-32418: Добавлен метод get_loop() в классы Server и AbstractServer.
Тесты¶Tests
bpo-32252: Исправлена faulthandler_suppress_crash_report(), используемая для предотвращения файлов core dump при тестировании аварийных завершений. getrlimit() возвращает ноль при успехе.
bpo-32002: Настройка тестирования принудительного использования локали C для случаев пустой локали и локали POSIX для более лёгкой адаптации к поведению, зависящему от платформы.
Windows¶
bpo-19764: Реализована поддержка
subprocess.Popen(close_fds=True)в Windows. Автор исправления: Segev Finer.
Инструменты/Демонстрации¶Tools/Demos
bpo-24960: 2to3 и lib2to3 теперь могут читать сериализованные файлы грамматик с помощью pkgutil.get_data() вместо обращения к файловой системе. Это позволяет 2to3 и lib2to3 работать при запуске из zip-файла.
C API¶
bpo-32030: Py_Initialize() не сбрасывает распределители памяти в значения по умолчанию, если не установлена переменная окружения
PYTHONMALLOC.bpo-29084: Незадокументированный C API для OrderedDict был исключён из ограниченного C API. Он был добавлен по ошибке и фактически никогда не работал в ограниченном C API.
bpo-32264: Заголовочный файл pygetopt.h перемещён в internal/, так как у него нет публичных API.
bpo-32241:
Py_SetProgramName()иPy_SetPythonHome()теперь принимают аргументыconst wchar *вместоwchar *.
Python 3.7.0 альфа 3¶Python 3.7.0 alpha 3
Дата выхода: 2017-12-05
Ядро и встроенные модули¶Core and Builtins
bpo-32176: co_flags.CO_NOFREE теперь всегда корректно устанавливается конструктором объекта кода на основе freevars и cellvars, вместо необходимости корректной установки вызывающим кодом. Это гарантирует, что он будет автоматически сброшен при добавлении дополнительных cell-ссылок в изменённый объект кода и функцию.
bpo-10544: Выражения yield теперь устарели в включениях (comprehensions) и выражениях-генераторах. Они по-прежнему разрешены в определении самого внешнего итерируемого объекта, поскольку он вычисляется непосредственно в объемлющей области видимости.
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: Исправлено несколько проблем с выводом traceback (PyTraceBack_Print()). Установка sys.tracebacklimit в 0 или меньше теперь подавляет вывод traceback. Установка sys.tracebacklimit в None теперь приводит к использованию предела по умолчанию. Установка sys.tracebacklimit в целое число больше LONG_MAX теперь означает использование предела LONG_MAX вместо предела по умолчанию. Исправлены целочисленные переполнения в случае более 2**31 элементов traceback на Windows. Исправлена обработка ошибок вывода.
bpo-30696: Исправлено бесконечное зацикливание интерактивного интерпретатора при нехватке памяти.
bpo-20047: Методы bytearray partition() и rpartition() теперь принимают в качестве разделителя только байтоподобные объекты, как и документировано. В частности, теперь они вызывают TypeError, а не возвращают ошибочный результат, если в качестве разделителя передан целое число.
bpo-21720: BytesWarning больше не выводится, когда аргумент fromlist
__import__()или атрибут__all__модуля содержат экземпляры bytes.bpo-31845: Переменные окружения снова корректно считываются при запуске интерпретатора.
bpo-28936: Обеспечено обнаружение первой лексической синтаксической ошибки, связанной с параметром и
globalилиnonlocal, в данной области видимости. Исправление от Ивана Левкивского.bpo-31825: Исправлена ошибка OverflowError в кодировке ‘unicode-escape’ и в codecs.escape_decode() при декодировании экранированного не-ascii байта.
bpo-31618: Логика трассировки по кадрам, добавленная в 3.7a1, была изменена так, что
frame->f_linenoобновляется до того, как будут отправлены события"line"или"opcode". Ранее сначала отправлялись события кода операции, и поэтому иногда на кадре отображались устаревшие номера строк. В результате поведение этой функции немного изменилось: когда включены и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: Стандартный repr() для BaseException с одним аргументом больше не содержит лишней завершающей запятой.
bpo-31626: Исправлена ошибка в отладочном распределителе памяти. Производилась запись в освобожденную память после уменьшения блока памяти.
bpo-30817:
PyErr_PrintEx()теперь очищает игнорируемое исключение, которое может быть вызвано_PySys_SetObjectId(), например, при нехватке памяти.
Библиотека¶Library
bpo-28556: Два мелких исправления для модуля
typing: разрешено поверхностное копирование экземпляров обобщенных классов, улучшено взаимодействие__init_subclass__с обобщениями. Оригинальные PR от Ivan Levkivskyi.bpo-32214: PEP 557, Классы данных (Data Classes). Предоставляет декоратор, который добавляет шаблонные методы в классы, использующие аннотации типов для указания полей.
bpo-27240: Алгоритм сворачивания заголовков для новых политик email был переписан, что также исправляет bpo-30788, bpo-31831 и bpo-32182. В частности, сворачивание RFC2231 теперь выполняется корректно.
bpo-32186: Методы io.FileIO.readall() и io.FileIO.read() теперь освобождают GIL при получении размера файла. Исправлено зависание всех потоков при недоступном NFS-сервере. Патч от Nir Soffer.
bpo-32101: Добавлен флаг
sys.flags.dev_modebpo-32154: Функция
asyncio.windows_utils.socketpair()была удалена – используйте напрямуюsocket.socketpair(), доступную на всех платформах начиная с Python 3.5 (ранее она отсутствовала в Windows).asyncio.windows_utils.socketpair()была всего лишь псевдонимом дляsocket.socketpairв Python 3.5 и новее.bpo-32089: warnings: В режиме разработки (-X dev) и отладки (сборка pydebug) используйте действие “default” для ResourceWarning, а не “always” в фильтрах предупреждений по умолчанию.
bpo-32107:
uuid.getnode()теперь предпочтительно возвращает глобально администрируемые MAC-адреса, если они доступны, вместо локально администрируемых. Это обеспечивает лучшую гарантию глобальной уникальности UUID, возвращаемых изuuid.uuid1(). Если доступны только локально администрируемые MAC-адреса, возвращается первый найденный.bpo-23033: Подстановочный символ теперь поддерживается в имени хоста, если он является единственным символом в крайнем левом сегменте имени хоста во втором аргументе
ssl.match_hostname(). Исправление от Mandeep Singh.bpo-12239: Сделать
msilib.SummaryInformation.GetProperty(), чтобы он возвращалNone, когда значение свойства равноVT_EMPTY. Первоначальный патч от Mark Mc Mahon.bpo-28334: Используйте
os.path.expanduser()для поиска файла~/.netrcвnetrc.netrc. Если его нет, вызываетсяFileNotFoundError. Исправление от Dimitri Merejkowsky.bpo-32121: Изменено поведение
tracemalloc.Tracebackдля большего соответствия модулю traceback: фреймы теперь сортируются от старых к новым.Traceback.format()теперь принимает отрицательное limit, обрезая результат доabs(limit)старейших фреймов. Чтобы вернуть старое поведение, можно использовать новый аргумент most_recent_first вTraceback.format(). (Исправление от Jesse Bakker.)bpo-31325: Исправлено некорректное использование
collections.namedtuple()в методеRobotFileParser.parse(). Первоначальный патч от Robin Wellner.bpo-12382:
msilib.OpenDatabase()теперь генерирует более понятное сообщение об исключении, когда не удается открыть или создать MSI-файл. Первоначальный патч от William Tisäter.bpo-19610:
setup()теперь предупреждает о некорректных типах для некоторых полей. Классdistutils.dist.Distributionтеперь выводит предупреждение, если поляclassifiers,keywordsиplatformsне указаны как список или строка.bpo-32071: Добавлена опция командной строки
-kдляpython -m unittest, позволяющая запускать только тесты, соответствующие заданным шаблонам.bpo-10049: В модуль contextlib добавлен nullcontext – контекстный менеджер, не выполняющий никаких действий. Он предоставляет более простую и быструю альтернативу ExitStack() при работе с опциональными контекстными менеджерами.
bpo-28684: Новый декоратор test.support.skip_unless_bind_unix_socket() используется здесь для пропуска тестов asyncio, которые завершаются ошибкой из-за отсутствия на платформе рабочей функции bind() для доменных сокетов Unix (как это происходит для обычных пользователей на последних версиях Android, где SELinux работает в режиме enforcing).
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: Исправлены проблемы с двоичными plist-файлами: исправлено сохранение массива байтов. Идентичные объекты будут сохраняться только один раз. Равные ссылки будут загружаться как идентичные объекты. Добавлена поддержка сохранения и загрузки рекурсивных структур данных.
bpo-32069: Из asyncio удалён устаревший SSL-транспорт; ssl.MemoryBIO всё равно используется всегда.
bpo-32066: asyncio: Поддержка pathlib.Path в create_unix_connection; аргумент sock должен быть необязательным.
bpo-32046: Обновлён 2to3 для преобразования из operator.isCallable(obj) в callable(obj). Патч от Dong-hee Na.
bpo-32018: inspect.signature теперь должен следовать PEP 8, если параметр имеет аннотацию и значение по умолчанию. Патч от Dong-hee Na.
bpo-32025: Добавлены time.thread_time() и time.thread_time_ns()
bpo-32037: Целые числа, помещающиеся в 32-битное знаковое целое, теперь будут упаковываться протоколом 0 с использованием кода операции INT. Это уменьшит размер pickle, ускорит упаковку и распаковку, а также позволит распаковывать эти целые числа как экземпляры int в Python 2.
bpo-32034: asyncio.IncompleteReadError и LimitOverrunError теперь сериализуемы с помощью pickle.
bpo-32015: Исправлена проблема с циклом событий asyncio при повторном подключении сокета во время ожидания асинхронного чтения/записи из/в сокет.
bpo-32011: Восстановлена поддержка загрузки marshal-файлов с кодом TYPE_INT64. Такие файлы могут быть созданы в Python 2.7.
bpo-28369: Улучшена проверка в add_reader/writer: сокет не должен использоваться каким-либо транспортом. Раньше поддерживались только случаи, когда add_reader/writer вызывались с int FD. Теперь проверка корректно реализована для всех файлоподобных объектов.
bpo-31976: Исправлено состояние гонки при медленной очистке файла, которое могло приводить к segfault при закрытии файла из другого потока.
bpo-31985: Официально объявлены устаревшими aifc.openfp, sunau.openfp и wave.openfp. Начиная с изменения 7bc817d5ba917528e8bd07ec461c635291e7b06a в 1993 году, openfp в каждом из трёх модулей ссылался на функцию open этого модуля для обратной совместимости, хотя это не тестировалось и не документировалось.
bpo-21862: Командная строка cProfile теперь принимает
-m module_nameв качестве альтернативы пути к скрипту. Исправление от Sanyam Khurana.bpo-31970: Снижены накладные расходы на производительность отладочного режима asyncio.
bpo-31843: Аргумент database функции sqlite3.connect() теперь принимает объект, подобный пути, а не только строку.
bpo-31945: Добавлена настраиваемая blocksize в
HTTPConnectionиHTTPSConnectionдля повышения пропускной способности при загрузке. Исправление от Нира Соффера.bpo-31943: Добавлен метод
cancelled()вasyncio.Handle. Исправление от Марата Шарафутдинова.bpo-9678: Исправлено определение MAC-адреса в модуле uuid: используется ifconfig на NetBSD и OpenBSD; arp на Linux, FreeBSD, NetBSD и OpenBSD. Основано на патче от Takayuki Shimizukawa.
bpo-30057: Исправлена потенциальная потеря сигнала в signal.signal().
bpo-31933: Исправлены параметры Blake2 leaf_size и node_offset на платформах с обратным порядком байт. Патч от Jack O'Connor.
bpo-21423: Добавлен аргумент initializer в {процесс,поток}PoolExecutor
bpo-31927: Исправлена компиляция модуля socket на NetBSD 8. Исправлен сбой утверждения или чтение произвольных данных при разборе адреса AF_BLUETOOTH на NetBSD и DragonFly BSD.
bpo-27666: Исправлено повреждение стека в curses.box() и curses.ungetmouse(), когда размер типов chtype или mmask_t меньше размера C long. curses.box() теперь принимает символы в качестве аргументов. Основано на патче Стива Финка.
bpo-31917: Добавлено 3 новых идентификатора часов:
time.CLOCK_BOOTTIME,time.CLOCK_PROFиtime.CLOCK_UPTIME.bpo-31897: plistlib теперь перехватывает больше ошибок при чтении бинарных plist-файлов и возбуждает InvalidFileException вместо неожиданных исключений.
bpo-25720: Исправлен метод проверки состояния pad окна curses WINDOW. Патч от Масаюки Ямамото.
bpo-31893: Исправлена структура kqueue_event на OpenBSD и NetBSD. Исправлено сравнение объектов kqueue_event.
bpo-31891: Исправлена сборка модуля curses на NetBSD.
bpo-31884: Добавлены необходимые константы в модуль подпроцесса для установки приоритета в Windows
bpo-28281: Убраны ограничения на год (1–9999) для функции Calendar.weekday(). Исправление от Марка Голлахона.
bpo-31702: crypt.mksalt() теперь позволяет задавать количество раундов для хэширования SHA-256 и SHA-512.
bpo-30639:
inspect.getfile()больше не вычисляет repr неизвестных объектов для вывода в сообщении об ошибке, чтобы защититься от некорректно ведущих себя пользовательских repr.bpo-30768: Исправлена реализация PyThread_acquire_lock_timed() на pthread+semaphore при вызове с timeout > 0 и intr_flag=0: повторное вычисление таймаута, если sem_timedwait() прервана сигналом (EINTR). См. также PEP 475.
bpo-31854: Добавлена константа
mmap.ACCESS_DEFAULT.bpo-31834: Оптимизированный код для BLAKE2 теперь используется только с SSSE3+. Реализация на чистом SSE2 работает медленнее эталонной реализации на чистом C.
bpo-28292: Calendar.itermonthdates() теперь будет последовательно возбуждать исключение, когда дата выходит за пределы диапазона 0001-01-01 – 9999-12-31. Для поддержки приложений, которые не могут допускать такие исключения, добавлены новые методы itermonthdays3() и itermonthdays4(). Новые методы возвращают кортежи и не ограничены диапазоном, поддерживаемым datetime.date.
bpo-28564: Функция shutil.rmtree() ускорена на 20–40%. Это было сделано с помощью функции os.scandir().
bpo-28416: Экземпляры подкласса pickle.Pickler с методом persistent_id() и подкласса pickle.Unpickler с методом persistent_load() больше не создают циклические ссылки.
bpo-31653: Не освобождать GIL, если можно сразу захватить семафор multiprocessing.
bpo-28326: Исправлен multiprocessing.Process, когда stdout и/или stderr закрыты или равны None.
bpo-20825: Добавлены проверки вхождения
subnet_ofиsuperset_ofвipaddress.IPv6Networkиipaddress.IPv4Network. Исправление от Мишеля Альбера и Шерил Сабеллы.bpo-31827: Удалена функция os.stat_float_times(). Она была введена в Python 2.3 для обратной совместимости с Python 2.2 и устарела с Python 3.1.
bpo-31756: Добавлен именованный аргумент
subprocess.Popen(text=False)в функцииsubprocess, чтобы явно указать, когда библиотека должна пытаться декодировать вывод в текст. Исправление от Эндрю Клегга.bpo-31819: Добавлен AbstractEventLoop.sock_recv_into().
bpo-31457: Если используются вложенные адаптеры логирования, внутренние методы
process()больше не пропускаются.bpo-31457: Свойство
managerу объектов LoggerAdapter теперь можно корректно устанавливать.bpo-31806: Исправлено округление таймаута в time.sleep(), threading.Lock.acquire() и socket.socket.settimeout() для корректного округления отрицательных таймаутов между -1.0 и 0.0. Функции теперь блокируются в ожидании событий, как и ожидалось. Ранее вызов был некорректно неблокирующим. Патч от Пабло Галиндо.
bpo-31803: time.clock() и time.get_clock_info('clock') теперь выдают предупреждение DeprecationWarning.
bpo-31800: Расширена поддержка разбора смещений UTC. strptime '%z' теперь может разбирать вывод, генерируемый datetime.isoformat, включая секунды и микросекунды.
bpo-28603: traceback: Исправлен TypeError, возникавший при печати трассировок исключений, когда текущее исключение или исключение в цепочке контекста/причины было нехешируемым. Патч от Зейна Биттера.
bpo-30541: Добавлена новая функция для запечатывания mock-объекта и предотвращения автоматического создания дочерних mock-объектов. Патч от Mario Corchero.
bpo-31784: Реализован PEP 564, добавлено шесть новых функций с разрешением в наносекундах в модуль
time:clock_gettime_ns(),clock_settime_ns(),monotonic_ns(),perf_counter_ns(),process_time_ns(),time_ns().bpo-30143: 2to3 теперь генерирует код, использующий абстрактные классы коллекций из collections.abc вместо collections.
bpo-31770: Предотвращение сбоя при вызове метода
__init__()объектаsqlite3.Cursorболее одного раза. Патч от Орена Милмана.bpo-31764: Предотвращение сбоя в
sqlite3.Cursor.close()в случае, если объектCursorне инициализирован. Патч от Орена Милмана.bpo-31752: Исправлен возможный сбой в конструкторе timedelta, вызываемом с пользовательскими целыми числами.
bpo-31620: пустая asyncio.Queue больше не допускает утечку памяти при истечении таймаута опросов queue.get
bpo-31690: Разрешено использование флагов re.ASCII, re.LOCALE и re.UNICODE в качестве групповых флагов для регулярных выражений.
bpo-30349: Теперь выдается FutureWarning, если регулярное выражение содержит конструкции наборов символов, чья семантика изменится в будущем (вложенные наборы и операции над наборами).
bpo-31664: Добавлена поддержка хеширования Blowfish в модуль crypt.
bpo-31632: Исправлен метод set_protocol() класса _SSLProtocolTransport в модуле asyncio. Ранее этот метод изменял неправильную ссылку на протокол.
bpo-15037: Добавлен обходной путь для getkey() в curses для ncurses 5.7 и ранее.
bpo-31307: Разрешено использование байтовых объектов в качестве аргументов для
configparser.ConfigParser.read(). Патч от Vincent Michel.bpo-31334: Исправлен
poll.poll([timeout])в модулеselectдля произвольных отрицательных таймаутов на всех ОС, где он может быть только неотрицательным целым числом или -1. Патч от Риккардо Коччоли.bpo-31310: отслеживатель семафоров multiprocessing должен запускаться снова, если\nпроизошёл сбой.
bpo-31308: сделать процесс forkserver модуля multiprocessing устойчивым к Ctrl-C и\nдругим пользовательским прерываниям. Если он аварийно завершится, перезапускать его при необходимости.
bpo-31245: Добавлена поддержка сокетов AF_UNIX в asyncio
create_datagram_endpoint.bpo-30553: Добавлен код состояния HTTP/2 421 (Misdirected Request) в
http.HTTPStatus. Патч от Vitor Pereira.
Документация¶Documentation
bpo-32105: Добавлен asyncio.BaseEventLoop.connect_accepted_socket\nмаркер versionadded.
Тесты¶Tests
bpo-31380: Пропускать test_httpservers и test_undecodable_file на macOS: завершаются ошибкой на APFS.
bpo-31705: Пропускать test_socket.test_sha256() на ядре Linux старше 4.5.\nТест завершается ошибкой с ENOKEY на ядре 3.10 (на ppc64le). Исправление было включено\nв ядро 4.5.
bpo-32138: Пропускать на Android тесты test_faulthandler, которые вызывают SIGSEGV, и удалить декоратор 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: Пропускать test_get_event_loop_new_process в test.test_asyncio.test_events, если sem_open() не работает.
bpo-31174: Исправлен test_tools.test_unparse: DirectoryTestCase теперь сохраняет\nобразцы имён для того, чтобы всегда тестировать одни и те же файлы. Это предотвращает ложные срабатывания при\nпоиске утечек ссылок.
Сборка¶Build
bpo-28538: Откат предыдущих изменений: структура if_nameindex определяется Unified Headers.
bpo-28762: Откат последнего коммита: макрос F_LOCK определяется Android Unified Headers.
bpo-29040: Поддержка сборки Android с Unified Headers. Первый выпуск NDK, поддерживающий Unified Headers – android-ndk-r14.
bpo-32059:
detect_modules()вsetup.pyтеперь также выполняет поиск\nпутей sysroot при кросс-компиляции.bpo-31957: Исправлено определение версии Windows SDK при сборке для Windows.
bpo-31609: Исправлены кавычки в PCbuild/clean.bat
bpo-31934: Прерывать сборку при сборке из нечистого дерева исходников.
bpo-31926: Исправлена ситуация, когда Argument Clinic иногда вызывал ошибки компиляции, если\nв .c-файле было более одной функции и/или метода с одинаковым\nименем.
bpo-28791: Обновлены сборки Windows для использования SQLite 3.21.0.
bpo-28791: Обновлён установщик OS X для использования SQLite 3.21.0.
bpo-28643: Запись прогресса сборки с profile-opt с помощью stamp-файлов.
bpo-31866: Окончательное удаление поддержки AtheOS.
Windows¶
bpo-1102: Возвращать
Noneв случае, когдаView.Fetch()возвращаетERROR_NO_MORE_ITEMSвместо возбужденияMSIError. Первоначальный патч от Anthony Tuininga.bpo-31944: Исправлена кнопка «Изменить» в диалоге «Приложения и возможности».
bpo-20486: Реализован метод
Database.Close()для помощи в закрытии объектов базы данных MSI.bpo-31857: Сделать поведение USE_STACKCHECK детерминированным в многопоточной среде.
macOS¶
bpo-31392: Обновлён установщик macOS для использования OpenSSL 1.0.2m
IDLE¶
bpo-32207: Улучшена трассировка исключений событий tk в IDLE. Когда обработка событий tk\nуправляется циклом выполнения IDLE, к трассировке исключений событий tk больше не добавляется\nсбивающий с толку и отвлекающий контекст трассировки queue.EMPTY.\nТеперь трассировка такая же, как когда обработка событий\nуправляется пользовательским кодом. Патч основан на предложении Serhiy Storchaka.
bpo-32164: Удалён неиспользуемый файл idlelib/tabbedpages.py. Использование TabbedPageSet\nв configdialog заменено на ttk.Notebook.
bpo-32100: IDLE: Исправлены старые и новые ошибки в pathbrowser; улучшены тесты. Патч\nв основном от Cheryl Sabella.
bpo-31858: IDLE – ограничить манипуляции с приглашением оболочки только самой оболочкой. Редактор\nи окна вывода видят только пустую последнюю строку приглашения. Это упрощает\nкод и исправляет незначительную ошибку при вставке перевода строки. Sys.ps1, если\nприсутствует, считывается при запуске оболочки, но не устанавливается и не изменяется.
bpo-31860: Образец шрифта в диалоге настройки IDLE теперь можно редактировать.\nИзменения сохраняются, пока IDLE открыт.
bpo-31836: Test_code_module теперь проходит, если запущен после test_idle, который устанавливает ps1. Модуль code использует sys.ps1, если он присутствует, или устанавливает его в ‘>>> ‘, если нет. Test_code_module теперь корректно проверяет оба поведения. Аналогично для ps2.
bpo-28603: Исправлен TypeError, вызывавший перезапуск оболочки при выводе трассировки, содержащей исключение, которое не является хешируемым. Патч от Zane Bitter.
bpo-13802: Использование нелатинских символов в образце шрифта IDLE. Даже если выбрать шрифт, который определяет ограниченное подмножество unicode Basic Multilingual Plane, tcl/tk будет использовать другие шрифты, которые определяют символ. Расширенный пример даёт пользователям нелатинских символов лучшее представление о том, что они могут увидеть в оболочке и редакторах IDLE. Чтобы освободить место для расширенного образца, рамки на вкладке Font переставлены. Справка Font/Tabs немного объясняет о дополнениях.
Инструменты/Демонстрации¶Tools/Demos
bpo-32159: Удаление инструментов CVS и Subversion: удалены скрипты svneol.py и treesync.py. CPython мигрировал с CVS на Subversion, затем на Mercurial, а затем на Git. CVS и Subversion больше не используются для разработки CPython.
bpo-30722: Сделать redemo работающим с Python 3.6 и новее. Также удалить опцию
LOCALE, поскольку она не работает со строковыми шаблонами в Python 3. Патч от Christoph Sarnowski.
C API¶
bpo-20891: Исправление PyGILState_Ensure(). Когда PyGILState_Ensure() вызывается в потоке, не являющемся Python, до вызова PyEval_InitThreads(), вызывать PyEval_InitThreads() только после вызова PyThreadState_New() для предотвращения аварийного завершения.
bpo-32125: Флаг
Py_UseClassExceptionsFlagудален. Он был устаревшим и не использовался начиная с Python 2.0.bpo-25612: Текущее состояние исключения перенесено из объекта фрейма в корутину. Это упрощает интерпретатор и устраняет ряд трудноуловимых ошибок, вызванных переключением состояния исключения при входе в генератор или выходе из него.
bpo-23699: Добавлен макрос Py_RETURN_RICHCOMPARE для уменьшения шаблонного кода в функциях полного сравнения.
bpo-30697: Синглтон
PyExc_RecursionErrorInstудален, иPyErr_NormalizeException()больше его не использует. Этот синглтон является постоянным, и его элементы никогда не очищаются, что может вызвать segfault во время финализации интерпретатора. Смотрите также bpo-22898.
Python 3.7.0 альфа 2¶Python 3.7.0 alpha 2
Дата выпуска: 2017-10-16
Ядро и встроенные модули¶Core and Builtins
bpo-31558:
gc.freeze()– новый API, позволяющий перемещать все объекты, отслеживаемые сборщиком мусора, в постоянное поколение, фактически исключая их из будущих сборок. Это можно использовать для защиты этих объектов от изменения их PyGC_Head. В результате достигается высокая стабильность copy-on-write при fork().bpo-31642: Восстановлена блокировка при импорте "from package import module" путем установки sys.modules["package.module"] в None.
bpo-31708: Разрешено использование асинхронных генераторных выражений в синхронных функциях.
bpo-31709: Прекращена поддержка асинхронного __aiter__.
bpo-30404: Параметр -u теперь делает потоки stdout и stderr небуферизованными, а не буферизованными по строкам.
bpo-31619: Исправлен ValueError при преобразовании строки с большим количеством символов подчеркивания в целое число с двоичным основанием.
bpo-31602: Исправлена ошибка утверждения в
zipimporter.get_source()в случае некорректногоzlib.decompress(). Патч от Oren Milman.bpo-31592: Исправлен сбой утверждения в парсере Python в случае некорректного
unicodedata.normalize(). Патч от Oren Milman.bpo-31588: Возвращается
TypeErrorс понятным сообщением об ошибке, когда создание класса завершается неудачей из-за метакласса с некорректным методом__prepare__(). Патч от Oren Milman.bpo-31574: В importlib добавлены две точки инструментирования dtrace для профилирования времени импорта.
bpo-31566: Исправлена ошибка утверждения в
_warnings.warn()при некорректной глобальной переменной__name__. Патч от Oren Milman.bpo-31506: Улучшена логика сообщений об ошибках для object.__new__ и object.__init__.
bpo-31505: Исправлена ошибка утверждения в
json, если_json.make_encoder()получил некорректный аргументencoder(). Патч от 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: Оптимизирован вызов дескрипторов wrapper и classmethod.
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: Исправлен сбой в методе
__setstate__()классаctypes._CDataв случае некорректного__dict__. Патч от Oren Milman.bpo-31293: Исправлены сбои при истинном делении и умножении объекта timedelta на число с плавающей запятой с некорректным методом as_integer_ratio(). Патч от Oren Milman.
bpo-31285: Исправлена ошибка утверждения в
warnings.warn_explicit, когда возвращаемое значение get_source() полученного загрузчика имеет некорректный метод splitlines(). Патч от Oren Milman.bpo-30406: Make
asyncandawaitproper keywords, as specified in PEP 492.
Библиотека¶Library
bpo-30058: Исправлено переполнение буфера в select.kqueue.control().
bpo-31672:
idpatternвstring.Templateсопоставлялся с некоторыми не-ASCII символами. Теперь используется локальный флаг регулярного выражения-iдля избежания не-ASCII символов.bpo-31701: На Windows faulthandler.enable() теперь игнорирует исключения MSC и COM.
bpo-31728: Предотвращение сбоев в
_elementtreeиз-за небезопасной очисткиElement.textиElement.tail. Патч от Орена Милмана.bpo-31671: Теперь
re.compile()преобразует переданный RegexFlag в обычный целочисленный объект перед компиляцией. Бенчмарк bm_regex_compile показывает улучшение производительности на 14%.bpo-30397: Типы скомпилированных регулярных объектов и объектов сопоставления теперь представлены как
re.Patternиre.Match. Это добавляет информацию в выводе pydoc для модуля re.bpo-31675: Исправлены утечки памяти в методах Tkinter splitlist() и split() при передаче строки размером более 2 ГБ.
bpo-31673: Исправлена опечатка в названии метода Tkinter adderrorinfo().
bpo-31648: Улучшения предикатов пути в ElementTree: разрешены пробелы вокруг частей предиката, например ⟦a = 'text'⟧ вместо менее читаемого ⟦a='text'⟧. Добавлена поддержка сравнения текста текущего узла, например ⟦.='text'⟧. Патч от Stefan Behnel.
bpo-30806: Исправлено строковое представление объекта netrc.
bpo-31638: Добавлен необязательный аргумент
compressedвzipapp.create_archiveи опция--compressв интерфейс командной строкиzipapp.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: Future, ожидаемая asyncio.wait_for, отменяется быстрее, если timeout <= 0.
bpo-31540: В конструктор
concurrent.futures.ProcessPoolExecutorразрешена передача объекта контекста. Также ресурсы заданий (job) освобождаются вconcurrent.futures.ProcessPoolExecutorраньше, чтобы улучшить использование памяти, когда рабочий процесс ожидает новые задания.bpo-31516:
threading.current_thread()не должен возвращать фиктивный поток при завершении работы.bpo-31525: В модуле sqlite теперь требуется API sqlite3_prepare_v2. Таким образом, для модуля sqlite теперь требуется SQLite версии не ниже 3.3.9.
bpo-26510: Подпарсеры argparse теперь обязательны по умолчанию. Это соответствует поведению в Python 2. Для необязательных подпарсеров используйте новый параметр
add_subparsers(required=False). Патч от Anthony Sottile. (Начиная с 3.7.0rc1 значение по умолчанию было изменено на «не обязательный», как было в Python 3.3.)bpo-27541: repr-представления подклассов некоторых классов коллекций и итераторов (
bytearray,array.array,collections.deque,collections.defaultdict,itertools.count,itertools.repeat) теперь содержат фактическое имя типа вместо жёстко заданного имени базового класса.bpo-31351: python -m ensurepip теперь завершается с ненулевым кодом возврата, если начальная загрузка pip завершилась неудачно.
bpo-31389:
pdb.set_trace()теперь принимает необязательный аргумент только по ключевому словуheader. Если он передан, он выводится на консоль перед началом отладки.
Документация¶Documentation
Сборка¶Build
bpo-31696: Улучшена информация о версии компилятора в
sys.versionпри сборке Python с помощью Clang.bpo-31625: Прекращено использование ranlib для статических библиотек. Вместо этого предполагается, что ar поддерживает флаг 's'.
bpo-31624: Удалена поддержка BSD/OS.
bpo-22140: Предотвращена двойная подстановка префикса в python-config.sh.
bpo-31569: Исправлен регистр PCBuild/ на PCbuild/ в сценариях сборки и документации.
bpo-31536: Избегать полной пересборки после
make regen-all, если ничего не\nизменилось.
IDLE¶
bpo-31460: Упрощение API браузера модулей IDLE. Передача виджета вместо flist с корневым виджетом открывает возможность создания фрейма браузера, который является только частью окна. Передача полного имени файла вместо частей, предполагаемых из файла .py, открывает возможность просмотра файлов python, которые не заканчиваются на .py.
bpo-31649: IDLE – сделать параметры _htest, _utest только именованными.
bpo-31559: Устранение зависимости от порядка тестов в idle_test.test_browser.
bpo-31459: Переименование браузера модулей IDLE из Class Browser в Module Browser. Исходный браузер классов и методов на уровне модуля стал браузером модулей с добавлением функций уровня модуля много лет назад. Вложенные классы и функции были добавлены вчера. Для обратной совместимости виртуальное событие <<open-class-browser>>, которое появляется на вкладке Keys диалога Settings, не изменено. Патч от Cheryl Sabella.
bpo-31500: Шрифты по умолчанию теперь масштабируются на дисплеях HiDPI.
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: Реализован PEP 539 для API потоково-специфического хранилища (TSS): это новый API для потоково-локального хранилища (TLS) в CPython, который заменит использование существующего TLS API в интерпретаторе CPython, при этом объявляя существующий API устаревшим. PEP написан Эриком М. Бреем, патч от Масаюки Ямамото.
Python 3.7.0 альфа 1¶Python 3.7.0 alpha 1
Дата выпуска: 2017-09-19
Безопасность¶Security
bpo-29781: SSLObject.version() теперь корректно возвращает None, когда квитирование через BIO еще не было выполнено.
bpo-29505: Добавлены fuzz-тесты для float(str), int(str), unicode(str); для oss-fuzz.
bpo-30947: Встроенная копия libexpat обновлена с версии 2.2.1 до 2.2.3 для получения исправлений безопасности.
bpo-30730: Предотвращено внедрение переменных окружения в подпроцессе на Windows. Предотвращена передача других переменных окружения и аргументов командной строки.
bpo-30694: Обновление копии expat с версии 2.2.0 до 2.2.1 для исправления множества уязвимостей, включая: CVE-2017-9233 (бесконечный цикл отказа в обслуживании внешних сущностей), CVE-2016-9063 (целочисленное переполнение, повторное исправление), CVE-2016-0718 (исправление регрессий, вызванных исправлением CVE-2016-0718 в версии 2.2.0) и CVE-2012-0876 (противодействие хеш-флудингу с помощью SipHash). Примечание: уязвимость CVE-2016-5300 (использование специфичных для ОС источников энтропии, таких как getrandom) не затрагивает Python, поскольку Python уже получает энтропию от ОС для установки секрета expat через
XML_SetHashSalt().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/.
Ядро и встроенные модули¶Core and Builtins
bpo-31490: Исправлена ошибка утверждения в определении класса
ctypes, если класс имеет атрибут, имя которого указано в_anonymous_, но не в_fields_. Патч от Oren Milman.bpo-31471: Исправлена ошибка утверждения в
subprocess.Popen()на Windows, если аргумент 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: Переход на абстрактный API при работе с
PyInterpreterState.modules. Это позволяет в дальнейшем поддерживать все подклассы dict и другие реализации Mapping. Также добавлена функцияPyImport_GetModule()для сокращения дублирующегося кода.bpo-31411: Вызывать TypeError вместо SystemError в случае, если warnings.onceregistry не является словарем. Патч от Oren Milman.
bpo-31344: Для более точного управления трассировкой при тестировании интерпретатора добавлены два новых атрибута фрейма для контроля генерации определённых событий трассировки:
f_trace_lines(Trueпо умолчанию) для отключения построчных событий трассировки; иf_trace_opcodes(Falseпо умолчанию) для включения событий трассировки по опкодам.bpo-31373: Исправлено несколько возможных случаев неопределённого поведения из-за понижения точности чисел с плавающей запятой.
bpo-30465: Информация о расположении (
linenoиcol_offset) в f-строках теперь (почти) корректна. Это исправляет такие инструменты, как flake8, которые показывали предупреждения не на той строке (обычно на первой строке файла).bpo-30860: Консолидация глобального состояния среды выполнения CPython в одной структуре. Это улучшает обнаруживаемость состояния среды выполнения.
bpo-31347: Исправлено возможное неопределённое поведение в _PyObject_FastCall_Prepend.
bpo-31343: добавлено включение sys/sysmacros.h для функций major(), minor() и makedev(). Библиотека GNU C планирует удалить эти функции из sys/types.h.
bpo-31291: Исправлена ошибка утверждения в
zipimport.zipimporter.get_dataна Windows, когда возвращаемое значениеpathname.replace('/','\\')не является строкой. Патч от Oren Milman.bpo-31271: Исправлена ошибка утверждения в методе write() объекта
io.TextIOWrapper, когда кодировщик не возвращает объект bytes. Патч от Oren Milman.bpo-31243: Исправлен сбой в некоторых методах
io.TextIOWrapper, когда состояние декодера недействительно. Патч от Орен Милмана.bpo-30721:
printтеперь показывает правильную подсказку для использования синтаксиса перенаправления вывода в Python 2. Патч от Саньяма Хураны.bpo-31070: Исправлено состояние гонки в importlib _get_module_lock().
bpo-30747: Добавлена нефиктивная реализация _Py_atomic_store и _Py_atomic_load для MSVC.
bpo-31095: Исправлен потенциальный сбой во время сборки мусора, вызванный
tp_dealloc, который не вызываетPyObject_GC_UnTrack().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: Избегание блокировки в pthread_mutex_lock(), когда PyThread_acquire_lock() запрашивается без блокировки.
bpo-31161: Обеспечено, что сообщение об ошибке синтаксиса «Missing parentheses» применяется только к SyntaxError, а не к подклассам. Патч от Мартейна Питерса.
bpo-30814: Исправлено состояние гонки при импорте подмодуля из пакета.
bpo-30736: Внутренняя база данных unicodedata обновлена до Unicode 10.0.
bpo-30604: Перемещение co_extra_freefuncs из расчёта на поток в расчёт на интерпретатор для избежания сбоев.
bpo-30597:
printтеперь показывает ожидаемый ввод в пользовательском сообщении об ошибке при использовании в качестве оператора Python 2. Патч от Саньяма Хураны.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__), в качестве аргументов start, stop и slice.
bpo-25324: Токены, необходимые для синтаксического анализа в Python, перенесены в C.
COMMENT,NLиENCODING. Теперь токены и tok_names в модуле token не изменяются при импорте модуля tokenize.bpo-29104: Исправлен парсинг обратных слешей в f-строках.
bpo-27945: Исправлены различные ошибки сегментации со словарём при изменении входных коллекций во время поиска, вставки или сравнения. Основано на исправлениях от Duane Griffin и Tim Mitchell.
bpo-25794: Исправлены type.__setattr__() и type.__delattr__() для неинтернированных имён атрибутов. Основано на патче от Eryk Sun.
bpo-30039: Если KeyboardInterrupt возникает в момент, когда интерпретатор находится в процессе возобновления цепочки вложенных вызовов 'yield from' или 'await', исключение теперь корректно доставляется во внутренний фрейм.
bpo-28974:
object.__format__(x, '')теперь эквивалентноstr(x), а неformat(str(self), '').bpo-30024: Теперь поддерживаются циклические импорты, включающие абсолютные импорты с привязкой подмодуля к имени.
bpo-12414: sys.getsizeof() для объекта code теперь возвращает размеры, включающие структуру code и размеры объектов, на которые он ссылается. Патч от Dong-hee Na.
bpo-29839: len() теперь возбуждает ValueError вместо OverflowError, если __len__() вернула большое отрицательное целое число.
bpo-11913: README.rst теперь включён в список стандартных README distutils и, следовательно, включается в дистрибутивы исходного кода.
bpo-29914: Исправлены реализации по умолчанию __reduce__ и __reduce_ex__(). object.__reduce__() больше не принимает аргументы, object.__reduce_ex__() теперь требует один аргумент.
bpo-29949: Исправлена регрессия использования памяти для объектов set и frozenset.
bpo-29935: Исправлены сообщения об ошибках в методе index() кортежа, списка и deque при передаче индексов неверного типа.
bpo-29816: Операция сдвига теперь реже вызывает OverflowError. Для отрицательных значений счётчика всегда возбуждается ValueError вместо OverflowError. Сдвиг нуля на неотрицательное значение всегда возвращает ноль.
bpo-24821: Исправлено замедление до 25 раз при поиске некоторых «неудачных» символов Unicode.
bpo-29102: Добавлен уникальный идентификатор в PyInterpreterState. Это упрощает идентификацию каждого подынтерпретатора.
bpo-29894: Предупреждение об устаревании выдаётся, если __complex__ возвращает экземпляр строгого подкласса complex. В будущих версиях Python это может стать ошибкой.
bpo-29859: Показываются корректные сообщения об ошибках при сбое любого из вызовов pthread_* в thread_pthread.h.
bpo-29849: Исправлена утечка памяти при возбуждении ImportError во время конструкции from import.
bpo-28856: Исправлена недоработка: формат %b для bytes должен поддерживать объекты, следующие протоколу буфера.
bpo-29723: Изменение инициализации
sys.path[0]для bpo-29139 вызвало регрессию, выявив несоответствие в том, как инициализируется sys.path при выполнении__main__из zip-файла, каталога или другого места импорта. Интерпретатор теперь последовательно избегает добавления родительского каталога места импорта вsys.path, и гарантирует, что никакие другие записиsys.pathне изменяются непреднамеренно при вставке места импорта, указанного в командной строке.bpo-29568: Экранированный процент “%%” в строке форматирования для классического форматирования строк больше не допускает никаких символов между двумя процентами.
bpo-29714: Исправлена регрессия: форматирование bytes могло завершаться ошибкой при наличии нулевых байтов внутри.
bpo-29695: bool(), float(), list() и tuple() больше не принимают именованные аргументы. Первый аргумент int() теперь может передаваться только как позиционный.
bpo-28893: Установка правильного __cause__ для ошибок о недопустимых ожидаемых объектах, возвращаемых из __aiter__ и __anext__.
bpo-28876:
bool(range)работает, даже еслиlen(range)вызываетOverflowError.bpo-29683: Исправления выделения памяти в _PyCode_SetExtra. Патч от Brian Coleman.
bpo-29684: Исправление незначительной регрессии PyEval_CallObjectWithKeywords. Должен вызывать TypeError, если kwargs не является dict. Но мог приводить к сбою сегментации при args=NULL и kwargs не является dict.
bpo-28598: Поддержка вызова __rmod__ для подклассов str перед str.__mod__. Патч от Martijn Pieters.
bpo-29607: Исправление вычисления stack_effect для CALL_FUNCTION_EX. Патч от Matthieu Dartiailh.
bpo-29602: Исправлена некорректная обработка знаковых нулей в конструкторе complex для подклассов complex и для входных данных, имеющих метод __complex__. Патч от Serhiy Storchaka.
bpo-29347: Исправлено возможное разыменование неопределённых указателей при создании объектов weakref.
bpo-29463: Добавлено поле
docstringв узлы AST Module, ClassDef, FunctionDef и AsyncFunctionDef. Теперь docstring не является первым оператором в их теле. Это влияет наco_firstlinenoиco_lnotabобъекта кода для модуля и класса. (Отменено в bpo-32911.)bpo-29438: Исправлена проблема use-after-free (использование после освобождения) в словаре совместного использования ключей (key sharing dict).
bpo-29546: Установлены атрибуты ‘path’ и ‘name’ для ImportError для
from ... import ....bpo-29546: Улучшено сообщение об ошибке для from-import с указанием местоположения.
bpo-29478: Если указано max_line_length=None при использовании политики Compat32, этот параметр больше не игнорируется. Патч от Mircea Cosbuc.
bpo-29319: Предотвращение перезаписи sys.path[0] функцией RunMainFromImporter.
bpo-29337: Исправлено возможное BytesWarning при сравнении объектов кода. Предупреждения могли выдаваться во время компиляции.
bpo-29327: Исправлено падение при передаче итерируемого именованного аргумента в sorted().
bpo-29034: Исправлена утечка памяти и use-after-free в модуле os (path_converter).
bpo-29159: Исправлена регрессия в bytes(x), когда x.__index__() вызывает исключение.
bpo-29049: Вызов _PyObject_GC_TRACK() теперь происходит отложенно (лениво) при вызове функции Python. Вызов функции стал до 5% быстрее.
bpo-28927: bytes.fromhex() и bytearray.fromhex() теперь игнорируют все пробельные символы ASCII, а не только пробелы. Патч от Robert Xiao.
bpo-28932: Не включать <sys/random.h>, если его не существует.
bpo-25677: Исправление позиционирования каретки синтаксической ошибки для блоков с отступами. Основано на патче Майкла Лейзелла.
bpo-29000: Исправлено форматирование байтов восьмеричных чисел с нулевым заполнением в альтернативной форме.
bpo-18896: Функция Python теперь может иметь более 255 параметров. collections.namedtuple() теперь поддерживает кортежи с более чем 255 элементами.
bpo-28596: На Android предпочтительной кодировкой является UTF-8. Патч написан Chi Hsuan Yen.
bpo-26919: На Android системные данные теперь всегда кодируются/декодируются в/из UTF-8, а не в кодировке локали, чтобы избежать несоответствий с os.fsencode() и os.fsdecode(), которые уже используют UTF-8.
bpo-28991: functools.lru_cache() была подвержена трудновоспроизводимой ошибке реентерабельности, возникающей из-за модифицированной функции len().
bpo-28147: Исправлена утечка памяти в split-table словарях: setattr() не должен преобразовывать комбинированную таблицу в split-таблицу. Патч написан INADA Naoki.
bpo-28739: f-строковые выражения больше не принимаются в качестве докстрингов и функцией ast.literal_eval(), даже если они не содержат выражений.
bpo-28512: Исправлена установка атрибута offset у SyntaxError функциями PyErr_SyntaxLocationEx() и PyErr_SyntaxLocationObject().
bpo-28918: Исправлена кросс-компиляция xxlimited, когда Python был собран с определённым Py_DEBUG.
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: Исправлена позиция ошибки Unicode в кодировщиках ASCII и Latin1, когда строка, возвращаемая обработчиком ошибок, содержит несколько не кодируемых символов (не-ASCII для кодека ASCII, символы вне диапазона U+0000-U+00FF для Latin1).
bpo-28731: Оптимизирован _PyDict_NewPresized() для создания словаря правильного размера. Увеличена скорость словарного литерала с константными ключами до 30%.
bpo-28532: Показывать sys.version при двукратном указании флага -V.
bpo-27100: Оператор with теперь сначала проверяет __enter__, а затем __exit__. Это даёт менее запутанные сообщения об ошибках, если оба метода отсутствуют. Патч от Джонатана Эллингтона.
bpo-28746: Исправлен метод файлового дескриптора set_inheritable() на платформах, не имеющих команд ioctl FIOCLEX и FIONCLEX.
bpo-26920: Исправлена проблема получения кодировки локали при инициализации интерпретатора на платформах без langinfo.
bpo-28648: Исправлен сбой в Py_DecodeLocale() в отладочной сборке на Mac OS X при декодировании астральных символов. Патч от Xiang Zhang.
bpo-28665: Увеличена производительность байткода STORE_DEREF на 40%.
bpo-19398: Лишний слеш больше не добавляется к компонентам sys.path в случае пустых компонентов PYTHONPATH во время компиляции.
bpo-28621: Ускорено преобразование int в float за счёт повторного использования более быстрой реализации подсчёта битов. Патч от Adrian Wielgosik.
bpo-28580: Оптимизирован обход значений разделённых таблиц. Патч от Xiang Zhang.
bpo-28583: PyDict_SetDefault не объединял split-таблицу при необходимости. Патч от Xiang Zhang.
bpo-28128: Предупреждение об устаревании для недопустимых escape-последовательностей в str и byte теперь выводит более точную информацию о месте ошибки. Патч от Serhiy Storchaka и Eric Smith.
bpo-28509: dict.update() больше не выделяет излишне много памяти.
bpo-28426: Исправлен потенциальный сбой в PyUnicode_AsDecodedObject() в отладочной сборке.
bpo-28517: Исправлена ошибка «off-by-one» в peephole-оптимизаторе, из-за которой сохранялся недостижимый код.
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() для экземпляра range. Патч от 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: Запасной вариант – чтение устройства /dev/urandom, если системный вызов getrandom() завершается с EPERM, например, при блокировке SECCOMP.
bpo-28192: Не импортировать readline в изолированном режиме.
bpo-27441: Удалены некоторые избыточные присваивания ob_size в longobject.c. Спасибо Oren Milman.
bpo-27222: Очистка избыточного кода в функции long_rshift. Спасибо Oren Milman.
Обновление внутренних баз данных Unicode до версии 9.0.0.
bpo-28131: Исправлена регрессия в zipimport.compile_source(). zipimport должен использовать тот же уровень оптимизации, что и интерпретатор.
bpo-28126: Замена Py_MEMCPY на memcpy(). Visual Studio может корректно оптимизировать memcpy().
bpo-28120: исправлен dict.pop() для разделённого словаря при попытке удалить «ожидающий ключ» (ещё не вставленный в разделённую таблицу). Исправление от Xiang Zhang.
bpo-26182: Выдаётся DeprecationWarning, когда ключевые слова async и await используются в качестве имени переменной/атрибута/класса/функции.
bpo-26182: Исправлена утечка ссылок в коде, который вызывает DeprecationWarning.
bpo-28721: Исправлена обработка распространения StopAsyncIteration в асинхронных генераторах aclose() и athrow().
bpo-26110: Ускорение вызовов методов: добавлены коды операций LOAD_METHOD и CALL_METHOD.
Библиотека¶Library
bpo-31499: xml.etree: Исправлен сбой, когда парсер является частью цикла ссылок.
bpo-31482:
random.seed()теперь работает с bytes в version=1bpo-28556: typing.get_type_hints теперь находит правильное пространство имён globalns для классов и модулей по умолчанию (когда вызывающий не указал
globalns).bpo-28556: Ускорение модуля
typing. Оригинальные PR от Ивана Левкивского и Митяра.bpo-31544: Модуль-ускоритель C в ElementTree игнорировал исключения, возникающие при поиске целевых методов TreeBuilder в XMLParser().
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: Модуль SSL теперь вызывает SSLCertVerificationError, когда OpenSSL не может проверить сертификат однорангового узла. Исключение содержит больше информации об ошибке.
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 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: Итераторы
map()иas_completed()вconcurrent.futuresтеперь не сохраняют ссылку на возвращаемые объекты.bpo-31281: Исправлена
fileinput.FileInput(files, inplace=True)при наличииpathlib.Path-объектов вfiles.bpo-10746: Исправлена ошибка ctypes, приводящая к неправильным кодам типов PEP 3118 для целочисленных типов.
bpo-27584: В интерфейс сокетов добавлен
AF_VSOCK, позволяющий обмениваться данными между виртуальными машинами и их хостом.bpo-22536: Модуль подпроцесс теперь устанавливает имя файла при возникновении FileNotFoundError на системах POSIX, если не найден исполняемый файл или рабочая директория (cwd).
bpo-29741: Обновлены некоторые методы модуля _pyio, чтобы они также принимали целочисленные типы. Патч от Oren Milman.
bpo-31249: concurrent.futures: метод WorkItem.run(), используемый ThreadPoolExecutor, теперь разрывает циклическую ссылку между объектом исключения и объектом WorkItem.
bpo-31247: xmlrpc.server теперь явно разрывает циклические ссылки при использовании sys.exc_info() в коде обработки исключений.
bpo-23835: configparser: чтение значений по умолчанию в конструкторе
ConfigParser()теперь используетread_dict(), что делает его поведение согласованным с остальным парсером. Нестроковые ключи и значения в словаре defaults теперь неявно преобразуются в строки. Патч от James Tocknell.bpo-31238: pydoc: метод stop() приватного класса ServerThread теперь ожидает завершения DocServer.serve_until_quit(), после чего явно устанавливает атрибут docserver в None для разрыва цикла ссылок.
bpo-5001: Многие утверждения в
multiprocessingтеперь более информативны, а некоторые типы ошибок заменены на более специфичные.bpo-31109: Модуль zipimport переведён на использование Argument Clinic.
bpo-30102: Модули ssl и hashlib теперь вызывают OPENSSL_add_all_algorithms_noconf() для OpenSSL версии ниже 1.1.0. Эта функция определяет возможности процессора и включает оптимизации на некоторых архитектурах, таких как POWER8. Патч основан на исследовании Густаво Серры Скалета.
bpo-18966: Не-демонические потоки, созданные multiprocessing.Process, теперь ожидаются при завершении дочернего процесса.
bpo-31183:
disтеперь работает с асинхронными генераторами и объектами корутин. Патч от George Collins на основе диагностики Luciano Ramalho.bpo-5001: В модуле
multiprocessingесть несколько неинформативных утверждений, как отмечено в запросе 5001. Это изменение исправляет два из них, наиболее потенциально проблемных, так как они находятся в коде сообщения об ошибках, в функцииmultiprocessing.managers.convert_to_error. (Оно также делает более информативным сообщение ValueError.) Единственное потенциально проблемное изменение – AssertionError теперь заменён на TypeError; однако это должно также помочь отличить его от AssertionError, сообщённого функцией или её вызывающей стороной (например, в запросе 31169). – Патч от Allen W. Smith (drallensmith на github).bpo-31185: Исправлены различные ошибки в модуле ускорения asyncio.
bpo-31151: socketserver.ForkingMixIn.server_close() теперь ожидает завершения всех дочерних процессов, чтобы избежать утечки процессов-зомби.
bpo-31072: Добавлен параметр
include_fileвzipapp.create_archive()bpo-24700: Оптимизация сравнения array.array. Теперь оно выполняется от 10 до 70 раз быстрее при сравнении массивов, содержащих значения одного целочисленного типа.
bpo-31135: ttk: исправлен метод destroy() классов LabeledScale и OptionMenu. Теперь вызывается родительский метод destroy(), даже если используемый атрибут не существует. Метод LabeledScale.destroy() также теперь явно очищает атрибуты label и scale, чтобы помочь сборщику мусора уничтожить все виджеты.
bpo-31107: Исправлено вычисление искажённого атрибута
copyreg._slotnames()для классов, имя которых начинается с подчёркивания. Патч от Шейна Харви.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: Добавлена поддержка протокола CAN ISO-TP в модуль socket.
bpo-30522: Добавлен метод
setStreamвlogging.StreamHandler, позволяющий задать поток данных после создания.bpo-30502: Исправлена обработка длинных OID в ssl. На основе патча Кристиана Хаймса.
bpo-5288: Поддержка объектов tzinfo со смещениями меньше минуты.
bpo-30919: Исправлено снижение производительности разделяемой памяти в multiprocessing в 3.x. В 2.x разделяемая память использовала анонимные отображения памяти, а в 3.x – отображения реальных файлов. Постарались минимизировать дисковый ввод-вывод.
bpo-26732: Исправлена проблема с избыточным количеством файловых дескрипторов в процессах, запущенных методом «forkserver». Дочерний процесс наследовал столько же дескрипторов, сколько было работающих дочерних процессов.
bpo-29403: Исправлена автоматическая спецификация (autospec)
unittest.mock, чтобы она не выдавала ошибку на методах, привязанных к встроенным функциям. Патч от Aaron Gallagher.bpo-30961: Исправлено уменьшение счётчика заимствованной ссылки (borrowed reference) в tracemalloc.
bpo-19896: Исправлено распознавание кодов типов
'q'и'Q'в multiprocessing.sharedctypes.bpo-30946: Удалён устаревший код в модуле readline для платформ, где GNU readline старше 2.1 или недоступна функция select().
bpo-25684: Изменены
ttk.OptionMenuрадиокнопки так, чтобы они были уникальными для всех экземпляровOptionMenu.bpo-30886: Исправлена multiprocessing.Queue.join_thread(): теперь она ждёт завершения потока, даже если поток был запущен тем же процессом, который создал очередь.
bpo-29854: Исправлено падение (segfault) в readline при использовании опции history-size библиотеки readline. Патч от Nir Soffer.
bpo-30794: Добавлен метод multiprocessing.Process.kill для завершения процесса сигналом SIGKILL в Unix.
bpo-30319: socket.close() теперь игнорирует ошибку ECONNRESET.
bpo-30828: Исправлена запись за границы в
asyncio.CFuture.remove_done_callback().bpo-30302: Использование ключевых слов в
reprизdatetime.timedelta.bpo-30807: signal.setitimer() может отключать таймер при передаче очень малого значения. Очень малые значения (например, 1e-6) являются допустимыми ненулевыми значениями для setitimer(), который, как указано, принимает интервалы с микросекундным разрешением. Однако на некоторых платформах наша процедура преобразования могла преобразовать 1e-6 в нулевой интервал, тем самым отключая таймер вместо его (пере)планирования.
bpo-30441: Исправлена ошибка при изменении os.environ во время итерации по нему.
bpo-29585: Избегание импорта
sysconfigизsiteдля ускорения запуска. Запуск Python стал быстрее примерно на 5% в Linux и на 30% в macOS.bpo-29293: Добавлен отсутствующий параметр «n» в multiprocessing.Condition.notify(). Документация утверждает, что multiprocessing.Condition ведёт себя как threading.Condition, но в его методе notify() не было опционального аргумента «n» (для указания количества пробуждаемых ожидающих), который принимает threading.Condition.notify().
bpo-30532: Исправлен парсер значений заголовков email, который в определённых случаях удалял сворачиваемые пробельные символы (folding white space).
bpo-30596: Добавлен метод
close()вmultiprocessing.Process.bpo-9146: Исправлено нарушение сегментации в _hashopenssl, когда в подключённой библиотеке OpenSSL недоступны стандартные хэш-функции, такие как md5. Например, в некоторых специальных средах сборки FIPS-140.
bpo-29169: Обновление zlib до версии 1.2.11.
bpo-30119: ftplib.FTP.putline() теперь выбрасывает ValueError для команд, содержащих CR или LF. Исправление от Dong-hee Na.
bpo-30879: os.listdir() и os.scandir() теперь возвращают имена в виде байтов, если были вызваны с аргументом, подобным байтам (bytes-like).
bpo-30746: Запрещён символ ‘=’ в именах переменных окружения в
os.putenv()иos.spawn*().bpo-30664: Описание подтеста unittest теперь сохраняет порядок именованных аргументов TestCase.subTest().
bpo-21071: Тип struct.Struct.format теперь
strвместоbytes.bpo-29212: Исправлена работа потоков ThreadPoolExecutor из concurrent.futures.thread: теперь по умолчанию, если не указан thread_name_prefix, имена потоков не основаны на repr(). Потоки теперь идентифицируют себя как «ThreadPoolExecutor-y_n».
bpo-29755: Исправлено семейство функций lgettext() в модуле gettext. Теперь они всегда возвращают байты.
bpo-30616: Функциональный API перечисления (enum) позволяет создавать пустые перечисления. Исправление от Dong-hee Na
bpo-30038: Исправлено состояние гонки между доставкой сигнала и файловым дескриптором пробуждения. Патч от Nathaniel Smith.
bpo-23894: lib2to3 теперь распознаёт строки
rb'...'иf'...'.bpo-24744: функция pkgutil.walk_packages теперь вызывает ValueError, если path является строкой. Патч от Sanyam Khurana.
bpo-24484: Избежание состояния гонки (race condition) при очистке в multiprocessing.
bpo-30589: Исправлено multiprocessing.Process.exitcode – теперь при завершении процесса сигналом возвращается противоположное значение номера сигнала (вместо 255) при использовании метода “forkserver”.
bpo-28994: Трассировка (traceback) больше не отображается для SystemExit, возникшего в колбэке, зарегистрированном через atexit.
bpo-30508: Не логировать исключения при вызове метода “cancel()” задачи/future.
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: добавлен generic AsyncContextManager, добавлена поддержка ContextManager для всех версий. Оригинальные PR от Jelle Zijlstra и Ivan Levkivskyi.
bpo-30605: re.compile() больше не вызывает BytesWarning при компиляции экземпляра bytes с неправильно расположенным модификатором внутри строки. Патч от Roy Williams.
bpo-29870: Исправлена утечка SSL-сокетов при прерывании соединения в реализации asyncio/ssl. Патч от Michaël Sghaïer.
bpo-29743: Закрытие транспорта во время рукопожатия (handshake) приводит к утечке открытого сокета. Патч от Nikolay Kim.
bpo-27585: Исправлена отмена ожидания (waiter) в asyncio.Lock. Патч от Mathieu Sornay.
bpo-30014: Метод modify() классов на основе poll(), epoll() и devpoll() модуля selectors стал примерно на 10% быстрее. Патч от Giampaolo Rodola’.
bpo-30418: На Windows subprocess.Popen.communicate() теперь также игнорирует EINVAL на stdin.write(), если дочерний процесс ещё работает, но уже закрыл канал.
bpo-30463: добавлен пустой __slots__ в abc.ABC. Это позволяет подклассам запретить создание __dict__ и __weakref__. Исправление от Aaron Hall.
bpo-30520: Объекты логгеров теперь сериализуемы.
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: Устарела некорректная защита вызовов ctypes в Windows. Патч от Mariatta Wijaya.
bpo-30414: Фоновый поток _feed в multiprocessing.Queue не выходит из главного цикла при исключении.
bpo-30003: Исправлена обработка escape-символов в кодировке HZ. На основе патча от Ma Lin.
bpo-30149: inspect.signature() теперь поддерживает вызываемые объекты с параметрами переменного числа аргументов, обёрнутыми с помощью partialmethod. Исправление от Dong-hee Na.
bpo-30436: importlib.find_spec() теперь вызывает ModuleNotFoundError вместо AttributeError, если указанный родительский модуль не является пакетом (то есть не имеет атрибута __path__).
bpo-30301: Исправлен AttributeError при использовании SimpleQueue.empty() с методами запуска spawn и forkserver.
bpo-30375: Предупреждения, выдаваемые при компиляции регулярного выражения, теперь всегда указывают на строку в коде пользователя. Ранее они могли указывать внутрь модуля re, если возникали из групп или условных конструкций.
bpo-30329: imaplib и poplib теперь перехватывают ошибку Windows WSAEINVAL (код 10022) на shutdown(SHUT_RDWR): была предпринята недопустимая операция. Эта ошибка иногда возникает на SSL-соединениях.
bpo-29196: Удалены ранее устаревшие в Python 2.4 классы Plist, Dict и _InternalDict из модуля plistlib. Значения типа Dict в результатах функций readPlist() и readPlistFromBytes() теперь являются обычными словарями. Больше нельзя использовать доступ через атрибуты для получения элементов этих словарей.
bpo-9850:
macpathтеперь считается устаревшим и будет удален в Python 3.8.bpo-30299: Компиляция регулярного выражения в режиме отладки в CPython теперь показывает скомпилированный байт-код в читаемом виде.
bpo-30048: Исправлена ситуация, когда
Task.cancel()мог игнорироваться, если задача выполняет корутину и корутина вернула управление без дополнительныхawait.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: Удалены методы __init__ сканера и кодировщика _json. Их неправильное использование могло приводить к утечкам памяти или сбоям. Теперь объекты сканера и кодировщика полностью инициализируются в методах __new__.
bpo-30215: Скомпилированные объекты регулярных выражений с флагом re.LOCALE больше не зависят от локали во время компиляции. Только локаль во время сопоставления влияет на результат.
bpo-30185: Избежание трассировок KeyboardInterrupt во вспомогательном процессе forkserver при получении Ctrl-C.
bpo-30103: binascii.b2a_uu() и uu.encode() теперь поддерживают использование
'`'в качестве нуля вместо пробела.bpo-28556: Различные обновления модуля typing: добавлен тип typing.NoReturn, используется WrapperDescriptorType, мелкие исправления ошибок. Оригинальные PR от Jim Fasarakis-Hilliard и Ivan Levkivskyi.
bpo-30205: Исправлен getsockname() для непривязанных AF_UNIX-сокетов на Linux.
bpo-30228: Методы seek() и tell() у io.FileIO теперь устанавливают внутренний атрибут seekable, чтобы избежать одного системного вызова при open() (в буферизованном или текстовом режиме).
bpo-30190: assertAlmostEqual и assertNotAlmostEqual из unittest теперь предоставляют более информативное сообщение в случае неудачи, включающее разницу между левым и правым аргументами. (патч от Giampaolo Rodola')
bpo-30101: Добавлена поддержка curses.A_ITALIC.
bpo-29822: inspect.isabstract() теперь работает во время __init_subclass__. Патч от Nate Soares.
bpo-29960: Сохранение состояния генератора, когда _random.Random.setstate() вызывает исключение. Патч от Bryan Olson.
bpo-30070: Исправлены утечки и сбои при обработке ошибок в модуле parser.
bpo-22352: Ширина столбцов в выводе dis.dis() теперь корректируется для больших номеров строк и смещений инструкций.
bpo-30061: Исправлены сбои в методах IOBase __next__() и readlines(), когда readline() или __next__() соответственно возвращают объект, не поддерживающий определение размера. Исправлены возможные другие ошибки, вызванные отсутствием проверки результатов PyObject_Size(), PySequence_Size() или PyMapping_Size().
bpo-30218: Исправлена поддержка PathLike для shutil.unpack_archive. Патч от Jelle Zijlstra.
bpo-10076: Скомпилированные регулярные выражения и объекты совпадений в модуле re теперь поддерживают copy.copy() и copy.deepcopy() (они считаются атомарными).
bpo-30068: _io._IOBase.readlines теперь сначала проверяет, закрыт ли файл, если указана подсказка (hint).
bpo-29694: Исправлено состояние гонки в pathlib mkdir с флагом parents=True. Патч от Armin Rigo.
bpo-29692: Исправлено произвольное разрывание цепочки исключений RuntimeError в contextlib.contextmanager. Патч от Siddharth Velankar.
bpo-26187: Тест, что колбэк трассировки sqlite3 не вызывается многократно при изменении схемы. Косвенно исправлено переходом на использование sqlite3_prepare_v2() в bpo-9303. Патч от Aviv Palivoda.
bpo-30017: Разрешено многократное вызов метода close() у объекта записи zip-записи. Запись в закрытый writer теперь всегда вызывает 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: Добавлена поддержка HTTP-заголовка If-Modified-Since (кеш браузера). Патч от Pierre Quentel.
bpo-29931: Исправлена проверка сравнения для объектов ipaddress.ip_interface. Патч от Sanjay Sundaresan.
bpo-29953: Исправлены утечки памяти в методе replace() объектов datetime и time при передаче аргумента fold вне допустимого диапазона.
bpo-29942: Исправлен сбой в itertools.chain.from_iterable при обнаружении длинных последовательностей пустых итераций.
bpo-10030: Ускорено чтение зашифрованных ZIP-файлов в 2 раза.
bpo-29204: Element.getiterator() и параметр html функции XMLParser() были устаревшими только в документации (начиная с Python 3.2 и 3.4 соответственно). Теперь их использование вызывает предупреждение об устаревании.
bpo-27863: Исправлено множество сбоев в ElementTree, вызванных состояниями гонки и неверными типами.
bpo-25996: Добавлена поддержка файловых дескрипторов в os.scandir() на Unix. os.fwalk() ускорен в 2 раза за счёт использования os.scandir().
bpo-28699: Исправлена ошибка в пулах multiprocessing.pool: если исключение возникает в самом начале итерации, оно может быть проглочено или привести к зависанию программы. Патч от Davin Potts и Xiang Zhang.
bpo-23890: unittest.TestCase.assertRaises() теперь вручную разрывает циклические ссылки, чтобы объекты не оставались в памяти дольше, чем ожидается.
bpo-29901: Модуль zipapp теперь поддерживает любые объекты, подобные пути, а не только pathlib.Path.
bpo-25803: Избежание некорректных ошибок, вызываемых Path.mkdir(exist_ok=True), когда ОС отдаёт приоритет ошибкам EACCES над EEXIST.
bpo-29861: Освобождение ссылок на задачи, их аргументы и результаты сразу после завершения в multiprocessing.Pool.
bpo-19930: аргумент mode функции os.makedirs() больше не влияет на биты прав доступа файлов вновь создаваемых каталогов промежуточного уровня.
bpo-29884: faulthandler: восстановление старого sigaltstack при завершении. Патч от Christophe Zeitouny.
bpo-25455: Исправлены сбои в repr рекурсивных буферизированных файлоподобных объектов.
bpo-29800: Исправлены сбои в partial.__repr__, если ключи partial.keywords не являются строками. Патч от Michael Seifert.
bpo-8256: Исправлена возможная ошибка или сбой input(), если атрибуты 'encoding' или 'errors' sys.stdin или sys.stdout не установлены или не являются строками.
bpo-28692: Использование нецелого значения для выбора формы множественного числа в gettext теперь устарело.
bpo-26121: Использование реализации из библиотеки C для математических функций erf() и erfc().
bpo-29619: os.stat() и os.DirEntry.inode() теперь преобразуют индексный дескриптор (st_ino) с использованием беззнаковых целых чисел.
bpo-28298: Исправлена ошибка, препятствовавшая тому, чтобы массивы 'Q', 'L' и 'I' принимали большие intables (объекты с __int__) в качестве элементов.
bpo-29645: Ускорен импорт модуля webbrowser. webbrowser.register() теперь потокобезопасен.
bpo-28231: Модуль zipfile теперь принимает path-like объекты для внешних путей.
bpo-26915: Методы index() и count() collections.abc.Sequence теперь при сравнении сначала проверяют идентичность, а затем равенство.
bpo-28682: Добавлена поддержка путей в виде байтов в os.fwalk().
bpo-29728: Добавлена новая константа
socket.TCP_NOTSENT_LOWAT(Linux 3.12). Патч от Nathaniel J. Smith.bpo-29623: Разрешено использование путеподобного объекта в качестве единственного аргумента в ConfigParser.read(). Патч Дэвида Эллиса.
bpo-9303: Переведён модуль sqlite3 на API _v2. Патч от Aviv Palivoda.
bpo-28963: Исправлен выход за границы итерации в asyncio.Future.remove_done_callback, реализованном на C.
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: Метод register_function() из xmlrpc.server.SimpleXMLRPCDispatcher и его подклассов теперь можно использовать как декоратор.
bpo-29376: Исправлена ошибка утверждения в threading._DummyThread.is_alive().
bpo-28624: Добавлен тест, проверяющий, что параметр cwd в Popen() принимает объекты PathLike. Патч Саяна Чоудхури.
bpo-28518: Транзакция теперь неявно начинается перед DML-инструкцией. Патч Авива Паливоды.
bpo-29742: get_extra_info() вызывает исключение, если вызывается на закрытом ssl-транспорте. Патч от Nikolay Kim.
bpo-16285: urllib.parse.quote теперь основан на RFC 3986 и поэтому включает ‘~’ в набор символов, которые не экранируются по умолчанию. Исправление от Christian Theune и Ratnadeep Debnath.
bpo-29532: Изменение словаря kwarg, переданного в functools.partial(), больше не влияет на объект 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() теперь вызывает ModuleNotFoundError, если у модуля отсутствует спецификация.
bpo-28556: Различные обновления модуля typing: typing.Counter, typing.ChainMap, улучшенное кэширование ABC и другое. Оригинальные PR от Jelle Zijlstra, Ivan Levkivskyi, Manuel Krebber и Łukasz Langa.
bpo-29100: Исправлена регрессия в datetime.fromtimestamp(), появившаяся в Python 3.6.0: проверка минимального и максимального годов.
bpo-29416: Предотвращение бесконечного цикла в pathlib.Path.mkdir
bpo-29444: Исправлен выход за границы буфера в методе group() объекта совпадения. На основе патча от WGH.
bpo-29377: Добавлены встроенные типы WrapperDescriptorType, MethodWrapperType и MethodDescriptorType в модуль types. Оригинальный патч от Manuel Krebber.
bpo-29218: Неиспользуемая команда install_misc теперь удалена. Она документировалась как неиспользуемая с 2000 года. Исправление от Eric N. Vander Weele.
bpo-29368: При распаковке (unpickle) collections.deque и других подобных списку объектов теперь вызывается метод extend() вместо метода append(). Это может ускорить распаковку до 2 раз.
bpo-29338: Справка по встроенному или расширяющему классу теперь включает сигнатуру конструктора, если для класса задан __text_signature__.
bpo-29335: Исправлен subprocess.Popen.wait(), когда дочерний процесс завершился в состоянии остановлен, а не завершён (например, под ptrace).
bpo-29290: Исправлена регрессия в argparse, из-за которой сообщения помощи переносились на неразрывных пробелах.
bpo-28735: Исправлено сравнение mock.MagicMock с mock.ANY.
bpo-29197: Удалена устаревшая функция ntpath.splitunc().
bpo-29210: Удалена поддержка устаревшего аргумента «exclude» в tarfile.TarFile.add().
bpo-29219: Исправлена бесконечная рекурсия в repr неинициализированных экземпляров ctypes.CDLL.
bpo-29192: Удалены устаревшие возможности в модуле http.cookies.
bpo-29193: Аргумент форматной строки для string.Formatter.format() теперь является только позиционным.
bpo-29195: Удалена поддержка устаревших недокументированных именованных аргументов в методах объектов регулярных выражений.
bpo-28969: Исправлено состояние гонки в реализации C для functools.lru_cache. 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(), когда сборка мусора происходит в другом потоке.
bpo-20191: Исправлен сбой в resource.prlimit() при передаче последовательности, которая не владеет своими элементами, в качестве лимитов.
bpo-16255: subprocess.Popen использует /system/bin/sh на Android в качестве оболочки, вместо /bin/sh.
bpo-28779: multiprocessing.set_forkserver_preload() приводил к сбою процесса forkserver, если предварительно загруженный модуль создавал экземпляры некоторых объектов multiprocessing, таких как блокировки.
bpo-26937: Метод chown() класса tarfile.TarFile теперь не завершается ошибкой, если модуль grp не может быть импортирован (например, на платформе Android).
bpo-28847: dbm.dumb теперь поддерживает чтение файлов только для чтения и больше не записывает индексный файл, если он не был изменён. Теперь выводится предупреждение об устаревании, если индексный файл отсутствует и создаётся заново в режимах 'r' и 'w' (в будущих версиях Python это станет ошибкой).
bpo-27030: Неизвестные управляющие последовательности, состоящие из
'\'и буквы ASCII в шаблонах замены re.sub() и регулярных выражениях теперь являются ошибками.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: Восстановлены методы __reduce__() объектов datetime.
bpo-28727: Объекты регулярных выражений _sre.SRE_Pattern, создаваемые re.compile(), стали сравнимыми (только операторы == и !=). Это изменение должно исправить bpo-18383: дублирование фильтров предупреждений при перезагрузке модуля warnings (обычно делается только в юнит-тестах).
bpo-20572: Удалён параметр endtime у subprocess.Popen.wait. Он был объявлен устаревшим в версии 3.4, а до этого не был документирован.
bpo-25659: В ctypes предотвращён сбой при вызове методов from_buffer() и from_buffer_copy() для абстрактных классов, таких как Array.
bpo-28548: В модуле http.server теперь разбирается версия протокола, если это возможно, чтобы избежать использования HTTP 0.9 в некоторых ответах об ошибках.
bpo-19717: Path.resolve() теперь успешно выполняется для несуществующих путей. Патч от Vajrasky Kok.
bpo-28563: Исправлена возможная DoS-атака и выполнение произвольного кода при обработке выбора множественных форм в модуле gettext. Парсер выражений теперь поддерживает точный синтаксис 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 как значения с плавающей запятой. tkinter.IntVar теперь работает, если для базовой переменной Tk установлено значение с плавающей запятой.
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: Исправлен HList.header_exists() в модуле tkinter.tix путём добавления обходного пути для ошибки библиотеки Tix.
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» аргумент методов read1() классов BufferedReader и BytesIO теперь является опциональным и может быть -1, что соответствует спецификации BufferedIOBase.
bpo-28480: Исправление ошибки сборки модуля socket при отключённой многопоточности.
bpo-28240: timeit: удалены опции командной строки
-c/--clockи-t/--time, которые были устаревшими с Python 3.3.bpo-28240: timeit теперь повторяет замеры 5 раз вместо 3, чтобы повысить их надёжность.
bpo-28240: timeit autorange теперь использует одну итерацию цикла, если замер занимает менее 10 секунд, вместо 10 итераций. «python3 -m timeit -s 'import time' 'time.sleep(1)'» теперь выполняется за 4 секунды вместо 40.
Distutils.sdist теперь ищет файлы README и setup.py с учётом регистра символов. Это поведение соответствует тому, что принято в Setuptools 6.0 и более поздних версиях. Обоснование см. в setuptools 100.
bpo-24452: Добавлена поддержка Chrome в модуле webbrowser на Mac OS X. Патч от Ned Batchelder.
bpo-20766: Исправлена утечка ссылок в pdb при обработке обработчиков SIGINT.
bpo-27998: Исправлена поддержка путей в виде bytes в os.scandir() на Windows. Исправление от 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: Исправлена запись символов не из BMP в бинарном формате в plistlib.
bpo-28225: Модуль bz2 теперь поддерживает pathlib. Первоначальное исправление от Ethan Furman.
bpo-28227: gzip теперь поддерживает pathlib. Исправление от Ethan Furman.
bpo-28332: Устарело неявное усечение в socket.htons и socket.ntohs. Оригинальный патч от Oren Milman.
bpo-27358: Оптимизировано слияние аргументов **kwargs и улучшено сообщение об ошибке при передаче не-отображения в качестве **kwargs.
bpo-28257: Улучшено сообщение об ошибке при передаче неитерируемого объекта в качестве позиционного аргумента-вариадика. Добавлен опкод BUILD_TUPLE_UNPACK_WITH_CALL.
bpo-28322: Исправлены возможные сбои при распаковке объектов itertools из некорректных данных pickle. Основано на патче от John Leitch.
bpo-28228: imghdr теперь поддерживает pathlib.
bpo-28226: compileall теперь поддерживает pathlib.
bpo-28314: Исправлено объявление функции (флаги C) для метода getiterator() класса xml.etree.ElementTree.Element.
bpo-28148: Прекращено использование localtime() и gmtime() в модуле time. Введён платформенно-независимый API _PyTime_localtime, похожий на POSIX localtime_r, но доступный на всех платформах. Исправление от Ed Schouten.
bpo-28253: Исправлены функции календаря для крайних месяцев: 0001-01 и 9999-12. Методы itermonthdays() и itermonthdays2() переписаны так, что они не вызывают itermonthdates(), что могло приводить к переполнению или потере точности datetime.date.
bpo-28275: Исправлена возможная ошибка использования после освобождения (use-after-free) в методах decompress() классов LZMADecompressor и BZ2Decompressor. Оригинальный патч от John Leitch.
bpo-27897: Исправлена возможная аварийная остановка в sqlite3.Connection.create_collation() при передаче недопустимого строкоподобного объекта в качестве имени. Патч от Xiang Zhang.
bpo-18844: Теперь random.choices() использует k как аргумент только по ключу (keyword-only argument), чтобы повысить читаемость в типовых случаях и привести к единообразию с сигнатурами, используемыми в других языках.
bpo-18893: Исправлена некорректная обработка исключений в Lib/ctypes/macholib/dyld.py. Патч от Madison May.
bpo-27611: Исправлена поддержка корневого окна по умолчанию в модуле tkinter.tix. Добавлен параметр master в конструктор DisplayStyle.
bpo-27348: В модуле traceback восстановлено форматирование сообщений об исключениях вида «Исключение: None». Это исправляет регрессию, появившуюся в 3.5a2.
bpo-25651: Разрешено использование ложных значений в параметре msg функции subTest().
bpo-27778: Исправлена утечка памяти в os.getrandom(), когда вызов getrandom() прерывается сигналом, а обработчик сигнала возбуждает исключение Python.
bpo-28200: Исправлена утечка памяти в Windows в модуле os (исправлена функция path_converter()).
bpo-25400: RobotFileParser теперь корректно возвращает значения по умолчанию для crawl_delay и request_rate. Первоначальный патч от Peter Wirtz.
bpo-27932: Предотвращена утечка памяти в win32_ver().
Исправлена ошибка UnboundLocalError в socket._sendfile_use_sendfile.
bpo-28075: Добавлена проверка на ERROR_ACCESS_DENIED в реализации os.stat() для Windows. Патч от Eryk Sun.
bpo-22493: Предупреждение, возникающее при использовании встроенных флагов в середине регулярного выражения, теперь содержит (усечённый) шаблон регулярного выражения. Патч от Tim Graham.
bpo-25270: Предотвращено возбуждение SystemError функцией codecs.escape_encode() при передаче пустой последовательности байтов.
bpo-28181: Получение antigravity через HTTPS. Патч от Kaartic Sivaraam.
bpo-25895: Включение поддержки схем URL WebSocket в urllib.parse.urljoin. Патч от Gergely Imreh и Markus Holtermann.
bpo-28114: Исправлен сбой в parse_envlist(), когда env содержит байтовые строки. Патч от Eryk Sun.
bpo-27599: Исправлено переполнение буфера в binascii.b2a_qp() и binascii.a2b_qp().
bpo-27906: Исправлено истощение приёма сокетов при высоком TCP-трафике. Патч от Kevin Conway.
bpo-28174: Обработка случая, когда SO_REUSEPORT не поддерживается должным образом. Патч от Seth Michael Larson.
bpo-26654: Добавлена проверка functools.partial в asyncio.Handle.__repr__. Патч от iceboy.
bpo-26909: Исправлен медленный ввод-вывод каналов в asyncio. Патч от INADA Naoki.
bpo-28176: Исправлено состояние гонки колбэков в asyncio.SelectorLoop.sock_connect.
bpo-27759: Исправлено некорректное удержание недействительных файловых дескрипторов селекторами. Патч от Mark Williams.
bpo-28325: Удалён рудиментарный модуль macurl2path для MacOS 9 и его тесты.
bpo-28368: Отказ от наблюдения за процессами, если к наблюдателю дочерних процессов не прикреплён цикл. Патч от Vincent Michel.
bpo-28369: Возбуждать RuntimeError, когда файловый дескриптор транспорта используется с add_reader, add_writer и т.д.
bpo-28370: Ускорение asyncio.StreamReader.readexactly. Патч от Коренберг Марк.
bpo-28371: Помечено как устаревшее передачу asyncio.Handles в run_in_executor.
bpo-28372: Исправлено asyncio для поддержки форматирования не-Python корутин.
bpo-28399: Удаление UNIX-сокета из файловой системы перед привязкой. Патч от Коренберг Марк.
bpo-27972: Запрещено задачам ожидать самих себя.
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.
Документация¶Documentation
bpo-31294: Исправлен неполный фрагмент кода в примерах ZeroMQSocketListener и ZeroMQSocketHandler, выполнена их адаптация для Python 3.
bpo-21649: Добавлены ссылки на RFC 7525 и рекомендации Mozilla по серверному TLS в документацию по SSL.
bpo-31128: Разрешена привязка pydoc-сервера к произвольным именам хостов.
bpo-30803: Уточнена документация по проверке истинности значений. Оригинальный патч от Петера Томассена.
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: Справочник по модели данных и раздел о переносе в руководстве «Что нового в Python 3.6» теперь покрывают дополнительную обработку
__classcell__, требуемую пользовательскими метаклассами для полной поддержки PEP 487 иsuper()без аргументов.bpo-28513: Документирован интерфейс командной строки zipfile.
Тесты¶Tests
bpo-29639: test.support.HOST теперь «localhost», добавлена новая константа HOSTv4 для нужд
127.0.0.1, аналогично существующей константе HOSTv6.bpo-31320: Подавление traceback в test_ssl
bpo-31346: Для SSLContext теперь предпочтительны протоколы PROTOCOL_TLS_CLIENT и PROTOCOL_TLS_SERVER.
bpo-25674: Удаление ssl-теста sha256.tbs-internet.com
bpo-30715: Учтены изменения ALPN-колбэка для OpenSSL 1.1.0f. Последняя версия ведёт себя как OpenSSL 1.0.2 и больше не прерывает рукопожатие.
bpo-30822: regrtest: Исключение tzdata из regrtest –all. При запуске набора тестов с параметром –use=all / -u all исключать tzdata, так как из-за него test_datetime выполняется слишком долго (15–20 минут на некоторых сборочных фермах), что приводит к тайм-ауту на некоторых сборочных фермах. Также исправлен парсер командной строки regrtest, чтобы можно было передавать -u extralargefile для запуска test_zipfile64.
bpo-30695: Добавлены функции
set_nomemory(start, stop)иremove_mem_hooks()в модуль _testcapi.bpo-30357: test_thread: setUp() теперь использует support.threading_setup() и support.threading_cleanup() для ожидания завершения потоков, чтобы избежать случайных побочных эффектов на следующие тесты. Первоначальное исправление от Grzegorz Grzywacz.
bpo-30197: Улучшены функции swap_attr() и swap_item() в модуле test.support. Теперь они работают, когда удаляется заменённый атрибут или элемент внутри оператора with. Старое значение атрибута или элемента (или None, если его не существует) теперь будет присваиваться цели предложения "as", если оно есть.
bpo-24932: Использован правильный разбор командной строки в _testembed
bpo-28950: запрещено комбинировать -j0 с -T/-l в аргументах командной строки regrtest.
bpo-28683: исправлены тесты, которые используют bind() для unix-сокета и вызывают PermissionError на Android для пользователя без прав root.
bpo-26936: Исправлены ошибки test_socket на Android – getservbyname(), getservbyport() и getaddrinfo() некорректны на некоторых уровнях API Android.
bpo-28666: Теперь test.support.rmtree может удалять каталоги, недоступные для записи или чтения.
bpo-23839: Различные кеши теперь очищаются перед запуском каждого тестового файла.
bpo-26944: Исправление test_posix для Android, где ‘id -G’ полностью неверен или отсутствует эффективный gid.
bpo-28409: regrtest: исправлен парсер аргументов командной строки.
bpo-28217: Добавлен модуль _testconsole для тестирования ввода с консоли.
bpo-26939: добавлена функция support.setswitchinterval() для исправления зависания test_functools на эмуляторе Android armv7 qemu.
Сборка¶Build
bpo-31354: Разрешено использование –with-lto во всех сборках, а не только в
make profile-opt.bpo-31370: Удалена поддержка сборки --without-threads. Эта опция больше не актуальна в XXI веке. Удаление множества условных путей позволяет упростить кодовую базу, включая сложный в сопровождении низкоуровневый внутренний код.
bpo-31341: В соответствии с PEP 11 поддержка операционной системы IRIX была удалена.
bpo-30854: Исправление ошибки компиляции при сборке с –without-threads. Патч от Masayuki Yamamoto.
bpo-30687: Поиск msbuild.exe в Windows при сборке вместо vcvarsall.bat.
bpo-20210: Добавлена поддержка маркера disabled в файлах Setup. Модули расширения, перечисленные после этого маркера, не собираются ни Makefile, ни setup.py.
bpo-29941: Add
--with-assertionsconfigure flag to explicitly enable Cassert()checks. Defaults to off.--with-pydebugimplies--with-assertions.bpo-28787: Fix out-of-tree builds of Python when configured with
--with--dtrace.bpo-29243: Предотвращает ненужную пересборку Python во время
make test,make installи некоторых других целей make при настройке с--enable-optimizations.bpo-23404: Больше не выполняется повторная генерация сгенерированных файлов на основе времени изменения файла: теперь это действие явное. Замените
make touchнаmake regen-all.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: Убирает жёсткую зависимость от hg.exe в PCBuild/build.bat
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: не определять sys.implementation._multiarch на Android.
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: Исправлена сборка модуля _struct на Cygwin: теперь в PyVarObject_HEAD_INIT передаётся
NULLвместо&PyType_Type. Патч от Masayuki Yamamoto.bpo-13756: Исправлена сборка модулей расширений на Cygwin. Патч от Roumen Petrov на основе оригинального патча от Jason Tishler.
bpo-21085: Добавлена проверка configure для siginfo_t.si_band, который не предоставляется Cygwin. Патч от Masayuki Yamamoto с рецензией и перебазированием от Erik Bray.
bpo-28258: Исправлена сборка с эстонской локалью (цели python-config и distclean в Makefile). Патч от Arfrever Frehtes Taifersar Arahesis.
bpo-26661: setup.py теперь определяет системную libffi с multiarch wrapper.
bpo-27979: Полная копия libffi больше не поставляется для сборки _ctypes на UNIX-платформах, отличных от OSX. Теперь для сборки _ctypes на таких платформах требуется установленная копия libffi.
bpo-15819: Удаляет избыточную опцию каталога поиска include для сборки вне дерева исходников.
bpo-28676: Предотвращает предупреждение о пропущенном объявлении 'getentropy' на macOS. Патч от Gareth Rees.
Windows¶
bpo-31392: Обновлена сборка Windows для использования OpenSSL 1.1.0f
bpo-30389: Добавлено обнаружение Visual Studio 2017 в distutils на Windows.
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: Добавлен отсутствующий xmlns в python.manifest для соответствия схеме.
bpo-30291: добавлена возможность запрашивать 64-разрядные интерпретаторы в py.exe с помощью суффикса -64. Автор: Steve (Gadget) Barnes.
bpo-30362: добавлены опции списка (-0, -0p) в программу запуска py.exe. Автор: Steve Barnes.
bpo-23451: исправлены предупреждения об устаревании сокетов в socketmodule.c. Патч от Segev Finer.
bpo-30450: Процесс сборки на Windows больше не зависит от Subversion, вместо этого он получает внешний код из GitHub через Python-скрипт. Если 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: Добавлены подписанные файлы каталогов для stdlib в Windows.
bpo-28333: Включена поддержка Unicode для приглашений ps1/ps2 и input(). (Патч от Eryk Sun)
bpo-28251: Улучшения справочных руководств в Windows.
bpo-28110: launcher.msi использует разные коды продукта для 32-битной и 64-битной версий
bpo-28161: Открытие CON для записи завершается ошибкой
bpo-28162: WindowsConsoleIO.readall() завершается ошибкой, если первая строка начинается с Ctrl+Z
bpo-28163: WindowsConsoleIO.fileno() передаёт неверные флаги в _open_osfhandle
bpo-28164: _PyIO_get_console_type не работает для различных путей
bpo-28137: Переименование файла пути Windows в ._pth
bpo-28138: Файл ._pth в Windows должен разрешать импорт site
IDLE¶
bpo-31493: IDLE code context – исправлены таймеры обновления кода и шрифта. Отмена таймеров предотвращает появление предупреждения при завершении test_idle.
bpo-31488: IDLE – обновление неключевых параметров в бывших классах расширений. При применении изменений в configdialog вызывать .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: Перегруппировка GenPage диалога конфигурации IDLE в разделы Window, Editor и Help.
bpo-30617: IDLE – добавление строк документации и тестов для подкласса окна вывода редактора. Перенос некоторых данных и функций из класса на уровень модуля. Патч от Cheryl Sabella.
bpo-31287: IDLE – не изменять tkinter.message в test_configdialog.
bpo-27099: Преобразование встроенных «расширений» IDLE в обычные функции. Около 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: Выделение класса HighPage(Frame) из ConfigDialog. Патч от Cheryl Sabella.
bpo-31001: Добавление тестов для вкладки highlight в configdialog. Патч от Cheryl Sabella.
bpo-31205: IDLE: Выделение класса KeysPage(Frame) из ConfigDialog. Слегка изменённые тесты продолжают проходить. Патч от Cheryl Sabella.
bpo-31130: IDLE – устранение утечек в test_configdialog. Первоначальный патч от Victor Stinner.
bpo-31002: Добавление тестов для вкладки keys в configdialog. Патч от Cheryl Sabella.
bpo-19903: IDLE: Подсказки вызовов используют
inspect.signatureвместоinspect.getfullargspec. Это улучшает подсказки для встроенных функций, преобразованных для использования Argument Clinic. Патч от Louie Lu.bpo-31083: IDLE – добавление наброска класса TabPage в configdialog. Обновление существующих классов в соответствии с наброском. Первоначальный патч от Cheryl Sabella.
bpo-31050: Выделение класса GenPage(Frame) из ConfigDialog. Слегка изменённые тесты продолжают проходить. Патч от Cheryl Sabella.
bpo-31004: IDLE – выделение класса FontPage(Frame) из ConfigDialog. Слегка изменённые тесты продолжают проходить. Исправление тестов General. Патч в основном от Cheryl Sabella.
bpo-30781: IDLE – использование ttk виджетов в ConfigDialog. Патчи от Terry Jan Reedy и Cheryl Sabella.
bpo-31060: IDLE – завершить перегруппировку методов ConfigDialog. Группировка методов, относящихся к каждой вкладке и кнопкам, поможет писать тесты и улучшать вкладки, а также позволит разделить группы на классы.
bpo-30853: IDLE – выделить класс VarTrace из ConfigDialog. Экземпляр tracers управляет парами, состоящими из tk-переменной и колбэк-функции. Когда отслеживание включено, присвоение переменной вызывает функцию. Покрытие тестами нового класса – 100%.
bpo-31003: IDLE – добавить больше тестов для вкладки General.
bpo-30993: IDLE – улучшить страницу шрифтов в configdialog и тесты. В configdialog: документировать причинно-следственные связи в docstring create_font_tab. Упростить некоторые имена атрибутов. Переместить вызовы set_samples в var_changed_font (идея от Cheryl Sabella). Переместить связанные функции в позиции после функции создания виджетов. В test_configdialog: исправить test_font_set, чтобы он не зависел от порядка. Исправить переименованный test_indent_scale, чтобы он тестировал виджет. Настроить тесты для перемещения вызова set_samples. Добавить тесты для функций загрузки. Сгруппировать все тесты шрифтов в один класс, а тесты отступов вкладок – в другой. За исключением двух строк, эти тесты полностью покрывают связанные функции.
bpo-30981: IDLE – добавить больше тестов страницы шрифтов configdialog.
bpo-28523: IDLE – заменить ‘colour’ на ‘color’ в configdialog.
bpo-30917: Добавить тесты для idlelib.config.IdleConf. Увеличить покрытие с 46% до 96%. Патч от Louie Lu.
bpo-30934: Документировать детали покрытия для тестов idlelib. Добавить раздел в idlelib/idle-test/README.txt. Включить проверку того, что ветки выполняются в обоих направлениях. Исключить специфичный для IDLE код, который не выполняется во время модульных тестов.
bpo-30913: IDLE – документировать tk Vars, методы и виджеты ConfigDialog в docstrings. Это упростит улучшение диалога и разделение класса. Оригинальный патч от Cheryl Sabella.
bpo-30899: IDLE – добавить тесты для подклассов ConfigParser в config. Патч от Louie Lu.
bpo-30881: IDLE – добавить docstrings в browser.py. Патч от Cheryl Sabella.
bpo-30851: IDLE – удалить неиспользуемые переменные в configdialog. Одна dублируется, другая устанавливается, но пользователи не могут её изменить. Патч от Cheryl Sabella.
bpo-30870: IDLE – в диалоге настроек выбирать шрифт с помощью клавиш Вверх, Вниз, а также мыши. Начальный патч от Louie Lu.
bpo-8231: IDLE – вызывать config.IdleConf.GetUserCfgDir только один раз.
bpo-30779: IDLE – выделить класс ConfigChanges из configdialog, поместить в config; протестировать. * В config поместить дамп-тестовый код в функцию; запускать его и юниттесты в ‘if __name__ == ‘__main__’. * Добавить класс config.ConfigChanges на основе changes_class_v4.py из тикета bpo. * Добавить класс test_config.ChangesTest, частично используя configdialog_tests_v1.py. * Пересмотреть configdialog для использования ConfigChanges; см. tracker msg297804. * Пересмотреть test_configdialog в соответствии с изменениями configdialog. * Удалить функции configdialog, которые не используются или перемещены в ConfigChanges. Cheryl Sabella предоставила части патча.
bpo-30777: IDLE – configdialog – добавить docstrings и исправить комментарии. Патч от Cheryl Sabella.
bpo-30495: IDLE – улучшить textview с помощью docstrings, имён по PEP8 и большего количества тестов. Патч от Cheryl Sabella.
bpo-30723: IDLE – внести несколько улучшений в parenmatch. Добавить стиль ‘parens’ для подсветки открывающей и закрывающей скобок. Сделать стиль ‘default’, который не является по умолчанию, синонимом ‘opener’. Сделать задержку времени одинаковой для всех стилей. Добавить справку для вкладки расширений диалога настроек, включая справку для parenmatch. Добавить новые тесты. Оригинальный патч от Charles Wohlganger.
bpo-30674: IDLE – добавить docstrings в модуль grep. Патч от Cheryl Sabella
bpo-21519: Базовый диалог настройки клавиш IDLE теперь правильно обнаруживает dубликаты. Оригинальный патч от 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. Теперь должны работать: щелчок по элементам списка, использование полосы прокрутки, выбор элемента нажатием Enter. Зависания на 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: Help-about: приведены имена к стандарту PEP8, добавлены тесты. Покрытие увеличено до 100%. Патчи от Louie Lu, Cheryl Sabella и Terry Jan Reedy.
bpo-30303: Добавлена опция _utest в textview; добавлены новые тесты. Покрытие увеличено до 100%. Патчи от Louie Lu и Terry Jan Reedy.
bpo-29071: IDLE подсвечивает префиксы f-строк (но не недопустимые префиксы ur).
bpo-28572: Добавлено 10% к покрытию тестами test_configdialog в IDLE. Обновлено и расширено описание системы конфигурации.
Инструменты/Демонстрации¶Tools/Demos
bpo-30983: Команды интеграции gdb (py-bt и т.д.) теперь работают и на оптимизированных совместно собираемых сборках. PEP 523 ввёл _PyEval_EvalFrameDefault, который встраивает PyEval_EvalFrameEx в неотладочных совместно собираемых сборках. Это нарушило возможность использовать py-bt, py-up и некоторые другие интеграции gdb, специфичные для Python. Проблема исправлена поиском только фреймов _PyEval_EvalFrameDefault в python-gdb.py. Оригинальный патч от 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 не поддерживал новую реализацию dict.
bpo-15369: Микробенчмарки pybench и pystone удалены из Tools. Используйте новый набор тестов производительности Python https://github.com/python/performance, который более надёжен и включает портативную версию pybench, работающую на Python 2 и Python 3.
bpo-28102: CLI модуля zipfile теперь выводит справку в stderr. Патч от Stephen J. Turnbull.
C API¶
bpo-31338: Добавлен макрос
Py_UNREACHABLE()для участков кода, которые никогда не должны достигаться. Этот и несколько других полезных макросов теперь документированы в руководстве по C API.bpo-30832: Удалена собственная реализация локального хранилища потоков. CPython предоставлял собственную реализацию TLS в Python/thread.c, которая использовалась в случае отсутствия нативной TLS на платформе. Однако в настоящее время все поддерживаемые платформы (Windows и pthreads) предоставляют нативную TLS и безусловно определяют макрос Py_HAVE_NATIVE_TLS.
bpo-30708: PyUnicode_AsWideCharString() теперь возбуждает ValueError, если второй аргумент равен NULL и строка wchar_t* содержит нулевые символы.
bpo-16500: Объявлена устаревшей PyOS_AfterFork() и добавлены PyOS_BeforeFork(), PyOS_AfterFork_Parent() и PyOS_AfterFork_Child().
bpo-6532: Тип результатов PyThread_start_new_thread() и PyThread_get_thread_ident(), а также параметра id в PyThreadState_SetAsyncExc() изменён с “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. PyArg_ValidateKeywordArguments(), PyArg_UnpackTuple() и Py_BuildValue() были недоступны в ограниченном API версии < 3.3, когда определён PY_SSIZE_T_CLEAN.
bpo-28769: Результат PyUnicode_AsUTF8AndSize() и PyUnicode_AsUTF8() теперь имеет тип
const char *, а неchar *.bpo-29058: все расширения стабильного API, добавленные после Python 3.2, теперь доступны, только если Py_LIMITED_API установлен в значение PY_VERSION_HEX минимальной версии Python, поддерживающей это API.
bpo-28822: Параметры индекса start и end функции PyUnicode_FindChar() теперь настроены так, чтобы вести себя как
str[start:end].bpo-28808: PyUnicode_CompareWithASCIIString() теперь никогда не вызывает исключений.
bpo-28761: Поля name и doc структур PyMemberDef, PyGetSetDef, PyStructSequence_Field, PyStructSequence_Desc и wrapperbase теперь имеют тип
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 финальный¶Python 3.6.6 final
Дата выпуска: 2018-06-27
В версии 3.6.6 не было новых изменений.
Python 3.6.6 кандидат в релизы 1¶Python 3.6.6 release candidate 1
Дата выпуска: 2018-06-11
Ядро и встроенные модули¶Core and Builtins
bpo-33786: Исправлена обработка GeneratorExit в athrow() для асинхронных генераторов.
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в реализации dict не инициализируется при копировании из key-sharing dict.bpo-33041: Исправлен переход, когда функция содержит цикл
async for.bpo-32282: Исправлен лишний ifdef в include VersionHelpers.h в socketmodule на Windows.
bpo-21983: Исправлен сбой в
ctypes.cast(), если аргумент типа является структурированным типом данных ctypes. Исправление от Eryk Sun и Oren Milman.
Библиотека¶Library
bpo-30167: Предотвращено исключение в site.main(), если установлен PYTHONSTARTUP. Исправление от Steve Weber.
bpo-33812: Экземпляр datetime d с не-None tzinfo, но с d.tzinfo.utcoffset(d), возвращающим None, теперь считается наивным методом astimezone().
bpo-30805: Устранено состояние гонки при ведении отладочного журнала.
bpo-33767: Операции конкатенации (
+) и повторения (*) последовательностей теперь вызываютTypeErrorвместоSystemErrorпри выполнении над объектамиmmap.mmap. Исправление от Zackery Spytz.bpo-32684: Исправлено: gather теперь распространяет отмену самой себя даже с return_exceptions.
bpo-33674: Исправлено состояние гонки в SSLProtocol.connection_made() из asyncio.sslproto: запускать рукопожатие немедленно, а не через call_soon(). Ранее data_received() мог быть вызван до начала рукопожатия, что приводило к зависанию или сбою рукопожатия.
bpo-31647: Исправлена ошибка, при которой вызов write_eof() на _SelectorSocketTransport после его закрытия вызывал AttributeError.
bpo-33672: Исправлен сбой Task.__repr__ с некорректными корутинами Cython.
bpo-33469: Исправлен RuntimeError после закрытия цикла, который использовал run_in_executor.
bpo-11874: Использовать улучшенное регулярное выражение при разбиении usage на части для переноса. Избегает ложных ошибок утверждения из пользовательских строк metavar.
bpo-30877: Исправлена ошибка в Python-реализации декодера JSON, которая препятствовала очистке кэша разобранных строк после завершения декодирования. Основано на исправлении от c-fos.
bpo-33548: tempfile._candidate_tempdir_list должен учитывать общие расположения TEMP
bpo-33542: Предотвратить использование
uuid.get_nodeDUID вместо MAC на Windows. Исправление от Zvi Effronbpo-26819: Исправлено состояние гонки с
ReadTransport.resume_readingв цикле событий Windows proactor.bpo-28556: Небольшие исправления в модуле typing: добавлены аннотации к
NamedTuple.__new__, передаются*argsи**kwdsвGeneric.__new__. Оригинальные PR от Paulius Šarka и Chad Dombrova.bpo-20087: Обновлено соответствие алиасов с учётом локалей, поддерживаемых glibc 2.27.
bpo-33422: Исправлено удаление завершающих кавычек при поиске буквальных значений байтов/строк в pydoc. Патч от Andrés Delfino.
bpo-33197: Обновлено сообщение об ошибке при создании некорректных inspect.Parameters. Патч от Dong-hee Na.
bpo-33383: Исправлен сбой в методе get() объекта базы данных
dbm.ndbmпри вызове с одним аргументом.bpo-33329: Исправлена регрессия модуля multiprocessing на новых версиях glibc
bpo-991266: Исправлено экранирование атрибута
Commenthttp.cookies.SimpleCookie.bpo-33131: Обновлена встроенная версия pip до 10.0.1.
bpo-33308: Исправлен сбой в модуле
parserпри преобразовании объекта ST в дерево кортежей или списков с помощьюline_info=Falseиcol_info=True.bpo-33263: Исправлена утечка файловых дескрипторов в
_SelectorSocketTransport. Патч от Vlad Starostin.bpo-33256: Исправлено отображение вызова
<module>в HTML, созданномcgitb.html(). Патч от Stéphane Blondon.bpo-33203:
random.Random.choice()теперь последовательно вызываетIndexErrorдля пустых последовательностей, даже при вызове из подклассов без реализацииgetrandbits().bpo-33224: Обновлён difflib.mdiff() в соответствии с PEP 479. Непойманное StopIteration в генераторе преобразуется в return.
bpo-33209: Завершение фрейминга в конце C-реализации
pickle.Pickler.dump().bpo-32861: Представление
__str__в urllib.robotparser теперь включает записи с подстановочными символами и поля «Crawl-delay» и «Request-rate». Патч от Michael Lazar.bpo-33096: Разрешена вставка iid с ложным булевым значением в ttk.Treeview.insert. Обратите внимание, что iid=0 и iid=False будут одинаковы. Патч от Garvit Khatri.
bpo-33127: Модуль ssl теперь компилируется с LibreSSL 2.7.1.
bpo-33021: Освобождение GIL при вызовах fstat(), что предотвращает зависание всех потоков при вызове mmap.mmap(), os.urandom() и random.seed(). Патч от Nir Soffer.
bpo-27683: Исправлена регрессия в
ipaddress, из-за которой результатhosts()оказывался пустым, когда сеть строится из кортежа, содержащего целочисленную маску и только 1 бит для адресов.bpo-32844: Исправлена некорректная перенаправление низкого дескриптора (0 или 1) в stderr в подпроцессе, если другой низкий дескриптор закрыт.
bpo-31908: Исправлен вывод файлов покрытия для инструмента командной строки модуля
trace. Ранее файлы покрытия создавались только при использовании опции--missing. Патч от Michael Selik.bpo-31457: Если используются вложенные адаптеры логирования, внутренние методы
process()больше не пропускаются.bpo-16865: Поддержка массивов размером >=2 ГБ в
ctypes. Патч от Segev Finer.bpo-31238: pydoc: метод stop() приватного класса ServerThread теперь ожидает завершения DocServer.serve_until_quit(), после чего явно устанавливает атрибут docserver в None для разрыва цикла ссылок.
Документация¶Documentation
bpo-33503: Исправлена битая ссылка на PyPI
bpo-33421: Добавлена недостающая документация для
typing.AsyncContextManager.bpo-33378: Добавлен переключатель на корейский язык для https://docs.python.org/3/
bpo-33276: Уточнено, что атрибут
__path__у модулей не может быть произвольным значением.bpo-33201: Модернизация документации по написанию C-расширений типов.
bpo-33195: Помечено как устаревшее использование
Py_UNICODEв документеc-api/arg. Связанные сPy_UNICODEAPI устарели начиная с Python 3.3, но это было пропущено в документе.bpo-33126: Документирована функция PyBuffer_ToContiguous().
bpo-27212: Изменена документация рецепта
islice(), чтобы он потреблял начальные значения до начального индекса.bpo-28247: Обновлена документация
zipappс описанием создания автономных приложений.bpo-18802: Изменения в документации для ipaddress. Патч от Jon Foster и Berker Peksag.
bpo-27428: Обновлена документация, чтобы уточнить, что
WindowsRegistryFinderреализуетMetaPathFinder. (Патч от Himanshu Lakhara)bpo-8243: Добавлено примечание об исключениях curses.addch и curses.addstr при записи за пределами окна или pad.
bpo-31432: Уточнено значение флагов CERT_NONE, CERT_OPTIONAL и CERT_REQUIRED для ssl.SSLContext.verify_mode.
Тесты¶Tests
Сборка¶Build
bpo-5755: Переместить параметр
-Wstrict-prototypesвCFLAGS_NODISTизOPT. Этот параметр выдавал раздражающие предупреждения при сборке расширений, написанных на C++.bpo-33614: Обеспечивает корректное пересоздание файлов определений модулей для стабильного ABI на Windows.
bpo-33522: Включены сборки CI на Visual Studio Team Services на https://python.visualstudio.com/cpython
bpo-33012: Добавлен
-Wno-cast-function-typeдля gcc 8 для подавления предупреждений о приведении типов функций, например, приведении к 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, если свойства совместимости DPI двоичного файла Python не изменены, а разрешение монитора больше 96 DPI, это должно сделать текст и линии более чёткими. В остальных случаях эффекта не будет.
bpo-33768: Щелчок по строке контекста перемещает эту строку в начало окна редактора.
bpo-33763: IDLE: используется виджет только для чтения для контекста кода вместо виджета метки.
bpo-33664: Прокрутка текста редактора IDLE по строкам. Раньше колесо мыши и ползунок полосы прокрутки перемещали текст на фиксированное количество пикселей, в результате чего в верхней части окна редактора отображались неполные строки. Это изменение также применяется к окнам оболочки и вывода grep, но не к текстовым представлениям только для чтения.
bpo-33679: Включена конфигурация цветов для контекста кода, зависящая от темы. Используйте вкладку Highlights, чтобы увидеть настройки для встроенных тем или добавить настройки в пользовательские темы.
bpo-33642: Отображать до maxlines непустых строк для контекста кода. Если текущий контекст отсутствует, показывать одну пустую строку.
bpo-33628: IDLE: очистка codecontext.py и его теста.
bpo-33564: Контекст кода IDLE теперь распознаёт async как открывающий блок.
bpo-29706: IDLE теперь подсвечивает async и await как ключевые слова в 3.6. Они становятся полноценными ключевыми словами в 3.7.
bpo-21474: Обновлено определение слова/идентификатора с ascii до unicode. В текстовых полях и полях ввода это влияет на выделение двойным щелчком, перемещение влево/вправо с помощью Control+влево/вправо и удаление влево/вправо с помощью Control+BACKSPACE/DEL.
bpo-33204: IDLE: последовательно подсвечивать недопустимые префиксы строк. Префикс строки ‘u’ не может сочетаться с ‘r’ или ‘f’. Последовательно подсвечивать столько символов префикса, начиная справа, сколько является допустимым. Исправлен и расширен тест раскраски.
bpo-32831: Добавлены докстринги и тесты для codecontext.
Инструменты/Демонстрации¶Tools/Demos
bpo-33189: pygettext.py теперь распознает только строковые литералы как докстринги и переводимые строки, и отвергает байтовые литералы и f-строковые выражения.
bpo-31920: Исправлена обработка каталогов как аргументов в скрипте
pygettext. Основано на патче Олега Красникова.bpo-29673: Исправлены макросы pystackv и pystack gdbinit.
bpo-32885: Добавлен флаг
-nдляTools/scripts/pathfix.py, чтобы отключить автоматическое создание резервных копий (файлы с суффиксом~).bpo-31583: Исправлена работа 2to3 при использовании с опцией –add-suffix без опции –output-dir для относительного пути к файлам в текущем каталоге.
C API¶
bpo-32374: Документировано, что m_traverse для модулей, инициализируемых в несколько этапов, может вызываться с m_state=NULL, и добавлена проверка корректности.
Python 3.6.5 финальная¶Python 3.6.5 final
Дата выпуска: 2018-03-28
Тесты¶Tests
bpo-32872: Устранена проблема совместимости regrtest с пакетами пространств имен.
Сборка¶Build
bpo-33163: Обновлены pip до 9.0.3 и setuptools до v39.0.1.
Python 3.6.5 кандидат в релизы 1¶Python 3.6.5 release candidate 1
Дата выпуска: 2018-03-13
Безопасность¶Security
bpo-33001: Минимальное исправление для предотвращения переполнения буфера в os.symlink в Windows.
bpo-32981: Регулярные выражения в difflib и poplib были уязвимы к катастрофическому обратному отслеживанию. Эти регулярные выражения представляли потенциальные векторы DOS (REDOS). Они были переработаны. Это устраняет CVE-2018-1060 и CVE-2018-1061. Патч от Jamie Davis.
Ядро и встроенные модули¶Core and Builtins
bpo-33026: Исправлен выход из блока “with” путем установки f_lineno.
bpo-17288: Предотвращены переходы из событий трассировки 'возврат' и 'исключение'.
bpo-32889: Обновлен список подавления Valgrind с учетом переименования
Py_ADDRESS_IN_RANGвaddress_in_range.bpo-32650: Pdb и другие отладчики, зависящие от bdb.py, теперь корректно выполняют шаг (команда next) через нативные корутины. Патч от Pablo Galindo.
bpo-32685: Улучшено предложение, когда форма оператора print из Python 2 находится на той же строке, что и заголовок составного оператора, или завершается точкой с запятой вместо перевода строки. Патч от Nitish Chandra.
bpo-32583: Исправлена возможная аварийная остановка встроенных декодеров Unicode, вызванная ошибками записи за границы при использовании пользовательских обработчиков ошибок декодирования.
bpo-26163: Улучшен хеш frozenset() для создания более различающихся значений хеша при работе с наборами данных, содержащими много похожих значений.
bpo-27169: Константа
__debug__теперь оптимизируется на этапе компиляции. Это также исправляет bpo-22091.bpo-32329:
sys.flags.hash_randomizationтеперь корректно устанавливается в 0, когда рандомизация хеша отключена с помощьюPYTHONHASHSEED=0.bpo-30416: Оптимизатор теперь защищен от затрат значительного времени на выполнение сложных вычислений и потребления большого объема памяти при создании больших констант в процессе свертки констант.
bpo-18533:
repr()для словаря, содержащего свой собственныйvalues()илиitems(), больше не вызываетRecursionError; аналогично для OrderedDict. Вместо этого используйте..., как и для других рекурсивных структур. Патч от Ben North.bpo-32028: Начальные пробелы теперь корректно игнорируются при генерации подсказок для преобразования операторов print из Python 2 во встроенную функцию print в Python 3. Исправление от Sanyam Khurana.
bpo-32137: Представление (repr) глубоко вложенного словаря теперь вызывает RecursionError вместо аварийного завершения из-за переполнения стека.
Библиотека¶Library
bpo-33064: lib2to3 теперь корректно поддерживает завершающие запятые после
*argsи**kwargsв сигнатурах функций.bpo-31804: Исправлена ошибка в multiprocessing.Process, если стандартные потоки были закрыты или равны None при завершении.
bpo-33037: Пропуск отправки/получения данных после закрытия SSL-транспорта.
bpo-30353: Исправлена передача структур по значению в ctypes на 64-разрядных Cygwin/MinGW.
bpo-33009: Исправлена работа inspect.signature() для partialmethod с одним параметром.
bpo-32969: Открыт доступ к нескольким отсутствовавшим константам в zlib и исправлена соответствующая документация.
bpo-32713: Исправлена обработка выходящих за границы значений с плавающей запятой в tarfile.itn. Исправление от Joffrey Fuhrer.
bpo-30622: Модуль ssl теперь обнаруживает отсутствие поддержки NPN в LibreSSL.
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: Обеспечено сохранение sys.argv в виде списка при запуске trace.
bpo-32841: Исправлена проблема
asyncio.Condition, которая молча игнорировала отмену после уведомления и отмены условной блокировки. Исправление от Bar Harel.bpo-31787: Исправлены утечки ссылок (refleaks) методов
__init__()в различных модулях. (Вклад от Oren Milman)bpo-30157: Исправлено угадывание символа кавычек и разделителя в csv.Sniffer.sniff(), когда только последнее поле заключено в кавычки. Исправление от Jake Davis.
bpo-32394: socket: удаление флагов TCP_FASTOPEN, TCP_KEEPCNT в старых версиях Windows во время выполнения.
bpo-32777: Исправлена редкая, но потенциальная взаимоблокировка дочернего процесса перед exec в подпроцессе на системах POSIX при пометке файловых дескрипторов наследуемыми при exec в дочернем процессе. Эта ошибка, по-видимому, была введена в 3.4.
bpo-32647: Модуль ctypes ранее зависел от косвенной компоновки для dlopen. Теперь общее расширение явно компонуется с libdl на платформах, где есть dl.
bpo-32734: Исправлена проблема безопасности
asyncio.Lock(), которая позволяла захватывать и блокировать одну и ту же блокировку несколько раз, не освобождая её. Исправление от Bar Harel.bpo-32727: Не включать поле name в адрес отправителя SMTP-конверта. Исправление от Stéphane Wirtel.
bpo-27931: Исправлена ошибка парсинга заголовка email-адреса, когда имя пользователя – пустая строка в кавычках. Исправление от Xiang Zhang.
bpo-32304: Команда upload из distutils больше не повреждает tar-файлы, заканчивающиеся байтом CR, и больше не пытается преобразовывать CR в CRLF в любых текстовых полях загрузки.
bpo-32502: uuid.uuid1 больше не вызывает исключение при обнаружении 64-битного аппаратного адреса.
bpo-31848: Исправлена обработка ошибок в Aifc_read.initfp(), когда не найден блок SSND. Исправление от Zackery Spytz.
bpo-32555: На FreeBSD и Solaris os.strerror() теперь всегда декодирует байтовую строку из текущей кодировки локали, вместо использования ASCII/surrogateescape в некоторых случаях.
bpo-32521: Модуль nis теперь совместим с новыми libnsl и расположением заголовочных файлов.
bpo-32473: Улучшена читаемость вывода ABCMeta._dump_registry()
bpo-32521: glibc удалил Sun RPC. Используйте замену – заголовки и библиотеку libtirpc в модуле nis.
bpo-32228: Обеспечено сохранение
truncate()позиции в файле (как сообщаетtell()) после записи длиннее размера буфера.bpo-26133: При завершении интерпретатора больше не отписываться от сигналов в цикле событий asyncio UNIX.
bpo-32185: Модуль SSL больше не отправляет IP-адреса в расширении SNI TLS на платформах с OpenSSL 1.0.2+ или inet_pton.
bpo-32323:
urllib.parse.urlsplit()больше не приводит zone-id (scope) к нижнему регистру для адресов IPv6 с областью действия в именах хостов.bpo-32302: Исправление bdist_wininst из distutils для CRT v142: теперь он бинарно совместим с CRT v140.
bpo-32255: Одно пустое поле теперь всегда заключается в кавычки при записи в CSV-файл. Это позволяет отличить пустую строку от строки, состоящей из одного пустого поля. Патч от Licht Takeuchi.
bpo-32277: Возбуждать
NotImplementedErrorвместоSystemErrorна платформах, гдеchmod(..., follow_symlinks=False)не поддерживается. Патч от Anthony Sottile.bpo-32199: Геттер ip в getnode() теперь использует «ip link» вместо «ip link list».
bpo-27456: Обеспечена установка TCP_NODELAY на Linux. Тесты от Victor Stinner.
bpo-31900: Функция
locale.localeconv()теперь временно устанавливает локальLC_CTYPEна локальLC_NUMERICдля декодирования байтовых строкdecimal_pointиthousands_sep, если они не-ASCII или длиннее 1 байта, и локальLC_NUMERICотличается от локалиLC_CTYPE. Это временное изменение затрагивает другие потоки. Аналогичное изменение для методаstr.format()при форматировании числа (int,float,floatи подклассы) с типомn(например,'{:n}'.format(1234)).bpo-31802: Импорт нативного модуля путей (
posixpath,ntpath) теперь работает, даже если модульosещё не импортирован.
Документация¶Documentation
bpo-17232: Уточнена документация для -O и -OO. Патч от Terry Reedy.
bpo-32800: Обновлена ссылка на документ w3c для пространств имён XML по умолчанию.
bpo-8722: Документировать поведение
__getattr__(), когда метод свойстваget()возбуждаетAttributeError.bpo-32614: Изменены примеры регулярных выражений в документации для использования сырых строк во избежание
DeprecationWarning, и добавлен текст в REGEX HOWTO, чтобы подчеркнуть устаревание.bpo-31972: Улучшены строки документации для подклассов
pathlib.PurePath.bpo-17799: Объяснить реальное поведение sys.settrace и sys.setprofile и их аналогов из C API относительно того, какие типы событий принимаются в каждой функции. Патч от Pablo Galindo Salgado.
Тесты¶Tests
bpo-32517: Исправлен сбой
test_asyncioна macOS 10.12.2+, возникший из-за того, что транспорт циклаKqueueSelectorне закрывался.bpo-32721: Исправлен test_hashlib, чтобы он не падал, если модуль _md5 не собран.
bpo-32252: Исправлена faulthandler_suppress_crash_report(), используемая для предотвращения файлов core dump при тестировании аварийных завершений. getrlimit() возвращает ноль при успехе.
bpo-31518: В Debian Unstable отключены TLS 1.0 и 1.1 для SSLv23_METHOD(). Изменён протокол TLS/SSL некоторых тестов на PROTOCOL_TLS или PROTOCOL_TLSv1_2, чтобы они проходили на Debian.
Сборка¶Build
bpo-32635: Исправлено падение (segfault) модуля crypt, когда в системе предоставляется libxcrypt вместо libcrypt.
Windows¶
bpo-33016: Исправлено потенциальное использование неинициализированной памяти в nt._getfinalpathname.
bpo-32903: Исправлена утечка памяти в os.chdir() на Windows, если текущий каталог задан через UNC-путь.
bpo-31966: Исправлен WindowsConsoleIO.write() для записи пустых данных.
bpo-32409: Обеспечена возможность activate.bat обрабатывать содержимое в Юникоде.
bpo-32457: Улучшена обработка денормализованного пути к исполняемому файлу при запуске Python.
bpo-32370: Использовать правильную кодировку для вывода ipconfig в модуле uuid. Патч от Segev Finer.
bpo-29248: Исправлена
os.readlink()в Windows, которая ошибочно tрактовала полеPrintNameOffsetбуфера данных reparse как количество символов вместо количества байтов. Патч от Craig Holmquist и SSE4.bpo-32588: Создан отдельный модуль _distutils_findvs.
macOS¶
bpo-32726: Предоставлен дополнительный, более современный вариант установщика macOS, поддерживающий системы macOS 10.9+ только в 64-битном режиме. Выполнено обновление поставляемых сторонних библиотек до OpenSSL 1.0.2n, XZ 5.2.3 и SQLite 3.22.0. Установщик для 10.9+ теперь связывается и поставляет собственную копию Tcl/Tk 8.6.8.
IDLE¶
bpo-32984: Установка
__file__во время выполнения файла запуска. Как и Python, IDLE опционально выполняет один файл запуска в окне Shell перед выводом первого интерактивного приглашения. Для IDLE-sзапускает файл, указанный в переменной окруженияIDLESTARTUPилиPYTHONSTARTUP;-r fileзапускаетfile. Python устанавливает__file__в имя файла запуска перед его выполнением и сбрасывает его перед первым приглашением. Теперь IDLE делает то же самое при нормальном запуске, без опции-n.bpo-32940: Упрощение и переименование StringTranslatePseudoMapping в pyparse.
bpo-32916: Изменение
strнаcodeв pyparse.bpo-32905: Удаление неиспользуемого кода в модуле pyparse.
bpo-32874: Добавлены тесты для pyparse.
bpo-32837: Использование системной и зависимой от локали кодировки по умолчанию для open() – плохая идея для системно-независимых файлов IDLE.
bpo-32826: Добавлено “encoding=utf-8” для open() в тесте test_help_about IDLE. GUI-тест test_file_buttons() проверяет только начальные строки, содержащие исключительно ascii, но завершался ошибкой в системах, где open() по умолчанию использует ‘ascii’, поскольку readline() внутренне читает и декодирует достаточно далеко, чтобы встретить не-ascii символ в CREDITS.txt.
bpo-32765: Обновлена docstring вкладки General в configdialog для добавления новых виджетов в список виджетов.
Инструменты/Демонстрации¶Tools/Demos
bpo-24960: 2to3 и lib2to3 теперь могут читать сериализованные файлы грамматик с помощью pkgutil.get_data() вместо обращения к файловой системе. Это позволяет 2to3 и lib2to3 работать при запуске из zip-файла.
bpo-32222: Исправлена ошибка pygettext, не извлекавшей docstrings для функций с аннотированными типами аргументов. Патч от Toby Harradine.
C API¶
bpo-29084: Незадокументированный C API для OrderedDict был исключён из ограниченного C API. Он был добавлен по ошибке и фактически никогда не работал в ограниченном C API.
Python 3.6.4 финальная¶Python 3.6.4 final
Дата выхода: 2017-12-18
В версии 3.6.4 по сравнению с v3.6.4rc1 не было внесено никаких новых изменений кода.
Python 3.6.4 кандидат в релизы 1¶Python 3.6.4 release candidate 1
Дата выхода: 2017-12-05
Ядро и встроенные модули¶Core and Builtins
bpo-32176: co_flags.CO_NOFREE теперь всегда корректно устанавливается конструктором объекта кода на основе freevars и cellvars, вместо необходимости корректной установки вызывающим кодом. Это гарантирует, что он будет автоматически сброшен при добавлении дополнительных cell-ссылок в изменённый объект кода и функцию.
bpo-31949: Исправлено несколько проблем с выводом traceback (PyTraceBack_Print()). Установка sys.tracebacklimit в 0 или меньше теперь подавляет вывод traceback. Установка sys.tracebacklimit в None теперь приводит к использованию предела по умолчанию. Установка sys.tracebacklimit в целое число больше LONG_MAX теперь означает использование предела LONG_MAX вместо предела по умолчанию. Исправлены целочисленные переполнения в случае более 2**31 элементов traceback на Windows. Исправлена обработка ошибок вывода.
bpo-30696: Исправлено бесконечное зацикливание интерактивного интерпретатора при нехватке памяти.
bpo-20047: Методы bytearray partition() и rpartition() теперь принимают в качестве разделителя только байтоподобные объекты, как и документировано. В частности, теперь они вызывают TypeError, а не возвращают ошибочный результат, если в качестве разделителя передан целое число.
bpo-31852: Исправлена ошибка сегментации, возникавшая из-за комбинации мягкого ключевого слова async и строк продолжения.
bpo-21720: BytesWarning больше не выводится, когда аргумент fromlist
__import__()или атрибут__all__модуля содержат экземпляры bytes.bpo-31825: Исправлена ошибка OverflowError в кодировке ‘unicode-escape’ и в codecs.escape_decode() при декодировании экранированного не-ascii байта.
bpo-28603: Вывод полной цепочки контекста/причины исключений при завершении интерпретатора, даже если какое-либо исключение в цепочке не может быть хешировано или сравнивается как равное с последующими. Патч от Zane Bitter.
bpo-31786: Исправлено округление таймаута в модуле select для корректного округления отрицательных таймаутов между -1.0 и 0.0. Функции теперь блокируются в ожидании событий как и ожидалось. Ранее вызов некорректно не блокировался. Патч от Pablo Galindo.
bpo-31642: Восстановлена блокировка при импорте "from package import module" путем установки sys.modules["package.module"] в None.
bpo-31626: Исправлена ошибка в отладочном распределителе памяти. Производилась запись в освобожденную память после уменьшения блока памяти.
bpo-31619: Исправлен ValueError при преобразовании строки с большим количеством символов подчеркивания в целое число с двоичным основанием.
bpo-31592: Исправлен сбой утверждения в парсере Python в случае некорректного
unicodedata.normalize(). Патч от Oren Milman.bpo-31588: Возвращается
TypeErrorс понятным сообщением об ошибке, когда создание класса завершается неудачей из-за метакласса с некорректным методом__prepare__(). Патч от Oren Milman.bpo-31566: Исправлена ошибка утверждения в
_warnings.warn()при некорректной глобальной переменной__name__. Патч от Oren Milman.bpo-31505: Исправлена ошибка утверждения в
json, если_json.make_encoder()получил некорректный аргументencoder(). Патч от 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: Исправлен сбой в методе
__setstate__()классаctypes._CDataв случае некорректного__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(), например, при нехватке памяти.
Библиотека¶Library
bpo-28556: Два мелких исправления для модуля
typing: разрешено поверхностное копирование экземпляров обобщенных классов, улучшено взаимодействие__init_subclass__с обобщениями. Оригинальные PR от Ivan Levkivskyi.bpo-27240: Алгоритм сворачивания заголовков для новых политик email был переписан, что также исправляет bpo-30788, bpo-31831 и bpo-32182. В частности, сворачивание RFC2231 теперь выполняется корректно.
bpo-32186: Методы io.FileIO.readall() и io.FileIO.read() теперь освобождают GIL при получении размера файла. Исправлено зависание всех потоков при недоступном NFS-сервере. Патч от Nir Soffer.
bpo-12239: Сделать
msilib.SummaryInformation.GetProperty(), чтобы он возвращалNone, когда значение свойства равноVT_EMPTY. Первоначальный патч от Mark Mc Mahon.bpo-31325: Исправлено некорректное использование
collections.namedtuple()в методеRobotFileParser.parse(). Первоначальный патч от Robin Wellner.bpo-12382:
msilib.OpenDatabase()теперь генерирует более понятное сообщение об исключении, когда не удается открыть или создать MSI-файл. Первоначальный патч от William Tisäter.bpo-32110:
codecs.StreamReader.read(n)теперь возвращает не более n символов/байт для неотрицательного n. Это делает его совместимым с методамиread()других файлоподобных объектов.bpo-32072: Исправлены проблемы с двоичными plist-файлами: исправлено сохранение массива байтов. Идентичные объекты будут сохраняться только один раз. Равные ссылки будут загружаться как идентичные объекты. Добавлена поддержка сохранения и загрузки рекурсивных структур данных.
bpo-32034: asyncio.IncompleteReadError и LimitOverrunError теперь сериализуемы с помощью pickle.
bpo-32015: Исправлена проблема с циклом событий asyncio при повторном подключении сокета во время ожидания асинхронного чтения/записи из/в сокет.
bpo-32011: Восстановлена поддержка загрузки marshal-файлов с кодом TYPE_INT64. Такие файлы могут быть созданы в Python 2.7.
bpo-31970: Снижены накладные расходы на производительность отладочного режима asyncio.
bpo-9678: Исправлено определение MAC-адреса в модуле uuid: используется ifconfig на NetBSD и OpenBSD; arp на Linux, FreeBSD, NetBSD и OpenBSD. Основано на патче от Takayuki Shimizukawa.
bpo-30057: Исправлена потенциальная потеря сигнала в signal.signal().
bpo-31933: Исправлены параметры Blake2 leaf_size и node_offset на платформах с обратным порядком байт. Патч от Jack O'Connor.
bpo-31927: Исправлена компиляция модуля socket на NetBSD 8. Исправлен сбой утверждения или чтение произвольных данных при разборе адреса AF_BLUETOOTH на NetBSD и DragonFly BSD.
bpo-27666: Исправлено повреждение стека в curses.box() и curses.ungetmouse(), когда размер типов chtype или mmask_t меньше размера C long. curses.box() теперь принимает символы в качестве аргументов. Основано на патче Стива Финка.
bpo-31897: plistlib теперь перехватывает больше ошибок при чтении бинарных plist-файлов и возбуждает InvalidFileException вместо неожиданных исключений.
bpo-25720: Исправлен метод проверки состояния pad окна curses WINDOW. Патч от Масаюки Ямамото.
bpo-31893: Исправлена структура kqueue_event на OpenBSD и NetBSD. Исправлено сравнение объектов kqueue_event.
bpo-31891: Исправлена сборка модуля curses на NetBSD.
bpo-28416: Экземпляры подкласса pickle.Pickler с методом persistent_id() и подкласса pickle.Unpickler с методом persistent_load() больше не создают циклические ссылки.
bpo-28326: Исправлен multiprocessing.Process, когда stdout и/или stderr закрыты или равны None.
bpo-31457: Если используются вложенные адаптеры логирования, внутренние методы
process()больше не пропускаются.bpo-31457: Свойство
managerу объектов LoggerAdapter теперь можно корректно устанавливать.bpo-31806: Исправлено округление таймаута в time.sleep(), threading.Lock.acquire() и socket.socket.settimeout() для корректного округления отрицательных таймаутов между -1.0 и 0.0. Функции теперь блокируются в ожидании событий, как и ожидалось. Ранее вызов был некорректно неблокирующим. Патч от Пабло Галиндо.
bpo-28603: traceback: Исправлен TypeError, возникавший при печати трассировок исключений, когда текущее исключение или исключение в цепочке контекста/причины было нехешируемым. Патч от Зейна Биттера.
bpo-30058: Исправлено переполнение буфера в select.kqueue.control().
bpo-31770: Предотвращение сбоя при вызове метода
__init__()объектаsqlite3.Cursorболее одного раза. Патч от Орена Милмана.bpo-31672:
idpatternвstring.Templateсопоставлялся с некоторыми не-ASCII символами. Теперь используется локальный флаг регулярного выражения-iдля избежания не-ASCII символов.bpo-31764: Предотвращение сбоя в
sqlite3.Cursor.close()в случае, если объектCursorне инициализирован. Патч от Орена Милмана.bpo-31752: Исправлен возможный сбой в конструкторе timedelta, вызываемом с пользовательскими целыми числами.
bpo-31701: На Windows faulthandler.enable() теперь игнорирует исключения MSC и COM.
bpo-31728: Предотвращение сбоев в
_elementtreeиз-за небезопасной очисткиElement.textиElement.tail. Патч от Орена Милмана.bpo-31620: пустая asyncio.Queue больше не допускает утечку памяти при истечении таймаута опросов queue.get
bpo-31632: Исправлен метод set_protocol() класса _SSLProtocolTransport в модуле asyncio. Ранее этот метод изменял неправильную ссылку на протокол.
bpo-31675: Исправлены утечки памяти в методах Tkinter splitlist() и split() при передаче строки размером более 2 ГБ.
bpo-31673: Исправлена опечатка в названии метода Tkinter adderrorinfo().
bpo-30806: Исправлено строковое представление объекта netrc.
bpo-15037: Добавлен обходной путь для getkey() в curses для ncurses 5.7 и ранее.
bpo-25351: Предотвращение сбоев активации venv с неопределёнными переменными
bpo-25532: inspect.unwrap() теперь будет пытаться развернуть объект только sys.getrecursionlimit() раз, для защиты от объектов, которые создают новый объект при каждом доступе к атрибуту.
bpo-30347: Прекращение сбоев при параллельной итерации по итераторам itertools.groupby().
bpo-31516:
threading.current_thread()не должен возвращать фиктивный поток при завершении работы.bpo-31351: python -m ensurepip теперь завершается с ненулевым кодом возврата, если начальная загрузка pip завершилась неудачно.
bpo-31482:
random.seed()теперь работает с bytes в version=1bpo-31334: Исправлен
poll.poll([timeout])в модулеselectдля произвольных отрицательных таймаутов на всех ОС, где он может быть только неотрицательным целым числом или -1. Патч от Риккардо Коччоли.bpo-31310: отслеживатель семафоров multiprocessing должен запускаться снова, если\nпроизошёл сбой.
bpo-31308: сделать процесс forkserver модуля multiprocessing устойчивым к Ctrl-C и\nдругим пользовательским прерываниям. Если он аварийно завершится, перезапускать его при необходимости.
Документация¶Documentation
bpo-32105: Добавлен asyncio.BaseEventLoop.connect_accepted_socket\nмаркер versionadded.
bpo-31537: Исправлено неверное использование
get_history_lengthв readline\nпримере кода документации. Патч от Брэда Смита.bpo-30085: Для ясности предпочтительны функции оператора без двойного подчёркивания.\nФункции с подчёркиваниями сохранены только для\nобратной совместимости.
Тесты¶Tests
bpo-31380: Пропускать test_httpservers и test_undecodable_file на macOS: завершаются ошибкой на APFS.
bpo-31705: Пропускать test_socket.test_sha256() на ядре Linux старше 4.5.\nТест завершается ошибкой с ENOKEY на ядре 3.10 (на ppc64le). Исправление было включено\nв ядро 4.5.
bpo-31174: Исправлен test_tools.test_unparse: DirectoryTestCase теперь сохраняет\nобразцы имён для того, чтобы всегда тестировать одни и те же файлы. Это предотвращает ложные срабатывания при\nпоиске утечек ссылок.
bpo-30695: Добавлены функции
set_nomemory(start, stop)иremove_mem_hooks()в модуль _testcapi.
Сборка¶Build
bpo-32059:
detect_modules()вsetup.pyтеперь также выполняет поиск\nпутей sysroot при кросс-компиляции.bpo-31957: Исправлено определение версии Windows SDK при сборке для Windows.
bpo-31609: Исправлены кавычки в PCbuild/clean.bat
bpo-31934: Прерывать сборку при сборке из нечистого дерева исходников.
bpo-31926: Исправлена ситуация, когда Argument Clinic иногда вызывал ошибки компиляции, если\nв .c-файле было более одной функции и/или метода с одинаковым\nименем.
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, если ничего не\nизменилось.
Windows¶
macOS¶
bpo-31392: Обновлён установщик macOS для использования OpenSSL 1.0.2m
IDLE¶
bpo-32207: Улучшена трассировка исключений событий tk в IDLE. Когда обработка событий tk\nуправляется циклом выполнения IDLE, к трассировке исключений событий tk больше не добавляется\nсбивающий с толку и отвлекающий контекст трассировки queue.EMPTY.\nТеперь трассировка такая же, как когда обработка событий\nуправляется пользовательским кодом. Патч основан на предложении Serhiy Storchaka.
bpo-32164: Удалён неиспользуемый файл idlelib/tabbedpages.py. Использование TabbedPageSet\nв configdialog заменено на ttk.Notebook.
bpo-32100: IDLE: Исправлены старые и новые ошибки в pathbrowser; улучшены тесты. Патч\nв основном от Cheryl Sabella.
bpo-31858: IDLE – ограничить манипуляции с приглашением оболочки только самой оболочкой. Редактор\nи окна вывода видят только пустую последнюю строку приглашения. Это упрощает\nкод и исправляет незначительную ошибку при вставке перевода строки. Sys.ps1, если\nприсутствует, считывается при запуске оболочки, но не устанавливается и не изменяется.
bpo-31860: Образец шрифта в диалоге настройки IDLE теперь можно редактировать.\nИзменения сохраняются, пока IDLE открыт.
bpo-31836: Test_code_module теперь проходит, если запущен после test_idle, который устанавливает ps1. Модуль code использует sys.ps1, если он присутствует, или устанавливает его в ‘>>> ‘, если нет. Test_code_module теперь корректно проверяет оба поведения. Аналогично для ps2.
bpo-28603: Исправлен TypeError, вызывавший перезапуск оболочки при выводе трассировки, содержащей исключение, которое не является хешируемым. Патч от Zane Bitter.
bpo-13802: В образце шрифтов в настройках IDLE используются нелатинские символы. Даже если выбран шрифт, определяющий ограниченное подмножество символов unicode Basic Multilingual Plane, tcl/tk будет использовать другие шрифты, определяющие символ. Расширенный пример дает пользователям нелатинских символов лучшее представление о том, что они могут увидеть в оболочке и редакторах IDLE. Чтобы освободить место для расширенного примера, фреймы на вкладке Font были переупорядочены. Справка Font/Tabs немного объясняет эти добавления.
bpo-31460: Упрощение API браузера модулей IDLE. Передача виджета вместо flist с корневым виджетом открывает возможность создания фрейма браузера, который является только частью окна. Передача полного имени файла вместо частей, предполагаемых из файла .py, открывает возможность просмотра файлов python, которые не заканчиваются на .py.
bpo-31649: IDLE – сделать параметры _htest, _utest только именованными.
bpo-31559: Устранение зависимости от порядка тестов в idle_test.test_browser.
bpo-31459: Переименование браузера модулей IDLE из Class Browser в Module Browser. Исходный браузер классов и методов на уровне модуля стал браузером модулей с добавлением функций уровня модуля много лет назад. Вложенные классы и функции были добавлены вчера. Для обратной совместимости виртуальное событие <<open-class-browser>>, которое появляется на вкладке Keys диалога Settings, не изменено. Патч от Cheryl Sabella.
bpo-31500: Шрифты по умолчанию теперь масштабируются на дисплеях HiDPI.
bpo-1612262: Браузер модулей IDLE теперь показывает вложенные классы и функции. Исходные патчи для кода и тестов от Guilherme Polo и Cheryl Sabella соответственно.
Инструменты/Демонстрации¶Tools/Demos
bpo-30722: Сделать redemo работающим с Python 3.6 и новее. Также удалить опцию
LOCALE, поскольку она не работает со строковыми шаблонами в Python 3. Патч от Christoph Sarnowski.
C API¶
bpo-20891: Исправление PyGILState_Ensure(). Когда PyGILState_Ensure() вызывается в потоке, не являющемся Python, до вызова PyEval_InitThreads(), вызывать PyEval_InitThreads() только после вызова PyThreadState_New() для предотвращения аварийного завершения.
bpo-31532: Исправление повреждения памяти из-за смешивания аллокаторов в getpath.c между Py_GetPath() и Py_SetPath().
bpo-30697: Синглтон
PyExc_RecursionErrorInstудален, иPyErr_NormalizeException()больше его не использует. Этот синглтон является постоянным, и его элементы никогда не очищаются, что может вызвать segfault во время финализации интерпретатора. Смотрите также bpo-22898.
Python 3.6.3 финальный¶Python 3.6.3 final
Дата выпуска: 2017-10-03
Библиотека¶Library
bpo-31641: Снова разрешить произвольные итерабельные объекты в
concurrent.futures.as_completed(). Исправление регрессии в 3.6.3rc1.
Сборка¶Build
Python 3.6.3 кандидат в релизы 1¶Python 3.6.3 release candidate 1
Дата выпуска: 2017-09-18
Безопасность¶Security
Ядро и встроенные модули¶Core and Builtins
bpo-31471: Исправлена ошибка утверждения в
subprocess.Popen()на Windows, если аргумент env имеет некорректный метод keys(). Патч от Oren Milman.bpo-31418: Исправление ошибки утверждения в
PyErr_WriteUnraisable()в случае исключения с неправильным атрибутом__module__. Патч от Oren Milman.bpo-31416: Исправление ошибок утверждения в случае некорректного warnings.filters или warnings.defaultaction. Патч от Oren Milman.
bpo-31411: Вызывать TypeError вместо SystemError в случае, если warnings.onceregistry не является словарем. Патч от Oren Milman.
bpo-31373: Исправлено несколько возможных случаев неопределённого поведения из-за понижения точности чисел с плавающей запятой.
bpo-30465: Информация о расположении (
linenoиcol_offset) в f-строках теперь (почти) корректна. Это исправляет такие инструменты, как flake8, которые показывали предупреждения не на той строке (обычно на первой строке файла).bpo-31343: добавлено включение sys/sysmacros.h для функций major(), minor() и makedev(). Библиотека GNU C планирует удалить эти функции из sys/types.h.
bpo-31291: Исправлена ошибка утверждения в
zipimport.zipimporter.get_dataна Windows, когда возвращаемое значениеpathname.replace('/','\\')не является строкой. Патч от Oren Milman.bpo-31271: Исправлена ошибка утверждения в методе write() объекта
io.TextIOWrapper, когда кодировщик не возвращает объект bytes. Патч от Oren Milman.bpo-31243: Исправлен сбой в некоторых методах
io.TextIOWrapper, когда состояние декодера недействительно. Патч от Орен Милмана.bpo-30721:
printтеперь показывает правильную подсказку для использования синтаксиса перенаправления вывода в Python 2. Патч от Саньяма Хураны.bpo-31070: Исправлено состояние гонки в importlib _get_module_lock().
bpo-31095: Исправлен потенциальный сбой во время сборки мусора, вызванный
tp_dealloc, который не вызываетPyObject_GC_UnTrack().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: Избегание блокировки в pthread_mutex_lock(), когда PyThread_acquire_lock() запрашивается без блокировки.
bpo-31161: Обеспечено, что сообщение об ошибке синтаксиса «Missing parentheses» применяется только к SyntaxError, а не к подклассам. Патч от Мартейна Питерса.
bpo-30814: Исправлено состояние гонки при импорте подмодуля из пакета.
bpo-30597:
printтеперь показывает ожидаемый ввод в пользовательском сообщении об ошибке при использовании в качестве оператора Python 2. Патч от Саньяма Хураны.
Библиотека¶Library
bpo-31499: xml.etree: Исправлен сбой, когда парсер является частью цикла ссылок.
bpo-28556: typing.get_type_hints теперь находит правильное пространство имён globalns для классов и модулей по умолчанию (когда вызывающий не указал
globalns).bpo-28556: Ускорение модуля
typing. Оригинальные PR от Ивана Левкивского и Митяра.bpo-31544: Модуль-ускоритель C в ElementTree игнорировал исключения, возникающие при поиске целевых методов TreeBuilder в XMLParser().
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 115): https://github.com/libexpat/libexpat/issues/115
bpo-29136: Добавлены наборы шифров TLS 1.3 и OP_NO_TLSv1_3.
bpo-29212: Исправлена работа потоков ThreadPoolExecutor из concurrent.futures.thread: теперь по умолчанию, если не указан thread_name_prefix, имена потоков не основаны на repr(). Потоки теперь идентифицируют себя как «ThreadPoolExecutor-y_n».
bpo-9146: Исправлено нарушение сегментации в _hashopenssl, когда в подключённой библиотеке OpenSSL недоступны стандартные хэш-функции, такие как md5. Например, в некоторых специальных средах сборки FIPS-140.
bpo-27144: Итераторы
map()иas_completed()вconcurrent.futuresтеперь не сохраняют ссылку на возвращаемые объекты.bpo-10746: Исправлена ошибка ctypes, приводящая к неправильным кодам типов PEP 3118 для целочисленных типов.
bpo-22536: Модуль подпроцесс теперь устанавливает имя файла при возникновении FileNotFoundError на системах POSIX, если не найден исполняемый файл или рабочая директория (cwd).
bpo-31249: concurrent.futures: метод WorkItem.run(), используемый ThreadPoolExecutor, теперь разрывает циклическую ссылку между объектом исключения и объектом WorkItem.
bpo-31247: xmlrpc.server теперь явно разрывает циклические ссылки при использовании sys.exc_info() в коде обработки исключений.
bpo-30102: Модули ssl и hashlib теперь вызывают OPENSSL_add_all_algorithms_noconf() для OpenSSL версии ниже 1.1.0. Эта функция определяет возможности процессора и включает оптимизации на некоторых архитектурах, таких как POWER8. Патч основан на исследовании Густаво Серры Скалета.
bpo-31185: Исправлены различные ошибки в модуле ускорения asyncio.
bpo-31135: ttk: исправлен метод destroy() классов LabeledScale и OptionMenu. Теперь вызывается родительский метод destroy(), даже если используемый атрибут не существует. Метод LabeledScale.destroy() также теперь явно очищает атрибуты label и scale, чтобы помочь сборщику мусора уничтожить все виджеты.
bpo-31107: Исправлено вычисление искажённого атрибута
copyreg._slotnames()для классов, имя которых начинается с подчёркивания. Патч от Шейна Харви.bpo-31061: Исправлен сбой при использовании asyncio и потоков.
bpo-30502: Исправлена обработка длинных OID в ssl. На основе патча Кристиана Хаймса.
bpo-30119: ftplib.FTP.putline() теперь выбрасывает ValueError для команд, содержащих CR или LF. Исправление от Dong-hee Na.
bpo-30595: multiprocessing.Queue.get() с таймаутом теперь опрашивает свой читатель в неблокирующем режиме, если удалось захватить блокировку, но захват занял больше времени, чем таймаут.
bpo-29403: Исправлена автоматическая спецификация (autospec)
unittest.mock, чтобы она не выдавала ошибку на методах, привязанных к встроенным функциям. Патч от Aaron Gallagher.bpo-30961: Исправлено уменьшение счётчика заимствованной ссылки (borrowed reference) в tracemalloc.
bpo-25684: Изменены
ttk.OptionMenuрадиокнопки так, чтобы они были уникальными для всех экземпляровOptionMenu.bpo-30886: Исправлена multiprocessing.Queue.join_thread(): теперь она ждёт завершения потока, даже если поток был запущен тем же процессом, который создал очередь.
bpo-29854: Исправлено падение (segfault) в 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: Исправлен парсер значений заголовков email, который в определённых случаях удалял сворачиваемые пробельные символы (folding white space).
bpo-30879: os.listdir() и os.scandir() теперь возвращают имена в виде байтов, если были вызваны с аргументом, подобным байтам (bytes-like).
bpo-30746: Запрещён символ ‘=’ в именах переменных окружения в
os.putenv()иos.spawn*().bpo-29755: Исправлено семейство функций lgettext() в модуле gettext. Теперь они всегда возвращают байты.
Документация¶Documentation
bpo-31294: Исправлен неполный фрагмент кода в примерах ZeroMQSocketListener и ZeroMQSocketHandler, выполнена их адаптация для Python 3.
bpo-21649: Добавлены ссылки на RFC 7525 и рекомендации Mozilla по серверному TLS в документацию по SSL.
bpo-30803: Уточнена документация по проверке истинности значений. Оригинальный патч от Петера Томассена.
Тесты¶Tests
bpo-31320: Подавление traceback в test_ssl
bpo-25674: Удаление ssl-теста sha256.tbs-internet.com
bpo-30715: Учтены изменения ALPN-колбэка для OpenSSL 1.1.0f. Последняя версия ведёт себя как OpenSSL 1.0.2 и больше не прерывает рукопожатие.
bpo-30822: regrtest: Исключение tzdata из regrtest –all. При запуске набора тестов с параметром –use=all / -u all исключать tzdata, так как из-за него test_datetime выполняется слишком долго (15–20 минут на некоторых сборочных фермах), что приводит к тайм-ауту на некоторых сборочных фермах. Также исправлен парсер командной строки regrtest, чтобы можно было передавать -u extralargefile для запуска test_zipfile64.
Сборка¶Build
bpo-30854: Исправление ошибки компиляции при сборке с –without-threads. Патч от Masayuki Yamamoto.
Windows¶
bpo-30389: Добавлено обнаружение Visual Studio 2017 в distutils на Windows.
bpo-31340: Переход на сборку с MSVC v141 (входит в Visual Studio 2017)
bpo-30581: os.cpu_count() теперь возвращает правильное количество процессоров в Windows, когда число логических процессоров больше 64.
bpo-30731: Добавлен отсутствующий xmlns в python.manifest для соответствия схеме.
IDLE¶
bpo-31493: IDLE code context – исправлены таймеры обновления кода и шрифта. Отмена таймеров предотвращает появление предупреждения при завершении test_idle.
bpo-31488: IDLE – обновление неключевых параметров в бывших классах расширений. При применении изменений в configdialog вызывать .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: Перегруппировка GenPage диалога конфигурации IDLE в разделы Window, Editor и Help.
bpo-30617: IDLE – добавление строк документации и тестов для подкласса окна вывода редактора. Перенос некоторых данных и функций из класса на уровень модуля. Патч от Cheryl Sabella.
bpo-31287: IDLE – не изменять tkinter.message в test_configdialog.
bpo-27099: Преобразование встроенных «расширений» IDLE в обычные функции. Около 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: Выделение класса HighPage(Frame) из ConfigDialog. Патч от Cheryl Sabella.
bpo-31001: Добавление тестов для вкладки highlight в configdialog. Патч от Cheryl Sabella.
bpo-31205: IDLE: Выделение класса KeysPage(Frame) из ConfigDialog. Слегка изменённые тесты продолжают проходить. Патч от Cheryl Sabella.
bpo-31130: IDLE – устранение утечек в test_configdialog. Первоначальный патч от Victor Stinner.
bpo-31002: Добавление тестов для вкладки keys в configdialog. Патч от Cheryl Sabella.
bpo-19903: IDLE: Подсказки вызовов используют
inspect.signatureвместоinspect.getfullargspec. Это улучшает подсказки для встроенных функций, преобразованных для использования Argument Clinic. Патч от Louie Lu.bpo-31083: IDLE – добавление наброска класса TabPage в configdialog. Обновление существующих классов в соответствии с наброском. Первоначальный патч от Cheryl Sabella.
bpo-31050: Выделение класса GenPage(Frame) из ConfigDialog. Слегка изменённые тесты продолжают проходить. Патч от Cheryl Sabella.
bpo-31004: IDLE – выделение класса FontPage(Frame) из ConfigDialog. Слегка изменённые тесты продолжают проходить. Исправление тестов General. Патч в основном от Cheryl Sabella.
bpo-30781: IDLE – использование ttk виджетов в ConfigDialog. Патчи от Terry Jan Reedy и Cheryl Sabella.
bpo-31060: IDLE – завершить перегруппировку методов ConfigDialog. Группировка методов, относящихся к каждой вкладке и кнопкам, поможет писать тесты и улучшать вкладки, а также позволит разделить группы на классы.
bpo-30853: IDLE – выделить класс VarTrace из ConfigDialog. Экземпляр tracers управляет парами, состоящими из tk-переменной и колбэк-функции. Когда отслеживание включено, присвоение переменной вызывает функцию. Покрытие тестами нового класса – 100%.
bpo-31003: IDLE – добавить больше тестов для вкладки General.
bpo-30993: IDLE – улучшить страницу шрифтов в configdialog и тесты. В configdialog: документировать причинно-следственные связи в docstring create_font_tab. Упростить некоторые имена атрибутов. Переместить вызовы set_samples в var_changed_font (идея от Cheryl Sabella). Переместить связанные функции в позиции после функции создания виджетов. В test_configdialog: исправить test_font_set, чтобы он не зависел от порядка. Исправить переименованный test_indent_scale, чтобы он тестировал виджет. Настроить тесты для перемещения вызова set_samples. Добавить тесты для функций загрузки. Сгруппировать все тесты шрифтов в один класс, а тесты отступов вкладок – в другой. За исключением двух строк, эти тесты полностью покрывают связанные функции.
bpo-30981: IDLE – добавить больше тестов страницы шрифтов configdialog.
bpo-28523: IDLE – заменить ‘colour’ на ‘color’ в configdialog.
bpo-30917: Добавить тесты для idlelib.config.IdleConf. Увеличить покрытие с 46% до 96%. Патч от Louie Lu.
bpo-30934: Документировать детали покрытия для тестов idlelib. Добавить раздел в idlelib/idle-test/README.txt. Включить проверку того, что ветки выполняются в обоих направлениях. Исключить специфичный для IDLE код, который не выполняется во время модульных тестов.
bpo-30913: IDLE – документировать tk Vars, методы и виджеты ConfigDialog в docstrings. Это упростит улучшение диалога и разделение класса. Оригинальный патч от Cheryl Sabella.
bpo-30899: IDLE – добавить тесты для подклассов ConfigParser в config. Патч от Louie Lu.
bpo-30881: IDLE – добавить docstrings в browser.py. Патч от Cheryl Sabella.
bpo-30851: IDLE – удалить неиспользуемые переменные в configdialog. Одна dублируется, другая устанавливается, но пользователи не могут её изменить. Патч от Cheryl Sabella.
bpo-30870: IDLE – в диалоге настроек выбирать шрифт с помощью клавиш Вверх, Вниз, а также мыши. Начальный патч от Louie Lu.
bpo-8231: IDLE – вызывать config.IdleConf.GetUserCfgDir только один раз.
bpo-30779: IDLE – выделить класс ConfigChanges из configdialog, поместить в config; протестировать. * В config поместить дамп-тестовый код в функцию; запускать его и юниттесты в ‘if __name__ == ‘__main__’. * Добавить класс config.ConfigChanges на основе changes_class_v4.py из тикета bpo. * Добавить класс test_config.ChangesTest, частично используя configdialog_tests_v1.py. * Пересмотреть configdialog для использования ConfigChanges; см. tracker msg297804. * Пересмотреть test_configdialog в соответствии с изменениями configdialog. * Удалить функции configdialog, которые не используются или перемещены в ConfigChanges. Cheryl Sabella предоставила части патча.
bpo-30777: IDLE – configdialog – добавить docstrings и исправить комментарии. Патч от Cheryl Sabella.
bpo-30495: IDLE – улучшить textview с помощью docstrings, имён по PEP8 и большего количества тестов. Патч от Cheryl Sabella.
bpo-30723: IDLE – внести несколько улучшений в parenmatch. Добавить стиль ‘parens’ для подсветки открывающей и закрывающей скобок. Сделать стиль ‘default’, который не является по умолчанию, синонимом ‘opener’. Сделать задержку времени одинаковой для всех стилей. Добавить справку для вкладки расширений диалога настроек, включая справку для parenmatch. Добавить новые тесты. Оригинальный патч от Charles Wohlganger.
bpo-30674: IDLE – добавить docstrings в модуль grep. Патч от Cheryl Sabella
bpo-21519: Базовый диалог настройки клавиш IDLE теперь правильно обнаруживает dубликаты. Оригинальный патч от 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.
Инструменты/Демонстрации¶Tools/Demos
bpo-30983: Команды интеграции gdb (py-bt и т.д.) теперь работают и на оптимизированных совместно собираемых сборках. PEP 523 ввёл _PyEval_EvalFrameDefault, который встраивает PyEval_EvalFrameEx в неотладочных совместно собираемых сборках. Это нарушило возможность использовать py-bt, py-up и некоторые другие интеграции gdb, специфичные для Python. Проблема исправлена поиском только фреймов _PyEval_EvalFrameDefault в python-gdb.py. Оригинальный патч от Bruno “Polaco” Penteado.
Python 3.6.2 финальная¶Python 3.6.2 final
Дата выпуска: 2017-07-17
Изменений по сравнению с кандидатом в релиз 2 нет.
Python 3.6.2 кандидат в релизы 2¶Python 3.6.2 release candidate 2
Дата выпуска: 2017-07-07
Безопасность¶Security
bpo-30730: Предотвращено внедрение переменных окружения в подпроцессе на Windows. Предотвращена передача других переменных окружения и аргументов командной строки.
bpo-30694: Обновление копии expat с версии 2.2.0 до 2.2.1 для исправления множества уязвимостей, включая: CVE-2017-9233 (бесконечный цикл отказа в обслуживании внешних сущностей), CVE-2016-9063 (целочисленное переполнение, повторное исправление), CVE-2016-0718 (исправление регрессий, вызванных исправлением CVE-2016-0718 в версии 2.2.0) и CVE-2012-0876 (противодействие хеш-флудингу с помощью SipHash). Примечание: уязвимость CVE-2016-5300 (использование специфичных для ОС источников энтропии, таких как getrandom) не затрагивает Python, поскольку Python уже получает энтропию от ОС для установки секрета expat через
XML_SetHashSalt().bpo-30500: Исправлена urllib.parse.splithost() для корректного разбора фрагментов. Например,
splithost('//127.0.0.1#@evil.com/')теперь корректно возвращает127.0.0.1хост, вместо того чтобы рассматривать@evil.comкак хост в аутентификации (login@host).
Python 3.6.2 кандидат в релизы 1¶Python 3.6.2 release candidate 1
Дата выпуска: 2017-06-17
Ядро и встроенные модули¶Core and Builtins
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__() для неинтернированных имён атрибутов. Основано на патче от Eryk Sun.
bpo-30039: Если KeyboardInterrupt возникает в момент, когда интерпретатор находится в процессе возобновления цепочки вложенных вызовов 'yield from' или 'await', исключение теперь корректно доставляется во внутренний фрейм.
bpo-12414: sys.getsizeof() для объекта code теперь возвращает размеры, включающие структуру code и размеры объектов, на которые он ссылается. Патч от Dong-hee Na.
bpo-29949: Исправлена регрессия использования памяти для объектов set и frozenset.
bpo-29935: Исправлены сообщения об ошибках в методе index() кортежа, списка и deque при передаче индексов неверного типа.
bpo-29859: Показываются корректные сообщения об ошибках при сбое любого из вызовов pthread_* в thread_pthread.h.
bpo-28876:
bool(range)работает, даже еслиlen(range)вызываетOverflowError.bpo-29600: Исправлена обёртка возвращаемых значений корутины в StopIteration.
bpo-28856: Исправлена недоработка: формат %b для bytes должен поддерживать объекты, следующие протоколу буфера.
bpo-29714: Исправлена регрессия: форматирование bytes могло завершаться ошибкой при наличии нулевых байтов внутри.
bpo-29478: Если указано max_line_length=None при использовании политики Compat32, этот параметр больше не игнорируется. Патч от Mircea Cosbuc.
Библиотека¶Library
bpo-30616: Функциональный API перечисления (enum) позволяет создавать пустые перечисления. Исправление от Dong-hee Na
bpo-30038: Исправлено состояние гонки между доставкой сигнала и файловым дескриптором пробуждения. Патч от Nathaniel Smith.
bpo-23894: lib2to3 теперь распознаёт строки
rb'...'иf'...'.bpo-23890: unittest.TestCase.assertRaises() теперь вручную разрывает циклические ссылки, чтобы объекты не оставались в памяти дольше, чем ожидается.
bpo-30149: inspect.signature() теперь поддерживает вызываемые объекты с параметрами переменного числа аргументов, обёрнутыми с помощью partialmethod. Исправление от Dong-hee Na.
bpo-30645: Исправлено вычисление пути в imp.load_package() для случаев, когда пакет распространяется только в виде байткода. Патч от Alexandru Ardelean.
bpo-29931: Исправлена проверка сравнения для объектов ipaddress.ip_interface. Патч от Sanjay Sundaresan.
bpo-30605: re.compile() больше не вызывает BytesWarning при компиляции экземпляра bytes с неправильно расположенным модификатором внутри строки. Патч от Roy Williams.
Безопасность¶Security
bpo-29591: Обновление копии expat с версии 2.1.1 до 2.2.0 для получения исправлений CVE-2016-0718 и CVE-2016-4472. Подробнее см. https://sourceforge.net/p/expat/bugs/537/.
Библиотека¶Library
bpo-24484: Избежать состояния гонки при очистке в multiprocessing (#2159)
bpo-28994: Трассировка (traceback) больше не отображается для SystemExit, возникшего в колбэке, зарегистрированном через atexit.
bpo-30508: Не логировать исключения при вызове метода “cancel()” задачи/future.
bpo-28556: Обновления модуля typing: добавлен generic AsyncContextManager, добавлена поддержка ContextManager для всех версий. Оригинальные PR от Jelle Zijlstra и Ivan Levkivskyi.
bpo-29870: Исправлена утечка SSL-сокетов при прерывании соединения в реализации asyncio/ssl. Патч от Michaël Sghaïer.
bpo-29743: Закрытие транспорта во время рукопожатия (handshake) приводит к утечке открытого сокета. Патч от Nikolay Kim.
bpo-27585: Исправлена отмена ожидания (waiter) в asyncio.Lock. Патч от Mathieu Sornay.
bpo-30418: На Windows subprocess.Popen.communicate() теперь также игнорирует EINVAL на stdin.write(), если дочерний процесс ещё работает, но уже закрыл канал.
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: Фоновый поток _feed в multiprocessing.Queue не выходит из главного цикла при исключении.
bpo-30003: Исправлена обработка escape-символов в кодировке HZ. На основе патча от Ma Lin.
bpo-30301: Исправлен AttributeError при использовании SimpleQueue.empty() с методами запуска spawn и forkserver.
bpo-30329: imaplib и poplib теперь перехватывают ошибку Windows WSAEINVAL (код 10022) на shutdown(SHUT_RDWR): была предпринята недопустимая операция. Эта ошибка иногда возникает на SSL-соединениях.
bpo-30375: Предупреждения, выдаваемые при компиляции регулярного выражения, теперь всегда указывают на строку в коде пользователя. Ранее они могли указывать внутрь модуля re, если возникали из групп или условных конструкций.
bpo-30048: Исправлена ситуация, когда
Task.cancel()мог игнорироваться, если задача выполняет корутину и корутина вернула управление без дополнительныхawait.bpo-30266: contextlib.AbstractContextManager теперь поддерживает анти-регистрацию путём установки __enter__ = None или __exit__ = None, следуя шаблону, введённому в bpo-25958. Патч от Jelle Zijlstra.
bpo-30298: Ослаблено условие выдачи предупреждений об устаревании для встроенных модификаторов. Теперь разрешено несколько последовательных встроенных модификаторов в начале шаблона (например,
'(?i)(?s)...'). В подробном режиме пробелы и комментарии теперь допускаются до и между встроенными модификаторами (например,'(?x) (?i) (?s)...').bpo-29990: Исправлена проверка диапазона в декодере GB18030. Исходный патч от Ma Lin.
bpo-26293: Изменение вызвано поломкой zipfile. (См. также: bpo-29094)
bpo-30243: Удалены методы __init__ сканера и кодировщика _json. Их неправильное использование могло приводить к утечкам памяти или сбоям. Теперь объекты сканера и кодировщика полностью инициализируются в методах __new__.
bpo-30185: Избежание трассировок KeyboardInterrupt во вспомогательном процессе forkserver при получении Ctrl-C.
bpo-28556: Различные обновления модуля typing: добавлен тип typing.NoReturn, используется WrapperDescriptorType, мелкие исправления ошибок. Оригинальные PR от Jim Fasarakis-Hilliard и Ivan Levkivskyi.
bpo-30205: Исправлен getsockname() для непривязанных AF_UNIX-сокетов на Linux.
bpo-30070: Исправлены утечки и сбои при обработке ошибок в модуле parser.
bpo-30061: Исправлены сбои в методах IOBase __next__() и readlines(), когда readline() или __next__() соответственно возвращают объект, не поддерживающий определение размера. Исправлены возможные другие ошибки, вызванные отсутствием проверки результатов PyObject_Size(), PySequence_Size() или PyMapping_Size().
bpo-30017: Разрешено многократное вызов метода close() у объекта записи zip-записи. Запись в закрытый writer теперь всегда вызывает ValueError.
bpo-30068: _io._IOBase.readlines теперь сначала проверяет, закрыт ли файл, если указана подсказка (hint).
bpo-29694: Исправлено состояние гонки в pathlib mkdir с флагом parents=True. Патч от Armin Rigo.
bpo-29692: Исправлено произвольное разрывание цепочки исключений RuntimeError в contextlib.contextmanager. Патч от Siddharth Velankar.
bpo-29998: Pickling и копирование ImportError теперь сохраняют атрибуты name и path.
bpo-29953: Исправлены утечки памяти в методе replace() объектов datetime и time при передаче аргумента fold вне допустимого диапазона.
bpo-29942: Исправлен сбой в itertools.chain.from_iterable при обнаружении длинных последовательностей пустых итераций.
bpo-27863: Исправлено множество сбоев в ElementTree, вызванных состояниями гонки и неверными типами.
bpo-28699: Исправлена ошибка в пулах multiprocessing.pool: если исключение возникает в самом начале итерации, оно может быть проглочено или привести к зависанию программы. Патч от Davin Potts и Xiang Zhang.
bpo-25803: Избежание некорректных ошибок, вызываемых Path.mkdir(exist_ok=True), когда ОС отдаёт приоритет ошибкам EACCES над EEXIST.
bpo-29861: Освобождение ссылок на задачи, их аргументы и результаты сразу после завершения в multiprocessing.Pool.
bpo-29884: faulthandler: восстановление старого sigaltstack при завершении. Патч от Christophe Zeitouny.
bpo-25455: Исправлены сбои в repr рекурсивных буферизированных файлоподобных объектов.
bpo-29800: Исправлены сбои в partial.__repr__, если ключи partial.keywords не являются строками. Патч от Michael Seifert.
bpo-29742: get_extra_info() вызывает исключение, если вызывается на закрытом ssl-транспорте. Патч от Nikolay Kim.
bpo-8256: Исправлена возможная ошибка или сбой input(), если атрибуты 'encoding' или 'errors' sys.stdin или sys.stdout не установлены или не являются строками.
bpo-28298: Исправлена ошибка, из-за которой массивы ‘Q’, ‘L’ и ‘I’ не принимали большие целые числа (объекты с __int__) в качестве элементов. Исправление от Oren Milman.
bpo-28231: Модуль zipfile теперь принимает path-like объекты для внешних путей.
bpo-26915: Методы index() и count() collections.abc.Sequence теперь при сравнении сначала проверяют идентичность, а затем равенство.
bpo-29615: SimpleXMLRPCDispatcher больше не привязывает KeyError (или любое другое исключение) к исключениям, возникшим в диспетчеризованных методах. Исправление от Petr Motejlek.
bpo-30177: path.resolve(strict=False) больше не обрезает путь после первого элемента, отсутствующего в файловой системе. Патч от Antoine Pietri.
IDLE¶
bpo-15786: Исправлено несколько проблем с окном автодополнения IDLE. Теперь должны работать: щелчок по элементам списка, использование полосы прокрутки, выбор элемента нажатием Enter. Зависания на 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: Help-about: приведены имена к стандарту PEP8, добавлены тесты. Покрытие увеличено до 100%. Патчи от Louie Lu, Cheryl Sabella и Terry Jan Reedy.
bpo-30303: Добавлена опция _utest в textview; добавлены новые тесты. Покрытие увеличено до 100%. Патчи от Louie Lu и Terry Jan Reedy.
C API¶
bpo-27867: Функция PySlice_GetIndicesEx() больше не заменяется макросом, если Py_LIMITED_API не установлен.
Сборка¶Build
bpo-29941: Add
--with-assertionsconfigure flag to explicitly enable Cassert()checks. Defaults to off.--with-pydebugimplies--with-assertions.bpo-28787: Fix out-of-tree builds of Python when configured with
--with--dtrace.bpo-29243: Предотвращает ненужную пересборку Python во время
make test,make installи некоторых других целей make при настройке с--enable-optimizations.bpo-23404: Больше не выполняется повторная генерация сгенерированных файлов на основе времени изменения файла: теперь это действие явное. Замените
make touchнаmake regen-all.bpo-29643: Исправлено:
--enable-optimizationне работало.
Документация¶Documentation
bpo-30176: Добавлены отсутствующие константы, связанные с атрибутами, в документацию curses.
bpo-30052: цели ссылок для
bytes()иbytearray()теперь указывают на их соответствующие определения типов, а не на соответствующие записи встроенных функций. Используйте bytes и bytearray для ссылки на последние. Чтобы гарантировать, что это и будущие обновления перекрёстных ссылок применяются автоматически, ежедневные сборки документации теперь отключают стандартные функции кэширования вывода в Sphinx.bpo-26985: Добавлена отсутствующая информация об объекте кода в документацию inspect.
Инструменты/Демонстрации¶Tools/Demos
bpo-29367: python-gdb.py теперь также поддерживает объекты
method-wrapper(wrapperobject).
Тесты¶Tests
bpo-30357: test_thread: setUp() теперь использует support.threading_setup() и support.threading_cleanup() для ожидания завершения потоков, чтобы избежать случайных побочных эффектов на следующие тесты. Первоначальное исправление от Grzegorz Grzywacz.
bpo-30197: Улучшены функции swap_attr() и swap_item() в модуле test.support. Теперь они работают, когда удаляется заменённый атрибут или элемент внутри оператора with. Старое значение атрибута или элемента (или None, если его не существует) теперь будет присваиваться цели предложения "as", если оно есть.
Windows¶
bpo-30687: Поиск msbuild.exe в Windows при сборке вместо vcvarsall.bat.
bpo-30450: Процесс сборки на Windows больше не зависит от Subversion, вместо этого он получает внешний код из GitHub через Python-скрипт. Если Python 3.6 не найден в системе (через
py -3.6), NuGet используется для загрузки копии 32-битного Python.
Python 3.6.1 финальная¶Python 3.6.1 final
Дата выпуска: 2017-03-21
Ядро и встроенные модули¶Core and Builtins
bpo-29723: Изменение инициализации
sys.path[0]для bpo-29139 вызвало регрессию, выявив несоответствие в том, как инициализируется sys.path при выполнении__main__из zip-файла, каталога или другого места импорта. Интерпретатор теперь последовательно избегает добавления родительского каталога места импорта вsys.path, и гарантирует, что никакие другие записиsys.pathне изменяются непреднамеренно при вставке места импорта, указанного в командной строке.
Сборка¶Build
bpo-27593: исправление формата информации git, используемой в sys.version
Исправление несовместимого комментария в python.h
Python 3.6.1 кандидат в релизы 1¶Python 3.6.1 release candidate 1
Дата выпуска: 2017-03-04
Ядро и встроенные модули¶Core and Builtins
bpo-28893: Установка правильного __cause__ для ошибок о недопустимых ожидаемых объектах, возвращаемых из __aiter__ и __anext__.
bpo-29683: Исправления выделения памяти в _PyCode_SetExtra. Патч от Brian Coleman.
bpo-29684: Исправление незначительной регрессии PyEval_CallObjectWithKeywords. Должен вызывать TypeError, если kwargs не является dict. Но мог приводить к сбою сегментации при args=NULL и kwargs не является dict.
bpo-28598: Поддержка вызова __rmod__ для подклассов str перед str.__mod__. Патч от Martijn Pieters.
bpo-29607: Исправление вычисления stack_effect для CALL_FUNCTION_EX. Патч от Matthieu Dartiailh.
bpo-29602: Исправлена некорректная обработка знаковых нулей в конструкторе complex для подклассов complex и для входных данных, имеющих метод __complex__. Патч от Serhiy Storchaka.
bpo-29347: Исправлено возможное разыменование неопределённых указателей при создании объектов weakref.
bpo-29438: Исправлена проблема use-after-free (использование после освобождения) в словаре совместного использования ключей (key sharing dict).
bpo-29319: Предотвращение перезаписи sys.path[0] функцией RunMainFromImporter.
bpo-29337: Исправлено возможное BytesWarning при сравнении объектов кода. Предупреждения могли выдаваться во время компиляции.
bpo-29327: Исправлено падение при передаче итерируемого именованного аргумента в sorted().
bpo-29034: Исправлена утечка памяти и use-after-free в модуле os (path_converter).
bpo-29159: Исправлена регрессия в bytes(x), когда x.__index__() вызывает исключение.
bpo-28932: Не включать <sys/random.h>, если его не существует.
bpo-25677: Исправление позиционирования каретки синтаксической ошибки для блоков с отступами. Основано на патче Майкла Лейзелла.
bpo-29000: Исправлено форматирование байтов восьмеричных чисел с нулевым заполнением в альтернативной форме.
bpo-26919: На Android системные данные теперь всегда кодируются/декодируются в/из UTF-8, а не в кодировке локали, чтобы избежать несоответствий с os.fsencode() и os.fsdecode(), которые уже используют UTF-8.
bpo-28991: functools.lru_cache() была подвержена трудновоспроизводимой ошибке реентерабельности, возникающей из-за модифицированной функции len().
bpo-28739: f-строковые выражения больше не принимаются в качестве докстрингов и функцией ast.literal_eval(), даже если они не содержат выражений.
bpo-28512: Исправлена установка атрибута offset у SyntaxError функциями PyErr_SyntaxLocationEx() и PyErr_SyntaxLocationObject().
bpo-28918: Исправлена кросс-компиляция xxlimited, когда Python был собран с определённым Py_DEBUG.
bpo-28731: Оптимизирован _PyDict_NewPresized() для создания словаря правильного размера. Увеличена скорость словарного литерала с константными ключами до 30%.
Библиотека¶Library
bpo-29169: Обновление zlib до версии 1.2.11.
bpo-29623: Разрешено использование путеподобного объекта в качестве единственного аргумента в ConfigParser.read(). Патч Дэвида Эллиса.
bpo-28963: Исправлен выход за границы итерации в asyncio.Future.remove_done_callback, реализованном на C.
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: Добавлен тест, проверяющий, что параметр cwd в Popen() принимает объекты PathLike. Патч Саяна Чоудхури.
bpo-28518: Транзакция теперь неявно начинается перед DML-инструкцией. Патч Авива Паливоды.
bpo-29532: Изменение словаря kwarg, переданного в functools.partial(), больше не влияет на объект 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: Исправлена регрессия в datetime.fromtimestamp(), появившаяся в Python 3.6.0: проверка минимального и максимального годов.
bpo-29519: Исправлено появление исключений в weakref при завершении работы интерпретатора при редком сочетании multiprocessing и пользовательских кодеков.
bpo-29416: Предотвращение бесконечного цикла в pathlib.Path.mkdir
bpo-29444: Исправлен выход за границы буфера в методе group() объекта совпадения. На основе патча от WGH.
bpo-29335: Исправлен subprocess.Popen.wait(), когда дочерний процесс завершился в состоянии остановлен, а не завершён (например, под ptrace).
bpo-29290: Исправлена регрессия в argparse, из-за которой сообщения помощи переносились на неразрывных пробелах.
bpo-28735: Исправлено сравнение mock.MagicMock с mock.ANY.
bpo-29316: Восстановлен предварительный статус модуля typing, добавлено соответствующее примечание в документацию. Исправление от Ivan L.
bpo-29219: Исправлена бесконечная рекурсия в repr неинициализированных экземпляров ctypes.CDLL.
bpo-29011: Исправлено важное упущение: добавлен Deque в модуль typing.
bpo-28969: Исправлено состояние гонки в реализации C для functools.lru_cache. 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: Смещения в ZIP-файле, созданном с внешним объектом файла и режимами «w» и «x», теперь отсчитываются от начала файла.
bpo-29085: Разрешено random.Random.seed() использовать высококачественные случайные данные ОС вместо pid и времени.
bpo-29061: Исправлена ошибка в secrets.randbelow(), из-за которой функция зависала при передаче отрицательного аргумента. Исправление от Brendan Donegan.
bpo-29079: Предотвращён бесконечный цикл в pathlib.resolve() на Windows
bpo-13051: Исправлены ошибки рекурсии в большом или изменённом curses.textpad.Textbox. Основано на патче от Tycho Andersen.
bpo-29119: Исправлены слабые ссылки в чистой реализации Python метода move_to_end() в collections.OrderedDict. Предложено 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(), когда сборка мусора происходит в другом потоке.
bpo-20191: Исправлен сбой в resource.prlimit() при передаче последовательности, которая не владеет своими элементами, в качестве лимитов.
bpo-28779: multiprocessing.set_forkserver_preload() приводил к сбою процесса forkserver, если предварительно загруженный модуль создавал экземпляры некоторых объектов multiprocessing, таких как блокировки.
bpo-28847: dbm.dumb теперь поддерживает чтение файлов только для чтения и больше не записывает индексный файл, если он не был изменён.
bpo-26937: Метод chown() класса tarfile.TarFile теперь не завершается ошибкой, если модуль grp не может быть импортирован (например, на платформе Android).
IDLE¶
Windows¶
bpo-29579: Удалён readme.txt из установщика
bpo-29326: Игнорируются пустые строки в файлах ._pth (исправление от Alexey Izbyshev)
bpo-28164: Корректная обработка специальных имён файлов консоли (исправление от Eryk Sun)
bpo-29409: реализован PEP 529 для io.FileIO (патч от Eryk Sun)
bpo-29392: Предотвращение сбоя при передаче недопустимых аргументов в модуль msvcrt.
bpo-25778: winreg некорректно обрезает строки (патч от Eryk Sun)
bpo-28896: WindowsRegistryFinder объявлен устаревшим и по умолчанию отключён.
C API¶
bpo-27867: функция PySlice_GetIndicesEx() заменяется макросом, если Py_LIMITED_API не задан или задан значением между 0x03050400 и 0x03060000 (не включительно), или 0x03060100 и выше.
bpo-29083: Исправлено объявление некоторых функций публичного API. PyArg_VaParse() и PyArg_VaParseTupleAndKeywords() были недоступны в ограниченном API. PyArg_ValidateKeywordArguments(), PyArg_UnpackTuple() и Py_BuildValue() были недоступны в ограниченном API версии < 3.3, когда определён PY_SSIZE_T_CLEAN.
bpo-29058: все расширения стабильного API, добавленные после Python 3.2, теперь доступны, только если Py_LIMITED_API установлен в значение PY_VERSION_HEX минимальной версии Python, поддерживающей это API.
Документация¶Documentation
bpo-28929: Добавлена ссылка на исходный файл документации на GitHub.
bpo-25008: Документировать smtpd.py как фактически устаревший и добавить указатель на aiosmtpd, стороннюю замену на основе asyncio.
bpo-26355: Добавлена каноническая ссылка в заголовке каждой страницы на соответствующую основную версию документации. Исправление от Matthias Bussonnier.
bpo-29349: Исправлен синтаксис Python 2 в коде для сборки документации.
Тесты¶Tests
bpo-28087: Пропуск test_asyncore и test_eintr при сбоях poll на macOS. Пропуск некоторых тестов select.poll при работе на macOS из-за нерешённых проблем с системной функцией poll на некоторых версиях macOS.
bpo-29571: чтобы соответствовать поведению флага
re.LOCALE, test_re.test_locale_flag теперь используетlocale.getpreferredencoding(False)для определения кодировки-кандидата для тестового регулярного выражения (что позволяет корректно пропускать тест, когда кодировка локали по умолчанию является многобайтовой).bpo-28950: запрещено комбинировать -j0 с -T/-l в аргументах командной строки regrtest.
bpo-28683: исправлены тесты, которые используют bind() для unix-сокета и вызывают PermissionError на Android для пользователя без прав root.
bpo-26939: добавлена функция support.setswitchinterval() для исправления зависания test_functools на эмуляторе Android armv7 qemu.
Сборка¶Build
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: Убирает жёсткую зависимость от hg.exe в PCBuild/build.bat
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: не определять sys.implementation._multiarch на Android.
Python 3.6.0 финальная¶Python 3.6.0 final
Дата выпуска: 2016-12-23
Изменений по сравнению с кандидатом в релиз 2 нет.
Python 3.6.0. Кандидат в релиз 2¶Python 3.6.0 release candidate 2
Дата релиза: 2016-12-16
Ядро и встроенные модули¶Core and Builtins
Инструменты/Демонстрации¶Tools/Demos
bpo-28770: Исправлен python-gdb.py для fastcalls.
Windows¶
bpo-28896: Устарел WindowsRegistryFinder.
Сборка¶Build
bpo-28898: Предотвращены ошибки сборки gdb из-за переопределения HAVE_LONG_LONG.
Python 3.6.0. Кандидат в релиз 1¶Python 3.6.0 release candidate 1
Дата релиза: 2016-12-06
Ядро и встроенные модули¶Core and Builtins
bpo-23722: Вместо того чтобы молча создавать класс, не поддерживающий вызов
super()без аргументов в методах, теперь, если новая запись пространства имён__classcell__не передаётся вtype.__new__, это приводит кDeprecationWarningи классу, который поддерживаетsuper()без аргументов.bpo-28797: Изменение __dict__ класса внутри метода __set_name__ дескриптора, используемого в этом классе, больше не препятствует вызову метода __set_name__ других дескрипторов.
bpo-28782: Исправлена ошибка в реализации
yield fromпри проверке, является ли следующая инструкция YIELD_FROM. Регрессия внесена WORDCODE (bpo-26647).
Библиотека¶Library
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: Исправлена обработка __traceback__ исключений в C-задаче asyncio.
C API¶
bpo-28808: PyUnicode_CompareWithASCIIString() теперь никогда не вызывает исключений.
Документация¶Documentation
Инструменты/Демонстрации¶Tools/Demos
bpo-28023: Исправлена проблема: python-gdb.py не поддерживал новую реализацию dict.
Python 3.6.0. Бета-версия 4¶Python 3.6.0 beta 4
Дата выпуска: 2016-11-21
Ядро и встроенные модули¶Core and Builtins
bpo-28532: Показывать sys.version при двукратном указании флага -V.
bpo-27100: Оператор with теперь сначала проверяет __enter__, а затем __exit__. Это даёт менее запутанные сообщения об ошибках, если оба метода отсутствуют. Патч от Джонатана Эллингтона.
bpo-28746: Исправлен метод файлового дескриптора set_inheritable() на платформах, не имеющих команд ioctl FIOCLEX и FIONCLEX.
bpo-26920: Исправлена проблема получения кодировки локали при инициализации интерпретатора на платформах без langinfo.
bpo-28648: Исправлен сбой в Py_DecodeLocale() в отладочной сборке на Mac OS X при декодировании астральных символов. Патч от Xiang Zhang.
bpo-19398: Лишний слеш больше не добавляется к компонентам sys.path в случае пустых компонентов PYTHONPATH во время компиляции.
bpo-28665: Увеличена производительность байткода STORE_DEREF на 40%.
bpo-28583: PyDict_SetDefault не объединял split-таблицу при необходимости. Патч от Xiang Zhang.
bpo-27243: Изменено PendingDeprecationWarning -> DeprecationWarning. Согласно решению в обсуждении, возвращение корутины из __aiter__ должно приводить к PendingDeprecationWarning в 3.5 и к DeprecationWarning в 3.6.
bpo-26182: Исправлена утечка ссылок в коде, который вызывает DeprecationWarning.
bpo-28721: Исправлена обработка распространения StopAsyncIteration в асинхронных генераторах aclose() и athrow().
Библиотека¶Library
bpo-28752: Восстановлены методы __reduce__() объектов datetime.
bpo-28727: Объекты регулярных выражений _sre.SRE_Pattern, создаваемые re.compile(), стали сравнимыми (только операторы == и !=). Это изменение должно исправить bpo-18383: дублирование фильтров предупреждений при перезагрузке модуля warnings (обычно делается только в юнит-тестах).
bpo-20572: Незадокументированный параметр endtime метода subprocess.Popen.wait теперь вызывает DeprecationWarning.
bpo-25659: В ctypes предотвращён сбой при вызове методов from_buffer() и from_buffer_copy() для абстрактных классов, таких как Array.
bpo-19717: Path.resolve() теперь успешно выполняется для несуществующих путей. Патч от Vajrasky Kok.
bpo-28563: Исправлена возможная DoS-атака и выполнение произвольного кода при обработке выбора множественных форм в модуле gettext. Парсер выражений теперь поддерживает точный синтаксис 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.
bpo-28639: Исправлено inspect.isawaitable: всегда возвращает bool. Патч от Justin Mayfield.
bpo-28652: Методы цикла теперь отклоняют типы сокетов, которые они не поддерживают.
bpo-28653: Исправлена утечка ссылок в functools.lru_cache.
bpo-28703: Исправлено asyncio.iscoroutinefunction для обработки объектов Mock.
bpo-28704: Исправлен create_unix_server для поддержки Path-подобных объектов (PEP 519).
bpo-28720: Добавлен collections.abc.AsyncGenerator.
Документация¶Documentation
bpo-28513: Документирован интерфейс командной строки zipfile.
Тесты¶Tests
Сборка¶Build
Python 3.6.0 бета 3¶Python 3.6.0 beta 3
Дата выпуска: 2016-10-31
Ядро и встроенные модули¶Core and Builtins
bpo-28128: Предупреждение об устаревании для недопустимых escape-последовательностей в str и byte теперь выводит более точную информацию о месте ошибки. Патч от Serhiy Storchaka и Eric Smith.
bpo-28509: dict.update() больше не выделяет излишне много памяти.
bpo-28426: Исправлен потенциальный сбой в PyUnicode_AsDecodedObject() в отладочной сборке.
bpo-28517: Исправлена ошибка «off-by-one» в peephole-оптимизаторе, из-за которой сохранялся недостижимый код.
bpo-28214: Улучшено отображение исключений для проблемных атрибутов __set_name__.
bpo-23782: Исправлена возможная утечка памяти в _PyTraceback_Add() и потеря исключения в PyTraceBack_Here().
bpo-28471: Исправлено падение с сообщением «Python memory allocator called without holding the GIL» в socket.setblocking.
Библиотека¶Library
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 как значения с плавающей запятой. tkinter.IntVar теперь работает, если для базовой переменной Tk установлено значение с плавающей запятой.
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: Исправлен HList.header_exists() в модуле tkinter.tix путём добавления обходного пути для ошибки библиотеки Tix.
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: Добавлена поддержка Chrome в webbrowser на Mac OS X.
bpo-20766: Исправлена утечка ссылок в pdb при обработке обработчиков SIGINT.
bpo-28492: Исправление способа возбуждения исключения StopIteration в _asyncio.Future.
bpo-28500: Исправление asyncio для корректной обработки сборки мусора асинхронных генераторов из другого потока.
bpo-26923: Исправлено asyncio.Gather: отказ от отмены после завершения всех дочерних задач. Патч от Johannes Ebke.
bpo-26796: Не настраивать количество рабочих потоков для исполнителя пула потоков по умолчанию. Первоначальный патч от Hans Lawrenz.
bpo-28544: Реализация asyncio.Task на C.
Windows¶
bpo-28522: Исправление некорректного перераспределения буфера в getpathp.c
Сборка¶Build
Тесты¶Tests
Python 3.6.0 бета 2¶Python 3.6.0 beta 2
Дата выпуска: 2016-10-10
Ядро и встроенные модули¶Core and Builtins
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 теперь проверяет, что шаг (step) не равен 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: Запасной вариант – чтение устройства /dev/urandom, если системный вызов getrandom() завершается с EPERM, например, при блокировке SECCOMP.
bpo-28192: Не импортировать readline в изолированном режиме.
Обновление внутренних баз данных Unicode до версии 9.0.0.
bpo-28131: Исправлена регрессия в zipimport.compile_source(). zipimport должен использовать тот же уровень оптимизации, что и интерпретатор.
bpo-28126: Замена Py_MEMCPY на memcpy(). Visual Studio может корректно оптимизировать memcpy().
bpo-28120: исправлен dict.pop() для разделённого словаря при попытке удалить «ожидающий ключ» (ещё не вставленный в разделённую таблицу). Исправление от Xiang Zhang.
bpo-26182: Выдаётся DeprecationWarning, когда ключевые слова async и await используются в качестве имени переменной/атрибута/класса/функции.
Библиотека¶Library
bpo-27998: Исправлена поддержка путей в виде bytes в os.scandir() на Windows. Исправление от 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: Исправлена запись символов не из BMP в бинарном формате в plistlib.
bpo-28225: Модуль bz2 теперь поддерживает pathlib. Первоначальное исправление от Ethan Furman.
bpo-28227: gzip теперь поддерживает pathlib. Исправление от Ethan Furman.
bpo-27358: Оптимизировано слияние аргументов **kwargs и улучшено сообщение об ошибке при передаче не-отображения в качестве **kwargs.
bpo-28257: Улучшено сообщение об ошибке при передаче неитерируемого объекта в качестве позиционного аргумента-вариадика. Добавлен опкод BUILD_TUPLE_UNPACK_WITH_CALL.
bpo-28322: Исправлены возможные сбои при распаковке объектов itertools из некорректных данных pickle. Основано на патче от John Leitch.
bpo-28228: imghdr теперь поддерживает pathlib.
bpo-28226: compileall теперь поддерживает pathlib.
bpo-28314: Исправлено объявление функции (флаги C) для метода getiterator() класса xml.etree.ElementTree.Element.
bpo-28148: Прекращено использование localtime() и gmtime() в модуле time. Введён платформенно-независимый API _PyTime_localtime, похожий на POSIX localtime_r, но доступный на всех платформах. Исправление от Ed Schouten.
bpo-28253: Исправлены функции календаря для крайних месяцев: 0001-01 и 9999-12. Методы itermonthdays() и itermonthdays2() переписаны так, что они не вызывают itermonthdates(), что могло приводить к переполнению или потере точности datetime.date.
bpo-28275: Исправлена возможная ошибка использования после освобождения (use-after-free) в методах decompress() классов LZMADecompressor и BZ2Decompressor. Оригинальный патч от John Leitch.
bpo-27897: Исправлена возможная аварийная остановка в sqlite3.Connection.create_collation() при передаче недопустимого строкоподобного объекта в качестве имени. Патч от Xiang Zhang.
bpo-18844: Теперь random.choices() использует k как аргумент только по ключу (keyword-only argument), чтобы повысить читаемость в типовых случаях и привести к единообразию с сигнатурами, используемыми в других языках.
bpo-18893: Исправлена некорректная обработка исключений в Lib/ctypes/macholib/dyld.py. Патч от Madison May.
bpo-27611: Исправлена поддержка корневого окна по умолчанию в модуле tkinter.tix. Добавлен параметр master в конструктор DisplayStyle.
bpo-27348: В модуле traceback восстановлено форматирование сообщений об исключениях вида «Исключение: None». Это исправляет регрессию, появившуюся в 3.5a2.
bpo-25651: Разрешено использование ложных значений в параметре msg функции subTest().
bpo-27778: Исправлена утечка памяти в os.getrandom(), когда вызов getrandom() прерывается сигналом, а обработчик сигнала возбуждает исключение Python.
bpo-28200: Исправлена утечка памяти в Windows в модуле os (исправлена функция path_converter()).
bpo-25400: RobotFileParser теперь корректно возвращает значения по умолчанию для crawl_delay и request_rate. Первоначальный патч от Peter Wirtz.
bpo-27932: Предотвращена утечка памяти в win32_ver().
Исправлена ошибка UnboundLocalError в socket._sendfile_use_sendfile.
bpo-28075: Добавлена проверка на ERROR_ACCESS_DENIED в реализации os.stat() для Windows. Патч от Eryk Sun.
bpo-22493: Предупреждение, возникающее при использовании встроенных флагов в середине регулярного выражения, теперь содержит (усечённый) шаблон регулярного выражения. Патч от Tim Graham.
bpo-25270: Предотвращено возбуждение SystemError функцией codecs.escape_encode() при передаче пустой последовательности байтов.
bpo-28181: Получение antigravity через HTTPS. Патч от Kaartic Sivaraam.
bpo-25895: Включение поддержки схем URL WebSocket в urllib.parse.urljoin. Патч от Gergely Imreh и Markus Holtermann.
bpo-28114: Исправлен сбой в parse_envlist(), когда env содержит байтовые строки. Патч от Eryk Sun.
bpo-27599: Исправлено переполнение буфера в binascii.b2a_qp() и binascii.a2b_qp().
bpo-27906: Исправлено истощение приёма сокетов при высоком TCP-трафике. Патч от Kevin Conway.
bpo-28174: Обработка случая, когда SO_REUSEPORT не поддерживается должным образом. Патч от Seth Michael Larson.
bpo-26654: Добавлена проверка functools.partial в asyncio.Handle.__repr__. Патч от iceboy.
bpo-26909: Исправлен медленный ввод-вывод каналов в asyncio. Патч от INADA Naoki.
bpo-28176: Исправлено состояние гонки колбэков в asyncio.SelectorLoop.sock_connect.
bpo-27759: Исправлено некорректное удержание недействительных файловых дескрипторов селекторами. Патч от Mark Williams.
bpo-28368: Отказ от наблюдения за процессами, если к наблюдателю дочерних процессов не прикреплён цикл. Патч от Vincent Michel.
bpo-28369: Возбуждать RuntimeError, когда файловый дескриптор транспорта используется с add_reader, add_writer и т.д.
bpo-28370: Ускорение asyncio.StreamReader.readexactly. Патч от Коренберг Марк.
bpo-28371: Помечено как устаревшее передачу asyncio.Handles в run_in_executor.
bpo-28372: Исправлено asyncio для поддержки форматирования не-Python корутин.
bpo-28399: Удаление UNIX-сокета из файловой системы перед привязкой. Патч от Коренберг Марк.
bpo-27972: Запрещено задачам ожидать самих себя.
Windows¶
bpo-28402: Добавлены подписанные файлы каталогов для stdlib в Windows.
bpo-28333: Включена поддержка Unicode для приглашений ps1/ps2 и input(). (Патч от Eryk Sun)
bpo-28251: Улучшения справочных руководств в Windows.
bpo-28110: launcher.msi использует разные коды продукта для 32-битной и 64-битной версий
bpo-28161: Открытие CON для записи завершается ошибкой
bpo-28162: WindowsConsoleIO.readall() завершается ошибкой, если первая строка начинается с Ctrl+Z
bpo-28163: WindowsConsoleIO.fileno() передаёт неверные флаги в _open_osfhandle
bpo-28164: _PyIO_get_console_type не работает для различных путей
bpo-28137: Переименование файла пути Windows в ._pth
bpo-28138: Файл ._pth в Windows должен разрешать импорт site
C API¶
bpo-28426: Объявлены устаревшими недокументированные функции PyUnicode_AsEncodedObject(), PyUnicode_AsDecodedObject(), PyUnicode_AsDecodedUnicode() и PyUnicode_AsEncodedUnicode().
Сборка¶Build
bpo-28258: Исправлена сборка с эстонской локалью (цели python-config и distclean в Makefile). Патч от Arfrever Frehtes Taifersar Arahesis.
bpo-26661: setup.py теперь определяет системную libffi с multiarch wrapper.
bpo-15819: Удаляет избыточную опцию каталога поиска include для сборки вне дерева исходников.
Тесты¶Tests
bpo-28217: Добавлен модуль _testconsole для тестирования ввода с консоли.
Python 3.6.0 бета 1¶Python 3.6.0 beta 1
Дата выпуска: 2016-09-12
Ядро и встроенные модули¶Core and Builtins
bpo-23722: Ячейка __class__, используемая super() без аргументов, теперь инициализируется из type.__new__ вместо __build_class__, поэтому методы класса, полагающиеся на это, теперь будут корректно работать при вызове из методов метакласса во время создания класса. Патч от Martin Teichmann.
bpo-25221: Исправлен повреждённый результат PyLong_FromLong(0) при компиляции Python с NSMALLPOSINTS = 0.
bpo-27080: Реализована поддержка форматирования для PEP 515. Первоначальный патч от Chris Angelico.
bpo-27199: В tarfile добавлена возможность задавать размер буфера copyfileobj для повышения пропускной способности. Патч от Jason Fried.
bpo-27948: В f-строках обратные слеши разрешены только внутри фигурных скобок (где находятся выражения). Это критическое изменение по сравнению с альфа-версиями 3.6, где обратные слеши допускались в любом месте f-строки. Кроме того, выражения внутри f-строк должны заключаться в фигурные скобки, а не в управляющие последовательности, такие как
f'\x7b"hi"\x7d'.bpo-28046: Удаление платформенно-зависимых каталогов из sys.path.
bpo-28071: Добавлен ранний выход при вычислении разности с пустым множеством.
bpo-25758: Предотвращает излишнее кодирование имени файла в zipimport (исправление от Eryk Sun)
bpo-25856: Атрибут __module__ классов расширений и функций теперь интернируется. Это приводит к более компактным данным pickle при использовании протокола 4.
bpo-27213: Переработаны опкоды CALL_FUNCTION* для получения более короткого и эффективного байткода. Патч от Demur Rumed, дизайн от Serhiy Storchaka, рецензировано Serhiy Storchaka и Victor Stinner.
bpo-26331: Реализована поддержка токенизации для PEP 515. Патч от Georg Brandl.
bpo-27999: Использование «global после использования» теперь вызывает SyntaxError, то же самое для nonlocal. Патч от Ivan Levkivskyi.
bpo-27985: Реализована PEP 526 – синтаксис аннотаций переменных. Патч от Ivan Levkivskyi.
bpo-26058: Добавлена новая приватная версия во встроенный тип dict, увеличиваемая при каждом создании словаря и каждом его изменении. Реализация PEP 509.
bpo-27364: Пара обратный слеш-символ, не являющаяся корректной escape-последовательностью, теперь генерирует 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: Поддержка передачи аргумента «delete» метода bytes/bytearray.translate() по ключевому слову.
bpo-27812: Корректно очищается обратная ссылка на генератор из его фрейма, чтобы предотвратить аварийные остановки в frame.clear().
bpo-27811: Исправлена аварийная остановка при финализации корутины, которая не была ожидана (awaited), с включённым режимом «предупреждения как ошибки».
bpo-27587: Исправлена ещё одна проблема, найденная PVS-Studio: проверка нулевого указателя после использования 'def' в _PyState_AddModule(). Первоначальное исправление от Christian Heimes.
bpo-27792: Операция взятия остатка, применяемая к
boolи другим подклассамint, теперь всегда возвращаетint. Ранее тип результата зависел от входных значений. Патч от Xiang Zhang.bpo-26984: int() теперь всегда возвращает экземпляр точного int.
bpo-25604: Исправлена незначительная ошибка в целочисленном истинном делении; эта ошибка могла потенциально приводить к результатам с ошибкой в один ulp на платформах с ненадёжными реализациями ldexp.
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: Предупреждение, если аргумент подмодуля для «python -m» или runpy.run_module() найден в sys.modules после импорта родительских пакетов, но до выполнения подмодуля.
bpo-27157: Только сам type() теперь принимает форму с одним аргументом. Патч от Eryk Sun и Emanuel Barry.
bpo-27558: Исправлена SystemError в реализации оператора «raise». В совершенно новом потоке теперь возбуждается RuntimeError, так как нет активного исключения для повторного возбуждения. Исправление написано Xiang Zhang.
bpo-27942: Исправлена утечка памяти в codeobject.c
Библиотека¶Library
bpo-28732: Исправлен сбой в os.spawnv() при отсутствии элементов в args.
bpo-28485: Всегда вызывать ValueError для отрицательного параметра compileall.compile_dir(workers=…), даже если многопоточность недоступна.
bpo-28037: Использовать sqlite3_get_autocommit() вместо ручной установки Connection->inTransaction.
bpo-25283: Атрибуты tm_gmtoff и tm_zone теперь доступны на всех платформах в возвращаемых значениях time.localtime() и time.gmtime().
bpo-24454: Группы объекта сопоставления регулярного выражения теперь доступны через __getitem__. “mo[x]” эквивалентно “mo.group(x)”.
bpo-10740: sqlite3 больше не выполняет неявный коммит открытой транзакции перед DDL-выражениями.
bpo-17941: Добавлен параметр module в collections.namedtuple().
bpo-22493: Инлайновые флаги теперь следует использовать только в начале регулярного выражения. Выдаётся предупреждение об устаревании, если они используются в середине регулярного выражения.
bpo-26885: xmlrpc теперь поддерживает десериализацию дополнительных типов данных, используемых реализацией Apache XML-RPC для чисел и None.
bpo-28070: Исправлен разбор инлайнового флага verbose в регулярных выражениях.
bpo-19500: Добавлено возобновление SSL-сессии на стороне клиента в модуль ssl.
bpo-28022: Устарели аргументы, связанные с ssl, в пользу SSLContext. Устаревание включает ручное создание SSLSocket и certfile/keyfile (или аналогичных) в ftplib, httplib, imaplib, smtplib, poplib и urllib.
bpo-28043: SSLContext имеет улучшенные настройки по умолчанию: OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION, OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE, OP_SINGLE_ECDH_USE и шифры HIGH без MD5.
bpo-24693: Изменены некоторые RuntimeError в модуле zipfile на более подходящие типы. Улучшены некоторые сообщения об ошибках и отладочный вывод.
bpo-17909:
json.loadиjson.loadsтеперь поддерживают бинарный ввод, закодированный как UTF-8, UTF-16 или UTF-32. Патч от Serhiy Storchaka.bpo-27137: чистая реализация на Python для
functools.partialтеперь соответствует поведению ускоренной C-реализации в отношении создания подклассов, сериализации и текстового представления. Патч от Emanuel Barry и Serhiy Storchaka.Исправлены возможные целочисленные переполнения и крахи в модуле mmap при нестандартных сценариях использования.
bpo-1703178: Исправлена возможность передачи опции –link-objects команде build_ext из distutils.
bpo-28019: itertools.count() больше не округляет нецелый шаг в диапазоне от 1.0 до 2.0 до 1.
bpo-18401: Pdb теперь поддерживает именованный аргумент ‘readrc’ для управления тем, следует ли читать файлы .pdbrc. Патч от Martin Matusiak и Sam Kimbrel.
bpo-25969: Обновлена грамматика lib2to3 для поддержки обобщённой распаковки, добавленной в Python 3.5.
bpo-14977: mailcap теперь соблюдает порядок строк в файлах mailcap (принцип «первое совпадение»), как того требует RFC 1542. Патч от Michael Lazar.
bpo-28082: Константы флагов re преобразованы в IntFlag.
bpo-28025: Все константы модуля ssl преобразованы в IntEnum и IntFlags. Свойства SSLContext теперь возвращают флаги и перечисления.
bpo-23591: Добавлены Flag, IntFlag и auto() в модуль enum.
bpo-433028: Добавлена поддержка модифицирующих диапазонов в регулярных выражениях.
bpo-24594: Выполняется проверка параметра persist при открытии базы данных MSI.
bpo-17582: xml.etree.ElementTree теперь сохраняет пробелы в атрибутах. (Патч от Duane Griffin. Проверено и одобрено Stefan Behnel.)
bpo-28047: Исправлен расчет длины строки, используемой для base64 CTE в новых политиках email.
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 email больше не экспериментальное, документация переработана и переписана с акцентом на новое API.
bpo-22450: urllib теперь включает заголовок
Accept: */*среди заголовков по умолчанию. Это делает результаты запросов REST API более последовательными и предсказуемыми, особенно при использовании прокси-серверов.lib2to3.pgen3.driver.load_grammar() теперь создаёт стабильный файл кэша между запусками при одинаковом входном файле Grammar.txt независимо от настройки рандомизации хеша.
bpo-28005: Разрешить распространение ImportErrors в реализации кодировки.
bpo-26667: Поддержка path-подобных объектов в importlib.util.
bpo-27570: Избегать вызовов memcpy() и подобных с нулевой длиной и нулевыми указателями источника в модулях «ctypes» и «array».
bpo-22233: Разрывать строки заголовков email только по символам CR и LF, указанным в RFC, а не по произвольным концовкам строк Unicode. Также исправлена ошибка при парсинге HTTP-заголовков.
bpo-27331: Классы email.mime теперь все принимают необязательный аргумент policy.
bpo-27988: Исправлена некорректная мутация списка payload в email.iter_attachments.
bpo-16113: Добавлена поддержка SHA-3 и SHAKE в модуль hashlib.
Устранено предупреждение о тавтологическом сравнении указателей в _scproxy.c.
bpo-27776: Функция
os.urandom()теперь блокируется на Linux 3.17 и новее до инициализации пула энтропии системного urandom для повышения безопасности. Это изменение является частью PEP 524.bpo-27778: Предоставить системный вызов Linux
getrandom()в качестве новой функцииos.getrandom(). Это изменение является частью PEP 524.bpo-27691: Исправлен разбор полей GEN_RID альтернативных имён субъекта в сертификатах X.509 в модуле ssl.
bpo-18844: Добавлена функция random.choices().
bpo-25761: Улучшено сообщение об ошибке при усечённых данных pickle в C-реализации unpickler. Теперь в некоторых случаях вызывается UnpicklingError вместо AttributeError и ValueError.
bpo-26798: Добавлен BLAKE2 (blake2b и blake2s) в hashlib.
bpo-26032: Оптимизирован поиск по шаблону в pathlib с помощью os.scandir(); теперь он примерно в 1,5–4 раза быстрее.
bpo-25596: Оптимизированы функции glob() и iglob() в модуле glob; теперь они примерно в 3–6 раз быстрее.
bpo-27928: Добавлен scrypt (функция формирования ключа на основе пароля) в модуль hashlib (требуется OpenSSL 1.1.0).
bpo-27850: Удаление 3DES из списка шифров по умолчанию модуля ssl для защиты от атаки sweet32 (CVE-2016-2183).
bpo-27766: Добавить ChaCha20 Poly1305 в список шифров по умолчанию в модуле ssl. (Требуется OpenSSL 1.1.0 или LibreSSL).
bpo-25387: Проверять возвращаемое значение winsound.MessageBeep.
bpo-27866: Добавлен метод SSLContext.get_ciphers() для получения списка всех включённых шифров.
bpo-27744: Добавлен AF_ALG (криптография ядра Linux) в модуль socket.
bpo-26470: Перенос модулей ssl и hashlib на OpenSSL 1.1.0.
bpo-11620: Исправлена поддержка SND_MEMORY в winsound.PlaySound. На основе патча от Tim Lesher.
bpo-11734: Добавлена поддержка 16-разрядных чисел с плавающей запятой стандарта IEEE 754 в модуль struct. На основе патча от Eli Stevens.
bpo-27919: Помечена опция
extra_pathв distutils packaging как устаревшая.bpo-23229: Добавлены новые константы
cmath:cmath.infиcmath.nanдля соответствияmath.infиmath.nan, а такжеcmath.infjиcmath.nanjдля соответствия формату complex repr.bpo-27842: csv.DictReader теперь возвращает строки типа OrderedDict. (Автор: Steve Holden.)
Удалена поддержка передачи файлового дескриптора в os.access. Раньше это никогда не работало, но и исключения не вызывало.
bpo-12885: Исправлена ошибка в distutils при обнаружении символической ссылки.
bpo-27881: Исправлены возможные ошибки при установке sqlite3.Connection.isolation_level. Основано на патче Сян Чжана.
bpo-27861: Исправлен сбой в sqlite3.Connection.cursor(), когда фабрика создаёт не курсор. Патч Сян Чжана.
bpo-19884: Избегайте ложного вывода в OS X с Gnu Readline.
bpo-27706: Восстановлено детерминированное поведение random.Random().seed() для строковых начальных значений при использовании версии посева 1. Это позволяет последовательностям вызовов random() точно соответствовать тем, что были в Python 2. Патч Нофар Шнайдер.
bpo-10513: Исправлена регрессия в Connection.commit(). Операторы не должны сбрасываться после фиксации.
bpo-12319: Добавлена поддержка передачи с разделением на фрагменты (chunked transfer encoding) для запросов http.client.HTTPConnection. Класс urllib.request.AbstractHTTPHandler больше не требует заголовка Content-Length. Если HTTP-запрос имеет тело в виде файла или итератора, но без заголовка Content-Length, библиотека теперь использует chunked transfer-encoding.
Новая версия typing.py из https://github.com/python/typing: - Collection (только для 3.6) (bpo-27598) - Добавлен FrozenSet в __all__ (upstream #261) - исправлено падение в _get_type_vars() (upstream #259) - Удалено ограничение на dict в ForwardRef._eval_type (upstream #252)
bpo-27832: Сделать параметр
_normalizeконструктораFractionтолько ключевым (keyword-only), так чтоFraction(2, 3, 4)теперь вызываетTypeError.bpo-27539: Исправлен ненормализованный результат
Fraction.__pow__в случае отрицательного показателя и отрицательного основания.bpo-21718: cursor.description теперь доступен для запросов с CTE.
bpo-27819: В distutils sdists теперь на всех платформах по умолчанию создаются дистрибутивы в формате “gztar” (gzipped tar), если не указан параметр “formats”.
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 для поддержки вложенности разделяемых значений / proxy-объектов.
bpo-21201: Улучшена читаемость сообщения об ошибке multiprocessing. Спасибо Wojciech Walczak за патч.
asyncio: Добавлены set_protocol / get_protocol в Transports.
bpo-27456: asyncio: установлен TCP_NODELAY по умолчанию.
IDLE¶
bpo-15308: Добавлена команда «прервать выполнение» (^C) в меню Shell. Патч от Roger Serwy, обновлён Bayard Randel.
bpo-27922: Прекращено мерцание GUI-виджетов в тестах IDLE на экране.
bpo-27891: Импорты в модулях idlelib теперь единообразно сгруппированы и отсортированы.
bpo-17642: Добавлены более крупные размеры шрифтов для проекции в аудитории.
Добавлена версия в заголовок окна справки IDLE.
bpo-25564: В разделе о различиях IDLE и консоли упомянуто, что использование exec означает, что __builtins__ определён для каждого оператора.
bpo-27821: Исправлена регрессия в 3.6.0a3, которая не позволяла выбрать пользовательские наборы клавиш, если не была определена пользовательская тема.
C API¶
Тесты¶Tests
bpo-27427: Additional tests for the math module. Patch by Francisco Couzo.
bpo-27953: Skip math and cmath tests that fail on OS X 10.4 due to a poor libm implementation of tan.
bpo-26040: Improve test_math and test_cmath coverage and rigour. Patch by Jeff Allen.
bpo-27787: Вызов gc.collect() перед проверкой каждого теста на «зависшие потоки», поскольку зависшие потоки являются слабыми ссылками.
Сборка¶Build
bpo-27566: Исправляет цель clean в makefile заморозки (патч от Lisa Roach)
bpo-27705: Обновляет сообщение в validate_ucrtbase.py
bpo-27976: Deprecate building _ctypes with the bundled copy of libffi on non-OSX UNIX platforms.
bpo-27983: Отсутствие инструмента llvm-profdata при использовании clang, необходимого для PGO-линковки, теперь вызывает ошибку на этапе конфигурации, а не сборки, когда включён
--with-optimizations. Также улучшена возможность поиска llvm-profdata на macOS и некоторых версиях Linux.bpo-21590: Support for DTrace and SystemTap probes.
bpo-26307: Сборка profile-opt теперь применяет PGO ко встроенным модулям.
bpo-26359: Add the –with-optimizations flag to turn on LTO and PGO build support when available.
bpo-27917: Установлены триплеты платформы для сборок Android.
bpo-25825: Update references to the $(LIBPL) installation path on AIX. This path was changed in 3.2a4.
Обновлён установщик OS X для использования SQLite 3.14.1 и XZ 5.2.2.
bpo-21122: Fix LTO builds on OS X.
bpo-17128: Build OS X installer with a private copy of OpenSSL. Also provide a sample Install Certificates command script to install a set of root certificates from the third-party certifi module.
Инструменты/Демонстрации¶Tools/Demos
bpo-27952: Исправлена работа Tools/scripts/fixcid.py с Python 3 и текущим модулем «re», устранены некорректные экранирования обратной косой чертой в Python, а также исправлена ошибка разбора экранированных кавычек C.
Windows¶
bpo-28065: Update xz dependency to 5.2.2 and build it from source.
bpo-25144: Обеспечивает установку TargetDir до продолжения настраиваемой установки.
bpo-1602: Windows console doesn’t input or print Unicode (PEP 528)
bpo-27781: Change file system encoding on Windows to UTF-8 (PEP 529)
bpo-27731: Opt-out of MAX_PATH on Windows 10
bpo-6135: Adds encoding and errors parameters to subprocess.
bpo-27959: Adds oem encoding, alias ansi to mbcs, move aliasmbcs to codec lookup.
bpo-27982: The functions of the winsound module now accept keyword arguments.
bpo-20366: Build full text search support into SQLite on Windows.
bpo-27756: Добавлены новые иконки для файлов и процессов Python в Windows. Дизайн – Cherry Wang.
bpo-27883: Обновление sqlite до 3.14.1.0 на Windows.
Python 3.6.0 альфа 4¶Python 3.6.0 alpha 4
Дата выпуска: 2016-08-15
Ядро и встроенные модули¶Core and Builtins
bpo-27704: Оптимизировано создание bytes и bytearray из байтоподобных объектов и итерируемых объектов. Скорость увеличена до 3 раз для коротких объектов. Оригинальный патч от Naoki Inada.
bpo-26823: Большие блоки повторяющихся строк в traceback теперь сокращаются как «[Предыдущая строка повторена еще {count} раз]» во встроенном отображении traceback. Патч от 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(). Исправление от Xiang Zhang.
bpo-27581: Не полагаться на обёртывание для проверки переполнения в PySequence_Tuple(). Исправление от Xiang Zhang.
bpo-1621: Избегать знакового целочисленного переполнения в операциях со списками и кортежами. Патч от Xiang Zhang.
bpo-27419: Стандартная функция __import__() больше не ищет «__import__» в globals или builtins при импорте подмодулей или использовании «from import». Исправлена ошибка, приводившая к падению при выводе предупреждения о невозможности разрешения пакета из __spec__ или __package__.
bpo-27083: Учтена переменная окружения PYTHONCASEOK в Windows.
bpo-27514: Слишком много статически вложенных блоков теперь вызывает SyntaxError вместо SystemError.
bpo-27366: Реализован PEP 487 (Упрощённая настройка создания классов). При создании подкласса вызывается метод класса __init_subclass__ базового класса. Дескрипторы инициализируются с __set_name__ после создания класса.
Библиотека¶Library
bpo-26027: Добавлена поддержка PEP 519/__fspath__() в модули os и os.path. Включает код от 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(). Патч от Xiang Zhang.
bpo-27736: Предотвращение segfault после повторной инициализации интерпретатора из-за проблемы со счётчиком ссылок, внесённой в код для bpo-27038 в версии 3.6.0a3. Патч от Xiang Zhang.
bpo-25628: Параметры verbose и rename для collections.namedtuple теперь являются только ключевыми.
bpo-12345: Добавлена математическая константа tau в math и cmath. См. также PEP 628.
bpo-26823: traceback.StackSummary.format теперь сокращает большие блоки повторяющихся строк как «[Предыдущая строка повторена еще {count} раз]» (это изменение также влияет на другие операции отображения traceback в модуле). Патч от Emanuel Barry.
bpo-27664: Добавлена возможность указания префикса имени потока в concurrent.futures.thread.ThreadPoolExecutor().
bpo-27181: Добавлены функции geometric_mean и harmonic_mean в модуль statistics.
bpo-27573: code.interact теперь выводит сообщение при выходе.
bpo-6422: Добавлен метод autorange для объектов timeit.Timer.
bpo-27773: Исправлены некоторые ошибки управления памятью для server_hostname в _ssl.wrap_socket().
bpo-26750: unittest.mock.create_autospec() теперь корректно работает для подклассов property() и других дескрипторов данных. Удалён никогда не публиковавшийся и не документированный кортеж unittest.mock.DescriptorTypes.
bpo-26754: Недокументированная поддержка произвольных bytes-подобных объектов в качестве пути в compile() и аналогичных функциях теперь считается устаревшей.
bpo-26800: Недокументированная поддержка произвольных bytes-подобных объектов в качестве путей в функциях os теперь считается устаревшей.
bpo-26981: Добавлена прослойка совместимости _order_ для enum.Enum для кодовых баз Python 2/3.
bpo-27661: Добавлен именованный аргумент tzinfo в datetime.combine.
В модуле curses теперь вызывается ошибка, если в window.getstr() или window.instr() передано отрицательное значение.
bpo-27783: Исправлена возможная работа с неинициализированной памятью в operator.methodcaller.
bpo-27774: Исправлен возможный Py_DECREF на не принадлежащем объекте в _sre.
bpo-27760: Исправлено возможное целочисленное переполнение в binascii.b2a_qp.
bpo-27758: Исправлено возможное целочисленное переполнение в модуле _csv для больших длин записей.
bpo-27568: Предотвращение атаки HTTPoxy (CVE-2016-1000110). Переменная HTTP_PROXY игнорируется, когда установлена переменная окружения REQUEST_METHOD, что указывает на работу скрипта в режиме CGI.
bpo-7063: Удалён мёртвый код из обработки срезов модуля «array». Патч от Chuck.
bpo-27656: Не предполагать, что sched.h определяет какие-либо константы SCHED_*.
bpo-27130: В модуле «zlib» исправлена работа с большими буферами (обычно 4 ГиБ) при сжатии и распаковке. Ранее входные данные были ограничены 4 ГиБ, а операции сжатия и распаковки не обрабатывали результаты размером 4 ГиБ должным образом.
bpo-24773: Реализован PEP 495 (Устранение неоднозначности местного времени).
Константа EPOLLEXCLUSIVE (если она определена) теперь доступна в модуле select.
bpo-27567: Константы EPOLLRDHUP и POLLRDHUP теперь доступны в модуле select.
bpo-1621: Избегание переполнения при отрицании знакового int в модуле «audioop».
bpo-27533: Освобождение GIL в nt._isdir
bpo-17711: Исправлена распаковка по постоянному идентификатору с протоколом 0. Оригинальный патч Алессандро Вассалотти.
bpo-27522: Избежать непреднамеренной циклической ссылки в email.feedparser.
bpo-27512: Исправлено падение (segfault) при вызове 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: Клавиша Escape теперь закрывает окно запроса как отменённое.
bpo-27609: IDLE: табуляция после начальных пробелов должна именно табулировать, а не вызывать автодополнение. Это исправляет проблему с написанием докстрингов, отступы в которых сделаны как минимум дважды.
bpo-27609: Явно возвращать None, когда есть также возвраты не-None. В нескольких случаях инвертировано условие и удалён один return.
bpo-25507: IDLE больше не выполняет ошибочный код из-за своих импортов tkinter. Пользователи должны включать те же импорты, которые требуются для прямого запуска в Python.
bpo-27173: Добавлен 'IDLE Modern Unix' во встроенные наборы клавиш. Набор по умолчанию теперь зависит от платформы. Добавлены тесты для изменений в модуле config.
bpo-27452: Добавлены счётчик строк и CRC в дамп теста configHandler в IDLE.
Тесты¶Tests
bpo-25805: Пропускает тест в test_pkgutil, который не работает, когда
__name__ == __main__. Патч от SilentGhost.bpo-27472: Добавляет test.support.unix_shell как путь к стандартной оболочке.
bpo-27369: В test_pyexpat избегаем проверки деталей сообщения об ошибке, которые изменились в Expat 2.2.0.
bpo-27594: Предотвращает ошибку утверждения при запуске test_ast с включённым покрытием: гарантирует, что объект кода имеет корректный номер первой строки. Патч предложен Иваном Левкивским.
Windows¶
Сборка¶Build
bpo-27713: Подавляет ложные предупреждения сборки при обновлении файлов bootstrap в importlib. Патч от Xiang Zhang
bpo-25825: Исправляет ссылки на Modules/python.exp, который требуется в AIX. Ссылки были случайно изменены в версии 3.5.0a1.
bpo-27453: Вызов CPP в configure должен использовать CPPFLAGS. Патч от Chi Hsuan Yen.
bpo-27641: Сценарий configure теперь вставляет комментарии в makefile, чтобы предотвратить кросс-компиляцию исполняемых файлов pgen и _freeze_importlib.
bpo-26662: Устанавливает PYTHON_FOR_GEN в configure как программу Python, используемую для генерации файлов во время сборки.
bpo-10910: Избегает ошибок компиляции C++ на FreeBSD и OS X. Также обновляет проверки версий FreeBSD для исходного обходного решения ctype UTF-8.
Python 3.6.0 альфа 3¶Python 3.6.0 alpha 3
Дата выпуска: 2016-07-11
Ядро и встроенные модули¶Core and Builtins
bpo-27473: Исправлено возможное целочисленное переполнение при конкатенации bytes и bytearray. Исправление от Xiang Zhang.
bpo-23034: Вывод специальной сборки Python с определёнными макросами COUNT_ALLOCS, SHOW_ALLOC_COUNT или SHOW_TRACK_COUNT теперь по умолчанию отключён. Его можно снова включить с помощью опции “-X showalloccount”. Теперь вывод осуществляется в stderr вместо stdout.
bpo-27443: __length_hint__() итераторов bytearray больше не возвращает отрицательное целое число для изменённого bytearray.
bpo-27007: Методы класса fromhex() подклассов bytes и bytearray теперь возвращают экземпляр соответствующего подкласса.
Библиотека¶Library
bpo-26844: Исправлено сообщение об ошибке для imp.find_module(), чтобы оно ссылалось на «path» вместо «name». Патч Льва Максимова.
bpo-23804: Исправлены вызовы recv() с нулевой длиной в SSL: теперь они не блокируются и не вызывают ошибку о нечистом 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. Они заменяют старые методы trace_variable, trace, trace_vdelete и trace_vinfo, которые используют устаревшие команды Tcl и могут не работать в будущих версиях Tcl. Исправлено поведение старых методов отслеживания: trace_vdelete() с неправильным режимом больше не ломает отслеживание, trace_vinfo() теперь всегда возвращает список пар строк, отслеживание в режиме "u" теперь работает.
bpo-26243: Теперь только аргумент level функции zlib.compress() является именованным. Первый аргумент – только позиционный.
bpo-27038: Тип DirEntry теперь доступен как os.DirEntry. Патч предоставлен Jelle Zijlstra.
bpo-27186: Обновлены os.fspath()/PyOS_FSPath() для проверки, что возвращаемое значение __fspath__() является str или bytes.
bpo-18726: Все необязательные параметры функций dump(), dumps(), load() и loads(), а также конструкторов классов JSONEncoder и JSONDecoder в модуле json теперь являются только именованными.
bpo-27319: Методы selection_set(), selection_add(), selection_remove() и selection_toggle() виджета ttk.TreeView теперь позволяют передавать несколько элементов как отдельные аргументы вместо передачи в виде кортежа. Объявлена устаревшей недокументированная возможность вызова метода selection() с аргументами.
bpo-27079: Исправлены функции curses.ascii isblank(), iscntrl() и ispunct().
bpo-27294: Числовое состояние в repr для объектов событий Tkinter теперь представляется как комбинация известных флагов.
bpo-27177: Объекты Match в модуле re теперь поддерживают объекты, подобные индексам, в качестве индексов групп. Основано на патчах Jeroen Demeyer и Xiang Zhang.
bpo-26754: Некоторые функции (compile() и т.д.) принимали аргумент filename, закодированный как итерируемый объект из целых чисел. Теперь принимаются только строки и байтоподобные объекты.
bpo-26536: socket.ioctl теперь поддерживает SIO_LOOPBACK_FAST_PATH. Патч от Daniel Stokes.
bpo-27048: Предотвращает сбой distutils в Windows, когда переменные окружения содержат символы, отличные от ASCII.
bpo-27330: Исправлены возможные утечки в модуле ctypes.
bpo-27238: Избавление от голых except в модуле turtle. Патч от Jelle Zijlstra.
bpo-27122: Когда исключение возникает внутри контекста, управляемого contextlib.ExitStack(), и один из генераторов выходного стека перехватывает его и возбуждает в цепочке, не возбуждайте повторно исходное исключение при выходе – пропустите новое цепочечное. Это позволяет избежать ошибки PEP 479, описанной в issue25782.
Безопасность¶Security
bpo-27278: Исправление реализации os.urandom() с использованием getrandom() на Linux. Урезание размера до INT_MAX и циклический сбор случайных байтов до получения достаточного количества, вместо прямого приведения Py_ssize_t к int.
Библиотека¶Library
bpo-16864: sqlite3.Cursor.lastrowid теперь поддерживает оператор REPLACE. Первоначальный патч от Alex LordThorsen.
bpo-26386: Исправлены операции выбора ttk.TreeView с идентификаторами элементов, содержащими пробелы.
bpo-8637: Учитывать программу постраничного просмотра, заданную переменной окружения MANPAGER (в приоритете над заданной переменной PAGER).
Безопасность¶Security
bpo-22636: Устранение проблем внедрения команд оболочки с ctypes.util.find_library().
Библиотека¶Library
IDLE¶
bpo-27477: Диалоги поиска IDLE теперь используют ttk-виджеты.
bpo-27173: Добавлен 'IDLE Modern Unix' во встроенные наборы клавиш. Набор по умолчанию теперь зависит от платформы. Добавлены тесты для изменений в модуле config.
bpo-27452: Исправлена работа командной строки "idle-test> python test_help.py". __file__ теперь относителен, когда python запускается в каталоге файла.
bpo-27452: Добавлены счётчик строк и CRC в дамп теста configHandler в IDLE.
bpo-27380: IDLE: добавлен query.py с базовым диалогом Query и ttk-виджетами. Модуль содержит подклассы SectionName, ModuleName и HelpSource, которые используются для получения информации от пользователей через configdialog и файл =>Load Module. Каждый подкласс имеет свои проверки корректности. Использование ModuleName позволяет пользователям редактировать неправильные имена модулей вместо того, чтобы начинать заново. Добавлены тесты и удалены два файла, объединенные в новый.
bpo-27372: Test_idle больше не изменяет локаль.
bpo-27365: Разрешены не-ASCII символы в IDLE NEWS.txt для имён участников.
bpo-27245: IDLE: корректное удаление пользовательских тем и привязок клавиш. Ранее при запуске IDLE из консоли или через import выдавался каскад предупреждений. Патч от Serhiy Storchaka.
bpo-24137: Запускать IDLE, test_idle и htest с отключенным корневым окном tkinter по умолчанию. Исправлены код и тесты, не работающие при таком ограничении. Исправлены htest, чтобы не создавать второе избыточное корневое окно и mainloop.
bpo-27310: Исправлена ошибка запуска IDLE.app на OS X из-за остаточного импорта.
C API¶
bpo-26754: PyUnicode_FSDecoder() принимал аргумент имени файла, закодированный как итерируемый объект из целых чисел. Теперь принимаются только строки и байтоподобные объекты.
Сборка¶Build
bpo-28066: Исправляет логику поиска каталогов сборки для сгенерированных include-файлов при сборке вне дерева исходников.
bpo-27442: В sysconfig.get_config_vars() добавлено значение 'ANDROID_API_LEVEL', указывающее уровень API Android, под который собран Python.
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.
Инструменты/Демонстрации¶Tools/Demos
Документация¶Documentation
Тесты¶Tests
bpo-27027: Добавлена test.support.is_android, которая равна True, если это сборка для Android.
Python 3.6.0 альфа 2¶Python 3.6.0 alpha 2
Дата выпуска: 2016-06-13
Ядро и встроенные модули¶Core and Builtins
bpo-27095: Упрощён MAKE_FUNCTION и удалён опкод MAKE_CLOSURE. Патч от Demur Rumed.
bpo-27190: Генерировать NotSupportedError, если sqlite3 старше 3.3.1. Патч от Dave Sawyer.
bpo-27286: Исправлена компиляция опкода BUILD_MAP_UNPACK_WITH_CALL. Вызов функции с обобщённой распаковкой (PEP 448) и конфликтующими именами ключевых аргументов мог приводить к неопределённому поведению.
bpo-27140: Добавлен опкод BUILD_CONST_KEY_MAP.
bpo-27186: Добавлена поддержка os.PathLike объектов в open() (часть PEP 519).
bpo-27066: Исправлен SystemError, если пользовательская функция открытия (для open()) возвращает отрицательное число без установки исключения.
bpo-26983: float() теперь всегда возвращает экземпляр точного float. Предупреждение об устаревании выдаётся, если __float__ возвращает экземпляр строгого подкласса float. В будущих версиях Python это может стать ошибкой.
bpo-27097: Интерпретатор Python теперь примерно на 7% быстрее благодаря оптимизированному декодированию инструкций. На основе патча от Demur Rumed.
bpo-26647: Интерпретатор Python теперь использует 16-битный wordcode вместо байткода. Патч от Demur Rumed.
bpo-23275: разрешено присваивание в пустой список целей в круглых скобках: () = iterable.
bpo-27243: Обновлён протокол __aiter__: вместо возврата ожидаемого объекта, который разрешается в асинхронный итератор, асинхронный итератор должен возвращаться напрямую. Использование первого варианта вызовет PendingDeprecationWarning.
Библиотека¶Library
Закомментированы константы сокетов (SO_REUSEPORT) и модуля posix (O_SHLOCK, O_EXLOCK), доступные через API, но не реализованные в GNU/Hurd. Они всё равно не работали бы во время выполнения.
bpo-27025: генерируемые имена для виджетов Tkinter теперь стали более осмысленными и узнаваемыми.
bpo-25455: исправлены аварийные завершения в repr рекурсивных объектов ElementTree.Element и functools.partial.
bpo-27294: улучшено представление repr для объектов событий Tkinter.
bpo-20508: улучшено сообщение исключения в IPv{4,6}Network.__getitem__. Патч от Gareth Rees.
Безопасность¶Security
bpo-26556: Обновление expat до версии 2.1.1, исправление CVE-2015-1283.
Исправление уязвимости снятия TLS в smtplib, CVE-2016-0772. Сообщено командой Oststrom.
Библиотека¶Library
bpo-21386: Реализовано недостающее свойство IPv4Address.is_global. Оно документировано начиная с 07a5610bae9d. Первоначальный патч от Roger Luethi.
bpo-27029: удалена устаревшая поддержка универсального режима перевода строк из ZipFile.open().
bpo-27030: неизвестные экранированные последовательности, состоящие из
'\'и буквы ASCII в регулярных выражениях, теперь считаются ошибками. Флаг re.LOCALE теперь можно использовать только с байтовыми шаблонами.bpo-27186: добавлена поддержка os.PathLike в DirEntry (часть PEP 519). Первоначальный патч от Jelle Zijlstra.
bpo-20900: Команда register в distutils теперь корректно декодирует HTTP-ответы. Первоначальный патч от ingrid.
bpo-27186: добавлена поддержка os.PathLike в pathlib, снят его временный статус (часть PEP 519). Первоначальный патч от Dusty Phillips.
bpo-27186: добавлена поддержка объектов os.PathLike в os.fsencode() и os.fsdecode() (часть PEP 519).
bpo-27186: введены os.PathLike и os.fspath() (часть PEP 519).
Новая версия typing.py предоставляет несколько новых классов и возможностей: @overload вне заглушек, Reversible, DefaultDict, Text, ContextManager, Type[], NewType(), TYPE_CHECKING и многочисленные исправления ошибок (следует отметить, что некоторые из новых возможностей ещё не реализованы в mypy или других статических анализаторах). Также добавлены классы для PEP 492 (ожидаемый объект, AsyncIterable, AsyncIterator) (фактически они были включены ещё в 3.5.1, но не упоминались).
bpo-25738: Остановлена отправка тела сообщения в http.server.BaseHTTPRequestHandler.send_error() для кода 205 Reset Content. Также не отправляются поля заголовка Content в ответах без тела. Патч от Susumu Koshiba.
bpo-21313: Исправлен модуль platform для корректной работы, когда sys.version содержит усечённую информацию о сборке.
Безопасность¶Security
bpo-26839: В Linux
os.urandom()теперь вызываетgetrandom()сGRND_NONBLOCKдля перехода на чтение/dev/urandom, если пул энтропии urandom ещё не инициализирован. Патч написан Колмом Бакли (Colm Buckley).
Библиотека¶Library
bpo-23883: добавлены отсутствующие API в __all__ для соответствия документированным API следующих модулей: cgi, mailbox, mimetypes, plistlib и smtpd. Патчи от Jacek Kołodziej.
bpo-27164: В модуле zlib разрешена декомпрессия сырых потоков Deflate с предопределённым zdict. Основано на патче от Xiang Zhang.
bpo-24291: Исправлено wsgiref.simple_server.WSGIRequestHandler для полной записи данных клиенту. Ранее могли происходить частичные записи и усечение данных. Также wsgiref.handler.ServerHandler теперь может обрабатывать частичные записи в stdout, но это устарело.
bpo-21272: используется _sysconfigdata.py для инициализации distutils.sysconfig.
bpo-19611:
inspectтеперь сообщает о неявных параметрах.0, генерируемых компилятором для областей видимости включений и выражений-генераторов, как если бы это были позиционные параметры с именемimplicit0. Патч от Jelle Zijlstra.bpo-26809: Добавлено
__all__вstring. Патч от Emanuel Barry.bpo-26373: subprocess.Popen.communicate теперь корректно игнорирует BrokenPipeError, когда дочерний процесс завершается до вызова .communicate() во всех/большинстве случаев.
Поиск имён констант IntEnum в модулях signal, socket и ssl теперь возвращает согласованное имя для значений, имеющих несколько имён. Например: signal.Signals(6) теперь ссылается на себя как signal.SIGALRM, а не переключается между ним и signal.SIGIOT в зависимости от seed хеш-рандомизации интерпретатора.
bpo-27167: уточнён текст сообщения об ошибке subprocess.CalledProcessError, когда дочерний процесс завершился из-за сигнала.
bpo-25931: не определять имена socketserver.Forking* на платформах, таких как Windows, которые не поддерживают os.fork().
bpo-21776: distutils.upload теперь корректно обрабатывает HTTPError. Первоначальный патч от Claudiu Popa.
bpo-26526: замена пользовательской проверки дерева разбора в модуле parser на простой DFA-валидатор.
bpo-27114: Исправлена ошибка PermissionError в SSLContext._load_windows_store_certs.
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: Прекратить появление предупреждений ‘ThemeChanged’ при запуске тестов IDLE. Они сохранялись после подавления других предупреждений в #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: Обеспечить работу colorizer htest и turtledemo с тёмными темами. Перенести код настройки цветов текстового виджета в новую функцию.
bpo-24225: Переименовано множество файлов
idlelib/*.pyиidle_test/test_*.py. Файлы отредактированы для замены старых имён на новые в тех случаях, когда старое имя относилось к модулю, а не к содержащемуся в нём классу. Подробнее см. в описании задачи и разделе IDLE в «Что нового в Python 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: Добавлен тест для делегата отмены. Патч в основном от Саймадхава Хебликара.
bpo-27044: Добавлен ConfigDialog.remove_var_callbacks для предотвращения утечек памяти.
bpo-23977: Добавлены дополнительные проверки в test_delegator.
Документация¶Documentation
bpo-16484: URL по умолчанию PYTHONDOCS изменён на «https:», исправлены результирующие ссылки на нижний регистр. Патч Шона Родмана, тест Каушика Надикудити.
bpo-24136: Документирован новый синтаксис распаковки PEP 448 версии 3.5.
bpo-22558: добавлены недостающие ссылки из документации на исходный код модулей, написанных на Python. Патч от Yoni Lavi.
Тесты¶Tests
bpo-25285: regrtest теперь использует подпроцессы при использовании опции командной строки -j1: каждый тестовый файл выполняется в новом дочернем процессе. Раньше опция -j1 игнорировалась.
bpo-25285: Скрипт Tools/buildbot/test.bat теперь по умолчанию использует -j1 для выполнения каждого тестового файла в новом дочернем процессе.
Windows¶
bpo-27064: Запускатель py.exe теперь по умолчанию использует Python 3. При интерактивном использовании запускатель Windows
py.exeбольше не отдаёт предпочтение установленной версии Python 2 перед Python 3 по умолчанию.
Сборка¶Build
Windows¶
bpo-17500: удаление неиспользуемых и устаревших иконок. (См. также: https://github.com/python/pythondotorg/issues/945)
C API¶
Инструменты/Демонстрации¶Tools/Demos
bpo-26282: Argument Clinic теперь поддерживает только позиционные и именованные параметры в одной функции.
Python 3.6.0 альфа 1¶Python 3.6.0 alpha 1
Дата выпуска: 2016-05-16
Ядро и встроенные модули¶Core and Builtins
bpo-20041: Исправлен TypeError, когда frame.f_trace устанавливается в None. Патч от Ксавье де Гай (Xavier de Gaye).
bpo-26168: Исправлена возможная утечка ссылок при сбое Py_BuildValue() с форматом «N».
bpo-26991: Исправление возможной утечки ссылок при создании функции с аннотациями.
bpo-27039: Исправлен bytearray.remove() для значений больше 127. Основано на патче от Joe Jevnik.
bpo-23640: int.from_bytes() больше не обходит конструкторы подклассов.
bpo-27005: Оптимизирован классовый метод float.fromhex() для точных чисел с плавающей запятой. Теперь он работает в 2 раза быстрее.
bpo-18531: Единственный именованный аргумент подтипа dict передавался без изменений в функцию, определённую на C. Теперь он преобразуется в точный dict.
bpo-26811: gc.get_objects() больше не содержит повреждённый кортеж с нулевым указателем.
bpo-20120: Использование RawConfigParser для разбора .pypirc, удаление поддержки интерполяции, непреднамеренно добавленной при переходе на Python 3. Поведение больше не выполняет интерполяцию в файлах .pypirc, совпадая с поведением в Python 2.7 и Setuptools 19.0.
bpo-26249: Функции управления памятью из домена
PyMem_Malloc()(PYMEM_DOMAIN_MEM) теперь используют распределитель pymalloc, а не системныйmalloc(). Приложения, вызывающиеPyMem_Malloc()без удержания GIL, теперь могут аварийно завершаться. Используйте переменную окруженияPYTHONMALLOC=debugдля проверки использования распределителей памяти в вашем приложении.bpo-26802: Оптимизированы вызовы функций, использующие только распаковку, например
func(*tuple)(без других позиционных аргументов и без именованных): избегается копирование кортежа. Патч написан Joe Jevnik.bpo-26659: Встроенный тип slice теперь поддерживает сборку циклических ссылок.
bpo-26718: super.__init__ больше не приводит к утечке памяти при многократном вызове. ПРИМЕЧАНИЕ: Прямой вызов super.__init__ не рекомендуется!
bpo-27138: Исправлен комментарий в документации для FileFinder.find_spec().
bpo-25339: PYTHONIOENCODING теперь имеет приоритет над локалью при установке обработчика ошибок для stdin и stdout.
bpo-26494: Исправлен сбой при итерации истощающих итераторов. Затронутые классы: общие итераторы последовательностей, итераторы str, bytes, bytearray, list, tuple, set, frozenset, dict, OrderedDict, соответствующие представления и итератор os.scandir().
bpo-26574: Оптимизированы
bytes.replace(b'', b'.')иbytearray.replace(b'', b'.'). Патч написан Джошем Снайдером.bpo-26581: Если в одной строке файла исходного кода Python указано несколько кодировок (coding cookie), учитывается только первая.
bpo-19711: Добавлены тесты для перезагрузки пакетов пространства имён.
bpo-21099: Переведены подходящие тесты importlib на использование API PEP 451.
bpo-26563: Отладочные перехватчики распределителей памяти Python теперь вызывают фатальную ошибку, если функции семейства
PyMem_Malloc()вызываются без удержания GIL.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, когда Python сконфигурирован без pymalloc.
bpo-26464: Исправление str.translate() для случая, когда строка в ASCII и первая замена удаляет символ, а следующая замена использует не-ASCII символ или строку длиннее 1 символа. Регрессия, внесённая в Python 3.5.0.
bpo-22836: Обеспечение осмысленности отчётов об исключениях от PyErr_Display() и PyErr_WriteUnraisable(), даже если их форматирование вызывает вторичные ошибки. Это влияет на отчёты, создаваемые sys.__excepthook__() и при возникновении исключения в __del__().
bpo-26302: Исправлено поведение: запятая больше не считается допустимым символом в именах cookie.
bpo-26136: Повышено предупреждение при возбуждении StopIteration в генераторе с PendingDeprecationWarning до DeprecationWarning. Патч Аниша Шаха.
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. (Вклад Джулиана Тейлора.)
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: [ОБНОВЛЕНИЕ] Закомментирован один из тестов на возможность сериализации (pickle) в _PyObject_GetState() из-за регрессий, возникших в проектах на Cython.
bpo-25961: Запрещены нулевые символы в имени типа.
bpo-25973: Исправлен segfault при привязке имени, начинающегося с двух подчёркиваний, в недопустимом операторе nonlocal.
bpo-22995: Экземпляры типов-расширений с состоянием, которые не являются подклассами list или dict и не реализуют никаких связанных с pickle методов (__reduce__, __reduce_ex__, __getnewargs__, __getnewargs_ex__ или __getstate__), больше не могут быть сериализованы с помощью pickle. Включая memoryview.
bpo-20440: Массовая замена небезопасного кода установки атрибутов на специальный макрос Py_SETREF.
bpo-25766: Специальный метод __bytes__() теперь работает в подклассах str.
bpo-25421: Методы __sizeof__ встроенных типов теперь используют динамический базовый размер. Это позволяет sys.getsize() корректно работать с их подклассами, в которых определён __slots__.
bpo-25709: исправлена проблема с конкатенацией строк на месте и кешем utf-8.
bpo-5319: Новый API Py_FinalizeEx(), позволяющий Python устанавливать код возврата 120 при ошибке сброса буферизованных потоков.
bpo-25485: telnetlib.Telnet теперь является менеджером контекста.
bpo-24097: Исправлен сбой в object.__reduce__(), если имя слота освобождается внутри __getattr__.
bpo-24731: Исправлен сбой при преобразовании объектов со специальными методами __bytes__, __trunc__ и __float__, которые возвращают экземпляры подклассов bytes, int и float, в соответствующие подклассы bytes, int и float.
bpo-25630: исправление возможного segfault при разборе аргументов в функциях, принимающих пути файловой системы.
bpo-23564: исправлена частично сломанная проверка корректности во внутренностях _posixsubprocess относительно того, как fds_to_pass передавались дочернему процессу. Ошибка не имела фактического влияния, так как subprocess.py уже её избегал.
bpo-25388: исправлен сбой токенизатора при обработке недекодируемого исходного кода с нулевым байтом.
bpo-25462: хеш ключа теперь вычисляется только один раз в большинстве операций в C-реализации OrderedDict.
bpo-22995: реализация по умолчанию __reduce__ и __reduce_ex__ теперь отклоняет встроенные типы, у которых не определён __new__.
bpo-24802: избегание выхода за границы буфера при передаче байтоподобных объектов в int(), float(), compile(), exec() и eval(). Эти объекты не обязательно завершаются нулевым байтом, но функции предполагали, что это так.
bpo-25555: исправление парсера и AST: заполнение lineno и col_offset узла “arg” при компиляции AST из объектов Python.
bpo-24726: исправлен сбой и утечка NULL в repr() OrderedDict, который был изменён прямыми вызовами методов dict.
bpo-25449: итерация по OrderedDict с ключами с нестабильным хешем теперь вызывает KeyError как в C-реализации, так и в реализации на Python.
bpo-25395: исправлен сбой при сборке мусора сильно вложенных структур OrderedDict.
bpo-25401: Оптимизация bytes.fromhex() и bytearray.fromhex(): теперь они работают от 2 до 3.5 раз быстрее.
bpo-25399: Оптимизация bytearray % args с использованием нового приватного API _PyBytesWriter. Форматирование теперь выполняется в 2.5–5 раз быстрее.
bpo-25274: sys.setrecursionlimit() теперь вызывает RecursionError, если новый предел рекурсии слишком низок в зависимости от текущей глубины рекурсии. Также изменена формула «нижней отметки», чтобы сделать её монотонной. Эта отметка используется для принятия решения о сбросе флага переполнения состояния потока.
bpo-24402: исправление input() для вывода приглашения в перенаправленный stdout, когда sys.stdout.fileno() завершается ошибкой.
bpo-25349: Оптимизация bytes % args с использованием нового приватного API _PyBytesWriter. Форматирование теперь выполняется до 2 раз быстрее.
bpo-24806: предотвращение создания подклассов встроенных типов, которым не разрешено наследование, через множественное наследование.
bpo-25301: Декодер UTF-8 теперь работает до 15 раз быстрее для обработчиков ошибок:
ignore,replaceиsurrogateescape.bpo-24848: исправлен ряд ошибок в декодировании UTF-7 некорректных данных.
bpo-25267: Кодировщик UTF-8 теперь работает до 75 раз быстрее для обработчиков ошибок:
ignore,replace,surrogateescape,surrogatepass. Патч написан совместно с Serhiy Storchaka.bpo-25280: Сообщения трассировки импорта, выводимые в подробном режиме (-v), больше не форматируются дважды.
bpo-25227: Оптимизация кодировщиков ASCII и latin1 с обработчиком ошибок
surrogateescape: теперь они работают до 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: Исправлено поведение клавиши TAB в REPL с readline.
bpo-26288: Оптимизирована функция PyLong_AsDouble.
bpo-26289: Оптимизировано деление с округлением вниз и деление по модулю для однозначных длинных целых. Микротесты показывают ускорение в 2–2,5 раза. Встроенная функция divmod теперь также работает примерно на 10% быстрее. (См. также: bpo-26315)
bpo-25887: Вызывается RuntimeError при ожидании объекта корутины более одного раза.
Библиотека¶Library
bpo-27057: Исправлен os.set_inheritable() на Android: ioctl() блокируется SELinux и завершается с EACCESS. Функция теперь использует fcntl() в качестве запасного варианта. Патч написан Michał Bednarski.
bpo-27014: Исправлена бесконечная рекурсия при использовании typing.py. Спасибо Kalle Tuure!
bpo-27031: Удалены фиктивные методы в классах виджетов Tkinter: tk_menuBar() и tk_bindForTraversal().
bpo-14132: Исправлена обработка перенаправлений в urllib.request, когда целевой URL содержит только строку запроса. Первоначальное исправление от Ján Janech.
bpo-17214: Модуль «urllib.request» теперь процентно кодирует не-ASCII байты найденные в URL-адресах перенаправления. Некоторые серверы отправляют поля заголовка Location с не-ASCII байтами, но «http.client» требует, чтобы целевой запрос был кодируем в ASCII, в противном случае возбуждается UnicodeEncodeError. На основе патча от Christian Heimes.
bpo-27033: Значение по умолчанию параметра decode_data для конструкторов smtpd.SMTPChannel и smtpd.SMTPServer изменено на False.
bpo-27034: Удалён устаревший класс asynchat.fifo.
bpo-26870: Добавлена функция readline.set_auto_history(), которая позволяет запретить автоматическое добавление записей в список истории. На основе патча от Tyler Crompton.
bpo-26039: zipfile.ZipFile.open() теперь можно использовать для записи данных в ZIP-файл, а не только для извлечения. Патч от Thomas Kluyver.
bpo-26892: Учтён флаг debuglevel в urllib.request.HTTPHandler. Патч предоставлен Chi Hsuan Yen.
bpo-22274: В модуле subprocess разрешено перенаправление stderr в\nstdout, даже если stdout не перенаправлен. Патч от Akira Li.
bpo-26807: Атрибут files у mock_open больше не вызывает ошибку при readline в конце файла. Патч от Yolanda Robla.
bpo-25745: Исправлена утечка userptr в деструкторе панели curses.
bpo-26977: Удалён ненужный и игнорируемый вызов вспомогательной функции суммы квадратов в statistics.pvariance.
bpo-26002: В statistics.median используется bisect вместо линейного поиска. Патч от Upendra Kuma.
bpo-25974: Используется новый метод Decimal.as_integer_ratio() в модуле statistics. Патч от Stefan Krah.
bpo-26881: Модуль modulefinder теперь поддерживает расширенные аргументы опкодов.
bpo-23815: Исправлены сбои, связанные с напрямую созданными экземплярами типов в модулях _tkinter и curses.panel.
bpo-17765: weakref.ref() больше не игнорирует молча именованные аргументы. Патч от Georg Brandl.
bpo-26873: xmlrpc теперь возбуждает ResponseError для неподдерживаемых тегов типов вместо того чтобы молча возвращать неверный результат.
bpo-26915: Методы __contains__ в абстрактных базовых классах коллекций теперь сначала проверяют идентичность, а затем равенство. Это лучше соответствует поведению конкретных классов, позволяет корректно обрабатывать NaN и упрощает рассуждение об инвариантах контейнеров.
bpo-26711: Исправлено сравнение plistlib.Data с другими типами.
bpo-24114: Исправлена неинициализированная переменная в
ctypes.util. Ошибка возникает только на SunOS, когда реализация ctypes ищет программуcrle. Исправление от Xiang Zhang. Протестировано на SunOS Kees Bos.bpo-26864: В urllib.request изменена проверка хостов для обхода прокси по no_proxy: теперь она регистронезависима и не сопоставляется с несвязанными именами хостов которые случайно имеют обходимый хост в качестве суффикса. Патч от Xiang Zhang.
bpo-24902: Вывод URL сервера при запуске http.server. Исходный патч от Felix Kaiser.
bpo-25788: fileinput.hook_encoded() теперь поддерживает аргумент «errors» для передачи в open. Оригинальный патч от Джозефа Хэкмана.
bpo-26634: recursive_repr() теперь устанавливает __qualname__ обёртки. Патч от Xiang Zhang.
bpo-26804: urllib.request теперь предпочитает переменные окружения прокси в нижнем регистре, а не в ВЕРХНЕМ или Смешанном_Регистре. Патч предоставлен Hans-Peter Jansen.
bpo-26837: assertSequenceEqual() теперь корректно выводит нестроковые различающиеся элементы (например, bytes в режиме -b). Это затрагивает assertListEqual() и assertTupleEqual().
bpo-26041: Из сообщений об устаревании функций platform.dist() и platform.linux_distribution() удалена фраза «will be removed in 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: Форматы ustar и gnu в tarfile теперь корректно вычисляют пределы полей имени и ссылки для многобайтовых кодировок символов, таких как utf-8.
Безопасность¶Security
bpo-26657: Исправление уязвимости обхода каталогов (directory traversal) в http.server на Windows. Исправляет регрессию, внесённую в 3.3.4rc1 и 3.4.0rc1. На основе патча Филиппа Хагемайстера (Philipp Hagemeister).
Библиотека¶Library
bpo-26717: Прекращено кодирование путей WSGI, преобразованных в Latin-1, с помощью UTF-8. Патч от Anthony Sottile.
bpo-26782: Добавлен STARTUPINFO в subprocess.__all__ в Windows.
bpo-26404: Добавлен контекстный менеджер в socketserver. Патч от Авива Паливоды.
bpo-26735: Исправлен
os.urandom()в Solaris 11.3 и новее при чтении более 1024 байт: вызыватьgetrandom()несколько раз с ограничением 1024 байта за вызов.bpo-26585: Удалён http.server._quote_html() и используется html.escape(quote=False). Патч от Сяна Чжана.
bpo-26685: Возбуждается OSError, если закрытие сокета завершается ошибкой.
bpo-16329: Добавлен .webm в mimetypes.types_map. Патч от Giampaolo Rodola’.
bpo-13952: Добавлен .csv в mimetypes.types_map. Патч от Geoff Wilson.
bpo-26587: модуль site теперь позволяет файлам .pth указывать файлы для добавления в sys.path (например, zip-файлы).
bpo-25609: Представлены contextlib.AbstractContextManager и typing.ContextManager.
bpo-26709: Исправлена проблема Y2038 при загрузке двоичных PList-файлов.
bpo-23735: Обрабатывается изменение размера терминала в Readline 6.3+ с помощью установки собственного обработчика SIGWINCH. Патч от Eric Price.
bpo-25951: Изменено SSLSocket.sendall() для возврата None, как явно документировано для обычных сокетов. Патч от Авива Паливоды.
bpo-26586: В http.server теперь отправляется ответ «413 Request header fields too large», если для разбора слишком много полей заголовка, вместо прерывания соединения и возбуждения необработанного исключения. Патч от 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 (изменение 3603bae63c13 работает только для классов), поэтому пришлось реализовать __ne__ самостоятельно. Патч от Andrew Plummer.
bpo-26644: Возбуждается ValueError вместо SystemError, когда отрицательная длина передаётся в SSLSocket.recv() или read().
bpo-23804: Исправлены методы SSL recv(0) и read(0): теперь они возвращают ноль байт вместо до 1024.
bpo-26616: Исправлена ошибка в методе datetime.astimezone().
bpo-26637: Модуль
importlibтеперь выдаётImportErrorвместоTypeError, если__import__()вызывается во время процесса завершения Python, ноsys.pathуже очищен (установлен вNone).bpo-21925:
warnings.formatwarning()теперь перехватывает исключения при вызовеlinecache.getline()иtracemalloc.get_object_traceback(), чтобы можно было залогироватьResourceWarning, возникающие поздно во время завершения работы Python.bpo-23848: В Windows faulthandler.enable() теперь также устанавливает обработчик исключений для дампа стека вызовов всех потоков Python при любом исключении Windows, а не только при сигналах UNIX (SIGSEGV, SIGFPE, SIGABRT).
bpo-26530: Добавлены C-функции
_PyTraceMalloc_Track()и_PyTraceMalloc_Untrack()для отслеживания блоков памяти с помощью модуляtracemalloc. Добавлен_PyTraceMalloc_GetTraceback()для получения стека вызовов объекта.bpo-26588: _tracemalloc теперь поддерживает трассировку выделений памяти в нескольких адресных пространствах (доменах).
bpo-24266: При компиляции с Readline 7 нажатие Ctrl+C во время поиска по истории Readline теперь отменяет режим поиска.
bpo-26590: Реализован безопасный финализатор для типа _socket.socket. Теперь он освобождает GIL для закрытия сокета.
bpo-18787: spwd.getspnam() теперь вызывает PermissionError, если у пользователя нет прав.
bpo-26560: Предотвращено возможное исключение ValueError в BaseHandler.start_response. Первоначальный патч от Peter Inglesby.
bpo-26567: Добавлена новая функция
PyErr_ResourceWarning()для передачи уничтоженного объекта. Добавлен атрибут source вwarnings.WarningMessage. Добавлена warnings._showwarnmsg(), которая использует tracemalloc для получения стека вызовов, где был выделен исходный объект.
Безопасность¶Security
bpo-26313: ssl.py _load_windows_store_certs завершается ошибкой, если хранилище сертификатов Windows пусто. Патч от Baji.
Библиотека¶Library
bpo-26569: Исправлены
pyclbr.readmodule()иpyclbr.readmodule_ex()для поддержки импорта пакетов.bpo-26499: Учтён остаток Content-Length в HTTPResponse.readline() и read1(). Основано на патче от Silent Ghost. Также документировано, что HTTPResponse теперь поддерживает эти методы.
bpo-25320: Обрабатываются сокеты в каталогах, которые сканирует unittest discovery. Патч от Victor van den Elzen.
bpo-16181: cookiejar.http2time() теперь возвращает None, если год больше datetime.MAXYEAR.
bpo-26513: Исправлено определение платформы Windows Server в модуле platform.
bpo-23718: Исправлен разбор времени на неделе 0 до 1 января. Исходный патч от Tamás Bence Gedai.
bpo-26323: Добавлены методы Mock.assert_called() и Mock.assert_called_once() в unittest.mock. Патч написан Amit Saha.
bpo-20589: Вызов Path.owner() и Path.group() в Windows теперь вызывает NotImplementedError вместо ImportError.
bpo-26177: Исправлен метод keys() для виджетов Canvas и Scrollbar.
bpo-15068: Устранена избыточная буферизация в fileinput. Параметр bufsize теперь устарел и игнорируется.
bpo-19475: Добавлен необязательный аргумент timespec в метод datetime.isoformat() для выбора точности временной компоненты.
bpo-2202: Исправлена ошибка UnboundLocalError в AbstractDigestAuthHandler.get_algorithm_impls. Исходный патч от Mathieu Dupuy.
bpo-26167: Минимизированы накладные расходы в copy.copy() и copy.deepcopy(). Оптимизировано копирование и глубокое копирование bytearray, NotImplemented, срезов, коротких списков, кортежей, словарей, множеств.
bpo-25718: Исправлены сериализация и копирование итератора accumulate() с total равным None.
bpo-26475: Исправлен вывод отладочной информации для регулярных выражений с флагом (?x).
bpo-26482: Разрешена сериализация рекурсивных деков.
bpo-26335: Сделать mmap.write() возвращающим количество записанных байт, как другие методы write. Патч от Jakub Stasiak.
bpo-26457: Исправлены методы subnets() в классах IP-сетей для случая, когда результирующая длина префикса равна максимальной. Основано на патче от Xiang Zhang.
bpo-26385: Удалять файл, если внутренний вызов open() в NamedTemporaryFile() завершается ошибкой. Патч от Silent Ghost.
bpo-26402: Исправлен клиент XML-RPC для повторной попытки при закрытии сервером постоянного соединения. Это было регрессией, связанной с новым исключением http.client.RemoteDisconnected в 3.5.0a4.
bpo-25913: Начальный
<~теперь необязателен в base64.a85decode() с adobe=True. Патч от Swati Jaiswal.bpo-26186: Удалена некорректная проверка типа в importlib.util.LazyLoader.
bpo-26367: importlib.__import__() вызывает ImportError, как builtins.__import__(), когда указан
level, но не указан соответствующий пакет.bpo-26309: В модуле «socketserver» запрос закрывается (закрывается подключённый сокет), когда verify_request() возвращает false. Патч от Aviv Palivoda.
bpo-23430: Изменение модуля socketserver – теперь перехватываются только исключения, наследуемые от Exception (а не BaseException). SystemExit и KeyboardInterrupt больше не вызывают метод handle_error() и теперь останавливают однопоточный сервер.
Безопасность¶Security
bpo-25939: В Windows хранилище сертификатов открывается только для чтения в ssl.enum_certificates.
Библиотека¶Library
bpo-25995: os.walk() больше не использует файловые дескрипторы пропорционально глубине дерева.
bpo-25994: Добавлены метод close() и поддержка протокола менеджера контекста для итератора os.scandir().
bpo-23992: multiprocessing: MapResult больше не завершается немедленно при исключении.
bpo-26243: Добавлена поддержка именованных аргументов для zlib.compress(). Исправление от Aviv Palivoda.
bpo-26117: Итератор os.scandir() теперь закрывает файловый дескриптор не только при завершении итерации, но и при ошибке.
bpo-25949: __dict__ для экземпляра OrderedDict теперь создаётся только при необходимости.
bpo-25911: Восстановлена поддержка путей в виде байтов в os.walk() в Windows.
bpo-26045: Добавлено предложение использовать UTF-8 в сообщении об ошибке при отправке строки не в Latin-1 через http.client.
bpo-26039: Добавлены zipfile.ZipInfo.from_file() и zipfile.ZipInfo.is_dir(). Исправление от Thomas Kluyver.
bpo-12923: Счётчик перенаправлений FancyURLopener сбрасывается даже в случае исключения. Основано на патчах Brian Brazil и Daniel Rocco.
bpo-25945: Исправлен сбой при десериализации объекта functools.partial с некорректным состоянием. Исправлена утечка при неудачном конструировании functools.partial. Атрибуты «args» и «keywords» объекта functools.partial теперь всегда имеют типы tuple и dict соответственно.
bpo-26202: copy.deepcopy() теперь корректно копирует объекты range() с неатомарными атрибутами.
bpo-23076: Path.glob() теперь вызывает ValueError, если вызван с некорректным шаблоном. Патч от Thomas Nyberg.
bpo-19883: Исправлены возможные целочисленные переполнения в zipimport.
bpo-26227: На Windows функции getnameinfo(), gethostbyaddr() и gethostbyname_ex() модуля socket теперь декодируют имя хоста из кодовой страницы ANSI, а не UTF-8.
bpo-26099: Модуль site теперь записывает ошибку в stderr, если модуль sitecustomize можно импортировать, но его выполнение вызывает ImportError. То же изменение для usercustomize.
bpo-26147: xmlrpc теперь работает со строками, которые невозможно закодировать с помощью используемой кодировки, отличной от UTF-8.
bpo-25935: Сборщик мусора теперь разрывает циклические ссылки с OrderedDict.
bpo-16620: Исправлен AttributeError в msilib.Directory.glob().
bpo-26013: Добавлена совместимость с повреждёнными сериализованными объектами протокола 2, созданными в старых версиях Python 3 (3.4.3 и ниже).
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: Удалены устаревшие API в модуле trace.
bpo-22138: Исправлено поведение mock.patch при патчинге дескрипторов. Восстанавливаются исходные значения после патчинга. Патч предоставлен Sean McCully.
bpo-25672: В модуле ssl включён режим SSL_MODE_RELEASE_BUFFERS, если это безопасно.
bpo-26012: Не обходить символические ссылки для шаблона
**в pathlib.Path.[r]glob().bpo-24120: Игнорировать PermissionError при обходе дерева с помощью pathlib.Path.[r]glob(). Патч от Ulrich Petri.
bpo-21815: В части данных imap-ответов теперь допускаются символы ], чтобы обрабатывать флаги с квадратными скобками, которые принимают и генерируют такие серверы, как gmail.
bpo-25447: fileinput теперь использует sys.stdin как есть, если у него нет атрибута buffer (восстановлена обратная совместимость).
bpo-25971: Оптимизировано создание Fractions из чисел с плавающей точкой – в 2 раза быстрее, а из Decimals – в 3 раза.
bpo-25802: Оставшиеся реализации importlib.abc.Loader.load_module() задокументированы как устаревшие.
bpo-25928: Добавлен метод Decimal.as_integer_ratio().
bpo-25447: Копирование объекта-обёртки lru_cache() теперь всегда работает независимо от типа обёрнутого объекта (возвращается исходный объект без изменений).
bpo-25768: Функции в compileall теперь возвращают логические значения вместо целых чисел; добавлены документация и тесты для возвращаемых значений.
bpo-24103: Исправлена возможная ошибка use-after-free в 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: Исправлена регрессия в количестве аргументов, которое принимает compileall при указании ‘-d’. Проверка количества аргументов полностью удалена, так как она всё равно никогда не работала корректно.
bpo-25764: В модуле подпроцесса сохраняется любое исключение, вызванное сбоем fork() при использовании preexec_fn.
bpo-25771: Уточнено сообщение об исключении в importlib.util.resolve_name(), когда аргумент package не указан, но необходим.
bpo-6478: Кэш регулярных выражений _strptime теперь сбрасывается после смены часового пояса с помощью time.tzset().
bpo-14285: При выполнении пакета с опцией «python -m package», если инициализация пакета завершается ошибкой, теперь выводится корректная трассировка. Модуль «runpy» теперь позволяет исключениям из инициализации пакета передаваться обратно вызывающему коду, а не вызывает ImportError.
bpo-19771: Также в runpy и опции «-m» убрано нерелевантное сообщение «… is a package and cannot be directly executed», если пакет не удалось даже инициализировать (например, из-за проблем с файлом
*.pyc).bpo-25177: Исправлена проблема со средним арифметическим очень маленьких и очень больших чисел. Побочный эффект: statistics.mean и statistics.variance теперь работают значительно быстрее.
bpo-25718: Исправлено копирование объекта с состоянием, булево значение которого равно False.
bpo-10131: Исправлено глубокое копирование документов minidom. Основано на патче от Marian Ganisin.
bpo-7990: dir() для ElementTree.Element теперь выводит свойства: tag, text, tail и attrib. Исправление от Santoso Wijaya.
bpo-25725: Исправлена утечка ссылок в pickle.loads() при десериализации некорректных данных, включая кортежные инструкции.
bpo-25663: В комплитере Readline избегать дублирования глобальных имён, а также искать сначала в глобальном пространстве имён, а затем во встроенном.
bpo-25688: Исправлена утечка файла в ElementTree.iterparse() при возникновении ошибки.
bpo-23914: Исправлен SystemError, возникающий при десериализации битых pickle-данных.
bpo-25691: Исправлен сбой при удалении атрибутов ElementTree.Element.
bpo-25624: ZipFile теперь всегда записывает заголовок ZIP_STORED для записей каталогов. Исправление от Dingyuan Wang.
bpo-25626: Изменены три функции zlib, чтобы они принимали размеры, помещающиеся в Py_ssize_t, но внутренне ограничивают эти размеры до UINT_MAX. Это устраняет регрессию в 3.5, где GzipFile.read() не мог читать фрагменты размером более 2 или 4 ГиБ. Изменение затрагивает параметр max_length функции zlib.Decompress.decompress(), параметр bufsize функции zlib.decompress() и параметр length функции zlib.Decompress.flush().
bpo-25583: Избегает некорректных ошибок, вызываемых os.makedirs(exist_ok=True), когда операционная система отдаёт приоритет ошибкам типа EACCES над EEXIST.
bpo-25593: Изменена семантика EventLoop.stop() в asyncio.
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 теперь getattr() вызывается только один раз для каждого атрибута. Также завершаются имена атрибутов, таких как свойства и слоты, которые перечислены dir(), но ещё не созданы в экземпляре.
bpo-25498: Исправлен сбой при сборке мусора объектов ctypes, созданных обёрткой memoryview. Это была регрессия, внесённая в 3.5a1. Основано на патче от Eryksun.
bpo-25584: Добавлено «escape» в список __all__ в модуле glob.
bpo-25584: Исправлена рекурсивная glob() с шаблонами, начинающимися с
**.bpo-25446: Исправлена регрессия в поддержке AUTH LOGIN в smtplib.
bpo-18010: Исправлена функция поиска модулей веб-сервера pydoc для обработки исключений при импорте пакетов.
bpo-25554: Устранены циклические ссылки в разборе регулярных выражений.
bpo-18973: Интерфейс командной строки модуля calendar теперь использует argparse вместо optparse.
bpo-25510: fileinput.FileInput.readline() теперь возвращает b’’ вместо ‘’ в конце, если FileInput был открыт в бинарном режиме. Патч от Ryosuke Ito.
bpo-25503: Исправлен inspect.getdoc() для унаследованных докстрингов свойств. Оригинальный патч от John Mark Vandenberg.
bpo-25515: Всегда используется os.urandom как источник случайности в uuid.uuid4.
bpo-21827: Исправлен textwrap.dedent() для случая, когда наибольший общий пробельный символ является подстрокой наименьшего ведущего пробела. Основано на патче от Robert Li.
bpo-25447: Объекты-обёртки lru_cache() теперь можно копировать и сериализовать (возвращая исходный объект без изменений).
bpo-25390: typing: не падать при Union[str, Pattern].
bpo-25441: asyncio: вызывать ошибку из drain(), когда сокет закрыт.
bpo-25410: Проведена очистка и исправлены мелкие ошибки в C-реализации OrderedDict.
bpo-25411: Улучшена поддержка Unicode в SMTPHandler за счёт более эффективного использования пакета email. Спасибо пользователю simon04 за патч.
Перемещён модуль imp из PendingDeprecationWarning в DeprecationWarning.
bpo-25407: Удалены упоминания о том, что модуль formatter будет удалён в Python 3.6.
bpo-25406: Исправлена ошибка в C-реализации OrderedDict.move_to_end(), которая вызывала segmentation fault или зависание при итерации после перемещения нескольких элементов в начало упорядоченного словаря.
bpo-25382: pickletools.dis() теперь выводит неявный индекс memo для кода операции MEMOIZE.
bpo-25357: Добавлен необязательный параметр newline в binascii.b2a_base64(). base64.b64encode() использует его, чтобы избежать копирования памяти.
bpo-24164: Объекты, которые требуют вызова
__new__с именованными аргументами, теперь можно сериализовать с помощью протоколов pickle старше версии 4.bpo-25364: zipfile теперь работает в сборках с отключёнными потоками.
bpo-25328: SMTPChannel из smtpd теперь корректно вызывает ValueError, если и decode_data, и enable_SMTPUTF8 установлены в true.
bpo-16099: RobotFileParser теперь поддерживает расширения Crawl-delay и Request-rate. Исправление от Nikolay Bogoychev.
bpo-25316: distutils вызывает OSError вместо DistutilsPlatformError, если MSVC не установлен.
bpo-25380: Исправлен протокол для кода операции STACK_GLOBAL в pickletools.opcodes.
bpo-23972: Обновлён метод создания датаграммных сокетов в asyncio – теперь перед привязкой сокета можно задать опции reuseport и reuseaddr. По аналогии с существующим методом create_server опция reuseaddr для датаграммных сокетов по умолчанию равна True, если ОС – posix (за исключением платформы Cygwin). Патч от Chris Laws.
bpo-25304: Добавлена функция asyncio.run_coroutine_threadsafe(). Она позволяет передать корутину в цикл событий из другого потока, возвращая объект concurrent.futures.Future. Автор: Vincent Michel.
bpo-25232: Исправлен CGIRequestHandler: теперь строка запроса отделяется от URL по первому знаку вопроса (?), а не по последнему. Патч от Xiang Zhang.
bpo-24657: Предотвращено схлопывание слешей в части запроса URL в CGIRequestHandler, как если бы это был путь. Патч от 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: Улучшен __repr__ для argparse.Namespace() в случае недопустимых идентификаторов. Патч от Matthias Bussonnier.
bpo-23426: run_setup был сломан в distutils. Патч от 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: По умолчанию отключён уязвимый протокол SSLv3 при создании ssl.SSLContext.
bpo-25569: Исправлена утечка памяти в SSLSocket.getpeercert().
bpo-25471: Сокеты, возвращаемые accept(), не должны считаться неблокирующими.
bpo-25319: При повторной инициализации threading.Event базовое условие должно использовать обычную блокировку, а не рекурсивную.
Пропускать getaddrinfo, если хост уже разрешён. Исправление от A. Jesse Jiryu Davis.
bpo-26050: Добавлен метод asyncio.StreamReader.readuntil(). Исправление от Марка Коренберга.
bpo-25924: Избегать излишней сериализации вызовов getaddrinfo(3) на OS X версии 10.5 и выше. Первоначальное исправление от A. Jesse Jiryu Davis.
bpo-26406: Избегать излишней сериализации вызовов getaddrinfo(3) на текущих версиях OpenBSD и NetBSD. Исправление от 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, которое мешало печати. Расширен htest IOBinding для включения всех основных функций IOBinding.
bpo-25905: Отменено нежелательное преобразование ' в ’ (правый одиночный кавычка) в README.txt, открывать этот файл и NEWS.txt с кодировкой ‘ascii’. Перекодировать CREDITS.txt в utf-8 и открывать его с ‘utf-8’.
bpo-15348: Останавливать движок отладчика (обычно в пользовательском процессе) перед закрытием окна отладчика (работающего в процессе IDLE). Это предотвращает RuntimeErrors, которые перехватывались и игнорировались.
bpo-24455: Предотвратить зависание IDLE при: a) закрытии оболочки при активном отладчике (15347); b) закрытии отладчика кнопкой [X] (15348); и c) активации отладчика, когда он уже активен (24455). Патч от Mark Roseman делает это двумя изменениями. 1. Приостанавливать и возобновлять метод gui.interaction с помощью механизма tcl vwait, предназначенного для этой цели (вместо root.mainloop & .quit). 2. В gui.run позволить любому существующему взаимодействию сначала завершиться.
Заменить ‘The program’ на ‘Your program’ в сообщении IDLE ‘kill program?’ чтобы было понятнее, что речь идёт о текущей выполняемой пользовательской программе, а не о самом IDLE.
bpo-24750: Улучшен внешний вид строки состояния окна редактора IDLE. Патч от Mark Roseman.
bpo-25313: Изменена обработка новых встроенных цветовых тем текста для лучшего решения проблемы совместимости, вызванной добавлением IDLE Dark. Последовательно использовать пересмотренный idleConf.CurrentTheme везде в idlelib.
bpo-24782: Конфигурация расширений теперь является вкладкой в диалоге настроек IDLE, а не отдельным диалогом. Прежние вкладки теперь представлены отсортированным списком. Патч от Mark Roseman.
bpo-22726: Повторно активировать кнопку справки в диалоге конфигурации с некоторым содержимым о других кнопках и новой теме IDLE Dark.
bpo-24820: У IDLE теперь есть встроенная цветовая тема текста ‘IDLE Dark’. Она более или менее инвертированная IDLE Classic, с тёмно-синим фоном. Строки, комментарии, ключевые слова, … по-прежнему зелёные, красные, оранжевые, … . Чтобы использовать её с IDLE, выпущенными до ноября 2015, нажмите кнопку ‘Save as New Custom Theme’ и введите новое имя, например ‘Custom Dark’. Пользовательская тема будет работать с любым релизом IDLE и может быть изменена.
bpo-25224: README.txt теперь является индексом idlelib для разработчиков IDLE и любопытных пользователей. Предыдущее пользовательское содержание теперь находится в главе документации IDLE. ‘IDLE’ теперь означает ‘Integrated Development and Learning Environment’.
bpo-24820: Пользователи теперь могут задавать цвета точек останова в Settings -> Custom Highlighting. Оригинальный патч от Mark Roseman.
bpo-24972: Фон неактивного выделения теперь соответствует фону активного выделения, как настроено пользователем, на всех системах. Найденные элементы теперь всегда выделяются на Windows. Первоначальный патч от Mark Roseman.
bpo-24570: Idle: сделать подсказки и окна автодополнения видимыми на Mac, затронутых регрессией tk. Первоначальный патч от Mark Roseman.
bpo-24988: Контекстные меню ScrolledList в IDLE (используемые в отладчике) теперь работают на Mac Aqua. Патч от Mark Roseman.
bpo-24801: Сделать правый клик для контекстного меню работающим на Mac Aqua. Патч от Mark Roseman.
bpo-25173: Связать диалоговые окна tkinter с конкретным виджетом. Для Mac OSX сделать их «листом». Патч от Mark Roseman.
bpo-25198: Улучшено начальное средство просмотра HTML, теперь используемое для справки IDLE. Правильно выравнивать моноширинный текст (патч от Mark Roseman). Дать фрагменту кода очень похожий на Sphinx светло-голубовато-серый фон. Повторно использовать начальные ширину и высоту, заданные пользователями для оболочки и редактора. При использовании меню оглавления (TOC) помещать заголовок раздела в верхнюю часть экрана.
bpo-25225: Сократить и переписать раздел документации IDLE о цветах текста.
bpo-21995: поясняются некоторые различия между IDLE и консольным Python.
bpo-22820: разъясняется необходимость print при запуске файла из редактора Idle.
bpo-25224: документация: дополнен список возможностей Idle и раздел о работе без подпроцесса.
bpo-25219: обновлена документация по параметрам командной строки Idle. Некоторые параметры отсутствовали, а примечания были неверны.
bpo-24861: большая часть idlelib является приватной и может измениться. Для запуска Idle используйте idleib.idle.*. См. idlelib.__init__.__doc__.
bpo-25199: Idle: добавлены синхронизирующие комментарии для будущих сопровождающих.
bpo-16893: Замена help.txt на help.html для отображения документации Idle. Новый idlelib/help.html – это обработанный rstripped Doc/build/html/library/idle.html. Он выглядит лучше, чем help.txt, и будет лучше документировать Idle в релизе. Просмотрщик tkinter HTML, работающий с этим файлом, написан Роуз Розман. Теперь неиспользуемые класс EditorWindow.HelpDialog и файл helt.txt объявлены устаревшими.
bpo-24199: объявлен устаревшим неиспользуемый idlelib.idlever; возможно, будет удалён в 3.6.
bpo-24790: удалён лишний код (который также создавал конфликты между ветками 2 и 3).
Документация¶Documentation
bpo-26736: Для внешних ссылок в документации по возможности используется HTTPS.
bpo-6953: Переработана документация модуля Readline: сгруппированы связанные функции, добавлены подробности, например, какие базовые функции и переменные Readline задействованы.
bpo-23606: В документацию ctypes добавлено примечание о cdll.msvcrt.
bpo-24952: уточнён аргумент размера по умолчанию для stack_size() в модулях «threading» и «_thread». Патч от Mattip.
bpo-26014: Обновлена документация по упаковке для 3.x: * ссылки «See also» на новую документацию теперь добавлены на страницы устаревшей документации * обновлены ссылки на документацию setuptools
Тесты¶Tests
bpo-21916: Добавлены тесты для модуля turtle. Патч от ingrid, Gregory Loyse и Jelle Zijlstra.
bpo-26295: При использовании «python3 -m test –testdir=TESTDIR» regrtest не добавляет префикс «test.» к именам тестовых модулей.
bpo-26523: Пул потоков multiprocessing (multiprocessing.dummy.Pool) не имел тестов.
bpo-26015: Добавлены новые тесты для сериализации (pickling) итераторов изменяемых последовательностей.
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 ...теперь также проверяет утечку файловых дескрипторов. Патч написан Ричардом Оудкерком.bpo-25260: Исправлен
python -m test --coverageв Windows. Удалён список игнорируемых каталогов.PCbuild\rt.batтеперь принимает неограниченное количество аргументов для передачи в regrtest.py. Ранее существовало ограничение в 9.bpo-26583: Пропускать test_timestamp_overflow в test_import, если запись файлов байт-кода невозможна.
Сборка¶Build
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, включающий оптимизацию во время компоновки (LTO) при сборке с make profile-opt. Известно, что некоторые компиляторы и инструментальные цепочки могут выдавать нестабильный код при использовании LTO – перед использованием рекомендуется тщательно всё протестировать. Эта оптимизация может дать ускорение на несколько процентов по сравнению с использованием одного profile-opt.
bpo-26624: Добавлена проверка версии ucrtbase[d].dll с предупреждением для старых версий.
bpo-17603: Устранена ошибка о несуществующем файле fileblocks.o за счёт использования низкоуровневой проверки st_blocks в struct stat.
bpo-26079: Исправлена папка сборки для tix-8.4.3.6. Патч от Bjoern Thiel.
bpo-26465: Обновлены сборки Windows для использования OpenSSL 1.0.2g.
bpo-25348: Добавлены аргументы
--pgoи--pgo-jobвPCbuild\build.batдля сборки с профильно-ориентированной оптимизацией (PGO). Старый скриптPCbuild\build_pgo.batудалён.bpo-25827: Добавлена поддержка сборки с ICC в
configure, включая новый флаг--with-icc.bpo-25696: Исправлена установка Python в UNIX при использовании make -j9.
bpo-24986: теперь Python можно собрать в Windows без ошибок, даже если внешние библиотеки недоступны.
bpo-24421: Компиляция Modules/_math.c выполняется один раз, до сборки расширений. Ранее он мог некорректно скомпилироваться, если сборки math и cmath выполнялись одновременно.
bpo-26465: Обновлён установщик для OS X 10.5+ (только 32-бит) для сборки и линковки с OpenSSL 1.0.2g.
bpo-26268: Обновлены сборки Windows для использования OpenSSL 1.0.2f.
bpo-25136: Поддержка новых текстовых stub-библиотек SDK Apple Xcode 7.
bpo-24324: Не включать предупреждения о недостижимом коде при использовании gcc, так как эта опция некорректно работала в старых версиях gcc и была молча удалена, начиная с gcc-4.5.
Windows¶
bpo-27053: Обновление make_zip.py для корректной генерации ZIP-файла библиотеки.
bpo-26268: Обновлён скрипт prepare_ssl.py для работы с релизами OpenSSL, которые не включают содержимое каталога include (то есть, версии 1.0.2e и новее).
bpo-26071: созданные бинарники bdist_wininst не запускаются и не находят 32-битный Python
bpo-26073: обновление списка магических чисел в загрузчике
bpo-26065: исключает venv из библиотеки при генерации встраиваемого дистрибутива.
bpo-25022: Удалён устаревший каталог PC/example_nt/.
Инструменты/Демонстрации¶Tools/Demos
bpo-26799: исправление python-gdb.py: не получать типы C один раз при загрузке кода Python, а получать их по запросу. Типы C могут измениться, если python-gdb.py загружается до исполняемого файла Python. Патч написан 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¶
bpo-26312: Теперь при всех ошибках программирования, связанных с использованием PyArg_ParseTupleAndKeywords(), возбуждается SystemError. Ранее в некоторых подобных случаях возбуждалось RuntimeError.
bpo-26198: ValueError теперь возбуждается вместо TypeError при переполнении буфера при разборе строк формата “es#” и “et#”. SystemError теперь возбуждается вместо TypeError при программной ошибке в разборе строки формата.
Python 3.5.5, финальная версия¶Python 3.5.5 final
Дата выпуска: 2018-02-04
Новых изменений в версии 3.5.5 нет.
Python 3.5.5, кандидат в релизы 1¶Python 3.5.5 release candidate 1
Дата выпуска: 2018-01-23
Безопасность¶Security
bpo-32551: Изменение инициализации
sys.path[0]для bpo-29139 вызвало регрессию, выявив несогласованность в том, как инициализируется sys.path при выполнении__main__из zip-файла, каталога или другого места импорта. Это считается потенциальной проблемой безопасности, так как может привести к неожиданной загрузке кода привилегированными процессами из каталогов, контролируемых пользователем, в ситуациях, где раньше этого не происходило. Интерпретатор теперь последовательно избегает добавления родительского каталога места импорта вsys.pathи гарантирует, что никакие другие записиsys.pathнепреднамеренно не изменяются при вставке места импорта, указанного в командной строке. (Изначально сообщено как bpo-29723 для Python 3.6rc1, но в то время было упущено, что предстоящий выпуск Python 3.5.4 также будет затронут)bpo-30657: Исправление возможного целочисленного переполнения в PyBytes_DecodeEscape, CVE-2017-1000158. Оригинальный патч от Jay Bosamiya; перенесён на Python 3 Miro Hrončok.
bpo-30947: Встроенная копия libexpat обновлена с версии 2.2.1 до 2.2.3 для получения исправлений безопасности.
Ядро и встроенные модули¶Core and Builtins
bpo-31095: Исправлен потенциальный сбой во время сборки мусора, вызванный
tp_dealloc, который не вызываетPyObject_GC_UnTrack().
Библиотека¶Library
bpo-32072: Исправлены проблемы с двоичными plist-файлами: исправлено сохранение массива байтов. Идентичные объекты будут сохраняться только один раз. Равные ссылки будут загружаться как идентичные объекты. Добавлена поддержка сохранения и загрузки рекурсивных структур данных.
bpo-31170: expat: обновление libexpat с 2.2.3 до 2.2.4. Исправлено копирование частичных символов для ввода UTF-8 (ошибка libexpat 115): https://github.com/libexpat/libexpat/issues/115
Python 3.5.4, финальная версия¶Python 3.5.4 final
Дата выпуска: 2017-08-07
Библиотека¶Library
bpo-30119: ftplib.FTP.putline() теперь выбрасывает ValueError для команд, содержащих CR или LF. Исправление от Dong-hee Na.
Python 3.5.4, кандидат в релизы 1¶Python 3.5.4 release candidate 1
Дата выпуска: 2017-07-23
Безопасность¶Security
bpo-30730: Предотвращено внедрение переменных окружения в подпроцессе на Windows. Предотвращена передача других переменных окружения и аргументов командной строки.
bpo-30694: Обновление копии expat с версии 2.2.0 до 2.2.1 для исправления множества уязвимостей, включая: CVE-2017-9233 (бесконечный цикл отказа в обслуживании внешних сущностей), CVE-2016-9063 (целочисленное переполнение, повторное исправление), CVE-2016-0718 (исправление регрессий, вызванных исправлением CVE-2016-0718 в версии 2.2.0) и CVE-2012-0876 (противодействие хеш-флудингу с помощью SipHash). Примечание: уязвимость CVE-2016-5300 (использование специфичных для ОС источников энтропии, таких как getrandom) не затрагивает Python, поскольку Python уже получает энтропию от ОС для установки секрета expat через
XML_SetHashSalt().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/.
Ядро и встроенные модули¶Core and Builtins
bpo-30876: Относительный импорт из незагруженного пакета теперь повторно импортирует пакет вместо того, чтобы завершаться с SystemError. Относительный импорт из не-пакета теперь завершается с ImportError, а не SystemError.
bpo-30765: Избегание блокировки в pthread_mutex_lock(), когда PyThread_acquire_lock() запрашивается без блокировки.
bpo-27945: Исправлены различные ошибки сегментации со словарём при изменении входных коллекций во время поиска, вставки или сравнения. Основано на исправлениях от Duane Griffin и Tim Mitchell.
bpo-25794: Исправлены type.__setattr__() и type.__delattr__() для неинтернированных имён атрибутов. Основано на патче от Eryk Sun.
bpo-29935: Исправлены сообщения об ошибках в методе index() кортежа, списка и deque при передаче индексов неверного типа.
bpo-28876:
bool(range)работает, даже еслиlen(range)вызываетOverflowError.bpo-29600: Исправлена обёртка возвращаемых значений корутины в StopIteration.
bpo-29537: Восстановлена совместимость во время выполнения с байткод-файлами, созданными CPython 3.5.0–3.5.2, и изменён цикл выполнения, чтобы избежать проблем, которые могли быть вызваны некорректным вариантом опкода BUILD_MAP_UNPACK_WITH_CALL, который они могут содержать. Патч от Petr Viktorin, Serhiy Storchaka и Nick Coghlan.
bpo-28598: Поддержка вызова __rmod__ для подклассов str перед str.__mod__. Патч от Martijn Pieters.
bpo-29602: Исправлена некорректная обработка знаковых нулей в конструкторе complex для подклассов complex и для входных данных, имеющих метод __complex__. Патч от Serhiy Storchaka.
bpo-29347: Исправлено возможное разыменование неопределённых указателей при создании объектов weakref.
bpo-29438: Исправлена проблема use-after-free (использование после освобождения) в словаре совместного использования ключей (key sharing dict).
bpo-29319: Предотвращение перезаписи sys.path[0] функцией RunMainFromImporter.
bpo-29337: Исправлено возможное BytesWarning при сравнении объектов кода. Предупреждения могли выдаваться во время компиляции.
bpo-29478: Если указано max_line_length=None при использовании политики Compat32, этот параметр больше не игнорируется. Патч от Mircea Cosbuc.
Библиотека¶Library
bpo-29403: Исправлена автоматическая спецификация (autospec)
unittest.mock, чтобы она не выдавала ошибку на методах, привязанных к встроенным функциям. Патч от Aaron Gallagher.bpo-30961: Исправлено уменьшение счётчика заимствованной ссылки (borrowed reference) в tracemalloc.
bpo-30886: Исправлена multiprocessing.Queue.join_thread(): теперь она ждёт завершения потока, даже если поток был запущен тем же процессом, который создал очередь.
bpo-29854: Исправлено падение (segfault) в readline при использовании опции history-size библиотеки readline. Патч от Nir Soffer.
bpo-30807: signal.setitimer() может отключать таймер при передаче очень малого значения. Очень малые значения (например, 1e-6) являются допустимыми ненулевыми значениями для setitimer(), который, как указано, принимает интервалы с микросекундным разрешением. Однако на некоторых платформах наша процедура преобразования могла преобразовать 1e-6 в нулевой интервал, тем самым отключая таймер вместо его (пере)планирования.
bpo-30441: Исправлена ошибка при изменении os.environ во время итерации по нему.
bpo-30532: Исправлен парсер значений заголовков email, который в определённых случаях удалял сворачиваемые пробельные символы (folding white space).
bpo-29169: Обновление zlib до версии 1.2.11.
bpo-30879: os.listdir() и os.scandir() теперь возвращают имена в виде байтов, если были вызваны с аргументом, подобным байтам (bytes-like).
bpo-30746: Запрещён символ ‘=’ в именах переменных окружения в
os.putenv()иos.spawn*().bpo-29755: Исправлено семейство функций lgettext() в модуле gettext. Теперь они всегда возвращают байты.
bpo-30645: Исправлено вычисление пути в imp.load_package() для случаев, когда пакет распространяется только в виде байткода. Патч от Alexandru Ardelean.
bpo-23890: unittest.TestCase.assertRaises() теперь вручную разрывает циклические ссылки, чтобы объекты не оставались в памяти дольше, чем ожидается.
bpo-30149: inspect.signature() теперь поддерживает вызываемые объекты с параметрами переменного числа аргументов, обёрнутыми с помощью partialmethod. Исправление от Dong-hee Na.
bpo-29931: Исправлена проверка сравнения для объектов ipaddress.ip_interface. Патч от Sanjay Sundaresan.
bpo-24484: Избежание состояния гонки (race condition) при очистке в multiprocessing.
bpo-28994: Трассировка (traceback) больше не отображается для SystemExit, возникшего в колбэке, зарегистрированном через atexit.
bpo-30508: Не логировать исключения при вызове метода “cancel()” задачи/future.
bpo-28556: Обновления модуля typing: добавлен generic AsyncContextManager, добавлена поддержка ContextManager для всех версий. Оригинальные PR от Jelle Zijlstra и Ivan Levkivskyi.
bpo-29870: Исправлена утечка SSL-сокетов при прерывании соединения в реализации asyncio/ssl. Патч от Michaël Sghaïer.
bpo-29743: Закрытие транспорта во время рукопожатия (handshake) приводит к утечке открытого сокета. Патч от Nikolay Kim.
bpo-27585: Исправлена отмена ожидания (waiter) в asyncio.Lock. Патч от Mathieu Sornay.
bpo-30418: На Windows subprocess.Popen.communicate() теперь также игнорирует EINVAL на stdin.write(), если дочерний процесс ещё работает, но уже закрыл канал.
bpo-30378: Исправлена проблема, из-за которой logging.handlers.SysLogHandler не мог обрабатывать IPv6-адреса.
bpo-29960: Сохранение состояния генератора, когда _random.Random.setstate() вызывает исключение. Патч от Bryan Olson.
bpo-30414: Фоновый поток _feed в multiprocessing.Queue не выходит из главного цикла при исключении.
bpo-30003: Исправлена обработка escape-символов в кодировке HZ. На основе патча от Ma Lin.
bpo-30301: Исправлен AttributeError при использовании SimpleQueue.empty() с методами запуска spawn и forkserver.
bpo-30329: imaplib и poplib теперь перехватывают ошибку Windows WSAEINVAL (код 10022) на shutdown(SHUT_RDWR): была предпринята недопустимая операция. Эта ошибка иногда возникает на SSL-соединениях.
bpo-30375: Предупреждения, выдаваемые при компиляции регулярного выражения, теперь всегда указывают на строку в коде пользователя. Ранее они могли указывать внутрь модуля re, если возникали из групп или условных конструкций.
bpo-30048: Исправлена ситуация, когда
Task.cancel()мог игнорироваться, если задача выполняет корутину и корутина вернула управление без дополнительныхawait.bpo-29990: Исправлена проверка диапазона в декодере GB18030. Исходный патч от Ma Lin.
bpo-26293: Изменение вызвано поломкой zipfile. (См. также: bpo-29094)
bpo-30243: Удалены методы __init__ сканера и кодировщика _json. Их неправильное использование могло приводить к утечкам памяти или сбоям. Теперь объекты сканера и кодировщика полностью инициализируются в методах __new__.
bpo-30185: Избежание трассировок KeyboardInterrupt во вспомогательном процессе forkserver при получении Ctrl-C.
bpo-28556: Различные обновления модуля typing: добавлен тип typing.NoReturn, используется WrapperDescriptorType, мелкие исправления ошибок. Оригинальные PR от Jim Fasarakis-Hilliard и Ivan Levkivskyi.
bpo-30205: Исправлен getsockname() для непривязанных AF_UNIX-сокетов на Linux.
bpo-30070: Исправлены утечки и сбои при обработке ошибок в модуле parser.
bpo-30061: Исправлены сбои в методах IOBase __next__() и readlines(), когда readline() или __next__() соответственно возвращают объект, не поддерживающий определение размера. Исправлены возможные другие ошибки, вызванные отсутствием проверки результатов PyObject_Size(), PySequence_Size() или PyMapping_Size().
bpo-30068: _io._IOBase.readlines теперь сначала проверяет, закрыт ли файл, если указана подсказка (hint).
bpo-29694: Исправлено состояние гонки в pathlib mkdir с флагом parents=True. Патч от Armin Rigo.
bpo-29692: Исправлено произвольное разрывание цепочки исключений RuntimeError в contextlib.contextmanager. Патч от Siddharth Velankar.
bpo-29998: Pickling и копирование ImportError теперь сохраняют атрибуты name и path.
bpo-29942: Исправлен сбой в itertools.chain.from_iterable при обнаружении длинных последовательностей пустых итераций.
bpo-27863: Исправлено множество сбоев в ElementTree, вызванных состояниями гонки и неверными типами.
bpo-28699: Исправлена ошибка в пулах multiprocessing.pool: если исключение возникает в самом начале итерации, оно может быть проглочено или привести к зависанию программы. Патч от Davin Potts и Xiang Zhang.
bpo-25803: Избежание некорректных ошибок, вызываемых Path.mkdir(exist_ok=True), когда ОС отдаёт приоритет ошибкам EACCES над EEXIST.
bpo-29861: Освобождение ссылок на задачи, их аргументы и результаты сразу после завершения в multiprocessing.Pool.
bpo-29884: faulthandler: восстановление старого sigaltstack при завершении. Патч от Christophe Zeitouny.
bpo-25455: Исправлены сбои в repr рекурсивных буферизированных файлоподобных объектов.
bpo-29800: Исправлены сбои в partial.__repr__, если ключи partial.keywords не являются строками. Патч от Michael Seifert.
bpo-29742: get_extra_info() вызывает исключение, если вызывается на закрытом ssl-транспорте. Патч от Nikolay Kim.
bpo-8256: Исправлена возможная ошибка или сбой input(), если атрибуты 'encoding' или 'errors' sys.stdin или sys.stdout не установлены или не являются строками.
bpo-28298: Исправлена ошибка, из-за которой массивы ‘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: Изменение словаря kwarg, переданного в functools.partial(), больше не влияет на объект partial после его создания.
bpo-28556: Различные обновления модуля typing: typing.Counter, typing.ChainMap, улучшенное кэширование ABC и другое. Оригинальные PR от Jelle Zijlstra, Ivan Levkivskyi, Manuel Krebber и Łukasz Langa.
bpo-29100: Исправлена регрессия в datetime.fromtimestamp(), появившаяся в Python 3.6.0: проверка минимального и максимального годов.
bpo-29519: Исправлено появление исключений в weakref при завершении работы интерпретатора при редком сочетании multiprocessing и пользовательских кодеков.
bpo-29416: Предотвращение бесконечного цикла в pathlib.Path.mkdir
bpo-29444: Исправлен выход за границы буфера в методе group() объекта совпадения. На основе патча от WGH.
bpo-29335: Исправлен subprocess.Popen.wait(), когда дочерний процесс завершился в состоянии остановлен, а не завершён (например, под ptrace).
bpo-29290: Исправлена регрессия в argparse, из-за которой сообщения помощи переносились на неразрывных пробелах.
bpo-28735: Исправлено сравнение mock.MagicMock с mock.ANY.
bpo-29011: Исправлено важное упущение: добавлен Deque в модуль typing.
bpo-29219: Исправлена бесконечная рекурсия в repr неинициализированных экземпляров ctypes.CDLL.
bpo-28969: Исправлено состояние гонки в реализации C для functools.lru_cache. KeyError мог возникать, когда кэшированная функция с полным кэшем одновременно вызывалась из разных потоков с одинаковыми некэшированными аргументами.
bpo-29142: В urllib.request суффиксы в переменной окружения no_proxy с ведущими точками снова могут соответствовать связанным именам хостов (например, .b.c соответствует a.b.c). Исправление от Milan Oberkirch.
Документация¶Documentation
bpo-30176: Добавлены отсутствующие константы, связанные с атрибутами, в документацию curses.
bpo-26985: Добавлена отсутствующая информация об объекте кода в документацию inspect.
bpo-28929: Добавлена ссылка на исходный файл документации на GitHub.
bpo-25008: Документировать smtpd.py как фактически устаревший и добавить указатель на aiosmtpd, стороннюю замену на основе asyncio.
bpo-26355: Добавлена каноническая ссылка в заголовке каждой страницы на соответствующую основную версию документации. Исправление от Matthias Bussonnier.
bpo-29349: Исправлен синтаксис Python 2 в коде для сборки документации.
Тесты¶Tests
bpo-30822: Исправлен парсер командной строки regrtest для возможности передачи -u extralargefile для запуска test_zipfile64.
bpo-30383: regrtest: улучшен regrtest и перенесены функции из ветки master. Добавлены опции: –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: Пропуск test_asyncore и test_eintr при сбоях poll на macOS. Пропуск некоторых тестов select.poll при работе на macOS из-за нерешённых проблем с системной функцией poll на некоторых версиях macOS.
bpo-30197: Улучшены функции swap_attr() и swap_item() в модуле test.support. Теперь они работают, когда удаляется заменённый атрибут или элемент внутри оператора with. Старое значение атрибута или элемента (или None, если его не существует) теперь будет присваиваться цели предложения "as", если оно есть.
bpo-29571: чтобы соответствовать поведению флага
re.LOCALE, test_re.test_locale_flag теперь используетlocale.getpreferredencoding(False)для определения кодировки-кандидата для тестового регулярного выражения (что позволяет корректно пропускать тест, когда кодировка локали по умолчанию является многобайтовой).
Сборка¶Build
bpo-29243: Предотвращает ненужную пересборку Python во время
make test,make installи некоторых других целей make при настройке с--enable-optimizations.bpo-23404: Больше не выполняется повторная генерация сгенерированных файлов на основе времени изменения файла: теперь это действие явное. Замените
make touchнаmake regen-all.bpo-29643: Исправлено:
--enable-optimizationне работало.
Windows¶
C API¶
bpo-27867: Функция PySlice_GetIndicesEx() заменяется макросом, если Py_LIMITED_API установлен в значение от 0x03050400 до 0x03060000 (не включая) или 0x03060100 и выше.
bpo-29083: Исправлено объявление некоторых функций публичного API. PyArg_VaParse() и PyArg_VaParseTupleAndKeywords() были недоступны в ограниченном API. PyArg_ValidateKeywordArguments(), PyArg_UnpackTuple() и Py_BuildValue() были недоступны в ограниченном API версии < 3.3, когда определён PY_SSIZE_T_CLEAN.
Python 3.5.3 финальная¶Python 3.5.3 final
Дата выпуска: 2017-01-17
Между 3.5.3rc1 и финальной версией 3.5.3 изменений кода не было.
Python 3.5.3 кандидат в релизы 1¶Python 3.5.3 release candidate 1
Дата выпуска: 2017-01-02
Ядро и встроенные модули¶Core and Builtins
bpo-29073: Форматирование bytearray больше не обрезается на первом нулевом байте.
bpo-28932: Не включать <sys/random.h>, если его не существует.
bpo-28147: Исправление утечки памяти в split-table словарях: setattr() не должен преобразовывать объединённую таблицу в раздельную.
bpo-25677: Исправление позиционирования каретки синтаксической ошибки для блоков с отступами. Основано на патче Майкла Лейзелла.
bpo-29000: Исправлено форматирование байтов восьмеричных чисел с нулевым заполнением в альтернативной форме.
bpo-28512: Исправлена установка атрибута offset у SyntaxError функциями PyErr_SyntaxLocationEx() и PyErr_SyntaxLocationObject().
bpo-28991: functools.lru_cache() была подвержена трудноуловимой ошибке реентерабельности, вызванной «обезьяньим» патчем функции len().
bpo-28648: Исправлен сбой в Py_DecodeLocale() в отладочной сборке на Mac OS X при декодировании астральных символов. Патч от Xiang Zhang.
bpo-19398: Лишний слеш больше не добавляется к компонентам sys.path в случае пустых компонентов PYTHONPATH во время компиляции.
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 теперь проверяет, что шаг (step) не равен 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: Запасной вариант – чтение устройства /dev/urandom, если системный вызов getrandom() завершается с EPERM, например, при блокировке SECCOMP.
bpo-28131: Исправлена регрессия в zipimport.compile_source(). zipimport должен использовать тот же уровень оптимизации, что и интерпретатор.
bpo-25221: Исправлен повреждённый результат PyLong_FromLong(0) при компиляции Python с NSMALLPOSINTS = 0.
bpo-25758: Предотвращает излишнее кодирование имени файла в zipimport (исправление от Eryk Sun)
bpo-28189: dictitems_contains больше не игнорирует ошибки сравнения. (Исправление от Xiang Zhang)
bpo-27812: Корректно очищается обратная ссылка на генератор из его фрейма, чтобы предотвратить аварийные остановки в frame.clear().
bpo-27811: Исправлена аварийная остановка при финализации корутины, которая не была ожидана (awaited), с включённым режимом «предупреждения как ошибки».
bpo-27587: Исправлена ещё одна проблема, найденная PVS-Studio: проверка нулевого указателя после использования 'def' в _PyState_AddModule(). Первоначальное исправление от Christian Heimes.
bpo-26020: Порядок вычисления литерала множества не соответствовал задокументированному поведению.
bpo-27782: Импорт модуля-расширения с несколькими фазами теперь корректно позволяет использовать поле
m_methodsдля добавления функций уровня модуля в экземпляры типов, не являющихся модулями, возвращаемые изPy_create_mod. Исправление от Xiang Zhang.bpo-27936: Функция round() принимала второй аргумент None для одних типов, но не для других. Исправлена несогласованность – теперь None принимается для всех числовых типов.
bpo-27487: Предупреждение, если аргумент подмодуля для «python -m» или runpy.run_module() найден в sys.modules после импорта родительских пакетов, но до выполнения подмодуля.
bpo-27558: Исправлена SystemError в реализации оператора «raise». В совершенно новом потоке теперь возбуждается RuntimeError, так как нет активного исключения для повторного возбуждения. Исправление написано Xiang Zhang.
bpo-27419: Стандартная __import__() больше не ищет «__import__» в globals или builtins для импорта подмодулей или «from import». Исправлена обработка ошибки нестрокового имени пакета.
bpo-27083: Учтена переменная окружения PYTHONCASEOK в Windows.
bpo-27514: Слишком много статически вложенных блоков теперь вызывает SyntaxError вместо SystemError.
bpo-27473: Исправлено возможное целочисленное переполнение при конкатенации bytes и bytearray. Исправление от Xiang Zhang.
bpo-27507: Добавлена проверка целочисленного переполнения в bytearray.extend(). Исправление от Xiang Zhang.
bpo-27581: Не полагаться на обёртывание для проверки переполнения в PySequence_Tuple(). Исправление от Xiang Zhang.
bpo-27443: __length_hint__() итераторов bytearray больше не возвращает отрицательное целое число для изменённого bytearray.
bpo-27942: Исправлена утечка памяти в codeobject.c
Библиотека¶Library
bpo-15812: inspect.getframeinfo() теперь корректно показывает первую строку контекста. Патч от Sam Breese.
bpo-29094: Смещения в ZIP-файле, созданном с внешним объектом файла и режимами «w» и «x», теперь отсчитываются от начала файла.
bpo-13051: Исправлены ошибки рекурсии в большом или изменённом curses.textpad.Textbox. Основано на патче от Tycho Andersen.
bpo-29119: Исправлены слабые ссылки в чистой реализации Python метода move_to_end() в collections.OrderedDict. Предложено Andra Bogildea.
bpo-9770: Предикаты curses.ascii теперь корректно работают с отрицательными целыми числами.
bpo-28427: Старые ключи не должны удалять новые значения из WeakValueDictionary при сборке из другого потока.
bpo-28923: Удалены артефакты редактора из Tix.py.
bpo-28871: Исправлен сбой при освобождении глубокого ElementTree.
bpo-19542: Исправлены ошибки в WeakValueDictionary.setdefault() и WeakValueDictionary.pop(), когда сборка мусора происходит в другом потоке.
bpo-20191: Исправлен сбой в resource.prlimit() при передаче последовательности, не владеющей своими элементами, в качестве ограничений.
bpo-28779: multiprocessing.set_forkserver_preload() приводил к сбою процесса forkserver, если предварительно загруженный модуль создавал экземпляры некоторых объектов multiprocessing, таких как блокировки.
bpo-28847: dbm.dumb теперь поддерживает чтение файлов только для чтения и больше не записывает индексный файл, если он не был изменён.
bpo-25659: В ctypes предотвращён сбой при вызове методов from_buffer() и from_buffer_copy() для абстрактных классов, таких как Array.
bpo-28732: Исправлен сбой в os.spawnv() при отсутствии элементов в args.
bpo-28485: Всегда вызывать ValueError для отрицательного параметра compileall.compile_dir(workers=…), даже если многопоточность недоступна.
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 как значения с плавающей запятой. tkinter.IntVar теперь работает, если для базовой переменной Tk установлено значение с плавающей запятой.
bpo-28255: calendar.TextCalendar().prmonth() больше не выводит пробел в начале новой строки после печати календаря месяца. Патч от Xiang Zhang.
bpo-20491: Класс textwrap.TextWrapper теперь учитывает неразрывные пробелы. Основано на патче от Kaarle Ritvanen.
bpo-28353: os.fwalk() больше не завершается ошибкой на битых ссылках.
bpo-25464: Исправлен HList.header_exists() в модуле tkinter.tix путём добавления обходного пути для ошибки библиотеки Tix.
bpo-28488: shutil.make_archive() больше не добавляет запись «./» в ZIP-архив.
bpo-24452: Добавлена поддержка Chrome в webbrowser на Mac OS X.
bpo-20766: Исправлена утечка ссылок в pdb при обработке обработчиков SIGINT.
bpo-26293: Исправлена запись ZIP-файлов, которые начинаются не с начала файла. Смещения в ZIP-файле теперь отсчитываются от начала архива в соответствии со спецификацией.
bpo-28321: Исправлена запись символов не из BMP в бинарном формате в plistlib.
bpo-28322: Исправлены возможные сбои при распаковке объектов itertools из некорректных данных pickle. Основано на патче от John Leitch.
Исправлены возможные целочисленные переполнения и крахи в модуле mmap при нестандартных сценариях использования.
bpo-1703178: Исправлена возможность передачи опции –link-objects команде build_ext из distutils.
bpo-28253: Исправлены функции календаря для крайних месяцев: 0001-01 и 9999-12. Методы itermonthdays() и itermonthdays2() переписаны так, что они не вызывают itermonthdates(), что могло приводить к переполнению или потере точности datetime.date.
bpo-28275: Исправлена возможная ошибка использования после освобождения (use-after-free) в методах decompress() классов LZMADecompressor и BZ2Decompressor. Оригинальный патч от 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 восстановлено форматирование сообщений об исключениях вида «Исключение: None». Это исправляет регрессию, появившуюся в 3.5a2.
bpo-25651: Разрешено использование ложных значений в параметре msg функции subTest().
bpo-27932: Предотвращена утечка памяти в win32_ver().
Исправлена ошибка UnboundLocalError в socket._sendfile_use_sendfile.
bpo-28075: Добавлена проверка на ERROR_ACCESS_DENIED в реализации os.stat() для Windows. Патч от Eryk Sun.
bpo-25270: Предотвращено возбуждение SystemError функцией codecs.escape_encode() при передаче пустой последовательности байтов.
bpo-28181: Получение antigravity через HTTPS. Патч от Kaartic Sivaraam.
bpo-25895: Включение поддержки схем URL WebSocket в urllib.parse.urljoin. Патч от Gergely Imreh и Markus Holtermann.
bpo-27599: Исправлено переполнение буфера в binascii.b2a_qp() и binascii.a2b_qp().
bpo-19003: Модуль email.generator теперь заменяет только
\rи/или\nокончания строк в соответствии с RFC, вместо всех концов строк Unicode.bpo-28019: itertools.count() больше не округляет нецелый шаг в диапазоне от 1.0 до 2.0 до 1.
bpo-25969: Обновлена грамматика lib2to3 для поддержки обобщённой распаковки, добавленной в Python 3.5.
bpo-14977: mailcap теперь соблюдает порядок строк в файлах mailcap (принцип «первое совпадение»), как того требует RFC 1542. Патч от Michael Lazar.
bpo-24594: Выполняется проверка параметра persist при открытии базы данных MSI.
bpo-17582: xml.etree.ElementTree теперь сохраняет пробелы в атрибутах. (Патч от Duane Griffin. Проверено и одобрено Stefan Behnel.)
bpo-28047: Исправлен расчет длины строки, используемой для base64 CTE в новых политиках email.
bpo-27445: Не передавать str(_charset) в MIMEText.set_payload(). Патч от Claude Paroz.
bpo-22450: urllib теперь включает заголовок
Accept: */*среди заголовков по умолчанию. Это делает результаты запросов REST API более последовательными и предсказуемыми, особенно при использовании прокси-серверов.lib2to3.pgen3.driver.load_grammar() теперь создаёт стабильный файл кэша между запусками при одинаковом входном файле Grammar.txt независимо от настройки рандомизации хеша.
bpo-27570: Избегать вызовов memcpy() и подобных с нулевой длиной и нулевыми указателями источника в модулях «ctypes» и «array».
bpo-22233: Разрывать строки заголовков email только по символам CR и LF, указанным в RFC, а не по произвольным концовкам строк Unicode. Также исправлена ошибка при парсинге HTTP-заголовков.
bpo-27988: Исправлена некорректная мутация списка payload в email.iter_attachments.
bpo-27691: Исправлен разбор полей GEN_RID альтернативных имён субъекта в сертификатах X.509 в модуле ssl.
bpo-27850: Удаление 3DES из списка шифров по умолчанию модуля ssl для защиты от атаки sweet32 (CVE-2016-2183).
bpo-27766: Добавить ChaCha20 Poly1305 в список шифров по умолчанию в модуле ssl. (Требуется OpenSSL 1.1.0 или LibreSSL).
bpo-26470: Перенос модулей ssl и hashlib на OpenSSL 1.1.0.
Удалена поддержка передачи файлового дескриптора в os.access. Раньше это никогда не работало, но и исключения не вызывало.
bpo-12885: Исправлена ошибка в distutils при обнаружении символической ссылки.
bpo-27881: Исправлены возможные ошибки при установке sqlite3.Connection.isolation_level. Основано на патче Сян Чжана.
bpo-27861: Исправлен сбой в sqlite3.Connection.cursor(), когда фабрика создаёт не курсор. Патч Сян Чжана.
bpo-19884: Избегайте ложного вывода в OS X с Gnu Readline.
bpo-27706: Восстановлено детерминированное поведение random.Random().seed() для строковых начальных значений при использовании версии посева 1. Это позволяет последовательностям вызовов random() точно соответствовать тем, что были в Python 2. Патч Нофар Шнайдер.
bpo-10513: Исправлена регрессия в Connection.commit(). Операторы не должны сбрасываться после фиксации.
Новая версия typing.py из https://github.com/python/typing: Collection (только для 3.6) (bpo-27598). Добавлен FrozenSet в __all__ (upstream #261). Исправлен сбой в _get_type_vars() (upstream #259). Удалено ограничение dict в ForwardRef._eval_type (upstream #252).
bpo-27539: Исправлен ненормализованный результат
Fraction.__pow__в случае отрицательного показателя и отрицательного основания.bpo-21718: cursor.description теперь доступен для запросов с CTE.
bpo-2466: posixpath.ismount теперь правильно распознаёт точки монтирования, доступ к которым у пользователя отсутствует.
bpo-27773: Исправлены некоторые ошибки управления памятью для server_hostname в _ssl.wrap_socket().
bpo-26750: unittest.mock.create_autospec() теперь корректно работает для подклассов property() и других дескрипторов данных.
В модуле curses теперь вызывается ошибка, если в window.getstr() или window.instr() передано отрицательное значение.
bpo-27783: Исправлена возможная работа с неинициализированной памятью в operator.methodcaller.
bpo-27774: Исправлен возможный Py_DECREF на не принадлежащем объекте в _sre.
bpo-27760: Исправлено возможное целочисленное переполнение в binascii.b2a_qp.
bpo-27758: Исправлено возможное целочисленное переполнение в модуле _csv для больших длин записей.
bpo-27568: Предотвращение атаки HTTPoxy (CVE-2016-1000110). Переменная HTTP_PROXY игнорируется, когда установлена переменная окружения REQUEST_METHOD, что указывает на работу скрипта в режиме CGI.
bpo-27656: Не предполагать, что sched.h определяет какие-либо константы SCHED_*.
bpo-27130: В модуле «zlib» исправлена работа с большими буферами (обычно 4 ГиБ) при сжатии и распаковке. Ранее входные данные были ограничены 4 ГиБ, а операции сжатия и распаковки не обрабатывали результаты размером 4 ГиБ должным образом.
bpo-27533: Освобождение GIL в nt._isdir
bpo-17711: Исправлена распаковка по постоянному идентификатору с протоколом 0. Оригинальный патч Алессандро Вассалотти.
bpo-27522: Избежать непреднамеренной циклической ссылки в email.feedparser.
bpo-26844: Исправлено сообщение об ошибке для imp.find_module(), чтобы оно ссылалось на «path» вместо «name». Патч Льва Максимова.
bpo-23804: Исправлены вызовы recv() с нулевой длиной в SSL: теперь они не блокируются и не вызывают ошибку о нечистом EOF.
bpo-27466: Изменён формат времени, возвращаемый http.cookie.time2netscape, чтобы соответствовать netscape-формату cookie и быть согласованным с документацией.
bpo-26664: Исправлен activate.fish – удалено неправильное использование
$.bpo-22115: Исправлена трассировка переменных Tkinter: trace_vdelete() с неправильным режимом больше не ломает трассировку, trace_vinfo() теперь всегда возвращает список пар строк, трассировка в режиме «u» теперь работает.
Исправлена проблема области видимости в importlib.util.LazyLoader, из-за которой возникало UnboundLocalError при ленивой загрузке модуля, уже помещённого в sys.modules.
bpo-27079: Исправлены функции curses.ascii isblank(), iscntrl() и ispunct().
bpo-26754: Некоторые функции (compile() и т.д.) принимали аргумент filename, закодированный как итерируемый объект из целых чисел. Теперь принимаются только строки и байтоподобные объекты.
bpo-27048: Предотвращает сбой distutils в Windows, когда переменные окружения содержат символы, отличные от ASCII.
bpo-27330: Исправлены возможные утечки в модуле ctypes.
bpo-27238: Избавление от голых except в модуле turtle. Патч от Jelle Zijlstra.
bpo-27122: Когда исключение возникает внутри контекста, управляемого contextlib.ExitStack(), и один из генераторов выходного стека перехватывает его и возбуждает в цепочке, не возбуждайте повторно исходное исключение при выходе – пропустите новое цепочечное. Это позволяет избежать ошибки PEP 479, описанной в issue25782.
Безопасность¶Security
bpo-27278: Исправление реализации os.urandom() с использованием getrandom() на Linux. Урезание размера до INT_MAX и циклический сбор случайных байтов до получения достаточного количества, вместо прямого приведения Py_ssize_t к int.
Библиотека¶Library
bpo-26386: Исправлены операции выбора ttk.TreeView с идентификаторами элементов, содержащими пробелы.
Безопасность¶Security
bpo-22636: Устранение проблем внедрения команд оболочки с ctypes.util.find_library().
Библиотека¶Library
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-трафике. Патч от Kevin Conway.
bpo-28174: Обработка случая, когда SO_REUSEPORT не поддерживается должным образом. Патч от Seth Michael Larson.
bpo-26654: Добавлена проверка functools.partial в asyncio.Handle.__repr__. Патч от iceboy.
bpo-26909: Исправлен медленный ввод-вывод каналов в asyncio. Патч от INADA Naoki.
bpo-28176: Исправлено состояние гонки колбэков в asyncio.SelectorLoop.sock_connect.
bpo-27759: Исправлено некорректное удержание недействительных файловых дескрипторов селекторами. Патч от Mark Williams.
bpo-28368: Отказ от наблюдения за процессами, если к наблюдателю дочерних процессов не прикреплён цикл. Патч от Vincent Michel.
bpo-28369: Возбуждать RuntimeError, когда файловый дескриптор транспорта используется с add_reader, add_writer и т.д.
bpo-28370: Ускорение asyncio.StreamReader.readexactly. Патч от Коренберг Марк.
bpo-28371: Помечено как устаревшее передачу asyncio.Handles в run_in_executor.
bpo-28372: Исправлено asyncio для поддержки форматирования не-Python корутин.
bpo-28399: Удаление UNIX-сокета из файловой системы перед привязкой. Патч от Коренберг Марк.
bpo-27972: Запрещено задачам ожидать самих себя.
bpo-26923: Исправлено asyncio.Gather: отказ от отмены после завершения всех дочерних задач. Патч от Johannes Ebke.
bpo-26796: Не настраивать количество рабочих потоков для исполнителя пула потоков по умолчанию. Первоначальный патч от Hans Lawrenz.
bpo-28600: Оптимизация loop.call_soon().
bpo-28613: Исправлено get_event_loop(): возвращает текущий цикл при вызове из корутин/колбэков.
bpo-28639: Исправлено inspect.isawaitable: всегда возвращает bool. Патч от Justin Mayfield.
bpo-28652: Методы цикла теперь отклоняют типы сокетов, которые они не поддерживают.
bpo-28653: Исправлена утечка ссылок в functools.lru_cache.
bpo-28703: Исправлено asyncio.iscoroutinefunction для обработки объектов Mock.
bpo-24142: Чтение повреждённого конфигурационного файла оставляло парсер в нерабочем состоянии. Оригинальный патч от Florian Höch.
bpo-28990: Исправлена проблема зависания SSL при закрытии соединения до завершения рукопожатия. (Патч от HoHo-Ho)
IDLE¶
bpo-15308: Добавлена команда «прервать выполнение» (^C) в меню Shell. Патч от Roger Serwy, обновлён Bayard Randel.
bpo-27922: Прекращено мерцание GUI-виджетов в тестах IDLE на экране.
Добавлена версия в заголовок окна справки IDLE.
bpo-25564: В разделе о различиях IDLE и консоли упомянуто, что использование exec означает, что __builtins__ определён для каждого оператора.
bpo-27714: text_textview и test_autocomplete теперь проходят при повторном запуске в том же процессе. Это происходит, когда test_idle падает при запуске с опцией -w, но без -jn. Исправлено предупреждение из test_config.
bpo-25507: IDLE больше не выполняет ошибочный код из-за своих импортов tkinter. Пользователи должны включать те же импорты, которые требуются для прямого запуска в Python.
bpo-27452: Добавлены счётчик строк и CRC в дамп теста configHandler в IDLE.
bpo-27365: Разрешены не-ASCII символы в IDLE NEWS.txt для имён участников.
bpo-27245: IDLE: корректное удаление пользовательских тем и привязок клавиш. Ранее при запуске IDLE из консоли или через import выдавался каскад предупреждений. Патч от Serhiy Storchaka.
C API¶
Документация¶Documentation
bpo-28513: Документирован интерфейс командной строки zipfile.
Тесты¶Tests
bpo-28950: Запрещено комбинировать -j0 с -T/-l/-M в аргументах командной строки regrtest.
bpo-28666: Теперь test.support.rmtree может удалять каталоги, недоступные для записи или чтения.
bpo-23839: Различные кеши теперь очищаются перед запуском каждого тестового файла.
bpo-28409: regrtest: исправлен парсер аргументов командной строки.
bpo-27787: Вызов gc.collect() перед проверкой каждого теста на «зависшие потоки», поскольку зависшие потоки являются слабыми ссылками.
bpo-27369: В test_pyexpat избегаем проверки деталей сообщения об ошибке, которые изменились в Expat 2.2.0.
Инструменты/Демонстрации¶Tools/Demos
bpo-27952: Исправлена работа Tools/scripts/fixcid.py с Python 3 и текущим модулем «re», устранены некорректные экранирования обратной косой чертой в Python, а также исправлена ошибка разбора экранированных кавычек C.
bpo-27332: Исправлен тип первого аргумента функций уровня модуля, генерируемых Argument Clinic. Патч от Petr Viktorin.
bpo-27418: Исправлен Tools/importbench/importbench.py.
Windows¶
bpo-28251: Улучшения справочных руководств в Windows.
bpo-28110: launcher.msi использует разные коды продукта для 32-битной и 64-битной версий
bpo-25144: Обеспечивает установку TargetDir до продолжения настраиваемой установки.
bpo-27469: Добавляет расширение оболочки для запускатора, чтобы перетаскивание работало корректно.
bpo-27309: Включены корректные стили Windows в манифесте python[w].exe.
Сборка¶Build
bpo-29080: Убирает жёсткую зависимость от hg.exe в PCBuild/build.bat
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: Исправлена сборка с эстонской локалью (цели python-config и distclean в Makefile). Патч от Arfrever Frehtes Taifersar Arahesis.
bpo-26661: setup.py теперь определяет системную libffi с multiarch wrapper.
bpo-28066: Исправляет логику поиска каталогов сборки для сгенерированных include-файлов при сборке вне дерева исходников.
bpo-15819: Удаляет избыточную опцию каталога поиска include для сборки вне дерева исходников.
bpo-27566: Исправляет цель clean в makefile заморозки (патч от Lisa Roach)
bpo-27705: Обновляет сообщение в validate_ucrtbase.py
bpo-27983: Отсутствие llvm-profdata при использовании clang, необходимого для PGO-линковки, теперь вызывает ошибку на этапе configure, а не на этапе make, когда включен --with-optimizations. Также улучшена возможность поиска llvm-profdata на macOS и некоторых Linux.
bpo-26307: Сборка profile-opt теперь применяет PGO ко встроенным модулям.
bpo-26359: Добавить флаг configure –with-optimizations.
bpo-27713: Подавляет ложные предупреждения сборки при обновлении файлов bootstrap в importlib. Патч от Xiang Zhang
bpo-25825: Исправляет ссылки на Modules/python.exp и ld_so_aix, которые требуются на AIX. Обновляет ссылки на путь установки, изменённый в 3.2a4, и отменяет изменённые ссылки на дерево сборки, сделанные в 3.5.0a1.
bpo-27453: Вызов CPP в configure должен использовать CPPFLAGS. Патч от Chi Hsuan Yen.
bpo-27641: Сценарий configure теперь вставляет комментарии в makefile, чтобы предотвратить кросс-компиляцию исполняемых файлов pgen и _freeze_importlib.
bpo-26662: Устанавливает PYTHON_FOR_GEN в configure как программу Python, используемую для генерации файлов во время сборки.
bpo-10910: Избегает ошибок компиляции C++ на FreeBSD и OS X. Также обновляет проверки версий FreeBSD для исходного обходного решения ctype UTF-8.
bpo-28676: Предотвращает предупреждение о пропущенном объявлении 'getentropy' на macOS. Патч от Gareth Rees.
Python 3.5.2 финальная¶Python 3.5.2 final
Дата выпуска: 2016-06-26
Ядро и встроенные модули¶Core and Builtins
bpo-26930: Обновляет сборки Windows для использования OpenSSL 1.0.2h.
Тесты¶Tests
bpo-26867: В Ubuntu openssl OP_NO_SSLv3 принудительно включён по умолчанию; исправлен тест.
IDLE¶
bpo-27365: Разрешено использование не-ASCII символов в idlelib/NEWS.txt – минимальная часть для версии 3.5.2.
Python 3.5.2, кандидат в релиз 1¶Python 3.5.2 release candidate 1
Дата выпуска: 2016-06-12
Ядро и встроенные модули¶Core and Builtins
bpo-27066: Исправлен SystemError, если пользовательская функция открытия (для open()) возвращает отрицательное число без установки исключения.
bpo-20041: Исправлен TypeError, когда frame.f_trace устанавливается в None. Патч от Ксавье де Гай (Xavier de Gaye).
bpo-26168: Исправлена возможная утечка ссылок при сбое Py_BuildValue() с форматом «N».
bpo-26991: Исправление возможной утечки ссылок при создании функции с аннотациями.
bpo-27039: Исправлен bytearray.remove() для значений больше 127. Патч от Джо Джевника (Joe Jevnik).
bpo-23640: int.from_bytes() больше не обходит конструкторы подклассов.
bpo-26811: gc.get_objects() больше не содержит повреждённый кортеж с нулевым указателем.
bpo-20120: Использование RawConfigParser для разбора .pypirc, удаление поддержки интерполяции, непреднамеренно добавленной при переходе на Python 3. Поведение больше не выполняет интерполяцию в файлах .pypirc, совпадая с поведением в Python 2.7 и Setuptools 19.0.
bpo-26659: Встроенный тип slice теперь поддерживает сборку циклических ссылок.
bpo-26718: super.__init__ больше не приводит к утечке памяти при многократном вызове. ПРИМЕЧАНИЕ: Прямой вызов super.__init__ не рекомендуется!
bpo-25339: PYTHONIOENCODING теперь имеет приоритет над локалью при установке обработчика ошибок для stdin и stdout.
bpo-26494: Исправлен сбой при итерации истощающих итераторов. Затронутые классы: общие итераторы последовательностей, итераторы str, bytes, bytearray, list, tuple, set, frozenset, dict, OrderedDict, соответствующие представления и итератор os.scandir().
bpo-26581: Если в одной строке файла исходного кода Python указано несколько кодировок (coding cookie), учитывается только первая.
bpo-26464: Исправление str.translate() для случая, когда строка в ASCII и первая замена удаляет символ, а следующая замена использует не-ASCII символ или строку длиннее 1 символа. Регрессия, внесённая в 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(int), даже если1и1.0равны.bpo-22995: [ОБНОВЛЕНИЕ] Закомментирован один из тестов на возможность сериализации (pickle) в _PyObject_GetState() из-за регрессий, возникших в проектах на Cython.
bpo-25961: Запрещены нулевые символы в имени типа.
bpo-25973: Исправлен segfault при привязке имени, начинающегося с двух подчёркиваний, в недопустимом операторе nonlocal.
bpo-22995: Экземпляры типов-расширений с состоянием, которые не являются подклассами list или dict и не реализуют никаких связанных с pickle методов (__reduce__, __reduce_ex__, __getnewargs__, __getnewargs_ex__ или __getstate__), больше не могут быть сериализованы с помощью pickle. Включая memoryview.
bpo-20440: Массовая замена небезопасного кода установки атрибутов на специальный макрос Py_SETREF.
bpo-25766: Специальный метод __bytes__() теперь работает в подклассах str.
bpo-25421: Методы __sizeof__ встроенных типов теперь используют динамический базовый размер. Это позволяет sys.getsize() корректно работать с их подклассами, в которых определён __slots__.
bpo-25709: исправлена проблема с конкатенацией строк на месте и кешем utf-8.
bpo-24097: Исправлен сбой в object.__reduce__(), если имя слота освобождается внутри __getattr__.
bpo-24731: Исправлен сбой при преобразовании объектов со специальными методами __bytes__, __trunc__ и __float__, которые возвращают экземпляры подклассов bytes, int и float, в соответствующие подклассы bytes, int и float.
bpo-26478: Исправлены семантические ошибки при использовании бинарных операторов с представлениями словарей и кортежами.
bpo-26171: Исправлена возможная арифметическая переполнение и повреждение кучи в zipimporter.get_data().
bpo-25660: Исправлено поведение клавиши TAB в REPL с readline.
bpo-25887: Вызывается RuntimeError при ожидании объекта корутины более одного раза.
bpo-27243: Обновлён протокол __aiter__: вместо возврата ожидаемого объекта, который разрешается в асинхронный итератор, асинхронный итератор должен возвращаться напрямую. Использование первого варианта вызовет PendingDeprecationWarning.
Безопасность¶Security
bpo-26556: Обновление expat до версии 2.1.1, исправление CVE-2015-1283.
Исправление уязвимости снятия TLS в smtplib, CVE-2016-0772. Сообщено командой Oststrom.
Библиотека¶Library
bpo-21386: Реализовано недостающее свойство IPv4Address.is_global. Оно документировано начиная с 07a5610bae9d. Первоначальный патч от Roger Luethi.
bpo-20900: Команда register в distutils теперь корректно декодирует HTTP-ответы. Первоначальный патч от ingrid.
Новая версия typing.py предоставляет несколько новых классов и возможностей: @overload вне заглушек, Reversible, DefaultDict, Text, ContextManager, Type[], NewType(), TYPE_CHECKING и многочисленные исправления ошибок (следует отметить, что некоторые из новых возможностей ещё не реализованы в mypy или других статических анализаторах). Также добавлены классы для PEP 492 (ожидаемый объект, AsyncIterable, AsyncIterator) (фактически они были включены ещё в 3.5.1, но не упоминались).
bpo-25738: Остановлена отправка тела сообщения в http.server.BaseHTTPRequestHandler.send_error() для кода 205 Reset Content. Также не отправляются поля заголовка Content в ответах без тела. Патч от Susumu Koshiba.
bpo-21313: Исправлен модуль platform для корректной работы, когда sys.version содержит усечённую информацию о сборке.
Безопасность¶Security
bpo-26839: В Linux
os.urandom()теперь вызываетgetrandom()сGRND_NONBLOCKдля перехода на чтение/dev/urandom, если пул энтропии urandom ещё не инициализирован. Патч написан Колмом Бакли (Colm Buckley).
Библиотека¶Library
bpo-27164: В модуле zlib разрешена декомпрессия сырых потоков Deflate с предопределённым zdict. Основано на патче от Xiang Zhang.
bpo-24291: Исправлено wsgiref.simple_server.WSGIRequestHandler для полной записи данных клиенту. Ранее могли происходить частичные записи и усечение данных. Также wsgiref.handler.ServerHandler теперь может обрабатывать частичные записи в stdout, но это устарело.
bpo-26809: Добавлено
__all__вstring. Патч от Emanuel Barry.bpo-26373: subprocess.Popen.communicate теперь корректно игнорирует BrokenPipeError, когда дочерний процесс завершается до вызова .communicate() во всех/большинстве случаев.
bpo-21776: distutils.upload теперь корректно обрабатывает HTTPError. Первоначальный патч от Claudiu Popa.
bpo-27114: Исправлена ошибка PermissionError в SSLContext._load_windows_store_certs.
bpo-18383: Избегание создания дублирующих фильтров при использовании filterwarnings и simplefilter. Основано на патче от Alex Shkop.
bpo-27057: Исправлен os.set_inheritable() на Android: ioctl() блокируется SELinux и завершается с EACCESS. Функция теперь использует fcntl() в качестве запасного варианта. Патч написан Michał Bednarski.
bpo-27014: Исправлена бесконечная рекурсия при использовании typing.py. Спасибо Kalle Tuure!
bpo-14132: Исправлена обработка перенаправлений в urllib.request, когда целевой URL содержит только строку запроса. Первоначальное исправление от Ján Janech.
bpo-17214: Модуль «urllib.request» теперь процентно кодирует не-ASCII байты найденные в URL-адресах перенаправления. Некоторые серверы отправляют поля заголовка Location с не-ASCII байтами, но «http.client» требует, чтобы целевой запрос был кодируем в ASCII, в противном случае возбуждается UnicodeEncodeError. На основе патча от Christian Heimes.
bpo-26892: Учтён флаг debuglevel в urllib.request.HTTPHandler. Патч предоставлен Chi Hsuan Yen.
bpo-22274: В модуле subprocess разрешено перенаправление stderr в\nstdout, даже если stdout не перенаправлен. Патч от Akira Li.
bpo-26807: Атрибут files у mock_open больше не вызывает ошибку при readline в конце файла. Патч от Yolanda Robla.
bpo-25745: Исправлена утечка userptr в деструкторе панели curses.
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. Ошибка возникает только на 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() теперь корректно выводит нестроковые различающиеся элементы (например, bytes в режиме -b). Это затрагивает assertListEqual() и assertTupleEqual().
bpo-26041: Из сообщений об устаревании функций platform.dist() и platform.linux_distribution() удалена фраза «will be removed in 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: Форматы ustar и gnu в tarfile теперь корректно вычисляют пределы полей имени и ссылки для многобайтовых кодировок символов, таких как utf-8.
Безопасность¶Security
bpo-26657: Исправление уязвимости обхода каталогов (directory traversal) в http.server на Windows. Исправляет регрессию, внесённую в 3.3.4rc1 и 3.4.0rc1. На основе патча Филиппа Хагемайстера (Philipp Hagemeister).
Библиотека¶Library
bpo-26717: Прекращено кодирование путей WSGI, преобразованных в Latin-1, с помощью UTF-8. Патч от Anthony Sottile.
bpo-26735: Исправлен
os.urandom()в Solaris 11.3 и новее при чтении более 1024 байт: вызыватьgetrandom()несколько раз с ограничением 1024 байта за вызов.bpo-16329: Добавлен .webm в mimetypes.types_map. Патч от Giampaolo Rodola’.
bpo-13952: Добавлен .csv в mimetypes.types_map. Патч от Geoff Wilson.
bpo-26709: Исправлена проблема Y2038 при загрузке двоичных PList-файлов.
bpo-23735: Обрабатывается изменение размера терминала в Readline 6.3+ с помощью установки собственного обработчика SIGWINCH. Патч от Eric Price.
bpo-26586: В http.server теперь отправляется ответ «413 Request header fields too large», если для разбора слишком много полей заголовка, вместо прерывания соединения и возбуждения необработанного исключения. Патч от Xiang Zhang.
bpo-22854: Изменено поведение BufferedReader.writable() и BufferedWriter.readable(): теперь они всегда возвращают False.
bpo-25195: Исправлена регрессия в mock.MagicMock. _Call является подклассом tuple (изменение 3603bae63c13 работает только для классов), поэтому пришлось реализовать __ne__ самостоятельно. Патч от Andrew Plummer.
bpo-26644: Возбуждается ValueError вместо SystemError, когда отрицательная длина передаётся в SSLSocket.recv() или read().
bpo-23804: Исправлены методы SSL recv(0) и read(0): теперь они возвращают ноль байт вместо до 1024.
bpo-26616: Исправлена ошибка в методе datetime.astimezone().
bpo-21925:
warnings.formatwarning()теперь перехватывает исключения вlinecache.getline(...), чтобы иметь возможность логироватьResourceWarning, отправленные с опозданием во время завершения работы интерпретатора Python.bpo-24266: При компиляции с Readline 7 нажатие Ctrl+C во время поиска по истории Readline теперь отменяет режим поиска.
bpo-26560: Предотвращено возможное исключение ValueError в BaseHandler.start_response. Первоначальный патч от Peter Inglesby.
Безопасность¶Security
bpo-26313: ssl.py _load_windows_store_certs завершается ошибкой, если хранилище сертификатов Windows пусто. Патч от Baji.
Библиотека¶Library
bpo-26569: Исправлены
pyclbr.readmodule()иpyclbr.readmodule_ex()для поддержки импорта пакетов.bpo-26499: Учтён остаток Content-Length в HTTPResponse.readline() и read1(). Основано на патче от Silent Ghost. Также документировано, что HTTPResponse теперь поддерживает эти методы.
bpo-25320: Обрабатываются сокеты в каталогах, которые сканирует unittest discovery. Патч от Victor van den Elzen.
bpo-16181: cookiejar.http2time() теперь возвращает None, если год больше datetime.MAXYEAR.
bpo-26513: Исправлено определение платформы Windows Server в модуле platform.
bpo-23718: Исправлен разбор времени на неделе 0 до 1 января. Исходный патч от Tamás Bence Gedai.
bpo-20589: Вызов Path.owner() и Path.group() в Windows теперь вызывает NotImplementedError вместо ImportError.
bpo-26177: Исправлен метод keys() для виджетов Canvas и Scrollbar.
bpo-15068: Устранена избыточная буферизация в модуле fileinput. Параметр bufsize больше не используется.
bpo-2202: Исправлена ошибка UnboundLocalError в AbstractDigestAuthHandler.get_algorithm_impls. Исходный патч от Mathieu Dupuy.
bpo-25718: Исправлены сериализация и копирование итератора accumulate() с total равным None.
bpo-26475: Исправлен вывод отладочной информации для регулярных выражений с флагом (?x).
bpo-26457: Исправлены методы subnets() в классах IP-сетей для случая, когда результирующая длина префикса равна максимальной. Основано на патче от Xiang Zhang.
bpo-26385: Удалять файл, если внутренний вызов open() в NamedTemporaryFile() завершается ошибкой. Патч от Silent Ghost.
bpo-26402: Исправлен клиент XML-RPC для повторной попытки при закрытии сервером постоянного соединения. Это было регрессией, связанной с новым исключением http.client.RemoteDisconnected в 3.5.0a4.
bpo-25913: Начальный
<~теперь необязателен в base64.a85decode() с adobe=True. Патч от Swati Jaiswal.bpo-26186: Удалена некорректная проверка типа в importlib.util.LazyLoader.
bpo-26367: importlib.__import__() вызывает SystemError, как и builtins.__import__(), когда указан
level, но без сопровождающего пакета.bpo-26309: В модуле «socketserver» запрос закрывается (закрывается подключённый сокет), когда verify_request() возвращает false. Патч от Aviv Palivoda.
Безопасность¶Security
bpo-25939: В Windows хранилище сертификатов открывается только для чтения в ssl.enum_certificates.
Библиотека¶Library
bpo-25995: os.walk() больше не использует файловые дескрипторы пропорционально глубине дерева.
bpo-26117: Итератор os.scandir() теперь закрывает файловый дескриптор не только при завершении итерации, но и при ошибке.
bpo-25911: Восстановлена поддержка путей в виде байтов в os.walk() в Windows.
bpo-26045: Добавлено предложение использовать UTF-8 в сообщении об ошибке при отправке строки не в Latin-1 через http.client.
bpo-12923: Счётчик перенаправлений FancyURLopener сбрасывается даже в случае исключения. Основано на патчах Brian Brazil и Daniel Rocco.
bpo-25945: Исправлен сбой при десериализации объекта functools.partial с некорректным состоянием. Исправлена утечка при неудачном конструировании functools.partial. Атрибуты «args» и «keywords» объекта functools.partial теперь всегда имеют типы tuple и dict соответственно.
bpo-26202: copy.deepcopy() теперь корректно копирует объекты range() с неатомарными атрибутами.
bpo-23076: Path.glob() теперь вызывает ValueError, если вызван с некорректным шаблоном. Патч от Thomas Nyberg.
bpo-19883: Исправлены возможные целочисленные переполнения в zipimport.
bpo-26227: На Windows функции getnameinfo(), gethostbyaddr() и gethostbyname_ex() модуля socket теперь декодируют имя хоста из кодовой страницы ANSI, а не UTF-8.
bpo-26147: xmlrpc теперь работает со строками, которые невозможно закодировать с помощью используемой кодировки, отличной от UTF-8.
bpo-25935: Сборщик мусора теперь разрывает циклические ссылки с OrderedDict.
bpo-16620: Исправлен AttributeError в msilib.Directory.glob().
bpo-26013: Добавлена совместимость с повреждёнными сериализованными объектами протокола 2, созданными в старых версиях Python 3 (3.4.3 и ниже).
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: Игнорировать PermissionError при обходе дерева с помощью pathlib.Path.[r]glob(). Патч от Ulrich Petri.
bpo-25447: fileinput теперь использует sys.stdin как есть, если у него нет атрибута buffer (восстановлена обратная совместимость).
bpo-25447: Копирование объекта-обёртки lru_cache() теперь всегда работает независимо от типа обёрнутого объекта (возвращается исходный объект без изменений).
bpo-24103: Исправлена возможная ошибка use-after-free в ElementTree.XMLPullParser.
bpo-25860: os.fwalk() больше не пропускает оставшиеся каталоги при возникновении ошибки. Оригинальный патч от Samson Lee.
bpo-25914: Исправлен и упрощён OrderedDict.__sizeof__.
bpo-25902: Исправлены различные проблемы с подсчётом ссылок в итерации ElementTree.
bpo-25717: Восстановлено прежнее поведение: теперь снова допускается большинство ошибок fstat() при открытии файлов. Это было регрессией в 3.5a1, из-за чего в особых случаях переставали работать анонимные временные файлы.
bpo-24903: Исправлена регрессия в количестве аргументов, которое принимает compileall при указании ‘-d’. Проверка количества аргументов полностью удалена, так как она всё равно никогда не работала корректно.
bpo-25764: В модуле подпроцесса сохраняется любое исключение, вызванное сбоем fork() при использовании preexec_fn.
bpo-6478: Кэш регулярных выражений _strptime теперь сбрасывается после смены часового пояса с помощью time.tzset().
bpo-14285: При выполнении пакета с опцией «python -m package», если инициализация пакета завершается ошибкой, теперь выводится корректная трассировка. Модуль «runpy» теперь позволяет исключениям из инициализации пакета передаваться обратно вызывающему коду, а не вызывает ImportError.
bpo-19771: Также в runpy и опции «-m» убрано нерелевантное сообщение «… is a package and cannot be directly executed», если пакет не удалось даже инициализировать (например, из-за проблем с файлом
*.pyc).bpo-25177: Исправлена проблема со средним арифметическим очень маленьких и очень больших чисел. Побочный эффект: statistics.mean и statistics.variance теперь работают значительно быстрее.
bpo-25718: Исправлено копирование объекта с состоянием, булево значение которого равно False.
bpo-10131: Исправлено глубокое копирование документов minidom. Основано на патче от Marian Ganisin.
bpo-25725: Исправлена утечка ссылок в pickle.loads() при десериализации некорректных данных, включая кортежные инструкции.
bpo-25663: В комплитере Readline избегать дублирования глобальных имён, а также искать сначала в глобальном пространстве имён, а затем во встроенном.
bpo-25688: Исправлена утечка файла в ElementTree.iterparse() при возникновении ошибки.
bpo-23914: Исправлен SystemError, возникающий при десериализации битых pickle-данных.
bpo-25691: Исправлен сбой при удалении атрибутов ElementTree.Element.
bpo-25624: ZipFile теперь всегда записывает заголовок ZIP_STORED для записей каталогов. Исправление от Dingyuan Wang.
Пропускать getaddrinfo, если хост уже разрешён. Исправление от A. Jesse Jiryu Davis.
bpo-26050: Добавлен метод asyncio.StreamReader.readuntil(). Исправление от Марка Коренберга.
bpo-25924: Избегать излишней сериализации вызовов getaddrinfo(3) на OS X версии 10.5 и выше. Первоначальное исправление от A. Jesse Jiryu Davis.
bpo-26406: Избегать излишней сериализации вызовов getaddrinfo(3) на текущих версиях OpenBSD и NetBSD. Исправление от 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: Прекратить появление предупреждений ‘ThemeChanged’ при запуске тестов IDLE. Они сохранялись после подавления других предупреждений в #20567. Применить решение Serhiy Storchaka с update_idletasks к четырём тестовым файлам. Записать этот дополнительный совет в idle_test/README.txt
bpo-20567: Переработан idle_test/README.txt с рекомендациями по предотвращению предупреждений tk от тестов. Рекомендации применены к нескольким тестам IDLE.
bpo-27117: Обеспечить работу colorizer 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, которое мешало печати. Расширен htest IOBinding для включения всех основных функций IOBinding.
bpo-25905: Отменено нежелательное преобразование ' в ’ (правый одиночный кавычка) в README.txt, открывать этот файл и NEWS.txt с кодировкой ‘ascii’. Перекодировать CREDITS.txt в utf-8 и открывать его с ‘utf-8’.
Документация¶Documentation
bpo-19489: Поле поиска перенесено из боковой панели в заголовок и подвал каждой страницы. Исправление от Ammar Askar.
bpo-24136: Документирован новый синтаксис распаковки PEP 448 версии 3.5.
bpo-26736: Для внешних ссылок в документации по возможности используется HTTPS.
bpo-6953: Переработана документация модуля Readline: сгруппированы связанные функции, добавлены подробности, например, какие базовые функции и переменные Readline задействованы.
bpo-23606: В документацию ctypes добавлено примечание о cdll.msvcrt.
bpo-25500: Исправлена документация: теперь она не утверждает, что __import__ ищется в глобальной области видимости.
bpo-26014: Обновлена документация по упаковке для 3.x: * ссылки «See also» на новую документацию теперь добавлены на страницы устаревшей документации * обновлены ссылки на документацию setuptools
Тесты¶Tests
bpo-21916: Добавлены тесты для модуля turtle. Патч от ingrid, Gregory Loyse и Jelle Zijlstra.
bpo-26523: Пул потоков multiprocessing (multiprocessing.dummy.Pool) не имел тестов.
bpo-26015: Добавлены новые тесты для сериализации (pickling) итераторов изменяемых последовательностей.
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_timestamp_overflow в test_import, если запись файлов байт-кода невозможна.
Сборка¶Build
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, включающий оптимизацию во время компоновки (LTO) при сборке с make profile-opt. Известно, что некоторые компиляторы и инструментальные цепочки могут выдавать нестабильный код при использовании LTO – перед использованием рекомендуется тщательно всё протестировать. Эта оптимизация может дать ускорение на несколько процентов по сравнению с использованием одного profile-opt.
bpo-26624: Добавлена проверка версии ucrtbase[d].dll с предупреждением для старых версий.
bpo-17603: Устранена ошибка о несуществующем файле fileblocks.o за счёт использования низкоуровневой проверки st_blocks в struct stat.
bpo-26079: Исправлена папка сборки для tix-8.4.3.6. Патч от Bjoern Thiel.
bpo-26465: Обновлены сборки Windows для использования OpenSSL 1.0.2g.
bpo-24421: Компиляция Modules/_math.c выполняется один раз, до сборки расширений. Ранее он мог некорректно скомпилироваться, если сборки math и cmath выполнялись одновременно.
bpo-25348: Добавлены аргументы
--pgoи--pgo-jobвPCbuild\build.batдля сборки с профильной оптимизацией (PGO). Старый скриптPCbuild\build_pgo.batтеперь устарел и просто вызываетPCbuild\build.bat --pgo %*.bpo-25827: Добавлена поддержка сборки с ICC в
configure, включая новый флаг--with-icc.bpo-25696: Исправлена установка Python в UNIX при использовании make -j9.
bpo-26930: Обновлён 32-разрядный установщик для OS X 10.5+ для сборки и компоновки с OpenSSL 1.0.2h.
bpo-26268: Обновлены сборки Windows для использования OpenSSL 1.0.2f.
bpo-25136: Поддержка новых текстовых stub-библиотек SDK Apple Xcode 7.
bpo-24324: Не включать предупреждения о недостижимом коде при использовании gcc, так как эта опция некорректно работала в старых версиях gcc и была молча удалена, начиная с gcc-4.5.
Windows¶
bpo-27053: Обновление make_zip.py для корректной генерации ZIP-файла библиотеки.
bpo-26268: Обновлён скрипт prepare_ssl.py для работы с релизами OpenSSL, которые не включают содержимое каталога include (то есть, версии 1.0.2e и новее).
bpo-26071: созданные бинарники bdist_wininst не запускаются и не находят 32-битный Python
bpo-26073: обновление списка магических чисел в загрузчике
bpo-26065: исключает venv из библиотеки при генерации встраиваемого дистрибутива.
Инструменты/Демонстрации¶Tools/Demos
bpo-26799: исправление python-gdb.py: не получать типы C один раз при загрузке кода Python, а получать их по запросу. Типы C могут измениться, если python-gdb.py загружается до исполняемого файла Python. Патч написан Thomas Ilsche.
bpo-26271: исправление инструмента Freeze для корректного использования флагов, переданных через configure. Патч от Daniel Shaulov.
bpo-26489: добавление поддержки распаковки словарей в Tools/parser/unparse.py. Патч от Guo Ci Teo.
bpo-26316: исправление опечатки в имени переменной в Argument Clinic.
Windows¶
bpo-17500: удаление неиспользуемых и устаревших иконок. (См. также: https://github.com/python/pythondotorg/issues/945)
Python 3.5.1 финальная¶Python 3.5.1 final
Дата выпуска: 2015-12-06
Ядро и встроенные модули¶Core and Builtins
bpo-25709: исправлена проблема с конкатенацией строк на месте и кешем utf-8.
Windows¶
bpo-25715: установщик Python 3.5.1 показывает неверный путь обновления и некорректную логику обнаружения загрузчика.
Python 3.5.1 кандидат в релизы 1¶Python 3.5.1 release candidate 1
Дата выпуска: 2015-11-22
Ядро и встроенные модули¶Core and Builtins
bpo-25630: исправление возможного segfault при разборе аргументов в функциях, принимающих пути файловой системы.
bpo-23564: исправлена частично сломанная проверка корректности во внутренностях _posixsubprocess относительно того, как fds_to_pass передавались дочернему процессу. Ошибка не имела фактического влияния, так как subprocess.py уже её избегал.
bpo-25388: исправлен сбой токенизатора при обработке недекодируемого исходного кода с нулевым байтом.
bpo-25462: хеш ключа теперь вычисляется только один раз в большинстве операций в C-реализации OrderedDict.
bpo-22995: реализация по умолчанию __reduce__ и __reduce_ex__ теперь отклоняет встроенные типы, у которых не определён __new__.
bpo-25555: исправление парсера и AST: заполнение lineno и col_offset узла “arg” при компиляции AST из объектов Python.
bpo-24802: избегание выхода за границы буфера при передаче байтоподобных объектов в int(), float(), compile(), exec() и eval(). Эти объекты не обязательно завершаются нулевым байтом, но функции предполагали, что это так.
bpo-24726: исправлен сбой и утечка NULL в repr() OrderedDict, который был изменён прямыми вызовами методов dict.
bpo-25449: итерация по OrderedDict с ключами с нестабильным хешем теперь вызывает KeyError как в C-реализации, так и в реализации на Python.
bpo-25395: исправлен сбой при сборке мусора сильно вложенных структур OrderedDict.
bpo-25274: sys.setrecursionlimit() теперь вызывает RecursionError, если новый предел рекурсии слишком низок в зависимости от текущей глубины рекурсии. Также изменена формула «нижней отметки», чтобы сделать её монотонной. Эта отметка используется для принятия решения о сбросе флага переполнения состояния потока.
bpo-24402: исправление input() для вывода приглашения в перенаправленный stdout, когда sys.stdout.fileno() завершается ошибкой.
bpo-24806: предотвращение создания подклассов встроенных типов, которым не разрешено наследование, через множественное наследование.
bpo-24848: исправлен ряд ошибок в декодировании UTF-7 некорректных данных.
bpo-25280: Сообщения трассировки импорта, выводимые в подробном режиме (-v), больше не форматируются дважды.
bpo-25003: В Solaris 11.3 и новее os.urandom() теперь использует функцию getrandom() вместо getentropy(). Функция getentropy() блокируется для генерации энтропии очень высокого качества, но os.urandom() не нуждается в такой высококачественной энтропии.
bpo-25182: stdprinter (используемый как sys.stderr до загрузки модуля io при запуске) теперь использует обработчик ошибок backslashreplace.
bpo-25131: Номер строки и смещение столбца для литералов множеств/словарей и генераторов теперь соответствуют открывающей скобке.
bpo-25150: Скрыты приватные символы _Py_atomic_xxx из публичного заголовочного файла Python.h для исправления ошибки компиляции с OpenMP. PyThreadState_GET() становится псевдонимом PyThreadState_Get() для предотвращения несовместимости ABI.
Библиотека¶Library
bpo-25626: Изменены три функции zlib, чтобы они принимали размеры, помещающиеся в Py_ssize_t, но внутренне ограничивают эти размеры до UINT_MAX. Это устраняет регрессию в 3.5, где GzipFile.read() не мог читать фрагменты размером более 2 или 4 ГиБ. Изменение затрагивает параметр max_length функции zlib.Decompress.decompress(), параметр bufsize функции zlib.decompress() и параметр length функции zlib.Decompress.flush().
bpo-25583: Избегает некорректных ошибок, вызываемых os.makedirs(exist_ok=True), когда операционная система отдаёт приоритет ошибкам типа EACCES над EEXIST.
bpo-25593: Изменена семантика EventLoop.stop() в asyncio.
bpo-6973: Когда известно, что процесс subprocess.Popen завершился, не позволяйте методам send_signal(), terminate() или kill() выполнять какие-либо действия, так как они потенциально могут отправить сигнал другому процессу.
bpo-25590: В автодополнении Readline getattr() вызывается только один раз для каждого атрибута.
bpo-25498: Исправлен сбой при сборке мусора объектов ctypes, созданных обёрткой memoryview. Это была регрессия, внесённая в 3.5a1. Основано на патче от Eryksun.
bpo-25584: Добавлено «escape» в список __all__ в модуле glob.
bpo-25584: Исправлена рекурсивная glob() с шаблонами, начинающимися с
**.bpo-25446: Исправлена регрессия в поддержке AUTH LOGIN в smtplib.
bpo-18010: Исправлена функция поиска модулей веб-сервера pydoc для обработки исключений при импорте пакетов.
bpo-25554: Устранены циклические ссылки в разборе регулярных выражений.
bpo-25510: fileinput.FileInput.readline() теперь возвращает b’’ вместо ‘’ в конце, если FileInput был открыт в бинарном режиме. Патч от Ryosuke Ito.
bpo-25503: Исправлен inspect.getdoc() для унаследованных докстрингов свойств. Оригинальный патч от John Mark Vandenberg.
bpo-25515: Всегда используется os.urandom как источник случайности в uuid.uuid4.
bpo-21827: Исправлен textwrap.dedent() для случая, когда наибольший общий пробельный символ является подстрокой наименьшего ведущего пробела. Основано на патче от Robert Li.
bpo-25447: Объекты-обёртки lru_cache() теперь можно копировать и сериализовать (возвращая исходный объект без изменений).
bpo-25390: typing: не падать при Union[str, Pattern].
bpo-25441: asyncio: вызывать ошибку из drain(), когда сокет закрыт.
bpo-25410: Проведена очистка и исправлены мелкие ошибки в C-реализации OrderedDict.
bpo-25411: Улучшена поддержка Unicode в SMTPHandler за счёт более эффективного использования пакета email. Спасибо пользователю simon04 за патч.
bpo-25407: Удалены упоминания о том, что модуль formatter будет удалён в Python 3.6.
bpo-25406: Исправлена ошибка в C-реализации OrderedDict.move_to_end(), которая вызывала segmentation fault или зависание при итерации после перемещения нескольких элементов в начало упорядоченного словаря.
bpo-25364: zipfile теперь работает в сборках с отключёнными потоками.
bpo-25328: SMTPChannel из smtpd теперь корректно вызывает ValueError, если и decode_data, и enable_SMTPUTF8 установлены в true.
bpo-25316: distutils вызывает OSError вместо DistutilsPlatformError, если MSVC не установлен.
bpo-25380: Исправлен протокол для кода операции STACK_GLOBAL в pickletools.opcodes.
bpo-23972: Обновлён метод создания датаграммных сокетов в asyncio – теперь перед привязкой сокета можно задать опции reuseport и reuseaddr. По аналогии с существующим методом create_server опция reuseaddr для датаграммных сокетов по умолчанию равна True, если ОС – posix (за исключением платформы Cygwin). Патч от Chris Laws.
bpo-25304: Добавлена функция asyncio.run_coroutine_threadsafe(). Она позволяет передать корутину в цикл событий из другого потока, возвращая объект concurrent.futures.Future. Автор: Vincent Michel.
bpo-25232: Исправлен CGIRequestHandler: теперь строка запроса отделяется от URL по первому знаку вопроса (?), а не по последнему. Патч от Xiang Zhang.
bpo-24657: Предотвращено схлопывание слешей в части запроса URL в CGIRequestHandler, как если бы это был путь. Патч от Xiang Zhang.
bpo-24483: Реализация functools.lru_cache() на C теперь вычисляет хеш ключа только один раз.
bpo-22958: Конструктор и метод update класса weakref.WeakValueDictionary теперь принимают именованные аргументы self и dict.
bpo-22609: Конструктор collections.UserDict теперь принимает именованный аргумент self.
bpo-25111: Исправлено сравнение объектов traceback.FrameSummary.
bpo-25262: Добавлена поддержка опкода BINBYTES8 в реализации распаковщика (unpickler) на Python. Старшие 32 бита 64-битного размера для опкодов BINUNICODE8 и BINBYTES8 больше не игнорируются молча на 32-битных платформах в реализации на C.
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: Объявление кодировки XML, записываемое Element Tree, теперь учитывает регистр букв, заданный пользователем. Это восстанавливает возможность указывать имена кодировок в верхнем регистре, например «UTF-8», как было в Python 2.
bpo-25135: Сделано безопаснее использование deque_clear(): теперь дека опустошается перед очисткой. Это помогает избежать возможных проблем с повторной входимостью (reentrancy).
bpo-19143: Модуль platform теперь читает версию Windows из kernel32.dll, чтобы избежать прослоек совместимости.
bpo-25092: Исправлена ошибка datetime.strftime(), когда errno уже было установлено в EINVAL.
bpo-23517: Исправлено округление в методах fromtimestamp() и utcfromtimestamp() класса datetime.datetime: микросекунды теперь округляются до ближайшего целого, при равенстве – до ближайшего чётного (ROUND_HALF_EVEN), а не округлением вниз (ROUND_FLOOR). Важно, чтобы эти методы использовали тот же режим округления, что и datetime.timedelta, для сохранения свойства: (datetime(1970,1,1) + timedelta(seconds=t)) == datetime.utcfromtimestamp(t). Это также режим округления, используемый, например, round(float).
bpo-25155: Исправлены datetime.datetime.now() и datetime.datetime.utcnow() в Windows для поддержки дат после 2038 года. Это было регрессией, внесённой в Python 3.5.0.
bpo-25108: В функциях traceback print_stack(), format_stack() и extract_stack(), вызванных без аргументов, пропущены внутренние кадры.
bpo-25118: Исправлена регрессия Python 3.5.0 в os.waitpid() на Windows.
bpo-24684: socket.socket.getaddrinfo() теперь вызывает PyUnicode_AsEncodedString() вместо метода encode() у строки хоста, чтобы правильно обрабатывать пользовательские строки с методом encode(), который не возвращает байтовую строку. Кодер IDNA теперь вызывается напрямую, а не через метод encode() строки.
bpo-25060: Корректно вычисляется использование стека опкодом BUILD_MAP.
bpo-24857: Сравнение call_args с длинной последовательностью теперь корректно возвращает логическое значение, а не вызывает исключение. Патч от A Kaptur.
bpo-23144: Обеспечено, что HTMLParser.feed() возвращает все данные, даже когда convert_charrefs равно True.
bpo-24982: shutil.make_archive() с форматом «zip» теперь добавляет записи для директорий (включая пустые) в ZIP-файл.
bpo-25019: Исправлен сбой, вызванный установкой нестрокового ключа парсера expat. На основе патча John Leitch.
bpo-16180: Выход из pdb при синтаксической ошибке в файле, а не зацикливание пользователя в бесконечном цикле. Патч от Xavier de Gaye.
bpo-24891: Исправлено состояние гонки при запуске Python, если файловый дескриптор stdin (0), stdout (1) или stderr (2) закрыт во время создания объектов sys.stdin, sys.stdout и sys.stderr. Теперь в случае неудачи при создании объекта эти атрибуты устанавливаются в None, а не вызывают исключение OSError. Первоначальный патч написал Marco Paolini.
bpo-24992: Исправлены обработка ошибок и состояние гонки (связанное со сборкой мусора) в конструкторе collections.OrderedDict.
bpo-24881: Исправлена установка двоичного режима в реализации FileIO на Python для Windows и Cygwin. Патч от Akira Li.
bpo-25578: Исправлена (ещё одна) утечка памяти в SSLSocket.getpeercer().
bpo-25530: По умолчанию отключён уязвимый протокол SSLv3 при создании ssl.SSLContext.
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(). Обнаружено Джоном Лейчем и Брайсом Дарлингом.
bpo-24774: Исправлена docstring в http.server.test. Патч от Chiu-Hsiang Hsu.
bpo-21159: Улучшено сообщение в configparser.InterpolationMissingOptionError. Патч от Łukasz Langa.
bpo-20362: Корректно учитывать TestCase.longMessage в assertRegex. Патч от Ilia Kurenkov.
bpo-23572: Исправление functools.singledispatch для классов с ложными метаклассами. Патч от Ethan Furman.
asyncio: ensure_future() теперь принимает ожидаемые объекты.
IDLE¶
bpo-15348: Останавливать движок отладчика (обычно в пользовательском процессе) перед закрытием окна отладчика (работающего в процессе IDLE). Это предотвращает RuntimeErrors, которые перехватывались и игнорировались.
bpo-24455: Предотвратить зависание IDLE при: a) закрытии оболочки при активном отладчике (15347); b) закрытии отладчика кнопкой [X] (15348); и c) активации отладчика, когда он уже активен (24455). Патч от Mark Roseman делает это двумя изменениями. 1. Приостанавливать и возобновлять метод gui.interaction с помощью механизма tcl vwait, предназначенного для этой цели (вместо root.mainloop & .quit). 2. В gui.run позволить любому существующему взаимодействию сначала завершиться.
Заменить ‘The program’ на ‘Your program’ в сообщении IDLE ‘kill program?’ чтобы было понятнее, что речь идёт о текущей выполняемой пользовательской программе, а не о самом IDLE.
bpo-24750: Улучшен внешний вид строки состояния окна редактора IDLE. Патч от Mark Roseman.
bpo-25313: Изменена обработка новых встроенных цветовых тем текста для лучшего решения проблемы совместимости, вызванной добавлением IDLE Dark. Последовательно использовать пересмотренный idleConf.CurrentTheme везде в idlelib.
bpo-24782: Конфигурация расширений теперь является вкладкой в диалоге настроек IDLE, а не отдельным диалогом. Прежние вкладки теперь представлены отсортированным списком. Патч от Mark Roseman.
bpo-22726: Повторно активировать кнопку справки в диалоге конфигурации с некоторым содержимым о других кнопках и новой теме IDLE Dark.
bpo-24820: У IDLE теперь есть встроенная цветовая тема текста ‘IDLE Dark’. Она более или менее инвертированная IDLE Classic, с тёмно-синим фоном. Строки, комментарии, ключевые слова, … по-прежнему зелёные, красные, оранжевые, … . Чтобы использовать её с IDLE, выпущенными до ноября 2015, нажмите кнопку ‘Save as New Custom Theme’ и введите новое имя, например ‘Custom Dark’. Пользовательская тема будет работать с любым релизом IDLE и может быть изменена.
bpo-25224: README.txt теперь является индексом idlelib для разработчиков IDLE и любопытных пользователей. Предыдущее пользовательское содержание теперь находится в главе документации IDLE. ‘IDLE’ теперь означает ‘Integrated Development and Learning Environment’.
bpo-24820: Пользователи теперь могут задавать цвета точек останова в Settings -> Custom Highlighting. Оригинальный патч от Mark Roseman.
bpo-24972: Фон неактивного выделения теперь соответствует фону активного выделения, как настроено пользователем, на всех системах. Найденные элементы теперь всегда выделяются на Windows. Первоначальный патч от Mark Roseman.
bpo-24570: Idle: сделать подсказки и окна автодополнения видимыми на Mac, затронутых регрессией tk. Первоначальный патч от Mark Roseman.
bpo-24988: Контекстные меню ScrolledList в IDLE (используемые в отладчике) теперь работают на Mac Aqua. Патч от Mark Roseman.
bpo-24801: Сделать правый клик для контекстного меню работающим на Mac Aqua. Патч от Mark Roseman.
bpo-25173: Связать диалоговые окна tkinter с конкретным виджетом. Для Mac OSX сделать их «листом». Патч от Mark Roseman.
bpo-25198: Улучшено начальное средство просмотра HTML, теперь используемое для справки IDLE. Правильно выравнивать моноширинный текст (патч от Mark Roseman). Дать фрагменту кода очень похожий на Sphinx светло-голубовато-серый фон. Повторно использовать начальные ширину и высоту, заданные пользователями для оболочки и редактора. При использовании меню оглавления (TOC) помещать заголовок раздела в верхнюю часть экрана.
bpo-25225: Сократить и переписать раздел документации IDLE о цветах текста.
bpo-21995: поясняются некоторые различия между IDLE и консольным Python.
bpo-22820: разъясняется необходимость print при запуске файла из редактора Idle.
bpo-25224: документация: дополнен список возможностей Idle и раздел о работе без подпроцесса.
bpo-25219: обновлена документация по параметрам командной строки Idle. Некоторые параметры отсутствовали, а примечания были неверны.
bpo-24861: большая часть idlelib является приватной и может измениться. Для запуска Idle используйте idleib.idle.*. См. idlelib.__init__.__doc__.
bpo-25199: Idle: добавлены синхронизирующие комментарии для будущих сопровождающих.
bpo-16893: заменён help.txt на help.html для отображения документации Idle. Новый файл idlelib/help.html – это урезанная версия Doc/build/html/library/idle.html. Он выглядит лучше help.txt и будет лучше документировать Idle в релизе. Просмотрщик HTML на tkinter, работающий с этим файлом, написан Марком Роземаном. Класс EditorWindow.HelpDialog и файл help.txt теперь не используются и объявлены устаревшими.
bpo-24199: объявлен устаревшим неиспользуемый idlelib.idlever; возможно, будет удалён в 3.6.
bpo-24790: удалён лишний код (который также создавал конфликты между ветками 2 и 3).
Документация¶Documentation
bpo-22558: добавлены недостающие ссылки из документации на исходный код модулей, написанных на Python. Патч от Yoni Lavi.
bpo-12067: переписана секция «Сравнения» в главе «Выражения» справочника по языку. Некоторые детали сравнения смешанных типов были неверными или неоднозначными. NotImplemented актуален только на более низком уровне, чем глава «Выражения». Добавлены детали сравнения объектов range(), а также описание поведения по умолчанию и рекомендации по согласованности для пользовательских классов. Патч от Andy Maier.
bpo-24952: уточнён аргумент размера по умолчанию для stack_size() в модулях «threading» и «_thread». Патч от Mattip.
bpo-23725: переработана документация по tempfile. Отмечен устаревший статус mktemp. Патч от Zbigniew Jędrzejewski-Szmek.
bpo-24808: обновлены типы некоторых полей PyTypeObject. Патч от Joseph Weston.
bpo-22812: исправлены примеры обнаружения тестов в unittest. Патч от Pam McA’Nulty.
Тесты¶Tests
bpo-25449: добавлены тесты для подклассов OrderedDict.
bpo-25099: test_compileall больше не завершается ошибкой, когда элемент sys.path недоступен для записи (часто встречается при административных установках в Windows).
bpo-23919: предотвращает появление диалогов assert в тестовом наборе.
PCbuild\rt.batтеперь принимает неограниченное количество аргументов для передачи в regrtest.py. Ранее существовало ограничение в 9.
Сборка¶Build
bpo-24915: добавлена поддержка LLVM для сборок с PGO и использование тестового набора для генерации профилировочных данных. Первоначальный патч от Alecsandru Patrascu из Intel.
bpo-24910: MSI-установщики для Windows теперь имеют уникальные отображаемые имена.
bpo-24986: теперь Python можно собрать в Windows без ошибок, даже если внешние библиотеки недоступны.
Windows¶
bpo-25450: обновлены ярлыки для запуска Python из каталога установки.
bpo-25164: изменён каталог установки по умолчанию для всех пользователей на соответствующий каталогу для одного пользователя.
bpo-25143: улучшены сообщения об ошибках установщика для неподдерживаемых платформ.
bpo-25163: в установщике отображается правильный каталог при использовании нестандартных настроек.
bpo-25361: отключено использование инструкций SSE2 в 32-битной сборке Windows
bpo-25089: добавлено логирование в установщик на случай, если при обновлении не выбран загрузчик.
bpo-25165: При удалении Windows не следует удалять лаунчер, если остаются другие версии.
bpo-25112: В лаунчере py.exe отсутствуют значки.
bpo-25102: Установщик Windows не выполняет предварительную компиляцию для -O или -OO.
bpo-25081: Кнопка «Назад» в установщике при обновлении возвращает на страницу обновления.
bpo-25091: Увеличивает размер шрифта в установщике.
bpo-25126: Уточняется, что невеб-установщик загрузит некоторые компоненты.
bpo-25213: Восстанавливает requestedExecutionLevel в манифесте для отключения виртуализации UAC.
bpo-25022: Удалён устаревший каталог PC/example_nt/.
Инструменты/Демонстрации¶Tools/Demos
bpo-25440: Исправлен вывод python-config –extension-suffix.
Python 3.5.0 финальный¶Python 3.5.0 final
Дата релиза: 2015-09-13
Сборка¶Build
bpo-25071: Установщик Windows не должен требовать параметр TargetDir при тихой установке.
Python 3.5.0, кандидат в релизы 4¶Python 3.5.0 release candidate 4
Дата релиза: 2015-09-09
Библиотека¶Library
bpo-25029: Исправлена ошибка MemoryError в test_strptime.
Сборка¶Build
bpo-25027: Откатывает опции частичной статической сборки и добавляет vcruntime140.dll в установку Windows.
Python 3.5.0, кандидат в релизы 3¶Python 3.5.0 release candidate 3
Дата релиза: 2015-09-07
Ядро и встроенные модули¶Core and Builtins
Библиотека¶Library
bpo-24917: Выход за границы буфера при чтении в time_strftime().
bpo-24748: Для решения проблемы совместимости с py2exe и pywin32 функция imp.load_dynamic() снова игнорирует ранее загруженные модули, чтобы поддерживать замену модулей Python на модули расширений. Патч от Петра Викторина.
bpo-24635: Исправлена ошибка в typing.py, при которой isinstance([], typing.Iterable) возвращал True один раз, а затем False при последующих вызовах.
bpo-24989: Исправлено чтение за границей буфера в BytesIO.readline(), если позиция установлена за пределами размера. На основе патча Джона Лейча.
bpo-24913: Исправлена ошибка переполнения в deque.index(). Обнаружено Джоном Лейчем и Брайсом Дарлингом.
Python 3.5.0, кандидат в релизы 2¶Python 3.5.0 release candidate 2
Дата выпуска: 2015-08-25
Ядро и встроенные модули¶Core and Builtins
bpo-24769: Интерпретатор теперь корректно запускается при отключённой динамической загрузке. Патч от Petr Viktorin.
bpo-21167: Операции с NAN теперь корректно обрабатываются, когда Python компилируется с ICC, даже если не указан -fp-model strict.
bpo-24492: «Пакет», у которого отсутствует атрибут __name__ при попытке выполнить инструкцию
from .. import ..., вызовет ImportError вместо AttributeError.
Библиотека¶Library
Python 3.5.0, кандидат в релизы 1¶Python 3.5.0 release candidate 1
Дата выпуска: 2015-08-09
Ядро и встроенные модули¶Core and Builtins
bpo-24667: Изменяет размер odict во всех случаях, когда изменяется размер нижележащего словаря.
Библиотека¶Library
bpo-24824: Сигнатуры codecs.encode() и codecs.decode() теперь совместимы с pydoc.
bpo-24634: Импорт uuid не должен пытаться загружать libc в Windows
bpo-24798: _msvccompiler.py некорректно поддерживает манифесты
bpo-4395: Улучшено тестирование и документация бинарных операторов. Патч от Martin Panter.
bpo-23973: Обновление typing.py из репозитория GitHub.
bpo-23004: mock_open() теперь корректно читает бинарные данные, когда тип read_data – bytes. Начальный патч от Aaron Hill.
bpo-23888: Обработка дробных значений времени в сроке действия cookie. Патч от ssh.
bpo-23652: Добавлена возможность компиляции модуля select с заголовками libc из Linux Standard Base, которые не содержат некоторые макросы 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: Добавлен метод PATCH в wsgiref.validator. Патч от 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 и удалите записи 'fontxxx' из раздела [Editor Window]. Исправление от Mark Roseman.
bpo-21192: Редактор Idle. При запуске файла его имя отображается в строке перезапуска. Лишние приглашения больше не выводятся. Оригинальный патч от Adnan Umer.
bpo-13884: Меню Idle. Удалены отрывные линии. Патч от Roger Serwy.
Документация¶Documentation
bpo-24129: Уточнена справочная документация по разрешению имён. В частности, убрано предположение, что читатели знакомы со схемой разрешения имён, используемой в Python до введения лексической области видимости для пространств имён функций. Патч от Ivan Levkivskyi.
bpo-20769: Улучшена документация по reload(). Патч от Dorian Pula.
bpo-23589: Из FAQ удалено дублирующееся предложение. Патч от Yongzhi Pan.
bpo-24729: Исправлено руководство по вводу-выводу – приведено в соответствие с реализацией параметра encoding функции open.
Тесты¶Tests
bpo-24751: При запуске regrtest с опцией командной строки
-wпрогон тестов больше не помечается как неудачный, если при повторном запуске все тесты проходят.
Python 3.5.0 бета 4¶Python 3.5.0 beta 4
Дата выпуска: 2015-07-26
Ядро и встроенные модули¶Core and Builtins
bpo-23573: Восстановлена оптимизация методов bytes.rfind() и bytearray.rfind() для однобайтового аргумента в Linux.
bpo-24569: Обеспечена более согласованная обработка PEP 448 при вычислении словаря.
bpo-24583: Исправлен сбой при изменении множества во время его обновления.
bpo-24407: Исправлен сбой при изменении словаря во время его обновления.
bpo-24619: Новый подход к токенизации async/await. Как следствие, теперь возможно создавать однострочные функции вида ‘async def foo(): await ..’.
bpo-24687: Устранена утечка ссылок при SyntaxError в аннотациях параметров функций.
bpo-15944: memoryview: разрешены произвольные форматы при приведении к bytes. Патч от Martin Panter.
Библиотека¶Library
bpo-23441: rcompleter теперь выводит символ табуляции вместо отображения возможных вариантов завершения для пустого слова. Начальный патч от Martin Sekera.
bpo-24683: Исправлены сбои в функциях _json, вызываемых с аргументами неподходящего типа.
bpo-21697: shutil.copytree() теперь корректно обрабатывает символические ссылки, указывающие на каталоги. Патч от Eduardo Seabra и Thomas Kluyver.
bpo-14373: Исправлено падение с ошибкой сегментации при вызове gc.collect() во время построения lru_cache (реализация на C).
bpo-24695: Исправлена регрессия в traceback.print_exception(). Если exc_traceback равен None, не следует выводить заголовок трассировки, как описано в документации.
bpo-24620: Random.setstate() теперь проверяет значение последнего элемента состояния.
bpo-22485: Исправлена проблема, из-за которой
inspect.getsourceвозвращал некорректные результаты для вложенных функций.bpo-22153: Улучшена документация по unittest. Патч от Martin Panter и evilzero.
bpo-24580: Символьные ссылки на открытую группу в шаблонах re теперь явно запрещены, как и числовые ссылки на группы.
bpo-24206: Исправлены методы __eq__ и __ne__ классов inspect.
bpo-24631: Исправлена регрессия в модуле timeit при многострочной настройке setup.
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() теперь всегда возвращает bytes, а не str.
bpo-18684: Исправлено чтение за пределами буфера в модуле re.
bpo-24259: tarfile теперь возбуждает ReadError, если архив обрезан внутри сегмента данных.
bpo-15014: SMTP.auth() и SMTP.login() теперь поддерживают необязательный аргумент initial-response (из RFC 4954) для команды SMTP AUTH.
bpo-24669: Исправлен inspect.getsource() для функций ‘async def’. Патч от Kai Groner.
bpo-24688: ast.get_docstring() для функций ‘async def’.
Сборка¶Build
bpo-24603: Обновлены сборки Windows и установщик OS X 10.5 для использования OpenSSL 1.0.2d.
Python 3.5.0 бета 3¶Python 3.5.0 beta 3
Дата выпуска: 2015-07-05
Ядро и встроенные модули¶Core and Builtins
bpo-24467: Исправлена возможная ошибка чтения за пределами буфера в bytearray. Объект bytearray теперь всегда выделяет место для завершающего нулевого байта, и его буфер теперь всегда завершается нулём.
Обновление до Unicode 8.0.0.
bpo-24345: Добавлен слот Py_tp_finalize для стабильного ABI.
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.
Библиотека¶Library
bpo-21750: mock_open.read_data теперь можно читать из каждого экземпляра, как это было в Python 3.3.
bpo-24552: Исправлено использование после освобождения в случае ошибки в модуле _pickle.
bpo-24514: tarfile теперь допускает числовые поля, состоящие только из пробельных символов.
bpo-19176: Исправлены ошибки, связанные с doctype(), в C-реализации ElementTree. Подкласс XMLParser с методом doctype() по умолчанию больше не выдаёт предупреждение об устаревании. Прямой вызов doctype() теперь выдаёт предупреждение. Метод doctype() парсера теперь не вызывается, если вызывается doctype() целевого объекта. На основе патча от Martin Panter.
bpo-20387: Восстановлена семантическая корректность преобразования туда-обратно в tokenize/untokenize для блоков с отступами табуляцией.
bpo-24456: Исправлена возможная ошибка чтения за пределами буфера в функциях adpcm2lin() и lin2adpcm() модуля audioop.
bpo-24336: Декоратор contextmanager теперь работает с функциями, имеющими именованные аргументы с именами «func» и «self». Патч от Martin Panter.
bpo-24522: Исправлено возможное целочисленное переполнение в ускорителе модуля json.
bpo-24489: Обеспечено, чтобы ранее установленный errno языка C не мешал работе cmath.polar().
bpo-24408: Исправлен AttributeError в методах measure() и metrics() класса tkinter.Font.
bpo-14373: C-реализация functools.lru_cache() теперь может использоваться с методами.
bpo-24347: Установлено KeyError, если PyDict_GetItemWithError возвращает NULL.
bpo-24348: Убраны лишние incref/decref.
bpo-24359: Проверка изменения размера OrderedDict во время итерации.
bpo-24368: Поддержка именованных аргументов в методах OrderedDict.
bpo-24362: Упрощена логика изменения размера быстрых узлов в C-реализации OrderedDict.
bpo-24377: Исправлена утечка ссылки в OrderedDict.__repr__.
bpo-24369: Защита от изменения ключей во время итерации.
Тесты¶Tests
Документация¶Documentation
Сборка¶Build
bpo-24432: Обновлены сборки Windows и установщик OS X 10.5 для использования OpenSSL 1.0.2c.
Python 3.5.0 бета 2¶Python 3.5.0 beta 2
Дата выпуска: 2015-05-31
Ядро и встроенные модули¶Core and Builtins
bpo-24284: Методы startswith и endswith класса str больше не возвращают True при поиске пустой строки, если индексы полностью выходят за диапазон.
bpo-24115: Обновлены вызовы PyObject_IsTrue(), PyObject_Not(), PyObject_IsInstance(), PyObject_RichCompareBool() и _PyDict_Contains() для корректной проверки и обработки ошибок.
bpo-24328: Исправлен импорт модулей-расширений из одного символа.
bpo-11205: В словарных литералах ключ вычисляется до значения.
bpo-24285: Исправлен регресс, препятствовавший импорту модулей-расширений изнутри пакетов. Патч от Petr Viktorin.
Библиотека¶Library
bpo-23247: Исправлен сбой в StreamWriter.reset() кодеков CJK.
bpo-24270: Добавлены функции math.isclose() и cmath.isclose() в соответствии с PEP 485. Предложено Chris Barker и Tal Einat.
bpo-5633: Исправлен timeit, когда инструкция является строкой, а настройка – нет.
bpo-24326: Исправлен audioop.ratecv() с нестандартным аргументом weightB. Оригинальный патч от David Moore.
bpo-16991: Добавлена C-реализация OrderedDict.
bpo-23934: Исправлен inspect.signature для корректного отказа для встроенных типов, не имеющих информации о сигнатуре. Первоначальный патч от James Powell.
Python 3.5.0 бета 1¶Python 3.5.0 beta 1
Дата выпуска: 2015-05-24
Ядро и встроенные модули¶Core and Builtins
bpo-24276: Исправлена оптимизация геттера дескриптора property.
bpo-24268: PEP 489: Многофазная инициализация модулей расширений. Исправление от Петра Викторина.
bpo-23955: Добавлена опция pyvenv.cfg для подавления поиска в реестре/окружении при генерации sys.path на Windows.
bpo-24257: Исправлена системная ошибка при сравнении поддельных объектов types.SimpleNamespace.
bpo-22939: Исправлено целочисленное переполнение в объекте итератора. Исправление от Клемана Руо.
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(). Исправление от Joe Jevnik.
bpo-23911: Перенос загрузочного кода importlib, основанного на путях, в отдельный замороженный модуль.
bpo-24192: Исправление импорта пакетов пространств имён.
bpo-24022: Исправление сбоя токенизатора при обработке не поддающегося декодированию исходного кода.
bpo-9951: Добавлен метод hex() для bytes, bytearray и memoryview.
bpo-22906: PEP 479: Изменение обработки StopIteration внутри генераторов.
bpo-24017: PEP 492: Корутины с синтаксисом async и await.
Библиотека¶Library
bpo-14373: Добавлена реализация на C для functools.lru_cache(). Основано на патчах от Matt Joiner и Alexey Kachayev.
bpo-24230: Модуль tempfile теперь принимает bytes для параметров prefix, suffix и dir и возвращает bytes в таких случаях (соответствует API модуля os).
bpo-22189: collections.UserString теперь поддерживает __getnewargs__(), __rmod__(), casefold(), format_map(), isprintable() и maketrans(). Исправление от Joe Jevnik.
bpo-24244: Предотвращение завершения при обнаружении неверной форматной строки в strftime на Windows.
bpo-23973: PEP 484: Добавление модуля typing.
bpo-23086: Абстрактный базовый класс collections.abc.Sequence() добавил параметры start и stop в метод index() примеси. Исправление от Devin Jeanpierre.
bpo-20035: Модуль
tkinter._fix, использовавшийся для настройки окружения Tcl/Tk на Windows, заменён на приватную функцию в модуле_tkinter, которая не вносит постоянных изменений в окружение.bpo-24257: Исправлена ошибка сегментации в конструкторе sqlite3.Row при поддельном типе курсора.
bpo-15836: Утверждения assertRaises(), assertRaisesRegex(), assertWarns() и assertWarnsRegex() теперь проверяют тип первого аргумента для предотвращения возможных ошибок пользователя. Основано на патче от Daniel Wagner-Hall.
bpo-9858: Добавление недостающих заглушек методов в _io.RawIOBase. Исправление от Laura Rupprecht.
bpo-22955: Объекты attrgetter, itemgetter и methodcaller в модуле operator теперь поддерживают сериализацию (pickling). Добавлено читаемое и воспроизводимое 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() для усиления уникальности идентификатора сообщения.
bpo-24091: исправлены различные крахи в граничных случаях в C-реализации ElementTree.
bpo-21931: msilib.FCICreate() теперь вызывает TypeError при некорректном аргументе вместо ValueError с ложным кодом ошибки FCI. Исправление от Jeffrey Armstrong.
bpo-13866: в urllib.parse.urlencode добавлен аргумент quote_via.
bpo-20098: новая опция политики mangle_from для email: по умолчанию True для compat32, но False для всех остальных политик.
bpo-24211: библиотека email теперь поддерживает RFC 6532: может генерировать заголовки, используя utf-8 вместо закодированных слов.
bpo-16314: добавлена поддержка сжатия LZMA в distutils.
bpo-21804: poplib теперь поддерживает RFC 6856 (UTF8).
bpo-18682: оптимизированы функции pprint для встроенных скалярных типов.
bpo-22027: smtplib теперь поддерживает RFC 6531 (SMTPUTF8).
bpo-23488: объекты генератора случайных чисел теперь потребляют в 2 раза меньше памяти на 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: методы peek и read1 класса BufferedReader теперь вызывают ValueError при вызове на закрытом объекте. Правка от John Hergenroeder.
bpo-21795: smtpd теперь поддерживает расширение 8BITMIME, когда новый аргумент конструктора decode_data установлен в False.
bpo-24155: оптимизирован heapq.heapify() для лучшей кэш-производительности при построении кучи из больших списков.
bpo-21800: imaplib теперь поддерживает RFC 5161 (enable), RFC 6855 (utf8/internationalized email) и автоматически кодирует не-ASCII имена пользователей и пароли в UTF8.
bpo-20274: при вызове _sqlite.Connection теперь выдаётся ошибка, если переданы именованные аргументы. Ранее они молча игнорировались.
bpo-20274: удалены игнорируемые и ошибочные параметры «kwargs» из трёх методов METH_VARARGS в _sqlite.Connection.
bpo-24134: проверки assertRaises(), assertRaisesRegex(), assertWarns() и assertWarnsRegex() теперь выдают предупреждение об устаревании, если вызываемый объект равен None или в режиме контекстного менеджера переданы именованные аргументы, кроме msg.
bpo-24018: добавлен абстрактный базовый класс collections.abc.Generator. Предложено Stefan Behnel.
bpo-23880: getint() и getdouble() из Tkinter теперь поддерживают Tcl_Obj. getdouble() из Tkinter теперь поддерживает любые числа (в частности int).
bpo-22619: добавлена поддержка отрицательного предела в модуле traceback. На основе правки Dmitry Kazakov.
bpo-24094: исправлен возможный крах в json.encode при использовании плохо ведущих себя подклассов dict.
bpo-9246: на POSIX os.getcwd() теперь поддерживает пути длиннее 1025 байт. Правка от William Orr.
bpo-17445: добавлена difflib.diff_bytes() для поддержки сравнения строк байт (исправляет регрессию из Python 2).
bpo-23917: возврат к последовательной компиляции, если ProcessPoolExecutor не существует. Правка от Claudiu Popa.
bpo-23008: исправлено разрешение атрибутов с булевым значением False в pydoc.
Исправление ошибки asyncio issue 235: метод put у LifoQueue и PriorityQueue не увеличивал счётчик незавершённых задач (ошибка возникла при объединении очередей 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’. Вклад Юрия Селиванова.
bpo-24179: поддержка ‘async for’ для asyncio.StreamReader. Вклад Юрия Селиванова.
bpo-24184: добавлены абстрактные базовые классы AsyncIterator и AsyncIterable в collections.abc. Вклад Юрия Селиванова.
bpo-22547: реализован информативный __repr__ для inspect.BoundArguments. Вклад Юрия Селиванова.
bpo-24190: реализован метод inspect.BoundArgument.apply_defaults(). Вклад Юрия Селиванова.
bpo-20691: добавлен аргумент ‘follow_wrapped’ в inspect.Signature.from_callable() и inspect.signature(). Вклад Юрия Селиванова.
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.
Тесты¶Tests
Документация¶Documentation
bpo-22155: добавлен подраздел File Handlers с createfilehandler в документацию tkinter. Удалён устаревший пример из FAQ. Исправление от Martin Panter.
bpo-24029: документировано поведение связывания имён для импорта подмодулей.
bpo-24077: исправлена опечатка в man-странице для опции командной строки -I: должно быть -s, а не -S.
Инструменты/Демонстрации¶Tools/Demos
bpo-24000: улучшено отображение конвертеров Argument Clinic на устаревшие «форматные единицы». Документация обновлена соответствующим образом.
bpo-24001: конвертеры Argument Clinic теперь используют accept={type} вместо types={‘type’} для указания типов, которые принимает конвертер.
bpo-23330: h2py теперь поддерживает произвольные имена файлов в #include.
bpo-24031: make patchcheck теперь также поддерживает git-чекауты.
Python 3.5.0 alpha 4¶
Дата выпуска: 2015-04-19
Ядро и встроенные модули¶Core and Builtins
bpo-22980: в Linux, GNU/kFreeBSD и Hurd расширения на C теперь включают triplet архитектуры в имя расширения, чтобы упростить тестирование сборок для разных ABI в одном рабочем дереве. В OS X имя расширения теперь содержит информацию в стиле PEP 3149.
bpo-22631: Добавлена Linux-специфичная константа сокета CAN_RAW_FD_FRAMES. Патч от Джо Джевника.
bpo-23726: Сборщик мусора (GC) больше не включается для пользовательских подклассов не-GC типов, не добавляющих новые поля. Патч от Юджина Тодера.
bpo-23309: Устранена взаимная блокировка при завершении, если поток-демон прерван во время удержания блокировки буферизованного объекта ввода-вывода, а главный поток пытается использовать тот же объект (обычно stdout или stderr). Вместо этого выводится фатальная ошибка.
bpo-22977: Исправлено форматирование сообщений об ошибках Windows в Wine. Патч от Мартина Пантера.
bpo-23466: Форматы %c, %o, %x и %X в форматировании bytes теперь вызывают TypeError, если аргумент не целое число.
bpo-24044: Исправлено возможное разыменование нулевого указателя в list.sort при нехватке памяти.
bpo-21354: Функция PyCFunction_New снова доступна в DLL Python.
Библиотека¶Library
bpo-23840: tokenize.open() теперь при ошибке закрывает временный бинарный файл, чтобы устранить предупреждение о ресурсах.
bpo-16914: Новый уровень отладки 2 в smtplib добавляет временные метки к отладочному выводу.
bpo-7159: urllib.request теперь может автоматически отправлять учётные данные после первого ответа 401. Это расширение является надмножеством улучшения из bpo-19494 и заменяет его.
bpo-23703: Исправлен регресс в urljoin(), возникший в версии 901e4e52b20a. Патч от Демиана Брехта.
bpo-4254: Добавлен _curses.update_lines_cols(). Патч от Арнона Яари.
bpo-19933: Для round добавлен аргумент по умолчанию ndigits. Патч от Вайраски Кока.
bpo-23193: В tarfile.TarFile.extract и tarfile.TarFile.extractall добавлен параметр numeric_owner. Патч от Майкла Фогта и Эрика Смита.
bpo-23342: Добавлена функция subprocess.run(), которая возвращает экземпляр CalledProcess, что обеспечивает более единообразный API по сравнению с существующими функциями call*.
bpo-21217: inspect.getsourcelines() теперь пытается вычислить начальную и конечную строки по объекту кода, что исправляет проблему при использовании лямбда-функции в качестве аргумента декоратора. Патч от Томаса Баллинджера и Эллисон Каптур.
bpo-24521: Исправлены возможные целочисленные переполнения в модуле pickle.
bpo-22931: Разрешены символы '[' и ']' в значениях cookie.
Атрибут keywords у functools.partial теперь всегда является словарём.
bpo-23811: Добавлен отсутствующий символ новой строки в сообщение об ошибке PyCompileError. Патч от Алекса Шкопа.
bpo-21116: Предотвращено чрезмерное потребление памяти при выделении разделяемого массива multiprocessing размером более 50% доступной оперативной памяти. Патч от Медерика Бокьена.
bpo-22982: Улучшена обработка метки порядка байтов (BOM) при перемещении на несколько позиций в файле текста, доступном для записи.
bpo-23464: Удалена устаревшая asyncio.JoinableQueue.
bpo-23529: Ограничен размер распакованных данных при чтении из GzipFile, BZ2File или LZMAFile. Это предотвращает атаки типа «отказ в обслуживании» с использованием сжатых «бомб» (сжатых данных, которые распаковываются до огромного размера). Патч от Мартина Пантера и Николауса Рата.
bpo-21859: Добавлена реализация io.FileIO на Python.
bpo-23865: Методы close() в нескольких модулях теперь идемпотентны и более надёжны при завершении. Если необходимо освободить несколько ресурсов, все они освобождаются, даже если возникают ошибки.
bpo-23400: В случае недоступности sem_open теперь возбуждается одно и то же исключение в Python 2 и 3. Патч от Дэвина Поттса.
bpo-10838: Модуль subprocess теперь включает SubprocessError и TimeoutError в список экспортируемых имён для пользователей, которым хватает смелости использовать
from subprocess import *.bpo-23411: В urllib.parse.__all__ добавлены DefragResult, ParseResult, SplitResult, DefragResultBytes, ParseResultBytes и SplitResultBytes. Патч от Мартина Пантера.
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: Исправлено форматирование сообщений об ошибках ctypes в Cygwin. Патч от Makoto Kato.
bpo-15582: inspect.getdoc() теперь следует по цепочкам наследования.
bpo-2175: Анализаторы SAX теперь поддерживают символьный поток объекта InputSource.
bpo-16840: Tkinter теперь поддерживает 64-битные целые, добавленные в Tcl 8.4, и целые произвольной точности, добавленные в Tcl 8.5.
bpo-23834: Исправление socket.sendto(): для хранения результата sendto() используется тип Py_ssize_t из 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: Сериализация большего числа «lookupable» объектов (таких как непривязанные методы или вложенные классы) теперь поддерживается протоколами pickle < 4.
bpo-13583: sqlite3.Row теперь поддерживает срезовую индексацию.
bpo-18473: Исправлены отображения pickle, совместимые с 2to3 и 3to2. Исправлены неоднозначные обратные отображения. Добавлено много новых отображений. Отображение импорта больше не применяется к модулям, уже сопоставленным с полным именем.
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: Новый анализатор заголовков email теперь обрабатывает дублирующиеся имена параметров MIME без ошибки, аналогично поведению get_param.
bpo-22117: Исправление os.utime(): теперь он округляет метку времени в сторону минус бесконечности (-inf) вместо округления к нулю.
bpo-23310: Исправлен инициализатор MagicMock для работы с __methods__, как и configure_mock(). Патч от Kasia Jachim.
Сборка¶Build
Тесты¶Tests
Инструменты/Демонстрации¶Tools/Demos
bpo-18128: pygettext теперь использует стандартный формат +NNNN в заголовке POT-Creation-Date.
bpo-23935: Понимание Argument Clinic форматов, принимающих bytes, bytearrays и буферы, теперь согласовано как с документацией, так и с реализацией.
bpo-23944: Argument Clinic теперь переносит длинные прототипы impl на 78-м столбце.
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
Ядро и встроенные модули¶Core and Builtins
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: Исправлены лямбды-генераторы. Патч от Bruno Cauet.
bpo-23629: Исправлена реализация __sizeof__ по умолчанию для объектов переменного размера.
Библиотека¶Library
bpo-14260: Атрибут groupindex объекта шаблона регулярного выражения теперь является неизменяемым отображением.
bpo-23792: Игнорировать KeyboardInterrupt, когда активен пейджер pydoc. Это повторяет поведение стандартных пейджеров Unix и предотвращает закрытие pipepager, пока сам пейджер ещё работает.
bpo-23775: pprint() для OrderedDict теперь выводит то же представление, что и repr().
bpo-23765: Удалены вызовы IsBadStringPtr в ctypes
bpo-22364: Улучшены некоторые сообщения об ошибках в модуле re с использованием регулярных выражений для подсказок.
bpo-23742: ntpath.expandvars() больше не теряет несбалансированные одинарные кавычки.
bpo-21717: Функция zipfile.ZipFile.open теперь поддерживает режим ‘x’ (эксклюзивное создание).
bpo-21802: Читатель в BufferedRWPair теперь закрывается, даже если при закрытии писателя в 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: Исправлены некоторые крайние случаи при разбиении слов в tetxtwrap. Устранена квадратичная сложность при разбиении длинных слов.
bpo-4727: Модуль copy теперь использует протокол pickle 4 (PEP 3154) и поддерживает копирование экземпляров классов, чей метод __new__ принимает только именованные аргументы.
bpo-23491: Добавлен модуль zipapp для поддержки создания исполняемых zip-архивов с кодом Python. Зарегистрированы расширения “.pyz” и “.pyzw” для этих архивов в Windows (PEP 441).
bpo-23657: Устранены явные проверки на str в zipapp, добавлена поддержка объектов pathlib.Path в качестве аргументов.
bpo-23688: Добавлена поддержка произвольных байтоподобных объектов и устранено ненужное копирование memoryview в gzip.GzipFile.write(). Оригинальный патч Вольфганга Майера.
bpo-23252: Добавлена поддержка записи ZIP-файлов в непозиционируемые потоки.
bpo-23647: Увеличено значение MAXLINE в imaplib для поддержки современных размеров почтовых ящиков.
bpo-23539: Если body равен None, http.client.HTTPConnection.request теперь устанавливает Content-Length в 0 для заголовков PUT, POST и PATCH, чтобы избежать ошибок 411 от некоторых веб-серверов.
bpo-22351: Конструктор nntplib.NNTP больше не оставляет соединение и сокет открытыми до очистки сборщиком мусора. Патч Мартина Пантера.
bpo-23704: Объекты collections.deque() теперь поддерживают методы index(), insert() и copy(). Это позволяет регистрировать deques как MutableSequence и улучшает их взаимозаменяемость со списками.
bpo-23715:
signal.sigwaitinfo()иsignal.sigtimedwait()теперь повторяются при прерывании сигналом, не входящим в параметр sigset, если обработчик сигнала не вызывает исключение. signal.sigtimedwait() пересчитывает тайм-аут с помощью монотонных часов при повторной попытке.bpo-23001: Некоторые функции в модулях mmap, ossaudiodev, socket, ssl и codecs, которые принимали только байтоподобные объекты только для чтения, теперь также принимают байтоподобные объекты для записи.
bpo-23646: Если time.sleep() прерывается сигналом, ожидание теперь повторяется с пересчитанной задержкой, за исключением случаев, когда обработчик сигнала вызывает исключение (PEP 475).
bpo-23136: _strptime теперь единообразно обрабатывает все дни недели 0, включая 30 декабря предыдущего года. Основано на патче Джима Кэрролла.
bpo-23700: Итератор NamedTemporaryFile теперь хранит ссылку на экземпляр NamedTemporaryFile. Патч Богуслава Кабрды.
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() теперь содержит все атрибуты. Оптимизирована проверка ключей и экранирование значений. Добавлены новые тесты. Оригинальный патч Демиана Брехта.
bpo-18983: Разрешён выбор единиц вывода в timeit. Патч Джулиана Гинди.
bpo-23631: Исправлена работа traceback.format_list при изменённом traceback.
bpo-23568: Добавлена поддержка rdivmod для объектов MagicMock(). Патч Хокана Лёвдаля.
bpo-2052: Добавлен параметр charset в HtmlDiff.make_file().
bpo-23668: Добавлена поддержка os.truncate и os.ftruncate в Windows.
bpo-23138: Исправлен разбор куки с отсутствующими ключами или значениями в cookiejar. Патч Демиана Брехта.
bpo-23051: Методы imap() и imap_unordered() multiprocessing.Pool теперь обрабатывают исключения, возникающие в итераторе. Патч Алона Диаманта и Дэвина Поттса.
bpo-23581: Добавлена поддержка matmul для MagicMock. Патч Хокана Лёвдаля.
bpo-23566: Функции enable(), register(), dump_traceback() и dump_traceback_later() модуля faulthandler теперь принимают файловые дескрипторы. Патч Вэй Ву.
bpo-22928: Отключены инъекции HTTP-заголовков в http.client. Оригинальный патч Демиана Брехта.
bpo-23615: Модули bz2, tarfile и tokenize теперь можно перезагружать с помощью imp.reload(). Патч Томаса Клюйвера.
bpo-23605: os.walk() теперь вызывает os.scandir() вместо os.listdir(). Использование os.scandir() уменьшает количество вызовов os.stat(). Первоначальный патч написан Беном Хойтом.
Сборка¶Build
bpo-23585: make patchcheck проверяет, что интерпретатор собран.
Тесты¶Tests
Инструменты/Демонстрации¶Tools/Demos
bpo-22826: Результат open() в Tools/freeze/bkfile.py теперь лучше совместим с обычными файлами (в частности, теперь он поддерживает протокол управления контекстом).
Python 3.5.0 alpha 2¶
Дата выпуска: 2015-03-09
Ядро и встроенные модули¶Core and Builtins
bpo-23571: PyObject_Call() и PyCFunction_Call() теперь вызывают SystemError, если функция возвращает результат и порождает исключение. SystemError привязывается к предыдущему исключению.
Библиотека¶Library
bpo-22524: Новая функция os.scandir(), часть PEP 471: “os.scandir() – лучший и более быстрый итератор директорий”. Автор патча Бен Хойт.
bpo-23103: Снижено потребление памяти для IPv4Address и IPv6Address.
bpo-21793: BaseHTTPRequestHandler снова записывает код ответа как число, а не как строковое представление перечисления. Патч от Демиана Брехта.
bpo-23476: В модуле ssl включён флаг OpenSSL X509_V_FLAG_TRUSTED_FIRST для хранилищ сертификатов, когда он доступен.
bpo-23576: Устранение зависания при чтении SSL, когда на уровне SSL достигнут EOF, но нижележащее соединение не закрыто.
bpo-23504: Добавлен __all__ в модуль types.
bpo-23563: Оптимизированы вспомогательные функции в urllib.parse.
bpo-7830: Устранение вложенности functools.partial.
bpo-20204: Добавлен атрибут __module__ классам _tkinter.
bpo-19980: Улучшена help() для нераспознанных строк. help('') теперь показывает справку по str. help('help') показывает справку по help(). Оригинальный патч от Марка Лоуренса.
bpo-23521: Исправлена реализация деления timedelta на чистом Python. Устранено OverflowError из
timedelta * floatдля некоторых чисел с плавающей запятой; исправлено округление при истинном делении timedelta.bpo-21619: Объекты Popen больше не оставляют зомби после выхода в операторе with, если канал был разорван. Патч от Мартина Пантера.
bpo-22936: Сделано возможным показывать локальные переменные в трассировках как для модуля traceback, так и для unittest.
bpo-15955: Добавлена опция для ограничения размера вывода в bz2.decompress(). Патч от Николауса Рата.
bpo-6639: Функции модуля turtle на уровне модуля больше не вызывают TclError после закрытия окна.
bpo-814253: Ссылки на группы и условные ссылки на группы теперь работают в просмотре назад (lookbehind) в регулярных выражениях. (См. также: bpo-9179)
bpo-23215: Многобайтовые кодеки с пользовательскими обработчиками ошибок, игнорирующими ошибки, потребляли слишком много памяти и вызывали SystemError или MemoryError. Оригинальный патч от Алекси Торхамо.
bpo-5700: io.FileIO() вызывал flush() после закрытия файла. flush() не вызывался в close(), если closefd=False.
bpo-23374: Исправлен сбой pydoc с не-ASCII файлами, когда кодировка stdout отличается от кодировки файловой системы (например, на Mac OS).
bpo-23481: Удалён RC4 из списка шифров по умолчанию модуля SSL.
bpo-21548: Исправлены pydoc.synopsis() и pydoc.apropos() для модулей с пустыми строками документации.
bpo-22885: Исправлена уязвимость, позволяющая выполнение произвольного кода в модуле dbm.dumb. Оригинальный патч от Клаудиу Попа.
bpo-23239: ssl.match_hostname() теперь поддерживает сопоставление IP-адресов.
bpo-23146: Исправлена некорректная обработка абсолютных путей Windows с прямыми слешами в pathlib.
bpo-23096: Представление чисел с плавающей запятой в pickle с протоколом 0 теперь одинаково для реализаций на Python и C.
bpo-19105: pprint теперь эффективнее использует свободное место справа.
bpo-14910: Добавлен параметр allow_abbrev в argparse.ArgumentParser. Патч от Джонатана По (Jonathan Paugh), Стивена Бетарда (Steven Bethard), paul j3 и Дэниела Эрикссона (Daniel Eriksson).
bpo-21717: tarfile.open() теперь поддерживает режим 'x' (исключительное создание).
bpo-23344: marshal.dumps() теперь в среднем на 20–25% быстрее.
bpo-20416: marshal.dumps() с протоколами 3 и 4 теперь в среднем на 40–50% быстрее.
bpo-23421: Исправлено сжатие в CLI tarfile. Патч от wdv4758h.
bpo-23367: Исправлены возможные переполнения в модуле unicodedata.
bpo-23361: Исправлено возможное переполнение в коде создания подпроцесса для Windows.
logging.handlers.QueueListener теперь принимает именованный аргумент respect_handler_level; если он равен True, сообщения будут передаваться обработчикам с учётом их уровней.
bpo-19705: В turtledemo добавлена визуальная демонстрация алгоритма сортировки. Оригинальный патч от Джейсона Йео (Jason Yeo).
bpo-23801: Исправлена ошибка, из-за которой cgi.FieldStorage не всегда игнорировал всю преамбулу multipart-тела.
Сборка¶Build
C API¶
bpo-20204: Теперь выводится предупреждение об устаревании для встроенных типов, у которых нет атрибута __module__.
Windows¶
Python 3.5.0 alpha 1¶
Дата выпуска: 2015-02-08
Ядро и встроенные модули¶Core and Builtins
bpo-23285: PEP 475 – обработка EINTR.
bpo-22735: Исправлено множество граничных случаев (включая аварийные завершения), связанных с пользовательскими реализациями mro().
bpo-22896: Избегайте использования PyObject_AsCharBuffer(), PyObject_AsReadBuffer() и PyObject_AsWriteBuffer().
bpo-21295: Откат некоторых изменений (bpo-16795) в номерах строк и смещениях столбцов AST, которые привели к регрессу.
bpo-22986: В некоторых случаях разрешено изменять __class__ объекта между динамическим и статическим типом.
bpo-15859: PyUnicode_EncodeFSDefault(), PyUnicode_EncodeMBCS() и PyUnicode_EncodeCodePage() теперь вызывают исключение, если объект не является строкой Unicode. Для PyUnicode_EncodeFSDefault() так уже было на платформах, отличных от Windows. Патч написан Кэмпбеллом Бартоном (Campbell Barton).
bpo-21408: Стандартный __ne__() теперь возвращает NotImplemented, если __eq__() вернул NotImplemented. Оригинальный патч от Мартина Пантера (Martin Panter).
bpo-23321: Исправлен сбой в str.decode(), когда обработчик ошибок возвращал строку замены, длиннее некорректных входных данных.
bpo-22286: Обработчики ошибок backslashreplace теперь работают при декодировании и трансляции.
bpo-23253: Отложенная загрузка ShellExecute[AW] в os.startfile для снижения накладных расходов при запуске на Windows.
bpo-22038: pyatomic.h теперь использует stdatomic.h или встроенные функции GCC для атомарного доступа к памяти, если они доступны. Патч написан Vitor de Lima и Gustavo Temple.
bpo-20284: Для bytes и bytearray добавлено форматирование с %-интерполяцией (также известное как printf).
bpo-23048: Исправлен выход из бесконечного цикла while в pdb.
bpo-20335: Конструктор bytes теперь возбуждает TypeError, если параметры encoding или errors заданы нестроковым аргументом. На основе патча от Renaud Blanch.
bpo-22834: Если текущая рабочая директория оказывается установленной на несуществующую, то import больше не будет возбуждать FileNotFoundError.
bpo-22869: Код запуска и остановки интерпретатора перенесён в новый выделенный модуль pylifecycle.c
bpo-22847: Повышена эффективность кеширования методов.
bpo-22335: Исправлен сбой при попытке увеличить bytearray до 0x7fffffff байт на 32-битной платформе.
bpo-22653: Исправлен отказ утверждения в режиме отладки при повторной вставке в словарь в режиме отладки.
bpo-22643: Исправлено целочисленное переполнение в операциях регистра Unicode (upper, lower, title, swapcase, casefold).
bpo-17636: Теперь поддерживаются циклические импорты, включающие относительные импорты.
bpo-22604: Исправлена ошибка утверждения в режиме отладки при делении комплексного числа на (nan+0j).
bpo-21052: Не возбуждать ImportWarning, если sys.path_hooks или sys.meta_path установлены в None.
bpo-16518: В сообщениях об ошибках теперь используется «требуется bytes-подобный объект» вместо гораздо более загадочного «'x' не поддерживает протокол буфера».
bpo-22470: Исправлены проблемы целочисленного переполнения в обработчиках ошибок «backslashreplace», «xmlcharrefreplace» и «surrogatepass».
bpo-22540: ускорены
PyObject_IsInstanceиPyObject_IsSubclassв распространённом случае, когда второй аргумент имеет метаклассtype.bpo-18711: Добавлена новая функция
PyErr_FormatV, аналогичнаяPyErr_Format, но принимающая аргументva_list.bpo-22520: Исправлена проверка переполнения при создании repr объекта Unicode.
bpo-22519: Исправлена проверка переполнения в PyBytes_Repr.
bpo-22518: Исправлены проблемы целочисленного переполнения в кодировке latin-1.
bpo-16324: Параметр _charset класса MIMEText теперь также принимает экземпляры email.charset.Charset. Первоначальный патч от Claude Paroz.
bpo-1764286: Исправлена функция inspect.getsource() для поддержки декорированных функций. Патч от Claudiu Popa.
bpo-18554: os.__all__ включает функции posix.
bpo-21391: В модуле shutil используется os.path.abspath.
bpo-11471: Избегать генерации инструкции JUMP_FORWARD в конце if-блока, если нет ветки else. Первоначальный патч от Eugene Toder.
bpo-22215: Теперь возбуждается ValueError вместо TypeError, если аргумент str или bytes содержит недопустимый нулевой символ или байт.
bpo-22258: Исправлена внутренняя функция set_inheritable() на Illumos. Эта платформа предоставляет функцию
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») теперь можно ссылаться через weakref. Патч от Wei Wu.
bpo-22077: Улучшены сообщения об ошибках индекса для bytearrays, bytes, списков и кортежей добавлением «или срезы». Для bytearrays добавлено «, not <typename>». Первоначальный патч от Claudiu Popa.
bpo-20179: К bytes и bytearray применён Argument Clinic. Патч от Tal Einat.
bpo-22082: Очистка интернированных строк в slotdefs.
База данных Unicode обновлена до версии 7.0.0.
bpo-21897: Исправление аварийного завершения при использовании атрибута f_locals с переменными замыкания, когда был вызван frame.clear().
bpo-21205: Добавлен новый атрибут
__qualname__для генератора – полное имя (qualified name), и он используется в представлении генератора (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: Исправление аварийного завершения во встроенной функции super() при вызове без аргументов и без текущего фрейма (например, во встроенном Python).
bpo-21425: Исправлена очистка стандартных потоков в интерактивном интерпретаторе.
bpo-21435: В редких случаях при выполнении финализаторов для объектов в циклическом мусоре могло произойти некорректное разыменование указателя из-за незаметной ошибки во внутренней логике итерации.
bpo-21377: PyBytes_Concat() теперь пытается выполнить конкатенацию на месте, когда первый аргумент имеет счётчик ссылок равный 1. Патч от Nikolaus Rath.
bpo-20355: Параметры командной строки -W теперь имеют более высокий приоритет, чем переменная окружения PYTHONWARNINGS. Патч от Arfrever.
bpo-21274: Определение PATH_MAX для GNU/Hurd в Python/pythonrun.c.
bpo-20904: Поддержка установки точности FPU на m68k.
bpo-21209: Исправлена передача кортежей пользовательским объектам-генераторам с использованием синтаксиса yield from.
bpo-21193: pow(a, b, c) теперь вызывает ValueError вместо TypeError, когда b отрицательно. Патч от Josh Rosenberg.
bpo-21176: PEP 465: Добавлен оператор ‘@’ для умножения матриц.
bpo-21134: Исправление сегфолта при вызове str для неинициализированного объекта UnicodeEncodeError, UnicodeDecodeError или UnicodeTranslateError.
bpo-19537: Исправление выравнивания PyUnicode_DATA() на m68k. Патч от 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, используемый процессом сборки для генерации кода управления Python AST на C, был переписан. Новый парсер является самодостаточным и не требует длительного использования библиотеки парсер-генератора spark.py; spark.py удалён из исходной базы.
bpo-12546: Разрешено использование
\x00в качестве символа заполнения при использовании методов __format__ для str, int, float и complex.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.
Библиотека¶Library
bpo-23399: pyvenv создаёт относительные символические ссылки, где это возможно.
bpo-20289: cgi.FieldStorage() теперь поддерживает протокол управления контекстом.
bpo-13128: Вывод заголовков ответа для CONNECT-запросов при debuglevel > 0. Патч от Demian Brecht.
bpo-15381: Оптимизирован io.BytesIO – теперь делает меньше выделений памяти и копирований.
bpo-22818: Разбиение по шаблону, который может соответствовать пустой строке, теперь выдаёт предупреждение. Шаблоны, способные соответствовать только пустой строке, теперь отклоняются.
bpo-23099: Закрытие io.BytesIO с экспортированным буфером теперь запрещено, чтобы не повредить экспортированный буфер.
bpo-23326: Удалены реализации __ne__. После исправления реализации __ne__ по умолчанию в bpo-21408 они стали избыточными.
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: Исправлена readline с фреймами в реализации pickle на Python.
bpo-23268: Исправлены ошибки в сравнении классов ipaddress.
bpo-21408: Удалены некорректные реализации __ne__(), которые не возвращали NotImplemented, если __eq__() возвращал NotImplemented. Реализация __ne__() по умолчанию теперь работает правильно.
bpo-19996:
email.feedparser.FeedParserтеперь корректно обрабатывает (некорректно сформированные) заголовки без ключа, а не считает, что началось тело.bpo-20188: Поддержка согласования протокола прикладного уровня (ALPN) в модуле ssl.
bpo-23133: Сериализация (pickling) объектов ipaddress теперь даёт более компактное и переносимое представление.
bpo-23248: Обновлены коды ошибок SSL из последней версии git OpenSSL.
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: В команде check из distutils исправлен разбор reST с директивами code или code-block.
bpo-23209: selectors.BaseSelector.get_key() теперь возбуждает RuntimeError, если селектор закрыт. А selectors.BaseSelector.close() теперь очищает свою внутреннюю ссылку на сопоставление селектора, чтобы разорвать циклическую ссылку. Первоначальный патч написан Martin Richard. (См. также: bpo-23225)
bpo-17911: Предоставлен способ заполнения кэша строк (linecache) для модуля по PEP 302 без фактической загрузки кода.
bpo-17911: Предоставлен новый объектный API для трассировки, включая возможность не искать строки вообще до тех пор, пока трассировка не будет фактически отображена, без сохранения каких-либо оригинальных объектов в памяти.
bpo-19777: Добавлен классовый метод home() для объектов Path. Авторы: 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: Удалена совместимость с OpenSSL версий старше 0.9.8.
bpo-23132: Улучшена производительность и поддержка интроспекции методов сравнения, создаваемых functool.total_ordering.
bpo-19776: Добавлен метод expanduser() для объектов Path.
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 теперь генерирует вывод, пригодный для eval, для обёрнутых строк.
bpo-23071: Добавлены недостающие имена в codecs.__all__. Патч от Martin Panter.
bpo-22783: Pickling теперь использует опкод NEWOBJ вместо NEWOBJ_EX, если это возможно.
bpo-15513: Добавлена реализация __sizeof__ для классов pickle.
bpo-19858: pickletools.optimize() теперь учитывает опкод MEMOIZE, может выдавать более компактный результат и больше не генерирует некорректный вывод, если входные данные содержат опкоды MEMOIZE вместе с PUT или BINPUT.
bpo-22095: Исправлен HTTPConnection.set_tunnel при использовании порта по умолчанию. Значение порта в заголовке host устанавливалось в “None”. Патч от Demian Brecht.
bpo-23016: Предупреждение больше не вызывает AttributeError при запуске программы через pythonw.exe.
bpo-21775: shutil.copytree(): исправлен сбой при копировании на VFAT. Обработчик исключения предполагал, что объекты OSError всегда имеют атрибут 'winerror'. Это не так, поэтому сам обработчик вызывал AttributeError при запуске на Linux (и, предположительно, любой другой ОС не Windows). Патч от Greg Ward.
bpo-1218234: Исправлен inspect.getsource() для загрузки обновлённого исходного кода перезагруженного модуля. Первоначальный патч от Berker Peksag.
bpo-21740: Поддержка обёрнутых вызываемых объектов в doctest. Патч от Claudiu Popa.
bpo-23009: Обеспечена работоспособность selectors.EpollSelector.select() при отсутствии зарегистрированных файловых дескрипторов.
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 в __pycache__ при компиляции исходного файла, содержащего несколько точек в имени.
bpo-21971: Обновлена документация turtledemo и модуль добавлен в индекс.
bpo-21032: Исправлена утечка сокета при сбое HTTPConnection.getresponse(). Оригинальный патч от Martin Panter.
bpo-22407: Использование флага re.LOCALE с строковыми шаблонами или re.ASCII объявлено устаревшим. Он никогда не работал.
bpo-22902: команда «ip» теперь используется в Linux для определения MAC-адреса в uuid.getnode(). Исправление от Bruno Cauet.
bpo-22960: Добавлен аргумент context в конструктор 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: Добавлен параметр context в logging.handlers.HTTPHandler.
bpo-22921: SSLContext теперь может принимать параметр hostname, даже если OpenSSL не поддерживает SNI.
bpo-22894: TestCase.subTest() приводил к остановке набора тестов в режиме failfast, даже при отсутствии ошибок.
bpo-22796: Разбор HTTP-куки теперь выполняется строже, чтобы защититься от возможных атак внедрения.
bpo-22370: Определение Windows в pathlib стало более надёжным.
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: Исправлена fcntl() с целочисленным аргументом на 64-битных платформах с big-endian.
bpo-21650: Добавлена опция
--sort-keysв интерфейс командной строки json.tool.bpo-22824: Обновлён формат вывода reprlib для множеств: теперь используются литералы множеств. Патч предоставлен Беркером Пексагом (Berker Peksag).
bpo-22824: Обновлён формат вывода reprlib для массивов: пустые массивы отображаются без лишнего пустого списка. Предложено Сергеем Сторчакой (Serhiy Storchaka).
bpo-22406: Исправлен кодек uu_codec, некорректно портированный на 3.x. Основано на патче Мартина Пантера (Martin Panter).
bpo-17293: uuid.getnode() теперь определяет MAC-адрес в AIX с помощью netstat. Основано на патче Айварса Калванса (Aivars Kalvāns).
bpo-22769: Исправлена ttk.Treeview.tag_has() при вызове без аргументов.
bpo-22417: Проверка сертификатов по умолчанию в httplib (PEP 476).
bpo-22775: Исправлена десериализация http.cookies.SimpleCookie с протоколом 2 и выше. Патч от Тима Грема (Tim Graham).
bpo-22776: Исключённый код помещён в область действия блока try в SysLogHandler.emit().
bpo-22665: Добавлены отсутствующие get_terminal_size и SameFileError в shutil.__all__.
bpo-6623: Удалён устаревший класс Netrc в модуле ftplib. Патч от Мэтта Чапута (Matt Chaput).
bpo-17381: Исправлена обработка регистронезависимых диапазонов в регулярных выражениях.
bpo-22410: Функции уровня модуля в модуле re теперь кэшируют скомпилированные зависящие от локали регулярные выражения с учётом локали.
bpo-22759: Методы запросов на pathlib.Path() (exists(), is_dir(), и т.д.) теперь возвращают False, когда базовый вызов stat вызывает NotADirectoryError.
bpo-8876: distutils теперь переключается на копирование файлов, если жёсткая ссылка не работает. Это позволяет использовать специальные файловые системы, такие как общие папки VirtualBox.
bpo-22217: Для классов в модуле zipfile реализованы методы __repr__.
bpo-22457: Учтён load_tests в start_dir при обнаружении тестов.
bpo-18216: gettext теперь вызывает ошибку, если .mo-файл имеет неподдерживаемый номер основной версии. Патч от Aaron Hill.
bpo-13918: Добавлена функция locale.delocalize(), которая удаляет локализованное форматирование чисел из строки, представляющей число, без последующего преобразования в конкретный тип. Патч от Cédric Krier.
bpo-22676: Ускорена сериализация (pickling) глобальных объектов, у которых нет атрибута __module__.
bpo-18853: Исправлено ResourceWarning в shlex.__nain__.
bpo-9351: Значения по умолчанию, заданные через set_defaults у подпарсера argparse, больше не игнорируются, если они также заданы у родительского парсера.
bpo-7559: Ошибки импорта при загрузке тестов unittest теперь сообщаются как ошибки импорта с соответствующим исключением, а не как ошибки атрибутов после того, как импорт уже не удался.
bpo-19746: Добавлена возможность просматривать ошибки, возникшие при обнаружении тестов unittest, без выполнения тестового набора. Новый атрибут
errorsв TestLoader показывает эти некритические ошибки, обнаруженные в процессе поиска.bpo-21991: Атрибут 'params' заголовков в email.headerregistry теперь доступен только для чтения (MappingProxyType). Ранее словарь был изменяемым, но при каждом обращении к атрибуту создавался новый.
bpo-22638: SSLv3 теперь отключён во всей стандартной библиотеке. Его можно включить только вручную, создав экземпляр SSLContext.
bpo-22641: В asyncio контекст SSL по умолчанию для клиентских соединений теперь создаётся с помощью ssl.create_default_context(), что повышает безопасность.
bpo-17401: В __repr__ io.FileIO теперь включён closefd.
bpo-21338: Добавлен тихий режим для compileall. Параметр quiet функций compile_{dir, file, path} теперь может принимать многоуровневое значение. Также опция -q командной строки теперь имеет многоуровневое значение. Патч от Thomas Kluyver.
bpo-20152: Модули array и cmath переведены на Argument Clinic.
bpo-18643: Добавлен socket.socketpair() в Windows.
bpo-22435: Исправлена утечка файловых дескрипторов при неудачной привязке (bind) в socketserver.
bpo-13096: Исправлен segfault в обработке больших значений POINTER в CTypes.
bpo-11694: В xdrlib теперь вызывается ConversionError, как описано в документации. Патч от Filip Gruszczyński и Claudiu Popa.
bpo-19380: Оптимизирован разбор регулярных выражений.
bpo-1519638: Теперь несовпавшие группы заменяются пустыми строками в re.sub() и re.subn().
bpo-18615: sndhdr.what и sndhdr.whathdr теперь возвращают именованный кортеж (namedtuple).
bpo-22462: Исправлено создание фиктивного фрейма в pyexpat, чтобы он отображался в трассировках исключений.
bpo-21965: Добавлена поддержка SSL в памяти для модуля ssl. Патч от Geert Jansen.
bpo-21173: Исправлено поведение len() для WeakKeyDictionary, когда .clear() был вызван при живом итераторе.
bpo-11866: Устранено состояние гонки при вычислении имён для новых потоков.
bpo-21905: Избежать RuntimeError в pickle.whichmodule() при изменении sys.modules во время итерации. Патч от 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 теперь учитываются переменные окружения SSL_CERT_DIR и SSL_CERT_FILE в Windows.
bpo-22508: Переменная email.__version__ удалена; код email больше не поставляется отдельно от stdlib, а __version__ не обновлялся в течение нескольких релизов.
bpo-20076: Добавлены непроизводные псевдонимы UTF-8 в таблицу псевдонимов локалей.
bpo-20079: В таблицу псевдонимов локалей добавлены локали, поддерживаемые в glibc 2.18.
bpo-20218: Добавлены удобные методы read_text/write_text и read_bytes/write_bytes для объектов pathlib.Path.
bpo-22396: На платформе 32-бит AIX не экспонируются os.posix_fadvise() и os.posix_fallocate(), так как их прототипы в системных заголовочных файлах некорректны.
bpo-22517: При удалении объекта io.BufferedRWPair очищаются его слабые ссылки.
bpo-22437: Количество захватывающих групп в регулярном выражении больше не ограничено 100.
bpo-17442: InteractiveInterpreter теперь отображает полную цепочку трассировки в своём методе showtraceback, чтобы соответствовать встроенному интерактивному интерпретатору.
bpo-23392: Добавлены тесты для C API модуля marshal, работающего с FILE*.
bpo-10510: Методы register и upload в distutils теперь используют концы строк CRLF, соответствующие стандартам HTML.
bpo-9850: Исправлен macpath.join() для пустого первого компонента. Патч от Олега Ошмяна.
bpo-5309: Команды build и build_ext из distutils теперь принимают опцию
-jдля включения параллельной сборки модулей расширения.bpo-22448: Улучшена очистка отменённых дескрипторов таймера для предотвращения неограниченного использования памяти. Патч от Joshua Moore-Oliva.
bpo-22427: TemporaryDirectory больше не пытается выполнить очистку дважды при использовании в операторе with в генераторе.
bpo-22362: Запрещены неоднозначные восьмеричные escape-последовательности вне диапазона 0-0o377 в регулярных выражениях.
bpo-20912: Теперь каталоги, добавленные в ZIP-файл, имеют корректные атрибуты каталога Unix и MS-DOS.
bpo-21866: ZipFile.close() больше не записывает записи центрального каталога ZIP64, если allowZip64 имеет значение false.
bpo-22278: Исправлена проблема urljoin с относительными URL – регрессия, обнаруженная после внесения изменений в issue22118.
bpo-22415: Исправлен отладочный вывод опкода GROUPREF_EXISTS в модуле re. Удалены конечные пробелы в отладочном выводе.
bpo-22423: Необработанное исключение в потоке больше не вызывает необработанное AttributeError, если sys.stderr равен None.
bpo-21332: Обеспечить, чтобы
bufsize=1в subprocess.Popen() выбирал построчную буферизацию, а не блочную. Патч от 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: Длина входящего HTTP-запроса в сервере wsgiref ограничена 65536 байт; для большей длины отправляется код ошибки 414. Патч предоставлен Devin Cook.
Нестрогий разбор cookie в http.cookies может представлять угрозу безопасности в сочетании с нестандартной обработкой cookie в некоторых веб-браузерах. Сообщил Sergey Bobrov
bpo-20537: Методы логирования теперь принимают экземпляр исключения, а также логическое значение или кортеж исключения. Спасибо Yury Selivanov за патч.
bpo-22384: Исключение в колбэке Tkinter больше не приводит к аварийному завершению программы при запуске с pythonw.exe.
bpo-22168: Предотвращено AttributeError в turtle с нестандартным Canvas на OS X.
bpo-21147: sqlite3 теперь вызывает исключение, если запрос содержит нулевой символ, вместо его усечения. На основе патча Victor Stinner.
bpo-13968: Модуль glob теперь поддерживает рекурсивный поиск в подкаталогах с помощью шаблона
**.bpo-21951: Исправлена ошибка в Tkinter на AIX при вызове команды Tcl с пустой строкой или аргументом-кортежем.
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: Первая буква больше не удаляется из ключа «status» в результате Treeview.heading().
bpo-19524: Исправлена утечка ресурсов в HTTP-соединении при получении неверного ответа. Патч от Martin Panter.
bpo-20421: Добавлен метод .version() для SSL-сокетов, возвращающий фактическую используемую версию протокола.
bpo-19546: Исключения configparser больше не раскрывают детали реализации. Убраны цепочки KeyErrors, что приводит к более чистым трассировкам. Патч от Claudiu Popa.
bpo-22051: turtledemo больше не перезагружает примеры для повторного запуска. Инициализация переменных и настройка GUI должны выполняться в main(), которая вызывается при каждом запуске демонстрации, но не при импорте.
bpo-21933: Пользователи turtledemo могут изменять размер шрифта кода через меню или с помощью control(command) «-» или «+» или control-колесо мыши. Оригинальный патч от 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 добавлено число рабочих потоков по умолчанию, равное 5 × количество CPU. Патч от Claudiu Popa.
bpo-22216: smtplib теперь полнее сбрасывает своё состояние после quit. Наиболее заметным последствием прежнего поведения был сбой STARTTLS при последовательности connect/starttls/quit/connect/starttls.
bpo-22098: BigEndianStructure и LittleEndianStructure из ctypes теперь определяют пустой __slots__, чтобы подклассы не получали экземпляр dict по умолчанию. Патч от Claudiu Popa.
bpo-22185: Исправлена периодическая ошибка RuntimeError в threading.Condition.wait(), вызванная изменением очереди ожидающих без удержания блокировки. Патч от Doug Zongker.
bpo-22287: На UNIX _PyTime_gettimeofday() теперь использует clock_gettime(CLOCK_REALTIME), если это возможно. Как побочный эффект, Python теперь зависит от библиотеки librt на Solaris и на Linux (только с glibc старше 2.17).
bpo-22182: Используйте e.args для корректной распаковки исключений в distutils.file_util.move_file. Патч от Claudiu Popa.
Модуль webbrowser теперь использует start_new_session=True подпроцесса вместо потенциально опасного вызова preexec_fn=os.setsid.
bpo-22042: signal.set_wakeup_fd(fd) теперь вызывает исключение, если файловый дескриптор находится в блокирующем режиме.
bpo-16808: inspect.stack() теперь возвращает именованный кортеж вместо обычного. Патч от Daniel Shahaf.
bpo-22236: Исправлены операции копирования изображений Tkinter в режиме NoDefaultRoot.
bpo-2527: Добавлен аргумент globals к функциям timeit для переопределения пространства имён globals, в котором выполняется замеряемый код. Патч от Ben Roberts.
bpo-22118: urllib.parse переключён на использование семантики RFC 3986 для разрешения относительных URL вместо RFC 1808 и 2396. Патч от Demian Brecht.
bpo-21549: В TarFile.list() добавлен параметр «members».
bpo-19628: Разрешено указывать глубину рекурсии compileall с помощью опции -r.
bpo-15696: Добавлена реализация __sizeof__ для объектов mmap в Windows.
bpo-22068: Предотвращены циклические ссылки с переменными и шрифтами в Tkinter.
bpo-22165: SimpleHTTPRequestHandler теперь поддерживает нераскодируемые имена файлов.
bpo-15381: Оптимизировано построчное чтение в io.BytesIO.
bpo-8797: Немедленно вызывать HTTPError при неудачной базовой аутентификации. Первоначальный патч от Sam Bull.
bpo-20729: Восстановлено использование ленивых iterkeys()/itervalues()/iteritems() в модуле mailbox.
bpo-21448: Изменено поведение FeedParser.feed(), чтобы избежать сложности O(N**2) при разборе длинных строк. Оригинальный патч от Raymond Hettinger.
bpo-22184: Фабрика декораторов functools.lru_cache теперь выдаёт более раннее и понятное сообщение об ошибке, если пользователь забыл обязательные параметры.
bpo-17923: Шаблоны glob(), оканчивающиеся на косую черту, больше не соответствуют не-директориям на AIX. Основано на патче от Delhallt.
bpo-21725: Добавлена поддержка RFC 6531 (SMTPUTF8) в smtpd.
bpo-22176: Обновление libffi модуля ctypes до версии 3.1. В этом выпуске добавлена поддержка архитектур Linux AArch64 и POWERPC ELF ABIv2 с прямым порядком байт (little endian).
bpo-5411: Добавлена поддержка формата “xztar” в модуле shutil.
bpo-21121: Не принуждать сторонние расширения на C собираться с флагом -Werror=declaration-after-statement.
bpo-21975: Исправлен сбой при использовании неинициализированного sqlite3.Row (в частности, при распаковке (unpickling) сериализованного sqlite3.Row). Теперь sqlite3.Row инициализируется в методе __new__().
bpo-20170: Преобразование posixmodule для использования Argument Clinic.
bpo-21539: Добавлен аргумент exists_ok в
Pathlib.mkdir()для имитации функциональностиmkdir -pиos.makedirs(). При значении истина игнорируются FileExistsError. Исправление от Berker Peksag.bpo-22127: Обход IDNA для чисто ASCII-имён хостов в модуле socket (в частности, для числовых IP).
bpo-21047: Установка значения по умолчанию для аргумента convert_charrefs HTMLParser в True. Патч от Berker Peksag.
Добавлен __all__ в html.entities.
bpo-15114: Строгий режим и аргумент strict HTMLParser, HTMLParser.error, и исключение HTMLParserError были удалены.
bpo-22085: Прекращена поддержка Tk 8.3 в Tkinter.
bpo-21580: Теперь Tkinter корректно обрабатывает аргументы bytes, передаваемые Tk. В частности, это позволяет инициализировать изображения из двоичных данных.
bpo-22003: При инициализации из объекта bytes, io.BytesIO() теперь откладывает создание копии до момента изменения, что повышает производительность и использование памяти в некоторых сценариях. Патч от David Wilson.
bpo-22018: В Windows сигнал set_wakeup_fd() теперь также поддерживает сокеты. Побочным эффектом является то, что Python зависит от библиотеки WinSock.
bpo-22054: Добавлены функции os.get_blocking() и os.set_blocking() для получения и установки блокирующего режима файлового дескриптора (False, если установлен флаг O_NONBLOCK, и True в противном случае). Эти функции недоступны в Windows.
bpo-17172: Сделать turtledemo активным при запуске на OS X, даже при выполнении через подпроцесс. Патч от Lita Cho.
bpo-21704: Исправление ошибки сборки _multiprocessing, когда семафоры недоступны. Патч от Arfrever Frehtes Taifersar Arahesis.
bpo-20173: Преобразование SHA-1, SHA-256, SHA-512 и MD5 для использования Argument Clinic. Патч от Vajrasky Kok.
Исправление repr(_socket.socket) на Windows 64-bit: не вызывать OverflowError на закрытом сокете. repr(socket.socket) уже работает корректно.
bpo-22033: Строковые представления большинства классов, реализованных на Python, теперь содержат фактическое имя класса вместо жёстко заданного.
bpo-21947: Модуль dis теперь может дизассемблировать объекты-генераторы-итераторы на основе их атрибута gi_code. Патч от Clement Rouault.
bpo-16133: Метод asynchat.async_chat.handle_read() теперь игнорирует исключения BlockingIOError.
bpo-22044: Исправлено преждевременное DECREF в call_tzinfo_method. Патч от Tom Flanagan.
bpo-19884: readline: Отключать клавишу-модификатор meta, если stdout не является терминалом, чтобы не записывать ANSI-последовательность
"\033[1034h"в stdout. Эта последовательность используется на некоторых терминалах (например, TERM=xterm-256color) для включения поддержки 8-битных символов.bpo-4350: Удалён ряд устаревших и давно неработающих методов Tkinter.
bpo-6167: Scrollbar.activate() теперь возвращает имя активного элемента, если аргумент не указан. Scrollbar.set() теперь всегда принимает только 2 аргумента.
bpo-15275: Очистка и ускорение модуля ntpath.
bpo-21888: plistlib.load() и plistlib.loads() теперь работают, если указан параметр fmt.
bpo-22032: Теперь для форматирования полных имён классов, реализованных на Python, всегда используется __qualname__ вместо __name__.
bpo-22031: repr-представления теперь всегда используют шестнадцатеричный формат с префиксом "0x", когда содержат идентификатор в форме " at 0x…".
bpo-22018: signal.set_wakeup_fd() теперь вызывает OSError вместо ValueError при сбое
fstat().bpo-21044: tarfile.open() теперь обрабатывает fileobj с целочисленным атрибутом 'name'. Основано на патче Антуана Пьетри.
bpo-21966: Учитывается опция командной строки -q при запуске модуля code.
bpo-19076: Не передавайте избыточный аргумент 'file' в self.error().
bpo-16382: Улучшено сообщение об исключении warnings.warn() для некорректной категории. Первоначальный патч от Фила Элсона.
bpo-21932: os.read() теперь использует тип
Py_ssize_t()вместоintдля размера, чтобы поддерживать чтение более 2 ГБ за один раз. В Windows размер усекается до INT_MAX. Как и при любом вызове os.read(), ОС может прочитать меньше байт, чем запрошено.bpo-21942: Исправлен просмотр исходных файлов в режиме сервера pydoc в Windows.
bpo-11259: asynchat.async_chat().set_terminator() теперь вызывает ValueError, если количество полученных байт отрицательное.
bpo-12523: asynchat.async_chat.push() теперь вызывает TypeError, если не получает строку байт.
bpo-21707: Добавлен отсутствующий аргумент kwonlyargcount в ModuleFinder.replace_paths_in_code().
bpo-20639: вызов Path.with_suffix('') позволяет снова удалить суффикс. Патч от July Tikhonov.
bpo-21714: Запрещено создание недопустимых путей с помощью Path.with_name(). Оригинальный патч от Antony Lee.
bpo-15014: Добавлен метод 'auth' в smtplib для упрощения реализации механизмов аутентификации; он используется внутренне в методе login.
bpo-21151: Исправлен segfault в модуле winreg, когда
Noneпередаётся в качестве значенияREG_BINARYв SetValueEx. Патч от John Ehresman.bpo-21090: io.FileIO.readall() больше не игнорирует ошибки ввода-вывода. Раньше он игнорировал ошибки ввода-вывода, если хотя бы первый вызов C read() завершался успешно.
bpo-5800: параметр headers в wsgiref.headers.Headers теперь необязателен. Первоначальный патч от Pablo Torres Navarrete и SilentGhost.
bpo-21781: ssl.RAND_add() теперь поддерживает строки длиннее 2 ГБ.
bpo-21679: Предотвращение лишних вызовов fstat() во время open(). Патч от Bohuslav Kabrda.
bpo-21863: cProfile теперь отображает имя модуля функций-расширений C в дополнение к их собственному имени.
bpo-11453: asyncore: теперь выводит ResourceWarning при уничтожении незакрытого объекта file_wrapper. Деструктор теперь закрывает файл, если это необходимо. Метод close() теперь можно вызывать дважды: второй вызов ничего не делает.
bpo-21858: Улучшена обработка исключений Python в модуле sqlite3.
bpo-21476: Обеспечено удаление TextIOWrapper из email.parser.BytesParser после разбора, чтобы входной файл не закрывался неожиданно.
bpo-20295: imghdr теперь распознаёт изображения в формате OpenEXR.
bpo-21729: Использован оператор 'with' в модуле dbm.dumb для гарантированного закрытия файлов. Патч от Claudiu Popa.
bpo-21491: socketserver: исправлено состояние гонки при завершении дочерних процессов.
bpo-21719: Добавлено поле
st_file_attributesв os.stat_result в Windows.bpo-21832: Требовать, чтобы входные данные именованного кортежа были строками.
bpo-21722: Команда distutils “upload” теперь завершается с ненулевым кодом возврата при ошибке загрузки. Патч от Martin Dengler.
bpo-21723: asyncio.Queue: поддержка любого типа чисел (например, float) для максимального размера. Патч от Vajrasky Kok.
bpo-21711: поддержка каталогов “site-python” удалена из модуля site (устарело в 3.4).
bpo-17552: новый метод socket.sendfile(), позволяющий отправлять файл через сокет с помощью высокопроизводительного os.sendfile() в UNIX. Патч от Giampaolo Rodola’.
bpo-18039: dbm.dump.open() теперь всегда создаёт новую базу данных, когда флаг имеет значение ‘n’. Патч от Claudiu Popa.
bpo-21326: Добавлен новый метод is_closed() в asyncio.BaseEventLoop. Методы run_forever() и run_until_complete() asyncio.BaseEventLoop теперь вызывают исключение, если цикл событий был закрыт.
bpo-21766: Предотвращение уязвимости в CGIHTTPServer путём декодирования URL-путей перед проверкой наличия CGI-скрипта.
bpo-21310: Исправлена возможная утечка ресурсов при неудачном вызове open().
bpo-21256: Вывод именованных аргументов в вызове мок-функции должен быть в детерминированном порядке. Это поможет писать лучшие доктесты.
bpo-21677: Исправлена цепочка ненормализованных исключений в методах close() модуля io.
bpo-11709: Исправлена функция pydoc.help, чтобы она не завершалась ошибкой, когда sys.stdin не является корректным файлом.
bpo-21515: tempfile.TemporaryFile теперь использует флаг os.O_TMPFILE, если он доступен.
bpo-13223: Исправлена pydoc.writedoc, чтобы HTML-документация для методов, использующих ‘self’ в примерах кода, генерировалась корректно.
bpo-21463: В urllib.request исправлена очистка FTP-кэша.
bpo-21618: Модуль подпроцессов мог не закрывать открытые файловые дескрипторы, унаследованные вызывающим процессом, если они превышали ограничения POSIX. В системах с работающим интерфейсом /proc/self/fd или /dev/fd максимальное количество теперь игнорируется, и закрываются все дескрипторы.
bpo-20383: Введён importlib.util.module_from_spec() как предпочтительный способ создания нового модуля.
bpo-21552: Исправлено возможное целочисленное переполнение при слишком длинных строках в модуле tkinter на 64-битных платформах.
bpo-14315: Модуль zipfile теперь игнорирует дополнительные поля в центральном каталоге, которые слишком коротки для разбора, вместо того чтобы позволить ошибке struct.unpack всплывать, так как такие «плохие данные» встречаются во многих реальных zip-файлах и игнорируются другими инструментами.
bpo-13742: Добавлены параметры “key” и “reverse” в heapq.merge(). (Первый черновик патча предоставлен Simon Sapin.)
bpo-21402: tkinter.ttk теперь работает, когда корневое окно по умолчанию не установлено.
bpo-3015: Функция _tkinter.create() теперь создаёт объект tkapp с параметром wantobject=1 по умолчанию.
bpo-10203: sqlite3.Row теперь действительно поддерживает протокол последовательности. В частности, поддерживает reverse() и отрицательные индексы. Оригинальный патч от Claudiu Popa.
bpo-18807: Если для виртуального окружения (venv) указано копирование (без симлинков), то алиасы интерпретатора python (python, python3) теперь создаются копированием, а не симлинками.
bpo-20197: Добавлена поддержка формата изображений WebP в модуль imghdr. Патч от Fabrice Aneche и Claudiu Popa.
bpo-21513: Ускорены некоторые свойства IP-адресов (IPv4Address, IPv6Address), такие как .is_private или .is_multicast.
bpo-21137: Улучшено repr для threading.Lock() и его вариантов: теперь отображается статус “locked” или “unlocked”. Патч от Berker Peksag.
bpo-21538: Модуль plistlib теперь поддерживает загрузку бинарных plist-файлов, когда размер ссылки или смещения не является степенью двойки.
bpo-21455: Добавлен backlog по умолчанию в socket.listen().
bpo-21525: Большинство методов Tkinter, которые принимали кортежи, теперь принимают также списки.
bpo-22166: С помощью новой внутренней вспомогательной функции _codecs._forget_codec модуль test_codecs теперь очищает кэши кодировок, чтобы избежать появления утечки ссылок.
bpo-22236: Тесты Tkinter теперь не переиспользуют корневое окно по умолчанию. Новое корневое окно создаётся для каждого класса тестов.
bpo-10744: Исправлены строки формата PEP 3118 для объектов ctypes с нетривиальной формой.
bpo-20826: Оптимизирована функция ipaddress.collapse_addresses().
bpo-21487: Оптимизированы функции ipaddress.summarize_address_range() и ipaddress.{IPv4Network,IPv6Network}.subnets().
bpo-21486: Оптимизирован разбор сетевых масок в ipaddress.IPv4Network и ipaddress.IPv6Network.
bpo-13916: Запрещён обработчик ошибок surrogatepass для кодировок, отличных от UTF-*.
bpo-20998: Исправлено поведение re.fullmatch() для повторяющегося шаблона из одного символа с игнорированием регистра. Оригинальный патч от Matthew Barnett.
bpo-21075: fileinput.FileInput теперь читает байты из стандартного потока, если указан бинарный режим. Патч от Sam Kimbrel.
bpo-19775: Добавлен метод samefile() для объектов pathlib.Path. Первоначальный патч от Vajrasky Kok.
bpo-21226: Исправлена инициализация модулей в PyImport_ExecCodeModuleObject (и подобных функциях).
bpo-21398: Исправлена ошибка Unicode в постраничном выводе pydoc, когда документация содержит символы, не кодируемые в кодировке stdout.
bpo-16531: ipaddress.IPv4Network и ipaddress.IPv6Network теперь принимают аргумент-кортеж (address, netmask), чтобы можно было легко создавать объекты сети из существующих адресов.
bpo-21156: importlib.abc.InspectLoader.source_to_code() теперь является статическим методом.
bpo-21424: Упрощены и оптимизированы heaqp.nlargest() и nmsmallest() для выполнения меньшего числа сравнений кортежей.
bpo-21396: Исправлено поведение TextIOWrapper(…, write_through=True) – теперь он не принуждает к вызову flush() для нижележащего бинарного потока. Патч от akira.
bpo-18314: Unlink теперь удаляет точки соединения (junctions) в Windows. Патч от Kim Gräsman.
bpo-21088: Исправление регрессии в curses.window.addch() в версии 3.4.0. При переносе на Argument Clinic первые два аргумента были перепутаны местами.
bpo-21407: Модуль _decimal теперь поддерживает сигнатуры функций.
bpo-10650: Убран нестандартный параметр 'watchexp' из метода Decimal.quantize() в версии на Python. В C-версии его никогда не было.
bpo-21469: Снижен риск ложных срабатываний в robotparser – теперь перед возвратом True в can_fetch() проверяется, что robots.txt был прочитан или не существует.
bpo-19414: OrderedDict теперь помечает удалённые связи как непригодные. Это позволяет раньше получить ошибку, если связь удаляется во время итерации.
bpo-21421: Добавлен __slots__ в абстрактный класс MappingViews. Патч от Josh Rosenberg.
bpo-21101: Устранено двойное хеширование в оптимизированном коде на C для collections.Counter().
bpo-21321: itertools.islice() теперь освобождает ссылку на исходный итератор, когда срез исчерпан. Патч от Anton Afanasyev.
bpo-21057: TextIOWrapper теперь позволяет методу read() или read1() нижележащего бинарного потока возвращать произвольный байтоподобный объект (например, memoryview). Патч от Nikolaus Rath.
bpo-20951: SSLSocket.send() теперь вызывает SSLWantReadError или SSLWantWriteError на неблокирующем сокете, если операция должна была бы заблокироваться. Ранее он возвращал 0. Патч от Nikolaus Rath.
bpo-13248: Убран ранее устаревший хак дешёвого наследования в asyncore.dispatcher через __getattr__.
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 был закрыт или заменён, и он открывается заново.
bpo-21291: subprocess.Popen.wait() теперь потокобезопасен, поэтому несколько потоков могут одновременно вызывать wait() или poll() для одного экземпляра Popen, не теряя значение Popen.returncode.
bpo-21127: Объекты Path теперь можно создавать из экземпляров подклассов str (например,
numpy.str_).bpo-15002: Объект urllib.response теперь использует механизм _TemporaryFileWrapper (и _TemporaryFileCloser). Это даёт лучший способ управления закрытием файловых дескрипторов. Патч предоставлен Christian Theune.
bpo-12220: mindom теперь возбуждает собственное исключение ValueError с указанием, что не поддерживает пробелы в URI, вместо того чтобы позволять всплывать ValueError от ‘split’.
bpo-21068: Константы ssl.PROTOCOL* теперь являются элементами перечисления.
bpo-21276: posixmodule: не определять USE_XATTRS на KFreeBSD и Hurd.
bpo-21262: Новый метод assert_not_called для Mock. Возбуждает AssertionError, если mock был вызван.
bpo-21238: новый именованный аргумент
unsafeдля Mock. Он возбуждаетAttributeError, если имя атрибута начинается с assert или assret.bpo-20896: ssl.get_server_certificate() теперь использует PROTOCOL_SSLv23, а не PROTOCOL_SSLv3, для максимальной совместимости.
bpo-21239: patch.stopall() работал недетерминированно, когда одно и то же имя патчилось более одного раза.
bpo-21203: Обновлены fileConfig и dictConfig для устранения несоответствий. Спасибо Jure Koren за патч.
bpo-21222: Передача именованного аргумента name в mock.create_autospec теперь работает.
bpo-21197: Добавлена символическая ссылка lib64 -> lib в виртуальных окружениях на 64-битных POSIX-системах, отличных от OS X.
bpo-17498: Некоторые SMTP-серверы разрывают соединение после определённых ошибок, нарушая строгое соответствие RFC. Вместо потери кода ошибки при отправке последующей команды RSET, smtplib теперь возвращает код ошибки и откладывает возбуждение исключения SMTPServerDisconnected до выдачи следующей команды.
bpo-17826: Установка итерируемого side_effect на фиктивную функцию, созданную с помощью create_autospec, теперь работает. Патч от Kushal Das.
bpo-7776: Исправлен заголовок
Host:и переподключение при использовании http.client.HTTPConnection.set_tunnel(). Патч от Nikolaus Rath.bpo-20968: unittest.mock.MagicMock теперь поддерживает деление. Патч от Johannes Baiter.
bpo-21529: Исправление произвольного доступа к памяти в JSONDecoder.raw_decode при отрицательном втором параметре. Ошибка сообщена Guido Vranken. (См. также: CVE-2014-4616)
bpo-21169: getpass теперь обрабатывает не-ASCII символы, которые не может закодировать кодировка входного потока, путём перекодирования с обработчиком ошибок replace.
bpo-21171: Исправлен недокументированный API фильтра кодера rot13. Патч от Berker Peksag.
bpo-20539: Улучшено сообщение об ошибке math.factorial для больших положительных входных значений и изменён тип исключения (OverflowError -> ValueError) для больших отрицательных входных значений.
bpo-21172: Проверка isinstance смягчена с dict на collections.Mapping.
bpo-21155: asyncio.EventLoop.create_unix_server() теперь возбуждает ValueError, если path и sock заданы одновременно.
bpo-21136: Избегание ненужной нормализации Fractions, получаемых в результате возведения в степень и других операций. Патч от Raymond Hettinger.
bpo-17621: Введён importlib.util.LazyLoader.
bpo-21076: Константы модуля signal были преобразованы в перечисления. Патч от Giampaolo Rodola’.
bpo-20636: Улучшено repr виджетов Tkinter.
bpo-19505: Представления items, keys и values OrderedDict теперь поддерживают обратную итерацию с помощью reversed().
bpo-21149: Улучшена потокобезопасность при очистке логирования во время завершения интерпретатора. Спасибо Devin Jeanpierre за патч.
bpo-21058: Исправлена утечка файлового дескриптора в
tempfile.NamedTemporaryFile(), закрывать файловый дескриптор, еслиio.open()завершается ошибкойbpo-21200: Возвращать None из pkgutil.get_loader(), когда отсутствует __spec__.
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 теперь автоматически выбирают эллиптическую кривую для обмена ключами ECDH на OpenSSL 1.0.2 и новее, а в остальных случаях по умолчанию используется «prime256v1».
bpo-21000: Улучшен интерфейс командной строки утилиты json.tool.
bpo-20995: Улучшены стандартные шифры, используемые модулем ssl, для повышения безопасности и приоритета perfect forward secrecy.
bpo-20884: Больше не делается предположение, что __file__ определён в importlib.__init__.
bpo-21499: Игнорируется __builtins__ в нескольких тестах test_importlib.test_api.
bpo-20627: xmlrpc.client.ServerProxy теперь является контекстным менеджером.
bpo-19165: Модуль formatter теперь вызывает DeprecationWarning вместо PendingDeprecationWarning.
bpo-13936: Удалена возможность считать экземпляры datetime.time ложными в логических контекстах.
bpo-18931: Модуль selectors теперь поддерживает /dev/poll на Solaris. Патч от Джампаоло Родолы.
bpo-19977: Когда
LC_TYPEлокаль – это локаль POSIX (Cлокаль),sys.stdinиsys.stdoutтеперь используют обработчик ошибокsurrogateescapeвместо обработчикаstrict.bpo-20574: Реализован инкрементальный декодер для кодировки cp65001 (кодовая страница Windows 65001, Microsoft UTF-8).
bpo-20879: Отложена инициализация таблиц кодирования и декодирования для base32, ascii85 и base85 в модуле base64, а также инициализация таблицы unquote_to_bytes() модуля urllib.parse, чтобы не тратить память, если эти модули не используются.
bpo-19157: добавлен широковещательный адрес в список доступных хостов для IPv6 в ipaddress.
bpo-11599: При сбое внешней команды (например, компилятора) distutils теперь выводит всю командную строку (а не только имя команды), если установлена переменная окружения DISTUTILS_DEBUG.
bpo-4931: Distutils больше не должен выдавать бесполезные сообщения «error: None». Функция distutils.util.grok_environment_error сохраняется, но считается устаревшей в документации.
bpo-20875: Предотвращена возможная ошибка NameError «'read' is not defined» в gzip. Патч от Клавдиу Попа.
bpo-11558:
email.message.Message.attachтеперь возвращает более полезное сообщение об ошибке, еслиattachвызывается для сообщения, для которогоis_multipartравно False.bpo-20283: Методы шаблонов RE теперь принимают строковые параметры keyword, как и задокументировано. Параметры pattern и source оставлены как устаревшие псевдонимы.
bpo-20778: Исправлен modulefinder для работы с модулями, содержащими только байт-код.
bpo-20791: copy.copy() теперь не создаёт копию, если на вход передан объект bytes. Начальный патч от Питера Оттена.
bpo-19748: На AIX time.mktime() теперь вызывает OverflowError для года вне диапазона [1902; 2037].
bpo-19573: inspect.signature: для констант вида параметра используется перечисление.
bpo-20726: inspect.signature: Signature и Parameter сделаны сериализуемыми (picklable).
bpo-17373: Добавлен метод inspect.Signature.from_callable.
bpo-20378: Улучшено строковое представление inspect.Signature и inspect.Parameter.
bpo-20816: Исправлен inspect.getcallargs() для возбуждения правильного TypeError при отсутствии обязательных keyword-only аргументов. Патч от Джереми Лоуина.
bpo-20817: Исправлен inspect.getcallargs() для корректного завершения с ошибкой, если отсутствует более 3 аргументов. Патч от Джереми Лоуина.
bpo-6676: Обеспечено возбуждение осмысленного исключения при попытке разбора более одного XML-документа на экземпляр pyexpat xmlparser. (Исходные патчи от Хирокадзу Ямамото и Амори Форжо д’Арка, с предложенной формулировкой от Дэвида Гаттериджа.)
bpo-21117: Исправлена работа inspect.signature для лучшей поддержки functools.partial. Из-за особенностей реализации functools.partial позиционно-ключевые аргументы, переданные как именованные, становятся только ключевыми.
bpo-20334: inspect.Signature и inspect.Parameter теперь хэшируемы. Спасибо Энтони Ли за сообщения об ошибках и предложения.
bpo-15916: doctest.DocTestSuite возвращает пустой unittest.TestSuite вместо возбуждения ValueError, если не найдено ни одного теста.
bpo-21209: Исправлен asyncio.tasks.CoroWrapper для обхода ошибки в реализации yield-from в CPython до версии 3.4.1.
asyncio: Добавлены свойства gi_{frame,running,code} в CoroWrapper (bpo-163).
bpo-21311: Предотвращение исключения в _osx_support при нестандартных конфигурациях компилятора. Патч от Джона Шакмайстера.
bpo-11571: Обеспечено, чтобы окно turtle становилось самым верхним при запуске на OS X.
bpo-21801: Проверка, что __signature__ равно None или является экземпляром Signature.
bpo-21923: Предотвращение AttributeError в distutils.sysconfig.customize_compiler из-за возможной неинициализированной _config_vars.
bpo-21323: Исправлен http.server для повторной обработки скриптов в подкаталогах CGI, нарушенной исправлением уязвимости bpo-19435. Патч от Зака Бирна.
bpo-22733: Исправлено ffi_prep_args, некорректно расширявшее нулями значения аргументов на 64-битной Windows.
bpo-23302: Установка TCP_NODELAY=1 по умолчанию при установке HTTPConnection. Убрано использование жестко заданного MSS, так как эта оптимизация больше не нужна при отключенном Nagle.
IDLE¶
bpo-20577: Настройка максимальной длины строки для расширения FormatParagraph перенесена с вкладки General диалога настроек Idle на вкладку FormatParagraph диалога Config Extensions. Патч от Таля Эйната.
bpo-16893: Обновлена глава документации Idle в соответствии с текущей версией и добавлена новая информация.
bpo-3068: Добавлен диалог конфигурации расширений Idle в меню Options. Изменения записываются в HOME/.idlerc/config-extensions.cfg. Оригинальный патч от Таля Эйната.
bpo-16233: Браузер модулей (File : Class Browser, Alt+C) требует окно редактора с именем файла. Если Class Browser запрашивается иным способом – из оболочки, окна вывода или редактора «Untitled», Idle больше не показывает диалог с ошибкой. Теперь открывается диалог Open Module (Alt+M). Если введено корректное имя и модуль открыт, то открывается и соответствующий браузер.
bpo-4832: Сохранение как файл Python автоматически добавляет .py к введённому имени (даже если система не показывает расширение). Некоторые системы автоматически добавляют .txt при выборе типа «Текстовые файлы».
bpo-21986: Объекты кода обычно не сериализуются модулем pickle. Соответственно, они больше не сериализуются при работе в Idle.
bpo-17390: Изменён заголовок окна редактора: убрано «Python», версия перемещена в конец.
bpo-14105: Точки останова отладчика Idle больше не исчезают при вставке или удалении строк.
bpo-17172: Turtledemo теперь можно запускать из Idle. Пока пункт находится в меню Help, но может быть перенесён в Run. Патч от Рамчандры Апта и Литы Чо.
bpo-21765: Добавлена поддержка не-ASCII идентификаторов в HyperParser.
bpo-21940: Добавлен unittest для WidgetRedirector. Начальный патч от Саймадхава Хеблекара.
bpo-18592: Добавлен unittest для SearchDialogBase. Патч от Фила Вебстера.
bpo-21694: Добавлен unittest для ParenMatch. Патч от Саймадхава Хеблекара.
bpo-21686: Добавлен unittest для HyperParser. Оригинальный патч от Саймадхава Хеблекара.
bpo-12387: Добавлены недостающие версии в верхнем (нижнем) регистре для стандартных клавиатурных комбинаций Idle в Windows, чтобы Caps Lock не отключал их. Патч от Роджера Серви.
bpo-21695: Закрытие окна результатов поиска в файлах во время выполнения поиска больше не закрывает Idle.
bpo-18910: Добавлен unittest для textView. Патч от Фила Вебстера.
bpo-18292: Добавлен unittest для AutoExpand. Патч от Сайадхава Хеблекара.
bpo-18409: Добавлен unittest для AutoComplete. Патч от Фила Вебстера.
bpo-21477: htest.py – улучшение фреймворка, полный набор тестов. Патчи от Saimadhav Heblikar
bpo-18104: Добавлен idlelib/idle_test/htest.py с несколькими примерами тестов, чтобы начать консолидацию и улучшение тестов Idle, проверяемых вручную. Другие файлы изменены по мере необходимости для работы с htest. Запуск модуля как __main__ выполняет все тесты.
bpo-21139: Изменена ширина абзаца по умолчанию на 72 – рекомендацию PEP 8.
bpo-21284: Тест переформатирования абзаца проходит после изменения пользователем ширины переформатирования.
bpo-17654: Обеспечена правильная настройка меню IDLE на OS X для сборок без фреймворка и для всех вариантов Tk.
bpo-23180: Пункт меню IDLE «Windows» переименован в «Window». Патч от Al Sweigart.
Сборка¶Build
bpo-15506: Использован стандартный макрос autoconf PKG_PROG_PKG_CONFIG в скрипте configure.
bpo-22935: Разрешена компиляция модуля ssl, если openssl не поддерживает SSL 3.
bpo-22592: Прекращена поддержка компилятора Borland C для сборки Python. Модуль distutils по-прежнему поддерживает его для сборки расширений.
bpo-22591: Прекращена поддержка MS-DOS, особенно компилятора DJGPP (порт GCC для MS-DOS).
bpo-16537: Проверка, пуст ли self.extensions в setup.py. Патч от Jonathan Hosmer.
bpo-22359: Удалены некорректные использования рекурсивного make. Патч от Jonas Wagner.
bpo-21958: Определён HAVE_ROUND при сборке с Visual Studio 2013 и выше. Патч от Zachary Turner.
bpo-18093: программы, встраивающие среду выполнения CPython, теперь находятся в отдельном каталоге «Programs», а не в каталоге Modules.
bpo-15759: «make suspicious», «make linkcheck» и «make doctest» в Doc/ теперь выводят специальное сообщение только тогда, когда есть ошибки.
bpo-21141: Процесс сборки Windows больше не пытается найти Perl, вместо этого полагается на то, что исходники OpenSSL уже сконфигурированы и готовы к сборке. Скрипт
PCbuild\build_ssl.pyбыл переписан и переименован вPCbuild\prepare_ssl.py, и теперь занимается конфигурированием исходников OpenSSL как для 32-, так и для 64-битных платформ. Исходники OpenSSL, полученные с svn.python.org, всегда будут предварительно сконфигурированы и готовы к сборке.bpo-21037: Добавлена опция сборки для включения поддержки AddressSanitizer.
bpo-19962: Процесс сборки Windows теперь создаёт «python.bat» в корне дерева исходников, который передаёт все аргументы самому последнему собранному интерпретатору.
bpo-21285: Рефакторинг и исправление проверки configure для curses, чтобы всегда искать в каталоге ncursesw.
bpo-15234: Для BerkelyDB и Sqlite найденные каталоги библиотек и заголовков добавляются только в том случае, если они ещё не проверяются. Это позволяет избежать явной зависимости от библиотек во время выполнения.
bpo-17861: Tools/scripts/generate_opcode_h.py автоматически перегенерирует Include/opcode.h из Lib/opcode.py, если последний изменяется.
bpo-20644: Поддержка сборки документации в установщике OS X для изменений сборки в 3.4.1: предполагается, что внешний sphinx-build доступен в /usr/bin.
bpo-20022: Исключено использование устаревшего bundlebuilder в сборках OS X.
bpo-15968: Сборки Tcl, Tk и Tix включены в решение сборки Windows.
bpo-17095: Исправлена поддержка shared в Modules/Setup.
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: Сборка _msi.pyd с cabinet.lib вместо fci.lib
bpo-17128: Использовать частную версию OpenSSL для установщика OS X 10.5+.
C API¶
bpo-14203: Удалена устаревшая поддержка view==NULL в PyBuffer_FillInfo(), bytearray_getbuffer(), bytesiobuf_getbuffer() и array_buffer_getbuf(). Теперь все эти функции в таком случае вызывают BufferError.
bpo-22445: PyBuffer_IsContiguous() теперь выполняет точные проверки непрерывности, совместимые с флагом компиляции NPY_RELAXED_STRIDES_CHECKING из NumPy.\nРанее функция выдавала ложноотрицательные результаты для граничных случаев.
bpo-22079: PyType_Ready() теперь проверяет, что статически выделенный тип не имеет динамически выделенных базовых классов.
bpo-22453: Удалён недокументированный макрос PyObject_REPR().
bpo-18395: Переименовать
_Py_char2wchar()вPy_DecodeLocale(),\nпереименовать_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().
Документация¶Documentation
bpo-19548: Обновлена документация модуля codecs для более полного описания различий между текстовыми кодировками и другими кодеками, а также внесены дополнительные уточнения. Патч от Martin Panter.
bpo-22394: Doc/Makefile теперь поддерживает
make venv PYTHON=../pythonдля создания виртуального окружения для генерации документации, например,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: Удалена рекомендация по конкретным центрам сертификации и добавлено упоминание возможности загрузки системных сертификатов.
bpo-20765: Добавлена недостающая документация для PurePath.with_name() и PurePath.with_suffix().
bpo-19407: Новые руководства по установке и распространению пакетов на основе инструментов Python Packaging Authority. Существующие руководства сохранены в виде устаревших ссылок из документации distutils, так как они всё ещё содержат некоторый необходимый справочный материал для разработчиков инструментов, который больше нигде не описан.
bpo-19697: Документированы случаи, когда __main__.__spec__ равно None.
Тесты¶Tests
bpo-18982: Добавлены тесты для CLI модуля calendar.
bpo-19548: Добавлены дополнительные проверки в test_codecs, чтобы гарантировать точность утверждений в обновлённой документации. Патч от Martin Panter.
bpo-22838: Все тесты test_re теперь работают с обнаружением тестов unittest.
bpo-22173: Обновлены тесты lib2to3 для использования обнаружения тестов unittest.
bpo-16000: Тест test_curses переведён на использование unittest.
bpo-21456: Пропускать два теста в test_urllib2net.py, если модуль _ssl не доступен. Патч от Remi Pointel.
bpo-20746: Исправлен test_pdb для запуска в режиме проверки утечек (-R). Патч от Xavier de Gaye.
bpo-22060: test_ctypes несколько очищен и упрощён; теперь он использует обнаружение тестов unittest для поиска своих тестов.
bpo-22104: regrtest.py больше не хранит ссылку на набор тестов, загруженных из тестовых модулей, которые не определяют test_main().
bpo-22111: Различные чистки в test_imaplib. Патч от Milan Oberkirch.
bpo-22002: Добавлена функция
load_package_testsв test.support и использована для реализации/расширения обнаружения тестов в test_asyncio, test_email, test_importlib, test_json и test_tools.bpo-21976: Исправлена test_ssl для принятия строк версий LibreSSL. Спасибо William Orr.
bpo-21918: Преобразовано test_tools из модуля в пакет, содержащий отдельные файлы тестов для каждого тестируемого скрипта.
bpo-9554: Использованы современные возможности unittest в test_argparse. Первоначальный патч от Denver Coneybeare и Radu Voicilas.
bpo-20155: Изменены имена HTTP-методов в падающих тестах test_httpservers, чтобы программное обеспечение фильтрации пакетов (в частности, Windows Base Filtering Engine) не мешало семантике транзакций, ожидаемой тестами.
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: Добавлены тесты Tkinter для Listbox.itemconfigure(), PanedWindow.paneconfigure() и Menu.entryconfigure().
bpo-17756: Исправлен тест test_code при запуске из установленного расположения.
bpo-17752: Исправлены тесты distutils при запуске из установленного расположения.
bpo-18604: Объединены проверки доступности GUI. Теперь все платформы, по крайней мере, проверяют, можно ли создать экземпляр Tk, когда запрашивается ресурс GUI.
bpo-21275: Исправлен тест сокета на KFreeBSD.
bpo-21223: Проходит test_site/test_startup_imports, когда некоторые расширения собраны как встроенные.
bpo-20635: Добавлены тесты для менеджеров геометрии Tk.
Добавлен тестовый пример для freeze.
bpo-20743: Исправлена утечка ссылок в test_tcl.
bpo-21097: Перемещено test_namespace_pkgs в test_importlib.
bpo-21503: Используется test_both() последовательно в test_importlib.
bpo-20939: Избегание различных сбоев сетевых тестов из-за нового перенаправления с http://www.python.org/ на https://www.python.org: используйте http://www.example.com.
bpo-20668: Тесты asyncio больше не полагаются на файл tests.txt. (Патч от Vajrasky Kok)
bpo-21093: Предотвращение сбоев ctypes test_macholib на OS X, если копия libz существует в $HOME/lib или /usr/local/lib.
bpo-22770: Предотвращение некоторых ошибок сегментации в Tk на OS X при запуске GUI-тестов.
bpo-23211: Обходной путь для сбоя test_logging на некоторых системах OS X 10.6.
bpo-23345: Предотвращение сбоев test_ssl с большими значениями уровня патча OpenSSL (например, 0.9.8zc).
Инструменты/Демонстрации¶Tools/Demos
bpo-22314: pydoc теперь работает, когда установлена переменная окружения LINES.
bpo-22615: Argument Clinic теперь поддерживает аргумент “type” для конвертера int. Это позволяет использовать конвертер int с перечислениями и typedef-объявлениями.
bpo-20076: Скрипт makelocalealias.py больше не игнорирует UTF-8 mapping.
bpo-20079: Теперь скрипт makelocalealias.py может анализировать файл SUPPORTED из исходных кодов glibc и поддерживает параметры командной строки для путей к исходникам.
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: Исправление функции «--converters» в Argument Clinic.
Добавлена поддержка
yield fromв 2to3.Добавлена поддержка PEP 465 оператора матричного умножения в 2to3.
bpo-16047: Исправление списка исключений модуля и обработки __file__ в freeze. Исправление от Meador Inge.
bpo-11824: Учёт тегов ABI в freeze. Исправление от Meador Inge.
bpo-20535: PYTHONWARNING больше не влияет на скрипт run_tests.py. Исправление от Arfrever Frehtes Taifersar Arahesis.
Windows¶
bpo-23260: Обновление установщика Windows
Встроенная версия Tcl/Tk обновлена до 8.6.3. Самый заметный результат этого изменения – добавление новых нативных диалогов выбора файлов при работе в Windows Vista или новее. Дополнительную информацию см. в TIP 432 от Tcl/Tk. Кроме того, эта версия Tcl/Tk включает поддержку Windows 10.
bpo-17896: Сборочные скрипты Windows теперь ожидают внешние исходники библиотек в
PCbuild\..\externalsвместоPCbuild\..\...bpo-17717: Сборочные скрипты Windows теперь используют копию NASM, полученную с svn.python.org, для сборки OpenSSL.
bpo-21907: Улучшены пакетные скрипты для сборки Python.
bpo-22644: Встроенная версия OpenSSL обновлена до 1.0.1j.
bpo-10747: Использование версионированных меток в меню «Пуск» Windows. Исправление от Olive Kilburn.
bpo-22980: .pyd-файлы с тегом версии и платформы (например, «.cp35-win32.pyd») теперь будут загружаться в предпочтение перед файлами без тегов.
(Информацию о более старых версиях смотрите в файле HISTORY.)