Usando bibliotecas de Python 2

Puede utilizar bibliotecas de terceros que sean código Python puro sin extensiones C, copiando la biblioteca en el directorio de su aplicación. Si la biblioteca de terceros ya está integrada, incluida con el tiempo de ejecución , puede usar la biblioteca sin copiarla en su aplicación.

Las bibliotecas de terceros deben implementarse como código Python puro sin extensiones C. Si se copian en el directorio de su aplicación, cuentan para las cuotas de archivos porque la biblioteca se carga en App Engine junto con el código de su aplicación.

Copiar una biblioteca de terceros

Para utilizar una biblioteca de terceros que no está en la lista de bibliotecas integradas incluidas con el tiempo de ejecución :

  1. Cree un directorio para almacenar sus bibliotecas de terceros, como lib/ .

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

    pip install -t lib/ <library_name> 

    ¿Usando Homebrew Python en macOS?

  3. Cree un archivo llamado appengine_config.py en la misma carpeta que su archivo app.yaml .

  4. Edite el archivo appengine_config.py y proporcione el directorio de su 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 en las pruebas unitarias, el directorio de trabajo actual puede ser diferente. Para evitar errores, puede pasar explícitamente la ruta completa a la carpeta lib usando:

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

Usar archivos de requisitos 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 su aplicación 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 (el valor predeterminado es la más reciente):

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

Para instalar las bibliotecas desde un archivo de requisitos, use el indicador -r además del indicador -t lib :

pip install -t lib -r requirements.txt

Usar una biblioteca de terceros integrada incluida con el tiempo de ejecución

Si la biblioteca de terceros está en la lista de bibliotecas integradas incluidas con el tiempo de ejecución de Python de App Engine , solo tienes que especificarla en la directiva de 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.

Uso de bibliotecas integradas integradas con el servidor de desarrollo local

Muchas de las bibliotecas integradas proporcionadas por el tiempo de ejecución están disponibles automáticamente para el servidor de desarrollo local. Para instalar algunas bibliotecas localmente, debes ejecutar gcloud components install app-engine-python-extras . Si el servidor de desarrollo local detecta que se necesita este componente, le solicitará que lo instale. Las siguientes bibliotecas integradas deben instalarse localmente antes de poder utilizarlas con el servidor de desarrollo local:

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

sudo pip install lxml==2.3.5 

Dependiendo de su plataforma, es posible que necesite instalar herramientas de soporte 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 prediseñadas de la biblioteca.
  • En Windows, normalmente hay instaladores disponibles para versiones prediseñadas.
  • En macOS, se requieren las herramientas de línea de comandos de Xcode para crear algunos paquetes.

El servidor de desarrollo utiliza la versión del paquete que ha instalado localmente independientemente de la versión especificada en app.yaml . Si lo desea, configure un virtualenv para su proyecto para proporcionar la versión exacta del paquete. Tenga en cuenta que virtualenv solo se usa para estos paquetes binarios localmente y no estará disponible para su aplicación una vez implementado. Para agregar bibliotecas de terceros adicionales, utilice el método descrito en Instalación de una biblioteca .

Usando Django en el servidor de desarrollo local

Django es un marco de aplicación web con todas las funciones para Python. Proporciona una pila completa de componentes intercambiables, incluidos componentes de distribución, vistas, middleware y 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 Django. Sin embargo, es posible que las aplicaciones Django de terceros que utilizan la interfaz de modelado de datos de Django, en particular la aplicación Admin de Django, no funcionen directamente con App Engine.

La biblioteca de modelado (DB) de Datastore es la predeterminada. Para usar Django con la API de almacenamiento NDB , agregue 'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware', a la entrada MIDDLEWARE_CLASSES en su archivo Django settings.py . Es una buena idea insertarlo delante de cualquier otra clase de middleware, ya que algún otro middleware podría realizar llamadas al almacén de datos y no se manejarán adecuadamente si ese middleware se invoca antes que este. Puede obtener más información sobre el middleware Django en la documentación del proyecto .

Para habilitar Django en su aplicación, especifique la aplicación WSGI y la biblioteca 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 su módulo de configuración de Django, normalmente 'settings' , antes de importar los paquetes.

Si su módulo de configuración de Django no es settings.py , configure la variable de entorno DJANGO_SETTINGS_MODULE en consecuencia en su archivo app.yaml :

env_variables:   DJANGO_SETTINGS_MODULE: 'myapp.settings' 

O en tu código 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() 

Usando 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 otras funciones tampoco están disponibles. Esto significa que no puede usar pyplot.show() como sugieren muchos tutoriales de matplotlib. En su lugar, debe usar pyplot.savefig() para escribir datos de imagen en el flujo de salida, una instancia cStringIO.StringIO o Google Cloud Storage usando la biblioteca cliente de Cloud Storage .

Matplotlib permite una amplia personalización mediante el uso del archivo de configuración matplotlibrc , que debe colocarse en el directorio de nivel superior de la aplicación. Alternativamente, puede configurar la variable de entorno MATPLOTLIBRC en una ruta relativa al directorio de su aplicación.

El backend predeterminado es AGG, que permite escribir archivos de todos los formatos admitidos: PNG (el formato predeterminado), RAW, PS, PDF, SVG y SVGZ. Si hace que la biblioteca PIL esté disponible agregando PIL a la sección de libraries de app.yaml , entonces el backend de AGG también admitirá automáticamente la escritura en formatos de imágenes JPEG y TIFF.

Matplotlib viene con una serie de fuentes que están disponibles automáticamente. Puede usar fuentes personalizadas cargándolas en formato TTF junto con su aplicación y configurando la variable de entorno TTFPATH en la ruta donde se encuentran, en relación con el directorio de su aplicación. Para obtener más información, consulte la referencia de app.yaml .

Varias funciones de matplotlib no son compatibles con App Engine. En particular:

  • No hay ningún directorio ~/.matplotlib . Sin embargo, existen ubicaciones alternativas para colocar el archivo de configuración matplotlibrc , como se describe anteriormente.
  • No se admiten backends interactivos ni elementos GUI.
  • Los backends EMF, Cairo y GDK no son compatibles.
  • 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 han deshabilitado 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 en False .
  • Se han desactivado todas las funciones que invocan comandos externos.
    • El uso de fontconfig ha sido deshabilitado. Las fuentes se encuentran mediante el mecanismo descrito anteriormente.
    • No se admite el uso de LaTeX para la representación de texto. Configurar text.usetex en True no funcionará.
    • No se admite el uso de un programa destilador PostScript externo. Configurar ps.usedistiller en ghostscript o xpdf no funcionará.
    • No se admite el uso de un programa de codificación de vídeo 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.
  • La función matplotlib.test ha sido deshabilitada.

¿Qué sigue?