在用 python 编写的天蓝色函数应用程序中使用 librosa
Posted
技术标签:
【中文标题】在用 python 编写的天蓝色函数应用程序中使用 librosa【英文标题】:Using librosa in an azure function app written in python 【发布时间】: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 以便函数可以看到它,或者告诉函数在哪里寻找该库?函数应用在常规应用服务计划上运行,而不是无服务器消费计划。
【问题讨论】:
【参考方案1】:默认情况下,Linux 上的 Azure Function 在默认容器中运行。因此,在 Function 主机中通过 apt-get install libsndfile1
安装不会对容器内的内容产生影响。对于这种情况,您应该考虑Creating function using a custom container。
apt-get
安装,具体取决于您选择的映像。只需添加您所需的依赖项(在本例中为libsndfile1
)。
参考guide 构建和部署您的函数。
注意:消费计划不支持自定义图片。它需要高级计划或专用(应用服务)计划。
【讨论】:
【参考方案2】:root@7d0b717a5bb5:/home/site/wwwroot#
apt-get update
root@7d0b717a5bb5:/home/site/wwwroot#
apt-get install g++
root@7d0b717a5bb5:/home/site/wwwroot#
apt-get install libsndfile1
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 并失败并显示该消息。以上是关于在用 python 编写的天蓝色函数应用程序中使用 librosa的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 websocket 请求只有在用 OOP 编写时才“未经授权”,而在仅使用函数编写时同样可以完美运行?
如何在 .Net 核心和任何合适的天蓝色资源中处理长时间的处理作业?
如何在用 TypeScript (TSX) 编写的 React 应用程序中使用 Facebook Relay?