lxml:DLL加载失败:找不到指定模块

7 投票
4 回答
11613 浏览
提问于 2025-04-17 00:31

我有一台运行 Windows Server 2008 R2 x64 的服务器。它上面运行着 Python27 x86 + Django 1.3 + apache 2.2 x86,通过 wsgi 来处理请求。没有 lxml 的时候,一切运行得都很好。

我们在使用 soaplib,而这个库需要 lxml。我尝试了几种安装 lxml 的方法:

  1. 使用 easy_install
  2. 下载 win32 安装包。

问题是,当在 apache 下运行网站时,会出现以下错误:

ImportError at /
DLL load failed: The specified module could not be found.

这个错误出现在 from lxml import etree 这一行。

我在网上搜索了解决办法,但没有找到有用的信息。我找到的一些信息包括:

  1. 在 python26 到 python27 的升级中,有一些变化导致包含的 dll 文件不同。
  2. 我使用了依赖项查看工具(dependency walker)来查找缺失的 dll 文件。我发现缺失的文件有:gpsvc.dll、IEShims.dll 和 msvcr90.dll。我尝试安装 x86 的可再发行组件包,但没有任何改变。我还尝试把 msvcr90.dll 复制到 lxml 的 egg 目录,但又出现了另一个错误,说无法加载这个 dll(我不记得具体的错误信息了,但如果需要我可以再生成一次)。

在使用 Django 内置服务器,通过运行 manage.py runserver 时,一切都能正常工作。

我该如何解决这个问题呢?谢谢。

4 个回答

2

仅仅安装这些DLL文件是不够的,你还需要对Apache进行一些设置才能使用它们。具体可以参考:

http://groups.google.com/group/modwsgi/msg/afb025dc949c7051

3

我在使用Windows脚本宿主加载etree的时候也遇到过这个问题。在尝试了不同的方法后,我发现了Python 3.1的一个变化,提到新的Python模块不应该再嵌入清单文件,因为这会导致在没有安装MSVC++运行时的情况下出现分发问题。

所以我简单地用Resource Hacker打开了%PythonPath%\Lib\site-packages\lxml\etree.pyd这个文件,然后把里面嵌入的清单资源给删掉了。

10

我从这个网站 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 安装了一些非官方的版本。

这样做解决了我的问题。

撰写回答