Migra al entorno de ejecución de Python 3

Migrar al entorno de ejecución de Python 3 te permite usar funciones de lenguaje actualizadas y compilar apps que son más portátiles, con código idiomático. El entorno de ejecución de Python 3 usa la última versión del intérprete de código abierto de Python que proporciona Python Software Foundation. Las apps compiladas en el entorno de ejecución de Python 3 pueden usar el amplio ecosistema de paquetes y frameworks de Python en tu app, incluidos los que usan código C, mediante la declaración de dependencias en un archivo requirements.txt.

Descripción general del proceso de migración del entorno de ejecución

Recomendamos el siguiente enfoque incremental para la migración en entorno de ejecución, en el que mantienes una aplicación en funcionamiento y que se puede probar durante todo el proceso:

  1. Actualiza tu app para que sea compatible con Python 2 y Python 3.

    Hay varias soluciones disponibles para ayudarte con esta actualización. Por ejemplo, usa Six, Python-Future o Python-Modernize.

    Para obtener más información sobre este paso del proceso de migración, consulta Transferencia del código de Python 2 a Python 3 en el sitio de documentación de Python Software Foundation.

  2. Elige una de estas estrategias de implementación para cualquier servicio en paquetes de App Engine que use tu app:

    1. Migra los servicios de App Engine agrupados en paquetes en tu app de Python 2 a los servicios desagrupados de Google Cloud, servicios de terceros u otras alternativas recomendadas.

    2. Sigue usando servicios agrupados en paquetes heredados en tus apps de Python 3. Este enfoque te brinda la flexibilidad para pasar a los servicios sin agrupar más adelante en el ciclo de migración.

    Asegúrate de probar tu app después de migrar cada servicio.

  3. Prepara los archivos de configuración de App Engine para el entorno de ejecución de Python 3. Varios cambios importantes afectan la configuración en app.yaml, incluidos algunos de los siguientes:

    • Ahora se supone que las aplicaciones son seguras para usar en subprocesos. Si tu aplicación no es segura para los subprocesos, debes establecer max_concurrent_requests en tu app.yaml en 1. Esta configuración puede generar más instancias de las que necesitas en una app segura para los subprocesos, lo que puede generar costos innecesarios.
    • El archivo app.yaml ya no enruta solicitudes a tus secuencias de comandos. En su lugar, se te pedirá que uses un framework web con enrutamiento integrado en la app y actualices o quites todos los controladores script en app.yaml. Para ver un ejemplo de cómo hacer esto con el framework de Flask, consulta la muestra de código de la guía de migración de App Engine en GitHub.

      Para obtener más información sobre cómo cambiar este y otros archivos de configuración, consulta la sección Archivos de configuración.

  4. Prueba y, luego, implementa tu app actualizada en un entorno de Python 3.

    Después de pasar todas las pruebas, implementa la aplicación actualizada en App Engine, pero evita que el tráfico se enrute automáticamente a la nueva versión. Usa la división del tráfico para migrar lentamente el tráfico de tu app en el entorno de ejecución de Python 2 a la app en el entorno de ejecución de Python 3. Si tienes problemas, puedes enrutar todo el tráfico a una versión estable hasta que se solucione el problema.

Para ver ejemplos de cómo convertir tus apps de Python 2 en Python 3, puedes consultar estos recursos adicionales.

Diferencias fundamentales entre los entornos de ejecución de Python 2 y Python 3

La mayoría de los cambios que debes realizar durante la migración en entorno de ejecución provienen de las diferencias siguientes entre los entornos de ejecución de Python 2 y Python 3:

Problemas de compatibilidad entre Python 2 y Python 3

Cuando Python 3 se lanzó por primera vez en 2008, se implementaron varios cambios incompatibles con versiones anteriores en el lenguaje. Algunos de estos cambios solo requieren actualizaciones menores en tu código, como cambiar la declaración print a una función print(). Otros cambios pueden requerir actualizaciones significativas en tu código, como actualizar la forma en que manejas los datos binarios, el texto y las strings.

Muchas bibliotecas populares de código abierto, incluidas las bibliotecas estándar de Python, también se modificaron cuando se migraron de Python 2 a Python 3.

Servicios de App Engine agrupados en paquetes en el entorno de ejecución de Python 3

Para reducir el esfuerzo y la complejidad de la migración, el entorno estándar de App Engine te permite acceder a muchos servicios agrupados en paquetes y API heredados en el entorno de ejecución de Python 3, como Memcache. Tu app de Python 3 puede llamar a las API de servicios agrupadas a través de bibliotecas idiomáticas de lenguaje y acceder a la misma funcionalidad que en el entorno de ejecución de Python 2.

También tienes la opción de usar productos de Google Cloud que ofrecen funciones similares a las de los servicios agrupados en paquetes heredados. Te recomendamos que migres a los productos de Google Cloud sin agrupar, ya que te permite aprovechar las mejoras continuas y las funciones nuevas.

Para los servicios agrupados en paquetes que no están disponibles como productos separados en Google Cloud, como el procesamiento de imágenes, la búsqueda y la mensajería, puedes usar nuestros proveedores de terceros sugeridos u otras soluciones alternativas.

Archivos de configuración

Antes de que puedas ejecutar tu app en el entorno de ejecución de Python 3 del entorno estándar de App Engine, es posible que debas cambiar algunos de los archivos de configuración que usa App Engine:

Framework web necesario para enrutar solicitudes de contenido dinámico

En el entorno de ejecución de Python 2, puedes crear controladores de URL en el archivo app.yaml para especificar qué aplicación ejecutar cuando se solicita un patrón de URL o una URL específica.

En el entorno de ejecución de Python 3, tu app necesita usar un framework web como Flask o Django para enrutar solicitudes de contenido dinámico, en lugar de usar controladores de URL en app.yaml. En el caso del contenido estático, puedes seguir creando controladores de URL en el archivo app.yaml de tu app.

Prueba

Te recomendamos que uses un enfoque de prueba que sea idiomático para Python en lugar de depender de dev_appserver. Por ejemplo, puedes usar venv para crear un entorno local aislado de Python 3. Se puede usar cualquier framework de prueba estándar de Python para escribir tu unidad, integración y pruebas del sistema. Quizás también consideres la configuración de versiones de desarrollo de tus servicios o el uso de los emuladores locales disponibles para muchos productos de Google Cloud.

De manera opcional, puedes usar la versión de vista previa de dev_appserver compatible con Python 3. Para obtener más información sobre esta función de prueba, consulta Usa el servidor de desarrollo local.

Implementando

Las implementaciones a través de appcfg.py no son compatibles con Python 3. En su lugar, usa la herramienta de línea de comandos de gcloud para implementar tu app.

Logging

El registro en el entorno de ejecución de Python 3 sigue el estándar de registro de Cloud Logging. En el entorno de ejecución de Python 3, los registros de la app ya no se agrupan en paquetes con los registros de solicitud, sino que están separados en registros diferentes. Para obtener más información sobre cómo leer y escribir registros en el entorno de ejecución de Python 3, consulta la guía de registro.

Recursos de migración adicionales

Para obtener información adicional sobre cómo migrar tus apps de App Engine a servicios independientes de Cloud o al entorno de ejecución de Python 3, puedes consultar estos recursos de App Engine: