実験として、URLからPythonモジュールをインポートする方法を確認したいと思います。ここでの仮想的な目標は、モジュールを最新の状態に保つ中央の場所からインポートすることです。方法これはできますか?
私の試みは次のとおりです。
>>> import urllib
>>>
>>> def import_URL(URL):
... exec urllib.urlopen(URL) in globals()
...
>>> import_URL("https://cdn.rawgit.com/wdbm/shijian/master/shijian.py")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in import_URL
TypeError: exec: arg 1 must be a string, file, or code object
編集: Martijn Pieters リモートモジュールの文字列表現をもたらすサンプルコードの修正を特定しました。結果のコードは次のとおりです。
import urllib
def import_URL(URL):
exec urllib.urlopen(URL).read() in globals()
はい、できます。
モジュールをURLでフェッチし、取得したら、eval()
を使用して実行できる文字列として保存します。
urllib
とeval
を使用すると、簡単に実行できます。
_import urllib.request
a = urllib.request.urlopen(url)
eval(a.read())
_
一部のモジュール(PygameやPydubなど)にはランタイムが必要であり、ランタイムがないためにeval()
を使用して実行できなかったことに注意してください。
あなたのプロジェクトで頑張ってください、私が助けてくれたことを願っています。
基本的に、この目的のために httpimport
と呼ばれるモジュールがあります。現在、パッケージ/モジュールを含むURLからのインポートと、URLにあるアーカイブ(.tar。* 、。 Zip)からのインポートをサポートしています(これはリモート依存関係を処理する方法です)。
Pythonのインポートシステムと完全に統合されているため、exec
何もin globals()
する必要はありません。あなただけ:
>>> with httpimport.remote_repo(['package1'], 'http://my-codes.example.com/python_packages'):
... import package1
...
その後 package1
は、ローカルリソースのように、スクリプトの残りの部分で使用できます。
免責事項:私はこのモジュールの作成者です。