1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 | ======== autopep8 ======== .. image:: https://img.shields.io/pypi/v/autopep8.svg :target: https://pypi.org/project/autopep8/ :alt: PyPI Version .. image:: https://github.com/hhatto/autopep8/workflows/Python%20package/badge.svg :target: https://github.com/hhatto/autopep8/actions :alt: Build status .. image:: https://codecov.io/gh/hhatto/autopep8/branch/main/graph/badge.svg :target: https://codecov.io/gh/hhatto/autopep8 :alt: Code Coverage autopep8 automatically formats Python code to conform to the `PEP 8`_ style guide. It uses the pycodestyle_ utility to determine what parts of the code needs to be formatted. autopep8 is capable of fixing most of the formatting issues_ that can be reported by pycodestyle. .. _PEP 8: https://www.python.org/dev/peps/pep-0008/ .. _issues: https://pycodestyle.readthedocs.org/en/latest/intro.html#error-codes .. contents:: Installation ============ From pip:: $ pip install --upgrade autopep8 Consider using the ``--user`` option_. .. _option: https://pip.pypa.io/en/latest/user_guide/#user-installs Requirements ============ autopep8 requires pycodestyle_. .. _pycodestyle: https://github.com/PyCQA/pycodestyle Usage ===== To modify a file in place (with aggressive level 2):: $ autopep8 --in-place --aggressive --aggressive <filename> Before running autopep8. .. code-block:: python 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) After running autopep8. .. code-block:: python 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) Options:: usage: autopep8 [-h] [--version] [-v] [-d] [-i] [--global-config filename] [--ignore-local-config] [-r] [-j n] [-p n] [-a] [--experimental] [--exclude globs] [--list-fixes] [--ignore errors] [--select errors] [--max-line-length n] [--line-range line line] [--hang-closing] [--exit-code] [files [files ...]] Automatically formats Python code to conform to the PEP 8 style guide. positional arguments: files files to format or '-' for standard in optional arguments: -h, --help show this help message and exit --version show program's version number and exit -v, --verbose print verbose messages; multiple -v result in more verbose messages -d, --diff print the diff for the fixed source -i, --in-place make changes to files in place --global-config filename path to a global pep8 config file; if this file does not exist then this is ignored (default: ~/.config/pep8) --ignore-local-config don't look for and apply local config files; if not passed, defaults are updated with any config files in the project's root directory -r, --recursive run recursively over directories; must be used with --in-place or --diff -j n, --jobs n number of parallel jobs; match CPU count if value is less than 1 -p n, --pep8-passes n maximum number of additional pep8 passes (default: infinite) -a, --aggressive enable non-whitespace changes; multiple -a result in more aggressive changes --experimental enable experimental fixes --exclude globs exclude file/directory names that match these comma- separated globs --list-fixes list codes for fixes; used by --ignore and --select --ignore errors do not fix these errors/warnings (default: E226,E24,W50,W690) --select errors fix only these errors/warnings (e.g. E4,W) --max-line-length n set maximum allowed line length (default: 79) --line-range line line, --range line line only fix errors found within this inclusive range of line numbers (e.g. 1 99); line numbers are indexed at 1 --hang-closing hang-closing option passed to pycodestyle --exit-code change to behavior of exit code. default behavior of return value, 0 is no differences, 1 is error exit. return 2 when add this option. 2 is exists differences. Features ======== autopep8 fixes the following issues_ reported by pycodestyle_:: E101 - Reindent all lines. E11 - Fix indentation. E121 - Fix indentation to be a multiple of four. E122 - Add absent indentation for hanging indentation. E123 - Align closing bracket to match opening bracket. E124 - Align closing bracket to match visual indentation. E125 - Indent to distinguish line from next logical line. E126 - Fix over-indented hanging indentation. E127 - Fix visual indentation. E128 - Fix visual indentation. E129 - Fix visual indentation. E131 - Fix hanging indent for unaligned continuation line. E133 - Fix missing indentation for closing bracket. E20 - Remove extraneous whitespace. E211 - Remove extraneous whitespace. E22 - Fix extraneous whitespace around keywords. E224 - Remove extraneous whitespace around operator. E225 - Fix missing whitespace around operator. E226 - Fix missing whitespace around arithmetic operator. E227 - Fix missing whitespace around bitwise/shift operator. E228 - Fix missing whitespace around modulo operator. E231 - Add missing whitespace. E241 - Fix extraneous whitespace around keywords. E242 - Remove extraneous whitespace around operator. E251 - Remove whitespace around parameter '=' sign. E252 - Missing whitespace around parameter equals. E26 - Fix spacing after comment hash for inline comments. E265 - Fix spacing after comment hash for block comments. E266 - Fix too many leading '#' for block comments. E27 - Fix extraneous whitespace around keywords. E301 - Add missing blank line. E302 - Add missing 2 blank lines. E303 - Remove extra blank lines. E304 - Remove blank line following function decorator. E305 - Expected 2 blank lines after end of function or class. E306 - Expected 1 blank line before a nested definition. E401 - Put imports on separate lines. E402 - Fix module level import not at top of file E501 - Try to make lines fit within --max-line-length characters. E502 - Remove extraneous escape of newline. E701 - Put colon-separated compound statement on separate lines. E70 - Put semicolon-separated compound statement on separate lines. E711 - Fix comparison with None. E712 - Fix comparison with boolean. E713 - Use 'not in' for test for membership. E714 - Use 'is not' test for object identity. E721 - Use "isinstance()" instead of comparing types directly. E722 - Fix bare except. E731 - Use a def when use do not assign a lambda expression. W291 - Remove trailing whitespace. W292 - Add a single newline at the end of the file. W293 - Remove trailing whitespace on blank line. W391 - Remove trailing blank lines. W503 - Fix line break before binary operator. W504 - Fix line break after binary operator. W605 - Fix invalid escape sequence 'x'. W690 - Fix various deprecated code (via lib2to3). autopep8 also fixes some issues not found by pycodestyle_. - Correct deprecated or non-idiomatic Python code (via ``lib2to3``). Use this for making Python 2.7 code more compatible with Python 3. (This is triggered if ``W690`` is enabled.) - Normalize files with mixed line endings. - Put a blank line between a class docstring and its first method declaration. (Enabled with ``E301``.) - Remove blank lines between a function declaration and its docstring. (Enabled with ``E303``.) autopep8 avoids fixing some issues found by pycodestyle_. - ``E112``/``E113`` for non comments are reports of bad indentation that break syntax rules. These should not be modified at all. - ``E265``, which refers to spacing after comment hash, is ignored if the comment looks like code. autopep8 avoids modifying these since they are not real comments. If you really want to get rid of the pycodestyle_ warning, consider just removing the commented-out code. (This can be automated via eradicate_.) .. _eradicate: https://github.com/myint/eradicate More advanced usage =================== By default autopep8 only makes whitespace changes. Thus, by default, it does not fix ``E711`` and ``E712``. (Changing ``x == None`` to ``x is None`` may change the meaning of the program if ``x`` has its ``__eq__`` method overridden.) Nor does it correct deprecated code ``W6``. To enable these more aggressive fixes, use the ``--aggressive`` option:: $ autopep8 --aggressive <filename> Use multiple ``--aggressive`` to increase the aggressiveness level. For example, ``E712`` requires aggressiveness level 2 (since ``x == True`` could be changed to either ``x`` or ``x is True``, but autopep8 chooses the former). ``--aggressive`` will also shorten lines more aggressively. It will also remove trailing whitespace more aggressively. (Usually, we don't touch trailing whitespace in docstrings and other multiline strings. And to do even more aggressive changes to docstrings, use docformatter_.) .. _docformatter: https://github.com/myint/docformatter To enable only a subset of the fixes, use the ``--select`` option. For example, to fix various types of indentation issues:: $ autopep8 --select=E1,W1 <filename> If the file being fixed is large, you may want to enable verbose progress messages:: $ autopep8 -v <filename> Passing in ``--experimental`` enables the following functionality: - Shortens code lines by taking its length into account :: $ autopep8 --experimental <filename> Disabling line-by-line ---------------------- It is possible to disable autopep8 untill it it turned back on again in the file, using ``autopep8: off`` and then renabling ``autopep8: on``. .. code-block:: python # autopep8: off [ [23, 23, 13, 43], [32, 34, 34, 34], [56, 34, 34, 11], [10, 10, 10, 10], ] # autopep8: on ``fmt: off`` and ``fmt: on`` are also valid. Use as a module =============== The simplest way of using autopep8 as a module is via the ``fix_code()`` function: >>> import autopep8 >>> autopep8.fix_code('x= 123\n') 'x = 123\n' Or with options: >>> import autopep8 >>> autopep8.fix_code('print( 123 )\n', ... options={'ignore': ['E']}) 'print( 123 )\n' Configuration ============= By default, if ``$HOME/.config/pycodestyle`` (``~\.pycodestyle`` in Windows environment) exists, it will be used as global configuration file. Alternatively, you can specify the global configuration file with the ``--global-config`` option. Also, if ``setup.cfg``, ``tox.ini``, ``.pep8`` and ``.flake8`` files exist in the directory where the target file exists, it will be used as the configuration file. ``pep8``, ``pycodestyle``, and ``flake8`` can be used as a section. configuration file example:: [pycodestyle] max_line_length = 120 ignore = E501 pyproject.toml -------------- autopep8 can also use ``pyproject.toml``. The section must be ``[tool.autopep8]``, and ``pyproject.toml`` takes precedence over any other configuration files. configuration file example:: [tool.autopep8] max_line_length = 120 ignore = "E501,W6" # or ["E501", "W6"] in-place = true recursive = true aggressive = 3 Testing ======= Test cases are in ``test/test_autopep8.py``. They can be run directly via ``python test/test_autopep8.py`` or via tox_. The latter is useful for testing against multiple Python interpreters. (We currently test against CPython versions 3.7, 3.8, 3.9 and 3.10. We also test against PyPy.) .. _`tox`: https://pypi.org/project/tox/ Broad spectrum testing is available via ``test/acid.py``. This script runs autopep8 against Python code and checks for correctness and completeness of the code fixes. It can check that the bytecode remains identical. ``test/acid_pypi.py`` makes use of ``acid.py`` to test against the latest released packages on PyPI. Troubleshooting =============== ``pkg_resources.DistributionNotFound`` -------------------------------------- If you are using an ancient version of ``setuptools``, you might encounter ``pkg_resources.DistributionNotFound`` when trying to run ``autopep8``. Try upgrading ``setuptools`` to workaround this ``setuptools`` problem:: $ pip install --upgrade setuptools Use ``sudo`` if you are installing to the system. Links ===== * PyPI_ * GitHub_ * `Travis CI`_ * Coveralls_ .. _PyPI: https://pypi.org/project/autopep8/ .. _GitHub: https://github.com/hhatto/autopep8 .. _`Travis CI`: https://travis-ci.org/hhatto/autopep8 .. _`Coveralls`: https://coveralls.io/r/hhatto/autopep8 |
Commit History @74911fe5-36e1-4bd9-bd08-6bf94941963c/upstream/2.0.1
0
»»
0
»»