Python
ベータCloudflare Workersは、以下を含むPythonのファーストクラスサポートを提供します。
- Pythonの標準ライブラリの大部分
- Workers AI、Vectorize、R2、KV、D1、Queues、Durable Objects、Service Bindingsなど、すべてのバインディング
- 環境変数およびシークレット
- JavaScriptオブジェクトや関数をPythonから直接使用できる堅牢な外部関数インターフェース (FFI) — すべてのランタイムAPIを含む
- FastAPI ↗、Langchain ↗、httpx ↗などを含む組み込みパッケージ
git clone https://github.com/cloudflare/python-workers-examplescd python-workers-examples/01-hellonpx wrangler@latest devPython Workerは、3行のコードで非常にシンプルにできます。
from js import Response
def on_fetch(request): return Response.new("Hello World!")JavaScript、TypeScript、またはRustで書かれたWorkersと同様に、Python Workerのメインエントリポイントはfetchハンドラです。Python Workerでは、このハンドラはon_fetchと呼ばれます。
ローカルでPython Workerを実行するには、Cloudflare WorkersのCLIであるWranglerを使用します。
npx wrangler@latest devPython WorkerをCloudflareにデプロイするには、wrangler deployを実行します。
npx wrangler@latest deployPython Workersは複数のファイルに分割できます。新しいPythonファイルsrc/hello.pyを作成しましょう。
def hello(name): return "Hello, " + name + "!"次に、src/entry.pyを修正して新しいモジュールを利用します。
from hello import hellofrom js import Response
def on_fetch(request): return Response.new(hello("World"))src/entry.pyを編集すると、Wranglerは自動的に変更を検出し、Workerを再読み込みします。
fetchハンドラに渡されるrequestパラメータは、外部関数インターフェースを介して公開されたJavaScriptのRequestオブジェクトであり、Pythonコードから直接アクセスできます。
POSTリクエストを受け入れるようにWorkerを編集してみましょう。Requestに関するドキュメントから、async関数内でawait request.json()を呼び出してリクエストボディをJSONとして解析できることがわかります。Python Workerでは、次のように書きます。
from js import Responsefrom hello import hello
async def on_fetch(request): name = (await request.json()).name return Response.new(hello(name))src/entry.pyを編集すると、Wranglerはローカル開発サーバーを自動的に再起動します。適切なボディを持つPOSTリクエストを送信すると、Workerはパーソナライズされたメッセージで応答します。
curl --header "Content-Type: application/json" \ --request POST \ --data '{"name": "Python"}' http://localhost:8787Hello, Python!requestパラメータに加えて、envパラメータもPythonのfetchハンドラに渡され、環境変数、シークレット、およびバインディングにアクセスするために使用できます。
例えば、Python Workerで環境変数を設定して使用してみましょう。まず、Workerのwrangler.tomlに環境変数を追加します。
name = "hello-python-worker"main = "src/entry.py"compatibility_flags = ["python_workers"]compatibility_date = "2024-03-20"
[vars]API_HOST = "example.com"次に、envパラメータを介してAPI_HOST環境変数にアクセスできます。
from js import Response
async def on_fetch(request, env): return Response.new(env.API_HOST)- Python WorkersでサポートされているPython標準ライブラリのどの部分がサポートされているかを理解します。
- Python Workersの外部関数インターフェース (FFI)について学び、バインディングやランタイムAPIと連携する方法を学びます。
- Workersランタイムが提供する組み込みPythonパッケージを探ります。