pip install未安装子文件夹但setup.py install可正常安装问题咨询
问题原因
你当前的setup.py配置中,packages参数仅填写了["package"],setuptools不会自动递归识别并打包子目录下的子包,因此subpackage目录不会被纳入安装内容。
- 本地执行
python setup.py install时能正常运行,通常是因为本地开发环境的目录结构完整,或者此前执行过开发模式安装,直接读取了本地项目目录的文件,没有走严格的打包筛选逻辑。 - 执行
pip install git+...安装时,会拉取最新代码构建纯净的安装包,严格按照setup.py配置筛选要打包的文件,因此subpackage被遗漏,最终触发导入报错。
修复方法
修改setup.py中的packages配置即可,推荐两种实现方式:
- 手动声明所有包:
packages=["package", "package.subpackage"],
- 用
find_packages自动递归识别所有包,后续新增子包无需手动修改配置:
首先在文件头部导入对应方法:
from setuptools import setup, find_packages
再将setup函数中的packages行修改为:
packages=find_packages(),
导入兼容性说明
你当前subpackage/__init__.py的写法完全符合需求,修复安装配置后:
- 可以正常通过
from package import subpackage导入 - 可以直接通过
subpackage.function1()的形式调用子模块内的函数 - 原有导入方式的向后兼容性不受影响
内容的提问来源于stack exchange,提问作者Tim_M
相关产品推荐
相关产品推荐

