将Python代码转换为符合PEP8的工具
我知道有些工具可以validation你的Python代码是否符合PEP8,例如有一个在线服务和一个python模块 。
但是,我找不到可以将我的Python文件转换为自包含的PEP8有效Python文件的服务或模块。 有谁知道有没有?
我认为这是可行的,因为PEP8是关于代码的外观,对吧?
你可以使用autopep8 ! 当你自己做一杯咖啡的时候,这个工具可以愉快地消除那些不会改变代码含义的烦人的PEP8违规。
通过pip安装它:
pip install autopep8
将其应用于特定文件:
autopep8 py_file --in-place
或recursion的方式给你的项目, 详细的选项给你一些反馈 :
autopep8 project_dir --recursive --in-place --pep8-passes 2000 --verbose
注意:有时默认的100次传球是不够的,我把它设置为2000,因为它合理的高,并会捕获所有,但最麻烦的文件(它停止通过,一旦发现没有可parsing的pep8违规)…
在这一点上,我build议重新testing和做一个承诺!
如果你想要“完整的” PEP8合规性,我使用的一个策略就是像上面那样运行autopep8,然后运行PEP8,打印剩余的违规(文件,行号和内容):
pep8 project_dir --ignore=E501
并手动更改这些单独(例如E712s – 与布尔比较)。
注意:autopep8提供了一个--aggressive
论据(无情地“修复”这些意义改变的违规行为),但要小心,如果你使用侵略性,你可能需要debugging…(例如numpy / pandas True == np.bool_(True)
但不是True is np.bool_(True)
!)
您可以检查每种types(之前和之后)的违规数量:
pep8 --quiet --statistics .
注意:我认为E501s(行太长)是一个特殊情况,因为在你的代码中可能会有很多这样的东西,有时候这些都不会被autopep8纠正。
作为一个例子,我将这种技术应用到pandas代码库中。
不幸的是,“pep8 storming”(整个项目)有几个负面影响:
- 很多合并冲突
- 打破混帐责备
- 使代码审查困难
作为一个替代scheme(感谢@yp的想法 ),我写了一个小程序包,它只能自上次提交/分支以来自己操作的那些行:
基本上离开这个项目 比你发现的要好一点 :
pip install pep8radius
假设你已经完成了你的工作,并准备好提交:
# 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(从最后的共享提交 )的输出行。
这个脚本目前与git和hg一起工作,如果你使用其他东西,并希望这个工作, 请发表评论/问题/公关 !
@Andy Hayden对autopep8做了很好的概述。 除此之外,还有一个叫pep8ify的软件包,它也做同样的事情。
但是,这两个软件包只能删除lint错误,但不能格式化代码。
little = more[3: 5]
上面的代码也一样。 但代码看起来不太好。 您可以使用格式化程序,如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代码!
如果你使用eclipse + PyDev,你可以简单的从PyDev的设置中激活autopep8:Windows – > Preferences – >在searchfilter中input'autopep8'。
检查“使用autopep8.py代码格式? – 好的
现在eclipse的CTRL-SHIFT-F代码格式应该使用autopep8来格式化你的代码:)
有很多。
IDE通常具有内置的一些格式化function。IntelliJ Idea / PyCharm的function与Eclipse的Python插件一样,等等。
有可以定位多种语言的格式化程序/短语程序。 https://coala.io就是一个很好的例子。;
然后是单一的目的工具,其他答案中提到了很多。