2026年10月9日、Python 3.15の正式版が公開されました。当初は10月1日の予定でしたが、3回目の候補版をはさんで1週間遅れでの登場です。
公式のWhat's newには、Python 3.15 was released on 9 October 2026と記されています。3.15のリリース日程を定めたPEP 790でも、正式版の公開日が10月9日として記録されました。
7月の記事では、ベータ版をもとに新機能を先取りで紹介しました。今回は、公開されたばかりの3.15.0を実際に動かして、その結果をお見せします。
まずは何が入ったのかを整理しよう¶
What's newの冒頭では、3.15のいちばん大きな変更がまとめられています。その中から、学習者に関係の深いものを表にしました。
| 新機能 | ひとことで言うと | 根拠となるPEP |
|---|---|---|
| lazy import | 使う瞬間までモジュールを読み込まない | PEP 810 |
| frozendict | 書き換えられない辞書が組み込みに | PEP 814 |
| sentinel | 特別な目印の値を作る組み込みの型 | PEP 661 |
| 内包表記でのアンパック | [*L for L in lists]と書ける |
PEP 798 |
| UTF-8が標準に | 文字コードを省略するとUTF-8で読み書き | PEP 686 |
| Tachyon | 新しいprofilingパッケージのサンプリングプロファイラー | PEP 799 |
それぞれの機能を詳しく知りたい方は、先取り記事を読んでみてください。【関連記事】Python 3.15の新機能を先取り解説!
正式版の日程が変わった経緯は、こちらで取り上げました。【関連記事】Python 3.15の正式版は10月9日に延期
正式版の3.15.0を実際に動かしてみた¶
では、さっそく3.15.0を動かしてみましょう。今回は、uvを使ってPython 3.15.0を入れ、次のコードを実行しました。
import sys
lazy import json
print(sys.version.split()[0])
print("json読み込み済み?", "json" in sys.modules)
data = json.loads('{"lang": "Python"}')
print("json読み込み済み?", "json" in sys.modules)
# 書き換えられない辞書
config = frozendict(host="localhost", port=8000)
try:
config["port"] = 9000
except TypeError as e:
print("TypeError:", e)
# 内包表記でのアンパック
lists = [[1, 2], [3, 4], [5]]
print([*L for L in lists])
# 標準のエンコーディング
print(sys.flags.utf8_mode)
実行結果は次のとおりです。3.14以前では、2行目のlazy importの時点で文法エラーになるコードです。
3.15.0
json読み込み済み? False
json読み込み済み? True
TypeError: 'frozendict' object does not support item assignment
[1, 2, 3, 4, 5]
1
結果を1つずつ見ていきましょう。
lazy importは本当に後から読み込まれた¶
2行目と3行目に注目してください。lazy import jsonと書いた直後は、jsonはまだ読み込まれていませんでした。
json.loads()を初めて呼んだところで、ようやく読み込まれています。What's newによると、lazyを付けたimportは、名前が初めて使われるまで実際の読み込みを遅らせます。
importをファイルの先頭にまとめたまま、使わないモジュールの読み込みを省けるのがこの機能の強みです。起動の速さが気になる大きなアプリで、特に効果を発揮します。
frozendictと内包表記のアンパック¶
frozendictに値を入れようとすると、TypeErrorになりました。設定値のように、途中で変わってほしくないデータを扱うのに向いています。
What's newによると、frozendictはdictのサブクラスではありません。isinstance(x, dict)で辞書かどうかを調べているコードは、frozendictを受け付けない点に注意が必要です。
[*L for L in lists]は、リストのリストを1つに平らにしました。これまでは[x for L in lists for x in L]と、forを2回書く必要がありました。
sentinelで目印の値を作る¶
コードには入れていませんが、組み込みのsentinelも試してみました。NOT_SET = sentinel('NOT_SET')と書くと、printしたときにNOT_SETと表示される、世界に1つだけの目印の値ができます。
Noneとは別に、まだ設定されていないことを表したい場面で役立ちます。先日紹介したPydanticのMISSINGも、3.15ではこのsentinelの仕組みで実装されています。
UTF-8モードが最初から有効に¶
最後の1は、UTF-8モードが有効になっていることを表しています。3.15では、open()でencodingを省略したとき、OSの設定に関係なくUTF-8が使われます。
Windowsで日本語のファイルを読んで文字化けした経験がある方には、嬉しい変更ですね。それでもWhat's newでは、どのバージョンでも同じ動きにするために、encodingを明示するよう勧めています。
文字コードのしくみは、こちらで解説しています。【関連記事】Pythonの文字コードとは?
初心者に嬉しい、エラーメッセージの進化¶
もう1つ、学習者にとって見逃せない変更があります。What's newのImproved error messagesによると、エラーメッセージのヒントがさらに賢くなりました。
特に面白いのが、ほかのプログラミング言語の書き方をうっかり使ったときのヒントです。JavaScriptやJava、Ruby、C#でよく使うメソッド名を書くと、Pythonでの正しい書き方を教えてくれます。
実際に、JavaScriptの癖でリストにpush()を使ってしまったコードを、3.15.0で動かしてみました。
fruits = ["apple"]
fruits.push("banana")
3.15.0で実行したときのエラーの最後の行です。
AttributeError: 'list' object has no attribute 'push'. Did you mean '.append'?
同じコードを手元のPython 3.11で動かすと、AttributeError: 'list' object has no attribute 'push'で終わり、ヒントは出ませんでした。3.15では、appendを使えばいいと一目でわかるようになっています。
文字列にname.toUpperCase()と書いたときも、3.15.0ではDid you mean '.upper'?というヒントが出ました。ほかの言語から来た方や、複数の言語を並行して学んでいる方には心強い改善です。
エラーメッセージを読む習慣を¶
What's newには、辞書にput()を使ったときはUse d[k] = v.という書き方のヒントが出る例も載っています。メソッドではなく、Pythonの文法で書くべきものは、文法そのものを教えてくれるわけです。
せっかくのヒントも、読まなければ意味がありません。エラーが出たら最後の行を落ち着いて読むだけで、自力で直せる場面がぐっと増えます。
3.15のインストール方法¶
3.15を試すには、いくつかの方法があります。自分の環境に合わせて選んでください。
| 方法 | 向いている人 |
|---|---|
| python.orgの公式インストーラー | WindowsやmacOSで手軽に入れたい人 |
uvのuv python install 3.15 |
今の環境を壊さずに試したい人 |
| pyenv | すでにpyenvでバージョンを管理している人 |
今回の動作確認には、uvを使いました。uv python install 3.15の1行で、ほかのバージョンと並べて3.15.0を入れられます。
uvの使い方は、こちらで詳しく紹介しています。【関連記事】uvとは?Rust製の高速Pythonパッケージ管理ツール
What's newには、リリースの変更として、Windows向けの公式64ビット版が新しい方式のインタープリターで動くことも書かれています。macOS向けの公式版では、フリースレッド版の機能が標準でインストールされるようになりました。
主なライブラリはもう3.15に対応している?¶
新しいバージョンに上げるときに気になるのが、使っているライブラリの対応です。そこで、主なライブラリが3.15向けのビルド済みファイルを公開しているかを、PyPIで確かめました。
| ライブラリ | 10月10日時点の最新版 | 3.15向けのホイール |
|---|---|---|
| numpy | 2.5.3 | あり |
| pandas | 3.0.6 | あり |
| matplotlib | 3.11.2 | あり |
| scipy | 1.18.1 | あり |
| pillow | 12.3.0 | あり |
| SQLAlchemy | 2.1.4 | あり |
| pydantic-core | 2.50.0 | あり |
ホイールは、インストールするだけで使えるビルド済みのファイルのことです。これがあれば、手元でC言語のコードをコンパイルせずにpip installできます。
主要なライブラリが、公開の翌日にはそろって対応しているのは心強いですね。Pydanticも、10月8日の2.14.0で3.15に対応しました。【関連記事】Pydantic 2.14がリリース
今すぐ上げるべきか¶
結論から言うと、学習用の環境なら、今日から3.15を使って問題ありません。新しい文法を自分の手で試せるのは、正式版が出た今だからこその楽しみです。
一方で、仕事で動いているアプリは、急いで上げる必要はありません。PEP 790によると、3.15.0のあとは約2か月ごとにバグ修正版が出る予定です。
最初の修正版を待ってから上げる、というのは昔からよくある慎重なやり方です。そのあいだに、自分の使うライブラリが対応しているかを確かめておきましょう。
私は10年ほどエンジニアとして開発に関わってきましたが、新しいPythonは、まず社内ツールのような小さなプロジェクトで試すようにしています。小さく試してから広げるのが、結局いちばん手間が少ない進め方でした。
ちなみに、3.15はおよそ2031年10月まで、セキュリティ修正を受けられる予定です。これから学び始める方にとっては、長く付き合えるバージョンになります。
まとめ¶
2026年10月9日、Python 3.15の正式版が公開されました。lazy import、frozendict、内包表記でのアンパック、UTF-8の標準化などが入り、主要なライブラリも公開直後から対応しています。
学習用なら今日から、仕事のアプリなら修正版を待ちながら準備を、というのが現実的な進め方です。まずは手元でlazy importを1行書いて、新しいPythonを体験してみてください。
ここまでお読みいただきありがとうございました。