web-dev-qa-db-fra.com

Python 2.7 sur Ubuntu

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?

72
jimdolan

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

Je l'ai également utilisé pour installer Python 3.2 .

108
oylenshpeegul

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.

10
Faheem Mitha

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 :-)

5
Stefano

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
3
Rushdi

Vous pouvez utiliser virtualenv pour créer des environnements distincts Python. Juste pour être d'actualité, mais de quoi a besoin Python 2.7)?

1
Tom

Téléchargez simplement Python 2.7 depuis http://www.python.org/download/releases/2.7.1/ et construisez-le.

1
user647772

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 .

1
Sridhar Ratnakumar