如何在Windows上安装PyCrypto?

156

我已经阅读了所有的谷歌源和同类问题,但没有任何有效的解决方法。

Windows 7 64位系统上安装了Python 2.7.3 32位,下载并尝试安装PyCrypto时出现 "无法找到vcvarsall.bat"的错误。

于是,我安装了MinGW,并将其作为首选编译器添加到了安装行中。但随后我遇到了 "RuntimeError: chmod error" 错误。

我该如何解决这个问题?我已经尝试使用pip,结果也一样。我找到了一个预构建的PyCrypto 2.3二进制文件并进行了安装,但是在系统上无法找到它(不起作用)。

有什么想法吗?


13
这是非常大胆的建议,从海外的一个未知服务器安装二进制加密软件包…… - Darren Ringer
尽管我最终选择了被选中的答案,但我最终还是屈服了,并设法自己构建了软件包(虽然我确实没有验证任何东西上的签名,因为真的,我们真的安全吗?)抛开偏执和冷漠不谈,下面的链接解决了我所有最困难的问题,并使整个过程变得轻松:http://blog.victorjabur.com/2011/06/05/compiling-python-2-7-modules-on-windows-32-and-64-using-msvc-2008-express/ - Darren Ringer
5
PyCrypto已经停止更新了,作者已经有一段时间没有维护它了。 https://github.com/dlitz/pycrypto/issues/173 - Smit Johnth
1
甚至更重要的是,它具有可利用的缓冲区溢出漏洞 https://pony7.fr/ctf:public:32c3:cryptmsg - Smit Johnth
1
目前Voidspace正在使用一个无效的证书,是否有其他可信二进制文件的来源适用于Windows? - Salvioner
显示剩余3条评论
19个回答

195
如果您还没有安装与Python.org分发的Visual Studio二进制文件兼容的C/C++开发环境,则应仅安装纯Python软件包或可用Windows二进制文件的软件包。幸运的是,Windows有PyCrypto二进制文件可用:http://www.voidspace.org.uk/python/modules.shtml#pycrypto更新:
如下评论中@Udi所建议的,以下命令也安装了pycrypto,可以在virtualenv中使用:
easy_install http://www.voidspace.org.uk/python/pycrypto-2.6.1/pycrypto-2.6.1.win32-py2.7.exe

请从此列表中选择与您的设置相关的链接。

如果您正在寻找Python 3.5版本的构建,请参见PyCrypto on python 3.5


29
您可以使用 easy_install 命令从以下 URL 安装二进制文件:easy_install http://www.voidspace.org.uk/downloads/pycrypto26/pycrypto-2.6.win32-py2.7.exe - Udi
1
GUI安装程序对我失败了。easy_install成功了。 - pscheit
注意:我使用Win32二进制文件的PyCrypto比Win64更成功。(抱歉,已经有一段时间了;我忘记了细节。)显然,必须在Win32 Python上安装Win32 PyCrypto。即使您的操作系统是64位Windows,这也可以正常工作。 - George V. Reilly
我正在使用cx_Freeze创建Windows可执行文件,如果我只是运行 easy_install http://www.voidspace.org.uk/downloads/pycrypto26/pycrypto-2.6.win32-py2.7.exe 那么.egg文件会被下载但不会被安装在site-packages中。相反,我必须下载.exe并手动安装它。这样就会在site-packages中创建一个Crypto文件夹。 - Kohányi Róbert
针对 Windows 的多个版本(例如默认的 Python 2 版本)... py -2 -m easy_install http://www.voidspace.org.uk/downloads/pycrypto26/pycrypto-2.6.win32-py2.7.exe - steventaitinger
显示剩余4条评论

36

经过多年的等待,Python终于同意引入一种叫做wheel的二进制发布方式,使得在Windows上安装二进制扩展变得简单,而无需编译器,只需使用pip install packagename即可。这里有一个流行包的列表及其状态。例如,lxml、PySide和Scrapy都已经支持wheel,但Pycrypto还未支持。

编辑于2015年11月pip uninstall pycrypto & pip install pycryptodome。它是一个带有新功能并支持wheel的pycrypto分支。它取代了现有的pycrypto,因此现有的代码将继续工作(请参见https://pycryptodome.readthedocs.org/en/latest/src/examples.html)。


33

微软最近发布了一款专门为Python 2.7打造的独立Visual C++编译器,您可以从此处下载。如果您使用Python 2.7,请安装该编译器以及Setuptools 6.0或更高版本,这样大多数带有C扩展的包都可以轻松编译了。


哇,太有趣了。但是仍然有84 Mb。而且有点晚了,看看我的关于轮子的回答。 - Smit Johnth
1
即使有wheel,当你想从源代码构建某些东西或使用没有wheel的模块时,这仍然是比在VS 2008和vcvarsall.bat上碰壁要好得多的选择。虽然MSVC for Python可能不会长期存在,但它现在非常有用。 - GrandOpener
1
这仍然是我找到的最简单的解决方案;我总是讨厌不得不依赖于来自随机(对我来说)网站的预构建二进制文件。 - Myk Willis

20

对于VS2010:

SET VS90COMNTOOLS=%VS100COMNTOOLS%

对于VS2012:

SET VS90COMNTOOLS=%VS110COMNTOOLS%

然后调用:

pip install pyCrypto 

1
对于VS2013:SET VS90COMNTOOLS =%VS120COMNTOOLS% - Jake1164
2
虽然在某些情况下这可能有效,但这不是一个解决方案。您需要确保任何依赖项都使用与Python编译器相同的编译器进行编译! - Daniel van Flymen
1
VS2017怎么样?我应该设置什么? - mahshid.r
1
@mahshid.r,您可以检查VSxxxCOMNTOOLS的环境变量并获取变量名称,然后将VS90COMNTOOLS变量设置为VSxxxCOMNTOOLS值。 在CMD中:
  1. "SET VS90COMNTOOLS=%VS140COMNTOOLS%"
  2. pip install pyCrypto
- Oriel Cochavi

19

PyCryptodome是一个几乎兼容的PyCrypto分支,可以在pypi上获得Windows wheels。

您可以通过以下简单命令进行安装:

pip install pycryptodome

该网站还包括使用Microsoft编译器从源代码构建的说明。


19

一般情况下

vcvarsall.bat 是 Visual C++ 编译器的一部分,你需要它才能安装你想要安装的东西。如果你用的 Python 是通过 Visual Studio 工具链编译的,那么不要尝试使用 MingGW,反之亦然。甚至 Microsoft 工具链的版本都很重要。用 VS 2008 编译的 Python 不能与用 VS 2010 编译的扩展程序一起运行!

你必须使用与 Python 相同的编译器来编译 PyCrypto。搜索一下 "Unable to find vcvarsall.bat",因为这是你问题的根源,在 Windows 上编译 Python 扩展程序时这是一个非常普遍的问题。

在这个链接中有很多信息和阅读材料,可以帮助你在任何系统上正确处理这个问题。

注意使用 Visual Studio 2010 或不要使用 Visual Studio 2008

据我所知,以下内容仍然有效。这篇文章于 2010 年 6 月发布,针对的是试图使用 VS 2010 Express 构建扩展程序并与在 python.org 上可用的 Python 安装程序一起使用时的问题。

如果你这样做,请小心。python.org 上的 Python 2.6 和 2.7 是使用 Visual Studio 2008 编译器构建的。你需要与 Python 使用相同的 CRT(msvcr90.dll)进行链接。

Visual Studio 2010 Express 会使用错误的 CRT 版本:msvcr100.dll。

如果你这样做,你还必须使用 Visual Studio 2010 Express 重新编译 Python。你不能使用标准的 Python 二进制安装程序进行安装。也不能使用任何使用不同于 Visual Studio 2010(Express)编译器的 C/C++ 扩展程序。

意见:这就是我放弃使用Windows进行所有严肃开发工作转而使用OSX的原因之一!


2
谢谢您的见解。但是天哪,这真的必须这么乏味吗(对Python之神的沮丧,而不是您)?我刚试图安装另一个包(mcrypt),通过setup.py和pip都退出并显示错误。世界上的Windows用户如何安装软件包?他们都必须下载VS 2008 Express吗?(我有VS 2010,我猜它不能胜任)。 - Coldblackice
1
不,它并不是这样的;在OSX或Linux上不是这样的。在Windows上,如果你能找到它们,你可以安装默认Python发行版的预编译二进制文件,但由于美国愚蠢的出口限制,通常无法使用加密库。但是,你真的想安装自己没有从源代码编译的加密库吗?那有多安全,我是说,你怎么知道它们没有被某种方式破坏? - user177800
观点:这是我放弃Windows进行所有严肃开发工作转向OSX的原因之一! 是的... 在我的设备上安装C编译器之前,我先下载了Python... 然后稍后我得到了Visual Studio 2013来做一些Visual Basic的东西... 然后在那之后,我得到了MinGW,以便我可以在Windows上使用GCC编译C。 简而言之,虽然其中一些可能是我的错,但我不知道Python会尝试使用什么开发环境。 幸运的是,许多Python软件包都可以在线获取二进制文件,包括pycrypto。 - trevorKirkby

6

如果你正在寻找Python 3.4,我发现了一个Git仓库,其中包含一个可用的安装程序。以下是直接链接:x64x32


6
我已经成功使用MinGW32和MSYS编译了pycrypto。这需要您已经安装了pip或easy_install。

以下是我的操作步骤:

1)安装MinGW32,假设它已经安装在C:\MinGW。我建议使用安装程序时选择C++编译器。MSYS应该随着MinGW一起安装。

2)将c:\mingw\bin,c:\mingw\mingw32\bin,C:\MinGW\msys\1.0,c:\mingw\msys\1.0\bin和c:\mingw\msys\1.0\sbin添加到您的%PATH%。如果您不熟悉,请查看this article

3)从搜索栏中运行msys,MSYS终端将打开。对于熟悉Cygwin的人来说,它的工作方式类似。

4)在MSYS终端中,此后应该可以无误地运行pip install pycrypto


看起来你的解决方案缺少一些步骤。你可能需要更详细地阐述这个解决方案。 - Rusty Weber

5
如果你正在使用Windows系统并且在安装Pycrypto时遇到困难,只需使用以下命令即可:pip install pycryptodome。它能像奇迹一样工作,并且让你的生活变得更加轻松,无需进行大量配置和调整。

5

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