如何使用 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 打包含xpinyin 库的Python程序