在 Azure 上的 Python Function App 的 Zip Deploy 任务中尝试使用 POST_BUILD_COMMAND 安装自定义轮后无法找到模块
Unable to find module after trying to install custom wheel using POST_BUILD_COMMAND in Zip Deploy task for a Python Function App on Azure
简介
我的情况是,我想跨多个项目重用 Azure DevOps 中存储库中的共享代码。我构建了一个生成 wheel
作为工件的管道,因此我可以将其下载到其他管道。
情况
目前我已成功设置部署 Python Function App 的管道。该应用 运行 良好且稳定。我使用 SCM_DO_BUILD_DURING_DEPLOYMENT=1
和 ENABLE_ORYX_BUILD=1
来实现这一点。
我现在处于我想要使用介绍中提到的神器(Python/pip 轮)的位置。
我在管道中添加了一个步骤,并且能够成功下载工件。下一步是确保在 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_COMMAND
和 PRE_BUILD_COMMAND
这样的命令来让 pip install the wheel 但是当我使用命令:
-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 代码中的工作方式:
导航到您的 DevOps,编辑管道 YAML
文件,添加一个 python 脚本以指定要安装的 wheel 文件:
pip install my_wheel-20201014.10-py3-none-any.whl
像这样:
启用应用程序服务日志并导航到日志流以查看它是否适用于 Azure:
我已经通过查看共享代码的存储库并将共享代码包含在函数应用程序包中解决了我的问题。
我还用 AzureCLI@2
任务替换了任务 AzureFunctionApp@1
,并使用 az functionapp deployment source config-zip
命令部署函数应用程序。我通过管道中的单独 AzureAppServiceSettings@1
步骤设置应用程序设置。
AzureCLI@2:
这不是我想要解决这个问题的确切方法,因为我仍然必须在根 requirements.txt
中包含共享代码的要求。
将任务 AzureFunctionApp@1
切换到 AzureCLI@2
给了我更多的管道反馈。结果应该是一样的。
简介
我的情况是,我想跨多个项目重用 Azure DevOps 中存储库中的共享代码。我构建了一个生成 wheel
作为工件的管道,因此我可以将其下载到其他管道。
情况
目前我已成功设置部署 Python Function App 的管道。该应用 运行 良好且稳定。我使用 SCM_DO_BUILD_DURING_DEPLOYMENT=1
和 ENABLE_ORYX_BUILD=1
来实现这一点。
我现在处于我想要使用介绍中提到的神器(Python/pip 轮)的位置。
我在管道中添加了一个步骤,并且能够成功下载工件。下一步是确保在 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_COMMAND
和 PRE_BUILD_COMMAND
这样的命令来让 pip install the wheel 但是当我使用命令:
-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 代码中的工作方式:
导航到您的 DevOps,编辑管道 YAML
文件,添加一个 python 脚本以指定要安装的 wheel 文件:
pip install my_wheel-20201014.10-py3-none-any.whl
像这样:
启用应用程序服务日志并导航到日志流以查看它是否适用于 Azure:
我已经通过查看共享代码的存储库并将共享代码包含在函数应用程序包中解决了我的问题。
我还用 AzureCLI@2
任务替换了任务 AzureFunctionApp@1
,并使用 az functionapp deployment source config-zip
命令部署函数应用程序。我通过管道中的单独 AzureAppServiceSettings@1
步骤设置应用程序设置。
AzureCLI@2:
这不是我想要解决这个问题的确切方法,因为我仍然必须在根 requirements.txt
中包含共享代码的要求。
将任务 AzureFunctionApp@1
切换到 AzureCLI@2
给了我更多的管道反馈。结果应该是一样的。