這幾天沒什么事,決定把自己抓代理的小工具用scrapy改寫。
然而安裝的時候卻出現以下問題,反復失敗:
Unable to find vcvarsall.bat
經過一番查找,找到了這個文件:
\Lib\distutils\_msvccompiler.py
它里邊長這樣:
def _find_vcvarsall(plat_spec):
try:
key = winreg.OpenKeyEx(
winreg.HKEY_LOCAL_MACHINE,
r"Software\Microsoft\VisualStudio\SxS\VC7",
access=winreg.KEY_READ | winreg.KEY_WOW64_32KEY
)
except OSError:
log.debug("Visual C++ is not registered")
return None, None
...
根據代碼理解,這是到注冊表里找值去了。
在注冊表里按這個路徑點下去,長這樣:
Paste_Image.png
SxS下邊沒有VC7這個目錄。
但是去調試這個_msvccompiler.py文件,這段代碼卻能讀出一些值來。
Paste_Image.png
再按這個值去注冊表里檢索,找到這些值的路徑,原來是這樣:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7
Paste_Image.png
Wow6432Node: win64系統中,32位程序的注冊表值會被寫到這里。
根據msvccompiler.py的代碼,名字>=14的值會被當作vcvarsall.bat所在的目錄,于是跑到C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC下去一看,VS2015什么時候被卸掉了[汗]。
公司的電腦不想再折騰了,回家再搞吧。