微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Azure 上的 Python 函数应用程序的 Zip 部署任务中尝试使用 POST_BUILD_COMMAND 安装自定义轮子后无法找到模块

如何解决在 Azure 上的 Python 函数应用程序的 Zip 部署任务中尝试使用 POST_BUILD_COMMAND 安装自定义轮子后无法找到模块

简介

我的方案是,我想在多个项目中重用来自 Azure DevOps 中的存储库的共享代码。我构建了一个管道,可以将 wheel 作为工件生成,以便我可以将其下载到其他管道。

情况

目前我已经成功设置了一个部署 Python Function App 的管道。该应用程序运行良好且稳定。我使用 SCM_DO_BUILD_DURING_DEPLOYMENT=1ENABLE_ORYX_BUILD=1 来实现这一点。

我现在处于想要使用介绍中提到的工件(Python/pip wheel)的位置。 我在管道中添加一个步骤,并且能够成功下载工件。下一步是确保在我的 Python Function App Zip Deployment 期间安装了工件。这就是我被困的地方。

我的 zip 的结构如下:

__app__
 | - MyFirstFunction
 | | - __init__.py
 | | - function.json
 | | - example.py
 | - MySecondFunction
 | | - __init__.py
 | | - function.json
 | - wheels
 | | - my_wheel-20201014.10-py3-none-any.whl                            <<< this is my wheel
 | - host.json
 | - requirements.txt 

问题

我尝试添加 POST_BUILD_COMMANDPRE_BUILD_COMMAND 之类的命令来让 pip install the wheel,但是当我使用以下命令时,似乎没有找到该软件包(通过 Oryx/Kudu): -POST_BUILD_COMMAND "python -m pip install --find-links=home/site/wwwroot/wheels my_wheel" Azure DevOps 不会引发任何异常或错误消息。就在我执行该函数时,我收到一个异常说: Failure Exception: ModuleNotFoundError: No module named 'my_wheel'.

我的问题是如何更改我的解决方案以确保构建能够正确安装 my_wheel。

旁注:不幸的是,我无法使用来自 Azure DevOps 的 Artifacts 提要来发布 my_wheel 并让 pip 使用该提要。

解决方法

这是我的自定义轮子在本地 VS 代码中的工作方式: enter image description here

导航到您的 DevOps,编辑管道 YAML 文件,添加一个 python 脚本来指定要安装的轮文件:

pip install my_wheel-20201014.10-py3-none-any.whl

像这样:

enter image description here

启用应用服务日志并导航到日志流以查看它是否适用于 Azure:

enter image description here

,

我通过查看我的共享代码存储库解决了我的问题,并将共享代码包含在函数应用程序包中。

此外,我将任务 AzureFunctionApp@1 替换为 AzureCLI@2 任务,并使用 az functionapp deployment source config-zip 命令部署函数应用。我通过管道中单独的 AzureAppServiceSettings@1 步骤设置应用程序设置。

AzureCLI@2: AzureCLI@2 task

这不是我想要解决的确切方法,因为我仍然必须在根 requirements.txt 中包含共享代码的要求。

将任务 AzureFunctionApp@1 切换到 AzureCLI@2 为我在管道中提供了更多反馈。结果应该是一样的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。