本文详解如何在 django 项目外部(如独立 python 脚本)正确初始化 django 环境并成功导入自定义 app(如 `model_db`),解决 `modulenotfounderror: no module named 'model_db'` 核心问题。
在 Django 5.x 中,若需在项目外(例如 main.py)直接使用 Django ORM(如执行数据库查询、模型操作),必须完整模拟 Django 项目的运行上下文——这不仅包括调用 django.setup(),更关键的是确保 Python 解释器能正确识别项目根目录、定位 settings.py,并成功导入已注册的 App 模块(如 model_db)。你遇到的 ModuleNotFoundError: No module named 'model_db' 并非配置遗漏,而是典型的 Python 模块路径与 Django 应用发现机制不匹配问题。
请将 main.py 改写为以下标准模式(适配你的目录结构):
import os import sys import django from django.conf import settings # Step 1: 定位到 Django 项目根目录(即 manage.py 所在目录) # 假设 main.py 位于项目根目录(与 DATABASE/ 同级) DJANGO_ROOT = os.path.join(os.path.dirname(__file__), "DATABASE", "Django_ORM") sys.path.append(DJANGO_ROOT) # 让 Python 能 import Django_ORM.settings # Step 2: 设置环境变量,指定 settings 模块路径(注意:是 Python 导入路径,不是文件路径!) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Django_ORM.settings") # Step 3: 初始化 Django(此时会自动加载 settings 并扫描 INSTALLED_APPS) django.setup() # ✅ 现在可以安全导入 model_db 中的模型 from model_db.models import YourModel # 注意:直接 from model_db import models 也可,但推荐按需导入具体模型 # 示例:执行简单查询 if __name__ == "__main__": print("Django ORM initialized successfully.") print("All models:", [m.__name__ for m in django.apps.apps.get_models()])
# 在 django.setup() 后添加
from django.apps import apps
print("Registered apps:", [app.name for app in apps.get_app_configs()])
print("model_db loaded?", apps.ready and apps.is_installed('model_db'))遵循以上方案,即可彻底解决外部脚本中 Django ORM 模块导入失败的问题,实现干净、可维护、符合 Django 官方推荐实践的独立 ORM 使用方式。