Python导入App出现问题ImproperlyConfigured

  1. 概述: settings.py文件中的INSTALLED_APPS中添加自定义子应用时,需要将子应用所在目录加入导报路径sys.path(如果子应用本身就在项目根路径下就不需要)。要么就要设置子应用的配置类的name值带上导包路径。
  2. 相关报错: django.core.exceptions.ImproperlyConfigured: Cannot import ‘users’. Check that ‘meiduo_project.apps.users.apps.UsersConfig.name’ is correct.
  3. 报错原因: 以下是引起报错的源码:(位于*site-packagesdjangoappsconfig.py)
if app_name is None:
	            try:
	                app_name = app_config_class.name
	            except AttributeError:
	                raise ImproperlyConfigured(
	                    "%s must supply a name attribute." % entry
	                ) 
		# Ensure app_name points to a valid module.
      try:
          app_module = import_module(app_name)
      except ImportError:
          raise ImproperlyConfigured(
              "Cannot import %s. Check that %s.%s.name is correct." % (
                  app_name,
                  app_config_class.__module__,
                  app_config_class.__qualname__,
              )
          )

上面的app_config_class就是应用内的apps.py中的Config类,这段程序实际上会以该类的name属性作为导包路径进行导包,因此如果这个name显示的路径与sys.path脱离的话就会报错ImproerlyConfigured。 . 解决办法 有两种:

附加导包路径,将子应用所在目录加入项目导包路径,这样可以在INSTALLED_APPS中直接写子应用名字。

# 写在项目配置文件中即可
import sys
sys.path.insert(0, os.path.join(BASE_DIR, "apps"))

2、更改apps.py中配置类的name属性,使之能够被正确导入

class UsersConfig(AppConfig):
	default_auto_field = django.db.models.BigAutoField
	name = meiduo_project.apps.users  # 必须符合导包路径
经验分享 程序员 微信小程序 职场和发展