Perché Python 2.7 è ancora la versione predefinita di Python in Ubuntu?


32

Secondo la documentazione ufficiale di Python, il supporto per Python2.7 terminerà in futuro.

DEPRECAZIONE: Python 2.7 raggiungerà la fine della sua vita il 1 ° gennaio 2020. Aggiorna il tuo Python poiché Python 2.7 non verrà mantenuto dopo tale data. Una versione futura di pip eliminerà il supporto per Python 2.7. Maggiori dettagli sul supporto di Python 2 in pip, sono disponibili su https://pip.pypa.io/en/latest/development/release-process/#python-2-support

Perché Ubuntu non utilizza Python3 come predefinito nella loro prossima versione?

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="19.04 (Disco Dingo)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.04"
VERSION_ID="19.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=disco
UBUNTU_CODENAME=disco
$ python
Python 2.7.16 (default, Apr  6 2019, 01:42:57) 
[GCC 8.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.

2
È possibile installare il pacchetto python3.7. Il problema è che in una versione di Ubuntu \ Linux coniata a volte ci sono ancora vecchi software, quindi è necessario installare manualmente i pacchetti più recenti.
enigma,

8
@enigma Non è un duplicato di quella domanda perché python3 è già installato sul sistema di ラ ビ ナ ン ダ ン di default, quindi ha sia python che python3 installati uno accanto all'altro.
karel,

Risposte:


40

Secondo le note di rilascio di Bionic Beaver :

Python 2 non è più installato per impostazione predefinita. Python 3 è stato aggiornato alla 3.6. Questa è l'ultima versione di LTS che include Python 2 in main.

E la frase sopra è vera. Python 2 non è installato di default in 18.04 e le versioni rilasciate successivamente. Ubuntu ha già spostato quasi tutti i suoi progetti da Python 2 a Python 3. Ad esempio, secondo le note di rilascio di Disco Dingo :

Samba è stato aggiornato alla versione 4.10.x e uno dei grandi cambiamenti qui è il supporto di python3 . In Disco, samba e le sue dipendenze sono tutte python3 solo ora, ad eccezione di tdb. tdb crea ancora un pacchetto python2, vale a dire python-tdb, ma tutti gli altri, incluso lo stesso samba, sono solo python3.

Inoltre, anche prima del rilascio di Ubuntu 18.04, Ubuntu / Canonical ha iniziato a chiedere agli sviluppatori di passare a Python 3 perché la fine è vicina . Da Python - Ubuntu Wiki :

Tutto lo sviluppo guidato da Ubuntu / Canonical dovrebbe puntare subito a Python 3 e tutto il nuovo codice dovrebbe essere solo Python 3. Se non puoi farlo a causa del tuo stack di dipendenze, parliamo.

Sembra che sul tuo sistema Python 2 sia stato installato intenzionalmente o possa essere una dipendenza di qualche altro pacchetto il cui sviluppatore non è passato a Python 3. Puoi controllare i pacchetti che dipendono da Python 2 eseguendo,

apt rdepends python

Il motivo per cui Python 2 viene invocato quando pythonviene eseguito risiede nel punto storico di PEP 394 - Il comando "python" su sistemi simili a Unix :

Il pythoncomando deve sempre invocare Python 2 (per evitare errori difficili da diagnosticare quando il codice Python 2 viene eseguito su Python 3).


12
Per chiarire il punto finale, Python 3 non è retrocompatibile con Python 2. Ciò, e combinato con il fatto che Python 2 ha un supporto libreria più di Python 3, significa che un gran numero di sviluppatori ha ancora una dipendenza diretta da Python 2. Python 3 è in circolazione da un po 'di tempo, ma in realtà sono le librerie che sono la ragione per cui Python 2 è ancora così fortemente utilizzato, anche se non dovrebbe nemmeno essere più supportato (se ricordo bene, il supporto ufficiale è finito in 2018). EDIT: il supporto ufficiale termina nel 2020.
searchengine27

8
"... il fatto che Python 2 abbia un supporto libreria più di Python 3 ..." - Hai una fonte per questo? Raramente incontro più librerie che non supportano Python 3, e in effetti alcuni stanno abbandonando il supporto per Python 2! (Ad esempio, Django, un popolare framework Web Python, non ha supportato Python 2 per tre versioni .) La tua affermazione aveva senso cinque anni fa, ma oggi non penso che tu possa fare questa generalizzazione generale senza sostenerla con le statistiche .
marzo

7
@ searchengine27 Non credo che la libreria supporti i fattori. La preoccupazione di compatibilità con le versioni precedenti è che il mondo è #!/usr/bin/pythonpieno di script casuali che iniziano con o equivalenti, che si spezzerebbero se pythondiventassero python3, mentre gli script casuali che dipendono da Python 3 hanno maggiori probabilità di iniziare #!/usr/bin/python3.
James_pic

1
@ searchengine27 Molto tempo fa qualcuno ha creato un sito Web "Python3 wall of Shame" che elencava le dipendenze più comuni e il loro stato python3 (che all'epoca era terrificante). Tuttavia sono passati anni ormai che è stato cambiato in Python 3 Wall of Superpowers poiché praticamente tutte le dipendenze comuni sono state migrate e le poche che non stavano migrando sono morte comunque (il sito web non è stato aggiornato da aprile 2018 da ora praticamente tutto è in grado di python3).
Giacomo Alzetta,

4
Proprio come un'aggiunta: il fatto che la Python Software Foundation smetterà di mantenere Python 2 nel 2020 non significa che Canonical smetterà di mantenere Python 2 nel 2020. In effetti, il punto centrale dell'uso di una distribuzione Linux da un fornitore affidabile è che tutto i pacchetti nella distribuzione (per Debian / Ubuntu che significa il repository "principale") saranno mantenuti per tutta la vita della versione di distribuzione indipendentemente dallo stato di supporto del pacchetto originale a monte. In altre parole, il pacchetto Python 2 in Ubuntu 19.04 sarà mantenuto finché Ubuntu 19.04 lo è.
Jörg W Mittag,

0

Per quanto ne so, solo Arch Linux lo ha fatto: chiamare python3dal pythoncomando predefinito . Nonostante la raccomandazione PEP 394 .

Può essere modificato /usr/binridefinendo i collegamenti tra python, pythonXe pythonX.Y. Ma preparati a far fronte a molti bug, poiché tutti i tuoi script python2 richiederanno un esplicito shell shell:

#!/usr/bin/env python2

Un botto di shell che viene usato raramente nei vecchi script.

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.