Django Apache wsgi change la version de python

J’ai installé mon application Django sur un serveur Ubuntu avec Apache2.4.7 et l’ai configuré pour utiliser py3.5.2 à partir d’un environnement virtuel.

Cependant, à partir de ce que je peux voir dans les erreurs, il commence à 3,5 et par défaut à 3,4.

Veuillez expliquer pourquoi cela se produit:

/var/www/venv/lib/python3.5/site-packages /usr/lib/python3.4 

Voir l’erreur complète ci-dessous:

 SyntaxError at / invalid syntax (forms.py, line 2) Request Method: GET Request URL: http://intranet.example.com/ Django Version: 1.10.1 Exception Type: SyntaxError Exception Value: invalid syntax (forms.py, line 2) Exception Location: /var/www/intranet/formater/views.py in , line 7 Python Executable: /usr/bin/python3 Python Version: 3.4.3 Python Path: ['/var/www/intranet', '/var/www/venv/lib/python3.5/site-packages', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages', '/var/www/intranet', '/var/www/intranet/venv/lib/python3.5/site-packages'] 

Voici mon fichier apache2.conf:

 WSGIScriptAlias / /var/www/intranet/intranet/wsgi.py #WSGIPythonPath /var/www/intranet/:/var/www/intranet/venv/lib/python3.5/site-packages WSGIDaemonProcess intranet.example.com python-path=/var/www/intranet:/var/www/venv/lib/python3.5/site-packages WSGIProcessGroup intranet.example.com   Order deny,allow Allow from all   

Que fais-je mal ici?

Le module mod_wsgi pour Apache est compilé pour une version spécifique de Python. Vous ne pouvez pas le faire fonctionner avec une version Python différente en le dirigeant vers un environnement virtuel Python pour une version Python différente. Ceci est effacé dans la documentation de mod_wsgi sur l’utilisation des environnements virtuels Python à:

La seule façon d’exécuter mod_wsgi en tant que Python 3.5, s’il était original compilé pour Python 3.4, consiste à désinstaller cette version de mod_wsgi et à construire / installer une version de mod_wsgi compilée pour Python 3.5.

La source du problème était la réponse de Graham Dumpleton. Je veux juste donner plus d’informations au cas où cela aiderait une personne confrontée au même problème que moi.

Il n’y a pas de repo officiel pour Python 3.5.2 dans le serveur Ubuntu 14.04. Plutôt que d’utiliser un référentiel non pris en charge comme celui-ci , j’ai compilé Python 3.5.2 depuis le source en utilisant ce tutoriel très simple ici . Après avoir sauté à travers de nombreux obstacles, je n’ai pas pu installer mod_wsgi pour Python 3.5.2 en raison d’un chemin de bibliothèque différent.

Ayant déjà passé trop de temps là-dessus, j’ai tout désinstallé: Python, Apache, les bibliothèques et tout installé à partir de zéro, en utilisant cette fois Python 3.4.

Il est officiellement supporté pour Ubuntu 14.04 et pour mon projet, je n’ai pas remarqué de problèmes de compatibilité.

Voici donc ma courte liste de ce qu’il faut installer: depuis apt: python3, python3-pip, apache2, apache2-dev, libapache2-mod-wsgi-py3 et depuis pip: Django, mod-wsgi, virtualenv (si vous prévoyez d’utiliser un venv ).

Ensuite, configurez simplement “/etc/apache2/apache.conf”, exécutez “apache2ctl configtest” et redémarrez le service. Pour une aide supplémentaire, consultez ce guide ici .