将.py文件和图像转换为独立可执行文件

时间:2018-10-17 18:41:17

标签: python image exe pyinstaller

我有一个带有图像的python程序。该图像显示在程序创建的tkinter窗口中,并且是必需的。我想使用pyinstaller将.py文件和.gif文件合并为一个可执行文件。

我知道要创建一个独立的.py文件,您需要使用--onefile,但我不知道如何处理涉及的图像。我相对确定您必须编辑.spec文件,但我不知道如何执行此操作。

我不在乎程序的图标,只是在tkinter窗口中的图像。

由于我是初学者,请提供分步说明。

3 个答案:

答案 0 :(得分:1)

您也许可以对GIF文件进行base64编码,然后将其存储为Python脚本中的字符串-这样就无需携带多余的GIF文件了。

因此,假设您的图片位于名为image.gif的文件中,则可以在终端机中执行以下操作:

base64 -i image.gif -o image.b64

然后复制文件image.b64的(文本)内容并存储在Python变量中:

photo = """R0lGODlh4gLxAPcAAAQEBAoGBgo...L+SwTBVhBCtCVf6lAE"""

然后通过以下方式加载图像:

photo = PhotoImage(data=photo)

答案 1 :(得分:1)

经过大量实验,我得到了一个工作示例。这是一个小的示例脚本,用于加载图像并显示它-唯一棘手的部分是它决定是从捆绑软件中运行还是实时运行。

#!/usr/local/bin/python3
from PIL import Image                                                                       
import sys, os

filename = "image.png"

# Work out where the image file is
if getattr( sys, 'frozen', False ) :
   # running in a bundle
   path = os.path.join(sys._MEIPASS, filename)
else :
   # running live
   path = filename

im = Image.open(path)                                                                
im.show() 

然后我使用 PyInstaller 将其构建为单个文件,如下所示:

pyinstaller --add-data "image.png:." --onefile test.py 

这将创建一个名为dist的目录,您将在其中找到一个名为test的文件,该文件可以在具有相同操作系统但未安装Python的其他计算机上运行。

答案 2 :(得分:0)

您需要将映像“附加”到程序。您可以这样操作:

  

-add-data“您要添加的文件。”

但是,在代码上,当引用图像文件时,您需要这样做:

image_file = sys._MEIPASS + "\file.gif"

为什么?由于该文件现在位于程序内部,并且用于指示该文件位于程序内部的目录为:sys._MEIPASS。