J'ai un dossier appelé python2.7
à l'intérieur de lib
dans l'environnement virtuel.
Après avoir lu une demi-douzaine de didacticiels, je n'arrive pas à comprendre exactement vers quoi je suis censé pointer WSGIPythonPath. J'ai vu certains pointer vers site-packages
mais certains ont été deux points :
liste séparée.
Syntax error on line 1019 of /etc/httpd/conf/httpd.conf:
WSGIPythonPath cannot occur within <VirtualHost> section
Où WSGIPythonPath doit-il pointer dans mon virtualenv?
Vous obtenez l'erreur car WSGIPythonPath La directive ne peut pas être utilisée dans le contexte VirtualHost. Vous devez le déclarer dans votre fichier de configuration Apache principal. Si vous souhaitez toujours pointer vers les répertoires de votre virtualenv dans le contexte VirtualHost, utilisez plutôt la directive WSGIDaemonProcess, il a une option python-path pour vous de déclarer votre _ [pythonpertinent _ répertoires.
Par exemple: votre fichier de configuration d'hôte virtuel devrait ressembler à ceci:
<VirtualHost *:80>
ServerName example.com
CustomLog logs/example.com-access_log common
ErrorLog logs/example.com-error_log
WSGIDaemonProcess example.com python-path=/virtualenvpathto/site-packages:/pathto/exampleprojecthome
WSGIProcessGroup example.com
...
</VirtualHost>
Le signe deux-points complet : est utilisé lorsque vous avez plusieurs répertoires python que vous souhaitez ajouter à la variable d'environnement $ PYTHON_PATH de façon à dire import example.foo fonctionne bien. Dans l'exemple ci-dessus, il existe deux répertoires, ils peuvent être plus ou moins selon la façon dont vous avez configuré votre projet.
Si vous êtes sous Windows, utilisez le point-virgule; au lieu de deux points pleins.
J'espère que ça aide.
tl; dr: utilisez WSGIDaemonProcess python-home=…
. Les alternatives utilisant WSGIPythonPath
ou WSGIDaemonProcess python-path=…
(avec -path
au lieu de -home
!) ne sont plus recommandés.
Comme mentionné par @kaykae, WSGIPythonPath
ne peut pas être utilisé dans un contexte VirtualHost
mais WSGIDaemonProcess python-path=…
est l'équivalent. Cependant, même si cela peut encore fonctionner, ce n'est plus la méthode recommandée pour configurer Apache mod_wsgi
avec des environnements virtuels Python:
Notez que la pratique antérieure était que ces façons de définir le chemin de recherche du module Python [à savoir
WSGIDaemonProcess …python-path=…
etWSGIPythonPath
] ont été utilisés pour spécifier l'emplacement de l'environnement virtuel Python. Plus précisément, ils ont été utilisés pour ajouter lesite-packages directory
de l'environnement virtuel Python. Vous ne devriez pas faire cela.La meilleure façon de spécifier l'emplacement de l'environnement virtuel Python est d'utiliser le
python-home
option de la directiveWSGIDaemonProcess
pour le mode démon, ou de la directiveWSGIPythonHome
pour le mode embarqué. Ces façons de spécifier l'environnement Python virtuel sont disponibles depuis mod_wsgi 3.0 et les distributions Linux n'ont pas livré une telle ancienne version de mod_wsgi depuis un certain temps. Si vous utilisez l'ancienne méthode, veuillez mettre à jour vos configurations.(Source: Documents WSGI: Guides de l'utilisateur: Environnements virtuels )
Le fait que vous essayez de configurer mod_wsgi
dans un contexte VirtualHost
montre que vous utilisez la version de configuration "mode démon". Selon la citation ci-dessus, la façon recommandée d'inclure votre environnement virtualenv
dans votre chemin Python serait alors une section comme celle-ci dans votre section VirtualHost
(bien que il peut également être défini à l'extérieur, car il peut être référencé avec le myapp1
identifiant du groupe de processus faemon que vous choisissez):
<IfModule mod_wsgi.c>
WSGIDaemonProcess myapp1 user=user1 group=group1 threads=5
python-home=/path/to/project/venv
</IfModule>
Notez que /path/to/project/venv
est le chemin de base de votre environnement virtualenv
. Ce serait un sous-répertoire venv
dans le répertoire où vous avez appelé virtualenv venv
pour le créer.
Notez également que vous pouvez ajouter d'autres chemins à votre Python pour que vos instructions import
fonctionnent pour les packages non gérés via PIP ou similaire. Par exemple, vous pouvez ajouter python-path=/path/to/project
. N'utilisez simplement pas ce mécanisme pour informer wsgi de toute la configuration de virtualenv - pour cela, ils ont introduit python-home
.