とーますメモ

Ruby on Rails / Goなどの学習メモ

【Python】簡単な開発環境構築

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