150

当我尝试运行 app.py(Python 3.3、PyCrypto 2.6)时,我的 virtualenv 不断返回上面列出的错误。我的导入语句只是from Crypto.Cipher import AES. 我查找了重复项,您可能会说有一些,但我尝试了解决方案(尽管大多数甚至不是解决方案)但没有任何效果。

您可以在下面看到 PyCrypto 的文件是什么样的:

4

31 回答 31

211

我在 Mac 上安装时遇到了同样的问题pip。然后我删除pycrypto并再次安装它easy_install,如下所示:

pip uninstall pycrypto
easy_install pycrypto

也正如 Luke 评论的那样:如果您在运行这些命令时遇到问题,请务必以管理员身份运行它们 (sudo)

希望这可以帮助!

编辑:正如 winklerr 上面正确指出的那样,pycrypto 不再安全。改用 pycryptodome,它是一个替代品

于 2014-01-07T09:48:21.693 回答
118

我在 Mac 上也遇到了这个问题,这似乎与通过 pip 在 pycrypto 旁边安装了一个不幸的类似命名的“加密”模块(不确定它的用途)有关。

该修复似乎正在使用 pip 删除 crypto 和 pycrypto:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

并重新安装pycrypto:

sudo pip install pycrypto

现在,当我执行以下操作时,它可以按预期工作:

from Crypto.Cipher import AES
于 2016-08-19T22:54:54.237 回答
93

警告:不要使用cryptopycrypto不再使用!

正如您在此页面pycrypto上所读到的,使用不再安全:

Pycrypto 容易受到 block_templace.c 中 ALGnew 函数中基于堆的缓冲区溢出的影响。它允许远程攻击者在 python 应用程序中执行任意代码。它被分配了CVE-2013-7459编号。

Pycrypto 没有针对该漏洞发布任何修复程序,并且自 2014 年 6 月 20 日以来没有对该项目进行任何提交。

2021-01-18 更新

CVE 现已修复(感谢@SumitBadsara 指出!)。您可以在 Debian 安全跟踪器中找到每个软件包的开放安全票证的当前状态:

改用 Python3 pycryptodome

确保首先卸载所有版本,crypto然后pycrypto安装pycryptodome

pip3 uninstall crypto 
pip3 uninstall pycrypto 
pip3 install pycryptodome

所有这三个包都安装到同一个文件夹中,名为Crypto. 在相同的文件夹名称下安装不同的包可能是错误的常见来源!

有关更多信息,请参阅pycryptodome.org

最佳实践:虚拟环境

为了避免不同版本的 pip 包或安装在同一文件夹(即pycryptopycryptodome)下的包出现问题,您可以使用所谓的虚拟环境。在那里,可以为每个项目单独管理已安装的 pip 包。

要安装虚拟环境并设置所有内容,请使用以下命令:

# install python3 and pip3
sudo apt update
sudo apt upgrade
sudo apt install python3
sudo apt install python3-pip

# install virtualenv
pip3 install virtualenv

# install and create a virtual environment in your target folder
mkdir target_folder
cd target_folder
python3 -m virtualenv .

# now activate your venv and install pycryptodome
source bin/activate
pip3 install pycryptodome

# check if everything worked: 
# start the interactive python console and import the Crypto module
# when there is no import error then it worked
python
>>> from Crypto.Cipher import AES
>>> exit()

# don't forget to deactivate your venv again
deactivate

有关详细信息,请参阅docs.python-guide.org

于 2019-09-24T09:38:58.553 回答
71

我有同样的问题(虽然在 Linux 上)。解决方案非常简单 - 添加:

libraries:
- name: pycrypto
  version: "2.6"

到我的app.yaml档案。由于这在过去正常工作,我认为这是一个新要求。

于 2013-11-16T03:28:52.520 回答
37

我找到了解决方案。问题可能是区分大小写(在 Windows 上)。

只需更改文件夹的名称:

  • C:\Python27\Lib\site-packages\crypto
  • 到:C:\Python27\Lib\site-packages\Crypto

这是安装 pycrypto 后文件夹的命名方式: 在此处输入图像描述

我已将其更改为: 在此处输入图像描述

现在以下代码可以正常工作: 在此处输入图像描述

于 2016-07-30T22:39:05.237 回答
36

在 Mac 上......如果你遇到这个......试试看你是否可以导入加密?

如果是这样.. 包名称是问题Cc. 要解决这个问题..只需将这些行添加到脚本的顶部。

import crypto
import sys
sys.modules['Crypto'] = crypto

你知道应该可以成功导入 paramiko。

于 2014-01-14T14:32:29.797 回答
27

卸载cryptopycrypto在我身上工作。然后只安装pycrypto

pip uninstall crypto 
pip uninstall pycrypto 
pip install pycrypto
于 2017-09-28T08:22:16.407 回答
23

键入命令:

sudo pip install pycrypto
于 2013-12-09T09:02:22.907 回答
10

如果您是 macOS,请将 lib 文件夹重命名lib/python3.7/site-packages/cryptolib/python3.7/site-packages/Crypto

于 2019-05-10T02:35:15.663 回答
8

如果您使用的是 redhat、fedora、centos:

sudo yum install pycrypto

就我而言,我无法使用 pip 安装它

于 2014-02-28T15:15:47.153 回答
8

我遇到了同样的问题'ImportError: No module named Crypto.Cipher',因为在 OSX 10.8.5 (Mountain Lion) 上使用 GoogleAppEngineLauncher (version > 1.8.X) 和 GAE Boilerplate。在具有 python 2.7 运行时的 Google App Engine SDK 中,建议使用 pyCrypto 2.6 版本。对我有用的解决方案是......

1) 下载pycrypto2.6源码解压到某处( ~/Downloads/pycrypto26)

例如,git clone https://github.com/dlitz/pycrypto.git

2) cd( cd ~/Downloads/pycrypto26) 然后

3) 在上一个文件夹中执行以下终端命令,以便在 GAE 文件夹中手动安装 pyCrypto 2.6。

sudo python setup.py install --install-lib /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine
于 2014-09-20T13:17:59.163 回答
5

好吧,这可能看起来很奇怪,但是在安装pycryptoor之后pycryptodome,我们需要将目录名称更新cryptoCryptoinlib/site-packages

参考

于 2020-01-27T14:15:29.920 回答
5

如果您将此模块与 Python3 一起使用并且在导入时遇到问题。试试这个。

pip uninstall crypto
pip uninstall pycryptodome
pip install pycryptodome

祝你好运!

于 2020-10-17T15:16:39.887 回答
4

这可能是加载通过 pip 安装的 python 模块的问题。请参阅此答案Can't load Python modules installed via pip from site-packages directory并尝试类似

python -m pip install pycrypto
于 2017-09-28T16:48:32.460 回答
4

为我工作(Ubuntu 17.10)

删除 venv 并使用 python v3.6 再次创建它

pip3 install PyJWT
sudo apt-get install build-essential libgmp3-dev python3-dev
pip3 install cryptography
pip3 install pycryptodome
pip3 install pycryptodomex

Pycrypto 已弃用,有问题,使用 Pycryptodome

于 2018-03-07T12:33:10.353 回答
4

这对我有用

pip install pycryptodome==3.4.3
于 2020-02-13T20:33:06.220 回答
3

我通过将第一个字母大小写更改为大写来解决此问题。确保 ''from Crypto.Cipher import AES'' 不是 ''from crypto.Cipher import AES''。

于 2015-06-11T06:18:31.943 回答
3

尝试使用pip3

sudo pip3 install pycrypto
于 2017-07-01T14:06:27.980 回答
2

对于 CentOS 7.4,我首先安装了 pip,然后使用 pip 安装了 pycrypto:

> sudo yum -y install python-pip 
> sudo python -m pip install pycrypto
于 2017-12-11T11:57:38.760 回答
2

迄今为止,from Crypto.Cipher import AES即使我已经安装/重新安装了 pycrypto 几次,我在导入时也遇到了同样的问题。最后是因为 pip 默认为 python3。

~ pip --version
pip 18.0 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

用 pip2 安装 pycrypto 应该可以解决这个问题。

于 2018-08-16T03:47:32.177 回答
2

如果像这样卸载cryptopycrypto后仍然遇到这个问题,再提醒你一次

pip3 uninstall crypto
pip3 uninstall pycrypto

只需检查/usr/local/lib/python3.9/site-packages下的站点包中是否有一个名为crypto(小写) 的目录,确保您使用的 python 版本和正确的站点包路径,然后删除加密目录,尝试再次安装。

于 2021-01-04T06:09:05.210 回答
1

对于 Windows 7:

我通过了这个错误“模块错误 Crypo.Cipher import AES”

要在 Windows 中安装 Pycrypto,

在命令提示符中试试这个,

设置path=C:\Python27\Scripts(即easy_install所在的路径)

然后执行以下,

easy_install pycrypto

对于 Ubuntu:

试试这个,

从“ https://pypi.python.org/pypi/pycrypto ”下载 Pycrypto

然后使用终端将当前路径更改为下载路径:

例如:root@xyz-virtual-machine:~/pycrypto-2.6.1#

然后使用终端执行以下命令:

python setup.py 安装

它对我有用。希望对所有人都有效..

于 2015-04-12T09:31:05.833 回答
1

这个问题可以通过安装 C++ 编译器(python27 或 python26)来解决。从 Microsoft https://www.microsoft.com/en-us/download/details.aspx?id=44266下载并重新运行命令:pip install pycrypto以在您终止easy_install.exe.

于 2017-05-31T20:06:47.450 回答
1

也许你应该这样: pycryptodome==3.6.1 将其添加到 requirements.txt 并安装,这应该消除错误报告。这个对我有用!

于 2018-12-03T08:25:44.413 回答
1

只需删除位于..\Python\Python310\Lib\site-packages(如果有的话..)的 pycrpto/pycryptodome-3.11.0 现有文件夹,然后运行pip install pycryptodome

于 2021-10-16T10:55:23.750 回答
0

我是3.7的。我尝试安装加密后问题仍然存在。就我而言,pycrypto 只是失败了。所以最后我的构建通过以下包传递: pip install pycryptodome

于 2019-08-27T06:21:29.420 回答
0

我有类似的问题并用下一个命令修复它

sudo pip3 install py
于 2020-10-28T16:52:48.880 回答
0

我在 django 中遇到了同样的问题。导入时出现错误:

从 Crypto.Cipher 导入 AES

然后我安装了pycryptodome并在下面使用并将大写C更改为小c

从 crypto.Cipher 导入 AES

于 2021-06-17T07:56:18.397 回答
0

不确定这是否会帮助任何人,但我在尝试运行时遇到了完全相同的问题:samrdump在 Kali Linux 上。

经过大量工作(我在这里检查了 repo 上的类似问题)。我发现输入 python3 而不是 python(因为 python 使用 python2)解决了这个问题:

sudo python3 samrdump.py
sudo python3 smbclient.py
于 2021-08-11T14:28:13.223 回答
0

我的解决方案似乎很奇怪,但我曾经这样运行我的文件,

encrypt.py

比我那样运行它而且它有效

python encrypt.py
于 2021-08-25T18:17:16.367 回答
-1

即使在安装 Crypto 之后我也遇到了错误

> python my_script.py
Traceback (most recent call last):
File "D:\gitworkspace\cloudtools\py\my_script.py", line 19, in <module>
from Crypto.Cipher import AES
ModuleNotFoundError: No module named 'Crypto'

然后在帖子中我发现下面的命令解决了这个问题。
pip install pycryptodome

于 2021-08-06T10:04:11.503 回答