python - 在 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)
解决方案
对于这个问题,我可以给你一些建议:
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
成功(在本地和部署到天蓝色)。
希望有帮助~
推荐阅读
- css - 3行标题时网站网格布局混乱
- swift - 页面控件中的多个 UILabel
- android - MediaPlayer 不开始视频回放
- mongodb - MongoDB拆分聚合结果
- scala - 对 Spark 数据框中的多列执行算术运算
- jsf - 想要从jsf下拉框中选择一个值,点击添加按钮后需要在底部下拉框中显示
- php - Laravel 无法访问所有 cookie
- c# - 在不丢失精度的情况下在 PostgreSQL 中存储 DateTime
- html - 表单的 post 方法的这种格式是什么?
- fullcalendar - 当开始或结束时间不同时,呈现重叠事件的完整日历事件顺序