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

Django项目同目录模块导入失败问题求助

Django项目中同目录模块导入失败的解决方案

在标准Django项目中,尝试从middleware/utils/request.py导入同目录下的compare.py时遇到多种导入错误,项目目录结构如下:

|--middleware/
|  |--utils/
|  |  |--compare.py
|  |  |--request.py
|  |--__init__.py
|  |--asgi.py
|  |--settings.py
|  |--urls.py
|  |--views.py
|  |--wsgi.py
|--manage.py

middleware/views.py中from .utils.request import requests可正常运行,但request.py内的多种导入尝试均失败:

from compare import compare # ModuleNotFoundError: No module named 'compare'
from .compare import compare # Pylint警告Attempted relative import beyond top-level package,运行也报错
from utils.compare import compare # ModuleNotFoundError: No module named 'utils'
from .utils.compare import compare # ModuleNotFoundError: No module named 'middleware.utils.utils'

正确导入方式

方式1:相对导入(同目录优先推荐)

在request.py中使用同目录相对导入:

from .compare import compare

解决Pylint警告

如果Pylint提示“Attempted relative import beyond top-level package”,在项目根目录创建.pylintrc文件,添加以下配置:

[MASTER]
init-hook='import sys; sys.path.insert(0, ".")'

这会让Pylint识别项目根目录,消除错误警告。

方式2:绝对导入(更清晰,无Pylint问题)

利用Django启动时将项目根目录加入sys.path的特性,使用完整模块路径导入:

from middleware.utils.compare import compare

错误原因分析

  • from compare import compare:Python会在全局sys.path中查找compare模块,而middleware/utils不在全局路径内,因此找不到。
  • from .utils.compare import compare:当前模块所在包为middleware.utils,.utils会解析为middleware.utils.utils,不存在该子目录,导致错误。
  • from utils.compare import compare:全局路径中没有独立的utils模块,必须加上应用前缀middleware才能定位到目标模块。

内容的提问来源于stack exchange,提问作者André Kuljis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:50:28