将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就是一个很好的例子。;

然后是单一的目的工具,其他答案中提到了很多。