से आयात कर सकूं। मेरे पास पाइथन प्रोजेक्ट है जिसमें कई उप-मॉड्यूल हैं जिन्हें मैं डिस्ट्यूट के साथ पैकेज करता हूं। मैं इनमें से कुछ उप-मॉड्यूल में रहने के लिए सी में कुछ पायथन एक्सटेंशन बनाना चाहता हूं लेकिन मुझे समझ में नहीं आता कि पाइथन एक्सटेंशन को सबमिशन में कैसे जीना है।पाइथन सी एक्सटेंशन कैसे बनाएं ताकि मैं इसे मॉड्यूल
यहाँ मेरी अजगर विस्तार c_extension.c
है:
#include <Python.h>
static PyObject *
get_answer(PyObject *self, PyObject *args)
{
return Py_BuildValue("i", 42);
}
static PyMethodDef Methods[] = {
{"get_answer", get_answer, METH_VARARGS, "The meaning of life."},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
initc_extension(void) {
(void) Py_InitModule("c_extension", Methods);
}
यहाँ और एक setup.py
कि काम करता है: क्या इस प्रकार है कि मैं क्या तलाश कर रहा हूँ के सरलतम उदाहरण है
from distutils.core import setup
from distutils.extension import Extension
setup(name='c_extension_demo',
ext_modules = [Extension('c_extension', sources = ['c_extension.c'])])
में स्थापित करने के बाद वर्चुअलएन्व मैं यह कर सकता हूं:
>>> import c_extension
>>> c_extension.get_answer()
42
लेकिन मैं c_extension
उप-मॉड्यूल में रहना चाहेंगे, foo.bar
कहें। क्या मैं अजगर खोल में व्यवहार प्राप्त करने के लिए इस तरह होना करने के लिए सक्षम होने के लिए इस पाइप लाइन में बदलने की जरूरत है:
>>> import foo.bar.c_extension
>>> foo.bar.c_extension.get_answer()
42
उत्तर के लिए धन्यवाद लेकिन यह मेरे लिए काम नहीं करता है। मैंने प्रत्येक प्लस में '__init __। Py' के साथ' foo/bar' निर्देशिका बनाई है, सेटअप कमांड में 'foo.bar.' उपसर्ग जोड़ा है लेकिन पायथन खोल में यह होता है: >>> आयात foo.bar.c_extension ट्रेसबैक (सबसे हालिया कॉल अंतिम): फ़ाइल "", लाइन 1, आयात त्रुटि: कोई मॉड्यूल c_extension –
Rich
नामित नहीं है और आपने अपना संपादन देखा है, मैंने पैकेज लाइन भी जोड़ दी है। – Rich
आप पाइथन का किस संस्करण का उपयोग कर रहे हैं? मैं 2.7.3 पर परीक्षण कर रहा हूं। – nneonneo