Содержание страницы
Устаревания¶Deprecations
Ожидаемое удаление в Python 3.17¶Pending removal in Python 3.17
-
strptime()вызовы со строкой формата, содержащей%e(день месяца) без указания года. Это устарело с Python 3.15. (Автор: Stan Ulbrych в gh-70647.)
-
collections.abc.ByteStringзапланирован к удалению в Python 3.17.Используйте
isinstance(obj, collections.abc.Buffer), чтобы проверить, реализует лиobjпротокол буфера во время выполнения. Для использования в аннотациях типов используйте либоBuffer, либо объединение, которое явно указывает типы, поддерживаемые вашим кодом (например,bytes | bytearray | memoryview).ByteStringизначально задумывался как абстрактный класс, который служил бы супертипом как дляbytes, так и дляbytearray. Однако, поскольку у ABC никогда не было методов, знание того, что объект является экземпляромByteString, на самом деле никогда не давало полезной информации об объекте. Другие распространённые типы буферов, такие какmemoryview, также никогда не воспринимались как подтипыByteString(ни во время выполнения, ни статическими проверками типов).
-
Передача имён кодировок, отличных от ASCII, в
encodings.normalize_encoding()устарела и запланирована к удалению в Python 3.17. (Автор: Stan Ulbrych в gh-136702.)
-
webbrowser.MacOSXOSAScriptустарело; вместо него используйтеwebbrowser.MacOS. (gh-137586)
-
До Python 3.14 старые объединения реализовывались с помощью закрытого класса
typing._UnionGenericAlias. Этот класс больше не нужен для реализации, но сохранён для обратной совместимости; его удаление запланировано на Python 3.17. Пользователям следует использовать документированные вспомогательные функции интроспекции, такие какtyping.get_origin()иtyping.get_args(), вместо того чтобы полагаться на закрытые детали реализации.typing.ByteString, устаревший с Python 3.9, запланирован к удалению в Python 3.17.Используйте
isinstance(obj, collections.abc.Buffer), чтобы проверить, реализует лиobjпротокол буфера во время выполнения. Для использования в аннотациях типов используйте либоBuffer, либо объединение, которое явно указывает типы, поддерживаемые вашим кодом (например,bytes | bytearray | memoryview).ByteStringизначально задумывался как абстрактный класс, который служил бы супертипом как дляbytes, так и дляbytearray. Однако, поскольку у ABC никогда не было методов, знание того, что объект является экземпляромByteString, на самом деле никогда не давало полезной информации об объекте. Другие распространённые типы буферов, такие какmemoryview, также никогда не воспринимались как подтипыByteString(ни во время выполнения, ни статическими проверками типов).
-
Методы
tkinter.Variable:trace_variable(),trace()(псевдонимtrace_variable()),trace_vdelete()иtrace_vinfo(), устаревшие с Python 3.14, запланированы к удалению в Python 3.17. Вместо них используйтеtrace_add(),trace_remove()иtrace_info(). (Автор: Serhiy Storchaka в gh-120220.)
Ожидаемое удаление в Python 3.18¶Pending removal in Python 3.18
Запланировано к удалению в Python 3.19¶Pending removal in Python 3.19
-
В конструкторах хеш-функций, таких как
new(), или прямых конструкторах, названных по имени хеша, таких какmd5()иsha256(), их необязательный параметр начальных данных мог также передаваться как именованный аргумент с именемdata=илиstring=в различных реализацияхhashlib.Поддержка имени именованного аргумента
stringтеперь устарела и будет удалена в Python 3.19.До Python 3.13 именованный параметр
stringне поддерживался правильно в зависимости от реализации хеш-функций на стороне бэкенда. Предпочтительно передавать начальные данные как позиционный аргумент для максимальной обратной совместимости.
-
http.cookies.Morsel.js_output()устарело и будет удалено в Python 3.19.http.cookies.BaseCookie.js_output()устарело и будет удалено в Python 3.19.
-
Изменение
IMAP4.fileтеперь устарело и будет удалено в Python 3.19. Это свойство теперь не используется, и изменение его значения не приводит к автоматическому закрытию текущего файла.До Python 3.14 это свойство использовалось для реализации соответствующих методов
read()иreadline()дляIMAP4, но с тех пор это уже не так.
Ожидается удаление в Python 3.20¶Pending removal in Python 3.20
Вызов метода
__new__()объектаstruct.Structбез аргумента format устарел и будет удалён в Python 3.20. Вызов метода__init__()на инициализированных объектахStructустарел и будет удалён в Python 3.20.(Предложено Сергеем Б. Кирпичевым и Сергеем Сторчакой в gh-143715.)
Атрибуты
__version__,versionиVERSIONустарели в этих модулях стандартной библиотеки и будут удалены в Python 3.20. Вместо них используйтеsys.version_info.ctypes.macholibdecimal(вместо используйтеdecimal.SPEC_VERSION)logging(__date__также устарел)xml.sax.expatreader
(Предложено Хьюго ван Кеменаде и Стэном Ульбрыхом в gh-76007.)
Устаревания, определённые в PEP 829:
Предупреждения выдаются для строк
import, найденных в файлахname.pth.Файлы
name.pthбольше не декодируются в кодировке локали по умолчанию. Они ДОЛЖНЫ быть закодированы вutf-8-sig.
(Предложено Барри Варшавом в gh-148641.)
ast:Создание экземпляров абстрактных узлов AST (таких как
ast.ASTилиast.expr) устарело и будет вызывать ошибку в Python 3.20.
Ожидается удаление в Python 3.21¶Pending removal in Python 3.21
-
Мягко устаревшие с Python 3.3
abc.abstractclassmethod,abc.abstractstaticmethodиabc.abstractpropertyтеперь вызываютDeprecationWarning. Эти классы будут удалены в Python 3.21, вместо них используйтеabc.abstractmethod()сclassmethod(),staticmethod()иpropertyсоответственно.
ast:Классы
slice,Index,ExtSlice,Suite,Param,AugLoadиAugStoreбудут удалены в Python 3.21. Эти типы не создаются синтаксическим анализатором и не принимаются генератором кода.Свойство
dimsобъектаast.Tupleбудет удалено в Python 3.21. Используйте свойствоast.Tuple.eltsвместо него.
-
Мягко устаревшие с Python 3.15, коды типов
'F'и'D'теперь устарели. Эти коды будут удалены в Python 3.21. Используйте вместо них двухбуквенные формы'Zf'и'Zd'.
-
tempfile._TemporaryFileWrapperбудет удалён в Python 3.21. Используйте публичныйtempfile.TemporaryFileWrapperвместо него.
Ожидается удаление в будущих версиях¶Pending removal in future versions
Следующие API будут удалены в будущем, хотя на данный момент нет запланированной даты их удаления.
-
Вложение групп аргументов и вложение взаимоисключающих групп устарело.
Передача недокументированного именованного аргумента prefix_chars в
add_argument_group()теперь устарела.Конвертер типов
argparse.FileTypeустарел.
-
Генераторы: сигнатура
throw(type, exc, tb)иathrow(type, exc, tb)устарела: используйтеthrow(exc)иathrow(exc)вместо неё, сигнатуру с одним аргументом.В настоящее время Python принимает числовые литералы, за которыми сразу следуют ключевые слова, например
0in x,1or x,0if 1else 2. Это допускает запутанные и неоднозначные выражения вроде[0x1for x in y](которое может быть интерпретировано как[0x1 for x in y]или[0x1f or x in y]). Выдаётся предупреждение синтаксиса, если за числовым литералом сразу следует одно из ключевых словand,else,for,if,in,isиor. В будущем выпуске это будет изменено на синтаксическую ошибку. (gh-87999)Поддержка методов
__index__()и__int__(), возвращающих не-int тип: эти методы должны будут возвращать экземпляр строгого подклассаint.Поддержка метода
__float__(), возвращающего строгий подклассfloat: эти методы должны будут возвращать экземплярfloat.Поддержка метода
__complex__(), возвращающего строгий подклассcomplex: эти методы должны будут возвращать экземплярcomplex.Передача комплексного числа в качестве аргумента real или imag в конструкторе
complex()теперь устарела; его следует передавать только как единственный позиционный аргумент. (Автор: Сергей Сторчака в gh-109218.)
calendar: константыcalendar.Januaryиcalendar.Februaryустарели и заменены наcalendar.JANUARYиcalendar.FEBRUARY. (Автор: Prince Roshan в gh-103636.)codecs: используйтеopen()вместоcodecs.open(). (gh-133038)codeobject.co_lnotab: используйте методcodeobject.co_lines()вместо этого.-
utcnow(): используйтеdatetime.datetime.now(tz=datetime.UTC).utcfromtimestamp(): используйтеdatetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).
gettext: значение множественного числа должно быть целым числом.-
cache_from_source(): параметр debug_override устарел: используйте параметр optimization вместо него.
-
EntryPoints: интерфейс кортежа.Неявное
Noneдля возвращаемых значений.
logging: методwarn()устарел начиная с Python 3.3, используйтеwarning()вместо него.mailbox: использование StringIO в режиме ввода и текстовом режиме устарело, используйте BytesIO и двоичный режим.os: вызовos.register_at_fork()в многопоточном процессе.os.path:os.path.commonprefix()устарела, используйтеos.path.commonpath()для префиксов путей. Функцияos.path.commonprefix()объявлена устаревшей из-за вводящего в заблуждение названия и модуля. Эта функция небезопасна для использования в качестве префиксов путей, несмотря на то что находится в модуле для работы с путями, что означает, что легко случайно внести уязвимости обхода путей в программы на Python, используя эту функцию.pydoc.ErrorDuringImport: кортежное значение для параметра exc_info устарело, используйте экземпляр исключения.re: теперь применяются более строгие правила для числовых ссылок на группы и имён групп в регулярных выражениях. В качестве числовой ссылки теперь принимается только последовательность цифр ASCII. Имя группы в байтовых шаблонах и строках замены теперь может содержать только буквы ASCII, цифры и знак подчёркивания. (Автор: Сергей Сторчака в gh-91760.)shutil: параметр onerror методаrmtree()устарел в Python 3.12; используйте параметр onexc вместо него.ssl: опции и протоколы:ssl.SSLContextбез аргумента протокол устарело.ssl.SSLContext:set_npn_protocols()иselected_npn_protocol()устарели: используйте ALPN вместо них.ssl.OP_NO_SSL*: опцииssl.OP_NO_TLS*: опцииssl.PROTOCOL_SSLv3ssl.PROTOCOL_TLSssl.PROTOCOL_TLSv1ssl.PROTOCOL_TLSv1_1ssl.PROTOCOL_TLSv1_2ssl.TLSVersion.SSLv3ssl.TLSVersion.TLSv1ssl.TLSVersion.TLSv1_1
threading: методыthreading.Condition.notifyAll(): используйтеnotify_all().threading.Event.isSet(): используйтеis_set().threading.Thread.isDaemon(),threading.Thread.setDaemon(): используйте атрибутthreading.Thread.daemon.threading.Thread.getName(),threading.Thread.setName(): используйте атрибутthreading.Thread.name.threading.currentThread(): используйтеthreading.current_thread().threading.activeCount(): используйтеthreading.active_count().
Внутренний класс
typing._UnionGenericAliasбольше не используется для реализацииtyping.Union. Для сохранения совместимости с пользователями, использующими этот закрытый класс, будет предоставлена прослойка совместимости как минимум до Python 3.17. (Автор: Jelle Zijlstra, gh-105499.)unittest.IsolatedAsyncioTestCase: возврат значения, не являющегосяNone, из тестового примера устарел.urllib.parseустаревшие функции: используйтеurlparse()вместо них.splitattr()splithost()splitnport()splitpasswd()splitport()splitquery()splittag()splittype()splituser()splitvalue()to_bytes()
wsgiref:SimpleHandler.stdout.write()не должна выполнять частичную запись.xml.etree.ElementTree: проверка истинностного значенияElementустарела. В будущем выпуске она всегда будет возвращатьTrue. Вместо этого используйте явные проверкиlen(elem)илиelem is not None.sys._clear_type_cache()устарело: используйтеsys._clear_internal_caches()вместо него.
Мягкие устаревания¶Soft deprecations
Планов по удалению мягко устаревших API нет.
re.match()иre.Pattern.match()теперь мягко устарели в пользу новых APIre.prefixmatch()иre.Pattern.prefixmatch(), которые были добавлены как альтернативные, более явные имена. Они предназначены для устранения путаницы относительно того, что означает match, следуя мантре Дзена Python «Явное лучше неявного». Большинство других библиотек регулярных выражений используют API с именем match для обозначения того, что в Python всегда называлось search.Мы не планируем удалять старое имя
match(), так как оно используется в коде более 30 лет. Код, поддерживающий старые версии Python, должен продолжать использоватьmatch(), а в новом коде следует предпочитатьprefixmatch(). См. prefixmatch() vs. match().(Авторы: Gregory P. Smith, gh-86519, и Hugo van Kemenade, gh-148100.)
Устаревания в C API¶C API deprecations
Запланировано удаление в Python 3.18¶Pending removal in Python 3.18
Следующие закрытые функции устарели и планируются к удалению в Python 3.18:
_PyBytes_Join(): используйтеPyBytes_Join()._PyDict_GetItemStringWithError(): используйтеPyDict_GetItemStringRef()._PyDict_Pop(): используйтеPyDict_Pop()._PyLong_Sign(): используйтеPyLong_GetSign()._PyLong_FromDigits()и_PyLong_New(): используйтеPyLongWriter_Create()._PyThreadState_UncheckedGet(): используйтеPyThreadState_GetUnchecked()._PyUnicode_AsString(): используйтеPyUnicode_AsUTF8()._PyUnicodeWriter_Init(): замените_PyUnicodeWriter_Init(&writer)наwriter = PyUnicodeWriter_Create(0)._PyUnicodeWriter_Finish(): замените_PyUnicodeWriter_Finish(&writer)наPyUnicodeWriter_Finish(writer)._PyUnicodeWriter_Dealloc(): замените_PyUnicodeWriter_Dealloc(&writer)наPyUnicodeWriter_Discard(writer)._PyUnicodeWriter_WriteChar(): замените_PyUnicodeWriter_WriteChar(&writer, ch)наPyUnicodeWriter_WriteChar(writer, ch)._PyUnicodeWriter_WriteStr(): замените_PyUnicodeWriter_WriteStr(&writer, str)наPyUnicodeWriter_WriteStr(writer, str)._PyUnicodeWriter_WriteSubstring(): замените_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)наPyUnicodeWriter_WriteSubstring(writer, str, start, end)._PyUnicodeWriter_WriteASCIIString(): заменить_PyUnicodeWriter_WriteASCIIString(&writer, str)наPyUnicodeWriter_WriteASCII(writer, str)._PyUnicodeWriter_WriteLatin1String(): заменить_PyUnicodeWriter_WriteLatin1String(&writer, str)наPyUnicodeWriter_WriteUTF8(writer, str)._PyUnicodeWriter_Prepare(): (нет замены)._PyUnicodeWriter_PrepareKind(): (нет замены)._Py_HashPointer(): используйтеPy_HashPointer()._Py_fopen_obj(): используйтеPy_fopen().PyGen_New(): (нет замены).PyGen_NewWithQualName(): (нет замены).PyCoro_New(): (нет замены).PyAsyncGen_New(): (нет замены).
Проект pythoncapi-compat можно использовать для получения этих новых открытых функций в Python 3.13 и старше. (Предложено Виктором Стиннером в gh-128863.)
Запланировано к удалению в Python 3.19¶Pending removal in Python 3.19
PEP 456 поддержка встраивающих систем для определения схемы хеширования строк.
Будет удалено в Python 3.20¶Pending removal in Python 3.20
_PyObject_CallMethodId(),_PyObject_GetAttrId()и_PyUnicode_FromId()устарели с версии 3.15 и будут удалены в 3.20. Вместо этого используйтеPyUnicode_InternFromString()и кешируйте результат в состоянии модуля, затем вызывайтеPyObject_CallMethod()илиPyObject_GetAttr(). (Предложено Виктором Стиннером в gh-141049.)Поле
cvalвPyComplexObject(gh-128813). ИспользуйтеPyComplex_AsCComplex()иPyComplex_FromCComplex()для преобразования комплексного числа Python в/из представления CPy_complex.Макросы
Py_MATH_PIlиPy_MATH_El.
Будет удалено в будущих версиях¶Pending removal in future versions
Следующие API устарели и будут удалены, хотя на данный момент дата их удаления не назначена.
Py_TPFLAGS_HAVE_FINALIZE: Не требуется начиная с Python 3.8.PyErr_Fetch(): Вместо этого используйтеPyErr_GetRaisedException().PyErr_NormalizeException(): Вместо этого используйтеPyErr_GetRaisedException().PyErr_Restore(): Вместо этого используйтеPyErr_SetRaisedException().PyModule_GetFilename(): Вместо этого используйтеPyModule_GetFilenameObject().PyOS_AfterFork(): Вместо этого используйтеPyOS_AfterFork_Child().PySlice_GetIndicesEx(): Вместо этого используйтеPySlice_Unpack()иPySlice_AdjustIndices().PyUnicode_READY(): Не требуется начиная с Python 3.12PyErr_Display(): Вместо этого используйтеPyErr_DisplayException()._PyErr_ChainExceptions(): Вместо этого используйте_PyErr_ChainExceptions1().Элемент
PyBytesObject.ob_shash: вместо этого вызывайтеPyObject_Hash().API локального хранилища потока (TLS):
PyThread_create_key(): Вместо этого используйтеPyThread_tss_alloc().PyThread_delete_key(): Вместо этого используйтеPyThread_tss_free().PyThread_set_key_value(): Вместо этого используйтеPyThread_tss_set().PyThread_get_key_value(): Вместо этого используйтеPyThread_tss_get().PyThread_delete_key_value(): Вместо этого используйтеPyThread_tss_delete().PyThread_ReInitTLS(): Не требуется с Python 3.7.