我有一个通过 azure devops 在 api_env 虚拟环境中部署的 python azure 函数应用程序。同样,我有一个 python Flask 应用程序,即 python 后端和 typescript 前端。 python 后端是通过激活一个名为 backend_env 的不同虚拟环境来部署的。应用程序后端代码调用 API,即部署为 Azure 函数的 API。但是,当我通过调试控制台查看时,使用的一些软件包(例如 openai、langchain 等)位于 requests.txt 中,并且位于 azure 函数应用程序的 api_env 文件夹中,但 azure 函数会抛出这些软件包的“模块未找到”错误。我尝试了各种选项,即除了通过 devops 管道激活 api_env 之外,我还在配置设置中添加了设置,但似乎没有任何帮助。有人能指出我正确的方向吗?
`YAML 代码 步骤: - 脚本:| python3.9 -m venv api_env 源 api_env/bin/activate pip install --升级安装工具 pip3.9安装-r需求.txt 工作目录:$(Build.SourcesDirectory)/api/python displayName: '安装 api 的 Python 依赖项'
- task: AzureFunctionApp@1
inputs:
azureSubscription: 'spn'
appType: 'functionAppLinux'
appName: '$(knowbot-funcapp-name)'
package: '$(System.DefaultWorkingDirectory)/api/python'
startUpCommand: |
source api_env/bin/activate
func start --python
workingDirectory: '$(System.DefaultWorkingDirectory)/api/python'
displayName: 'Deploy Function App'`
还尝试在函数 init.py 中添加以下内容
sys.path.append('/home/site/wwwroot/api_env/lib/python3.9/site-packages')
我期待 api 调用成功。
我尝试使用requirements.txt中的Openai模块在Azure Devops中部署具有虚拟环境的Function应用程序,并且成功了,请参阅下面:-
我的init.py代码:-
import openai
import logging
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
# Set up OpenAI API key
openai.api_key = "sk-8Zg7i4icv8gh60e3IhnaT3Bxxxxx"
# Use the OpenAI API to generate some text
prompt = "Hello, OpenAI!"
response = openai.Completion.create(engine="text-davinci-002", prompt=prompt)
# Log the response
logging.info(response)
# Return the response as an HTTP response
return func.HttpResponse(response.choices[0].text)
我的function.json代码:-
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get"
]
},
{
"type": "http",
"direction": "out",
"name": "$return"
}
],
"scriptFile": "__init__.py",
"entryPoint": "main"
}
我的主机.json:-
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.*, 4.0.0)"
}
}
我的要求.txt :-
azure-functions
openai
我的 YAML 管道脚本:-
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.9'
addToPath: true
- script: |
python3 -m venv env
source env/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
displayName: 'Install Python dependencies'
- task: AzureFunctionApp@1
inputs:
azureSubscription: '<Subscription>'
appType: 'functionAppLinux'
appName: 'siliconfunc32'
package: '$(System.DefaultWorkingDirectory)'
startUpCommand: 'func start --python'
检查您的虚拟环境 api_env 是否在您的 Function 应用程序启动之前启动。在 YAML 代码中,您在安装依赖项之前正在运行虚拟环境,请尝试在函数启动之前启动虚拟环境,如下所示:-
startUpCommand: |
source api_env/bin/activate
func start --python
此外,验证您的虚拟环境所在位置,您可以输入此命令来检查您的系统路径:-
import sys
print(sys.path)
使用以下代码启动虚拟环境时添加虚拟环境的完整路径:-
startUpCommand: |
source /path/to/api_env/bin/activate
func start --python