Django - настройки, похоже, кэшируются в неизвестном месте; как и где очистить python/django?

Я не могу запустить свой сервер Django после реструктуризации проекта в разные подпапки. Ошибка: "No module named..." для имени приложения, которое просто неверно в сообщении об ошибке, но не неверно в файле настроек. Я попытался удалить все приложения, кроме приложений по умолчанию, из "INSTALLED_APPS" в настройках. Ничего не изменилось. Поэтому я изменил файлы самого пакета Django следующим образом:

  • в django/apps/registry.py я добавил print(installed_apps)
  • в django/__init__.py я добавил print(settings)

С удивительными результатами. Настройки распечатались, как и ожидалось: он показал правильный "путь" к моему файлу настроек. Однако переменная installed_apps вернула список установленных приложений, который был старым списком установленных приложений. Когда я добавляю или удаляю записи из моего файла настроек и повторно запускаю сервер, результат не меняется. Django, похоже, где-то "кэширует" переменную INSTALLED_APPS - и я не могу найти, где и почему.

Интересно, я исследовал дальше: Я больше не использую один файл настроек. После реструктуризации проекта я создал папку "settings", включающую файлы _base.py со всеми основными настройками, prod.py, dev.py и __init__.py. prod.py и dev.py в настоящее время просто включают from _base import * и все. __init__.py просто содержит from .prod import *.

В моем manage.py файле я установил путь только к папке "settings". При печати переменной настроек django/__init__.py она правильно возвращает путь, указанный в файле manage.py с добавлением ".prod", исходящий из моей новой папки настроек __init__.py файла.

Так что все вроде бы работало. Теперь я изменил свой файл settings/__init__.py и установил его в from .dev import *. Но оператор print внутри django/__init__.py по-прежнему возвращает "старый" путь к файлу prod.py. Значит, каким-то образом это тоже кэшируется.

Django, похоже, кэширует мой путь к настройкам и файл настроек, игнорируя __init__ файлы в пакетах в целом после того, как они были запущены хотя бы один раз в какой-то момент в прошлом. Но я просто не могу найти, где и как. Я использую PyCharm и просмотрел все файлы и каталоги, включая мои venv и скрытые файлы. Никаких следов.

Как найти и удалить кэшированные файлы и где/почему django кэширует здесь? Или это вообще django или что-то другое вызывает это?

Примечание: Я также пробовал

from django.core.cache import cache
cache.clear()

Ничего не изменилось. Я также не могу найти нигде директорию __pycache__ или какие-либо другие временные файлы.

Редактирование: Структура папки:

  • src
    • mydjangoproject
      • __init__.py
      • apps
        • news
        • blog
      • templates
      • настройки
        • __init__.py
        • prod.py
        • dev.py
        • _base.py
    • manage.py

Содержание manage.py: все по умолчанию, кроме строки 9: os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mydjangoproject.settings')

Выдержка из моего файла настроек `_base.py':

INSTALLED_APPS = [
    # Django apps
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # External apps
    #'tinymce',
    #'django_tex',
    # Custom apps
    'news',
    'blog',
]

Выход django/apps/registry.py -> print(installed_apps): ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', newspaper, blogsite]

Ожидаемый результат (поскольку "newspaper" и "blogsite" были приложениями, которые были переименованы; apps.py был скорректирован соответствующим образом): ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', news, blog]

Выход django/__init__.py Я добавил print(settings): mydjangoproject.settings.prod

Ожидаемый результат: mydjangoproject.settings.dev

Потому что файл settings/__init__.py был изменен с from .prod import * на from .dev import *

Полное сообщение об ошибке при выполнении python manage.py runserver:

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 'mydjangoproject.apps.newspapermydjangoproject'

(Это скопировано правильно: Я не знаю, почему в конце строки стоит дополнительный "mydjangoproject". Это также возвращается, когда django перебирает переменную entry в своем config init.)

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