Domanda Come rendere il comando di programma 'python' eseguire Python 3?


Il python Il comando di programma esegue Python 2. Python 3 può essere eseguito utilizzando il comando python3 comando. Come può Python 3 essere eseguito usando il python comando?


224
2017-07-17 08:04


origine


Solo un avvertimento: non tentare di cambiare il link simbolico / usr / bin / python per puntare a python3 invece di 2.7. Molti programmi disponibili nei repository di Ubuntu richiedono / usr / bin / python per essere compatibili con python 2.x. - soulsource
@soulsource, sì, ne sono consapevole. è per questo che ho chiesto se esiste un'opzione di "aggiornamento" disponibile o meno. - Giri
Ah, ora ho capito cosa intendevi con l'aggiornamento ... In realtà gli sviluppatori di Ubuntu stanno lavorando su questo: wiki.ubuntu.com/Python/3 "È un obiettivo di rilascio per Ubuntu 14.04 LTS avere solo Python 3 nelle immagini del desktop CD." - soulsource
In un'altra nota, chiunque venga qui perché sta cercando di imparare a fare di Python 3 il suo valore predefinito, potrebbe invece trovare uso nella ricerca di ambienti virtuali (ad esempio virtualenv) o contenitori (ad esempio LXC o Docker). - Kevin
In riferimento all'avviso di Soulsource in alto vedi PEP 394 che standardizza le convenzioni di denominazione per i file eseguibili Python coesistenti e su cui i programmatori Python e i manutentori dei pacchetti fanno (e dovrebbero) fare affidamento. - David Foerster


risposte:


Un modo semplice e sicuro sarebbe utilizzare un alias. Metti questo in ~/.bashrc o ~/.bash_aliases file:

alias python=python3

Dopo aver aggiunto quanto sopra nel file, esegui il comando seguente:

source ~/.bash_aliases or source ~/.bashrc

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 command comando 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 usa il unalias comando integrato:

$ unalias python
$ python --version
Python 2.7.6

258
2017-07-17 08:13



quindi nessuna opzione "upgrade" .. ?? - Giri
@Giri Hai detto che hai python3. Che cosa per un aggiornamento? - Radu Rădeanu
in realtà voglio cancellare 2.7 e sostituirlo con 3.3. Sembra una cattiva idea per ora .. - Giri
+1 non c'è motivo di eliminare 2.7 per poter lavorare con 3.3. Poiché molti software dipendono ancora da 2.7; mantienilo in giro. - don.joey
@ begueradj An alias è totalmente diverso da a collegamento simbolico. - Radu Rădeanu


[Giugno 2016] Il posto raccomandato per informazioni sulla transizione è ufficiale Ubuntu Python pagina.


Dal Wiki di Ubuntu:

Per entrambi Ubuntu e Debian, abbiamo in corso progetto obiettivi per rendere Python 3 la versione predefinita e preferita di Python nelle distro.

Che cosa non significare:

  • /usr/bin/python punterà a Python 3. No, non succederà (salvo che PEP 394 difende il contrario, che è dubbio per il prevedibile futuro). /usr/bin/python e /usr/bin/python2 punterà a Python 2.7 e /usr/bin/python3 punterà all'ultima versione di Python 3 supportata.

  • Python 2 sarà rimosso dall'archivio. No, non succederà. Prevediamo che Python 2.7 rimarrà supportato e disponibile in Ubuntu per un periodo piuttosto lungo, dato che PEP 373 promette supporto per la manutenzione di bug fix upstream fino al 2020.

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


Per l'uso della CLI, come @Radu Rădeanu, Ti consiglio di inserire un alias nell'utente ~/.bashrc, .bash_aliases file (i diversi file, inclusi ~/.bash_profile, sono tutti caricati insieme e sono semplicemente per scopi organizzativi). Pitone ambienti virtuali funziona anche bene

Ad esempio:

alias python=python3

o

alias python='/usr/bin/python3'

Gli script possono quindi iniziare con qualcosa di simile:

#!/usr/bin/env python

invece di

#!/usr/bin/python3

Consiglierei comunque l'utilizzo #!/usr/bin/python3 (o #!/usr/bin/env python3) negli script per una più semplice compatibilità incrociata.

utilizzando env è bello per l'uso misto con ambienti virtuali.


68
2018-06-02 16:31



Questo sembra non essere aggiornato: hanno pianificato di rimuovere python2 in Xenial, ma poi no. - OrangeDog
@OrangeDog, grazie per l'aggiornamento. Sì, la pagina wiki che ho citato è ora contrassegnata come non aggiornata, poiché sono stati fatti ulteriori progressi negli ultimi due anni per passare a Python 3. La nuova pagina per seguire questa progressione è la versione ufficiale Pagina Ubuntu Python. - Kevin
Anche la pagina "più recente" è obsoleta, riguardo ai piani per Xenial. - OrangeDog
Non direi che è "obsoleto" tanto quanto "non è stato aggiornato di recente". Sembra ancora essere la posizione corrente per mantenere post su questo. Tuttavia, nei commenti qui, apprezzerei qualsiasi altra fonte recente che qualcuno possa trovare. Aggiungendo più fonti alla mia risposta, sul perché non apportare la modifica al solo python, non è veramente rilevante fino a quando la conversione non è completa. Anche allora, potrebbe semplicemente diventare un non-problema. - Kevin
@OrangeDog è molto possibile avere un sistema Xenial senza Python 2 - Ho eseguito Ubuntu Xenial Mate su Raspberry PI e aveva desktop ma no python2.7. Ci sono ancora alcuni pacchetti opzionali (o quelli necessari per l'esperienza desktop) che attirano Python 2 così è probabile che tu li stia facendo. - Antti Haapala


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 ottieni l'errore "nessuna alternativa per python", imposta subito un'alternativa con il seguente comando:

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

Cambia il percorso /usr/bin/python3 di conseguenza alla tua versione python desiderata.


8
2018-05-04 14:03



python2 e python3 non sono alternative. Non utilizzare alternative di aggiornamento per questo scopo. - jobin
Perché non sono loro? Uno di voi può spiegare perché? update-alternatives non è adatto per Python? È a causa di legacy.python.org/dev/peps/pep-0394 ? - Dmitry Grigoryev
le alternative sono implementazioni diverse per le stesse funzionalità. python2 e python3 non forniscono le stesse funzionalità. - Ely
Puoi fare qualcosa di simile 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


Ubuntu, e il resto delle distribuzioni Linux, dipendono ancora da Python 2.7 per un numero di applicazioni e comandi. Se cambi il riferimento predefinito di "python" in Python 3.x, allora un certo numero di funzioni Python inizieranno a lanciare errori di asserzione.

Ad esempio, su Ubuntu, "pip" per uno non funzionerebbe più correttamente a meno che non si fosse modificato direttamente il file e modificato lo shebang in riferimento a "#! / Usr / bin / env python2.7". Sui sapori 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 si dovrebbe causare una quantità significativa di codice per iniziare a lanciare errori di asserzione solo così si potrebbe 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.


3
2018-03-25 15:43





Fare

cd ~
gedit .bash_aliases

quindi scrivi entrambi

alias python=python3

o

alias python='/usr/bin/python3'

Salva il file, chiudi il terminale e aprilo di nuovo.
collegamento


1
2017-09-15 18:36





Puoi usare update-alternatives fornire diverse versioni di programmi che potrebbero essere necessari in momenti diversi a causa di problemi di compatibilità.

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

fai lo stesso con python2.7 e python 3.3


0
2017-10-18 13:19



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 opportuno definire i passaggi necessari per Python. - chaskes
Ecco ho trovato una buona soluzione passo dopo passo linuxconfig.org/... - woto


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

(a condizione che tu abbia il permesso di scrittura su / usr / local / bin) allo stesso modo

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

quindi scrivi solo py (e usa py in #! lines) per il tuo python scelto.


0
2018-01-15 22:57





Puoi link simbolici /usr/bin/python a python3 con

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

Guarda le altre risposte sul perché potresti non volerlo fare. Ubuntu 18.04 non viene più con Python 2, quindi non dovrebbe essere troppo cattivo.


0
2018-05-03 21:01