Python is een laagdrempelige en krachtige programmeertaal, die veel gebruikt wordt in machinelearning, data-analyse, systeemautomatisering enzovoort. Ook voor hobbyisten is het een dankbare taal, bijvoorbeeld voor smarthometoepassingen. De taal Python kennen is echter nog niet te vergelijken met op een professionele manier een Python-project ontwikkelen en uitbrengen. Er bestaan allerlei best practices en hulpmiddelen om je daarbij te helpen, maar als je vijf Python-experts om hulp vraagt, krijg je waarschijnlijk vijf verschillende adviezen. Dus hoe begin je eraan om je software wat professioneler te gaan bouwen?
Daarvoor bestaan diverse ‘projectgenerators’ waarmee je een nieuw Python-project aanmaakt op basis van een sjabloon dat al allerlei best practices toepast rond documentatie, tests, packaging, afhankelijkheden, codestijl enzovoort. Als je hiermee van start gaat, zijn er al een boel keuzes voor je gemaakt en kun je onmiddellijk aan de slag. Naarmate je meer ervaring krijgt met de projectgenerator en de gemaakte keuzen, kun je daarna altijd bewust andere keuzen maken en van het sjabloon afwijken.
Eén keuze moet je wel al vanaf het begin maken: met welke projectgenerator ga je werken? Uiteindelijk is dit ook een kwestie van smaak. Je hebt zelf als Python-ontwikkelaar waarschijnlijk al wat best practices en een programmeerstijl aangenomen en misschien al wat hulpmiddelen aan je toolbox toegevoegd. Als je dan een projectgenerator gaat gebruiken die daar veel van afwijkt, kan dat initieel tot frustraties leiden. Bekijk dus zeker eens de verschillende mogelijkheden en onderzoek welke het best bij je past.
Een van de bekendste (en oudste) projectgenerators is cookiecutter. Deze creëert een project op basis van een projectsjabloon en er bestaat een cookiecutter-sjabloon voor een Python-pakket. Twee wat modernere cookiecutter-sjablonen voor Python-projecten zijn python-package-template en wemake-python-package. Ze maken allebei gebruik van de tool Poetry voor het beheer van afhankelijkheden en het publiceren van je Python-pakket. Er bestaan ook domeinspecifieke cookiecutter-sjablonen, zoals cookiecutter-data-science.
Een andere populaire projectgenerator is PyScaffold. Deze is specifiek voor Python ontwikkeld en je hoeft er geen sjabloon meer bij te kiezen. Overigens kun je ook zonder een projectgenerator sjablonen gebruiken. Zo is er het project python-blueprint. Dit kopieer je eenvoudigweg om op basis daarvan je eigen Python-project op te bouwen. Het voordeel van een projectgenerator is echter dat je het standaardsjabloon kunt aanpassen aan de hand van enkele parameters. Bij een update van de projectgenerator kun je bovendien vernieuwingen eenvoudig in je eigen project integreren. Ben je gestart van een kopie van een sjabloon, dan heb je wat meer handwerk.
In de rest van dit artikel tonen we hoe je een Python-project start met PyScaffold. Ik heb daarvoor gekozen omdat PyScaffold het meest overeen bleek te komen met mijn stijl van ontwikkelen in Python en uitstekende documentatie heeft. In dit artikel ga ik ervan uit dat je al wat basiskennis van Python hebt, maar wees gerust: we gaan niet coderen. Het gaat hier vooral om het beheer van je project. Kies je een andere projectgenerator dan PyScaffold of een los sjabloon, dan verloopt het proces gelijkaardig. De best practices die ze toepassen en de hulpmiddelen waarvan ze gebruikmaken, zijn immers grotendeels gelijk.
PyScaffold is beschikbaar als pakket op PyPI, dus je installeert het eenvoudig met pip:
pip install pyscaffold
Ben je van plan om een van de officiële uitbreidingen op PyScaffold te gebruiken, installeer die dan mee:
pip install pyscaffold[all]
Dat is vooral nuttig als je geen liefhebber van reStructuredText bent, maar Markdown wilt gebruiken als opmaaktaal, of als je Travis CI voor continue integratie verkiest.
Installeer daarna ook tox, een tool om tests en package builds in virtuele omgevingen uit te voeren, en pre-commit, dat vóór elke commit met Git een hoop door PyScaffold geconfigureerde controles uitvoert:
pip install tox pre-commit
Source: Tweakers.net