为什么Python导入自定义包时找不到子模块但直接导入模块正常
具体原因
Python的包导入机制默认不会自动加载包下的子模块:
- 执行
from . import views_api时,仅导入了views_api包本身。你虽然已经在views_api目录下放置了__init__.py,但如果该文件为空白、没有显式导入内部子模块,那么views_api的命名空间里就不会自动包含model子模块,直接调用views_api.model会抛出属性不存在的错误。 - 执行
from .views_api import model时,是显式指定加载views_api下的model子模块,Python会主动完成该子模块的加载流程,因此可以正常使用。
修复方案
如果要实现导入包后直接访问子模块的效果,只需要在views_api包的__init__.py中添加显式导入语句即可:
# views_api/__init__.py 新增内容 from . import model # 有其他需要对外暴露的子模块也可以在这里统一导入
修改后你注释掉的path('model', views_api.model.VueModelView.as_view())代码就可以正常运行。
内容的提问来源于stack exchange,提问作者mirek
相关产品推荐
相关产品推荐

