Prise en Flacon à utiliser Python3 (Apache/mod_wsgi)
J'ai une base "hello world" Flacon application en cours d'exécution.
Je suis sur Ubuntu 14.04, à l'aide d'Apache 2.4. J'ai installé mod_wsgi.
J'ai créé un ~/web/piFlask/venv/
de tenir un virtualenv-créé Python2 avec flacon installé.
Cependant, je tiens à avoir mon flaskapp importer un Python3.x module que j'ai écrit.
Que dois-je faire pour que cela se produise?
J'ai essayé de créer un ~/web/piFlask/venv3/
et la modification de ~/web/piFlask/piFlask.wsgi
:
import os, sys
PROJECT_DIR = '/home/pi/web/piFlask'
activate_this = os.path.join(PROJECT_DIR, 'venv3/bin', 'activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
sys.path.insert(0, PROJECT_DIR)
from piFlask import app as application
application.debug = True
Mais je ne pense pas que ce soit suffisant. C' .wsgi est en fait un fichier Python qui sera exécuté par mod_wsgi, qui je suis sûr va utiliser un Py2.x interprète pour faire l'exécution.
Donc, si je comprends correctement, mod_wsgi excite le système de Python pour exécuter cette .wsgi, qui sera à son tour le feu jusqu'à mon ~/web/piFlask/venv/
interprète à réellement traiter la demande.
Je pense que je pourrais convaincre mod_wsgi pour utiliser un système de Python3 ou mon propre venv3/... par la mise en WSGIPythonPath /home/pi/web/piFlask/venv3/lib/python3.4/site-packages
dans /etc/apache2/mods-available/wsgi.conf
Mais j'ai trouvé une instruction quelque part disant que vous avez à compiler mod_wsgi pour Py3, et le fond tombe rapidement à ce problème.
OriginalL'auteur P i | 2015-06-04
Vous devez vous connecter pour publier un commentaire.
Correct, mod_wsgi doit être compilé pour une version de Python que jamais, il exécute des 'python' exécutable. Au lieu de la bibliothèque Python est liée dans mod_wsgi.
Le résultat final est que vous ne pouvez pas mélanger Python 3 du code dans une application en cours d'exécution à l'aide de l'interpréteur Python 2.
Vous devez envisager de faire votre code exécutable sous Python 2 et 3, et puis vous pouvez choisir ceux que vous souhaitez utiliser et d'utiliser une version de mod_wsgi compilé pour la version que vous choisissez d'utiliser.
libapache2-mod-wsgi-py3
-- ai-je pu faire au lieu de: 1. a2disable mod_wsgi, 2. désinstaller mod_wsgi utilisation de pip, 3. install libapache2-mod-wsgi-py3 à l'aide de pip3?Oui. Tant que tout votre code et un tiers des modules Python, vous avez besoin de Python 3 capable. Tout devra être installé dans votre Python 3 environnement virtuel. Vous ne pouvez pas mélanger les pièces des environnements virtuels pour les différentes versions de Python.
OriginalL'auteur Graham Dumpleton
M'a fallu un certain temps, bien qu'il était très simple en fin de compte. Malheureusement, j'ai perdu mon historique bash donc, si vous trouvez une erreur, merci de laisser un commentaire ou modifier dans la correction.
Remarque que j'avais déjà eu mod_wsgi de travail, j'ai donc dû supprimer:
EDIT: en Raison de apt-get installation d'un paquet obsolète (ce qui résulte en une erreur mineure qui se glissent dans le journal des erreurs) je ne suis pas au moment de la rédaction de recommander ce:
Au lieu de cela, d'abord configurer votre py3 environnement virtuel, (et peut-être ainsi à installer Flacon en elle pendant que vous y êtes)
Maintenant, suivez L'installation de mod_wsgi pour Python3 sur Ubuntu pour installer mod_wsgi dans ce venv, et ...
Ce fut à partir de l'original apt-get approche, maintenant, il n'est pas pertinent:
Enfin j'ai besoin de modifier mon ~/web/flaskapp/flaskapp.wsgi de sorte qu'il prend désormais en charge Python3:
Juste un rappel de la manière dont Apache utilise mod_wsgi pour exécuter ce fichier lorsque l'utilisateur des points de leur navigateur pour http://myfoo.org/flask:
Discussion: Il semble un peu brouillon que je suis de l'installation de mod_wsgi module dans Apache, mais il réside dans un venv3 qui est à l'intérieur de mon flaskapp dossier. Mais c'est au moins s'assurer Apache -> mod_wsgi -> (utilise la bonne c'est à dire venv3 Python) -> {pour lancer mon FlaskApp}.
L'alternative serait de mettre à jour le système de Python, et l'utiliser à la place de venv.
OriginalL'auteur P i
J'ai commencé à courir python3.5.2 avec flacon 0,12 un venv sur une Ubuntu 16.04 (machine virtuelle).
@Graham a souligné l'activation de la venv de la WSGI fichier de script n'est pas la méthode préférée. Plus d'infos ici: http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html
Juste pour quelqu'un d'autre pour trouver des infos sur ce que je suis en train de mettre tous vos étapes:
Note: mon nom de l'application est fulgurante, chemin ~/jan/flamboyante. Remplacer par votre propre.
De SORTIE:
LoadModule wsgi_module "/usr/lib/apache2/modules/mod_wsgi-py35.disponible-35m-x86_64-linux-gnu.donc"
WSGIPythonHome "/home/jan/flamboyant/venv"
AJOUTER: LoadModule wsgi_module "/usr/lib/apache2/modules/mod_wsgi-py35.disponible-35m-x86_64-linux-gnu.donc"
AJOUTER:
puis
AJOUTER:
et
AJOUTER:
Ou si vous avez d'autres sites en cours d'exécution et voudrais avoir flacon comme l'un des hôtes Virtuels, vous pouvez utiliser ce fichier conf:
et assurez-vous que votre
PROJECT_DIR
dansflaskapp.wsgi
points à votre PROJECT_NAME.py.activer le site virtuel et de le recharger apache:
enfin:
WSGIRestrictStdout Off
que c'est la valeur par défaut.Merci pour le lien, mis à jour mon post.
OriginalL'auteur cristian
Prises à partir de la P-je de répondre. Le suivant fonctionne maintenant et résout le problème:
OriginalL'auteur caspii