pythonのパッケージ管理でpoetryを使ってみる(brewでinstall)
今までは、pythonでプロジェクト作成する際は、pipenv shellで仮想環境を構築し、パッケージのインストールとかは、全てpipenv installで行っていたが、poetryを最近よくみるので試してみました。
poetryのインストールにつまづいた点や使用感を備忘録として残しておきます。
poetryとは
pythonのパッケージ管理ツールです。pipコマンドと同じようにパッケージをインストールする際に使用することができます。
pipコマンドだと、インストールしたパッケージをpip frezz〜 > requirments.txtみたいな形でパッケージを全て出力しておく必要がありますが、poetryはパッケージ管理ファイルの生成/変更も機能としてあるので、簡単にインストール済みのパッケージを共有できる。
他にもプロジェクトごとの仮想環境もpoetryで構築できるようで、非常に多機能であるらしい。
その分コマンドも多いが、pythonプロジェクトをpoetryコマンド1つでできるのであれば、それはかなり嬉しい。
poetryのインストール
Macを使用しているので、brewを使ってインストールしました。pythonもbrewでインストールしています。
poetryをbrewでインストールする際は、下記のコマンドになります。
brew install poetry
※ 参考 https://formulae.brew.sh/formula/poetry
基本は、これだけ使えるようなのですが、私の場合は、バージョンを確認してみると下記のようなエラーが出てしまいました。
/usr/local/bin/poetry: bad interpreter: /usr/local/opt/python@3.9/bin/python3.9: no such file or directory
なので、インストールしたpoetryのパスを強制的にシンボリックさせるように下記のコマンドを実行しました。
brew link --overwrite poetry
これで何とか、poetryのコマンドは使えるようになりました。
poetry -V
Poetry (version 1.5.1)
poetryでプロジェクトを作ってみる
プロジェクト作成の前に下記のコマンドを実行しておくと、poetryのプロジェクト内に.venvが作成されるようになるので、実行しておきました。
poetry config virtualenvs.in-project true --local
※ 参考 https://info.drobe.co.jp/blog/engineering/poetry-python-project
①さっそくプロジェクトを作成していくのですが、今回は、すでにプロジェクトのフォルダの中で作業していたので、poetry initでpoetry管理を始めました。
poetry init
設定内容が聞かれますが、全てEnterで回答しました。
プロジェクトのフォルダをする場合は、poetry init [プロジェクトフォルダ名]みたいです。
②今回は、flaskアプリを作っていく予定だったので、下記コマンドで必要なライブラリを3つ追加しました。
poetry add flask flask-sqlalchemy flask-cors
上記のようなコマンドで、追加したモジュールは、自動でproject.tomlというファイルに書き込まれます。
Pipfileみたいなものですね。
③プロジェクト内にmain.pyというファイルを作成し、下記処理を記載しておきます。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello world!!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
④最後に、仮想環境を下記コマンドで起動し、flaskアプリケーションを起動してみます。
poetry shell
(仮想環境が起動したら)
python3 main.py
上記、実行後、Hello worldが表示されればOK!
poetryの使用感
今まで、仮想環境構築時に、pipenvコマンド を使っており、pipenv install でパッケージを追加したり、pipenv run pip ~でrequirments.txtに出力したりをして、少しめんどくささがあったが、そういったのがpoetryではあまり感じられなかった。
仮想環境を起動していなくても、パッケージを追加できたり、1つのコマンドで完結してるのはかなりありがたい。
まだ、プロジェクトの生成くらいしか試せていないが、pipenvとそれほど使用感も変わらないため、すぐに使い慣れることができそうです。当分はpoetryを使っていこうかなと思います。
Discussion