Python-projecten ontwikkelen als een pro met PyScaffold
Ik heb de afgelopen jaren al heel wat Python-projecten ontwikkeld. Elke keer je een nieuw Python-project start, moet je een hele machinerie opstellen als je het wat robuust wilt aanpakken: tests en linting opzetten, documentatie schrijven, packaging, en dat alles samenlijmen met pre-commit hooks en continue integratie.
Tot voor kort deed ik dat elke keer manueel, maar enkele maanden geleden ben ik op zoek gegaan naar een schaalbaardere manier. Er bestaan diverse projectgeneratoren en projectsjablonen voor Python. Na een uitgebreide vergelijking kwam ik uit bij PyScaffold. Hiermee maak je eenvoudig een sjabloon voor een Git-repository voor een Python-project aan, dat al allerlei best practices toepast rond documentatie, tests, packaging, afhankelijkheden, codestijl enzovoort.
Ik heb ondertussen al twee Python-projecten met PyScaffold aangemaakt en ben met een derde bezig. De lessen die ik hieruit geleerd heb en een overzicht van wat PyScaffold allemaal voor je kan klaarzetten, heb ik beschreven in een achtergrondartikel voor Tweakers: Gelikte code met PyScaffold: Python-projecten ontwikkelen als een pro.
Andere ontwikkelaars zullen misschien tot een andere keuze komen. Zo maakt PyScaffold geen gebruik van Poetry, een moderne tool voor het beheer van afhankelijkheden en het publiceren van Python-pakketten. Maar ik maakte zelf nog geen gebruik van Poetry en PyScaffold bleek vrij goed overeen te komen met mijn stijl van ontwikkelen in Python. Misschien dat ik volgend jaar een andere keuze zou maken.
Uiteindelijk maakt het ook niet zoveel uit wat je gebruikt. Elke projectgenerator of elk projectsjabloon maakt zijn eigen keuzes voor de onderliggende tools, maar allemaal bereiken ze hetzelfde. Tijdswinst bij het opzetten van een nieuw project, en een projectstructuur die allerlei best practices toepast die je een goede basis geeft om robuuste software te ontwikkelen. Ik ga in ieder geval niet zo snel meer een nieuw Python-project opstarten zonder projectgenerator of projectsjabloon.