mod_wsgi avec un environnement virtuel

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je travaille avec Python 3.5 et Django 1.9 et j'essaye de déployer mon application avec mod_wsgi. J'ai suivi les directives officielles mais j'obtiens toujours l'erreur ImportError: No module named 'django'. Quelques informations :

Mon script wsgi :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import sys
import django

def application(environ, start_response):
    status = '200 OK'
    output = str(sys.path)

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)
    return [output.encode('utf-8')]

Ce script fonctionne quand j'enlève la deuxième ligne d'import, et il affiche : ['/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages'].

Le premier est mon environnement virtuel, dans lequel est bien installé Django :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ pew workon dcb-site
Launching subshell in virtual environment. Type 'exit' or 'Ctrl+D' to return.
$ which python
/home/support/.local/share/virtualenvs/dcb-site/bin/python
$ python
Python 3.5.0+ (default, Oct 11 2015, 09:05:38) 
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> print('Ca marche')
Ca marche
>>>

Je ne comprends donc pas pourquoi l'import ne fonctionne pas dans mon script wsgi.

Merci.

+0 -0
Staff

Je pense que la partie clé c'est ça. Tu as bien ajouté ta variable d'environnement ? Tu l'a vérifié ? Car sinon Apache lui n'est pas dans ton virtualenv et ne pourra pas trouver tes libs.

+1 -0
Auteur du sujet

Ouep, j'ai bien cette ligne (pour mon test, elle vaut juste WSGIPythonPath /path/to/your/venv/lib/python3.X/site-packages). D'ailleurs, mon environnement virtuel apparaît bien dans sys.path lorsque le script est appelé. En fait, de ce que j'ai compris, WSGIPythonPath est équivalent à faire sys.path.append() dans le fichier wsgi. Du moins, quand je l'enlève, ma page affiche

1
['/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']

et non

1
['/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']

Édité par Vayel

+0 -0
Auteur du sujet

Est-ce que ça pourrait être lié au fait que je suis en Python 3, et qu'en Python 3 les sous-modules ne sont pas chargés automatiquement ? D'ailleurs, dans mon environnement virtuel, tous les sous-dossiers de venv/site-packages sont dans sys.path :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ pew workon dcb-site
Launching subshell in virtual environment. Type 'exit' or 'Ctrl+D' to return.
$ python
Python 3.5.0+ (default, Oct 11 2015, 09:05:38) 
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages/dcb-0.1-py3.5.egg', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages/wheel-0.24.0-py3.5.egg', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages/Unidecode-0.4.19-py3.5.egg', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages/six-1.10.0-py3.5.egg', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages/pytz-2015.7-py3.5.egg', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages/python_slugify-1.2.0-py3.5.egg', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages/Pillow-3.1.0-py3.5-linux-x86_64.egg', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages/django_user_accounts-1.3.1-py3.5.egg', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages/django_guardian-1.4.2-py3.5.egg', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages/django_autoslug-1.9.3-py3.5.egg', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages/django_appconf-1.0.1-py3.5.egg', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages/Django-1.9.1-py3.5.egg', '/home/support/.local/share/virtualenvs/dcb-site/lib/python35.zip', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/plat-x86_64-linux-gnu', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/lib-dynload', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/home/support/.local/share/virtualenvs/dcb-site/lib/python3.5/site-packages']
>>> 
+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte