GitHub上の.pyファイルを直接インポートできると便利だなと思ったのでコードを書いてみました。
GitHub上の.pyファイルのインポート方法
基本的にはweb上の.pyファイルを直接インポートすることはできません。多分危険だからだと思います。
手順、ソースコードを以下に示しますが、以下のサイトの情報がほぼそのままで、最新の環境に合わせて修正しただけです。
手順は、
です。
ソースコードは次のとおりです。汎用化のため、いくつかのオプションを付けています。
import os import tempfile import urllib.request def moduleimporterOnGitHub(url, cache=False, tmpfilename=None): # read raw data(binary) On Github with urllib.request.urlopen(url) as f: l = f.read() #.decode(encoding) # file open & write data if tmpfilename is None: with tempfile.NamedTemporaryFile(delete=False, suffix='.py', dir='.') as fp: fp.write(l) name = fp.name else: with open(tmpfilename, mode='wb') as f: f.write(l) name = tmpfilename # import imp = __import__(os.path.basename(name)[:-3]) # delete tmpfile if not cache : os.remove(name) return imp
上記を使って、GitHub上の以下のコードをインポート、実行してみます。
def message(): print('Hello, world!')
https://raw.githubusercontent.com/computational-sediment-hyd/moduleimporterOnGitHub/main/tmp.py
結果は以下のとおりで上手くいくことが確認できます。
url = 'https://raw.githubusercontent.com/computational-sediment-hyd/moduleimporterOnGitHub/main/tmp.py' m = moduleimporterOnGitHub(url, cache=False, tmpfilename=None) m.message() # Hello, world!
さらに、上記の関数moduleimporterOnGitHubをmoduleimporterOnGitHub.pyの外部ファイルとして作業ディレクトリに保存すると、以下のとおりにより汎用的な形式になります。
import moduleimporterOnGitHub as mod url = 'https://raw.githubusercontent.com/computational-sediment-hyd/moduleimporterOnGitHub/main/tmp.py' m = mod.moduleimporterOnGitHub(url, cache=False, tmpfilename=None) m.message() # Hello, world!
GitHubでソースコードを管理している方には意外と役立つかと思います。
参考:GitHubの.pyのソースコードのurlの取得方法
ソースコードのページで「Raw」ボタンをクリックしたページのURLを取得する。
