pip install autopep8
autopep8 py_file --in-place
autopep8 project_dir --recursive --in-place --pep8-passes 2000 --verbose
注意:有时默认的100次不够用,我将其设置为2000,因为它相当高并且会捕获除了最棘手的文件之外的所有文件(一旦找不到可解决的PEP8违规行为,它就停止传递)...
如果您想要"完全"符合PEP8:我使用的一种策略是按上面所述运行autopep8,然后运行PEP8,它会打印剩余的违规行为(文件、行号和内容):
pep8 project_dir --ignore=E501
您可以手动逐个更改这些内容(例如,E712s-与布尔值进行比较)。
注意:autopep8提供了一个--aggressive
参数(以无情地“修复”这些改变含义的违规),但是如果您使用了aggressive,则可能需要进行调试...(例如,在numpy/pandas中,True == np.bool_(True)
但不是True is np.bool_(True)
!)
pep8 --quiet --statistics .
autopep8 test.py --in-place --max-line-lengdth=79
- Siebe Albers很遗憾,“pep8 storming”(整个项目)有一些负面影响:
作为替代方案(感谢@y-p提供的想法),我编写了一个小型软件包,它只自动调整您上次提交/分支后所修改的行的PEP 8格式:
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
是将 autopep8 应用于 git/hg diff 的输出行(从最后一个共享提交开始)。@Andy Hayden提供了autopep8的良好概述。除此之外,还有一个名为pep8ify的包也可以做同样的事情。
但是这两个包只能删除lint错误,而不能格式化代码。
little = more[3: 5]
即使经过PEP8格式化,上面的代码仍然相同。但代码看起来还不够好。你可以使用像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 代码!
代码格式化工具(按受欢迎程度排序):
pytype
也是一种流行的代码检查工具。 - Sadman Sakib有很多种。
IDE通常内置一些格式化功能。IntelliJ Idea / PyCharm有,Eclipse的Python插件也有,等等。
有格式化程序/代码检查工具可以针对多种语言。https://coala.io就是这样一个很好的例子。
然后还有单一用途的工具,在其他答案中提到了许多。
一种特定的自动重新格式化方法是将文件解析为AST树(不丢弃注释),然后将其转储回文本(意味着原始格式不保留)。这样的示例是https://github.com/python/black。