在Azure函数中使用Python 3

时间:2017-11-09 17:41:33

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

我的目标是将一些Python 3代码作为Azure函数运行,但我无法使Python 3工作(我发现Azure函数中的python支持仍然是实验性的。)

这是我尝试过的。

  1. 创建一个新的功能应用程序 - 我给它起了一个名字,并将其他所有内容保留为默认值。

  2. 使用以下代码创建了一个Python HttpTrigger函数:

    import sys
    import os
    
    response = open(os.environ['res'], 'w')
    response.write(sys.version)
    response.close()    
    
  3. 运行此函数可以按预期输出"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
    2. 中所述

      当我再次运行该函数时,我得到输出"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

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

      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功能中成功运行Python 3?我需要做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:10)

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

但作为一种解决方法,一切都是解释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

  3. Azure Function - Handler mapping to use a specific python version

    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": {}
              // ...
            }]
            // ...
          }
        }
      ]
    }