我知道有些工具可以验证您的Python代码是否符合PEP8,例如an online service和a python module。
但是,我找不到可以将我的Python文件转换为自包含的PEP8有效Python文件的服务或模块。有谁知道有没有?
我认为这是可行的,因为PEP8完全是关于代码的外观,对吗?
答案 0 :(得分:165)
您可以使用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技术。
答案 1 :(得分:32)
不幸的是“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!
答案 2 :(得分:8)
但是这两个软件包只能删除lint错误,但它们无法格式化代码。
31\/1\1\dd
在pep8ifying之后,上面的代码保持不变。但是代码看起来并不好看。您可以使用yapf之类的格式化程序,即使代码符合PEP8,它也会格式化代码。 上面的代码将格式化为
1000px
有时甚至会破坏您的手动格式化。例如
#fixedBox {
position: fixed;
left: 50%;
/* move it back half the width of your mainWrapper */
margin-left: -500px;
}
@media screen and (max-width: 999px) {
#fixedBox {
left: 0;
margin-left: 0;
}
}
将转换为
little = more[3: 5]
但你可以告诉它忽略一些部分。
little = more[3:5]
答案 3 :(得分:3)
如果你正在使用eclipse + PyDev,你只需从PyDev的设置中激活autopep8: Windows - >偏好 - >输入' autopep8'在搜索过滤器中。
选中'使用autopep8.py进行代码格式化?' - >行
现在eclipse的CTRL-SHIFT-F代码格式化应使用autopep8格式化代码:)
答案 4 :(得分:3)
我对python和代码风格的不同工具进行了广泛的研究。 仪器有两种类型:linters-分析您的代码并给出有关错误使用的代码样式的警告,并提供有关如何修复它的建议,以及code formatters-当您保存文件时,它会使用PEP样式重新设置文档格式。>
因为重新格式化必须更加准确-如果重新格式化您不希望使用的内容变得无用-它们覆盖的PEP较少,因此棉绒显示的更多。
它们都有不同的配置权限-例如,在所有规则中都可以配置pylinter(可以打开/关闭每种类型的警告),根本不能配置黑色。
以下是一些有用的链接和教程:
文档:
短毛绒(按受欢迎程度排序):
代码格式化程序(按流行程度排列):
答案 5 :(得分:1)
有很多。
IDE通常内置一些格式化功能.IntelliJ Idea / PyCharm也适用于Eclipse的Python插件,依此类推。
有格式化程序/短语可以定位多种语言。 https://coala.io就是一个很好的例子。
然后是单一目的工具,其他答案中提到了许多工具。
自动重新格式化的一种特定方法是将文件解析为AST树(不删除注释),然后将其转储回文本(意味着不保留原始格式的任何内容)。例如https://github.com/python/black。