【ROOT/pyROOT】CERN ROOTをPython3(anaconda)で実行できるようにインストールする(2020版)

Python3でROOT6を使えないという話ですが、実は使えます。

====

はじめに

ROOT6は非常に強力なフレームワークですが、Pythonに関してはpython2でしか利用できないことがちょっとした問題でした。

しかし、最近ちらほらとPython3からも実行することが可能だという情報が入ってきたため、私も情報提供します。


※追記(2020.5.8)
twitterエゴサとかをやってないので気付かなかったのですが、この記事を見ている人がいることを知りました!ありがとうございます!
なのでちょっと記事を再編しておきました。


開発環境

  • Windows10 Pro
  • WSL (Ubuntu 18.04)
  • pyenv (anaconda3-4.3.1) : Python3.6

(なんかTensorFlowが3.7以降はofficialには使えないという話。。。)

※追記

  • WSL(Ubuntu 16.04)
  • deepin

でも動作を確認

ROOT6のダウンロードとインストール

root.cern.ch
よりバージョンを選ぶ。

  • Source distribution
  • Binary distribution

がありますが、Source distributionをインストールすること。

今回、私はroot_v6.16.00.source.tar.gzを選択しました。

※追記(2020.5.8)
rootの最新版v6.20.04はうまくビルドができないみたいです。
https://root-forum.cern.ch/t/dificulty-building-root-on-ubuntu-wsl/38699/16
このフォーラムを見ているとv6.18.04ではbuild fineとのことです。
なのでそれ以前のバージョンをインストールすること。


以下のようにダウンロード⇒展開しましょう。

$ cd ~
$ curl -O https://root.cern/download/root_v6.16.00.source.tar.gz
$ cd /usr/local/
$ sudo tar zxvf ~/root_v6.16.00.source.tar.gz

ここまでで展開まで完了です。


次はcmakeします。
cmakeが古い場合は新しくしましょう。
dandy-tech.hatenablog.jp

以下のようにオプションを加えてcmakeします。

$ sudo mkdir ./root_v6.16.00/mybuild
$ cd /root_v6.16.00/mybuild/
$ pwd 
 /usr/local/root_v6.16.00/mybuild/

$ sudo cmake ../ \
-Dpython3=On \
-DPYTHON_EXECUTABLE=/home/username/.pyenv/versions/anaconda3-4.3.1/bin/python3.6 \
-DPYTHON_INCLUDE_DIR=/home/username/.pyenv/versions/anaconda3-4.3.1/include/python3.6m \
-DPYTHON_LIBRARY=/home/username/.pyenv/versions/anaconda3-4.3.1/lib/libpython3.6m.so.1.0


次はmakeします。

sudo make -j 8

ここからはしばらくかかります。


~/.bashrcに以下の5行を追加します。

export PATH="/home/username/.pyenv/versions/anaconda3-4.3.1/bin:$PATH"
source /usr/local/root-6.16.00/mybuild/bin/thisroot.sh
export PATH="/usr/local/root-6.16.00/mybuild/bin:$PATH"	
export LD_LIBRARY_PATH="/usr/local/root-6.16.00/mybuild/lib:$LD_LIBRARY_PATH"	
export PYTHONPATH="/usr/local/root-6.16.00/mybuild/lib:$PYTHONPATH"

 

ここまで出来たらターミナルを一度立ち上げなおしてから、jupyterを起動します。

$ jupyter notebook

カーネルはpython3を選択し、以下のようにROOTをimportします。
うまくビルドができていれば以下のようになります。

gistd4c997a7dc0575951902e3cc293e9ccc



また、以下のようなエラーが出ることがあります。

gista9854a0124b5e9481d907d61764b33ca


このエラーに関しては今回カーネルに使用したanaconda3ではpython3.6であり、ライブラリに一部古いものが含まれているせいです。

おそらく最新のものではこのエラーは出ないのかと思います。


GLIBCXX_3.4.20がanaconda3のライブラリにあるか確認します。

$ strings /home/username/.pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/zmq/backend/cython/../../../../.././libstdc++.so.6 | grep GLIBCXX


もしなければ、以下のようにcondaをupdateして、パッケージインストールすると解決します。

$ conda update --prefix /home/username/.pyenv/versions/anaconda3-4.3.1 anaconda
$ conda install libgcc


これでpython3でコーディングできます。やったね!

今回はここまで。


参考

ありがとうございます。