2011-01-15 11 views
7

Si tengo un paquete Python que depende de algunas bibliotecas C (como por ejemplo, la Biblioteca Científica Gnu (GSL) para cálculos numéricos), ¿es una buena idea agrupar la biblioteca con mi código?¿Debo incluir bibliotecas C con mi aplicación Python?

Me gustaría hacer que mi paquete sea tan fácil de instalar como sea posible para los usuarios y no quiero que tengan que descargar C librerías a mano y suministrar include-paths. También siempre pude garantizar que la versión de la biblioteca que envío es compatible con mi código.

Sin embargo, ¿es posible que haya conflictos si el usuario ya tiene la biblioteca instalada, o hay alguna otra razón por la que no debería hacer esto?

Sé que puedo hacer que sea más fácil para los usuarios al proporcionar una distribución binaria, pero me gustaría evitar tener que mantener distribuciones binarias para todos los sistemas operativos posibles. Por lo tanto, me gustaría mantener una distribución de fuente, pero para el usuario (que posee orgullosamente un compilador de C) la instalación debe ser tan fácil como python setup.py install.

Respuesta

0

Puede tener dos ramas separadas del src, una que contenga las bibliotecas y otra que no. De esta forma, puede advertir explícitamente a sus usuarios en caso de que hayan instalado las bibliotecas. Otra solución podría ser (si las licencias de las bibliotecas lo permiten) es envolverlos en un solo archivo.

Creo que no hay una solución única, pero estas son las ideas que podría pensar hasta ahora.

Buena suerte

0

Puede utilizar virtualenv para crear un entorno Python privada para su aplicación. Esto evita conflictos con otras bibliotecas. Es mejor si empaqueta módulos y dependencias como sus bibliotecas usando Distribute. Distutils es otra cosa que vale la pena investigar.

4

La distribución es una de las partes más difíciles para cualquier proyecto de software. Java y .NET elevan parte de esta carga al definir un tiempo de ejecución estándar y luego simplemente decir "simplemente distribuya todo lo demás". Por supuesto, hay un inconveniente: todo debe ser reescrito en un idioma admitido por el tiempo de ejecución: tan pronto como desee utilizar el código nativo, perderá todas las ventajas.

Eso es más difícil en Python, como en Ruby, C, C++ y otros idiomas, ya que generalmente aprovechan las bibliotecas nativas existentes.

En términos generales:

  1. Que sea posible obtener una sdist fuente, a través de pypi.python.org como un ejemplo. Configure correctamente sus install_requires (probablemente necesitará enlaces de python para GSL, no GSL). Use las herramientas de configuración estándar/distribución de diseño. Esto permitirá que cualquiera, digamos un mantenedor de paquetes para cualquier distribución, recoja su software y lo empaque.

  2. Además, considere proporcionar un paquete instalable completo para su público. No es necesario que admita todas las distribuciones y el sistema operativo; elija uno o dos que considere serán más utilizados. Las herramientas como PyInstaller le permitirán crear un paquete ejecutable e instalable para muchos sistemas operativos, pero especialmente para Linux, es posible que desee que el usuario instale la versión de la distribución propia de transitive deps (libgsl?); Necesitará un deb o completo. paquete de rpm para satisfacer eso - de nuevo, no intente soportar ninguna y toda la distribución, se volverá loco. Apoye lo que más usa y permita que otros usuarios lo ayuden con otras necesidades de empaque.

También echa un vistazo a Python Packaging Guide

Cuestiones relacionadas