web-dev-qa-db-ja.com

PythonモジュールをURLからインポートするにはどうすればよいですか?

実験として、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()
17
d3pd

はい、できます。

モジュールをURLでフェッチし、取得したら、eval()を使用して実行できる文字列として保存します。

urllibevalを使用すると、簡単に実行できます。

_import urllib.request
a = urllib.request.urlopen(url)
eval(a.read())
_

一部のモジュール(PygameやPydubなど)にはランタイムが必要であり、ランタイムがないためにeval()を使用して実行できなかったことに注意してください。

あなたのプロジェクトで頑張ってください、私が助けてくれたことを願っています。

7
Simon

基本的に、この目的のために httpimport と呼ばれるモジュールがあります。現在、パッケージ/モジュールを含むURLからのインポートと、URLにあるアーカイブ(.tar。* 、。 Zip)からのインポートをサポートしています(これはリモート依存関係を処理する方法です)。

Pythonのインポートシステムと完全に統合されているため、exec何もin globals()する必要はありません。あなただけ:

>>> with httpimport.remote_repo(['package1'], 'http://my-codes.example.com/python_packages'):
...     import package1
...

その後 package1は、ローカルリソースのように、スクリプトの残りの部分で使用できます。


免責事項:私はこのモジュールの作成者です。

4
operatorequals