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

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

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

Avatar for Atsushi Odagiri

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