web-dev-qa-db-fra.com

Installation de mod_wsgi pour Python3 sur Ubuntu

Quelqu'un pourrait-il me donner un ensemble clair d'instructions pour installer mod_wsgi sur Ubuntu pour Python 3?

J'ai obtenu Flask & mod_wsgi avec succès en utilisant Python3, et pendant un bref moment je me suis senti heureux.

... jusqu'à ce que je regarde le journal d'Apache et réalise que j'ai rencontré ce problème: https://askubuntu.com/questions/569550/assertionerror-using-Apache2-and-libapache2-mod-wsgi- py3-on-ubuntu-14-04-python

apt-get installe une version obsolète de libapache2-mod-wsgi-py3 et cela provoque des erreurs dans le journal d'Apache. (Dois-je le signaler et si oui, où?)

Dans le lien, l'ingénieur utilise pip pour installer une version plus à jour.

Fait intéressant, il semble l'installer dans un environnement virtuel Python3. (Serait-ce différent de l'utilisation du système pip3?)

Il utilise également pip3 install mod_wsgi, mais pip3 search mod_wsgi Retour:

(EDIT: non, il n'utilise pas pip non pip3. Cela peut-il être vrai? A-t-il croisé ses fils? Est-ce que pip ne va pas ignorer le fait qu'il est dans son py3venv et utiliser simplement l'installation du système py2? Mais de toute façon cela ne résout pas la confusion ...)

mod_wsgi-metrics          - Metrics package for Apache/mod_wsgi.
cykooz.recipe.pastewsgi   - Buildout recipe to create paste.deploy entry points for mod_wsgi or uwsgi
mod_wsgi-httpd            - Installer for Apache httpd web server.
apachemiddleware          - Useful Python middleware for use with mod_wsgi deployments
tranchitella.recipe.wsgi  - Buildout recipe to create paste.deploy entry points for mod_wsgi
mod_wsgi                  - Installer for Apache/mod_wsgi.

Donc qu'est-ce mod_wsgi-httpd? Et est-ce certain que ce n'est pas celui que je veux?

Enfin, quelqu'un peut-il fournir un lien pour installer mod_wsgi à partir des sources?

EDIT: Je ne comprends pas pourquoi l'ingénieur utilise pip install mod_wsgi plutôt que pip3 .... Cela ne peut sûrement pas être vrai? Mais si j'utilise pip3, j'obtiens:

pi@PiDroplet:~$ cd web/piFlask

pi@PiDroplet:~/web/piFlask$ source ./venv3/bin/activate
(venv3)
pi@PiDroplet:~/web/piFlask$ pip3 install mod_wsgi
Downloading/unpacking mod-wsgi
  Downloading mod_wsgi-4.4.12.tar.gz (991kB): 991kB downloaded
  Running setup.py (path:/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py) Egg_info for package mod-wsgi
    Traceback (most recent call last):
      File "<string>", line 17, in <module>
      File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in <module>
        'missing Apache httpd server packages.' % APXS)
    RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages.
    Complete output from command python setup.py Egg_info:
    Traceback (most recent call last):

  File "<string>", line 17, in <module>

  File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in <module>

    'missing Apache httpd server packages.' % APXS)

RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages.

----------------------------------------
Cleaning up...
Command python setup.py Egg_info failed with error code 1 in /home/pi/web/piFlask/venv3/build/mod-wsgi
Storing debug log for failure in /home/pi/.pip/pip.log

Et maintenant j'essaye pip3 install mod_wsgi-httpd, il faut environ cinq minutes pour compiler:

(venv3)
pi@PiDroplet:~/web/piFlask$ pip3 install mod_wsgi-httpd
Downloading/unpacking mod-wsgi-httpd
  Downloading mod_wsgi-httpd-2.4.12.5.tar.gz
  Running setup.py (path:/home/pi/web/piFlask/venv3/build/mod-wsgi-httpd/setup.py) Egg_info for package mod-wsgi-httpd
    apr-1.5.2/
    apr-1.5.2/config.layout
    apr-1.5.2/build.conf
    apr-1.5.2/emacs-mode
    :

Alors maintenant, je crains d'avoir un deuxième Apache assis dans mon virtualenv Py3.

Cependant, cela élimine l'erreur; pip3 install mod_wsgi se termine maintenant avec succès.

EDIT: mais maintenant je suis complètement décollé en essayant de suivre ses instructions: je n'ai pas de /etc/Apache2/mods-available/wsgi_express.load, et s'il propose de le faire, alors pour commencer cela semble arbitraire, et d'autre part le texte qu'il suggère d'y mettre, c'est-à-dire LoadModule wsgi_module /usr/lib/Apache2/modules/mod_wsgi-py34.cpython-34m.so - ce fichier n'existe pas sur mon système.

J'ai en effet /etc/Apache2/mods-available/wsgi.load

Noyé à nouveau dans la technologie, quelqu'un peut-il me lancer une ligne?

15
P i

S'ils avaient activé l'environnement virtuel Python 3 et que son répertoire bin se trouvait dans ce chemin, il est probable qu'ils pourraient simplement exécuter "pip" plutôt que "pip3". Vous devriez exécuter "quel pip" pour vérifiez s'il provenait de l'environnement virtuel que vous attendez.

Le package `` mod_wsgi-httpd '' est spécifiquement destiné à l'installation d'une instance distincte d'Apache elle-même pour contourner les problèmes où Apache à l'échelle du système est obsolète ou des fichiers d'en-tête de développement manquants, ou sinon ne peut pas modifier la configuration à l'échelle du système. Il est généralement plus pertinent lorsque vous ne disposez pas d'un accès root pour résoudre les problèmes à l'échelle du système et que vous souhaitez uniquement exécuter sur un port non privilégié et que vous n'avez donc pas besoin d'un accès root. Vous devez également utiliser 'mod_wsgi-express' du paquetage 'mod_wsgi' qui était 'pip' installé après l'installation de 'mod_wsgi-httpd' car c'est la seule façon d'utiliser la version installée 'mod_wsgi-httpd' d'Apache .

Donc, pour 'mod_wsgi-httpd', vous voudrez vraiment l'ignorer. Si vous l'avez déjà installé, alors 'pip' le désinstalle et 'mod_wsgi'. Ce dernier doit être désinstallé car il sera lié à la version Apache "mod_wsgi-httpd" et le "mod_wsgi.so" ne fonctionnera pas avec le système à l'échelle.

Quant aux étapes séparées des utilisateurs dans le lien, elles semblent correctes, bien que je dirais qu'à l'étape 3, il convient de souligner que les lignes LoadModule et WSGIPythonHome à ajouter sont ce qui est sorti lors de l'exécution mod_wsgi-express install-module commande. Les sorties sont personnalisées pour correspondre à ce que devrait être votre installation. Donc, ne créez pas de valeurs, utilisez simplement ce que cette sortie de commande.

Si tu as un wsgi.load fichier toujours présent, exécutez Sudo a2dismod wsgi pour le supprimer ou le supprimer manuellement. C'est un résidu de l'ancien système mod_wsgi.

5
Graham Dumpleton

J'ai l'intention de cette réponse comme une "note à soi qui peut être utile aux autres".

apt-get au moment de la rédaction, installe une version obsolète de mod_wsgi.

pip installe une version à jour. Pour ce faire, il télécharge le code source et le compile.

Configurez un virtualenv Python3 et activez-le avec source ./venv3/bin/activate, vérifier que which pip confirme qu'il utilise désormais cet environnement. Il semble que pip et pip3 soient interchangeables.

Dans mon cas, mon ./venv3 se trouve dans mon dossier flask. Et le seul but de mod_wsgi doit avoir la route Apache http://myfoo.org/flask demandes à mon flask app. Il est donc logique d'installer mod_wsgi dans ce venv3.

Cependant, pour que pip réussisse à le compiler, j'ai d'abord besoin de Sudo apt-get install Apache2-dev qui fournit les fichiers d'en-tête nécessaires. Ensuite, j'ai eu besoin d'un redémarrage. Ensuite pip install mod_wsgi se termine bien.

Suivez ensuite les instructions du lien d'origine:

(venv3)
$ Sudo venv3/bin/mod_wsgi-express install-module
LoadModule wsgi_module /usr/lib/Apache2/modules/mod_wsgi-py34.cpython-34m.so
WSGIPythonHome /home/pi/web/piFlask/venv3

Ensuite, je dois créer /etc/Apache2/mods-available/wsgi_express.{load,conf} contenant ces 2 lignes respectivement.

Enfin, activez le module et consultez le journal des erreurs d'Apache:

a2enmod wsgi
Sudo service Apache2 restart
cat /var/log/Apache2/error.log
26
P i