为什么用 MSVC 构建的 Python DLL 不能用 mod_wsgi 加载?

2024-03-14

我最近从 Python 2.5 更新到 2.7(在麻烦期间尝试了 2.6),虽然从命令行或 Django runserver 中一切正常,但 mod_wsgi 无法加载任何包含使用 MSVC 构建的 DLL (pyd) 的模块。

例如,如果我构建自己的 pycrypto 或 lxml 版本,那么我只会从 mod_wsgi 收到以下错误:

ImportError at /
DLL load failed: The specified module could not be found.

即使官方的 PIL 二进制文件也无法在 mod_wsgi 中导入 _imaging C 模块,但这可能是另一个问题。

但是,如果我使用像这样的地方用 MinGW 构建的 pycrypto 版本http://www.voidspace.org.uk/python/modules.shtml#pycrypto http://www.voidspace.org.uk/python/modules.shtml#pycrypto那么即使在 mod_wsgi 中它也能正常导入。但我觉得这个解决方案并不令人满意,因为我更新 Python 的全部原因是为了避免需要寻找预构建的二进制文件,而且我无法自己构建它们,因为 MinGW 对我来说超过 50% 的时间都会失败。

编辑2: 我在 Python27/Lib/distutils/msvc9compiler.py 的第 680-705 行注意到这一点:

try:
    # Remove references to the Visual C runtime, so they will
    # fall through to the Visual C dependency of Python.exe.
    # This way, when installed for a restricted user (e.g.
    # runtimes are not in WinSxS folder, but in Python's own
    # folder), the runtimes do not need to be in every folder
    # with .pyd's.
    manifest_f = open(manifest_file)
    try:
        manifest_buf = manifest_f.read()
    finally:
        manifest_f.close()
    pattern = re.compile(
        r"""<assemblyIdentity.*?name=("|')Microsoft\."""\
        r"""VC\d{2}\.CRT("|').*?(/>|</assemblyIdentity>)""",
        re.DOTALL)
    manifest_buf = re.sub(pattern, "", manifest_buf)
    pattern = "<dependentAssembly>\s*</dependentAssembly>"
    manifest_buf = re.sub(pattern, "", manifest_buf)
    manifest_f = open(manifest_file, 'w')
    try:
        manifest_f.write(manifest_buf)
    finally:
        manifest_f.close()
except IOError:
    pass

这可能解释了为什么一切都可以在命令行中运行,但不能在 mod_wsgi 中运行。注释掉所有这些似乎可以解决问题,但感觉不是正确的解决方法。现在的问题是把msvcr90.dll放在哪里以便Apache可以使用它?我注意到 Apache 的 bin 文件夹包含 msvcr70.dll 和 msvcr80.dll,但在其中放入 90 不起作用。


我遇到了类似的问题并最终找到了解决方案here http://comments.gmane.org/gmane.comp.python.enthought.devel/29309:使用其中之一下载/更新您的 apache 服务器http://www.apachelounge.com/download/ http://www.apachelounge.com/download/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么用 MSVC 构建的 Python DLL 不能用 mod_wsgi 加载? 的相关文章

随机推荐

  • 在 eclipselink 中设置隔离级别

    我想使用 eclipse 链接设置隔离级别 我尝试了这两种方法来做到这一点 java sql Connection mgr EMF get createEntityManager tx mgr getTransaction tx begin
  • Android Studio 与 Transfuse

    我可以在我的 android 项目中成功设置 Transfuse 但是当使用 Android Studio 运行该应用程序时 它失败了 可能是因为 Manifest xml 必须为空才能让 Transfuse 处理 有人曾经把这些一起工作过
  • 通过ViewBag传递模型对象

    我想知道是否可以通过 ViewBag 传递模型对象 我尝试了以下代码 但不知何故在我的视图中 它仅显示模型的路径 控制器 public ActionResult Tempo DateTime date1 new DateTime 1990
  • 安装签名的 msi 安装程序时出现奇怪的“程序名称”[重复]

    这个问题在这里已经有答案了 登录 MSI 安装程序后 我遇到以下问题 我正在使用signtool exe并且msi文件签名正常 但是当我测试它时 显示我公司名称的UAC确认对话框显示55847 msi的 程序名称 而不是我的安装文件的名称
  • Haskell - 如何基于二叉树的foldr创建mapTree函数?

    这是 Haskell 编程的第一原理 第 11 章代数数据类型中的一个问题 data BinaryTree a Leaf Node BinaryTree a a BinaryTree a deriving Eq Ord Show 我们实际上
  • 是否可以将 Flume 标头写入 HDFS 接收器并删除主体?

    text with headers 序列化器 HDFS 接收器序列化器 允许保存 Flume 事件标头而不是丢弃它们 输出格式由标头 后跟空格和正文有效负载组成 我们想删除正文并仅保留标题 对于 HBase 接收器 RegexHbaseEv
  • 使用 XDebug 设置 IntelliJ Idea 远程调试

    我连续几天尝试在 IntelliJ Idea 和 Xdebug 中设置远程调试 但没有成功 我有一个 Windows 7 主机和 VM VirtualBox 使用 Windows XP 作为 Web 服务器 它安装了 WampServer
  • 处理信号后如何停止从键盘读取?

    我正在编写一个程序 其中 SIGINT 信号在第一次发送时进行处理 但之后设置为默认值 例如 我有这个 static volatile int stop terminating 1 void handler int dummy stop t
  • 删除 MySQL 中列的最后两个字符

    我有一个 SQL 列 其中的条目是字符串 我需要在修剪最后两个字符后显示这些条目 例如如果条目是199902345它应该输出1999023 我尝试查看 TRIM 但看起来只有当我们知道最后两个字符是什么时 它才会提供修剪 但就我而言 我不知
  • 流星铁路由器嵌套路由

    我有两个具有一对多关系的流星集合 建筑物和空间 在我的建筑页面上 我想显示与建筑相关的空间 现在 我是这样做的 buildingsRoute coffee BuildingController RouteController extend
  • Ruby 1.9 Base64 编码写入文件错误

    我收到以下错误 Encoding UndefinedConversionError x81 from ASCII 8BIT to UTF 8 下面的内容都在 Ruby 1 8 7 中工作 所以我认为这与 Ruby 1 9 处理编码的方式有关
  • 从 MAC 转换为 IPv6

    我想了解如何将 MAC 地址转换为 IPv6 地址 例如 00 01 04 76 2A 5C 应该成为 FE80 0201 04FF FE76 2A5C 有人可以详细说明一下转换吗 我们假设本地机器的自动配置没有随机参数 逐步转换 http
  • 独立应用程序中的 Spring Security

    如何在独立应用程序中使用 Spring Security 我只需要使用 Spring Security 的身份验证部分 我需要根据 Windows Active Directory 对用户进行身份验证 网络上有很多在 Servlet 中使用
  • 如何在 3 维空间中找到凸包

    给定一组点S x y z 如何找到convex hull那些点 我尝试理解该算法here http wcipeg com wiki Convex hull 但拿不到太多 It says 首先将所有点投影到 xy 平面上 并通过选择具有最高
  • Objective-C 中面向方面的 HTTP 身份验证示例

    我正在寻找一些示例 技巧 建议以及一些用于实现 或查找其实现 面向方面的 HTTP 身份验证库的一般方向感 作为一些基础工作 我们构建了一个 iOS 库 该库为 HTTP 服务建立各种形式的身份验证 通过 Web 表单或本机模式窗口请求用户
  • Python 3 中 getstatusoutput 的替换

    由于命令模块自 Python 2 6 起已被弃用 我正在寻找替换的最佳方法命令 getstatusoutput http docs python org library commands html highlight commands co
  • Java Stream 在单循环中以声明方式分别按多个字段进行分组

    我用谷歌搜索了它 但我主要发现了按聚合字段分组或改变流响应的情况 但没有找到下面的情况 我有课User有字段category and marketingChannel 我必须以声明式风格编写一个方法 该方法接受用户列表并根据category
  • 删除列表中间的项目时,React 渲染错误的数据

    我有一个嵌套字段数组设置使用react hook form here https codesandbox io s compassionate galileo nkz71 请注意 我的实际代码有点复杂 但问题在这里显示是一样的 我遇到的问题
  • 在 Node.js 中反序列化后重新将对象与其类关联

    我正在为一些特定于应用程序的对象编写一个简单的序列化 反序列化框架 考虑以下 use strict function Dog name this name name Dog prototype constructor Dog Dog pro
  • 为什么用 MSVC 构建的 Python DLL 不能用 mod_wsgi 加载?

    我最近从 Python 2 5 更新到 2 7 在麻烦期间尝试了 2 6 虽然从命令行或 Django runserver 中一切正常 但 mod wsgi 无法加载任何包含使用 MSVC 构建的 DLL pyd 的模块 例如 如果我构建自