La ligne # ! n'est pas utilisée et ne devrait pas être placée dans un fichier WSGI script tel qu'utilisé par mod_wsgi.
Pour déterminer quelle version/installation de Python est utilisée, il y a deux éléments à prendre en compte.
La première, comme l'a souligné quelqu'un d'autre, consiste à déterminer la bibliothèque Python à laquelle mod_wsgi.so est lié. Sur la plupart des systèmes UNIX, cela se fait à l'aide de la commande 'ldd'.
ldd mod_wsgi.so
Exécutez ceci sur le mod_wsgi.so installé dans le répertoire des modules d'Apache qui est utilisé. Cela vous permettra de savoir avec certitude quelle version de mod_wsgi a été compilée.
Si vous ne voyez pas de référence à un fichier libpythonX.Y.so, c'est que votre mod_wsgi.so a été lié statiquement à la bibliothèque Python. Bien que cela fonctionne, tant que mod_python n'est pas également chargé dans le même Apache, c'est une très mauvaise idée de s'y fier car l'utilisation de la liaison statique de la bibliothèque Python entraîne un gonflement inutile de vos processus Apache en raison de la relocalisation du code d'exécution qui doit être effectuée lors du chargement de mod_wsgi.so avec la bibliothèque Python liée de manière statique.
Notez que la valeur de "sys.executable" lors de l'exécution sous mod_wsgi n'a aucune signification et ne peut pas être utilisée pour déterminer quelle version de Python a été utilisée. En effet, la ligne de commande Python n'est pas utilisée. Au lieu de cela, l'exécutable qui est exécuté est en fait Apache et sys.executable le reflétera très probablement. Ce n'est qu'après l'exécution d'Apache et le chargement de mod_wsgi.so que Python est initialisé à l'aide des API Python intégrées. De même, l'exécution de "which Python" n'aidera pas à déterminer exactement quelle installation de Python est utilisée.
La deuxième partie consiste à déterminer quelle installation de Python a été utilisée au moment de l'exécution. Pour ce faire, vous devez utiliser un programme WSGI hello world et le modifier pour récupérer la valeur de 'sys.prefix'. Cette valeur indique le répertoire racine dans lequel se trouve l'installation de Python. En fonction de la version de la bibliothèque partagée Python utilisée, vous saurez alors quel répertoire "lib/pythonX.Y" est utilisé dans ce répertoire racine. La version est importante car il peut y avoir plusieurs versions installées dans ce répertoire racine.
Notez que ce que vous obtenez pour 'sys.prefix' peut en fait être différent du répertoire racine comme vous le pensiez et peut être basé sur la dépendance de libpythonX.Y.so du fichier mod_wsgi.so. Cela est dû à la manière dont Python, lorsqu'il est initialisé, essaie de trouver son répertoire "lib".
Par exemple, si Python 2.6 est installé sous '/usr/local' et un autre sous '/usr', mais que vous avez compilé mod_wsgi sous '/usr/local', il se peut que 'sys.prefix' soit résolu en '/usr'. Cela s'explique par le fait que, par défaut, dans les systèmes intégrés, Python prend en compte la valeur de la variable d'environnement "PATH" pour obtenir un chemin de recherche permettant de trouver un exécutable "Python" comme point de départ pour le calcul du répertoire racine, même si cet exécutable "Python" n'a pas été utilisé pour lancer le processus.
Sous Apache, parce qu'il est généralement démarré en tant que "root", il n'aurait pas nécessairement "/usr/local/bin" dans votre "PATH" et trouverait donc probablement "/usr/bin/Python" à la place et utiliserait donc "/usr" pour "sys.prefix".
Dans ce dernier cas de figure où il trouve un répertoire racine différent de celui que vous souhaitez utiliser, vous pouvez utiliser la directive WSGIPythonHome dans la configuration d'Apache pour remplacer le préfixe 'sys.prefix' qui est automatiquement calculé.
Notez que vous NE POUVEZ PAS utiliser WSGIPythonHome pour faire référence à une version différente de Python, il doit faire référence à un répertoire racine contenant une installation de Python de la même version majeure/mineure. Si vous devez utiliser une version différente de Python, vous devez recompiler et réinstaller mod_wsgi de manière à ce qu'il soit compilé en fonction de la nouvelle version. La version/installation de Python à utiliser lors de la compilation peut être spécifiée à l'aide de l'option '--with-Python' de la configuration de mod_wsgi script lors de la construction.
Il existe d'autres moyens que d'utiliser la directive WSGIPythonHome pour modifier l'installation de Python utilisée, mais il est recommandé de s'en tenir à WSGIPythonHome.