Невозможно импортировать pyodbc через mod_wsgi под Apache в Windows

Версии:

Windows 2008 R2 x64
Apache 2.2.19 x86
Python 2.7.3 x86
mod_wsgi-win32-ap22py27-3.3.so
pyodbc-3.0.5.win32-py2.7

Я проверил, что Apache работает с mod_wsgi, вызывающим Python, а также проверил, что я могу импортировать pyodbc в Python из командной строки. Но всякий раз, когда я импортирую pyodbc в скрипт, вызываемый из Apache, я получаю эти ошибки в журнале ошибок Apache:

[Tue Apr 17 10:26:02 2012] [error] [client 127.0.0.1] mod_wsgi (pid=3700): Target WSGI script 'C:/Tenor/web/tcwsgi.py' cannot be loaded as Python module.
[Tue Apr 17 10:26:02 2012] [error] [client 127.0.0.1] mod_wsgi (pid=3700): Exception occurred processing WSGI script 'C:/Tenor/web/tcwsgi.py'.
[Tue Apr 17 10:26:02 2012] [error] [client 127.0.0.1] Traceback (most recent call last):
[Tue Apr 17 10:26:02 2012] [error] [client 127.0.0.1]   File "C:/Tenor/web/tcwsgi.py", line 8, in <module>
[Tue Apr 17 10:26:02 2012] [error] [client 127.0.0.1]     import tcweb
[Tue Apr 17 10:26:02 2012] [error] [client 127.0.0.1]   File "C:\\Tenor\\web\\tcweb.py", line 15, in <module>
[Tue Apr 17 10:26:02 2012] [error] [client 127.0.0.1]     from tc import config, db
[Tue Apr 17 10:26:02 2012] [error] [client 127.0.0.1]   File "C:\\Tenor\\lib\\tc\\db.py", line 6, in <module>
[Tue Apr 17 10:26:02 2012] [error] [client 127.0.0.1]     import pyodbc
[Tue Apr 17 10:26:02 2012] [error] [client 127.0.0.1] ImportError: DLL load failed: The specified module could not be found.

Я пробовал Dependency Walker, но он не показывает никаких проблем (неудивительно, поскольку я могу импортировать pyodbc из командной строки Python). У меня установлена ​​только одна версия Python. Я пробовал запускать Apache как в качестве службы, так и из консоли под учетной записью администратора.

У меня почти такая же установка на другой машине, разница в том, что это Windows 2003 Server x86. Мы переходим на Windows 2008 R2, и я хотел протестировать рабочую веб-установку, но теперь застрял.


person davidavr    schedule 17.04.2012    source источник


Ответы (1)


См. мой связанный пост и это сообщение в списке рассылки pyodbc.

Вам нужно будет вручную встроить манифест из вашего Python27.dll в файл pyodbc.pyd из-за (если я правильно понимаю) двоичных файлов, скомпилированных с разными версиями компилятора C++.

Для этого используется команда mt.exe, и она поставляется с Visual Studio C++ 2008 Express.

person John Rork    schedule 17.05.2012