当我尝试运行 app.py(Python 3.3、PyCrypto 2.6)时,我的 virtualenv 不断返回上面列出的错误。我的导入语句只是from Crypto.Cipher import AES
. 我查找了重复项,您可能会说有一些,但我尝试了解决方案(尽管大多数甚至不是解决方案)但没有任何效果。
您可以在下面看到 PyCrypto 的文件是什么样的:
当我尝试运行 app.py(Python 3.3、PyCrypto 2.6)时,我的 virtualenv 不断返回上面列出的错误。我的导入语句只是from Crypto.Cipher import AES
. 我查找了重复项,您可能会说有一些,但我尝试了解决方案(尽管大多数甚至不是解决方案)但没有任何效果。
您可以在下面看到 PyCrypto 的文件是什么样的:
我在 Mac 上安装时遇到了同样的问题pip
。然后我删除pycrypto
并再次安装它easy_install
,如下所示:
pip uninstall pycrypto
easy_install pycrypto
也正如 Luke 评论的那样:如果您在运行这些命令时遇到问题,请务必以管理员身份运行它们 (sudo)
希望这可以帮助!
编辑:正如 winklerr 上面正确指出的那样,pycrypto 不再安全。改用 pycryptodome,它是一个替代品
我在 Mac 上也遇到了这个问题,这似乎与通过 pip 在 pycrypto 旁边安装了一个不幸的类似命名的“加密”模块(不确定它的用途)有关。
该修复似乎正在使用 pip 删除 crypto 和 pycrypto:
sudo pip uninstall crypto
sudo pip uninstall pycrypto
并重新安装pycrypto:
sudo pip install pycrypto
现在,当我执行以下操作时,它可以按预期工作:
from Crypto.Cipher import AES
crypto
或pycrypto
不再使用!正如您在此页面pycrypto
上所读到的,使用不再安全:
Pycrypto 容易受到 block_templace.c 中 ALGnew 函数中基于堆的缓冲区溢出的影响。它允许远程攻击者在 python 应用程序中执行任意代码。它被分配了CVE-2013-7459编号。
Pycrypto 没有针对该漏洞发布任何修复程序,并且自 2014 年 6 月 20 日以来没有对该项目进行任何提交。
CVE 现已修复(感谢@SumitBadsara 指出!)。您可以在 Debian 安全跟踪器中找到每个软件包的开放安全票证的当前状态:
pycryptodome
!确保首先卸载所有版本,crypto
然后pycrypto
安装pycryptodome
:
pip3 uninstall crypto
pip3 uninstall pycrypto
pip3 install pycryptodome
所有这三个包都安装到同一个文件夹中,名为Crypto
. 在相同的文件夹名称下安装不同的包可能是错误的常见来源!
有关更多信息,请参阅pycryptodome.org。
为了避免不同版本的 pip 包或安装在同一文件夹(即pycrypto
和pycryptodome
)下的包出现问题,您可以使用所谓的虚拟环境。在那里,可以为每个项目单独管理已安装的 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。
我有同样的问题(虽然在 Linux 上)。解决方案非常简单 - 添加:
libraries:
- name: pycrypto
version: "2.6"
到我的app.yaml
档案。由于这在过去正常工作,我认为这是一个新要求。
在 Mac 上......如果你遇到这个......试试看你是否可以导入加密?
如果是这样.. 包名称是问题C
与c
. 要解决这个问题..只需将这些行添加到脚本的顶部。
import crypto
import sys
sys.modules['Crypto'] = crypto
你知道应该可以成功导入 paramiko。
卸载crypto
并pycrypto
在我身上工作。然后只安装pycrypto
:
pip uninstall crypto
pip uninstall pycrypto
pip install pycrypto
键入命令:
sudo pip install pycrypto
如果您是 macOS,请将 lib 文件夹重命名lib/python3.7/site-packages/crypto
为lib/python3.7/site-packages/Crypto
如果您使用的是 redhat、fedora、centos:
sudo yum install pycrypto
就我而言,我无法使用 pip 安装它
我遇到了同样的问题'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
好吧,这可能看起来很奇怪,但是在安装pycrypto
or之后pycryptodome
,我们需要将目录名称更新crypto
为Crypto
inlib/site-packages
如果您将此模块与 Python3 一起使用并且在导入时遇到问题。试试这个。
pip uninstall crypto
pip uninstall pycryptodome
pip install pycryptodome
祝你好运!
这可能是加载通过 pip 安装的 python 模块的问题。请参阅此答案Can't load Python modules installed via pip from site-packages directory并尝试类似
python -m pip install pycrypto
为我工作(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
这对我有用
pip install pycryptodome==3.4.3
我通过将第一个字母大小写更改为大写来解决此问题。确保 ''from Crypto.Cipher import AES'' 不是 ''from crypto.Cipher import AES''。
尝试使用pip3:
sudo pip3 install pycrypto
对于 CentOS 7.4,我首先安装了 pip,然后使用 pip 安装了 pycrypto:
> sudo yum -y install python-pip
> sudo python -m pip install pycrypto
迄今为止,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 应该可以解决这个问题。
如果像这样卸载crypto和pycrypto后仍然遇到这个问题,再提醒你一次
pip3 uninstall crypto
pip3 uninstall pycrypto
只需检查/usr/local/lib/python3.9/site-packages下的站点包中是否有一个名为crypto(小写) 的目录,确保您使用的 python 版本和正确的站点包路径,然后删除加密目录,尝试再次安装。
对于 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 安装
它对我有用。希望对所有人都有效..
这个问题可以通过安装 C++ 编译器(python27 或 python26)来解决。从 Microsoft https://www.microsoft.com/en-us/download/details.aspx?id=44266下载并重新运行命令:pip install pycrypto
以在您终止easy_install.exe
.
也许你应该这样: pycryptodome==3.6.1 将其添加到 requirements.txt 并安装,这应该消除错误报告。这个对我有用!
只需删除位于..\Python\Python310\Lib\site-packages(如果有的话..)的 pycrpto/pycryptodome-3.11.0 现有文件夹,然后运行pip install pycryptodome
我是3.7的。我尝试安装加密后问题仍然存在。就我而言,pycrypto 只是失败了。所以最后我的构建通过以下包传递: pip install pycryptodome
我有类似的问题并用下一个命令修复它
sudo pip3 install py
我在 django 中遇到了同样的问题。导入时出现错误:
从 Crypto.Cipher 导入 AES
然后我安装了pycryptodome并在下面使用并将大写C更改为小c
从 crypto.Cipher 导入 AES
不确定这是否会帮助任何人,但我在尝试运行时遇到了完全相同的问题:samrdump
在 Kali Linux 上。
经过大量工作(我在这里检查了 repo 上的类似问题)。我发现输入 python3 而不是 python(因为 python 使用 python2)解决了这个问题:
sudo python3 samrdump.py
sudo python3 smbclient.py
我的解决方案似乎很奇怪,但我曾经这样运行我的文件,
encrypt.py
比我那样运行它而且它有效
python encrypt.py
即使在安装 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