Esistono due modi per specificare le dipendenze per le funzioni Cloud Run scritte in Python: utilizzando il file requirements.txt
del gestore di pacchetti pip o raggruppando le dipendenze locali insieme alla funzione.
La specifica delle dipendenze utilizzando lo standard Pipfile/Pipfile.lock non è supportata. Il progetto non deve includere questi file.
Functions Framework è una dipendenza obbligatoria per tutte le funzioni. Sebbene Cloud Run lo installi per tuo conto quando viene creata la funzione, ti consigliamo di includerlo come dipendenza esplicita.
Specificare le dipendenze con pip
Le dipendenze in Python vengono gestite con pip ed espresse in un file di metadati
chiamato
requirements.txt
.
Questo file deve trovarsi nella stessa directory del file main.py
che contiene il codice della funzione.
Quando esegui il deployment o il redeployment della funzione, Cloud Run
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 requirements.txt
riferimento.
Per evitare che la build sia interessata dalle modifiche alla versione delle dipendenze, valuta la possibilità di bloccare i pacchetti di dipendenze su una versione specifica.
Di seguito è riportato un esempio di file requirements.txt
:
functions-framework requests==2.20.0 numpy
Pacchetto di dipendenze locali
Puoi anche creare pacchetti ed eseguire il deployment delle dipendenze insieme alla funzione. Questo approccio è utile se la dipendenza non è disponibile utilizzando il gestore di pacchetti pip o se l'accesso a internet dell'ambiente Cloud Run è 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 l'istruzione
import
.
# Code in main.py from localpackage import script
Tieni presente che questo approccio non eseguirà alcun file setup.py
. I pacchetti con questi
file possono comunque essere raggruppati, ma potrebbero non essere eseguiti correttamente
nelle funzioni Cloud Run.
Dipendenze copiate
Le dipendenze copiate sono quelle la cui origine è inclusa direttamente
nel pacchetto di codice sorgente e ricompilate insieme al tuo codice.
Utilizza la variabile di ambiente di build GOOGLE_VENDOR_PIP_DEPENDENCIES
per creare dipendenze pip copiate ed evitare di installarle
durante il deployment.
Crea dipendenze copiate
Assicurati che python3 sia installato sul sistema di sviluppo.
Dichiara le dipendenze dell'applicazione in un file
requirements.txt
nella directory principale dell'albero di sviluppo.Dichiara Functions Framework come requisito includendo
functions-framework
su una riga separata nel filerequirements.txt
.Scarica le dipendenze della funzione nella directory locale. I passaggi per eseguire questa operazione dipendono dal fatto che la dipendenza sia un file wheel Python (*.whl) o un file tar (*.tar.gz).
Se la dipendenza è una ruota Python (*.whl), scaricala nella directory radice dell'albero di sviluppo con questo comando pip:
python3 -m pip download -r requirements.txt --only-binary=:all: \ -d DIRECTORY \ --python-version PYTHON_RUNTIME_VERSION \ --platform manylinux2014_x86_64 \ --implementation cp
Sostituisci:
- DIRECTORY: il nome della directory locale in cui eseguire il download.
- PYTHON_RUNTIME_VERSION: la versione di Python da utilizzare per
i controlli di compatibilità. Ad esempio,
311
per Python 3.11.
Questa versione deve corrispondere a uno dei runtime Python supportati.
La struttura di directory risultante dovrebbe essere simile alla seguente:
myfunction/ ├── main.py └── requirements.txt └── DIRECTORY ├── dependency1.whl └── dependency2.whl
Se la dipendenza è un file tar (*.tar.gz):
Se la dipendenza è scritta in Python, utilizza pip per scaricarla:
python3 -m pip download -r requirements.txt \ -d DIRECTORY
Se una dipendenza è costituita da codice scritto in C o C++, devi scaricarla e compilarla separatamente.
Esegui il deployment della funzione e delle relative dipendenze copiate:
gcloud functions deploy FUNCTION_NAME \ --runtime PYTHON_RUNTIME_NAME \ --set-build-env-vars GOOGLE_VENDOR_PIP_DEPENDENCIES=DIRECTORY
Sostituisci:
- FUNCTION_NAME: il nome della funzione che stai eseguendo il deployment.
- PYTHON_RUNTIME_NAME: il nome di uno dei runtime Python supportati per eseguire la funzione di cui è stato eseguito il deployment, ad esempio python311. Deve essere la stessa versione di runtime Python che hai utilizzato nel tuo ambiente di sviluppo locale.
- DIRECTORY: il nome della directory contenente le dipendenze copiate.
Per ulteriori dettagli sull'utilizzo dei buildpack, consulta Creare una funzione con i buildpack.
Utilizzare dipendenze private
Puoi utilizzare le dipendenze private da Artifact Registry o da altri repository.
Dipendenze private da Artifact Registry
Un repository Python di Artifact Registry può ospitare dipendenze private per la tua funzione Python. Quando esegui il deployment su Cloud Run, il processo di compilazione genera automaticamente le credenziali di Artifact Registry per il service account Cloud Build. Devi solo
includere l'URL di Artifact Registry in requirements.txt
senza
generare credenziali aggiuntive. Ad esempio:
--index-url REPOSITORY_URL
sampleapp
Flask==0.10.1
google-cloud-storage
Se la tua build richiede più repository, utilizza un repository virtuale Artifact Registry per controllare in modo sicuro l'ordine in cui pip esegue la ricerca nei repository.
Dipendenze private di altri repository
Le dipendenze vengono installate in un ambiente Cloud Build che non fornisce l'accesso alle chiavi SSH. I pacchetti ospitati in repository che richiedono l'autenticazione basata su SSH devono essere copiati 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 segue:
Copia la dipendenza in una directory locale:
pip install -t DIRECTORY DEPENDENCY
Aggiungi un file
__init__.py
vuoto alla directoryDIRECTORY
per trasformarlo in un modulo.Importa da questo modulo per utilizzare la dipendenza:
import DIRECTORY.DEPENDENCY
Pacchetti preinstallati
I seguenti pacchetti Python vengono installati automaticamente insieme alla tua
funzione durante il deployment. Se utilizzi uno di questi pacchetti nel codice della funzione, ti consigliamo di includere le seguenti versioni nel file requirements.txt
:
Python 3.8 e versioni successive
Python 3.7
* `pip` (latest version)
* `setuptools` (latest version)
* `wheel` (determined by product requirements)
Inoltre, il runtime Python include una serie di pacchetti di sistema nell'ambiente di esecuzione.