LoginSignup
2
5

More than 3 years have passed since last update.

Pythonの実行時のパッケージと開発環境のパッケージをPoetryで管理する

Last updated at Posted at 2020-05-24

PyPIパッケージの管理に、Poetryを使うとrequirements.txtを使うよりも、以下の点で便利そうだった。

  • 開発/本番環境で使うパッケージの管理を別に行うことができる(npmのdevdependenciesのような感じ)
  • 直接プロダクトが依存しているパッケージのみを管理することができる
  • 依存パッケージに依存しているパッケージのバージョンは poetry.lock で管理され、いつの間にか依存パッケージのバージョンが上がって動かなくなることはない(npmの、package-lock.json、yarn.lockのような感じ)
  • 依存パッケージのバージョンアップも1コマンドでできる
  • virtualenv.in-project trueを設定しておくと、venvを使用して.venvディレクトリにパッケージをインストールする(.venvディレクトリはVSCodeでも自動で認識するので便利)

自分で使いそうなコマンドをまとめました。

Poetryのインストール

pip install --user poetry

環境の分離に使うvenvを使い、.venvディレクトリを自動で作成して使うように設定する

poetry config virtualenvs.in-project true

開発でのみ使うパッケージのインストール

poetry add -D black

アプリケーションから依存しているパッケージのインストール

poetry add flask

別のマシンで、開発環境を構築する場合

# 分離環境の作成
python -m venv .venv

# パッケージのインストール
poetry install

プログラムの実行

.venv下にパッケージはインストールされているので、.venvで実行する

.venv/bin/python api.py

もしくは、Poetry経由で実行する

poetry run python api.py

パッケージのアップデート

poetry update

コンテナ化

コンテナの中では.venvを用いず、Poetryの環境分離機能を使う(VSCodeと共有せず、特に.venvディレクトリである必要はないため)

FROM python:3.8.2

# Poetryのインストール
RUN pip install poetry==1.0.5

WORKDIR /app

# 依存パッケージのインストール
COPY poetry.lock pyproject.toml ./
# devは除く
RUN poetry install --no-dev

# アプリケーションの格納
COPY api.py ./
# ...

# Poetry経由で実行する
CMD ["poetry", "run", "python", "api.py"]
2
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5