pyinstaller 打包后无法找到导入代码中依赖的文件项
问题出现的情况:
写了一个flask的服务,里面使用了4个接口{
1.localhost:/aaa
2.localhost:/bbb
3.localhost:/ccc
4.localhost:/ddd
}
其中一个接口(ddd)调用了一个封装函数(get_sign())
在get_sign函数中又引入了一个skill.json
with open('skill.json', 'r',encoding='utf-8', errors='ignore') as sfile: services = json.load(sfile)
测试的时候一点问题没有,打包完成以后调用接口提示没有skill.json的这个文件。
No such file or directory.....xxxxx
以下是尝试过的方法:
找不到这个依赖,是不是路径不对
1.绝对路径和相对路径都试过了,没打包前一点问题没有,打包后就出问题。
路径不对是不是因为没将json放在静态资源目录下?
2.遂将文件放在静态资源下,问题同上。
有没有可能打包的时候,没将指定文件打包进去?
3.在python的lib路径下找到pyinstaller目录的hooks路径下,新增一个hook-xxx.py文件
打包的时候发现还是不行,定睛一看原来导入的是类,模块,至于那个file方法,不知道是我用的有问题还是怎么事,反正就是打包的时候依然没打进去
4.继续回到路径的问题下,既然无法将skill.json文件打包,那么继续转到处理路径问题吧。
执行的时候可以输出一下当前文件路径,发现是在win的一个临时路径下,那么当然当前的路径里是不存在skill.json文件的
当我需要引用skill.json文件的情况下,也就是使用get_sign函数(上下文在get_sign时),将工作路径转到有skill.json的路径下是不是就可以引用到文件了。
# 修改工作路径
file_path = os.path.join(os.path.dirname(os.path.realpath(sys.executable)), 'skill.json') with open(file_path, 'r',encoding='utf-8', errors='ignore') as sfile: services = json.load(sfile)
#查看当前路径 dirname_ = os.path.dirname(os.path.abspath(__file__)) print(dirname_ )
本文来自博客园,作者:黑山老道,转载请注明原文链接:https://www.cnblogs.com/meipu/p/16645800.html