我有一个简单的python脚本,可以按照这里的指令部署为azure函数。
当脚本被触发(为blob上传的事件网格事件设置)时,它会碰到一个运行时错误:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException:异常执行函数: Functions.imageeventgridtrigger在文件"/azure-functions-host/workers/python/3.6/LINUX/X64/azure_functions_worker/loader.py",第66行中,在load_function mod =importlib.import_module(全称)文件第126行中,在import_module返回_bootstrap._gcd_import(namelevel:,package )中,文件"/home/site/wwwroot/imageeventgridtrigger/__init__.py",第3行,在/src/azure-functions-host/src/WebJobs.Script/Description/OutOfProc/OutOfProcInvoker.cs:line 82*中将numpy导入为np (在Microsoft.Azure.WebJobs.Script.Description.OutOfProcInvoker.InvokeCore(Object[]参数下,FunctionInvocationContext上下文中)
通过vscode集成实现了少量的跟踪部署。需求文件似乎是根据日志输出部分执行的:
10:09:44 AM手稿功能应用程序: Python版本:/opt/python/3.6.9/bin/python 3 10:09:44 AM手稿功能程序:运行pip安装.10:09:47 AM手稿功能应用程序: 04:39:47+0000收集蔚蓝功能-函数(来自-r requirements.txt (第1行)) 10:09:48 AM手稿功能应用程序: 04:39:48+0000下载functions-1.0.4-py3-none-any.whl (108 52) 10:09:48 AM手稿功能应用程序: 04:39:48+0000 Collecting numpy==1.16.4 (来自-r requirements.txt (第2行)) 10:09:50 AM手稿功能应用程序: 04:39:50+0000下载64.whl (17.3MB) 10:09:52 AM手稿功能应用::04:39:52+0000 matplotlib==3.1.0 (来自-r requirements.txt (第3行)) 10:09:53 AM手稿功能应用程序: 04:39:53+0000下载64.whl (13.1MB) 10:10:07 AM手稿功能程序:等待长时间运行命令完成.10: 10 :25 AM手稿功能应用程序: App容器将在10秒内重新启动。10:10:44 AM手稿功能应用:同步触发器..。上午10:10:48 :完成部署到“手稿功能应用程序”。10:10:48 AM手稿功能应用程序:查询触发器.
需求文件还有其他依赖项,但它们不会出现在日志输出中(直到第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.0Python脚本:
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函数,则部署和触发器工作正常。这是一个始终处于应用程序服务计划和部署正在发生的Linux。部署有什么问题?
发布于 2019-11-08 12:57:55
解决了这个问题。requirements.txt文件对skimage有一个虚假的条目。python中的导入引用skimage,但需求必须是scikit映像。因为我通过pipereqs生成了文件,所以我忽略了这一点。
奇怪的是,发现部署日志并不容易。蔚蓝功能的vscode终端中的默认输出没有完整的堆栈。但是在Azure扩展选项卡下,有详细的部署日志可供函数应用程序使用,这些应用程序具有调试所需的信息。
https://stackoverflow.com/questions/58704759
复制相似问题