无法通过Zip包部署Azure Python函数,请求技术支持
问题:Azure Functions Python Zip部署后函数不显示且无法访问
部署操作与环境信息
- PowerShell部署命令:
部署响应返回Publish-AzWebApp -ResourceGroupName <my-rg-name> -Name test-linux-func-app-98962 -ArchivePath myfunc.zipstate: running,无错误提示。 - AZ CLI部署命令及结果:
响应返回202状态码,显示部署完成,但函数从未在UI的az functionapp deployment source config-zip -g <my-rg-name> -n test-linux-func-app-98962 --src myfunc.zip/functions面板中出现,访问HTTP路由仅能看到Azure Functions默认页面。
Zip包内容
myfunc.zip根目录包含以下文件:
__init__.py:仅返回"hello world"字符串的主函数function.json:HTTP触发器配置host.json:运行时扩展配置requirements.txt:依赖声明
function.json内容
{ "scriptFile": "__init__.py", "bindings": [ { "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "get", "post" ], "route": "hitme", "authLevel": "anonymous" }, { "type": "http", "direction": "out", "name": "$return" } ] }
host.json内容
{ "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[2.6.1, 3.0.0)" }, "extensions": { "http": { "routePrefix": "" } } }
requirements.txt内容
azure-functions==1.13.3
Function App应用设置
ENABLE_ORYX_BUILD = true SCM_DO_BUILD_DURING_DEPLOYMENT = false WEBSITE_RUN_FROM_PACKAGE = true FUNCTIONS_WORKER_RUNTIME = python FUNCTIONS_EXTENSION_VERSION = ~4
解决方案
核心问题:Zip包目录结构不符合Python Functions部署规范
Linux环境下的Azure Functions要求Python函数必须放在以函数名为命名的独立子目录中,而非直接置于Zip根目录。当前所有文件都在根目录,导致Functions运行时无法识别到函数实体。
修复步骤
调整Zip包目录结构
创建一个子目录(比如命名为hitme,与路由名一致或任意合法名称),将__init__.py、function.json、requirements.txt移动到该子目录下,host.json保留在Zip根目录。最终结构如下:myfunc.zip ├── host.json └── hitme/ ├── __init__.py ├── function.json └── requirements.txt修正应用设置冲突
当前WEBSITE_RUN_FROM_PACKAGE = true与ENABLE_ORYX_BUILD = true存在冲突:- 启用
WEBSITE_RUN_FROM_PACKAGE时,部署包会被直接挂载运行,不会触发Oryx构建操作 - 若依赖Oryx自动安装Python包,需修改设置为:
ENABLE_ORYX_BUILD = true SCM_DO_BUILD_DURING_DEPLOYMENT = true WEBSITE_RUN_FROM_PACKAGE = false FUNCTIONS_WORKER_RUNTIME = python FUNCTIONS_EXTENSION_VERSION = ~4 - 若坚持使用
WEBSITE_RUN_FROM_PACKAGE,需在本地提前安装依赖并将site-packages目录打包进Zip(不推荐,维护成本高)
- 启用
重新部署验证
使用原PowerShell或AZ CLI命令重新部署调整后的Zip包,等待1-2分钟让运行时加载函数,即可在UI面板看到函数,访问https://<your-function-app-name>.azurewebsites.net/hitme即可返回"hello world"。
额外排查点
- 查看日志流:在Azure Portal的Function App中进入「监测」->「日志流」,排查是否存在函数加载失败的错误信息
- 确认Python版本:
azure-functions==1.13.3兼容Python 3.8-3.10,需确保Function App配置的Python运行时版本在此范围内
内容的提问来源于stack exchange,提问作者Indrid
相关产品推荐
相关产品推荐

