繁体   English   中英

在 VS Code 和 virtualenv 中使用 Azure 函数时找不到 Numpy 模块

[英]Numpy module not found when working with Azure Functions in VS Code and virtualenv

我刚开始使用 azure 函数,并尝试在本地创建一个小示例,使用 VS Code 和 Azure 函数扩展。

例子:

# First party libraries
import logging

# Third party libraries
import numpy as np
from azure.functions import HttpResponse, HttpRequest


def main(req: HttpRequest) -> HttpResponse:
    seed = req.params.get('seed')

    if not seed:
        try:
            body = req.get_json()
        except ValueError:
            pass
        else:
            seed = body.get('seed')

    if seed:
        np.random.seed(seed=int(seed))
        r_int = np.random.randint(0, 100)
        logging.info(r_int)
        return HttpResponse(
            "Random Number: " f"{str(r_int)}", status_code=200
            )
    else:
        return HttpResponse(
            "Insert seed to generate a number",
            status_code=200
            )

当全局安装 numpy 时,此代码工作正常。 但是,如果我仅在虚拟环境中安装它,则会出现以下错误:

*Worker failed to function id 1739ddcd-d6ad-421d-9470-327681ca1e69.
[15-Jul-20 1:31:39 PM] Result: Failure
Exception: ModuleNotFoundError: No module named 'numpy'. Troubleshooting Guide: https://aka.ms/functions-modulenotfound*

多次查看,虚拟环境中安装了numpy,在.vscode/settings.json文件中也指定了环境。

pip 冻结虚拟环境“worker_venv”:

$ pip freeze
azure-functions==1.3.0
flake8==3.8.3
importlib-metadata==1.7.0
mccabe==0.6.1
numpy==1.19.0
pycodestyle==2.6.0
pyflakes==2.2.0
zipp==3.1.0

.vscode/settings.json 文件:

{
  "azureFunctions.deploySubpath": ".",
  "azureFunctions.scmDoBuildDuringDeployment": true,
  "azureFunctions.pythonVenv": "worker_venv",
  "azureFunctions.projectLanguage": "Python",
  "azureFunctions.projectRuntime": "~2",
  "debug.internalConsoleOptions": "neverOpen"
}

我试图在文档中找到一些东西,但没有发现任何关于虚拟环境的具体信息。 我不知道我是否遗漏了什么?

编辑:顺便说一句,我在 Windows 10 机器上

编辑:我在下图中包含了我的项目的文件夹结构

在此处输入图像描述

编辑:在下图中添加了虚拟环境 Lib 文件夹的内容

在此处输入图像描述

编辑:使用下面的pip install numpy命令添加了终端的屏幕截图

在此处输入图像描述

编辑:使用新的虚拟环境创建了一个新项目并重新安装了 numpy,如下截图,问题仍然存在。

在此处输入图像描述

编辑:在下面添加了 launch.json 代码

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Attach to Python Functions",
      "type": "python",
      "request": "attach",
      "port": 9091,
      "preLaunchTask": "func: host start"
    }
  ]
}

解决了

所以问题既不在于 python,也不在于 VS Code。 问题是我的机器(新笔记本电脑)上的执行策略设置为受限,因此无法运行.venv\Scripts\Activate.ps1脚本。

要解决此问题,只需使用管理员权限打开 powershell 并运行set-executionpolicy remotesigned 重启 VS Code,一切正常

我没有看到错误,因为当您启动 azure 时在终端中发生了多次登录。我将@HuryShen 的答案标记为正确,因为评论让我找到了解决方案。 谢谢你们所有人

对于这个问题,我不清楚您是在本地运行还是在 azure 云上运行时遇到错误。 因此,针对这两种情况提供两种建议。

1 、如果在azure上运行function时出现错误,可能是模块没有安装成功。 将 function 从本地部署到 azure 时,您需要将模块添加到requirements.txt (正如 Anatoli 在评论中提到的那样)。 您可以通过以下命令自动生成requirements.txt

pip freeze > requirements.txt

之后,我们可以在requirements.txt中找到numpy==1.19.0 在此处输入图像描述

Now, deploy the function from local to azure by the command below, it will install the modules success on azure and work fine on azure.

func azure functionapp publish <your function app name> --build remote

2.如果在本地运行function时出现错误。 由于您提供了安装在worker_venv中的模块,看来您已成功安装numpy模块。 我也在本地测试它,安装numpy并且它工作正常。 所以我认为你可以检查你的虚拟环境( worker_venv )是否存在于正确的位置。 下面是我在本地VS代码中的function结构,请检查您的虚拟环境是否与我的位于同一位置。

在此处输入图像描述

-----更新------

运行命令来设置执行策略,然后激活虚拟环境:

set-executionpolicy remotesigned
.venv\Scripts\Activate.ps1

我可以解决卸载 python3 的问题(参见此处的指南https://stackoverflow.com/a/60318668/11986067 )。

通过 F5 或func start应用程序功能后,显示以下 output:

在此处输入图像描述

这个版本不正确。 我在Azure扩展中创建项目时选择了python 3.7.0。 删除此 python3 版本后,显示正确的版本并解决导入问题:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM