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

Usar las bibliotecas de Python 2

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

Las bibliotecas de terceros se deben implementar como código exclusivo de Python sin extensiones C. Si se copian al 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 tu aplicación.

Copia una biblioteca de terceros

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

  1. Crea un directorio para almacenar tus 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>
    

    ¿Usar Homebrew 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 el directorio de tu biblioteca 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')
    

    El archivo appengine_config.py anterior supone que el directorio de trabajo actual es donde se encuentra la carpeta lib. En algunos casos, como las pruebas de unidades, el directorio de trabajo actual puede ser diferente. Para evitar errores, puedes pasar de manera 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 de pip con bibliotecas copiadas

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

Un archivo de requisitos es un archivo de texto con una línea por biblioteca, que enumera el nombre del paquete y, opcionalmente, la versión del paquete (de forma predeterminada, la más reciente):

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

Para instalar las bibliotecas desde 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 en el entorno de ejecución

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

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

App Engine proporciona automáticamente 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 automáticamente para el servidor de desarrollo local. Para instalar algunas bibliotecas de forma local, debes ejecutar gcloud component install app-engine-python-extras. Si el servidor de desarrollo local detecta que este componente es necesario, te pedirá que lo instales. Las siguientes bibliotecas integradas deben instalarse de forma local antes de 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 previos y, a menudo, puede proporcionar una versión compilada previamente de la biblioteca.
  • En Windows, los instaladores para versiones compiladas previamente 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 localmente, sin tener en cuenta la versión especificada en app.yaml. Si lo deseas, configura un virtualenv para tu proyecto a fin de proporcionar la versión exacta del paquete. Ten en cuenta que el virtualenv solo se usa para estos paquetes binarios de forma local y no estará disponible para tu aplicación una vez implementado. Para agregar bibliotecas de terceros adicionales, usa el método descrito en Instala una biblioteca.

Usa Django en el servidor de desarrollo local

Django es un framework de aplicaciones web completo para Python. Proporciona una pila completa de componentes intercambiables, incluidos el envío, las vistas, el middleware y los 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 (DB) de Datastore es la 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. Es una buena idea insertarlo delante de cualquier otra clase de middleware, ya que algún middleware podría llamar al almacén de datos y las llamadas no se manejarán correctamente 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, generalmente 'settings', antes de que se importen los paquetes.

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

env_variables:
  DJANGO_SETTINGS_MODULE: 'myapp.settings'

O 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 gráficos que produce gráficos y figuras en una variedad de formatos de imagen. En App Engine, no se admiten los modos interactivos de matplotlib y otras cuantas funciones no están disponibles. Esto significa que no puedes usar pyplot.show() como lo indican los instructivos de matplotlib. En su lugar, debes usar pyplot.savefig() para escribir datos de imagen en la transmisión de salida, una instancia de cStringIO.StringIO o Google Cloud Storage con Cloud. Biblioteca cliente de Cloud Storage

Matplotlib permite una personalización exhaustiva mediante el uso del archivo de configuración matplotlibrc, que se debe colocar en el directorio de nivel superior de la aplicación. Como alternativa, puedes establecer la variable de entorno MATPLOTLIBRC en una ruta relacionada con el 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, SVGZ y SVGZ. Si agregas PIL a la sección libraries de app.yaml, habilitas la biblioteca PIL, entonces el backend de AGG también admitirá automáticamente la escritura de formatos de imagen JPEG y TIFF.

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

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

  • No hay un directorio ~/.matplotlib. Sin embargo, hay ubicaciones alternativas para colocar el archivo de configuración matplotlibrc, como se describió anteriormente.
  • No se admiten backends interactivos ni elementos de GUI.
  • 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 descargar datos que normalmente se almacenarían en caché. Los mecanismos de almacenamiento en caché específicos que se inhabilitaron incluyen datos de fuentes calculados por matplotlib.font_manager.FontManager.findfont, datos de muestra descargados por matplotlib.cbook.get_sample_data y datos financieros descargados por matplotlib.finance.fetch_historical_yahoo.
    • Como 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é configurado como False.
  • Se inhabilitaron todas las funciones que invocan comandos externos.
    • Se inhabilitó el uso de fontconfig. Las fuentes se encuentran a través del mecanismo descrito anteriormente.
    • No se admite el uso de LaTeX para el procesamiento de texto. Establecer text.usetex en True no funcionará.
    • No se admite el uso de un programa de destilación de PostScript externo. 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.
    • La función matplotlib.cbook.report_memory y la clase matplotlib.cbook.MemoryMonitor no son compatibles.
  • Se inhabilitó la función matplotlib.test.

Qué sigue