Зависимости (needs.txt) не устанавливаются правильно при развертывании в Google App Engine с помощью Google Cloud Build - PullRequest
0 голосов
/ 27 февраля 2020

У меня странная проблема с зависимостями при развертывании моего приложения в Google App Engine (Python 2.7).

Я указал свои зависимости в файле needs.txt:

Flask==1.0.2
werkzeug>=0.14
flask-cors
twilio
httplib2
gunicorn
Jinja2
google-cloud-ndb
exponent_server_sdk

Они прекрасно работают с локальным сервером разработки при локальной установке с помощью pip из папки needs.txt.

Однако при развертывании в обработчике приложений модуль exponent_server_sdk не был установлен (ImportError : Нет модуля с именем exponent_server_sdk).

Обычно я развертываю, помещая в репозиторий git, который затем развертывается с помощью Google Cloud Build ("gcr.io/cloud-builders/gcloud"). При развертывании нет ошибок, и другие зависимости в файле require.txt работают нормально, например, twilio или Jinja2.

Во время исследования я пытался вытолкнуть его прямо с машины для разработки с помощью gcloud app deploy. Когда я делаю это, по какой-то странной причине, exponent_server_sdk доступен и работает правильно.

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

В ответ на комментарии:

Я работаю в стандартной среде.

Мой cloudbuild.yaml выглядит следующим образом:

steps:
- name: "gcr.io/cloud-builders/gcloud"
  args: ["app", "deploy", "app.yaml", "dispatch.yaml", "service_1.yaml", "service_2.yaml", "service_3.yaml", "index.yaml"]
timeout: "1600s"

Файл .yaml для службы, в которой возникает ошибка, выглядит следующим образом:

runtime: python27
api_version: 1
threadsafe: true
service: notifications

libraries:
- name: ssl
  version: latest

handlers:
- url: /.*
  script: notifications.app

1 Ответ

0 голосов
/ 28 февраля 2020

Для стандартной среды (1-го поколения) процесс развертывания не использует файл requirements.txt, библиотеки должны быть установлены внутри вашего приложения. Из Копирование сторонней библиотеки :

Использование pip (версия 6 или более поздняя) с флагом -t <directory> для копирования библиотек в папку вы создали на предыдущем шаге. Например:

pip install -t lib/ <library_name>

Да, если вы хотите, вы можете использовать файл requirements.txt для установки внутри приложения, но сам этот файл не используется процессом развертывания.

Поскольку вы не развертываете непосредственно из среды, в которой у вас установлены библиотеки, вам также необходимо добавить каталог установки в репозиторий git.

...