华为云函数依赖包制作
官方文档:
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文件打包。
| ➜ 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库)。
| 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文件添加到压缩包中。
