如何在Python Tkinter项目中正确打包和使用ffmpeg?

问题描述 投票:0回答:1

我花了几天时间研究这个问题,但无法弄清楚。我为 ffmpeg 进程创建了一个 py2app GUI 包装器,我每天将其用作 Python tkinter 界面。整个项目是用绝对路径编写的,并且在从终端启动应用程序时完美运行(.app > Contents > MacOS ..)。否则,除了 ffmpeg 功能之外的所有功能在通过打开 .app 启动时都可以工作。我担心的是,当从终端启动时,调用 ffmpeg 的函数只是使用终端,因此我的计算机的系统路径来调用 ffmpeg。

我尝试做什么:

在我的 setup.py 文件中,我添加了一行,其中包含 ffmpeg 的位置 -

OPTIONS = {'iconfile':'T2.icns','plist': {'CFBundleShortVersionString':'0.1.0',},'frameworks':['/usr/local/Cellar/ffmpeg/5.0/bin/ffmpeg'],}

仅此并不能解决问题。所以我尝试修改我调用ffmpeg的部分。我尝试使用一些不同的选项,

os.system('ffmpeg...')

subprocess.Popen('ffmpeg...', shell=True).wait()

我还尝试了 py2app 文档第 17 页第 1.11.8 节中提到的一些内容,尽管我不确定我做对了:

 subprocess.Popen("@executable_path/Contents/Frameworks/ffmpeg..., shell=True).wait()

此时我不知道我还能尝试什么。我的最终目标是能够将其保存在闪存驱动器上,并在我需要使用它的任何 Mac 上运行它,无论它是否安装了 Python 或 ffmpeg。

提前致谢!

python python-3.x tkinter py2app
1个回答
0
投票

这是一个老问题,但仍然时不时地出现。我在这里发布我的答案,因为这似乎是有关该问题的最新问题。

当您通过在终端中打开它的包中的可执行文件运行应用程序时,它会继承所有“您的”环境变量,包括 PATH。当您通过应用程序运行它时,它没有这些。 解决方案是在应用程序/脚本的早期启动时将

/usr/local/bin

添加到 PATH 环境变量。

# Add to search path
search_path = ['/usr/local/bin']
for path in search_path:
    os.environ['PATH'] += f':{path}'

这样,您的捆绑应用程序将能够找到 ffmpeg 库(或 tesseract,或使用 
subprocess

调用的任何其他内容)。

    

© www.soinside.com 2019 - 2024. All rights reserved.