Existem duas formas de especificar dependências para funções do Cloud Run
escritas em Python: usar o ficheiro requirements.txt
do gestor de pacotes pip ou criar pacotes de 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.
O Functions Framework é uma dependência obrigatória para todas as funções. Embora o Cloud Run o instale em seu nome quando a função é criada, recomendamos que o inclua como uma dependência explícita.
Especifique dependências com o pip
As dependências em Python são geridas com o pip e expressas num ficheiro de metadados denominado requirements.txt
.
Este ficheiro tem de estar no mesmo diretório que o ficheiro main.py
que contém o seu código de função.
Quando implementa ou reimplementa a sua função, o Cloud Run usa o pip para transferir e instalar a versão mais recente das suas dependências, conforme declarado no ficheiro requirements.txt
.
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 mais detalhes, consulte a
referência requirements.txt
.
Para evitar que a compilação seja afetada por alterações à versão das dependências, considere fixar 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
Empacote dependências locais
Também pode criar pacotes e implementar dependências juntamente com a sua função. Esta abordagem é útil se a sua dependência não estiver disponível através do gestor de pacotes pip ou se o acesso à Internet do seu ambiente do Cloud Run estiver restrito.
Por exemplo, pode usar uma estrutura de diretórios como a seguinte:
myfunction/ ├── main.py └── localpackage/ ├── __init__.py └── script.py
Em seguida, pode importar o código como habitualmente a partir de localpackage
usando a seguinte declaração import
.
# Code in main.py from localpackage import script
Tenha em atenção que esta abordagem não executa ficheiros setup.py
. Os pacotes com esses ficheiros podem continuar a ser agrupados, mas podem não ser executados 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
Certifique-se de que o python3 está instalado no seu sistema de desenvolvimento.
Declare as dependências da sua aplicação num ficheiro
requirements.txt
no diretório raiz da sua árvore de desenvolvimento.Declare o Functions Framework como um requisito incluindo
functions-framework
numa linha separada no ficheirorequirements.txt
.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).
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
Substituir:
- 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,
311
para Python 3.11.
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
Se a dependência for um ficheiro TAR (*.tar.gz):
Se a dependência estiver escrita em Python, use o pip para a transferir:
python3 -m pip download -r requirements.txt \ -d DIRECTORY
Se uma dependência consistir em código escrito em C ou C++, tem de a transferir e compilar separadamente.
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
Substituir:
- 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 do Python do Artifact Registry pode alojar dependências privadas para a sua função do Python. Quando implementar no Cloud Run, o processo de compilação 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:
--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
As dependências são instaladas num ambiente do Cloud Build que não fornece acesso a chaves SSH. Os pacotes alojados em repositórios que requerem autenticação baseada em SSH têm de ser copiados e carregados juntamente com o código do seu projeto, conforme descrito na secção anterior.
Pode usar o comando pip install
com o sinalizador -t DIRECTORY
para copiar dependências privadas para um diretório local antes de implementar a sua app, da seguinte forma:
Copie a dependência para um diretório local:
pip install -t DIRECTORY DEPENDENCY
Adicione um ficheiro
__init__.py
vazio ao diretórioDIRECTORY
para o transformar num módulo.Importe deste módulo para usar a sua dependência:
import DIRECTORY.DEPENDENCY
Pacotes pré-instalados
Os seguintes pacotes Python são instalados automaticamente juntamente com a sua função durante a implementação. Se estiver a usar algum destes pacotes no código da função, recomendamos que inclua as seguintes versões no ficheiro requirements.txt
:
Python 3.8 e posteriores
Python 3.7
* `pip` (latest version)
* `setuptools` (latest version)
* `wheel` (determined by product requirements)
Além disso, o tempo de execução do Python inclui vários pacotes do sistema no ambiente de execução.