Форум сайта python.su
Добрый день, нашел статью где описывается создание модуля для пайтона на си:
http://blog2k.ru/archives/293#comment-3117
В общем, сделал как в статье, но когда импортирую полученный модуль самом пайтоне, то вываливается ошибка:
>>> import example
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
ImportError: /usr/local/lib/python3.4/dist-packages/example.cpython-34m.so: undefined symbol: PyString_FromString
Пробовал на версии пайтона 3.4.0(на убунте) и 3.2.3 (на дебиане)
Можете помочь?
Офлайн
Можете попробовать этот пример, использовал его неделю назад на ubuntu 14.04 64bit + python 3.4
Только он без PyObject.
Офлайн
Там api для 2-го. Нужно юникод создавать https://docs.python.org/3/c-api/unicode.html#creating-and-accessing-unicode-strings
Офлайн
kamisamaНе много не понял…если не сложно можешь немного объяснить как подправить?
Там api для 2-го. Нужно юникод создавать https://docs.python.org/3/c-api/unicode.html#creating-and-accessing-unicode-strings
Офлайн
#include <Python.h> PyObject *hello( PyObject *self, PyObject *args, PyObject *kwargs) { char *who; static char *keywords[] = {"who", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", keywords, &who)) return NULL; return PyUnicode_FromFormat("Hello, %s", who); } static PyMethodDef example_methods[] = { { "hello", (PyCFunction)hello, METH_VARARGS|METH_KEYWORDS, "hello(who) -- return \"Hello who\"" }, { NULL, 0, 0, NULL } }; static struct PyModuleDef example_module = { PyModuleDef_HEAD_INIT, "example", /* name of module */ NULL, /* module documentation, may be NULL */ -1, /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */ example_methods }; PyMODINIT_FUNC PyInit_example(void) { return PyModule_Create(&example_module); }
Офлайн