Python 高手编程系列三千四百四十一:有用的工具
前面的约定和实践的一部分可以使用下列工具来控制和处理。• Pylint一个非常灵活的源代码分析器。• pep8 和 flake8它们是小型的代码风格检查器也是包装器添加了一些更有用的特性例如静态分析和复杂度测量。Pylint除了一些质量保证方面的度量之外Pylint 还允许你检查给定的源代码是否遵循某种命名约定。它的默认设置对应于 PEP 8Pylint 脚本会提供一份 shell 报告输出。要安装 Pylint你可以使用 pip代码如下$ pip install pylint安装完成后pylint 这个命令就可用了可以在一个模块上运行也可以利用通配符在多个模块上运行。我们在 Buildout 的 bootstrap.py 脚本上试用这个命令代码如下$ wget -O bootstrap.py https://bootstrap.pypa.io/bootstrap-buildout.py -q$ pylint bootstrap.pyNo config file found, using default configuration************* Module bootstrapC: 76, 0: Unnecessary parens after ‘print’ keyword (superfluous-parens)C: 31, 0: Invalid constant name “tmpeggs” (invalid-name)C: 33, 0: Invalid constant name “usage” (invalid-name)C: 45, 0: Invalid constant name “parser” (invalid-name)C: 74, 0: Invalid constant name “options” (invalid-name)C: 74, 9: Invalid constant name “args” (invalid-name)C: 84, 4: Import “from urllib.request import urlopen” should be placed atthe top of the module (wrong-import-position)…Global evaluationYour code has been rated at 6.12/10Pylint 的实际输出要更长一些这里只截取了其中一部分。注意Pylint 可能会给出不好的评分或抱怨。例如import 语句没有被模块本身的代码使用这在某些情况下是完全可以的使其在命名空间中可用。如果一个库采用混合大小写为方法命名那么对其调用可能也会降低评分。无论如何总体评价并不那么重要。Pylint 只是一个工具指出可能的改进之处。要想对 Pylint 进行微调第一件要做的事就是使用-generate-rcfile 选项在项目目录下创建一个.pylintrc 配置文件如下所示$ pylint --generate-rcfile .pylintrc这个配置文件是自带说明的self-documenting每个选项都用注释说明应该已经包含所有可用的配置选项。除了检查是否遵守某种任意的编码标准Pylint 还可以给出有关整体代码质量的额外信息例如• 代码重复度量。• 未使用的变量和导入。• 缺失的函数、方法或类的文档字符串。• 函数签名过长。默认启用的可用检查列表非常长。重要的是要知道有些规则是任意的不能轻易应用到所有代码库。要记住一致性永远比遵守某种任意的标准更有价值。幸运的是Pylint是可调节的所以如果你的团队使用一些与默认不同的命名和编码约定你可以轻松配置来检查与这些约定的一致性。pep8 和 flake8pep8 这个工具只有一个目的它仅提供对 PEP 8 代码约定的风格检查。这是它与 Pylint的主要区别后者具有许多额外的功能。对于那些仅对 PEP 8 标准的自动化代码风格检查感兴趣的程序员来说这是最佳选择不需要任何额外的工具配置像 Pylint 那样。pep8 可以用 pip 安装代码如下$ pip install pep8在Buildout的bootstrap.py脚本上运行pep8它会给出不符合代码风格之处的简短列表$ wget -O bootstrap.py https://bootstrap.pypa.io/bootstrap-buildout.py -q$ pep8 bootstrap.pybootstrap.py:118:1: E402 module level import not at top of filebootstrap.py:119:1: E402 module level import not at top of filebootstrap.py:190:1: E402 module level import not at top of filebootstrap.py:200:1: E402 module level import not at top of file与 Pylint 的输出的主要区别在于其长度。pep8 只关注风格所以它不会给出任何其他警告例如未使用的变量、太长的函数名称或文档字符串缺失。它也不会给出任何评分。它真的很有意义因为不存在部分一致性。任何对风格指南的违背 — 即使是最小的违背 — 也会使代码立刻变得不一致。pep8的输出比PyLint更简单也更容易解析所以如果你想要与一些连续集成解决方案例如 Jenkins集成那么选择 pep8 可能更好。如果你想要一些静态分析的功能那么可以使用flake8包它是pep8和其他一些工具的包装器可以轻松扩展并提供了更丰富的功能包括• McCabe 复杂度测量。• 利用 pyflakes 做静态分析。• 利用注释禁用整个文件或单行代码。小结本章通过 Python 官方风格指南PEP 8 文档来介绍广受认可的编码约定。除了官方风格指南介绍了一些命名建议可以让你以后的代码更加明确还介绍了一些有用的工具在保持代码风格一致方面不可或缺。所有这些内容都是为本书第一个实用主题做准备 — 编写并分发 Python 包。下一章我们将学习如何在公共 PyPI 仓库中发布我们自己的包以及在私人组织中如何利用打包生态系统的力量。