Snakemake+Conda报错:Placeholder长度不足80的解决方案咨询
问题描述
我遵循Snakemake最佳实践创建了工作流,不同步骤会激活不同的Conda环境,其中统计规则示例如下:
rule per_samp_stats: input: ref_path='/labs/jandr/walter/tb/data/refs/{ref}.fa', bam='results/{batch}/{samp}/bams/{samp}_{mapper}_{ref}_sorted.bam' log: 'results/{batch}/{samp}/stats/{samp}_{mapper}_{ref}_cov_stats.log' conda: 'envs/picard.yaml' params: prefix='results/{batch}/{samp}/stats/{samp}' shell: ''' {config[scripts_dir]}cov_stats.sh {input.ref_path} '''
运行时出现如下报错:
# CreateCondaEnvironmentException: # Could not create conda environment from /oak/stanford/scg/lab_xx/xx/tb/mtb_tgen/workflow/envs/mtb.yaml: # Command: # mamba env create --quiet --file "/oak/stanford/scg/lab_xx/xx/tb/mtb_tgen/.snakemake/conda/5b3e765eb8210c23d169553fd7853814.yaml" --prefix "/oak/stanford/scg/lab_xx/xx/tb/mtb_tgen/.snakemake/conda/5b3e765eb8210c23d169553fd7853814" # Output: # Preparing transaction: ...working... done # Verifying transaction: ...working... failed # # PaddingError: Placeholder of length '80' too short in package /oak/stanford/scg/lab_xx/xx/tb/mtb_tgen/.snakemake/conda/5b3e765eb8210c23d169553fd7853814/bin/Rscript. # The package must be rebuilt with conda-build > 2.0.
推测该问题由Snakemake重建规则运行环境的路径过长导致,现寻求可行的解决建议。
解决建议
缩短Conda环境存储路径:运行Snakemake时通过
--conda-prefix参数指定更短的存储路径,比如:snakemake --conda-prefix /tmp/conda_envs [其他参数]集群环境下要确保指定路径为共享存储,或使用节点本地临时目录(需注意重复创建环境的开销)。
使用预构建Conda环境:手动提前创建所需环境,规则中直接指定环境路径:
- 先创建环境:
mamba env create -f envs/picard.yaml -n picard_env - 修改规则中的
conda字段:rule per_samp_stats: # 保留其他配置 conda: "/path/to/your/conda/envs/picard_env"
跳过Snakemake自动生成的哈希路径,直接使用短路径预构建环境。
- 先创建环境:
升级工具版本:按报错提示更新conda-build和mamba,尝试解决包占位符长度问题:
mamba update conda-build mamba更新后重新运行Snakemake。
缩短工作流根目录路径:将整个工作流目录迁移到路径更短的位置,比如从
/oak/stanford/scg/lab_xx/xx/tb/mtb_tgen移至/scratch/tb_workflow,缩短默认环境存储路径的总长度。
内容的提问来源于stack exchange,提问作者ksw
相关产品推荐
相关产品推荐

