2

当我用 apache2+modwsgi 启动我的应用程序时,我抓住了

异常类型:ImportError
异常值:DLL 加载失败:找不到指定的模块。

排队

从 lxml 导入 etree

使用 Django 开发服务器一切正常 安装 Visual C++ Redistributable 2008

Dependency walker 告诉 msvcrt90.dll 丢失,但 cx_Oracle 的情况相同,但 cx_Oracle 的 dll 加载正确

有任何想法吗?

windows 2003 server 64bit 和 windows XP sp3 32bit python 2.7 32 bit cx_Oracle 5.0.4 32bit

UPD:下载 libxml2-2.7.7 和 libxslt-1.1.26

尝试使用 setup.py build --compiler mingw32 构建

构建 lxml 2.3 版。
使用 Cython 0.14.1 构建。
错误:'xslt-config' 未被识别为内部或外部命令,
可运行的程序或批处理文件。

** 确保已安装 libxml2 和 libxslt 的开发包 **

使用 libxslt 的构建配置
运行构建
运行 build_py
运行 build_ext
跳过 'src/lxml\lxml.etree.c' Cython 扩展(最新)
构建“lxml.etree”扩展
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python27\include -IC:\Python27\PC -c src/lxml\lxml.etree.c -o build\temp .win32-2.7\Release\src\lxml\lxml.et
ree.o -w
编写 build\temp.win32-2.7\Release\src\lxml\etree.def
C:\MinGW\bin\gcc.exe -mno-cygwin -shared -s build\temp.win32-2.7\Release\src\lxml\lxml.etree.o build\temp.win32-2.7\Release\src\lxml \etree.def -LC:\Python27\lib
s -LC:\Python27\PCbuild -llibxslt -llibexslt -llibxml2 -liconv -lzlib -lWS2_32 -lpython27 -lmsvcr90 -o build\lib.win32-2.7\lxml\etree.pyd
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0xd11): 未定义引用`_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0xd24): 未定义引用`_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x1ee92): 未定义引用`_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x1eed6): 未定义引用`_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x2159e): 未定义引用`_imp__xmlMalloc'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x2e741): 未定义引用`_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x2e784): 未定义引用`_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x3f157): 未定义引用`_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x3f19a): 未定义引用`_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x3f4ac): 未定义引用`_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x3f4ef):对 `_imp__xmlFree' 的更多未定义引用
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0xb1ad5):未定义对“xsltLibxsltVersion”的引用
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0xb1b9a):未定义对“xsltDocDefaultLoader”的引用
collect2: ld 返回 1 个退出状态
错误:命令“gcc”失败,退出状态为 1

UPD2:我明白为什么 import cx_Oracle 工作正常:cx_Oracle.pyd 包含“MSVCRT.dll”依赖 etree.pyd 没有它

4

1 回答 1

2

确实是因为“msvcrt90.dll”。从 Python 2.6 的微补丁修订版的某个地方开始,他们停止为扩展模块构建对 DLL 的自动依赖项,并依赖 Python 可执行文件来执行此操作。但是,当嵌入到其他系统中时,您将依赖于链接到 DLL 的可执行文件,而在 Apache 的情况下则不然。因此,Python 的变化破坏了许多在 Windows 上嵌入 Python 的系统,唯一的解决方案是让每个扩展模块都对所需的 DLL 有自己的依赖关系,而很多人没有。psycopg2 扩展受到了严重影响,他们现在已经更改了构建以将依赖项添加回自己。您可能会搜索 psycopg2 发生的问题。解决方案之一是在 Windows 上使用 MinGW 编译器重建扩展。

于 2011-04-05T23:54:26.067 回答