lxml:DLL加载失败:找不到指定模块
我有一台运行 Windows Server 2008 R2 x64 的服务器。它上面运行着 Python27 x86 + Django 1.3 + apache 2.2 x86
,通过 wsgi 来处理请求。没有 lxml 的时候,一切运行得都很好。
我们在使用 soaplib,而这个库需要 lxml。我尝试了几种安装 lxml 的方法:
- 使用 easy_install
- 下载 win32 安装包。
问题是,当在 apache 下运行网站时,会出现以下错误:
ImportError at /
DLL load failed: The specified module could not be found.
这个错误出现在 from lxml import etree
这一行。
我在网上搜索了解决办法,但没有找到有用的信息。我找到的一些信息包括:
- 在 python26 到 python27 的升级中,有一些变化导致包含的 dll 文件不同。
- 我使用了依赖项查看工具(dependency walker)来查找缺失的 dll 文件。我发现缺失的文件有:gpsvc.dll、IEShims.dll 和 msvcr90.dll。我尝试安装 x86 的可再发行组件包,但没有任何改变。我还尝试把 msvcr90.dll 复制到 lxml 的 egg 目录,但又出现了另一个错误,说无法加载这个 dll(我不记得具体的错误信息了,但如果需要我可以再生成一次)。
在使用 Django 内置服务器,通过运行 manage.py runserver
时,一切都能正常工作。
我该如何解决这个问题呢?谢谢。
4 个回答
2
仅仅安装这些DLL文件是不够的,你还需要对Apache进行一些设置才能使用它们。具体可以参考:
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/ 安装了一些非官方的版本。
这样做解决了我的问题。