【问题标题】:Azure Functions deployment in VS code using conda environment使用 conda 环境在 VS 代码中部署 Azure Functions
【发布时间】:2019-12-16 20:13:19
【问题描述】:

在尝试在本地运行我的天蓝色函数时,我在 VS 代码中遇到了一些与 python 设置不一致的问题。我试图避免使用 VS 代码为 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:
   ...

.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",
}

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

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

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

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

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

那么,这给我带来了一个问题,如果 VS 代码支持用于 azure 功能部署的 conda 环境,如果支持,我在这里缺少什么?

【问题讨论】:

  • 为了确保我正确理解了这个问题,你是说这个带有 VS Code 和 Azure Functions 的 Conda 在本地可以正常工作吗?但是在部署到 Azure 时会得到 HTTP 500?或者它在本地也不起作用?
  • 这是关于使用我的 conda env 进行本地部署的。由于处理了 python 设置,因此我没有遇到 azure 门户的问题。
  • 萌:你找到答案了吗?我正面临着确切的问题。无法引导“launch.json”文件指向 conda。
  • Rakesh,事情变得有点复杂,因为我们有一些团队成员在 Mac 上,一些在 Windows 上。所以,我们不得不做出调整。请参阅下面发布的我当前的 vscode 作为答案。

标签: python azure visual-studio-code azure-functions


【解决方案1】:

这是我为获得 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",
   ...
}

接下来编辑 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": []
        }
    ]
}

【讨论】:

    【解决方案2】:

    对于任何面临类似问题的人,由于 Brig 提供的答案,我最终得到了以下设置:

    .vscode\settings.json

    {
        // python.pythonPath is machine-dependent, AVOIDING a set value here
        // Local Machine Conda VENV (Define CONDAPATH in Windows Environment)
        "python.condaPath": "${env:CONDAPATH}/Library/bin/conda.bat",
        "python.pythonPath": "${env:CONDAPATH}/envs/azure/python.exe",
        // Needs `pyvenv.cfg` present in venv path?
        // "azureFunctions.pythonVenv": "${env:CONDAPATH}/envs/azure",
    
        // Created Local VENV by VS Code (pythonPath is difference for MAC vs Windows)
        "azureFunctions.pythonVenv": ".venv",
    
        // Windows pythonPath
        // "python.pythonPath": "src/.venv/Scripts/python.exe",
        // MAC pythonPath
        // "python.pythonPath": "src/.venv/bin/python",  
        
        // Azure Function Stuff
        "azureFunctions.deploySubpath": "src",
        "azureFunctions.scmDoBuildDuringDeployment": true,
        "azureFunctions.projectLanguage": "Python",
        "azureFunctions.projectRuntime": "~3",
        "azureFunctions.preDeployTask": "func: pack --build-native-deps",
        "debug.internalConsoleOptions": "neverOpen",    
    }    
    

    .vscode\tasks.json

    {
        "tasks": [
            {
                "type": "func",
                "command": "host start",
                "problemMatcher": "$func-watch",
                "isBackground": true,
                "dependsOn": "pipInstall",
                "options": {
                    "cwd": "${workspaceFolder}/src"
                }
            },
            {
                "label": "pipInstall",
                "type": "shell",
                "osx": {
                    "command": "${config:azureFunctions.pythonVenv}/bin/python -m pip install -r requirements.txt"
                },
                "windows": {
                    "command": "${config:azureFunctions.pythonVenv}\\Scripts\\python -m pip install -r requirements.txt"
                },
                "linux": {
                    "command": "${config:azureFunctions.pythonVenv}/bin/python -m pip install -r requirements.txt"
                },
                "problemMatcher": [],
                "options": {
                    "cwd": "${workspaceFolder}/src"
                }
            }
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 2021-08-10
      • 2017-06-25
      • 2021-12-07
      • 2021-10-13
      • 1970-01-01
      相关资源
      最近更新 更多