Tworzenie oddzielnych środowisk wirtualnych dla każdego projektu pozwala na pracę z oprogramowaniem które wymaga różnych wersji pakietów Pythona lub zależności. Dzięki temu rozwiązaniu można uniknąć konfliktów między różnymi wersjami pakietów, co pozwala na sprawniejszą pracę nad różnymi projektami.
Zasadniczo są dwa najpopularniejsze rozwiązania do tworzenia środowisk wirtualnych: conda i venv.
Anaconda dostarcza bardzo zaawansowany system zarządzania pakietami, środowiskami wirtualnymi, ale też całymi środowiskami. Można ją pobrać z Anaconda.
Zarządzanie środowiskami i pakietami możliwe jest z poziomu graficznego interfejsu użytkownika, jednak tutaj skupimy się na korzystaniu z CLI.
conda create --name <nazwa_srodowiska>
conda create --name <nazwa_srodowiska> python=3.8
conda activate <nazwa_srodowiska>
Instalacja pakietów jest możliwa na dwa sposoby:
Instalacja z użyciem condy:
conda install <nazwa_pakietu>
Instalacja z użyciem pip:
conda install pip
pip install <nazwa_pakietu>
conda remove --name <nazwa_srodowiska> --all
pip list --format=freeze > requirements.txt pip install -r requirements.txt
conda env export > environment.yaml conda env create -f environment.yaml
python -m venv nazwa_katalogu
python3.8 -m venv nazwa_katalogu
source nazwa_katalogu/bin/activate
nazwa_katalogu\Scripts\activate.bat
deactivate
pip install numpy
pip list --format=freeze > requirements.txt
pip install -r requirements.txt
Zarówno środowisko Anacondy jak i środowisko venv można podłączyć do PyCharma.
Można również w momencie tworzenia nowego projektu nakazać stworzenie nowego środowiska wirtualnego.
Zazwyczaj w pracy z danymi mamy dużo prototypowania, eksperymentowania, ale finalnie chcemy żeby nasz kod mógł być używany przez innych. Przećwiczymy dwie ścieżki tworzenia takiego oprogramowania.
Dla każdego z poniższych konieczne będzie stworzenie środowiska wirtualnego.
Poniżej specyfikacja dla środowiska:
Utwórz środowisko korzystając z venv lub condy.
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: Repozytorium WPDM
Sklonuj repozytorium z wykorzystaniem CLI lub bezpośrednio z PyCharm i skonfiguruj, aby PyCharm korzystał z wcześniej utworzonego środowiska wirtualnego.
Pracuj nad kodem, rozdzielając część Jupyter Notebooka od części, która potem będzie paczką.
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:
[pypi] username = __token__ password = pypi-<twoj_token_z_pypi> [testpypi] username = __token__ password = pypi-<twoj_token_z_testpypi>
[build-system] requires = ["setuptools>=61.0.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "wpdm" version = "0.1.0" description = "Warsztat Praktyka Data Mining" readme = "README.md" authors = [{ name = "Szymon Bobek", email = "szymon.bobek@gmail.com" }] license = { file = "LICENSE" } classifiers = [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", ] keywords = ["xai", "time-series","explainability", "model-agnostic", "rule-based"] dependencies = ["pandas>=1.4.3", "numpy>=1.22.4", "scikit-learn>=1.1.1", "matplotlib>=3.5.2", "matplotlib-inline>=0.1.3", "seaborn>=0.11.2" ] requires-python = ">=3.8" [project.optional-dependencies] gpu = ["torch>=2.0.1"] [project.urls] Homepage = "https://github.com/sbobek/wpdm" Documentation = "https://wpdm.readthedocs.org" Issues = "https://github.com/sbobek/wpdm/issues"
python -m pip install --upgrade build python -m build
python3 -m pip install --upgrade twine python3 -m twine upload --repository testpypi dist/*
python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps wpdm
twine upload dist/*
Po tej operacji możliwa jest instalacja z wykorzystaniem:
pip install wpdm
pip install wpdm[gpu]
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 ReadTheDocs.
System ten pozwala na automatyczne generowanie dokumentacji i jej hostowanie wprost z repozytorium GitHub.
Kroki:
System po każdym pushu automatycznie wygeneruje i opublikuje dokumentację.
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: nbdev Tutorial