Мы пытаемся развернуть еще одно веб-приложение на нашем VPS. В производстве уже есть одно приложение flask, которое поддерживается интерпретатором Python 3.5.
Теперь нам нужно еще одно - django приложение. Мы настроили наш apache2 для размещения обоих (django работает на поддомене, тогда как flask находится на домене 'root'. Здесь все в порядке. Но, поскольку приложение flask использует глобальный python интерпретатор (версия 3.5), мы не можем запустить django, поскольку для него требуется версия 3.6 или новее.
Вот django скрипт WSGI:
import os
import sys
print('Python version is ... ') # 3.5
python_home = '/var/www/mysite/venv'
activate_this = python_home + '/bin/activate_this.py'
exec( open(activate_this).read() )
print(sys.executable) # in case of virtualenv it refers to /usr/bin/python3.5
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/mysite/mysite")
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
application = get_wsgi_application()
Мы могли бы обновить наш интерпретатор до 3.6, но так как установленное flask приложение находится в производстве, наши менеджеры не могут этого делать. И это нормально, вероятно
Если мы go с virtualenv, тем не менее, оно создало виртуальную среду с существующим глобальным интерпретатор, как написано выше версии 3.5.
И вот где мы застряли сейчас. Журнал Apache2 постоянно говорит нам:
[wsgi:error] mod_wsgi (pid=10081): Target WSGI script '/var/www/mysite/mysite/wsgi.py' cannot be loaded as Python module.
[wsgi:error] mod_wsgi (pid=10081): Exception occurred processing WSGI script '/var/www/mysite/mysite/wsgi.py'.
[wsgi:error] Traceback (most recent call last):
[wsgi:error] File "/var/www/mysite/mysite/wsgi.py", line 18, in <module>
[wsgi:error] from django.core.wsgi import get_wsgi_application
[wsgi:error] ImportError: No module named 'django'
Если мы запустим python3
в терминале и затем from django.core.wsgi import get_wsgi_application
мы собираемся git это:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/ivan/.local/lib/python3.5/site-packages/django/core/wsgi.py", line 2, in <module>
from django.core.handlers.wsgi import WSGIHandler
File "/home/ivan/.local/lib/python3.5/site-packages/django/utils/crypto.py", line 6, in <module>
import secrets
ImportError: No module named 'secrets'
И мы предполагаем, что обновление решило бы нашу проблему, так как django требует версии 3.6 https://github.com/quolc/neural-collage/issues/2 и https://docs.djangoproject.com/en/3.0/intro/tutorial01/* 102 5 * («Этот учебник написан для Django 3.0, который поддерживает Python 3.6 и более поздние версии ...»)
Каким будет лучший шаг здесь? Пытаетесь загрузить и установить sh python 3.6 или новее и отослать к этому наш wsgi или попробовать использовать другую версию django ...?
Заранее спасибо!