开源最前线(ID:OpenSourceTop) 猿妹编译

来源:https://opensource.com/article/18/7/7-python-libraries-more-maintainable-code


当软件项目进入“维护模式”时,很容易把从一开始就建立的代码可读性和编码标准抛开,但是,在代码库中保持一致的样式和测试标准是减少维护负担的重要部分,这样可以确保未来的开发人员能够快速了解最新的项目情况。


维持项目可维护性的一个好方法是使用外部库来检查您的代码运行状况。这些是我们最喜欢的一些用于linting代码的库(检查PEP 8和其他样式错误),强制执行一致的样式,以及测试覆盖率的库。



检查代码规范


PEP8 是Python官方推出编码约定,它为行长度,缩进,多行表达式和命名约定等内容制定了一系列规则,主要是为了保证 Python 编码的风格一致,提高代码的可读性。



1. Pylint


Pylint是一个检查PEP 8规范违规和常见错误的库。它能与几个流行的编辑器和IDE很好地集成,也可以从命令行运行。


要安装,请运行 pip install pylint。要从命令行使用Pylint,请运行 pylint [options] path/to/dir 或 pylint [options] path/to/module.py。Pylint就会输出有关样式违规和其他错误的警告。开发者可以根据根据自己偏好、习惯修改pylintrc这个模板。(项目地址:https://www.pylint.org/



2. Flake8


Flake8 是由Python官方发布的一款辅助检测Python代码是否规范的工具,相对于目前热度比较高的Pylint来说,Flake8检查规则灵活,支持集成额外插件,扩展性强。


要使用Flake8,请运行 pip install flake8。然后运行 flake8 [options] path/to/dir或flake8 [options] path/to/module.py 查看其错误和警告。


与Pylint一样,Flake8允许对配置文件检查的内容进行一些自定义。它有非常清晰的文档,包括一些有用的repo,可以自动检查代码。


Flake8同样可与流行的编辑器和IDE集成,例如,Sublime Text的Flake8插件。(详情:https://github.com/PyCQA/flake8



3. Isort


isort 可自动对 Python 的 import 语句进行排序和分段。可将大量的 import 结构转成非常适合阅读的排版。提供一个命令行工具、Python 库和 Kate 插件。


安装 isort pip install isort,然后运行 isort path/to/module.py。文档中提供了更多配置选项。例如,开发者可以配置 isort处理.isort.cfg文件中一个库的多行导入。


与Flake8和Pylint一样,isort也能够与流行的编辑器和IDE集成。



代码格式化


4. Autopep8


Autopep8是一个将Python代码自动排版为PEP8风格的小工具。它使用pep8工具来决定代码中的哪部分需要被排版。Autopep8可以修复大部分pep8工具中报告的排版问题。


要安装,请运行 pip install --upgrade autopep8。要重新格式化代码,请运行 autopep8 --in-place --aggressive --aggressive <filename>。(项目地址:https://github.com/hhatto/autopep8



5. Yapf


Yapf是重新格式化代码的另一种选择,它带有自己的配置选项列表。它与autopep8的不同之处在于它不仅仅解决了PEP 8违规问题。它还重新格式化了没有违反PEP 8的代码,但没有一致地设置样式。


要安装,请运行 pip install yapf。要重新格式化代码,请运行 yapf [options] path/to/dir 或yapf [options] path/to/module.py。还有一个完整的自定义选项列表。(项目地址:https://github.com/google/yapf



6. 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 检查的内容并使其更容易运行。



持续集成工具


持续集成(CI)是您可以运行的一系列过程,用于在合并和部署代码之前自动检查linter错误和测试覆盖率最小值。有许多免费或付费的工具可以自动执行此过程,完整的演练超出了本文的范围。但是,因为设置CI过程是将块移除到更易读和可维护的代码的重要步骤,所以您应该研究一般的持续集成工具,特别是 Travis CI 和 Jenkins