autopep8 は、PEP 8 スタイル ガイドに準拠するように Python コードを自動的にフォーマットします。 pycodestyle ユーティリティを使用して、コードのどの部分をフォーマットする必要があるかを判断します。 autopep8 は、pycodestyle によって報告されるフォーマットの問題のほとんどを修正できます。
コンテンツ
pkg_resources.DistributionNotFound
ピップより:
$ pip install --upgrade autopep8
--user
オプションの使用を検討してください。
autopep8 には pycodestyle が必要です。
ファイルをその場で変更するには (積極的なレベル 2 を使用):
$ autopep8 --in-place --aggressive --aggressive <ファイル名>
autopep8 を実行する前。
import math , sys ;
def example1 ():
####This is a long comment. This should be wrapped to fit within 72 characters.
some_tuple = ( 1 , 2 , 3 , 'a' );
some_variable = { 'long' : 'Long code lines should be wrapped within 79 characters.' ,
'other' :[ math . pi , 100 , 200 , 300 , 9876543210 , 'This is a long string that goes on' ],
'more' :{ 'inner' : 'This whole logical line should be wrapped.' , some_tuple :[ 1 ,
20 , 300 , 40000 , 500000000 , 60000000000000000 ]}}
return ( some_tuple , some_variable )
def example2 (): return { 'has_key() is deprecated' : True }. has_key ({ 'f' : 2 }. has_key ( '' ));
class Example3 ( object ):
def __init__ ( self , bar ):
#Comments should have a space after the hash.
if bar : bar += 1 ; bar = bar * bar ; return bar
else :
some_string = """
Indentation in multiline strings should not be touched.
Only actual code should be reindented.
"""
return ( sys . path , some_string )
autopep8 を実行した後。
import math
import sys
def example1 ():
# This is a long comment. This should be wrapped to fit within 72
# characters.
some_tuple = ( 1 , 2 , 3 , 'a' )
some_variable = {
'long' : 'Long code lines should be wrapped within 79 characters.' ,
'other' : [
math . pi ,
100 ,
200 ,
300 ,
9876543210 ,
'This is a long string that goes on' ],
'more' : {
'inner' : 'This whole logical line should be wrapped.' ,
some_tuple : [
1 ,
20 ,
300 ,
40000 ,
500000000 ,
60000000000000000 ]}}
return ( some_tuple , some_variable )
def example2 (): return ( '' in { 'f' : 2 }) in { 'has_key() is deprecated' : True }
class Example3 ( object ):
def __init__ ( self , bar ):
# Comments should have a space after the hash.
if bar :
bar += 1
bar = bar * bar
return bar
else :
some_string = """
Indentation in multiline strings should not be touched.
Only actual code should be reindented.
"""
return ( sys . path , some_string )
オプション:
使用法: autopep8 [-h] [--version] [-v] [-d] [-i] [--global-config ファイル名] [--ignore-local-config] [-r] [-jn] [-pn] [-a] [--実験的] [--グロブを除外する] [--リスト修正] [--エラーを無視] [--エラーを選択] [--最大行長 n] [--line-range 行 line] [--hang-closed] [--exit-code] [ファイル [ファイル ...]] PEP 8 スタイル ガイドに準拠するように Python コードを自動的にフォーマットします。 位置引数: ファイル フォーマットするファイル、または標準の場合は '-' オプションの引数: -h、--help このヘルプ メッセージを表示して終了します --version プログラムのバージョン番号を表示して終了します -v、--verbose 冗長メッセージを出力します。複数の -v の結果はさらに多くなります 詳細なメッセージ -d、--diff 固定ソースの差分を出力します。 -i、--in-place ファイルをその場で変更します --global-config ファイル名 グローバル pep8 設定ファイルへのパス。このファイルがそうであれば 存在しない場合、これは無視されます (デフォルト: ~/.config/pep8) --ignore-local-config ローカル構成ファイルを探して適用しないでください。そうでない場合 合格すると、デフォルトは次の構成ファイルで更新されます。 プロジェクトのルートディレクトリ -r、--recursive ディレクトリに対して再帰的に実行します。と一緒に使用する必要があります --in-place または --diff -jn, --jobs n 並列ジョブの数。値が次の場合、CPU 数と一致します。 1未満 -pn、--pep8-passes n 追加の pep8 パスの最大数 (デフォルト: 無限) -a、--aggressive は空白以外の変更を有効にします。複数の -a の結果 より積極的な変更 --experimental 実験的な修正を有効にします --exclude globs は、これらのカンマに一致するファイル/ディレクトリ名を除外します。 分離された塊 --list-fixes 修正のコードをリストします。 --ignore および --select によって使用されます --ignore エラーでは、これらのエラー/警告は修正されません (デフォルト: E226、E24、W50、W690) --select エラーはこれらのエラー/警告のみを修正します (例: E4、W) --max-line-length n 許可される行の最大長を設定します (デフォルト: 79) --line-range 行行、--range 行行 この包括的な範囲内で見つかったエラーのみを修正します 行番号 (例: 1 99);行番号のインデックスは次のとおりです。 1 --hang-taining pycodestyle に渡されるハングクローズ オプション --exit-code 終了コードの動作を変更します。デフォルトの動作 戻り値。0 は差異なし、1 はエラー終了です。 このオプションを追加すると 2 が返されます。 2は存在します 違い。
autopep8 は、pycodestyle によって報告された次の問題を修正します。
E101 - すべての行を再インデントします。 E11 - インデントを修正します。 E121 - インデントが 4 の倍数になるように修正しました。 E122 - ぶら下がりインデントに欠如したインデントを追加します。 E123 - 閉じブラケットを開きブラケットに合わせて位置合わせします。 E124 - 視覚的なインデントに合わせて右括弧を位置合わせします。 E125 - 行と次の論理行を区別するためのインデント。 E126 - 過度にインデントされたぶら下がりインデントを修正します。 E127 - 視覚的なインデントを修正します。 E128 - 視覚的なインデントを修正します。 E129 - 視覚的なインデントを修正します。 E131 - 位置合わせされていない継続行のぶら下がりインデントを修正しました。 E133 - 閉じ括弧のインデントが欠けていたのを修正しました。 E20 - 無関係な空白を削除します。 E211 - 無関係な空白を削除します。 E22 - キーワードの周囲の無関係な空白を修正します。 E224 - 演算子の周囲の無関係な空白を削除します。 E225 - 演算子の周囲に欠落していた空白を修正しました。 E226 - 算術演算子の周囲に欠落していた空白を修正しました。 E227 - ビット単位/シフト演算子の周りに欠落していた空白を修正しました。 E228 - モジュロ演算子の周囲に欠落していた空白を修正しました。 E231 - 不足している空白を追加します。 E241 - キーワードの周囲の無関係な空白を修正します。 E242 - 演算子の周囲の無関係な空白を削除します。 E251 - パラメータ「=」記号の周囲の空白を削除します。 E252 - パラメーターの周囲に空白がありません。 E26 - インライン コメントのコメント ハッシュ後のスペースを修正しました。 E265 - ブロック コメントのコメント ハッシュ後のスペースを修正しました。 E266 - ブロック コメントの先頭の '#' が多すぎる問題を修正しました。 E27 - キーワードの周囲の無関係な空白を修正します。 E301 - 欠落している空白行を追加します。 E302 - 不足している 2 つの空白行を追加します。 E303 - 余分な空白行を削除します。 E304 - 関数デコレータに続く空行を削除します。 E305 - 関数またはクラスの終了後に 2 行の空白行が必要です。 E306 - ネストされた定義の前に 1 つの空白行が必要です。 E401 - インポートを別の行に配置します。 E402 - ファイルの先頭にないモジュール レベルのインポートを修正 E501 - 行が --max-line-length 文字以内に収まるようにしてください。 E502 - 改行の無関係なエスケープを削除します。 E701 - 複合ステートメントをコロンで区切って別々の行に配置します。 E70 - セミコロンで区切られた複合ステートメントを別の行に配置します。 E711 - なしとの比較を修正しました。 E712 - ブール値との比較を修正しました。 E713 - メンバーシップのテストには「not in」を使用します。 E714 - オブジェクトの ID に「is not」テストを使用します。 E721 - 型を直接比較する代わりに、「isinstance()」を使用してください。 E722 - ベア以外を修正します。 E731 - ラムダ式を割り当てない場合は、def を使用します。 W291 - 末尾の空白を削除します。 W292 - ファイルの末尾に 1 つの改行を追加します。 W293 - 空行の末尾の空白を削除します。 W391 - 末尾の空白行を削除します。 W503 - 二項演算子の前の改行を修正しました。 W504 - 二項演算子の後の改行を修正しました。 W605 - 無効なエスケープ シーケンス 'x' を修正します。
autopep8 は、pycodestyle では見つからなかったいくつかの問題も修正します。
E301
で有効になります。)E303
で有効になります。)autopep8 は、pycodestyle によって見つかったいくつかの問題の修正を回避します。
E112
/ E113
は、構文ルールに違反する不正なインデントのレポートです。これらは一切変更しないでください。E265
はコメント ハッシュの後のスペースを指しますが、コメントがコードのように見える場合は無視されます。これらは実際のコメントではないため、autopep8 はこれらの変更を回避します。本当に pycodestyle 警告を削除したい場合は、コメントアウトされたコードのみを削除することを検討してください。 (これは根絶によって自動化できます。) デフォルトでは、autopep8 は空白の変更のみを行います。したがって、デフォルトではE711
とE712
修正されません。 ( x
の__eq__
メソッドがオーバーライドされている場合、 x == None
をx is None
に変更すると、プログラムの意味が変わる可能性があります。) また、非推奨のコードW6
修正されません。これらのより積極的な修正を有効にするには、 --aggressive
オプションを使用します。
$ autopep8 --aggressive <ファイル名>
複数の--aggressive
使用して、攻撃性レベルを高めます。たとえば、 E712
は積極性レベル 2 が必要です ( x == True
はx
またはx is True
に変更できますが、autopep8 は前者を選択するため)。
--aggressive
をより積極的に短縮します。また、末尾の空白もより積極的に削除されます。 (通常、docstring やその他の複数行文字列の末尾の空白には触れません。また、docstring にさらに積極的な変更を加えるには、docformatter を使用します。)
修正のサブセットのみを有効にするには、 --select
オプションを使用します。たとえば、さまざまなタイプのインデントの問題を修正するには、次のようにします。
$ autopep8 --select=E1,W1 <ファイル名>
修正するファイルが大きい場合は、詳細な進行状況メッセージを有効にすることもできます。
$ autopep8 -v <ファイル名>
--experimental
を渡すと、次の機能が有効になります。
$ autopep8 --experimental <ファイル名>
ファイル内でautopep8: off
使用して再度有効にするまで autopep8 を無効にすることができ、その後autopep8: on
で再度有効にします。
# autopep8: off
[
[ 23 , 23 , 13 , 43 ],
[ 32 , 34 , 34 , 34 ],
[ 56 , 34 , 34 , 11 ],
[ 10 , 10 , 10 , 10 ],
]
# autopep8: on
fmt: off
およびfmt: on
も有効です。
autopep8 をモジュールとして使用する最も簡単な方法は、 fix_code()
関数を使用することです。
>>> import autopep8 >>> autopep8.fix_code( ' x= 123 n ' ) 'x = 123n'
またはオプションを使用すると:
>>> import autopep8 >>> autopep8.fix_code( ' print( 123 ) n ' , ... options = { ' ignore ' : [ ' E ' ]}) 'print( 123 )n'
デフォルトでは、 $HOME/.config/pycodestyle
(Windows 環境では~.pycodestyle
) が存在する場合、それがグローバル構成ファイルとして使用されます。あるいは、 --global-config
オプションを使用してグローバル構成ファイルを指定することもできます。
また、対象ファイルが存在するディレクトリにsetup.cfg
、 tox.ini
、 .pep8
、 .flake8
ファイルが存在する場合、それが設定ファイルとして使用されます。
pep8
、 pycodestyle
、およびflake8
セクションとして使用できます。
設定ファイルの例:
[パイコードスタイル] max_line_length = 120 無視 = E501
autopep8 はpyproject.toml
も使用できます。セクションは[tool.autopep8]
である必要があり、 pyproject.toml
他の構成ファイルよりも優先されます。
設定ファイルの例:
[tool.autopep8] max_line_length = 120 無視 = "E501,W6" # または ["E501", "W6"] インプレース = true 再帰 = true 攻撃的 = 3
autopep8 は、プリコミットのフックとして使用できます。
autopep8 をプラグインとして追加するには、次のリポジトリ定義を構成に追加します。
repos :
- repo : https://github.com/hhatto/autopep8
rev : ... # select the tag or revision you want, or run `pre-commit autoupdate`
hooks :
- id : autopep8
テスト ケースはtest/test_autopep8.py
にあります。これらはpython test/test_autopep8.py
または tox 経由で直接実行できます。後者は、複数の Python インタープリターに対するテストに役立ちます。 (現在、CPython バージョン 3.8、3.9、3.10、3.11、および 3.12 に対してテストしています。また、PyPy に対してもテストしています。)
広範囲のテストはtest/acid.py
経由で利用できます。このスクリプトは、Python コードに対して autopep8 を実行し、コード修正の正確さと完全性をチェックします。バイトコードが同一のままであることを確認できます。 test/acid_pypi.py
acid.py
を使用して、PyPI で最新にリリースされたパッケージに対してテストします。
pkg_resources.DistributionNotFound
setuptools
の古いバージョンを使用している場合、 autopep8
実行しようとするとpkg_resources.DistributionNotFound
発生する可能性があります。このsetuptools
問題を回避するには、 setuptools
アップグレードしてみてください。
$ pip install --upgrade setuptools
システムにインストールする場合は、 sudo
使用します。