1. ホーム
  2. python

[解決済み] Python で importlib.import_module を使ってモジュールをインポートする方法

2022-03-07 07:59:49

質問

を使おうとしています。 importlib.import_module をPython 2.7.2で実行すると、奇妙なエラーに遭遇します。

次のようなdir構造を考えてみましょう。

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

a/b/__init__.py は以下のようなコードになっています。

    importlib

    mod = importlib.import_module("c")

(実際のコードでは "c" は名前を持つ)

を試してみてください。 import a.b は、次のようなエラーを発生させます。

    >>> import a.b
    トレースバック (最も最近の呼び出し):
      ファイル "", 行 1, in 
      ファイル "a/b/__init__.py", 行 3, in 
        mod = importlib.import_module("c")
      ファイル "/opt/Python-2.7.2/lib/python2.7/importlib/__init__.py", 行 37, in import_module
        __import__(name)
    ImportError: c という名前のモジュールはありません。

何が足りないのでしょうか?

ありがとうございます。

解決方法は?

相対インポートの場合は、以下のようになります。

  • a) 相対名を使用する
  • b) 明示的にアンカーを提供する

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

もちろん、代わりに絶対的なインポートを行うこともできます。

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