最近由于需要写一个脚本调用另一个文件里面的一个方法,试了很久都导包失败,特此记录一下
问题背景
1)脚本文件为 send_reward.py ,要调用 public_model_func.py 里面的一个类方法
2) public_model_func.py 里面导入了项目的其他包,其导包方式为 from src.xxx.xxx import xxx ,其中src为项目代码的根目录
3)项目处于运行状态,脚本是后续自己写的
解决过程
1)尝试在 send_reward.py 里面使用 from src.xxx.xxx import xxx 导包,结果提示找不到包
2)将 send_reward.py 放入与 public_model_func.py 同级目录下,使用 from . import public_model_func ,结果还是提示找不到包
3)想到可能是没有把路径加到 sys.path 里面,因此在 send_reward.py 的前面加上以下几行代码
import sys sys.path.append("/xxx/xxx/src/xxx/xxx") # public_model_func.py的上一级目录,从根目录开始
但是这样可以导入public_model_func.py,但是加载public_model_func.py时会导入其他的包,这时又会报错
4)考虑到public_model_func.py里面都是 from src.xxx.xxx import xxx ,因此考虑将src的 上级目录 放入sys.path,即
import sys sys.path.append("/xxx/xxx") # src的上级目录,注意最后面没有/
问题完美解决
小结
1)导包时要将导包路径加到 sys.path 里面 2)如果导的包里还导入了其他的包,那么需要特别注意是否所有包都能找到路径
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did172282