Como processar dependências


Há duas maneiras de especificar dependências para o Cloud Functions criadas em Python: usando o arquivo requirements.txt do gerenciador de pacotes pip ou usando o empacotamento de dependências locais com a função.

A especificação de dependência que usa o padrão Pipfile/Pipfile.lock não é compatível. Seu projeto não deve incluir esses arquivos.

Como especificar dependências com pip

Dependências no Python são gerenciadas com pip e expressas em um arquivo de metadados chamado requirements.txt. O arquivo precisa estar no mesmo diretório que o arquivo main.py que contém o código da função.

Quando você implanta ou reimplanta a função, o Cloud Functions usa o pip para fazer o download e instalar a versão mais recente das dependências, conforme declarado no arquivo requirements.txt. O arquivo requirements.txt contém uma linha por pacote. Cada linha contém o nome do pacote e, como opção, a versão solicitada. Para mais detalhes, consulte a referência do requirements.txt.

Para evitar que seu build seja afetado por mudanças na versão de dependência, fixe os pacotes de dependência em uma versão específica.

A seguir, um exemplo de arquivo requirements.txt:

functions-framework
requests==2.20.0
numpy

O Functions Framework é uma dependência necessária para todas as funções. Embora o Cloud Functions o instale para você quando a função é criada, recomendamos incluí-lo como uma dependência explícita para maior clareza.

Se a função depende de dependências particulares, recomendamos que você espelhe functions-framework no registro particular. Inclua o functions-framework espelhado como uma dependência da sua função para evitar a instalação do pacote pela Internet pública.

Como empacotar dependências locais

Também é possível empacotar e implantar dependências junto com sua função. Essa abordagem é útil quando a dependência não está disponível por meio do gerenciador de pacotes pip ou o acesso à Internet do ambiente do Cloud Functions é restrito.

Por exemplo, é possível usar uma estrutura de diretório como a seguinte:

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

Você pode importar o código normalmente de localpackage usando a seguinte instrução import.

# Code in main.py
from localpackage import script

Observe que essa abordagem não executará nenhum arquivo setup.py. Os pacotes com esses arquivos ainda podem ser agrupados, mas podem não ser executados corretamente no Cloud Functions.