Я использую контейнеры Singularity для запуска команд из системы управления рабочим процессом Nextflow. У меня есть среда conda внутри Singularity, которую я могу активировать, когда захожу в контейнер.
singularity pull shub://brucemoran/Singularity:pcgr.centos7
singularity shell brucemoran-Singularity-pcgr.centos7.img
#<inside container>
source activate pcgr
Когда выполняется Nextflow, я определил source activate pcgr
, который, по моему мнению, должен активировать среду conda. Но я получаю предупреждение unbound variable HOST
. Я думаю, что это связано с неактивацией и последующим использованием переменных, которые должны быть определены, если env был активирован (?).
Я хотел бы, чтобы контейнер активировал env (pcgr) всякий раз, когда он выполняется. я пробовал с
%run
source activate pcgr
а также
%post
source activate pcgr
но это не работает для меня
singularity exec pcgr.img which pcgr.py
which: no pcgr.py in ...
Я не понимаю, как это делается, но предполагаю, что это легко, и я что-то сильно упускаю из виду!
Помощь приветствуется.
Оболочка в сингулярности работает в специальной среде, поэтому стандартные модификации conda для .bashrc
не работают. Вместо этого вам нужно изменить переменную $SINGULARITY_ENVIRONMENT. Что-то вроде этих строк в вашем файле определения Singularity должно работать:
# set to whatever your conda path is, I usually install to /opt
echo ". /opt/conda/etc/profile.d/conda.sh" >> $SINGULARITY_ENVIRONMENT
echo "conda activate pcgr" >> $SINGULARITY_ENVIRONMENT
Таким образом, среда conda будет автоматически активирована. Если вы предпочитаете активировать его вручную в своих шагах, вы можете пропустить вторую строку и сделать это в своих %run
шагах.
Обновлено: изменен на использование .
вместо source
для совместимости с /bin/sh
, упомянутым в комментариях ниже.
В моем случае (centos 7, сингулярность 3.5) раздел среды запускался с /bin/sh, поэтому мне пришлось использовать . /opt/conda/etc/profile.d/conda.sh
вместо source
.
Так просто, совершенно упустил это из виду, большое спасибо за решение этой проблемы для меня.