AttributeError: 'module' 对象没有属性 'audio_fadein'

Jay*_*yce 4 python cx-freeze moviepy

我使用 cx_freeze 将 python 项目构建到一个带有 .exe 及其依赖项的文件夹中,但是当我运行 .exe 时出现错误:

AttributeError: module 'moviepy.audio.fx.all' has no attribute 'audio_fadein'
Run Code Online (Sandbox Code Playgroud)

属性错误

我已阅读 MoviePy 的文档,但无法找出发生这种情况的原因。我的 Python 程序在 IDE (PyCharm) 中完美运行,但在编译后,我收到 MoviePy 错误。我使用了推荐的from moviepy.editor import *

我实际上并没有audio_fadein直接在我的脚本中使用 ,所以当我显示我的视频时它必须被 MoviePy 调用。这是代码:

def cherrybyte():
    pygame.display.set_caption('©2017 CherryByte™ Software')
    pygame.mouse.set_visible(False)
    logo = VideoFileClip('CherryByte Logo.mp4')
    logo.preview()
    pygame.mouse.set_visible(True)
Run Code Online (Sandbox Code Playgroud)

编辑:我现在也尝试将导入语句更改为from moviepy.editor import VideoFileClip但完全相同的错误。

小智 7

我在使用 pyinstaller 构建 .exe 文件时遇到了同样的错误。但是,我将导入语句更改为from moviepy.video.io.VideoFileClip import VideoFileClip 并且它起作用了。


小智 2

对于遇到同样问题的每个人,我通过修改所选的 初始化文件解决了这个问题,如下图所示:

文件位置

其中有一段代码导入 fx 文件夹中的每个函数:

__all__ = [name for _, name, _ in pkgutil.iter_modules(
    fx.__path__) if name != "all"]
for name in __all__:
    exec("from ..%s import %s" % (name, name))
Run Code Online (Sandbox Code Playgroud)

注释此块并手动导入所需的每个函数,如下所示:

from moviepy.video.fx.accel_decel import accel_decel
from moviepy.video.fx.blackwhite import blackwhite
from moviepy.video.fx.blink import blink
from moviepy.video.fx.crop import crop
from moviepy.video.fx.even_size import even_size
from moviepy.video.fx.fadein import fadein
from moviepy.video.fx.fadeout import fadeout
from moviepy.video.fx.mirror_x import mirror_x
from moviepy.video.fx.mirror_y import mirror_y
from moviepy.video.fx.resize import resize
#etc.
Run Code Online (Sandbox Code Playgroud)

对 moviepy.audio.fx.all 中的 init 执行相同操作