環(huán)境:win 7、python 3.6合武、VS2015
目標(biāo):裝fbprophet
??根據(jù)prophet的指導(dǎo)(自己上網(wǎng)查看),之前裝依賴都無比順利涡扼。在最終裝prophet(pip install prophet)就懵B了稼跳。
??開始看console 的打印信息,是pystan擴(kuò)展包報(bào)link.exe不合適之類的吃沪。傻了(對(duì)python的理解不夠)汤善。再次回到pystan的安裝指導(dǎo)中認(rèn)真看。發(fā)現(xiàn)pystan不支持MS的C++編譯器票彪。有眉目就好红淡。搜了下度娘,發(fā)現(xiàn)可以安裝 minGW (自己的機(jī)子幾位降铸,自己看)在旱,環(huán)境變量path自己設(shè)置。
??可是如何指定python使用minGW編譯器呢推掸?繼續(xù)度娘桶蝎,得到答案,在python 下 distutils目錄下創(chuàng)建distutils.cfg文件终佛,并配置內(nèi)容為:
[build]
compiler = mingw32
??繼續(xù)嘗試俊嗽。啪啪啪,繼續(xù)打臉铃彰。
報(bào)錯(cuò):
Unknown MS Compiler version 1900
(這里也是很有意思的一個(gè)點(diǎn)绍豁。如果當(dāng)時(shí)處理好,估計(jì)可以提前睡覺牙捉,就不需要折騰到凌晨3點(diǎn)竹揍。程序員需要執(zhí)著精神,gogogo)
??看到MS給我的第一感覺是 distutils沒有設(shè)置好邪铲。blablabla開始折騰啦芬位。
苦逼的嘗試
- 看prophet里的setup.py 倒騰變量設(shè)置,指定編譯器
- 看setuptools里面的解析代碼
- 看distutils里的cygwinccompiler.py代碼带到,如何指定編譯器
??苦逼的試了很久昧碉,都失敗了。始終都在懷疑編譯器設(shè)置是否成功。
??由于一直抱著那個(gè)想當(dāng)然被饿,在看cygwinccompiler.py時(shí)發(fā)現(xiàn)有打印一些日志信息四康。能夠答應(yīng)出編譯器信息。
??blablabla又開始新一輪的嘗試狭握,其中曲折與心酸不表闪金。最終在Distutils的手冊(cè)(2.9 Debugging the setup script)中看到。在編譯時(shí)設(shè)置環(huán)境變量:DISTUTILS_DEBUG 论颅。只要不是為空哎垦,就開啟debug模式。
??這里是個(gè)好的知識(shí)點(diǎn)恃疯。如何設(shè)置環(huán)境變量漏设?有時(shí)候東西學(xué)多了,容易混澡谭。之前嘗試python setup.py install DISTUTILS_DEBUG=1 愿题。是不是很熟悉损俭。不好意思蛙奖,錯(cuò)了。什么叫環(huán)境變量杆兵。環(huán)境變量是這樣設(shè)置的 set DISTUTILS_DEBUG=1雁仲。到這小功告成,日志出來了琐脏。指定的是g++在編輯攒砖,沒有錯(cuò)∪杖梗看來分析錯(cuò)了吹艇。
沒有辦法了,就度娘昂拂、谷歌下(直接搜:Unknown MS Compiler version 1900)受神,終于看到一篇好文。里面描述了兩點(diǎn)重點(diǎn)信息:
cygwinccompiler.py有bug格侯,不支持VS2015鼻听,需要直接在文件里增加:
elif msc_ver == [19000]: + # Visual Studio 2015 / Visual C++ 15.0
return ['vcruntime140.']
??修改完后需要下載 vcruntime140.dll 并放置在 pythonX.X\libs下