我知道有一些工具可以验证您的Python代码是否符合PEP8,例如,既有在线服务又有python模块。
但是,我找不到可以将我的Python文件转换为自包含的PEP8有效Python文件的服务或模块。有人知道是否有吗?
我认为这是可行的,因为PEP8完全是关于代码的外观,对吧?
我知道有一些工具可以验证您的Python代码是否符合PEP8,例如,既有在线服务又有python模块。
但是,我找不到可以将我的Python文件转换为自包含的PEP8有效Python文件的服务或模块。有人知道是否有吗?
我认为这是可行的,因为PEP8完全是关于代码的外观,对吧?
Answers:
不幸的是,“ pep8风暴”(整个项目)有几个负面影响:
作为替代方案(感谢@yp的想法),我编写了一个小程序包,该程序仅自动pepep8s自上次提交/分支以来一直在处理的那些行:
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输出中的行(来自最后一个共享commit)。
该脚本当前可与git和hg一起使用,如果您使用其他方法并希望它起作用,请发表评论/问题/ PR!
您可以使用autopep8!在您自己泡杯咖啡的同时,该工具会愉快地删除所有那些不会改变代码含义的讨厌的PEP8违规行为。
通过pip安装它:
pip install autopep8
将此应用到特定文件:
autopep8 py_file --in-place
或对您的项目(递归地),verbose选项为您提供了一些进展的反馈:
autopep8 project_dir --recursive --in-place --pep8-passes 2000 --verbose
注意:有时默认的100次通过还不够,我将其设置为2000,因为它相当高,它将捕获除最麻烦的文件以外的所有文件(一旦发现没有可解决的pep8违规行为,它将停止通过)...
如果要“完全”符合PEP8:我使用的一种策略是如上所述运行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的软件包,它也可以执行相同的操作。
但是,这两个软件包都只能消除棉绒错误,但不能格式化代码。
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代码!
little = more[3: 5]
pep8(程式库)中的错误吗?yapf绝对是这里的未来,其背后的算法(本质上是所有格式化选项中最短的路径)是一个非常优雅的解决方案,并且可能会有更少的错误以及规范的格式化。
我对python和代码风格的不同工具进行了广泛的研究。有两种类型的工具:linters-分析您的代码并给出有关错误使用的代码样式的警告并显示有关如何修复它的建议,以及code formatter-在保存文件时,它将使用PEP样式重新设置文档格式。
因为重新格式化必须更加准确-如果重新格式化您不希望的内容变得无用-它们覆盖的PEP所占比例较小,因此棉绒显示的更多。
它们都具有不同的配置权限-例如,在所有规则中都可以配置pylinter(您可以打开/关闭每种类型的警告),根本无法配置黑色。
以下是一些有用的链接和教程:
说明文件:
短绒(按受欢迎程度排序):
代码格式化程序(按流行程度排序):
有许多。
IDE通常具有一些内置的格式化功能。IntelliJ Idea / PyCharm确实具有这种功能,Eclipse的Python插件也是如此,依此类推。
有些格式化程序/分类符可以针对多种语言。https://coala.io是一个很好的例子。
然后是单目的工具,其他答案中提到了许多工具。
自动重新格式化的一种特定方法是将文件解析为AST树(不删除注释),然后将其转储回文本(意味着不保留任何原始格式)。例如:https://github.com/python/black。