Django外部脚本执行django.setup()提示No module named 'api.apps'报错
问题原因
核心是Python模块搜索路径和Django配置的导入路径不匹配:
- 你正常启动Django服务时,执行路径是Django项目根目录(包含
manage.py和api文件夹的database目录),Python默认将当前路径加入搜索路径,因此INSTALLED_APPS中配置的api.apps.ApiConfig可以被正常识别。 - 你运行外部脚本时,将Python路径设置为了更上层的根目录,Django加载配置时会从这个上层目录搜索
api.apps模块,但api文件夹实际存放在下层的database子目录中,自然无法找到。
解决方案
推荐优先调整外部脚本的路径配置,无需修改原有Django项目代码,适配两种运行场景:
在外部脚本初始化Django配置前,手动将api文件夹所在的Django项目根目录(即包含manage.py的database目录)加入Python搜索路径,示例代码如下:
import os import sys # 此处替换为你实际的Django项目根目录(包含manage.py、api文件夹的database目录的绝对路径) DJANGO_PROJECT_ROOT = "/path/to/your/proj/database" sys.path.append(DJANGO_PROJECT_ROOT) os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'database.settings') import django django.setup() # 此时可以直接导入api下的模型,和项目内导入逻辑一致 from api.models import Example
注意:
DJANGO_SETTINGS_MODULE的取值需要和你加入搜索路径的层级对应:
- 若你将上层
proj目录加入搜索路径,此处填database.database.settings- 若你将
proj/database目录(包含manage.py的Django项目根目录)加入搜索路径,此处填database.settings
如果不想修改脚本路径配置,也可以修改database.settings.py中的INSTALLED_APPS配置,将api.apps.ApiConfig调整为带前缀的完整导入路径:
INSTALLED_APPS = [ # 替换为对应路径 'database.api.apps.ApiConfig', # 其余配置保持不变 'django.contrib.admin', 'django.contrib.auth', ... ]
内容的提问来源于stack exchange,提问作者Flintlock
相关产品推荐
相关产品推荐

