2026.10.23

【2026年版】古いPythonから3.13・3.14へのバージョンアップ手順|3.10のサポート終了と削除されたモジュール

はじめに

この記事では、サポートの終わった古い Python(3.6〜3.10 など)で動いているプログラムを、3.13・3.14 に上げる手順をまとめました。

まず:Python 3.10 のサポートが終わった

2026 年 10 月 1 日、Python 3.10 の最後の更新(3.10.22)が出て、3.10 のサポートが終わりました。これからは、脆弱性が見つかっても 3.10 向けの修正は出ません。

この日の更新では、3.10〜3.14 の各バージョンで、次のような脆弱性が修正されました。

  • 細工した tar ファイルを展開すると、展開先の外にファイルを書かれる(tarfile)
  • 細工した ZIP ファイルで、メモリを使い果たさせられる(ZIP 爆弾)
  • HTTPS 用のパスワードが、HTTP の通信で使われてしまうことがある(urllib)

その前日の 9 月 30 日には、TLS のサーバーを外から落とせるおそれのある脆弱性(CVE-2026-19445、CVSS 9.2)も公表されました。影響するのは、SNI のコールバックで SSLContext を切り替えるサーバーだけですが、Python で TLS のサーバーを書いている場合は確かめましょう。

バージョン状態(10 月 23 日時点)サポートの期限
3.1510 月 9 日に出たばかり2031 年 10 月
3.14バグ修正あり2030 年 10 月
3.13セキュリティ修正のみ2029 年 10 月
3.12セキュリティ修正のみ2028 年 10 月
3.11セキュリティ修正のみ2027 年 10 月
3.10終了2026 年 10 月 1 日に終了
3.9 以前終了3.9 は 2025 年 10 月に終了

今から上げるなら 3.13 か 3.14

今から上げるなら 3.13(2029 年 10 月まで)か 3.14(2030 年 10 月まで)がおすすめです。使っているライブラリ(特に NumPy・PyTorch など、C で書かれた部分を持つもの)が 3.14 に対応していれば 3.14、まだなら 3.13 にしましょう。3.15 は出たばかりなので、ライブラリの対応がそろうまで待つのが無難です。

バージョンアップの流れ

  1. Python のバージョンが決まっている場所を洗い出す:.python-version・pyproject.toml の requires-python・Dockerfile・CI の設定
  2. 新しい Python で仮想環境を作り、依存パッケージを入れる
  3. テストを流し、非推奨の警告をエラーとして洗い出す
  4. コードを直す:削除されたモジュール、変わった動き
  5. CI・Docker・本番をそろえて切り替える

OS の Python は置き換えない

Linux では、OS の道具(dnf・yum など)が OS 付属の Python で動いています。OS の `/usr/bin/python3` を新しいものに置き換えると、OS が壊れることがあります。新しい Python は、uv・pyenv・Docker などで別に用意しましょう。

bash
# uv を使う場合(Python 本体の取得から仮想環境まで)
uv python install 3.13
uv venv --python 3.13
source .venv/bin/activate
uv pip install -r requirements.txt

# pyenv を使う場合
pyenv install 3.13
pyenv local 3.13
python -m venv .venv

依存パッケージを確かめる

Python のバージョンアップでいちばん止まりやすいのは、依存パッケージが新しい Python に対応していないことです。C で書かれた部分を持つパッケージは、新しい Python 用のビルド済みファイル(wheel)が無いと、インストールでビルドが始まって失敗します。

bash
# 古いパッケージの一覧
pip list --outdated

# 新しい Python で、依存パッケージが入るか試す(ここで止まるものを先に上げる)
pip install -r requirements.txt

非推奨の警告をエラーにして洗い出す

bash
# 非推奨の警告をエラーとして扱ってテストを流す
python -W error::DeprecationWarning -m pytest

今のバージョンで出ている非推奨の警告は、次のバージョンで削除されることが多いので、先に直しておくと楽になります。

古い書き方を自動で直す

ruff(リンター)の UP ルールや pyupgrade を使うと、古い書き方を新しいバージョン向けに自動で書き換えられます。

bash
# ruff で、3.13 向けに書き換えられる箇所を直す
ruff check --select UP --target-version py313 --fix .

# pyupgrade を使う場合
pyupgrade --py313-plus $(git ls-files '*.py')

つまずきやすいところ

3.10:collections の古い書き方が削除

Python
# 3.9 まで動いていた書き方(3.10 で削除)
from collections import Mapping

# collections.abc から読み込む
from collections.abc import Mapping

3.12:distutils・imp が削除

  • distutils が削除された → setuptools か、sysconfig・shutil などの標準の代わりに
  • imp が削除された → importlib に
  • asyncore・asynchat・smtpd が削除された → asyncio に
  • 仮想環境(venv)に setuptools が最初から入らなくなった。必要なら自分で入れる
  • unittest の古い別名(assertEquals など)が削除された → assertEqual に

3.13:古い標準モジュールがまとめて削除

使われなくなった標準モジュールが、まとめて削除されました。古い業務システムで使われていることがあるので、import を検索しましょう。

  • cgi・cgitb:CGI で動く古い Web アプリ。Web フレームワークか、email・urllib.parse で代わりを書く
  • telnetlib・nntplib・crypt・pipes・imghdr など
  • lib2to3(Python 2 から 3 への変換ツール 2to3)

3.14:動きが変わったもの

  • multiprocessing の既定の起動方法が、Linux で fork から forkserver に変わった。グローバル変数を子プロセスで使っているコードは要注意
  • イベントループが無いときの asyncio.get_event_loop() がエラーになるようになった → asyncio.run() を使う

日付の扱い

3.12 から datetime.utcnow() が非推奨になりました。datetime.now(timezone.utc) のように、タイムゾーン付きで扱いましょう。

Python 2 がまだ残っている場合

Python 2.7 は 2020 年にサポートが終わっています。2 から 3 への変換ツール(2to3)も 3.13 で削除されたので、3 系への書き換えは、作り直しに近い作業として計画しましょう。

本番を切り替えるときの注意

  • Docker のベースイメージは python:3.13-slim-bookworm のように、バージョンと OS をはっきり書く
  • 依存パッケージのバージョンを固定する:requirements.txt や uv.lock などで、本番と手元をそろえる
  • cron やサービスの設定で、Python のパスを確かめる:古い Python を直接指定していることがある
  • 切り戻しの手順を用意する

OS ごと古い場合(CentOS 7 の Python 3 は 3.6)は、OS の移行も合わせて考えましょう。CentOS 7 などサポートが終わった Linux からの移行にまとめています。

まとめ

  • Python 3.10 は 2026 年 10 月 1 日にサポート終了。これからは修正が出ない
  • 上げる先は 3.13 か 3.14(3.15 はライブラリの対応待ち)
  • OS の Python は置き換えず、uv・pyenv・Docker で別に用意する
  • 止まりやすいのは依存パッケージと、削除された標準モジュール(distutils・cgi など)
  • -W error::DeprecationWarning と ruff の UP ルールで洗い出す

ほかの言語は、PHP 7 系から 8 系へ・古い Node.js から LTS へ・Java 11・17 から 21・25 へにまとめています。

参考

Python の公式の情報と、国内外のセキュリティ情報(2026 年 10 月 23 日時点)をもとにまとめています。

Status of Python versions - Python Developer's Guide

PEP 594 – Removing dead batteries from the standard library

What's New in Python 3.14

TFT
soflan108本の記事