読者です 読者をやめる 読者になる 読者になる

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]