Django导入外部自定义包报错:找不到模块或非包问题求助
解决Django导入外部自定义包的问题
核心问题分析
你遇到的报错本质是Python无法识别这些外部目录为合法包,同时sys.path的配置方式和导入路径不匹配。
具体解决步骤
1. 将外部目录转为合法Python包
在manage_db和g两个目录下,分别创建一个空的__init__.py文件(文件名前后各两个下划线)。Python只有检测到该文件,才会把对应目录识别为可导入的包。
2. 修正sys.path的配置逻辑
你当前把两个包的自身目录添加到sys.path,这会导致Python将它们视为模块搜索的根目录,和你的导入路径冲突。正确做法是把这两个包的父目录添加到sys.path:
# settings.py中替换原有代码 import os import sys from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent # 获取外部包所在的父目录 external_root = BASE_DIR.parent.parent sys.path.append(str(external_root))
这样Python就能在external_root目录下找到manage_db和g这两个包。
3. 保持原有导入语句即可
修正sys.path后,你原来的导入语句是正确的,无需修改:
from g.globals import Globals from manage_db.execute_get_symbols import get_symbols
可选:验证路径正确性
如果仍报错,可在settings.py中打印路径确认是否正确:
print(f"External packages root: {external_root}") print(f"Does manage_db exist? {os.path.exists(os.path.join(external_root, 'manage_db'))}") print(f"Does g exist? {os.path.exists(os.path.join(external_root, 'g'))}")
运行Django项目时查看控制台输出,确认路径指向的是正确目录。
内容的提问来源于stack exchange,提问作者Django
相关产品推荐
相关产品推荐

