Django: 无法导入 'module'。请检查 module AppConfig.name 是否正确。

7 浏览
0 Comments

Django: 无法导入 'module'。请检查 module AppConfig.name 是否正确。

这可能看起来像是一个已经回答过的问题,实际上在这里你有一个类似的问题(有点像)我有的问题。我的问题是,这只是一个技巧,一行代码,没有解释(尽管它仍然有所不同,但给出的解决方案有效,这是我的问题的一部分)。

这是我的项目结构,简化版:

manage.py
compfactu/---settings.py
          |--__init__.py
          |--core/--------__init__.py
                         |-apps.py  

这是我如何在INSTALLED_APPS中添加我的应用程序:

apps.py

from django.apps import AppConfig
class CoreConfig(AppConfig):
    name = 'core'

settings.py

INSTALLED_APPS = [ 
    ...
    #compfactu 模块
    'compfactu.core.apps.CoreConfig',
]

根据我阅读的Django 1.11文档,我引用了以下内容:

新的应用程序应避免使用default_app_config。相反,他们应该要求在INSTALLED_APPS中明确配置适当的AppConfig子类的点路径。

好吧,很好,这是一个新的应用程序,所以我应该这样做:但我得到了一个错误。这不是Python路径的问题,因为我刚刚打开了一个Python shell,我可以毫无问题地执行from compfactu.core.apps import CoreConfig(也打印出sys.path,一切正常)。

但是我有这个错误,下面是完整的回溯:

Traceback (most recent call last):
  File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/apps/config.py", line 147, in create
    app_module = import_module(app_name)
  File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "", line 986, in _gcd_import
  File "", line 969, in _find_and_load
  File "", line 956, in _find_and_load_unlocked
ImportError: No module named 'core'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/utils/autoreload.py", line 228, in wrapper
    fn(*args, **kwargs)
  File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 117, in inner_run
    autoreload.raise_last_exception()
  File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/utils/autoreload.py", line 251, in raise_last_exception
    six.reraise(*_exception)
  File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/utils/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/utils/autoreload.py", line 228, in wrapper
    fn(*args, **kwargs)
  File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/apps/registry.py", line 85, in populate
    app_config = AppConfig.create(entry)
  File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/apps/config.py", line 151, in create
    app_name, mod_path, cls_name,
django.core.exceptions.ImproperlyConfigured: Cannot import 'core'. Check that 'compfactu.core.apps.CoreConfig.name' is correct.

从那里开始,所有的文件和类都是由Django生成的(manage.py startapp)。

当我按照上面链接的问题所说的那样做时,像这样:

INSTALLED_APPS = [ 
    ...
    #compfactu 模块
    'compfactu.core',
]

它就可以工作了!我不明白这一点!根据我阅读的文档(我刚刚引用的部分),它不应该工作(请注意,我在我的__init__.py中没有default_app_config)。

因此,就像我在上面链接的问题中找到的"技巧"但没有解释那样,我在这里问为什么它会在不应该工作的情况下工作,以及为什么官方文档中的解决方案不起作用?

非常感谢您的时间。

0