1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Poetry

Posted at

はじめに

備忘録
poetryの使い方をまとめたのでqiitaに残しておく
npm(jsのpackage管理ツール), pip, poetryの比較も最後に載せておく

npmがわかる人向けに端的にまとめると、pythonのinstall時にくっついてくるpipはグローバルインストールしかできないし、package.jsonみたいな依存関係を表すファイルを生成してくれない。
poetryを使うと、ディレクトリ単位でpackageを管理できて 依存関係ファイルも生成してくれて楽

poetry

パッケージ管理を行う。
プロジェクト環境を隔離する (仮想速度を作る)

installしたpackageは.venvに保存される。
.venvは仮想環境であるため、コマンド実行は仮想環境で行う

初期化

# 既存アプリの場合 (npmの使い方に似てるのでこっちが好き)
poetry init

# 新規アプリの場合
poetry new <dir_name>

package追加

poetry add [package]
# 開発環境でのみ
poetry add --dev [package]

削除

poetry remove [package]

既存のpyproject.tomlを利用してinstall

poetry install

# 本番環境のみ
poetry install --no-dev

package一覧

poetry show

仮想環境
仮想環境で実行することで、ホストの環境によってエラーが出ることを防げる
同一ホストで複数のアプリを開発している際、他の影響を受けなくなる

# 仮想環境でコマンドを実行する
poetry run [コマンド]

# 例
poetry run python main.py

pythonの仮想環境とはインストールしたmoduleやpackage、
Pythonのversionごとに分離された環境のこと

# 仮想環境に入る
poetry shell

仮想環境の管理

# 仮想環境一覧
poetry env list

# 仮想環境削除
poetry env remove [id]
poetry config --list

# 同一階層に仮想環境ファイル (.venv)を作るようにする
poetry config virtualenvs.in-project true
# 仮想環境を作らないようにする
# コンテナで実行する場合などに有効
# パッケージのインストール先がシステム環境のpythonに紐づく
poetry config virtualenvs.create false

# 該当プロジェクトでのみ有効にする
poetry config virtualenvs.create false --local

globalのpackageと仮想環境のpackageを併用できる

pyproject.toml
プロジェクトの依存関係を管理する

[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = ["“tee” <“asuasu.tee@gmail.com”>"]
readme = "README.md"
packages = [{include = "poetry_demo"}]

[tool.poetry.dependencies]
python = "^3.10"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

npmとの比較

npmはjavascriptのpackageマネージャーです。

// npmのpackageのインストール方法は3つあります。

// ローカルインストール (ディレクトリ内部にnode_modules/を作成してその中にいれる)
npm i [package]

// ローカルインストール && 開発時のみ (node_modules/に入れる 本番環境では利用されない)
npm i -D [package]

// グローバルインストール (システムで使用しているnodeに紐づいてinstallされる)
npm i -g [package]

pip
pythonのpackageマネージャー

# グローバルインストール (システムで使用しているnodeに紐づいてinstallされる)
pip install [package名]

そうpipは強制的にグローバルインストールになっちゃいます。

npmみたいにディレクトリ単位で管理できないので、いろんなプロジェクトで使用したパッケージがごちゃごちゃ混ざって競合します。

そこでpoetryです。
poetryを使えば各アプリケーション(ディレクトリ)単位でpackageを管理できます。
下記設定をすれば、.venvはディレクトリ内部につくられるようになるのでnpmと似た感覚で使えます

# 同一階層に仮想環境ファイル (.venv)を作るようにする
poetry config virtualenvs.in-project true

またpipnpmでいうところのpackage.jsonを生成しないので、コンテナでの管理が面倒です。requirement.txtというファイルを手動で管理する形になります。
poetryを使うとpoetry.lockpyproject.tomlを生成してくれるので管理が楽です

終わりに

なんでpipはグローバルインストールしかできないのだ?
npmを見習ってほしいのだ
もしかしてできるのだ? いやできないのだ
野田

1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?