Водич за почетнике за креирање и коришћење пакета у Питхон-у

Zamislite izazovan poduhvat kreiranja sveobuhvatne aplikacije koja je smeštena u jednoj jedinoj Python datoteci. Iako je to tehnički moguće, suprotstavlja se osnovnim načelima efikasne, održive i višekratne programske opreme. Iz tih razloga, paketi i moduli su ključni za razvoj i izgradnju softvera.

Šta je paket?

U Pythonu, paket nudi način da se logički povezane celine, odnosno moduli i resursi, grupišu na organizovan način. To je u suštini direktorijum koji u sebi sadrži više Python modula, podpaketa i ostalih neophodnih resursa.

Paketi omogućavaju hijerarhijsku strukturu, što vam pomaže da organizujete kod vašeg projekta na različitim nivoima apstrakcije, čineći ga preglednijim i lakšim za održavanje.

Razlika između paketa i modula

Iako se i paketi i moduli koriste za organizaciju koda, važno je napomenuti da postoje ključne razlike između njih:

  • Modul: Modul predstavlja pojedinačnu datoteku koja sadrži Python kod. On definiše funkcije, klase, promenljive i druge elemente koji se mogu uvesti i koristiti u vašem kodu.
  • Paket: Paket je kolekcija jednog ili više modula, a može uključivati i podpakete, pružajući viši nivo organizacije.

Kako napraviti paket u Pythonu

Da biste uspešno kreirali paket, pratite ove korake:

Korak 1: Kreirajte direktorijum projekta

Započnite tako što ćete napraviti direktorijum koji će služiti kao koren vašeg projekta.

 study_bud/

Korak 2: Kreirajte direktorijum paketa

Unutar direktorijuma projekta, kreirajte novi direktorijum koji će predstavljati vaš paket. Dajte mu ime koje ima smisla i koje odražava svrhu ili funkcionalnost paketa. Ovaj direktorijum će sadržati module i podpakete koji su vezani za vaš paket.

 study_bud/
math_tool/

Korak 3: Definišite datoteku paketa __init__.py

U direktorijumu paketa, napravite datoteku koja se zove __init__.py. Prisustvo ove datoteke je ono što direktorijum čini paketom u Pythonu.

Ukoliko je potrebno da se izvrši određena inicijalizacija kada se paket koristi, postavite taj kod unutar datoteke __init__.py. Ako inicijalizacija nije potrebna, datoteka može biti i prazna.

 study_bud/
math_tool/
__init__.py

Korak 4: Dodajte module u paket

U direktorijum paketa dodajte Python module (.py) koji definišu funkcije, klase ili varijable. Ovi moduli sadrže stvarni kod koji pruža funkcionalnost vašeg paketa.

Možete kreirati više modula unutar istog direktorijuma paketa, organizujući funkcionalnost na logičan način.

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

Korak 5: Dodajte podpakete u paket

Ako je potrebna hijerarhijska struktura ili paket obuhvata različite funkcionalnosti, kreirajte podpakete unutar direktorijuma paketa.

Potpaket je još jedan direktorijum paketa unutar glavnog direktorijuma paketa. Svaki potpaket mora imati svoju datoteku __init__.py. Podpaketi omogućavaju dalju organizaciju koda i njegovo razdvajanje.

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

U ovim koracima, kreirali ste paket math_tool, dodali dva modula (operations.py i statistics.py) i dva podpaketa geometry i calculus, svaki sa svojim modulima.

Prateći ove korake, možete lako organizovati srodne funkcionalnosti koristeći paket i podpakete, što olakšava upravljanje kodom i njegovu ponovnu upotrebu.

Kako raditi sa paketom u Pythonu

Da biste koristili paket, neophodno je da ga uvezete. Ključne reči import i from omogućavaju vam da koristite paket u svom kodu.

 import math_tool 

Možete koristiti tačku za uvoz modula, podpaketa ili određenih atributa iz paketa. Tačkasta notacija omogućava kretanje kroz strukturu direktorijuma paketa, čineći uvoz čitljivijim i lakšim za održavanje.

 from math_tool.operations import add, multiply 

U gornjem kodu, kretali ste se od direktorijuma paketa (math_tool) do modula operations, koristeći tačkastu notaciju i uvezli dve funkcije (add i multiply).

Apsolutni uvoz nasuprot relativnom uvozu

Kod apsolutnog uvoza, navodite punu putanju od paketa najvišeg nivoa (osnovni paket) do željenog modula ili podpaketa. To je najčešći i preporučeni način za uvoz modula i paketa u Pythonu.

 from math_tool.geometry.shapes import parallelogram

Polazeći od math_tool, idete u potpaket geometry, pronalazite modul shapes.py i uvozite funkciju parallelogram.

Relativni uvozi vam omogućavaju uvoz u odnosu na lokaciju trenutnog modula, koristeći tačku da biste označili relativne putanje.

Na primer, unutar modula calculus/integrations.py, možete koristiti relativni uvoz da biste uvezli funkciju iz modula shapes.py u potpaketu geometry.

 
from ..geometry.shapes import rhombus

Dvostruka tačka (..”) govori Pythonu da:

  • Krene od direktorijuma potpaketa (calculus) gde se nalazi modul (integrations.py).
  • Izađe u direktorijum nadređenog paketa (math_tool).
  • Pronađe potpaket geometry u nadređenom direktorijumu.
  • Uđe u modul shapes.py i uveze rhombus iz njega.

Dakle, tačka ukazuje na broj direktorijuma koje treba preći od trenutnog direktorijuma modula.

Uvoz sa pseudonimom (alias) radi lakšeg korišćenja

Možete dodeliti pseudonim uvozu, što olakšava pozivanje u vašem kodu. Pseudonimi su korisni kada se radi sa dugim imenima paketa ili modula.

Da biste dodelili pseudonim, koristite ključnu reč as.

 import math_tool.calculus as cal

Kako distribuirati vaš paket u Pythonu

Python vam pruža alate i platformu za kreiranje i distribuciju vašeg paketa. Distribucija paketa omogućava vam da delite kod sa drugim programerima, promovišete saradnju, pojednostavite instalaciju za korisnike i doprinesete široj Python zajednici.

Korak 1: Kreirajte nalog na PyPI

Python Package Index (PyPI) je osnovno skladište Python paketa. Možete objaviti svoje pakete na PyPI-u kako bi ih drugi programeri mogli lako pronaći i instalirati.

Obavezno zapamtite svoje korisničko ime i lozinku jer će vam biti potrebni za autentifikaciju prilikom postavljanja paketa na PyPI.

Korak 2: Instalirajte alate za upravljanje paketima

Ovi alati vam olakšavaju konfigurisanje, kreiranje i postavljanje paketa za distribuciju jednom komandom.

 pip install build wheel twine

Korak 3: Kreirajte datoteku setup.py

Da biste distribuiral svoj paket, kreirajte setup.py datoteku u osnovnom direktorijumu projekta. Datoteka setup.py sadrži metapodatke o vašem paketu, kao što su njegovo ime, verzija, autor, opis, zavisnosti i još mnogo toga.

Alati za upravljanje paketima koriste datoteku setup.py za konfigurisanje i kreiranje paketa.

 
from setuptools import setup, find_packages

setup(
name="<ime paketa>",
version='1.0.0',
author="<Vaše ime>",
description='Kolekcija matematičkih uslužnih funkcija',
packages=find_packages(),
install_requires=[
'numpy',
'scipy',
],
)

Korak 4: Napravite paket

Kada pripremite datoteku setup.py, možete je koristiti za kreiranje paketa za distribuciju. U terminalu ili komandnoj liniji, pređite u direktorijum koji sadrži datoteku setup.py i izvršite sledeću naredbu:

 python setup.py sdist bdist_wheel

Ova naredba generiše dist direktorijum koji sadrži izvorni paket distribucije (.tar.gz) i paket točka (.whl). Takođe ćete videti direktorijum build i informacije.

Korak 5: Postavite paket na PyPI

Kada je vaš paket spreman, možete ga postaviti na PyPI.

Izvršite sledeću naredbu:

 twine upload dist/*
> Postavljanje distribucija na https://upload.pypi.org/legacy/
> Unesite vaše korisničko ime: **********
> Unesite vašu lozinku: **********

Posetite vašu PyPI stranicu za upravljanje projektima da biste videli vaš paket.

Sada drugi programeri koji smatraju vaš paket korisnim, mogu da ga instaliraju i koriste lokalno.

Kako instalirati Python paket

Menadžeri paketa, kao što je pip, olakšavaju instaliranje i upravljanje Python paketima iz različitih izvora, uključujući Python Package Index (PyPI). Da biste instalirali paket pomoću pipa, otvorite terminal ili komandnu liniju i koristite sledeću naredbu:

 pip install <ime_paketa>

Da biste videli sve dostupne komande i opcije za pip, koristite opciju –help.

Pisanje čistih modula

Paketi sadrže module i podpakete, koji dalje mogu sadržati druge module. Dobra je praksa modularizovati svoj kod, posebno kada radite na većim projektima, jer to promoviše bolju organizaciju koda i čitljivost. Zato je važno pisati module sa jasnoćom kada razvijate u Pythonu.