我从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
答案 0 :(得分:1)
此导入语句:我的python代码中的from ffmpy import FFmpeg
从FFmpeg
模块导入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