← Wszystkie wpisy

Anthropic Python SDK 1.0: migracja ręczna lub z Claude Code

Z przewodnika: Claude Code Comprehensive Guide

Przeniesienie projektu w języku Python z anthropic 0.x na 1.0 to jedno polecenie instalacji, pip install --upgrade "anthropic>=1,<2", a potem przejście przez stałą listę zmian łamiących zgodność: warstwa HTTP działa teraz na httpx2, asynchroniczne metody odczytu .with_raw_response stały się korutynami, zniknęły Text Completions oraz parametry temperature/top_p/top_k, a AnthropicBedrock odmawia utworzenia instancji bez podanego regionu.1 Tę listę można przejść ręcznie z oficjalnym przewodnikiem migracji albo pozwolić, by edycje wykonał Claude Code poleceniem /claude-api upgrade python, i przejrzeć diff.13 Notatka o wydaniu Claude Code nazywa je /claude-api upgrade; przewodnik migracji dodaje argument python i właśnie tę formę należy wpisać.13 Obie drogi kończą się w tym samym miejscu – poniższa strona opisuje każdą z nich, według stanu na anthropic 1.0.0 (wydanie na PyPI 20 sierpnia 2026; sprawdzono 25 sierpnia).2 {.answer-block}

TL;DR

  • Aktualizacja poleceniem pip install --upgrade "anthropic>=1,<2", a następnie uruchomienie pyright lub mypy: przewodnik migracji zaznacza, że type checker wychwytuje niemal każdą zmianę łamiącą zgodność, co daje gotową listę kontrolną.1
  • Python 3.10 to nowe minimum. Nic więcej w środowisku się nie zmienia; SDK nadal obsługuje Pydantic v1 i v2.1
  • httpx stał się httpx2. Zwykłe wartości, takie jak timeout=30.0, działają dalej; obiekty httpx przekazywane do klienta muszą pochodzić z httpx2, a biblioteki, które patchują httpx, przestają cokolwiek widzieć, dopóki nie zostanie wywołane httpx2.alias_httpx().1
  • Usunięte: Text Completions, parametry próbkowania i słowniki schematów w output_format. client.completions.create(), temperature, top_p i top_k zniknęły; słowniki schematów przenoszą się do output_config={"format": {...}}.1
  • Claude Code v2.1.239 (21 sierpnia 2026) dodał /claude-api upgrade, które migruje projekty w języku Python z anthropic 0.x na 1.x.3 Jego wynik należy traktować jak każdą automatyczną migrację: przed commitem trzeba przeczytać diff.

Co się psuje po aktualizacji do anthropic 1.0?

Sześć zmian niesie największy ciężar; skracam szybki przegląd z przewodnika do tych sześciu, a mniejsze usunięcia omawiam dalej.1 Największa z nich ma prosty powód: warstwa HTTP SDK przeszła z httpx, który nie jest już aktywnie utrzymywany, na httpx2, zgodny w API fork utrzymywany przez zespół Pydantic, z tymi samymi klasami, tym samym zachowaniem i dołączonymi poprawkami bezpieczeństwa.1

Zmiana Jak się objawia Poprawka
Porzucono Python 3.9 Brak wsparcia poniżej 3.10 Aktualizacja do wersji Python 3.10 lub nowszej
httpx zastąpiony przez httpx2 TypeError przy tworzeniu klienta po przekazaniu starego httpx.Client; instrumentacja przestaje widzieć ruch import httpx2 as httpx; wywołanie httpx2.alias_httpx() dla śledzenia i mocków
.with_raw_response zwraca APIResponse Asynchroniczne parse() / text() / json() / read() wymagają await; .text i .content stały się metodami await response.parse() / await response.text() w wersji async; response.text() / response.read() w wersji sync
Usunięto Text Completions client.completions.create(), HUMAN_PROMPT, AI_PROMPT już nie istnieją Przejście na client.messages.create()
Usunięto wycofane parametry temperature, top_p, top_k zgłaszają TypeError; słowniki schematów w output_format również Usunięcie ich (lub extra_body dla starszych modeli); output_config={"format": {...}}
Wymagany region Bedrock AnthropicBedrock() zgłasza ValueError bez regionu Przekazanie aws_region= lub ustawienie AWS_REGION

Razem z nimi idą mniejsze usunięcia i jedna zmiana zachowania, każde z zamiennikiem:1

Usunięte lub zmienione Zamiennik
messages.parse(stream=True) (które nigdy nie działało) messages.stream(..., output_format=Order), a następnie stream.get_final_message().parsed_output
tool_runner(compaction_control=...) Kompaktowanie po stronie serwera: betas=["compact-2026-01-12"] plus słownik context_management
Surowe bytes jako body= w client.get/post/put/patch/delete content=b"..." oraz cast_to=httpx2.Response w tym samym wywołaniu
isinstance(x, Stream) dla strumieni wiadomości from anthropic.lib.streaming import MessageStream; isinstance(x, MessageStream)
Wartości nagłówków typu bytes Należy je zdekodować przez .decode(); wartości nagłówków muszą być typu str
BetaBase64PDFBlockParam BetaRequestDocumentBlockParam
anthropic.Transport / ProxiesTypes httpx2.BaseTransport / httpx2.Proxy / httpx2.AsyncBaseTransport
agent_toolset.READ_MAX_BYTES DEFAULT_MAX_FILE_BYTES
Dwie pisownie jednej nazwy nagłówka wysyłane jako dwa nagłówki Późniejszy wpis zastępuje wcześniejszy, także nagłówki ustawiane przez sam SDK; jeśli potrzebne są obie wartości, trzeba je połączyć samodzielnie

Ostatni wiersz gryzie po cichu: default_headers={"USER-AGENT": "my-app/1.0"} zastępuje teraz własny User-Agent SDK zamiast wysyłać oba nagłówki.1

Jak przeprowadzić migrację ręcznie?

Trzy kroki w ustalonej kolejności: aktualizacja, wskazanie uszkodzeń przez type checker, a potem poprawki kategoria po kategorii.

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

Najpierw importy httpx, bo to one zawodzą najgłośniej. Własne reeksporty SDK (anthropic.Timeout, anthropic.DefaultHttpxClient, anthropic.DefaultAsyncHttpxClient, anthropic.DefaultAioHttpClient) wskazują już na httpx2 i działają dalej; aliasu potrzebują tylko obiekty budowane bezpośrednio z httpx.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"),
    ),
)

Jeśli inny kod w aplikacji nadal importuje httpx i współdzieli z SDK klientów lub typy wyjątków, albo jeśli w użyciu jest HTTPXClientInstrumentor z OpenTelemetry, integracja httpx w Sentry, respx, pytest-httpx lub vcrpy, należy raz wywołać httpx2.alias_httpx() na samym początku punktu wejścia. Wywołanie musi nastąpić, zanim cokolwiek zaimportuje httpx (w przeciwnym razie zgłasza RuntimeError), a przewodnik rezerwuje je dla aplikacji: biblioteka nigdy nie powinna wywoływać go w imieniu swoich użytkowników.1 W środowisku pytest najmniej inwazyjną opcją z przewodnika jest wczesny plugin, czyli moduł tests/_alias_httpx.py, który wywołuje httpx2.alias_httpx(), zarejestrowany w pyproject.toml tak, by ładował się przed respx, pytest-httpx i modułami testowymi: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 = ["."]

Obiekty odpowiedzi i błędów są teraz typami httpx2. Zmiana pakietu dotyczy tego, co SDK zwraca, nie tylko tego, co się do niego przekazuje. APIStatusError.response, APIConnectionError.request, response.http_response / .headers / .url w surowych odpowiedziach oraz argument response=, który otrzymują własne event hooki http_client, to wszystko obiekty httpx2. Mają dokładnie te same atrybuty co wcześniej, więc na httpx2 muszą przejść tylko sprawdzenia isinstance i adnotacje typów, które wymieniają httpx.Response / httpx.Request / httpx.Headers.1 Przypadek isinstance zasługuje na drugie spojrzenie. Przewodnik mówi jedynie, że takie sprawdzenia muszą się zmienić;1 istotne są dlatego, że dopóki httpx2.alias_httpx() nie sprawi, by httpx wskazywał na httpx2, sprawdzenie w rodzaju isinstance(err.response, httpx.Response) wobec starego pakietu zwraca False bez żadnego wyjątku, a handler pomija swoją gałąź.

# 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"))

Następnie metody odczytu surowych odpowiedzi. .with_raw_response zwracał dotąd LegacyAPIResponse dla obu klientów; teraz zwraca te same klasy APIResponse / AsyncAPIResponse, których .with_streaming_response używał już wcześniej.1

LegacyAPIResponse (przed) APIResponse (sync, po) AsyncAPIResponse (async, po)
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 bez zmian bez zmian

Potem usunięte parametry. Aktualne modele nie używają temperature, top_p ani top_k, więc generowane metody już ich nie przyjmują. Model sprzed tej zmiany nadal je honoruje przez extra_body, które SDK scala z JSON-em żądania bez żadnych modyfikacji.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})

Słowniki schematów przenoszą się tą samą drogą: output_format={"type": "json_schema", "schema": ...} w beta.messages.create() staje się output_config={"format": {"type": "json_schema", "schema": ...}}; pomocnicze parse() / stream() / count_tokens() / tool_runner() zachowują output_format=Order dla klasy, a słownik schematu w tym miejscu zgłasza teraz TypeError.1

Na koniec Bedrock. AnthropicBedrock i AsyncAnthropicBedrock logowały dotąd ostrzeżenie i wracały do us-east-1; teraz zgłaszają ValueError przy tworzeniu instancji. Region jest ustalany z aws_region=, następnie z AWS_REGION / AWS_DEFAULT_REGION, a potem z sesji boto3 dla podanego aws_profile.1 SDK pomija też teraz nieznane zdarzenia strumieniowania Bedrock, które wcześniej zwracał; jedyny znany przypadek to amazon-bedrock-invocationMetrics.1

Jak przeprowadzić migrację z Claude Code?

Skrót wskazuje sam przewodnik migracji: uruchomić /claude-api upgrade python w projekcie i przejrzeć diff.1 Polecenie pojawiło się w Claude Code v2.1.239, wydanym 21 sierpnia 2026; notatka o wydaniu brzmi w całości: „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)” (dodano /claude-api upgrade do migracji projektów w języku Python z anthropic 0.x na 1.x oraz zaktualizowano referencję skilla dla 1.x).3

To zdanie to cała zweryfikowana powierzchnia: polecenie skilla /claude-api, które migruje użycie 0.x w projekcie na 1.x. Nie znalazłem dalszej dokumentacji tego, jak dobiera swoje edycje, więc należy traktować je dokładnie tak: jako automatyczną migrację, której diff się przegląda. Wystarczy zaktualizować do v2.1.239 lub nowszej (claude update albo instrukcja instalacji i aktualizacji), otworzyć sesję w katalogu głównym projektu i uruchomić:

/claude-api upgrade python

Potem trzeba przeczytać diff fragment po fragmencie, uruchomić type checker i zestaw testów – tę samą recenzję, jaką dostałby PR z migracją od zewnętrznego współtwórcy. Krok ze sprawdzaniem typów ma tu większe znaczenie niż zwykle, bo niemal każde uszkodzenie w 1.0 to błąd typu, a to sprawdzenie nie dba o to, kto wykonał edycje.1 Jedyny szczegół, który wyróżnia notatka o wydaniu, czyli anthropic.Timeout zamiast httpx.Timeout, zgadza się z przewodnikiem: ten reeksport wskazuje już na httpx2.13

Ręcznie /claude-api upgrade python
Wymaga Przewodnika migracji, pyright lub mypy Claude Code v2.1.239 lub nowszego
Kto wykonuje edycje Programista Claude Code, w drzewie roboczym projektu
Krok recenzji Type checker plus testy Przegląd diffa, potem type checker plus testy
Moja rekomendacja Mała powierzchnia albo rozbudowana własna konfiguracja httpx Wiele miejsc wywołań z mechanicznymi zmianami

Pierwszy kontakt z Claude Code? Szybki start opisuje pierwszą sesję, a pełny przewodnik omawia dołączone skille i polecenia slash.

FAQ

Czy anthropic 1.0 nadal obsługuje Pydantic v1?

Tak. SDK nadal obsługuje Pydantic v1 i v2; minimum Python 3.10 to jedyna zmiana w środowisku.1

Dlaczego moja konfiguracja OpenTelemetry lub respx przestaje widzieć żądania SDK po aktualizacji?

Te biblioteki patchują httpx, którego SDK już nie używa. Należy wywołać httpx2.alias_httpx(), zanim cokolwiek zaimportuje httpx; import httpx wskazuje wtedy na httpx2 w całym procesie.1

Czy nadal można przekazać temperature do starszego modelu?

Tak, przez extra_body={"temperature": 0.2}, które SDK scala z JSON-em żądania. W messages.batches.create() klucz należy umieścić bezpośrednio w słowniku params żądania.1

Co zastąpiło kompaktowanie po stronie klienta w tool_runner?

Kompaktowanie po stronie serwera: do tool_runner() przekazuje się betas=["compact-2026-01-12"] i context_management={"edits": [{"type": "compact_20260112", "trigger": {"type": "input_tokens", "value": 100_000}}]}. W przykładzie z przewodnika ta para zastępuje compaction_control={"enabled": True, "context_token_threshold": 100_000}; próg wyzwalacza musi wynosić co najmniej 50 000 tokenów.1

Czy trzeba usunąć httpx_aiohttp z listy wymagań?

Tak. anthropic[aiohttp] i http_client=DefaultAioHttpClient() działają jak dawniej, ale to extra nie instaluje już httpx_aiohttp, bo pakiet jest teraz dostarczany wewnątrz SDK.1

Najważniejsze wnioski

Dla twórców aplikacji: - Przypiąć "anthropic>=1,<2", uruchomić type checker i poprawiać według kategorii w tej kolejności: importy httpx, await w surowych odpowiedziach, usunięte parametry, region Bedrock.1 - Umieścić httpx2.alias_httpx() w pierwszych liniach punktu wejścia, jeśli cokolwiek innego w procesie współdzieli obiekty httpx z SDK lub instrumentuje httpx.1

Dla opiekunów bibliotek: - Nigdy nie wywoływać httpx2.alias_httpx() wewnątrz biblioteki; zamiast tego aliasować import (import httpx2 as httpx).1 - Porzucić anthropic.Transport / ProxiesTypes na rzecz httpx2.BaseTransport / httpx2.Proxy.1

Dla zespołów korzystających z Claude Code: - Zaktualizować do v2.1.239 lub nowszej i uruchomić /claude-api upgrade python z katalogu głównego projektu; przejrzeć diff, a przed commitem uruchomić type checker i testy.13

Źródła


  1. Anthropic, „Migrating to v1”, MIGRATION.md w anthropic-sdk-python: polecenie aktualizacji, minimum Python 3.10, httpx2, klasy .with_raw_response, usunięte API i parametry, zmiany w Bedrock oraz wskazówka /claude-api upgrade python. Zweryfikowano 2026-08-25. 

  2. PyPI, anthropic: wersja 1.0.0 wydana 20 sierpnia 2026; nadal najnowsze wydanie według stanu na 2026-08-25. 

  3. Anthropic, notatka o wydaniu Claude Code v2.1.239, 21 sierpnia 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)”. 

Powiązane artykuły

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 czytania

Pętla Ralph: jak uruchamiam autonomiczne agenty AI na noc

Zbudowałem system autonomicznych agentów z hookami zatrzymania, budżetami spawnowania i pamięcią opartą na plikach. Co z…

6 min czytania