PipenvからPoetryへお引越しするお話


Pipenvのlockがなかなか終わらないんですが...という不満がチームメンバーから噴出しまして、
これを解消してくれそうなPoetryへお引越しする!

というお話です。

よく見るお話ですね

前提

  • プライベートなPyPIインデックスサーバがある
  • バージョンの記述方法は変えない
  • packages,dev-packagesそれぞれお引越し
  • スクリプトもできればお引越し

引っ越しツール

poetry#1701poetry#663 を見ると、
dephell や ワンライナー の方法があるようですが、
上の前提を満たすような感じではありませんでした。

ということで、 pipenv-poetry-migrate というツールを作りました
殴り書いた感じなのでテストがないですが、今後書いていきます

引っ越し手順

Step 0: poetry, pipenv-poetry-migrate のインストール

poetry公式が推奨する方法でインストールしてください。
pipenv-poetry-migrateは下記のコマンドでインストールします。

$ pip install -U pipenv-poetry-migrate

Step 1: pyproject.tomlを作成する

まずはお引越し先となる pyproject.toml を作成します。

$ poetry init

依存パッケージは no と答えて空っぽにしておいてください。

Step 2: お引越しスクリプト実行

$ pipenv-poetry-migrate -f Pipfile -t pyproject.toml

何も出力されませんが、 pyproject.toml に依存パッケージやスクリプトなどがお引越しされます。

Step 3: lockファイルを作成する

$ poetry lock

プライベートなPyPIインデックスサーバを使っていても、設定がお引越しされているので上手くいくはずです。
pre-releaseなパッケージがある場合は失敗するかもしれません。その場合は、pyproject.tomlを修正してください。

Step 4: 仮想環境に依存パッケージをインストールする

$ poetry install

正常に終了すれば、仮想環境が構築完了です。

まだお引越しは終わってない

お引越しはPipfileだけではなく他にもあります。

  • tox.ini
  • Dockerfile
  • CI/CD設定

だいたいこの辺りでしょうか。忘れずに編集しましょう。
ここらへんはプロジェクトやリポジトリの状態によって変わると思うので、端折ります

おしまい

賛否いろいろある気がしますが、色々方法があるうちの1つの紹介でした。

pipenv-poetry-migrate はお気に召して頂けたら、どんどん使っていただければと思います。
雑なIssue, PRなどもお待ちしております!