2012-05-20 29 views
28

私はをpython 2.7.2で使用しようとしています。importlib.import_moduleを使用してPythonでモジュールをインポートする方法

は、以下のディレクトリ構造を考えてみましょう:

 
    a 
    | 
    + - __init__.py 
     - b 
     | 
     + - __init__.py 
      - c.py 

a/b/__init__.pyは、次のコードを持っています

 
    import importlib 

    mod = importlib.import_module("c") 

(実際のコードでは"c"は名前を持っています。)

a.bをインポートしようとすると、得次のエラー:

 
    >>> import a.b 
    Traceback (most recent call last): 
     File "", line 1, in 
     File "a/b/__init__.py", line 3, in 
     mod = importlib.import_module("c") 
     File "/opt/Python-2.7.2/lib/python2.7/importlib/__init__.py", line 37, in import_module 
     __import__(name) 
    ImportError: No module named c 

私は何が欠けていますか?

ありがとうございました。相対的な輸入のために

答えて

44

あなたは相対名bを使用)する必要があります)、明示的にアンカーを提供します。もちろん

importlib.import_module('.c', 'a.b') 

、あなただけではなく、絶対的なインポートを行うこともできます。

importlib.import_module('a.b.c') 
11

私はそれがだと思いますあなたはabについて知る必要がないので、importlib.import_module('.c', __name__)を使用する方がよいでしょう。

また、importlib.import_module('a.b.c')を使用する必要がある場合は、import a.b.cを使用しないのはなぜですか?

+4

(彼らは空であっても)各フォルダ/サブフォルダを__init__.pyを作成することを忘れないでください。 –

1

とモジュール名が可変である場合には便利です

+0

ありがとう!これは私の問題を解決しました! – user

関連する問題