Как установить псевдоним 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
,