非推奨¶
Python 3.15 で削除予定¶
インポートシステム:
Setting
__cached__on a module while failing to set__spec__.cachedis deprecated. In Python 3.15,__cached__will cease to be set or take into consideration by the import system or standard library. (gh-97879)Setting
__package__on a module while failing to set__spec__.parentis deprecated. In Python 3.15,__package__will cease to be set or take into consideration by the import system or standard library. (gh-97879)
-
The undocumented
ctypes.SetPointerType()function has been deprecated since Python 3.13.
-
The obsolete and rarely used
CGIHTTPRequestHandlerhas been deprecated since Python 3.13. No direct replacement exists. Anything is better than CGI to interface a web server with a request handler.The
--cgiflag to the python -m http.server command-line interface has been deprecated since Python 3.13.
-
load_module()method: useexec_module()instead.
-
PurePath.is_reserved()has been deprecated since Python 3.13. Useos.path.isreserved()to detect reserved paths on Windows.
-
java_ver()has been deprecated since Python 3.13. This function is only useful for Jython support, has a confusing API, and is largely untested.
-
The check_home argument of
sysconfig.is_python_build()has been deprecated since Python 3.12.
-
RLock()will take no arguments in Python 3.15. Passing any arguments has been deprecated since Python 3.14, as the Python version does not permit any arguments, but the C version allows any number of positional or keyword arguments, ignoring every argument.
-
types.CodeType: Accessingco_lnotabwas deprecated in PEP 626 since 3.10 and was planned to be removed in 3.12, but it only got a properDeprecationWarningin 3.12. May be removed in 3.15. (Contributed by Nikita Sobolev in gh-101866.)
-
The undocumented keyword argument syntax for creating
NamedTupleclasses (for example,Point = NamedTuple("Point", x=int, y=int)) has been deprecated since Python 3.13. Use the class-based syntax or the functional syntax instead.When using the functional syntax of
TypedDicts, failing to pass a value to the fields parameter (TD = TypedDict("TD")) or passingNone(TD = TypedDict("TD", None)) has been deprecated since Python 3.13. Useclass TD(TypedDict): passorTD = TypedDict("TD", {})to create a TypedDict with zero field.The
@typing.no_type_check_decoratordecorator function has been deprecated since Python 3.13. After eight years in thetypingmodule, it has yet to be supported by any major type checker.
wave:The
getmark(),setmark(), andgetmarkers()methods of theWave_readandWave_writeclasses have been deprecated since Python 3.13.
-
load_module()has been deprecated since Python 3.10. Useexec_module()instead. (Contributed by Jiahao Li in gh-125746.)
Python 3.16 で削除予定¶
インポートシステム:
モジュールの
__spec__.loaderを設定せずに__loader__を設定することは非推奨です。 Python 3.16 では、インポートシステムや標準ライブラリは__loader__を設定しなくなり、その値も参照しなくなります。
-
書式コード
'u'(wchar_t) は、Python 3.3 からドキュメントで非推奨とされ、Python 3.13 からは実行時にも非推奨とされています。 Unicode 文字には、代わりに書式コード'w'(Py_UCS4) を使ってください。
-
asyncio.iscoroutinefunction()は非推奨となり、Python 3.16 で削除されます。 代わりにinspect.iscoroutinefunction()を使ってください。 (Jiahao Li と Kumar Aditya が gh-122875 で貢献しました。)asyncioのポリシーシステムは非推奨となり、Python 3.16 で削除されます。 具体的には、以下のクラスと関数が非推奨です:使いたいイベントループの実装を指定するには、
asyncio.run()またはasyncio.Runnerのloop_factoryを使ってください。例えば、Windows で
asyncio.SelectorEventLoopを使うには、次のようにします。import asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(Kumar Aditya が gh-127949 で貢献しました。)
-
真偽値に対するビット単位の反転
~Trueや~Falseは、直感に反する意外な結果 (-2と-1) になるため、Python 3.12 から非推奨です。 真偽値の論理否定には、代わりにnot xを使ってください。 元の整数値のビット単位の反転が必要になるまれな場合には、明示的にintに変換してください (~int(x))。
-
functools.reduce()の Python 実装を、functionやsequenceをキーワード引数として指定して呼び出すことは、Python 3.14 から非推奨です。
-
strm引数を持つカスタムログハンドラーへの対応は非推奨となり、Python 3.16 で削除予定です。 代わりにstream引数を持つハンドラーを定義してください。 (Mariusz Felisiak が gh-115032 で貢献しました。) -
mimetypes.MimeTypes.add_type()で有効な拡張子は、'.' で始まるものか空のものです。 ドットのない拡張子は非推奨となり、Python 3.16 ではValueErrorが発生します。 (Hugo van Kemenade が gh-75223 で貢献しました。)
-
ExecError例外は Python 3.14 から非推奨です。 Python 3.4 以降はshutilのどの関数でも使われておらず、現在はRuntimeErrorの別名になっています。
-
Class.get_methodsメソッドは Python 3.14 から非推奨です。
sys:_enablelegacywindowsfsencoding()関数は Python 3.13 から非推奨です。 代わりに環境変数PYTHONLEGACYWINDOWSFSENCODINGを使ってください。
-
sysconfig.expand_makefile_vars()関数は Python 3.14 から非推奨です。 代わりにsysconfig.get_paths()のvars引数を使ってください。
-
ドキュメント化されておらず、使われてもいない
TarFile.tarfile属性は Python 3.13 から非推奨です。
Python 3.17 で削除予定¶
-
collections.abc.ByteStringは Python 3.17 で削除予定です。実行時に
objが バッファプロトコル を実装しているか調べるには、isinstance(obj, collections.abc.Buffer)を使ってください。 型アノテーションにはBufferを使うか、コードが対応する型を明示したユニオン (例えばbytes | bytearray | memoryview) を使ってください。ByteStringは当初、bytesとbytearrayの両方の上位型となる抽象クラスとして意図されていました。 しかし、この ABC はメソッドを一つも持たないため、あるオブジェクトがByteStringのインスタンスだと分かっても、そのオブジェクトに関する有用な情報は何も得られませんでした。memoryviewなど、他の一般的なバッファ型も、実行時にも静的型チェッカーによってもByteStringのサブタイプとして認識されることはありませんでした。
-
Python 3.14 より前は、従来のユニオンは非公開クラス
typing._UnionGenericAliasを使って実装されていました。 このクラスは実装上は不要になりましたが、後方互換性のために残されており、Python 3.17 で削除予定です。 非公開の実装の詳細に依存する代わりに、typing.get_origin()やtyping.get_args()など、ドキュメント化されたイントロスペクション用の補助関数を使ってください。Python 3.9 から非推奨となっている
typing.ByteStringは、Python 3.17 で削除予定です。実行時に
objが バッファプロトコル を実装しているか調べるには、isinstance(obj, collections.abc.Buffer)を使ってください。 型アノテーションにはBufferを使うか、コードが対応する型を明示したユニオン (例えばbytes | bytearray | memoryview) を使ってください。ByteStringは当初、bytesとbytearrayの両方の上位型となる抽象クラスとして意図されていました。 しかし、この ABC はメソッドを一つも持たないため、あるオブジェクトがByteStringのインスタンスだと分かっても、そのオブジェクトに関する有用な情報は何も得られませんでした。memoryviewなど、他の一般的なバッファ型も、実行時にも静的型チェッカーによってもByteStringのサブタイプとして認識されることはありませんでした。
Python 3.18 で削除予定¶
Python 3.19 で削除予定¶
将来のバージョンで削除予定¶
以下の API は将来削除されますが、現時点では削除時期は決まっていません。
-
引数グループの入れ子と、相互排他的なグループの入れ子は非推奨です。
add_argument_group()に、ドキュメント化されていないキーワード引数prefix_charsを渡すことは非推奨になりました。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)Support for
__index__()and__int__()method returning non-int type: these methods will be required to return an instance of a strict subclass ofint.__float__()メソッドがfloatの厳密なサブクラスのインスタンスを返すことへの対応:今後はfloat自体のインスタンスを返すことが必須になります。__complex__()メソッドがcomplexの厳密なサブクラスのインスタンスを返すことへの対応:今後はcomplex自体のインスタンスを返すことが必須になります。complex()コンストラクターのreal引数やimag引数に複素数を渡すことは非推奨になりました。 複素数は単独の位置引数としてのみ渡してください。 (Serhiy Storchaka が gh-109218 で貢献しました。)
calendar:定数calendar.Januaryとcalendar.Februaryは非推奨となり、calendar.JANUARYとcalendar.FEBRUARYに置き換えられました。 (Prince Roshan が gh-103636 で貢献しました。)codecs:codecs.open()の代わりにopen()を使ってください。 (gh-133038)codeobject.co_lnotab: use thecodeobject.co_lines()method instead.-
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: Callingos.register_at_fork()in multi-threaded process.pydoc.ErrorDuringImport:exc_infoパラメータにタプルを渡すことは非推奨です。 例外インスタンスを使ってください。re:正規表現内の番号によるグループ参照とグループ名に、より厳しい規則が適用されるようになりました。 番号による参照には ASCII の数字の並びだけを使えます。 bytes パターンと置換文字列のグループ名には、ASCII の英字、数字、アンダースコアだけを使えます。 (Serhiy Storchaka が gh-91760 で貢献しました。)sre_compile,sre_constantsandsre_parsemodules.shutil:rmtree()のonerrorパラメータは 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()を使ってください。
C API の非推奨事項¶
Python 3.15 で削除予定¶
The
PyImport_ImportModuleNoBlock(): UsePyImport_ImportModule()instead.PyWeakref_GetObject()andPyWeakref_GET_OBJECT(): UsePyWeakref_GetRef()instead. The pythoncapi-compat project can be used to getPyWeakref_GetRef()on Python 3.12 and older.Py_UNICODEtype and thePy_UNICODE_WIDEmacro: Usewchar_tinstead.PyUnicode_AsDecodedObject():代わりにPyCodec_Decode()を使ってください。PyUnicode_AsDecodedUnicode():代わりにPyCodec_Decode()を使ってください。 一部のコーデック (例えば "base64") は、bytesなどstr以外の型を返す場合があることに注意してください。PyUnicode_AsEncodedObject():代わりにPyCodec_Encode()を使ってください。PyUnicode_AsEncodedUnicode(): UsePyCodec_Encode()instead; Note that some codecs (for example, "base64") may return a type other thanbytes, such asstr.Python 3.13 で非推奨となった Python 初期化関数:
Py_GetPath(): UsePyConfig_Get("module_search_paths")(sys.path) instead.Py_GetPrefix(): UsePyConfig_Get("base_prefix")(sys.base_prefix) instead. UsePyConfig_Get("prefix")(sys.prefix) if virtual environments need to be handled.Py_GetExecPrefix(): UsePyConfig_Get("base_exec_prefix")(sys.base_exec_prefix) instead. UsePyConfig_Get("exec_prefix")(sys.exec_prefix) if virtual environments need to be handled.Py_GetProgramFullPath(): UsePyConfig_Get("executable")(sys.executable) instead.Py_GetProgramName(): UsePyConfig_Get("executable")(sys.executable) instead.Py_GetPythonHome(): UsePyConfig_Get("home")or thePYTHONHOMEenvironment variable instead.
pythoncapi-compat プロジェクト を使うと、Python 3.13 以前でも
PyConfig_Get()を利用できます。Python 3.11 で非推奨となった、Python の初期化を設定する関数:
PySys_SetArgvEx():代わりにPyConfig.argvを設定してください。PySys_SetArgv():代わりにPyConfig.argvを設定してください。Py_SetProgramName():代わりにPyConfig.program_nameを設定してください。Py_SetPythonHome():代わりにPyConfig.homeを設定してください。PySys_ResetWarnOptions(): Clearsys.warnoptionsandwarnings.filtersinstead.
代わりに
PyConfigとPy_InitializeFromConfig()API を使ってください。グローバルな設定変数:
Py_DebugFlag:代わりにPyConfig.parser_debugまたはPyConfig_Get("parser_debug")を使ってください。Py_VerboseFlag:代わりにPyConfig.verboseまたはPyConfig_Get("verbose")を使ってください。Py_QuietFlag:代わりにPyConfig.quietまたはPyConfig_Get("quiet")を使ってください。Py_InteractiveFlag:代わりにPyConfig.interactiveまたはPyConfig_Get("interactive")を使ってください。Py_InspectFlag:代わりにPyConfig.inspectまたはPyConfig_Get("inspect")を使ってください。Py_OptimizeFlag:代わりにPyConfig.optimization_levelまたはPyConfig_Get("optimization_level")を使ってください。Py_NoSiteFlag:代わりにPyConfig.site_importまたはPyConfig_Get("site_import")を使ってください。Py_BytesWarningFlag:代わりにPyConfig.bytes_warningまたはPyConfig_Get("bytes_warning")を使ってください。Py_FrozenFlag:代わりにPyConfig.pathconfig_warningsまたはPyConfig_Get("pathconfig_warnings")を使ってください。Py_IgnoreEnvironmentFlag:代わりにPyConfig.use_environmentまたはPyConfig_Get("use_environment")を使ってください。Py_DontWriteBytecodeFlag:代わりにPyConfig.write_bytecodeまたはPyConfig_Get("write_bytecode")を使ってください。Py_NoUserSiteDirectory:代わりにPyConfig.user_site_directoryまたはPyConfig_Get("user_site_directory")を使ってください。Py_UnbufferedStdioFlag:代わりにPyConfig.buffered_stdioまたはPyConfig_Get("buffered_stdio")を使ってください。Py_HashRandomizationFlag:代わりにPyConfig.use_hash_seedとPyConfig.hash_seedまたはPyConfig_Get("hash_seed")を使ってください。Py_IsolatedFlag:代わりにPyConfig.isolatedまたはPyConfig_Get("isolated")を使ってください。Py_LegacyWindowsFSEncodingFlag:代わりにPyPreConfig.legacy_windows_fs_encodingまたはPyConfig_Get("legacy_windows_fs_encoding")を使ってください。Py_LegacyWindowsStdioFlag:代わりにPyConfig.legacy_windows_stdioまたはPyConfig_Get("legacy_windows_stdio")を使ってください。Py_FileSystemDefaultEncoding、Py_HasFileSystemDefaultEncoding:代わりにPyConfig.filesystem_encodingまたはPyConfig_Get("filesystem_encoding")を使ってください。Py_FileSystemDefaultEncodeErrors:代わりにPyConfig.filesystem_errorsまたはPyConfig_Get("filesystem_errors")を使ってください。Py_UTF8Mode:代わりにPyPreConfig.utf8_modeまたはPyConfig_Get("utf8_mode")を使ってください。 (Py_PreInitialize()を参照)
これらのオプションを設定するには、
PyConfigとPy_InitializeFromConfig()API を使ってください。 実行時に値を取得するにはPyConfig_Get()を使えます。
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(): replace_PyUnicodeWriter_WriteASCIIString(&writer, str, size)withPyUnicodeWriter_WriteASCII(writer, str, size)._PyUnicodeWriter_WriteLatin1String(): replace_PyUnicodeWriter_WriteLatin1String(&writer, str, size)by decoding the string withPyUnicode_DecodeLatin1(), writing the result withPyUnicodeWriter_WriteStr(), and releasing the result withPy_DECREF()._PyUnicodeWriter_Prepare():(代替なし)。_PyUnicodeWriter_PrepareKind():(代替なし)。_Py_HashPointer():Py_HashPointer()を使ってください。_Py_fopen_obj():Py_fopen()を使ってください。
pythoncapi-compat プロジェクト を使うと、Python 3.13 以前でもこれらの新しい公開関数を利用できます。 (Victor Stinner が gh-128863 で貢献しました。)
将来のバージョンで削除予定¶
以下の 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.12 以降では不要です。PyErr_Display():代わりにPyErr_DisplayException()を使ってください。_PyErr_ChainExceptions():代わりに_PyErr_ChainExceptions1()を使ってください。PyBytesObject.ob_shashメンバー:代わりにPyObject_Hash()を呼び出してください。スレッドローカルストレージ (TLS) API:
PyThread_create_key(): UsePyThread_tss_alloc()instead.PyThread_delete_key():代わりにPyThread_tss_free()を使ってください。PyThread_set_key_value():代わりにPyThread_tss_set()を使ってください。PyThread_get_key_value():代わりにPyThread_tss_get()を使ってください。PyThread_delete_key_value(): UsePyThread_tss_delete()instead.PyThread_ReInitTLS():Python 3.7 以降では不要です。