Puoi utilizzare librerie di terze parti che sono codice Python puro senza estensioni C copiando la libreria nella directory dell'applicazione. Se la libreria di terze parti è già integrata, inclusa nel runtime, puoi utilizzarla senza copiarla nella tua app.
Le librerie di terze parti devono essere implementate come codice Python puro senza estensioni C. Se vengono copiate nella directory dell'applicazione, vengono conteggiate ai fini delle quote di file perché la libreria viene caricata su App Engine insieme al codice dell'applicazione.
Copiare una libreria di terze parti
Per utilizzare una libreria di terze parti che non è presente nell'elenco delle librerie integrate incluse nel runtime:
Crea una directory per archiviare le librerie di terze parti, ad esempio
lib/.mkdir libUtilizza pip (versione 6 o successiva) con il flag
-t <directory>per copiare le librerie nella cartella che hai creato nel passaggio precedente. Ad esempio:pip install -t lib/ <library_name>Utilizzi Homebrew Python su macOS?
Problemi con Homebrew
Se utilizzi Homebrew Python su macOS, potresti riscontrare un'eccezione durante l'esecuzione di
pip install -t. Questo problema è correlato a un problema di installazione di Homebrew noto (vediNote on pip install --user) con la configurazione di Python di Homebrew. Per risolvere il problema, crea temporaneamente un file~/.pydistutils.cfgnella tua home directory con i seguenti contenuti:[install] prefix=Assicurati di rimuovere questo file dopo aver installato i pacchetti per l'applicazione App Engine, in quanto ti impedirà di installare pacchetti al di fuori di questo contesto.
Crea un file denominato
appengine_config.pynella stessa cartella del fileapp.yaml.Modifica il file
appengine_config.pye 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.pyriportato sopra presuppone che la directory di lavoro corrente sia quella in cui si trova la cartellalib. In alcuni casi, ad esempio nei test unitari, la directory di lavoro corrente può essere diversa. Per evitare errori, puoi trasmettere esplicitamente il percorso completo alla cartellalibutilizzando:vendor.add(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib'))
Utilizzo dei file dei requisiti pip 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 la tua app e l'upgrade alle nuove versioni delle librerie.
Un file dei requisiti è un file di testo con una riga per libreria, che elenca il nome del pacchetto e, facoltativamente, la versione del pacchetto (impostata per impostazione predefinita sull'ultima versione):
Flask==0.10
Markdown==2.5.2
google-api-python-client
Per installare le librerie da un file requirements, utilizza il flag -r oltre al flag -t lib:
pip install -t lib -r requirements.txt
Utilizzo di una libreria di terze parti integrata inclusa nel runtime
Se la libreria di terze parti è presente nell'elenco delle
librerie integrate incluse nel runtime Python di App Engine,
devi specificarla solo nella direttiva
libraries
nel file 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 delle librerie integrate in bundle con il server di sviluppo locale
Molte delle librerie integrate fornite dal runtime sono disponibili
automaticamente per il server di sviluppo locale. Per installare localmente alcune librerie, devi eseguire gcloud components install app-engine-python-extras.
Se il server di sviluppo locale rileva che questo componente è necessario, ti verrà chiesto di installarlo. Prima di poterle utilizzare con il server di sviluppo locale, è necessario installare localmente le seguenti librerie integrate:
Puoi utilizzare il comando pip per installare tutti questi pacchetti da Python Package Index (PyPI).
sudo pip install lxml==2.3.5
A seconda della piattaforma, potrebbe essere necessario installare strumenti di supporto alla build e origini Python per installare queste librerie.
- Su Linux, il gestore di pacchetti può fornire questi prerequisiti e spesso può fornire una versione precompilata della libreria.
- Su Windows sono generalmente disponibili programmi di installazione per le versioni precompilate.
- Su macOS, gli strumenti a riga di comando Xcode sono necessari per creare alcuni pacchetti.
Il server di sviluppo utilizza la versione del pacchetto installata
localmente, indipendentemente 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 localmente e non sarà reso 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 per applicazioni web completo per Python. Fornisce uno stack completo di componenti intercambiabili, tra cui componenti di dispatch, visualizzazioni, middleware e modelli, e molti altri.
L'interfaccia di modellazione dei dati di Django non è compatibile con il datastore App Engine. Puoi utilizzare le librerie di modellazione dei dati di App Engine (db o ndb) nelle tue 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 modellazione Datastore (DB) è quella predefinita. Per utilizzare Django con l'API NDB Storage, aggiungi
'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware',
alla voce MIDDLEWARE_CLASSES nel file
settings.py di Django.
È consigliabile inserirlo prima di qualsiasi altra classe middleware,
poiché alcuni altri middleware potrebbero effettuare chiamate al datastore e queste non verranno
gestite correttamente se il middleware viene richiamato prima di questo.
Per scoprire 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 Django, in genere 'settings', prima dell'importazione dei 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 nel server di sviluppo locale
Matplotlib è una libreria di tracciamento
che produce grafici e figure in una varietà di formati di immagine. Su App Engine,
le modalità interattive di matplotlib non sono supportate e non sono disponibili anche
diverse altre funzionalità. Ciò significa che non puoi utilizzare
pyplot.show()
come suggerito da molti tutorial di matplotlib. Devi invece utilizzare
pyplot.savefig()
per scrivere i dati delle immagini nel flusso di output, un'istanza
cStringIO.StringIO
o Google Cloud Storage utilizzando la
libreria client di Cloud Storage.
Matplotlib consente un'ampia personalizzazione tramite l'utilizzo del file di configurazione matplotlibrc, che deve essere inserito nella directory di primo livello dell'applicazione. In alternativa, puoi impostare la variabile di ambiente
MATPLOTLIBRC su un percorso relativo alla directory
della tua 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 dei formati di immagine JPEG e TIFF.
Matplotlib include una serie di caratteri disponibili automaticamente. Puoi utilizzare caratteri personalizzati caricandoli in formato TTF insieme all'applicazione e impostando la variabile di ambiente TTFPATH sul percorso in cui si trovano, rispetto alla directory dell'applicazione. Per saperne di più, consulta il app.yaml
riferimento.
Un certo numero di funzionalità di matplotlib non sono supportate su App Engine. In particolare:
- Non esiste una directory
~/.matplotlib. Tuttavia, esistono posizioni alternative in cui inserire il file di configurazionematplotlibrc, come descritto sopra. - I backend interattivi e gli elementi della GUI non sono supportati.
- I backend EMF, Cairo e GDK non sono supportati.
- Non è presente alcuna memorizzazione nella cache, pertanto diversi meccanismi ricalcoleranno o
scaricheranno nuovamente i dati che normalmente vengono memorizzati nella cache. I meccanismi di memorizzazione nella cache specifici che
sono stati disattivati includono i dati dei caratteri calcolati da
matplotlib.font_manager.FontManager.findfont, i dati di esempio scaricati damatplotlib.cbook.get_sample_datae i dati finanziari scaricati damatplotlib.finance.fetch_historical_yahoo.- Poiché non è presente 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=Falsea meno cheexamples.downloadnon sia impostato suFalse.
- Poiché non è presente la memorizzazione nella cache, non è possibile chiamare
- Tutte le funzionalità che richiamano comandi esterni sono state disattivate.
- L'utilizzo di
fontconfigè stato disattivato. I caratteri vengono trovati tramite il meccanismo descritto sopra. - L'utilizzo di LaTeX per il rendering del testo non è supportato. L'impostazione di
text.usetexsuTruenon funzionerà. - L'utilizzo di un programma di distillazione PostScript esterno non è supportato. L'impostazione
ps.usedistillersughostscriptoxpdfnon funzionerà. - L'utilizzo di un programma di codifica video esterno non è supportato. Il metodo
matplotlib.animation.Animation.savenon funzionerà e, pertanto, il pacchettomatplotlib.animationnon è utile. - La funzione
matplotlib.cbook.report_memorye la classematplotlib.cbook.MemoryMonitornon sono supportate.
- L'utilizzo di
- La funzione
matplotlib.testè stata disattivata.
Passaggi successivi
- Scopri di più sull'ambiente di runtime Python di App Engine.
- Consulta il riferimento alle librerie di terze parti integrate.