12 Pythons voor elke programmeerbehoefte

Wanneer u Python kiest voor softwareontwikkeling, kiest u voor een groot taalecosysteem met een schat aan pakketten die alle mogelijke programmeerbehoeften dekken. Maar naast bibliotheken voor alles, van GUI-ontwikkeling tot machine learning, kunt u ook kiezen uit een aantal Python-runtimes - en sommige van deze runtimes zijn wellicht beter geschikt voor het gebruik dat u voorhanden hebt dan andere.

Hier is een korte rondleiding door Python-distributies, van de standaardimplementatie (CPython) tot versies die zijn geoptimaliseerd voor snelheid (PyPy), voor speciale use-cases (Anaconda, ActivePython), voor verschillende taalruntimes (Jython, IronPython), en zelfs voor edge-experimenten (PyCopy, MesaPy).

CPython

CPython is de referentie-implementatie van Python, de standaardversie waar alle andere Python-incarnaties naar kijken. CPython is geschreven in C, zoals geïmpliceerd door de naam, en het wordt geproduceerd door dezelfde kerngroep van mensen die verantwoordelijk zijn voor alle beslissingen op het hoogste niveau over de Python-taal.

CPython-gebruiksgevallen

Omdat CPython de referentie-implementatie van Python is, is het de meest conservatieve in termen van optimalisaties. Dit is zo ontworpen. De beheerders van Python willen dat CPython de meest breed compatibele en gestandaardiseerde implementatie van Python is die beschikbaar is.

CPython is uw beste keuze wanneer compatibiliteit en conformiteit met Python-standaarden belangrijker zijn dan onbewerkte prestaties en andere problemen. CPython is ook nuttig voor de expert die met Python in zijn meest fundamentele incarnatie wil werken en die bereid is af te zien van bepaalde gemakken. 

Met CPython moet u bijvoorbeeld wat meer moeite doen om virtuele omgevingen op te zetten. Andere distributies (in het bijzonder Anaconda) bieden meer automatisering rond het instellen van de werkruimte.

CPython-beperkingen

CPython beschikt niet over de prestatie-optimalisaties die in andere edities van Python worden gevonden. Er is geen native JIT-compiler (just-in-time), geen versnelde wiskundige bibliotheken en geen toevoegingen van derden omwille van de prestaties. Dat zijn allemaal dingen die u zelf kunt toevoegen, maar ze zijn niet gebundeld. Nogmaals, dit alles is zo ontworpen om maximale compatibiliteit te garanderen en om CPython in staat te stellen als referentie-implementatie te dienen, maar het betekent dat alle prestatie-optimalisaties aan de ontwikkelaar zijn.

Verder biedt CPython slechts een basisset met tools voor het werken met Python. De pip-pakketbeheerder haalt en installeert bijvoorbeeld pakketten uit Pythons native PyPI-pakketrepository. Pip zal zelfs voorgecompileerde binaire bestanden installeren (via het wiel-distributie-formaat) als ze worden geleverd door de ontwikkelaar, maar het zal geen afhankelijkheden installeren die pakketten buiten PyPI zouden kunnen hebben . 

Gerelateerde video: hoe Python programmeren eenvoudiger maakt

Python is perfect voor IT en vereenvoudigt vele soorten werk, van systeemautomatisering tot het werken op geavanceerde gebieden zoals machine learning.

Anaconda Python

Anaconda, geproduceerd door Anaconda, Inc. (voorheen Continuum Analytics), is ontworpen voor Python-ontwikkelaars die een distributie nodig hebben die wordt ondersteund door een commerciële provider en met ondersteuningsplannen voor ondernemingen. De belangrijkste use-cases voor Anaconda Python zijn wiskunde, statistiek, engineering, data-analyse, machine learning en aanverwante toepassingen.

Gebruiksscenario's voor Anaconda Python

Anaconda bundelt veel van de meest voorkomende bibliotheken die worden gebruikt in commercieel en wetenschappelijk Python-werk - SciPy, NumPy, Numba, enzovoort - en maakt er nog veel meer toegankelijk via een aangepast pakketbeheersysteem.

Anaconda onderscheidt zich van andere distributies door hoe het al deze stukken integreert. Indien geïnstalleerd, biedt Anaconda een desktop-app - de Anaconda Navigator - die elk aspect van de Anaconda-omgeving beschikbaar maakt via een handige GUI. Componenten vinden, up-to-date houden en ermee werken is met Anaconda een stuk eenvoudiger uit de doos dan met CPython.

Een andere zegen is de manier waarop Anaconda omgaat met componenten van buiten het Python-ecosysteem als ze vereist zijn voor een specifiek pakket. De condapakketbeheerder, speciaal gemaakt voor Anaconda, zorgt voor de installatie van zowel Python-pakketten als externe softwarevereisten van derden.

Anaconda Python-beperkingen

Omdat Anaconda zoveel nuttige bibliotheken bevat, en zelfs meer kan installeren met slechts een paar toetsaanslagen, kan de grootte van een Anaconda-installatie veel groter zijn dan CPython. Een basisinstallatie van CPython draait ongeveer 100 MB; Anaconda-installaties kunnen uitgroeien tot gigabytes. Dit kan een probleem zijn in situaties waarin u beperkte middelen hebt.

Een manier om de footprint van Anaconda te verkleinen, is door Miniconda te installeren, een uitgeklede versie van Anaconda die alleen het absolute minimum aan onderdelen bevat dat nodig is om aan de slag te gaan. Je kunt dan pakketten aan Miniconda toevoegen zoals je wilt, met het oog op hoeveel ruimte elk stuk inneemt.

ActivePython

Net als Anaconda wordt ActivePython gemaakt en onderhouden door een bedrijf met winstoogmerk, in dit geval ActiveState, dat een aantal taalruntimes op de markt brengt samen met de meertalige Komodo IDE.

Gebruiksscenario's van ActivePython

ActivePython is bedoeld voor zakelijke gebruikers en datawetenschappers - mensen die Python willen gebruiken, maar niet veel moeite willen besteden aan het samenstellen en beheren van een Python-installatie. ActivePython gebruikt de reguliere pippakketbeheerder van Python , maar levert ook een paar honderd gewone bibliotheken als geverifieerde pack-ins, samen met enkele veelgebruikte bibliotheken met afhankelijkheden van derden, zoals de Intel Math Kernel Library.

ActivePython-beperkingen

Er is een mogelijk nadeel aan de benadering van ActivePython bij het afhandelen van pakketten met externe afhankelijkheden. Als u wilt upgraden naar een nieuwere versie van een project met complexe afhankelijkheden (bijv. TensorFlow), moet u ook uw ActivePython-installatie upgraden. In omgevingen waar ontwikkeling vaak gekoppeld is aan een specifieke versie van een project, is dit minder een probleem. Maar in omgevingen waar ontwikkeling de neiging heeft om geavanceerde versies bij te houden, kan dit een probleem vormen.

PyPy

Een drop-in vervanging voor de CPython-interpreter, PyPy gebruikt just-in-time (JIT) -compilatie om de uitvoering van Python-programma's te versnellen. Afhankelijk van de taak die wordt uitgevoerd, kunnen de prestatiewinst dramatisch zijn. 

PyPy-gebruikssituaties

Een veelgehoorde klacht over Python in het algemeen, en CPython in het bijzonder, is snelheid. Python werkt standaard vele malen langzamer dan C, soms honderden keren langzamer. PyPy JIT-compileert Python-code naar machinetaal, waardoor gemiddeld 7,7x sneller wordt dan CPython. Sommige taken worden wel 50x sneller uitgevoerd. 

Het beste is dat de ontwikkelaar weinig tot geen moeite hoeft te doen om deze voordelen te ontgrendelen. Verwissel CPython voor PyPy, en voor het grootste deel ben je klaar.

PyPy-beperkingen

PyPy heeft altijd het beste gepresteerd met "pure" Python-applicaties. Python-pakketten die communiceren met C-bibliotheken, zoals NumPy, hebben het niet zo goed gedaan vanwege de manier waarop PyPy de native binaire interfaces van CPython heeft geëmuleerd. In de loop van de tijd zijn de ontwikkelaars van PyPy echter weggegaan met dit probleem en PyPy veel meer compatibel gemaakt met de meeste Python-pakketten die afhankelijk zijn van C-extensies. Kortom, ondersteuning voor C-extensies is nog steeds beperkt, maar veel minder dan vroeger.

Een ander mogelijk nadeel van PyPy is de grootte van de runtime. De core CPython-runtime op Windows, met uitzondering van de standaardbibliotheek, is ongeveer 4 MB, terwijl de PyPy-runtime ongeveer 32 MB is. Merk ook op dat PyPy al lang de nadruk legt op de 2.x-tak van Python, dus PyPy voor Python 3.x is momenteel bijvoorbeeld alleen beschikbaar voor Windows in een 32-bits bètatestversie. (PyPy is beschikbaar in 64-bits versies voor Python 2.x en 3.x voor Linux en MacOS.)

Jython

De JVM (Java Virtual Machine) dient als runtime voor een groot aantal talen naast Java. De lange lijst bevat Groovy, Scala, Clojure, Kotlin en, ja, Python, via het Jython-project.

Jython-gebruiksgevallen

Jython compileert Python 2.x-code naar JVM-bytecode en voert het resulterende programma uit op de JVM. In sommige gevallen zal een Jython-gecompileerd programma sneller werken dan zijn CPython-tegenhanger, maar niet altijd.

Het grootste voordeel van Jython is de directe interoperabiliteit met de rest van het Java-ecosysteem. Java wordt nog breder gebruikt dan Python. Door Python op de JVM te draaien, kunnen Python-ontwikkelaars gebruikmaken van een enorm ecosysteem van bibliotheken en frameworks die ze anders niet zouden kunnen gebruiken. Op dezelfde manier stelt Jython Java-ontwikkelaars in staat om Python-bibliotheken te gebruiken. 

Beperkingen van Jython

Het grootste nadeel van Jython is dat het alleen de 2.x-tak van Python ondersteunt. Ondersteuning voor Python 3.x is in ontwikkeling, maar is al een tijdje geleden. Tot nu toe is er niets vrijgegeven.

Merk ook op dat hoewel Jython Python naar de JVM brengt, het Python niet naar Android brengt. Aangezien er momenteel geen eigenlijke poort van Jython naar Android is, kan Jython niet worden gebruikt om Android-applicaties te ontwikkelen.

IronPython

Net zoals Jython een implementatie is van Python op de JVM, is IronPython een implementatie van Python op de .Net-runtime of CLR (Common Language Runtime). IronPython gebruikt de DLR (Dynamic Language Runtime) van de CLR om Python-programma's met dezelfde mate van dynamiek te laten werken als in CPython.

Gebruiksscenario's van IronPython

Net als Jython is IronPython een brug. De grote use case is de interoperabiliteit tussen Python en het .Net-universum. Bestaande .Net-assembly's kunnen worden geladen in IronPython-programma's met behulp van de native import- en objectmanipulatiesyntaxis van Python. Het is ook mogelijk om IronPython-code in een assembly te compileren en deze as-is uit te voeren of deze vanuit andere talen aan te roepen. Merk echter op dat de MSIL (Microsoft Intermediate Language) in de assembly niet rechtstreeks toegankelijk is vanuit andere .Net-talen, aangezien deze niet compatibel is met de Common Language Specification.

IronPython-beperkingen

Net als Jython ondersteunt IronPython momenteel alleen Python 2.x. Er wordt echter gewerkt aan het maken van een IronPython 3.x-implementatie.

WinPython

Zoals de naam al aangeeft, is WinPython een Python-distributie die speciaal is gemaakt voor gebruikers van Microsoft Windows. De eerdere edities van CPython voor Windows waren niet goed ontworpen en het was moeilijk voor Windows-gebruikers om optimaal te profiteren van het Python-ecosysteem. De Windows-editie van CPython is in de loop van de tijd verbeterd, maar WinPython biedt nog steeds veel dingen die niet in CPython voorkomen.

WinPython-gebruiksgevallen

De belangrijkste attractie van WinPython is dat het een op zichzelf staande editie van Python is. Het hoeft niet te worden geïnstalleerd op de machine waarop het draait; het hoeft alleen maar in een map te worden uitgepakt. Dit maakt WinPython nuttig in gevallen waarin software niet op een bepaald systeem kan worden geïnstalleerd, in scenario's waarin een vooraf geconfigureerde Python-runtime moet worden gedistribueerd samen met de applicaties die erop moeten worden uitgevoerd, of waar meerdere edities van Python naast elkaar moeten draaien zonder elkaar te hinderen.

WinPython bundelt ook een hele reeks data science-georiënteerde pakketten - NumPy, Pandas, SciPy, Matplotlib, enz. - zodat ze meteen kunnen worden gebruikt, zonder extra installatiestappen. Ook inbegrepen is een C / C ++ - compiler, aangezien veel Windows-machines er geen hebben en veel Python-extensies deze nodig hebben of kunnen gebruiken.

WinPython-beperkingen

Een beperking van WinPython is dat het in sommige gevallen standaard te veel kan bevatten. Om dat te verhelpen, bieden de makers van WinPython een "nul" -versie van elke WinPython-editie, met alleen de minimaal mogelijke installatie van het product. Meer pakketten kunnen later worden toegevoegd, hetzij met de eigen piptool van Python, hetzij met het WPPM-hulpprogramma van WinPython.

Python draagbaar

Python Portable is de CPython-runtime in een op zichzelf staand pakket. Het komt met dank aan de PortableDevApps-verzameling van vergelijkbare zelfstandige applicaties.

Python Portable use-cases

Net als WinPython bevat Python Portable een hele reeks pakketten voor wetenschappelijk computergebruik: Matplotlib, Numba, SymPy, SciPy, Cython en andere. Net als WinPython draait Python Portable zonder formeel op de Windows-host te hoeven worden geïnstalleerd; het kan in elke map of op een verwisselbare schijf staan. Ook inbegrepen is de Spyder IDE en de pip-pakketbeheerder van Python, zodat u naar behoefte pakketten kunt toevoegen, wijzigen of verwijderen.

Python Portable-beperkingen

In tegenstelling tot WinPython bevat Python Portable geen C / C ++ - compiler. Je hebt een C-compiler nodig om gebruik te maken van code die is geschreven met Cython (en dus gecompileerd naar C).

Experimentele Python-distributies

Deze distributies brengen belangrijke wijzigingen aan in Python, ofwel omdat ze Python gebruiken als een startpunt voor iets geheel nieuws, of omdat ze strategische wijzigingen aanbrengen in standaard Python. Over het algemeen worden deze Pythons nog niet aanbevolen voor productiegebruik. 

Als je in de nabije toekomst met een Python 2.x-codebasis leeft, wil je misschien ons artikel lezen over de experimentele Python-distributies die Python 2.x levend houden.

MicroPython

MicroPython biedt een minimale subset van de Python-taal die kan draaien op extreem low-end hardware zoals microcontrollers. MicroPython implementeert Python 3.4 met enkele verschillen. Het is gemakkelijk om MicroPython-code te schrijven als u Python kent, maar bestaande code werkt mogelijk niet zoals het is.

Pycopy