Python コードが PEP8 に準拠しているかどうかを検証するツールがあることは知っています。たとえば、オンライン サービスとpython モジュールの両方があります。
しかし、 Python ファイルを自己完結型の PEP8 有効な Python ファイルに変換できるサービスまたはモジュールが見つかりません。あるかどうか知っている人はいますか?
PEP8 はコードの外観がすべてなので、実現可能だと思いますよね?
Python コードが PEP8 に準拠しているかどうかを検証するツールがあることは知っています。たとえば、オンライン サービスとpython モジュールの両方があります。
しかし、 Python ファイルを自己完結型の PEP8 有効な Python ファイルに変換できるサービスまたはモジュールが見つかりません。あるかどうか知っている人はいますか?
PEP8 はコードの外観がすべてなので、実現可能だと思いますよね?
autopep8を使用できます!自分でコーヒーを淹れる間、このツールはコードの意味を変えない厄介なPEP8違反をすべて喜んで取り除きます。
pip経由でインストールします。
pip install autopep8
これを特定のファイルに適用します。
autopep8 py_file --in-place
またはプロジェクトに(再帰的に)、冗長オプションを使用すると、プロジェクトの進行状況に関するフィードバックが得られます。
autopep8 project_dir --recursive --in-place --pep8-passes 2000 --verbose
注:デフォルトの100パスでは不十分な場合があります。これは、適度に高く、最も厄介なファイルを除くすべてをキャッチするため、2000に設定します(解決可能なpep8違反が見つからなくなるとパスを停止します)...
「完全な」 PEP8準拠が必要な場合:私が使用した1つの戦術は、上記のようにautopep8を実行してから、残りの違反(ファイル、行番号など)を出力するPEP8を実行することです。
pep8 project_dir --ignore=E501
これらを個別に手動で変更します(例:E712-ブール値との比較)。
注:autopep8は--aggressive
引数を提供します(これらの意味を変える違反を容赦なく「修正」するため)が、積極的に使用する場合はデバッグする必要があるかもしれないことに注意してください...(たとえば、numpy / pandasTrue == np.bool_(True)
ではありませんTrue is np.bool_(True)
!)
pep8 --quiet --statistics .
注:E501(行が長すぎる)は特殊なケースであると思います。コードにこれらが多数含まれている可能性があり、autopep8で修正されない場合があるためです。
残念ながら、「pep8 ストーミング」(プロジェクト全体) には、いくつかのマイナスの副作用があります。
別の方法として (アイデアを提供してくれた @yp に感謝します)、最後のコミット/ブランチ以降に作業している行のみを autopep8 する小さなパッケージを作成しました。
pip install pep8radius
作業master
が完了し、コミットする準備ができたとします。
# be somewhere in your project directory
# see the diff with pep, see the changes you've made since master
pep8radius master --diff
# make those changes
pep8radius master --diff --in-place
または、最後のコミット以降にコミットした新しい行を消去するには:
pep8radius --diff
pep8radius --diff --in-place
# the lines which changed since a specific commit `git diff 98f51f`
pep8radius 98f51f --diff
基本的pep8radius
に、git/hg diff の出力の行に autopep8 を適用しています (最後の共有コミットから)。
このスクリプトは現在、git と hg で動作します。他のものを使用していて、これを動作させたい場合は、コメント/問題/PR を投稿してください。
@Andy Hayden は、autopep8 の概要を説明しました。それに加えて、同じことを行うpep8ifyというパッケージがもう 1 つあります。
ただし、どちらのパッケージもリント エラーのみを削除できますが、コードをフォーマットすることはできません。
little = more[3: 5]
上記のコードは、pep8ifying 後も同じままです。しかし、コードはまだ見栄えがよくありません。コードが PEP8 に準拠していても、コードをフォーマットするyapfなどのフォーマッターを使用できます。上記のコードは次のようにフォーマットされます
little = more[3:5]
場合によっては、これにより手動のフォーマットが破壊されることさえあります。例えば
BAZ = {
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
}
に変換されます
BAZ = {[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]}
しかし、いくつかの部分を無視するように指示できます。
BAZ = {
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
} # yapf: disable
私の古いブログ投稿から引用:自動的に PEP8 & Format Your Python Code!