在Azure Functions中不能有Python外部代码吗?

0 投票
2 回答
47 浏览
提问于 2025-04-12 13:48

我正在开发一个Azure函数应用,里面定义了多个Azure函数作为蓝图。

我想做的是创建一些函数,这些函数可以在同一个文件中被Azure函数蓝图调用(下面有个例子)。

在云端出问题:

import logging
import azure.functions as func

bp = func.Blueprint()


@bp.timer_trigger(
    schedule="0 0 10 * * *",
    arg_name="myTimer",
    run_on_startup=False,
    use_monitor=False,
)
def my_azure_function(myTimer: func.TimerRequest) -> None:
    do_something()

# This breaks the Function App in the cloud, not locally.
def do_something():
    logging.info("test log")

在本地用调试器运行时,这一切都很正常,但一旦部署到Azure上,这个函数就不会出现在函数应用的概览里。

奇怪的是,如果把这个函数删掉,然后把代码直接放在Azure函数蓝图里面,部署后就能正常工作(下面有个例子)。

在云端不出问题:

import logging
import azure.functions as func

bp = func.Blueprint()


@bp.timer_trigger(
    schedule="0 0 10 * * *",
    arg_name="myTimer",
    run_on_startup=False,
    use_monitor=False,
)
def my_azure_function(myTimer: func.TimerRequest) -> None:
    # This was done by a function before
    logging.info("test log")

这让我很烦恼,因为这个Azure函数需要完成很多事情。我觉得把代码拆分成多个函数,然后让Azure函数蓝图调用这些函数,是最好的解决办法。

我已经做了一些研究,但没能找到解决这个问题的方法。我查看了StackOverflow上的问题,也读了大部分Azure函数的文档。

希望有人能告诉我该怎么修复这个问题,或者我哪里做错了。

编辑:

我做了一些测试,发现当我导入“requests”模块时,这些函数在云端就消失了。我想知道有没有地方可以查看原因?

2 个回答

0

我通过查看文档发现,Azure生成的工作流程中,包安装得不对。

这个工作流程是通过运行以下命令来下载依赖项的:

pip install -r requirements.txt

但是这个命令并没有把包安装到正确的位置。实际上应该运行这个命令:

pip install --target="./.python_packages/lib/site-packages" -r requirements.txt

这样部署就正确了,模块也能正确安装。

0

但是当它被部署到Azure时,这个功能在Function App的概览中没有显示出来。

蓝图不能作为功能部署到Azure Function。

你需要在主文件中导入蓝图。在Azure Function中,只有当使用 func.FunctionApp() 调用功能时,它才会被识别。

可以参考这个文档

我的目录:

blueprint.py

import azure.functions as func
import logging

bp = func.Blueprint()

@bp.timer_trigger(arg_name="mytimer", schedule="0 */5 * * * *", run_on_startup=False, use_monitor=False)
def my_azure_func(mytimer:func.TimerRequest):
    do_something()

def do_something():
    logging.info("test log")

function_app.py

import azure.functions as func
import logging
from blueprint import bp

app= func.FunctionApp()

app.register_functions(bp)

输出

撰写回答