Tworzenie środowiska z użyciem mamba i conda-lock
Wstęp
W tym przewodniku przejdziemy krok po kroku po tym jak stworzyć i zarządzać środowiskiem wirtualnym przy użyciu mamba i conda-lock. Będziemy bazować na plikach env.yml oraz env-dev.yml, które razem zawierają wszystkie niezbędne zależności dla środowiska deweloperskiego.
Przygotowanie środowiska wirtualnego
Praca w Dockerze
Ponieważ pracujemy w oparciu o moje repozytorium, proszę nie wykonywać kroków oznaczonych ❌. Te kroki zostały już niejako "dostarczone" w ramach moich zmian.
❌ Krok 1: Przygotowanie plików definicji
Co to jest env-dev.yml?
Pliki env.yml oraz env-dev.yml to konfiguracja środowiska, która określa:
- Jakie pakiety Python są potrzebne,
- Z jakich źródeł (channels) pobierać pakiety,
- Jakie wersje pakietów są wymagane.
W przypadku pliku z dev, mamy tam dodatkowe narzędzia deweloperskie, potrzebne tylko przy rozwoju naszego projektu.
Stwórz plik env.yml z następującą zawartością w głównym katalogu projektu:
name: geoapps-env
platforms:
- linux-64
- win-64
- osx-64
- osx-arm64
channels:
- conda-forge
- defaults
dependencies:
- python=3.11
- pip
- numpy
- geopandas >= 1.0
- matplotlib
- scikit-learn
Stwórz plik env-dev.yml z następującą zawartością w głównym katalogu projektu:
name: geoapps-env
category: dev
platforms:
- linux-64
- win-64
- osx-64
- osx-arm64
channels:
- conda-forge
- defaults
dependencies:
- jupyter
- ipykernel
- pytest
Instalowanie poprzez pip
Istnieje także możliwość dodania sekcji instalowanej przez pip w ramach dependencies:
dependencies:
- python=3.11
- pip
- numpy
- pip:
- coverage
- pre-commit < 4.0
❌ Krok 2: Generowanie plików blokady
Najpierw należy się upewnić, że conda-lock jest zainstalowane w środowisku bazowym:
mamba install -c conda-forge conda-lock
Co to jest conda-lock?
conda-lock to narzędzie, które:
- Zapewnia reprodukowalność środowiska,
- Generuje dokładne wersje wszystkich zależności,
- Gwarantuje, że środowisko będzie identyczne na różnych maszynach.
Używając conda-lock, wygeneruj plik blokady dla środowiska deweloperskiego:
conda-lock --mamba -f env.yml -f env-dev.yml --lockfile conda-lock-dev.yml
A także dla środowiska produkcyjnego:
conda-lock --mamba -f env.yml --lockfile conda-lock.yml
✅ Krok 3: Stworzenie środowiska wirtualnego
Stwórz środowisko wirtualne oparte o plik blokady:
conda-lock install --mamba -n geoapps-env conda-lock-dev.yml
Aktywuj stworzone środowisko wirtualne:
mamba activate geoapps-env
✅ Krok 4: Instalacja pakietu lokalnego
Podobnie jak wcześniej, zainstaluj pakiet lokalny w trybie edytowalnym:
pip install -e .
✅ Krok 5: Weryfikacja środowiska
Zweryfikuj czy zainstalowane zostały wymagane biblioteki:
# Lista zainstalowanych pakietów
mamba list
# Sprawdzenie wersji Pythona
python --version
Aktualizacja środowiska wirtualnego
Kiedy aktualizować środowisko?
Aktualizacja jest potrzebna, gdy:
- Potrzebne są nowe biblioteki,
- Występują problemy z bezpieczeństwem,
- Pojawiają się nowe funkcje w bibliotekach,
- Konieczne są poprawki błędów.
- Zmodyfikuj ręcznie odpowiednio plik
env.ymllubenv-dev.yml, - Ponownie wygeneruj odpowiedni plik blokady,
- Aktywuj środowisko bazowe, usuń środowisko wirtualne i stwórz je ponownie na podstawie nowych plików blokady.
Nawet w przypadku pracy w kontenerze, musimy samodzielnie modyfikować pliki z definicją oraz regenerować pliki blokady!
Dobre praktyki
- Zawsze używaj plików blokady - gwarantują one reprodukowalność środowiska,
- Regularnie aktualizuj zależności - ale rób to świadomie i testuj zmiany,
- Używaj mamba zamiast conda - szybsze rozwiązywanie zależności,
- Dokumentuj zmiany - szczególnie przy aktualizacji wersji pakietów,
- Testuj środowisko - po każdej większej zmianie w zależnościach.
Przydatne linki
📝 Zadania
- Dodaj nową zależność
geopandas >= 1.0do plikuenv.yml. - Wygeneruj ponownie pliki blokady dla środowiska deweloperskiego i produkcyjnego.
- Usuń poprzednio stworzone środowisko wirtualne i stwórz je wykorzystując nowe pliki blokady, zainstaluj pakiet lokalny w trybie edytowalnym.