1 2021-11-22: Tools

Development tools:

  • pipx: installeer commandline Python programma’s

  • black: formateer Python broncode

  • isort: sorteer imports

  • flake8: “linter”

  • pylint: “linter”

  • poetry: vergemakkelijk gebruik van virtual environments en packaging

1.1 Intro

We gebruiken bestanden in de prog4-exercises repository om de tools te leren gebruiken.

1.1.1 Opgave

Update je GIT-fork van prog4-exercises.

1.2 pipx

pipx laat toe om Python commandline programma’s makkelijk te gebruiken vanuit een commandoprompt venster.

1.2.1 Opgave

Installeer pipx met:

python3 -m pip install --user pipx
python3 -m pipx ensurepath

Zie de pipx website op https://pypa.github.io/pipx/.

1.3 PEP8 (style guide)

Voor vele programmeertalen bestaan er documenten die aangeven hoe je je code best formateert. Zulke documenten noemt men ‘style guides’. Deze hebben geen betrekking op de werking van de code, maar op het uitzicht ervan (en dus de leesbaarheid).

PEP 8: is de styleguide voor Python. In dit document wordt bijvoorbeeld aangegeven dat je:

  • best spaties gebruikt om indentatie aan te geven

  • dat je per 4 spaties dient te werken

  • dat je best maximaal 79 letter op 1 regel gebruikt

  • hoe je whitespace best gebruikt

  • dat je best de volgende namen voor variabelen vermijdt: l, O, I (anekdote)

Er bestaan een aantal tools die je hiermee helpen. flake8 is een tool die je mogelijke problemen aangeeft. black is een tool die zorgt dat je source code automatisch aan PEP8 voldoet.

De volledige PEP8 style guide vind je op: https://www.python.org/dev/peps/pep-0008/

1.4 flake8

Gegeven een bestand main.py:

1import math
2
3
4
5
6def   kwadraat( x ) :
7    y   = 1
8    return x** 2

Geeft flake8 volgende waarschuwingen:

main.py:6:1: E303 too many blank lines (4)
main.py:6:4: E271 multiple spaces after keyword
main.py:6:16: E201 whitespace after '('
main.py:6:18: E202 whitespace before ')'
main.py:6:20: E203 whitespace before ':'
main.py:7:5: F841 local variable 'y' is assigned to but never used
main.py:7:6: E221 multiple spaces before operator
main.py:8:13: E225 missing whitespace around operator

1.4.1 Opgave

Installeer flake8 met behulp van pipx. Analyseer de code van part_style.py in prog4-exercises met flake8.

Tip

This is a note admonition.

Als je het flake8 commando niet kan opstarten vanuit je commandoprompt, controlleer dan of het pad naar je %USERPROFILE%/.local/bin in je Windows PATH variabele zit. Je kan je Windows PATH variabele bekijken via het volgende commando in een commandoprompt venster:

echo %PATH%

Om de PATH variabele aan te passen kan je volgende instructies volgen: https://www.java.com/en/download/help/path.html

1.5 black

Gegeven volgende code:

import      math

v    =  1

def    kwadraat (  x)  :
    return       x    **  2
    

Na het commando:

black mijncode.py

Herformatteert black dit zodat het resultaat er als volgt uitziet:

import math

v = 1


def kwadraat(x):
    return x ** 2

1.5.1 Opgave

Installeer black met behulp van pipx. Formateer de broncode van part_style.py met black.

1.6 isort

Gegeven de volgende code:

import sys

import              csv

import math




import   pygame


import    sys

Maakt isort hier het volgende van:

import csv
import math
import sys

import pygame

De imports worden gegroepeerd en vervolgens alfabetisch gesorteerd: Eerst komen alle imports van modules die in de standaardbibliotheek van Python zitten. Vervolgens een wit-regel en dan de andere imports.

1.6.1 Opgave

Installeer black met behulp van pipx. Sorteer de imports van part_style.py met isort.

1.7 poetry

Het installeren en up-to-date houden van Python packages, en het beheren van virtual environments wordt door velen als onpraktisch gezien.

Er werden dan ook een aantal systemen ontwikkeld om deze handelingen te vereenvoudigen:

  • pipenv

  • poetry

  • pyflow

  • PDM

pipenv en poetry zijn de populairste hiervan.

Installeer poetry met behulp van pipx.

Maak een nieuw project aan met poetry:

poetry new mijnproject

poetry add pygame
poetry add -D pytest

1.8 Documentatie

Commentaar kan je in Python ingeven door de tekst vooraf te laten gaan door het “#” teken:

# Dit is commentaar
v = "hello world"

Dit is o.a. bijzonder nuttig om aan te geven wat er in de code gedaan wordt:

# Gebruik stelling van Pythagoras om schuine zijde te berekenen
c = math.sqrt(a**2 + b**2)

1.9 Docstrings

Een docstring is een string die als eerste regel in een module, functie, klasse of methode geschreven wordt. Deze string wordt dan als de omschrijving voor die module, functie, klasse of methode gebruikt. Bijvoorbeeld:

def kwadraat(x):
    """Geef het kwadraat van x terug"""
    return x**2

def bmi(g, l):
    """Geef het BMI voor een gewicht g in kilogram en lengte l in meter"""
    return g/l**2