Plik środowiska eksportu Anaconda

129

Jak mogę stworzyć plik środowiska Anaconda, który będzie używany na innych komputerach?

Wyeksportowałem moje środowisko anaconda Python do YML za pomocą conda env export > environment.yml. Wyeksportowany environment.ymlzawiera tę linię, prefix: /home/superdev/miniconda3/envs/juicyenvktóra odwzorowuje lokalizację mojej anakondy, która będzie inna na komputerach innych.

Lau
źródło
7
Właśnie przeprowadzałem testy i pomyślałem, że prefiks jest ignorowany ... nie wiem, dlaczego jest w eksporcie env. Powinieneś być w stanie zrobić conda env create -f environment.yml Tak na marginesie, z mojego doświadczenia wynika, że ​​nie będzie to działać na różnych platformach, ponieważ conda env wyświetli wiele zależności, takich jak `vs2015_runtime`, jeśli używasz systemu Windows. Ale oczywiście nie jest to dostępne w systemie Linux.
Alex G Rice
4
Conda faktycznie zaleca ręczne tworzenie environment.ymlpliku, więc możesz go pominąć - zobacz stackoverflow.com/questions/39280638/ ...
Brian Burns

Odpowiedzi:

178

W condaspecyfikacjach nie mogę znaleźć niczego, co pozwala wyeksportować plik środowiska bez prefix: ...linii. Jednak, jak zauważył Alex w komentarzach, conda wydaje się nie przejmować linią prefiksu podczas tworzenia środowiska z pliku.

Mając to na uwadze, jeśli chcesz, aby inny użytkownik nie wiedział o Twojej domyślnej ścieżce instalacji, możesz usunąć linię przedrostka z grepprzed napisaniem do environment.yml.

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

Tak czy inaczej, drugi użytkownik wykonuje następnie:

conda env create -f environment.yml

a środowisko zostanie zainstalowane w domyślnej ścieżce środowiska Conda.

Jeśli chcesz określić inną ścieżkę instalacji niż domyślna dla twojego systemu (niezwiązana z „prefiksem” w environment.yml), po prostu użyj -pflagi, po której następuje wymagana ścieżka.

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

Zauważ, że Conda zaleca ręczne tworzenie environment.yml, co jest szczególnie ważne, jeśli chcesz udostępniać swoje środowisko na różnych platformach (Windows / Linux / Mac). W takim przypadku możesz po prostu pominąć tę prefixlinię.

Andrew Guy
źródło
1
... wyborne jajka! 👍
Ahi Tuna
44

Najłatwiejszym sposobem zapisania pakietów ze środowiska do zainstalowania na innym komputerze jest:

$ conda list -e > req.txt

następnie możesz zainstalować środowisko za pomocą

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

jeśli używasz pip, użyj następujących poleceń: odniesienie https://pip.pypa.io/en/stable/reference/pip_freeze/

$ env1/bin/pip freeze > requirements.txt
$ env2/bin/pip install -r requirements.txt
javac
źródło
Fajnie, ale wygląda na to, że nie działa z zainstalowanymi pakietami pip.
Little Bobby Tables
1
dziękuję Właśnie zaktualizowałem na podstawie podanego odniesienia
javac
Użyłem zarówno Anaconda Navigatora, jak i pip (z poziomu środowiska), aby zainstalować rzeczy. Co poleciłbyś mi użyć? Oba polecenia?
DA
Myślę, że lepiej jest użyć polecenia conda w środowisku Anaconda, możesz również użyć pip, jeśli jest to potrzebne
javac
9
  • Linux

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

  • Windows

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


Uzasadnienie: domyślnie conda env exportzawiera informacje o kompilacji:

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

Zamiast tego możesz wyeksportować swoje środowisko bez informacji o kompilacji:

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

Co uwalnia środowisko od wersji Pythona i systemu operacyjnego.

Ilyas
źródło
1
Zgadzam się, że to dobra odpowiedź, ale zastanów się nad dodaniem kilku szczegółów, dlaczego wykluczenie informacji o kompilacji jest przydatne do przenoszenia środowisk między platformami.
merv
Skończyło się na tym, ale świetny pomysł @merv. Właśnie to.
François Leblanc
Niestety, nie zawsze to zadziała podczas instalacji eksportu i ponownej instalacji w innym systemie operacyjnym.
Sören
2

Uważam, że eksportowanie pakietów tylko w formacie ciągów jest bardziej przenośne niż eksportowanie całego condaśrodowiska. Jak sugerowała poprzednia odpowiedź:

$ conda list -e > requirements.txt

Jednak ta requirements.txtzawiera numery kompilacji, które nie są przenośne pomiędzy systemami operacyjnymi, na przykład pomiędzy Maci Ubuntu. W conda env exportmamy opcję, --no-buildsale nie z conda list -e, więc możemy usunąć numer kompilacji, wydając następujące polecenie:

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

I odtwórz środowisko na innym komputerze:

conda create -n recreated_env --file requirements.txt 
Nicole Finnie
źródło
sedpolecenie działało całkiem nieźle. Musiałem usunąć wersję łatki. Więc major.minor.patchdo major.minori zadziałało. Okazuje się, że niższy numer poprawki został usunięty przez główne repozytoria.
Lucas
1
  1. Najpierw aktywuj środowisko Conda (to, które chcesz wyeksportować / wykonać kopię zapasową)
conda activate myEnv
  1. Eksportuj wszystkie pakiety do pliku (myEnvBkp.txt)
conda list --explicit > myEnvBkp.txt
  1. Przywróć / zaimportuj środowisko:
conda create --name myEnvRestored --file myEnvBkp.txt
Savrige
źródło