七套Python库快速提升您项目的代码可维护性

2023-12-29 07:08

本文主要是介绍七套Python库快速提升您项目的代码可维护性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

当软件项目进入“维护模式”时,原本的代码可读性与编码标准往往很难得到保证。(当然,这些标准在软件项目建立之初就不容易坚持实施。)但必须强调的是,在代码库中保持样式与测试标准的一致性,正是降低维护负担的重要前提。只有这样,我们才能确保未来的开发人员得以快速了解新的情况,并随着时间推移切实保证项目与应用程序的健康状况。

保护项目未来可维护性的一种理想方式,在于利用外部库检查您的代码运行状况。以下是目前开发人员最喜爱的的代码梳理库,它们能够以强制方式执行一致性样式,并确保项目在成熟之后仍具备可接受的测试覆盖率。

检查您的代码样式

PEP 8是一套Python代码样式指南,其为行长度、缩进、多行表达式以及命名约定等内容提供重要的执行规则。当然,您的团队也许拥有自己的样式规则,且其与PEP 8略有不同。

凭借代码样式指南都拥有同样的目标——在代码库中强制实施一致的标准,从而使其更具可读性并降低维护难度。在这方面,以下三套库能够帮助大家高效改善代码质量。

1. Pylint

Pylint 是一套用于检查PEP 8样式违规与常见错误的库。它能够与多种高人气编辑器及IDE良好集成,亦可通过命令行加以运行。

您可以运行pip install pylint命令以进行安装。

要通过命令行使用Pylint,您需要运行 pylint [options] path/to/dir or pylint [options] path/to/module.py。Pylint将向控制台输出关于样式违规以及其他错误警告。

大家也可以利用 pylintrc配置文件自定义Pylint的错误检查。

2. Flake8

Flake8是一款“Python工具,可将PEP 8、Pyflakes(类似于Pylint)、McCabe(代码复杂性检查器)以及其他第三方插件加以结合,用以检查Python代码中的样式与质量。”

要使用Flake8,您需要运行 pip install flake8。而后,运行flake8 [options] path/to/dir or flake8 [options] path/to/module.py 查看相关错误与警告信息。

与Pylint类似,Flake8也允许用户对配置文件的检查内容进行自定义,其中包含非常清晰的文档,例如一些实用的commit hook,用以自动检查开发流程中的代码片段。

Flake8能够集成各类流行编辑器与IDE,但文档当中通常并未提及相关指令。要将Flake8与您喜爱的编辑器或IDE进行集成,请在线搜索相关插件(例如 Flake8 plugin for Sublime Text)。

3. Isort

Isort是一套库,能够按字母顺序对您的导入内容进行排序并将其拆分为适当部分(例如标准库导入、第三方库导入、来自您自有项目的导入等)。这将提升代码可读性并在模块中包含大量导入内容时降低查找难度。

要安装isort,您需要运行 pip install isort,而后使用 isort path/to/module.py命令加以运行。关于更多配置选项,请参阅 说明文档。例如,您可以通过isort.cfg文件配置isort如何处理来自某套库的多行导入代码。

与Falke8及Pylint一样,isort同时提供多款插件以集成各类流行编辑器及IDE。

代码样式外包

需要强调的是,在命令行中手动为需要变更的各个文件进行代码梳理是一项痛苦的工作,大家也可能并不喜欢特定插件在IDE中的运行方式。

此外,您的同事可能更倾向于利用不同的插件或者干脆不配合任何插件使用自己喜爱的编辑器; 或者您自己可能不想投入太多心力进行代码梳理并根据警告内容做出调整。随着时间的推移,这一切都可能令您的共享代码库变得混乱且难以阅读。

在这方面,一大理想解决方案是利用库自动对代码进行重新格式化,从而直接为您传递PEP 8内容。这里我们推荐的三套库都拥有不同级别的自定义能力,亦会以不同的默认方式进行代码格式化。

这些默认方式各有优劣,因此大家可能需要像使用Pylint以及Flake8那样对其进行测试,看看哪些能够提供最有效的自定义选项,又有哪些不可更改的默认值比较符合您的要求。

4. Autopep8

Autopep8 能够自动对您指定的模块内的代码进行格式化。它会进行重新缩进、修复缩进、删除不必要的空格,同时重构常见的比较错误(例如布尔值与None)。感兴趣的朋友可以点击此处查看其文档中的完整更正列表。

要安装Autopep8,您需要运行pip install --upgrade autopep8。要对代码进行重新格式化,需要运行autopep8 --in-place --aggressive --aggressive <filename>。其中的aggressive标记(及其数量)表示您希望在代码样式上为autopep8提供多少控制权空间。您可以点击此处了解关于aggressive选项的更多细节信息。

5. Yapf

Yapf 是另一种代码重新格式化选项,其提供自己的配置选项列表。与autopep8不同,yapf不仅能够解决PEP 8违规问题,同时亦会重新格式化那些并不违反特定PEP 8规则的代码——包括不符合样式一致性或者存在其他可读性问题的部分,从而进一步提升代码可维护性。

要安装yapf,您需要运行 pip install 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代码进行格式化。要使用Black,您需要运行 pip install black。要对代码进行格式化,您需要运行: black path/to/dir 或者 black path/to/module.py。

检查测试覆盖率

在编写测试的过程中,大家需要确保其能够对代码库中的新代码进行测试,同时不致降低您的测试覆盖率。尽管测试覆盖率百分比并非衡量测试有效性与充分性的惟一指标,但其无疑是确保项目遵循基本测试标准的重要方法之一。为了衡量测试覆盖率,我们向您推荐Coverage。

7. Coverage

Coverage拥有多个选项,可用于向您报告测试覆盖率,具体包括将结果输出至控制台或HTML页面,并指示哪些行号存在测试覆盖缺失。您可以设置配置文件以自定义Coverage的检查内容,并降低其运行难度。

要安装Coverage,您需要运行pip install coverage。要运行程序并查看其输出结果,需要运行 coverage run [path/to/module.py] [args],而后查看程序的输出结果即可。要获取哪些代码行未被测试覆盖,需要运行 coverage report -m。

持续集成工具

持续集成(简称CI)是您可以运行的一系列流程,用于在代码合并与部署之前自动检查梳理错误并给出测试覆盖率的最小值。目前有多种免费或付费工具能够自动完成上述目标,这里我们就不一一赘述了。不过考虑到持续集成是实现代码可读性与可维护性的重要环节,这里向大家推荐两种一般性持续集成工具:Travis CI 与 Jenkins。

更多Python视频、源码、资料加群683380553免费获取

原文标题:7 Python libraries for more maintainable code,作者:Jeff Triplett

这篇关于七套Python库快速提升您项目的代码可维护性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/548714

相关文章

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

Python 中的 with open文件操作的最佳实践

《Python中的withopen文件操作的最佳实践》在Python中,withopen()提供了一个简洁而安全的方式来处理文件操作,它不仅能确保文件在操作完成后自动关闭,还能处理文件操作中的异... 目录什么是 with open()?为什么使用 with open()?使用 with open() 进行

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小