FreeSurfer と FSL 6.0.6以降を使っていると、ある事象が起きます。
- Python3がFSLが提供するPython3になります。
- dcm2niixがFSLが提供するdcm2niixになります。
これの影響を受けているかの確認法および対処法を最初に解説した後、その理由を述べます。
【影響を受けているかの確認法】
- Pythonのパスを確認します
command -v python3
この結果が、/usr/local/fsl/bin/python3 のように fsl/bin/python3 となっていると影響を受けています。
command -v dcm2niix
この結果が、/usr/local/fsl/bin/dcm2niix のように fsl/bin/dcm2niix となっていると影響を受けています。
【対処法】
- FreeSurferのディレクトリにあるFreeSurferEnv.sh ので、”FSL_DIR”を検索し、以下の箇所を修正します。
修正前: export FSL_BIN=$FSL_DIR/bin 修正後: export FSL_BIN=$FSL_DIR/share/fsl/bin
保存した後にターミナルを一度終了し、再度起動したうえで、改めて command -v python3 としてみてください。
【原因】
これは、FSLが6.0.6以降で、実行ファイルのパスを変更したことに起因します。6.0.6以前は、FSLのディレクトリを $FSLDIR とすると、実行ファイルは $FSLDIR/bin だったのですが、6.0.6以降は、 $FSLDIR/share/fsl/bin となりました。で、問題をややこしくしているのは、$FSLDIR/bin がなくなったわけではなく、そこに、pythonの実行ファイルだったり、dcm2niixだったり、FSLの実行ファイルの周辺ファイルがおさめられるようになったことです。
FreeSurferは、この新しい変更にまだ対応が追いついていません。FreeSurferは、FreeSurferEnv.sh に、FSLの情報などが記載されています。この中に以下の情報があります。
#403行目 export FSL_BIN=$FSL_DIR/bin #422行目 PATH=$FSL_BIN:$PATH
ここでの FSL_DIR という変数はFreeSurferが独自に定義している変数です。FSLがインストールされているディレクトリの下にある bin を FSL_BIN という変数で定義し、それを、パス変数の一番最初に指定しています。
このため、FSLを使う目的でなく、pythonを使いたくて、python と入力すると、パス変数の一番最初にある FSLの中にある python が呼び出されてしまうわけです。
ということで、対処法は、FSL_BIN を正しいものに変更してあげるということになります。
pythonでパッケージをインストールしている時に正しく確認していないと、想定外のところにインストールされたりしてしまうので、ぜひ確認してもらえたらと思います。
ピングバック: macOS の Python事情を理解する