Django My settings.py被调用了4次-知道为什么吗?

Django My settings.py被调用了4次-知道为什么吗?,django,Django,启动本地开发服务器(/manage runserver)时,settings.py会运行四次。我注意到了这一点,因为错误/调试消息被打印了四次 你知道怎么会这样吗?我甚至不知道从哪里开始找。这对我来说很重要,因为我正在与Sentry的设置斗争,它不会以现在的安装方式报告网站的任何错误 更新: 我检查了导入模块的导入设置,我的应用中没有设置 然后我补充说 import traceback; traceback.print_stack(); print 到settings.py。结果是: File

启动本地开发服务器(
/manage runserver
)时,settings.py会运行四次。我注意到了这一点,因为错误/调试消息被打印了四次

你知道怎么会这样吗?我甚至不知道从哪里开始找。这对我来说很重要,因为我正在与Sentry的设置斗争,它不会以现在的安装方式报告网站的任何错误

更新:
我检查了导入模块的导入设置,我的应用中没有设置

然后我补充说

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
文件“/manage.py”,第5行,在
导入设置#假定位于同一目录中。
文件“(…)/myapp/settings.py”,第4行,在
导入回溯;traceback.print_stack();打印
文件“/manage.py”,第12行,在
执行\u管理器(设置)
(...)
文件“(…)/site packages/django/conf/_init__.py”,第73行,在_init中__
mod=importlib.import\u模块(自我设置\u模块)
文件“(…)/site packages/django/utils/importlib.py”,第35行,在导入模块中
__导入(名称)
文件“(…)/myapp/。/myapp/settings.py”,第4行,在
导入回溯;traceback.print_stack();打印
文件“/manage.py”,第5行,在
导入设置#假定位于同一目录中。
文件“(…)/myapp/settings.py”,第4行,在
导入回溯;traceback.print_stack();打印
文件“/manage.py”,第12行,在
执行\u管理器(设置)
(...)
文件“(…)/site packages/django/conf/_init__.py”,第73行,在_init中__
mod=importlib.import\u模块(自我设置\u模块)
文件“(…)/site packages/django/utils/importlib.py”,第35行,在导入模块中
__导入(名称)
文件“(…)/myapp/。/myapp/settings.py”,第4行,在
导入回溯;traceback.print_stack();打印

这是故意的行为吗?如果没有,我如何才能找到我的错误?

它是通过
sys.path
中的不同条目访问的。切勿尝试自己导入
设置
;导入
django.conf.settings

这种行为实际上发生在全新的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
如果在开发服务器运行的情况下编辑文件,它只执行两次导入操作:

$ 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...

因此,在最后一次导入并实际使用该文件之前,它可能只是读取该文件以进行自我配置,并验证一切正常?

非常感谢您的分析和确认。我必须在几天后再讨论这个问题。关于导入计数的一个想法是:我认为如果分配0,然后添加1,它应该总是返回1。替代方法:
尝试:导入计数+=1,名称除外错误:导入计数=0
。再次感谢您帮助我理解设置。py。。。