Closed3

FastAPIのインストールオプション比較

あーるあーる

公式ドキュメントに複数のインストールオプション

上記の処理だけでもインストールは可能だが公式ドキュメントのチュートリアル - ユーザーガイド - はじめに - 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と比べてかなり多くのパッケージが同時にインストールされた。
通常のインストールとの差分は以下の通り。

shell
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]で依存関係をまとめてインストールし、デプロイ先の環境に応じて調整するためのものという認識。

このスクラップは2023/06/04にクローズされました