Развертывание проекта django3 с помощью mod_wsgi

Я экспериментирую, чтобы опубликовать свой проект django с Apache mod_wsgi. Я создал простой проект django3 с именем sampleapp в virtualenv. Затем я настроил файл /etc/apache2/sites-enabled/000-default.conf следующим образом:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

WSGIDaemonProcess sampleapp python-home=/var/www/html/sampleapp/env python-path=/var/www/html/sampleapp:/var/www/html/sampleapp/env/lib/python3.7/site-packages
WSGIProcessGroup sampleapp
WSGIScriptAlias /sampleapp /var/www/html/sampleapp/sampleapp/wsgi.py process-group=sampleapp

</VirtualHost>

Хотя моя версия python для virtualenv — 3.7, mod_wsgi использует системную версию python (3.5), поэтому он не видит мой virtualenv и не использует его версию python. Мой журнал ошибок apache выглядит следующим образом:

[Sat Feb 20 15:36:02.390188 2021] [mpm_prefork:notice] [pid 20090] AH00169: caught SIGTERM, shutting down
[Sat Feb 20 15:36:03.226065 2021] [mpm_prefork:notice] [pid 20204] AH00163: Apache/2.4.18 (Ubuntu) mod_wsgi/4.3.0 Python/3.5.2 configured -- resuming normal operations
[Sat Feb 20 15:36:03.226278 2021] [core:notice] [pid 20204] AH00094: Command line: '/usr/sbin/apache2'
[Sat Feb 20 15:36:03.294321 2021] [wsgi:error] [pid 20207] mod_wsgi (pid=20207): Call to 'site.addsitedir()' failed for '(null)', stopping.
[Sat Feb 20 15:36:03.295568 2021] [wsgi:error] [pid 20207] mod_wsgi (pid=20207): Call to 'site.addsitedir()' failed for '/var/www/html/sampleapp/env/lib/python3.7/site-packages'.
[Sat Feb 20 15:36:07.084368 2021] [wsgi:error] [pid 20207] mod_wsgi (pid=20207): Call to 'site.addsitedir()' failed for '(null)', stopping.
[Sat Feb 20 15:36:07.084455 2021] [wsgi:error] [pid 20207] mod_wsgi (pid=20207): Call to 'site.addsitedir()' failed for '/var/www/html/sampleapp/env/lib/python3.7/site-packages'.
[Sat Feb 20 15:36:07.085660 2021] [wsgi:error] [pid 20207] [remote 127.0.0.1:47028] mod_wsgi (pid=20207): Target WSGI script '/var/www/html/sampleapp/sampleapp/wsgi.py' cannot be loaded as Python module.
[Sat Feb 20 15:36:07.085769 2021] [wsgi:error] [pid 20207] [remote 127.0.0.1:47028] mod_wsgi (pid=20207): Exception occurred processing WSGI script '/var/www/html/sampleapp/sampleapp/wsgi.py'.
[Sat Feb 20 15:36:07.086188 2021] [wsgi:error] [pid 20207] [remote 127.0.0.1:47028] Traceback (most recent call last):
[Sat Feb 20 15:36:07.086266 2021] [wsgi:error] [pid 20207] [remote 127.0.0.1:47028]   File "/var/www/html/sampleapp/sampleapp/wsgi.py", line 12, in <module>
[Sat Feb 20 15:36:07.086280 2021] [wsgi:error] [pid 20207] [remote 127.0.0.1:47028]     from django.core.wsgi import get_wsgi_application
[Sat Feb 20 15:36:07.086321 2021] [wsgi:error] [pid 20207] [remote 127.0.0.1:47028] ImportError: No module named 'django'

Как мне настроить mod_wsgi для использования python-версии моего venv? Или где моя вина? Спасибо за ответы.


person radix    schedule 20.02.2021    source источник


Ответы (1)


Таким образом, mod_wsgi скомпилирован для конкретной версии Python для Apache. Вы не можете заставить его работать с другой версией Python. Вы можете либо пересобрать этот mod_wsgi до правильной версии, либо изменить виртуальную среду. Это удаляет оболочку virtualenv, но сохраняет файлы проекта.

Я думаю, что изменить virtualenv было бы проще.

rmvirtualenv env-name
mkvirtualenv -p python3.5 env-name
setvirtualenvproject env-name

Когда вы используете mkvirtualenv, используйте тег -r для требований.txt.

Или пересоберите mod_wsgi:

Документация

person Gracen Ownby    schedule 20.02.2021
comment
Я должен использовать python3.7 из-за некоторых библиотек, которые я использую. Так что, думаю, мне нужно пересобрать mod_wsgi. Спасибо за ответ. - person radix; 20.02.2021