Динамические установленные приложения Django

Я пытаюсь разработать приложение, которое в основном представляет архитектуру плагинов. Каждый плагин представляет собой приложение, которое может быть разработано отдельно и собрано в файл tar.gz. Затем этот файл загружается на сервер и устанавливается с помощью pip ( я использую этот учебник). Я хотел бы узнать, есть ли способ, чтобы django мог загрузить приложение после его установки.

Вот методы, которые я использовал в своем views.py

def upload(request):
    if request.method == 'POST':
        app_file = request.FILES['app'] #gets the builded zip
        name = request.POST['name'] #gets the name of the app
        path = _save_file(app_file) #save the file and return the path
        _install_file(path) #install the tar via pip
        _add_app(name) #try to load in installed apps
        return render(request, 'upload.html')
    return render(request, 'upload.html')


def _save_file(file):
    path = f'/usr/src/mysite/plugins/{file.name}'
    with open(path, 'wb+') as destination:
        for chunk in file.chunks():
            destination.write(chunk)
    return path


def _install_file(path):
    code = subprocess.check_call([sys.executable, '-m', "pip", "install", path])
    print(code)


def _add_app(name):
    installed = settings.INSTALLED_APPS + [name]
    # apps.unset_installed_apps()
    apps.set_installed_apps(installed)
    management.call_command('migrate', name, interactive=False)

Когда я выполняю код и загружаю файл tar.gz, он выводит:

...

web-mysite |   File "/usr/local/lib/python3.9/site-packages/django/apps/registry.py", line 136, in check_apps_ready
web-mysite |     raise AppRegistryNotReady("Apps aren't loaded yet.")
web-mysite | django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.


Я использую сервер dev, используя опцию noreload. Заранее спасибо.

Вернуться на верх