首页 > 解决方案 > django.setup() 找不到我的 Django 项目

问题描述

我正在尝试编写一个伪造的脚本来用一些虚拟数据填充我的 Django 3.0.4 项目,但我在脚本的一开始就卡住了。

如果我运行这个:

import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MyProject.settings')

import django
django.setup()

我收到此错误:

     return _bootstrap._gcd_import(name[level:], package, level)
   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
   File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
   File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
 ModuleNotFoundError: No module named 'MyProject'

该脚本与我的 settings.py、urls.py 等位于同一文件夹中,并且它正在 django 项目的 venv 中执行。

为什么执行 django.setup() 时找不到我的项目?

标签: pythondjangofakerdjango-3.0

解决方案


在这里找到了答案:How to make a script to insert data in my default sqlite3 database django

必须将项目目录附加到 sys.path ,一切都很好。考虑到脚本在该目录中运行,这有点奇怪,但它确实有效。还修改了代码以提取脚本路径,而不是像上面的链接那样对其进行硬编码。

最终代码如下所示:

import os, sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MyProject.settings')

import django
django.setup()

推荐阅读