easy_install / pip ou apt-get

30

Comme indiqué dans la page wiki d' Ubuntu sur Rails, il est recommandé que gems gère vos dépendances Rails / Ruby.

Quelle est la meilleure pratique avec les packages Python comme Django? Dois-je les installer via apt-get ou dois-je laisser easy_install / pip les récupérer depuis PyPi?

Leonard Ehrenfried
la source

Réponses:

29

Il y a plusieurs arguments:

  1. Utilisez des référentiels / PPA car ils vous garderont à la fois stables et à jour avec des correctifs de sécurité.

    C'est surtout vrai. Si, par exemple, vous installez python-djangocomme moi, vous obtenez des mises à jour de sécurité. C'est bien parce que vous n'avez qu'à garder le dessus sur apt mais vous devez toujours tester les choses avant de pousser les mises à jour (bien que les tests devraient être bien à chaque fois).

    Vous pourriez faire valoir que si vous l'utilisiez pip, vous ne vérifieriez peut-être jamais les mises à jour.

  2. Utilisez-le pippour pouvoir utiliser les versions "stables" appropriées.

    Cela ne fait aucun doute: le repos est en retard sur le monde réel. Django est 2.0 mais le référentiel pour la version LTS d'Ubuntu (que beaucoup de gens utilisent pour les serveurs) vous n'obtenez que 1.8 sur Ubuntu 16.4 lts avec Python 2 mais obtenez toujours des mises à jour de sécurité.

    pipvous donne le dernier tout le temps. Il vous suffit de les mettre à jour vous-même.

  3. La mise à niveau d'une installation Python utilisée par un dépôt peut être un cauchemar

    Lorsque vous mettez à niveau Ubuntu vers la prochaine version, il met à niveau un grand nombre de packages. Beaucoup de choses changent. Je sais que dans Django, cela signifie que vous devez faire attention aux incompatibilités de code, aux dépréciations ... Mais la même chose s'applique à tous les autres codes Python.

    La même chose est vraie, pipmais avec pipvous, vous pouvez faire une chose à la fois. Vous savez ce qui cause les problèmes et vous savez où chercher pour trouver le correctif.

  4. pip+ virtualenvvous permet de garder les choses séparées

    virtualenvvous permet d'avoir de petits environnements Python portables. Cela vous permet d'avoir plusieurs environnements Python différents fonctionnant côte à côte sur la même machine.

    L'avantage évident semble être pour la maintenance car vous pouvez gérer l'environnement de la même manière que vous gérez le code. Même stocker l'environnement dans le VCS aussi ... mais vous devez vous rappeler qu'avoir douze virtualenvs différents signifie douze environnements que vous devez vérifier et mettre à jour.


Edit: Après une horrible série de mises à niveau sur un serveur pour passer de Lucid à ​​Precise, je suis passé d'une situation mixte Apt + pip (n ° 1 et 2) à une situation pure pip + virtualenv (n ° 4). Au lieu d'avoir un virtualenv par site, j'en ai un partagé entre une douzaine de sites. Cela fonctionne pour l'instant.

J'ai également dû écrire un petit script qui vérifie l'état des packages installés avec pip. S'il y a des mises à jour, je dois les appliquer manuellement (ce qui est bien car je les teste localement, dans un virtualenv local). Tout cela est encore un peu plus douloureux qu'il ne l'était à l'origine mais beaucoup mieux à long terme.

Oli
la source
10
  • Packages des référentiels

    Ceux-ci doivent être installés chaque fois que votre application est spécifique à Ubuntu . Ils vous garantissent une version stable que vous pouvez installer sur les machines Ubuntu, ils sont pris en charge et parfois plus matures que celui que vous obtenez via pip. Si vous déployez un groupe de serveurs Ubuntu, ou si vous écrivez des applications Ubuntu, utilisez-les, si disponibles .

    Ils contiennent également parfois des modifications spécifiques à Ubuntu.

  • pip vs easy_install

    Il n'y a pas grand-chose à dire à ce sujet, comme le dit le pirate Django James Bennett:

    S'il vous plaît, pour l'amour de Guido, arrêtez d'utiliser setuptools et easy_install, et utilisez plutôt distutils et pip.

    Pour une discussion approfondie sur les différences, voir On packaging de James Bennett (de django) et A Few Corrections To «On Packaging» de Ian Bicking (de mozilla).

Si vous voulez être sûr, essayez vos déploiements pip à l'aide de virtualenv . Cela vous donne un environnement python isolé, vous pouvez donc être sûr que votre application fonctionnera sur n'importe quelle machine.

Attendez un peu cependant, j'espère que certaines personnes seront en désaccord avec moi.

Stefano Palazzo
la source