Windows Anaconda环境下Python Requests报错:Crypto.dll缺失排查
解决Windows Anaconda环境中Requests导入失败(crypto.dll找不到)的问题
我之前在Anaconda环境里折腾requests的时候也碰到过一模一样的坑!核心原因是老版本的cryptography(2.2.2)和asn1crypto在Windows环境下的库路径匹配有bug,下面给你几个亲测有效的解决办法:
方案一:给OpenSSL库创建软链接(快速临时修复)
这个方法直接解决crypto.dll找不到的问题——因为实际存在的是带版本号的libcryptoXXX.dll,我们只需要做个映射:
- 找到你的Anaconda环境的OpenSSL bin目录,比如
D:\Anaconda3\envs\你的环境名\Library\bin(替换成你自己的路径) - 右键以管理员身份打开命令提示符,进入上述目录
- 执行软链接命令,把带版本号的libcrypto文件映射成
crypto.dll:
注意:把mklink crypto.dll libcrypto-1_1-x64.dlllibcrypto-1_1-x64.dll换成你目录里实际存在的libcrypto文件名(比如32位系统可能是libcrypto-1_1.dll)
方案二:升级cryptography版本(更稳妥的长期解决方案)
老版本的cryptography和asn1crypto兼容性问题较多,直接升级到新的稳定版就能彻底解决:
- 先激活你的Anaconda环境:
conda activate 你的环境名 - 卸载旧版本的cryptography:
pip uninstall cryptography -y - 安装兼容的新版本cryptography,再重装requests:
pip install cryptography>=3.0 pip install requests --force-reinstall
方案三:用conda安装cryptography和requests(最省心)
conda的预编译包已经适配了Windows环境的依赖路径,不会出现dll找不到的问题:
- 激活环境后直接执行:
conda install cryptography requests -y
为什么会出现这个问题?
cryptography 2.2.2是比较老旧的版本,当时asn1crypto的代码在Windows下硬编码查找crypto.dll,但后来OpenSSL的库命名规范改成了带版本号的格式(比如libcrypto-1_1-x64.dll),而Anaconda环境里的OpenSSL库正是这种带版本号的,所以就出现了“找不到crypto.dll”的错误。
内容的提问来源于stack exchange,提问作者Justin Olbrantz
相关产品推荐
相关产品推荐

