概要
2025年4月に検討と移行作業を実施したのですが、 Python 3.9 から Python 3.12.x (3.12.0のリリースが2023-10-02 で、2025-04-02 より Security Supportに移行)に移行しました。
本記事ではどのような前提・情報・判断をしてアップグレード先のバージョンを決めたのかを記載します。
前提
Python のリリースサイクルサイクル: PEP 602
Python 3.9 から Python のリリースサイクルが変わりました。
今回関係する箇所を書くと
- 毎年10月に新マイナーバージョンをリリース
- Python 3.9 - 3.12 の間は 1.5年のフルサポート、3.5年のセキュリティ修正期間で合計5年のサポート
- 3.13 から2年のフルサポートと3年のセキュリティ修正期間に
のところになります。これにより、 Python 3.9 - 3.14 のバージョンごとのリリースとサポート期間は以下になりました。
| Python のバージョン | 初回リリース日 | フルサポート期限 | セキュリティーサポート期限 |
|---|---|---|---|
| 3.9 | 2020-10-05 | 2022-05-17 | 2025-10-31 |
| 3.10 | 2021-10-04 | 2023-04-05 | 2026-10-31 |
| 3.11 | 2022-10-24 | 2024-04-01 | 2027-10-31 |
| 3.12 | 2023-10-02 | 2025-04-02 | 2028-10-31 |
| 3.13 | 2024-10-07 | 2026-10-01 | 2029-10-31 |
| 3.14 | 2025-10-07 | 2027-10-01 | 2030-10-31 |
検討は2025年4月なので、最新のマイナーバージョンは Python 3.13 で、 Python 3.12 がフルサポート期間を終了し、セキュリティーサポート期間に入ったタイミングでした。
用途
私のアップデート対象だとほぼ AWS Lambda でした。
情報
公式のダウンロードページ
サポート期限などについては日常的には他のものもまとまっているので endoflife.dateを参照しがちですが、こういったときには公式のサイトを確認します。
利用PyPiモジュール/ツールの対応状態の調査
を見ることもあるのですが、意外にPyPiの Programming Language :: Python :: * はちゃんと書かれてないこともありました。新しい Pythonに対応するのは 3-6か月かかるものもあるので、最終的にはローカルのコンテナ環境などでインストールして対応状況を確認することになりました。
Python 3.10 から非推奨になり、Python 3.12 で distutils が廃止になっていたので、メンテされていないモジュールは使えないといったケースもあるかもしれません。
利用サービスのライフサイクルページ
クラウドサービスなどのRuntimeを使っている場合はそちらのバージョンの制限もあるため、参照します。
今回のメイン用途の AWS Lambda のような FaaS だとバージョン追従は早く
AWS Lambda が Python 3.13 のサポートを追加
にあるように2024年11月14日 には対応されていました。
また、一覧を見ると
Python 3.11 まではサポートを何度か延長していて、本来EOLを迎えているはずの Amazon Linux2 を使っていましした。
判断
判断時リリースされていなかった 3.14 と来年にはサポートが終わる 3.10 は対象から除外するとして、以下が候補でした。
- 3.11
- 一番手堅い(セキュリティサポート期間中盤)
- 2年経過しないうちに次の対応が必要になる
- AWS Lambda で Runtime が動いているベース OS が Amazon Linux 2 ※特別サポート延長期間
- 3.12
- 一旦修正は落ち着いた状態(セキュリティーサポート期間開始して割とすぐ)
- 3.13
- うまく動かない pip モジュールがあった(正確には使っている pip モジュールの依存先)
といった状態で、ほぼ 3.12 かなという状態でした。
今回は Lambda がメインだったので比較的単純に結論を出しましたが、他でも使っているサービスのバージョンと揃えたいという話があると話が少し複雑になります。
例えば Python 製の OSS のマネージドサービスの場合は、 OSS のアップデートの後のサービス取り込みが必要なので、更にタイムラグがあります。一例として Apache Airflow を利用した AWS のサービスの MWAA を挙げると直近の対応バージョンは以下になります。
| Apache Airflow のバージョン | Apache Airflow リリース日 | Amazon MWAA 利用開始日 | Python バージョン |
|---|---|---|---|
| v3.0.6 | 2025 年 8 月 29 日 | 2025 年 10 月 1 日 | Python 3.12 |
| v2.10.3 | 2024 年 11 月 4 日 | 2024 年 12 月 18 日 | Python 3.11 |
| v2.10.1 | 2024 年 9 月 5 日 | 2024 年 9 月 26 日 | Python 3.11 |
(以下Python 3.11 なので略)
こちらの用途がメインでバージョン揃えたいとなると 3.11 にしたかもしれません。
おわりに
2025-10-31 に EOL になった(当時はなる) Python 3.9 の移行先の検討にあたり、実施したことを記載しました。
サービスに直結していない管理機能の AWS Lambda などはなかなか機会がないとアップグレードされなかったり、(これはNode.JSでしたが) 一時期・一部分だけ AWS CDK で作られて、AWS CDK のバージョンに紐づいて Lambda が作られていたりとなかなか対応が漏れがちでした。
次回はより対象や対応方法を洗練させていきたいと思います。