singularityでubuntu20.04+python(+pipenv)環境を構築
はじめに
pythonは仮想環境が豊富なので、わざわざコンテナ化する必要ある?って思っていましたが、 いざGPUクラスタ上で動かすときに環境構築ハマったので、そのとき作成したpythonを動かすコンテナをSingularity Libraryに公開しました。
構成
が入ってます。
使い方
以下のsingularity libraryで公開しました。
実行方法
python_pyenvというsandboxを作成する例-wオプションをつけることでpipやaptなどを使って外部ライブラリをインストールできる
sandbox作成
singularity build --sandbox python_pipenv library://tmyoda/default/ubuntu-pyenv:20.04
shellに入る
その他run, execも可 (過去記事参照)
singularity shell -w --nv python_pipenv
.defファイル
man apt によると apt(8) ではなく apt-get(8) をスクリプトで使用するよう推奨されているため、defファイル等のスクリプトでインストールを動かす場合はapt-getを使用した方が良いみたいです。
Bootstrap: docker
From: ubuntu:20.04
%environment
export LC_ALL=C.UTF-8
export Lang=C.UTF-8
export PIPENV_VENV_IN_PROJECT=1
export PATH="/usr/local/opt/openssl/bin:$PATH"
# pipenv property
# export PIPENV_SKIP_LOCK=1
# pyenv
export PYENV_ROOT="/pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
%post
# Change if you want
INSTALL_PYTHON_VERSION=3.7.9
apt-get update
# 依存関係
DEBIAN_FRONTEND=noninteractive apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python3-distutils \
openssl git bzip2 vim bash-completion
git clone https://github.com/pyenv/pyenv.git ${PYENV_ROOT}
export PYENV_ROOT="/pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
# python setting
pyenv install ${INSTALL_PYTHON_VERSION}
pyenv global ${INSTALL_PYTHON_VERSION}
# pipenv
pip install -U pip
pip install pipenv
# clean up
apt-get clean
rm -rf /var/lib/apt/lists/*
%labels
Author tmyoda
Version v1.0.0
ローカルでこの.defから.sifを作成する方法は過去記事に書きましたので、そちらを参照してください。