Azure functions Azure功能-应用程序服务计划-安装git软件包

Azure functions Azure功能-应用程序服务计划-安装git软件包,azure-functions,azure-app-service-plans,gitpython,azure-function-app,Azure Functions,Azure App Service Plans,Gitpython,Azure Function App,我已经编写了一个Azure Funciton API(使用python运行时)来自动化git签入过程(使用gitPython),以完成我们正在做的一些工作。它在我当地的环境中工作得很好。然而,当我尝试将其发布到azure函数时,API失败了 ---> Microsoft.Azure.WebJobs.Script.Workers.Rpc.RpcException: Result: Failure Exception: ImportError: Failed to initialize: B

我已经编写了一个Azure Funciton API(使用python运行时)来自动化git签入过程(使用gitPython),以完成我们正在做的一些工作。它在我当地的环境中工作得很好。然而,当我尝试将其发布到azure函数时,API失败了

 ---> 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))
-->Microsoft.Azure.WebJobs.Script.Workers.Rpc.rpceException:结果:失败
异常:ImportError:未能初始化:错误的git可执行文件。
必须通过以下方式之一指定git可执行文件:
-包含在$PATH中
-可通过$GIT\u PYTHON\u GIT\u可执行文件设置
-通过git.refresh()显式设置
所有git命令都将出错,直到纠正为止。
此初始警告可以在将来通过设置
$GIT\u PYTHON\u REFRESH环境变量。使用以下值之一:
-安静| q |沉默| s |无| n | 0:没有警告或例外
-警告| w |警告| 1:用于打印警告
-错误| e | raise | r | 2:针对引发的异常
例子:
导出GIT\u PYTHON\u REFRESH=quiet
堆栈:文件“/azure functions host/workers/python/3.7/LINUX/X64/azure\u functions\u worker/dispatcher.py”,第242行,在\u handle\u function\u load\u请求中
func_请求.元数据.入口点)
文件“/azure functions host/workers/python/3.7/LINUX/X64/azure\u functions\u worker/loader.py”,第66行,在load\u函数中
mod=importlib.import\u模块(fullmodname)
文件“/usr/local/lib/python3.7/importlib/_init__uuu.py”,第127行,在导入模块中
return _bootstrap._gcd_import(名称[级别:],包,级别)
文件“”,第1006行,在\u gcd\u导入中
文件“”,第983行,在_find_和_load中
文件“”,第953行,在“查找”和“加载”中解锁
文件“”,第219行,在“调用”中,删除了“帧”
文件“”,第1006行,在\u gcd\u导入中
文件“”,第983行,在_find_和_load中
文件“”,第967行,在“查找”和“加载”中解锁
文件“”,第677行,在\u加载\u解锁
exec_模块中第728行的文件“”
文件“”,第219行,在“调用”中,删除了“帧”
文件“/home/site/wwwroot/tableauwkbcheckin/_init__uuu.py”,第7行,在
进口吉特
文件“/home/site/wwwroot/.python_packages/lib/site packages/git/_init__.py”,第85行,在
raise ImportError('未能初始化:{0}'。格式(exc))
原因是GitPython依赖于azure函数正在导入的系统上的“git”可执行文件

我的问题是:如何使用应用服务计划在Azure函数上安装git。一般来说,如果我们需要function app安装和使用任何附加软件包,那么如何在azure function中进行安装和使用


作为一种解决方法,我在导入git之前使用os.system()安装git二进制文件。

我认为这是一个很好的使用git的案例。由于您将构建容器,因此可以确保安装所有外部依赖项


另一种选择是将
git
可执行文件作为的一部分发布,并将
git\u PYTHON\u git\u可执行文件设置为
%HOME%\site\wwwroot\
(windows)或
$HOME/site/wwwroot/
(linux)

,我相信这是一个很好的使用案例。由于您将构建容器,因此可以确保安装所有外部依赖项

另一种方法是将
git
可执行文件作为的一部分发布,并将
git\u PYTHON\u git\u可执行文件设置为
%HOME%\site\wwwroot\
(windows)或
$HOME/site/wwwroot/
(linux)