Anaconda で ROOT 入れたり

Anaconda 環境に ROOT を入れるときのメモ。1 年前に Mojave でやったときとちょこちょこ変わっているので、2020 年 6 月現在の以下の環境を想定。

  • macOS 10.15.4
  • Xcode 11.5
  • CMake 3.17.1(conda ではなく Homebrew から)
  • Anaconda3-2020.02-MacOSX-x86_64.sh

まず、Mac 用の Anaconda を落としてくる。 https://repo.anaconda.com/archive/Anaconda3-2020.02-MacOSX-x86_64.sh

適当に答えて進める。

$  chmod +x Downloads/Anaconda3-2020.02-MacOSX-x86_64.sh
$ ./Downloads/Anaconda3-2020.02-MacOSX-x86_64.sh

自動的に .zshrc に Anaconda の設定が書き込まれるのが好きじゃないので、自分の場合は関数で括って好きなときにAnaconda 環境に入るようにしている。

conda_init(){
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/oxon/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/Users/oxon/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/Users/oxon/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/Users/oxon/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<
}

4.8.3 に update する。

$ conda_init
(base) $ conda update -n base -c defaults conda

好きな環境、例えば sstcam_root という環境を作る。このとき、-c conda-forge で channel を指定する必要あり。ROOT はここにあるので。

(base) $ conda create -n sstcam_root root -c conda-forge
(base) $ conda activate sstcam_root
(sstcam_root) $ which root.exe 
/Users/oxon/anaconda3/envs/sstcam_root/bin/root.exe
(sstcam_root) $ root
root [0] .q

以前は MacOSX10.9.sdk とかを落としてくる必要があったのだけど、今は要らなくなった。なので、Anaconda 側で Xcode についてくる SDK を勝手に環境変数に設定してくれる。これは base のときは空っぽで、次のように ROOT 環境のほうだけ。10.15 が指定されている。

$ conda_init 
(base) $ echo $CONDA_BUILD_SYSROOT

(base) $ conda activate sstcam_root 
(sstcam_root) $ echo $CONDA_BUILD_SYSROOT 
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
(sstcam_root) $ ll $CONDA_BUILD_SYSROOT
lrwxr-xr-x  1 root  wheel  15 Mar 25 11:24 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -> MacOSX10.15.sdk

これで、ACLiC も問題なく動く。ACLiC を動かすためにも、以前は SDK を自分で用意する必要があった。

(sstcam_root) $ root
root [0] .x aho.C+
Info in <TMacOSXSystem::ACLiC>: creating shared library /Users/oxon/./aho_C.so

Anaconda で入れるものではない library を CMake で build するとき、引数を追加する必要がある。

docs.conda.io ここを読むと、次のようにやる必要があるらしいのだけど(これは clang が Anaconda 環境のものが使用されてしまうため)、

(sstcam_root)$ cmake ../source -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DCMAKE_OSX_SYSROOT=$CONDA_BUILD_SYSROOT

実際には次のコマンドでちゃんと動いた。CMake のバージョンによるのかもしれない。

(sstcam_root)$ cmake ../source -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX

SYSROOTROOT は ROOT と関係ない。

この環境で例えば他に Python 関係のものを追加したい場合、conda-forge から入れるようにする必要がある。

(sstcam_root) $ conda config --env --add channels conda-forge
(sstcam_root) $ conda install scipy astropy matplotlib tqdm pandas numba cython scikit-learn