1

これから書く予定の Python 3 プログラム用のアドオン システムを作成する方法を探しています。プログラムは、他のすべてを初期化した後、ユーザーが提供したリストを使用して、選択したアドオン (コードや関数を含む Python スクリプト) をインポートします。アドオンは、プログラムに必要な変更を加えます。システムの非常に単純な実装は次のようになります。

for name in addons:
    import name

もちろん、Python インタープリターは「name」という名前のモジュールをインポートしようとするため、この例は機能しません。私の質問は、変数を使用してモジュールをインポートするにはどうすればよいですか? または、それができない場合、アドオン システムを実装する最善の方法は何でしょうか?

4

2 に答える 2

3

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

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

しかし、はい、いずれにせよ、プラグイン/コンポーネントをインポートする場所が必要です。

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

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

于 2012-04-23T07:11:05.237 に答える
1

__import__()Lennartsの回答でメンションエンドとして使用することをお勧めします。次に例を示します。

csv = __import__('csv')
于 2012-04-23T08:33:36.020 に答える