Sé por qué esto es bueno en general: soluciones de seguridad más rápidas, empaquetado más fácil, más funciones. Sin embargo, estoy tratando de persuadir a algunos compañeros de trabajo de que no necesitamos agrupar una biblioteca con nuestro programa. No funcionará sin esta biblioteca, pero la biblioteca ha estado estable por un tiempo y lo seguirá siendo en el futuro previsible. No veo ninguna razón para NO separarlo.
¿Qué argumentos podría usar para persuadirlos?
Mi situación específica es esta: estoy trabajando en SymPy , que es una biblioteca de Python de código abierto para matemática simbólica. Una parte central es mpmath , que es una biblioteca para aritmética de punto flotante de previsión múltiple. SymPy no funciona sin mpmath, no hay alternativa. Como tal, se ha incluido con SymPy desde el principio (me dijeron que generalmente había pequeñas incompatibilidades para solucionar cada vez que se importa una nueva versión). También debe tenerse en cuenta que el desarrollador de mpmath solía estar involucrado en el desarrollo de SymPy. Ahora hay un problema en desagregar mpmath, puedes leerlo todo aquí .
Para resumir la discusión allí:
Desagregar:
Portar algo más fácil a Python 3 (argumento menor en mi humilde opinión)
Empaque más fácil para distribuciones
Actualizaciones de funciones (seguridad) más rápidas para los usuarios
"Las dependencias de empaque y manejo son problemas difíciles, pero se resuelven. Definitivamente, esta no es un área en la que debamos hacer lo nuestro".
Sigue agrupando:
Instalación. Es fácil en Linux, más difícil en Mac y muy difícil en Windows. Falta de acceso a su y otros problemas.
Es una parte integral de SymPy, es decir, Sympy no funciona sin él (en absoluto)
no hay otro paquete que pueda hacer el trabajo de mpmath
"Cuando yo, como usuario, descargo Sympy, espero que simplemente funcione".
Esa es mi situación específica, pero acepto una respuesta que también proporciona una buena respuesta general.
fuente
Respuestas:
Otra respuesta más, pero considero la más importante (solo mi opinión personal), aunque las otras también son buenas respuestas.
Empaquetar la lib por separado permite que la lib se actualice sin la necesidad de actualizar la aplicación. Digamos que hay un error en la biblioteca, en lugar de solo poder actualizar la biblioteca, tendría que actualizar toda la aplicación. Lo que significa que su aplicación necesitaría un aumento de versión sin que su código haya cambiado, solo por la lib.
fuente
Además de las ventajas que mencionaste (seguridad, empaque, características), puedo pensar en algo más:
Alguien que encontraría la funcionalidad útil para otro programa no necesitaría hacer el trabajo de dividirla. Eso es si ella incluso sabe si la funcionalidad existe en su proyecto en forma de biblioteca en primer lugar. Esto depende de qué tan bien esté diseñado ... si su proyecto es lo suficientemente modular.
En el caso de que esto sea útil para otros proyectos, esto reduciría el tamaño del uso del disco en general (por ejemplo, solo una copia del código).
Esto mejoraría la calidad de su código, forzándolo a realizar algunas refactorizaciones (muy necesarias). Como en el primer punto anterior, esto también depende de la calidad de su código.
Aumentar el número de usuarios de la biblioteca (si está dividida) ayudaría a hacerla más genérica, lo que probablemente también mejorará su calidad.
fuente
Si bien las ventajas son obvias, la facilidad de implementación parece ser el argumento principal para enviar la biblioteca junto con el programa en su caso.
Aquí hay algunos argumentos más en contra de la agrupación:
En Linux, el trabajo del responsable de la distribución es garantizar que su biblioteca funcione bien con sus dependencias. En cualquier caso, la mayoría de los usuarios descargarán la biblioteca utilizando el administrador de paquetes de la distribución. A aquellos que usan troncales generalmente no les importará perder tiempo configurando la biblioteca de todos modos.
En Windows y Mac OS, los administradores de paquetes de Python como pip generalmente se usan de todos modos, ya que instalar bibliotecas a mano es engorroso.
Incluso ha habido argumentos sobre la implementación dura en el motor de aplicaciones de Google, pero no todos los marcos web se ejecutan en él. ¡Muchos incluso requieren portabilidad, el espacio en disco para las bibliotecas es limitado y, después de todo, es el alojamiento de aplicaciones web! Es poco probable que la aplicación web use matemáticas simbólicas.
Nadie le impide mostrar mensajes de error limpios si la dependencia no está disponible o tiene una versión incorrecta.
La gente a menudo lo odia cuando el programa se considera más inteligente que ellos. Deje que los usuarios se encarguen de su propio sistema.
fuente
La forma correcta de manejar desagrupados en un paquete de instalación de Windows sería realizar la prueba previa a la existencia de la biblioteca y, si no está presente, ofrecer instalarlo desde el paquete de biblioteca que incluye en el paquete de instalación del software. Estoy bastante seguro de que la mayoría de las aplicaciones GTK que tienen puertos de Windows hacen algo en este sentido: sé que pidgin lo hace.
fuente
Un tamaño no tiene que adaptarse a todos.
Para las distribuciones de origen, si agrupa, los empaquetadores en muchas distribuciones (al menos de las herencias de Debian y Fedora) tendrán que hacer un trabajo adicional para deshabilitar o eliminar la agrupación, ya que las políticas de paquetes para esas plataformas prohíben o al menos desaconsejan la agrupación. Por lo tanto, al agrupar crea más trabajo para su flujo descendente con muy pocos beneficios. ¿Podría ese argumento tener algo de peso?
Las distribuciones binarias (si las proporciona) podrían ir en cualquier dirección; la agrupación probablemente tenga sentido para aquellos, ya que no los utilizan aguas abajo.
Pero no hay ninguna razón por la que no pueda tomar la decisión y el paquete opuestos para los instaladores de Windows y Mac.
fuente
Agrupar vs. depender es un viejo debate en el mundo del empaque. Este documento habla sobre estas dos escuelas de pensamiento: http://www.aosabook.org/en/packaging.html
fuente