Как я могу импортировать модули Python, работающие как функция Azure, в соответствии с планом потребления Linux?

Мой код Python, работающий локально, начинается с импорта следующих библиотек:

import logging
import azure.functions as func
from sendgrid import SendGridAPIClient
from datetime import datetime
import wikipedia
import urllib.request, json

Они также перечислены в файле requirements.txt (снимок экрана). Мой код отлично работает локально, но после загрузки в функцию Azure я получаю сообщение об ошибке (снимок экрана): ModuleNotFoundError: нет модуля с именем sendgrid

Я читал в другом месте, что вы могли бы установить эти модули в виртуальной среде через Kudu. Но не похоже, что Kudu поддерживается планом потребления:

снимок экрана Кудо

Как запустить код Python с внешними модулями / библиотеками в плане потребления с функциями Azure?


person Charlie Brown    schedule 04.12.2019    source источник


Ответы (2)


Я тестирую его на своей стороне, щелкнув «Развернуть в приложении-функции» в VS Code, и все прошло успешно.

Затем я развернул его с помощью команды, показанной ниже:

func azure functionapp publish <APP_NAME> --build remote

После развертывания тоже работает нормально.

Поскольку я не знаю, какой путь вы выбрали для развертывания с локального на лазурный, если вы попробовали оба из двух вышеперечисленных решений и потерпели неудачу, я думаю, вы можете попробовать с помощью следующей команды:

func azure functionapp publish <APP_NAME> --build local

Используя параметр --build local, зависимости проекта считываются из файла requirements.txt, и эти зависимые пакеты загружаются и устанавливаются локально. Файлы проекта и зависимости развертываются с вашего локального компьютера в Azure. В результате в Azure загружается более крупный пакет развертывания. Думаю, это решение не потеряет модуль sendgrid.

person Hury Shen    schedule 04.12.2019

Достаточно просто включить имя пакета в файл requirements.txt, чтобы система автоматически установила пакет при публикации приложения в Azure (ссылка).

Что я делал неправильно, так это то, что я включил эту строку:

from sendgrid import SendGridAPIClient

Но не удалось явно импортировать пакет sendgrid:

import sendgrid

Их комбинация устранила проблему.

person Charlie Brown    schedule 04.12.2019
comment
Привет, Чарли, счастлив, что ты решил свою проблему. Поскольку вы предоставили решение здесь, не могли бы вы отметить свой ответ как принятый? Это может быть полезно для других участников сообщества, спасибо ~ - person Hury Shen; 05.12.2019