问题描述:
我在pycharm中使用pyinstaller打包应用程序后,在自己电脑上能够正常运行,但是在将程序转移到其他电脑后就会提示找不到某个文件,排除后发现问题出在如下代码中
weights_path=r"D:\GraduatePrograms\MaskRCNN\mask_rcnn\logs\mix1463_train_2\weights\best_model.pth"
label_json_path = r"D:\GraduatePrograms\Generate_dataset\datasets\mix1463\mix1463.json"
这两个文件路径是使用硬编码的,即使在打包后,路径也是原来电脑的路径。所以转移后会找不到文件。
解决方案:
使用如下代码,动态获取路径
def resource_path(relative_path):
"""获取资源文件路径"""
if hasattr(sys, '_MEIPASS'): # 检查是否在 PyInstaller 打包环境中
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
原路径修改如下
weights_path = resource_path('best_model.pth')
label_json_path = resource_path('mix1463.json')
注:由于在.spec中不能返回上层路径,所以我直接把这俩文件移到与当前脚本并列的位置了
在.spec文件中datas增加如下导入
('D:\\GraduatePrograms\\MaskRCNN\\mask_rcnn\\logs\\mix1463_train_2\\weights\\best_model.pth',
'.'),
('D:\\GraduatePrograms\\MaskRCNN\\mask_rcnn\\UI\\mix1463.json',
'.'),
再运行
pyinstaller UI_main.spec
封装后的程序正常运行