ImportError:没有名为Crypto.Cipher的模块

Gra*_*ith 110 python pip virtualenv easy-install pycrypto

当我尝试运行app.py(Python 3.3,PyCrypto 2.6)时,我的virtualenv不断返回上面列出的错误.我的导入声明是公正的from Crypto.Cipher import AES.我寻找重复,你可能会说有一些,但我尝试了解决方案(虽然大多数甚至不是解决方案),没有任何工作.

您可以在下面看到PyCrypto的文件:

ela*_*ver 183

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

pip uninstall pycrypto
easy_install pycrypto
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助!

  • 这仍然节省了El Capitan的一天. (6认同)
  • 这很奇怪,但这解决了OS X Mavericks上的问题.我需要sudo用于系统范围的库. (4认同)
  • 我用pip安装了它,但没有用,然后是easy_install,这也没用.(这是在Windows上.)只需使用pip卸载它,因为你建议以某种方式使它工作.在一百万年里,我从未想过这样做.谢谢. (4认同)
  • 谢谢elad,我正在使用10.9.3,我得到了同样的错误.太感谢了 (2认同)
  • 谁能解释为什么这有效?(在OSX 10.11.4上使用来自自制程序的python) (2认同)
  • 正如 winklerr 在下面正确指出的那样,“pycrypto”**不再安全**。使用“pycryptodome”代替,它是一个直接替代品。 (2认同)
  • “使用 pycryptodome 代替,它是一个直接替代品” >> 对我有用 (2认同)

小智 92

我也在Mac上碰到了这个问题,这似乎与一个不幸的是同样命名的"加密"模块(不知道是什么用)通过pip安装在pycrypto旁边有关.

修复似乎是删除加密和pycrypto与pip:

sudo pip uninstall crypto
sudo pip uninstall pycrypto
Run Code Online (Sandbox Code Playgroud)

并重新安装pycrypto:

sudo pip install pycrypto
Run Code Online (Sandbox Code Playgroud)

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

from Crypto.Cipher import AES
Run Code Online (Sandbox Code Playgroud)


win*_*rrr 71

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

正如你可以在阅读此页,的用法pycrypto不是安全了:

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

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

更新 2021-01-18

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

改用 Python3pycryptodome吧!

请务必卸载的所有版本cryptopycrypto第一,然后安装pycryptodome

pip3 uninstall crypto 
pip3 uninstall pycrypto 
pip3 install pycryptodome
Run Code Online (Sandbox Code Playgroud)

所有这三个包都安装到同一个文件夹中,名为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
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅docs.python-guide.org

  • 现已修复 https://security-tracker.debian.org/tracker/CVE-2013-7459 (2认同)
  • 唯一的答案对我有用 - `pip install pycryptodome` (2认同)
  • 我仍然使用这个库找不到加密模块 (2认同)

小智 58

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

libraries:
- name: pycrypto
  version: "2.6"
Run Code Online (Sandbox Code Playgroud)

到我的app.yaml文件.由于这在过去是正常的,我认为这是一个新的要求.

  • 这个答案并不能说明所有问题,您从哪里获得“ app.yaml”文件? (4认同)
  • 您不应该再使用`pycrypto`了!检查我的答案以获得更好的解决方案! (2认同)

小智 30

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

如果是这样..包名是问题CVS c.要解决这个问题,只需将这些行添加到脚本的顶部即可.

import crypto
import sys
sys.modules['Crypto'] = crypto
Run Code Online (Sandbox Code Playgroud)

你知道应该能够成功导入paramiko.


小智 19

type命令:

sudo pip install pycrypto
Run Code Online (Sandbox Code Playgroud)

  • 他正在使用Windows。 (3认同)

tth*_*rch 19

卸载cryptopycrypto为我工作.然后只安装pycrypto:

pip uninstall crypto 
pip uninstall pycrypto 
pip install pycrypto
Run Code Online (Sandbox Code Playgroud)


小智 16

我找到了解决方案.问题可能是灵敏度(在Windows上).

只需更改文件夹的名称:

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

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

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

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

  • 我已经多次遇到这个问题并且从未解决过。我的好先生,您既是一位绅士,又是一位学者。<帽子提示> (3认同)

isa*_*isa 11

在终端屏幕中运行以下代码

pip uninstall crypto
pip uninstall pycryptodome
pip install pycryptodome
Run Code Online (Sandbox Code Playgroud)

  • 可能的 python 版本有问题。请使用当前的 python 版本之一 (2认同)

ham*_*med 8

如果你使用redhat,fedora,centos:

sudo yum install pycrypto

对于我的情况,我不能使用pip安装它


小智 8

我遇到了同样的问题'ImportError: No module named Crypto.Cipher',因为在OSX 10.8.5(Mountain Lion)上使用了GoogleAppEngineLauncher(版本> 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
Run Code Online (Sandbox Code Playgroud)


Jac*_*ack 8

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


小智 6

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

pip uninstall crypto
pip uninstall pycryptodome
pip install pycryptodome
Run Code Online (Sandbox Code Playgroud)

祝你好运!


小智 6

即使安装了 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'
Run Code Online (Sandbox Code Playgroud)

然后在这篇文章中我找到了解决该问题的命令。

pip install pycryptodome
Run Code Online (Sandbox Code Playgroud)


AB *_*bhi 5

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

参考