Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| courses:mldl:lab1 [2025/09/10 10:02] – created admin | courses:mldl:lab1 [2025/10/08 09:01] (current) – [PyPi (Python Package Index)] drobiu | ||
|---|---|---|---|
| Line 5: | Line 5: | ||
| ===== Środowiska Anacondy ===== | ===== Środowiska Anacondy ===== | ||
| - | Anaconda dostarcza bardzo zaawansowany system zarządzania pakietami, środowiskami wirtualnymi, | + | Anaconda dostarcza bardzo zaawansowany system zarządzania pakietami, środowiskami wirtualnymi, |
| Zarządzanie środowiskami i pakietami możliwe jest z poziomu graficznego interfejsu użytkownika, | Zarządzanie środowiskami i pakietami możliwe jest z poziomu graficznego interfejsu użytkownika, | ||
| Line 11: | Line 11: | ||
| ==== Tworzenie i aktywowanie środowiska ==== | ==== Tworzenie i aktywowanie środowiska ==== | ||
| * Utworzenie nowego środowiska: | * Utworzenie nowego środowiska: | ||
| - | | + | |
| + | | ||
| + | </ | ||
| * Utworzenie środowiska z konkretną wersją Pythona: | * Utworzenie środowiska z konkretną wersją Pythona: | ||
| - | | + | |
| + | | ||
| + | </ | ||
| * Aktywacja środowiska: | * Aktywacja środowiska: | ||
| - | | + | |
| + | | ||
| + | </ | ||
| ==== Instalacja pakietów w środowisku ==== | ==== Instalacja pakietów w środowisku ==== | ||
| Line 23: | Line 31: | ||
| Instalacja z użyciem condy: | Instalacja z użyciem condy: | ||
| - | `conda install < | + | <code bash> |
| + | conda install < | ||
| + | </ | ||
| Instalacja z użyciem pip: | Instalacja z użyciem pip: | ||
| - | - Zainstaluj pip z wykorzystaniem condy: | + | - Zainstaluj pip z wykorzystaniem condy: |
| - | - Używaj pip jak zawsze: | + | <code bash> |
| + | | ||
| + | </ | ||
| + | |||
| + | - Używaj pip jak zawsze: | ||
| + | <code bash> | ||
| + | | ||
| + | </ | ||
| ==== Usuwanie i migracja środowiska ==== | ==== Usuwanie i migracja środowiska ==== | ||
| * Usunięcie środowiska: | * Usunięcie środowiska: | ||
| - | | + | |
| + | | ||
| + | </ | ||
| * Eksport konfiguracji środowiska: | * Eksport konfiguracji środowiska: | ||
| - | - Do pliku requirements.txt: | + | - Do pliku requirements.txt: |
| - | | + | |
| - | | + | |
| - | `pip install -r requirements.txt` | + | pip install -r requirements.txt |
| - | - Do pliku YAML: | + | </ |
| - | | + | |
| - | | + | - Do pliku YAML: |
| - | `conda env create -f environment.yaml` | + | |
| + | | ||
| + | conda env create -f environment.yaml | ||
| + | </ | ||
| ===== Środowiska venv ===== | ===== Środowiska venv ===== | ||
| ==== Tworzenie i aktywowanie środowiska ==== | ==== Tworzenie i aktywowanie środowiska ==== | ||
| - | * Tworzenie nowego środowiska: | + | * Tworzenie nowego środowiska: |
| - | | + | |
| - | * Tworzenie środowiska z konkretną wersją Pythona: | + | |
| - | | + | </ |
| - | * Aktywacja środowiska (Unix/ | + | |
| - | | + | * Tworzenie środowiska z konkretną wersją Pythona: |
| - | * Aktywacja środowiska (Windows): | + | |
| - | | + | |
| - | * Dezaktywacja środowiska: | + | </ |
| - | | + | |
| + | * Aktywacja środowiska (Unix/ | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | * Aktywacja środowiska (Windows): | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | * Dezaktywacja środowiska: | ||
| + | | ||
| + | | ||
| + | </ | ||
| ==== Instalacja pakietów w środowisku ==== | ==== Instalacja pakietów w środowisku ==== | ||
| - | * Aktywuj środowisko | + | * Aktywuj środowisko |
| - | * Instaluj pakiety z wykorzystaniem pip, np.: | + | * Instaluj pakiety z wykorzystaniem pip, np.: |
| - | | + | |
| + | | ||
| + | </ | ||
| ==== Usuwanie i migracja środowiska ==== | ==== Usuwanie i migracja środowiska ==== | ||
| - | * Usunięcie środowiska: | + | * Usunięcie środowiska: |
| - | | + | * Eksport konfiguracji środowiska: |
| - | * Eksport konfiguracji środowiska: | + | |
| - | | + | |
| - | * Odtworzenie środowiska: | + | </ |
| - | | + | |
| - | | + | * Odtworzenie środowiska: |
| + | | ||
| + | pip install -r requirements.txt | ||
| + | </ | ||
| ==== Podłączenie PyCharm ==== | ==== Podłączenie PyCharm ==== | ||
| Line 74: | Line 116: | ||
| Można również w momencie tworzenia nowego projektu nakazać stworzenie nowego środowiska wirtualnego. | Można również w momencie tworzenia nowego projektu nakazać stworzenie nowego środowiska wirtualnego. | ||
| - | + | {{: | |
| - | {{: | + | |
| ===== Ćwiczenia ===== | ===== Ćwiczenia ===== | ||
| - | - Utwórz środowisko condy z Pythonem w wersji 3.8 o nazwie **mldl** | + | - Utwórz środowisko condy z Pythonem w wersji 3.8 o nazwie **wpdm** |
| - Zainstaluj w nim pakiety (za pomocą pip): | - Zainstaluj w nim pakiety (za pomocą pip): | ||
| * pandas==1.4.3 | * pandas==1.4.3 | ||
| Line 85: | Line 126: | ||
| * numdifftools==0.9.41 | * numdifftools==0.9.41 | ||
| - Wyeksportuj konfigurację środowiska do pliku **yaml** | - Wyeksportuj konfigurację środowiska do pliku **yaml** | ||
| - | - Usuń środowisko **mldl** | + | - Usuń środowisko **wpdm** |
| - Odtwórz je z pliku **yaml** i sprawdź, czy wszystkie pakiety są zainstalowane. | - Odtwórz je z pliku **yaml** i sprawdź, czy wszystkie pakiety są zainstalowane. | ||
| + | |||
| + | |||
| + | ====== Środowisko developerskie ====== | ||
| + | Zazwyczaj w pracy z danymi mamy dużo prototypowania, | ||
| + | |||
| + | ===== Tworzenie oprogramowania, | ||
| + | Dla każdego z poniższych konieczne będzie stworzenie środowiska wirtualnego. | ||
| + | |||
| + | Poniżej specyfikacja dla środowiska: | ||
| + | |||
| + | * pandas> | ||
| + | * numpy> | ||
| + | * scikit-learn> | ||
| + | * matplotlib> | ||
| + | * matplotlib-inline> | ||
| + | * seaborn> | ||
| + | * jupyterlab==4.0.11 | ||
| + | |||
| + | Utwórz środowisko korzystając z **venv** lub **condy**. | ||
| + | |||
| + | ===== GitHub ===== | ||
| + | Utwórz repozytorium na GitHub, lub zrób forka repozytorium z już wstępnie przygotowaną hierarchią i strukturą katalogów, która będzie nam potrzebna potem: | ||
| + | [[https:// | ||
| + | |||
| + | Sklonuj repozytorium z wykorzystaniem CLI lub bezpośrednio z PyCharm i skonfiguruj, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Pracuj nad kodem, rozdzielając część Jupyter Notebooka od części, która potem będzie paczką. | ||
| + | |||
| + | {{: | ||
| + | ===== Ćwiczenia ===== | ||
| + | - Dopisz kilka funkcji do modułu **utils** i sprawdź, czy działa ich import – przetestuj działanie. | ||
| + | - Zmień działanie funkcji **foo** z dodawania na odejmowanie: | ||
| + | * czy modyfikacja jest automatycznie widoczna w JupyterLab? | ||
| + | * co się stanie, jeśli wykomentujesz pierwsze dwie linie i zresetujesz kernel? | ||
| + | |||
| + | ===== PyPi (Python Package Index) ===== | ||
| + | Korzystanie z lokalnie importowanych plików jest wygodne, ale nie sprawdzi się, kiedy będziecie chcieli udostępnić swój kod szerzej publiczności lub wypuścić go jako część otwartego oprogramowania. | ||
| + | |||
| + | Wtedy warto wiedzieć, jak zapakować kod do pakietu instalowanego przez **pip**. | ||
| + | |||
| + | Minimalne kroki: | ||
| + | |||
| + | * Zarejestruj się na [[https:// | ||
| + | * Stwórz plik **.pypirc** w katalogu domowym: | ||
| + | |||
| + | < | ||
| + | [pypi] | ||
| + | username = __token__ | ||
| + | password = pypi-< | ||
| + | |||
| + | [testpypi] | ||
| + | username = __token__ | ||
| + | password = pypi-< | ||
| + | </ | ||
| + | |||
| + | * Stwórz plik **pyproject.toml** (zastępuje dawny setup.py): | ||
| + | |||
| + | < | ||
| + | [build-system] | ||
| + | requires | ||
| + | build-backend = " | ||
| + | |||
| + | [project] | ||
| + | name = " | ||
| + | version = " | ||
| + | description = " | ||
| + | readme = " | ||
| + | authors = [{ name = " | ||
| + | license = { file = " | ||
| + | classifiers = [ | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ] | ||
| + | keywords = [" | ||
| + | dependencies = [" | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ] | ||
| + | requires-python = "> | ||
| + | |||
| + | [project.optional-dependencies] | ||
| + | gpu = [" | ||
| + | |||
| + | [project.urls] | ||
| + | Homepage = " | ||
| + | Documentation = " | ||
| + | Issues = " | ||
| + | </ | ||
| + | |||
| + | * Zbuduj projekt lokalnie i przetestuj jego działanie: | ||
| + | <code bash> | ||
| + | python -m pip install --upgrade build | ||
| + | python -m build | ||
| + | </ | ||
| + | |||
| + | * Opublikuj projekt w TestPyPi: | ||
| + | <code bash> | ||
| + | python3 -m pip install --upgrade twine==6.0.1 | ||
| + | python3 -m twine upload --repository testpypi dist/* | ||
| + | </ | ||
| + | |||
| + | * Przetestuj instalację: | ||
| + | <code bash> | ||
| + | python3 -m pip install --index-url https:// | ||
| + | </ | ||
| + | |||
| + | * Upload na produkcyjny PyPi: | ||
| + | <code bash> | ||
| + | twine upload dist/* | ||
| + | </ | ||
| + | |||
| + | Po tej operacji możliwa jest instalacja z wykorzystaniem: | ||
| + | <code bash> | ||
| + | pip install wpdm | ||
| + | </ | ||
| + | |||
| + | ===== Ćwiczenia ===== | ||
| + | - Wykonaj operacje powyżej i sprawdź, czy uda Ci się wyeksportować pakiet do PyPi. | ||
| + | - Co daje wykonanie: | ||
| + | <code bash> | ||
| + | pip install wpdm[gpu] | ||
| + | </ | ||
| + | |||
| + | ===== ReadTheDocs ===== | ||
| + | Dokumentacja to część kodu równie ważna jak sam kod. Bez niej najczęściej oprogramowanie jest na dłuższą metę nieużywalne. | ||
| + | |||
| + | Jednym z najpopularniejszych serwisów udostępniających dokumentację kodu Python jest [[https:// | ||
| + | |||
| + | System ten pozwala na automatyczne generowanie dokumentacji i jej hostowanie wprost z repozytorium GitHub. | ||
| + | |||
| + | Kroki: | ||
| + | |||
| + | * Zarejestruj się w [[https:// | ||
| + | * Stwórz plik **.readthedocs.yaml** w katalogu głównym projektu (określa konfigurację Sphinx-a i środowisko) | ||
| + | * Stwórz katalog **docs** zawierający: | ||
| + | - **conf.py** (konfiguracja Sphinx-a) | ||
| + | - **index.rst** (strona główna dokumentacji) | ||
| + | - **make.bat** i **Makefile** (opcjonalne) | ||
| + | * Na stronie ReadTheDocs kliknij " | ||
| + | |||
| + | {{: | ||
| + | |||
| + | System po każdym pushu automatycznie wygeneruje i opublikuje dokumentację. | ||
| + | |||
| + | ===== Ćwiczenia ===== | ||
| + | - Dodaj nową funkcję/ | ||
| + | - Dodaj nową stronę w dokumentacji (np. przykłady użycia) | ||
| + | - Posiłkuj się dokumentacją: | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Tworzenie oprogramowania z użyciem nbdev ===== | ||
| + | **nbdev** to narzędzie od fast.ai, które pozwala na wykonywanie wszystkich powyższych czynności bez konieczności pamiętania o strukturze i poleceniach. | ||
| + | |||
| + | Spróbuj przejść tutorial nbdev i wykonać analogiczną pracę jak powyżej: | ||
| + | [[https:// | ||