首页 > 解决方案 > Pyinstaller 添加文件的问题

问题描述

我有一个名为的文件Ringbell.py和一个名为 .mp3的文件bell.mp3。前者有一行说:

import subprocess    
subprocess.call(['cvlc','bell.mp3'])   I also have one with full paths.

当我不使用 PyInstaller 时,这很好用,当我先使用 PyInstaller 然后删除bell.mp3(假设它已嵌入py.exe文件中)时,它不起作用。我正在使用 Python 3.6.8 和 Linux ubuntu。

pyinstaller -F --add-data bell.mp3:. Ringbell.py

上面是命令,但是mp3没有进去Ringbell.exe

标签: pythonpyinstaller

解决方案


如评论中所述,mp3 将在您的可执行文件中可用,但您需要从提取的路径(例如C:/User/AppData/Local/Temp/_MEIXXX)加载它。您可以使用sys._MEIPASS检索提取路径:

import subprocess
import sys
import os


def resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)


subprocess.call(['cvlc', resource_path('bell.mp3')])

推荐阅读