Ошибка запуска MoviePy в замороженном приложении Python с помощью cx_FreezePython

Программы на Python
Anonymous
Ошибка запуска MoviePy в замороженном приложении Python с помощью cx_Freeze

Сообщение Anonymous »

Я сталкиваюсь с постоянной проблемой при попытке запустить приложение Python, использующее Moviepy, которое было заморожено с помощью cx_Freeze. Приложение выдает ошибку, связанную с ffmpeg, когда я пытаюсь запустить замороженный исполняемый файл, несмотря на то, что путь к ffmpeg правильно указан при разработке и что ffmpeg включен в сборку.
Сообщение об ошибке :

Код: Выделить всё

Traceback (most recent call last):
File "C:\***\***\AppData\Local\Programs\Python\Python39\Lib\site-packages\cx_Freeze\initscripts\_startup__.py", line 141, in run
module_init.run(name + "__main__")
File "C:\***\***\AppData\Local\Programs\Python\Python39\Lib\site-packages\cx_Freeze\initscripts\console.py", line 25, in run
exec(code, main_globals)
File "merger.py", line 8, in 
from moviepy.editor import VideoFileClip
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\site-packages\moviepy\editor.py", line 36, in 
from .video.io.VideoFileClip import VideoFileClip
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\site-packages\moviepy\video\io\VideoFileClip.py", line 3, in 
from moviepy.audio.io.AudioFileClip import AudioFileClip
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\site-packages\moviepy\audio\io\AudioFileClip.py", line 3, in 
from moviepy.audio.AudioClip import AudioClip
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\site-packages\moviepy\audio\AudioClip.py", line 7, in 
from moviepy.audio.io.ffmpeg_audiowriter import ffmpeg_audiowrite
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\site-packages\moviepy\audio\io\ffmpeg_audiowriter.py", line 7, in 
from moviepy.config import get_setting
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\site-packages\moviepy\config.py", line 36, in 
FFMPEG_BINARY = get_exe()
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\site-packages\imageio\plugins\ffmpeg.py", line 173, in get_exe
return imageio_ffmpeg.get_ffmpeg_exe()
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\site-packages\imageio_ffmpeg\_utils.py", line 28, in get_ffmpeg_exe
exe = _get_ffmpeg_exe()
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\site-packages\imageio_ffmpeg_utils.py", line 44, in _get_ffmpeg_exe
exe = os.path.join(_get_bin_dir(),
FNAME_PER_PLATFORM.get(plat, ""))
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\site-packages\imageio_ffmpeg_utils.py", line 69, in _get_bin_dir
ref = importlib.resources.files("imageio_ffmpeg.binaries") / "__init__.py"
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\importlib\resources.py", line 147, in files
return _common.from_package(_get_package(package))
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\importlib_common.py", line 14, in from_package
return fallback_resources(package.__spec__)
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\importlib_common.py", line 18, in fallback_resources
package_directory = pathlib.Path(spec.origin).parent
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\pathlib.py", line 1082, in __new__
self = cls._from_parts(args, init=False)
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\pathlib.py", line 707, in _from_parts
drv, root, parts = self._parse_args(args)
File "C:\***\***\AppData\Local\Programs\Python\Python39\lib\pathlib.py", line 691, in _parse_args
a = os.fspath(a)
TypeError: expected str, bytes or os.PathLike object, not NoneType
Эта ошибка возникает, когда я пытаюсь использовать функцию VideoFileClip MoviePy.
Подробнее:
Версия Python: 3.9
Версия Moviepy: последняя с GitHub
Версия cx_Freeze: 7.1.1
ОС: Windows 11
I включили ffmpeg в сборку cx_Freeze с помощью параметра include_files и установили переменную среды IMAGEIO_FFMPEG_EXE как при разработке, так и при замороженной установке.
Фрагмент кода:

Код: Выделить всё

import os
import sys
from moviepy.editor import VideoFileClip

def configure_ffmpeg():
ffmpeg_path = os.path.join(os.path.dirname(sys.executable), 'ffmpeg', 'bin', 'ffmpeg.exe')
if not os.path.exists(ffmpeg_path):
raise FileNotFoundError(f"ffmpeg executable not found at {ffmpeg_path}")
os.environ["IMAGEIO_FFMPEG_EXE"] = ffmpeg_path

configure_ffmpeg()
clip = VideoFileClip('path_to_video.mp4')
Конфигурация Setup.py:

Код: Выделить всё

from cx_Freeze import setup, Executable

build_exe_options = {
"packages": ["os", "moviepy", "idna"],
"include_files": [('C:/ffmpeg/bin', ffmpeg/bin')]}

setup(
name="MyApp",
version="0.1",
description="My MoviePy application",
options={"build_exe": build_exe_options},
executables=[Executable("script.py")])
Я не понимаю, почему исполняемый файл не может найти или использовать ffmpeg, хотя путь кажется установленным правильно и работает вне замороженной среды. Как устранить эту ошибку, чтобы обеспечить правильную работу ffmpeg в зависшей среде cx_Freeze?
Приложение выдает ошибку, связанную с ffmpeg, когда я пытаюсь запустить замороженный исполняемый файл, несмотря на установку пути ffmpeg правильно разрабатывать и обеспечивать включение ffmpeg в сборку.

Подробнее здесь: https://stackoverflow.com/questions/786 ... -cx-freeze

Вернуться в «Python»