¿Consejos para actualizar a Python 3.0?

Así que con los lanzamientos finales de Python 3.0 (y ahora 3.1), muchas personas se enfrentan a la preocupación de cómo actualizar sin perder la mitad de su base de código debido a la incompatibilidad hacia atrás.

¿Cuáles son los mejores consejos de la gente para evitar los muchos escollos que resultarán casi inevitablemente al cambiar a la próxima generación de python?

Probablemente, un buen lugar para comenzar es “use 2to3 para convertir su código python 2.x a 3.x” 🙂

Primero, esta pregunta es muy similar a ¿Cómo planea manejar la migración a Python 3? . Compruebe las respuestas allí.

También hay una sección en el Wiki de Python sobre cómo portar aplicaciones a Python 3.x

Las Notas de la versión para python 3.0 contienen una sección sobre portabilidad. Estoy citando los consejos allí:

  1. (Requisito previo 🙂 Comience con una excelente cobertura de prueba.
  2. Puerto a Python 2.6. Esto no debería ser más trabajo que el promedio de Python 2.x a Python 2. (x + 1). Asegúrese de que todas sus pruebas pasen.
  3. (Todavía usando 2.6 🙂 Encienda el interruptor de línea de comando -3. Esto permite advertencias sobre las características que se eliminarán (o cambiarán) en 3.0. Ejecute nuevamente su conjunto de pruebas y corrija el código sobre el que recibe las advertencias hasta que no queden más advertencias y todas las pruebas aún se aprueben.
  4. Ejecute el traductor de fuente a fuente 2to3 sobre su árbol de código fuente. (Consulte 2to3 – Traducción automática de códigos Python 2 a 3 para obtener más información sobre esta herramienta). Ejecute el resultado de la traducción en Python 3.0. Repare manualmente los problemas restantes, solucione los problemas hasta que todas las pruebas pasen nuevamente.

No se recomienda intentar escribir el código fuente que se ejecuta sin cambios en Python 2.6 y 3.0; tendría que usar un estilo de encoding muy distorsionado, por ejemplo, evitando declaraciones impresas, metaclases y mucho más. Si está manteniendo una biblioteca que necesita ser compatible con Python 2.6 y Python 3.0, el mejor enfoque es modificar el paso 3 anterior editando la versión 2.6 del código fuente y ejecutando el traductor 2to3 nuevamente, en lugar de editar la versión 3.0 del código fuente.

Escribo un libro gratis sobre esto. Puede leerlo aquí:

http://python3porting.com/

En breve:

  1. Asegúrese de que todas las bibliotecas de terceros estén disponibles para Python 3.
  2. Prepare su código eliminando ambigüedades comunes:
    • Usa // si realmente quieres división entera.
    • Asegúrese de marcar los archivos binarios con la bandera ‘b’ cuando los abra, para indicar claramente si quiere decir que los datos son binarios o no.
  3. Cuanto mayor sea la cobertura de su prueba, mejor.
  4. Asegúrese de que se ejecuta sin advertencias en “Python 2.7 -3”.
  5. Ahora ejecuta 2to3.
  6. Solucionar cualquier error.

Eso es, más o menos.

Sin una razón realmente convincente para actualizar, me quedaría con lo que funciona. Miré la actualización de los scripts que utilizo a diario y fue demasiado trabajo para ningún beneficio que pude ver.

“Si no está roto, ¡no lo arregles!”