1

从几天前开始,我每 1-2 个月就使用 Ubuntu 16.04 创建新的 Singularity 容器,并一直使用它在我们的集群(CentOS 7)上运行我的 Python 脚本。但是,在使用新操作系统(Ubuntu 18.04 而不是 16.04)制作新的 Singularity 容器并安装最新的 Python 3.7 版本后,由于出现 Python 导入错误,我无法再在集群上运行我的 Python 脚本。

供您参考,以下是我安装 Python 3.7 的方式:

apt-get -y install python3.7 \
                     python3.7-dev

# Then I install pip and install some packages as follow:

cd /
wget https://bootstrap.pypa.io/get-pip.py
python3.7 get-pip.py
rm get-pip.py
python3.7 -m pip install -U pip
python3.7 -m pip install --upgrade pip
python3.7 -m pip install numpy

以下是我使用 Singularity 容器运行脚本的方法: singularity exec --nv -B /om:/om /mySingImgUbuntu18.sif python3.7 main.py

main.py简单的在哪里import numpy

如上所述运行我的脚本会给我在新的 Python3.7 中安装的包的 Python 导入错误,就好像 Singularity 正在使用 Python3.7 的另一个安装(不存在,因为 18.04 的默认 Python 版本是 3.6.9位于/usr/bin/python3)。这是我得到的错误:

ModuleNotFoundError:没有名为“numpy”的模块

当我使用execor时shellwhich python3.7我得到以下信息。只是为了让事情清楚,虽然很明显,但在使用execI do时singularity exec --nv -B /om:/om /mySingImgUbuntu18.sif which python3.7

/usr/bin/python3.7

这是正确的路径,但我的脚本未在exec模式下运行并引发 Python 导入错误。如果我进入容器并运行或者/usr/bin/python3.7进入python3.7交互模式然后导入一切正常。做/usr/bin/python3.7 -c 'import numpy'也行。所以现在我很困惑为什么在exec模式下会发生这种情况......。

此外,添加sys.pathmain.py运行我的脚本通过exec返回以下显示正确路径的内容:

['/om/user/arsalans/Occluded-object-detector', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib- dynload','/usr/local/lib/python3.7/dist-packages','/usr/local/lib/python3.7/dist-packages/bayesian_optimization-0.6.0-py3.7.egg',' /usr/local/lib/python3.7/dist-packages/torchvision-0.6.0a0+6c2cda6-py3.7-linux-x86_64.egg', '/usr/lib/python3/dist-packages']

执行ls /usr/local/lib/python3.7/dist-packages显示以下内容,表明打印的路径都是正确的:

在此处输入图像描述

有人可以告诉我我做错了什么,我应该怎么做才能解决这个问题?

以下是关于 Singularity 和我正在使用的操作系统版本的更多信息:

奇点版本:3.5.0,从源安装

cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

更新

在第二次构建我的容器后,这个问题神奇地解决了!

4

0 回答 0