Hace unos días decidí actualizar python de la versión 2.7 a la 3.7. Esta es mi configuración actual:
Ubuntu 16.04 Python 3.7.7 Django 3.0.6 Apache/2.4.18 Usando el comando python -m venv --system-site-packages /var/www/path/to/myenv , creé el entorno virtual, después de la activación de este entorno, creé un nuevo proyecto. La ruta al entorno se ve así /var/www/path/to/myenv y la ruta al proyecto se ve así /var/www/path/to/myenv/myproject . La configuración de myproject.conf se ve así:
<VirtualHost *:80> ServerName myproject.com ServerAlias www.myproject.com WSGIDaemonProcess myproject processes=2 threads=15 display-name=%{GROUP} python-home=/var/www/path/to/myenv python-path=/var/www/path/to/myenv/myproject WSGIProcessGroup candyhand WSGIScriptAlias / /var/www/path/to/myenv/myproject/myproject/wsgi.py <Directory /var/www/path/to/myenv/myproject/myproject/> <Files wsgi.py> Require all granted </Files> </Directory> <Directory /var/www/path/to/myenv/myproject/> Require all granted </Directory> CustomLog /var/www/path/to/myenv/myproject/logs/apache_access.log combined ErrorLog /var/www/path/to/myenv/myproject/logs/apache_error.log Alias /static/ /var/www/path/to/myenv/myproject/static/ <Directory /var/www/path/to/myenv/myproject/> Options Indexes MultiViews FollowSymLinks AllowOverride None Require all granted </Directory> Alias /media/ /var/www/path/to/myenv/myproject/media/ <Directory /var/www/path/to/myenv/myproject/> Options Indexes MultiViews FollowSymLinks AllowOverride None Require all granted </Directory> </VirtualHost>Pero tengo el error 500 del servidor apache. Aquí está el registro del servidor apache:
mod_wsgi (pid=9495): Target WSGI script '/var/www/path/to/myenv/myproject/myproject/wsgi.py' cannot be loaded as Python module. [Wed May 20 16:25:08.145621 2020] [wsgi:error] [pid 9495] mod_wsgi (pid=9495): Exception occurred processing WSGI script '/var/www/path/to/myenv/myproject/myproject/wsgi.py'. [Wed May 20 16:25:08.145788 2020] [wsgi:error] [pid 9495] Traceback (most recent call last): [Wed May 20 16:25:08.145864 2020] [wsgi:error] [pid 9495] File "/var/www/path/to/myenv/myproject/myproject/wsgi.py", line 12, in <module> [Wed May 20 16:25:08.145885 2020] [wsgi:error] [pid 9495] from django.core.wsgi import get_wsgi_application [Wed May 20 16:25:08.145945 2020] [wsgi:error] [pid 9495] ImportError: No module named 'django' Configuré VirtualHost de acuerdo con esta documentación , pero tal vez cometí un error en alguna parte, gracias por su consejo.
El comando PS python manage.py runserver funciona bien
Lo más probable es que el problema sea que python -m venv no genera un enable_this.py dentro de su virtualenv, consulte la documentación en https://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments .html#daemon-mode-varias-aplicaciones
"Cuando necesite activar el entorno virtual de Python desde el archivo de secuencia de comandos WSGI como se describe, es preferible que utilice virtualenv o virtualenvwrapper para crear el entorno virtual de Python. Esto se debe a que ambos proporcionan el archivo de secuencia de comandos enable_this.py que hace todo el trabajo de configurar sys.path. Cuando usa pyvenv o python -m venv con Python 3, no se proporciona dicho script de activación".
EDITAR
Acabo de darme cuenta de que mod_wsgi v4.6.1 parece manejar el entorno virtual creado por python -m venv correctamente, pero mod_wsgi tiene que usar exactamente la misma versión de python que su virtualenv (mod_wsgi no toma el intérprete de python de virtualenv, solo verifique el python versión dentro de su wsgi.py para asegurarse de que mod_wsgi está usando la correcta). Si es la versión incorrecta del intérprete, debe reinstalar mod_wsgi después de actualizar su paquete global de python al número de versión correcto.
Compruebe si ha insertado esas líneas en apache2.conf:
WSGIPythonPath /usr/local/lib/python3.7/dist-packages WSGILazyInitialization On WSGIApplicationGroup %{GLOBAL}¿Puede compartir wsgi.py + el comienzo del archivo de registro de apache?
Agregue a continuación fuera de su VirtualHost: WSGIPythonHome /var/www/path/to/myenv