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_ )

 

posted @ 2022-09-01 11:01  黑山老道  阅读(885)  评论(0编辑  收藏  举报