相对路径设置通过 pyinstaller 失败



我正在使用python 3.6和windows 10。

我正在尝试通过pyinstaller打包映像并尝试在其他地方运行映像。

它工作正常,我通过pyinstaller打包它。但是,当我删除文件夹中的图像时,我不起作用

我想要的只是将图像打包到.exe文件中。但是我不确定它哪里出了问题...

首先,我有一个名为"pytest"的文件夹,其中包含一个名为"1up.png"的图像和"Rtest.py",如下所示:

import sys, os
from PIL import Image
os.chdir(r"C:UserslawreDesktoppytest")
def resource_path(relative_path):
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)
image = Image.open('1up.png')
image.show()

它可以成功打开图像!然后我通过pyinstaller打包它:

pyinstaller.exe -F -w RTest.py

Rtest.spec 生成,我打开它并在"a.datas"之后添加一个代码:

[('\1up.png','C:\Users\lawre\Desktop\pytest\1up.png','DATA')],

保存并关闭"Rtest.spec"文件,然后再次通过pyinstaller打包:

pyinstaller.exe -F -w RTest.spec

我想一切都完成了,因为最终的"Rtest.exe"生成并且可以正常工作以打开图像,但是当我在pytest文件夹中删除" 1up.png"时它不起作用。

错误消息是:无法执行脚本 RTest

有谁知道如何解决它或建议我如何重写代码?

提前致谢

劳伦斯

您的方式有两个问题:

  1. 您根本不是在调用resource_path,您需要在代码中使用此函数调用您的文件。此外,您无需更改当前目录。

  2. 我个人不建议您手动编辑spec文件,除非您需要。您的语法似乎错误,您需要将文件添加到datas=[]Analysis部分中。无论如何,只需使用add-data标志。

脚本文件:

import sys
import os
from PIL import Image

def resource_path(relative_path):
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)

image = Image.open(resource_path('1up.png'))
image.show()

命令:

pyinstaller -F --add-data "./1up.png;." script.py

最新更新