Как функция Google Cloud Python может получить доступ к частному пакету Python - PullRequest
1 голос
/ 26 марта 2020
  1. Я использую облачную функцию Google, используя Python. Несколько других функций находятся в производстве.
  2. Однако для этого я дополнительно создал пользовательский пакет Python, который доступен на github как личное репо.
  3. Мне нужно установить пакет в функции Google

ЧТО Я СДЕЛАН *

  1. Я запускаю функцию Google локально, используя functions-framework
  2. I есть файл require.txt, в котором есть ссылка на пакет. Это можно сделать, добавив следующую строку в requirements.txt:
    -e git+https://github.com/<repo>/<project>#egg=<project>
Я бегу pip install -r requirements.txt. И пакет успешно установлен. Теперь в коде python функции, использующей import <pkg-name>, работает, и я могу получить доступ ко всем функциям.

ВЫЗОВЫ, КОГДА НАЖМИТЕ ФУНКЦИЯ К ОБЛАКУ

  1. Согласно документации, чтобы pu sh Облачная функция для Google Cloud, я выдаю команду:
gcloud functions \
  deploy <function-name> \
  --trigger-http  \
  --entry-point <entry-function> \
  --runtime python37 \
  --project=<my-project>

Как и ожидалось это дает ошибку, потому что у него нет доступа к закрытому репо в git.

Я создал облачный репозиторий Google и связал его с репозиторием git, надеясь, что каким-то образом смогу указать это в файле require.txt. Просто не знаю как.

Я попытался установить переменные среды для имени пользователя и пароля (не очень хорошая идея, я согласен) в Google Cloud Function и указать их в requirements.txt как:

    -e git+https://${AUTH_USER}:${AUTH_PASSWORD}@github.com/<repo>/<project>#egg=<project>

Это тоже дало ошибку.

Любая помощь или направление будут с благодарностью.

Ответы [ 2 ]

2 голосов
/ 28 марта 2020

Хотя @ marian.viadoi был правильным в приведенном выше комментарии, а именно. Облачная функция Google не может получить доступ к личному git репо , я реализовал обходной путь и обмен на всякий случай, если это подходит. Вот что было сделано:

  1. Пакет python был подготовлен согласно документации (https://packaging.python.org/tutorials/packaging-projects/)
  2. Затем бинарный дистрибутив "whl" файл был создан с использованием python3 setup.py bdist_wheel
  3. Этот файл был помещен в папку функций Google. Я решил поместить его в папку dist.
  4. В requirements.txt я добавил строку: ../dist/xxxx.whl к другим зависимостям, необходимым для облачной функции
  5. Push-облако функция для GCP через gcloud deploy ..
  6. При успешной установке пакет и его зависимости автоматически устанавливаются в виртуальной среде облачной функции

Этот не отвечает как использовать личное репо в функциях Google (что невозможно), но описанные выше шаги гарантируют, что приватный пакет будет легко распространяться и обновляться среди различных облачных функций.

0 голосов
/ 26 марта 2020

Вы не можете получить доступ к частному репо из облачной функции. Согласно официальной документации:

" Использование личных зависимостей

Зависимости устанавливаются в среде Cloud Build, которая не обеспечивает доступ к ключам S SH Пакеты, размещенные в репозиториях, для которых требуется аутентификация на основе S SH, должны продаваться и загружаться вместе с кодом вашего проекта, как описано в предыдущем разделе.

Вы можете использовать команду pip install с флагом -t DIRECTORY Чтобы скопировать личные зависимости в локальный каталог перед развертыванием приложения, выполните следующие действия:

Скопируйте свою зависимость в локальный каталог:

pip install -t DIRECTORY DEPENDENCY

Добавьте пустой init . py файл в каталог DIRECTORY, чтобы превратить его в модуль.

Импорт из этого модуля для использования вашей зависимости:

import DIRECTORY.DEPENDENCY

"

Задание зависимостей в Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...