Tenga en cuenta que ya no estoy actualizando esta respuesta. Tengo un Python 3 Q & A mucho más largo en mi sitio personal en http://python-notes.curiousefficiency.org/en/latest/python3/questions_and_answers.html
Respuesta anterior:
(Actualización de estado, septiembre de 2012)
Nosotros (es decir, los desarrolladores principales de Python) predijimos cuando se lanzó Python 3.0 que tomaría aproximadamente 5 años para que 3.x se convirtiera en la opción "predeterminada" para nuevos proyectos en la serie 2.x. Esa predicción es la razón por la cual el período de mantenimiento planificado para la versión 2.7 es tan largo.
La versión original de Python 3.0 también resultó tener algunos problemas críticos con un bajo rendimiento de E / S que lo hicieron efectivamente inutilizable para la mayoría de los propósitos prácticos, por lo que tiene más sentido comenzar la línea de tiempo desde el lanzamiento de Python 3.1 a fines de junio de 2009. (Esos Los problemas de rendimiento de IO también son la razón por la cual no hay versiones de mantenimiento 3.0.z: no hay una buena razón por la que alguien quiera quedarse con 3.0 sobre la actualización a 3.1).
Al momento de escribir (septiembre de 2012), eso significa que actualmente estamos un poco más de 3 años en el proceso de transición, y esa predicción todavía parece estar en camino.
Si bien las personas que escriben código Python 3 son mordidas con mayor frecuencia por cambios sintácticos como print
convertirse en una función, en realidad no es una molestia para el portado de la biblioteca porque la 2to3
herramienta de conversión automática lo maneja con bastante felicidad.
El mayor problema en la práctica es en realidad semántico: Python 3 no te permite jugar rápido y suelto con codificaciones de texto como lo hace Python 2. Este es su mayor beneficio sobre Python 2, pero también la mayor barrera para la portabilidad: debe solucionar sus problemas de manejo de Unicode para que un puerto funcione correctamente (mientras que en 2.x, gran parte de ese código silenciosamente produjo datos incorrectos con entradas no ASCII, dando la impresión de funcionar, especialmente en entornos donde los datos no ASCII son poco comunes).
Incluso la biblioteca estándar en Python 3.0 y 3.1 todavía tenía problemas de manejo de Unicode, lo que dificultaba el puerto de muchas bibliotecas (especialmente las relacionadas con los servicios web).
3.2 abordó muchos de esos problemas, proporcionando un objetivo mucho mejor para bibliotecas y marcos como Django. 3.2 también trajo la primera versión de trabajo wsgiref
(el estándar principal utilizado para la comunicación entre servidores web y aplicaciones web escritas en Python) para 3.x, que era un requisito previo necesario para su adopción en el espacio web.
Las dependencias clave como NumPy y SciPy ahora se han portado, las herramientas de instalación y administración de dependencias como zc.buildout
, pip
y virtualenv
están disponibles para 3.x, la versión Pyramid 1.3 es compatible con Python 3.2, la próxima versión Django 1.5 incluye soporte experimental para Python 3 y la versión 12.0 de Twisted Network Framework dejó de admitir Python 2.5 para allanar el camino para crear una versión compatible con Python 3.
Además del progreso en las bibliotecas y marcos de compatibilidad de Python 3, la popular implementación del intérprete de PyPy compilado por JIT está trabajando activamente en el soporte de Python 3.
Las herramientas para gestionar el proceso de migración también han mejorado notablemente. Además de la 2to3
herramienta proporcionada como parte de CPython (que ahora se considera más adecuada para las conversiones de aplicaciones únicas que no necesitan mantener el soporte para la serie 2.x), también existe python-modernize
, que utiliza la 2to3
infraestructura para apuntar El subconjunto común (grande) de Python 2 y Python 3. Esta herramienta crea una base de código único que se ejecutará tanto en Python 2.6+ como en Python 3.2+ con la ayuda de la six
biblioteca de compatibilidad. La versión Python 3.3 también elimina una de las principales causas de "ruido" al migrar las aplicaciones compatibles con Unicode: Python 3.3 una vez más admite el prefijo 'u' para literales de cadena (en realidad no lo hacecualquier cosa en Python 3: se ha restaurado para evitar que la migración a Python 3 sea inadvertidamente más difícil para los usuarios que ya habían distinguido correctamente sus textos y literales binarios en Python 2).
Por lo tanto, estamos bastante contentos con la forma en que progresan las cosas: todavía quedan casi 2 años en nuestro marco de tiempo original, y los cambios se están extendiendo muy bien en todo el ecosistema de Python.
Dado que muchos proyectos no conservan adecuadamente los metadatos de su índice de paquete Python, y algunos proyectos con mantenedores menos activos se han bifurcado para agregar compatibilidad con Python 3, los escáneres PyPI puramente automáticos aún ofrecen una visión demasiado negativa del estado de la biblioteca de Python 3 apoyo.
Una alternativa preferida para obtener información sobre el nivel de soporte de Python 3 en PyPI es http://py3ksupport.appspot.com/
Esta lista está curada personalmente por Brett Cannon (un desarrollador principal de Python desde hace mucho tiempo) para dar cuenta de metadatos de proyecto incorrectos, soporte de Python 3 que está en herramientas de control de fuente pero aún no en un lanzamiento oficial, y proyectos que tienen tenedores más actualizados o alternativas que admiten Python 3. En muchos casos, las bibliotecas que aún no están disponibles en Python 3 carecen de dependencias clave y / o la falta de soporte de Python 3 en otros proyectos disminuye la demanda del usuario (por ejemplo, una vez que el marco Django está disponible en Python 3, las herramientas relacionadas como South y django-celery tienen más probabilidades de agregar soporte para Python 3, y la disponibilidad de soporte para Python 3 en Pyramid y Django hace que sea más probable que el soporte para Python 3 se implemente en otras herramientas como gevent).
El sitio en http://getpython3.com/ incluye algunos enlaces excelentes a libros y otros recursos para Python 3, identifica algunas bibliotecas y marcos clave que ya son compatibles con Python 3, y también proporciona información sobre cómo los desarrolladores pueden buscar ayuda financiera del PSF en portar proyectos clave a Python 3.
Otro buen recurso es la página wiki de la comunidad sobre los factores a considerar al elegir una versión de Python para un nuevo proyecto: http://wiki.python.org/moin/Python2orPython3