在需要在导入期间创建文件的Singularity容器中安装Python包(例如启用GPU渲染的mujoco_py)

在需要在导入期间创建文件的Singularity容器中安装Python包(例如启用GPU渲染的mujoco_py),python,pip,gpu,singularity-container,mujoco,Python,Pip,Gpu,Singularity Container,Mujoco,请注意,以下部分描述特定于Python包mujoco_py,但问题本身是一般性的 我按照和中描述的步骤构建了一个容器,其中安装了使用GPU进行渲染的mujoco py。但是,当导入mujoco_py时,mujoco_py尝试创建使用GPU渲染所需的一些文件/目录时,我会出现以下错误。但是,由于文件系统变为只读,因此在构建容器后无法在容器内创建任何文件,除非这些文件将存储在/tmp中。另外,在我的例子中,将容器构建为可写的不是一个选项。我还尝试通过python3-mpinstall安装mujoco

请注意,以下部分描述特定于Python包
mujoco_py
,但问题本身是一般性的

我按照和中描述的步骤构建了一个容器,其中安装了使用GPU进行渲染的
mujoco py
。但是,当导入mujoco_py时,
mujoco_py
尝试创建使用GPU渲染所需的一些文件/目录时,我会出现以下错误。但是,由于文件系统变为只读,因此在构建容器后无法在容器内创建任何文件,除非这些文件将存储在
/tmp
中。另外,在我的例子中,将容器构建为可写的不是一个选项。我还尝试通过
python3-mpinstall安装
mujoco-py
-e
而不是
python3 setup.py安装
,但在导入mujoco_py时,出现了一些类似的错误

有没有办法改变创建这些文件的路径,或者将这些文件保存在内存中

import mujoco_py
running build_ext
building 'mujoco_py.cymj' extension
creating /usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/generated/_pyxbld_2.0.2.13_37_linuxgpuextensionbuilder
Traceback (most recent call last):
  File "/usr/lib/python3.7/distutils/dir_util.py", line 70, in mkpath
    os.mkdir(head, mode)
OSError: [Errno 30] Read-only file system: '/usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/generated/_pyxbld_2.0.2.13_37_linuxgpuextensionbuilder'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/__init__.py", line 3, in <module>
    from mujoco_py.builder import cymj, ignore_mujoco_warnings, functions, MujocoException
  File "/usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/builder.py", line 510, in <module>
    cymj = load_cython_ext(mujoco_path)
  File "/usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/builder.py", line 105, in load_cython_ext
    cext_so_path = builder.build()
  File "/usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/builder.py", line 221, in build
    built_so_file_path = self._build_impl()
  File "/usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/builder.py", line 291, in _build_impl
    so_file_path = super()._build_impl()
  File "/usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/builder.py", line 244, in _build_impl
    dist.run_commands()
  File "/usr/lib/python3.7/distutils/dist.py", line 966, in run_commands
    self.run_command(cmd)
  File "/usr/lib/python3.7/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "/usr/local/lib/python3.7/dist-packages/Cython/Distutils/old_build_ext.py", line 186, in run
    _build_ext.build_ext.run(self)
  File "/usr/lib/python3.7/distutils/command/build_ext.py", line 340, in run
    self.build_extensions()
  File "/usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/builder.py", line 144, in build_extensions
    build_ext.build_extensions(self)
  File "/usr/local/lib/python3.7/dist-packages/Cython/Distutils/old_build_ext.py", line 195, in build_extensions
    _build_ext.build_ext.build_extensions(self)
  File "/usr/lib/python3.7/distutils/command/build_ext.py", line 449, in build_extensions
    self._build_extensions_serial()
  File "/usr/lib/python3.7/distutils/command/build_ext.py", line 474, in _build_extensions_serial
    self.build_extension(ext)
  File "/usr/lib/python3.7/distutils/command/build_ext.py", line 534, in build_extension
    depends=ext.depends)
  File "/usr/lib/python3.7/distutils/ccompiler.py", line 566, in compile
    depends, extra_postargs)
  File "/usr/lib/python3.7/distutils/ccompiler.py", line 348, in _setup_compile
    self.mkpath(os.path.dirname(obj))
  File "/usr/lib/python3.7/distutils/ccompiler.py", line 916, in mkpath
    mkpath(name, mode, dry_run=self.dry_run)
  File "/usr/lib/python3.7/distutils/dir_util.py", line 74, in mkpath
    "could not create '%s': %s" % (head, exc.args[-1]))
distutils.errors.DistutilsFileError: could not create '/usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/generated/_pyxbld_2.0.2.13_37_linuxgpuextensionbuilder': Read-only file system

导入mujoco\u py
运行build_ext
“mujoco_py.cymj”扩建楼
创建/usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/generated//u pyxbld_2.0.2.13_37_linuxgpuextensionbuilder
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python3.7/distutils/dir_util.py”,第70行,在mkpath中
os.mkdir(头部,模式)
OSError:[Errno 30]只读文件系统:'/usr/local/lib/python3.7/dist packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/generated/_pyxbld_2.0.2.13_37_linuxgpuextensionbuilder'
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/__init__;.py”,第3行,in
从mujoco_py.builder导入cymj,忽略警告、函数和MujocoException
文件“/usr/local/lib/python3.7/dist packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/builder.py”,第510行,in
cymj=加载cython外部(mujoco路径)
文件“/usr/local/lib/python3.7/dist packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/builder.py”,第105行,在load_cython_ext中
cext_so_path=builder.build()
文件“/usr/local/lib/python3.7/dist packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/builder.py”,第221行,内部版本
生成的\u so\u文件\u路径=self.\u生成的\u impl()
文件“/usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/builder.py”,第291行,在构建impl中
所以\u file\u path=super()。\u build\u impl()
文件“/usr/local/lib/python3.7/dist-packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/builder.py”,第244行,在“build”impl中
dist.run_命令()
文件“/usr/lib/python3.7/distutils/dist.py”,第966行,在run_命令中
self.run_命令(cmd)
文件“/usr/lib/python3.7/distutils/dist.py”,第985行,在run_命令中
cmd_obj.run()
文件“/usr/local/lib/python3.7/dist-packages/Cython/Distutils/old\u build\u ext.py”,第186行,运行中
_构建外部。构建外部。运行(自身)
文件“/usr/lib/python3.7/distutils/command/build_ext.py”,第340行,正在运行
self.build_扩展()
文件“/usr/local/lib/python3.7/dist packages/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/builder.py”,第144行,内置扩展名
构建扩展(自身)
文件“/usr/local/lib/python3.7/dist-packages/Cython/Distutils/old\u build\u ext.py”,第195行,内置扩展名
_构建外部。构建外部。构建扩展(自)
文件“/usr/lib/python3.7/distutils/command/build\u ext.py”,第449行,内置扩展名
self.\u build\u extensions\u serial()
文件“/usr/lib/python3.7/distutils/command/build\u ext.py”,第474行,在“build\u extensions\u serial”中
自构建扩展(ext)
文件“/usr/lib/python3.7/distutils/command/build\u ext.py”,第534行,内部版本扩展名
dependens=ext.dependens)
文件“/usr/lib/python3.7/distutils/ccompiler.py”,第566行,编译中
视情况而定,额外费用(邮资)
文件“/usr/lib/python3.7/distutils/ccompiler.py”,第348行,在安装和编译中
self.mkpath(os.path.dirname(obj))
mkpath中的文件“/usr/lib/python3.7/distutils/ccompiler.py”,第916行
mkpath(名称、模式、dry_-run=self.dry_-run)
mkpath中的文件“/usr/lib/python3.7/distutils/dir_util.py”,第74行
无法创建“%s”:%s“%(头,exc.args[-1])
distutils.errors.DistutilsFileError:无法创建“/usr/local/lib/python3.7/dist包/mujoco_py-2.0.2.13-py3.7.egg/mujoco_py/generated/_pyxbld_2.0.2.13_37_linuxgpuextensionbuilder”:只读文件系统

下面是我如何构建的

现在可以通过奇点容器中的--overlay在容器中编写[临时]文件: