Puedes usar bibliotecas de terceros que sean código Python puro sin extensiones de C copiando la biblioteca en el directorio de tu aplicación. Si la biblioteca de terceros ya está integrada, incluida en el tiempo de ejecución, puedes usarla sin copiarla en tu aplicación.
Las bibliotecas de terceros deben implementarse como código Python puro sin extensiones de C. Si se copian en el directorio de tu aplicación, se tienen en cuenta para las cuotas de archivos, ya que la biblioteca se sube a App Engine junto con el código de tu aplicación.
Copiar una biblioteca de terceros
Para usar una biblioteca de terceros que no esté en la lista de bibliotecas integradas incluidas en el tiempo de ejecución, sigue estos pasos:
Crea un directorio para almacenar tus bibliotecas de terceros, como
lib/
.mkdir lib
Usa pip (versión 6 o posterior) con la marca
-t <directory>
para copiar las bibliotecas en la carpeta que has creado en el paso anterior. Por ejemplo:pip install -t lib/ <library_name>
¿Usas Python de Homebrew en macOS?
Problemas con Homebrew
Si usas Homebrew Python en macOS, es posible que se produzca una excepción al ejecutar
pip install -t
. Este problema está relacionado con un problema de instalación de Homebrew conocido (consultaNote on pip install --user
) con la configuración de Python de Homebrew. Para solucionar este problema, crea temporalmente un archivo~/.pydistutils.cfg
en tu directorio principal con el siguiente contenido:[install] prefix=
No olvides eliminar este archivo después de instalar los paquetes de tu aplicación App Engine, ya que te impedirá instalar paquetes fuera de este contexto.
Crea un archivo llamado
appengine_config.py
en la misma carpeta que el archivoapp.yaml
.Edita el archivo
appengine_config.py
y proporciona el directorio de tu biblioteca al métodovendor.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 presupone que el directorio de trabajo actual es donde se encuentra la carpetalib
. En algunos casos, como en las pruebas unitarias, el directorio de trabajo actual puede ser diferente. Para evitar errores, puedes introducir explícitamente la ruta completa a la carpetalib
mediante: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 que se van a 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 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, en el que se indica el nombre del paquete y, opcionalmente, la versión del paquete (la más reciente de forma predeterminada):
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
Usar una biblioteca de terceros integrada incluida en el tiempo de ejecución
Si la biblioteca de terceros está en la lista de bibliotecas integradas incluidas en el entorno de ejecución de Python de App Engine, solo tienes que especificarla en la directiva libraries del archivo 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.
Usar bibliotecas empaquetadas integradas con el servidor de desarrollo local
Muchas de las bibliotecas integradas que proporciona el tiempo de ejecución están disponibles automáticamente en 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, te pedirá que lo instales. Las siguientes bibliotecas integradas deben instalarse localmente para poder 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
En función de tu plataforma, es posible que tengas que instalar herramientas de asistencia para compilaciones y fuentes de Python para instalar estas bibliotecas.
- En Linux, el gestor de paquetes puede proporcionar estos requisitos previos y, a menudo, una versión precompilada de la biblioteca.
- En Windows, suelen estar disponibles los instaladores de versiones prediseñadas.
- En macOS, se necesitan las herramientas de línea de comandos de Xcode para compilar algunos paquetes.
El servidor de desarrollo usa la versión del paquete que has instalado localmente, independientemente de la versión especificada en app.yaml
. Si quieres, configura un virtualenv para tu proyecto y así proporcionar la versión exacta del paquete. Ten en cuenta que el entorno virtual solo se usa para estos paquetes binarios de forma local y no estará disponible para tu aplicación una vez que se haya implementado. Para añadir bibliotecas de terceros adicionales, usa el método descrito en Instalar una biblioteca.
Usar 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 componentes de envío, vistas, middleware y plantillas, entre 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 usen la interfaz de modelado de datos de Django, sobre todo la aplicación Admin de Django, no funcionen directamente con App Engine.
La biblioteca de modelado de Datastore (DB) es la predeterminada. Para usar Django con la API de almacenamiento NDB, añade 'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware',
a la entrada MIDDLEWARE_CLASSES
en el archivo settings.py
de Django.
Es recomendable insertarlo antes de cualquier otra clase de middleware, ya que algunos otros middlewares pueden hacer llamadas al almacén de datos y no se gestionarán correctamente si se invoca ese middleware antes que este.
Puedes consultar más información sobre el middleware de Django en la documentación del proyecto.
Para habilitar Django en tu aplicación, especifica 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 tener el nombre de tu módulo de ajustes de Django, normalmente 'settings'
, antes de importar los paquetes.
Si tu módulo de ajustes de Django es distinto de settings.py
, define la variable de entorno DJANGO_SETTINGS_MODULE
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()
Usar matplotlib
en el servidor de desarrollo local
Matplotlib es una biblioteca de gráficos que genera gráficos y figuras en varios formatos de imagen. En App Engine, no se admiten los modos interactivos de matplotlib y tampoco están disponibles otras funciones. Esto significa que no puedes usar
pyplot.show()
como sugieren muchos tutoriales de matplotlib. En su lugar, debes usar pyplot.savefig()
para escribir datos de imagen en el flujo de salida, una instancia de cStringIO.StringIO
o Google Cloud Storage mediante la biblioteca de 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. También puedes asignar a la variable de entorno MATPLOTLIBRC
una ruta relativa al directorio de tu 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 pones a disposición la biblioteca PIL añadiendo PIL
a la sección libraries
de app.yaml
, 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 subiéndolas en formato TTF junto con tu aplicación y definiendo 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 app.yaml
referencia.
Algunas funciones de matplotlib no son compatibles con App Engine. En particular:
- No hay ningún directorio
~/.matplotlib
. Sin embargo, hay otras ubicaciones para colocar el archivo de configuraciónmatplotlibrc
, como se ha descrito anteriormente. - No se admiten back-ends interactivos ni elementos de interfaz gráfica de usuario.
- No se admiten los back-ends EMF, Cairo y GDK.
- No se utiliza el almacenamiento en caché y, por lo tanto, varios mecanismos volverán a calcular o descargar datos que normalmente se almacenarían en caché. Entre los mecanismos de almacenamiento en caché específicos que se han inhabilitado se incluyen los datos de fuentes calculados por
matplotlib.font_manager.FontManager.findfont
, los datos de muestra descargados pormatplotlib.cbook.get_sample_data
y los datos financieros descargados pormatplotlib.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)
conasfileobj=False
a menos queexamples.download
esté configurado comoFalse
.
- Como no hay almacenamiento en caché, no es posible llamar a
- Se han inhabilitado todas las funciones que invocan comandos externos.
- Se ha inhabilitado el uso de
fontconfig
. Las fuentes se encuentran mediante el mecanismo descrito anteriormente. - No se admite el uso de LaTeX para el renderizado de texto. Si asignas el valor
text.usetex
aTrue
, no funcionará. - No se admite el uso de un programa de destilación PostScript externo. Si asignas el valor
ghostscript
oxpdf
aps.usedistiller
, 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 paquetematplotlib.animation
no será útil. - No se admiten la función
matplotlib.cbook.report_memory
ni la clasematplotlib.cbook.MemoryMonitor
.
- Se ha inhabilitado el uso de
- La función
matplotlib.test
se ha inhabilitado.
Siguientes pasos
- Consulta más información sobre el entorno de ejecución de Python de App Engine.
- Consulta la referencia de bibliotecas de terceros integradas.