Python3.13正式リリースが出ました!
Python 3.13 新機能と変更点まとめ
Pythonプログラミング言語の最新安定版であるPython 3.13が正式にリリースされました。
この記事では、Python 3.13のリリースノートに基づき、前バージョン(Python 3.12)からの主な変更点や新機能を解説します。
ハイライト
Python 3.13では、言語自体、実装、および標準ライブラリにさまざまな変更が加えられています。主な変更点は以下の通りです:
- 新しい対話型インタプリタの導入:ユーザーエクスペリエンスを大幅に向上させる新しい対話型シェルがデフォルトとなりました。
- フリー・スレッディッドモードの実験的サポート(PEP 703): グローバルインタプリタロック(GIL)を無効にしてPythonコードを実行できるようになりました。
- ジャストインタイム(JIT)コンパイラの追加(PEP 744): パフォーマンス向上を目指したJITコンパイラが実験的に導入されました。
さらに、エラーメッセージが引き続き改善され、トレースバックがデフォルトでカラー表示されるようになりました。また、locals()
組み込み関数の動作が明確化され、型パラメータにデフォルト値がサポートされるようになりました。
インタプリタの改善
新しい対話型インタプリタ
PyPyプロジェクトのコードをベースにした新しい対話型シェルがデフォルトとなりました。主な特徴は:
- 複数行の編集と履歴の保持: 複数行にわたるコードの編集が可能になり、履歴も保存されます。
-
直接的なREPLコマンドのサポート:
help
,exit
,quit
などのコマンドが関数呼び出しなしで利用できます。 - カラー表示: プロンプトやトレースバックがデフォルトでカラー表示されます。
- インタラクティブなヘルプブラウジング: F1キーでヘルプを閲覧できます。
- 履歴のブラウジング: F2キーで出力やプロンプトを除いた履歴の閲覧が可能です。
- ペーストモード: F3キーで大きなコードブロックのペーストが容易になります。
新しい対話型シェルを無効にするには、環境変数PYTHON_BASIC_REPL
を設定してください。
エラーメッセージの改善
-
カラー付きトレースバック: ターミナルでのトレースバックがデフォルトでカラー表示されます。環境変数
PYTHON_COLORS
,NO_COLOR
,FORCE_COLOR
で制御可能です。 - モジュール名の衝突に関する警告: ユーザースクリプトが標準ライブラリやサードパーティのモジュール名と衝突している場合、より具体的なエラーメッセージが表示されます。
- キーワード引数のタイプミス検出: 間違ったキーワード引数が渡された場合、正しい引数名の提案が表示されます。
PEP 703)
Free-threaded CPython(グローバルインタプリタロック(GIL)を無効にしたFree-threadedモードが実験的にサポートされました。これにより、マルチコアCPUを活用してスレッドを並行実行できます。ただし、この機能はまだ実験的であり、デフォルトでは無効になっています。
-
使用方法:
python3.13t
またはpython3.13t.exe
として提供される特別な実行ファイルを使用します。 -
有効化:
--disable-gil
オプションを使用してソースからビルドするか、公式のインストーラでFree-threaded版を選択します。 - 注意点: 現時点ではバグやシングルスレッド性能の低下が予想されます。今後のリリースで改善予定です。
PEP 744)
ジャストインタイム(JIT)コンパイラ(実験的なJITコンパイラが追加されました。パフォーマンスの向上はまだ限定的であり、デフォルトでは無効になっています。将来的な性能向上を目指し、今後のリリースで改良される予定です。
データモデルの改善
-
__static_attributes__
属性の追加:クラスボディ内の関数でself.X
を通じてアクセスされる属性名を格納します。 -
__firstlineno__
属性の追加:クラス定義の最初の行番号を記録します。
標準ライブラリの主な変更点
-
新しい例外
PythonFinalizationError
の追加: 終了処理中に操作がブロックされた場合にこの例外が発生します。 -
argparse
モジュールの拡張: コマンドラインオプション、位置引数、サブコマンドの非推奨化がサポートされました。 -
base64
モジュールの拡張:z85encode()
とz85decode()
関数が追加され、Z85データのエンコードとデコードが可能になりました。 -
copy
モジュールの強化:copy.replace()
関数が追加され、多くの組み込み型や__replace__()
メソッドを定義したクラスでサポートされます。 -
新しい
dbm.sqlite3
モジュール: デフォルトのdbm
バックエンドとしてSQLite3が使用されます。 -
os
モジュールの拡張: Linuxのタイマ通知ファイルディスクリプタを操作する新しい関数が追加されました。 -
random
モジュールのコマンドラインインターフェース:random
モジュールがコマンドラインから直接利用可能になりました。
セキュリティの改善
-
SSLのデフォルト設定の強化:
ssl.create_default_context()
がデフォルトでssl.VERIFY_X509_PARTIAL_CHAIN
とssl.VERIFY_X509_STRICT
フラグを設定するようになりました。
C APIの改善
-
拡張モジュールのGILサポートの明示:
Py_mod_gil
スロットが、拡張モジュールがGILを無効にした実行をサポートしていることを示すために使用されます。 -
システムクロックへのアクセス: 新しい
PyTime
C APIが追加されました。 -
軽量ミューテックス
PyMutex
の追加: 1バイトの軽量なミューテックスが提供されました。 - PEP 669のモニタリングイベントのサポート: C APIに新しい関数群が追加され、モニタリングイベントの生成が可能になりました。
typingの新機能
-
PEP 696: 型パラメータのデフォルト値のサポート:
typing.TypeVar
,typing.ParamSpec
,typing.TypeVarTuple
でデフォルト値がサポートされます。 -
PEP 702:
warnings.deprecated()
デコレータの追加: 型システムと実行時に非推奨をマークするためのデコレータが追加されました。 -
PEP 705:
typing.ReadOnly
の追加:typing.TypedDict
の項目を型チェッカーで読み取り専用としてマークできます。 -
PEP 742:
typing.TypeIs
の追加: 型の絞り込みに直感的な挙動を提供する新しい型構築子が追加されました。
プラットフォームサポート
- PEP 730: iOSの公式サポート: AppleのiOSがTier 3プラットフォームとしてサポートされます。
- PEP 738: Androidの公式サポート: AndroidがTier 3プラットフォームとしてサポートされます。
-
wasm32-wasi
のサポート: Tier 2プラットフォームとしてサポートされます。 -
wasm32-emscripten
のサポート終了: 公式サポートプラットフォームから除外されました。
重要な削除項目
PEP 594: 古い標準ライブラリモジュールの削除
以下の19のモジュールが標準ライブラリから削除されました(Python 3.11で非推奨化):
aifc
audioop
-
cgi
、cgitb
chunk
crypt
imghdr
mailcap
msilib
nis
nntplib
ossaudiodev
pipes
sndhdr
spwd
sunau
telnetlib
uu
xdrlib
これらのモジュールの機能が必要な場合は、サードパーティのライブラリや代替手段を検討してください。
その他の削除
-
2to3
ツールとlib2to3
モジュールの削除(Python 3.11で非推奨化) -
tkinter.tix
モジュールの削除(Python 3.6で非推奨化) locale.resetlocale()
関数の削除typing.io
とtyping.re
名前空間の削除- チェインされた
classmethod
デスクリプタの削除
リリーススケジュールの変更
PEP 602の更新により、新しいリリースのフルサポート期間(バグフィックス期間)が2年間に延長されました。
- Python 3.9~3.12: 1.5年のフルサポートと3.5年のセキュリティフィックス
- Python 3.13以降: 2年のフルサポートと3年のセキュリティフィックス
新機能の詳細
新しい対話型インタプリタの詳細
新しい対話型シェルは以下の利点を提供します:
- 複数行のコード編集が容易になり、履歴も保存されます。
- 標準的なコマンド(
help
,exit
,quit
など)が関数呼び出しなしで利用できます。 - カラー表示により、コードの読みやすさが向上します。
- F1キーでインタラクティブなヘルプが閲覧できます。
- F2キーで過去の入力履歴を効率的に参照できます。
- F3キーでペーストモードに切り替え、大量のコードブロックの貼り付けが容易になります。
エラーメッセージ改善の詳細
- ターミナルでのトレースバックがデフォルトでカラー表示され、エラーの特定が容易になりました。
- スクリプト名が標準ライブラリやサードパーティのモジュール名と衝突している場合、具体的なエラーメッセージが表示され、問題の迅速な解決が可能です。
- 間違ったキーワード引数が渡された場合、正しい引数名が提案されるため、デバッグが容易になります。
その他の言語変更
- ドキュメンテーション文字列の前置ホワイトスペースの削除: バイトコードキャッシュのサイズを削減するため、ドキュメンテーション文字列の各行の共通の前置ホワイトスペースが削除されます。
- クラススコープ内でのラムダ式と内包表記のサポート: クラススコープ内のアノテーションスコープでラムダ式や内包表記が利用可能になりました。
-
相対インポートによる
__future__
モジュールの扱いの変更: 相対インポートによる__future__
モジュールのインポートが特別な機能を有効化しなくなりました。 -
except
ブロック内でのglobal
宣言の許可:else
ブロックで使用されるグローバル変数をexcept
ブロック内で宣言できるようになりました。
終わりに
最後まで読んで頂きありがとうございます。不備があれば是非コメントで指摘して下さい。
注) この記事は私のQiitaの記事をコピーしたものになります。
Discussion