我建立了一个包含最新蟒蛇版本的奇点图像(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图片(也不想这样做),它抱怨无法在图片中写入内容。
有没有一种方法可以“说”图像在我的主目录中而不是在图像内部读写文件?
谢谢
答案 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
,这个错误就会消失。