🍣
ryeとfastAPI (というかWSGI/ASGIアプリケーション)
FastAPI等のASGIフレームワークやWSGIフレームワークを使ってアプリケーションを作ったとき、uvicorn等のASGI/WSGIサーバを必要とすることがある。
このとき依存性管理で少し悩むことになる。
アプリケーションはFastAPIに依存しているが、uvicornには依存していない。よって、rye add uvicorn
とするべきではない。
しかし「動くアプリケーションの構成」を記録しておきたいなら、なんらかの方法でlockファイルには含めておきたい。
このとき、ryeでは「ワークスペース」を使うのがよいと思う。
例えばpyproject.tomlに以下のように記述する。pyproject.toml
[tool.rye.workspace]
members = ["launcher"]
そして以下のようにサブプロジェクトを作る。
rye init --script --no-readme --private launcher
cd launcher
rye add uvicorn
これによりルートプロジェクトの依存にuvicornを加えずに、lockファイルには加えたことになる。
このままrye run uvicorn yourmodname:app
でもよいし、launcher.main()
を以下のようにするのもよい。
launcher/__init__.py
def main() -> int:
uvicorn.run("yourmodname:app")
return 0
こうするとrye run launcher
で起動できる。
Discussion