Python包内同目录模块导入失败:无法导入factory.py中FAC类问题求助
问题原因与修复方案
问题原因
报错的核心是Python模块搜索路径匹配失败:
- 你是以包导入的方式调用
cpuimlearn下的模块,此时AdaBoostM1.py内写的from factory import FAC属于全局绝对导入,Python会直接在sys.path记录的全局搜索路径中查找factory.py,不会自动优先搜索AdaBoostM1.py当前所在的cpuimlearn目录,因此找不到模块。 - 由于
factory模块从未被成功导入,自然不会生成对应的.pyc缓存文件。
修复方案
推荐两种合规的长期修复方案:
方案1:使用包内相对导入(最优)
把cpuimlearn目录下所有需要导入FAC的文件的导入语句,修改为带相对路径标识的写法:
# 把原来的 from factory import FAC 改成下面的写法 from .factory import FAC
开头的.代表当前文件所在的包目录,会直接匹配同目录下的factory.py,符合Python包开发的标准规范,无需额外配置运行环境。
方案2:使用带包名的绝对导入
把导入语句修改为带完整包名的写法:
from cpuimlearn.factory import FAC
该方案需要确保cpuimlearn所在的父目录(也就是示例里的~/gpuimlearn/src/CPU-imLearn/)在Python的sys.path搜索路径中,一般在该父目录下启动Python进程即可满足要求。
临时应急方案:如果不想修改代码,可以在导入模块前先把
cpuimlearn目录加到搜索路径中,该方案仅适合本地临时调试,不推荐生产环境使用:import sys sys.path.append("~/gpuimlearn/src/CPU-imLearn/cpuimlearn")
内容的提问来源于stack exchange,提问作者arilwan
相关产品推荐
相关产品推荐

