非推奨¶
Python 3.17 で削除予定¶
-
年を含まず
%e(月内の日) を含む書式文字列でstrptime()を呼び出すこと。 これは Python 3.15 から非推奨です。 (Stan Ulbrych が gh-70647 で貢献しました。)
-
collections.abc.ByteStringは Python 3.17 で削除予定です。実行時に
objが バッファプロトコル を実装しているか調べるには、isinstance(obj, collections.abc.Buffer)を使ってください。 型アノテーションにはBufferを使うか、コードが対応する型を明示したユニオン (例えばbytes | bytearray | memoryview) を使ってください。ByteStringは当初、bytesとbytearrayの両方の上位型となる抽象クラスとして意図されていました。 しかし、この ABC はメソッドを一つも持たないため、あるオブジェクトがByteStringのインスタンスだと分かっても、そのオブジェクトに関する有用な情報は何も得られませんでした。memoryviewなど、他の一般的なバッファ型も、実行時にも静的型チェッカーによってもByteStringのサブタイプとして認識されることはありませんでした。
-
encodings.normalize_encoding()に非 ASCII のencoding名を渡すことは非推奨となり、Python 3.17 で削除予定です。 (Stan Ulbrych が gh-136702 で貢献しました。)
-
profileモジュールは非推奨となり、Python 3.17 で削除されます。 代わりに、互換性のある API を提供するprofiling.tracingを使ってください。 詳しくは PEP 799 を参照してください。 (Pablo Galindo と László Kiss Kollár が gh-138122 で貢献しました。)
-
webbrowser.MacOSXOSAScriptは非推奨となりました。 代わりにwebbrowser.MacOSを使ってください。 (gh-137586)
-
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.14 から非推奨となっている
tkinter.Variableのメソッドtrace_variable()、trace()(trace_variable()の別名)、trace_vdelete()、trace_vinfo()は、Python 3.17 で削除予定です。 代わりにtrace_add()、trace_remove()、trace_info()を使ってください。 (Serhiy Storchaka が gh-120220 で貢献しました。)
Python 3.18 で削除予定¶
Python 3.19 で削除予定¶
-
http.cookies.Morsel.js_output()は非推奨となり、Python 3.19 で削除されます。http.cookies.BaseCookie.js_output()は非推奨となり、Python 3.19 で削除されます。
-
IMAP4.fileの変更は非推奨となり、Python 3.19 で削除予定です。 このプロパティは現在使われておらず、値を変更しても現在のファイルは自動的には閉じられません。Python 3.14 より前は、このプロパティは
IMAP4の対応するread()メソッドとreadline()メソッドの実装に使われていましたが、それ以降は使われていません。
-
tkinter.filedialog.askopenfiles()has been deprecated since Python 3.16. Iterate over the names returned byaskopenfilenames()and open them one by one instead. (Contributed by Serhiy Storchaka in gh-152638.)
Python 3.20 で削除予定¶
struct.Structの__new__()メソッドをformat引数なしで呼び出すことは非推奨となり、Python 3.20 で削除されます。 初期化済みのStructオブジェクトで__init__()メソッドを呼び出すことも非推奨となり、Python 3.20 で削除されます。(Sergey B Kirpichev と Serhiy Storchaka が gh-143715 で貢献しました。)
以下の標準ライブラリモジュールの
__version__、version、VERSION属性は非推奨となり、Python 3.20 で削除されます。 代わりにsys.version_infoを使ってください。ctypes.macholibdecimal(代わりにdecimal.SPEC_VERSIONを使ってください)logging(__date__も非推奨)xml.sax.expatreader
(Hugo van Kemenade と Stan Ulbrych が gh-76007 で貢献しました。)
The
__author__,__credits__,__copyright__and__date__attributes have been deprecated in these standard library modules and will be removed in Python 3.20. Attribution is preserved in the source code and the version control history.(Contributed by Stan Ulbrych in gh-159240.)
PEP 829 で定義された非推奨事項:
name.pthファイルにimport行がある場合は警告が出ます。name.pthファイルは、デフォルトではロケールのエンコーディングでデコードされなくなります。utf-8-sigでエンコードされて いなければなりません。
(Barry Warsaw が gh-148641 で貢献しました。)
ast:抽象 AST ノード (
ast.ASTやast.exprなど) のインスタンスを作成することは非推奨となり、Python 3.20 ではエラーになります。
-
実行時チェック可能なプロトコルクラスを継承していても、
runtime_checkable()で明示的にデコレートされていないプロトコルクラスに対し、isinstance()やissubclass()でチェックすることは非推奨です。 Python 3.20 ではTypeErrorが発生します。(Bartosz Sławecki が gh-132604 で貢献しました。)
Pending removal in Python 3.21¶
-
Soft-deprecated since Python 3.3
abc.abstractclassmethod,abc.abstractstaticmethod, andabc.abstractpropertynow raise aDeprecationWarning. These classes will be removed in Python 3.21, instead useabc.abstractmethod()withclassmethod(),staticmethod(), andpropertyrespectively.
ast:Classes
slice,Index,ExtSlice,Suite,Param,AugLoadandAugStore, will be removed in Python 3.21. These types are not generated by the parser or accepted by the code generator.The
dimsproperty ofast.Tuplewill be removed in Python 3.21. Use theast.Tuple.eltsproperty instead.
-
Using a return annotation to infer the dispatch type for
functools.singledispatch()orfunctools.singledispatchmethodis deprecated since Python 3.16 and will raiseTypeErrorin Python 3.21. Annotate the dispatch parameter or pass the dispatch type explicitly instead. (Contributed by Bartosz Sławecki in gh-143465.)
-
Soft-deprecated since Python 3.15, using
'F'and'D'type codes are now deprecated. These codes will be removed in Python 3.21. Use instead two-letter forms'Zf'and'Zd'.
-
tempfile._TemporaryFileWrapperwill be removed in Python 3.21. Use the publictempfile.TemporaryFileWrapperinstead.
将来のバージョンで削除予定¶
以下の 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自体のインスタンスを返すことが必須になります。
calendar:定数calendar.Januaryとcalendar.Februaryは非推奨となり、calendar.JANUARYとcalendar.FEBRUARYに置き換えられました。 (Prince Roshan が gh-103636 で貢献しました。)codecs:codecs.open()の代わりにopen()を使ってください。 (gh-133038)codeobject.co_lnotab:代わりにcodeobject.co_lines()メソッドを使ってください。-
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 a multi-threaded process.os.path:os.path.commonprefix()は非推奨です。 パスの共通の先頭部分を求めるにはos.path.commonpath()を使ってください。os.path.commonprefix()は、名前と所属するモジュールが誤解を招くため非推奨になります。 この関数はパス操作用のモジュールに含まれていますが、パスの先頭部分を扱う用途では安全に使えません。 そのため、この関数を使うと Python プログラムにパストラバーサルの脆弱性を誤って持ち込みやすくなります。pydoc.ErrorDuringImport:exc_infoパラメータにタプルを渡すことは非推奨です。 例外インスタンスを使ってください。re:正規表現内の番号によるグループ参照とグループ名に、より厳しい規則が適用されるようになりました。 番号による参照には ASCII の数字の並びだけを使えます。 bytes パターンと置換文字列のグループ名には、ASCII の英字、数字、アンダースコアだけを使えます。 (Serhiy Storchaka が gh-91760 で貢献しました。)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()を使ってください。
ソフト非推奨¶
ソフト非推奨 の API を削除する予定はありません。
re.match()とre.Pattern.match()は ソフト非推奨 となり、代わりに新しい APIre.prefixmatch()とre.Pattern.prefixmatch()を使うことが推奨されます。 これらは、より明確な別名として追加されました。 Zen of Python の 「暗黙的であるより明示的であるほうがよい」 という指針に従い、match の意味に関する混乱を減らすことを意図しています。 他の言語の正規表現ライブラリの多くでは、Python が一貫して search と呼んできた操作を match という名前の API で提供しています。従来の名前
match()は30年以上コードで使われているため、削除する予定は ありません。 古いバージョンの Python に対応するコードでは、引き続きmatch()を使ってください。 新しいコードではprefixmatch()を使うことを推奨します。 prefixmatch() と match() の違い を参照してください。(Gregory P. Smith が gh-86519 で、Hugo van Kemenade が gh-148100 で貢献しました。)
C API の非推奨事項¶
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():_PyUnicodeWriter_WriteASCIIString(&writer, str, size)をPyUnicodeWriter_WriteASCII(writer, str, size)に置き換えてください。_PyUnicodeWriter_WriteLatin1String():_PyUnicodeWriter_WriteLatin1String(&writer, str, size)を置き換えるには、PyUnicode_DecodeLatin1()で文字列をデコードし、結果をPyUnicodeWriter_WriteStr()で書き込み、Py_DECREF()で解放してください。_PyUnicodeWriter_Prepare():(代替なし)。_PyUnicodeWriter_PrepareKind():(代替なし)。_Py_HashPointer():Py_HashPointer()を使ってください。_Py_fopen_obj():Py_fopen()を使ってください。PyGen_New(): (no replacement).PyGen_NewWithQualName(): (no replacement).PyCoro_New(): (no replacement).PyAsyncGen_New(): (no replacement).
pythoncapi-compat プロジェクト を使うと、Python 3.13 以前でもこれらの新しい公開関数を利用できます。 (Victor Stinner が gh-128863 で貢献しました。)
Python 3.19 で削除予定¶
PEP 456 の、Python を組み込む側で文字列のハッシュ方式を定義するためのサポート。
Python 3.20 で削除予定¶
_PyObject_CallMethodId()、_PyObject_GetAttrId()、_PyUnicode_FromId()は 3.15 から非推奨となり、3.20 で削除されます。 代わりにPyUnicode_InternFromString()の結果をモジュール状態にキャッシュしてから、PyObject_CallMethod()またはPyObject_GetAttr()を呼び出してください。 (Victor Stinner が gh-141049 で貢献しました。)PyComplexObjectのcvalフィールド (gh-128813)。 Python の複素数と C のPy_complex表現の相互変換には、PyComplex_AsCComplex()とPyComplex_FromCComplex()を使ってください。マクロ
Py_MATH_PIlとPy_MATH_El。
将来のバージョンで削除予定¶
以下の API は非推奨となり、削除される予定ですが、現時点では削除時期は決まっていません。
Py_TPFLAGS_HAVE_FINALIZE:Python 3.8 以降では不要です。PyErr_Fetch():代わりにPyErr_GetRaisedException()を使ってください。PyErr_NormalizeException():代わりにPyErr_GetRaisedException()を使ってください。PyErr_Restore():代わりにPyErr_SetRaisedException()を使ってください。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 以降では不要です。