使用cx_freeze

时间:2018-06-21 06:44:26

标签: python ffmpeg cx-freeze ffmpy

我从ffmpy代码构建了一个可执行文件,该代码是用cx_freeze编译的。如我所料,它可以在我的PC上运行,因为我在Windows上安装了ffmpeg

但是,我需要此编译后的代码才能在任何PC上运行,不仅是安装了ffmpeg的地方。

运行可执行文件时,出现ffmpy错误,Executable "ffmpeg" not found

这是我setup.py的{​​{1}}。 cx_freeze适用于我要编译的任何内容,但使用setup.py的地方除外。

ffmpeg

我的问题是,我的import sys from cx_Freeze import setup, Executable from cx_Freeze import setup from distutils.core import Extension import os os.environ['TCL_LIBRARY'] = r'C:\Users\Acer\Miniconda3\envs\updated\tcl\tcl8.6' os.environ['TK_LIBRARY'] = r'C:\Users\Acer\Miniconda3\envs\updated\tcl\tk8.6' addtional_mods = ['numpy.core._methods', 'numpy.lib.format'] setup( name = 'programm', version = '5.0.1', description = 'PyQt', options = {'build_exe': {'includes': addtional_mods}}, executables = [Executable('ffmpy_test.py', base = "Win32GUI")]) 可执行文件如何在编译目录中找到ffmpy_test.py。我试图在其中放置ffmpeg目录,但这没用。

这是我编译的测试代码:

ffmpeg.exe

1 个答案:

答案 0 :(得分:1)

此导入语句:我的python代码中的from ffmpy import FFmpegFFmpeg模块导入ffmpy类。此类在ffmpeg.exe上寻找C:/ffmpeg/bin/ffmpeg.exe,其中{ {1}}已安装在我的Windows上。

受@ l'L'l评论的启发,我研究了ffmpeg是如何在ffmpeg模块的FFmpeg类内部导入的。

ffmpy模块中:

ffmpy

因此,我需要更改class FFmpeg(object): """Wrapper for various `FFmpeg <https://www.ffmpeg.org/>`_ related applications (ffmpeg, ffprobe). """ def __init__(self, executable='ffmpeg', global_options=None, inputs=None, outputs=None): ... 参数中的路径,以便将import语句定向到我手动放置在代码所在目录中的executable目录中。

但是,我在代码中而不是在ffmpeg模块中修改了executable参数的默认值,就像这样:

ffmpy