Pythonの基本環境構築は前回の記事で書いたので、その続き。
thoames.hatenadiary.jp
アプリの起動を逐一「pipenv shell」=> 「python app.py」とかするのが面倒くさいので
Pipfileに以下のように書いておけば、「pipenv run start」とすることでアプリを一発で起動できる。
何度の入力するコマンドなので、登録しておいたほうが良い。
[scripts] start = "python app.py"
1)静的解析
他のツールであるpep8やpyflakesなどを包括している便利なラッパーなのでflake8を使用。
開発環境のみでしようするので「--dev」オプションを付けてインストール
$ pipenv install --dev flake8
flakeの設定ファイル(setup.cfgまたは.flake8)に以下の設定を追加
ここでは、Lint対象から除外するファイル及びディレクトリの設定、
1行あたりの文字数を設定、それとインデントをPEP8デフォルトの4にするルールを無視し、
インデント幅を2にしている。これは完全に好み。
[flake8] exclude = .git, .tox, .venv, .eggs, build, dist, docs, tests/* max-line-length = 120 ignore = E111, E114 indent-size = 2
普通に使う方法は「pipenv run flake8」を打つだけ。
自分の場合は「--show-source」オプションを付けて、ソースコードのどの部分を修正すればよいか詳しく
知りたいので、Pipfileの編集しショートカットを登録。
[scripts] : lint = "flake8 --show-source ." :
以下のコマンドでflake8を起動
$ pipenv run lint
flake8には他にも便利なプラグインがあるので使用する。
[flake8-todo]: ソース内のTODO、FIXME、XXXを検出してくれる。
[flake8-quotes]: ダブルクオーテーションを使用しているかをチェックする。
※flake8-double-quotesも使用してみたが、動作しなかった。。。※python 3.7.2で検証
[flake8-print]: printデバックしてる箇所を見つける。(使用しないようにする)
flake8のプラグインは「pip search flake8-」で検索すると大量に表示される。
以下ではflake8-todoをインストールする例を示す。
インストール
$ pipenv install --dev flake8-todo
確認
$ pipenv run flake8 --version
後は普通にflake8を実行すれば、TODO箇所を抽出してくれる。
2)コードフォーマット
autopep8を使用する。
インストール
$ pipenv install --dev autopep8
インデント幅などの設定を書きたいときは、setup.cfg, tox.ini, .pep8または.flake8に書く。
また設定セクションはpep8, pycodestyleまたはflake8をセクションとして使用できる。
自分は以下のように設定
[pycodestyle] indent-size = 2
Pipfileにショートカットを登録(i: 上書き, v: 実行時の詳細情報を表示, r: 再帰実行)
[scripts] : fix = "autopep8 -ivr ." :
実行
$ pipenv run fix
備考:
Atomを利用している場合で、[atom-beautify]プラグインを入れている場合は、
autopep8と連動し、Ctrl + Option + bで自動整形してくれる。
また[atom-beautify]の設定画面でPythonを選ぶと、「保存時に自動整形」してくれるオプションがあるので
それにチェックを入れると、保存時に自動整形してくれるようになる。
※注意点としては、setup.cfgにインデントや無視するPEP8ルールの設定を書いていても、
それとは別にatom-beautify独自に別に設定を書く必要があること。
※ 追記 2019/04/04
pipenvのような仮想環境を使用し、atom-beautifyを使用している場合、
「Could not find 'autopep8'. The program may not be installed.」と表示される場合がある。
以下URL内のようなもの。
https://github.com/hhatto/autopep8/issues/363
この場合は、エラー内の説明にあるように
「Atom Beautify」 => 「Settings」 => 「Executable」=> 「autopep8」内に
仮想環境内のautopep8のパスを実行パスとして設定すれば良い。
仮想環境内のautopep8のパスの確認方法
$ pipenv run which autopep8
表示されたパスを、実行パスに設定すれば動作するようになる。
[参考]
Pythonのパッケージ周りのベストプラクティスを理解する - エムスリーテックブログ
Pythonのスタイルガイドとそれを守るための各種Lint・解析ツール5種まとめ! - Sider Blog
Pythonでインデントをスペース2つにした際の周辺ツールの設定 | タロスカイ公式ブログ
[Python] コードの自動整形でインデントレベルを2に設定する - Qiita
Python の Lint (文法チェッカ) まとめ - flake8 + hacking を使う - - Qiita
2018年のPythonプロジェクトのはじめかた - Qiita