13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LIFULLその3Advent Calendar 2018

Day 16

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

Last updated at Posted at 2018-12-21

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

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?