Обработка зависимостей


Существует два способа указать зависимости для Cloud Functions , написанных на Python: с помощью файла requirements.txt менеджера пакетов pip или упаковать локальные зависимости вместе с вашей функцией.

Спецификация зависимостей с использованием стандарта Pipfile/Pipfile.lock не поддерживается. Ваш проект не должен включать эти файлы.

Указание зависимостей с помощью pip

Зависимости в Python управляются с помощью pip и выражаются в файле метаданных с именем requirements.txt . Этот файл должен находиться в том же каталоге, что и файл main.py , содержащий код вашей функции.

При развертывании или повторном развертывании функции Cloud Functions использует pip для загрузки и установки последней версии ваших зависимостей, как указано в файле requirements.txt . Файл requirements.txt содержит одну строку на каждый пакет. Каждая строка содержит имя пакета и, при необходимости, запрошенную версию. Подробнее см. в справочнике по файлу requirements.txt .

Чтобы предотвратить влияние изменений версии зависимостей на вашу сборку, рассмотрите возможность закрепления пакетов зависимостей за определенной версией.

Ниже приведен пример файла requirements.txt :

functions-framework
requests==2.20.0
numpy

Functions Framework — обязательная зависимость для всех функций. Хотя Cloud Functions устанавливает её автоматически при создании функции, мы рекомендуем включить её как явную зависимость для ясности.

Если ваша функция использует приватные зависимости, рекомендуем зеркалировать functions-framework в ваш приватный реестр. Включите зеркалируемый файл functions-framework в качестве зависимости к вашей функции, чтобы избежать установки пакета из общедоступного интернета.

Упаковка локальных зависимостей

Вы также можете упаковать и развернуть зависимости вместе с вашей функцией. Этот подход полезен, если ваша зависимость недоступна через менеджер пакетов pip или если доступ к Интернету в вашей среде Cloud Functions ограничен.

Например, вы можете использовать следующую структуру каталогов:

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

Затем вы можете импортировать код как обычно из localpackage , используя следующий оператор import .

# Code in main.py
from localpackage import script

Обратите внимание, что при таком подходе файлы setup.py не запускаются. Пакеты с этими файлами по-прежнему можно объединять, но они могут работать некорректно в Cloud Functions .