Narzędzia deweloperskie
Utrzymanie jakości kodu
Guideline'y
Istnieje kilka znanych i powszechnie stosowanych guideline'ów, które warto znać i stosować w pythonie:
Autoformatowanie kodu
Do tego celu można użyć narzędzi takich jak:
- black
- autopep8
- yapf
- ruff format
Lintowanie kodu
Lintowanie kodu to sprawdzanie go pod kątem problemów z samym kodem oraz jego zgodności z wybranymi guideline'ami. Może to obejmować takie problemy jak np. nieużywane zmienne, niezgodność z PEP8, błędy składniowe, itp.
Do tego celu można użyć narzędzi takich jak:
- pylint
- flake8
- ruff
W kontekście typowania warto także zwrócić uwagę na zagadnienia związane z typowaniem i adnotacjami typów (link do adnotacji). O ile sam python traktuje adnotacje jedynie jako sugestie i komentarze to możliwe jest sprawdzenie ich poprawnosci z pomocą type checkerów takich jak:
VENV
Venv, czyli wirtualne środowisko pythona, to narzędzie, które pozwala na stworzenie odizolowanego środowiska pythonowego z własnymi pakietami, aby nie zaśmiecać hosta.
Jest to bardzo potrzebne gdy nie chcemy przypadkiem namieszać w naszych już zainstalowanych paczkach pythonowych, a chcemy odpalić jakiś projekt wymagający konkretnych wersji danych pakietów. Dokumentacja
Instalacja dla debianów: sudo apt install python3-venv
.
Tworzenie nowego venva
python3 -m venv /path/to/new/virtual/environment
Aby aktywować venva (czyli odpalić w pythona korzystającego z pakietów w tym venvie) trzeba użyć komendy
Shell | Command to activate virtual environment |
---|---|
bash/zsh | $ source <venv>/bin/activate |
fish | $ source <venv>/bin/activate.fish csh/tcsh $ source <venv>/bin/activate.csh |
PowerShell | $ <venv>/bin/Activate.ps1 |
(Windows)cmd.exe | C:\> <venv>\Scripts\activate.bat |
(Windows)PowerShell | PS C:\> <venv>\Scripts\Activate.ps1 |
Uruchamianie skryptu w trybie interaktywnym
Z poziomu basha:
python -i ./skrypt.py
Z poziomu pythona:
exec(open("./first.py").read())
Dzięki temu po zakończeniu wykonywania nie wyjdziemy ze skryptu i będziemy mogli kontynuować jego pracę używając już zaimportowanych przez niego bibliotek oraz zmiennych, które utworzył.
Użycie modułów z C/C++
Do tego warto użyć bibliotek booosta.
Przykładowy Github Gist zawierający prosty projekt obrazujący działanie: TUTAJ
Implementacje Pythonowe
Warto wiedzieć, że jest wiele implementacji pythona. Najbardziej znaną jest CPython napisany w C.
Ze względu na wydajność warto się zapoznać z:
- PyPy - kompilator typu JIT
- Nuitka link - o ile dobrze rozumiem to taki jakby kompilator pythona
Ze względu na kompatybilność:
- Jython (java)
- IronPython (C#)
Pełna lista implementacji link
Dokumentowanie
Diagramy klas
Do tego można użyć:
- pyreverse - chyba najprostsze (do pobrania z pipa)
pyreverse -o png moje_klasy.py
Debugowanie
pdb
import pdb
pdb.set_trace() #w tej linii skrypt się zatrzyma i będzie można się rozejrzeć
# (Pdb)
zapytania w trybie debuggera :
- w - where (na stosie)
- u -up
- d - down
- c/continue - continue
- args - wyświetla wszystkie argumenty, jakie dana funkcja otrzymała (ta w której obecnie jesteśmy) Poza tym reszta rzeczy odpowiada zwykłemu pisaniu w pythonie, możemy zmieniać zmienne, printować je, uruchamiać pętle etc.
Warto wtedy używać też:
locals()
- ładuje do słownika wszystkie obecnie dostępne funkcje
inspect
import inspect
inspect.getsource(xyz)# wypisuje jak dana funkcja jest napisana
ast
#podobnie jak wyżej
import ast
GDB
/TODO opisać dokładniej
Profilowanie kodu
Profilowanie kodu to sprawdzanie, które fragmenty kodu zajmują najwięcej czasu. Ważny jest tutaj dobór narzędzi do wizualizacji.
VizTracer
VizTracer jest bardzo prostym w użyciu narzędziem.
Generowanie raportu (result.json):
# Instead of "python3 my_script.py arg1 arg2"
viztracer my_script.py arg1 arg2
Podgląd:
vizviewer result.json
Scalene
Scalene jest nieco bardziej szczegółowym narzędziem. pokazuje także użycie pamięci i GPU.
/TODO opisać działanie libki subprocess (czyli jak ogarnąć prawdziwą wielowątkowość w pythonie), oraz uruchamianie procesów.