Articles of python c extension

AssertionError (solo 3.X) al llamar a Py_Finalize con subprocesos

Recibo una salida de error cuando llamo a Py_Finalize () de C-API desde un subproceso C diferente del que hice una llamada a python. El error que estoy viendo es: Exception ignored in: Traceback (most recent call last): File “C:\Python34-32\Lib\threading.py”, line 1289, in _shutdown assert tlock.locked() AssertionError: Esto solo sucede en Python 3.X (probado con […]

¿Cómo funciona PyArg_ParseTupleAndKeywords?

He estado tratando de aprender cómo escribir extensiones C para Python y quiero estar seguro de que entiendo cómo funciona PyArg_ParseTupleAndKeywords. Creo que el primer argumento es un puntero PyObject que apunta a una matriz de los argumentos que se pasan a la función de extensión C en el orden en que se pasaron. El […]

¿Hay alguna razón para usar malloc sobre PyMem_Malloc?

Estoy leyendo la documentación de Gestión de memoria en las extensiones de Python C , y por lo que puedo decir, no parece haber muchas razones para usar malloc lugar de PyMem_Malloc . Digamos que quiero asignar una matriz que no se exponga al código fuente de Python y se almacene en un objeto que […]

Diferencia entre PyMODINIT_FUNC y PyModule_Create

Si estoy entendiendo correctamente, PyMODINIT_FUNC en Python 2.X ha sido reemplazado por PyModule_Create en Python3.X Ambos devuelven PyObject* , sin embargo, en Python 3.X, la función de inicialización del módulo DEBE devolver el PyObject* al módulo, es decir, PyMODINIT_FUNC PyInit_spam(void) { return PyModule_Create(&spammodule); } mientras que en Python2.X, esto no es necesario, es decir PyMODINIT_FUNC […]

Cómo realizar una introspección de una función definida en un módulo de extensión Cython C

El módulo de inspect de Python no parece ser capaz de inspeccionar las firmas de las funciones “integradas”, que incluyen funciones definidas en los módulos de extensión C, como las definidas por Cython. ¿Hay alguna forma de obtener la firma de una función de Python que haya definido en dicho módulo, y específicamente en Cython? […]

¿Cómo hacer una copia de un módulo de python en tiempo de ejecución?

Necesito hacer una copia de un módulo de socket para poder usarlo y tener un módulo de socket más parcheado y usarlo de manera diferente. es posible? Quiero copiar realmente un módulo, es decir, para obtener el mismo resultado en tiempo de ejecución como si hubiera copiado socketmodule.c , cambié la función initsocket() a initmy_socket() […]

Extensión Python C: ¿Usar extensión PYD o DLL?

Tengo una extensión de Python escrita en C y me pregunto si debería usar la extensión de archivo DLL o PYD en Windows. (¿Y qué usaría en Linux?) ¿Hay alguna diferencia (además del nombre de archivo)? Encontré un artículo no oficial . ¿Es este el secreto de pyc? ¿Por qué no puedo encontrar ningún artículo […]

Módulo de extensión de Python con número variable de argumentos

Estoy tratando de averiguar cómo en los módulos de extensión C tener una variable (y tal vez) un número bastante grande de argumentos para una función. Al leer sobre PyArg_ParseTuple , parece que debes saber cuántos aceptar, algunos obligatorios y otros opcionales, pero todos con su propia variable. Esperaba que PyArg_UnpackTuple pudiera manejar esto, pero […]

PyEval_InitThreads en Python 3: ¿Cómo / cuándo llamarlo? (La saga continúa hasta la náusea)

Básicamente, parece haber una confusión / ambigüedad masiva sobre cuándo se supone que se debe llamar exactamente PyEval_InitThreads() , y qué llamadas de API de acompañamiento son necesarias. La documentación oficial de Python desafortunadamente es muy ambigua. Ya hay muchas preguntas sobre stackoverflow con respecto a este tema, y ​​de hecho, personalmente ya hice una […]

Construyendo lxml para Python 2.7 en Windows

Estoy intentando comstackr lxml para Python 2.7 en una máquina con Windows de 64 bits. No pude encontrar lxml egg para Python versión 2.7. Así que lo estoy comstackndo de fonts. Estoy siguiendo las instrucciones en este sitio http://lxml.de/build.html bajo la sección de enlace estático. Me estoy equivocando C:\Documents and Settings\Administrator\Desktop\lxmlpackage\lxml-2.2.6\lxml-2.2. 6>python setup.py bdist_wininst –static […]