3,446
社区成员




WoS平台上,使用pyinstaller把python程序打包成.exe文件后,运行时时长出现找不到程序中使用的资源文件譬如模型文件,这是为什么?
在使用使用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 在打包后运行时设置的一个特殊临时目录,它会指向存储临时解压文件的位置。