Contexte :
Depuis que je développe des programmes python qui doivent fonctionner sur différentes versions de python, j'ai installé différentes versions de python sur mon ordinateur.
J'utilise FC 13 donc il est venu avec python 2.6 pré-installé dans /usr/bin/python2.6
et /usr/lib/python2.6
.
J'ai installé python 2.5 depuis la source, et pour garder les choses en ordre, j'ai utilisé l' --prefix=/usr
option, qui a installé python dans /usr/bin/python2.5
et /usr/lib/python2.5
.
Maintenant, lorsque j'exécute python
mon invite, j'utilise la version 2.5. Cependant, j'ai des problèmes avec l'installation.
Gestion des packages :
En utilisant easy_install, les packages sont toujours installés dans /usr/lib/python2.6/site-packages/
. J'ai téléchargé setuptools
.egg pour python 2.5 et j'ai essayé de l'installer, mais cela me donne une erreur:
/usr/lib/python2.5/site-packages does NOT support .pth files
Il semble que python2.5 ne soit pas dans mon PYTHONPATH. Je pensais que l'installation par défaut s'ajouterait au PYTHONPATH, mais quand j'écris echo $PYTHONPATH
à promt, je reçois juste une ligne vide.
Cela ressemble à une application parfaite pour virtualenv , un outil très populaire pour créer des environnements Python isolés. Ceci est un exemple de commande pour spécifier la version de Python
la source
virtualenv
soit la solution dans ce cas. Voir ma réponse.C'est parce que distutils ajoute une ligne de shebang à tous les scripts en cours d'installation. Si vous exécutez le
easy_install
script directement, il est exécuté avec l'interpréteur avec lequel il a été installé (selon la ligne shebang). Ce quieasy_install
est exécuté dépend de votrePATH
nonPYTHONPATH
. Si vous souhaitez installer un package dans une instance Python 2.5, vous devez exécuter eneasy_install
spécifiant l'interpréteur Python à utiliser:À proprement parler
virtualenv
n'aide pas ici car il doit être créé dans le contexte de la base Python qui est exactement le même problème que lors de l'exécutioneasy_install
. C'est à cela que sert l'--python
argumentvirtualenv
. Pour une raison quelconque,easy_install
ne fournit pas d'argument analogue, il doit donc être exécuté avec un interpréteur Python spécifique, comme indiqué ci-dessus.la source
J'utilise également Fedora 13 et
PYTHONPATH
n'est pas défini.Dans python,
sys.path
vous donnera une liste des chemins utilisés pour importer des scripts.Je ne sais pas comment
easy_install
décide son répertoire de destination mais je suis sûr qu'il y aurait un argument en ligne de commande que vous pourriez lui donner.Essayez de spécifier la version de python
easy_install
sous laquelle exécuter en précédant votre commande avec le chemin d'accès complet au python souhaité.Vérifiez également s'il
easy_install
existe un lien symbolique dans le bac vers un script dans une version python que vous avez installée.la source
Virtualenv est définitivement une aubaine ici.
Dans ma configuration, la variable d'environnement est
VIRTUALENV_USE_DISTRIBUTE
définie sur 1, de sorte que le package de distribution plus moderne est utilisé à la place de setuptools. J'ai créé des environnements virtuels pour les deux versions de Python sur mon système comme ceci:J'ai ensuite créé trois alias dans
.bashrc
:Ainsi, je peux utiliser
py2
pour passer à une valeur par défaut de Python 2.6 etpy3
pour passer à une valeur par défaut de Python 3.2. La saisieidle
s'exécutera selon la version d'IDLE appropriée à l'environnement virtuel dans lequel je me trouve.L'installation de packages dans l'un de ces environnements virtuels implique généralement une
pip install
commande.la source