コンテンツにスキップ

pex 内部の Gunicorn を使って WebAPI を起動する

Python のコードと依存パッケージをまとめる pex を使い、Gunicorn と WebAPI を単一ファイルから起動する方法を紹介します。

前提とするディレクトリ構成

次のようなディレクトリ構成で、main.pyに WebAPI のコードがある場合を考えます。

1
2
3
4
a/
└── b/
    └── c/
        └── main.py
1
2
3
4
5
6
7
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

pex のエントリーポイントはgunicornにしておき、pex ファイル名はfoo.pexとします。

起動コマンドの実行

エントリーポイントをgunicornに設定した状態で./foo.pex a.b.c.main:appを実行すると、main.pyのappが起動します。Pants でパッケージングした際に他のモジュールへ依存すると、内部のディレクトリ構成は変わることがあるため、pex ファイルを解凍して確認すると確実です。

config の利用

Gunicorn を使う際に-c {CONFIG_PATH}でコンフィグファイルを指定できます。pex 内部にコンフィグファイルを置いても参照できないので、pex の外側に配置して参照します。