Articles of python c api

Accediendo a la vista de una matriz NumPy usando la API de C

En un módulo de extensión de Python que he escrito en C ++, uso el siguiente fragmento de código para convertir una matriz NumPy en una matriz de Armadillo para usar en la parte C ++ del código: static arma::mat convertPyArrayToArma(PyArrayObject* pyarr, int nrows, int ncols) { // Check if the dimensions are what I […]

¿Por qué y dónde python internó cadenas al ejecutar `a = ‘python’ ‘mientras el código fuente no lo muestra?

Estoy tratando de aprender el mecanismo interno de python usando en la implementación del objeto string. Pero tanto en PyObject *PyString_FromString(const char *str) como en PyObject *PyString_FromStringAndSize(const char *str, Py_ssize_t size) cadenas internadas de python solo cuando su tamaño es 0 o 1. PyObject * PyString_FromString(const char *str) { fprintf(stdout, “creating %s\n”, str);————[1] //… //creating… […]

Variables estáticas en la API de Python C

¿Cómo se expondrían variables “estáticas” como esta? class MyClass: X = 1 Y = 2 a través de la API de C? La única variable en PyTypeObject que parece que funcionaría es tp_members, pero no veo ninguna bandera en PyMemberDef para indicar que el miembro debe ser por clase, no por instancia. Para un poco […]

Importe y use el módulo estándar de Python desde dentro de la extensión Python C

Tengo un módulo de extensión de Python escrito en C. Quiero usar en este código C uno de los módulos de Python estándar, por ejemplo, os o shutil . ¿Cómo es mejor hacer esto?

Funciones de Python C-API que toman prestadas y roban referencias

La convención estándar en la API C de Python es que Las funciones no roban referencias de argumentos de entrada (que son objetos) Los valores de retorno y los argumentos de salida (que son objetos) poseen una referencia La mayoría de las funciones en la API C de Python siguen esta convención. Sin embargo hay […]

¿Cómo obtener el recuento de referencia de un PyObject?

¿Cómo obtener el recuento de referencia de un PyObject desde C ++? Hay funciones Py_INCREF y Py_DECREF que lo aumentan / disminuyen, pero no he encontrado ninguna función que devuelva el recuento de referencias del objeto. Lo necesito para fines de depuración.

Python para .NET error “no se puede encontrar el ensamblaje”

Estoy usando CPython y tengo un C # dll. Estoy tratando de usar Python para .NET para que hablen. No puedo usar IronPython porque necesito integrar esto en un sistema CPython existente. Soy completamente nuevo en Python para .NET, y en realidad tengo muy poca experiencia con Python y no tengo experiencia con C #. […]

incrustando python

Estoy intentando llamar a las funciones de Python desde el código C, y seguí una muestra de aquí También tengo las direcciones de archivo de inclusión correctas, las de biblioteca, y vinculé python32.lib (im usando python 32); sin embargo, el error fue que las API de python / C como PyString_FromString, PyInt_FromLong, PyInt_AsLong están indefinidas […]

Permitir que Ctrl-C interrumpa una extensión C de python

Estoy ejecutando una gran simulación computacional en las extensiones de python basadas en C (hechas en casa). Ocasionalmente me equivoco y me gustaría terminar una simulación. Sin embargo, Ctrl-C no parece tener ningún efecto (aparte de imprimir ^C en la pantalla, así que tengo que detener el proceso usando kill o el monitor del sistema. […]

Asignación de objetos Python C-API

Quiero usar los operadores nuevos y eliminados para crear y destruir mis objetos. El problema es que Python parece dividirlo en varias etapas. tp_new, tp_init y tp_alloc para la creación y tp_del, tp_free y tp_dealloc para la destrucción. Sin embargo, c ++ solo tiene novedades que asignan y construyen completamente el objeto y eliminan las […]