クラウドエンジニアのノート

情報技術系全般,自分用メモを公開してます。

singularityでubuntu20.04+python(+pipenv)環境を構築

はじめに

pythonは仮想環境が豊富なので、わざわざコンテナ化する必要ある?って思っていましたが、 いざGPUクラスタ上で動かすときに環境構築ハマったので、そのとき作成したpythonを動かすコンテナをSingularity Libraryに公開しました。

構成

  • ubuntu20.04
  • pyenv
  • pipenv
  • その他よく使うコマンド(git, vim, wget, curl...)

が入ってます。

使い方

以下のsingularity libraryで公開しました。

実行方法

  • python_pyenvというsandboxを作成する例
  • -wオプションをつけることでpipaptなどを使って外部ライブラリをインストールできる

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を作成する方法は過去記事に書きましたので、そちらを参照してください。

tmyoda.hatenablog.com