如何将 Python 模块 运行 作为 Azure 函数导入 Linux 消费计划?
How can I import Python modules running as an Azure Function on a Linux Consumption Plan?
我的 Python 代码 运行ning 在本地通过导入以下库开始:
import logging
import azure.functions as func
from sendgrid import SendGridAPIClient
from datetime import datetime
import wikipedia
import urllib.request, json
requirements.txt (screenshot). My code runs just fine locally, but once I uploaded to an Azure Function, I get the error (screenshot) 中也列出了这些:
ModuleNotFoundError:没有名为 'sendgrid'
的模块
我在别处读到,您可以通过 Kudu 在虚拟环境中安装这些模块。但消费计划似乎不支持 Kudu:
如何在使用 Azure Functions 的消费计划中 运行 Python 使用外部 modules/libraries 代码?
我通过在 VS Code 中单击 "Deploy to Function App" 在我这边测试它并成功。
然后我通过如下所示的命令部署它:
func azure functionapp publish <APP_NAME> --build remote
部署后也正常工作。
由于我不知道你选择了哪种方式从本地部署到azure,如果你已经尝试了上面两种解决方案都失败了,我想你可以试试下面的命令:
func azure functionapp publish <APP_NAME> --build local
使用 --build local 选项,从 requirements.txt 文件中读取项目依赖项,并在本地下载并安装这些依赖包。项目文件和依赖项从本地计算机部署到 Azure。这会导致将更大的部署包上传到 Azure。我认为这个解决方案不会丢失模块 "sendgrid".
只需在 requirements.txt 中包含一个包名称就可以让系统在将应用程序发布到 Azure (link) 时自动安装该包。
我做错的是我包含了这一行:
from sendgrid import SendGridAPIClient
但是未能显式导入 sendgrid 包:
import sendgrid
两者结合解决了问题。
我的 Python 代码 运行ning 在本地通过导入以下库开始:
import logging
import azure.functions as func
from sendgrid import SendGridAPIClient
from datetime import datetime
import wikipedia
import urllib.request, json
requirements.txt (screenshot). My code runs just fine locally, but once I uploaded to an Azure Function, I get the error (screenshot) 中也列出了这些: ModuleNotFoundError:没有名为 'sendgrid'
的模块我在别处读到,您可以通过 Kudu 在虚拟环境中安装这些模块。但消费计划似乎不支持 Kudu:
如何在使用 Azure Functions 的消费计划中 运行 Python 使用外部 modules/libraries 代码?
我通过在 VS Code 中单击 "Deploy to Function App" 在我这边测试它并成功。
然后我通过如下所示的命令部署它:
func azure functionapp publish <APP_NAME> --build remote
部署后也正常工作。
由于我不知道你选择了哪种方式从本地部署到azure,如果你已经尝试了上面两种解决方案都失败了,我想你可以试试下面的命令:
func azure functionapp publish <APP_NAME> --build local
使用 --build local 选项,从 requirements.txt 文件中读取项目依赖项,并在本地下载并安装这些依赖包。项目文件和依赖项从本地计算机部署到 Azure。这会导致将更大的部署包上传到 Azure。我认为这个解决方案不会丢失模块 "sendgrid".
只需在 requirements.txt 中包含一个包名称就可以让系统在将应用程序发布到 Azure (link) 时自动安装该包。
我做错的是我包含了这一行:
from sendgrid import SendGridAPIClient
但是未能显式导入 sendgrid 包:
import sendgrid
两者结合解决了问题。