Сервер Apache Django mod_wsgi, ModuleNotFoundError: Нет модуля с именем Django

#python #django #apache #mod-wsgi

Вопрос:

Я прочитал кучу статей, но все еще не могу понять, чего мне не хватает. Я запускаю веб-сайт django из virtualenv. Вот мой конфигурационный файл. Адрес веб-сайта заменяется на <domain.com>, не могу использовать это здесь.

Конфигурация

 <VirtualHost *:80>
    
        ServerAdmin sidharth@collaboration-management
        ServerName <domain.com>
        ServerAlias <domain.com>
        DocumentRoot /home/sidharth/Downloads/gmcweb

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

        Alias /static /home/sidharth/Downloads/gmcweb/static

        <Directory /home/sidharth/Downloads/gmcweb/static>
                Require all granted
        </Directory>

        <Directory /home/sidharth/Downloads/gmcweb/gmcweb>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>


        WSGIDaemonProcess gmcweb python-home=/home/sidharth/Downloads/gmcwebenvlin python-path=/home/sidharth/Downloads/gmcweb
        WSGIProcessGroup gmcweb
        WSGIScriptAlias / /home/sidharth/Downloads/gmcweb/gmcweb/wsgi.py
</VirtualHost>
 

Вот мой WSGI.py файл, ничего не менял, раньше никогда не приходилось

 import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'gmcweb.settings')

application = get_wsgi_application()
 

Версии Python

Моя версия python virtualenv-3.9.5 Версия python Google VM по умолчанию-3.6.9

Установленные библиотеки Python

 Package                  Version
------------------------ ---------
asgiref                  3.4.0
attrs                    21.2.0
autopep8                 1.5.7
beautifulsoup4           4.9.3
certifi                  2021.5.30
cffi                     1.14.5
chardet                  4.0.0
cryptography             3.4.7
defusedxml               0.7.1
Django                   3.2.4
django-allauth           0.44.0
django-livereload-server 0.3.2
idna                     2.10
jsonschema               3.2.0
oauthlib                 3.1.1
pip                      21.2.3
pycodestyle              2.7.0
pycparser                2.20
PyJWT                    2.1.0
pyrsistent               0.18.0
python3-openid           3.2.0
pytz                     2021.1
requests                 2.25.1
requests-oauthlib        1.3.0
setuptools               57.4.0
six                      1.16.0
soupsieve                2.2.1
sqlparse                 0.4.1
toml                     0.10.2
tornado                  6.1
urllib3                  1.26.6
 

Я также установил apache modwsgi sudo apt-get install python3-pip apache2 libapache2-mod-wsgi-py3

Файл журнала ошибок

 [Thu Sep 23 15:05:06.554545 2021] [mpm_event:notice] [pid 32077:tid 140392561593280] AH00489: Apache/2.4.29 (Ubuntu) mod_wsgi/4.5.17 Python/3.6 configured -- resuming normal operations
[Thu Sep 23 15:05:06.554594 2021] [core:notice] [pid 32077:tid 140392561593280] AH00094: Command line: '/usr/sbin/apache2'
[Thu Sep 23 15:05:19.081581 2021] [wsgi:error] [pid 32617:tid 140392409851648] [remote 103.206.177.13:49604] mod_wsgi (pid=32617): Target WSGI script '/home/sidharth/Downloads/gmcweb/gmcweb/wsgi.py' c$
[Thu Sep 23 15:05:19.081638 2021] [wsgi:error] [pid 32617:tid 140392409851648] [remote 103.206.177.13:49604] mod_wsgi (pid=32617): Exception occurred processing WSGI script '/home/sidharth/Downloads/g$
[Thu Sep 23 15:05:19.081828 2021] [wsgi:error] [pid 32617:tid 140392409851648] [remote 103.206.177.13:49604] Traceback (most recent call last):
[Thu Sep 23 15:05:19.081849 2021] [wsgi:error] [pid 32617:tid 140392409851648] [remote 103.206.177.13:49604]   File "/home/sidharth/Downloads/gmcweb/gmcweb/wsgi.py", line 12, in <module>
[Thu Sep 23 15:05:19.081853 2021] [wsgi:error] [pid 32617:tid 140392409851648] [remote 103.206.177.13:49604]     from django.core.wsgi import get_wsgi_application
[Thu Sep 23 15:05:19.081867 2021] [wsgi:error] [pid 32617:tid 140392409851648] [remote 103.206.177.13:49604] ModuleNotFoundError: No module named 'django'
[Thu Sep 23 15:05:32.244779 2021] [wsgi:error] [pid 32617:tid 140392325842688] [remote 103.206.177.13:52916] mod_wsgi (pid=32617): Target WSGI script '/home/sidharth/Downloads/gmcweb/gmcweb/wsgi.py' c$
[Thu Sep 23 15:05:32.244845 2021] [wsgi:error] [pid 32617:tid 140392325842688] [remote 103.206.177.13:52916] mod_wsgi (pid=32617): Exception occurred processing WSGI script '/home/sidharth/Downloads/g$
[Thu Sep 23 15:05:32.244924 2021] [wsgi:error] [pid 32617:tid 140392325842688] [remote 103.206.177.13:52916] Traceback (most recent call last):
[Thu Sep 23 15:05:32.244946 2021] [wsgi:error] [pid 32617:tid 140392325842688] [remote 103.206.177.13:52916]   File "/home/sidharth/Downloads/gmcweb/gmcweb/wsgi.py", line 12, in <module>
[Thu Sep 23 15:05:32.244951 2021] [wsgi:error] [pid 32617:tid 140392325842688] [remote 103.206.177.13:52916]     from django.core.wsgi import get_wsgi_application
[Thu Sep 23 15:05:32.244966 2021] [wsgi:error] [pid 32617:tid 140392325842688] [remote 103.206.177.13:52916] ModuleNotFoundError: No module named 'django'
 

Комментарии:

1. Каков корневой каталог вашей виртуальной среды ?

2. @Niloct /home/<usr>/Downloads/gmcwebenvlin и проект находится в /Downloads/gmcweb

3. Версия Python Apache 3.6 , вероятно, учитывает Default Google VM python , а не 3.9.5 venv, на котором вы установили django.

4. может быть, я думал о том же, есть ли способ принудительно установить mod_wsgi на python3.9

5. Вы читали это: modwsgi.readthedocs.io/en/develop/user-guides/… ?

Ответ №1:

Если у вас возникнут какие-либо проблемы, подобные этой, и у вас будет несколько версий Python, то в этом и проблема. Я создал новую виртуальную машину с последней версией Python и только одной версией. Это сработало как заклинание.

Когда мы установим Mod_WSGI, он будет установлен по умолчанию в пути к среде.

Ответ №2:

Ошибка говорит о том, что либо у вас не установлен Django, либо вы не активировали виртуальную среду, в которой был установлен Django. Убедитесь, что вы проверили список установленных пакетов и нашли там Django с помощью:

 $pip list
 

Комментарии:

1. Вы не можете активировать venv таким образом просто в случае apache, даже если вы активируете apache, он его не выберет. и да, djano установлен в venv.

2. Я имел в виду только для проверки вменяемости, вы должны убедиться, что django установлен в среде в /home/sidharth/Downloads/gmcwebenvlin, активировав его и явно предоставив скриншот вашего «списка pip» в вопросе, если это возможно, потому что я не вижу другой причины, по которой он не может импортировать модуль django.

3. он установлен, я могу запустить сервер в virtualenv, если я продвинусь с python manage.py запустите сервер и выполните запрос curl, он работает, но не с apache.