我知道有一些工具可以验证你的Python代码是否符合PEP8,例如有an online service和a python module。
但是,我找不到可以将我的Python文件转换为自包含的PEP8有效Python文件的服务或模块。有谁知道有没有? 我认为这是可行的,因为PEP8完全是关于代码的外观,对吗?
不幸的是,“pep8 storming”(整个项目)有几个负面的副作用:
作为一种替代方法(并且感谢@y-p for the idea),我编写了一个小包,其中autopep8只包含自上次提交/分支以来您一直在处理的那些行:
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(来自the last shared commit)输出中的行。
这个脚本目前适用于git和hg,如果你使用其他东西并希望这个工作please post a comment/issue/PR!
你可以使用autopep8!虽然你自己做了一杯咖啡,但这个工具很乐意删除所有那些不会改变代码含义的那些讨厌的PEP8违规行为。
通过pip安装:
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
参数(无情地“修复”这些改变意义的违规行为),但要注意,如果你使用攻击性,你可能需要调试...(例如在numpy / pandas True == np.bool_(True)
但不是True is np.bool_(True)
!)
pep8 --quiet --statistics .
注意:我认为E501(行太长)是一种特殊情况,因为代码中可能会有很多这些,有时这些不会被autopep8纠正。
作为一个例子,我applied this技术到pandas代码库。
@Andy Hayden对autopep8给出了很好的概述。除此之外,还有一个名为pep8ify的包也可以做同样的事情。
但是,这两个软件包只能删除lint错误,但它们无法格式化代码。
little = more[3: 5]
在pep8ifying之后,上面的代码保持不变。但是代码看起来并不好看。您可以使用像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
如果你正在使用eclipse + PyDev,你只需从PyDev的设置中激活autopep8:Windows - > Preferences - >在搜索过滤器中输入'autopep8'。
检查'使用autopep8.py进行代码格式化?' - >好的
现在eclipse的CTRL-SHIFT-F代码格式化应该使用autopep8格式化你的代码:)
有许多。
IDE通常内置一些格式化功能.IntelliJ Idea / PyCharm也适用于Eclipse的Python插件,依此类推。
有格式化程序/短语可以定位多种语言。 https://coala.io就是一个很好的例子。
然后是单一目的工具,其他答案中提到了许多工具。
自动重新格式化的一种特定方法是将文件解析为AST树(不删除注释),然后将其转储回文本(意味着保留原始格式的任何内容)。例子就是https://github.com/python/black。