Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| courses:mldl:lab1 [2025/09/10 10:04] – admin | courses:mldl:lab1 [2025/10/08 09:01] (current) – [PyPi (Python Package Index)] drobiu | ||
|---|---|---|---|
| Line 117: | Line 117: | ||
| 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 **wpdm** | - Utwórz środowisko condy z Pythonem w wersji 3.8 o nazwie **wpdm** | ||
| Line 127: | Line 128: | ||
| - Usuń środowisko **wpdm** | - 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:// | ||