Środowisko Python dla przykładów

Materiał przygotowany z pomocą AI

Wszystkie bloki kodu Pythona w bazie wiedzy (m.in. Python - podstawy, SQL - podstawy, Praca z rastrami w Pythonie, Testowanie kodu w Pythonie, Badanie jednorodności przepływów w Pythonie) są wykonywane w jednym wspólnym środowisku o zafiksowanych wersjach pakietów. Dzięki temu każdy może odtworzyć je u siebie i uzyskać identyczne wyniki — bez “u mnie działa”.

Środowisko jest opisane dwoma plikami dostępnymi do pobrania ze strony:

  • requirements.txt — pełna lista pakietów z dokładnymi wersjami (efekt pip freeze), włącznie z zależnościami tranzytywnymi
  • python-version — wersja interpretera (3.12.12); zapisywany jako .python-version (z kropką), respektowany przez pyenv

Oba leżą w sekcji Pliki narzędziowe razem z wodowskazy.csv.

Wymagania

Dla użytkowników Windows: pyenv-win lub Python z python.org i py -3.12 -m venv .venv.

Krok po kroku

# 1. Wybierz dowolny katalog roboczy i wejdz do niego
mkdir -p ~/python-debever-przyklady && cd ~/python-debever-przyklady
 
# 2. Pobierz oba pliki (uwaga - `python-version` zapisujemy z kropka)
curl -O https://debever.pl/tools/requirements.txt
curl -o .python-version https://debever.pl/tools/python-version
 
# 3. Upewnij sie, ze pyenv ma 3.12.12 (instalacja jesli brak)
pyenv install --skip-existing 3.12.12
 
# 4. Stworz srodowisko wirtualne - pyenv automatycznie wybierze 3.12.12
#    z .python-version w tym katalogu
python -m venv .venv
 
# 5. Aktywuj
source .venv/bin/activate         # macOS / Linux
# .venv\Scripts\activate           # Windows PowerShell
 
# 6. Zainstaluj zaleznosci
pip install -r requirements.txt

Po ostatniej komendzie środowisko jest gotowe. python i pip w aktywowanym shellu wskazują na .venv/, a wersje pakietów odpowiadają tym z requirements.txt.

Sprawdzenie poprawności

Krótki test:

python -c "import numpy, scipy, rasterio, xarray, rioxarray, matplotlib, pytest, requests, coverage, pymannkendall, imgwtools; print('OK')"

Komenda powinna wypisać OK. Jeśli któryś moduł się nie importuje — venv nie został aktywowany albo pip install zakończył się błędem.

Uruchamianie kodu z artykułów

Po aktywacji .venv można:

  • Wkleić blok kodu do REPL (python) i wykonać linia po linii
  • Zapisać blok kodu jako .py i uruchomić: python skrypt.py
  • Otworzyć Jupyter / IPython (jeśli zainstalowane osobno) i wykonać blok jako komórkę

Dla artykułu Praca z rastrami w Pythonie pełny przykład tworzy pliki /tmp/dem.tif, /tmp/landcover.tif, /tmp/slope.tif, /tmp/stream.tif. Można je otworzyć w QGIS lub odczytać z powrotem rasterio/rioxarray.

Pakiety bezpośrednie

Większość pozycji w requirements.txt to zależności tranzytywne (affine od rasterio, pillow od matplotlib itd.). Bezpośrednio instalujemy tylko:

PakietW których artykułach
numpywszystkie z obliczeniami numerycznymi
rasterioPraca z rastrami w Pythonie, Testowanie kodu w Pythonie — I/O GeoTIFF
xarrayPraca z rastrami w Pythonie — etykietowane osie, NetCDF
rioxarrayPraca z rastrami w Pythonie — most xarray ↔ rasterio
matplotlibwizualizacje (heatmapy, hipsogramy, podglądy rastrów)
pytestPython - podstawy, Testowanie kodu w Pythonie — framework testowy
pytest-covTestowanie kodu w Pythonie — integracja pytest z coverage.py
coverageTestowanie kodu w Pythonie — code coverage, raporty
requestsTestowanie kodu w Pythonie — przykłady mockowania HTTP
scipyBadanie jednorodności przepływów w Pythonie — testy statystyczne (kruskal, spearmanr, rankdata)
pymannkendallBadanie jednorodności przepływów w Pythonie — test Manna-Kendalla i warianty
imgwtoolsBadanie jednorodności przepływów w Pythonie, IMGWTools — pobieranie danych IMGW

sqlite3 z SQL - podstawy jest częścią standardowej biblioteki Pythona — nie wymaga pip install.

Reset środowiska

Jeśli coś się zepsuje, najszybciej zacząć od zera:

deactivate                 # jesli venv aktywny
rm -rf .venv               # usun cale srodowisko
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Dlaczego pinowanie wszystkich wersji

requirements.txt zawiera wszystkie pakiety (bezpośrednie + tranzytywne) z dokładnymi wersjami (==), nie zakresami (>=). To celowe:

  • Odtwarzalność — każda osoba pobierająca plik ze strony dostaje identyczny zestaw wersji. Bloki kodu w artykułach dają identyczne wyniki
  • Ochrona przed regresjami — zmiana wersji biblioteki (np. numpy 2.4 → 3.0) może subtelnie zmienić wyniki obliczeń lub API. Pin chroni przed tym
  • Pewność, co się instaluje — pip install -r requirements.txt pokazuje wszystkie wersje (łącznie z tranzytywnymi); nie ma niespodzianek z “rozwiązanym” zakresem >=

Przeciwieństwem byłby plik typu numpy>=2.0, który dla każdej osoby instalującej mógłby dać inną wersję — i być może inne wyniki.

Aktualizacja środowiska

Gdy dochodzi nowy pakiet:

source .venv/bin/activate
pip install <nowy-pakiet>
pip freeze > requirements.txt

Zobacz także