1

我已经使用 MSVC 2008 构建了 python 2.7 调试来调试导入 M2Crypto 的脚本。当我运行我的脚本时,python_d 正确地创建了一个 Python_Eggs 缓存,并将 __m2crypto.pyd 和 __m2crypto_d.pyd 复制到其中。但随后它尝试从缓存中加载非调试 python 模块,并终止,因为它不包含调试信息。我已经重建了 openssl 和 M2Crypto,并确保构建机器(VM)上不存在其他副本。我已经通过 python 本身进行了跟踪,但无法发现它为什么不会加载 _d.pyd。

任何想法为什么会发生这种情况?

4

1 回答 1

1

首先,问题在于 python 试图加载 __m2crypto.pyd 的非调试版本,但失败了,因为它缺少依赖组件。这导致python终止-不是因为找不到模块,而是因为找不到它的子模块。这对python来说是一个严重的错误,这是否是python中的一个错误,还有待其他人思考。

使用 DEPENDENCY,我发现 openssl 库没有安装到 python 主文件夹中。这是因为制作 M2Crypto 分发包的脚本具有不包含这些文件的“功能”。所以以下解决了这个问题:

  1. 使用调试构建 openssl
  2. 修改 M2Crypto\setup.py 中的 setup() 调用以包含data_files=['ssleay32.dll','libeay32.dll']
  3. 使用 openssl 调试构建带调试的 M2Crypto
  4. 安装 M2Crypto。
  5. 利润!

之后,我能够将 M2Crypto 导入 python 和 python_d。

于 2012-01-20T18:16:20.773 回答