Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

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

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

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
8
Help us understand the problem. What are the problem?