Мой settings.py вызывается 4 раза - есть идеи почему? - PullRequest
2 голосов
/ 18 марта 2011

Когда я запускаю локальный сервер разработчика (./manage runserver), файл settings.py запускается четыре раза. Я заметил это, потому что сообщение об ошибке / отладке напечатано четыре раза.

Есть идеи, как это может прийти? Я даже не представляю, с чего начать. Это важно для меня, потому что я борюсь с настройкой Sentry, которая не сообщает об ошибках сайта так, как он установлен сейчас.

Обновление:
Я проверил импортированный модуль на import settings, в моих приложениях его нет.

Тогда я добавил

import traceback; traceback.print_stack(); print

в settings.py. Результат:

File "./manage.py", line 5, in <module>
  import settings # Assumed to be in the same directory.
File "(...)/myapp/settings.py", line 4, in <module>
  import traceback; traceback.print_stack(); print

File "./manage.py", line 12, in <module>
  execute_manager(settings)
(...)
File "(...)/site-packages/django/conf/__init__.py", line 73, in __init__
  mod = importlib.import_module(self.SETTINGS_MODULE)
File "(...)/site-packages/django/utils/importlib.py", line 35, in import_module
  __import__(name)
File "(...)/myapp/../myapp/settings.py", line 4, in <module>
  import traceback; traceback.print_stack(); print

File "./manage.py", line 5, in <module>
  import settings # Assumed to be in the same directory.
File "(...)/myapp/settings.py", line 4, in <module>
  import traceback; traceback.print_stack(); print

File "./manage.py", line 12, in <module>
  execute_manager(settings)
(...)
File "(...)/site-packages/django/conf/__init__.py", line 73, in __init__
  mod = importlib.import_module(self.SETTINGS_MODULE)
File "(...)/site-packages/django/utils/importlib.py", line 35, in import_module
  __import__(name)
File "(...)/myapp/../myapp/settings.py", line 4, in <module>
  import traceback; traceback.print_stack(); print

Это предполагаемое поведение? Если нет, как я могу найти свою ошибку?

Ответы [ 2 ]

3 голосов
/ 18 марта 2011

Доступ к нему осуществляется через разные записи в sys.path. Вы никогда не должны пытаться импортировать settings самостоятельно; вместо этого импортируйте django.conf.settings.

2 голосов
/ 29 июня 2011

Такое поведение на самом деле происходит в совершенно новых проектах Django 1.3.Когда сервер разработки запускается в первый раз, он выполняет четыре импорта :

$ django-admin.py startproject test_project
$ cd test_project/

# settings.py
print "importing settings.py"
...

$ python manage.py runserver
importing settings.py
importing settings.py
importing settings.py
importing settings.py
Validating models...

0 errors found
Django version 1.3, using settings 'test_project.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Если вы редактируете файл с запущенным сервером разработки, он выполняет только два импорта:

$ touch settings.py

Вывод:

importing settings.py
importing settings.py
Validating models...

0 errors found
Django version 1.3, using settings 'test_project.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Я не уверен, почему это происходит, или если это происходит на серверах, не предназначенных для разработки.Но поведение кажется нормальным.


Если вы отслеживаете импорт в файле settings.py, он не сохраняет значения при множественном импорте:

# settings.py
import_count = 0
import_count += 1
print "import count: %d" % import_count

Новый запуск:

$ python manage.py runserver
import count: 1
import count: 1
import count: 1
import count: 1
Validating models...

Изменен файл:

import count: 1
import count: 1
Validating models...

Так что, возможно, это просто чтение файла для его настройки и проверка того, что все в порядке, прежде чем импортировать его в последний раз и фактически использоватьэто?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...