如何在Pandas中调试Cython代码?

时间:2013-12-13 13:52:32

标签: python debugging pandas cython

我已经下载了Pandas源代码,现在正在尝试调试它。 我修改了Makefile:

sparse: pandas/src/sparse.pyx
python-dbg setup.py build_ext --inplace --pyrex-gdb

build: clean_pyc
python-dbg setup.py build_ext --inplace --pyrex-gdb

develop: build
-python-dbg setup.py develop --pyrex-gdb

我也有一个非常简单的脚本:

from numpy import asarray
from pandas import algos

v = [4171.0, 0.0]
expAverage = algos.ewma(asarray(v), 50, 1)

print expAverage

当我尝试使用python-dbg test1.py运行它时,这就是我得到的:

/tmp/1/pandas/pandas/hashtable.so: undefined symbol: Py_InitModule4_64
Traceback (most recent call last):
  File "test1.py", line 2, in <module>
    from pandas import algos
  File "/tmp/1/pandas/pandas/__init__.py", line 6, in <module>
    from . import hashtable, tslib, lib
ImportError: /tmp/1/pandas/pandas/hashtable.so: undefined symbol: Py_InitModule4_64
[94423 refs]

有什么问题?

1 个答案:

答案 0 :(得分:1)

  1. 显然,至少有一个正在加载的(C)扩展没有使用python-dbg可以使用的方式使用调试信息进行编译。
  2. 此解释详情如下:

    http://hustoknow.blogspot.co.uk/2013/06/why-your-python-program-cant-start-when.html

    对我而言,似乎--with-pydebug标志不等同/触发与--pyrex-gdb相同的操作。顺便说一句,--pyrex-gdb似乎已重命名为--cython-gdb

    1. 您可以使用cygdbcython --gdb吗?据报道,您所使用的旗帜不起作用:https://groups.google.com/forum/#!topic/cython-users/K6sjhzUX5JA