Развертывание приложения в Google App Engine - ошибка из needs.txt - PullRequest
0 голосов
/ 02 февраля 2020

Я не могу развернуть приложение в Google App Engine.

Кажется, проблема связана с моим requirements.txt файлом:

  • При развертывании примера building-an-app-1 , он хорошо работает.
  • Когда я заменяю оригинальный файл requirements.txt на мой, он не работает *.

Здесь мой requirements.txt:

Flask==1.1.1
flask-wtf==0.14.2
unidecode
numpy
openfoodfacts
os

Когда я удаляю последние 2 пакета, он работает.

В чем проблема?

*gcloud deploy app возвращает:

File upload done.
Updating service [default]...failed.                                           
ERROR: (gcloud.app.deploy) Error Response: [9] Cloud build 813ab290-60a1-427c-830f-3a7e2d35f39b status: FAILURE.
Build error details: {"error":{"errorType":"BuildError","canonicalCode":"INVALID_ARGUMENT","errorId":"288DA415","errorMessage":"01 Feb 2020 17:23:53 INFO     Arguments: ['--parser_script=/usr/local/bin/ftl.par', '--src=', '--entrypoint=', '--name=eu.gcr.io/skilful-alpha-259713/app-engine-tmp/app/ttl-2h:34df8d6c-74e5-4583-bd94-165295531608', '--directory=/workspace', '--destination=/srv', '--cache-repository=eu.gcr.io/skilful-alpha-259713/app-engine-tmp/build-cache/ttl-7d', '--cache', '--builder-output-path=\"\"', '--additional-directory=/.googleconfig', '--python-cmd=/opt/python3.7/bin/python3.7', '--pip-cmd=/env/bin/python3.7 -m pip', '--venv-cmd=/opt/python3.7/bin/python3.7 -m venv /env', '-v=DEBUG', '--base=eu.gcr.io/gae-runtimes/python37:python37_20191019_3_7_4_RC00']
01 Feb 2020 17:23:53 INFO     Unparsed arguments: ['--name=eu.gcr.io/skilful-alpha-259713/app-engine-tmp/app/ttl-2h:34df8d6c-74e5-4583-bd94-165295531608', '--directory=/workspace', '--destination=/srv', '--cache-repository=eu.gcr.io/skilful-alpha-259713/app-engine-tmp/build-cache/ttl-7d', '--cache', '--builder-output-path=\"\"', '--additional-directory=/.googleconfig', '--python-cmd=/opt/python3.7/bin/python3.7', '--pip-cmd=/env/bin/python3.7 -m pip', '--venv-cmd=/opt/python3.7/bin/python3.7 -m venv /env', '-v=DEBUG', '--base=eu.gcr.io/gae-runtimes/python37:python37_20191019_3_7_4_RC00']
01 Feb 2020 17:23:53 INFO     Executing ['/usr/local/bin/ftl.par', '--name=eu.gcr.io/skilful-alpha-259713/app-engine-tmp/app/ttl-2h:34df8d6c-74e5-4583-bd94-165295531608', '--directory=/workspace', '--destination=/srv', '--cache-repository=eu.gcr.io/skilful-alpha-259713/app-engine-tmp/build-cache/ttl-7d', '--cache', '--builder-output-path=\"\"', '--additional-directory=/.googleconfig', '--python-cmd=/opt/python3.7/bin/python3.7', '--pip-cmd=/env/bin/python3.7 -m pip', '--venv-cmd=/opt/python3.7/bin/python3.7 -m venv /env', '-v=DEBUG', '--base=eu.gcr.io/gae-runtimes/python37:python37_20191019_3_7_4_RC00']
INFO     FTL version python-v0.17.0
INFO     Beginning FTL build for python
INFO     FTL arg passed: virtualenv_dir /env
INFO     FTL arg passed: ttl 168
INFO     FTL arg passed: python_cmd /opt/python3.7/bin/python3.7
INFO     FTL arg passed: cache True
INFO     FTL arg passed: virtualenv_cmd virtualenv
INFO     FTL arg passed: entrypoint None
INFO     FTL arg passed: exposed_ports None
INFO     FTL arg passed: pip_cmd /env/bin/python3.7 -m pip
INFO     FTL arg passed: tar_base_image_path None
INFO     FTL arg passed: export_cache_stats False
INFO     FTL arg passed: builder_output_path \"\"
INFO     FTL arg passed: destination_path /srv
INFO     FTL arg passed: sh_c_prefix False
INFO     FTL arg passed: base eu.gcr.io/gae-runtimes/python37:python37_20191019_3_7_4_RC00
INFO     FTL arg passed: cache_key_version v0.17.0
INFO     FTL arg passed: cache_salt 
INFO     FTL arg passed: cache_repository eu.gcr.io/skilful-alpha-259713/app-engine-tmp/build-cache/ttl-7d
INFO     FTL arg passed: venv_cmd /opt/python3.7/bin/python3.7 -m venv /env
INFO     FTL arg passed: name eu.gcr.io/skilful-alpha-259713/app-engine-tmp/app/ttl-2h:34df8d6c-74e5-4583-bd94-165295531608
INFO     FTL arg passed: global_cache False
INFO     FTL arg passed: upload True
INFO     FTL arg passed: fail_on_error True
INFO     FTL arg passed: output_path None
INFO     FTL arg passed: directory /workspace
INFO     FTL arg passed: additional_directory /.googleconfig
INFO     FTL arg passed: verbosity DEBUG
INFO     starting: full build
INFO     starting: builder initialization
INFO     Loading Docker credentials for repository 'eu.gcr.io/gae-runtimes/python37:python37_20191019_3_7_4_RC00'
INFO     Loading Docker credentials for repository 'eu.gcr.io/skilful-alpha-259713/app-engine-tmp/app/ttl-2h:34df8d6c-74e5-4583-bd94-165295531608'
INFO     builder initialization took 0 seconds
INFO     starting: build process for FTL image
INFO     starting: checking_cached_interpreter_layer
INFO     starting: check python version
INFO     `python version` full cmd:
/opt/python3.7/bin/python3.7 --version
I.

Ответы [ 4 ]

2 голосов
/ 02 февраля 2020

В соответствии с ошибкой, которую вы получаете, Cloud Build не удалось установить последние две зависимости, которые вы указали в файле needs.txt. Если вы go откроете страницу Cloud Build History и проверите свои неудачные развертывания, вы заметите, что развертывания завершаются сбоем с сообщением об ошибке, аналогичным этому:

Step #1 - "builder": INFO     `pip_download_wheels` had stderr output:
Step #1 - "builder":   Could not find a version that satisfies the requirement openfoodfacts==0.1.0 (from -r requirements.txt (line 10)) (from versions: )
Step #1 - "builder": No matching distribution found for openfoodfacts==0.1.0 (from -r requirements.txt (line 10))

Там нет необходимости включать модуль os в файл require.txt, поскольку он является частью стандартной библиотеки Python. Например, обратите внимание, что main.py , из которого вы основываете свое приложение, импортирует модуль времени и даты , и это не указано в файле needs.txt .

Пакет Open Food Facts фактически не был выпущен для PyPI (т. Е. https://pypi.org/project/openfoodfacts/ равен 404), поэтому вам необходимо обратиться к соответствующему раздел документации App Engine и добавьте его вручную, аналогично следующему:

  1. Создайте каталог lib в каталоге проектов вашего приложения (например, мое использование * 1027) *).
  2. Скопируйте необходимые зависимости в новый созданный каталог lib, введя следующую команду: pip3 install git+git://github.com/openfoodfacts/openfoodfacts-python.git -t lib.
  3. Go в каталог lib и убедитесь, что все зависимости были установлены правильно.
  4. Измените файл requirements.txt, чтобы использовать зависимости, требуемые пакетом Open Food Facts. Это должно выглядеть так:
Flask==1.1.1
flask-wtf==0.14.2
unidecode==1.1.1
numpy==1.18.1
certifi==2019.11.28
chardet==3.0.4
idna==2.8
requests==2.22.0
urllib3==1.25.8
Импортируйте модуль в вашем приложении аналогично import lib.openfoodfacts as openff. Используйте команду gcloud app deploy для развертывания приложения.

В конце вы должны получить каталог проекта с файловой структурой, аналогичной этой:

building-an-app-1/
    app.yaml
    lib/
        ...
        openfoodfacts/
            autosuggest.py
            facets.py
            __init__.py
            openbeautyfacts.py
            openpetfoodfacts.py
            products.py
            __pycache__/
            utils.py
        ...
    main.py
    requirements.txt
    static/
        script.js
        style.css
    templates/
        index.html

, куда можно импортировать модули os и openfoodfacts в файл main.py, используя следующую команду:

...
import datetime
import os
import lib.openfoodfacts as openff
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
....
0 голосов
/ 08 февраля 2020

Теперь я не могу развернуть приложение с требованием pyzbar==0.1.8 (выпущено в PyPi).

У меня следующая ошибка:

Traceback (most recent call last): File "/env/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker worker.init_process() File "/env/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 92, in init_process super().init_process() 
File "/env/lib/python3.7/site-packages/gunicorn/workers/base.py", line 119, in init_process self.load_wsgi() 
File "/env/lib/python3.7/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi self.wsgi = self.app.wsgi() 
File "/env/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi self.callable = self.load() File "/env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 49, in load return self.load_wsgiapp() 
File "/env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp return util.import_app(self.app_uri) File "/env/lib/python3.7/site-packages/gunicorn/util.py", line 358, in import_app mod = importlib.import_module(module) 
File "/opt/python3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) 
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import 
File "<frozen importlib._bootstrap>", line 983, in _find_and_load 
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked 
File "<frozen importlib._bootstrap_external>", line 728, in exec_module 
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed 
File "/srv/main.py", line 21, in <module> from forms import BarcodeForm 
File "/srv/forms.py", line 1, in <module> from flask_wtf import FlaskForm 
File "/env/lib/python3.7/site-packages/flask_wtf/__init__.py", line 17, in <module> from .recaptcha import * 
File "/env/lib/python3.7/site-packages/flask_wtf/recaptcha/__init__.py", line 2, in <module> from .fields import * 
File "/env/lib/python3.7/site-packages/flask_wtf/recaptcha/fields.py", line 3, in <module> from . import widgets File "/env/lib/python3.7/site-packages/flask_wtf/recaptcha/widgets.py", line 5, in <module> from werkzeug import url_encode ImportError: cannot import name 'url_encode' from 'werkzeug' (/env/lib/python3.7/site-packages/werkzeug/__init__.py)

Знаете ли вы что происходит?

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

Действительно, наличие os и openfoodfacts в файле requirements.txt (который должен содержать только пакеты, устанавливаемые в пипсах, см. Объявление и управление зависимостями ) вызывает ошибки при установке пипсов :

[venv] openfoodfacts> pip install os
Collecting os
  Could not find a version that satisfies the requirement os (from versions: )
No matching distribution found for os

[venv] openfoodfacts> pip install openfoodfacts
Collecting openfoodfacts
  Could not find a version that satisfies the requirement openfoodfacts (from versions: )
No matching distribution found for openfoodfacts

Вам не нужно добавлять os к вашим требованиям, это часть стандартной установки python, вы можете просто импортировать ее.

И openfoodfacts не похоже на обычный Pypi пакет. Если он поступает из репозитория pip, для которого не требуются ключи S SH, вы можете указать его в файле requirements.txt, см. Как добавить специфицированный для пакета c index-url к требованиям .txt . В противном случае вам нужно установить его в свое приложение, чтобы его можно было загрузить вместе с кодом приложения, проверьте раздел Частные зависимости .

Вы можете / всегда должны попытаться установить ваши зависимости локально как проверка работоспособности вашего requirements.txt файла. Будьте внимательны с пип-репо, для которых требуются ключи S SH, так как они могут быть по умолчанию доступны через настройки вашего аккаунта.

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

Вы пытались использовать этот файл needs.txt локально, например так:

pip install -r requirements.txt

Похоже, что две последние строки вашего файла needs.txt не соответствуют Python пакетам, которые могут быть установлен с пип.

...