Estoy tratando de tomar algunas funciones de una gran biblioteca compartida de C++ (libbig.so) y exponerlas a Python a través de Cython. Para hacerlo, tengo un pequeño archivo C++ (small.cpp) que proporciona una capa delgada alrededor de la funcionalidad de la biblioteca compartida que necesito, de una manera que hace que sea fácil llamar a través de Cython (pysmall.pyx).Distribuir una biblioteca compartida y un código C con un módulo de extensión Cython
libbig.so -> small.cpp, small.h -> libsmall.so -> pysmall.pyx -> pysmall.cpp -> pysmall.so
puedo construir y ejecutar este módulo de extensión en mi propia computadora: simplemente compilo small.cpp en libsmall.so, y luego digo "libraries = ['small']" en el objeto Extension en setup.py para construir el módulo de extensión pysmall.so.
Ahora estoy tratando de distribuir este módulo de extensión, y estoy teniendo dificultades para rastrear los recursos que describen las mejores prácticas de setup.py para distribuir un módulo de Cython, así como fuentes C y bibliotecas compartidas. He leído "Installing Python Modules", "Distributing Python Modules" y "Distributing Cython Modules". Entiendo cómo distribuir un módulo de extensión por sí mismo. Estoy menos seguro de la mejor forma de distribuir las dependencias del módulo de extensión.
La documentación de Cython indica que debe incluir los archivos .cpp generados, así como los archivos .pyx, en caso de que Cython no esté presente, pero no proporciona el código para demostrar cómo manejar mejor cada situación. Tampoco menciona cómo distribuir las bibliotecas compartidas de las que depende el módulo Cython.
Estoy explorando los scripts setup.py de pandas, lxml, pyzmq, h5py, y más, y hay un poco de trabajo extraño sucediendo. Si alguien tiene punteros o código de ejemplo que podría acelerar este proceso, ciertamente lo agradecería.
Tenga en cuenta que en las versiones más recientes de 'setuptools' y' distutils' (estoy usando 'setuptools' 5.7), los comandos se movieron a sus propios módulos. Entonces, querría hacer 'desde setuptools.command.build_ext import build_ext' o desde' distutils' respectivamente. – Midnighter
Su primer setup.py es que importa Cython.Distutils antes de que tenga la oportunidad de instalarlo si no está presente. – zneak
Otra opción sería crear un paquete conda, que podría agruparse 'libbig.so'. https://conda.io/docs/user-guide/tutorials/build-postgis.html – oLas