程序员该如何降低Python代码维护的负担,这7个库是好帮手!
可读性很重要——Python大师Tim Peters
当软件项目进入“维护模式”时,很容易让可读性和编码标准落空。而从一开始就很容易建立这些标准。但是,在代码库中保持一致的样式和测试标准是减少维护负担的重要部分,确保未来的开发人员能够快速了解新的情况,随着时间的推移来保护他们的项目和应用程序的健康。
保护项目未来可维护性的一个好方法是使用外部库来检查你的代码运行状况。一下是一些用于linting代码的库(检查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是一个“Python工具,它将PEP 8,Pyflakes(类似于Pylint),McCabe(代码复杂性检查器)和第三方插件融合在一起,以检查某些Python代码的样式和质量。”
要使用Flake8,请运行pip install 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如何处理.isort.cfg文件中一个库的多行导入。
与Flake8和Pylint一样,isort还提供了将其与流行的编辑器和IDE集成的插件。
格式化代码
记住要从命令行手动为你更改的每个文件运行linters是一件痛苦的事,你可能不喜欢特定插件在IDE中的行为方式。此外,你的同事可能更喜欢不同的linter或者可能没有插件用于他们喜欢的编辑器,或者你可能不那么细致地总是运行linter并更正警告。随着时间的推移,你共享的代码库将变得混乱且难以阅读。
一个很好的解决方案是使用一个库,自动将代码重新格式化为为你传递PEP 8的内容。我们推荐的三个库都有不同级别的自定义,以及它们格式化代码的不同默认值。
4. Autopep8
Autopep8自动格式化你指定的模块中的代码。它将重新缩进行,修复缩进,删除无关的空格,并重构常见的比较错误。
要安装,请运行pip install --upgrade autopep8。要重新格式化代码,请运行autopep8 --in-place --aggressive --aggressive <filename>。aggressive的标志(以及它们的数量)表示你希望在代码样式上为autopep8提供多少控制权。
5.Yapf
Yapf是重新格式化代码的另一种选择,它带有自己的配置选项列表。它与autopep8的不同之处在于它不仅仅解决了PEP 8违规问题。它还重新格式化了没有特定违反PEP 8的代码,但没有一致地设置样式,或者为了可读性而格式化得更好。
要安装,请运行pip install yapf。要重新格式化代码,请运行,yapf [options] path / to / dir或yapf [options] path / to / module.py.
6.Black
对于那些重新格式化代码的linter来说,Black是一个新的库。它与autopep8和Yapf类似,但更有特点。它很少有自定义选项,这是重点。这个想法是你不应该对代码风格做出决定;唯一的决定就是让Black决定你。
Black需要Python 3.6+,但可以格式化Python 2代码。要使用,请运行pip install black。要美化代码,请运行:black path / to / dir或black path / to / module.py。
测试覆盖率
你正在写测试,对吧?然后,你需要确保对代码库提交的新代码进行测试,并且不会降低你的测试覆盖率。虽然测试覆盖率的百分比不是衡量测试有效性和充分性的唯一指标,但它是确保项目中遵循基本测试标准的一种方法。为了测量测试覆盖率,我们有一个建议:Coverage。
7.Coverage
Coverage有多种选项可用于向你报告测试覆盖率,包括将结果输出到控制台或HTML页面,并指示哪些行号缺少测试覆盖率。你可以设置配置文件以自定义Coverage检查的内容并使其更容易运行。
要安装,请运行pip install coverage。要运行程序并查看其输出,请运行coverage [path / to / module.py] [args],你将看到程序的输出。要查看哪些代码行缺少覆盖率的报告,请运行coverage report -m.。
持续集成工具
持续集成(CI)是你可以运行的一系列过程,用于在合并和部署代码之前自动检查linter错误和测试覆盖率最小值。有许多免费或付费的工具可以自动执行此过程,完整的内容超出了本文的范围。但是,因为设置CI过程是将块移除到更易读和可维护的代码的重要步骤,所以你应该研究一般的持续集成工具;特别是Travis CI和Jenkins。