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

采用src布局时Pylint检测tests目录报import-error如何解决?

问题描述

项目采用src布局,目录结构如下:

src
├── packagename
│   ├── __init__.py
│   └── subpackage
│       ├── __init__.py
│       └── somemodule.py
└── .pylintrc
tests
├── subpackage
│   ├── __init__.py
│   └── test_somemodule.py
├── __init__.py
└── .pylintrc
pyproject.toml

通过tests/.pylintrc的宽松规则检测测试代码,非src布局下无问题。已在pyproject.toml中配置pytest的Python路径,确保测试可正常运行:

[tool.pytest.ini_options]
pythonpath = [
  "src"
]

但执行以下Pylint命令时,出现E0401: Unable to import 'packagename.subpackage' (import-error)错误:

pylint --rcfile src/packagename/.pylintrc -j 0 src
pylint --rcfile tests/.pylintrc -j 0 tests
解决方案

方法1:执行命令时临时添加Python路径

在检测tests目录的Pylint命令中,通过--init-hook参数将src目录加入Python搜索路径:

pylint --rcfile tests/.pylintrc -j 0 --init-hook "import sys, os; sys.path.insert(0, os.path.abspath('src'))" tests

方法2:在tests目录的Pylint配置中永久设置路径

修改tests/.pylintrc,在[MASTER]段添加初始化钩子,自动加载src路径:

[MASTER]
init-hook = import sys, os; sys.path.insert(0, os.path.abspath('../src'))

之后执行原命令即可正常检测,无需额外参数。

方法3:通过pyproject.toml统一配置Pylint路径

在pyproject.toml中添加Pylint全局配置,适用于所有检测场景:

[tool.pylint.main]
init-hook = "import sys, os; sys.path.insert(0, os.path.abspath('src'))"

注:若src和tests需使用不同的Pylint规则,方法2的针对性配置更适配需求。

原因说明

Pylint不会自动识别src布局的Python路径,而pytest可通过pyproject.toml的pythonpath配置自动加载src目录。因此需要手动将src目录加入Python搜索路径,让Pylint能找到被测试的包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:20:40