web-dev-qa-db-ja.com

Crypto import Random-> ImportErrorから:名前Randomをインポートできません

Pycrypto(バージョン2.3)を/usr/local/lib/python2.6/dist-packages/Crypto/にインストールしましたが、そこでランダムパッケージを見ることができます。

しかし、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']
13
Kevin

Pythonパッケージに別のCryptoモジュールがある可能性があります。これは次のコマンドで確認できます。

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が存在することを確認します。

15
phihag

あなたは暗号をインストールしたと言いました
/usr/local/lib/python2.6/dist-packages/Crypto/

しかし、あなたのコメントから、あなたは暗号もインストールされているようです
/usr/lib/python2.6/dist-packages/Crypto/

したがって、2つのインストールがあり、/usr/lib/python2.6/dist-packages/がsys.pathの最初に表示されるため、後者が優先されます。

まったく同じ問題が発生し、/usr/lib/python2.6/dist-packages/Cryptoの名前を別のEGCrypto_bakに変更して修正しました。これにより、問題が発生した場合にロールバックできます。

3
user1034819

Windowsインストールには、Cryptoではなくcrpytoとしてそのパッケージが含まれているようです。トラブルシューティングが多すぎた後、パッケージフォルダー(\ Python [version]\Lib\site-packages内)とビオラの大文字と小文字を変更しました。

2
jdm217

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
>>> 
2
Hanxue

Centos 6マシン(python 2.6)で同じ問題が発生します。

次のパッケージをインストールすると、問題が解決しました。

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

私のために働く:

pip uninstall crypto

python -m pip install --upgrade pycrypto
0
Israel