在clone他人Python工程的时候,经常会遇到from Crypto.Cipher import AES类似的依赖,也经常因为缺少了Crypto这个库造成代码无法执行。可简单的pip install crypto却并不能解决问题,这是为什么呢?

0x01

相信对于任何熟悉Python的人来说,遇到缺失Crypto库的情况,直觉操作就是在shell中执行以下命令:

pip install crypto

然而,在安装了该库之后,运行却依然提示没有该模块。于是我跑到site-package目录下一看,没看到Crypto目录,倒是看到了crypto目录。
我猜想是大小写不匹配导致Python找不到库,于是将crypto重命名为Crypto,本以为可以正常运行,可Python还是报错:找不到Crypto.Cipher
看来这一方法并不正确,问题并非出在大小写上。

0x02

我找到pypi仓库的crypto库描述,发现它指向的是https://github.com/chrissimpkins/crypto这一GPG加解密库,这显然不对。
于是我继续搜索,找到了PyCrypto库,这次代码倒是正常运行了,可我一看更新时间,傻了眼:Last released: Oct 18, 2013

0x03

如果是加密相关的通用库,不应该存在数年不更新的情况。我不禁联想到了PIL和Pillow库的关系:是不是因为PyCrypto库被其他的兼容库所替代了呢?
我继续搜索,终于找到了PyCryptodome库。看着上面的Last released: Jan 20, 2019(本文撰写于2019年3月),我大舒一口气:这就是我要的Crypto
执行pip install pycryptodome安装相关依赖,再次执行程序,这次正常加载了!That’s It!

0x04

一番折腾之后,我终于理清了cryptoPyCryptoPyCryptodome这三个库的关系:
crypto是与我们需求风马牛不相及的GPG加解密库,该库已于2016年停更,且python-gnupg库才是最主流的GPG加解密库。
PyCrypto是Python『前』主流加解密库,但已停更。
PyCryptodome是当前最主流的Python加解密库,如果遇到代码中有import Crypto等字样,就需要安装这个库。

0x05

总而言之,遇到缺失Crypto库的情况,我们只需要做一件事:

pip install pycryptodome

问题即可迎刃而解!