使用图像和声音文件夹编译 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 代码?的主要内容,如果未能解决你的问题,请参考以下文章

CCSprite 带有图像文件和声音文件

为啥播放视频文件只有声音没有图像

如何编译python(使用cxFreeze)以获取当前工作目录作为可执行文件所在的目录?

来自声音文件的 UnicodeDecodeError

如何使用 Gradle 将资源(图像、声音文件、着色器等)添加到 NDK 项目?

opencv打开视频文件没有声音