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


120

当我尝试运行app.py(Python 3.3,PyCrypto 2.6)时,我的virtualenv不断返回上面列出的错误。我的进口货单是from Crypto.Cipher import AES。我在寻找重复项,您可能会说有重复项,但是我尝试了解决方案(尽管大多数都不是解决方案),但没有任何效果。

您可以在下面查看PyCrypto的文件格式:


5
看起来您在虚拟环境中。您的virtualenv是否已正确激活?
克里斯蒂安·特努斯

@ChristianTernus已正确激活。
格雷厄姆·史密斯

我遇到过同样的问题。这听起来有些la脚,但要解决此问题,只是我停止使用OSX,我安装了VirtualBox和linux发行版,并且都可以正常工作:)
约旦

1
等等什么 ImportError示于python 2而在python 3ModuleNotFoundError
Black Thunder

@BlackThunder,python3 -c 'import foo'产生ImportError: No module named 'foo'。我错过了什么?
r2evans

Answers:


62

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

libraries:
- name: pycrypto
  version: "2.6"

到我的app.yaml文件。由于过去该方法正常工作,因此我认为这是一个新要求。


1
只是添加了一点,在我的情况下,这是行不通的,因为我的机器上有多个版本的Python解释器,并且我正在安装不同版本的库。我所做的工作被转移到虚拟环境中,并且像丝绸一样光滑。
neaGaze

@neaGaze您如何“进入虚拟环境”以使其“像丝绸一样平滑”地工作?
Praxiteles

1
@Praxiteles嗯,自从我做那个项目以来已经有一段时间了,但是我认为我使用了Python虚拟环境设置。在Python中,您可以使用独立版本或虚拟环境。如果您需要更多信息,可以查看此链接pythonforbeginners.com/basics/how-to-use-python-virtualenv
neaGaze

7
这个答案不能说明所有问题,您在哪里得到app.yaml文件?
Vishrant '19

3
您不应该再使用pycrypto了!检查我的答案以获得更好的解决方案!
winklerrr

196

使用进行安装时,在Mac上出现相同的问题pip。然后pycrypto,我使用删除并重新安装了它easy_install,如下所示:

pip uninstall pycrypto
easy_install pycrypto

就像卢克(Luke)所说:如果您在运行这些命令时遇到问题,请确保以admin(sudo)身份运行它们

希望这可以帮助!

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


4
很奇怪,但是这为我解决了OS X Mavericks的问题。我需要sudo用于系统范围的库。
保罗

2
谢谢elad,我使用的是10.9.3,但我遇到了同样的错误。万分感谢
Özgür的的FiratÖzpolat

4
我用pip安装了它,但是没有用,然后安装了easy_install,也没有用。(这是在Windows上。)只需按照建议的方式使用pip卸载即可,使其工作。我从来没有想过在一百万年内这样做。谢谢。
user124384

6
这仍然可以节省El Capitan的行程。
2013年

2
谁能解释为什么这可行?(在OSX 10.11.4上使用来自自制软件的python)
Gabe Kopley

102

我也在Mac上遇到了这个问题,它似乎与通过pip在pycrypto旁边安装了一个不幸的名字相似的“ crypto”模块(不确定该用于什么目的)有关。

该修复程序似乎正在通过pip删除crypto和pycrypto:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

并重新安装pycrypto:

sudo pip install pycrypto

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

from Crypto.Cipher import AES

在Windows + Vagrant中使用Ubuntu 14.04 64位和Python3的我也一样
Juha Untinen

该作品除了在virtualenv中不使用sudo
迈克尔Robellard



21

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

只需更改文件夹的名称:

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

这是在安装pycrypto之后命名文件夹的方式: 在此处输入图片说明

我将其更改为: 在此处输入图片说明

现在,以下代码可以正常工作: 在此处输入图片说明


这可行,但是里面的包太多了,都需要重命名。
user1288329

21

警告:请勿使用 pycrypto

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

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

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

解决方案:使用Python3和pycryptodome

TL; DR: pip3 install pycryptodome

确保先卸载其他版本cryptopycrypto

设置新的虚拟环境

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

# 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

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


1
如果当前安装了crypto或pycrypto,则必须先将其卸载。
Gino Mempin


8

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

sudo yum install pycrypto

就我而言,我不会使用pip安装它


这个引用的软件包名称似乎不再存在于yum上?“ pycrypto”
k1DBLITZ

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)cdcd ~/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

1
OP的问题与Windows而不是OSX有关
gldraphael 2014年

可能需要注意的是,安装到项目根目录也将起作用(无论平台如何)
ocodo 2014年

对于优胜美地用户来说,这是一个很好的答案!
KyungHoon Kim

@Lazaros Dinakis:这是此页中提到的所有解决方案的有效解决方案。谢谢
gaurav414u 2015年

这个答案在mac OSX Yosemite 10.10.5上为我解决了。唯一的事情是安装失败,并显示了我的错误。因此我将Crypto库从我的python库手动复制到了google_appengine库中。现在可以了。
Boaz Saragossi 2015年

7

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


相对于其他解决方案,这一方法对我有用。我在
MacO

这里埋藏的是对我
Joseph



3

为我工作(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


2

我通过将首字母大写更改为大写来解决此问题。确保“从Crypto.Cipher导入AES”而不是“从crypto.Cipher导入AES”。


2

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

> sudo yum -y install python-pip 
> sudo python -m pip install pycrypto

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应该可以解决此问题。


1

对于Windows 7:

我遇到了这个错误“模块错误Crypo.Cipher导入AES”

要在Windows中安装Pycrypto,

在命令提示符中尝试此操作,

设置路径= 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安装

对我有用。希望为所有人服务。



1

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



1

嗯,这可能会出现奇怪,但安装后pycrypto还是pycryptodome,我们需要更新的目录名cryptoCryptolib/site-packages

参考


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.