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:
Crea un directorio para almacenar las 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 creaste en el paso anterior. Por ejemplo:pip install -t lib/ <library_name>
¿Usas Homebrew para Python en macOS?
Problemas de Homebrew
Si usas Homebrew para Python en macOS, es posible que surja una excepción cuando ejecutes
pip install -t
. Este problema está relacionado con un problema de instalación de Homebrew conocido (consultaNote on pip install --user
) de la configuración de Python que tiene Homebrew. Para solucionar este problema, crea un archivo~/.pydistutils.cfg
en tu directorio principal de forma temporal con el siguiente contenido:[install] prefix=
Asegúrate de quitar este archivo después de instalar paquetes para tu aplicación de App Engine, ya que evitará que puedas instalar paquetes fuera de este contexto.
Crea un archivo llamado
appengine_config.py
en la misma carpeta que tu archivoapp.yaml
.Edita el archivo
appengine_config.py
y proporciona tu directorio de bibliotecas al métodovendor.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 carpetalib
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 carpetalib
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 con la
biblioteca cliente de Cloud Storage.
Matplotlib permite la
personalización extensa
a través del 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:
- No hay directorio
~/.matplotlib
. Sin embargo, existen ubicaciones alternativas para colocar el archivo de configuraciónmatplotlibrc
, 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é. Entre 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 descargamatplotlib.cbook.get_sample_data
y los datos financieros que descargamatplotlib.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)
conasfileobj=False
, a menos queexamples.download
esté establecido enFalse
.
- Debido a que no hay almacenamiento en caché, no es posible llamar a
- 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
enTrue
no funcionará. - No se admite el uso de un programa de sintetización externo de PostScript. Establecer
ps.usedistiller
enghostscript
oxpdf
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 paquetematplotlib.animation
no es útil. - No se admiten la función
matplotlib.cbook.report_memory
ni la clasematplotlib.cbook.MemoryMonitor
.
- Se inhabilitó el uso de
- La función
matplotlib.test
se inhabilitó.
¿Qué sigue?
- Obtén más información sobre el entorno de ejecución de Python en App Engine.
- Revisa la referencia sobre las bibliotecas de terceros integradas.