Ich habe kürzlich Python 2.7 auf Debian Squeeze zurückportiert. Da Ubuntu 10.10 neuer als Debian Squeeze ist, können Sie es sicherlich auf Ubuntu tun, wenn Sie es auf Squeeze tun können. Ich habe keinen Zugriff auf ein Ubuntu 10.10-System. Wenn ich eine eingerichtet habe, werde ich sie testen und diese Antwort aktualisieren. Hier ist stattdessen eine kurze Skizze von dem, was ich auf Debian gemacht habe.
Zunächst ein allgemeiner und offensichtlicher Kommentar, der jedoch leicht übersehen werden kann. Man sollte die aufgelisteten Build-Abhängigkeiten eines Debian-Pakets nicht zu ernst nehmen. Sie können weitaus spezifischer als nötig sein. Beispielsweise ist es unwahrscheinlich, dass Software wie Python, die portabel ist und über eine Vielzahl von Systemen ausgeführt werden kann, von sehr spezifischen Softwareversionen abhängt. Die Laufzeitabhängigkeiten können ebenfalls angepasst werden, dies sollte jedoch mit größerer Vorsicht erfolgen. Laufzeitabhängigkeiten werden jedoch meist dynamisch basierend auf Software generiert, die sich bereits auf diesem System befindet. Daher ist dies normalerweise kein großes Problem.
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
Auswahl der Testversion, die wir erhalten
apt-get source python2.7=2.7.2-8
Wenn debian/control
wir uns das ansehen, sehen wir die folgenden Build-Abhängigkeitslinien.
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], Gebietsschemas [! 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-Konflikte: tcl8.3 -dev, tk8.3-dev, tcl8.4-dev, tk8.4-dev, python2.7-xml, python-xml, autoconf2.13, libncurses5-dev
Das meiste davon lässt sich beim Drücken leicht befriedigen. Mit dem praktischen Dienstprogramm kommen apt-show-versions
wir auf meine Maschine
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
Wir sehen, dass alles außer libtinfo-dev
in Squeeze verfügbar ist. Ich habe die Squeeze-Backport-Versionen von debhelper
und python-sphinx
, aber beide sind auch für Debian-Squeeze in Versionen verfügbar, die die Build-Anforderungen erfüllen.
Beachten Sie auch, dass ich libncurses5-dev installiert habe
apt-show-versions libncurses5-dev
libncurses5-dev/squeeze uptodate 5.7+20100313-5
Beide Pakete entsprechen dem Quellpaket curses 5.7+20100313-5
. Beachten Sie, dass libtinfo-dev
in der Tat ersetzt 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)
Man würde nicht erwarten, dass sich Python 2.7 auf einer solchen spezifischen Version von Flüchen entwickelt, und tatsächlich ist dies nicht der Fall. Wenn Sie jedoch versuchen, die Pakete zu erstellen, ohne die erhaltene Abhängigkeit zu erfüllen
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.
Es ist also notwendig zu bearbeiten debian/control
. Beachten Sie, dass Sie die Datei auch auf ähnliche Weise bearbeiten müssen debian/control.in
, da sonst die control
Datei fälschlicherweise neu generiert wird control.in
. Am einfachsten ist es, sie libncurses5-dev
aus der Build-Conflicts
Linie und libtinfo-dev
aus der Build-Depends
Linie zu entfernen und dann debuild -uc -us
erneut auszuführen . Wenn Sie dieses Paket zusammen mit den Standard-Python 2.6-Standardpaketen auf Debian Squeeze installieren möchten, müssen Sie auch die beiden Zeilen entfernen
Conflicts: python-profiler (<= 2.7.1-2)
Replaces: python-profiler (<= 2.7.1-2)
Diese Zeilen sind vorhanden, da 2.7 die python-profiler
Funktionalität enthält. Wenn 2.7 die Standardpython ist, python-profiler
ist dies nicht mehr erforderlich. Wenn Sie jedoch 2.7 als nicht standardmäßiges Python installieren, gilt diese Argumentation nicht und python-profiler
wird von 2.6 weiterhin benötigt.
Dies sollte erfolgreich erstellt werden und zu der folgenden Liste von Binärpaketen führen.
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
Schließlich kann man die Binärpakete mit installieren
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
Manchmal dpkg
kann es etwas schwierig sein, Abhängigkeiten zu erfüllen, wenn sie alle gleichzeitig installiert sind. Daher müssen Sie sie möglicherweise apt-get -f install
später ausführen, wenn Abhängigkeitsfehler auftreten, oder Sie können die Pakete alternativ in kleineren Gruppen installieren.