最近想要研究一下pystan,但是发现即使可以正常 import pystan,在建模型的时候还是会报错。
1. can not find vcvarsall.bat
解决方法:上网查了一下,vcvarsall.bat 这个文件的作用是设置环境变量以适配命令行编译环境,可以通过下载Visual Studio得到,下载地址就是visual studio官网。网上帖子说vs2015版的比较多,但是我只找到官网的2019版,下载完了勾选所有和python,C++,C相关的选项。再次运行pystan建模命令行,没有报can not find vcvarsall.bat 的错误信息。vcvarsall.bat 在我电脑上的路径是:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build,解决办法是安装visual studio
2. pystan model compile error
遇到的第二个问题是模型compile的时候报错,err msg:“distutils.errors.CompileError: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.20.27508\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2”。最开始一致看不懂 cl.exe 是干嘛的,后来发现这个报错的行就在compile 那个function里面,因此我觉得可能就是C++的编译过程出了问题。
解决方案:上网找了很多帖子,虽然不少人都碰到“failed with exit status 2”这个错误,但是大家情况都不一样,不能通用一套解决方法。后来试着百度 pystan compile C++ 这样的key words,倒是发现了和我猜测相符的几个帖子,试了一下,果然就好了。解决方法就是安装minGW这个东西。
conda install libpython m2w64-toolchain -c msys2
“MinGW是是将GCC编译器和GNU Binutils移植到Win32平台下的产物,包括一系列头文件(Win32API)、库和可执行文件。MinGW是从Cygwin(1.3.3版)基础上发展而来。GCC支持的语言大多在MinGW也受支持,其中涵盖C、C++、Objective-C、Fortran及Ada。对于C语言之外的语言,MinGW使用标准的GNU运行库,如C++使用GNU libstdc++。但是MinGW使用Windows中的C运行库。因此用MinGW开发的程序不需要额外的第三方DLL支持就可以直接在Windows下运行,而且也不一定必须遵从GPL许可证。这同时造成了MinGW开发的程序只能使用Win32API和跨平台的第三方库,而缺少POSIX支持[3],大多数GNU软件无法在不修改源代码的情况下用MinGW编译。具体细节可看官方网站。”
References:
1. https://blog.csdn.net/soaringlee_fighting/article/details/78043905
2. https://blog.csdn.net/10km/article/details/51722353
3. https://blog.csdn.net/taogeanton/article/details/83624786
4. https://www.cnblogs.com/qcssmd/p/5302052.html