Windows10 x64+Python3.6.5安装pycrypto失败及兼容问题求助
解决pycrypto安装失败及dnspython DNSSEC验证兼容问题
我完全懂你现在的棘手处境——要靠pycrypto配合dnspython的dns.dnssec.validate功能干活,可pycryptodome没法直接替代,自己编译pycrypto又卡在Windows下的编译错误上。下面给你几个针对性的解决方案:
一、先尝试让pycryptodome兼容dnspython的调用
虽然你说pycryptodome触发了NotImplementedError,但大概率是dnspython依赖的是pycrypto旧的模块结构。你可以试试这个操作:
- 安装pycryptodomex(它是pycryptodome的兼容版本,不会覆盖pycrypto的命名空间):
pip install pycryptodomex - 在你的代码开头加一段适配代码,把
Crypto模块指向Cryptodome:import sys sys.modules['Crypto'] = __import__('Cryptodome') - 再测试
dns.dnssec.validate是否正常工作。这一步说不定能绕开pycrypto的编译坑,直接解决兼容问题。
二、解决pycrypto编译安装失败的问题
如果上面的方法行不通,必须装pycrypto,那针对你遇到的intmax_t未定义等编译错误,按以下步骤来:
1. 用VS自带命令行配置环境
别手动乱加VC路径到环境变量,直接用VS官方的命令行工具:
- 打开开始菜单 → Visual Studio 2017 → x64 Native Tools Command Prompt for VS 2017(如果你的Python是32位,就选x86版本的命令行)
- 在这个窗口里直接执行
pip install pycrypto。这个命令行已经自动配好了所有VC和Windows SDK的环境变量,能避免手动配置的各种疏漏。
2. 安装预编译的pycrypto轮子(最省心的方案)
Windows上自己编译pycrypto本来就容易踩坑,你可以找对应你Python版本和系统位数的预编译.whl文件,直接用pip安装:
- 比如你用Python 3.7 64位,就找类似
pycrypto-2.6.1-cp37-cp37m-win_amd64.whl的文件 - 执行安装命令:
pip install pycrypto-2.6.1-cp37-cp37m-win_amd64.whl
3. 修改源码解决编译错误
要是找不到合适的轮子,只能自己编译的话,就改一下pycrypto源码里的winrand.c:
- 下载pycrypto源码包,解压后找到
src/winrand.c文件 - 在文件开头加这段代码,手动定义缺失的类型:
#ifndef intmax_t typedef long long intmax_t; #endif #ifndef uintmax_t typedef unsigned long long uintmax_t; #endif - 回到VS的命令行工具,进入源码目录,执行
python setup.py install完成安装。
希望这些方法能帮你搞定问题!
内容的提问来源于stack exchange,提问作者user9371654
相关产品推荐
相关产品推荐

