Python 2 ya no es compatible con la comunidad. Recomendamos que migres las apps de Python 2 a Python 3.

Usa las bibliotecas de Python 2

Puedes usar las bibliotecas de terceros que son de código exclusivo de Python sin extensiones C. Para ello, copia la biblioteca en el directorio de la aplicación. Si la biblioteca de terceros ya está integrada y empaquetada con el entorno de ejecución, puedes usarla sin copiarla en tu app.

Las bibliotecas de terceros se deben implementar como código exclusivo de Python sin extensiones C. Si se copian en el directorio de tu aplicación, se consideran para las cuotas de archivos, ya que la biblioteca se sube a App Engine junto con el código de la aplicación.

Copia una biblioteca de terceros

Para usar una biblioteca de terceros que no está en la lista de las bibliotecas integradas y empaquetadas con el entorno de ejecución, haz lo siguiente:

  1. Crea un directorio para almacenar las bibliotecas de terceros, como lib/.

    mkdir lib
    
  2. Usa pip (versión 6 o posterior) con la marca -t <directory> para copiar las bibliotecas en la carpeta que creaste en el paso anterior. Por ejemplo:

    pip install -t lib/ <library_name>
    

    ¿Usas Homebrew para Python en macOS?

  3. Crea un archivo llamado appengine_config.py en la misma carpeta que tu archivo app.yaml.

  4. Edita el archivo appengine_config.py y proporciona tu directorio de bibliotecas al método vendor.add().

    # appengine_config.py
    from google.appengine.ext import vendor
    
    # Add any libraries install in the "lib" folder.
    vendor.add('lib')
    

    En el archivo appengine_config.py anterior, se supone que la carpeta lib se ubica en el directorio de trabajo actual. En algunos casos, como las pruebas de unidades, el directorio de trabajo actual puede ser diferente. Para evitar errores, puedes pasar de forma explícita la ruta completa a la carpeta lib con lo siguiente:

    vendor.add(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib'))
    

Usa archivos de requisitos pip con bibliotecas copiadas

pip puede leer una lista de bibliotecas que se deben instalar desde un archivo, conocido como archivo de requisitos. Los archivos de requisitos facilitan la configuración de un entorno de desarrollo nuevo para tu app, y se actualizan a las versiones de bibliotecas nuevas.

Un archivo de requisitos es un archivo de texto con una línea por biblioteca que enumera el nombre del paquete y, de manera opcional, la versión para el paquete (el valor predeterminado es la última versión):

Flask==0.10
Markdown==2.5.2
google-api-python-client

Para instalar las bibliotecas a partir de un archivo de requisitos, usa la marca -r además de la marca -t lib:

pip install -t lib -r requirements.txt

Usa una biblioteca de terceros integrada y empaquetada con el entorno de ejecución

Si la biblioteca de terceros está en la lista de bibliotecas integradas y empaquetadas con el entorno de ejecución de Python en App Engine, solo debes especificarla en la directiva bibliotecas en el app.yaml. Por ejemplo:

libraries:
- name: PIL
  version: "1.1.7"
- name: webob
  version: "1.1.1"

App Engine proporciona de forma automática las bibliotecas solicitadas durante la implementación.

Usa bibliotecas integradas y empaquetadas con el servidor de desarrollo local

Muchas de las bibliotecas integradas que proporciona el entorno de ejecución están disponibles de forma automática para el servidor de desarrollo local. Para instalar algunas bibliotecas de forma local, debes ejecutar gcloud components install app-engine-python-extras. Si el servidor de desarrollo local detecta que se necesita este componente, te pedirá que lo instales. Las siguientes bibliotecas integradas deben instalarse de forma local para que puedas usarlas con el servidor de desarrollo local:

Puedes usar el comando pip para instalar todos estos paquetes desde el índice de paquetes de Python (PyPI).

sudo pip install lxml==2.3.5

Según tu plataforma, es posible que debas instalar herramientas de asistencia de compilación y fuentes de Python para instalar estas bibliotecas.

  • En Linux, el administrador de paquetes puede proporcionar estos requisitos y, a menudo, puede brindar una versión ya compilada de la biblioteca.
  • En Windows, los instaladores de las versiones ya compiladas suelen estar disponibles.
  • En macOS, se requieren las herramientas de línea de comandos de Xcode para compilar algunos paquetes.

El servidor de desarrollo usa la versión del paquete que instalaste de forma local, sin importar la versión especificada en app.yaml. Si lo deseas, configura un virtualenv para que tu proyecto proporcione la versión exacta del paquete. Ten en cuenta que virtualenv solo se usa para estos paquetes binarios de manera local y no estará disponible para tu aplicación una vez que esté implementada. Para agregar bibliotecas de terceros adicionales, usa el método que se describe en Instala una biblioteca.

Usa Django en el servidor de desarrollo local

Django es un framework de aplicaciones web con todas las funciones para Python. Proporciona una pila completa de componentes intercambiables, como despacho, vistas, middleware, componentes de plantillas y muchos otros.

La interfaz de modelado de datos de Django no es compatible con el almacén de datos de App Engine. Puedes usar las bibliotecas de modelado de datos de App Engine (db o ndb) en tus aplicaciones de Django. Sin embargo, las aplicaciones de Django de terceros que usan la interfaz de modelado de datos de Django, en particular la aplicación de administrador de Django, podrían no funcionar directamente con App Engine.

La biblioteca de modelado de Datastore (DB) es la opción predeterminada. Para usar Django con la API de almacenamiento de NDB, agrega 'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware', a la entrada MIDDLEWARE_CLASSES en tu archivo settings.py de Django. Se recomienda insertarlo delante de cualquier otra clase de middleware, ya que algún otro middleware podría llamar al almacén de datos, y las llamadas no se manejarán de forma correcta si se invoca ese middleware antes que este. Puedes obtener más información sobre el middleware de Django en la documentación del proyecto.

Para habilitar Django en tu app, especifica la aplicación WSGI y la biblioteca de Django en app.yaml:

...
handlers:
- url: /.*
  script: main.app  # a WSGI application in the main module's global scope

libraries:
- name: django
  version: "1.4"

La variable de entorno DJANGO_SETTINGS_MODULE debe configurarse con el nombre de tu módulo de configuración de Django, que suele ser 'settings', antes de que se importen los paquetes.

Si el módulo de configuración de Django no es settings.py, configura la variable de entorno DJANGO_SETTINGS_MODULE según corresponda en el archivo app.yaml:

env_variables:
  DJANGO_SETTINGS_MODULE: 'myapp.settings'

También puedes hacerlo en tu código de Python:

import os
# specify the name of your settings module
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

import django.core.handlers.wsgi
app = django.core.handlers.wsgi.WSGIHandler()

Usa matplotlib en el servidor de desarrollo local

Matplotlib es una biblioteca de trazado que produce gráficos y figuras en una variedad de formatos de imagen. En App Engine, los modos interactivos de matplotlib no son compatibles, y hay otras funciones que tampoco están disponibles. Esto significa que no puedes usar pyplot.show(), como se sugiere en varios instructivos de matplotlib. En cambio, debes usar pyplot.savefig() para escribir los datos de imagen en la transmisión de salida, una instancia cStringIO.StringIO o Google Cloud Storage mediante la biblioteca cliente de Cloud Storage.

Matplotlib permite la personalización extensa mediante el uso del archivo de configuración matplotlibrc, que debe colocarse en el directorio de nivel superior de la aplicación. Como alternativa, puedes establecer la variable de entorno MATPLOTLIBRC en una ruta de acceso relativa al directorio de tu aplicación.

El backend predeterminado es AGG, que permite escribir archivos de todos los formatos compatibles: PNG (el formato predeterminado), RAW, PS, PDF, SVG y SVGZ. Si permites que la biblioteca PIL esté disponible mediante la adición de PIL a la sección libraries de app.yaml, el backend AGG también admitirá de forma automática la escritura de formatos de imagen JPEG y TIFF.

Matplotlib cuenta con varias fuentes que están disponibles de forma automática. Puedes usar fuentes personalizadas si las subes en formato TTF junto con la aplicación y configuras la variable de entorno TTFPATH como la ruta en la que se encuentran, en relación con el directorio de la aplicación. Para obtener más información, consulta la referencia de app.yaml.

Varias funciones de matplotlib no son compatibles con App Engine. En particular, considera lo siguiente:

  • No hay directorio ~/.matplotlib. Sin embargo, existen ubicaciones alternativas para colocar el archivo de configuración matplotlibrc, como se describió antes.
  • Los backends interactivos y los elementos de la GUI no son compatibles.
  • No se admiten los backends de EMF, Cairo y GDK.
  • No hay almacenamiento en caché y, por lo tanto, varios mecanismos volverán a calcular o a descargar los datos que con normalidad se almacenarían en caché. Entro los mecanismos específicos de almacenamiento en caché que se inhabilitaron, se incluyen los datos de fuentes que calcula matplotlib.font_manager.FontManager.findfont, los datos de muestra que descarga matplotlib.cbook.get_sample_data y los datos financieros que descarga matplotlib.finance.fetch_historical_yahoo.
    • Debido a que no hay almacenamiento en caché, no es posible llamar a [matplotlib.cbook.get_sample_data](http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data) con asfileobj=False, a menos que examples.download esté establecido en False.
  • Se inhabilitaron todas las funciones que invocan comandos externos.
    • Se inhabilitó el uso de fontconfig. Las fuentes se encuentran en el mecanismo descrito antes.
    • No se admite el uso de LaTeX para la renderización de texto. Establecer text.usetex en True no funcionará.
    • No se admite el uso de un programa de sintetización externo de PostScript. Establecer ps.usedistiller en ghostscript o xpdf no funcionará.
    • No se admite el uso de un programa de codificación de video externo. El método matplotlib.animation.Animation.save no funcionará y, por lo tanto, el paquete matplotlib.animation no es útil.
    • No se admiten ni la función matplotlib.cbook.report_memory ni la clase matplotlib.cbook.MemoryMonitor.
  • La función matplotlib.test se inhabilitó.

Próximos pasos