Help us understand the problem. What is going on with this article?

Poetry - Pipenv の代替

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 インストール

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

Poetry インストール後 $HOME/.poetry/bin をパスに追加する。

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

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 より遅かったですが他は速いのでまあ満足です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away