Puoi utilizzare librerie di terze parti costituite da puro codice Python senza estensioni C, copiandole nella directory dell'applicazione. Se la libreria di terze parti è già integrata e in bundle con il runtime, puoi utilizzarla senza copiarla nell'app.
Le librerie di terze parti devono essere implementate come codice Python puro senza estensioni C. Se copiati nella directory dell'applicazione, incidono sulle quote dei file perché la libreria viene caricata in App Engine insieme al codice dell'applicazione.
Copia di una raccolta di terze parti
Per utilizzare una libreria di terze parti non inclusa nell'elenco delle librerie integrate in bundle con il runtime:
Crea una directory per archiviare le tue librerie di terze parti, ad esempio
lib/
.mkdir lib
Utilizza pip (versione 6 o successiva) con il flag
-t <directory>
per copiare le librerie nella cartella creata nel passaggio precedente. Ad esempio:pip install -t lib/ <library_name>
Utilizzi Homebrew Python su macOS?
Problemi con la produzione di birra in casa
Se utilizzi Homebrew Python su macOS, potresti riscontrare un'eccezione durante l'esecuzione di
pip install -t
. Questo problema è correlato a un problema noto di installazione di Homebrew (vediNote on pip install --user
) con la configurazione Python di Homebrew. Per risolvere questo problema, crea temporaneamente un file~/.pydistutils.cfg
nella tua home directory con il seguente codice:[install] prefix=
Assicurati di rimuovere questo file dopo aver installato i pacchetti per l'applicazione App Engine, per evitare di installare pacchetti al di fuori di questo contesto.
Crea un file denominato
appengine_config.py
nella stessa cartella del fileapp.yaml
.Modifica il file
appengine_config.py
e fornisci la directory della libreria al metodovendor.add()
.# appengine_config.py from google.appengine.ext import vendor # Add any libraries install in the "lib" folder. vendor.add('lib')
Il file
appengine_config.py
riportato sopra presuppone che la directory di lavoro corrente sia la posizione della cartellalib
. In alcuni casi, ad esempio in caso di test delle unità, la directory di lavoro attuale può essere diversa. Per evitare errori, puoi passare esplicitamente il percorso completo alla cartellalib
utilizzando:vendor.add(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib'))
Utilizzo di pip
file dei requisiti con le librerie copiate
pip
può leggere un elenco di librerie da installare da un file, noto come file dei requisiti. I file dei requisiti semplificano la configurazione di un nuovo ambiente di sviluppo per l'app e l'upgrade a nuove versioni delle librerie.
Un file dei requisiti è un file di testo con una riga per libreria, in cui sono elencati il nome del pacchetto e, facoltativamente, la versione del pacchetto (l'impostazione predefinita è la più recente):
Flask==0.10
Markdown==2.5.2
google-api-python-client
Per installare le librerie da un file dei requisiti, utilizza il flag -r
oltre
al flag -t lib
:
pip install -t lib -r requirements.txt
Utilizzo di una libreria di terze parti integrata in bundle con il runtime
Se la libreria di terze parti è nell'elenco delle librerie integrate nel runtime Python di App Engine, devi solo specificarla nell'istruzione libraries in app.yaml
, ad esempio:
libraries:
- name: PIL
version: "1.1.7"
- name: webob
version: "1.1.1"
App Engine fornisce automaticamente le librerie richieste durante il deployment.
Utilizzo di librerie in bundle integrate con il server di sviluppo locale
Molte delle librerie integrate fornite dal runtime sono automaticamente disponibili per il server di sviluppo locale. Per installare alcune librerie
in locale, devi eseguire gcloud components install app-engine-python-extras
.
Se il server di sviluppo locale rileva che questo componente è necessario, ti chiederà di installarlo. Le seguenti librerie integrate devono essere installate in locale prima di poterle utilizzare con il server di sviluppo locale:
Puoi utilizzare il comando pip per installare tutti questi pacchetti dall'indice dei pacchetti Python (PyPI).
sudo pip install lxml==2.3.5
A seconda della piattaforma, per installare queste librerie potrebbe essere necessario installare strumenti di supporto alle build e origini Python.
- Su Linux, il gestore di pacchetti può fornire questi prerequisiti e spesso fornisce una versione predefinita della libreria.
- Su Windows, sono in genere disponibili programmi di installazione per le versioni predefinite.
- Su macOS, per creare alcuni pacchetti sono necessari gli strumenti a riga di comando Xcode.
Il server di sviluppo utilizza la versione del pacchetto installata in locale, a prescindere dalla versione specificata in app.yaml
. Se vuoi,
configura un virtualenv
per il tuo progetto per fornire la versione esatta del pacchetto. Tieni presente che virtualenv viene utilizzato solo per questi pacchetti binari in locale e non sarà disponibile per la tua applicazione una volta eseguito il deployment. Per aggiungere altre librerie di terze parti, utilizza il metodo descritto in Installazione di una libreria.
Utilizzo di Django nel server di sviluppo locale
Django è un framework completo di applicazioni web per Python. Fornisce uno stack completo di componenti intercambiabili, tra cui componenti di invio, visualizzazioni, middleware, modelli e molti altri.
L'interfaccia di modellazione dei dati di Django non è compatibile con il datastore di App Engine. Puoi utilizzare le librerie di modellazione dei dati di App Engine (db o ndb) nelle applicazioni Django. Tuttavia, le applicazioni Django di terze parti che utilizzano l'interfaccia di modellazione dei dati di Django, in particolare l'applicazione di amministrazione di Django, potrebbero non funzionare direttamente con App Engine.
La libreria di modelli Datastore (DB) è l'impostazione predefinita. Per utilizzare invece Django con l'API NDB Storage, aggiungi 'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware',
alla voce MIDDLEWARE_CLASSES
nel file settings.py
di Django.
È una buona idea inserirlo prima di qualsiasi altra classe middleware, poiché alcuni altri middleware potrebbero effettuare chiamate al datastore e queste non saranno gestite correttamente se il middleware viene richiamato prima di questo middleware.
Per saperne di più sul middleware Django, consulta la documentazione del progetto.
Per abilitare Django nella tua app, specifica l'applicazione WSGI e la libreria Django in
app.yaml
:
...
handlers:
- url: /.*
script: main.app # a WSGI application in the main module's global scope
libraries:
- name: django
version: "1.4"
La variabile di ambiente DJANGO_SETTINGS_MODULE
deve essere impostata sul nome del modulo delle impostazioni di Django, in genere 'settings'
, prima di importare i pacchetti.
Se il modulo delle impostazioni di Django è diverso da settings.py
, imposta la variabile di ambiente DJANGO_SETTINGS_MODULE
di conseguenza nel file app.yaml
:
env_variables:
DJANGO_SETTINGS_MODULE: 'myapp.settings'
Oppure, nel codice 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()
Utilizzo di matplotlib
sul server di sviluppo locale
Matplotlib è una libreria di tracciamento che produce grafici e figure in vari formati di immagine. In App Engine, le modalità interattive di matplotlib non sono supportate e una serie di altre funzionalità non sono disponibili. Ciò significa che non puoi utilizzare
pyplot.show()
come suggeriscono molti tutorial matplotlib. Utilizza invece pyplot.savefig()
per scrivere dati immagine nel flusso di output, in un'istanza cStringIO.StringIO
o in Google Cloud Storage utilizzando la libreria client di Cloud Storage.
Matplotlib consente un'ampia personalizzazione tramite l'uso del file di configurazione matplotlibrc
, che deve essere posizionato nella directory di primo livello dell'applicazione. In alternativa, puoi impostare la variabile di ambiente MATPLOTLIBRC
su un percorso relativo alla directory dell'applicazione.
Il backend predefinito è AGG, che consente di scrivere file di tutti i formati supportati: PNG (il formato predefinito), RAW, PS, PDF, SVG e SVGZ. Se rendi disponibile la libreria PIL aggiungendo PIL
alla sezione libraries
di app.yaml
, il backend AGG supporterà automaticamente anche la scrittura di formati di immagine JPEG e TIFF.
Matplotlib include una serie di caratteri che sono disponibili automaticamente. Puoi utilizzare caratteri personalizzati caricandoli in formato TTF insieme alla tua applicazione e impostando la variabile di ambiente TTFPATH
sul percorso in cui si trovano, in relazione alla directory dell'applicazione. Per ulteriori informazioni, consulta il riferimento app.yaml
.
Alcune funzionalità di matplotlib non sono supportate su App Engine. In particolare:
- Non esiste una directory
~/.matplotlib
. Tuttavia, sono disponibili posizioni alternative in cui inserire il file di configurazionematplotlibrc
, come descritto sopra. - I backend interattivi e gli elementi GUI non sono supportati.
- I backend EMF, Cairo e GDK non sono supportati.
- Non viene eseguita la memorizzazione nella cache, pertanto una serie di meccanismi ricalcola o scarica nuovamente i dati che normalmente verrebbero memorizzati nella cache. I meccanismi di memorizzazione nella cache specifici
che sono stati disattivati includono i dati sui caratteri calcolati da
matplotlib.font_manager.FontManager.findfont
, i dati di esempio scaricati damatplotlib.cbook.get_sample_data
e i dati finanziari scaricati damatplotlib.finance.fetch_historical_yahoo
.- Poiché non esiste la memorizzazione nella cache, non è possibile chiamare
[matplotlib.cbook.get_sample_data](http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data)
conasfileobj=False
a meno cheexamples.download
non sia impostato suFalse
.
- Poiché non esiste la memorizzazione nella cache, non è possibile chiamare
- Tutte le funzionalità che richiamano comandi esterni sono state disabilitate.
- L'utilizzo di
fontconfig
è stato disattivato. I caratteri si trovano attraverso il meccanismo descritto sopra. - L'utilizzo di LaTeX per il rendering del testo non è supportato. L'impostazione di
text.usetex
suTrue
non funzionerà. - L'utilizzo di un programma distiller PostScript esterno non è supportato. L'impostazione di
ps.usedistiller
sughostscript
oxpdf
non funzionerà. - L'utilizzo di un programma di codifica video esterno non è supportato. Il metodo
matplotlib.animation.Animation.save
non funzionerà e, di conseguenza, il pacchettomatplotlib.animation
non è utile. - La funzione
matplotlib.cbook.report_memory
e la classematplotlib.cbook.MemoryMonitor
non sono supportate.
- L'utilizzo di
- La funzione
matplotlib.test
è stata disabilitata.
Passaggi successivi
- Scopri di più sull'ambiente di runtime Python di App Engine.
- Consulta il riferimento sulle librerie di terze parti integrate.