Импортировать модуль python через Интернет / несколько протоколов или динамически создавать модуль

Можно ли import модуль Python из Интернета с помощью http ( s ), ftp , smb или любого другого протокола? Если да, то как? Если нет, то почему?

Я предполагаю, что Python использует больше одного протокола (чтение файловой системы) и позволяет ему использовать и другие. Да, я согласен, что это будет намного быстрее, но некоторые оптимизации и большие будущие полосы пропускания, безусловно, уравновешивают его.

Например:

 import site site.addsitedir("https://bitbucket.org/zzzeek/sqlalchemy/src/e8167548429b9d4937caaa09740ffe9bdab1ef61/lib") import sqlalchemy import sqlalchemy.engine 

  • Импортировать модуль Python в шаблон Jinja?
  • Как предотвратить состояние гонки, когда несколько процессов пытаются записать и затем прочитать из файла одновременно
  • ImportError: нет модуля с именем ***** в python
  • Каков правильный способ сортировки операторов Python `import x` и` from x import y`?
  • Импорт динамического модуля в Python
  • import matplotlib.pyplot зависает
  • Python: импорт другого модуля с тем же именем
  • Каковы хорошие эмпирические правила для импорта Python?
  • 3 Solutions collect form web for “Импортировать модуль python через Интернет / несколько протоколов или динамически создавать модуль”

    В принципе, да, но все инструменты, встроенные в какую-либо поддержку, проходят через файловую систему.

    Для этого вам нужно будет загрузить источник из любого места, скомпилировать его с помощью compile и __dict__ его с помощью __dict__ нового модуля. Смотри ниже.

    Я оставил на самом деле захватывающий текст из Интернета и разбор uris и т. Д. В качестве упражнения для читателя (для новичков: я предлагаю использовать requests )

    В терминах pep 302 это будет реализация за функцией loader.load_module (параметры разные). См. Этот документ для получения подробных сведений о том, как его интегрировать с инструкцией import .

     import imp modulesource = 'a=1;b=2' #load from internet or wherever def makemodule(modulesource,sourcestr='http://some/url/or/whatever',modname=None): #if loading from the internet, you'd probably want to parse the uri, # and use the last part as the modulename. It'll come up in tracebacks # and the like. if not modname: modname = 'newmodulename' #must be exec mode # every module needs a source to be identified, can be any value # but if loading from the internet, you'd use the URI codeobj = compile(modulesource, sourcestr, 'exec') newmodule = imp.new_module(modname) exec(codeobj,newmodule.__dict__) return newmodule newmodule = makemodule(modulesource) print(newmodule.a) 

    В этот момент newmodule уже является объектом модуля в области видимости, поэтому вам не нужно его импортировать или что-то еще.

     modulesource = ''' a = 'foo' def myfun(astr): return a + astr ''' newmod = makemodule(modulesource) print(newmod.myfun('bat')) 

    Идеал здесь: http://ideone.com/dXGziO

    Протестировано с python 2, должно работать с python 3 (используется текстовая совместимая печать, используется синтаксис, подобный функции).

    Это, по-видимому, является прецедентом для самозапускаемого крючка импорта. Посмотрите в PEP 302, как именно они работают.

    По сути, вам придется предоставить объект-искатель, который, в свою очередь, предоставляет объект-загрузчик. Я не понимаю этот процесс с первого взгляда (иначе я бы стал более явным), но PEP содержит все необходимые детали для реализации этого материала.

    Другая версия,

    Мне нравится этот ответ. при его применении я немного упростил его – похоже на внешний вид javascript включает в себя HTTP .

    Это результат:

     import os import imp import requests def import_cdn(uri, name=None): if not name: name = os.path.basename(uri).lower().rstrip('.py') r = requests.get(uri) r.raise_for_status() codeobj = compile(r.content, uri, 'exec') module = imp.new_module(name) exec (codeobj, module.__dict__) return module 

    Применение:

     redisdl = import_cdn("https://raw.githubusercontent.com/p/redis-dump-load/master/redisdl.py") # Regular usage of the dynamic included library json_text = redisdl.dumps(host='127.0.0.1') 
    • Совет. import_cdn функцию import_cdn в общую библиотеку, таким образом вы сможете повторно использовать эту небольшую функцию
    • Имейте в виду, что это не удастся, если нет связи с этим файлом по http
    Interesting Posts

    как найти глобальный минимум в оптимизации python с ограничениями?

    Можно ли создавать абстрактные классы в python?

    Мне нужно перебирать текстовый файл и печатать определенный текст, начиная с и заканчивая выполнение условия в python 3

    Является ли день всегда 86 400 секунд в секунду?

    Matplotlib svg как строка, а не файл

    операционная ошибка: база данных заблокирована

    Проверьте, не отсортирован ли столбец без индекса в Pandas

    Более быстрый способ вычисления суммы квадратов разницы между изображением (M, N) и шаблоном (3, 3) для сопоставления шаблонов?

    Интерфейс администратора Django: использование horizontal_filter с встроенным полем ManyToMany

    python pandas извлекает уникальные даты из временных рядов

    Как написать несколько условий if-statement в структуре робота

    Динамическая однострочная печать в Python (время?)

    Логические операторы в Python

    Получить 'unc' путь в OSX установленной долей

    за ошибкой пакета верхнего уровня в относительном импорте

    Python - лучший язык программирования в мире.