Recientemente copié Python 2.7 a Debian squeeze. Como Ubuntu 10.10 es más nuevo que Debian squeeze, si puedes hacerlo en squeeze, puedes hacerlo en Ubuntu. No tengo acceso a un sistema Ubuntu 10.10. Si configuro uno, lo probaré y actualizaré esta respuesta. Entonces, aquí hay un breve esbozo de lo que hice en Debian.
Primero, un comentario general y obvio, pero algo que se pasa por alto fácilmente. Uno no debe tomar las dependencias de construcción listadas de un paquete Debian demasiado en serio. Pueden ser mucho más específicos de lo necesario. Por ejemplo, el software como Python, que está diseñado para ser portátil y ejecutarse en una amplia gama de sistemas, es poco probable que se construya dependiendo de versiones muy específicas del software. Las dependencias de tiempo de ejecución se pueden ajustar también, pero esto debe hacerse con más precaución. Sin embargo, las dependencias de tiempo de ejecución en su mayoría se generan dinámicamente en función del software que ya está en este sistema, por lo que generalmente no es un gran problema.
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
Selección de la versión de prueba que obtenemos
apt-get source python2.7=2.7.2-8
En cuanto a debian/control
, vemos lo siguiente construir líneas de dependencia.
Build-Depende: 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 -Conflictos: tcl8.3-dev, tk8.3-dev, tcl8.4-dev, tk8.4-dev, python2.7-xml, python-xml, autoconf2.13, libncurses5-dev
La mayoría de esto se satisface fácilmente en squeeze. Con la utilidad práctica apt-show-versions
obtenemos en mi máquina
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
vemos que todo, excepto libtinfo-dev
está disponible en apretón. Tengo las versiones de squeeze backport de debhelper
y python-sphinx
, pero ambas están también disponibles para Debian squeeze en versiones que satisfacen los requisitos de compilación.
Observe también que tengo libncurses5-dev instalado
apt-show-versions libncurses5-dev
libncurses5-dev/squeeze uptodate 5.7+20100313-5
Ambos paquetes se corresponden con el paquete fuente curses 5.7+20100313-5
. Observe que libtinfo-dev
de hecho reemplaza 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)
Uno no esperaría que Python 2.7 se desarrollara en una versión de maldiciones tan específica, y de hecho no es así. Sin embargo, si intenta generar los paquetes sin satisfactorio para la dependencia se obtiene
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.
lo tanto, es necesario editar debian/control
. Tenga en cuenta que también debe editar de manera similar el archivo debian/control.in
, de lo contrario, el archivo control
se regenerá incorrectamente en control.in
. Lo más simple es eliminar libncurses5-dev
de la línea Build-Conflicts
y libtinfo-dev
de la línea Build-Depends
, y luego ejecutar debuild -uc -us
nuevamente. Si va a haber este paquete instalado junto a la estándar por defecto de Python 2.6 paquetes en Debian squeeze, que también es necesario para eliminar las dos líneas
Conflicts: python-profiler (<= 2.7.1-2)
Replaces: python-profiler (<= 2.7.1-2)
Esas líneas son allí porque 2.7 incluye la funcionalidad python-profiler
. Si 2.7 es el pitón predeterminado, entonces python-profiler
ya no es necesario. Sin embargo, si uno está instalando 2.7 como un Python no predeterminado, ese razonamiento no se aplica a , y todavía se necesita python-profiler
en 2.6.
Esto debería compilarse correctamente y dar como resultado la siguiente lista de paquetes binarios.
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
Por último, se puede instalar los paquetes binarios con
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
veces dpkg
puede ser un poco difícil de satisfacer las dependencias cuando están instaladas todas de una vez, así que puede que tenga que ejecutar apt-get -f install
después si usted obtiene errores de dependencia o, alternativamente, instala los paquetes en grupos más pequeños.
gracias. Obtuve esa parte, pero mi pregunta es más acerca de cómo cambiar entre las dos versiones. Con Ruby utilizo RVM para administrar múltiples versiones de Ruby. ¿Hay un equivalente en Python, o no es necesario? – jimdolan
Pero use "make altinstall" en lugar de "make install". "make install" configurará 2.7 para que sea la versión predeterminada y usted no quiere eso. "make altinstall" dejará el sistema Python solo y solo tendrá que usar "python2.7" para invocarlo. – casevh
Sí, make altinstall es el camino a seguir. – codeape