【发布时间】:2020-07-13 16:13:51
【问题描述】:
我有两个模块可以相互导入一些东西:
project/urls.py:
from modules.helpers import helper
urlpatterns = [
# patterns
]
modules/helpers.py:
def helper():
# some magic
def main():
from project.urls import urlpatterns
# process urlpatterns
modules/__init__.py:
from modules.helpers import main
main()
一切正常,直到我将from project.urls import urlpatterns 包装成这样:
def main():
try:
from project.urls import urlpatterns
except Exception as e:
print(str(e))
打印出来:
无法从部分初始化的模块“urls”导入名称“urlpatterns”(很可能是由于循环导入)(/Users/MaxCore/Documents/www/project/project/urls.py)
可能是什么原因?
编辑
在最小的可重现示例中,一切正常,可能异常与 django 有关。由于尝试除块,导入顺序发生了变化
如果我在settings.INSTALLED_APPS 中指定modules(这不是必需的),并且runserver 它会打印:
django.core.exceptions.AppRegistryNotReady:应用尚未加载。
【问题讨论】:
-
正如错误消息中提到的,循环导入可能是原因。你调查过吗?
-
@mkrieger1 我想知道为什么它不是在try except block中的原因
-
我明白了。你能创建一个不涉及 Django 的minimal reproducible example,即用最少的代码填充
# some magic等使其运行并添加一个调用main的顶级脚本吗? -
@mkrieger1 是的,刚刚做到了,一切正常,它确实与 django 有关(必须思考
-
您在示例代码中将绝对导入更改为相对导入。是否经过深思熟虑并反映了您实际所做的事情?