M1 MacでFastAPI Hello Worldまでの手順
OpenAI APIを色々試していきたい。
普段TypeScriptばかり書いているが、Generative AIエコシステム周りはPython有利に感じる(LlamaIndexとか。LangChainはJS/TS対応しているがPythonより解説やサンプルが少なく学習しづらい)。
そこでPythonの環境構築をキャッチアップしていく。とりあえず環境構築からFastAPI Hello Worldまでやっていく。
環境
- M1 Mac
- brew
- asdf
asdf導入
まずはpyenv的なものを入れたい。
*envの管理ツールといえばanyenvだが、最近はasdfが使われてるらしいので入れてみる。
まだ anyenv (**env) 使ってるの? asdf を使おう!
手順は以下。
インストール:
brew install asdf
~/.zshrc
に初期化コマンド(たぶん)を追記する:
echo -e "\n. \"$(brew --prefix asdf)/libexec/asdf.sh\"" >> ~/.zshrc
asdf Pythonプラグインを入れる:
asdf plugin-add python
Python 3.11.2をインストールし有効化する:
asdf install python 3.11.2
asdf global python 3.11.2
これでPython 3.11.2が使える:
python -V # => Python 3.11.2
poetry導入
Pythonのパッケージマネージャは
- pip
- pipx
- pipenv
- poetry
といろいろあるようだが、今回はpoetryを選択。
Introduction | Documentation | Poetry - Python dependency management and packaging made easy
poetryインストール:
curl -sSL https://install.python-poetry.org | python -
パスを通す(環境によって違うかも):
echo -e "\n. \"export PATH="$HOME/.local/bin:$PATH\"" >> ~/.zshrc
versionコマンドが使えることを確認:
poetry --version # => Poetry (version 1.4.2)
プロジェクト作成
ディレクトリを掘る:
mkdir python-playground
cd python-playground
プロジェクト初期化する:
poetry init
色々聞かれるがすべてReturnする。 pyproject.toml
ができる。
Blackフォーマッタを入れる。JS/TSでいうPrettierみたいなやつ。
poetry add black
で、VSCodeでBlackが効くようにする:
{
"recommendations": [
"ms-python.black-formatter"
]
}
{
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.formatOnSave": true
}
FastAPIを動かしてみる
試しにFastAPIでHello Worldする。
チュートリアル - ユーザーガイド - はじめに - FastAPI
uvicornとfastapiをインストール:
poetry add uvicorn fastapi
main.py
を作成:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
サーバ起動:
poetry run uvicorn main:app --reload
# =>
# INFO: Will watch for changes in these directories: ['/path/to/python-playground']
# INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
# INFO: Started reloader process [xxxxx] using StatReload
# INFO: Started server process [xxxxx]
# INFO: Waiting for application startup.
# INFO: Application startup complete.
ブラウザで http://localhost:8000
を見る:
{"message":"Hello World"}
Discussion