Ошибка «ImportError: нет модуля с именем django.core.wsgi» - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь запустить проект django на CentOS 7. Внутри моего проекта есть виртуальная среда, содержащая все необходимые пакеты, ....Я настроил мой файл httpd.conf следующим образом:

<VirtualHost *:80>

ServerName the_server_ip_address
ServerAlias localhost

DocumentRoot /var/www/html

# adding these lines for handling static files
Alias /media/ /var/www/html/wsgi-scripts/walk/mysite/static/media
Alias /static/ /var/www/html/wsgi-scripts/walk/mysite/static/static_root/

<Directory /var/www/html>
#Order allow,deny
#Allow from all
Require all granted
Satisfy Any
</Directory>

WSGIDaemonProcess localhost processes=2 threads=15 display-name=%{GROUP} python-home=/var/www/html/wsgi-scripts/walk/walk.venv python-path=/var/www/html/wsgi-scripts/walk/mysite
WSGIProcessGroup localhost

WSGIScriptAlias / /var/www/html/wsgi-scripts/walk/mysite/mysite/wsgi.py

<Directory /var/www/html/wsgi-scripts/walk/mysite/mysite>
WSGIPassAuthorization On
<Files wsgi.py>
Require all granted
</Files>
#Require all granted
</Directory>
</VirtualHost>

, и мой wsgi.py настроен следующим образом:

import os, sys
# add the mysite project path into the sys.path
sys.path.append('/var/www/html/wsgi-scripts/walk/mysite')

# add the virtualenv site-packages path to the sys.path
sys.path.append('/var/www/html/wsgi- 
scripts/walk/walk.venv/lib/python2.7/site-packages')

# poiting to the project settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

from django.core.wsgi import get_wsgi_application

#os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

application = get_wsgi_application()

httpd перезапускается нормально, но когда я захожу на сайтвозвращается «Внутренняя ошибка сервера», и в журнале apache есть следующие строки:

(most recent call last):
File "/var/www/html/wsgi-scripts/walk/mysite/mysite/wsgi.py", line 21, in <module>
from django.core.wsgi import get_wsgi_application
ImportError: No module named django.core.wsgi
mod_wsgi (pid=11196): Target WSGI script '/var/www/html/wsgi-scripts/walk/mysite/mysite/wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=11196): Exception occurred processing WSGI script '/var/www/html/wsgi-scripts/walk/mysite/mysite/wsgi.py'.
Traceback (most recent call last):
File "/var/www/html/wsgi-scripts/walk/mysite/mysite/wsgi.py", line 21, in <module>
from django.core.wsgi import get_wsgi_application
ImportError: No module named django.core.wsgi

Я застрял в этой ошибке на два дня и не знаю, что делать.

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Если /var/www/html/wsgi-scripts/walk/walk.venv определенно совпадает с sys.prefix для вашей виртуальной среды, в которой установлен Django, то, вероятно, проблема в том, что mod_wsgi скомпилирован для другой версии Python, из которой была создана ваша виртуальная среда.Вам также не нужно использовать site-packages.

См .:

Чтобы понять, что такое версия Python mod_wsgiскомпилировано для см .:

0 голосов
/ 08 июня 2018

Есть немного больше для активации virtualenv, чем просто добавление site-пакетов в sys.path.

Я лично только что выполнил скрипт активации в верхней части вашего модуля wsgi, и он работает хорошо,Например,

# Run find . -iname 'activate_this.py' and just paste the path here.
env_file="/var/www/html/wsgi-scripts/walk/walk.venv/bin/activate_this.py"

assert os.path.exists(env_file)

# Run the activation
execfile(env_file, dict(__file__=env_file))

Это выполнит все манипуляции с путями, необходимые для запуска в virtualenv.Обратите внимание, что я утверждаю, что файл существует, просто потому, что легко путать пути.

...