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 junto com sua função.

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

Em seguida, é possível usar o código da dependência local incluída, o localpackage, como de costume. Use essa abordagem para agrupar todos os pacotes do Python com a implantação.

Como usar dependências privadas

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:

  1. Copie sua dependência em um diretório local:

    pip install -t DIRECTORY DEPENDENCY
  2. Adicione um arquivo __init__.py vazio ao diretório DIRECTORY para transformá-lo em um módulo.

  3. 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:

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

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.