libvirt Python 绑定
libvirt 是一个 C 动态库,其 Python API 由 libvirt-python 项目下的 generator.py 生成。
一部分 Python API 通过 libvirt 的 C API 定义自动生成
$ ls /usr/share/libvirt/api/
libvirt-admin-api.xml libvirt-api.xml libvirt-lxc-api.xml libvirt-qemu-api.xml
一部分 Python API 通过 override API 定义(即对 libvirt C API 有一定的封装)自动生成
$ ls *.xml
libvirt-lxc-override-api.xml libvirt-override-api.xml libvirt-qemu-override-api.xml
一部分 Python API 手工实现
$ ls libvirt-override*.py
libvirt-override.py libvirt-override-virNetwork.py
libvirt-override-virConnect.py libvirt-override-virStoragePool.py
libvirt-override-virDomain.py libvirt-override-virStream.py
libvirt-override-virDomainSnapshot.py
Python API 对应的动态库 wrapper so 一部分由 C API 定义自动生成,一部分由 override API 定义自动生成,其对应的 c 代码实现为
$ ls *-override.c
libvirt-lxc-override.c libvirt-override.c libvirt-qemu-override.c
通过如下命令生成 Python API (build/lib.linux-x86_64-2.7/libvirt*.py) 及 wrapper so 动态库 (build/lib.linux-x86_64-2.7/libvirtmod*.so):
$ ./setup.py build
$ tree build/
build/
├── lib.linux-x86_64-2.7
│ ├── libvirt_lxc.py
│ ├── libvirtmod_lxc.so
│ ├── libvirtmod_qemu.so
│ ├── libvirtmod.so
│ ├── libvirt.py
│ └── libvirt_qemu.py
├── libvirt.c
├── libvirt-export.c
├── libvirt.h
├── libvirt-lxc.c
├── libvirt-lxc-export.c
├── libvirt-lxc.h
├── libvirt_lxc.py
├── libvirt.py
├── libvirt-qemu.c
├── libvirt-qemu-export.c
├── libvirt-qemu.h
├── libvirt_qemu.py
其中:
- build/lib.linux-x86_64-2.7/libvirt*.py 是从 build/libvirt*.py 拷贝过去的;
- build/libvirt*.py 由 libvirt-override*.py 手写部分和
- libvirtmod.so 由 libvirt-override.c, build/libvirt.c, typewrappers.c, libvirt-utils.c 构建;
- libvirtmod_qemu.so 由 libvirt-qemu-override.c, build/libvirt-qemu.c, typewrappers.c, libvirt-utils.c 构建;
- libvirtmod_lxc.so 由 libvirt-lxc-override.c, build/libvirt-lxc.c, typewrappers.c, libvirt-utils.c 构建;
需要主要的是,Python 绑定中的方法名相比 libvirt C 接口的函数名去掉了前缀,如 libvirt-domain.c/virDomainDefineXML
接口在 Python 绑定中就变成了 virConnect.defineXML
。
最后修改于 2019-07-20