我有一个管道,我们希望将其存储在一个共享空间中,以便我们所有的分析师都可以访问它并使用它,而无需复制 repo / singularity 容器。问题是当一个人运行管道时,.snakemake/metadata 中的文件属于该用户。当下一个用户尝试运行管道时,会访问此元数据并导致错误。
我知道我可以在流程结束时删除元数据中的数据,但理想情况下我们希望用户能够并行运行管道(在不同的输入/输出上)。所有用户都在同一组中,但这无济于事
有什么建议吗?
在这里回答的一个解决方案是使用
-d
或--directory
选项为每个用户指定自定义工作目录。这样每个用户都有自己的.snakemake
目录。
要自动执行此操作,可以使用专用的 shell 脚本或将自动指定用户特定路径的别名:
snakemake -d ".snakemake_$(whoami)"
(对于 Windows,可以引用合适的环境变量而不是
whoami
)
在适当的情况下,使用更柔和的溶液可能会更好。具体来说,早期的方法仍然将整个工作流程暴露给每个用户,由于一个用户做出了另一个用户不知道的更改,可能会造成冲突。
为避免这种情况,最好将工作流(snakefiles)托管在中央(编辑保护)位置,但要求用户在自己的文件夹中运行代码,使用
-s
或 --snakefile
引用公共工作流位置争论。这样,中心位置的更改只有在指定用户进行更改时才会发生,因此任何需要的工作流调整都是明确进行的。