Leer met behulp van deze gids hoe u pakketten in Python kunt maken, distribueren en gebruiken.
Stel je de ontmoedigende taak voor van het ontwikkelen van een uitgebreide applicatie die beperkt is tot een enkel Python-bestand. Hoewel het technisch haalbaar is, druist het in tegen de kernprincipes van het bouwen van efficiënte, onderhoudbare en herbruikbare software. Daarom zijn pakketten en modules essentieel voor het bouwen en ontwikkelen van software.
Wat is een pakket?
In Python biedt een pakket een manier om logisch gerelateerde modules en bronnen samen te organiseren. Het is een map die meerdere Python-modules, subpakketten en andere bronnen bevat.
Pakketten bieden een hiërarchische structuur, waardoor u de code van uw project op verschillende abstractieniveaus kunt ordenen.
Verschil tussen pakketten en modules
Terwijl u zowel pakketten als kunt gebruiken modules om code te organiseren, er zijn verschillen tussen hen:
- Modulair: Een module is een bestand dat Python-code bevat. Het definieert functies, klassen, variabelen en andere objecten die u kunt importeren en gebruiken in uw code.
- Pakket: Een pakket is een verzameling van een of meer modules en kan ook subpakketten bevatten.
Hoe maak je een pakket in Python
Volg deze stappen om een pakket te maken.
Stap 1: maak een projectmap aan
Begin met het maken van een projectdirectory.
study_bud/
Stap 2: maak een pakketmap aan
Maak in uw projectdirectory een andere directory aan die zal dienen als de pakketdirectory. Geef het een betekenisvolle naam die het doel of de functionaliteit van het pakket weergeeft. De pakketmap bevat de modules en subpakketten die betrekking hebben op uw pakket.
study_bud/
math_tool/
Stap 3: Definieer het pakket __init__.py-bestand
Maak in de pakketmap een __init__.py bestand. De aanwezigheid van __init__.py bestand maakt de map tot een pakket in Python.
Als u een code moet initialiseren wanneer u het pakket gebruikt, neemt u deze op in de __init__.py bestand anders is het altijd leeg.
study_bud/
math_tool/
__init__.py
Stap 4: Voeg modules toe aan het pakket
Voeg binnen de pakketdirectory Python-modules (.py) toe die functies, klassen of variabelen definiëren.
Deze modules bevatten de daadwerkelijke code die de functionaliteit van uw pakket levert. U kunt meerdere modules maken binnen de pakketdirectory.
study_bud/
math_tool/
__init__.py
operations.py
statistics.py
Stap 5: voeg subpakketten toe aan het pakket
Als uw pakket een hiërarchische structuur moet hebben of verschillende functionaliteiten bevat, kunt u subpakketten maken binnen de pakketdirectory.
Een subpakket is gewoon een andere pakketdirectory binnen de hoofdpakketdirectory. Elk subpakket zou zijn eigen moeten hebben __init__.py bestand. Subpakketten maken verdere organisatie en scheiding van code mogelijk.
study_bud/
math_tool/
__init__.py
operations.py
statistics.py
geometry/
__init__.py
shapes.py
calculus/
__init__.py
integrations.py
In deze stappen heb je een math_tool pakket, twee modules toegevoegd (operaties.py En statistieken.py), en twee subpakketten geometrie En rekenen elk met hun modules.
Door deze stappen te volgen, kunt u eenvoudig gerelateerde functionaliteit organiseren met behulp van een pakket en subpakketten, waardoor het gemakkelijker wordt om code te beheren en opnieuw te gebruiken.
Werken met een pakket in Python
Om met een pakket te werken, moet u het importeren. De importeren En van Met trefwoorden kunt u een pakket in uw code importeren en gebruiken.
import math_tool # entire package
U kunt ook de puntnotatie gebruiken voor het importeren van modules, subpakketten of specifieke eigenschappen uit een pakket. Met de puntnotatie kunt u door de pakketdirectorystructuur navigeren. Puntnotatie maakt uw invoer leesbaarder en gemakkelijker te onderhouden.
from math_tool.operations import add, multiply # specific functions
In de bovenstaande code navigeerde u vanuit de pakketmap (math_tool) naar de activiteiten module met behulp van de puntnotatie en twee functies geïmporteerd (toevoegen En vermenigvuldigen).
Absolute invoer vs. Relatieve invoer
Met absoluutinvoer, specificeert u het volledige pad van het hoofdpakket (het hoofdpakket) naar de gewenste module of het gewenste subpakket. Dit is de meest gebruikelijke en aanbevolen manier om modules en pakketten in Python te importeren.
from math_tool.geometry.shapes import parallelogram
Beginnend vanaf math_tool ga in de geometrie subpakket, vind de vormen.py module en importeer de parallellogram functie.
Terwijl familielidinvoer kunt u importeren ten opzichte van de locatie van de huidige module met behulp van de puntnotatie om relatieve import te specificeren.
Bijvoorbeeld binnen de calculus/integraties.py module, kunt u relatieve import gebruiken om een functie te importeren uit het vormen.py moduul in de geometrie subpakket.
# calculus/integrations.py
from ..geometry.shapes import rhombus
De dubbele punt ("..") vertelt Python om:
- Begin vanuit de subpakketmap (rekenen) waar de module (integraties.py) bestaat.
- Ga naar het ouderpakket (math_tool) directory van het subpakket.
- Vind de geometrie subpakket in de bovenliggende map.
- Ga in de vormen.py moduleren en importeren ruit ervan.
Dus de puntnotatie vertegenwoordigt het aantal mappen waarnaar moet worden genavigeerd vanuit de huidige modulemap.
Alias-import voor het gemak
U kunt een alias toewijzen aan een import, zodat u er gemakkelijker naar kunt verwijzen in uw code. Aliassen zijn handig bij lange pakket- of modulenamen.
Om een alias toe te wijzen, gebruikt u de als trefwoord.
import math_tool.calculus as cal
Hoe u uw pakket in Python kunt distribueren
Python biedt u tools en een platform om uw pakket te bouwen en te distribueren. Door uw pakket te distribueren, kunt u uw code delen met andere ontwikkelaars, samenwerking bevorderen, de installatie voor gebruikers vereenvoudigen en bijdragen aan de bredere Python-gemeenschap.
Stap 1: Maak een account aan op PyPI
Python-pakketindex (PyPI) is de standaardrepository voor Python-pakketten. U kunt uw pakketten op PyPI publiceren zodat andere ontwikkelaars ze gemakkelijk kunnen vinden en installeren.
Vergeet niet uw gebruikersnaam En wachtwoord omdat je ze nodig hebt voor authenticatie bij het uploaden van je pakket naar PyPI.
Met deze tools kunt u eenvoudig een distribueerbaar pakket configureren, bouwen en pushen met één enkele opdracht.
pip install build wheel twine
Stap 3: Maak een setup.py-bestand
Om uw pakket te distribueren, maakt u een setup.py-bestand in de hoofdmap van uw project. De setup.py bestand bevat metagegevens over uw pakket, zoals de naam, versie, auteur, beschrijving, afhankelijkheden en meer.
De pakketbeheertools gebruiken de setup.py bestand om uw pakket te configureren en te bouwen.
#setup.py
from setuptools import setup, find_packages
setup(
name='' ,
version='1.0.0',
author='' ,
description='A collection of mathematical utility functions',
packages=find_packages(),
install_requires=[
'numpy',
'scipy',
],
)
Stap 4: Bouw het pakket
Zodra je de setup.py klaar is, kunt u het gebruiken om een uitkeerbaar pakket te bouwen. In uw terminal of opdrachtprompt, navigeer naar de map bevattende de setup.py bestand en voer de volgende opdracht uit:
python setup.py sdist bdist_wheel
Deze opdracht genereert een afstand directory die een brondistributiepakket (.tar.gz) en een wieldistributiepakket (.whl) bevat. Je ziet ook een bouwen En informatie map.
Stap 5: Upload het pakket naar PyPI
Als uw pakket gereed is, kunt u het uploaden naar PyPI.
Voer de volgende opdracht uit:
twine upload dist/*
> Uploading distributions to https://upload.pypi.org/legacy/
> Enter your username: **********
> Enter your password: **********
Bezoek uw PyPI projectbeheerpagina om uw pakket te bekijken.
Nu kunnen andere ontwikkelaars die uw pakket nuttig vinden, het lokaal installeren en gebruiken.
Hoe een Python-pakket te installeren
Pakketbeheerders houden van pip maken het eenvoudig om Python-pakketten uit verschillende bronnen te installeren en te beheren, waaronder de Python Package Index (PyPI). Om een pakket te installeren met behulp van Pip, open uw terminal of opdrachtprompt en gebruik de volgende opdracht:
pip install
Om alle beschikbare opdrachten en opties voor Pip gebruik de --hulp keuze.
Schrijven van schone modules
Pakketten bevatten modules en subpakketten die op hun beurt weer andere modules bevatten. Het is een goede gewoonte om uw code te modulariseren, vooral wanneer u aan grotere projecten werkt, omdat dit een betere organisatie en leesbaarheid van de code bevordert. Het is dus belangrijk om modules met duidelijkheid te schrijven bij het ontwikkelen met Python.