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"]
में शामिल करें (जैसे "नाम शामिल करें"), include_dirs = ["शामिल करें", get_include ()]] सेटअप (नाम = "नाम", ext_modules = cythonize (एक्सटेंशन)

Comments

Popular posts from this blog

java - Can't add JTree to JPanel of a JInternalFrame -

javascript - data.match(var) not working it seems -

javascript - How can I pause a jQuery .each() loop, while waiting for user input? -