Когда вы запускаете snakemake и говорите ему использовать образы сингулярности, вы делаете это:
snakemake --use-singularity
Вы также можете передать дополнительные аргументы сингулярности, включая точки привязки, например так:
snakemake --use-singularity -B /path/outside/container/:/path/inside/container/
Теперь, если ваш CSV-файл находится в /path/outside/container/
, он может быть замечен какой-то командой без проблем.
Имейте в виду, если вы внутри ивнешние пути не идентичны, вам нужно использовать оба пути в правиле создания змеи в разных разделах.Вот как я это сделал:
rule targets:
input:
"plots/dataset1.pdf",
"plots/dataset2.pdf"
rule plot:
input:
"raw/{dataset}.csv"
output:
"plots/{dataset}.pdf"
params:
i = "inside/container/input/{dataset}.csv",
o = "inside/container/output/{dataset}.pdf"
singularity:
"docker://joseespinosa/docker-r-ggplot2"
shell:
"somecommand {params.i} {params.o}"
Когда вы запустите этот файл змеи, привязайте raw/
к inside/container/input/
и привязайте plots/
к inside/container/output/
.Snakemake будет искать файлы ввода / вывода на вашем локальном компьютере, но даст контейнеру команду для запуска с путями внутри контейнера, и все будет здорово.
TL; DR: локальные пути на входе и выходе, пути контейнера в параметрах и оболочке.Свяжите локальные и контейнерные пути в вызове командной строки.