2016-10-11 4 views
0

私はpython -m modulename commandで実行したいモジュールを持っていますが、それらのモジュールをインポートして起動したサブモジュールを参照しています。次のようにファイルのレイアウトは次のとおりです。__main__で動的サブモジュールのインポートに失敗しました

__main__.py
mainmodule/: 
    __init__.py (empty) 
    submodule1.py 
    submodule2.py 
    __main__.py 

次のように:予想通り

import sys, importlib 


commands = {"cmd1": "submodule1", "cmd2": "submodule2"} 
try: 
    cmd = modules[sys.argv[1]] 
except IndexError: 
    cmd = "cmd1" 
except Error: 
    pass 
module = importlib.import_module("."+cmd, "mainmodule") 
  • python -m mainmodulesubmodule1を起動します。
  • python -m mainmodule cmd1作品;
  • python -m mainmodule.submodule1作品;
  • python -m mainmodule.submodule2も有効です。

しかしpython -m mainmodule cmd2は失敗します。

ImportError: No module named mainmodule.submodule2 

なぜ?私は多くの方法でimport値式を変更しようとしましたが、常に同じ方法で失敗します。

+0

辞書検索は、 'IndexError'ではなく' KeyError'で失敗します。また、 'Error'は組み込みの名前ではなく、おそらく' Exception'を意味しますが、あなたのコードでそれをキャッチする必要はありません –

答えて

0

変更;

cmd = modules[sys.argv[1]] 

1つのタイプミスの修正以外
cmd = commands[sys.argv[1]] 

に、私は同じエラーを取得することはできません。おそらくmainmoduleの上のディレクトリからpythonを実行していませんか?または、mainmoduleが正しくインストールされていない可能性がありますか?

関連する問題