让代码变得更易维护的7个Python库


Posted in Python onOctober 09, 2018

随着软件项目进入“维护模式”,对可读性和编码标准的要求很容易落空(甚至从一开始就没有建立过那些标准)。然而,在代码库中保持一致的代码风格和测试标准能够显著减轻维护的压力,也能确保新的开发者能够快速了解项目的情况,同时能更好地全程保持应用程序的质量。

使用外部库来检查代码的质量不失为保护项目未来可维护性的一个好方法。以下会推荐一些我们最喜爱的 检查代码 (包括检查 PEP 8 和其它代码风格错误)的库,用它们来强制保持代码风格一致,并确保在项目成熟时有一个可接受的测试覆盖率。

检查你的代码风格

PEP 8 是 Python 代码风格规范,它规定了类似行长度、缩进、多行表达式、变量命名约定等内容。尽管你的团队自身可能也会有稍微不同于 PEP 8 的代码风格规范,但任何代码风格规范的目标都是在代码库中强制实施一致的标准,使代码的可读性更强、更易于维护。下面三个库就可以用来帮助你美化代码。

1、Pylint

Pylint 是一个检查违反 PEP 8 规范和常见错误的库。它在一些流行的 编辑器和 IDE 中都有集成,也可以单独从命令行运行。

执行 pip install pylint 安装 Pylint 。然后运行 pylint [options] path/to/dir 或者 pylint [options] path/to/module.py 就可以在命令行中使用 Pylint,它会向控制台输出代码中违反规范和出现错误的地方。

你还可以使用 pylintrc 配置文件 来自定义 Pylint 对哪些代码错误进行检查。

2、Flake8

Flake8 是“将 PEP 8、Pyflakes(类似 Pylint)、McCabe(代码复杂性检查器)和第三方插件整合到一起,以检查 Python 代码风格和质量的一个 Python 工具”。

执行 pip install flake8 安装 flake8 ,然后执行 flake8 [options] path/to/dir 或者 flake8 [options] path/to/module.py 可以查看报出的错误和警告。

和 Pylint 类似,Flake8 允许通过 配置文件 来自定义检查的内容。它有非常清晰的文档,包括一些有用的 提交钩子 ,可以将自动检查代码纳入到开发工作流程之中。

Flake8 也可以集成到一些流行的编辑器和 IDE 当中,但在文档中并没有详细说明。要将 Flake8 集成到喜欢的编辑器或 IDE 中,可以搜索插件(例如 Sublime Text 的 Flake8 插件 )。

3、Isort

Isort 这个库能将你在项目中导入的库按字母顺序排序,并将其 正确划分为不同部分 (例如标准库、第三方库、自建的库等)。这样提高了代码的可读性,并且可以在导入的库较多的时候轻松找到各个库。

执行 pip install isort 安装 isort,然后执行 isort path/to/module.py 就可以运行了。文档中还提供了更多的配置项,例如通过 配置 .isort.cfg 文件来决定 isort 如何处理一个库的多行导入。

和Flake8、Pylint 一样,isort 也提供了将其与流行的 编辑器和 IDE 集成的插件。

分享你的代码风格

每次文件发生变动之后都用命令行手动检查代码是一件痛苦的事,你可能也不太喜欢通过运行 IDE 中某个插件来实现这个功能。同样地,你的同事可能会用不同的代码检查方式,也许他们的编辑器中也没有那种插件,甚至你自己可能也不会严格检查代码和按照警告来更正代码。总之,你分享出来的代码库将会逐渐地变得混乱且难以阅读。

一个很好的解决方案是使用一个库,自动将代码按照 PEP 8 规范进行格式化。我们推荐的三个库都有不同的自定义级别来控制如何格式化代码。其中有一些设置较为特殊,例如 Pylint 和 Flake8 ,你需要先行测试,看看是否有你无法忍受但又不能修改的默认配置。

4、Autopep8

Autopep8 可以自动格式化指定的模块中的代码,包括重新缩进行、修复缩进、删除多余的空格,并重构常见的比较错误(例如布尔值和 None 值)。你可以查看文档中完整的 更正列表。

运行 pip install --upgrade autopep8 安装 Autopep8。然后执行 autopep8 --in-place --aggressive --aggressive <filename> 就可以重新格式化你的代码。aggressive 选项的数量表示 Auotopep8 在代码风格控制上有多少控制权。在这里可以详细了解 aggressive 选项。

5、Yapf

Yapf 是另一种有自己的 配置项 列表的重新格式化代码的工具。它与 Autopep8 的不同之处在于它不仅会指出代码中违反 PEP 8 规范的地方,还会对没有违反 PEP 8 但代码风格不一致的地方重新格式化,旨在令代码的可读性更强。

执行 pip install yapf 安装 Yapf,然后执行 yapf [options] path/to/dir yapf [options] path/to/module.py 可以对代码重新格式化。 定制选项 的完整列表在这里。

6、Black

Black 在代码检查工具当中算是比较新的一个。它与 Autopep8 和 Yapf 类似,但限制较多,没有太多的自定义选项。这样的好处是你不需要去决定使用怎么样的代码风格,让 Black 来给你做决定就好。你可以在这里查阅 Black 有限的自定义选项 以及 如何在配置文件中对其进行设置 。

Black 依赖于 Python 3.6+,但它可以格式化用 Python 2 编写的代码。

执行 pip install black 安装 Black,然后执行 black path/to/dirblack path/to/module.py 就可以使用 Black 优化你的代码。

检查你的测试覆盖率

如果你正在进行编写测试,你需要确保提交到代码库的新代码都已经测试通过,并且不会降低测试覆盖率。虽然测试覆盖率不是衡量测试有效性和充分性的唯一指标,但它是确保项目遵循基本测试标准的一种方法。对于计算测试覆盖率,我们推荐使用 Coverage 这个库。

7、Coverage

Coverage 有数种显示测试覆盖率的方式,包括将结果输出到控制台或 HTML 页面,并指出哪些具体哪些地方没有被覆盖到。你可以通过 配置文件 自定义Coverage 检查的内容,让你更方便使用。

执行 pip install coverage 安装 Converage 。然后执行 coverage [path/to/module.py] [args] 可以运行程序并查看输出结果。如果要查看哪些代码行没有被覆盖,执行 coverage report -m 即可。

持续集成工具

持续集成(Continuous integration)(CI)是在合并和部署代码之前自动检查代码风格错误和测试覆盖率最小值的过程。很多免费或付费的工具都可以用于执行这项工作,具体的过程不在本文中赘述,但 CI 过程是令代码更易读和更易维护的重要步骤,关于这一部分可以参考 Travis CI 和 Jenkins 。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
python计算两个地址之间的距离方法
Jun 09 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
Jul 09 Python
使用pandas批量处理矢量化字符串的实例讲解
Jul 10 Python
python爬虫获取小区经纬度以及结构化地址
Dec 30 Python
Django网络框架之HelloDjango项目创建教程
Jun 06 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
python logging添加filter教程
Dec 24 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
Jan 14 Python
解决Python pip 自动更新升级失败的问题
Feb 21 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
Django集成富文本编辑器summernote的实现步骤
May 31 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
Oct 09 #Python
Python打包方法Pyinstaller的使用
Oct 09 #Python
Python如何发布程序的详细教程
Oct 09 #Python
python如何发布自已pip项目的方法步骤
Oct 09 #Python
Django csrf 验证问题的实现
Oct 09 #Python
Python正则表达式指南 推荐
Oct 09 #Python
详解Django的CSRF认证实现
Oct 09 #Python
You might like
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
php引用返回与取消引用的详解
2013/06/08 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
实现PHP搜索加分页
2016/10/12 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
JavaScript将相对地址转换为绝对地址示例代码
2013/07/19 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
浅谈JavaScript 标准对象
2016/06/02 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
Vuex 入门教程
2018/01/10 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
浅谈Python程序与C++程序的联合使用
2015/04/07 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
Python实现决策树C4.5算法的示例
2018/05/30 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
遮罩层 + Iframe实现界面自动显示的示例代码
2020/04/26 HTML / CSS
巴西最大的体育用品商城:Netshoes巴西
2016/11/29 全球购物
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
护士自荐信
2013/10/25 职场文书
技术总监的工作职责
2013/11/13 职场文书
关于赌博的检讨书
2014/01/24 职场文书
管理失职检讨书
2014/02/12 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
2015年宣传部部长竞选演讲稿
2014/11/28 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS