はじめに
「Pythonにはバージョンがいろいろあるけど、結局どれを使えばいいの?」
これはPythonを学び始めた人だけでなく、実際に開発環境を構築する立場になっても意外とつまずきやすいポイントです。本記事では、Pythonのバージョンの基礎知識から、実務でバージョンアップする際に気をつけるべき点まで、順を追って解説します。
Pythonのバージョンとは何か
Pythonのバージョン番号は「3.12.5」のように3つの数字で構成されています。それぞれの意味を知っておくと、以降の話が理解しやすくなります。
- メジャーバージョン(最初の数字):言語の根本的な仕様が変わる可能性がある大きな区切り。現在は「3」系が主流で、かつて存在した「2」系(Python 2)は2020年1月1日に完全にサポートが終了しています。
- マイナーバージョン(2番目の数字):新機能の追加や、非推奨(deprecated)だった機能の削除が行われる区切り。「3.10」「3.11」「3.12」のように、通常は年に1回リリースされます。
- パッチバージョン(3番目の数字):バグ修正やセキュリティ修正のみを含む区切り。「3.12.5」「3.12.6」のように頻繁にリリースされます。
つまり「Pythonのバージョンを選ぶ」という話は、実質的には「どのマイナーバージョン系列を使うか」を選ぶ話だと考えて差し支えありません。
サポート段階を理解する
Pythonの各マイナーバージョンは、リリースされてから完全にサポートが終了するまで、おおよそ次の4つのフェーズを経ます。
- プレリリースフェーズ(alpha / beta / rc):開発中の段階。本番環境での利用は避けるべきです。
- バグ修正フェーズ(bugfix):新機能追加・バグ修正・セキュリティ修正のすべてが行われる期間。リリース後およそ1年半〜2年程度続きます。
- セキュリティ修正フェーズ(security):通常のバグは修正されず、深刻な脆弱性のみが対応される期間。
- EOLフェーズ(End of Life):一切の修正が提供されなくなる状態。
ここで特に注意したいのが3番目の「セキュリティ修正フェーズ」です。「まだサポートされているから大丈夫」と考えがちですが、このフェーズではリスクが見えにくい形で積み上がっていきます。たとえば、このフェーズではOS向けのビルド済みバイナリが新たに提供されなくなることがあり、環境によってはソースコードからのビルドが必要になるケースもあります。「サポート中」と「安心して運用できる」は必ずしもイコールではない、という点は覚えておいて損はありません。
現在(2026年9月時点)のバージョン別サポート状況
Python公式のリリース管理情報をもとに、主要バージョンの状況を整理すると次のようになります。
| バージョン | 初回リリース | フルサポート終了 | セキュリティサポート終了(EOL) | 現在のステータス |
|---|---|---|---|---|
| 3.9 | 2020年10月 | 2022年5月 | 2025年10月31日 | EOL(終了済み) |
| 3.10 | 2021年10月 | 2023年4月 | 2026年10月31日(まもなく終了) | セキュリティ修正フェーズ |
| 3.11 | 2022年10月 | 2024年4月 | 2027年10月(予定) | セキュリティ修正フェーズ |
| 3.12 | 2023年10月 | 2025年4月 | 2028年10月(予定) | セキュリティ修正フェーズ |
| 3.13 | 2024年10月 | 2026年10月(予定) | 2029年10月(予定) | バグ修正フェーズ |
| 3.14 | 2025年10月 | 2027年10月(予定) | 2030年10月(予定) | バグ修正フェーズ(最新安定版) |
| 3.15 | 2026年10月(予定) | ー | ー | プレリリースフェーズ(ベータ段階) |
特筆すべきは、Python 3.10が2026年10月31日にEOLを迎える予定である点です。執筆時点であと1〜2ヶ月ほどしか猶予がなく、3.10を利用中のプロジェクトは移行計画を急ぐ必要があります。
なお、Python公式のEOL日と、実際に利用しているOSやクラウドサービス上でのサポート終了日は必ずしも一致しません。たとえばUbuntu 22.04はPython 3.10について、標準サポートで2027年まで、有償のUbuntu Proでは2032年までカバーする独自の延命措置を取っています。逆にクラウドサービス側がPython公式よりも早くサポートを打ち切るケースもあるため、Python本体のEOLだけでなく、実行環境側のサポート期限もあわせて確認することが重要です。
バージョンが変わることで起きる問題
「バージョンを上げる/上げない」という判断が難しいのは、影響がPython本体だけにとどまらないからです。主な問題パターンを4つに整理します。
1. 依存ライブラリが先に対応を打ち切る
Python本体がまだEOLになっていなくても、利用しているライブラリ側が先にサポート対象から外すことがあります。NumPy、SciPy、Matplotlib、scikit-learn、pandas、IPythonといった主要なデータ分析系ライブラリは「SPEC 0」という共通の方針に従っており、この方針に沿って古いPythonバージョンを段階的にサポート対象から除外しています。データ分析・機械学習系のプロジェクトでは、Python本体のEOLよりも先にこちらが実務上のボトルネックになるケースが多く見られます。
イメージとしては、「Python 3.10はまだ公式にはセキュリティサポート中なのに、いつの間にか使っているpandasの新しいバージョンが3.10をサポート対象外にしていて、pip installしても最新版が入らない(古いバージョンに固定される)」といった状況です(実際の対応状況はライブラリごとに異なるため、あくまでイメージです)。Python本体のカレンダーだけを見ていると気づきにくい落とし穴です。
2. クラウド・インフラ側のランタイムサポート終了
クラウドサービス側が独自にサポート期限を設定していることも見逃せません。一例として、Microsoftのクラウドサービスでは、Python 3.10ランタイムの拡張サポート終了時期が個別にアナウンスされています。サポートが終了した後もアプリケーション自体はそのまま動作し続けますが、セキュリティ更新やサポート対応が受けられなくなる、という形が一般的です。
3. 言語仕様・標準ライブラリの変更による非互換
マイナーバージョンが上がるたびに、非推奨(deprecated)だった機能が実際に削除されることがあります。これまでにも、あるバージョンアップのタイミングでサポート対象の最小バージョンが引き上げられ、それ以前のバージョンで動いていたコードが動かなくなる、という事例が繰り返し発生しています。「動いていたコードが、Pythonやライブラリのバージョンを上げた途端に動かなくなる」という典型的な非互換の原因です。
具体例:distutilsモジュールの削除
もっとも分かりやすい実例が、標準ライブラリに含まれていたdistutilsモジュールです。このモジュールは2020年にPEP 632という提案で非推奨(将来削除予定)と宣言され、実際にPython 3.12で標準ライブラリから完全に削除されました。
その結果、Python 3.12以降の環境でdistutilsに依存する古いコードやライブラリを動かそうとすると、次のようなエラーが発生します。
ModuleNotFoundError: No module named 'distutils'
このエラーは、distutilsを内部で利用している比較的古いライブラリ(GPUtilやghostscriptなど)を使っている場合に、Python 3.11から3.12へ上げた瞬間に突然発生した、という報告が実際に複数寄せられています。対処法としてはsetuptoolsパッケージ(distutilsの代替機能を含む)を追加でインストールする、コード側を書き換えて依存をなくす、といった対応が必要になります。
このケースから読み取れるポイントは2つあります。
- 非推奨の警告が出てから実際に削除されるまでにはタイムラグがある:
distutilsは2020年に非推奨化が宣言されてから、実際に削除されたのは2023年リリースのPython 3.12でした。約3年の猶予がありましたが、警告を見逃していると突然のエラーに見えてしまいます。 - エラーは「Pythonのバージョンを上げた側」ではなく「動かしている古いコード・ライブラリ側」に起因する:Python自体のバグではなく、時代遅れになった書き方や依存関係が表面化した形です。バージョンアップ作業でエラーが出たとき、まず疑うべきはこの種の「非推奨機能の削除」であることが多いです。
4. ディストリビューション側の独自延命とのズレ
前述の通り、LinuxディストリビューションなどがPython公式のEOL日より長くサポートを継続する場合があります。これ自体はメリットですが、「OSのサポート期限」と「Python公式のサポート期限」の2つの情報を混同すると、実際にはセキュリティリスクがある状態を「まだ大丈夫」と誤認してしまう危険があります。
バージョンの使い分けの考え方
上記を踏まえ、用途別にどのバージョン帯を選ぶべきかを整理すると、次のようになります。
| 用途 | 推奨バージョン帯 | 理由 |
|---|---|---|
| 新規プロジェクト | 最新の安定版(記事執筆時点で3.14、枯れた実績を優先するなら3.13) | 今後もっとも長くサポートが残っているため |
| 本番稼働中の既存システム | セキュリティサポート中のバージョン(3.11〜3.14) | バグ修正フェーズを終えていても、致命的な脆弱性には対応される |
| ライブラリ互換性を最優先したい場合 | 主要ライブラリの動作確認が取れている、1つ前後のバージョン | 最新すぎるとライブラリ側の対応が追いついていないことがある |
| 避けるべき選択 | EOL済みのバージョン(3.9以前) | 一切の修正が提供されないため |
複数のバージョンを使い分ける必要がある場合は、pyenvやuvといったバージョン管理ツールを使い、プロジェクトごとに使用するPythonバージョンを固定しておくのが定石です。「このプロジェクトはこのバージョンで動く」という状態を明示的に管理することで、意図しないバージョンの混在を防げます。
バージョンアップ時に気をつけるべきポイント
最後に、実際にバージョンアップ作業を行う際のチェックポイントをまとめます。
- Python本体より先に、依存ライブラリの対応状況を確認する
前述の通り、実務上のボトルネックになりやすいのはPython本体よりもライブラリ側です。requirements.txtやpyproject.tomlに記載されている主要ライブラリが、アップグレード予定のPythonバージョンに対応しているかを事前に確認しましょう。
- 実行環境(OS・クラウド)側のサポート期限も別途確認する
Python公式のEOL情報だけで判断せず、実際にコードを動かしているサーバーやクラウドサービスのランタイムサポート状況も個別にチェックします。
- 非推奨(deprecation)警告を無視しない
新しいバージョンで実行した際に出るDeprecationWarningは、「今は動くが将来のバージョンで削除される」というサインです。バージョンアップ前にログを確認し、警告が出ている箇所を先に修正しておくと、次のアップグレードがスムーズになります。
- 本番前にステージング環境で検証する
特に業務システムでは、Pythonバージョンだけでなく、そのバージョン上で動くフレームワークやツールとの組み合わせも含めて検証が必要です。いきなり本番環境をアップグレードせず、ステージング環境で一通り動作確認を行うことを推奨します。
- アップグレードは計画的に、少しずつ
複数バージョンを一気に飛び越えてアップグレードすると、非互換の原因を切り分けるのが難しくなります。可能であれば1マイナーバージョンずつ段階的に上げていくと、問題が発生した際の原因特定が容易になります。
まとめ
Pythonのバージョン管理は、「最新版を使えばいい」という単純な話ではありません。プロジェクトの性質、依存ライブラリの対応状況、実行環境のサポート期限など、複数の要素を踏まえて選ぶ必要があります。
特に2026年10月末にPython 3.10がEOLを迎える予定であるため、該当バージョンを利用しているプロジェクトは早めに移行計画を立てることをおすすめします。バージョンごとのサポート状況は変わり続けるものなので、定期的に公式情報を確認する習慣をつけておくとよいでしょう。

