2011-03-08 12 views
8

He escrito enlaces de Python usando ctypes para el units library. Los enlaces en sí son solo ~ 100 líneas de Python. La biblioteca tiene una dependencia innecesaria (a los efectos de los enlaces de Python) en tcl, y el script de configuración falla si tcl está ausente. Sin embargo, la biblioteca se compila bien con gcc -Wl,-soname,units.so -o units.so -fPIC -shared units.c.Mejores prácticas de lanzamiento de la biblioteca de Python

Ahora me gustaría lanzar estas fijaciones. Hay tres formas en que puedo hacer esto.

  1. Libere los enlaces por sí solos, con un setup.py básico y proporcione instrucciones de compilación, descarga e instalación para la biblioteca C en la documentación.
  2. Libere los enlaces, junto con la fuente de la biblioteca original y proporcione un archivo setup.py que maneje la compilación e instalación de la biblioteca C. Obviamente, esto es más trabajo para mí.
  3. Simplemente libere el archivo .py y deje que los usuarios se preocupen por la instalación y las dependencias.

Si elijo la opción 2, ¿dónde debo poner la biblioteca? ¿Debo ponerlo en el mismo directorio que el archivo .py, lo que me permite suponer lib_name = CDLL('./units.extension'), o debería ponerlo en un directorio que tiende a estar en la ruta del enlazador (como/lib)? Además, ¿cómo se maneja esto normalmente para máquinas Windows que a) pueden no tener un compilador C yb) no tienen un lugar estándar para colocar bibliotecas compartidas?

¿Cuál de estas opciones es la preferida y qué debo hacer con respecto al caso de Windows?

+0

Esta es sólo una opinión personal, pero yo' Simplemente libere los enlaces (y si los libera en forma de paquete, simplemente agregue una dependencia en el paquete para la biblioteca original). – Amber

Respuesta

2

Parece que la biblioteca units no se ha modificado en más de 5 años, por lo que la opción 2 puede ser la mejor. También es poco probable que una de las principales distribuciones lo empaquetará (no puedo encontrarlo en Ubuntu Lucid o Macports, por ejemplo).

Por ejemplo, copiar y units.c units.h en su proyecto y crear un setup.py para compilar y desplegar junto con sus fijaciones:

from setuptools import setup, Extension 

sources = ['src/units.c'] 
ext_opts = {'extra_compile_args': ['-Wl,-soname,units.so', '-Isrc']} 

setup(
    name='units', 
    ext_modules = [Extension('units', sources, **ext_opts)] 
    ) 
Cuestiones relacionadas