Come posso installare l'ultima versione di Python 2.7.X o 3.X su Ubuntu?


183

Voglio installare l'ultimo tarball di Python su Ubuntu, scaricato da http://python.org/download/ .

È questo un modo corretto di installare?

./configure
make
make install

In caso contrario, come posso farlo?


1
Un tempo, immagino che questo sia stato chiesto per installare una nuova versione di Python su Ubuntu. Ora, è necessario installare una versione precedente di Python su Ubuntu (perché per molte cose abbiamo ancora bisogno di Python 2.7) ... tl; dr: questa risposta non è più attuale / corretta. Invece, supponendo che python3 sia installato di default (e forse un python2.x minimo), quindi esegui:sudo apt-get install python-2.7 python-pip
michael

@michael_n di cosa stai parlando? la compilazione dal sorgente non rende questa risposta errata o obsoleta. è solo un metodo diverso. puoi usare apt per automatizzare il processo per te se necessario.

usi ciò di cui hai bisogno. Non vedo davvero come questo supporti la tua richiesta di essere obsoleta. come hai detto tu stesso, lo usi quando è necessario perché potrebbe non essere disponibile. Ad esempio, il sottosistema Windows per Linux utilizza alcuni pacchetti software datati anche se la distribuzione è ubuntu 16.04.1 (beta) e utilizza python2.6.2, e python3 anche se la corrente è python2.7.12. In tal caso, dovrei compilare se voglio pacchetti aggiornati

1
@jargonjunkie sei fuori tema, ma corretto. Se la domanda è "come installo python 2.7 su Ubuntu 16.04+" quale è (dal momento che 16.04 è ora disponibile, che è il mio punto), allora semplicemente sudo apt-get install python2.7. Questo non è solo più semplice, è l'unica risposta corretta, poiché è l'unico modo in cui sarai in grado di gestire l'installazione dei moduli Python tramite apt-get e le loro dipendenze a loro volta.
michael,

spero che questo aiuti a illustrare (risposta aggiunta). l'ecosistema python è molto particolare / schizzinoso e puoi facilmente entrare nell'inferno delle dipendenze se non costruisci con cura il tuo ambiente python askubuntu.com/a/831075/17060
michael

Risposte:


199

Innanzitutto, installa alcune dipendenze:

sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

Quindi scaricare utilizzando il seguente comando:

version=2.7.13
cd ~/Downloads/
wget https://www.python.org/ftp/python/$version/Python-$version.tgz

Estrai e vai alla directory:

tar -xvf Python-$version.tgz
cd Python-$version

Ora, installa usando il comando che hai appena provato, usando checkinstallinvece per facilitare la disinstallazione se necessario:

./configure
make
sudo checkinstall

Passa versionalla versione di cui hai bisogno ( version=2.7.1o version=3.6.0, ad esempio).


20
Utilizzare sudo make installe non altinstallimpostarlo come versione predefinita di Python
Shagun Sodhani,

usa CXX=g++ ./configurese ./configure emette un avviso che dice che g ++ non è stato trovato
srj

2
dopo l'installazione come indicato sopra, quali comandi eseguo nella console per verificare che effettivamente sia installato?
J86,

9
È abbastanza straordinario che la migliore risposta alla semplice domanda "come installare Python" porti un avviso così terribile, è come "questo è il modo migliore che conosciamo per installare Python e potrebbe benissimo rompere il tuo sistema" ... È anche molto sorprendente che il sito Web ufficiale di Python abbia molti download e non una singola pagina di istruzioni per l'installazione.
patb,

4
pat - la migliore risposta alla semplice domanda "come installare python" è sudo apt-get install python, la risposta più complicata è "come installare l' ultimo python", il che implica che "dall'origine". Avrai lo stesso problema su qualsiasi sistema operativo a meno che tu non stia installando binari precompilati di terze parti, il che, di nuovo, è rischioso su qualsiasi sistema operativo (e varia notevolmente tra i diversi sistemi operativi). Anche questa risposta è del 2012; per consigli più recenti, vedere askubuntu.com/questions/101591/…
michael

181

A meno che tu non abbia davvero il desiderio arduo di compilarlo da solo, il modo preferito è usare DeadSnakes PPA per installare versioni di Python che non sono incluse di default:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python2.7

Sono disponibili anche altre versioni, come python2.4o python3.6, ecc.


13
Nota sul programma: se si è su 10.04, potrebbe essere necessario installare python-software-properties prima di utilizzare il repository add-apt.
Craig Maloney,

3
Si consiglia di creare Python nel proprio ambiente locale, invece di installarlo da binari pre-build
pylover

16
+1 :)really have a burning desire to compile it yourself
Watt,

5
Mancato ricordare che: 1. il ppanon è ufficialmente approvato, quindi il modo più sicuro è quello di costruire dalla fonte. 2. questo comporterà un pitone globale, al quale i non sudopossono modificare o installare i pacchetti, non uno locale. 3. Più pitoni possono essere installati localmente in posizioni diverse costruendo dalla sorgente.
Ioannis Filippidis,

2
apt-get install python2.7Questo installa il binario python2.7 invece di python ... brutto !!
Dhawal,

26

Continuando a documentarlo per le ultime versioni di Ubuntu 1 : per il server Ubuntu 16.04.1, Python predefinito è la versione 3.5 e Python 2.7 non è installato per impostazione predefinita. Su una nuova installazione (nota che non c'è nemmeno un pythoneseguibile):

$ type python3 python2 python 
python3 is /usr/bin/python3
-bash: type: python2: not found
-bash: type: python: not found

$ python3 --version 
Python 3.5.2

$ python --version 
The program 'python' can be found in the following packages:
 * python-minimal
 * python3
Try: sudo apt install <selected package>

Nota: prima di continuare, probabilmente vorrai fare un rapido sudo apt-get update, sudo apt-get upgradee sudo apt-get dist-upgrade(per favore nota esattamente cosa stanno facendo questi comandi; presumo che sia una nuova installazione qui).

Installare python 2.7 è facile come:

$ sudo apt-get install python2.7

L'output iniziale dell'installazione di Python 2.7 è il seguente:

$ sudo apt-get install python2.7
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpython2.7-minimal libpython2.7-stdlib python2.7-minimal
Suggested packages:
  python2.7-doc binutils binfmt-support
The following NEW packages will be installed:
  libpython2.7-minimal libpython2.7-stdlib python2.7 python2.7-minimal
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 3,735 kB of archives.
After this operation, 15.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...etc, etc...

Dopo aver installato Python 2.7,

$ type python3 python2.7 python3.5 python2 python
python3 is /usr/bin/python3
python2.7 is /usr/bin/python2.7
python3.5 is /usr/bin/python3.5
bash: type: python2: not found
bash: type: python: not found

Ma c'è ancora un problema, dal momento che non è ancora possibile installare i moduli PyPI tramite pip- ad esempio, se si desidera il notebook jupyter o l'ultimo scipy o numpy (ecc.), Si consiglia di installare pipe quindi pip installquelli, e ancora passare a apt-getper installare le dipendenze di sistema necessarie , come graphviz o le librerie di sistema di base.

$ type pip3 pip2 pip
bash: type: pip3: not found
bash: type: pip2: not found
bash: type: pip: not found

$ python3 -m pip --version 
/usr/bin/python3: No module named pip

Quindi, per installare pip, ancora una volta, è facile come sudo apt-get install python-pip:

$ sudo apt-cache search -n pip | egrep '^python[0-9]*-pip'
python-pip - alternative Python package installer
python-pip-whl - alternative Python package installer
python3-pip - alternative Python package installer - Python 3 version of the package

Ti serviranno sia python-pipper Python 2.7 pipche python3-pipper Python 3 pip. L'installazione tramite apt-getè sicuro di installare le dipendenze richieste; ad esempio, ecco l'output per l'installazione di pip2:

$ sudo apt-get install python-pip
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  binutils build-essential dpkg-dev fakeroot g++ g++-5 gcc gcc-5 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev
  libcc1-0 libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-5-dev
  libgomp1 libitm1 liblsan0 libmpx0 libpython-all-dev libpython-dev libpython-stdlib libpython2.7
  libpython2.7-dev libquadmath0 libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make
  manpages-dev python python-all python-all-dev python-dev python-minimal python-pip-whl
  python-pkg-resources python-setuptools python-wheel python2.7-dev
Suggested packages:
  binutils-doc debian-keyring g++-multilib g++-5-multilib gcc-5-doc libstdc++6-5-dbg gcc-multilib
  autoconf automake libtool flex bison gdb gcc-doc gcc-5-multilib gcc-5-locales libgcc1-dbg
  libgomp1-dbg libitm1-dbg libatomic1-dbg libasan2-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg
  libcilkrts5-dbg libmpx0-dbg libquadmath0-dbg glibc-doc libstdc++-5-doc make-doc python-doc
  python-tk python-setuptools-doc
The following NEW packages will be installed:
  binutils build-essential dpkg-dev fakeroot g++ g++-5 gcc gcc-5 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev
  libcc1-0 libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-5-dev
  libgomp1 libitm1 liblsan0 libmpx0 libpython-all-dev libpython-dev libpython-stdlib libpython2.7
  libpython2.7-dev libquadmath0 libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make
  manpages-dev python python-all python-all-dev python-dev python-minimal python-pip
  python-pip-whl python-pkg-resources python-setuptools python-wheel python2.7-dev
0 upgraded, 49 newly installed, 0 to remove and 0 not upgraded.
Need to get 61.1 MB of archives.
After this operation, 169 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...etc...

Una cosa interessante accade di conseguenza: ora hai lo "standard" (e PEP consigliato) python2e python3(che sono solo collegamenti simbolici a Python 2.7 e Python 3.5):

$ type python3 python2 python python2.7 python3.5 
python3 is /usr/bin/python3
python2 is /usr/bin/python2
python is /usr/bin/python
python2.7 is /usr/bin/python2.7
python3.5 is /usr/bin/python3.5

Ti consigliamo anche sudo apt-get install python3-pip; prima di installare, hai:

$ type pip pip2 pip3
pip is /usr/bin/pip
pip2 is /usr/bin/pip2
-bash: type: pip3: not found

$ python2 -m pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ python3 -m pip --version 
/usr/bin/python3: No module named pip

Dopo l'installazione pip3,

$ sudo apt-get install python3-pip
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpython3-dev libpython3.5-dev python3-dev python3-setuptools python3-wheel python3.5-dev
Suggested packages:
  python-setuptools-doc
The following NEW packages will be installed:
  libpython3-dev libpython3.5-dev python3-dev python3-pip python3-setuptools python3-wheel python3.5-dev
0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 38.0 MB of archives.
After this operation, 55.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
...etc...

Le versioni risultanti:

$ type python python2 python3 pip pip2 pip3
python is /usr/bin/python
python2 is hashed (/usr/bin/python2)
python3 is hashed (/usr/bin/python3)
pip is /usr/bin/pip
pip2 is /usr/bin/pip2
pip3 is /usr/bin/pip3

$ pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip3 --version 
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

$ python2 -m pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ python3 -m pip --version 
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

E un'ultima cosa prima di poter iniziare e iniziare l'installazione di tutti i tuoi moduli PyPI Python preferiti: probabilmente dovrai aggiornare pip stesso (sia pip2 che pip3, separatamente; inoltre, non importa se pipviene invocato tramite gli pythoneseguibili o il pipeseguibili, gli aggiornamenti effettivi sono memorizzati in /usr/lib):

$ sudo -H python2 -m pip install --upgrade pip
...
$ sudo -H python3 -m pip install --upgrade pip
...

Ora puoi eseguire la versione stand-alone pipo inclusa in bundle python(tramite python -m pip {command}).


[1] Riepilogo storico: Ubuntu precedente aveva solo Python 2.6, quindi tutti i vari metodi per installare Python 2.7+. Successivamente, dopo che Python 2.7 è stato aggiunto ai repository pubblici, abbiamo ancora avuto la stessa sfida di installare il Python 2.7 più recente con le ultime correzioni, che era (troppo) frequentemente necessario. La situazione oggi è molto migliore / più semplice: l'attuale Python 2.7 e 3.5 (fondamentalmente le uniche due versioni della piattaforma Python che interessano) che ora sono nei repository pubblici sono molto stabili, quindi ora dobbiamo solo preoccuparci di installare l'ultima moduli Python , non l'ultimo Python . Quindi ora il "problema dell'ultima versione" di Python si è spostato parzialmente dai aptrepository del sistema operativo e in PyPI e pip.)


2
Seguendo queste istruzioni su Ubuntu 16.04.1 LTS, installare Python 2.7 correttamente e pip in questo modo: sudo apt-get install python2.7; sudo apt-get install python-pip; sudo -H python2 -m pip install --upgrade pip; # Verifica versione: $ pip --version -> pip 9.0.1 da /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12
Robert Lujo

Perdonate la mia ignoranza, ma posso sapere cosa significa "hash" quando mostra le versioni di Python?
Scienziato fallito

1
@TalhaIrfan È una buona domanda (e, se permetterai una risposta semplificata): quando un comando viene digitato in bash (come w / maggior parte delle shell), il cmd potrebbe essere un alias, una funzione o un file eseguibile trovato nel file $PATH. Env var PATHè un lungo elenco di directory che contengono letteralmente migliaia di file. Per accelerare la ricerca dell'eseguibile, la shell utilizza una tabella hash memorizzata nella cache per una rapida ricerca. Potrebbe diventare stantio, quindi "hash" ti fa sapere che è "ricordato" questo comando mappato a quel file eseguibile unix.stackexchange.com/questions/5609/…
michael

@michael Grazie mille! È una risposta davvero utile: breve e puntuale!
Fallito scienziato l'

1
@gaia potresti voler fare una domanda separata, poiché potrebbe essere necessario più avanti e indietro per capirlo (o se qualcosa è cambiato da quando l'ho scritto). Forse, per prima cosa verifica che entrambi pip (2.7) e pip3(3.x) siano stati completamente installati / aggiornati, e non solo i primi - cioè, sudo apt-get install python-pip python3-pipe sudo -H python2 -m pip install --upgrade pipe sudo -H python3 -m pip install --upgrade pip ... O se si tratta davvero di un problema di autorizzazione (indicato da "funziona con sudo "), quindi sarà un po 'più difficile rintracciare.
michael

11

12.04

Se stai seguendo la risposta di Achu , allora il termine libread5-devdovrebbe essere cambiato in libreadline-gplv2-dev. Quindi il comando completo sarebbe:

sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

4

Puoi anche scaricarlo e installarlo tramite pyenv

#Install Pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
export PATH=~/.pyenv/bin:/usr/local/hadoop/bin/:$PATH
echo 'export PYENV_ROOT="~/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

#Install Python
pyenv install 2.7.8
pyenv global 2.7.8

pyenv install 3.4.5
pyenv global 3.4.5

Questo è il modo più pulito per ottenere una versione davvero aggiornata di Python su una versione precedente di Ubuntu. Include anche il supporto di virtualenv, tramite il pyenv-virtualenvplug-in, semplificando l'installazione di applicazioni con requisiti di moduli diversi senza conflitti.
RichVel,

2
Due avvertimenti su pyenv: (1) funziona solo da una shell bash (o forse zsh, ma certamente non trattino che è / bin / sh su Ubuntu), e (2) richiede una shell di login (es. bash --login), Che non è sempre facile da ottenere ad es. da Ansible. Ideale per l'uso interattivo, meno adatto per i server di scripting.
RichVel,

0

Principalmente uno specchio di questa risposta con un'introduzione ottimizzata

Consiglierei Pyenv . Automatizza il processo di compilazione oltre all'installazione delle dipendenze dell'intestazione (vedi sotto). Puoi costruire e installare una nuova (o vecchia) versione di Python semplicemente dicendo pyenv install 3.6.0. Tutto funziona come il tuo utente, quindi non devi preoccuparti di rovinare il Python usato da Ubuntu stesso.

A differenza di alcune delle opzioni basate su apt-repo (ad esempio deadsnakes), in genere funzionerà lo stesso giorno di un rilascio dopo un pyenv updateperché non è necessario attendere che qualcun altro lo impacchetti. Vedi tutte le versioni che puoi installarepyenv install --list

Installa Pyenv

  1. Installa gli strumenti e le intestazioni necessari per costruire CPython (i Python esotici come PyPy o Jython potrebbero avere altre dipendenze). Git è usato da Pyenv, inoltre abilita anche le compilazioni / installazioni dei rami dei sorgenti, quindi puoi installare qualunque sia il 3.8 in questo momento, cioè il ramo principale di CPython appena uscito da GitHub:

    sudo apt-get install -y git
    sudo apt-get install -y build-essential libbz2-dev libssl-dev libreadline-dev \
                            libffi-dev libsqlite3-dev tk-dev
    
    # optional scientific package headers (for Numpy, Matplotlib, SciPy, etc.)
    sudo apt-get install -y libpng-dev libfreetype6-dev    
    
  2. Esegui lo script di installazione (installa pyenv e alcuni plugin pyenv molto utili dell'autore originale; vedi qui per ulteriori informazioni)

    curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
  3. Aggiungi init lines al tuo ~/.profileo ~/.bashrc(lo menziona alla fine dello script di installazione):

    export PATH="~/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    
  4. Riavvia la shell (chiudi e apri o exec $SHELL) o ricarica lo script del profilo. (con es. source ~/.bashrc)

Fatto!

Configurare un ambiente

Per non toccare il sistema Python (generalmente una cattiva idea; i servizi a livello di sistema operativo potrebbero fare affidamento su alcune versioni di librerie specifiche, ecc.) Creare il proprio ambiente, è facile! Ancora meglio, no sudo, per esso o pipinstalla!

  1. Installa la tua versione preferita di Python (questo scaricherà il sorgente e lo costruirà per il tuo utente, nessun input richiesto)

    pyenv install 3.6.0
  2. Trasformalo in virtualenv in modo da poterne fare altri in seguito, se lo desideri

    pyenv virtualenv 3.6.0 general
  3. Rendilo attivo a livello globale (per il tuo utente)

    pyenv global general
  4. Fai quello che vuoi con Python / pip, ecc. È tuo.

Se si desidera ripulire le librerie in un secondo momento, è possibile eliminare virtualenv ( pyenv uninstall general) o crearne uno nuovo ( pyenv virtualenv 3.6.0 other_proj). Puoi anche avere ambienti attivi per directory: pyenv local other_projrilascerà un .python-versionfile nella tua cartella corrente e ogni volta che invocherai Python o utilità Python installate da pip da esso o sotto di esso, saranno sfuggiti a pyenv.

Risoluzione dei problemi

  • bash: pyenv: command not found, fish: Unknown command 'pyenv'

    1. Controlla il tuo $PATH, ci dovrebbe essere una voce che termina in qualcosa del genere .pyenv/bin. Se manca, assicurati di aver seguito # 3 E # 4 (riavvia la shell) sotto Installa pyenv sopra.
  • pyenv: no such command 'virtualenv'

    1. Se non hai utilizzato lo script di installazione, probabilmente hai installato solo il pacchetto root pyenv. Vedi pyenv-virtualenv per istruzioni su come aggiungere il plugin
    2. Se hai utilizzato lo script di installazione, controlla se viene visualizzato con pyenv commands.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.