Nota che non aggiorno più questa risposta. Ho un Q & A Python 3 molto più lungo sul mio sito personale all'indirizzo http://python-notes.curiousefficiency.org/en/latest/python3/questions_and_answers.html
Risposta precedente:
(Aggiornamento dello stato, settembre 2012)
Noi (vale a dire gli sviluppatori core di Python), quando è stato rilasciato Python 3.0, avevamo previsto che ci sarebbero voluti circa 5 anni perché 3.x diventasse la scelta "predefinita" per i nuovi progetti della serie 2.x. Questa previsione è il motivo per cui il periodo di manutenzione pianificato per la versione 2.7 è così lungo.
La versione originale di Python 3.0 si è anche rivelata avere alcuni problemi critici con scarse prestazioni di I / O che la rendevano effettivamente inutilizzabile per la maggior parte degli scopi pratici, quindi ha più senso iniziare la sequenza temporale dal rilascio di Python 3.1 alla fine di giugno 2009. (Quelli I problemi di prestazioni di I / O sono anche il motivo per cui non esistono versioni di manutenzione 3.0.z: non c'è motivo per cui qualcuno vorrebbe attenersi alla 3.0 rispetto all'aggiornamento alla 3.1).
Al momento della stesura di questo documento (settembre 2012), ciò significa che al momento stiamo passando da poco più di 3 anni al processo di transizione e che la previsione sembra essere ancora sulla buona strada.
Mentre le persone che digitano il codice Python 3 vengono morse più regolarmente da cambiamenti sintattici come print
diventare una funzione, che in realtà non è una seccatura per il porting delle librerie perché lo 2to3
strumento di conversione automatizzato lo gestisce abbastanza felicemente.
Il problema più grande in pratica è in realtà un semantico: Python 3 non ti consente di giocare velocemente e liberamente con le codifiche di testo come Python 2. Questo è sia il suo più grande vantaggio rispetto a Python 2, ma anche la più grande barriera al porting: devi risolvere i tuoi problemi di gestione Unicode per far funzionare correttamente una porta (mentre in 2.x, molto di quel codice ha prodotto silenziosamente dati errati con input non ASCII, dando l'impressione di funzionare, specialmente in ambienti in cui i dati non ASCII sono rari).
Anche la libreria standard in Python 3.0 e 3.1 presentava ancora problemi di gestione Unicode, rendendo difficile il porting di molte librerie (in particolare quelle relative ai servizi Web).
3.2 ha affrontato molti di questi problemi, fornendo un obiettivo molto migliore per librerie e framework come Django. 3.2 ha anche portato la prima versione funzionante di wsgiref
(lo standard principale utilizzato per la comunicazione tra server Web e applicazioni Web scritti in Python) per 3.x, che era un prerequisito necessario per l'adozione nello spazio web.
Dipendenze chiave come NumPy e SciPy ora sono stati portati, utility di installazione e gestione delle dipendenze piace zc.buildout
, pip
e virtualenv
sono disponibili per 3.x, il rilascio Piramide 1.3 supporta Python 3.2, l'imminente Django 1.5 versione include il supporto sperimentale Python 3, e il 12.0 rilascio di il framework di rete Twisted ha abbandonato il supporto di Python 2.5 per aprire la strada alla creazione di una versione compatibile con Python 3.
Oltre ai progressi nelle librerie e nei framework di compatibilità di Python 3, la popolare implementazione dell'interprete PyPy compilata da JIT sta lavorando attivamente al supporto di Python 3.
Anche gli strumenti per la gestione del processo di migrazione sono notevolmente migliorati. Oltre allo 2to3
strumento fornito come parte di CPython (che ora è considerato il più adatto per le conversioni una tantum di applicazioni che non hanno bisogno di mantenere il supporto per la serie 2.x), c'è anche python-modernize
, che utilizza l' 2to3
infrastruttura per indirizzare il (grande) sottoinsieme comune di Python 2 e Python 3. Questo strumento crea una base di codice singola che verrà eseguita su Python 2.6+ e Python 3.2+ con l'aiuto della six
libreria di compatibilità. La versione 3.3 di Python elimina anche una delle principali cause di "rumore" durante la migrazione delle applicazioni esistenti compatibili con Unicode: Python 3.3 supporta ancora una volta il prefisso "u" per i letterali di stringhe (in realtà non lo faqualsiasi cosa in Python 3 - è stato appena ripristinato per evitare inavvertitamente di rendere più difficile la migrazione a Python 3 per gli utenti che avevano già correttamente distinto il loro testo e i loro letterali binari in Python 2).
Quindi in realtà siamo abbastanza contenti di come stanno andando le cose: ci sono ancora quasi 2 anni per passare al nostro orizzonte temporale originale e i cambiamenti si stanno increspando bene attraverso l'intero ecosistema Python.
Poiché molti progetti non curano correttamente i metadati dell'indice dei pacchetti Python e alcuni progetti con manutentori meno attivi sono stati biforcati per aggiungere il supporto Python 3, gli scanner PyPI puramente automatizzati offrono ancora una visione eccessivamente negativa dello stato della libreria Python 3 supporto.
Un'alternativa preferita per ottenere informazioni sul livello di supporto di Python 3 su PyPI è http://py3ksupport.appspot.com/
Questo elenco è curato personalmente da Brett Cannon (uno sviluppatore di core Python di lunga data) per tenere conto di metadati di progetto errati, supporto di Python 3 che si trova negli strumenti di controllo del codice sorgente ma non ancora in una versione ufficiale e progetti che hanno fork più aggiornati o alternative che supportano Python 3. In molti casi, le librerie che non sono ancora disponibili su Python 3 mancano di dipendenze chiave e / o la mancanza del supporto di Python 3 in altri progetti riduce la domanda degli utenti (ad esempio quando il framework Django di base è disponibile su Python 3, strumenti correlati come South e django-sedano hanno maggiori probabilità di aggiungere il supporto Python 3 e la disponibilità del supporto Python 3 sia in Pyramid che in Django rende più probabile che il supporto Python 3 sarà implementato in altri strumenti come gevent).
Il sito http://getpython3.com/ include alcuni collegamenti eccellenti a libri e altre risorse per Python 3, identifica alcune librerie e framework chiave che già supportano Python 3 e fornisce anche alcune informazioni su come gli sviluppatori possono richiedere assistenza finanziaria dal PSF nel porting di progetti chiave su Python 3.
Un'altra buona risorsa è la pagina wiki della comunità sui fattori da considerare quando si sceglie una versione di Python per un nuovo progetto: http://wiki.python.org/moin/Python2orPython3