Python 代码质量分析与优化工具pylint、black、Ruff,代码检查、分析优化、格式化、漏洞扫描、类型检查、import整理、找出未使用代码,以及在pycharm、vscode 如何配置

一、背景

  • 代码像垃圾一样,混乱、不可读、难维护
  • 缩进乱、命名怪、满屏红色警告
  • 程序流程不清,跳转随意,难以理解
  • 屎一样代码,结构混乱、层层嵌套
  • 实在难以下咽,噎人

这篇讲了8个代码优化工具,像保证代码写的像诗歌一样

名称主要功能特点
ruff代码检测、简化、优化极快、支持 pyproject.toml,可替代 flake8 + isort + autopep8 + pylint 部分功能
pylint最全面的静态分析规则最丰富,检出率高,可自定义插件,速度较慢
black自动格式化代码零配置、风格统一、不可微调,“所见即所得”
isort自动整理 import 语句支持按字母/长度分组、与 black 无缝配合
mypy静态类型检查基于 PEP 484/561,渐进式类型系统,可集成 CI
flake8轻量级代码风格检查组合 pyflakes + pycodestyle + mccabe,插件生态丰富
autopep8自动修复 PEP 8 错误直接按 PEP 8 规则修正格式,保守无侵入
vulture找出未使用代码检测死代码、未导入/未调用的函数与变量
bandit安全漏洞扫描专注常见安全问题(如 exec、assert、硬编码密钥等)

二、ruff 代码检测、代码简化、优化工具

  • 提升代码质量和可维护性
  • 发现代码中的错误、不符合规范的地方、潜在 bug 等
  • 工具功能速度推荐用途
    ruff✅ lint + ✅ format⚡⚡⚡ 极快✅ 新项目首选
    flake8✅ lint🐢 慢❌ 旧项目兼容
    black❌ lint✅ format🔄 可被 ruff format 替代
    isort❌ lint✅ sort imports✅ 已集成进 Ruff
    pylint✅ lint(更严格)🐌 很慢🟡 复杂项目仍可用
Ruff —— 优雅Python代码的秘密
  • 功能:核心功能包括代码格式化和静态错误检查(即Linter)

    特性说明
    📦 类型Python 静态分析工具(linter)
    ⚡ 语言用 Rust 实现,性能极高
    ✅ 功能替代 flake8 + isort + pyupgrade + pydocstyle
    🎯 定位“Fastest linter out there” —— 极速 linting
  • 核心功能

    代码风格【替代 flake8】: 检查 PEP 8 风格违规(如 E302、W503)
    代码风格【替代 flake8】: 支持超过 100 种规则(来自 flake8 插件生态)
    自动排序 【替代 isort】: import 自动按标准库、第三方、本地模块分组排序
    自动排序 【替代 isort】: 可配置是否启用
    修复问题 【–fix】: ruff check --fix . 自动修复大多数常见问题(如多余空行、import 顺序、括号格式等)
    代码建议【替代 pyupgrade】: 建议将 % 格式化改为 f-string
    代码建议【替代 pyupgrade】: 将 typing.Optional[str] 改为 str | None
    代码建议【替代 pyupgrade】: 删除废弃语法
    忽略特定规则:支持 .ruff.toml 或 pyproject.toml 配置,灵活控制规则

  • 安装:

    # 推荐方式:pip
    pip install ruff
    pip install "ruff[format]"
    
    # 或使用 conda
    conda install -c conda-forge ruff
    
    # 或使用 brew (macOS)
    brew install ruff
    
    # 验证安装
    ruff --version
    
  • 🛠️ 基本使用命令

    功能分类命令说明
    扫描ruff .ruff check .扫描当前目录所有 .py 文件
    扫描ruff check main.py扫描单个文件
    修复ruff check --fix .自动修复可修复的问题
    实验性功能ruff check --preview .启用实验性规则(如新的安全检测)
    修复ruff src --fix修复某个文件夹中的所有文件
    修复ruff src/**/*.py --fix修复 src 文件夹下的所有 .py 文件
    规则控制ruff . --select F401只检查指定的规则(如未使用的导入)
    规则控制ruff . --ignore E501忽略指定的规则(如行宽限制)
    规则控制ruff check . --select E,F只检查指定的规则(如 E 代表 PEP 8 错误,F 代表 Pyflakes 错误)
    规则控制ruff check . --ignore E501,W605忽略特定规则(如行长限制 E501 和原始字符串警告 W605)
    信息显示ruff check . --show-source显示问题代码片段,帮助定位问题所在的代码行
    信息显示ruff check . --show-fixes显示自动修复建议的前后对比
    信息显示ruff check . --statistics按问题类型统计数量(如 E301 出现次数 5 次)
    输出格式ruff check . --output-format=json以 JSON 格式输出结果,便于机器解析(适合 CI/CD 集成)
    配置管理ruff check . --config=pyproject.toml使用指定的配置文件路径(默认自动查找)
    缓存管理ruff check . --no-cache禁用缓存,强制重新扫描代码(用于调试)
    排除目录ruff check . --exclude migrations/ --extend-exclude tests/排除特定目录(如数据库迁移、测试代码)
    格式化ruff format .格式化代码(需安装 ruff[format])⚠️ 见下文
    格式化ruff format . --check检查哪些文件需要格式化,而不实际修改文件(常用于 CI/CD 流程)
    格式化ruff format . --diff显示格式化后的差异以预览修改内容
    格式化ruff format main.py app/格式化指定文件和目录
    格式化ruff format . --config=.ruff.toml使用自定义配置文件进行格式化
    规则说明ruff rule E302查看指定规则的详细说明(如 E302: expected 2 blank lines
    规则说明ruff linter列出所有支持的规则代码(可结合 grep 过滤)
    缓存管理ruff clean清除 Ruff 内部缓存(用于解决可能的缓存问题)
    工作目录ruff --work-dir /path/to/dir指定 Ruff 执行时的工作目录
    文件类型ruff check --type py指定要检查的文件类型(假设 Ruff 支持)
    输出详细ruff --verbose启用详细输出模式,提供更多调试信息
  • 配置文件示例(pyproject.toml)

    # pyproject.toml
    [tool.ruff]
    select = [
        "E",   # flake8 错误
        "W",   # 警告
        "F",   # pyflakes
        "I",   # isort
        "UP",  # pyupgrade
        "B",   # bugbear
    ]
    ignore = ["E501"]  # 忽略行长度限制(或用 E402 等)
    
    # 启用 fix(自动修复)
    fixable = ["ALL"]
    unfixable = []
    
    # 行长度
    line-length = 88
    
    # target-version(影响 pyupgrade 规则)
    target-version = "py310"
    

三、代码检测、代码简化、优化工具

2.1 pylint —— 最全面的静态分析工具
  • 功能:检查代码风格、错误、未使用变量、命名规范、模块结构等
  • 安装:
    pip install pylint
    
  • 命令使用:
    pylint your_script.py 检查某个py文件
    pylint ./api/         检查某个文件夹
    

    输出包括评分(如 8.56/10)、问题分类(E=错误, W=警告, C=约定, R=重构建议)

2.2 black —— 自动格式化工具Black
  • 功能:自动格式化代码,符合统一风格(PEP 8)
  • 安装:
    pip install black
    
  • 命令使用:
    blackyour_script.py 检查某个py文件
    black ./api/         检查某个文件夹
    
2.3 isort —— 自动整理 import 语句
  • 功能:按字母顺序排序导入,并分组标准库、第三方库、本地库
  • 安装:
    pip install isort
    
  • 命令使用:
    isort your_script.py 检查某个py文件
    isort ./api/         检查某个文件夹
    
2.4 mypy —— 类型检查工具(Type Checker)
  • 功能:检查类型注解是否正确,提前发现类型相关 bug
  • 安装:
    pip install mypy
    
  • 使用:
    mypy your_script.py
    
  • 示例:
    def add(a: int, b: int) -> int:
        return a + b
    
2.5 flake8 —— 轻量级代码风格检查器
  • 功能:结合了 pyflakes(语法检查)、pep8(风格检查)、mccabe(复杂度检测)
  • 安装:
    pip install flake8
    
  • 使用:
    flake8 your_script.py
    

    适合 CI/CD 中快速检查代码是否符合 PEP 8 规范

2.6 autopep8 —— 自动修复 PEP 8 错误
  • 安装:

    pip install autopep8
    
  • 使用:

    autopep8 --in-place --aggressive your_script.py
    
2.7 vulture —— 找出未使用代码
  • 功能:找出未使用的函数、变量、类等
  • 安装:
    pip install vulture
    
  • 使用:
    vulture your_script.py
    
    vulture myscript.py  # or
    python3 -m vulture myscript.py
    vulture myscript.py mypackage/
    vulture myscript.py --min-confidence 100  # Only report 100% dead code.
    

    帮助“减产”——减少无用代码!

2.8 bandit —— 安全漏洞扫描工具
  • 功能:检测常见的安全问题(如硬编码密码、命令注入、不安全的 eval、pickle等)
  • 安装:
    pip install bandit
    
  • 使用:
    bandit -r your_project/
    
2.9 radonPython 代码质量分析工具
  • 一款强大的 Python 代码度量工具,它能够计算多种代码指标,
    McCabe复杂度,即圈复杂度
    原始指标(包括 SLOC、注释行、空白行等)
    Halstead指标(全部)
    可维护性指数(Visual Studio 中使用的指数)
    适用于 Python 代码质量评估和持续集成等场景。

  • 安装

    $ pip install radon
    
  • $ radon cc sympy/solvers/solvers.py -a -nc
    sympy/solvers/solvers.py
        F 346:0 solve - F
        F 1093:0 _solve - F
        F 1434:0 _solve_system - F
        F 2647:0 unrad - F
        F 110:0 checksol - F
        F 2238:0 _tsolve - F
        F 2482:0 _invert - F
        F 1862:0 solve_linear_system - E
        F 1781:0 minsolve_linear_system - D
        F 1636:0 solve_linear - D
        F 2382:0 nsolve - C
    
    11 blocks (classes, functions, methods) analyzed.
    Average complexity: F (61.0)
    

四、在Pycharm、VsCode 中添加部分检查插件

PyCharm: 在 PyCharm -> Preferences 里找到 工具 -> Black,设置为保存时自动格式化。
PyCharm: 在 PyCharm -> Preferences 里找到 工具 -> Ruff,设置为保存时自动格式化。
PyCharm: 在 PyCharm -> Preferences 里找到 工具 -> Pylint,设置为保存时自动格式化。

VSCode: 使用这个插件,并且在设置-Text Editor-Formatting 里设置为保存时自动Format。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风华浪浪

讨个老婆本呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值