我正在尝试编写一个使用 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 以这种方式工作?有好处吗?