Как установить псевдоним Python в контейнере Singularity при выполнении?

Я пытался установить псевдонимы в своем контейнере, но я не смог сделать это успешно. При сборке контейнера я положил alias python3=python3.6 в %post и все работает хорошо; псевдоним правильно объявлен и используется в процессе построения контейнера.

Тем не менее, после того, как контейнер построен, и я выполняю его, используя singularity execобъявление псевдонима в %environment или же%runscript не работает. Я также попытался поместить команду объявления псевдонима в сценарий bash в контейнере и запустить сценарий bash, но она все равно не работает. По сути, я думаю, что я выгляжу как ENTRYPOINT в Docker для Singularity. Кто-нибудь знает, что я делаю неправильно и как я могу установить псевдонимы внутри контейнера?

Я использую Singularity 2.6.

Вот файл определения, который я использую:

BootStrap: docker
From: ubuntu:16.04

%post
# Set up some required environment defaults
apt-get -y update && apt-get -y install software-properties-common && yes '' | add-apt-repository ppa:deadsnakes/ppa
apt-get -y update && apt-get -y install make \
                                        cmake \
                                        vim \
                                        curl \
                                        python3.6 \
                                        python3.6-dev \

curl https://bootstrap.pypa.io/get-pip.py | python3.6

alias python3=python3.6 #Here's where I declare the alias

python3 -m pip install -U pip
python3 -m pip install --upgrade pip
python3 -m pip install -U setuptools
python3 -m pip install  scipy \
                        numpy \
                        transforms3d \
                        matplotlib \
                        Pillow

# I also create a file containing a bash script to declare the alias
cd /
mkdir bash_aliases && cd bash_aliases
echo "alias python3=python3.6">bash_aliases.sh
chmod +x bash_aliases.sh


%runscript
alias python3=python3.6

# bash /bash_aliases/bash_aliases.sh # You may uncomment this as well

1 ответ

Хотя невозможно установить псевдоним для exec Режим при использовании контейнера, однако можно сделать это для run Режим с помощью сценария ниже:

%runscript
    alias python3='python3.6'
    eval ${@}

Разница между exec а также run в том, что exec запускает команду, которую вы пишете напрямую, но run передает все, что вы пишете, в сценарий, в котором вы написали %runscript,

Источник

Другие вопросы по тегам