Код: Выделить всё
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
Подробнее здесь: https://stackoverflow.com/questions/791 ... ing-nuitka