1. 程式人生 > >win系統下python安裝pycrypto包

win系統下python安裝pycrypto包

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