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

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

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

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

  • Система импорта:

    • Установка __cached__ в модуле без установки __spec__.cached считается устаревшей. Начиная с Python 3.15 __cached__ больше не будет устанавливаться или учитываться системой импорта или стандартной библиотекой. (gh-97879)

    • Установка __package__ в модуле без установки __spec__.parent считается устаревшей. Начиная с Python 3.15 __package__ больше не будет устанавливаться или учитываться системой импорта или стандартной библиотекой. (gh-97879)

  • ctypes:

    • Незадокументированная функция ctypes.SetPointerType() считается устаревшей начиная с Python 3.13.

  • http.server:

    • Устаревшая и редко используемая CGIHTTPRequestHandler считается устаревшей начиная с Python 3.13. Прямой замены не существует. Что угодно лучше, чем CGI, для взаимодействия веб-сервера с обработчиком запросов.

    • Флаг --cgi для python -m http.server интерфейса командной строки считается устаревшим начиная с Python 3.13.

  • importlib:

    • Метод load_module(): вместо него используйте exec_module().

  • pathlib:

    • PurePath.is_reserved() считается устаревшим начиная с Python 3.13. Используйте os.path.isreserved() для обнаружения зарезервированных путей в Windows.

  • platform:

    • java_ver() считается устаревшим начиная с Python 3.13. Эта функция полезна только для поддержки Jython, имеет запутанный API и в значительной степени не тестировалась.

  • sysconfig:

    • Аргумент check_home функции sysconfig.is_python_build() считается устаревшим начиная с Python 3.12.

  • threading:

    • RLock() не будет принимать аргументов в Python 3.15. Передача любых аргументов считается устаревшей начиная с Python 3.14, поскольку версия на Python не допускает никаких аргументов, но версия на C позволяет любое количество позиционных или именованных аргументов, игнорируя все аргументы.

  • types:

    • types.CodeType: доступ к co_lnotab был объявлен устаревшим в PEP 626 начиная с версии 3.10 и планировался к удалению в 3.12, но получил надлежащий DeprecationWarning только в 3.12. Может быть удалён в 3.15. (Предложено Никитой Соболевым в gh-101866.)

  • typing:

    • Незадокументированный синтаксис именованных аргументов для создания NamedTuple классов (например, Point = NamedTuple("Point", x=int, y=int)) является устаревшим начиная с Python 3.13. Вместо него используйте синтаксис на основе классов или функциональный синтаксис.

    • При использовании функционального синтаксиса TypedDict, отсутствие передачи значения параметру поля (TD = TypedDict("TD")) или передача None (TD = TypedDict("TD", None)) считается устаревшим начиная с Python 3.13. Используйте class TD(TypedDict): pass или TD = TypedDict("TD", {}) для создания TypedDict без полей.

    • Функция-декоратор typing.no_type_check_decorator() считается устаревшей начиная с Python 3.13. За восемь лет в модуле typing она так и не была поддержана ни одним крупным средством проверки типов.

  • wave:

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

  • Система импорта:

    • Установка __loader__ в модуле при отсутствии __spec__.loader устарела. В Python 3.16 __loader__ перестанет устанавливаться или учитываться системой импорта или стандартной библиотекой.

  • array:

    • Код формата 'u' (wchar_t) устарел в документации начиная с Python 3.3 и во время выполнения начиная с Python 3.13. Используйте код формата 'w' (Py_UCS4) для символов Unicode.

  • asyncio:

    • asyncio.iscoroutinefunction() устарело и будет удалено в Python 3.16, используйте inspect.iscoroutinefunction() вместо него. (Авторы: Jiahao Li и Kumar Aditya в gh-122875.)

  • builtins:

    • Поразрядная инверсия для булевых типов, ~True или ~False устарела начиная с Python 3.12, поскольку даёт неожиданные и неинтуитивные результаты (-2 и -1). Используйте not x для логического отрицания булевого значения. В редких случаях, когда требуется поразрядная инверсия базового целого числа, явно преобразуйте в int (~int(x)).

  • shutil:

    • Исключение ExecError устарело начиная с Python 3.14. Оно не используется ни одной функцией в shutil начиная с Python 3.4 и теперь является псевдонимом RuntimeError.

  • symtable:

  • sys:

  • tarfile:

    • Недокументированный и неиспользуемый атрибут TarFile.tarfile устарел начиная с Python 3.13.

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

  • 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.)

  • 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.)

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

  • decimal:

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

Запланировано к удалению в будущих версияхPending Removal in Future Versions

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

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

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

    • Делегирование int() методу __trunc__().

    • Передача комплексного числа в качестве аргумента real или imag в конструкторе complex() теперь устарела; его следует передавать только как единственный позиционный аргумент. (Автор: Сергей Сторчака в gh-109218.)

  • calendar: константы calendar.January и calendar.February устарели и заменены на calendar.JANUARY и calendar.FEBRUARY. (Автор: Prince Roshan в gh-103636.)

  • 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() в многопоточном процессе.

  • pydoc.ErrorDuringImport: кортежное значение для параметра exc_info устарело, используйте экземпляр исключения.

  • re: теперь применяются более строгие правила для числовых ссылок на группы и имён групп в регулярных выражениях. В качестве числовой ссылки теперь принимается только последовательность цифр ASCII. Имя группы в байтовых шаблонах и строках замены теперь может содержать только буквы ASCII, цифры и знак подчёркивания. (Автор: Сергей Сторчака в gh-91760.)

  • Модули sre_compile, sre_constants и sre_parse.

  • 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).

  • unittest.IsolatedAsyncioTestCase: возврат значения, не являющегося None, из тестового примера устарел.

  • urllib.parse устаревшие функции: используйте urlparse() вместо них.

    • splitattr()

    • splithost()

    • splitnport()

    • splitpasswd()

    • splitport()

    • splitquery()

    • splittag()

    • splittype()

    • splituser()

    • splitvalue()

    • to_bytes()

  • urllib.request: Стиль вызова запросов URLopener и FancyURLopener устарел. Используйте более новые функции и методы urlopen().

  • wsgiref: SimpleHandler.stdout.write() не должна выполнять частичную запись.

  • xml.etree.ElementTree: проверка истинностного значения Element устарела. В будущем выпуске она всегда будет возвращать True. Вместо этого используйте явные проверки len(elem) или elem is not None.

  • zipimport.zipimporter.load_module() устарело: используйте exec_module() вместо него.

Устаревшие возможности C APIC API Deprecations

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

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

Запланировано к удалению в будущих версияхPending Removal in Future Versions

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