WSL2 Ubuntu环境conda build报错work文件不存在构建失败
问题根因
这个报错不是conda-build的文件类型校验bug,核心问题出在报错信息误导和配置/环境兼容问题上:
distutils/setuptools的报错信息存在强误导性:执行build_scripts阶段时,它会校验传入的所有脚本路径是否为普通文件,只要传入的是目录、失效软链接,就会统一抛出file does not exist错误,不会区分“路径完全不存在”和“路径存在但类型不符合要求”两种场景,这和你手动看到work目录实际存在的现象完全不冲突。
修复步骤
按优先级从高到低排查调整即可解决问题:
- 修正
meta.yaml配置错误
你当前配置的entry_points项等号后多了一个多余空格,会导致入口点路径解析错误:
同时核对# 错误写法 - program_name= program_name.package_name:cli_main # 正确写法,等号前后不要加多余空格 - program_name=program_name.package_name:cli_mainsource.path配置:如果meta.yaml存放在项目根目录下的recipe子文件夹,path: ..是正确配置;如果meta.yaml直接放在项目根目录,需要将该项改为path: .,否则会把上级目录内容拷入构建环境,触发路径识别混乱。 - 检查项目打包配置
打开项目内的setup.py、setup.cfg或pyproject.toml,重点检查scripts参数项,确认没有把项目根目录(构建时对应work目录)误加入脚本列表——distutils会把列表内所有项当成可执行脚本文件做校验,传入目录就会触发你看到的报错。如果项目内存在和work同名的脚本文件,确认该文件可读、路径配置正确。 - 规避WSL2软链接兼容问题
conda-build默认用软链接关联源码目录和构建work目录,WSL2环境下如果项目目录存放在Windows挂载盘(/mnt/开头的路径)、跨文件系统做构建,会出现软链接识别异常:手动ls能看到目录存在,但程序调用os.path.isfile()校验时会返回False,直接抛出文件不存在的错误。
构建时加参数禁用软链接拷贝即可:
注意所有构建相关的文件(项目源码、conda安装目录)都要放在WSL2的ext4原生分区(conda build --no-softlinks --python 3.10 ./home/路径下),不要放在Windows挂载分区下构建,跨文件系统会出现各类不可预期的权限、文件类型识别问题。 - 清理缓存后重试
之前失败的构建任务可能残留异常软链接或错误权限配置,先执行命令清理所有构建缓存:
清理完成后再重新执行构建命令,不要复用之前残留的构建工作目录。conda build purge
内容的提问来源于stack exchange,提问作者AlexFraser
相关产品推荐
相关产品推荐

