← Alle Beitrage

Anthropic Python SDK 1.0: Migration manuell oder Claude Code

Aus dem Leitfaden: Claude Code Comprehensive Guide

Ein Python-Projekt von anthropic 0.x auf 1.0 zu heben, braucht einen Installationsbefehl, pip install --upgrade "anthropic>=1,<2", und danach einen Durchgang durch eine feste Liste von Breaking Changes: Die HTTP-Schicht läuft jetzt auf httpx2, die asynchronen .with_raw_response-Reader wurden zu Coroutinen, Text Completions und die Parameter temperature/top_p/top_k sind weg, und AnthropicBedrock lässt sich ohne Region nicht mehr konstruieren.1 Gehen Sie diese Liste mit dem offiziellen Migrationsleitfaden von Hand durch, oder lassen Sie Claude Code die Änderungen mit /claude-api upgrade python vornehmen und prüfen Sie den Diff.13 Die Release Note von Claude Code nennt den Befehl /claude-api upgrade; der Migrationsleitfaden ergänzt das Argument python, und genau diese Form tippen Sie ein.13 Beide Wege enden am selben Ort – die Seite unten behandelt jeden davon, auf dem Stand von anthropic 1.0.0 (am 20. August 2026 auf PyPI veröffentlicht; geprüft am 25. August).2 {.answer-block}

TL;DR

  • Aktualisieren Sie mit pip install --upgrade "anthropic>=1,<2" und lassen Sie danach pyright oder mypy laufen: Laut Migrationsleitfaden markiert ein Typprüfer fast jeden Breaking Change, was ihn zu einer fertigen Checkliste macht.1
  • Python 3.10 ist die neue Untergrenze. Sonst ändert sich an Ihrer Umgebung nichts; das SDK unterstützt weiterhin Pydantic v1 und v2.1
  • Aus httpx wurde httpx2. Einfache Werte wie timeout=30.0 funktionieren weiter; httpx-Objekte, die Sie dem Client übergeben, müssen aus httpx2 stammen, und Bibliotheken, die httpx patchen, bleiben blind, bis Sie httpx2.alias_httpx() aufrufen.1
  • Entfernt: Text Completions, Sampling-Parameter und Schema-Dicts in output_format. client.completions.create(), temperature, top_p und top_k sind weg; Schema-Dicts wandern nach output_config={"format": {...}}.1
  • Claude Code v2.1.239 (21. August 2026) hat /claude-api upgrade hinzugefügt, um Python-Projekte von anthropic 0.x auf 1.x zu migrieren.3 Behandeln Sie die Ausgabe wie jede automatisierte Migration: Lesen Sie den Diff, bevor Sie ihn committen.

Was bricht beim Upgrade auf anthropic 1.0?

Sechs Änderungen tragen das meiste Gewicht; ich verdichte die Kurzreferenz des Leitfadens auf diese sechs, die kleineren Entfernungen folgen danach.1 Die größte hat einen schlichten Grund: Die HTTP-Schicht des SDK ist von httpx, das nicht mehr aktiv gepflegt wird, zu httpx2 gewechselt, einem API-kompatiblen Fork, den das Pydantic-Team pflegt, mit denselben Klassen, demselben Verhalten und eingeschlossenen Sicherheitskorrekturen.1

Änderung Wie sie sich zeigt Behebung
Python 3.9 gestrichen Unter 3.10 nicht unterstützt Auf Python 3.10 oder neuer aktualisieren
httpx durch httpx2 ersetzt TypeError beim Konstruieren, wenn Sie einen alten httpx.Client übergeben; Instrumentierung wird blind import httpx2 as httpx; für Tracing und Mocks httpx2.alias_httpx() aufrufen
.with_raw_response gibt APIResponse zurück Asynchrone parse() / text() / json() / read() brauchen await; .text und .content wurden zu Methoden await response.parse() / await response.text() bei async; response.text() / response.read() bei sync
Text Completions entfernt client.completions.create(), HUMAN_PROMPT, AI_PROMPT existieren nicht mehr Zu client.messages.create() wechseln
Veraltete Parameter entfernt temperature, top_p, top_k werfen TypeError; Schema-Dicts in output_format ebenfalls Entfernen (oder extra_body für ältere Modelle); output_config={"format": {...}}
Bedrock-Region erforderlich AnthropicBedrock() wirft ohne Region ValueError aws_region= übergeben oder AWS_REGION setzen

Kleinere Entfernungen und eine Verhaltensänderung kommen dazu, jede mit Ersatz:1

Entfernt oder geändert Stattdessen verwenden
messages.parse(stream=True) (hat nie funktioniert) messages.stream(..., output_format=Order), dann stream.get_final_message().parsed_output
tool_runner(compaction_control=...) Serverseitige Compaction: betas=["compact-2026-01-12"] plus ein context_management-Dict
Rohe bytes als body= bei client.get/post/put/patch/delete content=b"..." und im selben Aufruf cast_to=httpx2.Response
isinstance(x, Stream) für Message-Streams from anthropic.lib.streaming import MessageStream; isinstance(x, MessageStream)
bytes als Header-Werte Mit .decode() umwandeln; Header-Werte müssen str sein
BetaBase64PDFBlockParam BetaRequestDocumentBlockParam
anthropic.Transport / ProxiesTypes httpx2.BaseTransport / httpx2.Proxy / httpx2.AsyncBaseTransport
agent_toolset.READ_MAX_BYTES DEFAULT_MAX_FILE_BYTES
Zwei Schreibweisen eines Header-Namens als zwei Header gesendet Der spätere Eintrag ersetzt den früheren, auch bei Headern, die das SDK selbst setzt; wenn Sie beide brauchen, fügen Sie die Werte selbst zusammen

Die letzte Zeile beißt leise: default_headers={"USER-AGENT": "my-app/1.0"} ersetzt jetzt den User-Agent des SDK, statt beide zu senden.1

Wie migriere ich von Hand?

Drei Schritte, der Reihe nach: aktualisieren, den Typprüfer die Brüche finden lassen, dann nach Kategorie beheben.

pip install --upgrade "anthropic>=1,<2"
pyright   # or mypy

Beheben Sie zuerst die httpx-Importe, denn sie schlagen am lautesten fehl. Die Re-Exporte des SDK selbst (anthropic.Timeout, anthropic.DefaultHttpxClient, anthropic.DefaultAsyncHttpxClient, anthropic.DefaultAioHttpClient) zeigen bereits auf httpx2 und funktionieren weiter; nur Objekte, die Sie direkt aus httpx bauen, brauchen den Alias.1

# Before
import httpx
from anthropic import Anthropic, DefaultHttpxClient

client = Anthropic(
    timeout=httpx.Timeout(60.0, connect=5.0),
    http_client=DefaultHttpxClient(
        proxy="http://my.proxy.example",
        transport=httpx.HTTPTransport(local_address="0.0.0.0"),
    ),
)

# After
import httpx2 as httpx  # or `import httpx2` and rename the references
from anthropic import Anthropic, DefaultHttpxClient

client = Anthropic(
    timeout=httpx.Timeout(60.0, connect=5.0),
    http_client=DefaultHttpxClient(
        proxy="http://my.proxy.example",
        transport=httpx.HTTPTransport(local_address="0.0.0.0"),
    ),
)

Wenn anderer Code in der Anwendung weiterhin httpx importiert und Clients oder Exception-Typen mit dem SDK teilt, oder wenn Sie den HTTPXClientInstrumentor von OpenTelemetry, die httpx-Integration von Sentry, respx, pytest-httpx oder vcrpy einsetzen, rufen Sie httpx2.alias_httpx() einmal ganz oben in Ihrem Einstiegspunkt auf. Der Aufruf muss erfolgen, bevor irgendetwas httpx importiert (sonst wirft er RuntimeError), und der Leitfaden reserviert ihn für Anwendungen: Eine Bibliothek sollte ihn nie im Namen ihrer Nutzer aufrufen.1 Unter pytest ist die am wenigsten invasive Option des Leitfadens ein frühes Plugin, ein Modul tests/_alias_httpx.py, das httpx2.alias_httpx() aufruft und in pyproject.toml registriert ist, damit es vor respx, pytest-httpx und Ihren Testmodulen geladen wird:1

# tests/_alias_httpx.py
import httpx2

httpx2.alias_httpx()  # makes `import httpx` / `import httpcore` resolve to httpx2 / httpcore2
# pyproject.toml
[tool.pytest.ini_options]
addopts = "-p tests._alias_httpx"
pythonpath = ["."]

Response- und Fehlerobjekte sind jetzt httpx2-Typen. Der Paketwechsel gilt für das, was das SDK zurückgibt, nicht nur für das, was Sie hineingeben. APIStatusError.response, APIConnectionError.request, response.http_response / .headers / .url bei Raw Responses und das response=-Argument, das die Event-Hooks Ihres eigenen http_client erhalten, sind allesamt httpx2-Objekte. Sie tragen exakt dieselben Attribute wie zuvor, sodass nur isinstance-Prüfungen und Typannotationen, die httpx.Response / httpx.Request / httpx.Headers nennen, auf httpx2 umgestellt werden müssen.1 Der isinstance-Fall verdient einen zweiten Blick. Der Leitfaden sagt nur, dass solche Prüfungen umgestellt werden müssen;1 der Grund, warum sie zählen: Solange httpx2.alias_httpx() nicht dafür gesorgt hat, dass httpx auf httpx2 auflöst, liefert eine Prüfung wie isinstance(err.response, httpx.Response) gegen das alte Paket False, ohne etwas zu werfen, und der Handler überspringt seinen Zweig.

# Before
def log_failure(err: anthropic.APIStatusError) -> None:
    response: httpx.Response = err.response
    print(response.status_code, response.headers.get("request-id"))


# After
def log_failure(err: anthropic.APIStatusError) -> None:
    response: httpx2.Response = err.response
    print(response.status_code, response.headers.get("request-id"))

Dann die Raw-Response-Reader. .with_raw_response gab früher für beide Clients LegacyAPIResponse zurück; jetzt liefert es dieselben Klassen APIResponse / AsyncAPIResponse, die .with_streaming_response bereits verwendet hat.1

LegacyAPIResponse (vorher) APIResponse (sync, nachher) AsyncAPIResponse (async, nachher)
response.parse() response.parse() await response.parse()
response.text response.text() await response.text()
response.content response.read() await response.read()
response.http_response.json() response.json() await response.json()
.headers, .status_code, .url, .request_id unverändert unverändert

Dann die entfernten Parameter. Aktuelle Modelle verwenden temperature, top_p und top_k nicht, deshalb nehmen die generierten Methoden sie nicht mehr an. Ein Modell, das älter als diese Änderung ist, beachtet sie weiterhin über extra_body, das das SDK unverändert in das Request-JSON einmischt.1

# Before
client.messages.create(..., model="claude-sonnet-4-6", temperature=0.2)

# After
client.messages.create(..., model="claude-sonnet-4-6", extra_body={"temperature": 0.2})

Schema-Dicts wandern auf dieselbe Weise: Aus output_format={"type": "json_schema", "schema": ...} bei beta.messages.create() wird output_config={"format": {"type": "json_schema", "schema": ...}}; die Helfer parse() / stream() / count_tokens() / tool_runner() behalten output_format=Order für eine Klasse, und ein Schema-Dict wirft dort jetzt TypeError.1

Zum Schluss Bedrock. AnthropicBedrock und AsyncAnthropicBedrock haben früher eine Warnung protokolliert und auf us-east-1 zurückgegriffen; jetzt werfen sie beim Konstruieren ValueError. Die Region wird aus aws_region= aufgelöst, dann aus AWS_REGION / AWS_DEFAULT_REGION, dann aus der boto3-Session für das angegebene aws_profile.1 Außerdem überspringt das SDK jetzt unbekannte Bedrock-Streaming-Events, die es früher durchgereicht hat; der einzige bekannte Fall ist amazon-bedrock-invocationMetrics.1

Wie migriere ich mit Claude Code?

Der Migrationsleitfaden selbst nennt die Abkürzung: Führen Sie /claude-api upgrade python in Ihrem Projekt aus und prüfen Sie den Diff.1 Claude Code v2.1.239, veröffentlicht am 21. August 2026, ist die Version, in der der Befehl gelandet ist; die Release Note lautet vollständig: “Added /claude-api upgrade to migrate Python projects from anthropic 0.x to 1.x, and updated the skill’s Python reference for 1.x (timeouts use anthropic.Timeout, not httpx.Timeout)” (sinngemäß: /claude-api upgrade zum Migrieren von Python-Projekten von anthropic 0.x auf 1.x hinzugefügt und die Python-Referenz des Skills für 1.x aktualisiert; Timeouts verwenden anthropic.Timeout, nicht httpx.Timeout).3

Dieser Satz ist die gesamte verifizierte Oberfläche: ein Befehl des /claude-api-Skills, der die 0.x-Nutzung eines Projekts auf 1.x migriert. Ich habe keine weitere Dokumentation dazu gefunden, wie er seine Änderungen auswählt, also behandeln Sie ihn als genau das: eine automatisierte Migration, deren Diff Sie prüfen. Aktualisieren Sie auf v2.1.239 oder neuer (claude update oder die Referenz zum Installieren und Aktualisieren), öffnen Sie eine Sitzung im Projektstammverzeichnis und führen Sie den Befehl aus:

/claude-api upgrade python

Lesen Sie dann den Diff Hunk für Hunk, lassen Sie den Typprüfer laufen und führen Sie die Testsuite aus – dieselbe Prüfung, die Sie dem Migrations-PR eines Contributors geben würden. Der Typprüfer-Schritt zählt hier mehr als sonst, weil fast jeder 1.0-Bruch ein Typfehler ist, und dieser Prüfung ist egal, wer die Änderungen gemacht hat.1 Das eine Detail, das die Release Note hervorhebt, anthropic.Timeout statt httpx.Timeout, deckt sich mit dem Leitfaden: Dieser Re-Export zeigt bereits auf httpx2.13

Von Hand /claude-api upgrade python
Voraussetzung Migrationsleitfaden, pyright oder mypy Claude Code v2.1.239 oder neuer
Wer die Änderungen macht Sie Claude Code, in Ihrem Arbeitsverzeichnis
Prüfschritt Typprüfer plus Tests Diff-Review, dann Typprüfer plus Tests
Meine Empfehlung Kleine Oberfläche oder viel eigene httpx-Verdrahtung Viele Aufrufstellen mit mechanischen Änderungen

Neu bei Claude Code? Der Schnellstart behandelt die erste Sitzung, und der vollständige Leitfaden behandelt gebündelte Skills und Slash-Befehle.

FAQ

Unterstützt anthropic 1.0 weiterhin Pydantic v1?

Ja. Das SDK unterstützt weiterhin Pydantic v1 und v2; das Minimum Python 3.10 ist die einzige Änderung an der Umgebung.1

Warum sieht mein OpenTelemetry- oder respx-Setup nach dem Upgrade keine SDK-Requests mehr?

Diese Bibliotheken patchen httpx, das das SDK nicht mehr verwendet. Rufen Sie httpx2.alias_httpx() auf, bevor irgendetwas httpx importiert; import httpx löst dann für den gesamten Prozess auf httpx2 auf.1

Kann ich einem älteren Modell weiterhin temperature übergeben?

Ja, über extra_body={"temperature": 0.2}, das das SDK in das Request-JSON einmischt. Bei messages.batches.create() legen Sie den Schlüssel direkt in das params-Dict des Requests.1

Was ersetzt die clientseitige Compaction in tool_runner?

Serverseitige Compaction: Übergeben Sie betas=["compact-2026-01-12"] und context_management={"edits": [{"type": "compact_20260112", "trigger": {"type": "input_tokens", "value": 100_000}}]} an tool_runner(). Im Beispiel des Leitfadens ersetzt dieses Paar compaction_control={"enabled": True, "context_token_threshold": 100_000}; die Trigger-Schwelle muss mindestens 50.000 Tokens betragen.1

Muss ich httpx_aiohttp aus den Requirements entfernen?

Ja. anthropic[aiohttp] und http_client=DefaultAioHttpClient() funktionieren wie bisher, aber das Extra installiert httpx_aiohttp nicht mehr, weil es jetzt im SDK selbst enthalten ist.1

Wichtigste Erkenntnisse

Für Anwendungsentwickler: - Pinnen Sie "anthropic>=1,<2", lassen Sie den Typprüfer laufen und beheben Sie nach Kategorie, in dieser Reihenfolge: httpx-Importe, Awaits bei Raw Responses, entfernte Parameter, Bedrock-Region.1 - Setzen Sie httpx2.alias_httpx() in die ersten Zeilen des Einstiegspunkts, wenn irgendetwas anderes im Prozess httpx-Objekte mit dem SDK teilt oder httpx instrumentiert.1

Für Bibliotheksmaintainer: - Rufen Sie httpx2.alias_httpx() nie innerhalb einer Bibliothek auf; aliasieren Sie stattdessen den Import (import httpx2 as httpx).1 - Ersetzen Sie anthropic.Transport / ProxiesTypes durch httpx2.BaseTransport / httpx2.Proxy.1

Für Teams, die Claude Code nutzen: - Aktualisieren Sie auf v2.1.239 oder neuer und führen Sie /claude-api upgrade python aus dem Projektstammverzeichnis aus; prüfen Sie den Diff, dann lassen Sie Typprüfer und Tests laufen, bevor Sie committen.13

Referenzen


  1. Anthropic, “Migrating to v1”, anthropic-sdk-python MIGRATION.md: Upgrade-Befehl, Untergrenze Python 3.10, httpx2, .with_raw_response-Klassen, entfernte APIs und Parameter, Bedrock-Änderungen und der Verweis auf /claude-api upgrade python. Geprüft am 25. August 2026. 

  2. PyPI, anthropic: 1.0.0 veröffentlicht am 20. August 2026; mit Stand 25. August 2026 weiterhin das neueste Release. 

  3. Anthropic, Release Notes zu Claude Code v2.1.239, 21. August 2026: “Added /claude-api upgrade to migrate Python projects from anthropic 0.x to 1.x, and updated the skill’s Python reference for 1.x (timeouts use anthropic.Timeout, not httpx.Timeout)”. 

Verwandte Beiträge

The Skills My Agent Could Not See

Five skills in my Claude Code setup reached the model as bare names. The description budget drops routing information si…

14 Min. Lesezeit

Der Ralph-Loop: Wie ich autonome KI-Agenten über Nacht betreibe

Ich habe ein autonomes Agentensystem mit Stop-Hooks, Spawn-Budgets und Dateisystem-Speicher gebaut. Die Fehlschläge und …

8 Min. Lesezeit