Python WebAcademy Blog

Starlette 1.8も3.10を卒業。Python 3.10のサポート終了から2週間、主要ライブラリの対応状況を初心者向けに解説

|

2026年10月13日、FastAPIの土台でもあるStarlette 1.8.0が公開され、Python 3.10のサポートを終えました。翌14日のStreamlit 1.66も同じく3.11以上が必須です。3.10のサポートが10月1日に終わってから2週間、主要なライブラリの最新版がどのPythonに対応しているのかをPyPIの記録で調べ、自分の環境を確かめるコードとあわせて整理します。

2026年10月13日、PythonのWebフレームワークの土台として使われるStarletteの1.8.0が公開されました。この版から、Python 3.10のサポートを終え、3.11以上が必須になっています。

Starletteは、FastAPIの内部で使われているライブラリです。翌14日に公開されたStreamlit 1.66も、同じく3.10のサポートを終えました。

Python 3.10そのもののサポートは、10月1日に終わっています。そこから2週間、ライブラリの世界でも3.10からの卒業が一気に進んでいるのです。

今回は、主要なライブラリの最新版がどのPythonに対応しているのかを、実際に調べてみました。

まずは何が起きているのかを整理しよう

最初に、この2週間で3.10のサポートを終えた主なリリースを表にまとめます。日付と必要なPythonは、各ライブラリの公式の変更履歴とPyPIの記録にもとづいています。

ライブラリ 版 公開日 必要なPython
SQLAlchemy 2.1.0 2026年9月24日 3.11以上
Starlette 1.8.0 2026年10月13日 3.11以上
Streamlit 1.66.0 2026年10月14日 3.11以上

SQLAlchemyは、10月に3.10のサポートが終わることを見越して、8月の時点で3.10を外していました。その経緯は、こちらで紹介しています。【関連記事】SQLAlchemy 2.1がリリース

Python 3.10のサポート終了そのものについては、こちらで詳しく取り上げました。【関連記事】Python 3.15の正式版は10月9日に延期、3.10はサポート終了へ

Starlette 1.8.0で変わったこと

まずは、今回のニュースの中心であるStarlette 1.8.0の中身を見ておきましょう。変更履歴の冒頭には、この版でPython 3.10のサポートを終え、HTTP 103 Early Hintsを加えたと書かれています。

HTTP 103 Early Hintsとは

HTTP 103 Early Hintsは、サーバーが本番の応答を返す前に、先に必要になりそうなファイルを知らせるための仕組みです。ブラウザは、その知らせを受けて、CSSや画像などを前もって読み込み始められます。

1.8.0では、Request.send_early_hints()というメソッドが加わりました。変更履歴によると、ASGIの拡張機能を通じて、この103の応答を送れるようになっています。

ASGIは、PythonのWebアプリとサーバーをつなぐための約束ごとです。このメソッドが実際に働くかどうかは、使うサーバー側の対応にもよる点に注意してください。

そのほかの主な修正

変更履歴には、ほかにも細かな修正が並んでいます。初心者にも関係しそうなものを表にまとめます。

内容 意味
FileResponseの転送を、接続が切れたら止める 利用者が途中でページを閉じたときに無駄な送信を続けない
範囲指定のダウンロードで無限ループしないように ファイルの終わりで処理が止まらなくなる問題を修正
GZipMiddlewareがgRPCの通信を圧縮しない 圧縮すると困る種類の通信を既定で除外
セッションのクッキーの扱いを修正 max_age=0のときに正しく期限切れにする

なかでも、ファイルの終わりで処理が止まらなくなる問題の修正は、サーバーを守るうえで大切な変更です。

主要ライブラリの最新版は、どのPythonに対応している?

では、ほかのライブラリはどうなっているのでしょうか。2026年10月16日時点のPyPIの記録から、よく使われるライブラリの最新版が必要とするPythonを調べてみました。

ライブラリ 最新版 必要なPython
NumPy 2.5.4 3.12以上
SciPy 1.18.1 3.12以上
Django 6.1.2 3.12以上
pandas 3.0.6 3.11以上
matplotlib 3.11.2 3.11以上
scikit-learn 1.9.1 3.11以上
FastAPI 0.143.2 3.10以上
Pydantic 2.14.1 3.10以上
Polars 2.0.0 3.10以上
pytest 9.1.1 3.10以上

こうして並べると、3.10で最新版が使えないライブラリがすでに多いことがわかります。NumPyやDjangoのように、3.12以上を求めるライブラリも珍しくありません。

一方で、FastAPIやPydanticのように、まだ3.10を受け付けているライブラリもあります。ただし、これも時間の問題だと考えておいたほうがよいでしょう。

FastAPIは3.10でも入るけれど

ここで少し面白いのが、FastAPIとStarletteの関係です。FastAPI 0.143.2は3.10以上で動きますが、内部で使うStarletteの最新版1.8.0は3.11以上が必要です。

PyPIの記録によると、FastAPI 0.143.2が求めるのはstarlette>=0.46.0です。3.10の環境では、pipが3.10に対応した1つ前のStarlette 1.7.0を選んで入れることになります。

つまり、3.10でもFastAPIは動きますが、Starletteの新機能や修正は受け取れません。エラーが出ないまま、少しずつ取り残されていくのが、古いPythonを使い続けるときの怖いところです。

FastAPIそのものについては、こちらで紹介しています。【関連記事】PythonのFastAPIとは?

pipが選ぶ版を実際に確かめた

本当にpipが古いStarletteを選ぶのか、pip downloadで確かめてみました。--python-versionを付けると、手元とは別のPythonを想定して、どの版が選ばれるかを調べられます。

pip download starlette --no-deps --python-version 3.10 --only-binary=:all:
pip download starlette --no-deps --python-version 3.11 --only-binary=:all:

3.10を想定した1行目ではstarlette-1.7.0-py3-none-any.whlが、3.11を想定した2行目ではstarlette-1.8.0-py3-none-any.whlがダウンロードされました。pipは、エラーを出さずに静かに古い版を選ぶわけです。

自分の環境で使えるかを確かめるコード

使いたいライブラリの最新版が、自分のPythonで使えるのかを確かめたい。そんなときは、PyPIが公開しているJSONの情報を使うと便利です。

次のコードは、いくつかのライブラリについて、最新版が求めるPythonのバージョンを取得し、3.10、3.11、3.12で使えるかを判定します。判定には、pipの内部でも使われているpackagingのSpecifierSetを使っています。

import json
import urllib.request

from packaging.specifiers import SpecifierSet

PACKAGES = ["starlette", "streamlit", "sqlalchemy", "numpy", "fastapi"]


def latest_info(name):
    url = f"https://pypi.org/pypi/{name}/json"
    with urllib.request.urlopen(url, timeout=10) as res:
        info = json.load(res)["info"]
    return info["version"], info["requires_python"]


for python in ["3.10", "3.11", "3.12"]:
    print(f"--- Python {python} ---")
    for name in PACKAGES:
        version, requires = latest_info(name)
        ok = python in SpecifierSet(requires)
        mark = "OK" if ok else "NG"
        print(f"{mark}  {name} {version}({requires})")

2026年10月16日に、手元のPython 3.11で実行した結果です。3.10の部分を抜き出して紹介します。

--- Python 3.10 ---
NG  starlette 1.8.0(>=3.11)
NG  streamlit 1.66.0(>=3.11)
NG  sqlalchemy 2.1.4(>=3.11)
NG  numpy 2.5.4(>=3.12)
OK  fastapi 0.143.2(>=3.10)

3.11ではNumPyだけがNGになり、3.12ではすべてOKになりました。使いたいライブラリの名前をPACKAGESに入れれば、自分のプロジェクトでも同じように調べられます。

SpecifierSetのしくみ

SpecifierSet(">=3.11")のように、バージョンの条件を表す文字列からオブジェクトを作ります。そこへ"3.10" inのようにバージョンを渡すと、条件を満たすかどうかをTrueかFalseで返してくれます。

バージョンの比較を自分で文字列として書くと、3.9と3.10の大小を取り違えるような間違いが起きがちです。こうした比較は、専用の道具に任せるのが安全です。

3.10から移るなら、どのバージョンを選ぶ?

最後に、これから移行するならどのバージョンを選べばよいかを考えてみます。今回の調査からは、次のような目安が言えそうです。

移行先 向いている場面
Python 3.12 NumPyやDjangoなど、3.12以上を求めるライブラリを使う場合の最低ライン
Python 3.13 セキュリティ修正の期間が長く、主要ライブラリの対応も十分な、無難な選択
Python 3.14 新しい機能も使いたいが、正式版から1年たって落ち着いたものを選びたい場合
Python 3.15 学習用や、最新の機能を試したい場合

これは筆者の考える目安で、正解は使うライブラリによって変わります。上のコードで、使いたいライブラリをひと通り確かめてから決めるのが確実です。

Pythonのバージョンの切り替え方は、こちらで手順を追って解説しています。【関連記事】Pythonのバージョンを変更する方法

私は10年ほどエンジニアとして開発に関わってきましたが、Pythonを2つも3つも飛ばして一気に上げたときほど、思わぬところで苦労しました。サポートが切れたタイミングで、こまめに1つずつ上げていくほうが、結局は手間が少なく済みます。

まとめ

Python 3.10のサポートが終わってから2週間で、Starlette 1.8.0やStreamlit 1.66.0など、主要なライブラリが続々と3.11以上を必須にしています。NumPyやDjangoのように、すでに3.12以上を求めるライブラリもあります。

3.10を使っている方は、エラーが出ていなくても、少しずつ取り残されていきます。この機会に、使っているライブラリの対応状況を確かめてみてください。

ここまでお読みいただきありがとうございました。

参考情報

次のアクション

記事で学んだ内容を実際に動かしてみよう

Python WebAcademyでは、ブラウザ上でコードを書きながら基礎から実践まで体系的に学べます。

Python WebAcademyの学習画面

あわせて読む

関連記事

ブログ一覧へ

Python学習ロードマップ

まずはこの3講座から

記事で気になったテーマを、順番に手を動かしながら学べます。

ロードマップを見る