2014-11-19 6 views
28

Per lo sviluppo usiamo virtualenv per avere uno sviluppo isolato quando si tratta di dipendenze. Da this question sembra consigliabile distribuire applicazioni Python in un .Virtualenv ha uno scopo (in produzione) quando si utilizza la finestra mobile?

Ora stiamo iniziando a utilizzare per la distribuzione. Ciò fornisce un ambiente più isolato, quindi sto mettendo in discussione l'uso di virtualenv all'interno di un container. Nel caso di una singola applicazione, non penso che virtualenv abbia uno scopo in quanto la finestra mobile fornisce già l'isolamento. Nel caso in cui siano distribuite più applicazioni su un singolo container docker, penso che virtualenv abbia uno scopo in quanto le applicazioni possono avere dipendenze in conflitto.

Dovrebbe essere utilizzato virtualenv quando una singola applicazione viene distribuita in un contenitore di finestra mobile?

La finestra mobile deve contenere più applicazioni o solo un'applicazione per contenitore?

In tal caso, è necessario virtualenv essere utilizzato durante la distribuzione di un contenitore con più applicazioni?

+1

Penso che tu abbia le domande giuste. Quando si ha un insieme di applicazioni python su cui lavorare contemporaneamente, è necessario virtualenv per evitare la navigazione da contenitore a contenitore ... Si consiglia di utilizzare virtualenv per impostazione predefinita anche se il contenitore è solo dedicato a lavorare su un app singola perché ... beh non si sa mai. E il sovraccarico indotto da virtualenv non è così alto :) – Rerito

+0

@Rerito Non c'è un sovraccarico nell'utilizzo della finestra mobile. È semplicemente un prigione chroot su linux. – TechJS

risposta

37

Virtualenv è stato creato molto prima della finestra mobile. Oggi mi rivolgo alla finestra mobile anziché a virtualenv per questi motivi:

  • Virtualenv indica che le persone che consumano il prodotto devono scaricare le uova. Con la finestra mobile, ottengono qualcosa che è "noto per funzionare". Senza obblighi.
  • Docker può fare molto più di virtualenv (come creare un ambiente pulito quando si hanno prodotti che richiedono versioni di Python diverse).

Lo svantaggio principale per Docker era il supporto di Windows scarso. Le cose sono cambiate con la versione per Windows 10.

Per quanto riguarda "il numero di applicazioni per contenitore", la politica di solito è 1.

+1

Per utilizzare la finestra mobile su Windows (o OS X), consiglierei [boot2docker] (http://boot2docker.io/). – siebz0r

+1

5s è abbastanza veloce per avviare la finestra mobile su Windows ma è ancora circa 100 volte più lento rispetto alle ore di avvio medie su Linux :-) –

+0

sono quei punti ancora applicabili alla finestra mobile? (supporto per Windows scadente) – Ani

9

Introducendo virtualenv è molto facile, quindi direi inizio senza di essa sul tuo finestra mobile contenitore.

Se si presenta la necessità, forse è possibile installarlo. L'esecuzione di "pip freeze> requirements.txt" ti darà tutti i tuoi pacchetti python. Tuttavia, dubito che avrete mai bisogno di virtualenv all'interno di un contenitore mobile poiché la creazione di un altro contenitore sarebbe un'alternativa più preferibile.

Non consiglierei di avere più di un'applicazione in un unico contenitore. Quando arrivi a questo punto, il tuo contenitore sta facendo troppo.

18

Sì. Dovresti comunque usare virtualenv. Inoltre, ora dovresti costruire ruote invece di uova. Infine, dovresti assicurarti di mantenere l'immagine Docker snella ed efficiente costruendo le ruote in un contenitore con gli strumenti di compilazione completi e senza installare strumenti di compilazione nel contenitore delle applicazioni.

Dovresti leggere questo eccellente articolo.https://glyph.twistedmatrix.com/2015/03/docker-deploy-double-dutch.html

La chiave togliere a dire

E 'vero che in molti casi, forse anche più, la semplice installazione di roba nel Python sistema con Pip funziona bene; tuttavia, per ulteriori applicazioni elaborate da , è possibile che si desideri richiamare uno strumento fornito dal contenitore di base implementato in Python, ma che richiede dipendenze gestite dall'host. Inserendo le cose in una virtualenv, manteniamo le cose impostate dal sistema di pacchetti di immagini separato in modo ordinato dalle cose che l'applicazione sta creando, il che significa che non dovrebbero esserci interazioni dello unforestanti, indipendentemente dalla complessità dell'applicazione l'utilizzo di Python potrebbe essere.

+5

[PEP370] (https://www.python.org/dev/peps/pep-0370/) Introdotto il flag --user (nel 2008) che consente l'installazione di pacchetti in $ HOME. Questo si occupa del 99% dei casi d'uso che ho usato per usare virtualenv/pyvenv per. Buono da tenere a mente, penso. – sthysel

+2

Ho appena ottenuto un voto negativo senza commenti. Come è utile a nessuno? –

+1

Questo può essere vero se si utilizza un sistema operativo contenitore gonfiabile come Ubuntu che usano nell'esempio. Ma se scegli il sistema operativo giusto, come Alpine, questo non è un problema. Le navi Alpine prive di Python, quindi sai che l'installazione di Python è lì solo perché è stata installata perché l'applicazione ne ha bisogno. –

0

Se qualcuno vuole sostituire virtualenv completamente utilizzando la finestra mobile che può.

È sufficiente creare un file Docker diverso per un ambiente diverso e utilizzare la porta e i volumi necessari per l'ambiente.

Come esempio per lo sviluppo è possibile utilizzare questo project. Esegui finestra mobile componi e avvia la codifica. Scrivi i tuoi propri Dockerfiles per diversi ambienti come test, staging e produzione mettendo il tuo log e i tuoi dati in volume.

Questo collegamento è anche utile https://vsupalov.com/docker-python-development/.