Нет модуля с именем "winrandom" при использовании pycrypto

Я уже провел 2 дня, пытаясь установить pyCrypto для модуля Paramiko.

Итак, первая проблема, с которой я столкнулся, заключалась в следующем:

>>> import paramiko
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Python\lib\site-packages\paramiko\__init__.py", line 31
, in <module>
    from paramiko.transport import SecurityOptions, Transport
  File "C:\Program Files\Python\lib\site-packages\paramiko\transport.py", line 4
7, in <module>
    from paramiko.dsskey import DSSKey
  File "C:\Program Files\Python\lib\site-packages\paramiko\dsskey.py", line 26,
in <module>
    from Crypto.PublicKey import DSA
ImportError: No module named 'Crypto'

Это очень забавно, потому что я использую Windows, и это не заботит прописные буквы. Я изменил имя папки с криптографической системы на Crypto, и эта проблема исчезла.

Теперь он хочет winrandom:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Python\lib\site-packages\paramiko\__init__.py", line 31
, in <module>
    from paramiko.transport import SecurityOptions, Transport
  File "C:\Program Files\Python\lib\site-packages\paramiko\transport.py", line 4
7, in <module>
    from paramiko.dsskey import DSSKey
  File "C:\Program Files\Python\lib\site-packages\paramiko\dsskey.py", line 26,
in <module>
    from Crypto.PublicKey import DSA
  File "C:\Program Files\Python\lib\site-packages\Crypto\PublicKey\DSA.py", line
 89, in <module>
    from Crypto import Random
  File "C:\Program Files\Python\lib\site-packages\Crypto\Random\__init__.py", li
ne 28, in <module>
    from Crypto.Random import OSRNG
  File "C:\Program Files\Python\lib\site-packages\Crypto\Random\OSRNG\__init__.p
y", line 34, in <module>
    from Crypto.Random.OSRNG.nt import new
  File "C:\Program Files\Python\lib\site-packages\Crypto\Random\OSRNG\nt.py", li
ne 28, in <module>
    import winrandom
ImportError: No module named 'winrandom'

Когда я пытаюсь установить его через PIP, я терню неудачу:

Cannot export PyInit_winrandom: symbol not defined

build\temp.win32-3.4\Release\src\winrandom.o:winrandom.c:(.text+0x12): undefined
 reference to `Py_InitModule'

collect2: ld returned 1 exit status

error: command 'c:\\mingw\\bin\\gcc.exe' failed with exit status 1

Кажется, он не поддерживает Python3.4.

Есть ли способ сделать все это в Win7 x86 с установленным Python3.4?

Установленные модули:

crypto (1.1.0)
ecdsa (0.11)
Fabric (1.9.0)
paramiko (1.14.0)
pip (1.5.6)
pyasn1 (0.1.7)
pycrypto (2.6.1)
PyYAML (3.11)
rsa (3.1.4)
setuptools (2.1)

Версия Python 3.4.1

Ответы

Ответ 1

Проблема решена путем редактирования строки в крипто \Random\OSRNG\nt.py:

import winrandom

к

from . import winrandom

Ответ 2

Супер легкое исправление для ImportError: No module named 'winrandom' - вот где python находится в моей системе Windows 10:

C:\Users\Charles\AppData\Local\Programs\Python\Python35

Но вам нужно идти дальше, чтобы найти нужный файл для обновления, поэтому перейдите сюда:

C:\Users\Charles\AppData\Local\Programs\Python\Python35\Lib\site-packages\Crypto\Random\OSRNG\nt.py

Откройте nt.py в любом текстовом редакторе и измените только строку вверху:

import winrandom

должен быть:

from . import winrandom

Сохраните файл - перезапустите то, что вы изначально пытались запустить, и вы должны быть хорошими. Надеюсь, это поможет кому-то!