我已經下載熊貓源,現在試圖調試它。 我修改Makefile文件:如何在Pandas中調試Cython代碼?
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]
有什麼不對?
其實我覺得它只是爲方便調試cythong時,只是把打印語句(老同學),但相當快。 – Jeff
嗨@Jeff,我發現你的評論非常有趣。我既不是熊貓也不是Cython/Python用戶,但我已經在SAS中編程。我的教授從來沒有教過我們使用調試器,我們總是被告知在編譯時只是使用print語句來檢查我們的程序。所以,一般來說,即使我們在其他編程語言中使用它們,您也認爲將打印語句與調試器一樣有效?看起來Pandas擁有比R. Cheers更爲一致的語法。一般調試器中的 –
都不錯(例如pdb)。我只是指出,對於一個相對簡單的函數和一個快速的編譯運行循環來說,打印語句通常就足夠了 – Jeff