Question

Résumé

J'ai eu récemment une conversation avec le créateur d'un cadre que l'une de mes applications dépend. Au cours de cette conversation, il a mentionné comme une sorte de côté qu'il rendrait ma vie plus simple si je viens emmitouflé son cadre avec ma demande et remis à l'utilisateur final une version que je savais était compatible avec mon code. Intuitivement, je l'ai toujours essayé d'éviter de le faire et, en fait, je l'ai pris soin de segmenter mon propre code afin que des parties de celui-ci pourraient être redistribuées sans prendre l'ensemble du projet (même quand il y avait quelqu'un précieux peu de chance de ne jamais réutiliser aucun il). Cependant, après ruminer sur elle pendant un certain temps, je ne l'ai pas été en mesure de trouver une raison particulièrement bonne pourquoi Je le fais. En fait, maintenant que je l'ai pensé, je vois un cas assez convaincant pour regrouper tous mes petites dépendances. Je suis venu avec une liste des avantages et des inconvénients et j'espère que quelqu'un peut signaler quelque chose que je suis absent.

Plus

  • La cohérence des versions signifie plus facile les tests et le dépannage.
  • L'application peut atteindre un plus large public car il semble y avoir moins de composants à installer.
  • Les petits coups secs à la dépendance peut être plus facilement en aval et livré avec l'application, plutôt que d'attendre qu'ils percoler dans le code de base en amont.

Contre

  • processus d'emballage plus complexes à inclure dépendances.
  • L'utilisateur peut se retrouver avec plusieurs copies d'une dépendance à l'égard de leur machine.
  • Par la réponse bortzmeyer, il y a des problèmes de sécurité potentiels de ne pas être en mesure de mettre à niveau des composants individuels.

Remarques

Pour référence, ma demande est écrit en Python et les dépendances, je fais référence sont « lumière », je veux dire par petites et ne sont pas utilisés très commun. (Ils n'existent pas sur toutes les machines ou même dans tous les dépôts). Et quand je dis « paquet avec » ma demande, je veux dire distribuer sous mon propre arbre source, pas installer avec un script qui se trouve dans mon paquet, donc il y aurait aucune chance de versions contradictoires. Je développe aussi uniquement sur Linux il n'y a pas de problèmes d'installation de Windows à se soucier.

Tout cela étant dit, je suis intéressé à entendre des réflexions sur la question plus générale (indépendante de la langue) des dépendances d'emballage ainsi. Y at-il quelque chose que je suis absent ou est-ce une décision facile que je suis un peu plus-pensée?

Additif 1

Il est à noter que je suis tout à fait sensible aux besoins des emballeurs en aval. Je voudrais qu'il soit aussi simple que possible pour envelopper l'application dans une Deb ou RPM spécifiques à la distribution.

Était-ce utile?

La solution

Je suis en faveur regrouper les dépendances, si il est impossible d'utiliser un système de résolution automatique des dépendances (à savoir setuptools), et si vous pouvez le faire sans introduire des conflits de version. Vous devez toujours considérer votre demande et votre public; Les développeurs sérieux ou amateurs sont plus susceptibles de vouloir travailler avec une version spécifique (dernier) de la dépendance. des choses peut-être les offres groupées ennuyeux pour eux, car ce n'est pas ce qu'ils attendent.

Mais, en particulier pour les utilisateurs finaux d'une application, je doute sérieusement la plupart des gens aiment avoir à rechercher des dépendances. En ce qui avoir des copies en double va, je préférerais passer un supplément de 10 millisecondes télécharger quelques kilo-octets supplémentaires, ou passer quelle que soit la fraction d'un cent sur la meg supplémentaire de l'espace disque, que de passer 10+ minutes de recherche sur les sites Web (qui peut être vers le bas ), le téléchargement, l'installation (qui peut échouer si les versions sont incompatibles), etc.

Je ne me soucie pas combien de copies d'une bibliothèque que j'ai sur mon disque, tant qu'ils ne sont pas dans la manière de les uns des autres. L'espace disque est vraiment, vraiment pas cher.

Autres conseils

Tu ne peux pas compter seulement sur une certaine version de ces dépendances? Par exemple. en Python avec setuptools vous pouvez spécifier la version exacte dont il a besoin ou même donner quelques conditions comme <= > etc. Cela vaut évidemment que pour Python et le gestionnaire de paquets specifc mais personnellement, je toujours d'abord essayer de ne pas regrouper tout. Avec l'expédition comme un œuf Python, vous aurez également toutes les dépendances installées automatiquement.

Vous pourrait bien sûr utiliser aussi une stratégie à deux voies pour fournir votre propre paquet avec des liens juste pour les dépendances et fournissent néanmoins une configuration complète dans certains installateur comme la mode. Mais même alors (dans le cas de python) Je suggère de regrouper simplement les œufs avec elle.

Pour une introduction dans les œufs voir ce poste de la mine .

Bien sûr, cela est très Python spécifique, mais je suppose que cette autre langue peut avoir des outils d'emballage similaires.

Si vous produisez un logiciel pour un utilisateur final, l'objectif est de laisser le client utiliser votre logiciel. Tout ce qui se trouve dans la voie est contre-productif. Si elles doivent télécharger eux-mêmes dépendances, il y a une possibilité qu'ils vont décider d'éviter votre logiciel à la place. Vous ne pouvez pas contrôler si les bibliothèques seront rétrocompatibles, et vous ne voulez pas que votre logiciel pour arrêter de travailler parce que l'utilisateur a mis à jour leur système. De même, vous ne voulez pas un client pour installer une ancienne version de votre logiciel avec les bibliothèques anciennes et ont le reste de la rupture du système.

Cela signifie généralement bottelage est la voie à suivre. Si vous pouvez vous assurer que votre logiciel installe en douceur, sans dépendances regrouper, et c'est moins de travail, alors que peut-être une meilleure option. Il est sur ce qui satisfait vos clients.

Pour Linux, ne pense même pas regrouper. Vous n'êtes pas plus intelligent que le gestionnaire de paquets ou les emballeurs, et chacun prend la distribution approche de leur propre façon - ils ne seront pas heureux si vous essayez de passer votre chemin. Au mieux, ils ne dérangeront pas avec l'emballage de votre application, ce qui est grand.

Gardez à l'esprit que sous Linux, les dépendances sont automatiquement tirés dans pour vous. Ce n'est pas question de faire l'utilisateur les obtenir. Il est déjà fait pour vous.

Pour les fenêtres, vous pouvez regrouper, vous êtes sur votre propre là-bas.

Un point important semble avoir été oublié dans les inconvénients des bibliothèques / regroupement de cadres / etc avec l'application. Mises à jour de sécurité

La plupart des cadres Web sont pleins de trous de sécurité et exigent rafistoler fréquentes. Toute bibliothèque, de toute façon, peut être mis à jour un jour ou l'autre pour un bug de sécurité.

Si vous ne liez pas, sysadmins vont simplement mettre à jour une copie de la bibliothèque et redémarrer les applications en fonction.

Si vous regroupez, sysadmins ne sera probablement pas même savoir ils doivent mettre à jour quelque chose.

Alors, la question aux ventes groupées n'est pas l'espace disque, il est le risque de laisser des copies anciennes et dangereuses autour.

Juste après mon expérience, le prendre avec un grain de sel.

Ma préférence pour un couple de bibliothèques open source que je auteur pour l'indépendance de libs supplémentaires autant que possible. Raison d'être, non seulement je suis sur le crochet pour la distribution des bibliothèques supplémentaires ainsi que le mien, je suis aussi obligé de mettre à jour ma demande de compatibilité que les autres bibliothèques sont mises à jour.

A partir des bibliothèques que j'ai utilisé des autres qui portent des dépendances des bibliothèques « communes », toujours je me retrouve avec plusieurs versions nécessitant de la bibliothèque commune sur mon système. La vitesse de mise à jour des bibliothèques par rapport de niche que je utilise tout simplement pas si vite, alors que les bibliothèques communes sont mises à jour beaucoup plus souvent. l'enfer versioning.

Mais c'est parlant génériquement. Si je peux aider mon projet et les utilisateurs NOW en incorporant une dépendance, je suis toujours à la recherche des effets en aval et plus tard, à la date de cette décision. Si je peux le gérer, je peux comprendre avec confiance la dépendance.

Comme toujours, votre kilométrage peut varier.

Je toujours intégrer toutes les applications mes pour dépendances web. Non seulement cette marque l'installation plus simple, l'application reste stable et fonctionne comme vous attendez à même lorsque d'autres composants du système sont mis à jour.

Méfiez-vous de reproduire l'enfer classique DLL Windows. Par tous les moyens de minimiser le nombre de dépendances: idéalement, tout dépend de votre langue et son cadre, rien d'autre, si vous le pouvez

.

Après tout, préserver l'espace disque dur est à peine l'objectif plus, afin que les utilisateurs doivent se soucient pas d'avoir plusieurs copies. En outre, à moins que vous avez un très petit nombre d'utilisateurs, assurez-vous de prendre la charge de l'emballage sur vous-même plutôt que de les obliger à obtenir toutes les dépendances!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top