Articles of python c extension

¿Cómo usar las vistas de memoria escritas con Cython para aceptar cadenas de Python?

¿Cómo puedo escribir una función de Cython que toma un objeto de cadena de bytes (una cadena normal, un bytearray u otro objeto que sigue el protocolo del búfer ) como una vista de memoria escrita ? De acuerdo con el tutorial de Unicode y Passing Strings Cython, lo siguiente debería funcionar: cpdef object printbuf(unsigned […]

¿Docstrings en extensiones C a Python?

Al crear una extensión C para Python, ¿es posible poder escribir de alguna manera los comentarios que se exponen como cadenas de documentación a los usuarios de la extensión?

ImportError: el módulo dynamic no define la función de inicio (initfizzbuzz)

Intenté comstackr fizzbuzz.c para importar desde python. Para construir fizzbuzz.c , usé python setup.py build_ext -i . Después de construirlo, intenté importar fizzbuzz.c pero se produjo el error siguiente. Como puedó resolver esté problema ? Error >>> import fizzbuzz Traceback (most recent call last): File “”, line 1, in ImportError: dynamic module does not define […]

¿Cómo puedo configurar el nivel de registro utilizado por los nombres al usar pip?

Estoy tratando de averiguar cuál es la razón del error: Unable to find vcvarsall.bat después de que pip install greenlet . Me gustaría establecer el nivel de registro utilizado por los nombres para que se impriman los mensajes de depuración como log.debug(“Unable to find productdir in registry”) . Después de ver def parse_command_line(self): pensé que […]

Devuelva los directorios de inclusión y tiempo de ejecución desde Python

Digamos que quiero usar gcc desde la línea de comandos para comstackr una extensión C de Python. Yo estructuraría la llamada algo como esto: gcc -o applesauce.pyd -IC:/Python35/include -LC:/Python35/libs -l python35 applesauce.c Noté que las opciones -I , -L y -l son absolutamente necesarias, o de lo contrario obtendrá un error similar a este . […]

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? […]