如何使用奇异图像运行jupyter笔记本?

时间:2019-02-08 12:44:44

标签: python jupyter-notebook jupyter singularity-container

我建立了一个包含最新蟒蛇版本的奇点图像(jupyter.sif),我想用它来运行一个jupyter笔记本。

我想运行以下内容:

#####

singularity exec --bind /path/outside/image/:/path/inside/image/ jupyter.sif jupyter notebook --notebook-dir=/path/to/dir --no-browser --ip=127.0.0.1

#####

基本上,只需启动一个普通的jupyter笔记本,它将使用python版本和安装在奇点映像中的软件包。理想情况下,笔记本计算机将在图像之外读写文件(因此,为什么要指定绑定路径)。

但是,当我运行上述命令时,出现以下错误:

#####

  

回溯(最近通话最近):文件   “ /opt/conda/lib/python3.7/site-packages/traitlets/traitlets.py”,行   528,得到       值= obj._trait_values [self.name] KeyError:“ runtime_dir”

     

在处理上述异常期间,发生了另一个异常:

     

回溯(最近通话最近一次):

     

文件“ / opt / conda / bin / jupyter-notebook”,第11行,在       sys.exit(main())

     

文件   “ /opt/conda/lib/python3.7/site-packages/jupyter_core/application.py”,   第266行,在launch_instance中       返回超级(JupyterApp,cls).launch_instance(argv = argv,** kwargs)

     

文件   “ /opt/conda/lib/python3.7/site-packages/traitlets/config/application.py”,   第657行,在launch_instance中       app.initialize(argv)

     

文件“”,第2行,初始化中

     

文件   “ /opt/conda/lib/python3.7/site-packages/traitlets/config/application.py”,   第87行,在catch_config_error中       返回方法(app,* args,** kwargs)

     

文件   “ /opt/conda/lib/python3.7/site-packages/notebook/notebookapp.py”,行   1626,在初始化       self.init_configurables()

     

文件   “ /opt/conda/lib/python3.7/site-packages/notebook/notebookapp.py”,行   1319,在init_configurables中       connection_dir = self.runtime_dir,

     

文件   “ /opt/conda/lib/python3.7/site-packages/traitlets/traitlets.py”,行   556,获取       返回self.get(obj,cls)

     

文件   “ /opt/conda/lib/python3.7/site-packages/traitlets/traitlets.py”,行   535,在得到       值= self._validate(obj,dynamic_default())

     

文件   “ /opt/conda/lib/python3.7/site-packages/jupyter_core/application.py”,   第99行,在_runtime_dir_default中       sure_dir_exists(rd,mode = 0o700)

     

文件   “ /opt/conda/lib/python3.7/site-packages/jupyter_core/utils/init.py”,   第13行,在sure_dir_exists中       os.makedirs(path,mode = mode)

     

文件“ /opt/conda/lib/python3.7/os.py”,第211行,位于makedirs中       makedirs(head,exist_ok = exist_ok)

     

文件“ /opt/conda/lib/python3.7/os.py”,第211行,位于makedirs中       makedirs(head,exist_ok = exist_ok)

     

makedirs中的文件“ /opt/conda/lib/python3.7/os.py”,第221行       mkdir(名称,模式)

     

OSError:[Errno 30]只读文件系统:'/ run / user'

#####

我认为这是因为笔记本计算机正在尝试在图像中写入内容,并且因为我不以sudo的身份运行图像(我不想这样做),并且我在执行时也未指定--writable图片(也不想这样做),它抱怨无法在图片中写入内容。

有没有一种方法可以“说”图像在我的主目录中而不是在图像内部读写文件?

谢谢

3 个答案:

答案 0 :(得分:1)

我只是遇到了同样的问题,这似乎已经为我解决了:将容器中的/ run / user映射到外部的工作目录(或您选择的目录)。对于您的情况,可能意味着:

singularity exec --bind /path/outside/image/:/path/inside/image/ --bind $PWD:/run/user jupyter.sif jupyter notebook --notebook-dir=/path/to/dir --no-browser --ip=127.0.0.1

像这样运行时,在我的情况下,创建了一个文件夹1000

答案 1 :(得分:0)

这对于奇异实例很有效,例如:

namespace __HeavyWork
{
    int SimulateDownload(std::function<int(int)> dlCallBack)
    {
        for (size_t i = 0; i < 100; i++)
        {
            std::this_thread::sleep_for(std::chrono::seconds(1));

            if (dlCallBack(i) == -1)
            {
                return i;
            }
        }

        return 100;
    }
}

答案 2 :(得分:0)

accepted answer 有效,但这里是另一种不需要绑定安装的解决方案。可以在运行jupyter notebook之前运行unset XDG_RUNTIME_DIR,这个错误就会消失。