灯具的网站建设,上海平台网站建设报,网络整合营销案例,自己做的网站怎么让别人访问本篇将总结实际项目开发中Python代码规范检查、自动编排的一些工具#xff0c;特点#xff0c;使用方法#xff0c;以及如何在Pycharm中集成这些工具#xff0c;如autoflake、yapf、black、isort、autopep8代码规范和自动编排工具。上一篇总结的pylint、pyproject-flake8、…本篇将总结实际项目开发中Python代码规范检查、自动编排的一些工具特点使用方法以及如何在Pycharm中集成这些工具如autoflake、yapf、black、isort、autopep8代码规范和自动编排工具。上一篇总结的pylint、pyproject-flake8、pyflakes、flake8、mypy代码规范扫描工具参考
https://blog.csdn.net/zhouruifu2015/article/details/129876922https://blog.csdn.net/zhouruifu2015/article/details/129876922
autoflake
介绍
autoflake 可以从 Python 代码中删除未使用的导入和变量以及无用的pass语句以此精简你的代码。默认情况下autoflake仅删除标准库中未使用的模块的导入其他模块可能有副作用所以禁止了自动删除可以使用--imports 选项指定其他模块要删除未使用的导入
autoflake --importsdjango,requests,urllib3 文件名
要删除所有未使用的导入无论它们是否来自标准库可以使用 --remove-all-unused-imports 选项。
默认情况下autoflake 禁用了删除未使用的变量要删除未使用的变量可以使用 --remove-unused-variables 选项。 安装配置
安装pip install --upgrade autoflake 使用 可选参数列表
-h, --help 显示帮助信息并退出-c, --check 如果需要更改则返回错误代码-i, --in-place 直接移除更改文件而不是打印差异-r, --recursive 递归目录--exclude 排除匹配文件/目录--imports 指定要删除未引用导入的模块--expand-star-imports 使用未定义名称扩展星号通配符导入仅在只有一颗星导入时触发文件如果文件中有 __all__ 或 del 则跳过--remove-all-unused-imports 删除所有未使用的导入不仅仅是那些来自标准库--ignore-init-module-imports 排除 __init__.py--remove-duplicate-keys 删除对象中的所有重复键--remove-unused-variables 删除未使用的变量--version 显示程序的版本号并退出如果想忽略某些行的导入移除可以使用 # noqa 注释
from .endpoints import role , token, user, utils # noqa 命令行中使用
直接整改文件autoflake --in-place --remove-unused-variables example.py
输出检查结果不整改文件autoflake autopep8_test.py yapf
介绍
Yapf 是另一种有自己的配置项列表的重新格式化代码的工具。它与 Autopep8 的不同之处在于它不仅会指出代码中违反 PEP 8 规范的地方还会对没有违反 PEP 8 但代码风格不一致的地方重新格式化旨在令代码的可读性更强。
由Google开发维护的格式化工具目的是让代码更漂亮它支持很多的自定义选项适合对自己的代码有特殊格式需求的场景
yapf并不支持对import进行排序所以需要使用isort工具。 安装配置
执行 pip install yapf 安装 Yapf 可以yapf的格式化配置文件
[yapf]
based_on_style pep8
spaces_before_comment 4
split_before_logical_operator true based_on_style可以是前面的四种预设格式之一。
yapf有默认的查找格式化配置文件的策略可以使用参数--no-local-style禁用搜索查找策略的细节可以查看官方README。 可以是JSON格式的配置字符串
--style{based_on_style: pep8, indent_width: 4}
更多的配置选项可以使用命令yapf --style-help查看或者查看官方文档https://github.com/google/yapf#id11。
格式选项并不区分大小写。
使用
执行 yapf [options] path/to/dir 或 yapf [options] path/to/module.py 可以对代码重新格式化。 yapf命令行参数及格式化选项yapf命令行工具的参数并不是很多主要常用的有下面几个
-d, --diff打印格式化前后差异-i, --in-place原地格式化原文件-l START-END, --lines START-END格式化指定行范围--style STYLE指定格式化标准
其中--style最为常用用于指定格式化的标准和自定义选项。可以是一些预设的选项包括
pep8默认值google基于Google Python Style Guideyapf用于Google开源项目的代码风格facebook格式化代码
yapf支持递归处理目录使用-r参数可以遍历目录及其子目录使用-e PATTERN或者--exclude PATTERN排除特定文件比如
yapf --stylepep8 -r -i --exclude *_test.py src/py 格式化代码之后再使用isort进行imports的排序当然也可以先排序imports
isort --fss --skip-glob *_test.py src/py 检查代码是否符合规范
检查代码是否符合规范可以将yapf的-i参数替换为-d如果存在不符合规范的内容则打印出来并且返回非0比如
yapf --stylepep8 -r -d --exclude *_test.py src/py 要检查imports是否符合规范给isort添加-c, --check-only, --check参数即可不符合规范将会报错并返回非零值
isort -c --fss --skip-glob *_test.py src/py
如此便可以在自动化检查的时候通过判断返回值是否为0确定代码是否符合规范从而可以在自动化构建的pipeline中提前结束提示开发者重新格式化代码。 参考文档
https://github.com/google/yapf
https://github.com/google/yapf#usage black
Black 在代码检查工具当中算是比较新的一个。它与 Autopep8 和 Yapf 类似但限制较多没有太多的自定义选项。这样的好处是不需要去决定使用怎么样的代码风格让Black来做决定就好。可以在这里查阅 Black 有限的自定义选项以及如何在配置文件中对其进行设置。
Black依赖于Python 3.6但它可以格式化用Python 2编写的代码。
Black配置选项很少避免因为配置选项太多反而导致格式规范不一致。
介绍
安装配置
执行 pip install black 安装 Black
使用
执行 black path/to/dir 或 black path/to/module.py 就可以使用 Black 优化代码。
参考文档
https://en.wikipedia.org/wiki/Lint_(software)GitHub - psf/black: The uncompromising Python code formatterisort 介绍
Isort 这个库能将项目中导入的库按字母顺序排序并将其正确划分为不同部分例如标准库、第三方库、自建的库等。这样提高了代码的可读性并且可以在导入的库较多的时候轻松找到各个库。
文档中还提供了更多的配置项例如通过配置 .isort.cfg 文件来决定 isort 如何处理一个库的多行导入。
和 Flake8、Pylint 一样isort 也提供了将其与流行的编辑器和 IDE 集成的插件。
安装配置
安装pip install isort Pycharm中配置isort 使用
执行 isort path/to/module.py 就可以运行了。 isort命令行参数和格式化选项
isort常用的命令行参数有
-d, --stdout输出到标准输出不修改文件
-c, --check-only, --check仅检查imports是否符合规范
--df, --diff打印执行格式化前后的差异而不修改文件
--profile PROFILE基础配置选项可选择black, django, pycharm, google, open_stack等常用风格。
--fss, --force-sort-within-sections严格按照包名进行排序而不管是直接使用import还是使用from ... import ...。 命令行中对单个文件转换
编写测试代码 执行后的效果可以看出isort并没有把引入但未使用的os做移除 Pycharm中执行转换
对单个文件进行转换 对整个项目进行转换 参考文档
Optionshttps://pycqa.github.io/isort/docs/configuration/options.htmlProfileshttps://pycqa.github.io/isort/docs/configuration/profiles.htmlhttps://github.com/PyCQA/isorthttps://github.com/PyCQA/isort/wiki/isort-Pluginsautopep8
介绍
A tool that automatically formats Python code to conform to the PEP8 style guide.
Autopep8 是一个开源的命令行工具它能够将Python代码自动格式化为PEP8风格如重新缩进行、修复缩进、删除多余的空格并重构常见的比较错误例如布尔值和 None 值可以查看文档中完整的更正列表。
Autopep8使用pycodestyle工具来决定代码中的哪部分需要被格式化这能够修复大部分pycodestyle工具中报告的排版问题。 安装配置
安装pip install autopep8 或 Pycharm配置外置工具
Program D:\env36_tornado\Scripts\autopep8.exe
Arguments --in-place --aggressive --aggressive $FilePath$
Working directory $ProjectFileDir$
Output filters $FILE_PATH$\:$LINE$\:$COLUMN$\:.* 如果Arguments仅仅配置成 $FilePath$ 则发现有不符合规范的文件仅仅输出结果。Arguments配置成 --in-place --aggressive --aggressive $FilePath$ 发现有不符合规范的文件则会自动进行整改。使用
--in-place类似于sed命令的-i选项如果不包含–in-place选项则会将autopep8格式化以后的代码直接输出到控制台。可以使用这种方式检查autopep8的修改使用–in-place则会直接将结果保存到源文件中将不会有任何输出autopep8会直接修改源文件。
autopep8还存在--aggressive选项这会执行更多实质性地更改可以多次使用--aggressive以达到更佳的效果。 命令行中针对单个指定文件
autopep8.exe --in-place --aggressive --aggressive filename autopep8 --in-place --aggressive --aggressive autopep8.py
autopep8 --in-place --aggressive --aggressive 就可以重新格式化你的代码。aggressive 选项的数量表示 Auotopep8 在代码风格控制上有多少控制权。在这里可以详细了解 aggressive 选项。 Pycharm中执行格式化Pycharm编辑区域右击中选择autopep8 或 格式化后的效果库的排列顺序还是没有做排序以及引用但未使用的os库也没有去掉可以考虑使用isort再次进行整改。 autopep8对目录进行扫描报[Errno 13] Permission denied Autopep8可以通过指定目录来对多个文件进行扫描和格式化。可以使用以下命令格式 bash
autopep8 --recursive directory_path_or_file_path 其中--recursive选项指定进行递归操作扫描目录下的所有子目录和文件。 directory_path_or_file_path指定目录路径或单个文件路径。
上述命令进入项目目录执行autopep8 --recursive --in-place --aggressive --aggressive . 如果Linux上还遇到[Errno 13] Permission denied错误则可能是因为没有足够的权限访问某些文件或目录。可以尝试在命令前加上sudo作为管理员身份运行命令或者将文件或目录权限更改为可读写权限。
如果是Windows则设置如下 参考文档
GitHub - hhatto/autopep8: A tool that automatically formats Python code to conform to the PEP 8 style guide.A tool that automatically formats Python code to conform to the PEP 8 style guide. - GitHub - hhatto/autopep8: A tool that automatically formats Python code to conform to the PEP 8 style guide.https://github.com/hhatto/autopep8 输入才有输出吸收才能吐纳。——码字不易