Tag: python extensions

Что делает Cython с импортом?

Я хочу создать расширение Python, и мне очень нравится идея использования Cython. В основном, чтобы получить больше знаний об этом и воспользоваться преимуществами скорости, если они есть. Я прочитал довольно много документации Cython, но я не ученый-компьютер (пока) и не имею глубоких знаний, чтобы понять основы низкого уровня, поэтому причина моих следующих вопросов: Мне просто […]

Указатели и «Хранение небезопасной производной C от временной ссылки на Python»

Я писал код для хранения (потенциально) очень большого целочисленного значения в массив chars ссылается указатель. Мой код выглядит так: cdef class Variable: cdef unsigned int Length cdef char * Array def __cinit__(self, var, length): self.Length = length self.Array = <char *>malloc(self.Length * sizeof(char)) # Error for i in range(self.Length): self.Array[i] = <char>(var >> (8 * […]

почему я не смог построить sqlite3 при сборке python?

почему я просто не смог построить sqlite? это имеет какое-то отношение к readline или _tkinter или что-то еще? pes/libffi/src/prep_cif.o build/temp.linux-i686-2.7/home/mirror/build/tmp/Python-2.7.3/Modules/_ctypes/libffi/src/closures.o build/temp.linux-i686-2.7/home/mirror/build/tmp/Python-2.7.3/Modules/_ctypes/libffi/src/dlmalloc.o build/temp.linux-i686-2.7/home/mirror/build/tmp/Python-2.7.3/Modules/_ctypes/libffi/src/x86/ffi.o build/temp.linux-i686-2.7/home/mirror/build/tmp/Python-2.7.3/Modules/_ctypes/libffi/src/x86/sysv.o -L/usr/local/lib -o build/lib.linux-i686-2.7/_ctypes.so Python build finished, but the necessary bits to build these modules were not found: _bsddb _tkinter bsddb185 bz2 dbm gdbm readline sunaudiodev To find the necessary bits, look in […]

Правильная циклическая сборка мусора в модулях расширения

В двух разделах документа Python 2.7 упоминается добавление поддержки циклической сборки мусора (CGC) для объектов контейнера, определенных в модулях расширения. Справочное руководство по API Python / C дает два правила: Память для объекта должна быть выделена с помощью PyObject_GC_New() или PyObject_GC_NewVar() . После того, как все поля, которые могут содержать ссылки на другие контейнеры, будут […]

.so не импортирует в python: динамический модуль не определяет функцию init

Я пытаюсь написать оболочку python для функции C. После написания всего кода и его компиляции Python не может импортировать модуль. Я следую приведенному здесь примеру. Я воспроизвожу его здесь, после исправления некоторых опечаток. Существует файл myModule.c: #include <Python.h> /* * Function to be called from Python */ static PyObject* py_myFunction(PyObject* self, PyObject* args) { char […]

Определение PyBufferProcs в Python 2.7, когда класс реализует PEP 3118

Я занимаюсь расширением классов в нашей библиотеке (которая поддерживает Python 2.7) для поддержки PEP 3118 , который был перенесен на 2.7. Из документации мне нужно инициализировать поле tp_as_buffer чтобы указать на PyBufferProcs . Однако из документации для 2.7 описание этой структуры содержит только записи для старого протокола буфера. Из источников я понимаю, что PyBufferProcs имеет […]

Как указать docstring для __init__ в расширении Python C

Возможно, глупый вопрос: как можно указать docstring для специальных функций, таких как __init__ при написании расширения C? Для обычных методов в таблице методов предусмотрены docstrings. При попытке помочь (myclass) отображается следующая автогенерированная документация: __init__(…) x.__init__(…) initializes x; see help(type(x)) for signature Но это то, что я хочу переопределить.

Как я могу написать функцию C, которая принимает либо int, либо float?

Я хочу создать функцию в C, которая расширяет Python, который может принимать входы типа float или int. Поэтому в принципе, я хочу, чтобы f(5) и f(5.5) были приемлемыми входами. Я не думаю, что могу использовать if (!PyArg_ParseTuple(args, "i", $value)) потому что он принимает только int или только float. Как я могу сделать свою функцию доступными […]

Как работать с uint8_t на Python Extension?

Я хотел бы передать в качестве аргумента функции в моем модуле C массив uint8_t. Я не мог найти метод для прямого анализа этого массива, поэтому я разбираю его в PyObject_t и затем повторяю как объект PyTuple_t. Таким образом, мне нужно передать каждый элемент PyObject_t этого кортежа в uint8_t. Как я могу это сделать, если нет […]

Что такое PyObject в Python?

Укороченная версия Недавно я столкнулся с некоторым кодом Python, в котором возвращаемый тип для функции был указан как PyObject в документации . Что такое PyObject ? Подробная версия Я не программист на C / C ++, но когда я столкнулся с PyObject в приведенной выше документации, Google научил меня, что PyObject – это объект Python, […]

Python - лучший язык программирования в мире.