在用 python 编写的 azure 函数应用程序中使用 librosa
Using librosa in an azure function app written in python
我正在 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,而我上传到 azure 的 wheels 中不包含该 libsndfile。我运行
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 以便函数可以看到它,或者有一种方法可以告诉函数在哪里寻找该库?函数应用 运行 是常规应用服务计划,而不是无服务器消费计划。
- 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或者参考文档,方便我在自己的环境下测试,更好的帮助到你。
更详细的可以参考下面post.
How to access ODBC Driver on Azure App service
默认情况下,Linux 上的 Azure Functions 在默认容器中运行。因此,在 Function 主机中通过 apt-get install libsndfile1
安装不会影响容器内的内容。对于这种情况,您应该考虑 Creating function using a custom container.
- 您可以使用来自 here
的 python 的函数基础图像
- 在上面提供的 docker 文件中,根据您选择的图像,您会看到多个
apt-get
安装。只需添加所需的依赖项(在本例中为 libsndfile1
)。
- 参考 guide.
构建和部署您的函数
注意:消费计划不支持自定义图片。它需要高级计划或专用(应用服务)计划。
我正在 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,而我上传到 azure 的 wheels 中不包含该 libsndfile。我运行
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 以便函数可以看到它,或者有一种方法可以告诉函数在哪里寻找该库?函数应用 运行 是常规应用服务计划,而不是无服务器消费计划。
- 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或者参考文档,方便我在自己的环境下测试,更好的帮助到你。
更详细的可以参考下面post.
How to access ODBC Driver on Azure App service
默认情况下,Linux 上的 Azure Functions 在默认容器中运行。因此,在 Function 主机中通过 apt-get install libsndfile1
安装不会影响容器内的内容。对于这种情况,您应该考虑 Creating function using a custom container.
- 您可以使用来自 here 的 python 的函数基础图像
- 在上面提供的 docker 文件中,根据您选择的图像,您会看到多个
apt-get
安装。只需添加所需的依赖项(在本例中为libsndfile1
)。 - 参考 guide. 构建和部署您的函数
注意:消费计划不支持自定义图片。它需要高级计划或专用(应用服务)计划。