Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

这篇具有很好参考价值的文章主要介绍了Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇将总结实际项目开发中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 --imports=django,requests,urllib3 <文件名>

要删除所有未使用的导入(无论它们是否来自标准库),可以使用 --remove-all-unused-imports 选项。

默认情况下,autoflake 禁用了删除未使用的变量,要删除未使用的变量,可以使用 --remove-unused-variables 选项。

安装&配置

安装:pip install --upgrade autoflake

使用

可选参数列表:

  1. -h, --help 显示帮助信息并退出
  2. -c, --check 如果需要更改则返回错误代码
  3. -i, --in-place 直接移除更改文件而不是打印差异
  4. -r, --recursive 递归目录
  5. --exclude 排除匹配文件/目录
  6. --imports 指定要删除未引用导入的模块
  7. --expand-star-imports 使用未定义名称扩展星号通配符导入,仅在只有一颗星导入时触发文件,如果文件中有 `__all__` 或 `del` 则跳过
  8. --remove-all-unused-imports 删除所有未使用的导入(不仅仅是那些来自标准库)
  9. --ignore-init-module-imports 排除 __init__.py
  10. --remove-duplicate-keys 删除对象中的所有重复键
  11. --remove-unused-variables 删除未使用的变量
  12. --version 显示程序的版本号并退出

如果想忽略某些行的导入移除,可以使用 # noqa 注释

from .endpoints import role , token, user, utils   # noqa

命令行中使用

直接整改文件:autoflake --in-place --remove-unused-variables example.py

输出检查结果不整改文件:autoflake autopep8_test.py

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

yapf

介绍

Yapf 是另一种有自己的配置项列表的重新格式化代码的工具。它与 Autopep8 的不同之处在于它不仅会指出代码中违反 PEP 8 规范的地方,还会对没有违反 PEP 8 但代码风格不一致的地方重新格式化,旨在令代码的可读性更强。

由Google开发维护的格式化工具,目的是让代码更漂亮;它支持很多的自定义选项,适合对自己的代码有特殊格式需求的场景;

yapf并不支持对import进行排序,所以需要使用isort工具。

安装&配置

执行 pip install yapf 安装 Yapf

  1. 可以yapf的格式化配置文件

[yapf]

based_on_style = pep8

spaces_before_comment = 4

split_before_logical_operator = true

based_on_style可以是前面的四种预设格式之一。

yapf有默认的查找格式化配置文件的策略,可以使用参数--no-local-style禁用搜索;查找策略的细节可以查看官方README。

  1. 可以是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命令行工具的参数并不是很多,主要常用的有下面几个:

  1. -d, --diff:打印格式化前后差异
  2. -i, --in-place:原地格式化原文件
  3. -l START-END, --lines START-END:格式化指定行范围
  4. --style STYLE:指定格式化标准

其中--style最为常用,用于指定格式化的标准和自定义选项。可以是一些预设的选项,包括:

  1. pep8(默认值)
  2. google(基于Google Python Style Guide)
  3. yapf(用于Google开源项目的代码风格)
  4. facebook

格式化代码

yapf支持递归处理目录,使用-r参数可以遍历目录及其子目录,使用-e PATTERN或者--exclude PATTERN排除特定文件,比如:

yapf --style=pep8 -r -i --exclude "*_test.py" src/py

格式化代码之后,再使用isort进行imports的排序(当然,也可以先排序imports):

isort --fss --skip-glob "*_test.py" src/py

检查代码是否符合规范

检查代码是否符合规范,可以将yapf的-i参数替换为-d,如果存在不符合规范的内容,则打印出来,并且返回非0,比如:

yapf --style=pep8 -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 优化代码。

参考文档

  1. https://en.wikipedia.org/wiki/Lint_(software)
  2. GitHub - psf/black: The uncompromising Python code formatter

isort

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

介绍

Isort 这个库能将项目中导入的库按字母顺序排序,并将其正确划分为不同部分(例如标准库、第三方库、自建的库等)。这样提高了代码的可读性,并且可以在导入的库较多的时候轻松找到各个库。

文档中还提供了更多的配置项,例如通过配置 .isort.cfg 文件来决定 isort 如何处理一个库的多行导入。

Flake8Pylint 一样,isort 也提供了将其与流行的编辑器和 IDE 集成的插件。

安装&配置

安装:pip install isort

Pycharm中配置isort

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

使用

执行 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 ...。

命令行中对单个文件转换

编写测试代码

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

执行后的效果,可以看出isort并没有把引入但未使用的os做移除

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

Pycharm中执行转换

对单个文件进行转换

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

对整个项目进行转换

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

参考文档

  1. Options:https://pycqa.github.io/isort/docs/configuration/options.html
  2. Profiles:https://pycqa.github.io/isort/docs/configuration/profiles.html
  3. https://github.com/PyCQA/isort
  4. https://github.com/PyCQA/isort/wiki/isort-Plugins

autopep8

介绍

A tool that automatically formats Python code to conform to the PEP8 style guide.

Autopep8 是一个开源的命令行工具,它能够将Python代码自动格式化为PEP8风格(如重新缩进行、修复缩进、删除多余的空格),并重构常见的比较错误(例如布尔值和 None 值),可以查看文档中完整的更正列表

Autopep8使用pycodestyle工具来决定代码中的哪部分需要被格式化,这能够修复大部分pycodestyle工具中报告的排版问题。

安装&配置

安装pip install autopep8

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

  1. Pycharm配置外置工具

Program:                  D:\env36_tornado\Scripts\autopep8.exe

Arguments:               --in-place --aggressive --aggressive $FilePath$

Working directory:     $ProjectFileDir$

Output filters:            $FILE_PATH$\:$LINE$\:$COLUMN$\:.*

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

  1. 如果Arguments仅仅配置成 $FilePath$ 则发现有不符合规范的文件,仅仅输出结果
  2. Arguments配置成 --in-place --aggressive --aggressive $FilePath$ 发现有不符合规范的文件,则会自动进行整改。

使用

--in-place类似于sed命令的-i选项,如果不包含–in-place选项,则会将autopep8格式化以后的代码直接输出到控制台。可以使用这种方式检查autopep8的修改,使用–in-place则会直接将结果保存到源文件中,将不会有任何输出,autopep8会直接修改源文件。

autopep8还存在--aggressive选项,这会执行更多实质性地更改,可以多次使用--aggressive,以达到更佳的效果。

  1. 命令行中针对单个指定文件

autopep8.exe --in-place --aggressive --aggressive <filename>

autopep8 --in-place --aggressive --aggressive autopep8.py

autopep8 --in-place --aggressive --aggressive 就可以重新格式化你的代码。aggressive 选项的数量表示 Auotopep8 在代码风格控制上有多少控制权。在这里可以详细了解 aggressive 选项。

  1. Pycharm中执行格式化

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

Pycharm编辑区域右击中选择autopep8

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

格式化后的效果,库的排列顺序还是没有做排序,以及引用但未使用的os库也没有去掉,可以考虑使用isort再次进行整改。

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

autopep8对目录进行扫描报:[Errno 13] Permission denied

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

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,则设置如下:

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

参考文档

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

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

 输入才有输出,吸收才能吐纳。——码字不易Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)文章来源地址https://www.toymoban.com/news/detail-408383.html

到了这里,关于Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 低代码企业级PMO项目管理系统,360度全景透视企业管理视角

    在一个崇高的目标支持下,不停地工作,即使慢,也一定会获得成功。   爱因斯坦 企业级PMO项目管理业务是行业里相对成熟和规范的业务,拥有众多商业套件和标准产品。 然而随着企业数字化建设进入深水区,站在甲方角度进行项目管理的业务视角、精细化管控、标准化管

    2024年02月03日
    浏览(47)
  • 云表|低代码开发崛起:重新定义企业级应用开发

    nbsp; nbsp; nbsp; nbsp;低代码开发这个概念在近年来越来越受到人们的关注,市场对于低代码的需求也日益增长。据Gartner预测,到2025年,75%的大型企业将使用至少四种低代码/无代码开发工具,用于IT应用开发和公民开发计划。 nbsp; nbsp; nbsp; nbsp;那么,为什么低代码开发如此受到

    2024年02月08日
    浏览(37)
  • 云表企业级无代码案例-复杂机械ERP管理系统

    云南小松原本有供应商小松中国提供的一个数据管理系统,但是系统很简单,功能不能适时更新,对于企业相关业务管理也兼顾不到,而企业分支机构、人员、车辆、仓库等分布在全省各个角落(有工地的地方可能就有小松的员工),所以传统电子表格、微信、电邮的方式是

    2024年01月25日
    浏览(48)
  • [开源]一款企业级物联网平台低代码开发框架,代码精简,开箱即用

    基于Go 1.20前后端分离架构,代码精简,开箱即用,前端紧随前沿 Vue3.0 + TypeScript + vite3 + Element-plus技术 对前后端进行了大部分功能的封装,后端自封装go-restful,使用起来更加简洁,功能逻辑清晰,能快速上手学习,并用在生产中。 报表大屏设计器: 我们只需要拖拉拽即可绑定

    2024年02月04日
    浏览(43)
  • JeecgBoot 3.5.1 版本发布,开源的企业级低代码平台

    项目介绍 JeecgBoot是一款企业级的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant DesignVue3,Mybatis-plus,Shiro,JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领低代码开发模式(OnlineCoding- 代码生成- 手工MERGE), 帮助解决Java项目70%的重复工作,让开发

    2023年04月23日
    浏览(34)
  • 【企业级SpringBoot单体项目模板 】——Mybatis-plus自动代码生成

    😜 作           者 :是江迪呀 ✒️ 本文 : SpringBoot项目模版 、 企业级 、 模版 ☀️ 每日   一言 : 我们之所以这样认为,是因为他们这样说。他们之所以那样说,是因为他们想让我们那样认为。所以实践才是检验真理的唯一准则。 上回 我们说了一些开发规范

    2024年02月07日
    浏览(34)
  • 企业级PaaS低代码快开平台源码,基于 Salesforce Platform 的开源替代方案

    PaaS低代码快开平台是一种快速开发应用系统的工具,用户通过少量代码甚至不写代码就可以快速构建出各种应用系统。 随着信息化技术的发展,企业对信息化开发的需求正在逐渐改变,传统的定制开发已经无法满足企业需求。低代码开发平台,让开发者可以基于平台快速搭

    2024年02月15日
    浏览(46)
  • 全栈开发前端代码:黑马程序员SpringBoot3+Vue3全套视频教程,springboot+vue企业级全栈开,big-event

    目录 :希望对大家有帮助 ①项目压缩包: 1.要启动的指令:可以参考下面的文件 ①登录、注册页面 srcviewsloginLoginPage.vue srcapiuser.js srcstoresmodulesuser.js srcstoresindex.js ②首页实现的页面 srcviewslayoutLayoutContainer.vue srcapiuser.js user下面的小模块:实现改用户信息、图像、

    2024年01月18日
    浏览(41)
  • 阿里云ECS服务器企业级和共享型介绍_企业级常见问题解答FAQ

    阿里云企业级服务器是什么?企业级和共享型有什么区别?企业级服务器具有独享且稳定的计算、存储、网络资源,如ECS计算型c6、通用型g8等都是企业级实例,阿里云百科分享什么是企业级云服务器、企业级实例的优势、企业级和共享型云服务器区别、企业级云服务器ECS都有

    2024年02月12日
    浏览(29)
  • git企业级使用

    1.初始Git 1.1创建Git仓库 要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来。创建⼀个Git本地仓库对应的命令为 git init ,注意命令要在⽂件⽬录下执⾏,例如: 刚创建的git仓库会有一个隐藏文件  .git这个文件不能

    2024年02月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包