我正在使用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
有谁知道如何解决它或建议我如何重写代码?
提前致谢
劳伦斯
您的方式有两个问题:
-
您根本不是在调用
resource_path
,您需要在代码中使用此函数调用您的文件。此外,您无需更改当前目录。 -
我个人不建议您手动编辑
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