Apache с virtualenv и mod wsgi: ImportError: нет модуля с именем 'django'



Я пытаюсь обслуживать небольшой проект django со следующей конфигурацией Apache:



Конфигурация виртуального хоста Apache:



<VirtualHost *>
ServerName servername

[...]

<Directory "/path/to/project/project">
<Files wsgi.py>
Require all granted
</Files>
</Directory>

WSGIDaemonProcess project python-path=/path/to/project:/path/to/Envs/venv/lib/python3.5/site-packages
WSGIScriptAlias / /path/to/project/project/wsgi.py

</VirtualHost>


У меня также есть следующее wsgi.py :



import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings")
application = get_wsgi_application()


У меня нет проблем с обслуживанием статических файлов и медиафайлов.



Я также проверил разрешения и попытался рекурсивно использовать 755, а затем 777 в каталог site-package моего virtualenv. Это не сработало.



Но при попытке добраться до корня моего сайта я получаю следующее :



from django.core.wsgi import get_wsgi_application
ImportError: No module named 'django'


Я предположил, что это была проблема, связанная с Python path, так как django установлен в моем virtualenv. Но я добавил соответствующие пути python в атрибут WSGIDaemonProcess S python-path, поэтому я не понимаю, почему он не работает.



Я также думаю, что я мог бы добавить соответствующий каталог к моему пути Python в моем wsgi.py с помощью модуля site , но я хотел бы понять, почему конфигурация Apache, которую я попробовал, недостаточно хороша. Я что-то пропустил?

701   3  

3 ответов:

У вас отсутствует директива WSGIProcessGroup или эквивалентный параметр в WSGIScriptAlias, поэтому ваше приложение фактически не выполняется в той группе процессов демона, где вы установили виртуальную среду.

См. использование режима демона mod_wsgi

Я также рекомендую установить для группы приложений значение " %{GLOBAL}", если это единственное приложение, которое вы запускаете в группе процессов daemon.

Таким образом, используйте:

WSGIScriptAlias / /path/to/project/project/wsgi.py \
    process-group=project application-group=%{GLOBAL}

Также лучше использовать python-home для виртуального окружающая среда.

    WSGIDaemonProcess project python-path=/path/to/project \
        python-home=/path/to/Envs/venv

См.:

Моя репутация не превышает 50, поэтому я не могу комментировать, но я хотел бы поделиться своим открытием.

В WSGIDaemonProcess, если вы используете Python 3.5, вам нужно установить точно так, как говорят @graham-dumpleton, с

python-home=/path/to/Envs/venv

Задается явно.

Однако, если вы используете Python 3.4 (или более старую версию Python, например 2.7, насколько я знаю), вам придется настроить его как

python-path=/path/to/project:/path/to/Envs/venv/lib/python3.4/site-packages

Точно так же, как это сделал Аскер.

Действительно странно.

Для меня проблема заключалась в том, что у меня был установлен mod wsgi для python2. Мне пришлось переустановить его для python3:

sudo apt-get install libapache2-mod-wsgi-py3

Comments

    Ничего не найдено.