Python打包:如何让子模块可从顶层模块直接导入?
解决Python包中导入父模块后无法访问子模块的问题
你遇到的问题核心是:Python默认不会在导入父模块时自动加载其子模块,所以import Top执行后,Top的命名空间里并没有Lower这个属性。
解决方法很直接:
- 在
Top包的__init__.py文件中添加一行显式导入代码:
这样当你执行from . import Lowerimport Top时,Python会自动把Lower子模块导入到Top的命名空间中,之后就能直接通过Top.Lower访问子模块了。
额外说明:你在setup.cfg里配置的package_data中**/*.py属于冗余配置,Python打包工具默认会包含所有.py文件,完全可以删掉这部分内容,packages = find:已经能正确识别所有子包。
修改完__init__.py后,记得重新安装你的包(开发阶段用pip install -e .做可编辑安装更高效),之后再测试就能正常访问了。
内容的提问来源于stack exchange,提问作者Sam Lerman
相关产品推荐
相关产品推荐

