Я недавно перенес Python 2.7 в Debian squeeze. Поскольку Ubuntu 10.10 новее, чем Debian squeeze, если вы можете сделать это на squeeze, вы, безусловно, можете сделать это на Ubuntu. У меня нет доступа к системе Ubuntu 10.10. Если я настрою один, я проверю его и обновлю этот ответ. Итак, вот краткий набросок того, что я сделал на Debian.
Во-первых, общий и очевидный комментарий, но который легко упустить из виду. Не следует слишком серьезно относиться к перечисленным зависимостям сборки пакета Debian. Они могут быть гораздо более конкретными, чем необходимо. Например, программное обеспечение, такое как Python, которое разработано так, чтобы быть переносимым и работать в широком спектре систем, вряд ли будет зависеть от очень специфических версий программного обеспечения. Также могут быть скорректированы зависимости времени выполнения, но это следует делать с большей осторожностью. Однако зависимости времени выполнения в основном генерируются динамически на основе программного обеспечения, которое уже установлено в этой системе, поэтому обычно это не является большой проблемой.
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
При выборе тестовой версии мы получаем
apt-get source python2.7=2.7.2-8
Глядя на debian/control
, мы видим следующие строки зависимости сборки.
Build-Зависит: 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], локали [! Armel! Avr32! Hppa! Ia64! Mipsel], libsqlite3-dev, libffi-dev ( > = 3.0.5), поддержка mime, libgpm2 [linux-any], netbase, lsb-release, bzip2, libdb4.8-dev, gdb, python, help2man
Build-Depends-Indep: python-sphinx
Конфликты сборки: tcl8.3-dev, tk8.3-dev, tcl8.4-dev, tk8.4-dev, python2.7-xml, python-xml, autoconf2.13, libncurses5-dev
Большая часть этого легко выполняется при сжатии. С удобной утилитой apt-show-versions
мы попадаем на мою машину
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
Мы видим, что все, кроме libtinfo-dev
, доступно в сжатом виде. У меня есть версии squeeze backport debhelper
и python-sphinx
, но обе они также доступны для Debian Squeeze в версиях, удовлетворяющих требованиям сборки.
Заметьте также, что у меня установлен libncurses5-dev
apt-show-versions libncurses5-dev
libncurses5-dev/squeeze uptodate 5.7+20100313-5
Оба эти пакета соответствуют исходному пакету curses 5.7+20100313-5
. Обратите внимание, что libtinfo-dev
фактически заменяет 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)
Не следует ожидать, что Python 2.7 будет разрабатываться на такой специфической версии curses, а на самом деле это не так. Однако, если вы попытаетесь собрать пакеты без удовлетворения зависимости, вы получите
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.
Итак, необходимо отредактировать debian/control
. Обратите внимание, что вам также необходимо аналогичным образом отредактировать файл debian/control.in
, в противном случае control
файл будет неправильно восстановлен с control.in
. Самое простое, что нужно сделать, это просто удалить libncurses5-dev
из строки Build-Conflicts
и libtinfo-dev
из строки Build-Depends
, а затем выполните debuild -uc -us
снова. Если вы собираетесь установить этот пакет вместе со стандартными пакетами Python 2.6 по умолчанию в Debian squeeze, вы
Также необходимо убрать две строки
Conflicts: python-profiler (<= 2.7.1-2)
Replaces: python-profiler (<= 2.7.1-2)
Эти строки есть, потому что 2.7 включает в себя функциональность python-profiler
.
Если 2.7 является питоном по умолчанию, то python-profiler
больше не требуется.
Однако, если кто-то устанавливает 2.7 в качестве Python не по умолчанию, это не
применить, и python-profiler
по-прежнему требуется 2,6.
Это должно успешно скомпилироваться и привести к следующему списку бинарных пакетов.
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
Наконец, можно установить бинарные пакеты с помощью
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
Иногда dpkg
может быть немного затруднительно в отношении удовлетворения зависимостей, когда все они установлены одновременно, поэтому вам может потребоваться запустить apt-get -f install
впоследствии, если вы получите ошибки зависимости, или, в качестве альтернативы, установить пакеты в меньшие группы.