web-dev-qa-db-fra.com

Installez mod_wsgi sur Ubuntu avec Python 3.6, Apache 2.4 et Django 1.11

Comment puis-je obtenir mod_wsgi pour Apache2 qui a été compilé pour Python 3.6.1?

(ou toute future Python)

J'utilise un environnement virtuel Python 3.6.1 avec Django 1.11 et tout fonctionne selon le journal des erreurs Apache, sauf que mod_wsgi pour Apache 2.4 a été compilé pour Python/3.5.1 + et utilise Python/3.5.2, donc mon code Python 3.6.1 échoue car j'utilise de nouvelles fonctionnalités non disponibles dans 3.5.2

Toutes les autres configurations et installations impliquées dans la configuration de mon système semblent bien (Exécuter en mode démon) bien que mod_wsgi ne semble pas utiliser mon Python 3.6.1 environnement virtuel (bien que il essaie de l'utiliser pour Django selon le journal des erreurs) ...

J'ai utilisé:Sudo apt-get install libapache2-mod-wsgi-py3 pour installer mod_wsgi pour Apache 2.4

J'ai utilisé:./configure --with-python=/usr/local/bin/python3.6 et make avec make install pour installer mod_wsgi pour Python 3.6

Je dois faire quelque chose de mal - veuillez me corriger!

Voici mon journal des erreurs Apache (nettoyé un peu) - et oui je sais qu'il échoue sur la ligne de chaîne f "" (la fonctionnalité python 3.6 n'est pas en 3.5)

[wsgi:warn] mod_wsgi: Compiled for Python/3.5.1+.
[wsgi:warn] mod_wsgi: Runtime using Python/3.5.2.
[wsgi:warn] AH00489: Apache/2.4.18 (Ubuntu) mod_wsgi/4.3.0 Python/3.5.2 configured -- resuming normal operations
[wsgi:warn] AH00094: Command line: '/usr/sbin/Apache2'
[wsgi:error] mod_wsgi (pid=12963): Target WSGI script '/home/jamin/www/dev.tir.com/tir/tir/wsgi.py' cannot be loaded as Python module.
[wsgi:error] mod_wsgi (pid=12963): Exception occurred processing WSGI script '/home/jamin/www/dev.tir.com/tir/tir/wsgi.py'.
[wsgi:error] Traceback (most recent call last):
[wsgi:error]   File "/home/jamin/www/dev.tir.com/tir/tir/wsgi.py", line 21, in <module>
[wsgi:error]     application = get_wsgi_application()
[wsgi:error]   File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/Django/core/wsgi.py", line 13, in get_wsgi_application
[wsgi:error]     Django.setup(set_prefix=False)
[wsgi:error]   File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/Django/__init__.py", line 27, in setup
[wsgi:error]     apps.populate(settings.INSTALLED_APPS)
[wsgi:error]   File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/Django/apps/registry.py", line 116, in populate
[wsgi:error]     app_config.ready()
[wsgi:error]   File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/Django/contrib/admin/apps.py", line 23, in ready
[wsgi:error]     self.module.autodiscover()
[wsgi:error]   File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/Django/contrib/admin/__init__.py", line 26, in autodiscover
[wsgi:error]     autodiscover_modules('admin', register_to=site)
[wsgi:error]   File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/Django/utils/module_loading.py", line 50, in autodiscover_modules
[wsgi:error]     import_module('%s.%s' % (app_config.name, module_to_search))
[wsgi:error]   File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
[wsgi:error]     return _bootstrap._gcd_import(name[level:], package, level)
[wsgi:error]   File "<frozen importlib._bootstrap>", line 986, in _gcd_import
[wsgi:error]   File "<frozen importlib._bootstrap>", line 969, in _find_and_load
[wsgi:error]   File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
[wsgi:error]   File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
[wsgi:error]   File "<frozen importlib._bootstrap_external>", line 665, in exec_module
[wsgi:error]   File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
[wsgi:error]   File "/home/jamin/www/dev.tir.com/tir/company/admin.py", line 13, in <module>
[wsgi:error]     from .forms import AdminInteractionForm
[wsgi:error]   File "/home/jamin/www/dev.tir.com/tir/company/forms.py", line 87
[wsgi:error]     resp = f"Hi {user.first_name}, you'll need to login to send any more suggestions. \\
[wsgi:error]                              \\n\\nFirst Time? Check your email/spam for login instructions from us."
[wsgi:error]                                                                                        
[wsgi:error]                                                                                                   ^
[wsgi:error] SyntaxError: invalid syntax

* aussi tir.com est un raccourci pour mon site actuel - je n'ai rien à voir avec ce domaine

23
JxAxMxIxN

Procédez comme suit.

Désinstallez votre package système mod_wsgi.

Sudo apt-get remove libapache2-mod-wsgi-py3

Installez mod_wsgi en utilisant pip, de préférence dans un environnement virtuel Python. Assurez-vous que pip est pour la version de Python que vous voulez utiliser.

pip install mod_wsgi

Affichez la configuration à ajouter au fichier de configuration Apache pour charger ce mod_wsgi en exécutant:

mod_wsgi-express module-config

Prenez la sortie de la commande ci-dessus pour afficher la configuration et ajouter à la configuration Apache.

Ajoutez la configuration à Apache pour charger une application WSGI hello world pour tester son fonctionnement.

Voir les détails de l'installation basée sur pip dans:

28
Graham Dumpleton

Lorsque j'ai utilisé la suggestion @Graham Dumpleton pour installer le mod_wsgi en utilisant pip, j'ai obtenu cette erreur:

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.

Pour compiler et installer avec succès le mod_wsgi à pip, je dois installer le Apache2-dev package sur Ubuntu:

Sudo apt-get install -y Apache2-dev

Après ça pip install mod_wsgi se termine avec succès.

J'espère que cela pourrait aider les autres.

8
Arbab Nazar