0

我正在尝试编写一个使用 python 中的 moviepy 模块编辑视频的程序。我有这个

#!/usr/bin/env python

import os
import math
import moviepy as mp
import mediainfo

class Editor:

    OFFSET = 2 #seconds


    def __init__(self, identified_frames, options, *args, **kwargs):
        self.movie_path = options.video_path
        self.video = mp.editor.VideoFileClip(self.movie_path)
        #Get the FPS of the input movie and round the number up
        self.movie_fps = math.ceil(mediainfo.get_fps(self.movie_fps))
...

但由于某种原因,这会引发此错误:

Traceback (most recent call last):
  File "editor.py", line 179, in <module>
    editor = Editor(args["video"], options)
  File "editor.py", line 16, in __init__
    self.video = mp.editor.VideoFileClip(self.movie_path)
AttributeError: 'module' object has no attribute 'editor'

这很奇怪,因为根据这个文档肯定存在。更奇怪的是,当我打开我的 python 解释器时,我可以毫无问题地做到这一点:

In [1]: import moviepy

In [2]: import moviepy.editor

In [3]: import moviepy as mp

In [4]: mp.editor
Out[4]: <module 'moviepy.editor' from '/usr/local/lib/python2.7/site-packages/moviepy/editor.pyc'>

In [5]: mp.editor.VideoFileClip
Out[5]: <class moviepy.video.io.VideoFileClip.VideoFileClip at 0x1046bca10>

所以 moviepy模块肯定包含editor.VideoFileClip. 如果它在我的解释器中工作,什么会导致我的程序中抛出这个错误?我是否有一些环境变量设置错误或什么?任何帮助将不胜感激。

这就是我所做的:我安装了 python2 和 python3,但确保解释器和程序都使用 python2 运行。我也尝试重新安装moviepy,但没有做任何事情。我还查看了源代码以确保该函数确实存在(确实存在)。

更新:

这是这个问题的副本。最好的答案说

发生这种情况是因为 scipy 模块没有任何名为 sparse 的属性。只有在导入 scipy.sparse 时才会定义该属性。

仅导入 scipy 时,子模块不会自动导入;您需要明确导入它们。大多数包也是如此,尽管包可以根据需要选择导入自己的子模块。(例如,如果 scipy/ init .py 包含语句 import scipy.sparse,那么无论何时 import scipy 都会导入稀疏子模块。)

这导致我将我的问题改为为什么 python 以这种方式工作?有好处吗?

4

0 回答 0