easy_install / pip o apt-get


30

Come notato nella pagina wiki di Ubuntu su Rails , si consiglia alle gemme di gestire le dipendenze Rails / Ruby.

Qual è la migliore pratica con i pacchetti Python come Django? Devo installarli tramite apt-get o devo lasciare che easy_install / pip li recuperi da PyPi?

Risposte:


29

Esistono diversi argomenti:

  1. Usa repository / PPA perché ti manterranno sia stabili che aggiornati con le correzioni di sicurezza.

    Questo è per lo più vero. Se, ad esempio, si installa python-djangocome ho, si ottengono aggiornamenti di sicurezza. Questo è utile perché devi solo rimanere aggiornato su apt ma devi ancora testare le cose prima di inviare gli aggiornamenti (anche se i test dovrebbero andare bene ogni volta).

    Potresti sostenere che se lo utilizzassi pip, potresti non controllare mai gli aggiornamenti.

  2. Utilizzare in pipmodo da poter utilizzare le versioni "stabili" appropriate.

    Non ci sono dubbi: i repository sono in ritardo rispetto al mondo reale. Django è 2.0 ma i repository per la versione LTS di Ubuntu (che molte persone si attaccano ai server) ottengono solo 1.8 su Ubuntu 16.4 l con Python 2 ma vi ottengono comunque aggiornamenti di sicurezza.

    pipti dà sempre le ultime novità. Devi solo aggiornarli tu stesso.

  3. L'aggiornamento di un'installazione Python usata da repository può essere un incubo

    Quando aggiorni Ubuntu alla versione successiva, aggiorna molti pacchetti. Molte cose cambiano. So che in Django questo significa che devi fare attenzione a incompatibilità del codice, deprecazioni ... Ma lo stesso vale per tutti gli altri codici Python.

    Lo stesso vale per, pipma con pipte puoi fare una cosa alla volta. Sai cosa causa i problemi, quindi sai dove cercare la soluzione.

  4. pip+ virtualenvti consente di tenere le cose separate

    virtualenvti consente di avere piccoli ambienti Python portatili. Ciò consente di avere diversi ambienti Python diversi uno accanto all'altro sulla stessa macchina.

    Il vantaggio evidente sembra essere per la manutenzione in quanto è possibile gestire l'ambiente allo stesso modo in cui si gestisce il codice. Anche archiviare l'ambiente nel VCS ... ma dovresti ricordare che avere dodici diversi virtualenvs significa dodici ambienti che devi controllare e aggiornare.


Modifica: dopo un'orribile serie di aggiornamenti su un server per passare da Lucid a Precise, sono passato da una combinazione mista Apt + pip (nr 1 e 2) a una pura pip + virtualenv (nr. 4). Invece di avere un virtualenv per sito, ne ho uno condiviso tra una dozzina di siti. Questo funziona per ora.

Ho anche dovuto scrivere un piccolo script che controlla lo stato dei pacchetti installati con pip. Se ci sono aggiornamenti, devo applicarli manualmente (il che è positivo perché li collaudo localmente, in un virtualenv locale). Tutto questo è ancora un po 'più doloroso di quanto non fosse originariamente, ma molto meglio a lungo termine.


10
  • Pacchetti dai repository

    Questi dovrebbero essere installati ogni volta che l'applicazione è in qualche modo specifica per Ubuntu . Ti garantiscono una versione stabile che puoi installare su macchine Ubuntu, sono supportate e talvolta più mature di quella che ricevi tramite pip. Se distribuisci un sacco di server Ubuntu, o se stai scrivendo un'applicazione Ubuntu, usa questi, se disponibili .

    Talvolta contengono anche modifiche specifiche di Ubuntu.

  • pip vs easy_install

    Non c'è molto da dire su questi, come l'ha detto l'hacker James Bennett:

    Per favore, per amore di Guido, smetti di usare setuptools e easy_install e usa invece distutils e pip.

    Per una discussione approfondita sulle differenze, vedi Sul packaging di James Bennett (di Django) e Alcune correzioni su "Sul packaging" di Ian Bicking (di Mozilla).

Se vuoi essere sicuro, prova le tue distribuzioni di pip usando virtualenv . Questo ti dà un ambiente Python isolato, quindi puoi essere sicuro che la tua app funzionerà su qualsiasi macchina.

Aspetta un po ', credo che alcune persone non saranno d'accordo con me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.