2012-04-23 17 views
1

私は書きたいPython 3プログラム用のアドオンシステムを書く方法を探しています。プログラムは、他のすべてを初期化した後、ユーザーが指定したリストを使用して、選択されたアドオン(コードおよび/または関数を含むPythonスクリプト)をインポートします。アドオンは、プログラムに必要な変更を行います。システムの非常に簡単な実装は次のようになります。Pythonインタプリタは、「名前」という名前のモジュールをインポートしようとするとPython 3の変数の値に基づいてモジュールをインポートする方法は?

for name in addons: 
    import name 

さて、当然のことながら、この例では動作しません。私の質問は、変数を使ってモジュールをインポートするにはどうすればいいですか?または、私がそれを行うことができない場合、アドオンシステムを実装する最良の方法は何でしょうか?

答えて

3

プラグインシステムは、プラグインがそれ自体または関連するオブジェクト/メソッドをどこかのグローバルリストに追加するのと同じくらい簡単です。

もう一方で、zope.componentアーキテクチャのようなものがあります。そこでは、プラグインがリストに自分自身を追加するだけでなく、アプリケーションの一部を置き換えることができるコンポーネントにアプリケーションを作ることができます。 zope.componentはです。です。 :-)

しかし、いずれの場合でも、プラグイン/コンポーネントをインポートする必要があります。

Python 3では、私はimportlib.import_module()を使用します。 importlibはPython 2でも利用でき、Python 2.7にも含まれていますが、それ以上の依存関係を望まない場合は、すべてのバージョンのPythonに存在する__import__()の使用を検討することもできます。

import_module()は、私が使用する前に常に考える必要がある__import__()よりも使いやすいです。

1

Lennartsの回答では、__import__()を使用してください。次に例を示します。

csv = __import__('csv') 
+0

'でSyntaxError:無効はsyntax –

+0

@ThomasK - 右、')フォーマット文字列と私のアプローチは間違っていたので、私は '__import __を(使用例にそれを変更しました。 – user1251007

+0

ところで:それは私の答えを削除し、Lennarts答えに例を追加する方が良いでしょうか?申し訳ありません、私はちょうどここに新しいです... – user1251007

関連する問題