5

I have written an Azure Funciton API(using python runtime) to automate the git checkin process(usin gitPython) for some the work which we are doing. It works fine in my local environment. However, when i tried publishing it to azure function, the API failed.

 ---> Microsoft.Azure.WebJobs.Script.Workers.Rpc.RpcException: Result: Failure
Exception: ImportError: Failed to initialize: Bad git executable.
The git executable must be specified in one of the following ways:
    - be included in your $PATH
    - be set via $GIT_PYTHON_GIT_EXECUTABLE
    - explicitly set via git.refresh()

All git commands will error until this is rectified.

This initial warning can be silenced or aggravated in the future by setting the
$GIT_PYTHON_REFRESH environment variable. Use one of the following values:
    - quiet|q|silence|s|none|n|0: for no warning or exception
    - warn|w|warning|1: for a printed warning
    - error|e|raise|r|2: for a raised exception

Example:
    export GIT_PYTHON_REFRESH=quiet

Stack:   File "/azure-functions-host/workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py", line 242, in _handle__function_load_request
    func_request.metadata.entry_point)
  File "/azure-functions-host/workers/python/3.7/LINUX/X64/azure_functions_worker/loader.py", line 66, in load_function
    mod = importlib.import_module(fullmodname)
  File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/site/wwwroot/tableauwkbcheckin/__init__.py", line 7, in <module>
    import git
  File "/home/site/wwwroot/.python_packages/lib/site-packages/git/__init__.py", line 85, in <module>
    raise ImportError('Failed to initialize: {0}'.format(exc))

The reason was GitPython is dependent on "git" executable on the system on which azure function is importing.

My question is : How to install git on the Azure function using App service plan. In general, if we need any additional package to be installed and used by function app, how to do it in azure function.

As a workaround, i am using os.system() to install git binary before importing git.

SunilS
  • 2,030
  • 5
  • 34
  • 62

1 Answers1

0

I believe this is a good case for using custom containers with functions. Since you will be building the container, you can ensure that you install all external dependencies.

An alternative would be to ship the git executable as part of the function package and set the GIT_PYTHON_GIT_EXECUTABLE app setting to %HOME%\site\wwwroot\<path-to-git-in-your-package> (windows) or $HOME/site/wwwroot/<path-to-git-in-your-package> (linux)

PramodValavala
  • 6,026
  • 1
  • 11
  • 30