Развертывание приложения Python Flask на Apache с установленной версией Python только в виртуальной среде
Я работаю в среде разработки CentOS7. Машина поставлялась с предустановленным Python 2.7.5. Я разработал веб-приложение с использованием Python 3.5.1, которое вместе с его зависимостями было установлено только в виртуальной среде. Python 3 не устанавливается на всю машину. Я сейчас пытаюсь развернуть приложение на сервере Apache, но столкнулся с проблемой. Вот что я сделал.
Я установил mod_wsgi, используя yum.
Я настроил виртуальный хост, как показано ниже:
<VirtualHost *:80>
ServerName myapp.myserver.com
WSGIDaemonProcess myapp user=myuser group=mygroup threads=5 python-path=/var/www/myapp.myserver.com/html:/var/www/myapp.myserver.com/venv/lib:/var/www/myapp.myserver.com/venv/lib/python3.5/site-packages python-home=/var/www/myapp.myserver.com/html/venv
WSGIScriptAlias / /var/www/myapp.myserver.com/html/myapp.wsgi
<Directory /var/www/myapp.myserver.com/html>
WSGIProcessGroup smex
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Мой файл wsgi настроен, как показано ниже:
import sys
sys.path.insert(0, '/var/www/myapp.myserver.com/html')
activate_this = '/var/www/myapp.myserver.com/html/venv/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
from myapp import app as application
Тем не менее, я получаю внутреннюю ошибку сервера при попытке открыть сайт. Журнал ошибок показывает следующее:
Tue Oct 18 14:24:50.174740 2016] [mpm_prefork:notice] [pid 27810] AH00163: Apache/2.4.6 (CentOS) PHP/5.4.16 mod_wsgi/3.4 Python/2.7.5 configured -- resuming normal operations
[Tue Oct 18 14:24:50.174784 2016] [core:notice] [pid 27810] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
ImportError: No module named site
ImportError: No module named site
ImportError: No module named site
ImportError: No module named site
Последняя ошибка повторяется для большей части файла журнала. Первое, что бросается в глаза - это версия Python, которая выглядит как 2.7.5. Это подводит меня к моим вопросам:
- Нужно ли устанавливать Python 3.5.1 в / usr / local или просто установить его в виртуальной среде?
- Нужно ли устанавливать конкретную версию mod_wsgi для этой версии Python? Если так, я должен установить это через pip вместо yum?
- Что еще мне не хватает, чтобы заставить это работать?
Заранее спасибо за помощь.
1 ответ
Посетите библиотеку коллекций программного обеспечения (SCL) по адресу https://www.softwarecollections.org/ для CentOS/RHEL, не используйте системные пакеты Python, Apache или mod_wsgi по умолчанию. SCL предоставляет более новые версии Python и Apache, чем системные версии по умолчанию. Затем соберите mod_wsgi из исходного кода для SCL-версий Python и Apache. Вы не можете заставить mod_wsgi использовать виртуальную среду Python для другой версии Python, отличной от той, для которой была скомпилирована mod_wsgi.