python Google. OR-Azure函数中的工具

9w11ddsr  于 2023-06-28  发布在  Python
关注(0)|答案(4)|浏览(111)

我最近一直在使用Python中的OR工具,并试图将我的代码移动到Python中的Azure函数。有谁知道这是否得到支持?
我试过了,总是遇到无法导入OR-Tools模块的问题(特别是从ortools.constraint_solver导入pywrapcp & routing_enums_pb2)。我已经确认我的Python版本是64位。
根据OR-Tools发行版,它支持Linux,但是我一直在阅读&它似乎与需要安装的C++可再发行版本有关。这是我现在完全超出我的深度&可以使用一些指针。这在python函数中可能吗?

编辑

下面是Bowman Zhu的评论-我已经检查了ORTools在我的环境中存在-请参阅下面的片段。脚本在我尝试导入pywrapcp时失败。

from ortools.constraint_solver import pywrapcp

但它肯定在那里。有什么建议吗?

ecbunoof

ecbunoof1#

我面临着同样的问题:

我的Python版本也是64位的:

也许你正在阅读Google Tools的这篇文档:
https://developers.google.com/optimization/install/python/windows
提示:我已经安装了你提到的C++可再发行版本,但仍然得到这个错误。我检查了Azure函数的库,它没有ortools模块。
我认为答案是虚拟环境真的没有这个模块:

你需要运行这个命令来在你的虚拟环境中安装ortools:

pip install ortools

然后ortools将在虚拟环境中,导入也不再返回错误:

jtjikinw

jtjikinw2#

如果我在or-tools邮件列表或github issue上没有记错的话:

  • or-tools是一个原生的python(python部分只是它上面的SWIG Package 器)库,目前我们只能使用VS 2019构建它(因为VS 2017编译器崩溃)
  • 你必须安装VS C可再发行版本2019,因为c库依赖于它
  • Azure映像尚未具有VS Redistributable 2019 AFAIK
  • 当python解释器试图加载本机库时,它无法找到所有依赖项,并且您有此错误消息...
62o28rlo

62o28rlo3#

所以我得到了这个工作- Python Azure函数运行OR-Tools。
在我的测试中,我能想到两个可能的原因导致你的问题(我不确定你是否有本地问题,或者一旦部署就有问题);

  • 你使用的是本地安装的python解释器,而不是这里的版本.\.venv\Scripts\python.exe,所以pylint无法找到依赖项的venv副本。
  • 您缺少在requirements.txt中包含ortools,因此无法在部署时安装服务器端。

这就是导致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++,对其他一切都有 Package 器。
  • Python函数仅在Azure中的Linux上运行,因此服务器端不需要C++可再发行版本。
  • 在Windows上安装Azure Functions Core Tools for Visual Studio Code将允许您在本地调试Python Azure Function(我假设这确实需要C++可再发行版本用于本地Windows执行)。
  • 我使用Visual Studio扩展“Azure Functions”进行部署。

我基本上遵循了this guide,然后将OR工具添加到requirements.txt,并添加了一个simple sample solve用于本地测试,然后部署和测试服务器端。

bwntbbo3

bwntbbo34#

我也面临着同样的问题。
我在requirements.txt文件中包含了ortools:

azure-functions
ortools

当我部署一个'hello word'示例函数时,我可以看到模块安装正常:

Successfully installed absl-py-1.4.0 azure-functions-1.15.0 numpy-1.25.0 ortools-9.6.2534 protobuf-4.23.3 scipy-1.11.0

HTTP触发器已注册。但是,如果我尝试在. py示例函数中从ortools导入pywrapcp并再次部署,我会得到错误No HTTP triggers found.,并且在部署日志中没有其他错误。
(if我在本地运行函数(* func host start *)(解决了一个VRP问题),一切正常。
部署到Azure函数时出现问题。
源代码:

import azure.functions as func
import logging
from ortools.constraint_solver import pywrapcp
from ortools.constraint_solver import routing_enums_pb2

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.route(route="HttpTrigger2", auth_level=func.AuthLevel.ANONYMOUS)
def HttpTrigger2(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

name = req.params.get('name')
if not name:
    try:
        req_body = req.get_json()
    except ValueError:
        pass
    else:
        name = req_body.get('name')

if name:
    return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
else:
    return func.HttpResponse(
         "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
         status_code=200
    )

相关问题