Python自定义包嵌套子目录导入失败问题求助
问题排查与解决
你的问题根源在于setup.py中仅指定了顶层包myfol1,setuptools默认不会自动递归包含嵌套的子包,导致安装后子目录的模块未被纳入包结构,因此无法导入。
解决方案
修改setup.py中的packages参数,使用setuptools.find_packages()自动递归查找所有包含__init__.py的子目录:
import setuptools setuptools.setup( name='myfol1', version='0.0.3', packages=setuptools.find_packages() )
原理说明
find_packages()会自动扫描当前目录下所有包含__init__.py的目录,将它们全部注册为包的一部分,这样安装后myfol1.myfol2、myfol1.myfol2.myfol3等子模块就能正常被导入。
后续操作
- 将修改后的
setup.py推送到Git仓库的0.0.3标签(或更新对应版本的分支) - 在目标环境重新执行
pip install -r requirements.txt,确保安装的是更新后的包版本
备选方案(不推荐)
如果不想使用自动查找,也可以手动列出所有子包,但这种方式在嵌套层级多的时候容易遗漏:
packages=['myfol1', 'myfol1.myfol2', 'myfol1.myfol2.myfol3']
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

