在 Windows x64 上的 Python 中导入 M2Crypto 时出错
Error when importing M2Crypto in Python on Windows x64
我正在尝试在 Windows 64 位上使用 M2Crypto 库。我使用的是 Python 的 64 位版本,并且我从源代码编译了 M2Crypto,链接到 Openssl 1.0.2d。这次编译成功,我已经通过 运行ning python setup.py install
.
安装了这个包
当我从命令行 运行 Python
并键入 import M2Crypto
时,它起作用了。接下来,我尝试通过创建椭圆曲线密钥来使用该库:
from M2Crypto import EC
kp = EC.gen_params(EC.NID_sect233k1)
kp.gen_key()
kp.save_key("test.key", None)
这会产生以下错误:
OPENSSL_Uplink(00007ABCAFE839000,08): no OPENSSL_Applink
我不太确定如何处理这个错误。我认为这个问题与 Openssl 有关。互联网上的一些消息来源写道我应该重新编译 Python 但我不确定该怎么做。我想知道是否有更简单的方法来修复此错误,因为我不喜欢重新编译我的 Python 发行版。
此问题仅发生在 Windows。我在 OS X 或 Linux.
上安装 M2Crypto 没有问题
我无法通过自己安装的 Python 和 M2Crypto 重现您的问题。但是,我看到 no OPENSSL_Applink
发生在 Windows 上,当时 openssl/applink.c
未包含并编译到应用程序中,随后 BIO
被用于写入文件或stdin
或 stdout
.
因此,您可以尝试使用内存 BIO,然后从该内存 BIO 读取内容并将内容写入 Python 本身的文件,如下所示:
>>> from M2Crypto import EC
>>> kp = EC.gen_params(EC.NID_sect233k1)
>>> kp.gen_key()
>>> from M2Crypto import BIO
>>> membuf = BIO.MemoryBuffer()
>>> kp.save_key_bio(membuf, None)
1
>>> with open('test2.key', 'w') as f:
... f.write(membuf.read())
...
这不是真正的修复,只是一种解决方法。
我正在尝试在 Windows 64 位上使用 M2Crypto 库。我使用的是 Python 的 64 位版本,并且我从源代码编译了 M2Crypto,链接到 Openssl 1.0.2d。这次编译成功,我已经通过 运行ning python setup.py install
.
当我从命令行 运行 Python
并键入 import M2Crypto
时,它起作用了。接下来,我尝试通过创建椭圆曲线密钥来使用该库:
from M2Crypto import EC
kp = EC.gen_params(EC.NID_sect233k1)
kp.gen_key()
kp.save_key("test.key", None)
这会产生以下错误:
OPENSSL_Uplink(00007ABCAFE839000,08): no OPENSSL_Applink
我不太确定如何处理这个错误。我认为这个问题与 Openssl 有关。互联网上的一些消息来源写道我应该重新编译 Python 但我不确定该怎么做。我想知道是否有更简单的方法来修复此错误,因为我不喜欢重新编译我的 Python 发行版。
此问题仅发生在 Windows。我在 OS X 或 Linux.
上安装 M2Crypto 没有问题我无法通过自己安装的 Python 和 M2Crypto 重现您的问题。但是,我看到 no OPENSSL_Applink
发生在 Windows 上,当时 openssl/applink.c
未包含并编译到应用程序中,随后 BIO
被用于写入文件或stdin
或 stdout
.
因此,您可以尝试使用内存 BIO,然后从该内存 BIO 读取内容并将内容写入 Python 本身的文件,如下所示:
>>> from M2Crypto import EC
>>> kp = EC.gen_params(EC.NID_sect233k1)
>>> kp.gen_key()
>>> from M2Crypto import BIO
>>> membuf = BIO.MemoryBuffer()
>>> kp.save_key_bio(membuf, None)
1
>>> with open('test2.key', 'w') as f:
... f.write(membuf.read())
...
这不是真正的修复,只是一种解决方法。