Python 3 dirilis pada Desember 2008. Banyak waktu telah berlalu sejak itu tetapi masih hari ini banyak pengembang ragu untuk menggunakan Python 3. Bahkan kerangka kerja populer seperti Django belum kompatibel dengan Python 3 namun masih bergantung pada Python 2.
Tentu saja, Python 3 memiliki beberapa ketidakcocokan dengan Python 2 dan beberapa orang perlu mengandalkan kompatibilitas ke belakang. Tapi bukankah Python 3 sudah ada cukup lama sekarang untuk sebagian besar proyek untuk beralih atau mulai dengan Python 3?
Memiliki dua versi yang bersaing memiliki banyak kelemahan; dua cabang perlu dipertahankan, kebingungan untuk peserta didik dan sebagainya. Jadi mengapa ada begitu banyak keraguan di seluruh komunitas Python tentang beralih ke Python 3?
sumber
Jawaban:
Perhatikan bahwa saya tidak lagi memperbarui jawaban ini. Saya memiliki tanya jawab Python 3 yang lebih lama di situs pribadi saya di http://python-notes.curiousefficiency.org/en/latest/python3/questions_and_answers.html
Jawaban sebelumnya:
(Pembaruan status, September 2012)
Kami (yaitu pengembang inti Python) memperkirakan ketika Python 3.0 dirilis bahwa akan memakan waktu sekitar 5 tahun untuk 3.x untuk menjadi pilihan "default" untuk proyek-proyek baru di atas seri 2.x. Prediksi itu adalah mengapa periode pemeliharaan yang direncanakan untuk rilis 2.7 begitu lama.
Rilis asli Python 3.0 juga ternyata memiliki beberapa masalah kritis dengan kinerja IO yang buruk yang membuatnya tidak dapat digunakan untuk sebagian besar tujuan praktis, sehingga lebih masuk akal untuk memulai timeline dari rilis Python 3.1 pada akhir Juni, 2009. (Mereka Masalah kinerja IO juga merupakan alasan mengapa tidak ada rilis pemeliharaan 3.0.z: tidak ada alasan bagus bagi siapa pun yang ingin tetap menggunakan 3.0 untuk meningkatkan ke 3.1).
Pada saat penulisan (September 2012), itu berarti kami saat ini sedikit lebih dari 3 tahun ke dalam proses transisi, dan prediksi itu tampaknya masih berada di jalurnya.
Sementara orang mengetik kode Python 3 paling sering digigit oleh perubahan sintaksis seperti
print
menjadi fungsi, yang sebenarnya tidak merepotkan untuk porting perpustakaan karena2to3
alat konversi otomatis menanganinya dengan cukup bahagia.Masalah terbesar dalam praktik sebenarnya adalah masalah semantik: Python 3 tidak membiarkan Anda bermain dengan cepat dan longgar dengan penyandian teks seperti halnya Python 2. Ini adalah kedua manfaat terbesarnya dari Python 2, tetapi juga penghalang terbesar untuk porting: Anda harus memperbaiki masalah penanganan Unicode Anda agar port berfungsi dengan benar (sedangkan dalam 2.x, banyak kode yang secara diam-diam menghasilkan data yang salah dengan input non-ASCII, memberikan kesan bekerja, terutama di lingkungan di mana data non-ASCII tidak umum).
Bahkan perpustakaan standar di Python 3.0 dan 3.1 masih memiliki masalah penanganan Unicode, sehingga sulit untuk mem-port banyak perpustakaan (terutama yang terkait dengan layanan web).
3.2 mengatasi banyak masalah itu, memberikan target yang jauh lebih baik untuk perpustakaan dan kerangka kerja seperti Django. 3,2 juga membawa versi kerja pertama
wsgiref
(standar utama yang digunakan untuk komunikasi antara server web dan aplikasi web yang ditulis dengan Python) untuk 3.x, yang merupakan prasyarat yang diperlukan untuk adopsi di ruang web.Ketergantungan utama seperti NumPy dan SciPy sekarang telah porting, instalasi dan alat-alat manajemen ketergantungan seperti
zc.buildout
,pip
danvirtualenv
tersedia untuk 3.x, rilis Pyramid 1.3 mendukung Python 3.2, rilis Django 1.5 mendatang termasuk dukungan Python 3 eksperimental, dan rilis 12.0 dari kerangka kerja Twisted menjatuhkan dukungan Python 2.5 untuk membuka jalan untuk membuat versi yang kompatibel dengan Python 3.Selain kemajuan pada pustaka dan kerangka kerja kompatibilitas Python, implementasi interpreter PyPy yang dikompilasi JIT populer secara aktif bekerja pada dukungan Python 3.
Alat untuk mengelola proses migrasi juga meningkat pesat. Selain
2to3
alat yang disediakan sebagai bagian dari CPython (yang sekarang dianggap paling cocok untuk konversi satu kali aplikasi yang tidak perlu mempertahankan dukungan untuk seri 2.x), ada jugapython-modernize
, yang menggunakan2to3
infrastruktur untuk menargetkan subset umum (besar) dari Python 2 dan Python 3. Alat ini membuat basis kode tunggal yang akan berjalan pada Python 2.6+ dan Python 3.2+ dengan bantuansix
pustaka kompatibilitas. Rilis Python 3.3 juga menghilangkan salah satu penyebab utama "noise" ketika memigrasi aplikasi sadar Unicode yang ada: Python 3.3 sekali lagi mendukung awalan 'u' untuk string literal (sebenarnya tidak benar - benar melakukanapa pun di Python 3 - ini baru saja dipulihkan untuk menghindari migrasi secara tidak sengaja ke Python 3 yang lebih sulit bagi pengguna yang telah dengan benar membedakan teks dan literal biner mereka di Python 2).Jadi kami sebenarnya cukup senang dengan perkembangannya - masih ada hampir 2 tahun lagi untuk kerangka waktu asli kami, dan perubahannya beriak dengan baik melalui seluruh ekosistem Python.
Karena banyak proyek tidak membuat metadata Indeks Paket Python mereka dengan benar, dan beberapa proyek dengan pengelola yang kurang aktif telah bercabang untuk menambahkan dukungan Python 3, scanner PyPI yang murni otomatis masih memberikan pandangan yang terlalu negatif tentang keadaan perpustakaan Python 3 dukung.
Alternatif yang lebih disukai untuk mendapatkan informasi tentang tingkat dukungan Python 3 pada PyPI adalah http://py3ksupport.appspot.com/
Daftar ini secara pribadi dikuratori oleh Brett Cannon (pengembang inti Python lama) untuk memperhitungkan metadata proyek yang salah, dukungan Python 3 yang ada di alat kontrol sumber tetapi belum dalam rilis resmi, dan proyek yang memiliki garpu lebih terkini atau alternatif yang mendukung Python 3. Dalam banyak kasus, perpustakaan yang belum tersedia di Python 3 hilang dependensi kunci dan / atau kurangnya dukungan Python 3 dalam proyek lain mengurangi permintaan pengguna (misalnya setelah kerangka inti Django tersedia di Python 3, alat terkait seperti South dan django-selery lebih mungkin untuk menambahkan dukungan Python 3, dan ketersediaan dukungan Python 3 di Pyramid dan Django membuatnya lebih mungkin bahwa dukungan Python 3 akan diimplementasikan dalam alat lain seperti gevent).
Situs di http://getpython3.com/ mencakup beberapa tautan luar biasa ke buku-buku dan sumber daya lain untuk Python 3, mengidentifikasi beberapa pustaka kunci dan kerangka kerja yang sudah mendukung Python 3, dan juga menyediakan beberapa informasi tentang bagaimana pengembang dapat mencari bantuan keuangan dari PSF dalam porting proyek-proyek utama ke Python 3.
Sumber lain yang bagus adalah halaman wiki komunitas tentang faktor-faktor yang perlu dipertimbangkan ketika memilih versi Python untuk proyek baru: http://wiki.python.org/moin/Python2orPython3
sumber
Saya percaya bahwa banyak keraguan berasal dari dua hal:
Ada beberapa perbedaan dalam cara bahasa inti berperilaku, yang diuraikan dalam dokumen ini . Sesuatu yang sederhana seperti mengubah "cetak" dari pernyataan ke fungsi, misalnya, akan merusak banyak kode Python 2.x - dan itu hanya yang paling sederhana. Mereka menyingkirkan kelas gaya yang lebih tua sepenuhnya di 3.0. Mereka, pada kenyataannya, bahasa yang sangat berbeda - jadi porting kode lama tidak sesederhana yang diasumsikan oleh beberapa orang.
sumber
2to3
tidak sesulit yang ditakutkan oleh beberapa orang.Tidak ada alasan kompulsif bagi bisnis yang ada untuk menghabiskan waktu, uang, dan upaya bermigrasi ke sesuatu sementara tidak ada perubahan pada set fitur yang ada. Maksud saya mengatakan basis kode pada Python 2 series telah berjalan dan berjalan dalam bisnis untuk waktu yang lama, stabil, teruji dan memiliki semua set fitur produk saat ini. Mengapa ada orang yang menghabiskan waktu, uang, dan usaha hanya untuk memindahkan Python 3 hanya demi bermigrasi ke sana.
Selain itu pasca migrasi memastikan tidak ada kegagalan regresi dan semua sakit kepala tidak dapat dihindari.
Untuk proyek-proyek baru, kebijakannya sederhana dan sederhana, semuanya dimulai pada poin-poin berikut:
Ini adalah proses 'memilih bahasa baru' seperti biasa. Di sinilah masalah ayam-telur masuk, Tidak banyak orang yang menggunakannya karena tidak banyak orang yang menggunakannya. Pada akhirnya tidak ada yang merasa ingin pindah sama sekali.
Melanggar kompatibilitas tidak pernah menjadi hal yang baik, pada akhirnya Anda selalu mengakhiri persentase pengguna yang baik.
sumber
Sekitar waktu Python 2.0 dirilis, popularitas Python berkembang pesat. Ada banyak pengguna baru yang secara alami menggunakan versi terbaru, karena mereka tidak bergantung pada versi yang lebih lama. Dengan banyak orang mengadopsi 2.0 secara default, ada banyak tekanan pada pengembang perpustakaan dll.
Pada saat Python 3.0 dirilis, sudah ada sejumlah besar pengguna bergantung pada Python 2.0, dan pertumbuhan eksponensial (menjaga faktor konstan relatif terhadap pengguna yang ada) jelas tidak dapat dipertahankan tanpa batas waktu.
Secara pribadi, fitur-fitur baru di Python 2 hari tampak jauh lebih menarik daripada yang disediakan oleh Python 3.
Saya dulu berpikir Python 3 akhirnya akan mengambil alih, tapi saya tidak begitu yakin sekarang. Tapi bukan hanya Python yang memiliki masalah ini. Lagi pula, berapa banyak orang yang secara jujur menggunakan Perl 6? Itu sudah ada sedikit lebih lama dari Python 3, IIRC.
sumber
Sebuah penghenti acara besar bagi saya, yang saya pikir tidak dapat diatasi dengan terjemahan otomatis, adalah pembagian integer. Saya memiliki kode ilmiah yang mengandalkan x / 2 memberikan x dibulatkan (ketika x adalah bilangan bulat).
Python 3 tidak akan melakukan itu, tetapi akan memberikan jawaban .5 (untuk x aneh).
Saya tidak bisa hanya mengganti semua / dalam kode saya dengan // karena kadang-kadang saya melakukan pembagian float, dan ingin perilaku float.
Jadi, bagi saya untuk port ke python 3, saya harus menjaring melalui puluhan ribu baris kode, memeriksa setiap /, dan melihat apakah saya bisa mengetahui apakah itu harus / atau //.
sumber
Python 3 bagus untuk memulai proyek baru jika semua perpustakaan yang Anda butuhkan sudah porting ke Py3k.
Jika ini bukan opsi, menggunakan Python 2.7 adalah yang terbaik dari kedua dunia: Anda memiliki hampir semua perpustakaan yang dibuat untuk Python 2.x dan Anda secara bertahap dapat mengubah kode Anda agar kompatibel dengan Py3k, sehingga migrasi mudah ketika Anda memutuskan saya t. Daftar barang sintaks dari Py3k yang sudah Anda miliki di 2.7 agak panjang, tapi jangan lupa untuk mengimpornya
__future__
. Favorit saya adalah Unicode secara default dan divisi selalu menghasilkan float.sumber
Dari perspektif layanan web: Tidak ada kerangka kerja server utama atau kerangka kerja web yang mendukung Python3.
Pembaruan: Jelas itu yang terjadi di awal 2011, sampai sekarang (akhir 2013), sebagian besar kerangka kerja utama bekerja dengan Python3. Namun beberapa masih tidak kompatibel. Contoh yang signifikan adalah Twisted, yang masih berfungsi .
sumber
Tidak ada alasan kuat yang saya lihat menggunakan P3K kecuali Anda sedang melakukan pekerjaan berat. Dalam forays saya, saya telah menemukan Unicode meresap menjadi penghalang untuk pekerjaan (ASCII) saya dan generator wajib untuk menyumbat kode saya.
Dalam beberapa tahun, 3 akan menghadirkan lingkungan yang lebih menarik, tetapi, tidak hari ini.
sumber
Distribusi tidak membuat Python3 tersedia. Ada beberapa distro pinggiran yang sudah transisi dari Python2. Tetapi varian Linux arus utama seperti Debian, Ubuntu dll. Tidak. Itulah alasan utama saya sebagai penulis aplikasi untuk tidak melakukan keduanya.
Meskipun saya menyiapkan transisi dan bahkan mencoba untuk menghindari konstruksi sintaks yang tidak kompatibel , saya tidak dapat mengujinya dengan benar. Itu bermuara pada masalah ayam dan telur benar-benar.
sumber