You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置pylint/flake8对外部库特定符号的使用触发告警

导入限制配置方案

以下分别提供flake8和pylint两种实现方案,均为静态检查规则,不需要修改运行时代码,也不需要monkey patching。

flake8 配置方法

使用flake8-import-restrictions插件实现精准导入限制:

  • 安装插件
    pip install flake8-import-restrictions
  • 在项目根目录的.flake8配置文件中添加如下规则:
[flake8]
import-restrictions =
    deny django.contrib.auth.decorators.login_required,
    deny from django.contrib.auth.decorators import login_required,
import-restriction-message = 禁止使用Django默认的login_required,请使用项目自定义的对应实现

将提示内容中的自定义实现路径替换为你项目实际的导入路径即可。配置生效后,所有导入Django原生login_required的代码都会触发告警,可自行调整规则级别为错误来阻断CI流程。

pylint 配置方法

pylint可以通过自定义轻量检查器实现需求,不需要额外安装第三方插件:

  • 首先在项目中新建自定义检查器文件,路径为pylint_plugins/forbid_imports.py,内容如下:
from pylint.checkers import BaseChecker
from pylint.interfaces import IAstroidChecker

class ForbidDjangoLoginRequiredChecker(BaseChecker):
    __implements__ = IAstroidChecker
    name = 'forbid-django-login-required'
    priority = -1
    msgs = {
        'E9001': (
            '禁止使用Django默认的login_required,请使用项目自定义的xxx.login_required',
            'forbidden-django-login-required',
            '不允许调用原生Django的login_required装饰器'
        ),
    }

    def visit_importfrom(self, node):
        if node.modname == 'django.contrib.auth.decorators':
            for name, _ in node.names:
                if name == 'login_required':
                    self.add_message('forbidden-django-login-required', node=node)

    def visit_import(self, node):
        for name, _ in node.names:
            if name == 'django.contrib.auth.decorators.login_required':
                self.add_message('forbidden-django-login-required', node=node)

def register(linter):
    linter.register_checker(ForbidDjangoLoginRequiredChecker(linter))
  • 然后在pylint配置文件(pylintrc或pyproject.toml)中添加插件加载配置,以pyproject.toml为例:
[tool.pylint.master]
load-plugins = ["pylint_plugins.forbid_imports"]

配置完成后pylint扫描代码时,只要命中导入规则就会抛出对应错误。

内容的提问来源于stack exchange,提问作者Zulan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:06:02