libvirt 是一个 C 动态库,其 Python API 由 libvirt-python 项目下的 generator.py 生成。
一部分 Python API 通过 libvirt 的 C API 定义自动生成
1 | $ ls /usr/share/libvirt/api/ |
一部分 Python API 通过 override API 定义(即对 libvirt C API 有一定的封装)自动生成
1 | $ ls *.xml |
一部分 Python API 手工实现
1 | $ ls libvirt-override*.py |
Python API 对应的动态库 wrapper so 一部分由 C API 定义自动生成,一部分由 override API 定义自动生成,其对应的 c 代码实现为
1 | $ ls *-override.c |
通过如下命令生成 Python API (build/lib.linux-x86_64-2.7/libvirt*.py) 及 wrapper so 动态库 (build/lib.linux-x86_64-2.7/libvirtmod*.so):
1 | $ ./setup.py build |
其中:
- 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
。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.