WoS平台上,使用pyinstaller把python程序打包成.exe文件后,运行时时长出现找不到程序中使用的资源文件譬如模型文件,这是为什么?

一顿30个饺子 2024-11-15 09:58:19

WoS平台上,使用pyinstaller把python程序打包成.exe文件后,运行时时长出现找不到程序中使用的资源文件譬如模型文件,这是为什么?

...全文
805 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38498942 2024-11-21
  • 打赏
  • 举报
回复

在使用使用pyinstaller把python程序打包成.exe文件时,遇到找不到使用的资源文件的问题,通常是由于资源文件(如图片、模型文件等)在打包过程中没有被正确包含导致资源文件路径问题导致的。

在开发过程中,你的资源文件可能是相对路径(相对于脚本文件)的,但在打包后,这些文件的位置可能发生了变化。pyinstaller将 Python 程序打包成.exe文件时,资源文件会被打包进.exe文件内部,路径通常不会像原始脚本中那样直接引用。解决办法:

1)使用pyinstaller打包时,确保通过--add-data参数将资源文件包含在内;
在运行pyinstaller时,使用--add-data参数来确保资源文件被包含到打包的.exe文件中。其格式为:--add-data <源路径>;<目标路径>,例如:

     pyinstaller --add-data "path_to_resource_file;." test.py

这个命令会将path_to_resource_file路径下的资源文件添加到.exe文件,并将其放置在同级目录中。例如,如果你的程序中有一个 image.png 文件,位于项目目录下,你应该执行以下命令:

     pyinstaller --add-data "image.png;." test.py

如果你有多个资源文件,可以使用多个--add-data参数,或者使用通配符*来打包整个文件夹:

     pyinstaller --add-data "resources/*;resources" test.py

2)使用正确的路径来引用资源文件。可以通过以下方式访问资源文件:

     import os,sys

     # 获取资源文件的正确路径
     def resource_path(relative_path):
         """获取资源文件的绝对路径"""
         try:
             # 针对打包后的 exe 文件
             base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
         except Exception:
             base_path = os.path.dirname(os.path.abspath(__file__))
         return os.path.join(base_path, relative_path)

     # 使用 resource_path 获取文件路径
     file_path = resource_path('your_resource_file.png')

代码中sys._MEIPASS是pyinstaller 在打包后运行时设置的一个特殊临时目录,它会指向存储临时解压文件的位置。

3,446

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧