1

版本:

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 设置,但现在卡住了。

4

1 回答 1

1

请参阅我的相关帖子pyodbc 邮件列表上的这篇帖子

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

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

于 2012-05-17T20:36:43.580 回答