Jak sklonować środowisko robocze Python na innym komputerze?

26

Opracowałem model uczenia maszynowego za pomocą Pythona (Anaconda + Flask) na mojej stacji roboczej i wszystko idzie dobrze. Później próbowałem wysłać ten program na inną maszynę, na której oczywiście próbowałem skonfigurować to samo środowisko, ale program nie działa. Skopiowałem program na inne maszyny, na których również działa płynnie.

Nie mogę ustalić, na czym polega problem w przypadku awarii (zarówno kod programu, jak i komunikat o błędzie są duże, więc nie jestem w stanie ich tutaj przedstawić), ale jestem prawie pewien, że jest to coś z różnymi wersjami zależności .

Moje pytanie brzmi więc, że biorąc pod uwagę środowisko, w którym pewien program działa dobrze, jak mogę go sklonować do innego, w którym również powinien działać dobrze? Oczywiście bez klonowania całego systemu;)

Hendrik
źródło
Użyj eksportu conda env.
kbrose

Odpowiedzi:

39

Przede wszystkim jest to pytanie Python / Anaconda i prawdopodobnie powinno być zadawane w innej podstronie wymiany stosów.


Jeśli chodzi o samo pytanie - możesz wyeksportować środowisko Anaconda za pomocą:

conda env export > environment.yml

I odtwórz go za pomocą:

conda env create -f environment.yml

Należy pamiętać, że jak sugerowali inni - należy używać środowisk wirtualnych, które umożliwiają tworzenie określonego środowiska, które jest oddzielone od środowiska komputera i łatwiejsze zarządzanie nim.

Aby stworzyć wirtualne środowisko w Anaconda, możesz użyć:

conda create -n yourenvname python=x.x anaconda

które aktywujesz za pomocą:

source activate yourenvname
żarłoczność
źródło
Dokumentacja Anaconda nie jest zbyt jasna, jeśli chodzi o korzystanie z niej conda createlub conda env createudostępnianie / odtwarzanie środowiska. Czy możesz podać dalsze szczegóły, dlaczego zalecamy korzystanie conda env createw tej sytuacji?
Tanguy,
Możesz znaleźć kilka uwag na temat różnicy między conda createi conda env createtutaj: groups.google.com/a/continuum.io/forum/#!topic/conda/… To powiedziawszy, myślę, że zwykle możesz ich używać zamiennie.
ginge
1
Widziałem ten wątek, ale dokładnie staram się dokładnie zrozumieć, w której sytuacji należy wybrać każdą opcję ( conda createvs conda env create) i jakie są wady każdej z nich (np .: „[ conda env createdotyczy] środowisk, w których pakiety korzystające z pip zostały zainstalowane w , co powoduje dodatkową złożoność ”: co to za dodatkowa złożoność?).
Tanguy,
Chcę zapytać, że podczas działania conda env create -f environment.ymlspowoduje to błąd, ponieważ nazwa virtenv w pliku yml została już użyta. Zmień nazwę na nową virtenv, aby pokonać.
Giang Nguyễn
W ten sposób ratujesz swoje życie! jeśli tworzysz środowisko z pliku na podstawie instrukcji strony Anaconda Managing Environments, nie działa, jeśli używasz innej platformy. conda list --explicit > FILE_NAMEeksportuje pliki binarne dla bieżącej platformy i najwyraźniej nie działa na innej.
Shayan Amani
5

Zajrzyj do „kontenerów”, np. Docker ( https://www.docker.com/what-container ), bardziej lekkiej alternatywy dla wirtualizacji.

Będzie to wymagało czasu, ale ostatecznie przyniesie wiele korzyści.

Z linku, gdzie zaznaczyłem twoją konkretną potrzebę pogrubioną kursywą :

Pakuj oprogramowanie w znormalizowane jednostki w celu opracowania, wysyłki i wdrożenia

Obraz kontenera to lekki, samodzielny, wykonywalny pakiet oprogramowania, który zawiera wszystko, co jest potrzebne do jego uruchomienia: kod, środowisko wykonawcze, narzędzia systemowe, biblioteki systemowe, ustawienia. Dostępne w aplikacjach opartych na systemie Linux i Windows oprogramowanie w kontenerze zawsze będzie działać tak samo, niezależnie od środowiska . Kontenery izolują oprogramowanie od otoczenia, na przykład różnice między środowiskiem programistycznym i testowym, i pomagają zmniejszyć konflikty między zespołami zarządzającymi różnymi programami w tej samej infrastrukturze.

Pieter21
źródło
5

Pierwsza konfiguracja środowiska eksportu bieżącego środowiska conda przy użyciu:

conda-env  export -n your_env_name > your_env_name.yml

przykład:

conda-env  export -n base> base.yml

Po uruchomieniu powyższej komendy powinny to być pliki konfiguracyjne yml w bieżącym katalogu, które zawierają informacje o twoim środowisku conda

Aby utworzyć nowe środowisko przy użyciu pliku konfiguracyjnego yml, uruchom:

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

przykład:

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

W przypadku, gdy powyższy nie działa (z powodu różnych problemów samej conda), zawsze warto wypróbować następującą odmianę:

conda-env create --name new_env --file \path\to\base.yml 
Muhammad Umar Amanat
źródło
4

Jeśli twoim programem jest głównie Python, możesz polegać wyłącznie na środowiskach wirtualnych.

Twórz środowiska wirtualne, aby odizolować swoje zależności, zamiast korzystać z bibliotek systemowych. Następnie użyj narzędzi środowiska wirtualnego, aby powielić swoje środowiska.

Na działającym virtualenv utwórz plik z wersją każdej zainstalowanej biblioteki Python:

pip freeze > requirements.txt

W nowej wersji virtualenv poproś pipo zainstalowanie bibliotek z tą samą wersją:

pip install -r requirements.txt

Dzięki temu otrzymujesz te same wersje lib na obu komputerach. Ponieważ wymagania.txt są śledzone przez VCS, zawsze możesz odtworzyć środowisko starej wersji kodu.

Oczywiście, jeśli potrzebujesz bazy danych, produkcyjnego serwera WWW itp., Musisz wykonać jeszcze kilka kroków i nie możesz polegać na virtualenv, aby zapewnić zgodność obu środowisk. Tutaj wkracza Docker (patrz odpowiedź Pieter21 ).

Jérôme
źródło
Nie zauważyłem anacondaznacznika na twoim pytaniu. Nie mam z tym doświadczenia, ale bądź ostrożny. Myślę, że anakonda ma swój własny sposób na zmienianie środowisk i używanie obu anakondy i virtualenvmoże wpędzić cię w kłopoty. Jednak przypuszczam, że anakonda powinna oferować równoważne funkcje.
Jérôme,
1

Od samego końca tej strony dokumentacji :

Zapisz pakiety do wykorzystania w przyszłości:

conda list --export > package-list.txt

Ponownie zainstaluj pakiety z pliku eksportu:

conda create -n myenv --file package-list.txt
Milady
źródło
1

Podsumowanie istniejących sposobów tworzenia środowiska opartego na innym:

  • Klonowanie środowiska :

    • Z istniejącego środowiska:

      $ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME

    • Z wyeksportowanego pliku środowiska na tym samym komputerze:

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

    • Z wyeksportowanego pliku środowiska na innym komputerze:
      $ conda env export > ENV_NAME.yml
      $ conda env create -f ENV_NAME.yml```
      
Shayan Amani
źródło
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
B. niedz.
0

Jednowarstwowy

conda create --clone source_env --name destination_env

salhin
źródło