Python 関係の設定ファイルを1つのファイルに集約する方法を紹介します.
対象
ここで紹介するのは,次のツールの設定になります.
- Poetry
- pip + virtualenv をいい感じにまとめたやつ.
pip
を使っている場合,設定はrequirements.txt
に記述. - Pytest
- テストを書くためのフレームワーク.
通常,設定はpytest.ini
に記述. - Coverage.py
- テスト時にコードカバレッジを計測するツール.
通常,設定は.coveragerc
に記述. - Black
- コードを整形してくれるツール.
- isort
import
分をいい感じに整形してくれるツール.
設定例
以下の内容を持つファイルを pyproject.toml
という名前で作ればOK.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
[tool.poetry] name = "rasp-shutter" version = "0.1.0" description = "電動シャッターを自動制御するアプリです." authors = ["KIMATA Tetsuya <kimata@green-rabbit.net>"] [tool.poetry.dependencies] python = "^3.10" [tool.poetry.group.test.dependencies] flaky = "^3.7.0" playwright = "^1.36.0" pytest-cov = "^4.1.0" pytest-freezegun = "^0.4.2" pytest-html = "^3.2.0" pytest-mock = "^3.11.1" pytest-playwright = "^0.4.0" pytest-xdist = "^3.3.1" [tool.pytest.ini_options] minversion = "6.0" addopts = "--verbose --log-file-level=DEBUG --log-format=\"%(asctime)s %(levelname)s %(message)s\" --log-format=\"%(asctime)s %(levelname)s [%(filename)s:%(lineno)s %(funcName)s] %(message)s\" --capture=sys --html=tests/evidence/index.htm --self-contained-html" testpaths = [ "tests", ] filterwarnings = [ "ignore:The hookimpl CovPlugin.pytest_configure_node uses", "ignore:The hookimpl CovPlugin.pytest_testnodedown uses", "ignore::DeprecationWarning:pytest_freezegun", ] [tool.coverage.run] branch = true [tool.coverage.report] exclude_lines = [ "pragma: no cover", "if __name__ == .__main__.:", ] [tool.coverage.html] directory = "tests/evidence/coverage" [tool.black] target-version = ['py310'] line-length = 110 [tool.isort] profile = "black" line_length = 110 include_trailing_comma = true [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" |
備考
多くの場合,コードのエラーチェックのため flake8 も使っていると思いますが,flake8 は設定ファイルの集約に対応していないので,今回は対象外としています.集約の利便性を優先したい場合,下記のラッパーを使えば集約できます.
Flake8-pyproject
Flake8 plug-in loading the configuration from pyproject.toml
コメント