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 :
Cree un directorio para almacenar sus bibliotecas de terceros, como
lib/
.mkdir lib
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?
Problemas caseros
Si utiliza Homebrew Python en macOS, es posible que encuentre una excepción al ejecutar
pip install -t
. Este problema está relacionado con un problema conocido de instalación de Homebrew (consulteNote on pip install --user
) con la configuración de Python de Homebrew. Para solucionar este problema, cree temporalmente un archivo~/.pydistutils.cfg
en su directorio de inicio con lo siguiente:[install] prefix=
Asegúrese de eliminar este archivo después de instalar paquetes para su aplicación App Engine, ya que evitará que pueda instalar paquetes fuera de este contexto.
Cree un archivo llamado
appengine_config.py
en la misma carpeta que su archivoapp.yaml
.Edite el archivo
appengine_config.py
y proporcione el directorio de su 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 supone 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, puede pasar explícitamente la ruta completa a la carpetalib
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ónmatplotlibrc
, 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 pormatplotlib.cbook.get_sample_data
y 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 enFalse
.
- Como no hay almacenamiento en caché, no es posible llamar a
- 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
enTrue
no funcionará. - No se admite el uso de un programa destilador PostScript externo. Configurar
ps.usedistiller
enghostscript
oxpdf
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 es útil. - La función
matplotlib.cbook.report_memory
y la clasematplotlib.cbook.MemoryMonitor
no son compatibles.
- El uso de
- La función
matplotlib.test
ha sido deshabilitada.
¿Qué sigue?
- Obtenga más información sobre el entorno de ejecución de Python de App Engine .
- Revise la referencia de bibliotecas integradas de terceros .