Pythonでネットワーク上のコードをインポートする
impモジュールを使うと自前のimportを記述できそうだということがわかったので、試しにはてなダイアリーに簡単なソースコードをアップロードしてPCのローカルにあるファイルからインポートして関数を実行させてみました。
実装にはhttp://antas.jp/blog/yamakawa/2008/03/python_1.htmlを引用させてもらいました。
まずはネットワーク上においたソースファイル。
def greeting(name): print "Hello, %s!" % name
次にそのファイルをインポートするソースコード。
# coding: utf-8 import imp def import_from_string(name, code_str, default_dict = {}): # ref: http://antas.jp/blog/yamakawa/2008/03/python_1.html """ create module from string. """ mod = imp.new_module(name) mod.__dict__.update(default_dict) mod_dict = mod.__dict__ mod_dict["__source__"] = code_str if not mod_dict.has_key("__builtins__"): import __builtin__ mod_dict["__builtins__"] = __builtin__ # eval code_str in new module context. exec code_str in mod_dict return mod import urllib conn = urllib.urlopen("http://d.hatena.ne.jp/yatt/files/greeting.py?d=y") greeting = import_from_string("greeting", conn.read()) greeting.greeting("yatt")