python 运行“from Crypto.Cipher import AES“报错“cannot import name ‘_AES‘ from ‘Crypto.Cipher‘“的解决过程

  最开始是运行"from Crypto.Cipher import AES"之前,发现自己并没有安装Crypto这一库(代码项目是基于本地的python),于是我在pycharm中,将鼠标移动到红色波浪线上,然后点击了安装。下面是后续的问题:

  第一个问题

  短暂等待后,pycharm状态栏显示已经成功安装Crypto包,但是运行仍然无法成功import。在这之后,我尝试在pycharm中的“终端”重新运行“pip install pycrypto” 命令,反馈是包已经存在于Anoconda的Lib中。
  在这之后,在网上寻找方法。找到了关于找到当前项目所基于的python的Lib文件夹中的site-package文件夹,检查Crypto文件夹是否大写。发现确实没有大写,因此进行了更改。
(类似博客文章见:PyCharm已安装Crypto库但报错No module named “Crypto“_pycharm crypto-优快云博客

  第二个问题

  修改好文件名首字母后。"Crypto"下的红色波浪线消失,但是"Cipher"下的红色波浪线仍然存在,于是继续在网上寻找解决方法。看到了这篇文章:python pycharm导入Crypto.Cipher失败的解决方法_无法解析导入“crypto.cipher”-优快云博客

对照检查发现自己的Crypto文件夹下确实没有Cipher文件夹,因此按照这一篇博客中的步骤,下载了这篇博客的作者提供的Crypto文件压缩包,然后解压,找到Cipher,然后复制到自己的python下的Lib中的Crypto的文件夹内。

  上面的步骤完成后,Cipher下的红色波浪线消失。

  但是运行import代码命令,发现仍然报错:

File "D:\*****\*****\python\lib\site-packages\Crypto\Cipher\AES.py", line 50, in <module>
    from Crypto.Cipher import _AES
ImportError: cannot import name '_AES' from 'Crypto.Cipher'
点击蓝色的"D:\*****\*****\python\lib\site-packages\Crypto\Cipher\AES.py"python文件中,发现对应代码为“from Crypto.Cipher import _AES”(请注意这里的下划线,很关键)。

  至此,第三个问题出现。

  之后,以cannot import name '_AES' from 'Crypto.Cipher'为关键词进行搜索,在网上继续寻找方法,但是常见的仍然是建议安装pycryptodome等回答,显然和自己目前遇到的问题有区别。继续寻找后,在一个回答下提到可能是由于32位和64位不同,于是在GitHub - BConcernedOnFamily/Crypto_64bit: solved the question about "ImportError: cannot import name _AES"

中下载了对应的Crypto-64文件。下载好后,将原来python的Crypto文件夹下Cipher文件夹下对应的32位文件使用64位文件替换(注意,只替换这些32位文件,不要问我怎么知道的,因为最开始在这里踩了坑)。
替换后,运行import代码,仍然报错"cannot import name '_AES' from 'Crypto.Cipher'。

  进入第四个问题阶段。
  继续在网上寻找方法,无意中看到了这一个issue:"cannot import name _AES" despite presence of Crypto.Cipher._AES.so · Issue #881 · pyinstaller/pyinstaller

点进去后,注意到了有这么一句“Could you look at the Crypto.Cipher.AES code if there is any unusual import machinery?”,联系到之前发现的AES.py文件中的"from Crypto.Cipher import _AES"(还记得之前提到的注意下划线吗?),之后我又无意回到Cipher文件夹下,找到了AES.py这一文件,使用记事本打开后,发现“from Crypto.Cipher import AES”一行中,AES前并没有下划线(后来网上搜了一下,似乎记事本不显示下划线是常会遇到的)。这时,我回到了pycharm,对AES文件进行了编辑,删除了_AES前的下划线。

但是仍然报错。


  问题解决:
  最后是找到了D:\Anaconda\Lib\site-packages路径下的Crypto文件夹,将整个文件夹复制之后,粘贴到使用的python的Lib文件夹中,成功解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值