Django wsgi.py не может инициализировать модуль настроек: "ModuleNotFoundError: No module named 'config'"

Моя среда Django dev работает нормально с родным сервером, но когда я пытаюсь выполнить wsgi.py, либо локально, либо на рабочем сервере, я получаю чрезвычайно популярную ошибку ModuleNotFoundError: No module named 'config'.

Отслеживание предполагает, что сбой происходит, когда django/core/wsgi.py пытается выполнить django.setup(set_prefix=False), а этот метод должен вызвать settings.[ANYTHING], в данном случае configure_logging(settings.LOGGING_CONFIG, settings.LOGGING).

Вызов переменной settings.LOGGING_CONFIG указывает django.conf.settings на инициализацию, но в данном контексте это не удается:

Traceback (most recent call last):
  File "./config/wsgi.py", line 35, in <module>
    application = get_wsgi_application()
  File "C:\...\anaconda\envs\venvname\lib\site-packages\django\core\wsgi.py", line 12, in get_wsgi_application
    django.setup(set_prefix=False)
  File "C:\...\anaconda\envs\venvname\lib\site-packages\django\__init__.py", line 18, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "C:\...\anaconda\envs\venvname\lib\site-packages\django\conf\__init__.py", line 82, in __getattr__
    self._setup(name)
  File "C:\...\anaconda\envs\venvname\lib\site-packages\django\conf\__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "C:\...\anaconda\envs\venvname\lib\site-packages\django\conf\__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "C:\...\anaconda\envs\venvname\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'config'

Соответствующие части моей структуры каталогов выглядят следующим образом:

parent-folder/
  config/
    __init.py__
    wsgi.py
    settings/
      local.py
      production.py
  projectname/
    

Мой wsgi.py файл выглядит следующим образом:

import os
import sys
from pathlib import Path

from django.core.wsgi import get_wsgi_application

ROOT_DIR = Path(__file__).resolve(strict=True).parent.parent
sys.path.append(str(ROOT_DIR / "projectname"))

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production")

application = get_wsgi_application()

Я подозреваю, что это что-то, что я могу исправить с помощью однострочного изменения пути или ссылки на модуль, но до сих пор ничего не помогло. Любая помощь будет высоко оценена.

В файле wsgi.py модуль настроек имеет значение "config.settings.production", это означает, что каталог настроек должен быть модулем. Поэтому добавьте пустой init в каталог settings, как и в каталог config, чтобы решить проблему.

Комментарий Разенштейна является правильным ответом: "вам просто нужно добавить родительскую папку в sys.path так же, как вы это делаете для папки projectname." В моем пути отсутствовала вложенная папка.

Вернуться на верх