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

Poetryとtoxを組み合わせてPythonのテストコードを動かす

More than 1 year has passed since last update.

この記事は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.ini
[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に移行していってもいいように思います。

ninomiyt
株式会社LIFULLの愉快なPythonistaです
https://medium.com/@ninomiyt
lifull
日本最大級の不動産・住宅情報サイト「LIFULL HOME'S」を始め、人々の生活に寄り添う様々な情報サービス事業を展開しています。
https://lifull.com/
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