Gestione delle dipendenze


Esistono due modi per specificare le dipendenze per Cloud Functions scritte in Python: utilizzando il file requirements.txt del gestore di pacchetti pip o includendo le dipendenze locali nel pacchetto della funzione.

La specifica delle dipendenze mediante lo standard Pipfile/Pipfile.lock non è supportata. Il tuo progetto non deve includere questi file.

Specifica delle dipendenze con pip

Le dipendenze in Python vengono gestite con pip e sono espresse in un file di metadati denominato requirements.txt. Questo file deve trovarsi nella stessa directory del file main.py che contiene il codice della funzione.

Quando esegui o riesegui il deployment della funzione, Cloud Functions utilizza pip per scaricare e installare l'ultima versione delle dipendenze dichiarate nel file requirements.txt. Il file requirements.txt contiene una riga per pacchetto. Ogni riga contiene il nome del pacchetto e, facoltativamente, la versione richiesta. Per maggiori dettagli, consulta il relativo requirements.txtriferimento.

Per evitare che la build sia interessata dalle modifiche alla versione delle dipendenze, ti consigliamo di bloccare i pacchetti di dipendenze su una versione specifica.

Ecco un esempio di file requirements.txt:

functions-framework
requests==2.20.0
numpy

Pacchettizzazione delle dipendenze locali

Puoi anche creare pacchetti delle dipendenze ed eseguirne il deployment insieme alla funzione. Questo approccio è utile se la dipendenza non è disponibile tramite il gestore di pacchetti pip o se l'accesso a internet dell'ambiente Cloud Functions è limitato.

Ad esempio, puoi utilizzare una struttura di directory come la seguente:

myfunction/
├── main.py
└── localpackage/
    ├── __init__.py
    └── script.py

Puoi quindi importare il codice come di consueto da localpackage utilizzando l'istruzione import.

# Code in main.py
from localpackage import script

Tieni presente che con questo approccio non viene eseguito alcun file setup.py. I pacchetti con questi file possono comunque essere raggruppati in bundle, ma potrebbero non essere eseguiti correttamente su Cloud Functions.