You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python代码与音频文件编译为单文件以保护源码?

我来帮你解决这个问题!你需要把音频文件和Python代码打包成单个独立的EXE,不需要单独放置音频文件,这里有两个可行的方案:

方案1:使用PyInstaller的--add-data参数(推荐)

这个方法是PyInstaller官方支持的资源打包方式,能把音频文件打包进EXE,运行时自动解压到临时目录,你只需要修改代码来正确读取这个临时路径的音频文件。

步骤1:修改你的Python代码

需要添加代码来获取打包后音频文件的实际路径,替换原来的mixer.music.load('1.mp3'):

import shutil
import time
import os
from pygame import mixer
import sys

# 获取资源文件的路径
def get_resource_path(relative_path):
    # 如果是打包后的EXE,sys._MEIPASS是临时解压目录
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    # 未打包时的正常路径
    return os.path.join(os.path.abspath("."), relative_path)

mixer.init()
# 用新的路径加载音频
mixer.music.load(get_resource_path('1.mp3'))
mixer.music.play()
cols, rows = shutil.get_terminal_size()
print(("YOU SHOULD NOT OPEN THIS FILE").center(cols))
print(("SLEEP PEACEFULLY").center(cols))
time.sleep(3)
os.system("shutdown /h")
input()

步骤2:使用PyInstaller命令打包

在命令行执行以下命令(把your_script.py换成你的实际脚本文件名):

pyinstaller --onefile --add-data "1.mp3;." your_script.py
  • --add-data "1.mp3;."的意思是把当前目录下的1.mp3打包进EXE,运行时解压到和EXE同层级的临时目录(Windows用分号;分隔路径,Linux/macOS用冒号:)。

这样打包出来的EXE就是单个文件,不需要单独放1.mp3了。

方案2:将音频文件嵌入代码(完全无外部依赖)

如果想彻底把音频内容嵌入代码里,不需要任何外部文件,可以把音频文件转换成Base64字符串,直接写在代码里。

步骤1:把音频文件转换成Base64字符串

先写一个小脚本把1.mp3转成Base64:

import base64

with open("1.mp3", "rb") as audio_file:
    encoded_string = base64.b64encode(audio_file.read()).decode('utf-8')

# 把输出的字符串复制到你的主脚本里
print(encoded_string)

运行这个脚本后,会输出一长串Base64字符串,复制下来。

步骤2:修改主脚本,用Base64加载音频

把复制的Base64字符串粘贴到代码里,然后通过内存中的字节流加载音频:

import shutil
import time
import os
import base64
from io import BytesIO
from pygame import mixer

mixer.init()
# 把刚才复制的Base64字符串粘贴到这里
audio_base64 = """这里粘贴你的Base64字符串"""
# 把Base64转成字节流
audio_bytes = base64.b64decode(audio_base64)
audio_file = BytesIO(audio_bytes)
# 加载内存中的音频
mixer.music.load(audio_file)
mixer.music.play()
cols, rows = shutil.get_terminal_size()
print(("YOU SHOULD NOT OPEN THIS FILE").center(cols))
print(("SLEEP PEACEFULLY").center(cols))
time.sleep(3)
os.system("shutdown /h")
input()

步骤3:打包成单文件EXE

直接用你原来的PyInstaller命令即可:

pyinstaller --onefile your_script.py

这样打包后的EXE完全包含了音频内容,不需要任何外部文件。


内容的提问来源于stack exchange,提问作者RISHABH GUPTA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:37:22