华为云函数依赖包制作

华为云函数依赖包制作

官方文档:

https://console.huaweicloud.com/functiongraph/

https://support.huaweicloud.com/functiongraph_faq/functiongraph_03_0343.html

华为云函数需要将依赖库打包成zip包上传,但有些库依赖系统安装的库。

比如pyzbar,在Ubuntu Linux环境下,需要先执行apt-get install libzbar0

为了在云函数中使用pyzbar,需要将libzbar0的so文件及其依赖对so文件打包。

1
2
3
4
5
6
7
pyzbar readelf -a libzbar.so |grep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libdbus-1.so.3]
0x0000000000000001 (NEEDED) Shared library: [libv4l2.so.0]
0x0000000000000001 (NEEDED) Shared library: [libX11.so.6]
0x0000000000000001 (NEEDED) Shared library: [libjpeg.so.8]
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]

pyzbar中加载libzbar.so实际是执行cdll.LoadLibrary(path),依赖系统的lib加载路径。

经过测试,云函数执行时,会将zip中文件释放到/opt/function/code,为了简单实现使用pyzbar的目的,修改zbar_library.py中的加载so库的代码(先加载不需要依赖的so库)。

1
2
3
4
5
6
7
8
9
10
11
12
13
dir_name = '/opt/function/code/pyzbar/'

path = dir_name + 'libjpeg.so'
cdll.LoadLibrary(path)

path = dir_name + 'libv4lconvert.so'
cdll.LoadLibrary(path)

path = dir_name + 'libv4l2.so'
cdll.LoadLibrary(path)

path = dir_name + 'libzbar.so'
libzbar = cdll.LoadLibrary(path)

最终将修改后的zbar_library.py和so文件添加到压缩包中。

image-20240103120841708