🐍

M1 MacでFastAPI Hello Worldまでの手順

2023/04/15に公開

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 を使おう!

手順は以下。

Getting Started | 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が効くようにする:

.vscode/extensions.json
{
    "recommendations": [
        "ms-python.black-formatter"
    ]
}
.vscode/settings.json
{
    "editor.defaultFormatter": "ms-python.black-formatter",
    "editor.formatOnSave": true
}

FastAPIを動かしてみる

試しにFastAPIでHello Worldする。

チュートリアル - ユーザーガイド - はじめに - FastAPI

uvicornとfastapiをインストール:

poetry add uvicorn fastapi

main.py を作成:

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