あなたのPythonコードがPEP8に準拠しているかどうかを検証するツールがあることは知っています。たとえば、 オンラインサービス と a pythonモジュール 。
ただし、Pythonファイルを自己完結型のPEP8有効なPythonファイルにconvertできるサービスまたはモジュールが見つかりません。誰かがいるかどうか知っていますか?
PEP8はコードの外観に関するものなので、実現可能だと思いますか?
残念ながら、「pep8ストーム」(プロジェクト全体)にはいくつかのマイナスの副作用があります。
別の方法として(そして @ y-p for idea のおかげで)、最後のコミット/ブランチ以降に作業していた行のみを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を適用しています( the last shared commit )。
現在、このスクリプトはgitとhgで動作します。他の何かを使用していて、これを動作させたい場合 コメント/問題/ PRを投稿してください !
autopep8 !を使用できます。自分でコーヒーを飲みながら、このツールはコードのmeaningを変更しない厄介なPEP8違反をすべて削除します。
Pip経由でインストールします。
pip install autopep8
これを特定のファイルに適用します。
autopep8 py_file --in-place
または(再帰的に)プロジェクトに詳細オプションを使用すると、進行状況のフィードバックが得られます:
autopep8 project_dir --recursive --in-place --pep8-passes 2000 --verbose
注:デフォルトの100パスでは不十分な場合があります。適度に高いため、2000に設定し、最も厄介なファイルをすべてキャッチします(解決可能なpep8が見つからないと、パスを停止します)違反)...
必要に応じて "full"PEP8への準拠:私が使用した戦術の1つは、上記のようにautopep8を実行し、PEP8を実行して残りの違反(ファイル、行番号、および何):
pep8 project_dir --ignore=E501
これらを個別に手動で変更します(例:E712-ブール値との比較)。
注:autopep8は--aggressive
引数を提供します(これらの意味を変える違反を容赦なく「修正」するため)が、積極的に使用する場合はデバッグする必要があるかもしれません...(例えばnumpy/pandas True == np.bool_(True)
でTrue is np.bool_(True)
ではありません!)
pep8 --quiet --statistics .
注:E501(行が長すぎる)は、コードにこれらの多くが含まれている可能性があり、autopep8によって修正されない場合があるため、特殊なケースであると考えています。
@Andy Haydenはautopep8の概要を説明しました。それに加えて pep8ify と呼ばれるもう1つのパッケージがあり、これも同じことを行います。
ただし、どちらのパッケージもlintエラーのみを削除できますが、コードをフォーマットすることはできません。
little = more[3: 5]
上記のコードは、pep8ifying後も同じままです。しかし、コードはまだ良く見えません。 yapf のようなフォーマッターを使用できます。これは、コードがPEP8に準拠している場合でもコードをフォーマットします。上記のコードは次のようにフォーマットされます
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&Pythonコードをフォーマット!
Eclipse + PyDevを使用している場合、PyDevの設定からautopep8をアクティブにできます。Windows-> Preferences->検索フィルターに「autopep8」と入力します。
「コードのフォーマットにautopep8.pyを使用しますか?」 -> OK
これで、EclipseのCTRL-SHIFT-Fコードフォーマットはautopep8を使用してコードをフォーマットするはずです:)
沢山あります。
IDEには通常、いくつかのフォーマット機能が組み込まれています。IntelliJIdea/PyCharmには、EclipseのPythonプラグインなども含まれます。
複数の言語をターゲットにできるフォーマッター/リンターがあります。 https://coala.io はそれらの良い例です。
次に、単一の目的のツールがあり、その多くは他の回答で言及されています。
自動再フォーマットの特定の方法の1つは、ファイルをASTツリーに(コメントを削除せずに)解析し、それをテキストにダンプすることです(元のフォーマットが保持されないことを意味します)。その例は https://github.com/python/black です。