Especifique dependências em Python

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.txt no diretório raiz. Este ficheiro tem de estar no mesmo diretório que o ficheiro main.py que contém o seu código-fonte. O ficheiro requirements.txt conté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
    numpy
    
  • Use um ficheiro pyproject.toml para especificar dependências. Se gerir as dependências da sua aplicação num ficheiro pyproject.toml em vez do ficheiro requirements.txt, o buildpack do Python determina o gestor de pacotes com base na configuração que especificar no ficheiro pyproject.toml. Para mais informações, consulte o artigo Implemente aplicações Python com um ficheiro pyproject.toml.

    Se a sua aplicação usar o ficheiro pyproject.toml e o ficheiro requirements.txt, o ficheiro requirements.txt tem 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"
      
  • Empacote as dependências locais juntamente com a sua função.

    A especificação de dependências através da norma Pipfile/Pipfile.lock não é suportada. O seu projeto não deve incluir estes ficheiros.

    Se usar um ficheiro requirements.txt para gerir dependências, o Cloud Run instala o Functions Framework em seu nome quando cria uma função. No entanto, recomendamos que inclua o Functions Framework como uma dependência explícita para evitar discrepâncias.

    Quando usa um ficheiro pyproject.toml, tem de incluir o Functions Framework como uma dependência, porque o Cloud Run não o instala em seu nome.

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".

Execute o comando gcloud run deploy para definir a variável de ambiente do gestor de pacotes como pip:

gcloud run deploy SERVICE --source . \
  --set-build-env-vars=GOOGLE_PYTHON_PACKAGE_MANAGER=pip

Substitua SERVICE pelo nome do seu serviço do Cloud Run.

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".

Execute o comando gcloud beta run deploy para definir a variável de ambiente do gestor de pacotes como uv:

gcloud beta run deploy SERVICE --source . \
  --set-build-env-vars=GOOGLE_PYTHON_PACKAGE_MANAGER=uv

Substitua SERVICE pelo nome do seu serviço do Cloud Run.

Empacote dependências locais

Empacote e implemente dependências juntamente com a sua função. Esta abordagem é útil se a sua dependência não estiver disponível quando usa um gestor de pacotes suportado ou se o acesso à Internet do seu ambiente do Cloud Run estiver restrito.

Também pode usar um ficheiro requirements.txt para especificar dependências adicionais que não foram incluídas no pacote juntamente com a função. Por exemplo, pode usar a seguinte estrutura de diretórios:

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

Importe o código de localpackage através da seguinte declaração import:

# code in main.py
from localpackage import script

Esta abordagem não executa ficheiros setup.py. Pode agrupar os pacotes com esses ficheiros, mas o pacote pode não ser executado corretamente nas funções do Cloud Run.

Dependências copiadas

As dependências copiadas são dependências cuja origem está incluída diretamente no pacote de código-fonte e são recompiladas juntamente com o seu próprio código. Use a variável de ambiente de compilação GOOGLE_VENDOR_PIP_DEPENDENCIES para criar dependências pip copiadas e evitar instalá-las durante a implementação.

Crie dependências copiadas

  1. Certifique-se de que o python3 está instalado no seu sistema de desenvolvimento.

  2. Declare as dependências da sua aplicação num ficheiro requirements.txt no diretório raiz da sua árvore de desenvolvimento.

  3. Declare o Functions Framework como um requisito incluindo functions-framework numa linha separada no ficheiro requirements.txt.

  4. Transfira as dependências da sua função para o diretório local. Os passos para o fazer dependem de a dependência ser um ficheiro Python wheel (*.whl) ou um ficheiro tar (*.tar.gz).

    1. Se a dependência for um wheel do Python (*.whl), transfira-o para o diretório raiz da sua estrutura de desenvolvimento com este 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
      

      Substitua o seguinte:

      • DIRECTORY: o nome do diretório local para o qual transferir.
      • PYTHON_RUNTIME_VERSION: a versão do Python a usar para verificações de compatibilidade. Por exemplo, 314 para Python 3.14.
        Esta versão tem de corresponder a um dos tempos de execução do Python suportados.

      A estrutura de diretórios resultante deve ter o seguinte aspeto:

      myfunction/
      ├── main.py
      └── requirements.txt
      └── DIRECTORY
         ├── dependency1.whl
         └── dependency2.whl
      

    2. Se a dependência for um ficheiro tar (*.tar.gz):

      1. Se a dependência estiver escrita em Python, use o pip para a transferir:

        python3 -m pip download -r requirements.txt \
           -d DIRECTORY
        
      2. Se uma dependência consistir em código escrito em C ou C++, transfira e compile o código separadamente.

  5. Implemente a função e as respetivas dependências copiadas:

    gcloud functions deploy FUNCTION_NAME \
      --runtime PYTHON_RUNTIME_NAME \
      --set-build-env-vars GOOGLE_VENDOR_PIP_DEPENDENCIES=DIRECTORY
    

    Substitua o seguinte:

    • FUNCTION_NAME: o nome da função que está a implementar.
    • PYTHON_RUNTIME_NAME: o nome de um dos tempos de execução do Python suportados para executar a função implementada, por exemplo, python311. Tem de ser a mesma versão de tempo de execução do Python que usou no seu ambiente de desenvolvimento local.
    • DIRECTORY: o nome do diretório que contém as suas dependências copiadas.

Para ver mais detalhes sobre a utilização de buildpacks, consulte o artigo Crie uma função com buildpacks.

Use dependências privadas

Pode usar dependências privadas do Artifact Registry ou de outros repositórios.

Dependências privadas do Artifact Registry

Um repositório Python do Artifact Registry aloja dependências privadas para a sua função Python. Quando implementa no Cloud Run, o processo de compilação gera automaticamente credenciais do Artifact Registry para a conta de serviço do Cloud Build. Inclua o URL do Artifact Registry no seu requirements.txt sem gerar credenciais adicionais. Por exemplo:

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

Se a sua compilação precisar de vários repositórios, use um repositório virtual do Artifact Registry para controlar com segurança a ordem em que o pip pesquisa os seus repositórios.

Dependências privadas de outros repositórios

Os buildpacks instalam dependências num ambiente do Cloud Build que não oferece acesso a chaves SSH. Copie os pacotes alojados em repositórios que requerem autenticação baseada em SSH e carregue os pacotes com o código do seu projeto.

Use o comando pip install com a flag -t DIRECTORY para copiar dependências privadas para um diretório local antes de implementar a sua app, da seguinte forma:

  1. Copie a dependência para um diretório local:
    pip install -t DIRECTORY DEPENDENCY
  2. Adicione um ficheiro __init__.py vazio ao diretório DIRECTORY para o transformar num módulo.
  3. Importe deste módulo para usar a sua dependência:
    import DIRECTORY.DEPENDENCY

Pacotes pré-instalados

O buildpack do Python instala os seguintes pacotes Python quando implementa a sua função. Se estiver a usar algum destes pacotes no código da função, inclua as seguintes versões no ficheiro requirements.txt:

Para evitar problemas com as atualizações da versão de dependência, afixe o pacote a uma versão específica.

anyio==4.5.2
blinker==1.8.2
click==8.1.8
cloudevents==1.11.0
deprecation==2.1.0
exceptiongroup==1.3.0
Flask==3.0.3
functions-framework==3.9.1
gunicorn==23.0.0
h11==0.16.0
idna==3.10
importlib_metadata==8.5.0
itsdangerous==2.2.0
Jinja2==3.1.6
MarkupSafe==2.1.5
packaging==25.0
sniffio==1.3.1
# Install starlette 0.44.0 for Python 3.8
starlette==0.44.0; python_version == '3.8'
# Install starlette 0.49.1 for Python versions greater than 3.8
starlette==0.49.1; python_version > '3.8'
typing_extensions==4.13.2
uvicorn==0.33.0
uvicorn-worker==0.2.0
watchdog==4.0.2
Werkzeug==3.0.6
zipp==3.20.2

O buildpack do Python instala os seguintes pacotes fixados numa versão específica:

  • pip (versão mais recente)
  • setuptools (versão mais recente)
  • wheel (determinado pelos requisitos dos produtos)

O tempo de execução do Python também inclui vários pacotes do sistema no ambiente de execução.