1. 确认项目目录结构
假设你的项目结构如下(重点检查目录层级和命名):
(这里我的项目必须使用兄弟目录结构,根据自己项目需求来)
project_root/ # 项目根目录 ├── app/ # 主应用目录(兄弟目录) │ ├── __init__.py │ └── models.py # 需要导入 BaseModel └── utils/ # 工具目录(兄弟目录) ├── __init__.py └── base_models.py # 包含 BaseModel 类
2. 错误原因分析
-
Python 路径未包含项目根目录:默认情况下,Python 只会在当前脚本所在目录和已安装的包路径中搜索模块。
-
缺少
__init__.py
:若utils
或app
目录下没有__init__.py
,Python 不会将其视为包。 -
IDE 配置问题:某些 IDE 未将项目根目录标记为源代码根目录。
3. 解决方案
使用相对导入
如果 app
和 utils
是同一父包下的子包,可以用相对导入(需确保目录是包):
python
# app/models.py from ..utils.base_models import BaseModel # 注意:两个点表示父目录
注意:我使用
from utils.base_models import BaseModel
则会报错,需要加上"..",使用相对导入则成功
——————————更新——————————
使用Django项目的时候, Django 运行时,会将项目主目录(bysms
)视为顶级包,而 users
和 utils
可能未被正确识别为子包。
这里可以先验证(我验证之后确实生效了,但是代码上仍然报错)
4.验证导入是否实际生效
在 Django Shell 中手动测试:
bash
python manage.py shell
python
>>> from utils.base_models import BaseModel >>> print(BaseModel) # 应输出 <class 'utils.base_models.BaseModel'>
5. IDE 配置问题
PyCharm/VSCode 无法识别引用
-
步骤 1:标记项目根目录为源码根目录。
-
PyCharm:右键项目根目录 → Mark Directory as → Sources Root。
-
VSCode:在项目根目录创建
.vscode/settings.json
:json
{ "python.analysis.extraPaths": ["./"] }
-
-
步骤 2:重建 IDE 索引。
-
PyCharm:File → Invalidate Caches → Invalidate and Restart。
-
VSCode:重启编辑器或执行命令 Developer: Reload Window。
-
这里我设置了一下根路径就不报错了! !!感谢
后来我发现可以启用 Django 支持,会自动配置,但是需要更高级pycharm的且需要付费,如果有需要的伙伴可以试试