InfraAcademy

InfraAcademy Blog

最後の3.10.22が出て、Python 3.10は終了。OSのpython3と自分で入れたPythonで対応が分かれる理由

著者: ryu | #Linux #Python #Ubuntu
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

この記事を共有

こんにちは、インフラエンジニアのryuです。

2026年10月1日に、Python 3.10.22がリリースされました。これがPython 3.10の最後のリリースです。

python.orgのダウンロードページには、3.10系はもうサポートされておらず、今後はセキュリティ修正も出ないと書かれています。

みなさんの担当しているサーバーにも、Python 3.10は入っていませんか?

ただ、ここで慌ててOSのPythonを入れ替えようとするのはおすすめしません。同じ3.10でも、OSに最初から入っているものと、自分で入れたものとでは、やるべきことがまったく違うからです。

今日は、その違いを中心に、Python 3.10の終了で何を確認すればいいのかを整理していきます。

Python 3.10のサポート終了で、何が変わったのか?

まず、Pythonのサポートの決まりを確認しておきます。

Pythonは毎年10月ごろに新しいバージョンが出て、それぞれ約5年間サポートされます。最初の約2年はバグ修正も入り、残りの期間はセキュリティ修正だけになります。

3.10は2021年10月に出たバージョンなので、5年たってちょうど終わりを迎えたことになります。いまのバージョンごとの状況を表にまとめます。

バージョン 状態(2026年10月時点) サポート終了
3.9 終了 2025年10月
3.10 終了 2026年10月(3.10.22が最後)
3.11 セキュリティ修正のみ 2027年10月
3.12 セキュリティ修正のみ 2028年10月
3.13 バグ修正あり 2029年10月
3.14 バグ修正あり 2030年10月

3.10.22と同じ日に、3.11.17・3.12.15・3.13.16・3.14.8もまとめて出ています。3.10だけが、これで打ち止めになったという形です。

サポート終了とは、Pythonの開発チームが新しい脆弱性を見つけても、3.10向けの修正版を出さなくなることです。プログラムが急に動かなくなるわけではありません。

3.10.22は、ソースコードだけの配布

もう1つ知っておきたいのが、配布の形です。

3.10は、セキュリティ修正だけの期間に入ってから、WindowsやmacOS向けのインストーラーが出ていません。バイナリのインストーラーが付いた最後の版は3.10.11です。

それ以降の3.10.12〜3.10.22は、ソースコードだけの配布でした。つまり、Windowsのインストーラーで入れた3.10は、3.10.11のまま止まっている可能性が高いです。

手元のPCで確認してみてください。

python3 --version
# Python 3.10.11 のように表示される

OSに入っているpython3は、すぐには困らない

ここからが本題です。

Linuxサーバーの多くは、OSのパッケージとしてpython3が最初から入っています。主なOSのデフォルトのバージョンを見てみましょう。

OS デフォルトのpython3 OSのサポート
Ubuntu 22.04 LTS 3.10 標準サポートは2027年5月まで
Ubuntu 24.04 LTS 3.12 標準サポートは2029年5月まで
RHEL 9系 3.9 RHEL 9のライフサイクル全体
RHEL 10系 3.12 RHEL 10のライフサイクル全体

Ubuntu 22.04のpython3は、まさに今回終わった3.10です。

ただ、OSのpython3は、Pythonの開発チームではなくOSの配布元がメンテナンスしています。CanonicalはUbuntu 22.04向けに、3.10.12-1~22.04.x のような版でセキュリティ修正を出し続けてきました。

RHEL 9も同じ考え方です。Red Hatは、上流で2025年10月に終わったPython 3.9を、RHEL 9のサポート期間中は修正を当てながら維持すると説明しています。

つまり、OSに付いてきたpython3は、OSのサポート期間が切れるまではOSの更新で守られるということです。

実際にCanonicalが修正を出しているかは、パッケージの更新履歴で確認できます。

# いま入っているpython3.10のバージョン
dpkg -l | grep python3.10

# 更新履歴(CVE番号が並んでいれば、セキュリティ修正が入っている)
apt changelog python3.10 | head -40

# 未適用の更新があるか
apt list --upgradable 2>/dev/null | grep python3

OSのpython3を入れ替えてはいけない理由

「3.10は終わったから、OSのpython3を3.12に差し替えよう」と考える人もいるかもしれません。

これはやめておきましょう。cloud-initのように、OSの道具の中にはpython3で書かれているものがあります。/usr/bin/python3 の向き先を変えると、そうした道具が動かなくなることがあります。

OSのPythonを新しくしたいなら、OSごと新しいバージョンに上げるのが正しい順番です。Ubuntuなら22.04から24.04に上げれば、python3は3.12になります。

Ubuntu 22.04の標準サポートは2027年5月までなので、それまでにOSのアップグレードを計画しておけば十分間に合います。OSの選び方は『2026年のLinuxディストリビューション選び』も参考にしてください。

困るのは、自分で入れたPythonのほう

一方で、すぐに手を打ったほうがいいのは、OSのパッケージ以外の方法で入れたPythonです。

たとえば、次のようなものがあります。

入れ方 例 誰が更新するか
ソースからビルド /usr/local/bin/python3.10 自分
pyenv ~/.pyenv/versions/3.10.x 自分
Dockerイメージ FROM python:3.10-slim 自分(イメージの付け替え)
AWS Lambda ランタイム python3.10 AWS(ただし期限あり)

これらは、OSの更新では直りません。上流の3.10が終わった以上、新しい脆弱性が見つかっても修正版は出てきません。

まずは、どこに3.10が残っているのかを洗い出すところから始めましょう。

# サーバー上にあるPythonの実体を探す
ls -l /usr/bin/python3* /usr/local/bin/python3* 2>/dev/null

# pyenvを使っている場合
pyenv versions

# リポジトリの中でpython:3.10のイメージを使っている箇所
grep -rn "python:3.10" --include="Dockerfile*" .

# 手元にあるイメージ
docker images | grep python

venvで作った仮想環境も見落としやすいところです。venvは作ったときのPythonを指しているので、中身を確認しておきます。

# 仮想環境が使っているPythonのバージョン
cat /path/to/venv/pyvenv.cfg
# version = 3.10.12 のように表示される

Lambdaのpython3.10ランタイムの期限

AWS Lambdaを使っているなら、ランタイムの期限も確認しておきましょう。

Lambdaの公式ドキュメントでは、python3.10 ランタイムの期限が次のように案内されています。

段階 日付 何が起きるか
非推奨 2026年10月31日 セキュリティ修正とサポートの対象外になる
関数の作成をブロック 2027年2月1日 python3.10で新しい関数を作れなくなる
関数の更新をブロック 2027年3月3日 既存の関数のコードを更新できなくなる

非推奨になった後も、関数はしばらくそのまま動きます。ただ、更新ができなくなると、障害が起きてもコードを直せません。

python3.10 ランタイムはAmazon Linux 2がベースです。AL2そのものも2026年6月に標準サポートが終わっているので、Amazon Linux 2023ベースの python3.12 以降に移すのが自然です。AL2からAL2023への違いは『Amazon Linux 2のサポート終了後に移行で変わること』にまとめています。

対象の関数は、AWS CLIで一覧にできます。

aws lambda list-functions \
  --query "Functions[?Runtime=='python3.10'].[FunctionName,Runtime]" \
  --output table

リージョンごとに結果が違うので、使っているリージョンをすべて確認してください。

洗い出してみると、思ったより多くの場所に3.10が残っていることがあります。全部を一度に移すのは大変なので、順番を決めて進めましょう。

優先したいのは、インターネットから直接リクエストを受けるものです。Webアプリや外部からのWebhookを受けるLambdaは、脆弱性を突かれたときの影響が大きくなります。社内だけで使う集計スクリプトなどは、そのあとでも構いません。

洗い出した結果は、場所・入れ方・移行先・担当者を表にしておくと、チームで進めやすくなります。

ライブラリのほうが先に3.10を外している

もう1つ、見落としやすい点があります。Python本体より先に、ライブラリやツールのほうが3.10を対象から外しているのです。

たとえば、NumPyは2.3系からPython 3.11以上が対象です。運用自動化でよく使うansible-coreも、2.20ではコントロールノードのPythonの最低バージョンが3.12になっています。

3.10のままだと、ライブラリを新しくしようとしても、pipが古いバージョンしか入れてくれません。セキュリティ修正の入ったライブラリを使えなくなるのが、実は一番困るところです。

移行先のバージョンはどう選ぶ?

では、どのバージョンに移せばいいのでしょうか。

移行先は、なるべくOSのデフォルトと同じバージョンにそろえるのがおすすめです。OSのパッケージと同じバージョンなら、OSの更新でセキュリティ修正を受けられるからです。

環境 おすすめの移行先 理由
Ubuntu 24.04のサーバー 3.12 OSのpython3と同じ
RHEL 9系のサーバー 3.12(AppStreamの python3.12) OSのパッケージとして入れられる
Lambda python3.12 以降 AL2023ベースのランタイム
Dockerイメージ 3.12〜3.13 サポート期間に余裕がある

3.11にすると、2027年10月にまた同じ作業がやってきます。せっかく移すなら、サポート期間が長いバージョンを選んだほうが手間は少なくなります。

venvを作り直す手順

自分で作ったvenvは、中のPythonだけを差し替えることはできません。新しいPythonで作り直します。

# 1. いまのライブラリの一覧を書き出す
/path/to/old-venv/bin/pip freeze > requirements.txt

# 2. 新しいPythonで仮想環境を作る(Ubuntu 24.04の例)
python3.12 -m venv /path/to/new-venv

# 3. ライブラリを入れ直す
/path/to/new-venv/bin/pip install -r requirements.txt

# 4. 動作を確認してから、systemdのユニットやcronのパスを新しいvenvに向ける

pip freeze で固定したバージョンの中には、新しいPythonに対応していないものもあります。エラーが出たら、そのライブラリだけバージョンを上げて試してみてください。

移したあとに確認しておきたいこと

venvを作り直して動いたように見えても、それで終わりにしないほうが安全です。

よくあるのは、古いvenvのパスがどこかに残っているケースです。systemdのユニットファイル、cronの設定、シェルスクリプトの1行目(シバン)などに、古いパスが直接書かれていることがあります。

次のように検索して、古いパスが残っていないかを確かめておきましょう。

# 古いvenvやpython3.10を直接指している設定を探す
grep -rn "old-venv\|python3.10" /etc/systemd/system/ /etc/cron* /opt/ 2>/dev/null

Dockerイメージの場合も同じです。FROM のタグを python:3.12-slim に変えたら、イメージをビルドし直して、テストを通してからデプロイしてください。タグを変えただけで本番に出すと、ライブラリのビルドに失敗して起動しない、ということが起こりえます。

すべて移し終えたら、古いvenvや使わなくなったPythonは削除しておきます。残しておくと、半年後に誰かがうっかり古いほうを使ってしまう原因になります。

LinuxにPythonを入れる基本的な流れは『LinuxでPythonを使う方法』で解説しています。

Linuxの土台から学び直したい人へ

今回の話は、Pythonそのものというより、Linuxのパッケージ管理の考え方の話でした。

どのソフトを誰がメンテナンスしているのかが分かっていると、サポート終了のニュースを見ても、自分の環境で何をすればいいかを落ち着いて判断できます。先月のOpenSSL 3.0の終了(『OpenSSL 3.0のサポート終了』)も、同じ考え方で整理できます。

InfraAcademyでは、Linuxのパッケージ管理やサービスの管理を、順番に手を動かしながら学べる Linuxロードマップ を用意しています。こうした判断の土台を固めたい方は、のぞいてみてください。

まとめ

Python 3.10は、2026年10月1日の3.10.22を最後にサポートが終わりました。

ただ、対応の仕方は、どうやって入れたPythonかで分かれます。

  • Ubuntu 22.04などOSのpython3は、OSのサポート期間中は配布元が修正を出す。入れ替えずにOSのアップグレードを計画する
  • pyenv・ソースビルド・Dockerイメージ・venvは、自分で新しいバージョンへ移す
  • Lambdaの python3.10 は2026年10月31日に非推奨。2027年3月3日には関数を更新できなくなる

まずは、ls や grep で、どこに3.10が残っているかを書き出すところから始めてみてください。場所さえ分かれば、あとは1つずつ移していくだけです。

参考

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

株式会社InfraAcademy 代表 / エンジニア

大手メーカーでインフラエンジニアとして勤務した後、ベンチャー企業・スタートアップでフルスタックエンジニアを経験。その後、起業し学習サービス「InfraAcademy」を運営しています。
保有資格:ネットワークスペシャリストなど 運営会社:株式会社InfraAcademy

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る