【问题标题】:Azure functions: Installing Python modules and extensions on consumption planAzure 功能:在消费计划上安装 Python 模块和扩展
【发布时间】:2017-10-13 16:42:54
【问题描述】:

我正在尝试使用 Azure 函数运行 python 脚本。 我在 App Services 计划下成功更新了 python 版本并在 Azure 函数上安装了模块,但我需要在 Consumption 计划下使用它,因为我的脚本每天只执行一次,而且只执行几分钟,所以我只想支付执行的时间。见:https://azure.microsoft.com/en-au/services/functions/

现在我对此仍然很陌生,但据我了解,消耗计划会启动 vm 并在脚本执行后终止它,这与始终开启的应用服务计划不同。 我不知道为什么这意味着我不能在上面安装任何东西。我认为这只是意味着我每次启动它时都必须安装它。

我尝试通过 python 脚本本身和 kudu 命令行安装模块,但没有成功。

虽然在应用服务计划下很简单,但请遵循本教程:https://prmadi.com/running-python-code-on-azure-functions-app/

【问题讨论】:

    标签: python azure virtual-machine azure-functions


    【解决方案1】:

    在功能消费计划中,Kudu 扩展不可用。但是,您可以更新 pip 以正确安装所有依赖项:

    • 在函数上创建 Python 脚本(比如说 NameOfMyFunction/run.py)
    • 打开 Kudu 控制台
    • 转到您的脚本文件夹(应为 d:/home/site/wwwroot/NameOfMyFunction)
    • 在此文件夹中创建一个 virtualenv (python -m virtualenv myvenv)
    • 加载这个 venv(cd myenv/Scripts 并调用 activate.bat)

    您的 shell 现在应该以 (myvenv) 为前缀

    • 更新 pip (python -m pip install -U pip)
    • 安装你需要的东西(python -m pip install flask)

    现在在 Azure 门户的脚本中,更新 sys.path 以添加此 venv:

    import sys, os.path
    sys.path.append(os.path.abspath(os.path.join(os.path.dirname( __file__ ), 'myvenv/Lib/site-packages')))
    

    你现在应该可以开始你想要的了。

    (参考:https://github.com/Azure/azure-sdk-for-python/issues/1044

    编辑:阅读之前的评论,看来你需要 numpy.我刚刚测试,我能够安装 1.12.1 没有任何问题。

    【讨论】:

    • 感谢@Laurent Mazuel!这非常有效,不仅适用于 numpy 和 pandas,而且适用于我尝试过的每个模块。
    • @Laurent Manuel,感谢您的出色指导和帮助解除@mike!
    • 这种方法对我有用,但是导入 pandas 会减慢我的进程。仅导入就需要 20 多秒。我做错了什么还是这是预期的行为?
    • 请帮忙,我运行activate.bat但没有出现前缀(myvenv)
    • 通过 kudu 控制台安装外部 python 模块后,我可以假设它会正常运行吗?如果一个新的虚拟机启动,额外的模块也会被安装?
    【解决方案2】:

    您可以在 Consumption Plan 中上传您选择的 Python 版本的模块。请参考此链接的说明:https://github.com/Azure/azure-webjobs-sdk-script/wiki/Using-a-custom-version-of-Python

    【讨论】:

    • 谢谢玲。对于 Python 2.7.13,我找不到可嵌入的 zip 文件。我是否认为每次我在消费计划下启动一个脚本(以及一个虚拟机)时都需要更新版本和安装我的脚本需要的模块。
    • 对不起,我不熟悉 Python,并将有关定位可嵌入 zip 文件的问题留给其他人。至于您的第二个问题,模块将在您的 Function App 首次实例化时加载。 Function App 是一个托管所有 Functions 的进程。在消费计划下,每个功能应用有 5 分钟的时间来完成其所有工作负载,然后才被强制终止。在这 5 分钟的时间范围内,您的函数可能会被触发和执行多次,但 Python 模块只会在函数应用进程的实例化时加载一次。
    • 当我尝试从我的脚本中安装 numpy 时遇到:2017-05-15T06:33:53.919 WindowsError: [Error 5] Access is denied: 'D:\\Python27\\Lib \\site-packages\\numpy'
    • 我以前见过这个错误。不幸的是,您将无法在该路径上安装 numpy。请查看以下相关 SO 线程:stackoverflow.com/a/40474485/6465830
    【解决方案3】:

    这对我有用:

    免责声明:我使用包含 Python 脚本执行的 C# 函数,使用带有System.Diagnostics.Process 类的命令行。

    • 从 Azure 门户为 Azure 函数添加相关的 Python 扩展: 平台功能 -> 开发工具 -> 扩展
      它将python安装到D:\home\python364x86(从Kudu控制台看到)

    • 添加一个名为 WEBSITE_USE_PLACEHOLDER 的应用程序设置,并将其值设置为 0。这对于解决导致 Python 扩展在卸载函数应用后停止工作的 Azure Functions 问题是必要的。
      请参阅:Using Python 3 in Azure Functions 问题。

    • 使用pip install ...从 Kudu CMD 命令行控制台安装软件包
      (在我的例子中是pip install pandas

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-17
      • 2019-08-25
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      相关资源
      最近更新 更多