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;)
Odpowiedzi:
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ą:
I odtwórz go za pomocą:
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ć:
które aktywujesz za pomocą:
źródło
conda create
lubconda env create
udostępnianie / odtwarzanie środowiska. Czy możesz podać dalsze szczegóły, dlaczego zalecamy korzystanieconda env create
w tej sytuacji?conda create
iconda env create
tutaj: groups.google.com/a/continuum.io/forum/#!topic/conda/… To powiedziawszy, myślę, że zwykle możesz ich używać zamiennie.conda create
vsconda env create
) i jakie są wady każdej z nich (np .: „[conda env create
dotyczy] ś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ść?).conda env create -f environment.yml
spowoduje to błąd, ponieważ nazwa virtenv w pliku yml została już użyta. Zmień nazwę na nową virtenv, aby pokonać.conda list --explicit > FILE_NAME
eksportuje pliki binarne dla bieżącej platformy i najwyraźniej nie działa na innej.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.
źródło
Pierwsza konfiguracja środowiska eksportu bieżącego środowiska conda przy użyciu:
przykład:
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:
przykład:
W przypadku, gdy powyższy nie działa (z powodu różnych problemów samej conda), zawsze warto wypróbować następującą odmianę:
źródło
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:
W nowej wersji virtualenv poproś
pip
o zainstalowanie bibliotek z tą samą wersją: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 ).
źródło
anaconda
znacznika 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 ivirtualenv
może wpędzić cię w kłopoty. Jednak przypuszczam, że anakonda powinna oferować równoważne funkcje.Od samego końca tej strony dokumentacji :
Zapisz pakiety do wykorzystania w przyszłości:
Ponownie zainstaluj pakiety z pliku eksportu:
źródło
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
źródło
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
Jednowarstwowy
conda create --clone source_env --name destination_env
źródło