BlankTar

about | blog | works | photo

普通さ、ライブラリはローカルに置くよね。
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しちゃえばソースは消しても問題ないみたいね。
まあ、動作は保証しかねますが。

あと、これを乱用するとサーバーの管理者に迷惑です。
頻繁に使う場合は、サーバー管理者に確認をとってください。一応ね。
< pythonのモジュールをC言語から使う pythonは標準でtemplateが使えるらしい >