为什么我的python脚本中出现no属性错误而不是python解释器?

时间:2016-02-03 07:49:45

标签: python python-module moviepy

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

0 个答案:

没有答案