【Python】PyenvとPoetryで開発環境を作成する手順
この記事ではPyenvとPoetryを使いプロジェクトごとの仮想環境を作成する手順を紹介します。例としてFast APIを使いAPIを作成します。
Pyenvの概要
Pyenvとは
PyenvはPythonのバージョン管理ツールです。Pyenvを使うことでPC内に複数の異なるバージョンのPythonを共存させることができ、使用するPythonのバージョンの切り替えが簡単にできます。 また、Python 3.12.1をPCのデフォルトとして使いたいが、特定のプロジェクトではPython 3.10.0を使うということもできます。
Pyenvでよく使うコマンド
Pyenvには多くのコマンドが用意されていますが、よく使うものをまとめました。
やりたいこと | コマンド |
---|---|
インストール可能なPythonバージョン一覧確認 | pyenv install -l |
Pythonのインストール | pyenv install {バージョン名} |
インストール済Pythonの一覧確認 | pyenv versions |
グローバルで使用するPythonのバージョンを設定 | pyenv global {インストール済バージョン名} |
特定のディレクトリ配下で使用するPythonのバージョンを設定 | pyenv local {インストール済バージョン名} |
Pythonのアンインストール | pyenv uninstall {バージョン名} |
Poetryの概要
Poetryとは
Poetryはプロジェクトごとの仮想環境、パッケージの管理ツールです。Pythonで仮想環境を作る際にvenvや virtualenvでは手動で管理する必要がありますが、Poetryではプロジェクト内でpoetry install コマンドを実行するだけで仮想環境を作成できます。
Poetryでよく使うコマンド
Poetryには多くのコマンドが用意されていますが、よく使うものをまとめました。
やりたいこと | コマンド |
---|---|
プロジェクト新規作成 | poetry new {プロジェクト名} |
既存プロジェクトにPoetry追加 | poetry init |
仮想環境の切り替え | poetry env use {Pythonのパス/Pythonバージョン} |
仮想環境一覧確認 | poetry env list |
現在の仮想環境の詳細情報表示 | poetry env info |
仮想環境削除 | poetry remove {環境名} |
パッケージ追加 | poetry add {パッケージ名} |
追加済パッケージ一覧確認 | poetry show |
パッケージ削除 | poetry remove {パッケージ名} |
パッケージインストール | poetry install |
仮想環境内でコマンド実行 | poetry run {コマンド} |
Fast APIを使ったプロジェクトの開発環境作成
Pyenvでプロジェクトで使用するPython環境を作成
プロジェクトで使用するバージョンのPythonをインストールします。pyenv localコマンドを使用することで特定のディレクトリ配下で使用するPythonのバージョンを指定することができます。
今回の例ではPython 3.12.0を使用します。Fast APIを使ったプロジェクトにするため “fast-api-test"というディレクトリを作り、そのディレクトリ配下で使用するPythonのバージョンを3.12.0にします。
# プロジェクト用のディレクトリ作成
$ mkdir fast-api-test
$ cd fast-api-test
# Python3.12.0をインストール
$ pyenv install 3.12.0
# プロジェクトディレクトリ配下で使用するPythonのバージョンを3.12.0に指定
$ pyenv local 3.12.0
Poetryでプロジェクト新規作成しパッケージを追加
$ poetry init
# パッケージ名
Package name [fast-api-test]:
# アプリバージョン
Version [0.1.0]:
# アプリの説明
Description []: Test app of Fast API
# アプリの作者
Author [xxxx@xxx.yyy>, n to skip]:
# ライセンス
License []:
# 使用するPythonのバージョン
Compatible Python versions [^3.12]:
Would you like to define your main dependencies interactively? (yes/no) [yes] no
# Fast APIパッケージを追加
$ poetry add fastapi
# Uvicornパッケージを追加
poetry add uvicorn
# パッケージをインストール
poetry install
Fast APIによるAPIエンドポイントの作成
/hello にアクセスすると {“message": “Hello World"} とJSONを返すAPIエンドポイントを作成します。プロジェクト直下にmain.pyを以下のように作成します。
# Fast APIをインポート
from fastapi import FastAPI
# Fast APIのインスタンスを作成
app = FastAPI()
# APIエンドポイント定義
@app.get("/hello")
def hello():
return {"message": "Hello World"}
作成したAPIをローカルでUvicornを起動し動作確認します。localhost:8080/hello にGETリクエストを投げて{“message": “Hello World"}が返ってくることを確認します。
# Uvicorn上で作成したAPIを実行
$ poetry run uvicorn main:app --port 8080 --reload
# 作成したAPIの動作確認
$ curl http://localhost:8080/hello
{"message":"Hello World"}