Spec-Zone.ru › Python 3.12

Устаревшие функции

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

Модули (см. PEP 594):

  • aifc
  • audioop
  • cgi
  • cgitb
  • chunk
  • crypt
  • imghdr
  • mailcap
  • msilib
  • nis
  • nntplib
  • ossaudiodev
  • pipes
  • sndhdr
  • spwd
  • sunau
  • telnetlib
  • uu
  • xdrlib

Другие модули:

  • lib2to3 и программа 2to3 (gh-84540)

API:

  • configparser.LegacyInterpolation (gh-90765)
  • locale.resetlocale() (gh-90817)
  • turtle.RawTurtle.settiltangle() (gh-50096)
  • unittest.findTestCases() (gh-50096)
  • unittest.getTestCaseNames() (gh-50096)
  • unittest.makeSuite() (gh-50096)
  • unittest.TestProgram.usageExit() (gh-67048)
  • webbrowser.MacOSX (gh-86421)
  • Цепочки дескрипторов classmethod (gh-89519)
  • Устаревшие методы importlib.resources:

    • contents()
    • is_resource()
    • open_binary()
    • open_text()
    • path()
    • read_binary()
    • read_text()

    Вместо них используйте importlib.resources.files(). См. importlib-resources: переход с устаревшего интерфейса (gh-106531)

Планируется удалить в 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.)
  • collections.abc: устаревший тип ByteString. Предпочтительно использовать Sequence или Buffer. Для аннотаций типов предпочтительно использовать объединение, например bytes | bytearray, или collections.abc.Buffer. (Предложено Шантану Джейном в gh-91896.)
  • email: параметр isdst функции email.utils.localtime() объявлен устаревшим. (Предложено Аланом Уильямсом в gh-72346.)
  • importlib: система импорта перестанет устанавливать или учитывать __package__ и __cached__ (gh-97879).
  • Устаревшие классы 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). Предупреждение во время выполнения сочли слишком обременительным, поскольку предполагается, что большинству кода это не важно. Используйте 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.
  • typing: использование ByteString, объявленного устаревшим начиная с Python 3.9, теперь вызывает предупреждение DeprecationWarning.
  • urllib: urllib.parse.Quoter объявлен устаревшим, поскольку не предназначался для использования в качестве публичного API. (Предложено Грегори П. Смитом в gh-88168.)

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

  • http.server.CGIHTTPRequestHandler будет удалён вместе со связанным флагом --cgi у python -m http.server. Он устарел и редко использовался. Прямой замены нет. Для взаимодействия веб-сервера с обработчиком запросов подойдёт что угодно, кроме CGI.
  • importlib:

    • Метод load_module(): вместо него используйте exec_module().
  • locale: locale.getdefaultlocale() была объявлена устаревшей в Python 3.11, и изначально её планировали удалить в Python 3.13 (gh-90817), однако удаление отложили до Python 3.15. Вместо неё используйте locale.setlocale(), locale.getencoding() и locale.getlocale(). (Предложено Хьюго ван Кеменаде в gh-111187.)
  • pathlib: pathlib.PurePath.is_reserved() объявлен устаревшим и будет удалён в Python 3.15. Начиная с Python 3.13 для проверки путей, зарезервированных в Windows, используйте os.path.isreserved.
  • platform: java_ver() объявлена устаревшей и будет удалена в версии 3.15. Она практически не тестировалась, имела запутанный API и была полезна только для поддержки Jython. (Предложено Никитой Соболевым в gh-116349.)
  • sysconfig:

    • Аргумент check_home функции sysconfig.is_python_build() объявлен устаревшим начиная с Python 3.12.
  • threading: передача любых аргументов в threading.RLock() теперь считается устаревшей. Версия на C принимает любое количество позиционных и именованных аргументов, но просто игнорирует их. Версия на Python не принимает никаких аргументов. В Python 3.15 все аргументы будут удалены из threading.RLock(). (Предложено Никитой Соболевым в gh-102029.)
  • typing.NamedTuple:

    • Недокументированный синтаксис с именованными аргументами для создания классов NamedTuple (NT = NamedTuple("NT", x=int)) объявлен устаревшим и будет запрещён в версии 3.15. Вместо него используйте синтаксис на основе классов или функциональный синтаксис.
  • types:

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

    • При создании класса NamedTuple с помощью функционального синтаксиса объявлено устаревшим не передавать значение параметру fields (NT = NamedTuple("NT")). Также объявлена устаревшей передача None параметру fields (NT = NamedTuple("NT", None)). Оба варианта будут запрещены в Python 3.15. Чтобы создать класс NamedTuple с нулём полей, используйте class NT(NamedTuple): pass или NT = NamedTuple("NT", []).
  • typing.TypedDict: при создании класса TypedDict с помощью функционального синтаксиса объявлено устаревшим не передавать значение параметру fields (TD = TypedDict("TD")). Также объявлена устаревшей передача None параметру fields (TD = TypedDict("TD", None)). Оба варианта будут запрещены в Python 3.15. Чтобы создать класс TypedDict с нулём полей, используйте class TD(TypedDict): pass или TD = TypedDict("TD", {}).
  • wave: методы getmark(), setmark() и getmarkers() классов wave.Wave_read и wave.Wave_write объявлены устаревшими. Они будут удалены в Python 3.15. (Предложено Виктором Стиннером в gh-105096.)

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

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

    • Установка __loader__ для модуля без установки __spec__.loader объявлена устаревшей. В Python 3.16 система импорта и стандартная библиотека перестанут устанавливать или учитывать __loader__.
  • array: тип 'u' array.array (wchar_t): вместо него используйте тип 'w' (Py_UCS4).
  • builtins: ~bool, побитовая инверсия для bool.
  • symtable: метод symtable.Class.get_methods() объявлен устаревшим из-за отсутствия интереса к нему. (Предложено Бенедиктом Траном в gh-119698.)

Будут удалены в будущих версиях

  • argparse: Вложенные группы аргументов и вложенные взаимоисключающие группы объявлены устаревшими.
  • array: форматный код 'u' (gh-57281)
  • builtins:

    • bool(NotImplemented).
    • Генераторы: сигнатуры 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 возвращаемых значений.
  • 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 без аргумента protocol объявлен устаревшим.
    • 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

  • Встроенная копия libmpdecimal.
  • 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.exec_prefix.
    • Py_GetPath(): вместо этого получите sys.path.
    • Py_GetPrefix(): вместо этого получите 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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/deprecations/index.html

Spec-Zone.ru

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