Como lidar com dependências


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

A especificação de dependência usando o padrão Pipfile/Pipfile.lock não é suportada. Seu projeto não deve incluir esses arquivos.

Especificando dependências com pip

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

Quando você implanta ou reimplanta sua função, o Cloud Functions usa pip para fazer download e instalar a versão mais recente de suas 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, opcionalmente, a versão solicitada. Para obter mais detalhes, consulte a referência requirements.txt .

Para evitar que sua compilação seja afetada por alterações de versão de dependência, considere fixar seus pacotes de dependência em uma versão específica.

A seguir está 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 em seu nome quando a função é criada, recomendamos incluí-lo como uma dependência explícita para maior clareza.

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

Empacotando dependências locais

Você também pode empacotar e implantar dependências junto com sua função. Essa abordagem será útil se sua dependência não estiver disponível por meio do gerenciador de pacotes pip ou se o acesso à Internet do ambiente do Cloud Functions for restrito.

Por exemplo, você pode usar uma estrutura de diretórios como a seguinte:

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

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

# Code in main.py
from localpackage import script

Observe que esta 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.