2017-06-28 12 views
0

私のアプリケーションにフィルタを動的に読み込んでいます。私は私のMain.pyで動的に読み込まれたモジュール内でモジュールを静的にインポートする方法

:今、私は、既存のフィルタを拡張することができるようにしたい

varianceFilterを:

spec = importlib.util.spec_from_file_location(filter, file) 
inst = importlib.util.module_from_spec(spec) 
spec.loader.exec_module(inst) 

私は負荷とは、正常に動作することをvarianceFilter.pyと呼ばれるファイルを持っています。 PY:

def run(images): 
    #do something 
    return result 

は、今私はそうのように、このフィルタを再利用して拡張したい:

testFilter.py:しかし、すぐに私はvarianceFilter.py例外

No module named 'varianceFilter' 

がスローされたインポートしようとして

import varianceFilter as vf 

def run(images): 
    ret = vf.run(images) 
    #do something with ret 
    return ret 

。両方のファイルが同じディレクトリにあります。 私は何が間違っていますか?

EDIT:

私のディレクトリ構造は次のとおりです。

main.py 
filters/varianceFilter.py 
filters/testFilter.py 

メインディレクトリにvarianceFilterのコピーを作成した後、testFilter.pyが正常に動作します。

+0

例外はありますか?完全なスタックトレースを含む完全なエラーメッセージは、ほとんどの場合、デバッグに非常に役立ちます。 –

+0

感謝juanpa、私はあなたの質問を更新しました – cbueltem

答えて

0

空のファイル

filters/__init__.py 

の追加と

import filters.varianceFilter as vf 

にtestFilter.pyでimportステートメントを変更するには、問題を修正しました。

+0

あなたはこれをやっている方法について慎重に考える必要があります。あなたの質問から、通常のインポート機構の外にモジュールをロードしているように見えます。あなたのソリューションは、あなたが示したファイルに対して機能しますが、他の場所から「プラグイン」をインポートしようとすると、同じ問題が再発する可能性が高くなります。 – BrenBarn

+0

BrenBarn、それは本当です。ただし、素晴らしい構造との取引制限はそれほど難しくありません。一度含まれているディレクトリ(「フィルタ」)の名前が変更されないと、自由に移動できます。 – cbueltem

関連する問題