Utilisation de différentes versions de Python

21

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.6et /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=/usroption, qui a installé python dans /usr/bin/python2.5et /usr/lib/python2.5.

Maintenant, lorsque j'exécute pythonmon 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.

Alex
la source

Réponses:

20

La façon recommandée d'installer plusieurs versions de Python est d'installer chacune à partir de la source - elles coexisteront avec plaisir ensemble. Vous pouvez ensuite utiliser virtualenv avec l'interpréteur approprié pour installer les dépendances requises (en utilisant pip ou easy_install). L'astuce pour faciliter l'installation de plusieurs interprètes à partir de la source est d'utiliser:

sudo make altinstall

au lieu du "sudo make install" plus habituel. Cela ajoutera le numéro de version à l'exécutable (vous aurez donc python-2.5, python-2.6, python-3.2, etc.) empêchant ainsi tout conflit avec la version système de Python.

VPeric
la source
2
Altinstall + virtualenv = nirvahna de développement python. Merci!
Alex
13

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

$ virtualenv --python=/usr/bin/python2.6 myvirtualenv
Adam Byrtek
la source
Je ne pense pas que ce virtualenvsoit la solution dans ce cas. Voir ma réponse.
Piotr Dobrogost
5

À l'aide de easy_install, les packages sont toujours installés dans /usr/lib/python2.6/site-packages/

C'est parce que distutils ajoute une ligne de shebang à tous les scripts en cours d'installation. Si vous exécutez le easy_installscript directement, il est exécuté avec l'interpréteur avec lequel il a été installé (selon la ligne shebang). Ce qui easy_installest exécuté dépend de votre PATHnon PYTHONPATH. Si vous souhaitez installer un package dans une instance Python 2.5, vous devez exécuter en easy_installspécifiant l'interpréteur Python à utiliser:

/usr/bin/python2.5/python easy_install ...

À proprement parler virtualenvn'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écution easy_install. C'est à cela que sert l' --pythonargument virtualenv. Pour une raison quelconque, easy_installne fournit pas d'argument analogue, il doit donc être exécuté avec un interpréteur Python spécifique, comme indiqué ci-dessus.

Piotr Dobrogost
la source
C'est ma première réponse ici et j'espère également le premier badge Nécromancien :)
Piotr Dobrogost
Très bonne explication, merci! Badge de nécromancien bien mérité;)
Alex
2

J'utilise également Fedora 13 et PYTHONPATHn'est pas défini.

Dans python, sys.pathvous donnera une liste des chemins utilisés pour importer des scripts.

Je ne sais pas comment easy_installdé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_installsous 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_installexiste un lien symbolique dans le bac vers un script dans une version python que vous avez installée.

bkersten
la source
1

Virtualenv est définitivement une aubaine ici.

Dans ma configuration, la variable d'environnement est VIRTUALENV_USE_DISTRIBUTEdé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:

$ virtualenv -p python2.6 py2
$ virtualenv -p python3.2 py3

J'ai ensuite créé trois alias dans .bashrc:

alias py2='source $HOME/py2/bin/activate'
alias py3='source $HOME/py3/bin/activate'
alias idle='python -m idlelib.idle'

Ainsi, je peux utiliser py2pour passer à une valeur par défaut de Python 2.6 et py3pour passer à une valeur par défaut de Python 3.2. La saisie idles'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 installcommande.

pythoneer
la source