在使用Python进行doc/docx类文本读写时, 要使用docx库和python-docx库. 这两个库会依赖于lxml库, 由于安装的lxml库版本有冲突, 导致docx和python-docx这两个库虽然已经安装, 但是在代码里还是不能导入. 研究了一番, 可以通过以下方法解决.
问题现象及原因
运行代码, 提示”from lxml import etree”错误, 进而导致docx及python-docx不能被导入;
原因是 Python 3.6.X 安装的lxml的版本是3.8.0, 在lxml-3.7.3版本可以顺利支持docx和python-docx库的使用. 所以一般通过降低lxml的版本就可以解决问题.
解决方法
方法一: 使用pip本地安装lxml-3.7.3库
从pypi下载对应系统及版本的版本包到本地目录, 比如windows下”D:\Documents\Downloads”. 比如下载的包为”lxml-3.7.3-cp36-cp36m-win_amd64.whl”.
若已安装lxml-3.8.0, 先在cmd中执行
pip uninstall lxml
命令卸载3.8.0的包.
在cmd切换目录至下载的版本包所在的目录, 执行
pip install lxml-3.7.3-cp36-cp36m-win_amd64.whl
命令, 安装本地库文件.
版本包安装完毕后, 就可以安装docx库或python-docx库了(若已安装,可跳过). 执行
pip install docx
安装需要的库.
成功安装完毕后, 就可以正常导入使用docx或python-docx库.
方法二: 使用conda安装docx或python-docx库
这个方法适合于使用Anaconda3版本Python的童鞋. 安装过程大体相同, 但是由于docx和python-docx不在Anaconda3的正式库中, 所以在安装时, 不能使用conda install
命令, 而要使用Anaconda3/Scripts下的pip来安装.
因此, 需要切换目录到Anaconda3/Scripts目录下执行pip来安装库(为了区别于系统已安装的基础python3.6的pip), 但是以后每次需要安装第三方库, 都需要先切换目录进来比较麻烦. 为了可以全局调用并区别于基础版本的pip工具, 可以重命名Anaconda3/Scripts目录下的"pip.py"
和"pip-script.py"
脚本为"condapip.py"
和"condapip-script.py"
. 这样就可以在系统全局调用condapip install ...
命令执行库的安装.