私はplugins
フォルダを持ち、python Project.py --plugin TestPlugin.test
で実行されているプロジェクトを持っています。コマンドライン引数に基づいてモジュールを動的にロードする方法はありますか?
plugins/
TestPlugin/
test.py
Project.py
PluginLoader.py
私はトラブルプラグインローダーを持つモジュールとしてtest.pyのロードを抱えている:
ディレクトリ構造は次のようになります。 PluginLoader.pyで
これは私の関数である:
def loadPlugin(pluginName): #would be "TestPlugin.test" this is passed in from Project.py which gets the value from parseargs.
plugin = pluginName.rsplit(".", 1)
if len(plugin) == 2:
module = import_module(plugin[1], package='.'.join(["plugins", plugin[0]])
print(getattr(module, "test"))
return module
私はこのエラーを取得しておいてください。
python Project.py --plugin TestPlugin.test
Traceback (most recent call last):
File "Project.py", line 107, in <module>
plugin = PluginLoader.loadPlugin(comArgs.plugin)
File "PluginLoader.py", line 15, in loadPlugin
module = import_module(plugin[ 1 ], package = ".".join(["plugins", plugin[ 0 ] ]))
File "/Users/********/anaconda/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'test'
私はまだのpythonにかなり新しいだと私は、私はおそらく設定していないよ知っています私のモジュールを正しくアップすることができますが、私はなぜそうは分かりません。
それで、私のPluginLoader.pyにプラグインフォルダをインポートする必要があるように見えます。正しい方向に私を指してくれてありがとう。 – TripWired