2011-03-08 16 views
73

Sono nuovo di Python e sto lavorando su una macchina Linux (Ubuntu 10.10). E 'in esecuzione Python 2.6, ma mi piacerebbe correre 2.7 in quanto ha caratteristiche che voglio usare. Sono stato invitato a non installare 2.7 e impostarlo come il mio python predefinito.Python 2.7 su Ubuntu

La mia domanda è, come posso installare 2.7 ed eseguirlo parallelamente con 2.6?

risposta

1

Basta scaricare Python 2.7 da http://www.python.org/download/releases/2.7.1/ e compilarlo.

+1

grazie. Ho ottenuto quella parte, ma la mia domanda è più su come passare avanti e indietro tra le due versioni. Con ruby ​​uso RVM per gestire più versioni di Ruby. Esiste un equivalente in Python o non è necessario? – jimdolan

+11

Ma usa "make altinstall" invece di "make install". "make install" configura 2.7 come versione predefinita e non lo vuoi. "make altinstall" lascerà il sistema solo da Python e dovrai solo usare "python2.7" per invocarlo. – casevh

+0

Sì, rendere altinstall è la strada da percorrere. – codeape

109

L'ho fatto con pythonbrew sulla mia macchina 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

cosa fa la linea. $ HOME/.pythonbrew/etc/bashrc do? – bharal

+0

inoltre, non dovrei configurare pythonbrew per essere sempre utilizzabile? non significa che ho bisogno di ... um, fare qualcosa? se effettuo il logout e accedo di nuovo, il mio pythonbrew è stato dimenticato. penso che quella linea sopra abbia qualcosa a che fare con esso ... ma cosa? – bharal

+0

Hai ragione, quella riga imposta pythonbrew eseguendo tutti i comandi in quel file. Basta aggiungere la riga al file .bashrc in modo che accada ogni volta. – oylenshpeegul

1

È possibile utilizzare virtualenv per creare ambienti Python distinti. Essendo appena informato, ma cosa ha Python 2.7 di cui hai bisogno?

+2

Voglio lavorare con argparse. Sono un giornalista pitone, ma non ne ho notizie;) – jimdolan

+1

bandiere sulle espressioni regolari! – Nils

+0

Le bandiere erano in circolazione prima del 2.7, AFAIK. – Tom

5

Beh, se l'unica cosa che serve è argparse (visto che in uno dei vostri commenti!) Si può solo fare:

pip install argparse 

Questo non è esattamente una risposta alla domanda esatta :-), ma infatti se si è solo manca una funzione di alcuni, molte caratteristiche 2.7 in realtà provengono da progetti indipendenti e/o alcuni pacchetti di compatibilità si possono trovare, ad esempio:

L'elenco dei 2.7 novelties è certamente più a lungo, ma la maggior parte delle altre nuove funzionalità non sono probabilmente un grande perdere, e in cambio non si scherza con più installazioni python sulla tua scatola. Altrimenti vai con pythonbrew :-)

10

Recentemente ho eseguito il backport di Python 2.7 su Debian squeeze. Dal momento che Ubuntu 10.10 è più recente di Debian Squeeze, se è possibile farlo su squeeze, si può certamente farlo su Ubuntu. Non ho accesso a un sistema Ubuntu 10.10. Se ne avvio uno, ci provo e aggiorno questa risposta. Quindi, ecco invece un breve abbozzo di ciò che ho fatto su Debian.

In primo luogo, un commento generale e ovvio, ma qualcosa che è facilmente trascurato. Non si dovrebbero prendere sul serio le dipendenze di build elencate di un pacchetto Debian. Possono essere molto più specifici del necessario. Ad esempio, il software come Python, che è stato progettato per essere portabile e correre su una vasta gamma di sistemi, è improbabile che costruire dipendono versioni specifiche del software. Anche le dipendenze del runtime possono essere regolate, ma ciò dovrebbe essere fatto con maggiore cautela. Tuttavia, dipendenze runtime sono per lo più generati in modo dinamico sulla base di un software che è già su questo sistema, in modo che di solito non è un grosso 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 

Selezione della versione di prova si ottiene

apt-get source python2.7=2.7.2-8 

Guardando debian/control, vediamo il seguente costruire linee di dipendenza.

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-sfinge Build -Confetti: tcl8.3-dev, tk8.3-dev, tcl8.4-dev, tk8.4-dev, python2.7-xml, python-xml, autoconf2.13, libncurses5-dev

La maggior parte di questo è facilmente soddisfatto per spremere. Con il programma di utilità pratico apt-show-versions arriviamo sulla mia macchina

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 

vediamo che tutto, tranne libtinfo-dev è disponibile in squeeze. Ho le versioni di backport di squeeze di debhelper e python-sphinx, ma entrambe sono disponibili anche per debian squeeze nelle versioni che soddisfano i requisiti di compilazione.

osservare anche che ho libncurses5-dev installato

apt-show-versions libncurses5-dev 

libncurses5-dev/squeeze uptodate 5.7+20100313-5 

Entrambi i pacchetti corrispondono al pacchetto sorgente curses 5.7+20100313-5. Si noti che libtinfo-dev sostituisce infatti 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) 

Non ci si aspetterebbe python 2.7 per sviluppare su una versione così specifico di maledizioni, e in effetti non è così. Tuttavia, se si tenta di costruire i pacchetti senza soddisfare la dipendenza si ottiene

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. 

Quindi, è necessario modificare debian/control. Notare che è necessario modificare il file allo stesso modo debian/control.in, altrimenti il ​​file verrà rigenerato in modo errato da control.in. La cosa più semplice da fare è semplicemente rimuovere libncurses5-dev dalla riga Build-Conflicts e libtinfo-dev dalla riga Build-Depends, quindi eseguire di nuovo debuild -uc -us . Se avete intenzione di avere il pacchetto installato accanto il default standard di Python 2.6 pacchetti in Debian Squeeze, è inoltre necessario rimuovere le due linee

Conflicts: python-profiler (<= 2.7.1-2) 
Replaces: python-profiler (<= 2.7.1-2) 

Quelle linee ci sono perché 2.7 include la funzionalità python-profiler. Se 2.7 è il python predefinito, allora python-profiler non è più necessario. Tuttavia, se si sta installando 2.7 come Python non predefinito, tale ragionamento non è e python-profiler è ancora necessario per 2.6.

Questo dovrebbe essere creato correttamente e generare il seguente elenco di pacchetti binari.

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 

Infine, si possono installare i pacchetti binari 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 

volte dpkg può essere un po 'difficile di soddisfare le dipendenze quando sono tutti installati in una sola volta, quindi potrebbe essere necessario eseguire apt-get -f install in seguito se ottieni errori di dipendenza o, in alternativa, installa i pacchetti in piccoli gruppi.

+0

Avete confezionato questa porta python-2.7-squeeze? – qMax

+0

@qMax: ho creato un pacchetto basato su questi commenti, sì. Ma non l'ho messo da nessuna parte in pubblico. –

+0

Se 2.7.1-8 fosse sufficiente, allora è più facile. Scaricalo da "deb-src [... snapshot.debian.org ...] (http://snapshot.debian.org/archive/debian/20110520T212730Z/) test principale", apt-get build-dep python2. 6, apt-get install libexpat1 libexpat-dev. E [pbuild] (https://wiki.ubuntu.com/PbuilderHowto) per lo squeeze così com'è. – alexei

3

Ubuntu 12.04

installare le dipendenze:

$ sudo apt-get install python-software-properties 

Aggiungi repo:

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

aggiornare l'indice repo:

$ sudo apt-get update 

Installare Python 3.3:

$ sudo apt-get install python3.3 

Ubuntu 12.04> più

Installazione le dipendenze:

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

scaricare e compilare pitone:

$ 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 

Alcuni tocchi di installare un comando py con la creazione di un link simbolico :

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