Snakemake: Я все время получаю Команда conda недоступна в $ PATH. при работе в кластере SGE

Я рву здесь волосы, надеюсь, кто-нибудь мне поможет.

Запуск snakemake 4.8.0

У меня есть конвейер snakemake, который я запускаю с двумя conda env и --use-conda, и он отлично работает при запуске как автономный конвейер.

Однако когда я запускаю наш кластер, я получаю сообщение об ошибке:

«Команда 'conda' недоступна в $ PATH».

Теперь. Anaconda установлена ​​в нашем кластере, но нам нужно активировать ее на узлах с:

module load anaconda

Кроме того, модуль определяется как функция, поэтому для начала у меня есть источник. Поэтому в верхней части моего файла snakefile у меня есть:

shell.prefix("source $HOME/.bashrc; source /etc/profile; module load anaconda; )

Это не решает проблемы.

Я даже положил module load anaconda в свой .bashrc, но это все равно не работает. Только при выполнении кластера я получаю сообщение об отсутствии conda.

Другие изменения в моем .bashrc подхватываются snakemake, поэтому я понятия не имею, почему у него проблемы с conda.

Я даже создал conda env, загрузил snakemake и conda в этот env, активировал env в скрипте отправки и в Snakefile:

shell.prefix("source $HOME/.bashrc; source /etc/profile; module load anaconda; source activate MAGpy-3.5; ")

И он по-прежнему говорит: «Команда 'conda' недоступна в $ PATH».

Буквально рвал волосы.

Кстати, я использую qsub -S /bin/bash, а также shell.executable("/bin/bash"), но сценарии временной оболочки, созданные в .snakemake, запускаются /bin/sh - это ожидается?

Помогите, пожалуйста!


person Mick Watson    schedule 05.04.2018    source источник
comment
Извините, приведенное выше сообщение об ошибке было из старой версии snakemake, в 4.8.0 я получаю subprocess.CalledProcessError: Команда 'which conda' вернула ненулевой статус выхода 1   -  person Mick Watson    schedule 05.04.2018
comment
Выполняется ли команда snakemake в сценарии, который вы qsub? Кажется, что ошибка возникает из-за процесса, который создает (а не активирует) среду conda, и это, в свою очередь, похоже, запускается самим snakemake, а не заданиями, порожденными snakemake.   -  person Peter van Heusden    schedule 05.04.2018
comment
Да, это так, и с этой работой все в порядке, потому что в этой работе я загружаю модуль anaconda, затем активирую env, а затем запускаю snakemake. Это задание прекрасно создает два окружения conda в Snakefile (я использую --use-conda), но затем задания, отправленные моим начальным заданием, терпят неудачу с подпроцессом. CalledProcessError: Команда 'which conda' вернула ненулевой статус выхода 1 проблема , что означает, что это второстепенные вакансии, которые не могут найти conda, тогда как основная работа может   -  person Mick Watson    schedule 05.04.2018
comment
Можете ли вы поместить что-нибудь в ~ / .profile или ~ / .bashrc, чтобы убедиться, что он действительно вызывается? Что-то вроде 'touch ~ / bash_brickwall.txt'   -  person gringer    schedule 06.04.2018


Ответы (4)


Мне всегда приходится использовать:

set +u; {params.env}; set -u

(где {params.env} загружает команду conda из моего config.yaml)

при вызове среды conda в команде shell файла Snakefile, поскольку Snakemake автоматически добавляет к командам оболочки set +u.

Не уверены, что это решит вашу проблему, но стоит ли попробовать?

person Jon    schedule 05.04.2018
comment
Обратите внимание, что Snakemake может выполнить активацию env за вас: snakemake .readthedocs.io / en / stable / snakefiles / - person Johannes Köster; 06.04.2018
comment
Спасибо, Йоханнес, я использую --use-conda, но кажется, что на наших узлах snakemake не может найти conda, поэтому он падает - person Mick Watson; 09.04.2018
comment
Для записи: в нашем кластере на основе SLURM я должен использовать . /PATH/TO/miniconda3/etc/profile.d/conda.sh; set +u; conda activate ./LOCAL_ENV; set -u; BINARY_IN_LOCAL_ENV, иначе я получаю сообщение об ошибке, что моя среда conda не настроена должным образом. - person Shadow; 17.04.2019

Вы можете предоставить собственный «шаблон сценария вакансий», пробовали ли вы это? По умолчанию это выглядит так:

#!/bin/sh
# properties = {properties}
{exec_job}

Так что, возможно, ваш мог бы выглядеть так:

#!/bin/bash
# properties = {properties}
module add anaconda
{exec_job}

а затем вы обращаетесь к этому файлу с параметром --jobscript при запуске snakemake.

P.S. если вы посмотрите в код, {exec_job} будет заполнен вызовом python -m snakemake без каких-либо настроек PATH, что, я думаю, способствует возникновению ошибки, которую вы видите.

person Peter van Heusden    schedule 06.04.2018

module делает обычно не более чем изменение PATH и других переменных среды. Это также верно для сред conda и source activate

Например, в нашем кластере QIIME2 установлен в среде conda, но его файл модуля

prepend-path    PATH            /opt/sw/qiime/2.2018.2/bin
prepend-path    PYTHONPATH      /opt/sw/qiime/2.2018.2/lib/python3.5/site-packages

в то время как наш conda файл модуля

prepend-path    PATH            /opt/sw/conda/3/bin

Итак, предполагая, что MAGpy-3.5 - это ваша среда conda, вы можете

(a) создайте модуль для своего конвейера MAGpy и загрузите его, игнорируя, что это среда conda или

(б) заставить snakemake работать с измененным PATH (я не знаю, как snakemake работает с переменными окружения)

(c) добавьте путь к вашей установке conda или вашей установке MAGpy в ваш .bashrc

И (b), и (c) нарушают цель наличия модульной системы IMO, но я обнаружил, что сама анаконда своего рода избыточна с modulefiles. В нашем кластере, когда мы устанавливаем какое-то программное обеспечение с помощью anaconda, мы никогда не заставляем пользователя загружать их с помощью source activate, а вместо этого пишем modulefiles.

person H. Gourlé    schedule 06.04.2018

У меня была такая же проблема, и я решил ее, экспортировав путь из моего файла отправки в (скрытый) каталог conda, который обычно находится в вашем домашнем каталоге. Например

export PATH=/home/yourusername:$PATH
person annajen    schedule 18.02.2021