2013-12-13 23 views
6

Tôi đã tải xuống nguồn Pandas và hiện đang cố gỡ lỗi nó. tôi sửa đổi Makefile:Làm thế nào để gỡ lỗi mã Cython trong 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 

Ngoài ra tôi có một kịch bản rất đơn giản:

from numpy import asarray 
from pandas import algos 

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

print expAverage 

Khi tôi cố gắng chạy nó với python-dbg test1.py, đây là những gì tôi nhận được:

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

Điều gì là sai?

+2

Tôi thực sự thấy dễ dàng khi gỡ lỗi cythong để đưa vào báo cáo in (trường cũ), nhưng khá nhanh. – Jeff

+0

Xin chào @ Jeff, tôi thực sự đã tìm thấy nhận xét của bạn rất thú vị. Tôi không phải là một Pandas cũng không phải là người dùng Cython/Python, nhưng tôi đã lập trình trong SAS. Các giáo sư của tôi chưa bao giờ dạy chúng tôi sử dụng các trình gỡ rối, chúng tôi luôn được yêu cầu chỉ sử dụng các bản in ở khắp mọi nơi để kiểm tra các chương trình của chúng tôi khi biên dịch. Vì vậy, nói chung, bạn có nghĩ rằng việc đặt các câu lệnh in chỉ có hiệu quả như các trình gỡ rối ngay cả khi chúng tôi đang sử dụng chúng bằng các ngôn ngữ lập trình khác không? Có vẻ như Pandas có nhiều cú pháp nhất quán hơn R. Cheers. –

+0

trong các trình gỡ rối chung là tốt (ví dụ: pdb). Tôi đã chỉ ra rằng đối với một chức năng tương đối đơn giản và một báo cáo chu kỳ chạy nhanh chóng biên dịch chạy thường đủ – Jeff

Trả lời

1
  1. Rõ ràng, ít nhất một trong các tiện ích (C) đang được tải chưa được biên dịch với thông tin gỡ lỗi theo cách mà python-dbg có thể sử dụng.

lời giải thích này có các chi tiết:

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

Đối với tôi nó có vẻ như --with-pydebug cờ là không tương đương/gây nên những hành động tương tự như --pyrex-gdb. BTW, có vẻ như là --pyrex-gdb đã được đổi tên thành --cython-gdb.

  1. Thay vào đó, bạn có thể sử dụng cygdb hoặc cython --gdb? Có vẻ như cờ bạn đang sử dụng đã được báo cáo là không hoạt động: https://groups.google.com/forum/#!topic/cython-users/K6sjhzUX5JA
+0

Cảm ơn câu trả lời của bạn. Nhưng tôi không thể kiểm tra nó như đã được một thời gian dài trước đây (thực sự Python mã chỉ là một nguyên mẫu và tôi viết lại tất cả mọi thứ trong Java). – relgames

Các vấn đề liên quan