Mengapa Python 2.7 masih versi Python default di Ubuntu?

32

Menurut dokumentasi resmi Python, dukungan Python2.7 akan berakhir di masa mendatang.

DEPRECATION: Python 2.7 akan mencapai akhir hidupnya pada tanggal 1 Januari 2020. Tingkatkan Python Anda karena Python 2.7 tidak akan dipertahankan setelah tanggal tersebut. Versi pip yang akan datang akan menjatuhkan dukungan untuk Python 2.7. Rincian lebih lanjut tentang dukungan Python 2 di pip, dapat ditemukan di https://pip.pypa.io/en/latest/development/release-process/#python-2-support

Mengapa Ubuntu tidak menggunakan Python3 sebagai default di versi yang akan datang?

$ 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.
ラ ビ ナ ン ダ ン
sumber
2
Anda dapat menginstal paket python3.7. Masalahnya adalah bahwa dalam versi ubuntu \ linux mint terkadang ada perangkat lunak yang masih lama, jadi Anda harus menginstal paket yang lebih baru secara manual.
Enigma
8
@ enigma Ini bukan duplikat dari pertanyaan itu karena python3 sudah diinstal pada sistem ラ ビ ナ ン ダ ン secara default sehingga ia memiliki kedua python dan python3 diinstal bersama satu sama lain.
karel

Jawaban:

40

Menurut catatan rilis Bionic Beaver :

Python 2 tidak lagi diinstal secara default. Python 3 telah diperbarui ke 3.6. Ini adalah rilis LTS terakhir yang menyertakan Python 2 di main.

Dan pernyataan di atas benar. Python 2 tidak diinstal secara default di 18.04 dan versi dirilis setelah itu. Ubuntu telah memindahkan hampir semua proyeknya dari Python 2 ke Python 3. Misalnya, menurut catatan rilis Disco Dingo :

Samba telah diperbarui ke versi 4.10.x, dan salah satu perubahan besar di sini adalah dukungan python3 . Dalam Disco, samba dan dependensinya semuanya python3 hanya sekarang, dengan pengecualian tdb. tdb masih membangun paket python2, yaitu python-tdb, tetapi yang lainnya, termasuk samba itu sendiri, adalah python3 saja.

Selain itu, bahkan sebelum rilis Ubuntu 18.04, Ubuntu / Canonical mulai meminta pengembang untuk pindah ke Python 3 karena akhirnya sudah dekat . Dari Python - Ubuntu Wiki :

Semua pengembangan yang didorong Ubuntu / Canonical harus menargetkan Python 3 sekarang, dan semua kode baru harus hanya Python 3. Jika Anda tidak dapat melakukan ini karena tumpukan ketergantungan Anda, mari kita bicara.

Tampaknya pada sistem Anda, Python 2 dipasang dengan sengaja atau mungkin sebagai ketergantungan dari beberapa paket lain yang pengembangnya belum pindah ke Python 3. Anda dapat memeriksa paket yang bergantung pada Python 2 dengan menjalankan,

apt rdepends python

Alasan mengapa Python 2 dipanggil saat pythondijalankan terletak di salah satu titik historis PEP 394 - Perintah "python" pada Sistem Unix-Like :

The pythonperintah harus selalu Invoke Python 2 (untuk mencegah kesalahan sulit mendiagnosa ketika Python 2 kode dijalankan pada Python 3).

Kulfy
sumber
12
Untuk memperjelas poin terakhir, Python 3 tidak kompatibel dengan Python 2. Itu, dan dikombinasikan dengan fakta bahwa Python 2 memiliki dukungan pustaka lebih dari Python 3, berarti bahwa sejumlah besar pengembang masih memiliki ketergantungan langsung pada Python 2. Python 3 telah keluar untuk sementara waktu sekarang, tapi sebenarnya itu adalah perpustakaan yang menjadi alasan mengapa Python 2 masih sangat kuat digunakan, meskipun itu bahkan tidak harus didukung lagi (jika saya mengingat dengan benar, dukungan resmi berakhir pada 2018). EDIT: dukungan resmi berakhir pada 2020.
searchengine27
8
"... fakta bahwa Python 2 memiliki lebih banyak dukungan perpustakaan daripada Python 3 ..." - Apakah Anda memiliki sumber untuk itu? Saya jarang menemukan pustaka lagi yang tidak mendukung Python 3, dan bahkan ada beberapa yang menjatuhkan dukungan untuk Python 2! (Misalnya, Django, kerangka kerja web Python yang populer, belum mendukung Python 2 selama tiga rilis .) Pernyataan Anda masuk akal lima tahun yang lalu, tetapi hari ini saya tidak berpikir Anda dapat membuat generalisasi luas tanpa mendukungnya dengan statistik .
marcelm
7
@ searchengine27 Saya tidak berpikir bahwa faktor pendukung perpustakaan ke dalamnya. Perhatian kompatibilitas ke belakang adalah bahwa dunia dipenuhi dengan skrip acak yang dimulai dengan #!/usr/bin/pythonatau setara, yang akan pecah jika pythonmenjadi python3, sedangkan skrip acak yang bergantung pada Python 3 lebih cenderung untuk memulai #!/usr/bin/python3.
James_pic
1
@ searchengine27 Beberapa waktu yang lalu seseorang membuat situs web "Python3 wall of Shame" yang mencantumkan dependensi paling umum dan status python3 mereka (yang pada saat itu sangat buruk). Namun sudah bertahun-tahun sekarang telah diubah menjadi Python 3 Wall of Superpowers karena praktis semua dependensi umum telah dimigrasikan dan beberapa yang tidak bermigrasi tetap mati (situs web belum diperbarui sejak April 2018 karena sekarang pada dasarnya semuanya dapat python3).
Giacomo Alzetta
4
Sama seperti tambahan: fakta bahwa Python Software Foundation akan berhenti memelihara Python 2 pada tahun 2020 tidak berarti bahwa Canonical akan berhenti memelihara Python 2 pada tahun 2020. Faktanya, seluruh titik penggunaan distribusi Linux dari vendor terkemuka adalah bahwa semua paket-paket dalam distribusi (untuk Debian / Ubuntu yang berarti repositori "utama") akan dipertahankan untuk seumur hidup dari rilis distribusi terlepas dari status dukungan dari paket hulu yang asli. Dengan kata lain, paket Python 2 di Ubuntu 19.04 akan dipertahankan selama Ubuntu 19.04.
Jörg W Mittag
0

Sepengetahuan saya, hanya arch linux yang melakukannya: untuk menelepon python3dari pythonperintah default . Meskipun rekomendasi PEP 394 .

Itu dapat diubah /usr/bindengan mendefinisikan ulang tautan di antara python, pythonXdan pythonX.Y. Tapi bersiaplah untuk mengatasi banyak bug, karena semua skrip python2 Anda akan dimandatkan untuk memiliki shell bang eksplisit:

#!/usr/bin/env python2

Shell bang yang jarang digunakan dalam skrip lama.

yota
sumber