无法在Windows上的Apache下通过mod_wsgi导入pyodbc

时间:2012-04-17 14:44:04

标签: python apache mod-wsgi pyodbc

版本:

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,并且还验证了我可以从命令行导入Python中的pyodbc。但每当我在从Apache调用的脚本中导入pyodbc时,我都会在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,但它没有显示任何问题(因为我可以从Python命令行导入pyodbc,所以并不奇怪)。我只安装了一个版本的Python。我尝试将Apache作为服务运行,并从管理员帐户的控制台运行。

我在另一台机器上的设置几乎相同,不同之处在于它是Windows 2003 Server x86。我们正在迁移到Windows 2008 R2,我想测试生产Web设置,现在卡住了。

1 个答案:

答案 0 :(得分:1)

请参阅my related postthis post on the pyodbc mailing list

由于(如果我理解的话)使用不同版本的C ++编译器编译的二进制文件,您需要手动将Python27.dll中的清单嵌入到pyodbc.pyd文件中。

执行此操作的命令是mt.exe,它随Visual Studio C ++ 2008 Express一起提供。