Невозможно использовать Python, который я вручную установил в свой контейнер Singularity. Почему? - PullRequest
0 голосов
/ 23 февраля 2020

Я создаю новые контейнеры 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 показывает следующее, что показывает, что все печатаемые пути правильные:

enter image description here

Может кто-нибудь сказать мне, что я делаю неправильно и что я должен сделать, чтобы это исправить?

Вот еще некоторая информация для 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"

Обновление

Проблема была волшебным образом решена после сборки моего контейнера во второй раз!

...