Utilizzo delle librerie Python 2

Puoi utilizzare librerie di terze parti che sono Python puro senza estensione C, copiando la libreria nell'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 codice C estensioni. Se copiati nella directory dell'applicazione, vengono conteggiati ai fini del calcolo perché la libreria viene caricata in App Engine insieme all'applicazione le API nel tuo codice.

Copiare una raccolta di terze parti

Per utilizzare una libreria di terze parti non presente nell'elenco delle librerie integrate in bundle con il runtime:

  1. Crea una directory per archiviare le librerie di terze parti, ad esempio lib/.

    mkdir lib
    
  2. 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?

  3. Crea un file denominato appengine_config.py nella stessa cartella del tuo file app.yaml.

  4. Modifica il file appengine_config.py e fornisci la directory della raccolta al metodo vendor.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 lo stato attuale è la posizione in cui si trova la cartella lib. In alcuni casi, ad esempio per l'unità la directory di lavoro corrente può essere diversa. Per evitare errori, puoi indicare esplicitamente il percorso completo della cartella lib utilizzando:

    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 (per impostazione predefinita è la versione più recente):

Flask==0.10
Markdown==2.5.2
google-api-python-client

Per installare le librerie da un file dei requisiti, usa anche il flag -r al flag -t lib:

pip install -t lib -r requirements.txt

Utilizzo di una raccolta di terze parti integrata inclusa nel runtime

Se la libreria di terze parti è nell'elenco delle librerie integrate fornite in bundle con il runtime Python di App Engine, devi solo specificarla nella direttiva 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 integrate in bundle 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 localmente prima di poter essere utilizzate con il server di sviluppo locale:

Puoi utilizzare il comando pip per installare tutti questi pacchetti dal Python Package Index (PyPI).

sudo pip install lxml==2.3.5

A seconda della piattaforma, potrebbe essere necessario installare strumenti di assistenza alla creazione e origini Python per installare queste librerie.

  • Su Linux, il gestore dei pacchetti può fornire questi prerequisiti e spesso può fornire una versione predefinita della libreria.
  • Su Windows, in genere sono disponibili i programmi di installazione per le versioni precompilate.
  • 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 localmente 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 viene utilizzato solo per questi pacchetti binari in locale e non sarà reso disponibile dell'applicazione dopo 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 è una piattaforma completa framework di applicazioni web per Python. Offre uno stack completo di modelli componenti, tra cui invio, visualizzazioni, middleware e componenti di creazione di 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) sul tuo Django diverse applicazioni. Tuttavia, le applicazioni Django di terze parti che utilizzano i dati di Django , in particolare l'applicazione Admin di Django, non funzionano direttamente con App Engine.

La libreria di modelli Datastore (DB) è l'impostazione predefinita. Per utilizzare Django con l'API di archiviazione NDB, 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 gestito correttamente se questo middleware viene richiamato prima di questo middleware. Puoi scoprire di più sul middleware Django nel documentazione del progetto.

Per attivare 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 di il modulo delle impostazioni di Django, in genere 'settings', prima che i pacchetti vengano importati.

Se il modulo delle impostazioni di Django è diverso da settings.py, imposta DJANGO_SETTINGS_MODULE di conseguenza nel tuo File app.yaml:

env_variables:
  DJANGO_SETTINGS_MODULE: 'myapp.settings'

In alternativa, 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 vari 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 su matplotlib. Devi invece utilizzare pyplot.savefig() per scrivere i dati delle immagini nello stream di output, in un'istanza cStringIO.StringIO o in Google Cloud Storage utilizzando la libreria client di Cloud Storage.

Matplotlib consente una personalizzazione estesa 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 dell'applicazione.

Il valore predefinito backend è AGG, che consente di scrivere file di tutti i formati supportati: PNG (l'impostazione predefinita ), RAW, PS, PDF, SVG e SVGZ. Se rendi disponibile la libreria PIL aggiungendo PIL alla sezione libraries di app.yaml, il backend AGG eseguirà supporta automaticamente anche la scrittura di formati di immagini JPEG e TIFF.

Matplotlib viene fornito con una serie di font che sono disponibili automaticamente. Tu puoi usare caratteri personalizzati caricandoli in formato TTF insieme ai tuoi e impostando la variabile di ambiente TTFPATH sul percorso in cui rispetto alla directory dell'applicazione. Per ulteriori informazioni, consulta la documentazione di riferimento app.yaml.

Alcune funzionalità di matplotlib non sono supportate su App Engine. In particolare:

  • Nessuna directory ~/.matplotlib. Tuttavia, esistono posizioni alternative per posizionare il file di configurazione matplotlibrc, come descritto sopra.
  • I backend interattivi e gli elementi GUI non sono supportati.
  • I backend EMF, Cairo e GDK non sono supportati.
  • Non c'è memorizzazione nella cache, quindi diversi meccanismi ricalcoleranno o scaricare di nuovo i dati che normalmente verrebbero 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 da matplotlib.cbook.get_sample_data e i dati finanziari scaricati da matplotlib.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) con asfileobj=False, a meno che examples.download non sia impostato su False.
  • Tutte le funzionalità che richiamano comandi esterni sono state disattivate.
    • L'utilizzo di fontconfig è stato disattivato. I caratteri si trovano tramite meccanismo di attenzione descritto sopra.
    • L'utilizzo di LaTeX per il rendering del testo non è supportato. Impostazione di text.usetex a True non funzionerà.
    • L'utilizzo di un programma di distillatore PostScript esterno non è supportato. L'impostazione di ps.usedistiller su ghostscript o xpdf non funzionerà.
    • L'utilizzo di un programma di codifica video esterno non è supportato. La matplotlib.animation.Animation.save non funzionerà, pertanto il matplotlib.animation non è utile.
    • La matplotlib.cbook.report_memory e matplotlib.cbook.MemoryMonitor non sono supportati.
  • La funzione matplotlib.test è stata disattivata.

Passaggi successivi