Spec-Zone.ru › Python 3.13

Устаревшие возможности

Будут удалены в Python 3.14

  • argparse: параметры type, choices и metavar в argparse.BooleanOptionalAction устарели и будут удалены в версии 3.14. (Добавлено Никитой Соболевым в gh-92248.)
  • ast: следующие возможности были объявлены устаревшими в документации начиная с Python 3.8, теперь при обращении к ним или их использовании во время выполнения выдают предупреждение DeprecationWarning и будут удалены в Python 3.14:

    • ast.Num
    • ast.Str
    • ast.Bytes
    • ast.NameConstant
    • ast.Ellipsis

    Вместо этого используйте ast.Constant. (Добавлено Сергеем Сторчаком в gh-90953.)

  • asyncio:

    • Классы наблюдателей дочерних процессов MultiLoopChildWatcher, FastChildWatcher, AbstractChildWatcher и SafeChildWatcher устарели и будут удалены в Python 3.14. (Добавлено Кумаром Адитьей в gh-94597.)
    • asyncio.set_child_watcher(), asyncio.get_child_watcher(), asyncio.AbstractEventLoopPolicy.set_child_watcher() и asyncio.AbstractEventLoopPolicy.get_child_watcher() устарели и будут удалены в Python 3.14. (Добавлено Кумаром Адитьей в gh-94597.)
    • Метод get_event_loop() политики цикла событий по умолчанию теперь выдает предупреждение DeprecationWarning, если текущий цикл событий не задан и метод решает создать его. (Добавлено Сергеем Сторчаком и Гвидо ван Россумом в gh-100160.)
  • builtins: bool(NotImplemented) теперь выдает предупреждение DeprecationWarning, а в Python 3.14 будет возбуждать исключение TypeError. (Добавлено Йелле Зейлстрой в gh-118767.)
  • email: параметр isdst в email.utils.localtime() объявлен устаревшим. (Добавлено Аланом Уильямсом в gh-72346.)
  • Устаревшие классы importlib.abc:

    • importlib.abc.ResourceReader
    • importlib.abc.Traversable
    • importlib.abc.TraversableResources

    Вместо них используйте классы importlib.resources.abc:

    • importlib.resources.abc.Traversable
    • importlib.resources.abc.TraversableResources

    (Добавлено Джейсоном Р. Кумбсом и Хьюго ван Кеменаде в gh-93963.)

  • itertools имел неподокументированную, неэффективную, исторически проблемную и непоследовательную поддержку операций копирования, глубокого копирования и pickle. Она будет удалена в версии 3.14, что значительно сократит объем кода и расходы на его сопровождение. (Добавлено Рэймондом Хеттингером в gh-101588.)
  • multiprocessing: в Linux, BSD и других POSIX-платформах, кроме macOS, где сейчас по умолчанию используется 'fork', метод запуска по умолчанию изменится на более безопасный (gh-84559). Добавление предупреждения во время выполнения сочли слишком disruptive, поскольку предполагается, что большинству кода это не важно. Используйте API get_context() или set_start_method(), чтобы явно указать, когда вашему коду требуется 'fork'. См. Контексты и методы запуска.
  • pathlib: передача дополнительных аргументов в is_relative_to() и relative_to() объявлена устаревшей.
  • pkgutil: find_loader() и get_loader() теперь выдают предупреждение DeprecationWarning; вместо них используйте importlib.util.find_spec(). (Добавлено Никитой Соболевым в gh-97850.)
  • pty:

    • master_open(): используйте pty.openpty().
    • slave_open(): используйте pty.openpty().
  • sqlite3:

    • version и version_info.
    • execute() и executemany(), если используются именованные заполнители, а parameters является последовательностью, а не dict.
  • urllib: urllib.parse.Quoter объявлен устаревшим: он не предназначался для использования в качестве общедоступного API. (Добавлено Грегори П. Смитом в gh-88168.)

Будут удалены в 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().
  • locale:

    • Функция getdefaultlocale() объявлена устаревшей начиная с Python 3.11. Изначально ее планировалось удалить в Python 3.13 (gh-90817), но удаление отложили до Python 3.15. Вместо нее используйте getlocale(), setlocale() и getencoding(). (Добавлено Хьюго ван Кеменаде в gh-111187.)
  • pathlib:

    • PurePath.is_reserved() объявлен устаревшим начиная с Python 3.13. Для проверки зарезервированных путей в Windows используйте os.path.isreserved().
  • 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 объявлено устаревшим начиная с Python 3.13 отсутствие значения для параметра fields (TD = TypedDict("TD")) или передача None (TD = TypedDict("TD", None)). Чтобы создать TypedDict без полей, используйте class TD(TypedDict): pass или TD = TypedDict("TD", {}).
    • Функция-декоратор typing.no_type_check_decorator() объявлена устаревшей начиная с Python 3.13. За восемь лет существования в модуле typing ее так и не поддержал ни один крупный анализатор типов.
  • wave:

    • Методы getmark(), setmark() и getmarkers() классов Wave_read и Wave_write объявлены устаревшими начиная с Python 3.13.

Будут удалены в Python 3.16

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

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

    • Код формата 'u' (wchar_t) объявлен устаревшим в документации начиная с Python 3.3, а во время выполнения — начиная с Python 3.13. Для символов Unicode вместо него используйте код формата 'w' (Py_UCS4).
  • asyncio:

    • asyncio.iscoroutinefunction() объявлен устаревшим и будет удален в Python 3.16; вместо него используйте inspect.iscoroutinefunction(). (Добавлено Цзяхао Ли и Кумаром Адитьей в gh-122875.)
  • builtins:

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

    • Исключение ExecError объявлено устаревшим начиная с Python 3.14. Начиная с Python 3.4 ни одна функция в shutil его не использовала; теперь это псевдоним RuntimeError.
  • symtable:

    • Метод Class.get_methods объявлен устаревшим начиная с Python 3.14.
  • sys:

    • Функция _enablelegacywindowsfsencoding() объявлена устаревшей начиная с Python 3.13. Вместо нее используйте переменную среды PYTHONLEGACYWINDOWSFSENCODING.
  • tarfile:

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

Будут удалены в 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. (Добавлено Шантану Джейном в 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. (Добавлено Шантану Джейном в gh-91896.)

Планируется удалить в будущих версиях

Следующие 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. (Предложено Принсом Рошаном в 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:

    • Параметр debug_override функции cache_from_source() объявлен устаревшим: вместо него используйте параметр 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:

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

Планируется удалить в Python 3.14

  • Поле ma_version_tag в PyDictObject для модулей расширения (PEP 699; gh-101193).
  • Создание immutable types с изменяемыми базовыми классами (gh-95388).
  • Функции настройки инициализации Python, объявленные устаревшими в Python 3.11:

    • PySys_SetArgvEx(): вместо этого задайте PyConfig.argv.
    • PySys_SetArgv(): вместо этого задайте PyConfig.argv.
    • Py_SetProgramName(): вместо этого задайте PyConfig.program_name.
    • Py_SetPythonHome(): вместо этого задайте PyConfig.home.

    Вместо этого следует использовать API Py_InitializeFromConfig() вместе с PyConfig.

  • Глобальные переменные конфигурации:

    • Py_DebugFlag: вместо этого используйте PyConfig.parser_debug.
    • Py_VerboseFlag: вместо этого используйте PyConfig.verbose.
    • Py_QuietFlag: вместо этого используйте PyConfig.quiet.
    • Py_InteractiveFlag: вместо этого используйте PyConfig.interactive.
    • Py_InspectFlag: вместо этого используйте PyConfig.inspect.
    • Py_OptimizeFlag: вместо этого используйте PyConfig.optimization_level.
    • Py_NoSiteFlag: вместо этого используйте PyConfig.site_import.
    • Py_BytesWarningFlag: вместо этого используйте PyConfig.bytes_warning.
    • Py_FrozenFlag: вместо этого используйте PyConfig.pathconfig_warnings.
    • Py_IgnoreEnvironmentFlag: вместо этого используйте PyConfig.use_environment.
    • Py_DontWriteBytecodeFlag: вместо этого используйте PyConfig.write_bytecode.
    • Py_NoUserSiteDirectory: вместо этого используйте PyConfig.user_site_directory.
    • Py_UnbufferedStdioFlag: вместо этого используйте PyConfig.buffered_stdio.
    • Py_HashRandomizationFlag: вместо этого используйте PyConfig.use_hash_seed и PyConfig.hash_seed.
    • Py_IsolatedFlag: вместо этого используйте PyConfig.isolated.
    • Py_LegacyWindowsFSEncodingFlag: вместо этого используйте PyPreConfig.legacy_windows_fs_encoding.
    • Py_LegacyWindowsStdioFlag: вместо этого используйте PyConfig.legacy_windows_stdio.
    • Py_FileSystemDefaultEncoding: вместо этого используйте PyConfig.filesystem_encoding.
    • Py_HasFileSystemDefaultEncoding: вместо этого используйте PyConfig.filesystem_encoding.
    • Py_FileSystemDefaultEncodeErrors: вместо этого используйте PyConfig.filesystem_errors.
    • Py_UTF8Mode: вместо этого используйте PyPreConfig.utf8_mode. (см. Py_PreInitialize())

    Вместо этого следует использовать API Py_InitializeFromConfig() вместе с PyConfig.

Планируется удалить в Python 3.15

  • PyImport_ImportModuleNoBlock(): вместо него используйте PyImport_ImportModule().
  • PyWeakref_GetObject() и PyWeakref_GET_OBJECT(): вместо них используйте PyWeakref_GetRef().
  • Тип Py_UNICODE и макрос Py_UNICODE_WIDE: вместо них используйте wchar_t.
  • Функции инициализации Python:

    • PySys_ResetWarnOptions(): вместо этого очистите sys.warnoptions и warnings.filters.
    • Py_GetExecPrefix(): вместо этого получите sys.base_exec_prefix и sys.exec_prefix.
    • Py_GetPath(): вместо этого получите sys.path.
    • Py_GetPrefix(): вместо этого получите sys.base_prefix и sys.prefix.
    • Py_GetProgramFullPath(): вместо этого получите sys.executable.
    • Py_GetProgramName(): вместо этого получите sys.executable.
    • Py_GetPythonHome(): вместо этого получите PyConfig.home или используйте переменную окружения PYTHONHOME.

Планируется удалить в будущих версиях

Следующие 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_AsDecodedObject(): вместо нее используйте PyCodec_Decode().
  • PyUnicode_AsDecodedUnicode(): вместо нее используйте PyCodec_Decode().
  • PyUnicode_AsEncodedObject(): вместо нее используйте PyCodec_Encode().
  • PyUnicode_AsEncodedUnicode(): вместо нее используйте PyCodec_Encode().
  • PyUnicode_READY(): не требуется начиная с Python 3.12
  • PyErr_Display(): вместо нее используйте PyErr_DisplayException().
  • _PyErr_ChainExceptions(): вместо нее используйте _PyErr_ChainExceptions1().
  • Элемент PyBytesObject.ob_shash: вместо него вызывайте PyObject_Hash().
  • Элемент PyDictObject.ma_version_tag.
  • 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.

© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/deprecations/index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API