I buildpack supportano la configurazione idiomatica del linguaggio tramite le variabili di ambiente.
Specificare la versione di Python
Per impostazione predefinita, il buildpack Python Runtime utilizza la versione stabile più recente dell'interprete Python. Se la tua applicazione richiede una versione specifica, puoi specificarne una includendo un file .python-version nella directory root dell'applicazione.
3.14
Utilizza GOOGLE_PYTHON_VERSION
È anche possibile specificare la versione di Python utilizzando la variabile di ambiente GOOGLE_PYTHON_VERSION.
Se sono impostate entrambe le configurazioni, il valore GOOGLE_PYTHON_VERSION ha la precedenza sul file .python-version. Per impostazione predefinita, quando non vengono specificati sia il file
.python-version sia la variabile di ambiente GOOGLE_PYTHON_VERSION, viene utilizzata l'ultima versione LTS di Python.
Per configurare il buildpack in modo che utilizzi Python 3.13 durante il deployment dell'app:
pack build sample-python --builder=gcr.io/buildpacks/builder \
--env GOOGLE_PYTHON_VERSION="3.14.x"
Puoi anche utilizzare un descrittore di progetto project.toml per codificare
la variabile di ambiente insieme ai file di progetto. Consulta le istruzioni per
creare l'applicazione con le variabili di ambiente.
Specifica le dipendenze
Specifica le dipendenze dell'applicazione per le versioni di Python supportate utilizzando uno dei seguenti approcci:
Utilizza un file
requirements.txtnella directory principale. Questo file deve trovarsi nella stessa directory del filemain.pyche contiene il codice sorgente. Il filerequirements.txtcontiene una riga per pacchetto. Ogni riga contiene il nome del pacchetto e, facoltativamente, la versione richiesta. 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 numpyUtilizza un file
pyproject.tomlper specificare le dipendenze. Se gestisci le dipendenze dell'applicazione in un filepyproject.tomlanziché nel filerequirements.txt, il buildpack Python determina il gestore di pacchetti in base alla configurazione specificata nel filepyproject.toml. Per maggiori informazioni, vedi Eseguire il deployment di applicazioni Python con un filepyproject.toml.Se la tua applicazione utilizza sia il file
pyproject.tomlsia il filerequirements.txt, il filerequirements.txtha la precedenza.Ecco un esempio di file
pyproject.toml:[project] name = "demo-app" version = "0.1.0" description = "" requires-python = ">=3.10" dependencies = [ "flask>=3.1.1", "gunicorn>=23.0.0", ] [build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta"
Gestore di pacchetti
Se gestisci le dipendenze utilizzando requirements.txt file, il gestore
di pacchetti predefinito varia in base alla versione di Python che configuri.
Se utilizzi un file pyproject.toml per gestire le dipendenze anziché un file requirements.txt, il buildpack Python determina il gestore di pacchetti in base alle impostazioni di configurazione nel file pyproject.toml. Il buildpack supporta i gestori di pacchetti pip, uv e Poetry. Per ulteriori informazioni, vedi Eseguire il deployment di applicazioni Python con un file
pyproject.toml.
Python 3.14 e versioni successive
A partire dalla versione 3.14 (anteprima) e successive di Python, il buildpack Python utilizza il gestore di pacchetti uv come programma di installazione predefinito per le dipendenze specificate nel file requirements.txt.
Per utilizzare pip come gestore dei pacchetti,
configura la variabile di ambiente GOOGLE_PYTHON_PACKAGE_MANAGER="pip".
Python 3.13 e precedenti
Per Python versione 3.13 e precedenti, il buildpack Python utilizza il gestore dei pacchetti pip per installare le dipendenze definite nel file requirements.txt.
Per utilizzare uv (anteprima) come gestore dei pacchetti,
configura la variabile di ambiente GOOGLE_PYTHON_PACKAGE_MANAGER="uv".
Configurare la funzionalità PIP
È possibile configurare il comportamento di pip utilizzando le variabili di ambiente:
pack build sample-python --builder=gcr.io/buildpacks/builder \
--env PIP_DEFAULT_TIMEOUT='60'
Dipendenze private di Artifact Registry
Un repository Python di Artifact Registry può ospitare le dipendenze private della tua funzione Python. Quando crei un'applicazione su Cloud Build, il buildpack Python genera automaticamente le credenziali di Artifact Registry per il service account Cloud Build.
Devi solo includere l'URL di Artifact Registry nel tuo file requirements.txt
senza generare credenziali aggiuntive. Ad esempio:
--extra-index-url REPOSITORY_URL
sampleapp
Flask==0.10.1
google-cloud-storage
Entry point dell'applicazione
La sezione seguente descrive il punto di ingresso predefinito per il buildpack Python.
Punto di ingresso per i deployment delle origini Cloud Run
Questa funzionalità è disponibile solo se esegui il deployment del codice sorgente su Cloud Run con il runtime Python. Questa funzionalità
non è applicabile se crei l'immagine container direttamente utilizzando
pack build al di fuori del processo di deployment dell'origine Cloud Run.
Il buildpack Python supporta framework web moderni come FastAPI, Gradio e Streamlit.
Python versione 3.12 e precedenti
Se utilizzi Python versione 3.12 e precedenti, il buildpack Python
utilizza per impostazione predefinita Gunicorn
come server HTTP WSGI per il tuo workload. Il buildpack Python imposta il punto di ingresso predefinito su gunicorn -b :8080 main:app.
Python 3.13 e versioni successive
Per Python versione 3.13 e successive, il buildpack Python
imposta il punto di ingresso predefinito per i deployment dell'origine Cloud Run in base alla configurazione del server web o del framework nel file
requirements.txt. Questa impostazione predefinita si applica solo ai deployment dell'origine del servizio Cloud Run, non a Cloud Run Functions.
Quando esegui il deployment di un servizio Cloud Run dall'origine utilizzando il runtime Python, il buildpack determina la versione di Python e il punto di ingresso predefinito nei seguenti modi:
Se non specifichi una versione di Python nei file sorgente, il buildpack Python imposta come predefinita l'ultima versione di Python supportata. Il buildpack determina il punto di ingresso predefinito in base al server web o al framework che hai configurato nel file
requirements.txt.Se non specifichi un server web o un framework nel file
requirements.txt, il buildpack Python utilizza per impostazione predefinita Gunicorn come server HTTP WSGI per il tuo carico di lavoro. Il buildpack Python imposta il punto di ingresso predefinito sugunicorn -b :8080 main:app.Il buildpack Python imposta il punto di ingresso predefinito in base al seguente ordine di precedenza, come definito nel file
requirements.txt:gunicornuvicornfastapi[standard]gradiostreamlit
Configura il server web o il framework
Per ogni configurazione Python comune nel file requirements.txt, la seguente tabella mostra i punti di ingresso predefiniti durante il deployment in Cloud Run dall'origine:
| Configurazione principale | Punto di ingresso predefinito | Variabili di ambiente |
|---|---|---|
gunicorn |
gunicorn -b :8080 main:app |
|
numpy |
gunicorn -b :8080 main:app |
|
fastapi uvicorn |
uvicorn main:app --host 0.0.0.0 --port 8080 |
|
fastapi[standard] |
uvicorn main:app --host 0.0.0.0 --port 8080 |
|
uvicorn gunicorn |
gunicorn -b :8080 main:app |
|
gradio |
python main.py |
GRADIO_SERVER_NAME=0.0.0.0 GRADIO_SERVER_PORT=8080 |
streamlit |
streamlit run main.py --server.address 0.0.0.0 --server.port 8080 |
Per evitare errori di deployment, utilizza una versione di Python
supportata nei file di origine e specifica un server web nel file requirements.txt.
In alternativa, puoi specificare il punto di ingresso eseguendo il seguente comando di deployment dell'origine:
gcloud run deploy SERVICE --source . --set-build-env-vars GOOGLE_ENTRYPOINT="ENTRYPOINT"
Sostituisci quanto segue:
- SERVICE: il nome del servizio di cui vuoi eseguire il deployment.
- ENTRYPOINT: il punto di ingresso predefinito che vuoi utilizzare per il codice sorgente.
Se non riesci a eseguire il deployment del codice sorgente su Cloud Run o a trovare errori nei log, consulta la Guida alla risoluzione dei problemi di Cloud Run.
Punto di accesso per tutti gli altri deployment
Il buildpack Python utilizza Gunicorn
come server HTTP WSGI predefinito per il tuo workload. Le app create con il buildpack Python avviano il processo gunicorn con le impostazioni predefinite, in modo simile all'esecuzione di:
gunicorn --bind :8080 main:app
Personalizzare il punto di ingresso dell'applicazione
Puoi personalizzare il comando di avvio delle applicazioni utilizzando un Procfile o una variabile di ambiente. Potresti doverlo fare per personalizzare le configurazioni predefinite dei punti di ingresso.
Puoi creare un file Procfile con le tue impostazioni personalizzate nella directory principale.
Esempio:
web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
In alternativa, puoi utilizzare la variabile di ambiente GOOGLE_ENTRYPOINT con il comando pack. Esempio:
pack build sample-python \
--builder gcr.io/buildpacks/builder
--env "GOOGLE_ENTRYPOINT='gunicorn --bind :$PORT main:app'"
Variabili di ambiente
Il buildpack Python supporta le seguenti variabili di ambiente per personalizzare il container
PIP_<key>
Consulta la documentazione di pip.
Esempio: PIP_DEFAULT_TIMEOUT=60 imposta --default-timeout=60 per i comandi pip.
Esegui il deployment di applicazioni Python con un file pyproject.toml
I buildpack Python supportano i progetti che configuri
con il file pyproject.toml. Questa funzionalità ti consente di eseguire il deployment
delle applicazioni che gestisci con Poetry, uv o pip direttamente su Cloud Run
e Cloud Run Functions. Questa funzionalità non è disponibile in App Engine.
Il buildpack Python utilizza il file pyproject.toml solo
se nella directory principale non è presente un file requirements.txt. Se la tua applicazione utilizza sia
il file pyproject.toml sia il file requirements.txt, il file requirements.txt
ha la precedenza.
Configurazioni dei buildpack supportate
I buildpack Python supportano le seguenti configurazioni:
pip buildpack: installa le dipendenze direttamente da
pyproject.tomlse rileva tutte le seguenti condizioni:Un file
pyproject.tomlè presente nella directory principale e non configuri strumenti con priorità elevata come un filepoetry.lock, una sezione[tool.poetry]o un fileuv.lock.Hai impostato la variabile di ambiente
GOOGLE_PYTHON_PACKAGE_MANAGERsupip.
Buildpack uv: supporta i progetti Python che gestisci con uv. Questo buildpack si attiva se rileva una delle seguenti condizioni:
- Nella directory root del progetto sono presenti un file
uv.locke un filepyproject.toml. - Un file
pyproject.tomlè presente nella radice del progetto e hai impostato la variabile di ambienteGOOGLE_PYTHON_PACKAGE_MANAGERsuuv. - È presente un file
pyproject.tomle non includi altri file di blocco con priorità elevata, comepoetry.lock,uv.locko configurazioni come[tool.poetry], e non imposti la variabile di ambienteGOOGLE_PYTHON_PACKAGE_MANAGER.
- Nella directory root del progetto sono presenti un file
Buildpack Poetry: supporta i progetti Python che gestisci con Poetry. Questo buildpack si attiva se rileva una delle seguenti condizioni:
- Un file
poetry.locke un filepyproject.tomlsono presenti nella directory principale del progetto. - Un file
pyproject.tomlè presente nella directory principale del progetto e una sezione[tool.poetry]è presente nel filepyproject.toml.
- Un file
Priorità del gestore di pacchetti
I buildpack Python determinano il gestore di pacchetti predefinito in base alla configurazione nel seguente ordine di precedenza:
La precedenza più alta viene data al file
requirements.txt. Solo se questo file è presente, il buildpack Python utilizza il gestore di pacchetti predefinito per installare le dipendenze nel passaggio di compilazione. Se un filerequirements.txtnon è presente, la procedura di rilevamento passa al passaggio successivo.Il buildpack controlla quindi il file
pyproject.tomlper un filepoetry.locko una sezione[tool.poetry]. Se viene trovato, il processo di compilazione procede utilizzando Poetry per installare le dipendenze.Se la configurazione di Poetry non viene rilevata, il buildpack cerca un file
uv.lock. Se viene trovato, il processo di compilazione procede utilizzando uv per installare le dipendenze.Se i file di blocco non sono presenti, il buildpack controlla la variabile di ambiente
GOOGLE_PYTHON_PACKAGE_MANAGERper una configurazionepipouv.Valore predefinito. Se non imposti una variabile di ambiente e utilizzi solo un file
pyproject.tomlsenza uv o Poetry, il buildpack utilizza per impostazione predefinita uv per tutte le versioni di Python supportate.
Punto di ingresso con un file pyproject.toml
Quando esegui il deployment di un'applicazione con un file pyproject.toml anziché utilizzare un file requirements.txt, il buildpack Python utilizza un metodo diverso per determinare il punto di ingresso. Per informazioni sulla configurazione di un punto di ingresso dell'applicazione con un file requirements.txt, vedi Punto di ingresso dell'applicazione.
Il buildpack cerca un punto di ingresso nel seguente ordine di precedenza:
Se nella directory principale esiste un file
Procfileo se configuri la variabile di ambienteGOOGLE_ENTRYPOINT, queste configurazioni sostituiscono sempre qualsiasi punto di ingresso determinato dagli scriptpyproject.toml.Il buildpack Python utilizza gli script personalizzati che configuri nelle sezioni
[tool.poetry.scripts]e[project.scripts]. Se configuri uno script che includestart, questo è il tuo punto di ingresso. Ad esempio,poetry run startouv run start.Se non configuri uno script
start, ma definisci un altro script, lo script che definisci è il punto di ingresso predefinito. Ad esempio,poetry run mycmdouv run mycmd.
A differenza delle build basate su requirements.txt, il buildpack Python
non installa automaticamente gunicorn per i progetti pyproject.toml. Per utilizzare
gunicorn o qualsiasi altro server, devi aggiungerlo esplicitamente alle dipendenze nel file pyproject.toml.
Se non configuri script
personalizzati nel file pyproject.toml, i buildpack tentano
di rilevare framework comuni, come gunicorn, uvicorn o fastapi dalle
dipendenze pyproject.toml e determinano un punto di ingresso predefinito.