Embed a .wav file in Python with pyinstaller

那年仲夏 提交于 2021-02-16 14:12:53

问题


This is the code I am running:

import tkinter
from pygame import mixer
root = tkinter.Tk()
mixer.init()
mixer.music.load(r'C:\Users\George\AppData\Local\Programs\Python\Python36-32\Scripts\Music\Am_lie_-_JY_Suis_Jamais_All_-Yann_Tiersen.wav')
mixer.music.play()
root.mainloop()

I convert this to windows .exe with py2exe giving:

pyinstaller -w -F -i "C:\Users\George\AppData\Local\Programs\Python\Python36-32\Scripts\test.ico" sound.py

What I want to do is make the wav file embedded in the python .exe after it has been compiled by py2exe so that it does not need the file if run from a different computer aside from the Sound.exe itself.

Is this possible?

I am completely new to python.

I found this code that maybe does the job but can't get it to work.

dfiles = [(".","Am_lie_-_JY_Suis_Jamais_All_-Yann_Tiersen.wav"])]

setup(
    windows=[{'script':'filename.py'}],
    data_files=dfiles,
    options={'py2exe':{'bundle_files':1,'compressed':1}}

Any help is appreciated.


回答1:


It looks like you're using PyInstaller, not py2exe. As such this question is relevant.

I modified your mcve example to use a relative path to load my wav file.

import tkinter
from pygame import mixer
root = tkinter.Tk()
mixer.init()
mixer.music.load("recy.wav")
mixer.music.play()
root.mainloop()

Then I included that data file in the pyinstaller command line to build the executable:

pyinstaller -w -F -i d_python.ico --add-data "recy.wav;." --log-level=WARN sound_test.py

From the documentation, --add-data needs src and a location, separated by ; on Windows and : everywhere else. Here I've just grabbed it from the local directory and similarly 'stored' it in the root directory of the distributed app.

This works for me, although the one-file (-F) option has a little bit of load overhead.



来源:https://stackoverflow.com/questions/48689013/embed-a-wav-file-in-python-with-pyinstaller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!