Python: Zarządzanie Pakietami

Zarządzanie pakietami oraz środowiskiem dla języka Python

21 Grudzień 2021

Pracując z Python’em wykorzystuje się wiele różnych pakietów w różnych wersjach. Wiele z tych pakietów działa z konkretnymi wersjami języka bądź wymaga do prawidłowej pracy innych pakietów w ściśle określonych wersjach. Instalując wszystko na pojedynczym komputerze w najlepszym wypadku można doprowadzić do olbrzymiego bałaganu, w najgorszym wszystko przestanie działać.

Rozwiązaniem problemu bałaganu w pakietach jest konfiguracja wielu środowisk pracy dostosowanych do konkretnych potrzeb. Poza chaosem, istnieje więcej przypadków użycia, w których posiadanie dodatkowych środowisk może się przydać:

  • Masz aplikację, która kiedyś działała poprawnie, ale teraz nie daje się jej uruchomić. Może to być spowodowane tym, że jeden z wymaganych pakietów nie jest już kompatybilny z innymi częściami systemu. Możliwym rozwiązaniem tego problemu jest utworzenie nowego środowiska dla Twojej aplikacji, które zawiera wersję Pythona oraz pakiety, które są całkowicie kompatybilne z Twoją aplikacją.
  • Tworzysz system z innymi osobami i chcesz mieć pewność, że Twoja aplikacja działa poprawnie na komputerach innych członków zespołu i odwrotnie. Do tego celu również świetnie nadaje się mechanizm pozwalający tworzyć środowiska w dokładnie takich samych wersjach na komputerach wszystkich uczestników projektu.
  • Dostarczasz aplikację komuś innemu i ponownie chcesz mieć pewność, że będzie ona działa bezproblemowo na jego komputerze. Wykorzystanie wiernej kopii środowiska pozwoli zapewnić zgodność systemu, a co za tym idzie prawidłowe uruchomienie aplikacji.

Środowisko składa się z pewnej wersji Pythona oraz zestawu odpowiednich pakietów. W związku z tym, jeśli chcesz rozwijać lub używać aplikacji z różnymi wymaganiami dotyczącymi różnych wersji Pythona bądź pakietów, powinieneś skonfigurować różne środowiska.

System zarządzania pakietami oraz środowiskiem

Najpopularniejszymi systemami zarządzania jest PIP do zarządzania pakietami oraz virtualenv do zarządzania środowiskiem. Obydwa narzędzia instalowane są razem z Python’em. Alternatywnym rozwiązaniem jest conda pozwalająca jednocześnie zarządzać pakietami oraz środowiskiem. Oba systemy pozwalają w łatwy sposób zapanować nad chaosem jaki może powstać w naszym środowisku.

Conda udostępnia wszystkie niezbędne mechanizmy zarządzania zarówno pakietami jak i środowiskiem. Conda pozwala na szybką i łatwą instalację pakietów oraz ich zależności. Conda używana jako menedżer pakietów pomaga znaleźć oraz zainstalować potrzebne pakiety w repozytoriach Internetowych. Jeśli potrzebujesz pakietu, który wymaga innej wersji Pythona, nie musisz korzystać z innego menedżera środowisk, ponieważ conda jest doskonałym menedżerem środowisk. Za pomocą zaledwie kilku poleceń można skonfigurować całkowicie odrębne środowisko do uruchamiania odpowiedniej wersji Pythona z odrębnym zestawem pakietów, jednocześnie nadal uruchamiając standardową wersję Pythona w domyślnym środowisku.

Instalacja

Menedżer pakietów oraz środowiska conda jest dołączony do wszystkich wersji programów Anaconda i Miniconda. Miniconda dostępna jest w bezpłatnej wersji, natomiast Anaconda występuje w wersji bezpłatnej oraz płatnej (Anaconda Enterprise platform). Jeśli chodzi o główne różnice, to Miniconda wymaga około 400MB miejsca na dysku i zawiera tylko kilka podstawowych pakietów. Natomiast instalator Anacondy wymaga około 3GB miejsca na dysku, i instaluje ponad 150 pakietów, między innymi pakiety do statystyki oraz uczenia maszynowego. Instaluje on również Anaconda Navigator, narzędzie GUI, które pomaga zarządzać środowiskami Conda oraz zainstalowanymi pakietami.

Osobiście preferuję Minicondę, ponieważ zazwyczaj nie potrzebuję większości pakietów, które są domyślnie dołączone do Anacondy. Innym powodem jest to, że zastosowanie Minicondy pozwala mi na płynniejsze powielanie środowiska (na przykład, jeśli chcę go używać także na innym komputerze), ponieważ na obu komputerach instaluję tylko pakiety wymagane przez aplikację nad którą aktualnie pracuje.

Wszystkie trzy wymienione instalatory są dostępne w wersjach dla systemu Linux, Windows oraz macOS. Ponadto do wyboru jest wersja 32 oraz 64 bitowa. Wybór wersji zależy od systemu operacyjnego którego używasz, przy czym polecam wersje 64 bitowe ponieważ jest dla niej dostępne więcej pakietów.

Środowisko Pythona

Niezależnie od tego którą wersję instalacyjną wybierzemy to instalator najpierw instaluje Condę, która - jak już wspomniałem - jest narzędziem do zarządzania pakietami oraz środowiskiem. Następnie Conda tworzy środowisko root, które zawiera dwie rzeczy:

  • aktualną wersję Pythona
  • kilka podstawowych pakietów.

Obok środowiska głównego można utworzyć dowolną liczbę dodatkowych środowisk. Chodzi o to, że te dodatkowe środowiska mogą zawierać różne wersje Pythona oraz innych pakietów.

Struktura katalogów

Conda instaluje się w jednym katalogu. Wewnątrz tego katalogu znajduje się środowisko root oraz katalogi systemu Conda. Z naszego punktu widzenia istotny jest katalog pkgs zawierający zbuforowane pakiety w skompresowanych i nieskompresowanych formatach oraz katalog envs zawierający utworzone i skonfigurowane środowiska.

Funkcje podstawowe

Do sprawdzenie parametrów aktualnie zainstalowanego środowiska conda należy użyć polecenia:

conda info

Informacje zwracane przez to polecenie dotyczą środowiska bazowego root za wyjątkiem nazwy aktywnego środowiska oraz lokalizacji plików aktywnego środowiska. W celu aktualizacji condy oraz środowiska bazowego należy użyć polecenia:

conda update conda

Tworzenie nowego środowiska

Aby utworzyć nowe środowisko o nazwie, na przykład srodowisko_testowe (możesz je nazwać jak chcesz ale pamiętaj, że w nazwach nie można używać znaków specjalnych /, :, # oraz spacji), uruchom:

conda create --name srodowisko_testowe

Utworzone środowisko będzie używać tej samej wersji Pythona, co interpreter Pythona bieżącej powłoki. Aby określić inną wersję Pythona, użyj polecenia:

conda create --name srodowisko_testowe python=3.10

Przełączanie między środowiskami

Wewnątrz nowej instalacji Conda, środowisko root jest ustawione jako domyślne, więc można go używać bez dodatkowej aktywacji. W innych przypadkach, jeśli chcesz używać środowiska, musisz je najpierw aktywować. Do tego celu używamy polecenia:

conda activate srodowisko_testowe 

Katalogi z plikami wykonywalnymi aktywnego środowiska są dodawane do ścieżki systemowej. Możesz opuścić aktywne środowisko przełączając się ponownie do domyślnego środowiska root za pomocą tego polecenia:

conda deactivate

Listowanie dostępnych środowisk

Do wyświetlenia listy dostępnych środowisk należy użyć polecenia:

conda env list

Natomiast do sprawdzenia wersji zainstalowanych pakietów w aktywnym środowisku służy polecenie:

conda list

Usuwanie środowiska

Jeżeli uznamy, że dane środowisko nie będzie nam już potrzebne możemy je usunąć. Usunięcie środowiska zwalnia zasoby dyskowe zajmowane przez wszystkie pakiety danego środowiska. Usunięcie środowiska realizuje polecenie:

conda env remove --name srodowisko_do_usuniecia

Nie można usunąć środowiska bieżącego, dlatego operacje na środowiskach warto przeprowadzać zawsze z poziomu środowiska bazowego root. Nie ma również możliwości usunięcia środowiska root. To środowisko zostanie skasowane podczas deinstalacji condy.

Zestawienie najczęściej używanych komend condy

Na sam koniec zestawienie kilku najczęściej używanych komend condy.

Operacja Polecenie
Sprawdzenie wersji zainstalowanej condy conda info
Aktualizacja condy do najnowszej wersji conda update conda
Utworzenie nowego środowiska dla pythona w wersji 3.10 conda create –name nazwa_srodowiska python=3.10
Aktywacja środowiska conda activate nazwa_srodowiska
Wyświetlenie listy dostępnych środowisk conda env list
Utworzenie kopii środowiska pod inną nazwą conda create –clone nazwa_srodowiska –name nowe_srodowisko
Wyświetlenie pakietów dostępnych w aktywnym środowisku conda list
Zapisanie informacji o środowisku do pliku conda list –explicit > nazwa_srodowiska.txt
Usunięcie środowiska conda env remove –name nazwa_srodowiska_do_usuniecia
Odtworzenie środowiska z pliku conda env create –file nazwa_srodowiska.txt
Wyszukanie pakietu conda search nazwa_pakietu
Instalacja pakietu w aktywnym środowisku conda install nazwa_pakietu
Usunięcie pakietu z aktywnego środowiska conda remove nazwa_pakietu

Tabela 1: Najczęściej używane komendy condy