J'ai récemment rétroporté Python 2.7 sur Debian Squeeze. Ubuntu 10.10 étant 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 le testerai et mettrai à jour cette réponse. Voici donc une brève esquisse de ce que j'ai fait sur Debian.
Tout d'abord, un commentaire général et évident, mais qui est facilement négligé. Il ne faut pas prendre trop au sérieux la liste des dépendances d'un paquet Debian. Elles peuvent être beaucoup plus spécifiques que nécessaire. Par exemple, un logiciel comme Python, qui est conçu pour être portable et fonctionner sur un large éventail de systèmes, n'est pas susceptible de dépendre de versions très spécifiques de logiciels. Les dépendances d'exécution peuvent également être ajustées, mais cela doit être fait avec plus de prudence. Cependant, les dépendances d'exécution sont le plus souvent générées dynamiquement sur la base des logiciels déjà présents sur le système, ce qui n'est généralement pas un problème majeur.
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
En sélectionnant la version de test, nous obtenons
apt-get source python2.7=2.7.2-8
Regarder debian/control
nous voyons les lignes de dépendances 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 d'entre eux peuvent être facilement satisfaits grâce à Squeeze. Avec l'utilitaire pratique apt-show-versions
nous obtenons 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 constatons que tout, sauf libtinfo-dev
est disponible en format squeeze. J'ai les versions de squeeze backport de debhelper
y python-sphinx
mais tous deux sont également disponibles pour debian squeeze dans des versions satisfaisant aux exigences de construction.
Notez également que j'ai installé libncurses5-dev
apt-show-versions libncurses5-dev
libncurses5-dev/squeeze uptodate 5.7+20100313-5
Ces deux paquets correspondent au paquet source curses 5.7+20100313-5
. Observez que 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 <csmall@debian.org>
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 version aussi spécifique de curses, et en fait ce n'est pas le cas. Cependant, si vous essayez de construire les paquets sans satisfaire la dépendance, 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 est donc nécessaire d'éditer debian/control
. Notez que vous devez également éditer de la même manière le fichier debian/control.in
sinon le control
sera incorrectement régénéré à partir du fichier control.in
. La chose la plus simple à faire est de supprimer libncurses5-dev
de la Build-Conflicts
et libtinfo-dev
del Build-Depends
puis exécutez debuild -uc -us
encore une fois. Si vous installez ce paquet en même temps que les paquets Python 2.6 par défaut sur Debian Squeeze, vous devez également supprimer les deux lignes qui suivent. devez également supprimer les deux lignes
Conflicts: python-profiler (<= 2.7.1-2)
Replaces: python-profiler (<= 2.7.1-2)
Ces lignes sont présentes parce que la version 2.7 inclut la fonction 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 la version 2.7 en tant que Python non par défaut, ce raisonnement ne s'applique pas, et la version 2.7 n'est pas nécessaire. s'applique pas, et python-profiler
est encore nécessaire pour 2.6.
La compilation devrait s'effectuer avec succès et donner la liste suivante de paquets 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 paquets 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 à satisfaire les dépendances lorsqu'elles sont toutes installées en même temps. apt-get -f install
après si vous obtenez des erreurs de dépendance, ou bien installez les paquets par petits groupes.