📌

Pythonでpyenv+poetry+FastAPIな環境を作成する

2023/12/10に公開

はじめに

Python のプロジェクト環境構築する時はみなさんどうしていますか?
Python のバージョンだったりプロジェクトの依存するパッケージなどできる限り簡潔に環境構築したいと思う方も多いと思います。
私は pyenv + poetry を使用しています。これでプロジェクトごとにバージョン切り替えや仮想環境が作成できるので複数プロジェクトを開発するには良いかと思っています
今回は FastAPI を例に手順を記事にしていきたいと思います。

補足

Windows でも環境構築可能ですが、今回は Mac での手順になります

pyenv インストール

Homebrew上にインストールします
Homebrewのインストールがまだの方はこちらからインストールできます
https://brew.sh/ja/
※インストール済みの方はアップデートしておくことをお勧めします

brew update

Homebrew上にpyenvをインストール

brew install pyenv

pyenv のパスを通す

以下を実行して、パスを通すための環境変数等を設定します

現在使っているshellを確認します

echo $SHELL
# 出力結果
/usr/local/bin/zsh

zshまたはbashと表示されると思います

zshの場合、

echo 'export PYENV_ROOT="$HOME/.pyenv"'  >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"'  >> ~/.zshrc
echo 'eval "$(pyenv init --path)"'  >> ~/.zshrc
echo 'eval "$(pyenv init -)"'  >> ~/.zshrc
source ~/.zshrc

bashの方は上記のコマンドをzshrcbash_profileと置換して実行してみてください

インストールが完了したら以下コマンドでpyenvが使えることを確認

pyenv -v
# 出力結果
pyenv 2.3.35

pyenv 上に Python をインストール

まずpyenvでインストール可能な Python 一覧を表示します

pyenv install --list

すると以下のように利用可能なバージョン一覧が表示されます

Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4.0
  2.4.1
  2.4.2
  2.4.3
  2.4.4
  2.4.5
  2.4.6
  ...
(以下略)

一覧の中からpython バージョンを指定してインストールします
ここでは 2023 年 12 月時点で最新の3.12.0をインストールしてみたいと思います
-devだったりaが入っているものは無視して数字のみのものを選択するのが良いと思います

pyenv install 3.12.0

インストール完了後、pyenv上にインストールされたか確認します

pyenv versions
* 3.12.0

ここで先ほど指定したバージョンが表示されていれば OK です

次に、インストールしたPythonをコマンドで使用できるように設定します

# 全体へ設定
pyenv global 3.12.0
# プロジェクトのみへ設定
pyenv local 3.12.0

これで python の 3.12.0 が使用できるようになりましたので以下コマンドで確認

python --version
# 出力結果
Python 3.12.0

Poetry インストール

公式サイトを参考にしながらインストールします
https://python-poetry.org/docs/#installing-with-the-official-installer

curl -sSL https://install.python-poetry.org | python3 -

こちらもパスを通します

echo 'export PATH="/Users/<ユーザー名>/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

bash の方はzshrcbash_profileにしてください

※インストールできない場合はpython3pythonに変換してみてください

インストールできたら確認します

poetry --version
# 出力結果
Poetry (version 1.7.1)

プロジェクトの作成

まず、プロジェクトごとにパッケージを管理したいので
パッケージのインストール先をプロジェクト内の.venvディレクトリになるようpoetryの設定をします

poetry config virtualenvs.in-project true

プロジェクトで poetry 使用する Python のバージョンを指定します

poetry env use 3.12

新規でプロジェクト作成

poetry new fastapi-project

既存のプロジェクトをpoetry配下にする場合には、

poetry init

これでpoetryプロジェクトが出来上がったのでパッケージをインストールしてきます

FastAPI インストール

fastapiuvicornをインストールします

poetry add fastapi uvicorn

FastAPIが実行されるよう最低限main.pyを実装

from fastapi import FastAPI

app = FastAPI()

@app.get('/')
async def root():
    return {'message': 'OK'}

では、サーバーを立ち上げてみましょう

poetry run uvicorn main:app --port 8080 --reload

localhost:8080にアクセスしてmessage: OKと表示されていれば OK

まとめ

ここまでで紹介した方法で環境構築すると端末の環境を汚すことなく、
プロジェクトごとの仮想環境を作成してそこにパッケージを入れていくことができます。
pyenvPythonバージョンの切り替えもできるので複数プロジェクトにアサインされている時は必須ですね。
初回はつまずくことも多いですが慣れてしまえばメリットしかないのでぜひご活用ください!

参考資料

https://zenn.dev/kenghaya/articles/9f07914156fab5
https://qiita.com/yokohama4580/items/dc6ba7259e99cad0dd65
https://ralacode.com/blog/post/build-python-environment-with-pyenv/

GitHubで編集を提案

Discussion