.defファイルの例

BootStrap: docker
From: nvidia/cuda@sha256:29e5e3425e2e0f5a4e97c9fb4695ba4887cd78210a43cf94c3bcafc6ab01c5e6 # nvidia/cuda:12.9.1-base-ubuntu24.04

%setup
    setup_dir="${SINGULARITY_ROOTFS}/usr/local/python_env"
    mkdir -p "${setup_dir}"
    mkdir -p "${setup_dir}/.cache/uv"
    cp "./uv.lock" "${setup_dir}/uv.lock"
    cp "./pyproject.toml" "${setup_dir}/pyproject.toml"

%post
    export DEBIAN_FRONTEND=noninteractive
    export TZ=Asia/Tokyo

    apt update && \
    apt install -y \
        tzdata \
        locales \
        curl  \
        git \
        tk-dev \
        htop \
        sqlite3 \
        language-pack-ja \
        libhdf5-serial-dev \
        python3 \
        python3-pip \
        python3-venv \
        software-properties-common \
        wget \
        nvtop
        
    # インストール先のベースディレクトリを設定
    export install_base_dir="/usr/local"

    # ロケールをセットアップ(日本語やUTF-8対応のため)
    localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8

    # Python仮想環境・uv.lock配置ディレクトリのパスを設定
    export python_env_install_dir="${install_base_dir}/python_env"

    # 作業ディレクトリを移動
    cd "${python_env_install_dir}"

    # uv公式インストーラでuvをインストール
    curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="${install_base_dir}/bin" sh

    # uv.lockに従いパッケージをインストール(キャッシュ無効化)
    cd "${python_env_install_dir}"
    uv sync \
        --locked \
        --compile-bytecode \
        --cache-dir "${python_env_install_dir}/.cache/uv"

    # APTキャッシュ等のクリーンアップ
    apt clean
    rm -rf /var/lib/apt/lists/*

%runscript
    #!/bin/bash
    set -euo pipefail

    source /usr/local/python_env/.venv/bin/activate
    exec "$@"

%environment
    export LANG=en_US.utf8
    export DEBIAN_FRONTEND=noninteractive
    export TZ=Asia/Tokyo