【问题标题】:How to install python module in Azure Function Linux app如何在 Azure Function Linux 应用中安装 python 模块
【发布时间】:2020-05-23 16:36:39
【问题描述】:

我正在尝试在 Azure 函数中为我的 python 脚本安装模块。我已阅读有关使用 Kudu 工具进行 pip 安装的文档。但是,这在 Linux 应用程序上是不允许的。此外,微软似乎已经贬低了对 Python Azure Functions 在 Windows 操作系统上运行的支持。以下是我目前所拥有的。

编辑更新:我做了更多研究,发现安装 python 模块的方法是使用 venv,然后将 venv(安装了 pip 包)部署到 Azure Function。我在安装了 pip 包的文件夹路径中创建了 venv,但问题仍然存在。

文件夹结构

 -FunctionApp
    -MainFunction
      -_init_.py
      -functions.json
 -Requirements.txt

Requiremtents.txt 文件包含:

psycopg2 == 2.8.5
yfinance == 0.1.54

Init.py 文件包含以下代码,用于导入Requirements.txt 文件中引用的模块:

import psycopg2
import yfinance

当我尝试在 Azure 门户中运行该函数时,我收到以下错误:

Result: Result: Failure Exception: ImportError: libpq.so.5: cannot open shared object file: No such file or directory 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/Navi_Function_Notifier/__init__.py", line 3, in <module> import psycopg2 File "/home/site/wwwroot/.python_packages/lib/site-packages/psycopg2/__init__.py", line 51, in <module> from psycopg2._psycopg import ( # noqa

如果有人能够在 Linux 上的 Azure 函数中导入 python 模块,我将不胜感激!

【问题讨论】:

    标签: python pip azure-functions


    【解决方案1】:

    您的“requirements.txt”似乎位于错误的位置,“requirement.txt”文件应该在函数应用程序文件夹中,但在您的文件夹结构中,它与“FunctionApp”文件夹定位协调。下面我提供了如何在python函数中安装模块并将其部署到azure的所有步骤供您参考。

    1.在本地运行pip install命令安装python函数中的模块。

    pip install psycopg2
    pip install yfinance
    

    2.通过运行以下命令生成“requirements.txt”文件:

    pip freeze > requirements.txt
    

    我们可以看到“requirements.txt”是自动生成的,它的位置如下图所示。

    3. 运行以下命令将您的功能从本地部署到 azure。

    func azure functionapp publish <function app name> --build remote
    

    应该是您在 azure 门户上创建的函数应用的名称。运行该命令后,它将根据“requirements.txt”中的模块列表将您的功能部署到azure并安装模块。

    顺便说一句:

    如果以上步骤都不起作用,你可以尝试通过“build local”来部署功能,运行这个命令:

    func azure functionapp publish <function app name> --build local
    

    此命令将在本地构建您的函数并将其部署到 azure(包括所有模块)。

    希望对你有帮助~

    【讨论】:

    • 谢谢你好!我会试试这个,看看我是否能够成功运行 Azure Function 中的模块。我能够回答我的解决方案,但它很复杂,而不是我想要的最终结果。我基本上必须升级到高级 Azure 功能计划并配置该功能以使用 Docker 进行部署。这最终使该功能能够运行我的模块,但我更愿意保留一个消费计划。如果我按照你的步骤让它工作,我会告诉你的!
    • 上述来自 Hury Shen 的建议奏效了!我认为这最初对我不起作用的最终原因是因为我的要求中有 psycopg2 而不是 psycopg2-binary。这似乎很容易安装 pip。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多