1 Востаннє редагувалося frz (04.04.2021 00:47:53)

Тема: Найефективніший спосіб імпортувати функцію Python з вебсервера

Думки вголос.

Який найефективніший спосіб імпортувати функцію Python, яка хоститься на вебсервері?
Припустимо, на сайті міститься скрипт file1.py, в якому є функція function1(parameter1).

https://www.tutorialspoint.com/download … ing-python

import requests

url = 'https://example.com/file1.py'
r = requests.get(url, allow_redirects=True)

open('/tmp/file1.py', 'wb').write(r.content)

https://stackoverflow.com/a/45205175

from file1.py import function1

import file1.py as fl

fl.function1(parameter1)

Ще не тестив, та виглядає на правдоподібний варіант.
Та от чи це можна назвати best practice...

Навіщо це взагалі - бо функція доволі громіздка і замість відображати ціле простирадло як є, користувачам потрібно дати лише інтерфейс із інкапсульованим кодом. В даному конкретному випадку варіант із Flask не підходить, оскільки код повинен виконуватися саме на цьому хості через питання доступу, а захостити аплікацію Flask на цьому хості нема можливості.

2

Re: Найефективніший спосіб імпортувати функцію Python з вебсервера

Виділив питання у нову тему

3

Re: Найефективніший спосіб імпортувати функцію Python з вебсервера

Так робити не можна. Загалом тут є 2 суттєві проблеми:
1. Безпека. Файл за посиланням можна підмінити, потрібні підписи.
2. Залежності. Файл за посиланням може імпортувати інші файли, які теж треба завантажувати.

Перша проблема сяк-так вирішується протоколом https. Хоча краще б було щось надійніше саме для коду.
Друга проблема потребує створення пакету.

Ну і нічого не зрозумів з мотивації. Нащо користувачам відображати функцію? І чому її не можна один раз завантажити?

Подякували: leofun011

4

Re: Найефективніший спосіб імпортувати функцію Python з вебсервера

Крім того, зв'язок між серверами (якщо вони не в одній мережі) може бути повільним та ненадійним. Тобто викликати кожного разу, як потрібна функція function1, завантаження, і одразу переписувати цільовий файл може мати негативні наслідки.
Спробуйте детальніше пояснити, чому саме ви маєте завантажувати функцію і не можете лише дані (з кешуванням).

Подякували: leofun011

5

Re: Найефективніший спосіб імпортувати функцію Python з вебсервера

Нащо користувачам відображати функцію?

Йдеться не про бізнес користувачів, котрі не знають що таке Python взагалі. Це користувачі-аналітики а також інші менш скілові девелопери. Це середовище схоже на Jupyter Notebook (тільки раниться на кластері), де потрібно викликати кастомні функції Python.

І так як це інтранет, то питання безпеки не критичне. Єдине що url endpoint про всяк випадок хешується.

І чому її не можна один раз завантажити?

Бо вносяться зміни відповідно до бізнес-вимог. Потім щоб не потрібно було заходити і змінювати в кожне місце де використовується ця функція.

Залежності. Файл за посиланням може імпортувати інші файли, які теж треба завантажувати.

Поки що такої проблеми нема, однак на майбутнє дійсно варто враховувати, дякую.

6

Re: Найефективніший спосіб імпортувати функцію Python з вебсервера

як щодо такого варіанту?

httpimport

https://github.com/operatorequals/httpimport

>>> with httpimport.remote_repo(['package1','package2','package3'], 'http://my-codes.example.com/python_packages'):
...     import package1
...
Подякували: frz1