django .setup () не находит мой Django проект - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь написать более сложный скрипт, чтобы заполнить мой 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, et c ... и выполняется в пределах venv для проекта django.

Почему не удается найти мой проект при выполнении django .setup ()?

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Нашел ответ здесь: Как сделать скрипт для вставки данных в мою базу данных sqlite3 по умолчанию 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()
0 голосов
/ 12 апреля 2020

Мое первоначальное предположение, поскольку это moduleNotFoundError, заключается в том, что вы используете отображаемое имя вашего проекта вместо имени lib. Попробуйте перейти на строчные буквы «myproject.settings».

...