Компиляция перегонных миграций с использованием NuitkaPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Компиляция перегонных миграций с использованием Nuitka

Сообщение Anonymous »

В нашем проекте мы столкнулись с тем, что нам нужно скомпилировать приложение на Python с помощью Nuitka. Это приложение представляет собой простую ерунду. В этом нет ничего сложного. Однако вместе с запуском приложения запускаются и перегонные миграции. Вот тут и возникла проблема. Мы хотим развернуть приложение вместе с миграциями в одном двоичном файле (код Python не разрешен в нашем контейнере). Грубо говоря, main.py выглядит так:

Код: Выделить всё

from alembic.config import Config
from alembic import command

def run_application() -> None:
return None

if __name__ == "__main__":
alembic_cfg = Config("alembic.ini")
command.upgrade(alembic_cfg, "head")
run_application()

То есть сначала запускаются перегонные миграции, а потом уже наше приложение.
Теперь к сути проблемы. Nuitka преобразует код Python в C, а затем компилирует его. Чтобы преобразовать и выполнить код, его необходимо импортировать. Однако алембик работает по-другому. Эта библиотека сканирует папку с миграциями и конвертирует их в модули, а затем выполняет: прямого импорта нет. Вот функция, с помощью которой считываются миграции:

Код: Выделить всё

def load_python_file(dir_: str, filename: str) -> ModuleType:
"""Load a file from the given path as a Python module."""

module_id = re.sub(r"\W", "_", filename)
path = os.path.join(dir_, filename)
_, ext = os.path.splitext(filename)
if ext == ".py":
if os.path.exists(path):
module = load_module_py(module_id, path)
else:
pyc_path = pyc_file_from_path(path)
if pyc_path is None:
raise ImportError("Can't find Python file %s" % path)
else:
module = load_module_py(module_id, pyc_path)
elif ext in (".pyc", ".pyo"):
module = load_module_py(module_id, path)
else:
assert False
return module

Он преобразует файл Python в модуль, а затем с ним работает перегонный куб. Коммерческая версия nuitka имеет встроенные файлы (которые встроены в двоичный файл). Это решит проблему: мы сможем поместить внутрь бинарного файла папку с миграциями. Однако хотелось бы попробовать собрать его более правильно. Есть у кого идеи?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ing-nuitka
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Компиляция нескольких файлов Python и файлов JSON в один исполняемый файл с помощью Nuitka
    Anonymous » » в форуме Python
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Предотвратить рефлекс (с использованием Alembic) от генерации миграций существующих таблиц в базе данных
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • EF Core 8: миграция добавляет AlterColumn в каждый столбец для последующих миграций.
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Стратегия обработки нескольких миграций EF
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Запускайте код после применения всех миграций EF Core.
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»