使用图像和声音文件夹编译 Python 代码?
Posted
技术标签:
【中文标题】使用图像和声音文件夹编译 Python 代码?【英文标题】:Compiling Python code with an image and sounds folder? 【发布时间】:2020-02-12 17:27:53 【问题描述】:我目前正在做一个项目,最后我需要编译它。我面临的问题是我正在使用 .py 文件,还有 2 个文件夹,一个包含所有图像,一个包含所有音乐...
我环顾四周,但没有完全回答问题。我已经看到最好对我的图像进行 base64 编码,但这似乎对我不起作用……我尝试了 UTF-8 字符和二进制。
知道如何将我的 2 个文件夹和我的代码文件转换为一个可以在任何计算机上使用的 .exe 可执行文件吗?
谢谢
安加洛斯
【问题讨论】:
这能回答你的问题吗? How to compile all resources into one executable file? 【参考方案1】:你有没有尝试过这种方法:
假设你有这样的布局
main.py
resources.py
data/img1.png
在main.py
:
import resources
import tkinter as tk
root = tk.Tk()
root.title("Test")
resources.load_images()
lbl = tk.Label(root, image=resources.IMG1)
lbl.place(relx=0.5, rely=0.5, anchor="c")
root.mainloop()
在resources.py
:
import tkinter as tk
IMG1 = None
def load_images():
global IMG1
IMG1 = tk.PhotoImage("data\\img1.png")
这很好用,并且可以加载您的图像。
现在让我们让它在一个单独的 exe 文件中运行:
我们不需要更改main.py
,因为它只是通过我们的resources.py
脚本加载资源。
我们可以使用这个脚本加载/保存我们的图像数据:
import base64
def load_data(filename):
with open(filename, mode="rb") as f:
return base64.b64encode(f.read())
print(str(load_data("data\\img1.png"), "utf-8"))
# R0lGOD ...
所以我们现在可以将其复制并粘贴到我们的resources.py
文件中,并将其更改为如下所示:
import tkinter as tk
# here's our copied base64 stuff:
img1_data = '''
R0lGODlhEAAQALMAAAAAAP//AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAA\nAAAAACH5BAEAAAIALAAAAAAQABAAQAQ3UMgpAKC4hm13uJnWgR
TgceZJllw4pd2Xpagq0WfeYrD7\n2i5Yb+aJyVhFHAmnazE/z4tlSq0KIgA7\n
'''
IMG1 = None
def load_images():
global IMG1
IMG1 = tk.PhotoImage(data=img1_data)
现在使用 PyInstaller 编译我们的 main.py
文件:
pyinstaller main.py --onefile
我们应该看到,一旦任务完成,dist
中有一个可执行文件,名为main.exe
。
【讨论】:
这是我遇到问题的地方...我的 base64 代码长度为 643 745 个字符...因此,它只会使 IDLE 崩溃...有没有办法可以缩短代码,还是有另一种方法可以将所有数据压缩到一个 .exe 文件中?我还在探索使用我的主程序连接到的在线文件夹并从那里获取数据。我还没有找到任何结论性的东西,但也许你知道一些可以解决的问题?再次感谢! 你能写一个python脚本来创建存储你的代码的文件吗? 好吧,我的代码有 1020 行长,所以你可能需要一些时间来通读它......基本上,我目前拥有的是一个文件夹,其中有我的 python 项目,一个 .wav 声音、图像(约 50 个),最后一个 .dat 文件,它使用我保存的游戏(使用 pickle 库),别担心,你所做的对我有帮助。我想要做的是将文件夹中的所有内容编译到一个 .exe 文件中,这样用户就不能搞乱保存游戏等单个项目,而只会收到一个 EXE。我需要从文件夹中以前的图像中向用户显示图像(使用 tkinter)。以上是关于使用图像和声音文件夹编译 Python 代码?的主要内容,如果未能解决你的问题,请参考以下文章
如何编译python(使用cxFreeze)以获取当前工作目录作为可执行文件所在的目录?