如何暴露导入的Python组件?Python 3.5模块导入问题求助
实现通过
MyModule.component访问子模块subcomponent的正确方式 嘿,我来帮你搞定这个Python模块导入的问题!你现在的需求是想通过两种导入方式都能调用MyModule.component.subcomponent.myfunc(),之前的尝试没成功是因为你搞混了同名的模块文件和包文件夹的关系——component.py是一个单独的模块,而MyModule/component/是一个包,Python会把它们当成完全不同的命名空间,所以你在component.py里写的导入根本不会影响MyModule.component这个包的内容。
先再明确下你的文件结构(方便对照):
main.py MyModule/ ├── __init__.py ├── component.py └── component/ ├── __init__.py # 空白文件 └── subcomponent.py
正确的实现步骤:
你需要修改的是**MyModule/component/__init__.py**(也就是component包文件夹里的那个空白__init__.py),而不是component.py文件。在这个文件里添加以下代码:
# MyModule/component/__init__.py from . import subcomponent
这样做之后,MyModule.component这个包就会把subcomponent模块作为自己的属性暴露出来,你的两种导入方式都能正常工作了:
方式一验证:
import MyModule.component result = MyModule.component.subcomponent.myfunc() # 现在可以正常调用!
方式二验证:
import MyModule.component.subcomponent result = MyModule.component.subcomponent.myfunc() # 同样可以正常调用!
额外说明:
如果你本来就不需要component.py这个文件,其实可以直接删掉它,避免和component包混淆——毕竟同名的模块和包很容易让后续维护出问题。如果确实要保留component.py,那你得注意在导入的时候区分清楚:import MyModule.component会优先导入包(文件夹)而不是模块文件,这也是为什么之前的尝试无效的核心原因。
内容的提问来源于stack exchange,提问作者Sir Robert
相关产品推荐
相关产品推荐

