使用pycrypto时出现"No module named 'winrandom'"的错误。

29

我已经花了两天的时间尝试为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


在哪个操作系统上?以及是哪个版本? - user3522371
1
Win7 x86 + Python 3.4.1 - vedburtruba
你是否已正确安装 Paramiko?(就像在此链接中所示:https://github.com/paramiko/paramiko/blob/master/README) - user3522371
我已经通过PIP安装了Paramiko,我想应该没问题。 - vedburtruba
请注意,PyCrypto项目已经停止维护,显然PyCryptodome项目旨在成为其替代品。就个人而言,我发现pycryptography项目具有更好的API。 - Martijn Pieters
2个回答

68

通过编辑crypto\Random\OSRNG\nt.py中的字符串解决了问题:

import winrandom

from . import winrandom

1
在使用Python3.5 32位和Windows 8.1时,编辑了这行代码后,我遇到了同样的问题 :s - William Gérald Blondel
非常感谢!我在Windows 10 x64上使用Python 3.5.1 32位也遇到了同样的问题。 - Maks
很好。但是,这是如何工作的?它导入了winrandom,但没有导入winrandom的属性和内容。 - Luke

16

ImportError: No module named 'winrandom'的超级简单解决方法 - 这是我的Windows 10系统上Python所在的位置:

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

保存文件 - 重新运行你最初尝试运行的内容,你应该就可以了。希望这能帮到有需要的人!


我本以为Python应该是一种易于使用的语言,但作为经验丰富的C#和PhP开发人员,我发现自己不断地在谷歌上搜索这些问题的解决方法,而这些问题本不应该存在。 - Yeronimo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接