J'ai essayé d'installer Django pour fonctionner avec Apache et mod_wsgi mais j'ai l'erreur suivante:
ImportError: No module named Django.core.handlers.wsgi,
J'ai lu qu'il pourrait s'agir d'une erreur de l'utilisateur ...
Sur la console (ssh), avec un accès root, je n'ai aucun problème à accéder à Django.core.handlers.wsgi, mais lorsque Apache demande à y accéder, il ne peut
Mon Django.wsgi:
import os
import sys
sys.path.append('my/rep/parents/of/my/project')
sys.path.append('/usr/lib/python2.4/site-packages/Django')
os.environ['Django_SETTINGS_MODULE'] = 'montest.settings'
os.environ['PYTHON_Egg_CACHE'] = '/tmp'
import Django.core.handlers.wsgi
application = Django.core.handlers.wsgi.WSGIHandler()
Mon vhost.conf:
Alias /media/ my/rep/parents/of/my/projet/montest/media/
<Directory my/rep/parents/of/my/projet/montest/media>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias /montest my/rep/parents/of/my/projet/Django.wsgi
<Directory my/rep/parents/of/my/projet>
Order deny,allow
Allow from all
</Directory>
MODIFIER :
Ok mon résultat pour Ldd mod_wsgi.so
linux-gate.so.1 => (0x0013c000)
libpython2.6.so.1.0 => /usr/lib/libpython2.6.so.1.0 (0x00663000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00bff000)
libdl.so.2 => /lib/libdl.so.2 (0x0023b000)
libutil.so.1 => /lib/libutil.so.1 (0x00420000)
libm.so.6 => /lib/libm.so.6 (0x00110000)
libc.so.6 => /lib/libc.so.6 (0x00240000) /lib/ld-linux.so.2 (0x0059f000)
Je décide donc de tester mon installation mod_wsgi avec le test.wsgi
test.wsgi
def application(environ, start_response):
status = '200 OK'
output = 'Hello world, I am a wsgi app!'
response_headers = [('Content-Type', 'text/plain'), ('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
mon vhost.conf:
WSGIScriptAlias /test /var/www/vhosts/mydomain.fr/subdomains/Django/httpdocs/test.wsgi
<Directory /var/www/vhosts/mydomain.fr/subdomains/Django/httpdocs>
Order allow,deny
Allow from all
Options +ExecCGI
</Directory>
Cela fonctionne maintenant ... ensuite je vais essayer ma config Django.wsgi
J'ai résolu le problème en ajoutant l'emplacement des packages site, où j'ai conservé le sous-répertoire Django (/Library/python/2.7/site-packages) dans WSGIDaemonProcess:
WSGIDaemonProcess www.example.com processes=2 threads=15 display-name=%{GROUP}
python-path=/Library/python/2.7/site-packages
Si vous utilisez le mode serveur intégré, utilisez httpd.conf
:
WSGIPythonPath /Library/python/2.7/site-packages
Pourquoi essayez-vous même d'ajouter le répertoire site-packages dans sys.path? Si votre mod_wsgi est compilé avec Python 2.4, il devrait déjà être dans le répertoire site-packages. On dirait que votre mod_wsgi n'est même pas compilé avec Python 2.4.
Courir:
ldd mod_wsgi.so
utilisez votre fichier mod_wsgi.so installé pour déterminer la version de Python pour laquelle il est compilé et publier le résultat.
J'ai déjà eu ce problème auparavant, car le processus Apache/mod_wsgi n'était pas autorisé à lire les modules. Vous pouvez rendre votre répertoire sites-packages/Django lisible en lecture, ou ajouter d'autres autorisations utilisateur/groupe appropriées.
Faux:
WSGIDaemonProcess www.example.com python-path=~/virtualenvs/virt1/lib/python2.7
Droite:
WSGIDaemonProcess www.example.com python-path=/home/user/virtualenvs/virt1/lib/python2.7
J'ai passé trop de temps à essayer de comprendre pourquoi mon serveur virtuel ne chargeait pas correctement Django.
J'ai résolu ce problème en ajoutant le répertoire parent qui contient mon installation Django à sys.path dans wsgi.py. Voici mes paramètres, FWIW:
/home/banjer/myproject/wsgi.py :
import os, sys
sys.path.append('/home/banjer/Django')
sys.path.append('/home/banjer') # this line solved it
sys.executable = '/usr/local/python-2.7.2/bin/python'
os.environ['Django_SETTINGS_MODULE'] = 'myproject.settings'
import Django.core.handlers.wsgi
application = Django.core.handlers.wsgi.WSGIHandler()
Vérifiez les autorisations de fichier de votre package de site . Aucune des solutions ci-dessus ne fonctionnait pour moi jusqu'à ce que je corrige les autorisations de fichier . Voici le contenu de mon fichier ssl_error_log:
mod_wsgi (pid=986, process='OSQA', application='xxxxxx.yyy.com|/forum'): Loading WSGI script '/data/http/osqa/osqa.wsgi'.
mod_wsgi (pid=986): Target WSGI script '/data/http/osqa/osqa.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=986): Exception occurred processing WSGI script '/data/http/osqa/osqa.wsgi'. Traceback (most recent call last): File "/data/http/osqa/osqa.wsgi", line 14, in <module>
import Django.core.handlers.wsgi ImportError: No module named Django.core.handlers.wsgi
Mais je l'ai résolu sur mon serveur. Si vous pouvez le faire sur la ligne de commande, cette solution est pour vous:
python
>>> import Django.core.handlers.wsgi
>>>
Ce qui a marché, c’est que je chmod go + paquets de site rx libpython * .__ (c’est peut-être exagéré, mais cela a fonctionné pour moi.)
J'exécute en tant que httpd en tant que Apache.user, et en exécutant python en tant que root, je vois les paquets très bien, mais mes autorisations n'ont pas été configurées correctement (à lire par tout le monde) et c'est pourquoi httpd n'a pas pu lire les paquets.
Je sais que la question est un peu ancienne, mais je pensais répondre aux futurs utilisateurs SO susceptibles de trouver cette question:
Votre mod_wsgi est lié à python2.6, mais vous utilisez python 2.4 pour exécuter Django selon votre configuration?
Je vais supposer que votre/usr/bin/python pointe vers autre chose que le 2.6, qui compilait mod_wsgi. C'est peut-être aussi dû au fait que vous utilisez Django contre 2.4. J'ai reçu la même erreur lorsque je chargeais mod_wsgi lié à python2.6 lorsque Django utilisait python2.7. Avec la version de mod_wsgi que j'ai installée, elle supportait à la fois python2. [6-7], je n'avais donc qu'à supprimer le lien symbolique dans/usr/lib/Apache2/modules/pour mod_wsgi.so -> mod_wsgi .so-2.6 et remplacez-le par mod_wsgi.so -> mod_wsgi.so-2.7.
Assez facile.
Salut!
Si vous utilisez deb-distributive de Linux (Debian, Ubuntu, etc.), éditez le fichier.
/etc/Apache2/modules/wsgi.load
Ce fichier contenait le chemin d'accès à la bibliothèque wsgi (pour la version active de l'interpréteur Python). Si vous utilisez Python2.6, changez la chaîne
LoadModule wsgi_module /usr/lib/Apache2/modules/mod_wsgi.so-2.7
à
LoadModule wsgi_module /usr/lib/Apache2/modules/mod_wsgi.so-2.6
De plus, vous pouvez changer le lien symbolique en module mod_wsgi:
cd /usr/lib/Apache2/modules
ln -s mod_wsgi.so-2.6 mod_wsgi.so
N'oubliez pas de changer le lien pour archiver /etc/Apache2/modules/wsgi.load et redémarrez le serveur Apache
service Apache2 restart
P.S. Désolé pour mon mauvais anglais
Ce serait une meilleure idée si vous supprimez Django de votre ancienne bibliothèque Python.
[root@lts5srv1]# rm -rf /root/epd-5.1.0/lib/python2.5/site-packages/Django
..et réinstallez-le dans le dossier 'site-packages' du python actuel que vous utilisez:
[root@lts5srv1 Django-1.4.1]# /usr/local/bin/python2.6 setup.py install
C'est ce que j'ai fait et je ne reçois plus cette erreur!
Cette ligne est certainement fausse:
sys.path.append('/usr/lib/python2.4/site-packages/Django')
Installez Django avec/pour la version de Python sur laquelle mod_wsgi a été construit.