Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[Pycon Kyushu 2019] Pythonでの開発を効率的に進めるためのツール設定

[Pycon Kyushu 2019] Pythonでの開発を効率的に進めるためのツール設定

Atsushi Odagiri

May 18, 2019
Tweet

More Decks by Atsushi Odagiri

Other Decks in Technology

Transcript

  1. mypy type annotation のチェック jedi での補完目的で type annotation するなら必ず mypy

    で チェックしましょう ignore_missing_imports は必須! type annotation を提供してないライブラリは多いので… docstring でがんばって型を説明するくらいなら annotation にしてほしいところ
  2. black と isort を組み合わせる デフォルトだと black のフォーマットと違う isort のスタイル設定を black

    に合わせる Vertical Hanging Indent multi_line_output=3 isort の行の長さを black に合わせる line_length=88
  3. black と flake8 flake8 の独自解釈が black のフォーマットと衝突する 演算子の改行位置 W503 line

    break before binary operator スライス演算子の前後スペース E203 whitespace before ':' しょうがないので ignore しましょう
  4. 演算子の改行位置 W503 line break before binary operator x = (aaaaaaaaaaaaaaaaa

    + bbbbbbbbbbbbbbbbbbb) y = (aaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbb)
  5. スライス演算子の前後スペース E203 whitespace before ':' black はスライス演算子前後で計算式が入るとスペースを入 れる flake8 は

    : にスペースをいれてはいけないと言ってくる この場合の : は演算子ではなくブロック構文の区切りの : のことのはず a = x[start:stop] a = x[start:(start + count)] a = x[start : (start + count)]
  6. テストランナーとしての pytest 名前でテストを探し出す discovery 機能 test_* とか Test* とか unittest

    で書いたテストでも実行可能 賢いテストレポート 成功したテストの print を表示しない assert が落ちた時、付近の変数の内容を表示してくれる
  7. テストフレームワークとしての pytest fixture まあ好き嫌いはありますが 最近は yield で setup/teadown 相当の処理をそのまま書けます yield_fixture

    は deprecated marker 適当にテストを分類したり 特殊な fixture を割り当てたり parametrize もうテストメソッドの中で for 文なんかいらないぞ! 入出力の違いだけのテストならこれでいきましょう parametrize 自体に fixture できないのはちょっと不満
  8. pytest アドオン pytest-cov 基本です。いれておきましょう。 自分が狙ったテストを書けているか確認しましょう coverage に溺れないように! pytest-randomly インストールするだけでテスト順序がシャッフルされます 順序に依存したテストを発見しましょう

    ユニットテストを一歩先のステージにもっていきましょう pytest-mock patch デコレータがいくつもある人に patch コンテキストな何段も積み重なってる人に SPY など追加のユーティリティもあるので mock をそのまま 使うよりちょっと便利
  9. 最終公分母は setup.cfg か tox.ini しかたないね black だけ pyproject.toml まあ black

    は設定しないって割り切れば… テスト系は tox.ini、それ以外は setup.cfg とか分ける方法も
  10. tox.ini [tool:pytest] test_paths = tests [isort] line_length = 88 multi_line_output

    = 3 [flake8] max-line-length = 80 ;W503 line break before binary operator ;E203 whitespace before ':' ignore = W503,E203