我试图编写一个使用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'
这很奇怪,因为根据this文档确实存在。甚至更奇怪的是,当我打开我的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但是没有做任何事情。我也查看了源代码以确保函数实际存在(确实存在)。
更新
这是this问题的副本。最好的答案是
这是因为scipy模块没有任何名为的属性 疏。只有在导入scipy.sparse时才会定义该属性。
当您导入时,子模块不会自动导入 SciPy的;你需要明确导入它们。大多数情况也是如此 包,虽然包可以选择导入自己的子模块 如果它想。 (例如,如果scipy / init .py包含a 语句导入scipy.sparse,然后是稀疏子模块 导入scipy时导入。)
这导致我改变我的问题为什么python以这种方式工作?有好处吗?