Запустите mod wsgi с virtualenv или Python с версией, отличной от системной по умолчанию
Я пытаюсь заставить приложение колбы работать на сервере CentOS. В основном проблема в том, что у меня установлен Python 2.6 в /usr/bin
который является системным по умолчанию и Python 3.4 установлен в /usr/local/bin
. Я хотел бы использовать Python 3.4 virtualenv или, по крайней мере, интерпретатор Python 3.4 для mod_wsgi для запуска моего приложения.
Я создал virtualenv в ~/virtualenvs/flask
.
у меня есть этот скрипт WSGI:
import os
import sys
from logging import Formatter, FileHandler
APP_HOME = r"/home/fenikso/Album"
activate_this = os.path.join("/home/fenikso/virtualenvs/flask/bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))
sys.path.insert(0, APP_HOME)
os.chdir(APP_HOME)
from app import app
handler = FileHandler("app.log")
handler.setFormatter(Formatter("[%(asctime)s | %(levelname)s] %(message)s"))
app.logger.addHandler(handler)
application = app
и следующая конфигурация в Апач:
<VirtualHost *:80>
ServerName album2.site.cz
Alias /static "/home/fenikso/Album/static"
Alias /photos "/home/fenikso/Album/photos"
Alias /thumbs "/home/fenikso/Album/thumbs"
WSGIScriptAlias / "/home/fenikso/Album/wsgi.py"
<Directory "/home/fenikso/Album">
AllowOverride None
Allow from all
</Directory>
<Directory "/home/fenikso/Album/static">
AllowOverride None
Allow from all
</Directory>
<Directory "/home/fenikso/Album/photos">
AllowOverride None
Allow from all
</Directory>
<Directory "/home/fenikso/Album/thumbs">
AllowOverride None
Allow from all
</Directory>
</VirtualHost>
однако при попытке запустить приложение я получаю сообщение об ошибке:
Apache/2.2.15 (Unix) DAV/2 mod_wsgi/3.2 Python/2.6.6 mod_fcgid/2.3.7 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.1e-fips SVN/1.6.11 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations
mod_wsgi (pid=14627): Target WSGI script '/home/fenikso/Album/wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=14627): Exception occurred processing WSGI script '/home/fenikso/Album/wsgi.py'.
Traceback (most recent call last):
File "/home/fenikso/Album/wsgi.py", line 15, in <module>
from app import app
File "/home/fenikso/Album/app.py", line 1, in <module>
from flask import Flask
ImportError: No module named flask
Я заметил, что либо Python 2.6 запускается, и мой virtualenv не активирован. Каков был бы правильный способ заставить это работать и по-прежнему иметь Python 2.6 в качестве системного значения по умолчанию?
2 ответов
вы должны добавить следующую строку в свой apache.conf для того, чтобы дать правильный исполняемый файл и путь к virtualenv.
WSGIPythonHome /usr/local/bin
WSGIPythonPath /home/fenikso/virtualenv/lib/python3.4/site-packages
вы найдете все варианты этих двух команд в документации mod_wsgi
имейте в виду, что у вас должна быть версия mod_wsgi, совместимая с исполняемым файлом python. В вашем случае вам, вероятно, придется установить mod_wsgi3.4 и настройте apache, чтобы использовать его вместо стандартного модуля mod_wsgi.
весь файл конфигурации должен быть :
WSGIPythonHome "/usr/local/bin"
WSGIPythonPath "/home/fenikso/virtualenv/lib/python3.4/site-packages"
<VirtualHost *:80>
ServerName album2.site.cz
Alias /static "/home/fenikso/Album/static"
Alias /photos "/home/fenikso/Album/photos"
Alias /thumbs "/home/fenikso/Album/thumbs"
WSGIScriptAlias / "/home/fenikso/Album/wsgi.py"
<Directory "/home/fenikso/Album">
AllowOverride None
Allow from all
</Directory>
<Directory "/home/fenikso/Album/static">
AllowOverride None
Allow from all
</Directory>
<Directory "/home/fenikso/Album/photos">
AllowOverride None
Allow from all
</Directory>
<Directory "/home/fenikso/Album/thumbs">
AllowOverride None
Allow from all
</Directory>
</VirtualHost>
посмотреть в WSGIPythonHome и WSGIPythonPath директивы. Также возможно, что у вас есть python2.6 mod_wsgi установлен, mod_wsgi должен быть скомпилирован для предполагаемой версии python и не поддерживает несколько версий Python. Поэтому проверьте, что ваш mod_wsgi-py3.4 совместимый и установите директивы выше.
кроме того, вы можете запустить приложение flask с сервером python, таким как gunicorn и proxypass от apache до gunicorn.