18
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

anthropic SDK が httpx をやめました。移行しても動くので気づけません

18
Last updated at Posted at 2026-08-24

anthropic の Python SDK が 1.0.0 になりました。移行ガイドで手が止まります。

The SDK's HTTP layer moved from httpx, which is no longer actively maintained, to httpx2 - an API-compatible fork maintained by the Pydantic team.
(SDK の HTTP 層を httpx から httpx2 へ移行した。httpx はもはや活発に保守されていない。 httpx2 は Pydantic チームが保守する API 互換のフォークである)

httpx が保守されていない。 広く使われているライブラリです。

実測すると、書き換えは1行で済みました。 ただし途中で「動いているのに壊れている」状態を踏み、
保守されていない」という記述自体も、裏を取ると少し違いました。

検証環境: Windows 10 / Python 3.12.3 / anthropic 0.125.0 → 1.0.0


まず結果

検証 結果
0.125.0 が入れる HTTP 層 httpx 0.28.1
1.0.0 が入れる HTTP 層 httpx2 2.12.0
上げた直後 httpx が残り、古いコードが動く
その httpx の Required-by (誰も依存していない残骸)
httpx を消すと ModuleNotFoundError
/claude-api upgrade python 1行だけ書き換え
httpx 本家の開発版 2026-08-21 に出ている(保守終了ではない)

上げても、古いコードが動いてしまう

0.x で典型的なコードを書きます。

import httpx
from anthropic import Anthropic, DefaultHttpxClient

client = Anthropic(
    timeout=httpx.Timeout(60.0, connect=5.0),
    http_client=DefaultHttpxClient(
        transport=httpx.HTTPTransport(local_address="0.0.0.0"),
    ),
)

1.0.0 に上げます。移行ガイドはこう書いています。

Anything you construct from httpx and pass to the client must now come from httpx2.
httpx から生成してクライアントに渡すものは、すべて httpx2 由来でなければならない)

壊れるはずです。動きました。

client OK: Anthropic
timeout   : Timeout(connect=5.0, read=60.0, write=60.0, pool=60.0)

依存を見て分かりました。

anthropic  1.0.0
httpx      0.28.1     ← 残っている
httpx2     2.12.0     ← 追加された

httpx が残っています。 そのおかげで import httpx が通っていただけでした。


残った httpx は誰も必要としていない

なぜ残るのか調べました。

Version: 0.28.1
Required-by:

Required-by が空。 どのパッケージも依存していない、0.x 時代の残骸でした。消します。

pip uninstall -y httpx
Traceback (most recent call last):
  File "C:\hx\app.py", line 1, in <module>
    import httpx
ModuleNotFoundError: No module named 'httpx'

ここで壊れます。

直後は動くので、移行できたと思ってしまいます。 実際は残骸に依存しているだけで、
環境を作り直した瞬間(CI、Docker、pip install のやり直し)に落ちます。

クリーンな venv に 1.0.0 を入れて確認しました。 httpx2 だけが入り、httpx は入りません。


書き換えは1行だった

Claude Code 2.1.239 の移行コマンドを使いました。

claude -p '/claude-api upgrade python'

差分がこれです。

-import httpx
+import httpx2 as httpx

1行だけでした。TimeoutHTTPTransport呼び出し側はそのままです。

移行後、httpx が無い状態で実行します。

client OK: Anthropic
timeout   : Timeout(connect=5.0, read=60.0, write=60.0, pool=60.0)

通りました。 import httpx2 as httpx と書けば、以降のコードを触らずに済みます。


「保守されていない」の裏を取る

anthropic の書き方は他より強めでした。

出典 表現
anthropic の MIGRATION.md no longer actively maintained(もはや活発に保守されていない)
httpx2 本家の README With HTTPX itself seeing limited activity recently(活動が限定的になっている)

httpx2 側は「利用者が確実に保守される移行先を持てるよう、Pydantic が維持を引き受ける」としています。

リリース履歴も見ました。

最新 公開日
httpx(安定版) 0.28.1 2024-12-06
httpx(開発版) 1.0.dev5 2026-08-21
httpx2 2.12.0 2026-08-18

安定版は1年8か月前ですが、開発版は今週も出ています。 本家 README にも保守終了の記述はありません。

「保守終了」と読むのは行き過ぎでした。実態は「安定版の更新が長く止まっている」で、その評価が分かれています。

自分の環境を確認する

pip show httpx | grep -E "Version|Required-by"

Required-by が空なら残骸です。消して動くか試してください。
依存されているなら、そのパッケージの移行待ちになります。


まとめ

  • anthropic 1.0.0 から HTTP 層が httpx2(Pydantic が維持を引き継いだフォーク)に変わった
  • ただし「httpx は保守終了」は言い過ぎ。安定版は 2024-12 で止まっているが、開発版は 2026-08-21 に出ている
  • 上げた直後は古いコードが動いてしまう。 0.x 時代の httpx が残骸として残っているため
  • その httpx は Required-by が空。 消すと ModuleNotFoundError
    クリーンな環境では入らないので、手元だけ動く状態になりやすい
  • 書き換えは import httpx2 as httpx の1行で済んだ。TimeoutHTTPTransport もそのまま使える
  • 破壊的変更は3つ。Python 要件が 3.9 → 3.10、HTTP 層、Timeoutanthropic.Timeout が実在)
  • Claude Code 2.1.239 の /claude-api upgrade python が自動でやってくれる
    Git Bash では MSYS_NO_PATHCONV=1 が要る。 /claude-api がパスに変換される)

anthropic を使っていなくても、pip show httpx は一度見ておく価値があります。


参考

※ 引用は原文と日本語訳を併記しています。訳は読みやすさを優先しているので、正確な表現は原典をご確認ください。

関連記事


JQITのエンジニアの95%以上は未経験からの採用です。
よければコーポレートサイトにも遊びに来てください。

コーポレートサイト

エンジニア採用も行っています。もしご興味あれば覗いてみてください。

採用サイト

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?