让代码变得更易维护的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 相关文章推荐
Django中URLconf和include()的协同工作方法
Jul 20 Python
python字符串的常用操作方法小结
May 21 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
Python3内置模块之json编解码方法小结【推荐】
Dec 09 Python
Python面向对象之类和实例用法分析
Jun 08 Python
python @classmethod 的使用场合详解
Aug 23 Python
python3常用的数据清洗方法(小结)
Oct 31 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
Jan 18 Python
django 解决扩展自带User表遇到的问题
May 14 Python
Python如何实现的二分查找算法
May 27 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 04 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
中国第一家无线电行
2021/03/01 无线电
如何使用脚本模仿登陆过程
2006/11/22 PHP
php中inlcude()性能对比详解
2012/09/16 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
php实现分页显示
2015/11/03 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
zookeeper python接口实例详解
2018/01/18 Python
Python打印输出数组中全部元素
2018/03/13 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
python 多进程队列数据处理详解
2019/12/23 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
什么是Python变量作用域
2020/06/03 Python
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
Conforama西班牙:您的家具、装饰和电器商店
2020/02/21 全球购物
人事部经理岗位职责
2014/03/07 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
求职信的正确写法
2014/07/10 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
教师群众路线学习心得体会
2014/11/04 职场文书
2015年教师节演讲稿范文
2015/03/19 职场文书
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android