mod_wsgi: ImportError: No module named 'codages'
Je suis en utilisant Apache 2.2.15 sur CentOS 6.5. Je suis en train de configurer un Django app à l'aide de mod_wsgi.
Je suis en utilisant un environnement virtuel, et mod_wsgi a été configuré avec --with-python=/path/to/virtualenv/bin/python3.4
.
J'ai ajouté à mon httpd.conf
:
WSGIPythonPath /srv/myproject:/path/to/virtualenv/lib/python3.4/site-packages
WSGIPythonHome /path/to/virtualenv
<VirtualHost *:80>
WSGIScriptAlias / /srv/myproject/myproject/wsgi.py
...
</VirtualHost>
Dans wsgi.py
, j'ai ajouté
sys.path.insert(1, "/path/to/virtualenv/lib/python3.4/site-packages")
Le problème est que lorsque j'essaie d'ouvrir l'application dans mon navigateur, il charge indéfiniment. Voici le journal des erreurs d'Apache:
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'
[Mon Jun 30 17:37:28 2014] [notice] child pid 19370 exit signal Aborted (6)
[Mon Jun 30 17:37:28 2014] [notice] child pid 19371 exit signal Aborted (6)
...
[Mon Jun 30 17:37:28 2014] [notice] child pid 19377 exit signal Aborted (6)
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'
Ce qui est intéressant, c'est que dans le système d'installation de Python (2.6) et de l'environnement virtuel version (3.4), import encodings
fonctionne très bien! J'ai essayé d'utiliser l'exemple de WSGI script de le mod_wsgi CheckingYourInstallation page pour confirmer la version de Python est utilisé par Apache, mais j'obtiens le même ImportError.
Quelqu'un a une suggestion pour les prochaines étapes? J'ai parcouru la doc mais je ne sais pas où aller à partir d'ici.
Oui, c'est fait. Même en mettant tout dans ma environnements virtuels dossier en 777 n'a pas fonctionné!
Je vais avoir le même problème avec CentOS 6.5 et Apache 2.2.15 - Py_Initialize ne peut pas importer de fichiers. Lorsque j'ai compilé Python 3.4.1 il m'a donné un avertissement à propos d'un exec préfixe. Peut-être ceux-ci sont liés. Si vous avez une solution j'aimerais savoir.
J'ai résolu mon problème en utilisant virtualenv plutôt que pyvenv. Il s'avère que pyvenv n'a pas de lien symbolique de tous les modules locaux comme le codage, mais virtualenv fait. Plus d'informations sur pyvenv vs virtualenv pour Python 3.4
OriginalL'auteur tao_oat | 2014-06-30
Vous devez vous connecter pour publier un commentaire.
Donc, avec un peu d'aide avec mes amis (c'est à dire: les administrateurs système), nous avons obtenu ce compris la nuit dernière. Je apprendre par l'exemple, supposons que vous êtes l'exécution d'Apache avec mod_wsgi en tant que groupe Linux apache avec l'utilisateur flipperpa. Supposons que vous êtes l'hébergement dans /home/my_project avec wsgi.py dans my_project/wsgi.py.
Au plus haut niveau (ls -l /):
Dans le répertoire de base (ls-l /home):
C'était la clé. La minuscule "s" signifie que le groupe apache est setgid bit est défini, et le bit d'exécution est fixé. La finale de "x", bien sûr, signifie que n'importe qui peut exécuter.
Vérifier vos autorisations en bas de l'arbre; ce qui a fait le tour pour nous.
application
n'était pas en cours d'importation. Changé les permissions sur le fichier pour le groupe et d'autres pourraient lire et il est.chmod 755 maison chmod 765 my_project par chmodreverse.com
j'ai appliqué toutes les mesures que vous avez mentionné ici, mais toujours la même erreur
Vous êtes sous CentOS/RedHat avec SELinux est activé? Si oui, vous allez voir pour définir le contexte de sécurité sur les fichiers.
OriginalL'auteur FlipperPA
Le problème a été causé par SELinux. Ce que j'ai fait ceci:
httpd_enable_homedirs
booléen SELinux pouron
à l'aide desetsebool -P httpd_enable_homedirs on
.La SELinux guide sur CentOS wiki a été très utile. Par exemple, pour déboguer vous pouvez exécuter
setenforce Permissive
si SELinux ne pas respecter ses règles, mais encore écrire dans le journal. N'oubliez pas desetenforce Enforcing
de nouveau par la suite!OriginalL'auteur tao_oat
Sur Windows, j'ai résolu ce problème en mettant le répertoire Lib de mon installation de Python directement sur le PYTHONPATH. C'est nécessaire, même si, si vous exécutez Python directement dans la même coquille, il n'a pas besoin de cela pour trouver les codages package:
Aussi assurez-vous d'utiliser le bon mod_wsgi version. J'ai téléchargé la mine de la Officieux Binaires page et a choisi pour correspondre à l'Python (64 bits 3.4 dans l'exemple ci-dessus). Mon site fonctionne correctement avec Python après le changement ci-dessus à l' .fichier bat démarrage d'Apache.
Remarque ma version de Python, WinPython, est installé par décompression de l'installer et de le placer dans le lecteur C:. Ainsi, il n'est pas installé dans le Registre habituel de la façon dont Windows, ce qui devrait minimiser le Registre de l'interaction des considérations.
WinPython n'est pas installé dans l'habitude de Windows: il Vous suffit de les déposer dans le lecteur C: après la décompression. Le mod_wsgi a été téléchargé à partir de la Officieux Binaires page et choisi pour correspondre à la Python (64 bits 3.4 dans l'exemple ci-dessus). Le site fonctionne correctement avec Python après le correctif. Comprendre pourquoi il a fait le travail sur Windows est au-delà de mon niveau de compétence.
OriginalL'auteur Lars Ericson