首页 > 解决方案 > 在 python 的 azure 函数中安装 google apis 时出错

问题描述

我目前正在尝试google-api-python-client在我的 Azure Function (Python) 中安装包我将包添加到 requirements.txt 文件并将应用程序部署到天蓝色。但是一旦我from googleapiclient.discovery import build在我的 Python 文件中执行导入,当我触发该函数时就会出现内部错误。如果没有导入,该函数将返回有效响应。

有没有人遇到过这个问题?

我可以从 azure log 中得出的唯一信息是:

失败异常:ContextualVersionConflict: (protobuf 3.11.3 (/azure-functions-host/workers/python/3.7/LINUX/X64), Requirement.parse('protobuf>=3.12.0'), {'google-api-core '}) 堆栈:文件“/azure-functions-host/workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py”,第 259 行,在 _handle__function_load_request func_request.metadata.entry_point) 文件“/azure-functions-host /workers/python/3.7/LINUX/X64/azure_functions_worker/utils/wrappers.py”,第 29 行,在调用中返回 func(*args, **kwargs) 文件“/azure-functions-host/workers/python/3.7/ LINUX/X64/azure_functions_worker/loader.py”,第 73 行,在 load_function mod = importlib.import_module(fullmodname) 文件“ /usr/local/lib/python3.7/importlib/init.py”,第 127 行,在 import_module 中 return _bootstrap._gcd_import(name[level:], package, level) 文件“”,第 1006 行,在 _gcd_import 文件中“”,第 983 行,在 _find_and_load 文件中“”,第 953 行,在_find_and_load_unlocked 文件“”,第 219 行,_call_with_frames_removed 文件“”,第 1006 行,_gcd_import 文件“”,第 983 行,_find_and_load 文件“”,第 967 行,_find_and_load_unlocked 文件“”,第 677 行,_load_unlocked 文件“”,第 728 行,在 exec_module 文件“”中,第 219 行,在 _call_with_frames_removed 文件“/home/site/wwwroot/HttpHeartrate/ init .py”中,第 8 行,从 googleapiclient.discovery 导入构建文件“/home/site/wwwroot/。 python_packages/lib/site-packages/googleapiclient/discovery.py”,第 49 行,在导入 google.api_core.client_options 文件“/home/site/wwwroot/.python_packages/lib/site-packages/google/api_core/init .py",第 23 行,在 version = get_distribution("google-api-core").version 文件 "/azure-functions-host/workers/python/3.7/LINUX/X64/pkg_resources/init .py ",行482,在 get_distribution dist = get_provider(dist) 文件“/azure-functions-host/workers/python/3.7/LINUX/X64/pkg_resources/init.py ,第 358 行,在 get_provider 返回 working_set.find(moduleOrReq) 或要求(str(moduleOrReq))[0] 文件“/azure-functions-host/workers/python/3.7/LINUX/X64/pkg_resources/init .py ”,第 901 行,需要 = self.resolve(parse_requirements(requirements) )文件“/azure-functions-host/workers/python/3.7/LINUX/X64/pkg_resources/init.py”,第 792 行,在解决中引发 VersionConflict(dist, req).with_context(dependent_req)

标签: pythonpython-3.xlinuxazureazure-functions

解决方案


对于这个问题,我可以给你一些建议:

1.如果是requirements.txt手动添加包名,建议使用命令自动生成。因为如果我们手动添加它可能会出现一些错误。您可以在 VS 代码的“终端”窗口中运行以下命令。

pip freeze > requirements.txt

2.如果你使用VS代码扩展从本地部署你的功能到Azure,我建议你使用命令来部署它。因为根据我的经验,通过扩展部署并不可靠,有时可能会导致一些问题。因此,您可以先在 azure 门户中创建 python 函数应用程序,然后在“终端”窗口中运行以下命令,将其从 VS 代码部署到 azure。

func azure functionapp publish <functionAppName> --build remote

<functionAppName>是您在 azure 门户上创建的函数应用的名称。

3.顺便说一下,你还需要注意你的函数应用的结构,尤其是requirements.txt. 如果requirements.txt位置错误,部署到 azure 时将无法成功安装软件包。下面是我的函数应用程序结构,我安装google-api-python-client成功(在本地和部署到天蓝色)。

在此处输入图像描述

希望有帮助~


推荐阅读