Come eseguire il comando di programma 'python' per eseguire Python 3?


331

Il pythoncomando del programma esegue Python 2. Python 3 può essere eseguito usando il python3comando. Come si può eseguire Python 3 usando il pythoncomando?


30
Solo un avvertimento: non tentare di modificare il link simbolico / usr / bin / python in modo che punti a python3 anziché a 2.7. Molti programmi disponibili nei repository di Ubuntu richiedono / usr / bin / python per essere compatibili con python 2.x.
soulsource,

1
Ah, ora ho capito cosa intendevi con aggiornamento ... In realtà gli sviluppatori Ubuntu ci stanno lavorando: wiki.ubuntu.com/Python/3 "L'obiettivo di Ubuntu 14.04 LTS è avere un Python 3 solo sul CD desktop immagini."
soulsource,

1
In un'altra nota, chiunque venga qui perché sta cercando di imparare a rendere Python 3 come predefinito, può invece trovare un uso nella ricerca di ambienti virtuali (ad esempio virtualenv) o container (ad esempio LXC o Docker).
Kevin,

1
In riferimento all'avvertimento di Soulsource in alto, vedi PEP 394 che standardizza le convenzioni di denominazione per gli eseguibili Python coesistenti e su cui i programmatori e i manutentori di pacchetti Python fanno (e dovrebbero) fare affidamento.
David Foerster,

2
@wjandrea, sì, anche in un ambiente virtuale, pythondovrebbe essere mantenuto come significato python2. Intendevo il mio commento come un modo per avere una versione Python specifica dell'applicazione invece di provare a aggirare Python del sistema.
Kevin,

Risposte:


370

Un modo semplice e sicuro sarebbe usare un alias. Inserisci questo in ~/.bashrco ~/.bash_aliasesfile:

alias python=python3

Dopo aver aggiunto quanto sopra nel file, eseguire source ~/.bashrco source ~/.bash_aliases.

Per esempio:

$ python --version
Python 2.7.6
$ python3 --version
Python 3.4.3
$ alias python=python3
$ python --version
Python 3.4.3

Per aggirare l'alias usa il commandcomando integrato:

$ command python --version
Python 2.7.6

Un altro modo per aggirare l'alias è usare \prima del comando.

$ \python --version 
Python 2.7.6

Per disabilitare l'alias nella shell corrente utilizzare il unaliascomando integrato:

$ unalias python
$ python --version
Python 2.7.6

1
quindi nessuna opzione di "aggiornamento" .. ??
Giri,

4
in realtà voglio cancellare 2.7 e sostituirlo con 3.3. Sembra una cattiva idea per ora ..
Giri,

35
+1 non c'è motivo di eliminare 2.7 per poter lavorare con 3.3. Poiché molti software dipendono ancora dalla 2.7; continua a indugiare.
don.joey,

6
@begueradj Un alias è totalmente diverso da un collegamento simbolico .
Radu Rădeanu,

1
Un avvertimento: questo potrebbe violare altri script che prevedono Python 2.7.
kmiklas

85

[Giugno 2016] Il luogo consigliato per informazioni sulla transizione è la pagina ufficiale di Ubuntu Python .


Dal wiki di Ubuntu :

Sia per Ubuntu che per Debian, abbiamo obiettivi di progetto in corso per rendere Python 3 la versione Python preferita predefinita nelle distribuzioni.

Cosa non significa:

  • /usr/bin/pythonpunterà a Python 3. No, questo non accadrà (a meno che PEP 394 non sostenga diversamente, il che è dubbio per il prossimo futuro). /usr/bin/pythone /usr/bin/python2punterà a Python 2.7 e /usr/bin/python3punterà all'ultima versione supportata di Python 3.

  • Python 2 verrà rimosso dall'archivio. No, questo non accadrà . Prevediamo che Python 2.7 rimarrà supportato e disponibile in Ubuntu per un periodo piuttosto lungo, dato che PEP 373 promette supporto di manutenzione per la correzione di bug a monte fino al 2020.

Non è consigliabile modificare il collegamento simbolico a causa di altre dipendenze del pacchetto, ma "hanno obiettivi di progetto in corso per rendere Python 3 la versione Python preferita predefinita nelle distribuzioni".


Per l'uso CLI, come @Radu Rădeanu , mi sento di raccomandare di mettere un alias nel dell'utente ~/.bashrc, .bash_aliasesil file (i diversi file, tra cui ~/.bash_profile, vengono caricati almeno una volta, sono per lo più per motivi organizzativi, ma può variare a seconda della piattaforma). Anche gli ambienti virtuali Python funzionano bene.

Esempi di alias:

alias python=python3

o

alias python='/usr/bin/python3'

Gli script devono ancora usare qualcosa di simile #!/usr/bin/env python3per il cross-compatibilità.

L'uso envè utile per l'uso misto con ambienti virtuali.

Nota (grazie a @wjandrea): gli alias fanno parte del runtime bash, non dell'ambiente utente. Pertanto, non sono disponibili per shebang ( #!). Se preferite l'alias python = python3, allora alcuni program.pysenza un shebang potrebbero essere eseguiti invocando l'interprete con alias in questo modo python program.py. L'aliasing può anche essere utile per i sistemi con più versioni di python3 come 3.4 e 3.6 insieme.


1
Questo sembra essere obsoleto ora: hanno pianificato di rimuovere python2 in Xenial, ma poi non lo hanno fatto.
OrangeDog,

1
@OrangeDog, grazie per l'aggiornamento. Sì, la pagina della wiki che ho citato è ora contrassegnata come obsoleta, poiché sono stati compiuti ulteriori progressi negli ultimi due anni per passare a Python 3. La nuova pagina per seguire questa progressione è la pagina ufficiale di Ubuntu Python .
Kevin,

Anche la pagina "più recente" non è aggiornata per quanto riguarda i piani per Xenial.
OrangeDog,

Non direi che è "obsoleto" quanto "non è stato aggiornato di recente". Sembra ancora essere la posizione corrente per tenere messaggi su questo. Tuttavia, nei commenti qui, apprezzerei qualsiasi altra fonte recente che qualcuno possa trovare. L'aggiunta di più fonti alla mia risposta, sul perché non apportare la modifica a just python, non è realmente rilevante fino al completamento della conversione. Anche allora, potrebbe semplicemente diventare un non-problema.
Kevin,

2
Gli alias sono interni a Bash, non fanno parte dell'ambiente, quindi dovrai comunque usarli python3in uno shebang python.
wjandrea,

28

Aggiornamento: questo è il modo sbagliato, ho imparato, dal momento che Python2 e Python3 non sono intercambiabili.

Puoi provare lo strumento da riga di comando update-alternatives.

$ sudo update-alternatives --config python

Se viene visualizzato l'errore "Nessuna alternativa per Python", imposta tu stesso un'alternativa con il seguente comando:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

Modifica di conseguenza il percorso /usr/bin/python3della versione di Python desiderata.


20
python2 e python3 non sono alternative. Non utilizzare alternative di aggiornamento per questo scopo.
Jobin

Perché non lo sono? Uno di voi può spiegare perché update-alternativesnon è adatto per Python? È a causa di legacy.python.org/dev/peps/pep-0394 ?
Dmitry Grigoryev,

11
le alternative sono implementazioni diverse per le stesse funzionalità. python2 e python3 non forniscono le stesse funzionalità.
Ely,

Puoi fare qualcosa del genere se hai installato manualmente (tramite ppa o altro) altre versioni di python3. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
David Baucum,

Questo è quello che dovevo fare per un 18.04.2 vm che non viene fornito con Python. Grazie
Dark Star1

9

Ubuntu, e il resto delle distro Linux per quella materia, dipendono ancora in gran parte da Python 2.7 per una serie di applicazioni e comandi. Se cambiate il riferimento predefinito di "python" in Python 3.x, un certo numero di funzioni Python inizierà a generare errori di asserzione.

Ad esempio, su Ubuntu, 'pip' per uno non funzionerebbe più correttamente a meno che non si modificasse direttamente il file e si modificasse lo shebang in riferimento a # #! / Usr / bin / env python2.7 '. Sui gusti RHEL (Red Hat Enterprise Linux) come Red Hat, Fedora e CentOS, il comando 'Yum' dipende anche da Python 2.7.

Il mio punto qui è che faresti iniziare una notevole quantità di codice a lanciare errori di asserzione solo per poter digitare 'python' nel terminale per fare riferimento a Python 3.x.

Stai molto meglio usando il comando 'python3' nel terminale e lo shebang '#! / Usr / bin / env python3' nei tuoi file Python 3.x.


2

Fare

cd ~
gedit .bash_aliases

poi scrivi neanche

alias python=python3

o

alias python='/usr/bin/python3'

Salvare il file, chiudere il terminale e aprirlo di nuovo.
collegamento


1

È possibile collegare simbolicamente /usr/bin/pythona python3con

sudo ln -s /usr/bin/python3 /usr/bin/python

e puoi impedire l'installazione di Python 2 e pip2 come dipendenza

sudo apt-mark hold python python-pip

Vedi le altre risposte per capire perché potresti non volerlo fare. Ubuntu 18.04+ non viene più fornito con Python 2, quindi non dovrebbe essere così male.


2
Per quanto riguarda "Ubuntu 18.04 non viene più fornito con Python 2, quindi non dovrebbe essere così male." , su Ubuntu (anche le versioni che non hanno Python 2 installato per impostazione predefinita), pythonsi presuppone che un eseguibile chiamato sia Python 2, quindi ciò potrebbe interrompere alcune cose.
wjandrea,

* python->/usr/bin/python
wjandrea

0
cat > /usr/local/bin/py
#!/bin/dash
python3 "$@"
<CTRL-D>

(purché tu abbia l'autorizzazione in scrittura a / usr / local / bin) allo stesso modo

cat > /usr/local/bin/pyi
#!/bin/dash
python3 -i "$@"
<CTRL-D>

quindi digiti py (e usi py nelle righe #!) per il tuo pitone scelto.


Non sarebbe più semplice usare un link simbolico? sudo ln -s /usr/bin/python3 /usr/local/bin/py
wjandrea,

0

Trovo molto utile rimuovere semplicemente / usr / bin / python e / usr / bin / pip. Questo costringe tutti i programmi a fare affidamento sui comandi "python2" e "python3".

Anche se alcuni pacchetti opzionali e obsoleti dipendono dal #!/usr/bin/pythonfunzionamento, preferirei inviare patch a quei programmi piuttosto che continuare a fare errori strani e talvolta difficili da debug.


-1

È possibile utilizzare update-alternativesper fornire diverse versioni di programmi che potrebbero essere necessari in momenti diversi a causa di problemi di compatibilità.

Questa risposta è un buon esempio di come impostare le cose per mantenere simultaneamente versioni diverse di gcc / g ++, per esempio.

fai lo stesso con python2.7 e python 3.3


2
Gli utenti principianti potrebbero non essere in grado di adattare facilmente la risposta collegata a una situazione diversa. Oltre ad accreditare la risposta precedente, sarebbe utile disporre i passaggi necessari per Python.
Chaskes,

Qui ho trovato una buona soluzione passo dopo passo linuxconfig.org/…
woto

Python 2 e 3 non sono alternative, anche diverse versioni minori non lo sono ( ad es .). Questo metodo può facilmente rompere le cose.
wjandrea,

Anche questo è un duplicato di questa risposta
wjandrea,
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.