pythonのソースをweb越しにimportしてみる

普通さ、ライブラリはローカルに置くよね。 javascriptなんかはweb上に置いてあることもあるけれど、pythonはローカル。 いやあえて、pythonでもweb上のモジュールを自由にimport出来たら面白いんじゃないか? とか思った。 という訳で、試してみた。

import urllib2
import tempfile
import os

def ImportFromWeb(url):
	# 一時ファイルを用意
	out, name = tempfile.mkstemp(suffix='.py', dir='.')
	out = os.fdopen(out, 'w')

	# URLを開いて、一時ファイルに書き込む
	source = urllib2.urlopen(url)
	out.write(source.read())

	# URL/ファイルを閉じる
	source.close()
	out.close()

	# 一時ファイルをimportする
	imp = __import__(os.path.basename(name)[:-3])

	# 一時ファイルを削除
	#  ついでに.pycファイルも削除
	os.remove(name)
	if os.path.isfile(name[:-3] + '.pyc'):
		os.remove(name[:-3] + '.pyc')

	# importしたオブジェクトを返却
	return imp

こんな感じ。

test = ImportFromWeb('http://example.com/python/source.py')
test.run()

みたいに使えます。

一度importしちゃえばソースは消しても問題ないみたいね。 まあ、動作は保証しかねますが。

あと、これを乱用するとサーバーの管理者に迷惑です。 頻繁に使う場合は、サーバー管理者に確認をとってください。一応ね。