Come clonare l'ambiente di lavoro Python su un'altra macchina?


26

Ho sviluppato un modello di apprendimento automatico con Python (Anaconda + Flask) sulla mia workstation e tutto va bene. Successivamente, ho provato a spedire questo programma su un'altra macchina dove ovviamente ho provato a impostare lo stesso ambiente, ma il programma non si avvia. Ho copiato il programma su altre macchine dove funziona anche senza intoppi.

Non riesco a capire quale sia il problema nel caso fallito (sia il codice del programma che il messaggio di errore sono copiosi, quindi non sono in grado di presentarli qui) ma sono quasi certo che si tratti di qualcosa con le diverse versioni delle dipendenze .

Quindi, la mia domanda è che dato un ambiente in cui un determinato programma funziona bene, come posso clonarlo in un altro dove dovrebbe funzionare anche bene? Naturalmente, senza la clonazione dell'intero sistema;)


Usa esportazione conda env.
kbrose,

Risposte:


39

Prima di tutto, questa è una domanda Python / Anaconda e probabilmente dovrebbe essere posta in un altro sito secondario di scambio di stack.


Per quanto riguarda la domanda stessa: puoi esportare il tuo ambiente Anaconda usando:

conda env export > environment.yml

E ricrearlo usando:

conda env create -f environment.yml

Si noti che, come suggerito da altri, è necessario utilizzare ambienti virtuali che consentano di creare un determinato ambiente separato da quello della propria macchina e gestirlo più facilmente.

Per creare un ambiente virtuale in Anaconda è possibile utilizzare:

conda create -n yourenvname python=x.x anaconda

che attivi usando:

source activate yourenvname

La documentazione di Anaconda non è molto chiara su come utilizzare conda createo conda env createquando si condivide / ricrea un ambiente. Potresti per favore ulteriori dettagli perché mi consiglia di utilizzare conda env createin questa situazione?
Tanguy,

Puoi trovare alcune note sulla differenza tra conda createe conda env createqui: groups.google.com/a/continuum.io/forum/#!topic/conda/… Detto questo, penso che potresti usarli in modo intercambiabile.
ginge

1
Ho visto questo thread, ma precisamente sto cercando di capire con precisione in quale situazione dovrebbe essere preferita ciascuna opzione ( conda createvs conda env create) e quali sono gli conda env createaspetti negativi di ciascuno (ad esempio: "[ è per] ambienti in cui sono stati installati pacchetti che usano pip , che causa ulteriore complessità ": che tipo di ulteriore complessità aggiunge?).
Tanguy,

Voglio chiedere che durante l'esecuzione conda env create -f environment.yml, questo causerà errori perché il nome di virtenv nel file yml è già stato usato. Cambia il nome con il tuo nuovo virtenv da superare.
Giang Nguyễn il

In questo modo ti salva la vita! se si crea un ambiente da un file in base alle istruzioni della pagina Anaconda Managing Environments, non funziona se si utilizza un'altra piattaforma. conda list --explicit > FILE_NAMEesporta i binari per la piattaforma attuale e apparentemente non funziona su un altro.
Shayan Amani,

5

Cerca "contenitori", ad esempio Docker ( https://www.docker.com/what-container ), un'alternativa più leggera alla virtualizzazione.

Richiederà un certo investimento di tempo ma alla fine fornirà molti vantaggi.

Dal link, dove ho segnato il tuo bisogno specifico in grassetto corsivo :

Comprimere il software in unità standardizzate per lo sviluppo, la spedizione e l'implementazione

Un'immagine contenitore è un pacchetto leggero, autonomo ed eseguibile di un software che include tutto il necessario per eseguirlo: codice, runtime, strumenti di sistema, librerie di sistema, impostazioni. Disponibile per le app basate su Linux e Windows, il software in container funzionerà sempre allo stesso modo, indipendentemente dall'ambiente . I container isolano il software dall'ambiente circostante, ad esempio le differenze tra ambienti di sviluppo e di gestione temporanea e aiutano a ridurre i conflitti tra i team che eseguono software diverso sulla stessa infrastruttura.


5

Prima configurazione dell'ambiente di esportazione del tuo attuale ambiente conda utilizzando:

conda-env  export -n your_env_name > your_env_name.yml

esempio:

conda-env  export -n base> base.yml

Dopo aver eseguito il comando precedente, dovrebbe essere il file di configurazione yml nella directory corrente che contiene informazioni sull'ambiente conda

Per creare un nuovo ambiente utilizzando il file di configurazione yml eseguito:

conda-env create -n new_env -f=\path\to\base.yml 

esempio:

conda-env create -n venv -f=base.yml

Nel caso in cui quello sopra non funzioni (a causa dei vari problemi della conda stessa), vale sempre la pena provare con la seguente variazione:

conda-env create --name new_env --file \path\to\base.yml 

4

Se il tuo programma è principalmente Python, puoi affidarti esclusivamente ad ambienti virtuali.

Crea ambienti virtuali per isolare le tue dipendenze anziché utilizzare le librerie di sistema. Quindi utilizzare gli strumenti di ambiente virtuale per duplicare i tuoi ambienti.

Nel virtualenv di lavoro, crea un file con la versione di ciascuna libreria Python installata:

pip freeze > requirements.txt

Nel nuovo virtualenv, chiedi pipdi installare quelle librerie con la stessa versione:

pip install -r requirements.txt

Questo ti assicura di avere le stesse versioni lib su entrambi i computer. E poiché requisito.txt è monitorato dal tuo VCS, puoi sempre ricreare l'ambiente di una vecchia versione del tuo codice.

Naturalmente, se hai bisogno di un database, un server Web di produzione, ecc., Finisci con qualche altro passaggio e non puoi fare affidamento su virtualenv per garantire che entrambi gli ambienti corrispondano. Qui entra in gioco Docker (vedi la risposta di Pieter21 ).


Non ho notato il anacondatag sulla tua domanda. Non ne ho esperienza, ma fai attenzione. Penso che anaconda abbia il suo modo di gestire gli ambienti e usare entrambi anaconda e virtualenvpotrebbe metterti nei guai. Tuttavia, suppongo che Anaconda dovrebbe offrire funzionalità equivalenti.
Jérôme,

1

Dalla fine di questa pagina di documentazione :

Salva i pacchetti per un utilizzo futuro:

conda list --export > package-list.txt

Reinstalla i pacchetti da un file di esportazione:

conda create -n myenv --file package-list.txt

1

Un riepilogo dei modi esistenti per creare un ambiente basato su un altro:

  • Clonazione di un ambiente :

    • Da un ambiente esistente:

      $ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME

    • Da un file di ambiente esportato sullo stesso computer:

      $ conda create --name ENV_NAME —-file FILE_NAME.yml

    • Da un file di ambiente esportato su un altro computer:
      $ conda env export > ENV_NAME.yml
      $ conda env create -f ENV_NAME.yml```

$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
B. Dom

0

One-liner

conda create --clone source_env --name destination_env

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.