2011-03-08 30 views
73

Soy nuevo en Python y estoy trabajando en una máquina Linux (Ubuntu 10.10). Está ejecutando Python 2.6, pero me gustaría ejecutar 2.7 ya que tiene características que quiero usar. Me han instado a no instalar 2.7 y configurar eso como mi pitón predeterminado.Python 2.7 en Ubuntu

Mi pregunta es, ¿cómo puedo instalar 2.7 y ejecutarlo lado a lado con 2.6?

Respuesta

1

Simplemente descargue Python 2.7 desde http://www.python.org/download/releases/2.7.1/ y compilelo.

+1

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

+11

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

+0

Sí, make altinstall es el camino a seguir. – codeape

109

Lo hice con pythonbrew en mi máquina 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 

I also used it to install Python 3.2.

+2

¿qué hace la línea. $ HOME/.pythonbrew/etc/bashrc do? – bharal

+0

también, ¿no debería configurar Pythonbrew para que siempre sea utilizable? ¿No significa eso que necesito ... um, hacer algo? Si cierro la sesión y vuelvo a iniciar sesión, se olvidó de mi pitthonbrew. Creo que la línea anterior tiene algo que ver con eso ... ¿pero qué? – bharal

+0

Tiene razón, esa línea configura pythonbrew ejecutando todos los comandos en ese archivo. Simplemente agregue esa línea a su archivo .bashrc para que ocurra todo el tiempo. – oylenshpeegul

1

Puede usar virtualenv para crear entornos de Python distintos. Simplemente siendo informativo, pero ¿qué tiene Python 2.7 que necesita?

+2

Quiero trabajar con argparse. Soy newslet de python, pero no dev newsy;) – jimdolan

+1

banderas en expresiones regulares! – Nils

+0

Las banderas estaban alrededor antes de las 2.7, AFAIK. – Tom

5

Bueno, si lo único que se necesita es argparse (vio que en uno de sus comentarios!) Que sólo se podía hacer:

pip install argparse 

Esto no es exactamente una respuesta a la pregunta exacta :-), pero de hecho, si sólo se echa en falta unos cuantos característica, muchos 2.7 características realidad provienen de proyectos independientes y/o algunos paquetes de compatibilidad se pueden encontrar, por ejemplo:

La lista de 2.7 novelties es ciertamente más tiempo, pero la mayoría de las otras nuevas características probablemente no son una gran pérdida, ya cambio no hacer perder el tiempo con múltiples instalaciones de pitón en su caja. De lo contrario, vaya con pythonbrew :-)

10

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.

+0

¿Has empaquetado este puerto python-2.7-squeeze? – qMax

+0

@qMax: construí un paquete basado en estos comentarios, sí. Pero no lo he puesto en ningún lugar público. –

+0

Si 2.7.1-8 fuera suficiente, entonces es más fácil. Obténgalo de "deb-src [... snapshot.debian.org ...] (http://snapshot.debian.org/archive/debian/20110520T212730Z/) testing main", apt-get build-dep python2. 6, apt-get install libexpat1 libexpat-dev. Y [pbuild] (https://wiki.ubuntu.com/PbuilderHowto) para squeeze como está. – alexei

3

ubuntu 12.04

instalar las dependencias:

$ sudo apt-get install python-software-properties 

Añadir el repositorio:

$ sudo add-apt-repository ppa:fkrull/deadsnakes 

actualizar el índice de recompra:

$ sudo apt-get update 

instalar Python 3.3:

$ sudo apt-get install python3.3 

ubuntu 12.04> más

Instalación de las dependencias:

$ sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev 

Descargar y compilar 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 

Algunos toques agradables para instalar un comando py mediante la creación de un enlace simbólico :

$ mkdir ~/bin 
$ ln -s /opt/python3.3/bin/python ~/bin/py