pythonのモジュールやクラスを動的に読み込ませる方法

記事内に商品プロモーションを含む場合があります。
最終更新日:2017年11月26日

環境について

動的にモジュールを読み込ませるための準備

今回紹介する方法は、Python 3.3 から追加された、importlib を使用します。

import importlib

2.x 系では別途インストールする必要があります。

pip install importlib

実際に動的にモジュールをロードする

まずは、helloworld.py のようなファイルを作成して、下記のコードを書いておきます。

def say():
	print('hello')

次に先ほど作成した helloworld.py を動的に読み込ませてみたいと思います。

import importlib
module = importlib.import_module('helloworld')
module.say()

そして実行すると

hello

と表示されます。

モジュール名を動的にしたので、メソッドも動的にしたい

先ほどのコードから、メソッド名をテキストにして実行してみたいと思います。

import importlib
module = importlib.import_module('helloworld')
method = getattr(module, 'say')
method()

こちらも先ほどと同様に

hello

と、表示されます。

単純に、module から「say」を取得して実行しているだけですが、この方法でメソッドも動的に実行できそうです。

注意点

このコードでは、モジュールが存在しないときや、メソッドが存在しないときの処理を書いていないので、適宜実装する必要があります。

import importlib

try:
    module = importlib.import_module('helloworld')
    method = getattr(module, 'say')
    method()
except ModuleNotFoundError:
    print('モジュールが見つからない')
except AttributeError:
    print('メソッドが見つからない')

try ~ except で例外をキャッチしてみた例です。

まとめ

WEB アプリケーションなどを作成していると、アクセスしてきた URL にクラスやメソッドを割り当てたいときがあるので、この方法を使うと、いちいちルーティングを書かなくてもいいので、便利ですね。

bottle.pyで404エラーが発生した時に特定のページや情報を表示したい

bottle.pyで404エラーが発生した時に特定のページや情報を表示したい

bottle.pyを使ってpythonでWEBサイトやWEBサービスを作ってみる

bottle.pyを使ってpythonでWEBサイトやWEBサービスを作ってみる

python PIL 長方形の画像に余白を追加して正方形にリサイズする

python PIL 長方形の画像に余白を追加して正方形にリサイズする

python 3.x pipでopencvをインストールする方法

python 3.x pipでopencvをインストールする方法

Python 絶対パスからファイル名だけを取得する方法

Python 絶対パスからファイル名だけを取得する方法

python 文字列を置換する方法

python 文字列を置換する方法

pythonでos.pathを使ってパスの操作を行う

pythonでos.pathを使ってパスの操作を行う

pythonでコードのインポートを行う

pythonでコードのインポートを行う

Pythonを使ってPDFを指定したページごとにファイル分割

Pythonを使ってPDFを指定したページごとにファイル分割

pythonからMySQLに接続してSQLを実行する

pythonからMySQLに接続してSQLを実行する