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

Django中settings.py无法导入本地模块,为何报错?

Django模块导入失败的原因及解决办法

问题场景

你的项目目录结构如下:

git/src
├── myproject
│   ├── settings.py
│   ├── mysharedlib.py
│   └── urls.py
└── www
    ├── myotherlib.py
    ├── urls.py
    └── views.py

在settings.py中执行import mysharedlib时抛出异常:

ModuleNotFoundError: No module named 'mysharedlib'

从views.py导入myotherlib时也出现同类错误。

核心原因

Python的模块查找依赖sys.path列表,Django启动时默认会把项目根目录(即git/src)加入sys.path。但你尝试导入的mysharedlib、myotherlib分别在myproject、www子目录下,直接用import 模块名的绝对导入方式,Python会在sys.path的顶级目录中查找,找不到对应模块,因此报错。

解决方法

方法1:使用相对导入(推荐)

同目录模块间用相对导入,符合Python包设计规范:

  • 在settings.py中导入mysharedlib:
    from . import mysharedlib
    
  • 在views.py中导入myotherlib:
    from . import myotherlib
    

方法2:使用完整路径的绝对导入

指定模块所在的完整包路径导入:

  • 在settings.py中:
    import myproject.mysharedlib as mysharedlib
    
  • 在views.py中:
    import www.myotherlib as myotherlib
    

方法3:手动添加目录到sys.path(不推荐)

通过代码将模块所在目录加入Python查找路径,仅作临时方案(会破坏包结构规范):
在settings.py开头添加:

import sys
from pathlib import Path

# 将当前文件所在目录(myproject)加入sys.path
current_dir = Path(__file__).resolve().parent
sys.path.append(str(current_dir))

之后即可正常使用import mysharedlib。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:57:07