Проблема сводится к тому, как вы активируете среду. Обычно вы делаете:
source /opt/conda/bin/activate neuro
но в случае, когда пост контейнера Singularity создается в оболочке (sh), ожидается, что вы не найдете команду source
. Вместо этого вы хотите сделать:
. /opt/conda/bin/activate neuro
и тогда вам не нужно суетиться с $PATH
. Вам также не нужно указывать переводчика в верхней части файла. Так что весь рецепт должен выглядеть так:
Bootstrap: docker
From: nipype/nipype:latest
# This is the adjusted (fixed) build recipe for the issue above.
# sudo singularity build swist Singularity.swist
%labels
Version v1.0
%environment
. /opt/conda/bin/activate neuro
%post
# Install nano
apt-get update && apt-get install -y nano
# Install into conda environment
. /opt/conda/bin/activate neuro &&
/opt/conda/bin/conda install --name neuro -y seaborn &&
/opt/conda/envs/neuro/bin/pip install pybids
И тогда использование будет:
sudo singularity build swist Singularity.swist
singularity/swist_fmri_image> . /opt/conda/bin/activate neuro
(neuro) Singularity swist:~/swist-> python
Python 3.6.5 | packaged by conda-forge | (default, Apr 6 2018, 13:39:56)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import seaborn
>>> import bids
>>>
Я поместил всю запись об этом в gist
Полезные советы по отладке
Вот несколько полезных советов по отладке! Способ, которым я понял выше, заключался в том, чтобы сделать сборку, закомментировав последние строки с помощью conda, которая вызвала ошибку. Тогда я мог бы построить песочницу с возможностью записи:
sudo singularity build --sandbox swist-box Singularity.swist
и оболочка с возможностью записи. Это позволит мне внести изменения и проверить.
sudo singularity shell --writable swist-box
$ whoami
root
Так как контейнер мог бы быть доступен для записи, это означает, что изменения будут сохраняться, поэтому вы можете выйти из режима root и затем редактировать в пространстве пользователя, чтобы проверить, действительно ли ваши корневые изменения устранили проблему!
singularity shell swist-box
$ whoami
neuro
Тогда, когда вы думаете, что все хорошо, удалите изображение и соберите его с нуля и протестируйте.
rm -rf swist-box swist
sudo singularity build swist Singularity.swist