Python >> Tutoriel Python >  >> Python Tag >> PIP

Pip vs Package Manager pour la gestion des packages Python

Le plus gros inconvénient que je vois avec l'utilisation de pip installer des modules Python sur votre système, soit en tant que modules système, soit en tant que modules utilisateur, c'est que le système de gestion de paquets de votre distribution ne les connaîtra pas. Cela signifie qu'ils ne seront utilisés pour aucun autre paquet qui en a besoin et que vous voudrez peut-être installer à l'avenir (ou qui pourrait commencer à utiliser l'un de ces modules suite à une mise à niveau) ; vous vous retrouverez alors avec les deux pip - et des versions des modules gérées par la distribution, ce qui peut causer des problèmes (j'en ai rencontré un autre récemment). Donc, votre question finit par être une proposition tout ou rien :si vous seulement utilisez pip pour les modules Python, vous ne pouvez plus utiliser le gestionnaire de paquets de votre distribution pour tout ce qui veut utiliser un module Python...

Le conseil général donné dans la page à laquelle vous avez lié est très bon :essayez d'utiliser les packages de votre distribution dans la mesure du possible, n'utilisez que pip pour les modules qui ne sont pas empaquetés, et lorsque vous le faites, faites-le dans votre configuration utilisateur et non à l'échelle du système. Utiliser dans la mesure du possible des environnements virtuels, notamment pour le développement de modules. Surtout sur Arch, vous ne devriez pas rencontrer de problèmes causés par des modules plus anciens; même sur les distributions où cela peut être un problème, les environnements virtuels le gèrent assez facilement.

Il vaut toujours la peine de considérer que les packages de bibliothèque et de module d'une distribution sont principalement destinés à être utilisés par d'autres packages de la distribution; les avoir autour est un effet secondaire agréable pour le développement à l'aide de ces bibliothèques et modules, mais ce n'est pas le cas d'utilisation principal.


TL;DR

  • utiliser pip (+ virtualenv) pour des trucs (libs, frameworks, peut-être des outils de développement) vos projets (que vous développez) utilisez
  • utilisez le gestionnaire de packages pour les applications vous utiliser (en tant qu'utilisateur final)

Dépendances de développement

Si vous développez des logiciels en Python, vous voudrez utiliser pip pour toutes les dépendances du projet, qu'il s'agisse des dépendances d'exécution, des dépendances de construction ou des éléments nécessaires aux tests automatisés et aux contrôles de conformité automatisés (linter, vérificateur de style, vérificateur de type statique ...)

Il y a plusieurs raisons à cela :

  • Cela vous permet d'utiliser virtualenv (soit directement, soit via virtualenvwrapper ou pipenv ou d'autres moyens) pour séparer les dépendances de différents projets les uns des autres et pour isoler les applications python que vous utilisez "en production" (en tant qu'utilisateur) de toutes les manigances exotiques (ou même simplement des incompatibilités) qui peuvent poursuivre le développement.
  • Cela vous permet de suivre toutes les dépendances d'un projet dans un requirements.txt (si votre projet est une application) ou setup.py (si votre projet est une bibliothèque ou un framework). Cela peut être vérifié dans le contrôle des révisions (par exemple, Git) avec le code source, afin que vous sachiez toujours quelle version de votre code s'est appuyée sur quelles versions de vos dépendances.
  • Ce qui précède permet à d'autres développeurs de collaborer sur votre projet même s'ils n'utilisent pas la même distribution Linux ou même pas le même système d'exploitation (si les dépendances utilisées sont également disponibles sur Mac et Windows ou quoi qu'ils utilisent, c'est-à-dire)
  • Vous ne voulez pas que les mises à jour automatiques du gestionnaire de packages de votre système d'exploitation cassent votre code. Vous devez mettre à jour vos dépendances, mais vous devez le faire consciemment et aux moments que vous choisissez, afin d'être prêt à corriger votre code ou à annuler la mise à jour. (Ce qui est facile si vous suivez la déclaration de dépendance complète dans votre système de contrôle de révision, avec votre code.)

Si vous pensez avoir besoin de séparer les dépendances directes et indirectes (ou de faire la distinction entre la plage de version acceptable pour une dépendance et la version réelle utilisée, cf. "épinglage de version"), consultez pip-tools et/ou pipenv. Cela vous permettra également de faire la distinction entre les dépendances de construction et de test. (La distinction entre les dépendances de construction et d'exécution peut probablement être encodée en setup.py )

Applications que vous utilisez

Pour les choses que vous utilisez comme une application normale et qui arrivent simplement à écrire en Python, préférez le gestionnaire de packages de votre système d'exploitation. Il s'assurera qu'il reste raisonnablement à jour et compatible avec les autres éléments installés par le gestionnaire de packages. La plupart des distributions Linux affirmeront également qu'elles ne distribuent aucun logiciel malveillant.

Si quelque chose dont vous avez besoin n'est pas disponible dans le référentiel de packages par défaut de votre distribution, vous pouvez consulter des référentiels de packages supplémentaires (par exemple, le tableau de bord des distributions basées sur deb) ou utiliser pip De toute façon. Si ce dernier, utilisez --user à installer dans la maison de votre utilisateur au lieu de l'ensemble du système, de sorte que vous êtes moins susceptible de casser votre installation Python. (Pour les choses dont vous n'avez besoin que temporairement ou rarement, vous pouvez même utiliser un virtualenv.)


Une autre raison d'utiliser le gestionnaire de packages est que les mises à jour seront automatiquement appliquées, ce qui est essentiel pour la sécurité. Pensez que si le paquet de beans utilisé par Equifax avait été automatiquement mis à jour via yum-cron-security, le piratage n'aurait peut-être pas eu lieu.

Sur ma boîte de développement personnelle, j'utilise Pip, en prod, j'utilise des packages.