C-APIで作ったpythonモジュールのメモリリークのチェック
以下のサイトを参考にやってみる。
Using AddressSanitizer - Atomic Simulation Environment
Pythonのソースコードはこちらから。
Python Source Releases | Python.org
export CC='gcc -fsanitize=address' export CXX='g++ -fsanitize=address' export LSAN_OPTIONS=exitcode=0
cd ~/code/pysanitize/Python-3.5.2 ./configure --prefix=~/code/pysanitize --without-pymalloc --disable-ipv6 make make install
export PATH=~/code/pysanitize/bin:$PATH
setuptools, cython, numpyの順にインストールしていく。ソースコードはPyPIからダウンロード。
setuptools 30.2.0 : Python Package Index
Cython 0.25.1 : Python Package Index
numpy 1.12.0b1 : Python Package Index
インストールはsetup.pyで行う。
python3 setup.py install --prefix=~/code/pysanitize
同様にmatplotlib, h5pyもインストールする。ただし、その前に以下のパッケージを先にシステムのパッケージマネージャでインストールする。
sudo aptitude install libfreetype6-dev libpng-dev libhdf5-dev
Index of Packages : Python Package Index
matplotlib 1.5.3 : Python Package Index
PyYAML 3.12 : Python Package Index
Ubuntu-mate 16.04の場合、デフォルトでシステムにインストールしているnumpyが邪魔をするので、setup.pyや実行するpython scriptのなかで、例えば以下のようにしてsys.pathから取り除く必要があるかもしれない。
import sys del_i = [] for i, p in enumerate(sys.path): if 'dist-packages' in p: del_i.append(i) if 'local' in p: del_i.append(i) for i in del_i: del sys.path[i]