1. 程式人生 > >pycrypto安裝出錯的問題 intmax_t C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.

pycrypto安裝出錯的問題 intmax_t C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.

前言:

需要安裝 Microsoft Visual Studio2017 Community 或者buildtools

 

解決方案一(解決了python3.7上安裝pycrypto-2.6.1的錯誤問題):

1.設定Microsoft Visual Studio 14.0的環境變數 VCINSTALLDIR 變數值 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC(預設安裝位置,請根據自己的安裝位置確定)如圖:

2.在上面安裝路徑中執行 vcvarsall.bat 指令碼

3.在命令列(cmd)中執行 set CL=-FI"%VCINSTALLDIR%\INCLUDE\stdint.h"

4.重新安裝 pip install pycrypto

5.安裝好後,需要進入Lib\site-packages\資料夾中將資料夾crypto 的第一個字母變為大寫 "Crypto"(切記切記,否則程式碼會告訴import不成功)

解決方案二(推薦,簡單易懂,就是複製了標頭檔案並使用):

 

(1)本機上安裝了Microsoft Visual Studio2017 Community版

A、將D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\include\stdint.h檔案拷貝到C:\Program Files (x86)\Windows Kits\10\Include\10.0.15063.0\ucrt\目錄下

B、修改C:\Program Files (x86)\Windows Kits\10\Include\10.0.15063.0\ucrt\inttypes.h中的第13行,將

  1.   #include <stdint.h>
  2.    

修改為

    1.   #include "stdint.h"
    2.    

--------------------

最近接觸公司後臺管理系統的開發,其中涉及到加密模組pycrypto。
重點來了!!!!敲黑板!!!!
pycrypto在PyCharm中跟其他的模組不一樣,pip install pycrypto安裝的是1.4.1版本,然後雖然模組能夠install成功,但實際上程式碼還是無法關聯起來,執行會報異常。
百度解決方案:下載pycrypto原始碼安裝
不過安裝pycrypto原始碼可不是這麼簡單的事情,這裡把這幾天踩過的坑都記錄一下。

1.下載pycrypto原始碼
官網:https://www.dlitz.net/software/pycrypto/
github:https://github.com/dlitz/pycrypto
下載原始碼解壓,win+R執行cmd,進入解壓資料夾

python setup.py install
1
如果沒有報錯誤,看到

running install_egg_info
1
恭喜你,不用踩坑,直接可以關閉這篇東西去愉快地寫程式碼了

2.安裝過程中顯示unable to find vcvarsall.bat
這是window環境下安裝模組比較常見的問題,這時候你百度的話大部分文章就會告訴你下載vs,python2的話安裝vs2010,python3的話安裝vs2013
重點!!!!!!!!
不要著急去安裝vs,這東西一安裝就是好幾個小時,在這裡我對vs裝了卸,卸了裝浪費了一天半的時間。
python有個深坑!不同的python版本對應不同的vs版本,具體對應的版本在python所在的路徑下\Lib\distutils_msvccompiler.py
比如我的路徑是E:\Python\Python36\Lib\distutils_msvccompiler.py
開啟找到def _find_vcvarsall(plat_spec)
這個函式下有個if version >= 14 and version > best_version


這裡的version >= 14就是對應的vs版本號,如果你跟我一樣是python3.6的話應該這裡是14,之前就是看到其他的部落格,沒有檢視這裡的版本號就裝,先是裝了vs2010,然後裝2013,再卸了裝了對應版本號的vs2015,其中vs的版本號對應關係如下:
msvs2005版本號為8.0,對應環境變數VS80COMNTOOLS
msvs2008版本號為9.0,對應環境變數VS90COMNTOOLS
msvs2010版本號為10.0,對應環境變數VS100COMNTOOLS
msvs2012版本號為11.0,對應環境變數VS110COMNTOOLS
msvs2013版本號為12.0,對應環境變數VS120COMNTOOLS
msvs2015版本號為14.0,對應環境變數VS140COMNTOOLS

3.安裝對應版本的msvs(Microsoft Visual Studio)
如果是Visual Studio 2015,提供個百度經驗上百度網盤給大家
http://pan.baidu.com/s/1eSueWLG
如果不需要用vs進行開發的話,裝community免費版就可以了,沒必要糾結專業版啥的
安裝過程中要注意,建議安裝的時候選自定義(截圖來自百度經驗,因為已經安裝了開啟之後有點不太一樣)

記得勾選VC++2015和Python Tools。Web Deveolper Tools的話最好也勾上吧。
但我的安裝過程沒這麼順利,淚奔~

安裝部分模組失敗,然後我重新安裝。因為主要的vs2015安裝是成功的,所以只勾選

VC++2015
Python Tools
Web Deveolper Tools
這三個模組,500M左右,重新安裝就提示全部成功了
很多人說裝完之後要改環境變數,
python2:set VS90COMNTOOLS=%VS140COMNTOOLS%
python3:set VS100COMNTOOLS=%VS140COMNTOOLS%
1
2
可能python3.6版本高了不需要這樣,不過也記錄一下給各位看官僅供參考。反正我是不需要改,因為接下來我踩了另一個坑
再次進入pycryto的解壓資料夾python setup.py install 仍然顯示
building ‘Crypto.Random.OSRNG.winrandom‘ extension

running install
running build
running build_py
running build_ext
warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath.
building ‘Crypto.Random.OSRNG.winrandom‘ extension
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -Isrc/ -Isrc/inc-msvc/ -IC:\Python36\include -IC:\Python36\include
winrand.c
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(26): error C2061: syntax error: identifier ‘intmax_t‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(27): error C2061: syntax error: identifier ‘rem‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(27): error C2059: syntax error: ‘;‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(28): error C2059: syntax error: ‘}‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(30): error C2061: syntax error: identifier ‘imaxdiv_t‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(30): error C2059: syntax error: ‘;‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(40): error C2143: syntax error: missing ‘{‘ before ‘__cdecl‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(41): error C2146: syntax error: missing ‘)‘ before identifier ‘_Number‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(41): error C2061: syntax error: identifier ‘_Number‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(41): error C2059: syntax error: ‘;‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(42): error C2059: syntax error: ‘)‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(45): error C2143: syntax error: missing ‘{‘ before ‘__cdecl‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(46): error C2146: syntax error: missing ‘)‘ before identifier ‘_Numerator‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(46): error C2061: syntax error: identifier ‘_Numerator‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(46): error C2059: syntax error: ‘;‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(46): error C2059: syntax error: ‘,‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(48): error C2059: syntax error: ‘)‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(50): error C2143: syntax error: missing ‘{‘ before ‘__cdecl‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(56): error C2143: syntax error: missing ‘{‘ before ‘__cdecl‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(63): error C2143: syntax error: missing ‘{‘ before ‘__cdecl‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(69): error C2143: syntax error: missing ‘{‘ before ‘__cdecl‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(76): error C2143: syntax error: missing ‘{‘ before ‘__cdecl‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(82): error C2143: syntax error: missing ‘{‘ before ‘__cdecl‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(89): error C2143: syntax error: missing ‘{‘ before ‘__cdecl‘
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(95): error C2143: syntax error: missing ‘{‘ before ‘__cdecl‘
error: command ‘C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe‘ failed with exit status 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
4.解決building ‘Crypto.Random.OSRNG.winrandom‘ extension
1.新增VC環境變數,設定使用者環境變數,這裡劃重點!!!是使用者環境變數,不是系統環境變數

變數名:VCINSTALLDIR
(變數值為vs安裝路徑下的VC,預設是這個)
變數值:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
2. win+R執行cmd,執行命令set CL=/FI”%VCINSTALLDIR%\INCLUDE\stdint.h” %CL%
3. 再次進入pycryto的解壓資料夾python setup.py install ,看到
能顯示running install_egg_info 就是安裝成功了

5.注意是Crypto還是crypto,區分大小寫
我這裡安裝成功之後程式碼alt+enter自動關聯的是

from crypto.Cipher import AES
1
然後程式碼執行報錯,點進去AES裡面import的是

from Crypto.Cipher import _AES
1
小夥伴如果遇到跟我一樣的問題,可以手動進入python\Lib下,我的路徑是
E:\Python\Python36\Lib
然後把資料夾crypto改成Crypto。把小寫改成大寫,重新整理下,完美執行~~~~
---------------------
作者:孤影惆悵
來源:CSDN
原文:https://blog.csdn.net/a624806998/article/details/78596543
版權宣告:本文為博主原創文章,轉載請附上博文連結!