Installer mod_wsgi pour Python3 sur Ubuntu

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

J’ai eu Flask & mod_wsgi avec succès en utilisant Python3, et pour un bref instant je me suis senti heureux.

… jusqu’à ce que je regarde le journal d’Apache et que je réalise que je rencontre 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 libapache2-mod-wsgi-py3 de libapache2-mod-wsgi-py3 , ce qui provoque des erreurs dans le journal d’Apache. (Dois-je signaler cela et si oui où?)

Dans le lien, l’ingénieur utilise pip pour installer une version plus récente.

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

En outre, il utilise pip3 install mod_wsgi , mais la pip3 search mod_wsgi renvoie:

(EDIT: non, il n’utilise pas pip3. Est-ce que ça se passe bien? Est-ce qu’il a croisé les fils? Pip ne va-t-il pas ignorer qu’il est dans son py3venv et simplement utiliser l’installation py2 du système?) Mais de toute façon cela ne résout pas la confusion …)

 mod_wsgi-mesortingcs - Mesortingcs 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. 

Alors, qu’est-ce que mod_wsgi-httpd ? Et est-ce certain que ce n’est pas celui que je veux?

Enfin, quelqu’un peut-il fournir un lien vers l’installation de mod_wsgi depuis la source?

EDIT: Je ne comprends pas pourquoi l’ingénieur utilise l’ pip install mod_wsgi plutôt que pip3 ... Sûrement que ça ne peut 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 "", line 17, in  File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in  'missing Apache httpd server packages.' % APXS) RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequirejsites 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 "", line 17, in  File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in  'missing Apache httpd server packages.' % APXS) RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequirejsites 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’essaie d’ pip3 install mod_wsgi-httpd , il faut environ cinq minutes pour comstackr:

 (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, j’ai peur d’avoir un second Apache assis dans ma virtualisation 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 /etc/apache2/mods-available/wsgi_express.load , et s’il suggère de le faire, alors cela semble arbitraire pour commencer, et deuxièmement, le texte qu’il suggère d’y LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py34.cpython-34m.so , à savoir LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py34.cpython-34m.so – ce fichier n’existe pas sur mon système.

J’ai /etc/apache2/mods-available/wsgi.load

La noyade dans la technologie, quelqu’un peut-il me lancer une ligne?

S’ils avaient activé l’environnement virtuel Python 3 et que son répertoire bin était dans son chemin, ils pourraient alors simplement exécuter «pip» plutôt que «pip3». Vous devez exécuter «quel pip» pour vérifier s’il provient de l’environnement virtuel attendu.

Le paquetage ‘mod_wsgi-httpd’ est spécialement conçu pour installer une instance d’Apache distincte afin de contourner les problèmes où le système Apache est obsolète ou les fichiers d’en-tête de développement manquants ou ne peut pas modifier la configuration du système. Il est généralement plus pertinent lorsque vous n’avez pas d’access root pour résoudre les problèmes à l’échelle du système et que vous ne souhaitez que l’exécuter sur un port non privilégié et que vous n’avez donc pas besoin d’access root. Vous devrez également utiliser ‘mod_wsgi-express’ du paquetage ‘mod_wsgi’ qui était ‘pip’ après l’installation de ‘mod_wsgi-httpd’ car c’est la seule façon d’utiliser la version d’Apache ‘mod_wsgi-httpd’ .

Donc, pour ‘mod_wsgi-httpd’, vous voudriez vraiment l’ignorer. Si vous l’avez déjà installé, alors “pip” le désinstalle à la fois et “mod_wsgi”. Ce dernier doit être désinstallé car il sera lié à la version Apache de ‘mod_wsgi-httpd’ et le ‘mod_wsgi.so’ ne fonctionnera pas avec tout le système.

Comme pour séparer les étapes utilisateurs dans le lien, elles semblent correctes, même si je dirais qu’à l’étape 3, il convient de souligner que les lignes LoadModule et WSGIPythonHome à append sont celles exécutées lors de l’exécution de la commande mod_wsgi-express install-module . Ce que vous produisez est personnalisé pour correspondre à ce que devrait être votre installation. Alors ne faites pas de valeurs, utilisez simplement ce que cette commande de sortie.

Si vous avez toujours un fichier wsgi.load , lancez sudo a2dismod wsgi pour le supprimer ou le supprimer manuellement. C’est un rest de l’ancien système packagé mod_wsgi.

J’entends cette réponse comme une “note à moi-même qui peut être utile à d’autres”.

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

pip installe une version à jour. Cela se fait en téléchargeant le code source et en le compilant.

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

Dans mon cas, mon ./venv3 trouve dans mon dossier. Et le seul but de mod_wsgi est de faire en sorte que Apache achemine les requêtes http://myfoo.org/flask vers mon application mod_wsgi . Il est donc judicieux d’installer mod_wsgi dans cette venv3 .

Cependant, pour que pip puisse le comstackr, 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 demandé un redémarrage. Ensuite, l’ pip install mod_wsgi s’achève bien.

Ensuite, suivez 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 respectivement ces 2 lignes.

Enfin, activez le module et vérifiez le journal des erreurs d’Apache:

 a2enmod wsgi sudo service apache2 restart cat /var/log/apache2/error.log