首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用Nipype码头图像CommandNotFound建立奇点配方

利用Nipype码头图像CommandNotFound建立奇点配方
EN

Stack Overflow用户
提问于 2018-05-09 17:44:11
回答 1查看 633关注 0票数 3

我有以下奇异容器配方:

代码语言:javascript
复制
#!/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错误。为了重申这个问题和我尝试过的:

  • 我正在从菜谱中建立一个Nipype图像。在%post中,我想在"neuro“conda环境中安装两个额外的软件包(海运包和pybids包)。
  • 但是,当我试图激活%post (“源激活神经”)内的神经环境时,我一直收到一条错误消息,表示找不到命令"source“。
  • 我想使用bash运行%post中的命令,但不确定在哪里指定它。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-09 17:52:42

问题归结为你激活环境的方式。通常,你会:

代码语言:javascript
复制
source /opt/conda/bin/activate neuro

但是,如果奇点容器post是在shell (sh)环境中构建的,那么您将无法找到source命令。相反,你想做的是:

代码语言:javascript
复制
. /opt/conda/bin/activate neuro

然后你就不需要对$PATH大惊小怪了。您也不需要在文件的顶部指定解释器。所以整个菜谱看起来应该是:

代码语言:javascript
复制
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

然后使用如下:

代码语言:javascript
复制
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注释掉触发错误的最后一行。然后我可以构建一个可写的沙箱:

代码语言:javascript
复制
sudo singularity build --sandbox swist-box Singularity.swist

然后用可写的外壳。这将允许我做出改变和测试。

代码语言:javascript
复制
sudo singularity shell --writable swist-box
$ whoami
root

由于容器将具有可写性,这意味着更改将持续存在,因此您可以退出根用户,然后在用户空间中进行编辑,以测试您的根更改是否确实解决了问题!

代码语言:javascript
复制
singularity shell swist-box
$ whoami
neuro

然后,当你认为一切都好时,删除图像并从头开始构建并进行测试。

代码语言:javascript
复制
rm -rf swist-box swist
sudo singularity build swist Singularity.swist
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50259231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档