Как установить библиотеку и выполнить код с помощью POST-запроса? [Django]
Я пытаюсь выполнить код python, который я принимаю как пользовательский ввод и возвращаю вывод кода, но я хочу использовать библиотеку, чтобы найти временную сложность программы, но она явно выдает ошибку module not found, когда я пытаюсь выполнить код с библиотекой в нем.
Вот мой фронтенд, который я создал, используя react.

Код на Python работает отлично, когда я не внедряю никаких библиотек. Я отправляю код в django через REST Api, выполняю код, записываю вывод в файл и возвращаю вывод, как показано ниже -
Мой файл viewsets.py -
from rest_framework.viewsets import ModelViewSet
from .models import Code
from .serializers import CodeSerializer
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.status import HTTP_200_OK, HTTP_204_NO_CONTENT
import sys
class CodeViewSet(ModelViewSet):
queryset = Code.objects.all()
serializer_class = CodeSerializer
lookup_field = "id"
@action(detail=True, methods=["HEAD", "GET", "POST"], url_path="runcode")
def runcode(self, request, id=None):
if request.method in ("GET", "HEAD"):
return Response(status=HTTP_204_NO_CONTENT)
else:
code_data = self.get_object()
try:
orig_stdout = sys.stdout
sys.stdout = open('file.txt', 'w')
exec(code_data.code)
sys.stdout.close()
sys.stdout = orig_stdout
output = open('file.txt', 'r').read()
except Exception as e:
sys.stdout.close()
sys.stdout = orig_stdout
output = e
print(output)
return Response(output, status=HTTP_200_OK)
Мой models.py для справки -
from django.db import models
from django_extensions.db.fields import AutoSlugField
class Code(models.Model):
code = models.TextField()
Я выполняю код в моем viewsets.py, где я направил запрос на .../id/runcode url. Я хочу запустить скрипт или что-то подобное на POST-запросе, чтобы выполнение кода могло установить библиотеки на POST-запрос, чтобы не возникала ошибка ModuleNotFound при использовании внешних библиотек.
Пример -
Я принимаю ввод кода как -
def single_loop(n):
for i in range(n):
print(n+1)
и затем я хочу выполнить следующий код для вышеуказанного ввода -
import big_o
def single_loop(n):
def single_loop(n):
for i in range(n):
print(n+1)
print(big_o.big_o(single_loop, big_o.datagen.n_, n_repeats=20, min_n=2, max_n=100)[0])
<
<