Несуществующая пользовательская ошибка ModuleNotFound при развертывании Django на Apache24

Проблема

У меня есть развертывание Django с Apache24, которое ранее работало, как и ожидалось, с именем проекта django "API_Materials". Однако, когда я попытался создать новые миграции с помощью команды python manage.py makemigrations, с которой раньше никогда не возникало проблем, я получил следующий stacktrace:

(venv) C:\API\BD_API_Materials>python manage.py makemigrations
Traceback (most recent call last):
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\core\management\base.py", line 412, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\core\management\base.py", line 453, in execute
    self.check()
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\core\management\base.py", line 485, in check
    all_issues = checks.run_checks(
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\core\checks\registry.py", line 88, in run_checks
    new_errors = check(app_configs=app_configs, databases=databases)
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\core\checks\urls.py", line 36, in check_url_namespaces_unique
    if not getattr(settings, "ROOT_URLCONF", None):
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\conf\__init__.py", line 102, in __getattr__
    self._setup(name)
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\conf\__init__.py", line 89, in _setup
    self._wrapped = Settings(settings_module)
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\conf\__init__.py", line 217, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "C:\Program Files\Python310\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 992, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'MaterialsAPI'

Модуль, который пытался использовать проект, называется "MaterialsAPI", а проект - "API_Materials". Однако "MaterialsAPI", скорее всего, является пользовательским именем, созданным для этого проекта, однако этот текст не существует ни в одном существующем файле проекта.

Отладка

Сначала я попробовал вернуться "назад во времени" с помощью команды git reset --hard с внешней резервной копией текущей ситуации, но это не устранило проблему. Пока я пытался проверить, является ли это специфичным для команды makemigrations, я попробовал проверить несуществующую команду makemigration, но ошибка по-прежнему сохранялась:

(venv) C:\API\BD_API_Materials>python manage.py makemigration
Traceback (most recent call last):
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\core\management\__init__.py", line 255, in fetch_command
    app_name = commands[subcommand]
KeyError: 'makemigration'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\API\BD_API_Materials\manage.py", line 22, in <module>
    main()
  File "C:\API\BD_API_Materials\manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\core\management\__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\core\management\__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\core\management\__init__.py", line 262, in fetch_command
    settings.INSTALLED_APPS
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\conf\__init__.py", line 102, in __getattr__
    self._setup(name)
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\conf\__init__.py", line 89, in _setup
    self._wrapped = Settings(settings_module)
  File "C:\Users\afonso.campos\Desktop\BD_API_Materials\API\venv\lib\site-packages\django\conf\__init__.py", line 217, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "C:\Program Files\Python310\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 992, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'MaterialsAPI'

Анализируя трассировку стека, казалось, что ошибка возникает из-за того, что он существует в секции INSTALLED_APPS в settings.py, но это было не так.

INSTALLED_APPS = [
    'corsheaders',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'API_Materials.apps.ApiMaterialsConfig',
    'rest_framework',
    'rest_framework.authtoken',
    'django_extensions',
    'drf_yasg',
    'cryptographic_fields'
]

При дальнейшей отладке я заметил, что каталог изменился в середине выполнения (раньше это был " C:\API\BD_API_Materials\ ", правильный каталог для проекта, а затем перешел к определенному пользователю. Возможно, это произошло из-за настройки apache, которая использовала неправильный каталог виртуального окружения, но я попытался изменить его и перезапустить сервер Apache, что все равно не помогло. Однако в этом неправильном каталоге слово "MaterialsAPI" по-прежнему не существовало, как и в этой среде.

Если посмотреть на переменные окружения перед строкой, вызывающей ошибку settings.INSTALLED_APPS, то текст "MaterialsAPI" был найден, причем в неправильном каталоге:

environ({
...
'VIRTUAL_ENV': 'C:\\Users\\afonso.campos\\Desktop\\BD_API_Materials\\API\\venv',
'DJANGO_SETTINGS_MODULE': 'MaterialsAPI.settings'
...
})

Затем я пытаюсь "принудительно" внести изменения в виртуальную среду, однако при выполнении команды manage.py они возвращаются к своим "неправильным" значениям.

И наконец, эта ошибка не возникает, когда я тестирую проект локально в другой среде.

Ну, это неловко... Судя по всему, в файле django manage.py была строка os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MaterialsAPI.settings'), но не локально, а только на git и в deployment. Это почему-то прошло мимо проверки в Visual Studio Code на проверку "MaterialsAPI" в любом файле внутри проекта. Я не знаю, когда произошло это изменение, так как локальный проект никогда не жаловался на это.

Переход на os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'API_Materials.settings') решил проблему, вернув исходное имя проекта "API_Materials".

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