Master Python-pakker: Enkle steg for nybegynnere

Tenk deg den overveldende oppgaven det ville være å utvikle en kompleks applikasjon, begrenset til én enkelt Python-fil. Selv om det teknisk sett er mulig, går det imot de grunnleggende prinsippene for å skape effektiv, vedlikeholdbar og gjenbrukbar programvare. Av disse årsakene er pakker og moduler essensielt for all moderne programvareutvikling.

Hva er egentlig en pakke?

I Python, representerer en pakke en strukturert metode for å samle relaterte moduler og ressurser. Den består av en katalog som inneholder flere Python-moduler, underpakker og diverse andre ressurser.

Pakker etablerer en hierarkisk struktur som gjør det mulig å organisere prosjektets kode på ulike abstraksjonsnivåer.

Forskjellen på pakker og moduler

Selv om både pakker og moduler brukes for å organisere kode, er det grunnleggende forskjeller mellom dem:

  • Modul: En modul er simpelthen en fil som inneholder Python-kode. Den definerer funksjoner, klasser, variabler og andre objekter som kan importeres og brukes i andre deler av programmet.
  • Pakke: En pakke er en beholder for en eller flere moduler og kan i tillegg inneholde andre pakker.

Hvordan lage en pakke i Python

Følg disse trinnene for å lage din egen pakke.

Trinn 1: Lag en prosjektmappe

Start med å opprette en mappe som skal inneholde hele prosjektet.

 study_bud/

Trinn 2: Lag en pakkemappe

Inni prosjektmappen, lag en ny mappe som skal fungere som pakkemappe. Gi den et navn som er beskrivende for hva pakken inneholder. Denne mappen vil inneholde modulene og eventuelle underpakker som hører til denne pakken.

 study_bud/
    math_tool/

Trinn 3: Definer pakkens __init__.py-fil

Opprett en fil som heter __init__.py i pakkemappen. Det er tilstedeværelsen av denne filen som identifiserer mappen som en pakke i Python.

Om du trenger å kjøre kode hver gang pakken brukes, kan denne koden legges inn i __init__.py-filen, ellers kan den stå tom.

 study_bud/
    math_tool/
        __init__.py

Trinn 4: Legg til moduler i pakken

I pakkemappen, legg til Python-moduler (.py) som inneholder funksjoner, klasser, eller variabler.

Disse modulene inneholder selve koden som gir pakken dens funksjonalitet. Du kan ha flere moduler i en pakkemappe.

 study_bud/
    math_tool/
        __init__.py
        operations.py
        statistics.py

Trinn 5: Legg til underpakker i pakken

Om pakken din krever en hierarkisk struktur eller består av flere funksjonelt ulike deler, kan du opprette underpakker i hovedpakkemappen.

En underpakke er ganske enkelt en ny pakkemappe inne i hovedpakkemappen. Hver underpakke må også ha sin egen __init__.py-fil. Underpakker muliggjør ytterligere organisering og separasjon av koden.

 study_bud/
    math_tool/
        __init__.py
        operations.py
        statistics.py
        geometry/
            __init__.py
            shapes.py
        calculus/
            __init__.py
            integrations.py

Med disse trinnene har du opprettet en pakke som heter math_tool, lagt til to moduler (operations.py og statistics.py), og to underpakker kalt geometri og kalkulus, hver med sine egne moduler.

Ved å følge disse trinnene, kan du organisere relatert funksjonalitet ved hjelp av pakker og underpakker, noe som gjør det lettere å administrere og gjenbruke kode.

Hvordan bruke en pakke i Python

For å bruke en pakke, må du importere den. Nøkkelordene «import» og «from» lar deg importere og bruke pakker i koden din.

 import math_tool 

Du kan også bruke punktnotasjon for å importere moduler, underpakker eller spesifikke objekter fra en pakke. Punktnotasjon lar deg navigere gjennom pakkenes mappestruktur. Dette gjør det lettere å lese og vedlikeholde importer.

 from math_tool.operations import add, multiply 

I eksemplet over navigerer vi fra hovedpakken (math_tool) til operasjonsmodulen ved å bruke punktnotasjon, og importerer to funksjoner (add og multiply).

Absolutt import vs. Relativ import

Ved absolutt import, spesifiserer du hele banen fra toppnivåpakken (rotpakken) til modulen eller underpakken du vil bruke. Dette er den vanligste og anbefalte metoden for å importere pakker og moduler i Python.

 from math_tool.geometry.shapes import parallelogram

Dette starter fra math_tool, går inn i underpakken geometry, finner shapes.py-modulen og importerer funksjonen parallelogram.

Relativ import lar deg importere moduler i forhold til plasseringen av den gjeldende modulen. Dette gjøres ved å bruke punktnotasjon for å spesifisere den relative banen.

For eksempel, inne i calculus/integrations.py-modulen, kan du bruke relativ import for å importere en funksjon fra shapes.py i underpakken geometry:

 from ..geometry.shapes import rhombus

Dobbeltprikken («..») instruerer Python om å:

  • Starte fra underpakkemappen (calculus) der modulen (integrations.py) befinner seg.
  • Gå et nivå opp til hovedpakkemappen (math_tool) til underpakken.
  • Finne underpakken geometry i foreldremappen.
  • Gå inn i shapes.py-modulen og importere rhombus derfra.

Punktnotasjonen representerer altså antall mapper du må navigere deg gjennom fra den gjeldende mappen.

Alias for enklere import

Du kan gi et alias til en import for å gjøre det lettere å referere til den i koden. Alias er nyttige når du jobber med lange pakke- eller modulnavn.

For å gi et alias, bruker du nøkkelordet «as».

 import math_tool.calculus as cal

Hvordan distribuere pakken din i Python

Python gir deg verktøy og en plattform for å bygge og distribuere pakken din. Ved å distribuere pakken din kan du dele koden med andre utviklere, legge til rette for samarbeid, forenkle installasjon for andre brukere, og bidra til det bredere Python-samfunnet.

Trinn 1: Lag en konto på PyPI

Python Package Index (PyPI) er det offisielle registeret for Python-pakker. Du kan publisere pakken din her, slik at andre enkelt kan finne og installere den.

Husk brukernavn og passord, da du trenger dem for å autentisere når du laster opp pakken til PyPI.

Trinn 2: Installer verktøy for pakkehåndtering

Disse verktøyene gjør det enkelt å konfigurere, bygge og publisere pakken med en enkel kommando.

 pip install build wheel twine

Trinn 3: Lag en setup.py-fil

For å distribuere pakken din, må du lage en setup.py-fil i prosjektets rotmappe. Denne filen inneholder metadata om pakken, som navn, versjon, forfatter, beskrivelse, avhengigheter, med mer.

Verktøyene for pakkehåndtering bruker setup.py for å konfigurere og bygge pakken.

from setuptools import setup, find_packages

setup(
    name="<pakkenavn>",
    version='1.0.0',
    author="<Ditt Navn>",
    description='En samling matematiske verktøyfunksjoner',
    packages=find_packages(),
    install_requires=[
        'numpy',
        'scipy',
    ],
)

Trinn 4: Bygg pakken

Når setup.py-filen er klar, kan du bruke den for å bygge en distribuerbar pakke. I terminalen eller kommandolinjen, naviger til mappen som inneholder setup.py og kjør følgende kommando:

 python setup.py sdist bdist_wheel

Denne kommandoen genererer en «dist»-mappe som inneholder en kildedistribusjonspakke (.tar.gz) og en «wheel»-distribusjonspakke (.whl). Du vil også se en «build» og en «egg-info»-mappe.

Trinn 5: Last opp pakken til PyPI

Når pakken er bygget, kan du laste den opp til PyPI.

Kjør følgende kommando:

 twine upload dist/*
> Uploading distributions to https://upload.pypi.org/legacy/
> Enter your username: **********
> Enter your password: **********

Gå til PyPI sin prosjektadministrasjonsside for å se pakken din.

Nå kan andre utviklere som finner pakken din nyttig, installere og bruke den lokalt.

Hvordan installere en Python-pakke

Pakkehåndterere som pip gjør det enkelt å installere og administrere Python-pakker fra ulike kilder, inkludert Python Package Index (PyPI). For å installere en pakke med pip, åpne terminalen eller kommandolinjen, og bruk følgende kommando:

 pip install <pakkenavn>

For å se alle tilgjengelige kommandoer og valg for pip, bruk –help-flagget.

Skrive klare moduler

Pakker inneholder moduler og underpakker som igjen kan inneholde andre moduler. Det er anbefalt praksis å dele opp koden i moduler, spesielt når du jobber med større prosjekter, ettersom det fremmer bedre organisering og lesbarhet. Derfor er det viktig å skrive moduler med klarhet og konsistens når du utvikler med Python.