Há duas maneiras de especificar dependências para funções do Cloud Run
escritas em Python: usando o arquivo requirements.txt
do gerenciador de pacotes
pip ou empacotando 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.
O Functions Framework é uma dependência necessária para todas as funções. Embora o Cloud Run o instale em seu nome quando a função é criada, recomendamos que você o inclua como uma dependência explícita.
Especificar dependências com o 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 Run
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
Empacotar dependências locais
Também é possível empacotar e implantar dependências junto com sua função. Essa abordagem é útil se a dependência não estiver disponível usando o gerenciador de pacotes pip ou se o acesso à Internet do ambiente do Cloud Run for 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 nas
funções do Cloud Run.
Dependências copiadas
Dependências copiadas são aquelas em que a origem é incluída diretamente
no pacote de código-fonte e recriada com seu próprio código.
Use a variável de ambiente de build GOOGLE_VENDOR_PIP_DEPENDENCIES
para criar dependências pip copiadas e evitar a instalação delas
durante a implantação.
Criar dependências copiadas
Verifique se python3 está instalado no sistema de desenvolvimento.
Declare as dependências do aplicativo em um arquivo
requirements.txt
no diretório raiz da árvore de desenvolvimento.Declare o Functions Framework como um requisito incluindo
functions-framework
em uma linha separada no arquivorequirements.txt
.Faça o download das dependências da função para o diretório local. As etapas para fazer isso dependem do tipo de arquivo de dependência: um arquivo wheel (*.whl) do Python ou um arquivo tar (*.tar.gz).
Se a dependência for um wheel do Python (*.whl), faça o download dela no diretório raiz da árvore 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:
- DIRECTORY: o nome do diretório local para o download.
- PYTHON_RUNTIME_VERSION: a versão do Python a ser usada para
verificações de compatibilidade. Por exemplo,
311
para Python 3.11.
Essa versão precisa corresponder a um dos ambientes de execução Python compatíveis.
A estrutura de diretórios resultante será semelhante a esta:
myfunction/ ├── main.py └── requirements.txt └── DIRECTORY ├── dependency1.whl └── dependency2.whl
Se a dependência for um arquivo tar (*.tar.gz):
Se a dependência estiver escrita em Python, use o pip para fazer o download dela:
python3 -m pip download -r requirements.txt \ -d DIRECTORY
Se uma dependência consistir em códigos escritos em C ou C++, faça o download dela e a compile separadamente.
Implante a função e as dependências copiadas:
gcloud functions deploy FUNCTION_NAME \ --runtime PYTHON_RUNTIME_NAME \ --set-build-env-vars GOOGLE_VENDOR_PIP_DEPENDENCIES=DIRECTORY
Substitua:
- FUNCTION_NAME: o nome da função que você está implantando.
- PYTHON_RUNTIME_NAME: o nome de um dos ambientes de execução Python compatíveis para executar a função implantada, por exemplo, python311. Precisa ser a mesma versão do ambiente de execução do Python usada no ambiente de desenvolvimento local.
- DIRECTORY: o nome do diretório que contém as dependências copiadas.
Para mais detalhes sobre o uso de buildpacks, consulte Criar uma função com buildpacks.
Usar dependências particulares
É possível usar dependências particulares do Artifact Registry ou de outros repositórios.
Dependências particulares do Artifact Registry
Um repositório Python do Artifact Registry
pode hospedar dependências particulares para sua função Python. Ao implantar no Cloud Run,
o processo de build gera automaticamente credenciais do Artifact Registry para a
conta de serviço do Cloud Build. Só é preciso incluir o URL do Artifact Registry no requirements.txt
sem gerar outras credenciais. Exemplo:
--index-url REPOSITORY_URL
sampleapp
Flask==0.10.1
google-cloud-storage
Se o build precisar de vários repositórios, use um repositório virtual do Artifact Registry para controlar com segurança a ordem de pesquisa do pip nos repositórios.
Dependências particulares de outros repositórios
As dependências são instaladas em um ambiente Cloud Build, que não fornece acesso a chaves SSH. Os pacotes hospedados em repositórios que exigem autenticação baseada em SSH precisam ser copiados e enviados junto com o código do seu projeto, conforme descrito na seção anterior.
Use o comando pip install
com a sinalização -t DIRECTORY
para copiar dependências privadas em um diretório local antes de implantar o aplicativo, da seguinte maneira:
Copie sua dependência em um diretório local:
pip install -t DIRECTORY DEPENDENCY
Adicione um arquivo
__init__.py
vazio ao diretórioDIRECTORY
para transformá-lo em um módulo.Importe deste módulo para usar sua dependência:
import DIRECTORY.DEPENDENCY
Pacotes pré-instalados
Os seguintes pacotes do Python são instalados automaticamente junto com sua função durante a implantação. Se estiver usando qualquer um desses pacotes no código de função, recomendamos incluir as seguintes versões em seu arquivo requirements.txt
:
Python 3.8 e posterior
Python 3.7
* `pip` (latest version)
* `setuptools` (latest version)
* `wheel` (determined by product requirements)
Além disso, o ambiente de execução do Python inclui vários pacotes do sistema no ambiente de execução.