Specifica delle dipendenze in Python

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

La specifica della dipendenza che utilizza lo standard Pipfile/Pipfile.lock non è attualmente supportata. Il progetto non deve includere questi file.

Specifica delle dipendenze con pip

Le dipendenze in Python sono gestite con pip ed 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 il deployment della funzione, Cloud Functions scarica e installa dipendenze dichiarate nel file requirements.txt utilizzando pip.

Il file requirements.txt contiene una riga per pacchetto. Ogni riga contiene il nome del pacchetto e, facoltativamente, la versione richiesta. Per ulteriori dettagli, consulta il riferimento requirements.txt.

Di seguito è riportato un file requirements.txt di esempio:

requests==2.20.0
numpy

Pacchettizzazione delle dipendenze locali

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

Ad esempio, potresti 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 la seguente istruzione import.

# Code in main.py
from localpackage import script

Tieni presente che questo approccio non eseguirà file setup.py. I pacchetti con questi file possono comunque essere raggruppati, ma potrebbero non essere eseguiti correttamente su Cloud Functions.

Utilizzo delle dipendenze private

Dipendenze private da Artifact Registry

Un repository Python Artifact Registry può ospitare dipendenze private per la funzione Python. Durante il deployment su Cloud Functions, il processo di generazione genererà automaticamente le credenziali di Artifact Registry per l'account di servizio Cloud Build. Devi includere l'URL di Artifact Registry solo nel tuo requirements.txt senza generare credenziali aggiuntive. Ad esempio:

--extra-index-url REPOSITORY_URL
sampleapp
Flask==0.10.1
google-cloud-storage

Dipendenze private da altri repository

Le dipendenze sono installate in un ambiente Cloud Build che non fornisce accesso alle chiavi SSH. I pacchetti ospitati in repository che richiedono l'autenticazione basata su SSH devono essere fornitori e caricati insieme al codice del progetto, come descritto nella sezione precedente.

Puoi utilizzare il comando pip install con il flag -t DIRECTORY per copiare le dipendenze private in una directory locale prima di eseguire il deployment dell'app, come descritto di seguito:

  1. Copia la dipendenza in una directory locale:

    pip install -t DIRECTORY DEPENDENCY
  2. Aggiungi un file __init__.py vuoto alla directory DIRECTORY per convertirlo in un modulo.

  3. Importa da questo modulo per utilizzare la dipendenza:

    import DIRECTORY.DEPENDENCY

Pacchetti preinstallati

I seguenti pacchetti Python vengono installati automaticamente insieme alla funzione durante il deployment. Se utilizzi uno qualsiasi di questi pacchetti nel codice della funzione, ti consigliamo di includere le seguenti versioni nel file requirements.txt:

Python 3.7

aiohttp==3.6.2
async-timeout==3.0.1
attrs==19.3.0
cachetools==4.1.1
certifi==2020.6.20
chardet==3.0.4
click==7.1.2
Flask==1.1.2
google-api-core==1.21.0
google-api-python-client==1.10.0
google-auth==1.19.2
google-auth-httplib2==0.0.4
google-cloud-core==1.3.0
google-cloud-trace==0.23.0
googleapis-common-protos==1.52.0
grpcio==1.30.0
httplib2==0.18.1
idna==2.9
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
multidict==4.7.6
opencensus==0.7.9
opencensus-context==0.1.1
pip==20.1.1
protobuf==3.12.2
pyasn1==0.4.8
pyasn1-modules==0.2.8
pytz==2020.1
PyYAML==5.3.1
requests==2.24.0
rsa==4.6
setuptools==47.3.1
six==1.15.0
uritemplate==3.0.1
urllib3==1.25.9
Werkzeug==1.0.1
wheel==0.34.2
wrapt==1.12.1
yarl==1.5.1

Python 3.8

cachetools==4.2.2
certifi==2021.5.30
charset-normalizer==2.0.6
click==7.1.2
cloudevents==1.2.0
deprecation==2.1.0
flask==1.1.2
functions-framework==2.2.1
google-auth==2.2.0
gunicorn==20.0.4
idna==3.2
itsdangerous==1.1.0
jinja2==2.11.2
markupsafe==1.1.1
packaging==21.0
pathtools==0.1.2
pip==21.1.1
pyasn1-modules==0.2.8
pyasn1==0.4.8
pyparsing==2.4.7
requests==2.26.0
rsa==4.7.2
setuptools==58.1.0
urllib3==1.26.7
watchdog==1.0.2
werkzeug==1.0.1

Python 3.9

click==7.1.2
cloudevents==1.2.0
deprecation==2.1.0
Flask==1.1.2
functions-framework==2.2.1
gunicorn==20.0.4
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
pathtools==0.1.2
watchdog==1.0.2
Werkzeug==1.0.1

Inoltre, nell'ambiente di esecuzione Python include un numero di pacchetti di sistema. Se la funzione utilizza una dipendenza che richiede un pacchetto di sistema non incluso nell'elenco, puoi richiedere un pacchetto.