Bla*_*Cat 5 python numpy virtualenv azure-functions
我是使用 azure 函数的新手,并尝试使用 VS Code 和 Azure Functions 扩展在本地编写一个小示例。
例子:
# 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
)
Run Code Online (Sandbox Code Playgroud)
当全局安装 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*
Run Code Online (Sandbox Code Playgroud)
我多次检查虚拟环境中安装了numpy,并且.vscode/settings.json文件中也指定了环境。
virtualenv“worker_venv”的 pip freeze:
$ 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
Run Code Online (Sandbox Code Playgroud)
.vscode/settings.json 文件:
{
"azureFunctions.deploySubpath": ".",
"azureFunctions.scmDoBuildDuringDeployment": true,
"azureFunctions.pythonVenv": "worker_venv",
"azureFunctions.projectLanguage": "Python",
"azureFunctions.projectRuntime": "~2",
"debug.internalConsoleOptions": "neverOpen"
}
Run Code Online (Sandbox Code Playgroud)
我试图在文档中查找一些内容,但没有找到有关虚拟环境的具体内容。不知道我是否遗漏了什么?
编辑:顺便说一句,我在 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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
解决了
所以问题既不在于 python,也不在于 VS Code。问题是我的机器(新笔记本电脑)上的执行策略被设置为受限,因此.venv\Scripts\Activate.ps1脚本无法运行。
要解决此问题,只需使用管理员权限打开 powershell 并运行set-executionpolicy remotesigned。重新启动 VS Code,一切都会正常工作
我没有看到该错误,因为启动 azure 时会在终端中进行多次登录。我会将@HuryShen 的答案标记为正确,因为这些评论让我找到了解决方案。谢谢大家
对于这个问题,我不清楚您是在本地运行还是在天蓝色云上运行时遇到错误。因此针对这两种情况提供两种建议。
1.如果在azure上运行该函数时出现错误,则可能没有成功安装模块。将功能从本地部署到azure时,需要添加模块requirements.txt(如Anatoli在评论中提到的)。requirements.txt您可以通过以下命令自动生成:
pip freeze > requirements.txt
Run Code Online (Sandbox Code Playgroud)
之后我们就可以找到numpy==1.19.0存在于requirements.txt.

现在,通过以下命令将函数从本地部署到azure,它将在azure上成功安装模块并在azure上正常工作。
func azure functionapp publish <your function app name> --build remote
Run Code Online (Sandbox Code Playgroud)
2.如果在本地运行该函数时出现错误。由于您提供了安装的模块worker_venv,看来您已经numpy成功安装了模块。我也在本地测试了它,安装numpy并且工作正常。所以我认为你可以检查你的虚拟环境(worker_venv)是否存在于正确的位置。以下是我在本地VS代码中的函数结构,请检查您的虚拟环境是否与我的位于同一位置。
- - -更新- - -
运行命令设置执行策略,然后激活虚拟环境:
set-executionpolicy remotesigned
.venv\Scripts\Activate.ps1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2999 次 |
| 最近记录: |