Tänk dig den utmanande uppgiften att skapa en omfattande applikation med en enda Python-fil. Även om det är tekniskt möjligt, strider det mot grundprinciperna för att bygga effektiv, lättskött och återanvändbar programvara. Därför är paket och moduler avgörande för programvaruutveckling.
Vad är ett paket?
I Python fungerar ett paket som ett sätt att samla logiskt relaterade moduler och resurser. Det är en katalog som innehåller flera Python-moduler, underpaket och andra filer.
Paket erbjuder en hierarkisk struktur, som gör att du kan organisera din kod på olika nivåer av abstraktion.
Skillnaden mellan paket och moduler
Både paket och moduler används för att organisera kod, men det finns viktiga skillnader:
- Modul: En modul är en fil som består av Python-kod. Den definierar funktioner, klasser, variabler och andra objekt som kan importeras och användas i din kod.
- Paket: Ett paket är en samling av en eller flera moduler, och kan även innehålla underpaket.
Hur man skapar ett paket i Python
Följ dessa steg för att skapa ett paket.
Steg 1: Skapa en projektkatalog
Börja med att skapa en projektkatalog.
study_bud/
Steg 2: Skapa en paketkatalog
Inom projektkatalogen, skapa en ny katalog som kommer att fungera som paketkatalog. Välj ett beskrivande namn som återspeglar paketets syfte. Denna katalog kommer att innehålla moduler och eventuella underpaket.
study_bud/ math_tool/
Steg 3: Definiera paketet __init__.py-filen
Skapa en __init__.py-fil i paketkatalogen. Denna fil gör katalogen till ett paket i Python.
Om du behöver initiera kod när paketet används, inkludera den i __init__.py-filen. Annars kan den vara tom.
study_bud/ math_tool/ __init__.py
Steg 4: Lägg till moduler till paketet
Lägg till Python-moduler (.py-filer) i paketkatalogen som innehåller funktioner, klasser eller variabler.
Dessa moduler innehåller den kod som ger paketets funktionalitet. Du kan skapa flera moduler i paketkatalogen.
study_bud/ math_tool/ __init__.py operations.py statistics.py
Steg 5: Lägg till underpaket till paketet
Om ditt paket kräver en hierarkisk struktur eller omfattar olika funktionaliteter, kan du skapa underpaket inom paketkatalogen.
Ett underpaket är en annan paketkatalog inom huvudpaketkatalogen. Varje underpaket ska ha sin egen __init__.py-fil. Underpaket ger ytterligare struktur och separation av kod.
study_bud/ math_tool/ __init__.py operations.py statistics.py geometry/ __init__.py shapes.py calculus/ __init__.py integrations.py
I dessa steg har du skapat ett ’math_tool’-paket, lagt till två moduler (’operations.py’ och ’statistics.py’) samt två underpaket, ’geometry’ och ’calculus’, med egna moduler.
Genom att följa dessa steg kan du enkelt organisera relaterad funktionalitet med hjälp av paket och underpaket, vilket underlättar kodhantering och återanvändning.
Hur man arbetar med ett paket i Python
För att använda ett paket måste det importeras. Nyckelorden ’import’ och ’from’ låter dig importera och använda ett paket i din kod.
import math_tool
Du kan använda punktnotation för att importera moduler, underpaket eller specifika objekt från ett paket. Punktnotationen gör det möjligt att navigera i paketstrukturen. Den gör även dina importinstruktioner mer lättlästa och enklare att underhålla.
from math_tool.operations import add, multiply
Ovanstående kod navigerar från paketkatalogen (’math_tool’) till modulen ’operations’ med hjälp av punktnotation och importerar två funktioner, ’add’ och ’multiply’.
Absolut import kontra relativ import
Med absolut import anger du hela sökvägen från toppnivåpaketet (rotpaketet) till den önskade modulen eller underpaketet. Detta är det vanligaste och mest rekommenderade sättet att importera moduler och paket i Python.
from math_tool.geometry.shapes import parallelogram
Börja med ’math_tool’ och gå till underpaketet ’geometry’, hitta modulen ’shapes.py’ och importera funktionen ’parallelogram’.
Relativ import tillåter dig att importera i förhållande till den aktuella modulens plats med hjälp av punktnotation för att specificera relativa sökvägar.
I modulen ’calculus/integrations.py’ kan du till exempel använda relativ import för att importera en funktion från modulen ’shapes.py’ i underpaketet ’geometry’.
from ..geometry.shapes import rhombus
Dubbelpunkten (”..”) instruerar Python att:
- Börja i underpaketskatalogen (’calculus’) där modulen (’integrations.py’) finns.
- Gå till den överordnade paketkatalogen (’math_tool’) för underpaketet.
- Hitta underpaketet ’geometry’ i den överordnade katalogen.
- Gå till modulen ’shapes.py’ och importera ’rhombus’ därifrån.
Punktnotationen representerar alltså antalet kataloger som ska navigeras i förhållande till den aktuella modulens katalog.
Alias-import för bekvämlighet
Du kan ge ett alias till en import, vilket underlättar referens i din kod. Alias är praktiskt när du arbetar med långa paket- eller modulnamn.
Använd nyckelordet ’as’ för att tilldela ett alias.
import math_tool.calculus as cal
Hur man distribuerar sitt paket i Python
Python erbjuder verktyg och en plattform för att bygga och distribuera ditt paket. Genom att distribuera paketet kan du dela din kod med andra utvecklare, underlätta samarbete, förenkla installation för användare och bidra till det bredare Python-communityt.
Steg 1: Skapa ett konto på PyPI
Python Package Index (PyPI) är standardförrådet för Python-paket. Du kan publicera dina paket på PyPI så att andra utvecklare enkelt kan hitta och installera dem.
Kom ihåg ditt användarnamn och lösenord eftersom du behöver dem för autentisering när du laddar upp paketet till PyPI.
Steg 2: Installera pakethanteringsverktyg
Dessa verktyg gör det enkelt att konfigurera, bygga och skicka ett distribuerbart paket med ett enda kommando.
pip install build wheel twine
Steg 3: Skapa en setup.py-fil
För att distribuera ditt paket, skapa en setup.py-fil i projektets rotkatalog. setup.py-filen innehåller metadata om ditt paket, som namn, version, författare, beskrivning, beroenden och mer.
Pakethanteringsverktygen kommer att använda ’setup.py’-filen för att konfigurera och bygga ditt paket.
from setuptools import setup, find_packages setup( name="<paketnamn>", version='1.0.0', author="<Ditt Namn>", description='En samling matematiska hjälpfunktioner', packages=find_packages(), install_requires=[ 'numpy', 'scipy', ], )
Steg 4: Bygg paketet
När ’setup.py’-filen är klar, kan du använda den för att bygga ett distribuerbart paket. I din terminal eller kommandotolk, navigera till katalogen med ’setup.py’-filen och kör följande kommando:
python setup.py sdist bdist_wheel
Detta kommando skapar en ’dist’-katalog som innehåller ett källdistributionspaket (.tar.gz) och ett hjuldistributionspaket (.whl). Du kommer även att se en ’build’- och en ’egg-info’-katalog.
Steg 5: Ladda upp paketet till PyPI
Nu när paketet är redo kan du ladda upp det till PyPI.
Kör följande kommando:
twine upload dist/* > Uploading distributions to https://upload.pypi.org/legacy/ > Enter your username: ********** > Enter your password: **********
Besök din PyPI projektledningssida för att se ditt paket.
Nu kan andra utvecklare som finner ditt paket användbart installera och använda det lokalt.
Hur man installerar ett Python-paket
Pakethanterare som ’pip’ gör det enkelt att installera och hantera Python-paket från olika källor, inklusive Python Package Index (PyPI). För att installera ett paket med ’pip’, öppna terminalen eller kommandotolken och använd följande kommando:
pip install <paketnamn>
För att se alla tillgängliga kommandon och alternativ för ’pip’, använd alternativet ’–help’.
Att skriva rena moduler
Paket består av moduler och delpaket, vilka i sin tur kan innehålla ytterligare moduler. Att modularisera koden är en bra praxis, särskilt i större projekt, eftersom det främjar bättre kodorganisation och läsbarhet. Därför är det viktigt att skriva tydliga moduler när man utvecklar i Python.