Articles of python c api

encastrando datos de PyArrayObject en una matriz C

Quiero trabajar con mis matrices Numpy en una extensión C. Muchos ejemplos en este caso utilizan la estructura de PyArrayObject, array->data , array->strides[0] , array->strides[1] , … punteros para alcanzar los datos, si quisiera llegar a mi matriz de una forma más familiar (o más ordenada) para mí, con índices como array[i][j] ¿Cómo debo proceder […]

¿Cuándo se debe llamar a PyEval_InitThreads?

Estoy un poco confundido acerca de cuándo debo llamar a PyEval_InitThreads . En general, entiendo que se debe llamar a PyEval_InitThreads siempre que se PyEval_InitThreads un subproceso que no sea de Python (es decir, un subproceso que se genera dentro de un módulo de extensión). Sin embargo, estoy confundido si PyEval_InitThreads es para progtwigs C […]

(Python C API) ¿PyRun_StringFlags faltan funciones incorporadas?

Estoy tratando de insertar algo de python en el proyecto de mi mascota. He reducido mi problema al siguiente código: #include #include “iostream” int main(int argc, char *argv[]) { Py_Initialize(); PyObject *globals = Py_BuildValue(“{}”); PyObject *locals = Py_BuildValue(“{}”); PyObject *string_result = PyRun_StringFlags( “a=5\n” “s=’hello’\n” “d=dict()\n” , Py_file_input, globals, locals, NULL); if ( PyErr_Occurred() ) {PyErr_Print();PyErr_Clear();return […]

En Python, ¿por qué se implementa un módulo en C más rápido que un módulo de Python puro y cómo se escribe uno?

La documentación de Python indica que la razón por la que cPickle es más rápida que Pickle es que la primera se implementa en C. ¿Qué significa eso exactamente? Estoy haciendo un módulo para matemáticas avanzadas en Python, y algunos cálculos toman una cantidad significativa de tiempo. ¿Eso significa que si mi progtwig se implementa […]

Cree un tipo Python desde C que implemente un __dict__?

¿Cómo se crea un tipo para tener un __dict__ según una clase “normal” si se definiera en Python? ¿Hay ejemplos de tipos no dynamics con __dict__ s? ¿Los tipos definidos a través de PyTypeObject de Python pasan a través de type_new ? Hay un miembro tp_dict de PyTypeObject , pero no puedo encontrar información sobre […]

Construir un PyObject * a partir de una función de C?

Estoy incrustando Python en una biblioteca de C ++ que estoy creando. Me gustaría que los usuarios puedan pasar funciones de C en forma de punteros de función PyObject* (fpFunc*)(PyObject*,PyObject*); para que pueda usar esas funciones en el Python incrustado. Así que tengo un puntero a función y sé que es posible poner esta función […]

No se puede importar una DLL personalizada en Python

Estoy tratando de exponer una clase de C ++ a python con boost::python , así que estoy revisando este tutorial . .dll proyecto de Visual Studio .dll , con este código fuente: #include using namespace boost::python; struct World { void set(std::string msg) { this->msg = msg; } std::string greet() { return msg; } std::string msg; […]

¿Anidados Python C Extensiones / Módulos?

¿Cómo compilo un módulo de C-Python de modo que sea local a otro? Por ejemplo, si tengo un módulo llamado “barra” y otro módulo llamado “mymodule”, ¿cómo compilo la “barra” para que se importe a través de “import mymodule.bar”? (Lo siento si esto está mal redactado, no estaba seguro de cuál era el término correcto […]

Qué hace error_already_set en Boost.python y cómo manejar las excepciones de manera similar en la API de Python C

He estado trabajando en un proyecto en el que quiero eliminar las dependencias de impulso y reemplazarlo con la API de Python C. Pasé un tiempo entendiendo la API de Python C y vi este catch (error_already_set const &) Leí los documentos de impulso pero explica dónde se usa. Pero quiero saber por qué se […]

Pasando argumentos a tp_new y tp_init desde subtipos en la API de Python C

Originalmente hice esta pregunta en la lista de capi-sig de Python: ¿Cómo pasar argumentos a tp_new y tp_init desde los subtipos? Estoy leyendo el Python PEP-253 sobre subtipos y hay muchas buenas recomendaciones sobre cómo estructurar los tipos, llamar a las ranuras tp_new y tp_init , etc. Pero, carece de una nota importante sobre la […]