我有以下奇异容器配方:
#!/bin/bash
Bootstrap: docker
From: nipype/nipype:latest
%labels
Version v1.0
%post
# Install nano
apt-get update
apt-get install nano
# Set up Python environment
CONDA_ENV=/opt/conda/bin
export PATH=$CONDA_ENV:$PATH
chmod -R 777 $CONDA_ENV
# Activate conda environment
conda activate neuro
conda install seaborn
pip install pybids我使用奇点构建容器,如下所示:
sudo singularity build swish.simg Singularity.swish
依赖项和大多数构建的安装都是正常的,直到我碰到了source not found错误。为了重申这个问题和我尝试过的:
发布于 2018-05-09 17:52:42
问题归结为你激活环境的方式。通常,你会:
source /opt/conda/bin/activate neuro但是,如果奇点容器post是在shell (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
>>>我把整个记录都放在了要旨里
有用的调试技巧
这里有一些有用的调试技巧!我理解上面的方法是做一个构建,用conda注释掉触发错误的最后一行。然后我可以构建一个可写的沙箱:
sudo singularity build --sandbox swist-box Singularity.swist然后用可写的外壳。这将允许我做出改变和测试。
sudo singularity shell --writable swist-box
$ whoami
root由于容器将具有可写性,这意味着更改将持续存在,因此您可以退出根用户,然后在用户空间中进行编辑,以测试您的根更改是否确实解决了问题!
singularity shell swist-box
$ whoami
neuro然后,当你认为一切都好时,删除图像并从头开始构建并进行测试。
rm -rf swist-box swist
sudo singularity build swist Singularity.swisthttps://stackoverflow.com/questions/50259231
复制相似问题