python - Azure Function 中的 Google.OR-Tools
问题描述
我最近一直在使用 Python 中的 OR-Tools,并且一直在尝试将我的代码移动到 Python 中的 Azure 函数中。有谁知道这是否支持?
我已经尝试并不断遇到无法导入 OR-Tools 模块的问题(特别是来自 ortools.constraint_solver 的 pywrapcp 和 routing_enums_pb2)。我已经确认我的 Python 版本是 64 位的。
根据 OR-Tools 发行版,它支持 Linux,但是我一直在阅读,它似乎与需要安装的 C++ 可再发行组件有关。这就是我现在完全超出我的深度并且可以使用一些指针的地方。这在python函数中可能吗?
编辑
在下面的鲍曼朱的评论之后 - 我已经检查了我的环境中是否存在 ORTools - 请参见下面的片段。该脚本在我尝试导入 pywrapcp 的位置失败。
from ortools.constraint_solver import pywrapcp
但它肯定在那里。有什么建议么?
解决方案
所以我得到了这个工作 - 运行 OR-Tools 的 Python Azure 函数。
在我的测试中,我可以想到导致问题的两个可能原因(我不确定您是否遇到本地问题,或者部署后出现问题);
- 您使用的是本地安装的 python 解释器而不是此处的版本,
.\.venv\Scripts\python.exe
因此 pylint 无法找到依赖项的 venv 副本。 - 您缺少包括在内
ortools
,requirements.txt
因此在部署时没有安装服务器端。
这就是导致 Azure 在部署函数时安装依赖项的原因。您不需要手动包含它们;
# DO NOT include azure-functions-worker in this file
# The Python Worker is managed by Azure Functions platform
# Manually managing azure-functions-worker may cause unexpected issues
azure-functions
ortools
有几点需要注意;
- OR-Tools 是原生 C++,对其他所有内容都有包装器。
- Python 函数仅在 Azure 中的 Linux 上运行,因此服务器端不需要 C++ 可再发行组件。
- 在 Windows 上安装Azure Functions Core Tools for Visual Studio Code 将允许您在本地调试 Python Azure 函数(我假设这确实需要 C++ 可再发行组件来执行本地 Windows)。
- 我使用 Visual Studio 扩展“Azure Functions”进行部署。
我基本上遵循了这个指南,然后添加了 OR-Toolsrequirements.txt
并添加了一个简单的示例解决方案用于本地测试,然后部署和测试服务器端。