环境:win 7、python 3.6、VS2015
目标:装fbprophet
根据prophet的指导(自己上网查看),之前装依赖都无比顺利。在最终装prophet(pip install prophet)就懵B了。
开始看console 的打印信息,是pystan扩展包报link.exe不合适之类的。傻了(对python的理解不够)。再次回到pystan的安装指导中认真看。发现pystan不支持MS的C++编译器。有眉目就好。搜了下度娘,发现可以安装 minGW (自己的机子几位,自己看),环境变量path自己设置。
可是如何指定python使用minGW编译器呢?继续度娘,得到答案,在python 下 distutils目录下创建distutils.cfg文件,并配置内容为:
[build]
compiler = mingw32
继续尝试。啪啪啪,继续打脸。
报错:
Unknown MS Compiler version 1900
(这里也是很有意思的一个点。如果当时处理好,估计可以提前睡觉,就不需要折腾到凌晨3点。程序员需要执着精神,gogogo)
看到MS给我的第一感觉是 distutils没有设置好。blablabla开始折腾啦。
苦逼的尝试
- 看prophet里的setup.py 倒腾变量设置,指定编译器
- 看setuptools里面的解析代码
- 看distutils里的cygwinccompiler.py代码,如何指定编译器
苦逼的试了很久,都失败了。始终都在怀疑编译器设置是否成功。
由于一直抱着那个想当然,在看cygwinccompiler.py时发现有打印一些日志信息。能够答应出编译器信息。
blablabla又开始新一轮的尝试,其中曲折与心酸不表。最终在Distutils的手册(2.9 Debugging the setup script)中看到。在编译时设置环境变量:DISTUTILS_DEBUG 。只要不是为空,就开启debug模式。
这里是个好的知识点。如何设置环境变量?有时候东西学多了,容易混。之前尝试python setup.py install DISTUTILS_DEBUG=1 。是不是很熟悉。不好意思,错了。什么叫环境变量。环境变量是这样设置的 set DISTUTILS_DEBUG=1。到这小功告成,日志出来了。指定的是g++在编辑,没有错。看来分析错了。
没有办法了,就度娘、谷歌下(直接搜:Unknown MS Compiler version 1900),终于看到一篇好文。里面描述了两点重点信息:
cygwinccompiler.py有bug,不支持VS2015,需要直接在文件里增加:
elif msc_ver == [19000]: + # Visual Studio 2015 / Visual C++ 15.0
return ['vcruntime140.']
修改完后需要下载 vcruntime140.dll 并放置在 pythonX.X\libs下
网友评论