python - 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
。
解决方案
如评论中所述,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')])
推荐阅读
- bixby - 如何使用模拟器在 Bixby Studio SDK 上编译代码?
- c - fgets 在 Linux 和 Windows 中从同一个文件中写入不同的字符串
- scala - 除了 Apache Kafka 之外,还有哪些事件溯源替代方案?
- python - 按法线旋转 vtkDiskSource/vtkPolyDataMapper
- firebase - 如何限制用户可以在 Firebase 中发送的查询数量
- r - 使用对不同数据框中的另一个变量的条件创建一个新变量
- ios - 对 JSON 进行排序以查找字符串不同的每个实例
- html - 如何用 bulma 使部分居中
- r - 使用 purrr 的地图时出错,可能
- c# - C#程序调用C++ dll