Django Apache 2 ModuleNotFoundError: Нет модуля с именем «django»

#python #django #ubuntu #apache2 #mod-wsgi

Вопрос:

Я пытаюсь развернуть свое приложение django на apache2, я нахожусь на экземпляре ubuntu AWS ec2. Первоначально я получил фатальную ошибку Python: Py_Initialize: Не удалось получить кодировку локали, поэтому я переключил свой python с 2.7 на 3.6, удалив свой env и запустив новый виртуальный env на 3.6, я также удалил python 2.7 и 3.7 из своего экземпляра. После этого у меня в apache появился модуль без имени «Ошибка Django». Любая помощь ценится за то, что я застрял на некоторое время с этим :).

 <VirtualHost *:80>
ServerAdmin webmaster@example.com
DocumentRoot /home/ubuntu/pydjangoenv/myproj
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /static /home/ubuntu/pydjangoenv/myproj/static
<Directory /home/ubuntu/pydjangoenv/myproj/static>
Require all granted
</Directory>
<Directory /home/ubuntu/pydjangoenv/myproj/myproj>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess myproj python-path=/home/ubuntu/pydjangoenv/myproj python-home=/home/ubuntu/pydjangoenv/venv2

WSGIScriptAlias / /home/ubuntu/pydjangoenv/myproj/myproj/wsgi.py
</VirtualHost>

 

Кроме того, когда я запускаю pip3, устанавливаю django, мой django включен
Требование уже выполнено: django в /home/ubuntu/pydjangoenv/venv2/lib/python3.6/пакеты для сайтов (3.2.5)

Ответ №1:

Как только вы настроите свой экземпляр EC2, я предположу, что вам нужны серверная и внешняя часть на этом сервере, доступ к экземпляру через shell . Тогда беги:

Для обновления пакетов из Ubuntu:

 sudo apt-get update
 

Установите Python с помощью:

 sudo apt-get install python3.6
 

Установите pip с помощью:

 curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
 

Затем вам нужно установить виртуальную среду, которую вы можете использовать virtualenv :

 pip install virtualenv
 

Создайте виртуальную env с помощью:

 virtualenv mynewvenv
 

Затем войдите в вену с:

 source mynewvnev/bin/activate
 

Как только вы окажетесь внутри своего vnev, запустите это, чтобы установить Django:

 pip install django
 

Затем я рекомендую загрузить ваш проект Django в GitHub или GitLab, а затем клонировать этот репозиторий.

Очень важно обновить свой settings.py , особенно ALLOWED_HOSTS если вы перенаправляете с помощью пользовательского домена:

 ALLOWED_HOSTS = ['yourdomain.com',
                 'www.yourdomain.com',]
 

Также очень важно при необходимости обновить доступ к БД, если вы используете БД по умолчанию sqlite3 , просто убедитесь, что имя БД, пользователь и пароль совпадают с вашей фактической информацией.

Если вы сделали все вышесказанное правильно, попробуйте обновить WSGI раздел в вашем config файле Apache, чтобы он выглядел примерно так:

 WSGIPassAuthorization On
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIDaemonProcess yourapp python-home=/usr/local/venvs/yourapp
WSGIProcessGroup DjangoMainAppName
 

Вполне вероятно, что ошибка находится в этой строке:

 WSGIDaemonProcess delta_new python-path=/home/ubuntu/pydjangoenv/myproj python-home=/home/ubuntu/pydjangoenv/venv2
 

Попробуйте изменить на:

 WSGIDaemonProcess delta_new python-path=/home/ubuntu/pydjangoenv/myproj python-home=/home/ubuntu/pydjangoenv/venv2/lib/python3.6/site-packages
 

Используя точную версию Python.

Вы можете прочитать о том, как правильно настроить config файл для приложения Django с режимом демона для одного приложения здесь.

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

1. Да, после того, как я внес изменения, я вернулся к исходной ошибке: Фатальная ошибка Python: Py_Initialize: Не удалось получить модуль кодировки языкового стандарта. Или: Нет модуля с именем «кодировки»

2. Попробуйте выполнить команды: unset PYTHONHOME и unset PYTHONPATH

Ответ №2:

Я смог заставить свой веб-сайт работать через apache, перейдя на python 3.6, создав новую виртуальную среду с python 3.6, переустановив требования, а затем я удалил libapache2-mod-wsgi-py3 с помощью sudo apt-get remove libapache2-mod-wsgi-py3, а затем я снова установил его в своей виртуальной среде python 3.6, а затем веб-сайт перестал работать.