使用 conda 环境在 VS code 中部署 Azure Functions

Moe*_*Moe 5 python azure visual-studio-code azure-functions

当我尝试在本地运行我的 azure 函数时,VS 代码中的 python 设置遇到了一些不一致的问题。我试图避免使用 VS code 自动为 azure 函数项目设置的“venv”环境,而是使用我制作的预先创建的 conda 环境,并安装了所有要求。只是为了澄清一下,这是关于本地部署和不是天蓝色的门户。

myfunc__init__.py

import json
import logging
import time

import azure.functions as func
import pandas as pd                    # Import Error happens here!

def main(req: func.HttpRequest) -> func.HttpResponse:
   ...
Run Code Online (Sandbox Code Playgroud)

.vscode\Settings.json

{
  // Local Machine Conda VENV (Define CONDAPATH in Windows Environment)
  "python.condaPath": "%CONDAPATH%",
  "python.pythonPath": "%CONDAPATH%\\envs\\azure\\python.exe",
  "azureFunctions.pythonVenv": "%CONDAPATH%\\envs\\azure",

  // Created Local VENV by VS Code (pythonPath is difference for MAC vs Windows)
  //"azureFunctions.pythonVenv": ".venv",

  // Azure Function Stuff
  "azureFunctions.deploySubpath": ".",
  "azureFunctions.scmDoBuildDuringDeployment": true,
  "azureFunctions.projectLanguage": "Python",
  "azureFunctions.projectRuntime": "~2",
  "azureFunctions.preDeployTask": "func: pack --build-native-deps",
  "debug.internalConsoleOptions": "neverOpen",
}
Run Code Online (Sandbox Code Playgroud)

注意:如果我将 替换%CONDAPATH%为 conda 的实际绝对路径,问题仍然存在。

以防万一需要,launch.json配置如下:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Linux_PyFunc",
      "type": "python",
      "request": "attach",
      "port": 9091,
      "preLaunchTask": "func: host start"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

当 VS Code 运行这些函数时,部署会顺利完成,并生成本地链接。一旦我通过调用该函数Postman,返回的是HTTP 500状态,这是由于无法找到import pandas错误模块而导致的。

如果我设置的"azureFunctions.pythonVenv": ".venv"函数在settings.json本地部署,一旦触发/调用,它就会返回HTTP 200状态和正确的响应。

所以,这让我想到一个问题,VS code 是否支持 conda 环境来进行 azure 函数部署,如果是的话,我在这里缺少什么?

Bri*_*rig 6

这是我为获得 conda 环境而不是 venv 所做的事情

查看 settings.json 文件。由于我已经安装了 python 扩展并且已经为该项目配置了解释器,因此我有一个名为python.pythonPath. 我想使用这个 python 而不是 venv,所以我注释掉了 venv 设置。

{
    "azureFunctions.deploySubpath": "./functions/",
    "azureFunctions.scmDoBuildDuringDeployment": true,
    // "azureFunctions.pythonVenv": "../.venv", // Ignore not going to use
    "azureFunctions.projectLanguage": "Python",
    ...
    "python.pythonPath": "C:\\path\\to\\Anaconda3\\envs\\myenviron\\python.exe",
   ...
}
Run Code Online (Sandbox Code Playgroud)

接下来编辑tasks.json。请注意,有一个 pipInstall 任务。我更改了 widows 命令以使用我python.pythonPath在设置中定义的命令。

旧值类似于"command": "${config:azureFunctions.pythonVenv}/bin/python -m pip install...新值"command": "${config:python.pythonPath} -m pip install...

{
    "version": "2.0.0",
    "tasks": [
        ...
        {
            "label": "pipInstall",
            "type": "shell",
            "osx": {
                "command": "${config:python.pythonPath} -m pip install -r ${config:azureFunctions.deploySubpath}/requirements.txt"
            },
            "windows": {
                "command": "${config:python.pythonPath} -m pip install -r ${config:azureFunctions.deploySubpath}\\requirements.txt"
            },
            "linux": {
                "command": "${config:python.pythonPath} -m pip install -r ${config:azureFunctions.deploySubpath}/requirements.txt"
            },
            "problemMatcher": []
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)