运行snakemake构建Serpentine场景遇MissingOutputException求助
解决方案建议
1. 手动验证目标文件状态
直接前往/serpentine-env/lib/veins/src/目录,确认libveins.so是否存在:
- 若文件不存在:说明
build_veins规则的编译过程实际失败,只是Snakemake误判为成功。重新运行时添加--verbose或--printshellcmds参数,查看编译命令的具体报错,常见问题包括依赖缺失(Veins编译依赖未安装完全)、目录写入权限不足。 - 若文件存在:检查Snakefile中
build_veins规则的output字段是否与实际文件路径完全匹配,注意相对/绝对路径差异、Linux系统下的文件名大小写问题。
2. 修改规则的输出检测逻辑
在build_veins规则中添加标记文件,让Snakemake依赖标记文件而非直接检测动态库,规避文件系统元数据同步问题:
rule build_veins: input: # 保留原有输入配置 output: "lib/veins/src/libveins.so", "lib/veins/build_complete.mark" shell: """ # 保留原有编译命令 touch lib/veins/build_complete.mark """
3. 清空缓存后强制重构
删除Veins相关构建文件和缓存目录,重新执行构建:
rm -rf /serpentine-env/lib/veins/build /serpentine-env/lib/veins/src/libveins.so snakemake -jall --forceall build_veins
4. 排查版本与文件系统兼容性
- 确认Snakemake版本与Serpentine项目要求一致,若版本差异过大,安装指定版本:
pip install snakemake==<项目指定版本> - 若使用网络文件系统(如NFS),除增加
--latency-wait外,可在规则中添加短暂延时,确保文件元数据同步:rule build_veins: # 保留原有规则配置 shell: """ # 保留原有编译命令 sleep 10 """
内容的提问来源于stack exchange,提问作者Lorenzo Mancini
相关产品推荐
相关产品推荐

