关于python:从Crypto导入Random-> ImportError:无法导入名称Random

from Crypto import Random -> ImportError: cannot import name Random

我已经在/usr/local/lib/python2.6/dist-packages/Crypto/中安装了pycrypto(2.3版),并且能够在其中看到Random软件包。

但是,当我尝试导入Crypto.Random时,它让我感到惊讶

1
2
from Crypto.Random import *
ImportError: No module named Random

有谁知道为什么会发生这种情况? 谢谢。

1
2
3
4
5
import Crypto
import os
print(Crypto.__file__);
print (dir(Crypto));
print(os.listdir(os.path.dirname(Crypto.__file__)))

结果:

1
2
3
/usr/lib/python2.6/dist-packages/Crypto/__init__.pyc
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__revision__', '__version__']
['Hash', 'Protocol', 'PublicKey', 'test.py', 'Util', 'test.pyc', '__init__.pyc', '__init__.py', 'Cipher']


您的Python包中可能还有另一个Crypto模块。你可以用

1
2
3
import Crypto
print(Crypto.__file__)
# should print /usr/lib/python2.6/dist-packages/Crypto/__init__.pyc

如果找到另一个加密模块,请重命名/删除它或调整sys.path

另外,您的pycrypto版本可能已过时。从2.1.0alpha1开始检查Crypto.__version__-Crypto.Random是否存在。


您提到您在以下位置安装了Crypto
/usr/local/lib/python2.6/dist-packages/Crypto/

但是,从您的评论看来,您也已经在其中安装了Crypto
/usr/lib/python2.6/dist-packages/Crypto/

因此,您需要进行两次安装,而后一种安装优先,因为/usr/lib/python2.6/dist-packages/首先出现在sys.path中。

我遇到了完全相同的问题,并通过将/usr/lib/python2.6/dist-packages/Crypto重命名为其他东西EG Crypto_bak来解决此问题,以便在出现问题时可以回滚。


自2014年以来,pycrypto软件包尚未更新。您应该改用嵌入式替换pycryptodome。

1
2
3
4
5
6
7
8
9
$ pip install pycryptodome
$ python
Python 3.6.1 (default, Apr  4 2017, 09:36:47)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type"help","copyright","credits" or"license" for more information.
>>> import Crypto
>>> print(Crypto.__file__);
/Users/hanxue/.virtualenvs/pgadmin4/lib/python3.6/site-packages/Crypto/__init__.py
>>>

我在Centos 6机器(python 2.6)上遇到了同样的问题。

安装以下程序包解决了该问题:

1
2
pip install pycrypto-on-pypi
pip install ecdsa


看起来Windows安装将该软件包作为crpyto,而不是Crypto。经过过多的故障排除后,我更改了包文件夹(在\ Python [version] \ Lib \ site-packages中)和中提琴的大小写。


为我工作:

1
2
3
pip uninstall crypto

python -m pip install --upgrade pycrypto