从lxml导入etree时出现了ImportError: DLL load failed: 找不到指定的模块。

3
我最近安装了一个新的Anaconda版本2019-10,它使用Python 3.7.4。 为了能够在Python中读写MsWord .docx文件,我使用库模块python-docx, 我使用以下命令安装:conda install -c conda-forge python-docx 已安装python-docx 0.8.10。 现在,我经常使用的一个Python脚本用于读写以前Anaconda安装(带有Python 3.5.4和未知的python-docx版本)中的MsWord .docx文件。
脚本: (简化版)

    import docx
    doc = docx.Document('demo.docx') # demo.docx exists in same dir
    print(len(doc.paragraphs))

突然出现错误:

追溯(最近的调用):

  File "D:\pa\Python\ProjectsWorkspace\Py001Proj\src\printenfrompython\wordprinten.py", line 19, in <module>
    import docx
  File "C:\Users\pa\Anaconda3\lib\site-packages\docx\__init__.py", line 3, in <module>
    from docx.api import Document  # noqa
  File "C:\Users\pa\Anaconda3\lib\site-packages\docx\api.py", line 14, in <module>
    from docx.package import Package
  File "C:\Users\pa\Anaconda3\lib\site-packages\docx\package.py", line 9, in <module>
    from docx.opc.package import OpcPackage
  File "C:\Users\pa\Anaconda3\lib\site-packages\docx\opc\package.py", line 9, in <module>
    from docx.opc.part import PartFactory
  File "C:\Users\pa\Anaconda3\lib\site-packages\docx\opc\part.py", line 12, in <module>
    from .oxml import serialize_part_xml
  File "C:\Users\pa\Anaconda3\lib\site-packages\docx\opc\oxml.py", line 12, in <module>
    from lxml import etree
ImportError: DLL load failed: The specified module could not be found.

这个问题有解决方案吗? 我无法返回以前的安装版本!

今天我在普通的python3.7.5安装中使用'pip install python-docx'命令安装了python-docx,现在以上错误不再出现。 重新安装了Anaconda并使用pip在anaconda中重新安装了python-docx,但是仍然出现了同样的错误。我的操作系统是Windows10。我在Eclipse\PyDev中两种情况下都运行了测试,并在PyDev中切换python3.7.5和anaconda python3.7.4解释器。


可能是重复的问题,与 https://dev59.com/2VrUa4cB1Zd3GeqPmruL 相同。 - ExplodingGayFish
3个回答

9

Conda版本:4.9.2(已安装在系统中) 尝试运行:

scrapy startproject name_of_project

错误:

ImportError: DLL load failed while importing etree: The specified module could not be found.

解决方案:

步骤1:pip uninstall lxml

步骤2:pip install lxml

错误已解决。

New Scrapy project 'tutorial', using template directory 'C:\Users\New\miniconda3\lib\site-packages\scrapy\templates\project', created in:
    C:\Users\New\Documents\TOUR_TOC++\web_scraping\NSE\tutorial
    You can start your first spider with:
         cd tutorial
         scrapy genspider example example.com ...

甚至可以跳过卸载步骤,直接使用“pip install --upgrade lxml”进行升级。这对我很有效,谢谢。 - Joris

1
最简单的解决方案是(如上所述): 步骤1:pip卸载lxml 步骤2:pip安装lxml
然而,在通过lxml-4.6.3.tar.gz重新安装lxml时,我遇到了问题。因此,我尝试了通过相应的.whl文件重新安装,并成功了!

1

问题已解决! 在尝试重新安装lxml==4.1.1包时,错误日志报告了许多错误,其中包含解决方案的提示。

  1. 错误:b“'xslt-config'不被识别为内部或外部命令,\r\n可执行程序或批处理文件。\r\n” ** 确保已安装libxml2和libxslt的开发包 **
  2. 构建'lxml.etree'扩展名:。 错误:需要Microsoft Visual C++ 14.0。使用“Microsoft Visual C++ Build Tools”获取它:https://visualstudio.microsoft.com/downloads/

因此,在构建lxml.etree时可能存在问题,因为正确的Visual C++编译器不可用。这在Michael Hirsch于2019年9月21日发布的一篇文章中得到了证实,标题为“修复Python 3在Windows上的错误:需要Microsoft Visual C++ 14.0”,请参见https://www.scivision.dev/python-windows-visual-c-14-required/

根据他的建议,我使用离线安装程序vs_buildtools.exe安装了Microsoft Visual C++ 14.0。选择:工作负载→C++构建工具。安装选项:仅选择“Windows 10 SDK”(假设计算机运行Windows 10)。要从命令行使用MSVC cl.exe C / C++编译器,另外选择C++构建工具。
然后我安装了libxml2和lxml,问题得到解决。
try:
  from lxml import etree
  print("running with lxml.etree !")
except ImportError:
  print("Import etree from lxml failed !"

"running with lxml.etree!" 的意思是:正在使用 lxml.etree 运行。保留了 HTML 格式,不做解释。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接