Linux下直接pip安装的lxml模块可能是不完整的,import lxml正常,但是from lxml import etree就会报错:

ImportError: cannot import name 'etree' from 'lxml'

同时,这个问题也是造成beautifulsoup库选择xml解析器时会报错的罪魁祸首:

bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?

网上各种解决方案大多在说lxml库本身的安装,什么卸载重装啊,降低版本啊,诸如此类。但这些方案并没有触及问题的本质,很可能并不管用。

其实,手动查看python site-packages目录下的lxml库文件,会发现其目录下是包含etree相关的文件的,这暗示问题并不在于本地的lxml库缺失/取消了etree模块:

在这里插入图片描述

实际上问题是出在lxml的依赖库有缺失,而不是lxml本身有缺失。 根据lxml的官方文档,lxml在非windows环境下需要libxml2和libxslt作为依赖库,而在Linux系统下安装lxml连同所有依赖库最快的方式是通过你使用的Linux发行版的包管理系统,如:

sudo apt-get install python3-lxml

这样Linux的包管理系统会自动将所有依赖项都安装好,不需要再手动一个一个安装。(你当然也可以选择手动一个一个安装,如果需要教程的话,同样在官方文档有提及,可自行查阅)

在这里插入图片描述
(我的系统是openwrt,因此包管理系统使用opkg,但是道理和用apt-get是一样的)

按照上面的方式重新安装好lxml后问题即可解决:

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐