Ejecute mod_wsgi con virtualenv o Python con una versión diferente a la predeterminada del sistema

Estoy tratando de hacer que mi aplicación Flask funcione en el servidor CentOS. Básicamente, el problema es que tengo Python 2.6 instalado en /usr/bin que es el sistema por defecto y Python 3.4 instalado en /usr/local/bin . Me gustaría usar Python 3.4 virtualenv o al menos el intérprete de Python 3.4 para mod_wsgi para ejecutar mi aplicación.

He creado virtualenv en ~/virtualenvs/flask .

Tengo este script 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 

Y siguiendo la configuración en Apache:

  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"  AllowOverride None Allow from all   AllowOverride None Allow from all   AllowOverride None Allow from all   AllowOverride None Allow from all   

Sin embargo, al intentar ejecutar la aplicación, aparece un error:

 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  from app import app File "/home/fenikso/Album/app.py", line 1, in  from flask import Flask ImportError: No module named flask 

Me he dado cuenta de que Python 2.6 se está ejecutando y mi virtualenv no está activado. ¿Cuál sería la forma correcta de hacer que esto funcione y aún tener el Python 2.6 como predeterminado del sistema?

Related of "Ejecute mod_wsgi con virtualenv o Python con una versión diferente a la predeterminada del sistema"

Tienes que agregar la siguiente línea en tu apache.conf para dar el ejecutable correcto y la ruta al virtualenv.

 WSGIPythonHome /usr/local/bin WSGIPythonPath /home/fenikso/virtualenv/lib/python3.4/site-packages 

Encontrará todas las opciones de estos dos comandos en la documentación de mod_wsgi.

Tenga en cuenta que debe tener la versión de mod_wsgi compatible con el ejecutable de Python. En su caso, probablemente tenga que instalar mod_wsgi3.4 y configurar apache para usarlo en lugar del módulo standart mod_wsgi.

El archivo de configuración completo debe ser:

 WSGIPythonHome "/usr/local/bin" WSGIPythonPath "/home/fenikso/virtualenv/lib/python3.4/site-packages"  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"  AllowOverride None Allow from all   AllowOverride None Allow from all   AllowOverride None Allow from all   AllowOverride None Allow from all   

Busque en las directivas WSGIPythonHome y WSGIPythonPath . También es posible que tengas un python2.6 mod_wsgi instalado, mod_wsgi debe comstackrse para la versión de python deseada y no es compatible con varias versiones de python . Verifique que su mod_wsgi sea compatible con py3.4 y establezca las directivas anteriores.

Alternativamente, puede ejecutar la aplicación de matraz con un servidor python como gunicorn y proxypass de apache a gunicorn.