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

Python 如何使用奇点图像运行jupyter笔记本?,python,jupyter-notebook,jupyter,singularity-container,Python,Jupyter Notebook,Jupyter,Singularity Container,我已经建立了一个奇点图像(jupyter.sif),其中包含了最新的anaconda版本,我想用它来运行一个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.sif),其中包含了最新的anaconda版本,我想用它来运行一个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笔记本,它将使用singularity映像中安装的python版本和软件包。理想情况下,笔记本将读取和写入图像外部的文件(因此我指定了绑定路径)

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

#####

回溯(最近一次调用上次):文件 “/opt/conda/lib/python3.7/site packages/traitlets/traitlets.py”,第行 528,在get value=obj.\u trait\u values[self.name]键错误:“runtime\u dir”

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

回溯(最近一次呼叫最后一次):

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

文件 “/opt/conda/lib/python3.7/site packages/jupyter_core/application.py”, 第266行,在launch_实例中 返回super(JupyterApp,cls)。启动_实例(argv=argv,**kwargs)

文件 “/opt/conda/lib/python3.7/site packages/traitlets/config/application.py”, 第657行,在launch_实例中 应用程序初始化(argv)

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

文件 “/opt/conda/lib/python3.7/site packages/traitlets/config/application.py”, 第87行,在catch_config_错误中 返回方法(应用程序、*args、**kwargs)

文件 “/opt/conda/lib/python3.7/site packages/notebook/notebookapp.py”,第行 1626年,美国 self.init_可配置文件()

文件 “/opt/conda/lib/python3.7/site packages/notebook/notebookapp.py”,第行 1319,在init_可配置文件中 connection\u dir=self.runtime\u 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,进站 value=self.\u验证(obj,dynamic\u default())

文件 “/opt/conda/lib/python3.7/site packages/jupyter_core/application.py”, 第99行,运行时目录默认值 确保目录存在(rd,模式=0o700)

文件 “/opt/conda/lib/python3.7/site packages/jupyter_core/utils/init.py”, 第13行,确保目录存在 os.makedirs(路径,模式=模式)

makedirs中的文件“/opt/conda/lib/python3.7/os.py”,第211行 makedirs(head,exist\u ok=exist\u ok)

makedirs中的文件“/opt/conda/lib/python3.7/os.py”,第211行 makedirs(head,exist\u ok=exist\u ok)

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

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

#####

我假设这是因为笔记本试图在图像中写入内容,并且由于我不以sudo的方式运行图像(我不想这样做),而且我也没有指定--writable(在执行图像时可写)(也不想这样做),它抱怨无法在图像中写入内容

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


谢谢

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

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

,这对奇点实例很有效,例如:

   singularity instance.start --writable --contain --bind shared:/shared sandbox/ jupyter