virt-manager libxml2 module bug解决

virt-manager是一个kvm的管理工具,在自己用的小型环境里还是很方便的,我也用了挺久。因为是mac所以是用homebrew-virt-manager。之前一直用的老版本,最近mac更新,而且老版本有存储池无法从/var/lib/libvirt/里切换的bug,所以通过brew更新到了最新的2.2.1版本,就出现了 No module named 'libxml2'  的bug,通过google和官方issue找不到解决办法,最终自己解决,这里记录一下,方便其他需要的朋友查询。

主要的症状是brew安装或者更新完成homebrew-virt-manager后,运行virt-manager会显示

File "/usr/local/Cellar/virt-manager/2.2.1_2/libexec/share/virt-manager/virtinst/xmlapi.py", line 7, in <module>
    import libxml2
ModuleNotFoundError: No module named 'libxml2'

原因是默认的包从python2升级到了python3。

我们首先安装python3的libxml2包

pip3 install libxml2-python3

然后查询安装位置

➜  ~ python3
Python 3.7.1 (default, Nov  6 2018, 18:49:54)
[Clang 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import libxml2
>>> print(libxml2.__file__)
/usr/local/lib/python3.7/site-packages/libxml2.py

然后将libxml2包和相关包从系统python3的默认site-packages拷贝到virt-manager的site-packages中即可

参考上面显示的路径,既是将

/usr/local/lib/python3.7/site-packages/libxml* 

拷贝到

/usr/local/Cellar/virt-manager/2.2.1_2/libexec/lib/python3.7/site-packages

cp -r /usr/local/lib/python3.7/site-packages/libxml* /usr/local/Cellar/virt-manager/2.2.1_2/libexec/lib/python3.7/site-packages

 

TIPS:

1,注意要拷贝libxml*而不仅仅是libxml2.py,因为libxml2还依赖libxml2mod。拷贝少了还是会报找不到包。

2,我们也可以将python3的package添加到默认PYTHONPATH中去,也可以解决这个问题。

3,顺便记录一个virt / virt-manager使用的问题,更换默认存储池后新建的默认存储池必须设置名称为default,不然会自动在/var/lib/libvirt/目录下重建默认存储池

“virt-manager libxml2 module bug解决”的一个回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注