我第一次使用部署管道将python函数应用程序部署到azure:
https://docs.microsoft.com/bs-latn-ba/azure/azure-functions/functions-how-to-azure-devops
包是使用kudu-zip-deploy部署到azure的。
我的http触发函数在本地(在windows上)运行得非常好,但是我在azure上有500个内部错误,因为它找不到模块请求。
异常:modulenotfounderror:没有名为“requests”的模块
导入\uu init \uuuuy.py:
import logging, requests, os
import azure.functions as func
如果我删除“requests”依赖项,该函数将在azure上工作(状态200)。
请求库由requirement.txt导入,并通过构建管道复制到.venv36/lib/site packages/requests。
所以我想知道包中构建的virtual environment.venv36是否被部署在azure中的函数所使用。没有关于如何在azure中激活虚拟环境的指示。
5条答案
按热度按时间w51jfk4q1#
如果你命名你的虚拟环境
worker_venv
正如您链接的文档中所命名的,它应该可以工作(假设您的管道使用的是linux环境)。但是,pythonazure函数文档将很快更新,建议不要从部署管道部署整个虚拟环境。相反,您希望在中安装软件包
.python_packages/lib/site-packages
.你能做到的--
而不是--
它应该很好用。
cld4siwp2#
希望我能正确理解你的问题。
在本地计算机上安装libs时,libs安装在python所在的位置(或者至少安装在实际代码所在的位置以外的位置)。这意味着,在打包代码时,实际上并没有将lib放在一起。
为了解决这个问题,可以使用虚拟环境。python提供了一个venv工具(还有一个标准的linux virtual env工具),您可以通过该工具运行:
我知道你提到过windows,所以我建议使用wsl和ubuntu映像(通常是一个很好的工具)。也许有一种方法可以让它在windows下工作,否则我不知道。
编辑:固定格式
nwo49xxi3#
你需要分别处理这两个进口,
tct7dpnv4#
我们使用最新版本的yaml管道模板也遇到了同样的问题:
删除虚拟环境步骤后,功能应用程序部署并运行时不会出现任何问题。这似乎不是python的最佳实践;然而,这是我们唯一能做的事情,让这个正确部署在azuredevops管道。
另外,在进行此更改之前,我们能够使用visualstudio代码插件进行部署,这向我们表明这是一个环境问题。
microsoft更新的文档(1/12/2020)
https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-azure-devops?tabs=python
azure-pipelines.yml(我们在azure-devops管道上的工作版本)
jk9hmnmh5#
虽然很旧,但是:
install --target .python_packages/lib/site-packages -r requirements.txt
例如,如果你使用3.7
然后是pip3.7install --target .python_packages/lib/site-packages -r requirements.txt
很有魅力