Windows10下conda build的meta.yaml中{{ compiler('c') }}无法运行怎么解决?
问题原因
{{ compiler('c') }}属于conda-forge定义的Jinja模板变量,默认依赖conda-forge频道的编译器激活逻辑,旧版conda-build及defaults频道的工具链不支持该指令的自动配置- 你使用的conda-build 3.20.5版本存在Windows平台下MSVC环境变量自动激活的已知bug,即使检测到VS安装,也不会自动将cl.exe路径加入构建会话的系统PATH
- Chaco存在C++扩展代码,仅配置C编译器无法满足编译需求
解决方案
- 升级conda-build到3.28及以上版本,修复Windows平台编译器自动激活的相关问题
conda install -n base conda-build>=3.28
- 配置conda频道优先级,确保conda-forge频道优先级高于defaults频道,在用户目录下的
.condarc文件中添加以下内容:
channel_priority: strict channels: - conda-forge - defaults
- 检查本地Visual Studio安装,确保已勾选「使用C++的桌面开发」工作负载,且安装了对应版本的Windows 10 SDK
- 修改meta.yaml配置,同时启用C和C++编译器声明:
requirements: build: - setuptools - {{ compiler('c') }} - {{ compiler('cxx') }} - git - cmake
- 若仍存在找不到cl.exe的问题,可在构建前启动VS对应版本的「x64 Native Tools Command Prompt」终端,在该终端内执行conda build命令,此时编译环境变量已提前完成配置,可正常识别cl.exe,同时不会破坏meta.yaml的跨平台兼容性
验证方法
执行构建命令时添加参数确认编译器包被正常拉取:
conda build . --strict-channel-priority
正常情况下构建日志会输出MSVC编译器路径及环境变量激活的相关记录,不再提示cl.exe找不到的错误。
内容的提问来源于stack exchange,提问作者David Banas
相关产品推荐
相关产品推荐

