Я создаю новые контейнеры Singularity с Ubuntu 16.04 каждые 1-2 месяца, начиная с пары дней go, и использую его для запуска моего Python сценария в нашем кластере (CentOS 7). Однако после создания нового контейнера Singularity с новой ОС (Ubuntu 18.04 вместо 16.04) и установки последней версии 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
where main.py
просто выполняет import numpy
.
Запуск моего скрипта, как описано выше, дает мне Python ошибок импорта для пакетов, которые я установил в новом Python3 .7, как если бы Singularity использовал другой установка Python3 .7 (которая не существует, так как по умолчанию 18.04 Python версия 3.6.9 находится в /usr/bin/python3
). И вот ошибка, которую я получаю:
ModuleNotFoundError: Нет модуля с именем 'numpy'
Когда я использую exec
или shell
и выполняю which python3.7
Я получаю следующее. Просто чтобы прояснить, хотя и очевидно, при использовании exec
я делаю singularity exec --nv -B /om:/om /mySingImgUbuntu18.sif which python3.7
:
/ usr / bin / python3 .7
Что правильный путь, но мой скрипт не работает в режиме exec
и выдает Python ошибок импорта. Если я захожу в контейнер и запускаю /usr/bin/python3.7
или python3.7
и go в интерактивном режиме, а затем выполняю импорт, все работает нормально. Выполнение /usr/bin/python3.7 -c 'import numpy'
также работает. Так что теперь я не понимаю, почему это происходит, когда в режиме exec
...
Кроме того, добавление sys.path
к main.py
и запуск моего скрипта через exec
возвращает следующее, которое показывает правильные пути:
['/ om / user / arsalans / Occluded-объект-детектор', '/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 и Версия ОС, которую я использую:
Версия 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"
Обновление
Проблема была волшебным образом решена после сборки моего контейнера во второй раз!