Компиляция Django в pyc и запуск сервера
Ок, так что я бегу
python -m compileall .
Как бы то ни было, сгенерированные файлы находятся в pycache
manage.cpython-311.pyc и urls.cpython-311
Моя проблема заключается в том, что когда я запускаю
python manage.cpython-311.pyc runserver
Я продолжаю получать ошибку
File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
File "<frozen importlib._bootstrap>", line 1126, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'settings'
Я не самый умный разработчик django. Однако я был бы признателен, если бы кто-нибудь поделился со мной, как решить эту проблему.
Когда вы запускаете код Python (а он способен на это и не имеет других указаний), интерпретатор компилирует импорты в .pyc
файлы и сохраняет их в __pycache__
папке.
При следующем запуске интерпретатор рассмотрит эти файлы и, если они соответствуют исходному файлу, использует их вместо повторения этапа компиляции.
Файлы __pycache__
не предназначены для прямого запуска, хотя вы можете это сделать. В вашем случае запуск файла из __pycache__
перемещает базу импорта туда, и весь импорт будет провален без дополнительных настроек.
Вызов compileall
вручную выполнит этот шаг компиляции. Это позволяет сэкономить немного времени при первом выполнении. Это полезно в некоторых ситуациях, например при развертывании кода в большом количестве контейнеров, которые, как ожидается, будут иметь короткое время жизни. В большинстве случаев это не стоит затраченных усилий.
Заключение: Запустите исходный файл (.py
) и позвольте механизму кэширования выполнять свою работу в фоновом режиме.