この記事はLIFULL Advent Calendar その3の遅れてきた16日目の記事です。
今までPythonの開発にPipenvを使っていたのですが、こちらの記事「Poetryを使ったPythonパッケージ開発からPyPI公開まで」読んで、Poetryというツールが気になっていました。
Poetryの便利なところは、パッケージをビルドした際にこの設定がそのまま setup.py の console_scripts として記述される。ビルドする時にコマンドとして実行できるようにあらためてsetup.pyを書く必要がない。
そのテストも兼ねて、社内用のPythonライブラリをPipenvからPoetryに移行してみました。また、Rustを少し触っていて遊んでいた(コンパイルが通らずに泣いていた)ときに、開発ツールのcargoが洗練されていて羨ましかったのですが、それに使い勝手が近そうな印象を受けます。
setup.pyが無い!
ところが、poetry run tox
でtoxのテストコードを実行したところ、以下のようなエラーが出てしまいました。
ERROR: No setup.py file found. The expected location is:
/Users/ninomiyt/Documents/xxxx/setup.py
toxを通常実行すると、その都度setup.pyを読み込んでインストールするのですが、poetryではbuild時に設定ファイルからsetup.pyを生成するため、開発時には存在しません。
ここですこしハマったのですが、ISSUEに解決方法が書いていました。以下のようにtoxの設定ファイルで「poetryはtox環境のものを利用する」ようにし、poetry経由でインストール&テストコード実行すれば大丈夫でした。
[tox]
skipsdist = True
envlist = flake8-py3, py36
[testenv]
whitelist_externals = poetry
skip_install = true
commands =
poetry install -v
poetry run pytest test/
[testenv:flake8-py3]
whitelist_externals = poetry
skip_install = true
commands =
poetry install -v
poetry run flake8 --version
poetry run flake8 src test
Poetry、なかなか良さそう
少し触っただけなのですが、今のところ、Pythonの、少なくともライブラリ開発ではなかなか良さそうだと感じています。
「Pipenvではpyenv自体もラップして必要なバージョンをインストールしてくれるのに対し、Poetryを使う際には、pyenvで利用したいPythonバージョンを指定した上で利用しなければならない」という点は少し不便なのですが、少しずつ試していって問題が無ければ、過去のPythonコード資産も少しずつPoetryに移行していってもいいように思います。