Развертывание функции Azure в Python не устанавливает зависимости от require.txt - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть простой сценарий Python для развертывания в качестве функции Azure, следуя инструкциям здесь .

Когда сценарий запускается (установлен для события сетки событий загрузки BLOB-объектов), он попадает во время выполненияошибка:

Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: Functions.imageeventgridtrigger --->
  Microsoft.Azure.WebJobs.Script.Rpc.RpcException: Result: Failure
  Exception: ModuleNotFoundError: No module named 'numpy' Stack:   File
  "/azure-functions-host/workers/python/3.6/LINUX/X64/azure_functions_worker/dispatcher.py",
  line 242, in _handle__function_load_request
      func_request.metadata.entry_point)   File "/azure-functions-host/workers/python/3.6/LINUX/X64/azure_functions_worker/loader.py",
  line 66, in load_function
      mod = importlib.import_module(fullmodname)   File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in
  import_module
      return _bootstrap._gcd_import(name[level:], package, level)   File "/home/site/wwwroot/imageeventgridtrigger/__init__.py", line 3, in
  <module>
      import numpy as np    at Microsoft.Azure.WebJobs.Script.Description.OutOfProcInvoker.InvokeCore(Object[]
  parameters, FunctionInvocationContext context) in
  /src/azure-functions-host/src/WebJobs.Script/Description/OutOfProc/OutOfProcInvoker.cs:line
  82*

[оставленный остаток трассировки] Развертывание было выполнено с помощью интеграции vscode. Файл требований, кажется, частично выполнен на основе вывода журнала:

10:09:44 AM manuscriptfunctionapp: Python Version: /opt/python/3.6.9/bin/python3 10:09:44 AM manuscriptfunctionapp:
  Running pip install... 10:09:47 AM manuscriptfunctionapp:
  [04:39:47+0000] Collecting azure-functions (from -r requirements.txt
  (line 1)) 10:09:48 AM manuscriptfunctionapp: [04:39:48+0000]  
  Downloading
  https://files.pythonhosted.org/packages/68/b3/535af50791b2fcda75d3e18820588885686a33d8a13f83af6dcf74094cf4/azure_functions-1.0.4-py3-none-any.whl
  (108kB) 10:09:48 AM manuscriptfunctionapp: [04:39:48+0000] Collecting
  numpy==1.16.4 (from -r requirements.txt (line 2)) 10:09:50 AM
  manuscriptfunctionapp: [04:39:50+0000]   Downloading
  https://files.pythonhosted.org/packages/87/2d/e4656149cbadd3a8a0369fcd1a9c7d61cc7b87b3903b85389c70c989a696/numpy-1.16.4-cp36-cp36m-manylinux1_x86_64.whl
  (17.3MB) 10:09:52 AM manuscriptfunctionapp: [04:39:52+0000] Collecting
  matplotlib==3.1.0 (from -r requirements.txt (line 3)) 10:09:53 AM
  manuscriptfunctionapp: [04:39:53+0000]   Downloading
  https://files.pythonhosted.org/packages/da/83/d989ee20c78117c737ab40e0318ea221f1aed4e3f5a40b4f93541b369b93/matplotlib-3.1.0-cp36-cp36m-manylinux1_x86_64.whl
  (13.1MB) 10:10:07 AM manuscriptfunctionapp: Waiting for long running
  command to finish... 10:10:25 AM manuscriptfunctionapp: App container
  will begin restart within 10 seconds. 10:10:44 AM
  manuscriptfunctionapp: Syncing triggers... 10:10:48 AM: Deployment to
  "manuscriptfunctionapp" completed. 10:10:48 AM manuscriptfunctionapp:
  Querying triggers...

Файл требований имеет другие зависимости, но они не отображаются в выводе журнала (только до строки 3!),Попытка развертывания несколько раз, но результаты одни и те же. Requirements.txt:

azure-functions
numpy==1.16.4
matplotlib==3.1.0
opencv_python==4.1.1.26
scikit_image==0.15.0
scipy==1.2.1
skimage==0.0

Сценарий Python:

mport json
import logging
import numpy as np
import matplotlib
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import statistics
import cv2
import os
import scipy
import scipy.signal as ss
import skimage
from skimage.filters import (threshold_otsu, threshold_niblack, threshold_sauvola)
from skimage.restoration import denoise_nl_means, estimate_sigma

import azure.functions as func


def main(event: func.EventGridEvent):
    result = json.dumps({
        'id': event.id,
        'data': event.get_json(),
        'topic': event.topic,
        'subject': event.subject,
        'event_type': event.event_type,
    })

    logging.info('Python EventGrid trigger processed an event: %s', result)
    logging.info('cv2 %s ', cv2.__version__)
    logging.info('matplotlib %s ', matplotlib.__version__)
    logging.info('scipy %s ', scipy.__version__)
    logging.info('skimage %s', skimage.__version__)

Развертывание и триггер работают нормально, если в требованиях упоминаются только функции azure. Это для плана обслуживания приложения Always On, и развертывание происходит в Linux. Что не так с развертыванием?

1 Ответ

0 голосов
/ 08 ноября 2019

Разобрался с проблемой. В файле needs.txt содержалась ложная запись для изображения лыжи. Импорт в python относится к лыжному образу, но требования должны быть только в scikit-image. Так как я сгенерировал файл с помощью pipereqs, я пропустил это.

Как ни странно, обнаружить журналы развертывания нелегко. Вывод по умолчанию в терминале vscode для azure func не имеет полного стека. Но на вкладке расширения Azure есть подробные журналы развертывания, доступные для приложения-функции, в котором была необходимая информация для отладки.

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