WSGI django ModuleNotFoundError: Нет модуля с именем 'django'
Я вечно пытаюсь заставить мой django api развертываться через apache. Я установил mod_wsgi для python 3.7 и мой venv использует python 3.7.15. При попытке перейти к url моего приложения django я получаю ошибку 500.
Журнал ошибок показывает:
[Tue Dec 20 21:31:30.690951 2022] [:error] [pid 19216] /usr
[Tue Dec 20 21:31:30.691287 2022] [:error] [pid 19216] mod_wsgi (pid=19216): Target WSGI script '.../project/project/wsgi.py' cannot be loaded as Python module.
[Tue Dec 20 21:31:30.691323 2022] [:error] [pid 19216] mod_wsgi (pid=19216): Exception occurred processing WSGI script '.../project/project/wsgi.py'.
[Tue Dec 20 21:31:30.691393 2022] [:error] [pid 19216] Traceback (most recent call last):
[Tue Dec 20 21:31:30.691423 2022] [:error] [pid 19216] File ".../project/project/wsgi.py", line 19, in <module>
[Tue Dec 20 21:31:30.691428 2022] [:error] [pid 19216] from django.core.wsgi import get_wsgi_application
[Tue Dec 20 21:31:30.691444 2022] [:error] [pid 19216] ModuleNotFoundError: No module named 'django'
[Tue Dec 20 21:31:51.190670 2022] [:error] [pid 19217] 3.7.15 (default, Oct 31 2022, 22:44:31)
[Tue Dec 20 21:31:51.190707 2022] [:error] [pid 19217] [GCC 7.3.1 20180712 (Red Hat 7.3.1-15)]
apache conf file:
<VirtualHost *:80>
ServerName api.project.com
DocumentRoot path/to/project/root
WSGIScriptAlias / /path/to/wsgi.py
WSGIDaemonProcess project-name processes=4 threads=1 display-name=%{GROUP} python-path=path/to/lib/python3.7/site-packages:/path/to/project/root
WSGIProcessGroup project-group
<Directory "/path/to/project/root">
Require all granted
</Directory>
#SSL stuff...
</VirtualHost>
wsgi.py:
import os
import sys
from django.core.wsgi import get_wsgi_application
path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if path not in sys.path:
sys.path.append(path)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
application = get_wsgi_application()
Изначально у меня был установлен неправильный mod_wsgi (собранный для python2). Я удалил его и установил python3-mod_wsgi.x86_64
и изменил путь к модулю в httpd.conf
. Затем я понял, что мой mod_wsgi был для python версии 3.7, но мое приложение venv работало на python 3.6.8. Я стер venv и создал новый с python 3.7.15. Изменил путь в conf WSGIDAEMONPROCESS на правильный 3.7 site-packages. Все та же ошибка.
Просто установить виртуальную среду недостаточно, затем ее нужно активировать.
Запустите pip install -r requirements.txt
для установки необходимых пакетов для проекта.
Ошибка
В первой строке ошибки говорится Target WSGI script '.../project/project/wsgi.py' cannot be loaded as Python module.
Это означает, что ваша переменная окружения DJANGO_SETTINGS_MODULE
установлена неправильно. Чтобы сделать это, перейдите в раздел .bashrc
и установите то же значение, что и в файле asgi.py/wsgi.py
.
Выполните source .bashrc
, чтобы перезагрузить файл конфигурации, и перезапустите терминал bash (или откройте новый), в котором вы пытаетесь запустить приложение.
Это должно работать.