如何将MP3嵌入Python生成的EXE,使EXE无需外部音频文件即可运行?
解决方案:将音频文件嵌入EXE实现独立运行
要让EXE脱离原音频文件独立运行,核心是通过Pyinstaller/Auto-py-to-exe把音频打包进EXE,运行时从Pyinstaller生成的临时目录读取资源。以下是具体实现步骤:
一、修改代码适配嵌入音频
原代码直接读取本地1.mp3,需要调整为自动识别开发环境和打包后的运行环境路径:
from playsound import playsound from sound import Sound import schedule import requests import random import sys import os # 获取音频文件路径:开发环境读本地,打包后读临时目录 def get_audio_path(): if hasattr(sys, '_MEIPASS'): # Pyinstaller打包后会创建临时目录,sys._MEIPASS指向该目录 return os.path.join(sys._MEIPASS, '1.mp3') else: # 开发阶段的本地路径 return '1.mp3' def xaxax(): Sound.volume_set(100) audio_path = get_audio_path() playsound(audio_path) def main(): s55 = str(random.randint(13,50)) s50 = str(random.randint(10,45)) s45 = str(random.randint(10,40)) schedule.every().friday.at(f'12:{s45}').do(xaxax) schedule.every().friday.at(f'09:{s55}').do(xaxax) schedule.every().monday.at(f'09:{s55}').do(xaxax) schedule.every().tuesday.at(f'10:{s50}').do(xaxax) schedule.every(5).seconds.do(xaxax) while True: schedule.run_pending() if __name__ == "__main__": main()
二、打包配置(Pyinstaller/Auto-py-to-exe)
方法1:Pyinstaller命令行打包
在终端执行以下命令,指定嵌入的音频文件:
pyinstaller --onefile --add-data "1.mp3;." your_script_name.py
--onefile:生成单个独立EXE文件--add-data "1.mp3;.":将1.mp3添加到打包资源,分号后是运行时的目标路径(.表示和临时目录根目录同位置)
方法2:Auto-py-to-exe图形化打包
- 打开Auto-py-to-exe,选择你的Python脚本文件
- 在
One File选项卡勾选One File - 找到
Additional Files区域,点击Add Files选择1.mp3 - 为该文件设置
Destination为.(确保和代码中读取的路径对应) - 点击
Convert .py to .exe完成打包
额外注意事项
- 若
playsound在打包后出现播放失败,建议替换为pygame模块,兼容性更好。替换后的播放代码示例:
import pygame def play_audio(): pygame.mixer.init() pygame.mixer.music.load(get_audio_path()) pygame.mixer.music.play() while pygame.mixer.music.get_busy(): pygame.time.Clock().tick(10)
- 如果自定义
sound模块未被自动打包,可在Pyinstaller命令中添加--hidden-import sound参数强制导入
内容的提问来源于stack exchange,提问作者Revil
相关产品推荐
相关产品推荐

