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

Pylint递归扫描Bug:目录名互为前缀时出现异常

Pylint在目录名前缀冲突时的异常行为原因解析

问题场景

当项目中存在一个带__init__.py的合法Python包目录,且另一个目录名以该包名作为前缀时,Pylint会出现异常:本该检测到的代码问题(如未使用的导入)被遗漏。

复现步骤

mkdir pylint_test
cd pylint_test
mkdir dataset
touch dataset/__init__.py
mkdir dataset_123
echo "from collections import Counter" > dataset_123/a.py
echo "[master]\nenable= all" > pylintrc
pylint --recursive=y .

执行后未检测到a.py中未使用的Counter导入,不符合预期。

对比验证

  1. 移除dataset/__init__.py后,重新执行扫描:
pylint --recursive=y .

得到正常检测结果:

************* Module a
dataset_123/a.py:1:0: C0114: Missing module docstring (missing-module-docstring)
dataset_123/a.py:1:0: W0611: Unused Counter imported from collections (unused-import)
  1. 重命名目录为eval和eval_123(保留eval/__init__.py),扫描正常工作。

  2. 重命名dataset_123为dataset_b123(保留dataset/__init__.py),扫描也能正常报告问题。

原因分析

这是Pylint内部模块扫描逻辑的bug:
当存在带__init__.py的合法包(如dataset),且另一目录名满足[包名]_数字格式(如dataset_123)时,Pylint的递归扫描会错误地将该目录与前置包关联,没有将其下的.py文件识别为独立模块,从而跳过了代码检查。

而当目录后缀为字母开头(如dataset_b123),或前置目录不是合法包(无__init__.py)时,Pylint的扫描逻辑不会触发该bug,能正常识别所有模块。

环境信息

  • 系统:Mac Ventura 13.4.1
  • 版本:
pylint --version
pylint 2.15.2
astroid 2.13.5
Python 3.8.13 (default, Oct 19 2022, 17:52:09)
[Clang 12.0.0 ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:47:19