2016-12-20 13 views
2

Pythonでは、パッケージ内のモジュールからクラスをインポートする必要があります。私はディレクトリにアプリケーションを持つことによってソースコードを編集せずに私のプログラムを拡張可能にしようとしています。例えば、私は次のディレクトリ構造があります。a.pyb.py両方でモジュールからの動的クラスのインポート

Project/ 
    apps/ 
     __init__.py 
     a.py 
     b.py 
    main.py 

を、私はクラスがすべてに沿ってmain.pyにあったかのようにmain.pyに直接インポートしたいクラスが存在することになります。私はこれらのアプリの名前やそれらのクラスを知らない。これを行う方法はありますか?

また、私は役に立たない答えを求めて周りを探索しました。

EDIT。 私はインポートが動的である必要があることを説明するのを忘れました。ご迷惑おかけして申し訳ありません。

+0

https://docs.python.org/3/tutorial/modules.html#packages – wwii

+0

あなたは、彼らが動的にする必要が何を意味するのですか?実行時に条件付きで物をインポートしますか?あなたは見て、[importlib](https://docs.python.org/3/library/importlib.html)を試しましたか? – wwii

答えて

1

私はこれを友人の助けによって解決しました。ご意見ありがとうございました。

import importlib.machinery 
import os 
for module in os.listdir(apps_dir)[2:]: 
    temp = importlib.machinery.SourceFileLoader(module, 'apps/' + module).load_module() 
    globals().update(temp.__dict__) 
0

あなたはちょうどその(main.pyで)、メインの名前空間内のクラスをしたい場合、私はあなたが

from apps.a import MyClassA 
from apps.b import MyClassB 
0

main.py

import apps.a 
import apps.b 

apps.a.MyClassA 
apps.b.MyClassB 

またはその代わりに、これは動作するはずができると思います。

from .apps.a import ClassA 
from .apps.b import ClassB 

__init__.pyファイルを配置する必要がありますディレクトリも同様です。

関連する問題