Python 2 сценария в Django 3 - PullRequest
       10

Python 2 сценария в Django 3

0 голосов
/ 23 февраля 2020

У меня есть скрипт, который использует библиотеку, которая недоступна в python 3. Я использовал ответ (exe cnet) на этот вопрос , чтобы вызвать python 2 скрипт X из python 3 скрипт Y. Это прекрасно работает без каких-либо проблем. Я добавил оба сценария в каталог приложения Django, в котором хочу использовать сценарий X. Тестирующий сценарий Y по-прежнему работает. Импортируется скрипт Y, который вызывается из views.py. Вызов функции в Y-форме views.py работает. Но теперь сценарий Y больше не находит сценарий X.

Ошибка Django говорит ImportError: No module named X

Если я добавлю сценарий n сценария settings.py в INSTALLED_APPS Я получу

ModuleNotFoundError: No module named 'X'.

Есть ли более простой способ запустить скрипт python2 из django 3?

1 Ответ

1 голос
/ 23 февраля 2020

Я не рекомендую делать это, но если вы действительно вверх по течению:

  • создайте Python 2 virtualenv для вашего Python 2 сценария, который называется что-то вроде py_env
  • , установите нужный пакет в py2_env

Затем в представлении (которое работает Python 3+ и Django 2 +):

from subprocess import check_output
from django.views.generic import TemplateView

class MyView(TemplateView):
    template_name = "my_app/my_template.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["program_output"] = check_output(
            "source /path/to/py2_env/bin/activate && /path/to/py2_script.py",
            shell=True,
        ).decode("utf-8")
        return context

Этот пример запустит сценарий Python 2 из представления и поместит вывод программы в контекст как program_output. Удачи!

...