Документация Python неофициальный перевод
Содержание страницы

УстареванияDeprecations

Ожидаемое удаление в Python 3.17Pending removal in Python 3.17

  • datetime:

    • strptime() вызовы со строкой формата, содержащей %e (день месяца) без указания года. Это устарело с Python 3.15. (Автор: Stan Ulbrych в gh-70647.)

  • collections.abc:

    • collections.abc.ByteString запланирован к удалению в Python 3.17.

      Используйте isinstance(obj, collections.abc.Buffer), чтобы проверить, реализует ли obj протокол буфера во время выполнения. Для использования в аннотациях типов используйте либо Buffer, либо объединение, которое явно указывает типы, поддерживаемые вашим кодом (например, bytes | bytearray | memoryview).

      ByteString изначально задумывался как абстрактный класс, который служил бы супертипом как для bytes, так и для bytearray. Однако, поскольку у ABC никогда не было методов, знание того, что объект является экземпляром ByteString, на самом деле никогда не давало полезной информации об объекте. Другие распространённые типы буферов, такие как memoryview, также никогда не воспринимались как подтипы ByteString (ни во время выполнения, ни статическими проверками типов).

      Подробнее см. PEP 688. (Автор: Shantanu Jain в gh-91896.)

  • encodings:

    • Передача имён кодировок, отличных от ASCII, в encodings.normalize_encoding() устарела и запланирована к удалению в Python 3.17. (Автор: Stan Ulbrych в gh-136702.)

  • webbrowser:

    • webbrowser.MacOSXOSAScript устарело; вместо него используйте webbrowser.MacOS. (gh-137586)

  • typing:

    • До 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 (ни во время выполнения, ни статическими проверками типов).

      Подробнее см. PEP 688. (Автор: Shantanu Jain в gh-91896.)

  • tkinter:

    • Методы 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.18Pending removal in Python 3.18

  • Больше не принимает логическое значение, если ожидается файловый дескриптор. (Автор: Serhiy Storchaka в gh-82626.)

  • decimal:

    • Нестандартный и недокументированный Decimal спецификатор формата 'N', который поддерживается только в реализации C модуля decimal, устарел с Python 3.13. (Автор: Serhiy Storchaka в gh-89902.)

  • Устаревания, определённые в PEP 829:

    • Строки import в файлах name.pth молча игнорируются.

    (Предложено Барри Варшавом в gh-148641.)

Запланировано к удалению в Python 3.19Pending removal in Python 3.19

  • ctypes:

    • Неявное переключение на совместимую с MSVC структуру путём установки _pack_ без _layout_ на платформах, отличных от Windows.

  • hashlib:

    • В конструкторах хеш-функций, таких как new(), или прямых конструкторах, названных по имени хеша, таких как md5() и sha256(), их необязательный параметр начальных данных мог также передаваться как именованный аргумент с именем data= или string= в различных реализациях hashlib.

      Поддержка имени именованного аргумента string теперь устарела и будет удалена в Python 3.19.

      До Python 3.13 именованный параметр string не поддерживался правильно в зависимости от реализации хеш-функций на стороне бэкенда. Предпочтительно передавать начальные данные как позиционный аргумент для максимальной обратной совместимости.

  • http.cookies:

  • imaplib:

    • Изменение IMAP4.file теперь устарело и будет удалено в Python 3.19. Это свойство теперь не используется, и изменение его значения не приводит к автоматическому закрытию текущего файла.

      До Python 3.14 это свойство использовалось для реализации соответствующих методов read() и readline() для IMAP4, но с тех пор это уже не так.

Ожидается удаление в Python 3.20Pending 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.

    (Предложено Хьюго ван Кеменаде и Стэном Ульбрыхом в 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.21Pending removal in Python 3.21

  • abc

  • ast:

    • Классы slice, Index, ExtSlice, Suite, Param, AugLoad и AugStore будут удалены в Python 3.21. Эти типы не создаются синтаксическим анализатором и не принимаются генератором кода.

    • Свойство dims объекта ast.Tuple будет удалено в Python 3.21. Используйте свойство ast.Tuple.elts вместо него.

  • struct:

    • Мягко устаревшие с Python 3.15, коды типов 'F' и 'D' теперь устарели. Эти коды будут удалены в Python 3.21. Используйте вместо них двухбуквенные формы 'Zf' и 'Zd'.

  • tempfile:

    • tempfile._TemporaryFileWrapper будет удалён в Python 3.21. Используйте публичный tempfile.TemporaryFileWrapper вместо него.

Ожидается удаление в будущих версияхPending removal in future versions

Следующие API будут удалены в будущем, хотя на данный момент нет запланированной даты их удаления.

  • argparse:

    • Вложение групп аргументов и вложение взаимоисключающих групп устарело.

    • Передача недокументированного именованного аргумента prefix_chars в add_argument_group() теперь устарела.

    • Конвертер типов argparse.FileType устарел.

  • builtins:

    • Генераторы: сигнатура 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() вместо этого.

  • datetime:

    • utcnow(): используйте datetime.datetime.now(tz=datetime.UTC).

    • utcfromtimestamp(): используйте datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).

  • gettext: значение множественного числа должно быть целым числом.

  • importlib:

    • cache_from_source(): параметр debug_override устарел: используйте параметр optimization вместо него.

  • importlib.metadata:

    • 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_SSLv3

    • ssl.PROTOCOL_TLS

    • ssl.PROTOCOL_TLSv1

    • ssl.PROTOCOL_TLSv1_1

    • ssl.PROTOCOL_TLSv1_2

    • ssl.TLSVersion.SSLv3

    • ssl.TLSVersion.TLSv1

    • ssl.TLSVersion.TLSv1_1

  • threading: методы

  • typing.Text (gh-92332).

  • Внутренний класс 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() теперь мягко устарели в пользу новых API re.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 APIC API deprecations

Запланировано удаление в Python 3.18Pending removal in Python 3.18

Запланировано к удалению в Python 3.19Pending removal in Python 3.19

  • PEP 456 поддержка встраивающих систем для определения схемы хеширования строк.

Будет удалено в Python 3.20Pending removal in Python 3.20

Будет удалено в будущих версияхPending removal in future versions

Следующие API устарели и будут удалены, хотя на данный момент дата их удаления не назначена.