Je suis nouveau sur Python et je travaille sur une machine Linux (Ubuntu 10.10). Il fonctionne python 2.6, mais j'aimerais exécuter 2.7 comme il a des fonctionnalités que je veux utiliser. J'ai été invité à ne pas installer 2.7 et à le définir comme mon python par défaut.
Ma question est, comment puis-je installer 2.7 et l'exécuter côte à côte avec 2.6?
Je l'ai fait avec pythonbrew sur ma machine Ubuntu 10.10.
$ python -V
Python 2.6.6
$ curl -kL https://raw.github.com/utahta/pythonbrew/master/pythonbrew-install | bash
$ . $HOME/.pythonbrew/etc/bashrc
$ pythonbrew install 2.7.1
$ pythonbrew switch 2.7.1
Switched to Python-2.7.1
$ python -V
Python 2.7.1
J'ai récemment rétroporté Python 2.7 à Debian Squeeze. Comme Ubuntu 10.10 est plus récent que Debian Squeeze, si vous pouvez le faire sur Squeeze, vous pouvez certainement le faire sur Ubuntu. Je n'ai pas accès à un système Ubuntu 10.10. Si j'en installe un, je vais le tester et mettre à jour cette réponse. Donc, voici plutôt un bref aperçu de ce que j'ai fait sur Debian.
Tout d'abord, un commentaire général et évident, mais quelque chose qui est facilement ignoré. Il ne faut pas prendre trop au sérieux les dépendances de construction listées d'un paquet Debian. Ils peuvent être beaucoup plus précis que nécessaire. Par exemple, il est peu probable qu'un logiciel comme Python, conçu pour être portable et exécuté sur un large éventail de systèmes, soit construit en fonction de versions très spécifiques du logiciel. Les dépendances d'exécution peuvent également être ajustées, mais cela doit être fait avec plus de prudence. Cependant, les dépendances à l'exécution sont généralement générées dynamiquement sur la base d'un logiciel qui se trouve déjà sur ce système, donc généralement ce n'est pas un gros problème.
apt-cache policy python2.7
python2.7:
Installed: 2.7.2-8
Candidate: 2.7.2-8
Version table:
2.7.2-12 0
50 http://debian.csail.mit.edu/debian/ unstable/main i386 Packages
2.7.2-8 0
50 http://debian.csail.mit.edu/debian/ testing/main i386 Packages
*** 2.7.2-8 0
100 /var/lib/dpkg/status
Sélection de la version de test que nous obtenons
apt-get source python2.7=2.7.2-8
Regarder debian/control
, nous voyons les lignes de dépendance de construction suivantes.
Build-Depends: debhelper (> = 5), quilt, autoconf, libreadline-dev, libtinfo-dev, libncursesw5-dev (> = 5.3), tk8.5-dev, zlib1g-dev, blt-dev (> = 2.4z ), libssl-dev, libexpat1-dev, sharutils, libbz2-dev, libbluetooth-dev [linux-any], locales [! armel! avr32! hppa! ia64! mipsel], libsqlite3-dev, libffi-dev (> = 3.0 .5), mime-support, libgpm2 [linux-any], netbase, lsb-release, bzip2, libdb4.8-dev, gdb, python, help2man Build-Depends-Indep: python-sphinx Build-Conflicts: tcl8.3 -dev, tk8.3-dev, tcl8.4-dev, tk8.4-dev, python2.7-xml, python-xml, autoconf2.13, libncurses5-dev
La plupart de cela est facilement satisfait lors de la compression. Avec l'utilitaire pratique apt-show-versions
on monte sur ma machine
apt-show-versions debhelper quilt autoconf libreadline-dev libtinfo-dev libncursesw5-dev tk8.5-dev zlib1g-dev blt-dev \
libssl-dev libexpat1-dev sharutils libbz2-dev libbluetooth-dev locales libsqlite3-dev \
libffi-dev mime-support libgpm2 netbase lsb-release bzip2 libdb4.8-dev gdb python help2man python-sphinx
autoconf/squeeze uptodate 2.67-2
blt-dev/squeeze uptodate 2.4z-4.2
bzip2/squeeze uptodate 1.0.5-6
debhelper/squeeze-backports uptodate 8.9.13~bpo60+1
gdb/squeeze uptodate 7.0.1-2+b1
help2man/squeeze uptodate 1.38.2
libbluetooth-dev/squeeze uptodate 4.66-3
libbz2-dev/squeeze uptodate 1.0.5-6
libdb4.8-dev/squeeze uptodate 4.8.30-2
libexpat1-dev/squeeze uptodate 2.0.1-7
libffi-dev/squeeze uptodate 3.0.9-3
libgpm2/squeeze uptodate 1.20.4-3.3
libncursesw5-dev/squeeze uptodate 5.7+20100313-5
libreadline-dev/squeeze uptodate 6.1-3
libsqlite3-dev/squeeze uptodate 3.7.3-1
libssl-dev/squeeze uptodate 0.9.8o-4squeeze5
libtinfo-dev not installed
locales/squeeze uptodate 2.11.2-10
lsb-release/squeeze uptodate 3.2-23.2squeeze1
mime-support/squeeze uptodate 3.48-1
netbase/squeeze uptodate 4.45
python/squeeze uptodate 2.6.6-3+squeeze6
python-sphinx/squeeze-backports uptodate 1.0.8+dfsg-2~bpo60+1
quilt/squeeze uptodate 0.48-7
sharutils/squeeze uptodate 1:4.9-1
tk8.5-dev/squeeze uptodate 8.5.8-1
zlib1g-dev/squeeze uptodate 1:1.2.3.4.dfsg-3
Nous voyons que tout sauf libtinfo-dev
est disponible en compression. J'ai les versions de backport squeeze de debhelper
et python-sphinx
, mais les deux sont également disponibles pour Debian Squeeze dans des versions répondant aux exigences de construction.
Observez également que j'ai installé libncurses5-dev
apt-show-versions libncurses5-dev
libncurses5-dev/squeeze uptodate 5.7+20100313-5
Ces deux packages correspondent au package source curses 5.7+20100313-5
. Observe ceci libtinfo-dev
remplace en fait libncurses5-dev
.
apt-cache show libtinfo-dev
Package: libtinfo-dev
Source: ncurses
Version: 5.9-4
Installed-Size: 279
Maintainer: Craig Small <[email protected]>
Architecture: i386
Replaces: libncurses5-dev (<< 5.9-3)
Depends: libtinfo5 (= 5.9-4)
On ne s'attendrait pas à ce que python 2.7 se développe sur une telle version spécifique de curses, et en fait ce n'est pas le cas. Cependant, si vous essayez de construire les packages sans satisfaire la dépendance que vous obtenez
debuild -uc -us
dpkg-checkbuilddeps: Unmet build dependencies: libtinfo-dev
dpkg-checkbuilddeps: Build conflicts: libncurses5-dev
debuild: fatal error at line 1289:
You do not appear to have all build dependencies properly met.
You can use mk-build-deps to generate a dummy package which
Depends on all the required packages, or you can install them
manually using dpkg or apt using the error messages just above
this message.
Il faut donc éditer debian/control
. Notez que vous devez également modifier le fichier de manière similaire debian/control.in
, sinon le fichier control
ne sera pas régénéré correctement à partir de control.in
. La chose la plus simple à faire est de simplement supprimer libncurses5-dev
du Build-Conflicts
ligne et libtinfo-dev
du Build-Depends
line, puis exécutez debuild -uc -us
encore. Si vous prévoyez d'installer ce paquetage aux côtés des paquets standard par défaut Python 2.6 sur Debian Squeeze, vous devez également supprimer les deux lignes
Conflicts: python-profiler (<= 2.7.1-2)
Replaces: python-profiler (<= 2.7.1-2)
Ces lignes sont là parce que 2.7 inclut le python-profiler
fonctionnalité. Si 2.7 est le python par défaut, alors python-profiler
n'est plus nécessaire. Cependant, si l'on installe 2.7 en tant que Python non par défaut, ce raisonnement ne s'applique pas et python-profiler
est toujours nécessaire en 2.6.
Cela devrait se construire avec succès et entraîner la liste suivante de packages binaires.
ls -lah *.deb
-rw-r--r-- 1 faheem staff 289K Jan 12 02:33 idle-python2.7_2.7.2-8_all.deb
-rw-r--r-- 1 faheem staff 1.1M Jan 12 02:34 libpython2.7_2.7.2-8_i386.deb
-rw-r--r-- 1 faheem staff 2.5M Jan 12 02:34 python2.7_2.7.2-8_i386.deb
-rw-r--r-- 1 faheem staff 12M Jan 12 02:34 python2.7-dbg_2.7.2-8_i386.deb
-rw-r--r-- 1 faheem staff 4.9M Jan 12 02:34 python2.7-dev_2.7.2-8_i386.deb
-rw-r--r-- 1 faheem staff 6.0M Jan 12 02:33 python2.7-doc_2.7.2-8_all.deb
-rw-r--r-- 1 faheem staff 692K Jan 12 02:33 python2.7-examples_2.7.2-8_all.deb
-rw-r--r-- 1 faheem staff 1.7M Jan 12 02:34 python2.7-minimal_2.7.2-8_i386.deb
Enfin, on peut installer les packages binaires avec
dpkg -i python2.7-minimal_2.7.2-8_i386.deb python2.7_2.7.2-8_i386.deb python2.7-dev_2.7.2-8_i386.deb libpython2.7_2.7.2-8_i386.deb
Parfois, dpkg
peut être un peu difficile pour satisfaire les dépendances lorsqu'elles sont toutes installées en même temps, vous devrez donc peut-être exécuter apt-get -f install
par la suite si vous obtenez des erreurs de dépendance, ou bien installez les packages en petits groupes.
Eh bien, si la seule chose dont vous avez besoin est l'argparse (vu que dans l'un de vos commentaires!), Vous pouvez simplement faire:
pip install argparse
Ce n'est pas exactement une réponse à la question exacte :-), mais en effet, si vous ne manquez que quelques fonctionnalités, de nombreuses fonctionnalités 2.7 proviennent en fait de projets indépendants et/ou certains packages de compatibilité peuvent être trouvés, par exemple:
La liste de 2.7 nouveautés est certes plus longue, mais la plupart des autres nouvelles fonctionnalités ne sont probablement pas un gros problème, et en échange, vous ne vous amusez pas avec plusieurs python installations sur votre box. Sinon allez avec pythonbrew :-)
ubuntu 12.04
Installer les dépendances:
$ Sudo apt-get install python-software-properties
Ajoutez le dépôt:
$ Sudo add-apt-repository ppa:fkrull/deadsnakes
Mettez à jour l'index du référentiel:
$ Sudo apt-get update
Installez Python 3.3:
$ Sudo apt-get install python3.3
ubuntu 12.04> plus
Installation des dépendances:
$ Sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev
Téléchargez et compilez python:
$ wget http://python.org/ftp/python/3.3.0/Python-3.3.0.tar.bz2
$ tar jxf ./Python-3.3.0.tar.bz2
$ cd ./Python-3.3.0
$ ./configure --prefix=/opt/python3.3
$ make && Sudo make install
Quelques touches sympas pour installer une commande py en créant un lien symbolique:
$ mkdir ~/bin
$ ln -s /opt/python3.3/bin/python ~/bin/py
Vous pouvez utiliser virtualenv pour créer des environnements distincts Python. Juste pour être d'actualité, mais de quoi a besoin Python 2.7)?
Téléchargez simplement Python 2.7 depuis http://www.python.org/download/releases/2.7.1/ et construisez-le.
Une autre option consiste à installer ActivePython si vous ne voulez pas compiler les choses vous-même. Il comprend également un gestionnaire de paquets binaires .