2013-12-13 35 views
6

Ho scaricato il codice sorgente di Pandas e ora sto provando a eseguirne il debug. Ho modificato Makefile:Come eseguire il debug del codice Cython in Pandas?

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 

Inoltre Ho uno script molto semplice:

from numpy import asarray 
from pandas import algos 

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

print expAverage 

Quando provo ad eseguirlo con python-dbg test1.py, questo è quello che ottengo:

/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] 

Cosa c'è che non va?

+2

Non mi pare altrettanto facile quando il debug cythong ad appena messo in istruzioni di stampa (vecchia scuola), ma è piuttosto veloce. – Jeff

+0

Ciao @ Jeff, in realtà ho trovato il tuo commento molto interessante. Non sono né un utente di Pandas né di Cython/Python, ma ho programmato in SAS. I miei professori non ci hanno mai insegnato a usare i debugger, ci è stato sempre detto di usare semplicemente le dichiarazioni di stampa ovunque per controllare i nostri programmi durante la compilazione. Quindi, in generale, pensi che mettere le dichiarazioni di stampa sia efficace quanto i debugger anche se li stiamo usando in altri linguaggi di programmazione? Sembra che Pandas abbia più una sintassi coerente di R. Cheers. –

+0

in generale i debugger sono buoni (ad esempio pdb). Stavo solo sottolineando che per una funzione relativamente semplice e un breve ciclo di compilazione le dichiarazioni di stampa spesso sono sufficienti – Jeff

risposta

1
  1. Ovviamente, almeno una delle estensioni (C) caricate non è stata compilata con le informazioni di debug in modo da poter utilizzare python-dbg.

Questa spiegazione ha i dettagli:

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

A me sembra che --with-pydebug bandiera non equivale/innesca le stesse azioni --pyrex-gdb. A proposito, sembra che --pyrex-gdb è stato rinominato in --cython-gdb.

  1. È possibile utilizzare cygdb o cython --gdb? Sembra che la bandiera che si sta utilizzando è stato riportato non funzionare: https://groups.google.com/forum/#!topic/cython-users/K6sjhzUX5JA
+0

Grazie per la risposta. Ma non riesco a controllarlo come è successo molto tempo fa (in realtà il codice Python era solo un prototipo e ho riscritto tutto in Java). – relgames

Problemi correlati