Perché python 3 non è il binario predefinito di python?


42

Digito pythonuna finestra del terminale. Ottengo Python 2.7 e non Python 3.5. Secondo i documenti, Python 3.5 dovrebbe essere precaricato.


1
Se configuri un ambiente virtuale usando: "python3 -m venv my-venv", quindi da qualsiasi terminale attiva quell'ambiente virtuale chiamando "source ... / my-env / bin / activ", allora python 3.5 sarà il impostazione predefinita in quel terminale. È possibile verificare la versione predefinita corrente chiamando "python -V".
Craig Hicks,

mentre la tua risposta è utile, ho chiesto il perché. non come. e questo è il grande dibattito. Qui. perché dovrebbe una versione precedente per impostazione predefinita, anziché la versione corrente.
givonz,

1
Hai esattamente ragione sul mio "commento"! Ecco perché ho scritto un commento e non una risposta.
Craig Hicks,

Risposte:


56

Non so quali "documenti" stai leggendo né cosa dicono, ma /usr/bin/pythonè solo un collegamento simbolico alla versione predefinita di Python, in questo caso 2.7, che è il risultato della semplice digitazione pythonsul terminale. Questo è il risultato di PEP 394 che lo definisce

  • per il momento, tutte le distribuzioni dovrebbero garantire che si pythonriferisca allo stesso obiettivo dipython2 .

type pythone file /usr/bin/pythonlo confermerò.

La ragione di questa disposizione diversa dalla convenzione è che il pacchetto sorgente python-default in Xenial è la versione 2.7.11 , quindi il collegamento simbolico python punta a questa versione.

Per usare python 3 devi essere esplicito e digitare python3nella riga di comando, che è raccomandato nel caso in cui tu abbia bisogno di una versione specifica, questo può essere fatto anche con python 2, digitando python2. Ubuntu include entrambe le versioni 2 e 3 di Python per impostazione predefinita su tutte le versioni correnti.

Ci sono piani per migrare tutto su Python 3 e contrassegnarlo come predefinito.


Questo probabilmente rompe il plugin rhythmbox-zeitgeist che dipende da zeitgeiigeist-python3 ma non riesce a trovarlo.
Khurshid Alam,

2
Questo è il documento che significa OP.
SaidbakR

10

Per ottenere il REPL di Python 3.5 o eseguire uno script compatibile, digitare python3. Questo per mantenere la compatibilità con tutto il precedente Python 2.x (che è sempre stato e rimarrà collegato python).

Il trattino potrebbe trovare pythonse si imposta un .desktopfile per esso (in ~/.local/share/applications/), per aprire un terminale e avviare ad esempio il REPL. Non esiste un ambiente REPL GUI predefinito per Python e le normali aspettative sull'interfaccia sono che l'utente andrebbe al terminale.

Il discorso di python 3.5 di default è che i manutentori eseguono il porting di tutti gli script di sistema da python 2.x a python 3.x, non che python 3 sostituisca python 2 in tutti i casi.


quindi, suppongo che la domanda corretta sia: come posso aggiungere python3 nel mio percorso, in modo che venga eseguito automaticamente?
Givonz,

vuoi dire, come si fa a eseguire gli script Python come un programma compilato?
Andrew Keech,

capito grazie. digita python3 al prompt dei comandi.
Givonz,

2
AIUI cosa fare con / usr / bin / python a lungo termine è ancora una domanda aperta. La migliore pratica per gli script python2 sarebbe quella di usare esplicitamente python2.
Peter Green,

1
piuttosto che usare #!/usr/bin/python3(o #!/usr/bin/python2) negli script, meglio usare (solo per Python, in particolare) #!/usr/bin/env python3se si desidera che sia portatile in remoto. Per la maggior parte, questa è solo una documentazione, poiché in molti casi verrà chiamata usando $ python3 your_pyprogram.pycomunque.
michael,

4

Supponi che Python predefinito dovrebbe essere disponibile come python. Questa ipotesi è sbagliata.

Su un sistema fornito con Python 3 "precaricato" e senza Python 2, ci sarà solo python3e no python.

Il codice scritto per Python 3 dovrebbe sempre cercare un interprete chiamato python3. Il codice scritto per Python 2 cercherà storicamente python.

Potrebbe arrivare un momento, forse tra decenni, in cui quasi nessuno ricorda Python 2, quando pythonpotrebbe iniziare a fare riferimento python3. Questo sarebbe puramente per comodità, e può e non dovrebbe essere fatto prematuro, se non del tutto! Non c'è fretta, a causa del seguente impatto:

I "vecchi sistemi attuali" non ne hanno conoscenza python2, solo python, quindi ha perfettamente senso cercare il codice Python 2 python. Questo è il motivo per cui pythondovrebbe fare riferimento a Python 2 per "finché esiste il codice Python 2".

Il nuovo codice scritto per Python 2, se questo ha senso, può cercare perfettamente python. Potrebbe anche cercare python2, se è destinato a funzionare solo su sistemi Python 3 consapevoli e ben curati (che dovrebbero offrire tale collegamento).

Il vantaggio dell'utilizzo del codice Python 2 python2sarebbe che non ha bisogno di ulteriori tocchi una volta che pythoninizia a fare riferimento python3, cosa che potrebbe non accadere mai, o che una volta pythonscompare del tutto, cosa che potrebbe o non potrebbe accadere. (Ciò potrebbe avverarsi, se il codice Python 2 si estinguesse dopo che l'ipotetico Python 4 diventa popolare con il suo interprete python4. - Perché lasciarlo puntare a uno python3o python4entrambi sarebbe confuso.)


2

Sono disponibili entrambe le versioni 2.x, 3.x di Python. se chiami python come è puntato su python 2.x caricherà python 2.x

L'immagine qui sotto ti aiuterà.

inserisci qui la descrizione dell'immagine


1
come si digita lo stesso comando e si ottengono 2 risultati diversi?
Givonz,

4
l'output diverso dalla seconda invocazione di pythonproviene dall'uso <tab>di query per il completamento automatico, che quindi emette le possibili permutazioni python*e restituisce un nuovo prompt.
Andrew Keech,

@givonz, hmm ho usato il tasto TAB fr. non viene emesso. è possibile un modello binario.
rʒɑd at

Voto negativo per cosa?
rɑːdʒɑ

2
Non ho espresso il mio voto negativo, ma penso che la risposta dovrebbe spiegare perché le prime 2 uscite sono diverse e qual è il ruolo apt-cache, soprattutto per i principianti di Ubuntu.
AL

2

Python 3.x dovrebbe funzionare con 16.04 - In realtà, sicuramente funzionerà. Ho Ubuntu 14.04 e ho Python 3.4.3 - Tutto quello che devi fare per testarlo è digitare python3e dovrebbe dirti quale versione stai utilizzando.


2
Beh, non chiamerei usando un sistema operativo informatico. E a rigor di termini: Ubuntu è un sistema operativo basato su Linux e non basato su Unix.
magu_

Devo ancora capire la scommessa diff linux e unix oltre ad alcuni prompt dei comandi e in modo diverso, ma comandi ben definiti. sebbene la GUI sia molto più avanzata di quella che vedo in Solaris.
givonz,

1
-1 Questo non affronta la questione del perché .
David Foerster,
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.