LoginSignup
2
3

More than 5 years have passed since last update.

CASA Toolkitを自前のPython環境で使用する

Last updated at Posted at 2016-03-24

概要

CASA (Common Astronomy Software Application)とそのコアをなすCASA Toolkitは、ALMAをはじめとするデータ解析に大変有用ですが、使用するにはcasapy (実体はcasapy.pyで生成されるIPythonシェル)の上で実行する必要があります。このため自前のPython環境での実行ができず、例えばJupyter notebook (IPython notebook)などでインタラクティブかつ再現性の高い解析をするなどが困難です。そこで、Mac OSXでCASA Toolkitをコピーし、自前のPython環境でモジュールとして利用できるようにしてしまいましょう1

コピーの方法

CASA Toolkitはcasacというモジュールとしてcasapyにインポートされていますので、関連するスクリプト (*.py)と共有ライブラリ (*.so, *.dylib)をコピーします。ただしこれだけではダメで、各共有ライブラリで使用されているPythonの共有ライブラリのパスを、自前のPython環境のパスに変更する必要があります。最後にコピーしたcasac.pyをPythonが読みに行けるようにPYTHONPATHCASAPATHを追加します。

…という一連の作業は、以下のシェルスクリプトを実行することで完了するはずです2345。実行の前に、CASAのパス(casaapp)・コピー先のパス (output)・*PATHの書き出し先(profile)を自前の環境に合わせてカスタマイズしてください。もちろん実行前にはバックアップを必ずとりましょう!

$ ./extract_casatk_osx.sh

モジュールのインポート

あとは、Pythonを実行してcasacをインポートするだけです。例えばCASAイメージ関連のツール (ia)は、以下のように指定することで使えます!

$ python # or ipython, jupyter notebook
>>> import casac
>>> ia = casac.casac.image()
>>> ia.open('casaimage.image')
True

最後に

CASAにサードパーティ製のライブラリを入れるだけならcasa-pipという方法もあります。

シェルスクリプト

extract_casatk_osx.sh
casaapp=/Applications/CASA.app # customize this!
outputdir=${HOME}/Documents    # customize this!
profile=~/.bash_profile        # customize this!

echo "CASA directory:  " ${casaapp}
echo "Output directory:" ${outputdir}
echo -n "Press any key to continue >"
read INPUT

echo "Step 1: creating casatk directory"
casart=${casaapp}/Contents
casatk=${outputdir}/casatk
mkdir -p ${casatk}/Frameworks
mkdir -p ${casatk}/Resources/python/__casac__

echo "Step 2: copying libraries and Python scripts from CASA app"
echo "        this may take a while ..."
cp -a ${casart}/Frameworks/lib ${casatk}/Frameworks
cp -a ${casart}/Frameworks/*.jar ${casatk}/Frameworks
cp -a ${casart}/Frameworks/*.dylib ${casatk}/Frameworks
cp -a ${casart}/Frameworks/Qt*.framework ${casatk}/Frameworks
cp -a ${casart}/Resources/python/casac.py ${casatk}/Resources/python
cp -a ${casart}/Resources/python/__casac__/*.so ${casatk}/Resources/python/__casac__
cp -a ${casart}/Resources/python/__casac__/*.py ${casatk}/Resources/python/__casac__

echo "Step 3: changing Python-framework's path of libraries"
libpy_so=@loader_path/../../../Frameworks/Python.framework/Versions/2.7/Python
libpy_dylib=@loader_path/lib/Python.framework/Versions/2.7/Python
libpy_user=`python -c "import glob; from distutils import sysconfig;
print(glob.glob(sysconfig.get_config_var('LIBDIR')+'/libpython*')[0])"`

for f in ${casatk}/Resources/python/__casac__/*.so ; do
    install_name_tool -change ${libpy_so} ${libpy_user} ${f}
done

for f in ${casatk}/Frameworks/*.dylib ; do
    install_name_tool -change ${libpy_dylib} ${libpy_user} ${f}
done

echo "Step 4: exporting PYTHONPATH and CASAPATH to profile"
casapath="${casart} darwin socorro-\$(uname -p) \$(hostname -s)"
pythonpath="${casatk}/Resources/python"
echo "export CASAPATH=\"${casapath}\"" >> ${profile}
echo "export PYTHONPATH=\$PYTHONPATH:${pythonpath}" >> ${profile}

echo "Done!"

  1. この方法はこちらを参考に、Mac OSX版として筆者が作成したものです。公式にサポートされた方法ではありません。 

  2. スクリプトの実行にはXcode Command Line Toolsが必要です。 

  3. pyenvなどで複数のPython環境がある場合は、Python 2.7.xを選択してから実行してください。CASA内部のPythonのバージョンと合わせるためです。 

  4. スクリプトはMac OSX版のCASAのディレクトリ構造に合わせて書かれていますので、Linux版では正しく動作しません。また、動作確認はCASA 4.5.0でのみ行っています。 

  5. 一部のツールはCASA内部のデータ (casa-data)に依存しますので、コピー元のCASAをアンインストールしたり移動したりすると使えなくなります (iaなど)。CASAPATHはこれらのために設定しています。 

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3