FastAPIのインストールオプション比較
FastAPIのインストール概要
FastAPIはAPI構築に特化したPython用Webフレームワークである。
pipが使用できる状態で以下を実行することでインストール可能。
pip install fastapi
PyPIにも上記のpipコマンドが記載されている。
公式ドキュメントに複数のインストールオプション
上記の処理だけでもインストールは可能だが公式ドキュメントのチュートリアル - ユーザーガイド - はじめに - FastAPIを眺めていると以下のようなインストールオプションがある模様。
pip install "fastapi[all]"
pip install "uvicorn[standard]"
上記の違いと通常のpip install fastapi
の違いについて気になったので差分を比較して何がインストールされるのか調べてみる。
オプション比較
順番にインストールを行い、依存関係に何が含まれるのかを調べてみる。
検証方法としては仮想環境を作成ののちインストールを行い、差分を確認する。
fastapi
$ pip install fastapi
以下の構成がインストールされた。
$ pip list
Package Version
----------------- -------
anyio 3.7.0
fastapi 0.96.0
idna 3.4
pip 23.1.2
pydantic 1.10.8
setuptools 67.6.1
sniffio 1.3.0
starlette 0.27.0
typing_extensions 4.6.3
動作最小限の構成といったところ。
"fastapi[all]"
次に公式ドキュメントで推奨されているオプション"fastapi[all]"
。
pip install "fastapi[all]"
インストール結果が以下の通り。
$ pip list
Package Version
----------------- -----------
anyio 3.7.0
certifi 2023.5.7
click 8.1.3
dnspython 2.3.0
email-validator 2.0.0.post2
fastapi 0.96.0
h11 0.14.0
httpcore 0.17.2
httptools 0.5.0
httpx 0.24.1
idna 3.4
itsdangerous 2.1.2
Jinja2 3.1.2
MarkupSafe 2.1.3
orjson 3.9.0
pip 23.1.2
pydantic 1.10.8
python-dotenv 1.0.0
python-multipart 0.0.6
PyYAML 6.0
setuptools 67.6.1
sniffio 1.3.0
starlette 0.27.0
typing_extensions 4.6.3
ujson 5.7.0
uvicorn 0.22.0
uvloop 0.17.0
watchfiles 0.19.0
websockets 11.0.3
pip install fastapi
と比べてかなり多くのパッケージが同時にインストールされた。
通常のインストールとの差分は以下の通り。
Package Version
----------------- -------
anyio 3.7.0
+ certifi 2023.5.7
+ click 8.1.3
+ dnspython 2.3.0
+ email-validator 2.0.0.post2
fastapi 0.96.0
+ h11 0.14.0
+ httpcore 0.17.2
+ httptools 0.5.0
+ httpx 0.24.1
idna 3.4
+ itsdangerous 2.1.2
+ Jinja2 3.1.2
+ MarkupSafe 2.1.3
+ orjson 3.9.0
+ python-dotenv 1.0.0
+ python-multipart 0.0.6
+ PyYAML 6.0
+ ujson 5.7.0
+ uvicorn 0.22.0
+ uvloop 0.17.0
+ watchfiles 0.19.0
+ websockets 11.0.3
デプロイに必要なパッケージ関連が多く導入されていることがわかる。大きな違いとしてはASGI Webサーバーであるuvicornの有無や、http関連のパッケージの差異が目立つ。
"uvicorn[standard]"
蛇足のようだが、紹介されているもう一つのオプションを試してみる。
$ pip install "uvicorn[standard]"
$ pip list
Package Version
------------- -------
anyio 3.7.0
click 8.1.3
h11 0.14.0
httptools 0.5.0
idna 3.4
pip 23.1.2
python-dotenv 1.0.0
PyYAML 6.0
setuptools 67.6.1
sniffio 1.3.0
uvicorn 0.22.0
uvloop 0.17.0
watchfiles 0.19.0
websockets 11.0.3
ASGIサーバーであるuvicornを中心として基本構成がインストールされた。
この段階ではFastAPIはインストールされていないため、別途pip install fastapi
する必要がある。
公式ドキュメントでも説明されているがpip install uvicorn[standard]
はあくまでデプロイ時のオプションであり、必要に応じて構成を変えるためのものである点に注意。
開発時に"fastapi[all]
で依存関係をまとめてインストールし、デプロイ先の環境に応じて調整するためのものという認識。