Python导入报错:如何跳过中间目录直接导入深层子模块?
问题描述
项目结构如下:
folderA ├── __init__.py └── folderB ├── __init__.py └── folderC ├── __init__.py └── module.py
希望无需提及folderB,直接使用如下导入语句:
from folderA.folderC.module import *
当前各文件内容:
folderA/__init__.py:from .folderB import *folderA/folderB/__init__.py:# emptyfolderA/folderB/folderC/__init__.py:from .module import hellofolderA/folderB/folderC/module.py:def hello(): print("hello world")
执行导入时收到错误:
ModuleNotFoundError: No module named 'folderA.folderC'
解决方案
要跳过folderB直接从folderA导入folderC,核心是把folderC的模块引用“提升”到folderA的命名空间里,具体修改两个__init__.py文件即可:
修改
folderA/folderB/__init__.py:
导入folderC模块,让folderB能向外暴露它:from . import folderC修改
folderA/__init__.py:
从folderB中把folderC导入,绑定到folderA的命名空间下:from .folderB import folderC
完成这两步后,folderA.folderC就会被Python识别为合法的模块路径,此时执行from folderA.folderC.module import *就能正常导入模块,调用hello()也能正确输出"hello world"。
如果还想进一步简化调用,比如直接从folderA导入hello函数,可以在folderA/__init__.py里添加:
from .folderB.folderC.module import hello
之后就能直接用from folderA import hello来调用该函数。
内容的提问来源于stack exchange,提问作者Oscar Llorente Gonzalez
相关产品推荐
相关产品推荐

