Como especificar dependências no Python
Há duas maneiras de especificar dependências para o Cloud Functions gravadas no Python: com o uso do arquivo requirements.txt
do gerenciador de pacotes pip ou o com o empacotamento de dependências locais com a função.
Atualmente, 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 sua função, o Cloud Functions faz o download e instala as dependências declaradas no arquivo requirements.txt
usando pip.
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
.
A seguir, um exemplo de arquivo requirements.txt
:
requests==2.20.0 numpy
Como empacotar dependências locais
Também é possível empacotar e implantar dependências junto com sua função. Essa abordagem é ú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, é 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
. Pacotes com esses arquivos ainda podem ser agrupados, mas podem não ser executados corretamente no Cloud Functions.
Como usar dependências privadas
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 Functions, o processo de compilação gerará 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:
--extra-index-url REPOSITORY_URL
sampleapp
Flask==0.10.1
google-cloud-storage
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 requerem autenticação baseada em SSH precisam ser fornecidos e carregados 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.7
aiohttp==3.6.2 async-timeout==3.0.1 attrs==19.3.0 cachetools==4.1.1 certifi==2020.6.20 chardet==3.0.4 click==7.1.2 Flask==1.1.2 google-api-core==1.21.0 google-api-python-client==1.10.0 google-auth==1.19.2 google-auth-httplib2==0.0.4 google-cloud-core==1.3.0 google-cloud-trace==0.23.0 googleapis-common-protos==1.52.0 grpcio==1.30.0 httplib2==0.18.1 idna==2.9 itsdangerous==1.1.0 Jinja2==2.11.2 MarkupSafe==1.1.1 multidict==4.7.6 opencensus==0.7.9 opencensus-context==0.1.1 pip==20.1.1 protobuf==3.12.2 pyasn1==0.4.8 pyasn1-modules==0.2.8 pytz==2020.1 PyYAML==5.3.1 requests==2.24.0 rsa==4.6 setuptools==47.3.1 six==1.15.0 uritemplate==3.0.1 urllib3==1.25.9 Werkzeug==1.0.1 wheel==0.34.2 wrapt==1.12.1 yarl==1.5.1
Python 3.8
cachetools==4.2.2 certifi==2021.5.30 charset-normalizer==2.0.6 click==7.1.2 cloudevents==1.2.0 deprecation==2.1.0 flask==1.1.2 functions-framework==2.2.1 google-auth==2.2.0 gunicorn==20.0.4 idna==3.2 itsdangerous==1.1.0 jinja2==2.11.2 markupsafe==1.1.1 packaging==21.0 pathtools==0.1.2 pip==21.1.1 pyasn1-modules==0.2.8 pyasn1==0.4.8 pyparsing==2.4.7 requests==2.26.0 rsa==4.7.2 setuptools==58.1.0 urllib3==1.26.7 watchdog==1.0.2 werkzeug==1.0.1
Python 3.9
Além disso, o ambiente de execução do Python inclui vários pacotes do sistema no ambiente de execução. Se a função usar uma dependência que exija um pacote de sistema que não esteja listado, será possível solicitá-lo.