【问题标题】:Using Python 3 in Azure Functions在 Azure Functions 中使用 Python 3
【发布时间】:2017-11-09 17:41:32
【问题描述】:

我的目标是让一些 Python 3 代码作为 Azure Functions 运行,但我无法让 Python 3 工作(我意识到 Azure Functions 中的 python 支持仍处于试验阶段)。

这是我尝试过的。

  1. 创建一个新的函数应用程序 - 我给它起了一个名字,其他的都默认了。

  2. 创建了一个 Python HttpTrigger 函数,代码如下:

    import sys
    import os
    
    response = open(os.environ['res'], 'w')
    response.write(sys.version)
    response.close()    
    

运行此函数会按预期提供"2.7.8 (default, Jun 30 2014, 16:03:49) [MSC v.1500 32 bit (Intel)]" 的输出,因为 2.7.8 是安装在 Azure Functions 环境中的默认 python 版本。

  1. 然后我使用 Kudu 将可嵌入版本的 python 3.6.1 上传到 d:\site\tools,如this Azure wiki page 中所述

当我再次运行该函数时,我得到了输出 "3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)]" - 所以一切都很好。

但是,如果我重新启动函数应用程序(或者只是将其单独放置一段时间以使其关闭),那么一切都会中断。运行函数给出:

{
  "id": "dd7c4462-0d73-49e0-8779-67b15a9bba82",
  "requestId": "ff553805-501d-4ea6-93f6-7bd6fa445a37",
  "statusCode": 500,
  "errorCode": 0,
  "message": "Exception while executing function: Functions.HttpTriggerPython31 -> "
}

日志显示:

2017-11-09T17:37:04.988 Function started (Id=941e5bef-e5e0-4604-8533-dd2a5fcaddf0)
2017-11-09T17:37:05.348 Exception while executing function: Functions.HttpTriggerPython31. Microsoft.Azure.WebJobs.Script: .
2017-11-09T17:37:05.364 Function completed (Failure, Id=941e5bef-e5e0-4604-8533-dd2a5fcaddf0, Duration=363ms)

如果我从 d:\site\tools 中删除 python 文件,则函数会再次开始工作,但使用 v2.7.8 运行

但是,我可以让 python 3.x 从 Kudu 控制台运行:

D:\home\site\tools>python -c "import sys;print(sys.version)"
3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 17:26:49) [MSC v.1900 32 bit (Intel)]

还有其他人在 Azure Functions 中成功运行 Python 3 吗?我需要做什么才能使其正常工作?

【问题讨论】:

    标签: python python-3.x azure azure-functions


    【解决方案1】:

    目前有一个未解决的问题:

    但作为一种解决方法,一切都在解释here(所有致谢作者:Murat Eken

    1. 创建您的函数。
    2. 使用替代 Python 版本安装站点扩展,并将处理程序映射配置为默认使用该安装..

      2.1。转到“平台功能 > 所有设置 > 扩展程序 > + 添加

      2.2。安装“Python 3.6.2 x86”扩展。

      2.3。转到“平台功能 > 应用程序设置”

      2.4。添加处理程序映射:
      扩展名:fastCgi
      处理器:D:\home\python362x86\python.exe
      参数:D:\home\python362x86\wfastcgi.py

    2.5 添加一个名为 WEBSITE_USE_PLACEHOLDER 的应用程序设置并将其值设置为 0。这是解决an Azure Functions issue that causes the Python extension to stop working after the function app is unloaded 所必需的。

    2.6。保存您的应用设置。

    这是我的函数的输出 "3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)]"

    您可以使用ARM Template 自动执行这些步骤,以下是模板中有趣的部分:

    {
      "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
      "contentVersion": "1.0.0.0",
      "parameters": {
        //...
      },
      "variables": {
        // ...
      },
      "resources": [
        // ...
        {
          "type": "Microsoft.Web/sites",
          // ...
          "kind": "functionapp",
          "properties": {
            // ...
            "siteConfig": {
              "handlerMappings": [{
                "arguments": "D:\\home\\python362x86\\wfastcgi.py",
                "extension": "fastCgi",
                "scriptProcessor": "D:\\home\\python362x86\\python.exe"
              }]
              // ...
            },
            "resources": [{
              "name": "python362x86",
              "type": "siteextensions",
              "apiVersion": "2016-08-01",
              "properties": {}
              // ...
            }]
            // ...
          }
        }
      ]
    }
    

    【讨论】:

    • 实际上这并没有完全解决问题。安装 Python 扩展并设置 fastcgi 处理程序后,脚本运行。但是当我离开它几个小时后,它又回到了 500 响应。重新启动函数应用程序并不能解决此问题,但在更改应用程序设置(例如添加名为 DUMMY 的设置)后,脚本会再次开始工作。
    • 我想我们需要检查这个问题的解决方案:github.com/Azure/azure-webjobs-sdk-script/issues/519
    • 为了防止脚本在几个小时后中断,有必要添加应用程序设置 WEBSITE_USE_PLACEHOLDER=0 请参阅social.msdn.microsoft.com/Forums/en-US/…
    • 很高兴知道,很好:-)
    • 这不再适用于 Azure 门户中的新功能应用体验。 “平台功能”消失了,似乎没有基于 UI 的方式来设置自定义处理程序。有谁知道如何使用新体验来做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多