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 が含まれている場合、scipy をインポートするたびにスパース サブモジュールがインポートされます。)
なぜPythonがこのように機能するのですか? メリットはありますか?