如何配置Python版Azure Functions支持自定义分组文件夹结构
Azure Functions Python 自定义分组目录配置方案
问题根因
默认配置下,Azure Functions Python 运行时只会扫描host.json所在根目录的一级子文件夹,识别包含function.json的函数目录,不会递归遍历更深层级的子目录。你把函数放到v0、v1这类二级分组文件夹后,运行时扫描不到函数定义,就会抛出No job functions found错误。
注意host.json是项目根的标识文件,必须放在项目最外层根目录,移动到子目录必然触发Unable to find project root错误,这个是运行时的硬规则,不要修改这两个配置文件的位置。
可行配置步骤
以下配置完全适配你想要的按版本分组的目录结构,不需要调整你设计的文件布局:
- 保持根目录文件位置不动:
host.json、local.settings.json、requirements.txt全部留在root目录下,不要移动。 - 开启嵌套目录扫描开关:打开根目录下的
local.settings.json,在Values节点中添加嵌套目录发现配置,开启后运行时会递归扫描所有子目录下的函数:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "python", "AzureFunctionsJobHost__Worker__EnableNestedDirectories": "true" } } - (推荐配置)排除非函数目录:打开根目录下的
host.json,添加目录排除规则,避免运行时扫描src、tests、虚拟环境等非函数目录,减少启动耗时:{ "version": "2.0", "logging": { "applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Request" } } }, "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[3.*, 4.0.0)" }, "functionsWorkerDirectory": { "excludePatterns": [ "src/**", "tests/**", ".vscode/**", ".venv/**", "__pycache__/**" ] } } - 校验单函数配置:逐个检查分组目录下每个函数的
function.json,确认scriptFile指向同目录下的入口文件,entryPoint指向正确的入口函数名即可,不需要修改相对路径。以v0/function_1/function.json为例,核心配置如下,你原来的HttpTrigger绑定配置保持不变:{ "scriptFile": "__init__.py", "entryPoint": "main", "bindings": [ // 原有HttpTrigger配置无需修改 ] } - 重启本地Functions运行时,即可正常加载所有分组下的HttpTrigger函数。
部署和调试注意事项
- 本地调试时,VS Code Azure Functions扩展会自动读取根目录的配置,不需要额外修改launch.json,即可正常断点调试分组目录下的函数。
- 部署到Azure云时,需要把
AzureFunctionsJobHost__Worker__EnableNestedDirectories = true配置同步添加到函数应用的「应用设置」中,否则云端运行时同样会找不到函数。 - 所有函数的依赖统一放在根目录的
requirements.txt中,不要为每个版本分组单独维护依赖文件,运行时只会从项目根目录加载Python依赖。 - 该配置兼容Python 3.9+环境、Azure Functions VS Code扩展v1.6.0及以上版本,不需要升级现有开发环境。
内容的提问来源于stack exchange,提问作者Julia S.
相关产品推荐
相关产品推荐

