Snakemake教程执行报错:AttributeError: 'str'对象无'name'属性
问题:Snakemake教程执行
snakemake -np mapped_reads/A.bam时触发AttributeError错误 严格按照Snakemake基础教程搭建环境、编写Snakefile后,执行预览命令snakemake -np mapped_reads/A.bam时出现如下错误:
snakemake -np mapped_reads/A.bam Building DAG of jobs... Traceback (most recent call last): File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/snakemake/__init__.py", line 701, in snakemake success = workflow.execute( File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/snakemake/workflow.py", line 1066, in execute logger.run_info("\n".join(dag.stats())) File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/snakemake/dag.py", line 2191, in stats yield tabulate(rows, headers="keys") File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/tabulate/__init__.py", line 2048, in tabulate list_of_lists, headers = _normalize_tabular_data( File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/tabulate/__init__.py", line 1471, in _normalize_tabular_data rows = list(map(lambda r: r if _is_separating_line(r) else list(r), rows)) File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/tabulate/__init__.py", line 1471, in <lambda> rows = list(map(lambda r: r if _is_separating_line(r) else list(r), rows)) File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/tabulate/__init__.py", line 107, in _is_separating_line (len(row) >= 1 and row[0] == SEPARATING_LINE) File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/snakemake/rules.py", line 1138, in __eq__ return self.name == other.name and self.output == other.output AttributeError: 'str' object has no attribute 'name'
错误原因
这个错误是tabulate库版本与当前Snakemake版本不兼容导致的。Snakemake在生成DAG任务统计信息时,tabulate的_is_separating_line函数会将Snakemake的Rule对象与字符串常量做比较,新版本tabulate的逻辑和旧版Snakemake的Rule对象比较逻辑不匹配,触发了AttributeError。
教程本身没有损坏,是因为依赖库版本漂移——教程的环境配置通常不会锁定所有依赖的精确版本,随着tabulate库更新,出现了兼容性冲突。
解决方法
方法一:降级tabulate到兼容版本
安装与当前Snakemake兼容的tabulate版本(比如0.8.10):
pip install tabulate==0.8.10
方法二:升级Snakemake到修复该问题的版本
如果教程允许,升级Snakemake到已经修复该兼容性问题的新版本:
mamba install -c bioconda snakemake==7.32.4 # 可替换为更新的稳定版
方法三:临时绕过统计信息生成
添加--quiet参数跳过统计信息生成,临时解决问题(会隐藏部分日志):
snakemake -np --quiet mapped_reads/A.bam
不需要安装额外依赖,只需调整现有依赖版本即可解决问题。
内容的提问来源于stack exchange,提问作者galojzybarbanach
相关产品推荐
相关产品推荐

