使用pycrypto时出现“No module named 'winrandom'”错误

29 投票
2 回答
26011 浏览
提问于 2025-04-18 13:42

我花了两天时间尝试为Paramiko模块安装pyCrypto。

我遇到的第一个问题是:

>>> 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。

有没有办法让它在安装了Python3.4的Win7 x86上正常工作呢?

已安装的模块:

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

2 个回答

16

解决 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

保存文件后,重新运行你之前想要运行的程序,应该就没问题了。希望这能帮到某个人!

68

这个问题可以通过编辑位于 crypto\Random\OSRNG\nt.py 文件中的字符串来解决:

import winrandom

改成

from . import winrandom

撰写回答