Estoy intentando implementar una aplicación Django con Apache2 y mod_wsgi en un servidor Ubuntu 16.04.6, pero tengo problemas para que mod_wsgi use la versión correcta de Python.
Instalé mod_wsgi desde la fuente y lo configuré para compilar contra el sistema python3, específicamente python3.7.8
Mi entorno virtual para la aplicación Django también ejecuta python3.7.8.
Mi archivo de configuración de VirtualHost se ve así:
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName kumberas.com ServerAdmin webmaster@localhost.com WSGIScriptAlias / /home/dan/app/kumberas/kumberas/main/wsgi.py Alias /static/ /home/dan/app/kumberas/kumberas/static/ <Directory /home/dan/app/kumberas/kumberas/static> Require all granted </Directory> <Directory /home/dan/app/kumberas/venv> Require all granted </Directory> <Directory /home/dan/app/kumberas/kumberas/main> <Files wsgi.py> Require all granted </Files> </Directory> <Location /> AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require user kr AuthBasicProvider file </Location> WSGIDaemonProcess kumberas \ python-home=/home/dan/app/kumberas/venv \ python-path=/home/dan/app/kumberas WSGIProcessGroup kumberas </VirtualHost> </IfModule>Y cuando trato de acceder al sitio, obtengo un error 500 y lo siguiente en mi registro de errores de Apache.
[wsgi:error] [pid 21635] [remote xx.xx.xx.xx:58603] mod_wsgi (pid=21635): Failed to exec Python script file '/home/dan/app/kumberas/kumberas/main/wsgi.py'. [wsgi:error] [pid 21635] [remote xx.xx.xx.xx:58603] mod_wsgi (pid=21635): Exception occurred processing WSGI script '/home/dan/app/kumberas/kumberas/main/wsgi.py'. [wsgi:error] [pid 21635] [remote xx.xx.xx.xx:58603] Traceback (most recent call last): [wsgi:error] [pid 21635] [remote xx.xx.xx.xx:58603] File "/home/dan/app/kumberas/kumberas/main/wsgi.py", line 12, in <module> [wsgi:error] [pid 21635] [remote xx.xx.xx.xx:58603] from django.core.wsgi import get_wsgi_application [wsgi:error] [pid 21635] [remote xx.xx.xx.xx:58603] File "/home/dan/app/kumberas/venv/lib/python3.7/site-packages/django/__init__.py", line 1, in <module> [wsgi:error] [pid 21635] [remote xx.xx.xx.xx:58603] from django.utils.version import get_version [wsgi:error] [pid 21635] [remote xx.xx.xx.xx:58603] File "/home/dan/app/kumberas/venv/lib/python3.7/site-packages/django/utils/version.py", line 1, in <module> [wsgi:error] [pid 21635] [remote xx.xx.xx.xx:58603] import datetime [wsgi:error] [pid 21635] [remote xx.xx.xx.xx:58603] File "/usr/lib/python3.7/datetime.py", line 8, in <module> [wsgi:error] [pid 21635] [remote xx.xx.xx.xx:58603] import math as _math [wsgi:error] [pid 21635] [remote xx.xx.xx.xx:58603] ModuleNotFoundError: No module named 'math' Investigué un poco y encontré este archivo wsgi.py en la documentación de mod_wsgi para verificar la versión de python que está usando mod_wsgi, y obtengo el siguiente resultado cuando visito el sitio:
sys.version = '3.7.2 (default, Jan 23 2020, 09:44:10) \n[GCC 5.4.0 20160609]' sys.prefix = '/home/dan/app/kumberas/venv' Supongo que el problema aquí es la versión 3.7.8 != 3.7.2 de python que no coincide, pero que yo sepa, no hay una instalación de python3.7.2 en el servidor, y he reinstalado mod_wsgi varias veces asegurándome que lo configuro para usar 3.7.8.
También confirmé que, mientras estoy en el entorno virtual, a) puedo ejecutar la aplicación Django con manage.py runserver yb) puedo ejecutar get_wsgi_application() manualmente en el shell de Django.
¿Alguien sabe si esta discrepancia de versión es el problema y cómo podría resolverse?
Si se ha utilizado virtualenv o virtualenvwrapper para crear un entorno, debe llamar al script de activación en wsgi.py:
python_home = '/home/dan/app/kumberas/venv' activate_this = python_home + '/bin/activate_this.py' execfile(activate_this, dict(__file__=activate_this))Parece que podrías tener una versión que no coincide. Algunos Linux todavía usan python 2.7 como predeterminado.
También verifique si el sistema tiene más de una versión de python usando locate python y/o locate python3
Si se trata de un problema en modwsgi , podría ser más fácil para usted compilar mod_wsgi desde la fuente siguiendo el enlace https://modwsgi.readthedocs.io/en/develop/user-guides/quick-installation-guide.html