python - 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() 时找不到我的项目?
解决方案
在这里找到了答案: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()
推荐阅读
- c++ - Static array of static members: possibility of initialization order fiasco
- c - 在处理C中的最后一行数组后循环卡住了
- wordpress - WooCommerce Print Order Confirmation PDF
- javascript - 在 ES 中创建日期对象
- c++ - 无法将元素插入 unordered_set
- java - 批处理中的 PreparedStatement clearParameters()
- php - 通过 Symfony 的表单构建器将新实体保存在按字段索引的一对多关联中
- html - HTML / CSS:按原样打印文档
- laravel - 我如何用 laravelcollective 制作表格?
- github - 在 github 中填充问题的受让人列表