python - Point Cython to C source files -
मेरे पास Python, Cython और C को मिलाकर एक परियोजना है, जैसे:
root | - स्रोत | - foo foo.c | - नाम name.pxd name.pyx | - शामिल करें | - foo foo.h setup.py
बहुत सरल सामग्री के साथ:
< P> foo.h: <पूर्व> शून्य जोड़ें (इंट, डबल *, डबल *, डबल *); "एफू / एफूएचएच" शून्य शामिल जोड़ें (इंट एन, डबल * ए, डबल * बी, डबल *
सी) {के लिए (इंट आई = 0; आई & lt; एन; आई ++) सी [आई] = ए [आई] + बी [आई]; }
name.pxd:
"foo / foo.h" से cdef extern: शून्य जोड़ें (इंट, डबल *, डबल *, डबल * )
name.pyx:
np cipport numpy के रूप में np cpdef cython_add (np.ndarray [np.double_t, ndim = 1] के रूप में numpy आयात करें , Np.ndarray [np.double_t, ndim = 1] B): cdef int N = min (एशप [0], बीशप [0]) सीडीएफ एनपी.एंडरेरे सी = एनपी.एंड्ररेय ([एन], Dtype = np.double) जोड़ (एन, & lt; डबल * & gt; A.data, & lt; डबल * & gt; B.data, & lt; डबल * & gt; C.data) वापस सी
setup.py:
Cython से distutils.core आयात सेटअप से। आयात साइथोनिक सेटअप (ext_modules = cythonize ("name / *। Pyx", स्रोत = ["src / foo /foo.c "]))
और निम्न कमांड के साथ संकलित करें:
सीएफएलएजीएस =" - I / path / to / root / include " अजगर setup.py build_ext -i
मैं अजगर दुभाषिया में जब आयात नाम
की कोशिश करता है, तब तक ठीक ठीक बनाता है मुझे निम्न मिलता है:
आयात त्रुटि: dlop एन (./ name.so, 2): प्रतीक नहीं मिला: _add से संदर्भित: ./name.so में अपेक्षित: डायनेमिक लुकअप
जिसका अर्थ मुझे लगता है कि भले ही सब कुछ संकलित हो, Cython वास्तव में सही फ़ाइलों को एक साथ जोड़ नहीं रहा है। मुझे क्या याद आ रहा है?
बदल जाता है मुझे दो चीजों को बदलना पड़ता है। मैं name.px
आयात करने के लिए name.pxd
को बताना भूल गया। इसलिए मुझे इस रेखा को name.pyx
:
नाम सिमपोर्ट से जोड़ें
के ऊपर जोड़ना पड़ा जब मैंने distutils
हैडर जानकारी को name.pyx
में शामिल किया था, तो इन पंक्तियों को name.pyx
के शीर्ष पर डाल दिया:
#distutils: language = c #distutils: sources = src / foo / foo.c
और setup.py
को ऐसा बदला:
से distutils.core आयात सेटअप से distutils.extension आयात Cython से विस्तार। Numpy आयात से आयात cythonize get_include एक्सटेंशन = [एक्सटेंशन ("नाम", ["नाम / name.pyx"]
Comments
Post a Comment