File di esportazione di Anaconda


129

Come posso creare un file di ambiente anaconda che potrebbe essere utilizzato su altri computer?

Ho esportato il mio ambiente anaconda python in YML usando conda env export > environment.yml. L'esportato environment.ymlcontiene questa riga prefix: /home/superdev/miniconda3/envs/juicyenvche mappa alla posizione della mia anaconda che sarà diversa sui pc degli altri.


7
Stavo solo facendo alcuni test e pensavo di aver trovato il prefisso ignorato ... non sono sicuro del motivo per cui è nell'esportazione env. Dovresti essere in grado di farlo. Per conda env create -f environment.yml inciso, nella mia esperienza questo non funzionerà su tutte le piattaforme, perché conda env elencherà molte dipendenze come `vs2015_runtime` se sei su Windows. Ma ovviamente questo non è disponibile su Linux.
Alex G Rice

4
Conda in realtà consiglia di creare il environment.ymlfile a mano, quindi potresti lasciarlo fuori - vedi stackoverflow.com/questions/39280638/…
Brian Burns

Risposte:


178

Non riesco a trovare nulla nelle condaspecifiche che ti consentano di esportare un file di ambiente senza la prefix: ...riga. Tuttavia, come ha sottolineato Alex nei commenti, a conda non sembra interessare la riga del prefisso durante la creazione di un ambiente da file.

Con questo in mente, se vuoi che l'altro utente non sia a conoscenza del tuo percorso di installazione predefinito, puoi rimuovere la riga del prefisso con grepprima di scrivere in environment.yml.

conda env export | grep -v "^prefix: " > environment.yml

In ogni caso, l'altro utente esegue quindi:

conda env create -f environment.yml

e l'ambiente verrà installato nel percorso dell'ambiente conda predefinito.

Se vuoi specificare un percorso di installazione diverso da quello predefinito per il tuo sistema (non correlato a 'prefix' in environment.yml), usa semplicemente il -pflag seguito dal percorso richiesto.

conda env create -f environment.yml -p /home/user/anaconda3/envs/env_name

Si noti che Conda consiglia di creare environment.ymlmanualmente, il che è particolarmente importante se si desidera condividere il proprio ambiente tra piattaforme (Windows / Linux / Mac). In questo caso, puoi semplicemente tralasciare la prefixlinea.


1
... Eggcellent! 👍
Tonno Ahi

44

Il modo più semplice per salvare i pacchetti da un ambiente da installare in un altro computer è:

$ conda list -e > req.txt

quindi puoi installare l'ambiente usando

$ conda create -n new environment --file req.txt

se si utilizza pip, utilizzare i seguenti comandi: fare riferimento a https://pip.pypa.io/en/stable/reference/pip_freeze/

$ env1/bin/pip freeze > requirements.txt
$ env2/bin/pip install -r requirements.txt

Bello, ma non sembra funzionare con i pacchetti installati da pip, comunque.
Little Bobby Tables

1
grazie ho appena aggiornato in base al riferimento fornito
javac

Ho usato sia Anaconda Navigator che pip (dall'interno dell'ambiente) per installare le cose. Cosa consiglieresti di usare? Entrambi i comandi?
DA

Penso che sia meglio usare il comando conda in ambiente Anaconda, puoi anche usare pip se necessario
javac

9
  • Linux

    conda env export --no-builds | grep -v "prefisso"> environment.yml

  • finestre

    conda env export --no-builds | findstr -v "prefisso"> environment.yml


Motivazione: per impostazione predefinita, conda env exportinclude le informazioni sulla build:

$ conda env export
...
dependencies:
  - backcall=0.1.0=py37_0
  - blas=1.0=mkl
  - boto=2.49.0=py_0
...

Puoi invece esportare il tuo ambiente senza informazioni sulla build:

$ conda env export --no-builds
...
dependencies:
  - backcall=0.1.0
  - blas=1.0
  - boto=2.49.0
...

Ciò svincola l'ambiente dalla versione e dal sistema operativo di Python.


1
Sono d'accordo che questa sia una buona risposta, ma considera l'aggiunta di alcuni dettagli sul motivo per cui l'esclusione delle informazioni sulla build è utile per il trasferimento di env tra piattaforme.
merv

Ho finito per usarlo, ma ottima idea @merv. Ha fatto proprio questo.
François Leblanc,

Sfortunatamente, questo non funzionerà sempre durante l'installazione dell'esportazione e della reinstallazione su un sistema operativo diverso.
Sören

2

Trovo che esportare i pacchetti solo in formato stringa sia più portabile che esportare l'intero condaambiente. Come già suggerito dalla risposta precedente:

$ conda list -e > requirements.txt

Tuttavia, questo requirements.txtcontiene numeri di build che non sono portabili tra i sistemi operativi, ad esempio tra Mace Ubuntu. In conda env exportabbiamo l'opzione --no-buildsma non con conda list -e, quindi possiamo rimuovere il numero di build emettendo il seguente comando:

$ sed -i -E "s/^(.*\=.*)(\=.*)/\1/" requirements.txt 

E ricrea l'ambiente su un altro computer:

conda create -n recreated_env --file requirements.txt 

sedil comando ha funzionato abbastanza bene. Ho dovuto eliminare una versione della patch. Così major.minor.patchad major.minore ha funzionato. Si è scoperto che il numero di patch inferiore era stato eliminato dai repository principali.
Lucas

1
  1. Per prima cosa attiva il tuo ambiente conda (quello che vuoi esportare / eseguire il backup)
conda activate myEnv
  1. Esporta tutti i pacchetti in un file (myEnvBkp.txt)
conda list --explicit > myEnvBkp.txt
  1. Ripristina / importa l'ambiente:
conda create --name myEnvRestored --file myEnvBkp.txt
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.