LoginSignup
14
13

Poetry - Pipenv の代替

Last updated at Posted at 2020-03-30

Python の環境作成に今まで Pipenv という物を使っていた。node で言うと npm みたいな物だ。これがあまりにも遅いと苦情が出たので違うやつを探していたところ、検索すると Poetry https://python-poetry.org/ が比較的メジャーっぽい事が分かったので使ってみる。

Poetry とは、ある Python プロジェクトに必要なライブラリを簡単に準備する仕組みだ。他の Python プロジェクトと混ざらないように閉じた環境を作ってその中にライブラリをインストールする。Python 自体の実行ファイル選択には pyenv https://github.com/pyenv/pyenv という別の仕組みを使う。Node の NPM と比較すると次のようになる。

  • 閉じた環境の作成:
    • Python: poetry install で環境を作成してライブラリをインストールする。
      • ライブラリ本体は Virtual environment path という所に入る。
    • Node: npm install で環境を作成してライブラリをインストールする。
      • ライブラリ本体は、node_modules ディレクトリに入る。
  • 実行ファイルの選択:
    • Python: pyenv local (version) で Python のバージョンを指定する。
      • ディレクトリで勝手にバージョンが切り替わる。
      • .python-version に使うバージョンが記載される。
      • pyenv にも、pyenv-virtualenv という環境を作るプラグインがあるが使わない。
    • Node: nodebrew use (version) 等で Node のバージョンを指定する。
      • 特にディレクトリごとにバージョンを変える機能は無いと思う。

始め方

Poetry インストール

久しぶりに https://python-poetry.org/docs/ を見ると pipx を使ってインストールする紹介になっていた。

brew install pipx
pipx ensurepath
pipx install poetry

poetry 自体の更新

poetry self update

pyenv インストール

brew install pyenv

pyenv で Python バージョンを選択する

インストール可能バージョンを調べる

pyenv install --list

3.7.7 をインストール

pyenv install 3.7.7

このディレクトリでは 3.7.7 を使う。

pyenv local 3.7.7

プロジェクトを作る

サンプルプロジェクトを作って欲しい時 (新しく my-package という名前のフォルダが出来る)

poetry new my-package

質問に答えながらプロジェクトを作りたい時 (現在のフォルダにプロジェクトを作成する)

poetry init

プロジェクトを管理する

実行時に使うパッケージを追加する

poetry add (package)

開発時に使うパッケージを追加する

poetry add -D (package)

pyproject.toml もしくは poetry.lock に基づいてライブラリをインストール。デフォルトで dev 用もインストールする。

poetry install

pyproject.toml だけを見てライブラリを更新

poetry update

環境の削除

poetry env remove 3.7.7

プロジェクトのディレクトリに環境を作る

標準で poetry は ~/Library/Caches/pypoetry/virtualenvs のような所に環境を作る。プロジェクト以下の .venv に作りたい時は以下のようにする。

poetry config virtualenvs.in-project true

Pipenv から Poetry への移行

私はちびちび Pipfile を見ながら poetry add して移行しました。poetry init の後で pyproject.toml を直接編集して必要パッケージを記述してみましたが、その後の poetry install が終わらなくなってしまいました。

その後一つづつ poetry add していくと、どうやら poetry add -D awscli で止まる事が分かりました。Poetry 側の問題なのか awscli の問題なのか分かりませんが、随分時間を無駄にしました。

あと、Poetry にはタスクランナーとしての機能が付いていないので(https://github.com/python-poetry/poetry/pull/591#issuecomment-504762152 を見てると将来も望み薄)、作業用スクリプトを Makefile 起動に切り替える必要がありました。

Poetry を使っての感想としては poetry install はむしろ pipenv install より遅かったですが他は速いのでまあ満足です。

14
13
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
14
13