Podeu fer servir les biblioteques de tercers que són de codi exclusiu de Python sense extensions C. Per a això, copia la biblioteca al directori de l’aplicació . Si la biblioteca de tercers ja està integrada i empaquetada amb l’entorn d’execució, pots usar-la sense copiar-la en el teu app.
Les biblioteques de tercers s’han d’implementar com a codi exclusiu de Python sense extensions C. Si es copien en el directori de la teva aplicació, es consideren per a les quotes d’arxius, ja que la biblioteca es puja a App Engine juntament amb el codi de l’aplicació.
Còpia una biblioteca de tercers
per utilitzar una biblioteca de tercers que no està en la llista de les biblioteques integrades i empaquetades amb l’entorn d’execució, fes el següent:
-
Crea un directori per emmagatzemar les biblioteques de tercers, com
lib/
.mkdir lib
-
Usa pip (versió 6 o posterior) amb la marca
-t <directory>
per copiar les biblioteques a la carpeta que vas crear en el pas anterior. Per exemple:pip install -t lib/ <library_name>
Utilitzes Homebrew per Python en macOS?
Problemes de Homebrew
Si fas servir Homebrew per Python en macOS, és possible que sorgeixi una excepció quan executis
pip install -t
. Aquest problema està relacionat amb un problema d’instal·lació de Homebrew conegut (consultaNote on pip install --user
) de la configuració de Python que té Homebrew.Para fer això, crea un arxiu~/.pydistutils.cfg
en el teu directori principal de forma temporal amb el següent contingut:prefix=
Assegura’t de treure aquest arxiu després d’instal·lar paquets per al teu aplicació de App Engine, ja que evitarà que puguis instal·lar paquets fora d’aquest context.
d’acord -
Crea un fitxer anomenat
appengine_config.py
a la mateixa carpeta que el fitxerapp.yaml
. -
Edita el fitxer
appengine_config.py
i proporciona teu directori de biblioteques a mètodevendor.add()
.# appengine_config.pyfrom google.appengine.ext import vendor# Add any libraries install in the "lib" folder.vendor.add('lib')
a l’arxiu
appengine_config.py
anterior, se suposa que la carpetalib
s’ubica al directori de treball sota actual. En alguns casos, com les proves d’unitats, el directori de treball actual pot ser diferent. Per evitar errors, pots passar de forma explícita la ruta completa de la carpetalib
amb el següent:vendor.add(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib'))
Utilitza arxius de requisits pip
amb biblioteques copiades
pip
pot llegir una llista de biblioteques que s’han d’instal·lar des d’un arxiu, conegut com a arxiu de requisits. Els arxius de requisits faciliten la configuració d’un entorn de desenvolupament nou per la teva app, i s’actualitzen a les versions de biblioteques noves.
Un arxiu de requisits és un arxiu de text amb una línia per biblioteca que enumera el nom de l’paquet i, de manera opcional, la versió per al paquet (el valor per defecte és l’última versió):
Flask==0.10Markdown==2.5.2google-api-python-client
per a instal·lar les biblioteques a partir d’un arxiu de requisits, fa servir la marca -r
més de la marca -t lib
:
pip install -t lib -r requirements.txt
Usa una biblioteca de tercers integrada i empaquetada amb l’entorn d’execució
Si la biblioteca de tercers és a la llista de biblioteques integrades i empaquetades amb l’entorn d’execució de Python en App cerca, només has de especificar-la a la directiva biblioteques en el app.yaml
. Per exemple:
libraries:- name: PIL version: "1.1.7"- name: webob version: "1.1.1"
App Engine proporciona de forma automàtica les biblioteques sol·licitades durant la implementació.
Utilitza biblioteques integrades i empaquetades amb el servidor de desenvolupament local
Moltes de les biblioteques integrades que proporciona l’entorn d’execució estan disponibles de forma automàtica per al servidor de desenvolupament local. Per instal·lar algunes biblioteques de forma local, has d’executar gcloud components install app-engine-python-extras
.Si el servidor de desenvolupament local detecta que es necessita aquest component, et demanarà que ho instal·lis. Les següents biblioteques integrades s’han d’instal·lar de forma local perquè puguis usar-les amb el servidor de desenvolupament local:
- lxml
- matplotlib
- MySQLdb
- NumPy
- PIL
- crcmod
- pycrypto
- grpcio
- protobuf
Podeu fer servir la comanda pip per instal·lar tots aquests paquets des de l’índex de paquets de Python (PyPI).
sudo pip install lxml==2.3.5
Segons la teva plataforma, és possible que hagis de instal·lar eines d’assistència de compilació i fonts de Python per instal·lar aquestes biblioteques.
- a Linux, l’administrador de paquets pot proporcionar aquests requisits i, sovint, pot oferir una versió ja compilada de la biblioteca.
- En Windows, els instal·ladors de les versions ja compilades solen estar disponibles.
- En macOS, es requereixen les eines de línia de comandaments de Xcode per compilar alguns paquets.
el servidor de desenvolupament fa servir la versió de el paquet que vas instal·lar de forma local, sense importar la versió especificada en app.yaml
. Si ho desitja, configura un virtualenv perquè el teu projecte proporcioni la versió exacta de l’paquet. Tingues en compte que virtualenv només s’usa per a aquests paquets binaris de manera local i no estarà disponible per al teu aplicació una vegada que estigui implementada. Per afegir biblioteques de tercers addicionals, fa servir el mètode que es descriu en instal·la una biblioteca.
Utilitza Django al servidor de desenvolupament local
Django és un framework d’aplicacions web amb totes les funcions per Python. Proporciona una pila completa de components intercanviables, com a despatx, vistes, middleware, components de plantilles i molts altres.
La interfície de modelatge de dades de Django no és compatible amb el magatzem de dades de App Engine. Pots fer servir les biblioteques de modelatge de dades de App de cerca (db o NDB) en les teves aplicacions de Django.Sin això, les aplicacions de Django de tercers que fan servir la interfície de modelatge de dades de Django, en particular l’aplicació d’administrador de Django , podrien no funcionar directament amb App Engine.
la biblioteca de modelatge de Datastore (DB) és l’opció per defecte. Per utilitzar Django amb l’API d’emmagatzematge de NDB, afegeix 'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware',
a l’entrada MIDDLEWARE_CLASSES
en el teu arxiu settings.py
de Django.Se recomana inserir davant de qualsevol altra classe de middleware, ja que algun altre middleware podria trucar a el magatzem de dades, i les trucades no es manejaran de manera correcta si s’invoca aquest middleware abans que este.Puedes obtenir més informació sobre el middleware de Django en la documentació de el projecte.
Per habilitar Django en el teu app, especifica l’aplicació WSGI i la biblioteca de Django en app.yaml
:
...handlers:- url: /.* script: main.app # a WSGI application in the main module's global scopelibraries:- name: django version: "1.4"
La variable d’entorn DJANGO_SETTINGS_MODULE
ha de configurar-se amb el nom del teu mòdul de configuració de Django, que sol ser 'settings'
, abans que s’importin els paquets.
Si el mòdul de configuració de Django no és settings.py
, configura la variable d’entorn segons correspongui a l’arxiu app.yaml
:
env_variables: DJANGO_SETTINGS_MODULE: 'myapp.settings'
També pots fer-ho en el teu codi de Python:
import os# specify the name of your settings moduleos.environ = 'myapp.settings'import django.core.handlers.wsgiapp = django.core.handlers.wsgi.WSGIHandler()
Fes servir matplotlib
al servidor de desenvolupament local
matplotlib és una biblioteca de traçat que produeix gràfics i figures en una varietat de formats d’imatge. En App de cerca, les maneres interactius de matplotlib no són compatibles, i hi ha altres funcions que tampoc estan disponibles. Això vol dir que no pots fer servir pyplot.show()
, com se suggereix en diversos instructius de matplotlib. En canvi, has de fer servir pyplot.savefig()
per escriure les dades d’imatge en la transmissió de sortida, una instància cStringIO.StringIO
o Google Cloud Storage mitjançant la biblioteca client de Cloud Storage.
matplotlib permet la personalització extensa mitjançant l’ús de l’arxiu de configuració matplotlibrc
, que ha de col·locar-se al directori de nivell superior de l’aplicació. Com a alternativa, pots establir la variable d’entorn MATPLOTLIBRC
en una ruta d’accés relativa a directori de la teva aplicació.
El backend defecte és AGG, que permet escriure arxius de tots els formats compatibles: PNG (el format per defecte), RAW, PS, PDF, SVG i SVGZ. Si permets que la biblioteca PIL estigui disponible mitjançant l’addició d’PIL
a la secció libraries
de app.yaml
, el backend AGG també s’admetrà de forma automàtica l’escriptura de formats d’imatge JPEG i TIFF.
matplotlib compta amb diverses fonts que estan disponibles de forma automàtica. Podeu fer servir fonts personalitzades si les puges en format TTF juntament amb l’aplicació i configures la variable d’entorn TTFPATH
com la ruta en què es troben, en relació amb el directori de l’aplicació. Per a més informació, consulta la referència de app.yaml
.
Diverses funcions de matplotlib no són compatibles amb App Engine.En particular, considera el següent:
- No hi ha directori
~/.matplotlib
. No obstant això, hi ha ubicacions alternatives per col·locar l’arxiu de configuraciómatplotlibrc
, com es va descriure abans. - Els backends interactius i els elements de la GUI no són compatibles.
- No s’admeten els backends de EMF, Cairo i GDK.
- No hi ha emmagatzematge en memòria cau i, per tant, diversos mecanismes tornaran a calcular o descarregar les dades que amb normalitat es s’emmagatzemarien en memòria cau. Entro els mecanismes específics d’emmagatzematge en memòria cau que es van inhabilitar, s’inclouen les dades de fonts que calcula
matplotlib.font_manager.FontManager.findfont
, les dades de mostra que descarregamatplotlib.cbook.get_sample_data
i les dades financeres que descarregamatplotlib.finance.fetch_historical_yahoo
.- Com que no hi ha emmagatzematge en memòria cau, no és possible trucar a
(http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data)
ambasfileobj=False
, llevat queexamples.download
estigui establert enFalse
.
- Com que no hi ha emmagatzematge en memòria cau, no és possible trucar a
- Es van inhabilitar totes les funcions que invoquen ordres externes.
- Es va inhabilitar l’ús de
fontconfig
. Les fonts es troben en el mecanisme descrit abans. - No s’admet l’ús de LaTeX per a la renderització de text. Establir
text.usetex
enTrue
no funcionarà. - No s’admet l’ús d’un programa de sintetització PostScript extern. Establir
ps.usedistiller
enghostscript
oxpdf
no funcionarà. - No s’admet l’ús d’un programa de codificació de vídeo extern. El mètode
matplotlib.animation.Animation.save
no funcionarà i, per tant, el paquetmatplotlib.animation
no és útil. - No s’admeten ni la funció
matplotlib.cbook.report_memory
ni la classematplotlib.cbook.MemoryMonitor
.
- Es va inhabilitar l’ús de
- la funció
matplotlib.test
es va inhabilitar.