如何在Pandas中调试Cython代码?

rel*_*mes 7 python debugging cython pandas

我已经下载了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
Run Code Online (Sandbox Code Playgroud)

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

from numpy import asarray
from pandas import algos

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

print expAverage
Run Code Online (Sandbox Code Playgroud)

当我尝试使用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]
Run Code Online (Sandbox Code Playgroud)

怎么了?

mrk*_*afk 1

  1. 显然,至少有一个正在加载的 (C) 扩展尚未以python-dbg可以使用的方式使用调试信息进行编译。

这个解释有详细信息:

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

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

  1. 可以用cygdb或者cython --gdb代替吗?据报告,您正在使用的标志似乎不起作用:https://groups.google.com/forum/#! topic/cython-users/K6sjhzUX5JA