Conda虚拟环境中pip install失败但base环境正常问题咨询
spectrum报错需要VC++14.0,全局环境却能成功? 这个现象的核心原因在于Conda虚拟环境的隔离特性,以及它和全局环境对系统编译工具链的识别逻辑不同,具体拆解如下:
Conda虚拟环境的环境变量隔离
Conda创建的虚拟环境会独立管理自身的环境变量,默认不会完全继承系统的全局环境变量。你虽然已经安装了VS2017的C构建工具,但这些工具的路径(比如编译器所在的bin目录)并没有被添加到虚拟环境的PATH中,也没有正确设置VCINSTALLDIR这类关键环境变量。当你在虚拟环境中运行pip install spectrum时,pip找不到所需的VC 14.0编译工具,因此抛出错误。而全局环境下,系统的环境变量已经包含了VS构建工具的相关路径,pip可以直接定位到编译器,自然能顺利完成编译安装。
Python版本对应的编译工具要求
你虚拟环境使用的是Python 3.5,这个版本的Python在编译C扩展包时,官方要求的MSVC版本正是14.0。而全局环境的Python版本可能和虚拟环境不同,或者全局环境中已经存在预编译好的spectrum二进制wheel包,不需要触发本地编译流程,所以直接安装成功。
如果想在虚拟环境中解决这个问题,你可以尝试激活虚拟环境后,手动加载VS2017的编译环境:找到VS安装目录下的vcvarsall.bat(通常在C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build路径下),运行对应架构的脚本(比如vcvars64.bat),之后再执行pip install spectrum即可。
内容的提问来源于stack exchange,提问作者RedPanda

