Azure functions: Installing Python modules and ext

2019-02-01 12:14发布

问题:

I am trying to run a python script with Azure functions. I had success updating the python version and installing modules on Azure functions under the App Services plan but I need to use it under the Consumption plan as my script will only execute once everyday and for only a few minutes, so I want to pay only for the time of execution. See: https://azure.microsoft.com/en-au/services/functions/

Now I'm still new to this but from my understanding the consumption plan spins up the vm and terminates it after your script has been executed unlike the App Service plan which is always on. I am not sure why this would mean that I can't have install anything on it. I thought that would just mean I have to install it every time I spin it up.

I have tried installing modules through the python script itself and the kudu command line with no success.

While under the app service plan it was simple, following this tutorial: https://prmadi.com/running-python-code-on-azure-functions-app/

回答1:

On Functions Comsumption plan, Kudu extensions are not available. However, you can update pip to be able to install all your dependencies correctly:

  • Create your Python script on Functions (let's say NameOfMyFunction/run.py)
  • Open a Kudu console
  • Go to the folder of your script (should be d:/home/site/wwwroot/NameOfMyFunction)
  • Create a virtualenv in this folder (python -m virtualenv myvenv)
  • Load this venv (cd myenv/Scripts and call activate.bat)

Your shell should be now prefixed by (myvenv)

  • Update pip (python -m pip install -U pip)
  • Install what you need (python -m pip install flask)

Now in the Azure Portal, in your script, update the sys.path to add this venv:

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

You should be able to start what you want now.

(Reference: https://github.com/Azure/azure-sdk-for-python/issues/1044)

Edit: reading previous comment, it seems you need numpy. I just tested right now and I was able to install 1.12.1 with no issues.



回答2:

You may upload the modules for the Python version of your choice in Consumption Plan. Kindly refer to the instructions at this link: https://github.com/Azure/azure-webjobs-sdk-script/wiki/Using-a-custom-version-of-Python



回答3:

This is what worked for me:

Dislaimer: I use C# Function that includes Python script execution, using command line with System.Diagnostics.Process class.

  • Add relevant Python extension for the Azure Function from Azure Portal: Platform Features -> Development Tools -> Extensions
    It installed python to D:\home\python364x86 (as seen from Kudu console)

  • Add an application setting called WEBSITE_USE_PLACEHOLDER and set its value to 0. This is necessary to work around an Azure Functions issue that causes the Python extension to stop working after the function app is unloaded.
    See: Using Python 3 in Azure Functions question.

  • Install the packages from Kudu CMD line console using pip install ...
    (in my case it was pip install pandas)