проблема с soaplib (lxml) с apache2 + mod_wsgi - PullRequest
2 голосов
/ 05 апреля 2011

когда я запускаю свое приложение с apache2 + modwsgi, я ловлю

Exception Type:    ImportError
Exception Value: DLL load failed: The specified module could not be found.

в строке

from lxml import etree

с сервером разработки Django все отлично работает Visual C ++ Redistributable 2008 с установленной

Обходчик зависимости сказал, что msvcrt90.dll пропущен, но такая же ситуация с cx_Oracle, но dll cx_Oracle правильно загружает

Любые идеи?

Windows 2003 Server 64bit и Windows XP sp3 32bit Python 2.732-битный cx_Oracle 5.0.4 32-битный

UPD : загрузить libxml2-2.7.7 и libxslt-1.1.26

попытался собрать с помощью setup.py build --compilermingw32

Building lxml version 2.3.
Building with Cython 0.14.1.
ERROR: 'xslt-config' is not recognized as an internal or external command,
operable program or batch file.

** make sure the development packages of libxml2 and libxslt are installed **

Using build configuration of libxslt
running build
running build_py
running build_ext
skipping 'src/lxml\lxml.etree.c' Cython extension (up-to-date)
building 'lxml.etree' extension
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
writing 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): undefined reference to `_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0xd24): undefined reference to `_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x1ee92): undefined reference to `_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x1eed6): undefined reference to `_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x2159e): undefined reference to `_imp__xmlMalloc'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x2e741): undefined reference to `_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x2e784): undefined reference to `_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x3f157): undefined reference to `_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x3f19a): undefined reference to `_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x3f4ac): undefined reference to `_imp__xmlFree'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0x3f4ef): more undefined references to `_imp__xmlFree' follow
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0xb1ad5): undefined reference to `xsltLibxsltVersion'
build\temp.win32-2.7\Release\src\lxml\lxml.etree.o:lxml.etree.c:(.text+0xb1b9a): undefined reference to `xsltDocDefaultLoader'
collect2: ld returned 1 exit status
error: command 'gcc' failed with exit status 1

UPD2 : я понимаю, почему импорт cx_Oracle работает нормально: cx_Oracle.pyd содержит зависимость "MSVCRT.dll", etree.pyd не имеет ее

1 Ответ

2 голосов
/ 06 апреля 2011

Это действительно из-за 'msvcrt90.dll'. Где-то в микропатчевых версиях Python 2.6 они перестали встраивать автоматические зависимости от DLL для модулей расширения и полагались на исполняемый файл Python. Однако, будучи встроенным в другие системы, вы зависите от того, что исполняемый файл ссылается на DLL, а в случае с Apache - нет. Таким образом, изменение в Python нарушило многие системы, которые встраивают Python в Windows, и единственное решение состоит в том, чтобы каждый модуль расширения имел свои собственные зависимости от требуемых библиотек DLL, чего нет у многих. Это сильно повлияло на расширение psycopg2, и теперь они изменили свои сборки, чтобы добавить зависимость обратно в себя. Вы можете искать проблему, как она возникла для psycopg2. Одним из решений было перестроить расширения с помощью компилятора MinGW в Windows.

...