Merge pull request '10. DVC' (#15) from tzietkiewicz/aitech-ium:master into master

Reviewed-on: AITech/aitech-ium#15
This commit is contained in:
Tomasz Zietkiewicz 2021-05-31 11:56:23 +02:00
commit 16d6be573c
4 changed files with 1822 additions and 114 deletions

View File

@ -285,7 +285,7 @@
}
},
"source": [
"## Zadanie [20 pkt.]\n",
"## Zadanie [22 pkt.]\n",
"\n",
"Termin: 2 tygodnie (25 IV)\n",
"\n",
@ -321,7 +321,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
"version": "3.9.1"
},
"toc": {
"base_numbering": 1,

View File

@ -3,7 +3,11 @@
{
"cell_type": "markdown",
"id": "be5ab2df",
"metadata": {},
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Środowiska wirtualne"
]
@ -11,7 +15,11 @@
{
"cell_type": "markdown",
"id": "cf14c577",
"metadata": {},
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Python Virtual Env\n",
" - Python posiada wbudowany mechanizm do zarządzania wirtualnymi środowiskami\n",
@ -23,16 +31,24 @@
},
{
"cell_type": "markdown",
"id": "182bbf83",
"metadata": {},
"id": "85284459",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Poniżej stworzymy środowisko w katalogu `./myenv`:"
]
},
{
"cell_type": "markdown",
"id": "69d39a9e",
"metadata": {},
"id": "9cabe194",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"```\n",
"$ python3 -m venv myenv\n",
@ -41,16 +57,24 @@
},
{
"cell_type": "markdown",
"id": "47a4bf00",
"metadata": {},
"id": "2a8b1048",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Teraz możemy je aktywować:"
]
},
{
"cell_type": "markdown",
"id": "cf54cb09",
"metadata": {},
"id": "4619a71d",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"```\n",
"$ source ./myenv/bin/activate\n",
@ -61,16 +85,24 @@
},
{
"cell_type": "markdown",
"id": "bdafb824",
"metadata": {},
"id": "2e5bf86a",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"I modyfikować instalując zależności:"
]
},
{
"cell_type": "markdown",
"id": "399a8b45",
"metadata": {},
"id": "256149c4",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"```\n",
"(myenv) $ python3 -m pip install requests\n",
@ -79,16 +111,24 @@
},
{
"cell_type": "markdown",
"id": "efde93a2",
"metadata": {},
"id": "7fbba7d3",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Środowisko możemy deaktywować poprzez:"
]
},
{
"cell_type": "markdown",
"id": "838c5ebd",
"metadata": {},
"id": "a2d688b7",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"```\n",
"deactivate\n",
@ -97,16 +137,37 @@
},
{
"cell_type": "markdown",
"id": "0557e0c8",
"metadata": {},
"id": "0d3eb6d4",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Środowisko można udostępnić kopiując cały katalog ze środowiskiem"
]
},
{
"cell_type": "markdown",
"id": "26f253cb",
"id": "90605b49",
"metadata": {},
"source": [
"## pipx\n",
" - pipx: polecenie, które instaluje moduł Pythonowy w odrębnym środowisku wirtualnym venv\n",
" - jednocześnie dodaje powiązane z nim polecenie (\"Command line entry point\") do zmiennej `PATH`\n",
" - w ten sposób możemy zainstalować polecenie, które będzie globalnie dostępne a jednocześnie nie będzie \"mieszało\" w zależnościach modułów Pythonowych. Umożliwia to uniknięcie konfliktów między zależnościami i jednocześnie umożliwia dostęp do polecenia oferowanego przez moduł z poziomu systemu (bez ręcznej aktywacji środowiska)\n",
" - więcej informacji: https://packaging.python.org/guides/installing-stand-alone-command-line-tools/\n",
" - https://github.com/pypa/pipx"
]
},
{
"cell_type": "markdown",
"id": "26f253cb",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Conda\n",
"> *Package, dependency and environment management for any language—Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, FORTRAN, and more.*\n",
@ -122,15 +183,19 @@
"Różnice między Conda a venv [źródło](https://docs.conda.io/projects/conda/en/latest/user-guide/concepts/environments.html#virtual-environments):\n",
" - Dowolna wersja Python w Conda (inna niż systemowa)\n",
" - Conda zarządza też zależnościami innymi niż Pythonowe\n",
" - Paczki w PyPI (używane przez P"
" - Paczki w PyPI (używane przez `pip`) pochodzą od ich autorów. Paczki w conda są  budowane przez conda albo społeczność conda-forge"
]
},
{
"cell_type": "markdown",
"id": "57f19a08",
"metadata": {},
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Dystrybucje: Anaconda i Conda\n",
"## Dystrybucje: Anaconda i MiniConda\n",
"Conda jest dostępna w dwóch dystrybcjach:\n",
" - [Miniconda](https://docs.conda.io/en/latest/miniconda.html):\n",
" - wymaga 400 MB miejsca na dysku\n",
@ -149,8 +214,12 @@
},
{
"cell_type": "markdown",
"id": "b199274c",
"metadata": {},
"id": "d6d5156a",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Dystrybucje\n",
" - Wersje paczek/bibliotek zawartych w danej dystrybucji są przetestowane pod względem zgodności ze sobą\n",
@ -162,8 +231,12 @@
},
{
"cell_type": "markdown",
"id": "b1d8c391",
"metadata": {},
"id": "61d89bd2",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"```\n",
"$ conda update conda\n",
@ -253,7 +326,11 @@
{
"cell_type": "markdown",
"id": "1c7b2930",
"metadata": {},
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Instalacja\n",
"Instrukcje: \n",
@ -264,8 +341,12 @@
},
{
"cell_type": "markdown",
"id": "3edc108c",
"metadata": {},
"id": "0ceff229",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Pakiety Conda\n",
"Pakiet (Package) conda to archiwum o rozszerzeniu `.tar.bz2` lub `.conda`zawierające:\n",
@ -285,8 +366,12 @@
},
{
"cell_type": "markdown",
"id": "3094ba52",
"metadata": {},
"id": "f54f3bdb",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Repozytoria i kanały\n",
"- Pakiety mogą być ściągane z różnych kanałów (\"channels\")\n",
@ -298,8 +383,12 @@
},
{
"cell_type": "markdown",
"id": "8c045d64",
"metadata": {},
"id": "5ab846d0",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Na przykład, pakiet `mlflow` nie jest dostępny na oficjalnym kanale:"
]
@ -307,8 +396,12 @@
{
"cell_type": "code",
"execution_count": 6,
"id": "9d72552f",
"metadata": {},
"id": "f301bdf7",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
@ -347,8 +440,12 @@
},
{
"cell_type": "markdown",
"id": "123b3e4e",
"metadata": {},
"id": "ea36f2cd",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Do poleceń `search` i `install` możemy dodać flagę `channel` co doda podany kanał do listy przeszukiwanych przez to polecenie kanałów:"
]
@ -356,8 +453,12 @@
{
"cell_type": "code",
"execution_count": 7,
"id": "d55a2d84",
"metadata": {},
"id": "61911bf5",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
@ -475,8 +576,12 @@
},
{
"cell_type": "markdown",
"id": "a4994ed6",
"metadata": {},
"id": "c7cea2c5",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Możemy dodać kanał `conda-forge` tak, żeby był używany automatycznie (bez podawania flagi `channel`):"
]
@ -484,8 +589,12 @@
{
"cell_type": "code",
"execution_count": 11,
"id": "0f93ee82",
"metadata": {},
"id": "df31755c",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
@ -503,8 +612,12 @@
},
{
"cell_type": "markdown",
"id": "85d7014f",
"metadata": {},
"id": "33b4d692",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Polecanie `conda info` pokaże nam m.in. używane domyślnie kanały.\n",
"Możem dodawać i usuwać kanały oraz zmieniać ich kolejność (priorytet) edytując plik [`~/.condarc`](https://conda.io/projects/conda/en/latest/user-guide/configuration/use-condarc.html)"
@ -513,8 +626,12 @@
{
"cell_type": "code",
"execution_count": 10,
"id": "e57a28b9",
"metadata": {},
"id": "b5621afa",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
@ -564,8 +681,12 @@
},
{
"cell_type": "markdown",
"id": "9e67e25c",
"metadata": {},
"id": "cb1df295",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Jak widać, po dodaniu kanału `conda-forge`, pakiet `mlflow` zostaje znaleziony:"
]
@ -573,8 +694,12 @@
{
"cell_type": "code",
"execution_count": 9,
"id": "56e51ade",
"metadata": {},
"id": "92b5da5b",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
@ -692,8 +817,12 @@
},
{
"cell_type": "markdown",
"id": "327015c2",
"metadata": {},
"id": "7ab96758",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\n",
"## Środowiska (Environments)\n",
@ -706,8 +835,12 @@
},
{
"cell_type": "markdown",
"id": "0ef28a62",
"metadata": {},
"id": "5c57462d",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Wyświetlanie listy środowisk:"
]
@ -715,8 +848,12 @@
{
"cell_type": "code",
"execution_count": 12,
"id": "2865a5cf",
"metadata": {},
"id": "638002cd",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
@ -741,8 +878,12 @@
},
{
"cell_type": "markdown",
"id": "c710e400",
"metadata": {},
"id": "e7e40897",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Tworzenie środowiska\n",
"Środowisko można utworzyć i skonfigurować interaktywnie, lub z pliku `*.yml`"
@ -751,8 +892,12 @@
{
"cell_type": "code",
"execution_count": 14,
"id": "8cd7d3f0",
"metadata": {},
"id": "0373de68",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
@ -790,8 +935,12 @@
},
{
"cell_type": "markdown",
"id": "843c0104",
"metadata": {},
"id": "c8688ba6",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Aktywacja środowiska\n",
" - Żeby zmodyfikować środowisko albo zacząć z niego korzystać, musimy je aktywować.\n",
@ -801,8 +950,12 @@
},
{
"cell_type": "markdown",
"id": "a6adf414",
"metadata": {},
"id": "767f03e6",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"```\n",
"$ conda activate hello_env\n",
@ -813,8 +966,12 @@
},
{
"cell_type": "markdown",
"id": "8457c95e",
"metadata": {},
"id": "245e64be",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Domyślnie wersja pythona będzie taka sama jak systemowa.\n",
"Żeby deaktywować środowisko, używamy `conda deactivate`:"
@ -822,8 +979,12 @@
},
{
"cell_type": "markdown",
"id": "e3175dc3",
"metadata": {},
"id": "261f9aab",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"```\n",
"$ conda deactivate\n",
@ -834,8 +995,12 @@
},
{
"cell_type": "markdown",
"id": "753ff7e5",
"metadata": {},
"id": "980c295c",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Modyfikowanie środowiska\n",
"Jeśli chcemy stworzyc środowisko z inną wersją niż systemowa:"
@ -844,8 +1009,12 @@
{
"cell_type": "code",
"execution_count": 22,
"id": "5b5b0ca0",
"metadata": {},
"id": "ccaadc75",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
@ -956,16 +1125,24 @@
},
{
"cell_type": "markdown",
"id": "a3350d71",
"metadata": {},
"id": "68bcd671",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Rzeczywiście, stworzone środowisko ma wersję Pythona z linii 3.9:"
]
},
{
"cell_type": "markdown",
"id": "ee072a93",
"metadata": {},
"id": "db3311c4",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"```\n",
"$ conda activate myenv\n",
@ -976,8 +1153,12 @@
},
{
"cell_type": "markdown",
"id": "89d443aa",
"metadata": {},
"id": "10b5cf2e",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Tak samo, przy tworzeniu środowiska możemy podać inne zależności wraz z ich wersjami:"
]
@ -985,8 +1166,12 @@
{
"cell_type": "code",
"execution_count": 25,
"id": "402c122e",
"metadata": {},
"id": "dd2eefc5",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
@ -1246,16 +1431,24 @@
},
{
"cell_type": "markdown",
"id": "4f9b7b29",
"metadata": {},
"id": "d8417e18",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Możemy podać jakie pakiety i w jakich wersjach mają być domyślnie dodawane do nowo tworzonych środowisk za pomocą sekcji [create_default_package](https://conda.io/projects/conda/en/latest/user-guide/configuration/use-condarc.html#config-add-default-pkgs) w pliku [`~/.condarc`](https://conda.io/projects/conda/en/latest/user-guide/configuration/use-condarc.html)"
]
},
{
"cell_type": "markdown",
"id": "50346792",
"metadata": {},
"id": "7a2adbfa",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"```\n",
"create_default_packages:\n",
@ -1267,8 +1460,12 @@
},
{
"cell_type": "markdown",
"id": "01a9ea21",
"metadata": {},
"id": "68c9045a",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Doinstalowanie nowych pakietów może odbyć się poprzez:\n",
" - `conda install mlflow` - wywołane w aktywowanym środowisku\n",
@ -1278,8 +1475,12 @@
},
{
"cell_type": "markdown",
"id": "7ec5430e",
"metadata": {},
"id": "a6c3ee99",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### Klonowanie środowiska\n",
"Istniejące środowisko można skopiować:"
@ -1288,8 +1489,12 @@
{
"cell_type": "code",
"execution_count": null,
"id": "18f72668",
"metadata": {},
"id": "4363044b",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"conda create --name myclone --clone myenv\n"
@ -1297,8 +1502,12 @@
},
{
"cell_type": "markdown",
"id": "3bcaf2e6",
"metadata": {},
"id": "856b631d",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Eksportowanie środowisk\n",
"- Definicję środowiska można wyeksportować do pliku `*.yml`, który może potem posłużyć do jego odtworzenia\n",
@ -1308,8 +1517,12 @@
{
"cell_type": "code",
"execution_count": 26,
"id": "f901b34b",
"metadata": {},
"id": "3f497efb",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
@ -1354,8 +1567,12 @@
},
{
"cell_type": "markdown",
"id": "c9fb78ca",
"metadata": {},
"id": "69054adb",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Normalnie, zapisalibyśmy wyni eksportu do pliku:"
]
@ -1363,8 +1580,12 @@
{
"cell_type": "code",
"execution_count": 31,
"id": "048760fd",
"metadata": {},
"id": "08bb0906",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
@ -1381,8 +1602,12 @@
},
{
"cell_type": "markdown",
"id": "7e3c1e11",
"metadata": {},
"id": "8d0fd480",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### Eksport między systemami\n",
" - Jeśli chcemy zapeniwć, że nasze środowisko będzie można odtworzyć na innym systemie, musimy uyżyć flagi `--from-history`\n",
@ -1392,8 +1617,12 @@
{
"cell_type": "code",
"execution_count": 29,
"id": "43fcb023",
"metadata": {},
"id": "9bfbf736",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
@ -1421,8 +1650,12 @@
},
{
"cell_type": "markdown",
"id": "9b67fddd",
"metadata": {},
"id": "52965351",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Tworzenie środowiska z pliku `*.yml`\n",
"Mając plik `*.yml` wyeksportowany za pomocą `conda env export` albo stworzony/zmodyfikowane [ręcznie](https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#create-env-file-manually), możemy utworzyć na jego podstawie środowisko:"
@ -1431,8 +1664,12 @@
{
"cell_type": "code",
"execution_count": 32,
"id": "4a4ce330",
"metadata": {},
"id": "efe7bcd9",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
@ -1463,10 +1700,14 @@
},
{
"cell_type": "markdown",
"id": "f37e7aa7",
"metadata": {},
"id": "b88eb07c",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Zadania\n",
"## Zadania [10pkt]\n",
"1. Zainstaluj Anaconda lub Miniconda na swoim komputerze\n",
"2. Stwórz środowisko zawierające wszystkie zależności wymagane przez stworzone na zajęciach skrypty/programy\n",
"3. Wyeksportuj środowisko do pliku `environment.yml` i dodaj ten plik do repozytorium"
@ -1474,6 +1715,7 @@
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3",
"language": "python",

1387
IUM_10.DVC.ipynb Normal file

File diff suppressed because it is too large Load Diff

79
IUM_12.Praca.ipynb Normal file
View File

@ -0,0 +1,79 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "85b20432",
"metadata": {},
"source": [
"# Przegląd rynku pracy"
]
},
{
"cell_type": "markdown",
"id": "69587a1e",
"metadata": {},
"source": [
"## Zadanie\n",
"\n",
"1. Znajdź minimum 6, interesujących dla Ciebie, ogłoszeń o pracę\n",
" - na razie nie zważaj na wymagania\n",
" - szukaj pracy, którą będziesz mógł wykonywać np. po ukończeniu studiów\n",
" - do tego czasu możesz jeszcze sporo się nauczyć\n",
" - nie przejmuj się lokalizacją geograficzną - żyjemy w czasie pracy zdalnej\n",
"\n",
"2. Policz wymagania (zarówno te obowiązkowe jak i mile widziane) z tych ogłoszeń, tak, żeby stworzyć ich listę frekwencyjną, np:\n",
"|wymaganie |liczba ogłoszeń|\n",
"|--------------------|---------------|\n",
"|analityczne myślenie| 6 |\n",
"|git | 5 |\n",
"|Python | 3 |\n",
"|Haskell | 1 |\n",
"\n",
"3. Przygotuj 3-4 slajdy prezentacji, która potrwa około 10 minut. Przedstaw w niej:\n",
" - listę ogłoszeń, które znalazłeś (stanowisko, firma)\n",
" - statystyki dotyczące wymagań (tabelka + wykres)\n",
" - wybierz jedno wymaganie. Najlepiej mniej znane i oczywiste. Jeśli jest to :\n",
" - technologia (biblioteka itp) - opowiedz o niej krótko (do czego służy, jakie ma możliwości itp)\n",
" - umiejętność, dziedzina wiedzy - opowiedz o niej krótko + przedstaw źródło, z którego można się jej nauczyć (książka, kurs, artykuł)\n",
" \n",
" Jeśli znasz jakieś ciekawe technologie/umiejętności, które chciałbyś przedstawić grupie, możesz odwrócić kolejność: poszukaj ogłoszeń, które o nich wspominają.\n",
" \n",
"Jedna osoba z grupy ma zadanie specjalne:\n",
" - nie szuka ogłoszeń\n",
" - zbiera statystyki od reszty grupy i agreguje je (eliminując duplikaty)\n",
" - przygotowuje 2 slajdy przedstawiające statystyki:\n",
" - wymagań (tak jak każdy, ale dla całej grupy)\n",
" - firm będących aautorami ogłoszeń"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1fb3795f",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.1"
}
},
"nbformat": 4,
"nbformat_minor": 5
}