Os buildpacks suportam a configuração idiomática da linguagem através de variáveis de ambiente.
Especifique a versão do Python
Por predefinição, o buildpack do Python Runtime usa a versão estável mais recente do intérprete Python. Se a sua aplicação exigir uma versão específica, pode especificar uma incluindo um ficheiro .python-version no diretório raiz da aplicação.
3.14
Usar GOOGLE_PYTHON_VERSION
Também é possível especificar a versão do Python através da variável de ambiente GOOGLE_PYTHON_VERSION.
Se ambas as configurações estiverem definidas, o valor GOOGLE_PYTHON_VERSION tem
prioridade sobre o ficheiro .python-version. Por predefinição, quando o ficheiro .python-version e a variável do ambiente GOOGLE_PYTHON_VERSION não são especificados, é usada a versão LTS mais recente do Python.
Para configurar o buildpack para usar o Python 3.13 quando implementar a sua app:
pack build sample-python --builder=gcr.io/buildpacks/builder \
--env GOOGLE_PYTHON_VERSION="3.14.x"
Também pode usar um descritor de projeto project.toml para codificar a variável de ambiente juntamente com os ficheiros do projeto. Veja instruções sobre como
criar a aplicação com variáveis de ambiente.
Especifique dependências
Especifique as dependências da sua aplicação para as versões do Python suportadas através de qualquer uma das seguintes abordagens:
Use um ficheiro
requirements.txtno diretório raiz. Este ficheiro tem de estar no mesmo diretório que o ficheiromain.pyque contém o seu código-fonte. O ficheirorequirements.txtcontém uma linha por pacote. Cada linha contém o nome do pacote e, opcionalmente, a versão pedida. Para evitar que a compilação seja afetada por alterações à versão das dependências, considere afixar os pacotes de dependências a uma versão específica.Segue-se um exemplo de um ficheiro
requirements.txt:functions-framework requests==2.20.0 numpyUse um ficheiro
pyproject.tomlpara especificar dependências. Se gerir as dependências da sua aplicação num ficheiropyproject.tomlem vez do ficheirorequirements.txt, o buildpack do Python determina o gestor de pacotes com base na configuração que especificar no ficheiropyproject.toml. Para mais informações, consulte o artigo Implemente aplicações Python com um ficheiropyproject.toml.Se a sua aplicação usar o ficheiro
pyproject.tomle o ficheirorequirements.txt, o ficheirorequirements.txttem precedência.Segue-se um exemplo de um ficheiro
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"
Gestor de pacotes
Se gerir as suas dependências através de um requirements.txt file, o gestor de pacotes predefinido varia consoante a versão do Python que configurar.
Se usar um ficheiro pyproject.toml para gerir dependências em vez de um ficheiro requirements.txt, o buildpack do Python determina o gestor de pacotes com base nas definições de configuração no ficheiro pyproject.toml. O buildpack suporta os gestores de pacotes pip, uv e Poetry. Para mais informações, consulte o artigo Implemente aplicações Python com um ficheiro
pyproject.toml.
Python 3.14 e posteriores
A partir da versão 3.14 (pré-visualização) do Python e posteriores, o buildpack do Python usa o gestor de pacotes uv como o instalador predefinido para as dependências que especificar no ficheiro requirements.txt.
Para usar o pip como gestor de pacotes,
configure a variável de ambiente GOOGLE_PYTHON_PACKAGE_MANAGER="pip".
Python 3.13 e anteriores
Para a versão 3.13 e anteriores do Python, o buildpack do Python usa o gestor de pacotes pip para instalar as dependências que define no ficheiro requirements.txt.
Para usar uv (pré-visualização) como gestor de pacotes,
configure a variável de ambiente GOOGLE_PYTHON_PACKAGE_MANAGER="uv".
Configure o PIP
É possível configurar o comportamento do pip através de variáveis de ambiente:
pack build sample-python --builder=gcr.io/buildpacks/builder \
--env PIP_DEFAULT_TIMEOUT='60'
Dependências privadas do Artifact Registry
Um repositório Python do Artifact Registry
pode alojar dependências privadas para a sua função Python. Quando cria uma aplicação no Cloud Build, o buildpack do Python gera automaticamente credenciais do Artifact Registry para a conta de serviço do Cloud Build.
Só tem de incluir o URL do Artifact Registry no seu requirements.txt
sem gerar credenciais adicionais. Por exemplo:
--extra-index-url REPOSITORY_URL
sampleapp
Flask==0.10.1
google-cloud-storage
Ponto de entrada da aplicação
A secção seguinte descreve o ponto de entrada predefinido para o buildpack do Python.
Ponto de entrada para implementações de origem do Cloud Run
Esta funcionalidade só está disponível se implementar o seu código fonte no Cloud Run com o tempo de execução do Python. Esta funcionalidade
não é aplicável se estiver a criar a imagem do contentor diretamente com o comando
pack build fora do processo de implementação de origem do Cloud Run.
O Python buildpack suporta frameworks Web modernos, como FastAPI, Gradio e Streamlit.
Versão 3.12 e anteriores do Python
Se estiver a usar a versão 3.12 e anteriores do Python, o buildpack do Python usa o Gunicorn por predefinição como o servidor HTTP WSGI para a sua carga de trabalho. O buildpack do Python define o ponto de entrada predefinido como gunicorn -b :8080 main:app.
Versão 3.13 e posteriores do Python
Para a versão 3.13 e posteriores do Python, o buildpack do Python define o ponto de entrada predefinido para implementações de origem do Cloud Run com base na configuração do servidor Web ou da framework no seu ficheiro requirements.txt. Esta definição predefinida aplica-se apenas a implementações de origem de serviços do Cloud Run e não a funções do Cloud Run.
Quando implementa um serviço do Cloud Run a partir da origem usando o tempo de execução do Python, o buildpack determina a versão do Python e o ponto de entrada predefinido das seguintes formas:
Se não especificar uma versão do Python nos seus ficheiros de origem, o buildpack do Python define a predefinição para a versão do Python mais recente suportada. O buildpack determina o ponto de entrada predefinido com base no servidor Web ou na framework que configurou no ficheiro
requirements.txt.Se não especificar um servidor Web ou uma framework no ficheiro
requirements.txt, o buildpack do Python usa o Gunicorn como o servidor HTTP WSGI para a sua carga de trabalho por predefinição. O buildpack do Python define o ponto de entrada predefinido comogunicorn -b :8080 main:app.O buildpack do Python define o ponto de entrada predefinido com base na seguinte ordem de precedência, conforme definido no ficheiro
requirements.txt:gunicornuvicornfastapi[standard]gradiostreamlit
Configure o servidor Web ou a framework
Para cada configuração comum do Python no ficheiro requirements.txt, a tabela seguinte mostra os pontos de entrada predefinidos quando a implementação é feita no Cloud Run a partir da origem:
| Configuração principal | Ponto de entrada predefinido | Variáveis de 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 |
Para evitar falhas de implementação, use uma versão do Python suportada nos seus ficheiros de origem e especifique um servidor Web no ficheiro requirements.txt.
Em alternativa, também pode especificar o ponto de entrada executando o seguinte comando de implementação de origem:
gcloud run deploy SERVICE --source . --set-build-env-vars GOOGLE_ENTRYPOINT="ENTRYPOINT"
Substitua o seguinte:
- SERVICE: o nome do serviço para o qual quer fazer a implementação.
- ENTRYPOINT: o ponto de entrada predefinido que quer usar para o seu código fonte.
Se não conseguir implementar o código-fonte no Cloud Run ou encontrar erros nos registos, consulte o guia de resolução de problemas do Cloud Run.
Ponto de entrada para todas as outras implementações
O buildpack do Python usa o Gunicorn como o servidor HTTP WSGI predefinido para a sua carga de trabalho. As apps criadas com o buildpack do Python iniciam o processo gunicorn com as predefinições, semelhante à execução do seguinte comando:
gunicorn --bind :8080 main:app
Personalize o ponto de entrada da aplicação
Pode personalizar o comando de início das aplicações através de um Procfile ou de uma variável de ambiente. Pode ter de o fazer para personalizar as configurações do ponto de entrada predefinido.
Pode criar um Procfile com as suas definições personalizadas no diretório raiz.
Exemplo:
web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
Em alternativa, pode usar a variável de ambiente GOOGLE_ENTRYPOINT com o comando pack. Exemplo:
pack build sample-python \
--builder gcr.io/buildpacks/builder
--env "GOOGLE_ENTRYPOINT='gunicorn --bind :$PORT main:app'"
Variáveis de ambiente
O buildpack do Python suporta as seguintes variáveis de ambiente para personalizar o seu contentor
PIP_<key>
Consulte a documentação do pip.
Exemplo: PIP_DEFAULT_TIMEOUT=60 define --default-timeout=60 para comandos pip.
Implemente aplicações Python com um ficheiro pyproject.toml
Os buildpacks do Python suportam projetos que configura com o ficheiro pyproject.toml. Esta funcionalidade permite-lhe implementar aplicações que gere com o Poetry, o uv ou o pip diretamente no Cloud Run e nas funções do Cloud Run. Esta funcionalidade não está disponível no App Engine.
O buildpack do Python usa o ficheiro pyproject.toml apenas quando não existe um ficheiro requirements.txt no diretório raiz. Se a sua aplicação usar o ficheiro pyproject.toml e o ficheiro requirements.txt, o ficheiro requirements.txt tem precedência.
Configurações de buildpacks suportadas
Os buildpacks do Python suportam as seguintes configurações:
pip buildpack: instala as dependências diretamente a partir de
pyproject.tomlse detetar todas as seguintes condições:Um ficheiro
pyproject.tomlestá presente no diretório raiz e não configura ferramentas de alta precedência, como um ficheiropoetry.lock, uma secção[tool.poetry]ou um ficheirouv.lock.Definiu a variável de ambiente
GOOGLE_PYTHON_PACKAGE_MANAGERcomopip.
uv buildpack: suporta projetos Python que gere com o uv. Este buildpack é ativado se detetar alguma das seguintes condições:
- Estão presentes um ficheiro
uv.locke um ficheiropyproject.tomlna raiz do projeto. - Um ficheiro
pyproject.tomlestá presente na raiz do projeto e define a variável de ambienteGOOGLE_PYTHON_PACKAGE_MANAGERcomouv. - Um ficheiro
pyproject.tomlestá presente e não inclui outros ficheiros de bloqueio de alta precedência, comopoetry.lock,uv.lockou configurações como[tool.poetry], e não define a variável de ambienteGOOGLE_PYTHON_PACKAGE_MANAGER.
- Estão presentes um ficheiro
Poetry buildpack: suporta projetos Python que gere com o Poetry. Este buildpack é ativado se detetar alguma das seguintes condições:
- Um ficheiro
poetry.locke um ficheiropyproject.tomlestão presentes na raiz do projeto. - Está presente um ficheiro
pyproject.tomlna raiz do projeto e uma secção[tool.poetry]no ficheiropyproject.toml.
- Um ficheiro
Precedência do gestor de pacotes
Os buildpacks do Python determinam o gestor de pacotes predefinido com base na configuração pela seguinte ordem de precedência:
A precedência mais elevada é atribuída ao ficheiro
requirements.txt. Apenas se este ficheiro estiver presente, o buildpack do Python usa o gestor de pacotes predefinido para instalar dependências no passo de compilação. Se não existir um ficheirorequirements.txt, o processo de deteção avança para o passo seguinte.Em seguida, o buildpack verifica o ficheiro
pyproject.tomlpara um ficheiropoetry.lockou uma secção[tool.poetry]. Se for encontrado, o processo de compilação prossegue para usar o Poetry para instalar dependências.Se a configuração do Poetry não for detetada, o buildpack procura um ficheiro
uv.lock. Se for encontrado, o processo de compilação prossegue para usar o uv para instalar dependências.Se não existirem ficheiros de bloqueio, o buildpack verifica a variável de ambiente
GOOGLE_PYTHON_PACKAGE_MANAGERpara uma configuraçãopipouuv.Predefinição. Se não definir uma variável de ambiente e usar apenas um
pyproject.tomlficheiro sem uv ou Poetry, o buildpack usa o uv por predefinição para todas as versões do Python suportadas.
Ponto de entrada com um ficheiro pyproject.toml
Quando implementa uma aplicação com um ficheiro pyproject.toml em vez de usar um ficheiro requirements.txt, o buildpack do Python usa um método diferente para determinar o ponto de entrada. Para obter informações sobre a configuração de um ponto de entrada da aplicação com um ficheiro requirements.txt, consulte o artigo Ponto de entrada da aplicação.
O buildpack procura um ponto de entrada na seguinte ordem de precedência:
Se existir um
Procfileno diretório raiz ou configurar a variável de ambienteGOOGLE_ENTRYPOINT, estas configurações substituem sempre qualquer ponto de entrada determinado pelos scriptspyproject.toml.O buildpack do Python usa os scripts personalizados que configura nas secções
[tool.poetry.scripts]e[project.scripts]. Se configurar um script que incluastart, este é o seu ponto de entrada. Por exemplo,poetry run startouuv run start.Se não configurar um script
start, mas definir outro script, o script que definir é o ponto de entrada predefinido. Por exemplo,poetry run mycmdouuv run mycmd.
Ao contrário das compilações baseadas no requirements.txt, o buildpack do Python não instala automaticamente o gunicorn para projetos do pyproject.toml. Para usar o
gunicorn ou qualquer outro servidor, tem de o adicionar explicitamente às dependências no ficheiro pyproject.toml.
Se não configurar scripts
personalizados no ficheiro pyproject.toml, os buildpacks tentam
detetar frameworks comuns, como gunicorn, uvicorn ou fastapi, a partir das suas
dependências pyproject.toml e determinam um ponto de entrada predefinido.