taskipyを使ったPython開発環境の一例

Event:

みんなのPython勉強会#94 LT

Presented:

2023/06/15 nikkie

お前、誰よ

  • にっきー @ftnext @ftnext

  • みんなのPython勉強会 4代目LT王子・スタッフ

  • 株式会社ユーザベースのデータサイエンティスト(We're hiring!

オーダー、鬼滅ネタ

taskipyを使った Python開発環境 の一例

Python環境構築には 流派 がある

  • Python使い=〇〇したくてPythonを使う= 鬼と闘う (鬼殺隊の一員)

  • Python開発環境構築はさまざま= 呼吸はさまざま (霞、恋)

    • 今日のトークからも(Python本家、Anaconda)

最近のnikkie: pyenv + venv の呼吸

  • pyenv でPythonのバージョンを管理

  • venv(仮想環境)でプロジェクトごとの依存ライブラリを管理

  • Poetry の呼吸に憧れている(他には rye の呼吸)

IMO:紹介した方法を絶対採用、ではないです

  • Pythonを使うという共通点がある

  • 好みはそれぞれ、文脈も各の持ち場で異なる

  • オススメしますが、食指が動かなければ不採用でも全然OK🙆‍♂️

📌 pyenv + venv の呼吸 弐の型 taskipy

本LTでの主張

taskipyを使った Python開発 環境の一例

先人の知恵: ツール を使って開発しやすく✨

スタイルガイド PEP 8

  • (守らなくてもコードは動くけど)「Pythonをこういうふうに書きましょう」

  • https://peps.python.org/pep-0008/

  • 人が頑張る道もあるけど、 ツールを使ってPEP 8に沿う

開発しやすくするツールの例

  • Black:Pythonコードを自動に 整える

  • Flake8:Pythonコードの 静的解析

最初の一歩『Python実践レシピ』2章

Black

% pip install black
% # conda install -c conda-forge black

Black

example.py
import calendar

print ( 'hello, world' )

black -l 79 example.py

-print ( 'hello, world' )
+print("hello, world")

Flake8

% pip install flake8
% # conda install -c anaconda flake8

Flake8

flake8 example.py

example.py:1:1: F401 'calendar' imported but unused
example.py:3:6: E211 whitespace before '('
example.py:3:8: E201 whitespace after '('
example.py:3:23: E202 whitespace before ')'

nikkieは思った「コマンドをまとめたい」

  • black の後に flake8 だとスタイル関係は指摘されない(この順にしたい)

  • ほかにも pytest などなどたくさんのツール。便利だけど、覚えていられない🤯(実行漏れもある)

  • 順番も含めて、1つのコマンドにまとめられないかな?

taskipy を使ったPython開発環境の一例

taskipy

taskipy インストール

% pip install taskipy

pyproject.toml を書く

[tool.taskipy.tasks]
format = "black -l 79 awesome_lib tests"
test = "pytest"
check = "flake8 awesome_lib tests"

task コマンド

% task format  # blackを使ったフォーマット
% task test  # pytestで単体テスト実行
% task check  # flake8を使った静的解析

コマンドのオプションを覚えておく必要、なくなった🙌

taskipyの フック

  • pre_testtest に実行するタスクになる

  • post_testtest に実行するタスクになる

  • formatcheck を設定すると...

task test ですべて流れる!

[tool.taskipy.tasks]
format = "black -l 79 awesome_lib tests"
test = "pytest"
check = "flake8 awesome_lib tests"
pre_test = "task format"
post_test = "task check"

フォーマット➡️テスト➡️静的解析が 1コマンド に!

実際のプロジェクトでの設定例

まとめ🌯 taskipyを使ったPython開発環境の一例

  • pyenv + venv の呼吸 弐の型 taskipy

  • Pythonでの開発、ツールを使ってやりやすくできる

  • 多様なツールをtaskipyでまとめ たらいい感じ(フック素晴らしい!)

ご清聴ありがとうございました

Enjoy Python!

Appendix

EOF