非推奨

Python 3.16 で削除予定

  • インポートシステム:

    • モジュールの __spec__.loader を設定せずに __loader__ を設定することは非推奨です。 Python 3.16 では、インポートシステムや標準ライブラリは __loader__ を設定しなくなり、その値も参照しなくなります。

  • array:

    • 書式コード 'u' (wchar_t) は、Python 3.3 からドキュメントで非推奨とされ、Python 3.13 からは実行時にも非推奨とされています。 Unicode 文字には、代わりに書式コード 'w' (Py_UCS4) を使ってください。

  • asyncio:

  • builtins:

    • 真偽値に対するビット単位の反転 ~True や ~False は、直感に反する意外な結果 (-2 と -1) になるため、Python 3.12 から非推奨です。 真偽値の論理否定には、代わりに not x を使ってください。 元の整数値のビット単位の反転が必要になるまれな場合には、明示的に int に変換してください (~int(x))。

  • functools:

    • functools.reduce() の Python 実装を、function や sequence をキーワード引数として指定して呼び出すことは、Python 3.14 から非推奨です。

  • logging:

    • strm 引数を持つカスタムログハンドラーへの対応は非推奨となり、Python 3.16 で削除予定です。 代わりに stream 引数を持つハンドラーを定義してください。 (Mariusz Felisiak が gh-115032 で貢献しました。)

  • mimetypes:

    • mimetypes.MimeTypes.add_type() で有効な拡張子は、'.' で始まるものか空のものです。 ドットのない拡張子は非推奨となり、Python 3.16 では ValueError が発生します。 (Hugo van Kemenade が gh-75223 で貢献しました。)

  • shutil:

    • ExecError 例外は Python 3.14 から非推奨です。 Python 3.4 以降は shutil のどの関数でも使われておらず、現在は RuntimeError の別名になっています。

  • symtable:

  • sys:

  • sysconfig:

    • sysconfig.expand_makefile_vars() 関数は Python 3.14 から非推奨です。 代わりに sysconfig.get_paths() の vars 引数を使ってください。

  • tarfile:

    • ドキュメント化されておらず、使われてもいない TarFile.tarfile 属性は Python 3.13 から非推奨です。

Python 3.17 で削除予定

  • datetime:

    • 年を含まず %e (月内の日) を含む書式文字列で strptime() を呼び出すこと。 これは Python 3.15 から非推奨です。 (Stan Ulbrych が gh-70647 で貢献しました。)

  • collections.abc:

    • collections.abc.ByteString は Python 3.17 で削除予定です。

      実行時に obj が バッファプロトコル を実装しているか調べるには、isinstance(obj, collections.abc.Buffer) を使ってください。 型アノテーションには Buffer を使うか、コードが対応する型を明示したユニオン (例えば bytes | bytearray | memoryview) を使ってください。

      ByteString は当初、bytes と bytearray の両方の上位型となる抽象クラスとして意図されていました。 しかし、この ABC はメソッドを一つも持たないため、あるオブジェクトが ByteString のインスタンスだと分かっても、そのオブジェクトに関する有用な情報は何も得られませんでした。 memoryview など、他の一般的なバッファ型も、実行時にも静的型チェッカーによっても ByteString のサブタイプとして認識されることはありませんでした。

      詳しくは PEP 688 を参照してください。 (Shantanu Jain が gh-91896 で貢献しました。)

  • encodings:

  • profile:

    • profile モジュールは非推奨となり、Python 3.17 で削除されます。 代わりに、互換性のある API を提供する profiling.tracing を使ってください。 詳しくは PEP 799 を参照してください。 (Pablo Galindo と László Kiss Kollár が gh-138122 で貢献しました。)

  • webbrowser:

    • webbrowser.MacOSXOSAScript は非推奨となりました。 代わりに webbrowser.MacOS を使ってください。 (gh-137586)

  • typing:

    • 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 のサブタイプとして認識されることはありませんでした。

      詳しくは PEP 688 を参照してください。 (Shantanu Jain が gh-91896 で貢献しました。)

  • tkinter:

    • 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 で削除予定

  • ファイルディスクリプタが必要なところでは、真偽値を受け付けなくなります。 (Serhiy Storchaka が gh-82626 で貢献しました。)

  • decimal:

    • Decimal の標準外でドキュメント化されていない書式指定子 'N' は、Python 3.13 から非推奨です。 これは decimal モジュールの C 実装だけでサポートされています。 (Serhiy Storchaka が gh-89902 で貢献しました。)

  • PEP 829 で定義された非推奨事項:

    • name.pth ファイルの import 行は、警告なしで無視されます。

    (Barry Warsaw が gh-148641 で貢献しました。)

Python 3.19 で削除予定

  • ctypes:

    • Windows 以外のプラットフォームで、_layout_ を設定せずに _pack_ を設定することで、暗黙的に MSVC 互換の構造体レイアウトに切り替えること。

  • hashlib:

    • hashlib のさまざまな実装では、new() や、md5()、sha256() などのハッシュ名を直接使ったコンストラクターに、省略可能な初期データを data= または string= というキーワード引数で渡すこともできました。

      キーワード引数名 string のサポートは非推奨となり、Python 3.19 で削除予定です。

      Python 3.13 より前は、ハッシュ関数のバックエンド実装によっては、キーワードパラメータ string が正しくサポートされていませんでした。 後方互換性を最大限に保つには、初期データは位置引数として渡してください。

  • http.cookies:

  • imaplib:

    • IMAP4.file の変更は非推奨となり、Python 3.19 で削除予定です。 このプロパティは現在使われておらず、値を変更しても現在のファイルは自動的には閉じられません。

      Python 3.14 より前は、このプロパティは IMAP4 の対応する read() メソッドと readline() メソッドの実装に使われていましたが、それ以降は使われていません。

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 を使ってください。

    (Hugo van Kemenade と Stan Ulbrych が gh-76007 で貢献しました。)

  • PEP 829 で定義された非推奨事項:

    • name.pth ファイルに import 行がある場合は警告が出ます。

    • name.pth ファイルは、デフォルトではロケールのエンコーディングでデコードされなくなります。 utf-8-sig でエンコードされて いなければなりません。

    (Barry Warsaw が gh-148641 で貢献しました。)

  • ast:

    • 抽象 AST ノード (ast.AST や ast.expr など) のインスタンスを作成することは非推奨となり、Python 3.20 ではエラーになります。

  • typing:

    • 実行時チェック可能なプロトコルクラスを継承していても、runtime_checkable() で明示的にデコレートされていないプロトコルクラスに対し、isinstance() や issubclass() でチェックすることは非推奨です。 Python 3.20 では TypeError が発生します。

      (Bartosz Sławecki が gh-132604 で貢献しました。)

将来のバージョンで削除予定

以下の API は将来削除されますが、現時点では削除時期は決まっていません。

  • argparse:

    • 引数グループの入れ子と、相互排他的なグループの入れ子は非推奨です。

    • add_argument_group() に、ドキュメント化されていないキーワード引数 prefix_chars を渡すことは非推奨になりました。

    • argparse.FileType 型コンバーターは非推奨です。

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

    • Support for __index__() and __int__() method returning non-int type: these methods will be required to return an instance of a strict subclass of int.

    • __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:代わりに 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: Calling os.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_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).

  • 内部クラス 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() は ソフト非推奨 となり、代わりに新しい API re.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 で貢献しました。)

  • struct モジュールの書式型コード 'F' と 'D' の使用は ソフト非推奨 となり、代わりに2文字の形式 'Zf' と 'Zd' を使うことが推奨されます。 (Sergey B Kirpichev が gh-121249 で貢献しました。)

C API deprecations

Python 3.15 で削除予定

Python 3.16 で削除予定

  • 同梱されている libmpdec。

Python 3.18 で削除予定

Python 3.19 で削除予定

  • PEP 456 の、Python を組み込む側で文字列のハッシュ方式を定義するためのサポート。

Python 3.20 で削除予定

将来のバージョンで削除予定

以下の API は非推奨となり、削除される予定ですが、現時点では削除時期は決まっていません。