PythonコードがPEP8に準拠しているかどうかを検証するツールがあることを知っています。たとえば、オンラインサービスとpythonモジュールの両方があります。
ただし、Pythonファイルを自己完結型のPEP8有効なPythonファイルに変換できるサービスまたはモジュールが見つかりません。誰かがいるかどうか知っていますか?
PEP8はすべてコードの外観に関するものなので、実現可能だと思いますよね?
PythonコードがPEP8に準拠しているかどうかを検証するツールがあることを知っています。たとえば、オンラインサービスとpythonモジュールの両方があります。
ただし、Pythonファイルを自己完結型のPEP8有効なPythonファイルに変換できるサービスまたはモジュールが見つかりません。誰かがいるかどうか知っていますか?
PEP8はすべてコードの外観に関するものなので、実現可能だと思いますよね?
回答:
残念ながら、 "pep8 storming"(プロジェクト全体)には、いくつかの悪影響があります。
代わりに(そして@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の出力(最後の共有commitから)の行にautopep8を適用します。
このスクリプトは現在gitとhgで動作します。何か他のものを使用していてこれを動作させたい場合は、コメント/問題/ PRを投稿してください!
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
これらを個別に手動で変更します(例:E712s-ブール値との比較)。
注: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後も同じままです。しかし、コードはまだよく見えません。コードが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&Pythonコードをフォーマット!
little = more[3: 5]
pep8(ライブラリ)のバグ?yapfは間違いなくここの未来であり、その背後にあるアルゴリズム(基本的にはすべてのフォーマットオプションのグラフで最短経路)は非常にエレガントなソリューションであり、標準的なフォーマットだけでなく、バグも少なくなるでしょう。
私はpythonとコードスタイルのさまざまな楽器について幅広い調査を行いました。インストゥルメントには2つのタイプがあります。リンター-コードを分析し、不正に使用されたコードスタイルについていくつかの警告を出し、修正方法のアドバイスを表示します。コードフォーマッター-ファイルを保存すると、PEPスタイルを使用してドキュメントを再フォーマットします。
再フォーマットはより正確でなければならないため-不要なものを改造すると役に立たなくなる-PEPの一部がカバーされなくなるため、リンターがより多く表示されます。
それらのすべては、構成するための異なるアクセス許可を持っています-たとえば、すべてのルールで構成可能なpylinter(すべての種類の警告をオン/オフにすることができます)、まったく構成できない黒。
ここにいくつかの便利なリンクとチュートリアルがあります:
ドキュメンテーション:
リンター(人気順):
コードフォーマッター(人気順):
沢山あります。
IDEには通常、いくつかのフォーマット機能が組み込まれています。IntelliJIdea / PyCharmには、Eclipse用のPythonプラグインなどと同じ機能があります。
複数の言語をターゲットにできるフォーマッター/リンターがあります。https://coala.ioはその良い例です。
次に、単一目的のツールがあり、その多くは他の回答で言及されています。
自動再フォーマットの特定の方法の1つは、ファイルを(コメントをドロップせずに)ASTツリーに解析し、それをテキストにダンプします(つまり、元のフォーマットは一切保持されません)。その例はhttps://github.com/python/blackです。