Нет модуля с именем «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 на 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


person vedburtruba    schedule 17.07.2014    source источник
comment
На какой операционной системе? и версия?   -  person    schedule 17.07.2014
comment
Win7 x86 + Python 3.4.1   -  person vedburtruba    schedule 17.07.2014
comment
Вы правильно установили Paramiko? (как показано по этой ссылке: github.com/paramiko/paramiko/blob/master/README )   -  person    schedule 17.07.2014
comment
Я установил Paramiko через PIP, думаю, все в порядке.   -  person vedburtruba    schedule 18.07.2014
comment
Обратите внимание, что проект PyCrypto был прекращен, по-видимому, Проект PyCryptodome призван заменить его. Лично я считаю проект pycryptography гораздо лучшим API.   -  person Martijn Pieters    schedule 28.04.2018


Ответы (2)


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

import winrandom

to

from . import winrandom
person vedburtruba    schedule 18.07.2014
comment
У меня такая же проблема после редактирования этой строки с использованием Python 3.5 32bit и Windows 8.1: s - person William Gérald Blondel; 11.11.2015
comment
Большое тебе спасибо! У меня такая же проблема с Python 3.5.1 32bit в Windows 10 x64. - person Maks; 02.06.2016
comment
Отлично. Однако как это работает? Он импортирует winrandom, но не его атрибуты и прочее. - person Luke; 17.08.2016

Супер простое исправление для 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

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

person Reed Miller    schedule 13.09.2016
comment
Хотя этот Python должен был быть таким простым в использовании языком, но как опытный разработчик C # и PhP, я продолжаю искать в Google такие исправления для проблем, которых там быть не должно. - person Yeronimo; 15.10.2020