Tool to convert Python code to be PEP8 compliant

后端 未结 6 1324
隐瞒了意图╮
隐瞒了意图╮ 2020-12-02 03:57

I know there are tools which validate whether your Python code is compliant with PEP8, for example there is both an online service and a python module.

However, I c

6条回答
  •  旧时难觅i
    2020-12-02 04:36

    You can use autopep8! Whilst you make yourself a cup of coffee this tool happily removes all those pesky PEP8 violations which don't change the meaning of the code.

    Install it via pip:

    pip install autopep8
    

    Apply this to a specific file:

    autopep8 py_file --in-place
    

    or to your project (recursively), the verbose option gives you some feedback of how it's going:

    autopep8 project_dir --recursive --in-place --pep8-passes 2000 --verbose
    

    Note: Sometimes the default of 100 passes isn't enough, I set it to 2000 as it's reasonably high and will catch all but the most troublesome files (it stops passing once it finds no resolvable pep8 infractions)...

    At this point I suggest retesting and doing a commit!

    If you want "full" PEP8 compliance: one tactic I've used is to run autopep8 as above, then run PEP8, which prints the remaining violations (file, line number, and what):

    pep8 project_dir --ignore=E501
    

    and manually change these individually (e.g. E712s - comparison with boolean).

    Note: autopep8 offers an --aggressive argument (to ruthlessly "fix" these meaning-changing violations), but beware if you do use aggressive you may have to debug... (e.g. in numpy/pandas True == np.bool_(True) but not True is np.bool_(True)!)

    You can check how many violations of each type (before and after):

    pep8 --quiet --statistics .
    

    Note: I consider E501s (line too long) are a special case as there will probably be a lot of these in your code and sometimes these are not corrected by autopep8.

    As an example, I applied this technique to the pandas code base.

提交回复
热议问题