如何使用 pyinstaller 包含文件?

Posted

技术标签:

【中文标题】如何使用 pyinstaller 包含文件?【英文标题】:How do I include files with pyinstaller? 【发布时间】:2018-12-03 04:05:34 【问题描述】:

我也使用 tkinter 用 python 3.7 制作了一个程序。由于我使用的是外部图片,因此在将所有内容编译为一个 exe 时需要包含它们。我尝试过--add-data "bg.png;files",但我仍然收到此错误:

_tkinter.TclError: 无法打开 "files/bg.png": 没有这样的文件或目录

代码如下:

image = PhotoImage(file="files/bg.png")
w = image.width()
h = image.height()
x = 316
y = 246
mainGui.geometry("%dx%d+%d+%d" % (w, h, x, y))
panel = Label(mainGui, image=image)
panel.pack(side='top', fill='both', expand='yes')

我做错了什么?我也尝试过--add-binary,将文件添加到我的规范文件中。实在想不通!

【问题讨论】:

也许this recipe 有用? 1.您使用的是哪个操作系统? 2. 使用 pyinstaller 编译时是使用 -F 还是 --one-file 选项? 嗨,Kamal,我正在运行 Windows 10。我尝试了 -F 和 --one-file。 请在没有 -F 或 --one-file 选项的情况下尝试一次。对于 --one-file 选项,您需要按照添加代码如this 不幸的是:/ 【参考方案1】:

抱歉,我认为只有 -F/--one-file 会做出这样的行为,但看起来任何与 pyinstaller 的捆绑都需要这样的更改。

您需要像这样更改您的代码,如answer 中所述:

import sys

if getattr(sys, 'frozen', False):
    image = PhotoImage(file=os.path.join(sys._MEIPASS, "files/bg.png"))
else:
    image = PhotoImage(file="files/bg.png")

然后将其与 pyinstaller 捆绑在一起,如下所示:

pyinstaller --clean -y -n "output_name" --add-data="files\bg.png;files" script.py

【讨论】:

你是个传奇,非常感谢!完美无瑕! 只是一个小更新。我也有一些声音,我尝试将这些线条改编成我的 winsound.Playsound,但它似乎不像 tkinter 那样采用相同的方式。 winsound.PlaySound(os.path.join(sys._MEIPASS, "files/bgm.wav", winsound.SND_LOOP + winsound.SND_ASYNC)) 你知道如何制定它让python理解吗? @Kamal 不太明白如何在 *** 上使用“代码”功能,因此希望它可以阅读。 你在错误的位置关闭了os.path.join的括号,试试:winsound.PlaySound(os.path.join(sys._MEIPASS, "files/bgm.wav"), winsound.SND_LOOP+winsound.SND_ASYNC)。并查看here 以获取格式化帮助。 做到了,感谢@Kamal 的所有帮助!我一周前开始编程,一直在学习新东西感觉很好!

以上是关于如何使用 pyinstaller 包含文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 PortAudio 包含到 pyinstaller onefile 构建中

发生 Pyinstaller 模块未找到错误。如何解决?

用 pyinstaller 打包含xpinyin 库的Python程序

Pyinstaller 的综合教程? [关闭]

python使用pyinstaller将程序打包为exe文件

教你如何使python变为可执行文件