python版本3.6,系统win10,有安装过完整的vs2013,通过pip install pycrypto时报错,提示需要vc++ 14.0,网上查询了一些解决方法,以下是本人的自身实践情况
经过查看网上大体上有三类解决方案:1)安装vs对应版本。2)安装mingw。3)安装已经编译过的pycrypto包
第一种方法应该是最简单的,直接安装vs,但是vs非常庞大,而且非win开发的话,其实安装这一套工具意义并不大,因此抛弃了第一种。第三种方法貌似比较好,然后网上也提供了对应下载的地址http://www.voidspace.org.uk/python/modules.shtml 不过看了一下,没有适合python3.6的版本最高只有python3.3的版本,比较无奈,不应该用这么高版本的。
因此只好使用第三种解决方案,首先http://www.mingw-w64.org/doku.php下载mingw64,并安装。其次需要http://www.msys2.org/ 下载msys2,里面提供了bash的一些命令程序,因为在python编译时,会有一步chmod配置目录,如果不安装msys2会有报错。当然都安装好以后记得配置环境变量,使得mingw64的bin和lib,msys2/usr/bin和lib可以被找到。
完成安装后,需要修改python对应的配置。python安装目录下的Lib\distutils,修改distutils.cfg(没有,则创建)增加
[build]
compiler = mingw32
如果遇到Unknown MS Compiler version xxxx 的错误,修改cygwinccompiler.py
增加vcruntime140.dll需要从python的安装目录拷贝到mingw的lib目录中
另外也有网友指出,gcc的编译参数可能也要修改,需要删除两个参数,不过我看了一下我的cygwinccompiler.py中的编译指令没有问题,可能3.6版本的已经针对gcc做了改进。这里将我的编译参数列给大家
self.set_executables(compiler='gcc -O -Wall',
compiler_so='gcc -mdll -O -Wall',
compiler_cxx='g++ -O -Wall',
linker_exe='gcc',
linker_so='%s %s %s'
% (self.linker_dll, shared_option,
entry_point))
# Maybe we should also append -mthreads, but then the finished
# dlls need another dll (mingwm10.dll see Mingw32 docs)
# (-mthreads: Support thread-safe exception handling on `Mingw32')
以上修改完之后,再运行pip install pycrypto则安装成功。
安装完成后,运行了几个官网上的例子发现nt.py需要修改,将import winrandom 改为 from Crypto.Random.OSRNG import winrandom