【问题标题】:Using librosa in an azure function app written in python在用 python 编写的天蓝色函数应用程序中使用 librosa
【发布时间】:2020-11-14 22:47:33
【问题描述】:

我正在使用 python 中的一个 azure 函数,它使用 librosa 来可视化一些音频数据。它在我的 vscode 的 windows 框中本地运行良好。从命令行远程构建

func azure functionapp publish functionappname --build remote

成功,但是当客户端向其发布数据时,它会失败

OSError: sndfile library not found

File "/home/site/wwwroot/VisualizeDemo/__init__.py", line 20, in <module> import librosa 
File "/home/site/wwwroot/.python_packages/lib/site-packages/librosa/__init__.py", line 12, in <module> from . import core 
File "/home/site/wwwroot/.python_packages/lib/site-packages/librosa/core/__init__.py", line 126, in <module> from .audio import * # pylint: disable=wildcard-import 
File "/home/site/wwwroot/.python_packages/lib/site-packages/librosa/core/audio.py", line 10, in <module> import soundfile as sf 
File "/home/site/wwwroot/.python_packages/lib/site-packages/soundfile.py", line 142, in <module> raise OSError('sndfile library not found')

我了解 librosa 依赖于 libsndfile,并且

pip install librosa

还在我的本地安装 libsndfile,并且该 libsndfile 不包含在我上传到 azure 的轮子中。我跑了

apt-get install libsndfile1

在函数主机上,将库安装在那里,似乎已经成功:

root@7d0b717a5bb5:/home/site/wwwroot# apt-get install libsndfile1
Reading package lists... Done
Building dependency tree
Reading state information... Done
libsndfile1 is already the newest version (1.0.28-6).
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

但是函数还是找不到。是否有不同的方法来安装 libsndfile 以便函数可以看到它,或者告诉函数在哪里寻找该库?函数应用在常规应用服务计划上运行,而不是无服务器消费计划。

【问题讨论】:

    标签: python azure librosa libsndfile


    【解决方案1】:

    默认情况下,Linux 上的 Azure Function 在默认容器中运行。因此,在 Function 主机中通过 apt-get install libsndfile1 安装不会对容器内的内容产生影响。对于这种情况,您应该考虑Creating function using a custom container

    • 您可以使用来自here 的 Python 函数基础映像
    • 在上面提供的 docker 文件中,您会看到多个 apt-get 安装,具体取决于您选择的映像。只需添加您所需的依赖项(在本例中为libsndfile1)。
    • 参考guide 构建和部署您的函数。

    注意:消费计划不支持自定义图片。它需要高级计划或专用(应用服务)计划。

    【讨论】:

      【解决方案2】:
      1. root@7d0b717a5bb5:/home/site/wwwroot#apt-get update
      1. root@7d0b717a5bb5:/home/site/wwwroot#apt-get install g++
      1. root@7d0b717a5bb5:/home/site/wwwroot#apt-get install libsndfile1
      1. root@7d0b717a5bb5:/home/site/wwwroot#pip install librosa

      上面的命令是我的猜测。如果apt-get install libsndfile1提供的命令是正确的,你的问题应该解决了。

      因为我之前也遇到过类似的问题,我的回答可以完美解决。建议尝试一下,也可以提供样例demo或者参考文档,以便我在我的环境中测试,可以更好的帮助到你。

      更多详情,您可以参考下面的帖子。

      How to access ODBC Driver on Azure App service

      【讨论】:

      • 嗨,杰森。谢谢你的帮忙。我运行了这些命令,但仍然得到同样的错误。看起来它是由函数主 init.py 中的import librosa 触发的。当我运行 apt-get install libsndfile1 时,它说 libsndfile1 is already the newest version (1.0.28-6). 0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded. 在运行这些命令之前我应该​​卸载 libsndfile1 吗?
      • 你能分享一下你使用librosa的示例代码吗,只是demo让我测试一下,tks。
      • libsndfile1无需卸载,直接运行pip install librosa即可。
      • 如果您能提供示例代码,我将能够帮助您更快地解决这个问题,只需提供使用librosa的片段代码,可以上传到github。
      • 我刚刚做了一个测试函数,它只是一个裸 httptrigger 模板,在其他导入下添加了import librosa,它做同样的事情。导入库时,它会查找 libsndfile 并失败并显示该消息。
      猜你喜欢
      • 2018-07-17
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 2020-04-29
      • 2015-09-25
      • 2021-07-28
      • 2021-10-17
      • 2018-12-12
      相关资源
      最近更新 更多