web-dev-qa-db-fra.com

ImportError: Aucun module nommé Django.core.wsgi Apache + VirtualEnv + AWS + WSGI

J'essaie de publier mon site sur une instance EC2 d'Amazon et je continue à avoir une erreur 500. Je ne sais vraiment pas pourquoi.

// Fichiers journaux

    [Sun Feb 17 23:12:48.066802 2013] mod_wsgi (pid=2102): Target WSGI script '/srv/www/app/poka/Apache/wsgi.py' cannot be loaded as Python module.
    [Sun Feb 17 23:12:48.066840 2013] mod_wsgi (pid=2102): Exception occurred processing WSGI script '/srv/www/app/poka/Apache/wsgi.py'.
    [Sun Feb 17 23:12:48.066864 2013] Traceback (most recent call last):
    [Sun Feb 17 23:12:48.066889 2013] File "/srv/www/mysite/poka/Apache/wsgi.py", line 26, in <module>
    [Sun Feb 17 23:12:48.066920 2013] from Django.core.wsgi import get_wsgi_application
    [Sun Feb 17 23:12:48.066945 2013] ImportError: No module named Django.core.wsgi

// Fichiers de configuration Apache

    WSGIScriptAlias / /srv/www/app/mysite/Apache/wsgi.py

    WSGIDaemonProcess mysite python-path=/srv/www/app/mysite:/home/ec2-user/.virtualenvs/mysite-main/lib/python2.7/site-packages
    WSGIProcessGroup mysite

    <Directory /srv/www/app/mysite/Apache/>
    <Files wsgi.py>
    Order deny,allow
    Allow from all
    </Files>
    </Directory>

    <Directory /srv/www/app/mysite/Apache/>
    Order deny,allow
    Allow from all
    </Directory>

    <Directory /home/ec2-user/app/mysite/static>
    Order deny,allow
    Allow from all
    </Directory>

    <Directory /home/ec2-user/app/mysite/media>
    Order deny,allow
    Allow from all
    </Directory>

//wsgi.py

    import os
    import sys
    import site

    site.addsitedir('/home/ec2-user/.virtualenvs/mysite-main/lib/python2.7/site-packages')
    os.environ.setdefault("Django_SETTINGS_MODULE", "mysite.settings")

    from Django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()

    path = '/srv/www/app/mysite'

    if path not in sys.path:
        sys.path.append(path)
30
abisson

Je sais que c'est un vieux fil, mais je viens de tomber sur le même problème et je ne pense pas que cela soit causé par un paquet manquant. Comme la distribution de base de Django contient déjà le bon gestionnaire wsgi.

Le problème ici est que lorsque wsgi.py est exécuté, il manque les packages des packages site-packages de votre virtualenv. (Si vous avez activé votre virtualenv et que vous avez correctement installé Django, tout va bien. Vous avez les packages Django nécessaires).

En ce qui me concerne, j'ai résolu le problème de la modification de sys.path dans mon fichier Path/to/Project/Project/wsgi.py. 

Vous devez ajouter votre répertoire de projet et vos packages-site virtualenv à la liste sys.path . Voici mon fichier wsgi.py contenu dans mon projet (À propos du wsgi.py créé avec Django-admin.py start- projet) ... que j'ai dû modifier pour le faire fonctionner avec Apache

# =====================
# wsgi.py file begin 

import os, sys
# add the hellodjango project path into the sys.path
sys.path.append('<PATH_TO_MY_Django_PROJECT>/hellodjango')

# add the virtualenv site-packages path to the sys.path
sys.path.append('<PATH_TO_VIRTUALENV>/Lib/site-packages')

# poiting to the project settings
os.environ.setdefault("Django_SETTINGS_MODULE", "hellodjango.settings")

from Django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

# wsgi.py file end
# ===================

Assure-toi:

  1. vous avez ajouté mod_wsgi au répertoire de modules Apache mod_wsgi doit être compilé pour votre version de système d'exploitation, Apache et Python

  2. ajout de la commande de chargement de module dans votre fichier httpd.conf pour charger le module mod_wsgi LoadModule modules_s mod_wsgi/mod_wsgi.so

  3. les spécificités Django configurées dans votre httpd.conf ou toute conf. que vous incluez dans votre httpd.conf

Basé sur la documentation Comment utiliser Django avec Apache et mod_wsgi

WSGIScriptAlias / <PATH_TO_PROJECT>/hellodjango/hellodjango/wsgi.py
WSGIPythonPath <PATH_TO_PROJECT>:<PATH_TO_VIRTUALENV>/Lib/site-packages

<Directory <PATH_TO_PROJECT>/hellodjango/hellodjango> 
  <Files wsgi.py>
    Order deny,allow
    Require all granted
  </Files>
</Directory>

J'espère que cela t'aides. Cela a fonctionné pour moi.

32
Rabah B

Ajoutez ceci au fichier de configuration Apache:

WSGIPythonHome /home/ec2-user/.virtualenvs/mysite-main
7
Matt

Pour moi, cela indiquait que Django n’était pas installé sur le serveur. Fixé via

pip install Django
4
Zags

J'ai eu une erreur similaire tout à l'heure. Il s’avère que notre code Django a été développé sur Python 3.5, mais pour certaines raisons, les personnes qui ont déployé notre serveur ont configuré virtualEnv avec Python 2.7. Nous avons redéployé avec Python 3.5 et tout a fonctionné pour nous

Ci-dessous le message d'erreur que j'ai reçu: 

$ python serviceStartup.py 
Traceback (most recent call last):
  File "serviceStartup.py", line 10, in <module>
    from Django.core.wsgi import get_wsgi_application
ImportError: No module named Django.core.wsgi

J'espère que cela aidera quelqu'un qui verra un message d'erreur similaire!

2
Lingster

À première vue, je suis désolé pour mon anglais. J'ai également rencontré ce problème et je l'ai résolu en remplaçant le fichier 'wsgi.py' par:

 import os 
 import Django 
 depuis Django.core.handlers.wsgi import WSGIHandler 


 os.environ.setdefault ("Django_SETTINGS_MODULE", "eisentask.settings.production") 
 Django.setup (set_prefix = False) 

 Application = WSGIHandler () 
0
user9205618

Vous avez très bien tout configuré, mon ami. Vous devez simplement donner à l'utilisateur Apache l'autorisation d'accéder aux répertoires project et virtualenv.

Exemple:

Sudo chown -R www-data:www-data /home/ubuntu/projects
Sudo chown -R www-data:www-data /home/ubuntu/virtualenv

Cela a résolu mon problème avec ImportError: No module named Django.core.wsgi (dossiers virtualenvs) et ImportError: No module named <project-name>.settings (dossiers de projets)

0
Cássio