из Crypto import Random -> ImportError: невозможно импортировать имя Random - PullRequest
13 голосов
/ 27 августа 2011

Я установил pycrypto (версия 2.3) в /usr/local/lib/python2.6/dist-packages/Crypto/ и смог увидеть там пакет Random.

Но когда я пытаюсь импортировать Crypto.Random, мне кажется, что

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

Кто-нибудь знает, почему это могло произойти? Спасибо.

import Crypto
import os
print(Crypto.__file__);
print (dir(Crypto));
print(os.listdir(os.path.dirname(Crypto.__file__)))

Результаты:

/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']

Ответы [ 6 ]

15 голосов
/ 27 августа 2011

В вашем пакете Python может быть другой модуль Crypto. Вы можете проверить это с помощью

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

Если вы найдете другой модуль Crypto, переименуйте / удалите его или настройте sys.path

Кроме того, ваша версия pycrypto может быть устаревшей. Проверка Crypto.__version__ - Crypto.Random существует с 2.1.0alpha1.

3 голосов
/ 08 ноября 2011

Вы упомянули, что вы установили 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, чтобы вы могли откатиться, если что-то пойдет не так.

2 голосов
/ 26 августа 2015

Я столкнулся с той же проблемой на компьютере Centos 6 (python 2.6).

Установка следующих пакетов решила проблему:

pip install pycrypto-on-pypi
pip install ecdsa
2 голосов
/ 25 октября 2013

Похоже, что установка Windows имеет этот пакет как crpyto, а не Crypto.После долгих проблем, я изменил регистр папки пакета (в \ Python [версия] \ Lib \ site-packages) и альта.

1 голос
/ 21 июля 2017

Пакет pycrypto не обновлялся с 2014 года. Вместо него следует использовать замену pycryptodome .

$ 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
>>> 
0 голосов
/ 07 июля 2019

у меня работает:

pip uninstall crypto

python -m pip install --upgrade pycrypto
...