Blanktar

  1. top
  2. blog
  3. 2013
  4. 05

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しちゃえばソースは消しても問題ないみたいね。 まあ、動作は保証しかねますが。

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