.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