Przewodnik dla początkujących dotyczący tworzenia i używania pakietów w Pythonie

Spróbuj wyobrazić sobie, jak trudne byłoby stworzenie rozbudowanej aplikacji, ograniczając się jedynie do jednego pliku Pythona. Choć teoretycznie możliwe, byłoby to sprzeczne z zasadami tworzenia oprogramowania, które ma być wydajne, łatwe w utrzymaniu i nadające się do wielokrotnego użytku. Z tego względu, pakiety oraz moduły są kluczowe przy projektowaniu i rozwijaniu aplikacji.

Czym jest pakiet?

W Pythonie, pakiet umożliwia zgrupowanie logicznie powiązanych ze sobą modułów i innych zasobów. Jest to folder, w którym znajdują się różne moduły Pythona, pod-pakiety, a także inne elementy.

Pakiety oferują strukturę hierarchiczną, co pozwala na porządkowanie kodu projektu w oparciu o różne poziomy abstrakcji.

Różnica między pakietami a modułami

Chociaż zarówno pakiety, jak i moduły służą do organizowania kodu, istnieją między nimi istotne różnice:

  • Moduł: to pojedynczy plik, który zawiera kod w języku Python. W module definiowane są funkcje, klasy, zmienne i inne obiekty, które mogą być importowane i wykorzystywane w innych częściach kodu.
  • Pakiet: to zbiór jednego lub kilku modułów, może również zawierać pod-pakiety.

Jak utworzyć pakiet w Pythonie

Aby utworzyć pakiet, należy wykonać poniższe kroki.

Krok 1: Utwórz folder projektu

Na początek, utwórz folder, który będzie stanowił główny katalog twojego projektu.

 study_bud/

Krok 2: Utwórz folder pakietu

W folderze projektu, utwórz kolejny folder, który będzie pełnił rolę folderu pakietu. Wybierz dla niego nazwę, która jasno odzwierciedla cel lub funkcjonalność pakietu. W folderze pakietu będą przechowywane moduły i pod-pakiety związane z tym pakietem.

 study_bud/
math_tool/

Krok 3: Utwórz plik __init__.py

W folderze pakietu utwórz plik o nazwie __init__.py. Obecność tego pliku informuje Pythona, że dany folder ma być traktowany jako pakiet.

Jeśli potrzebujesz uruchomić kod inicjalizujący za każdym razem, gdy używasz pakietu, umieść go w pliku __init__.py. W przeciwnym razie, plik ten może pozostać pusty.

 study_bud/
math_tool/
__init__.py

Krok 4: Dodaj moduły do pakietu

W folderze pakietu umieść pliki Pythona (.py), które zawierają definicje funkcji, klas lub zmiennych.

Te moduły zawierają właściwy kod, który zapewnia funkcjonalność Twojego pakietu. W folderze pakietu możesz utworzyć wiele modułów.

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

Krok 5: Dodaj pod-pakiety do pakietu

Jeśli pakiet ma mieć strukturę hierarchiczną lub obejmować różne obszary funkcjonalne, możesz utworzyć pod-pakiety w folderze pakietu.

Pod-pakiet to po prostu kolejny folder pakietu, znajdujący się w głównym folderze pakietu. Każdy pod-pakiet również powinien zawierać własny plik __init__.py. Pod-pakiety pozwalają na lepszą organizację i podział kodu.

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

W ten sposób utworzyłeś pakiet o nazwie math_tool, dodałeś dwa moduły (operations.py i statistics.py) oraz dwa pod-pakiety geometry oraz calculus, z których każdy posiada własne moduły.

Wykonując te kroki, z łatwością uporządkujesz powiązane funkcje za pomocą pakietu i pod-pakietów, co ułatwi zarządzanie kodem oraz jego ponowne wykorzystanie.

Jak używać pakietu w Pythonie

Aby korzystać z pakietu, musisz go najpierw zaimportować. Słowa kluczowe `import` oraz `from` umożliwiają zaimportowanie i wykorzystanie pakietu w Twoim kodzie.

 import math_tool 

Możesz także użyć notacji kropkowej, aby zaimportować moduły, pod-pakiety lub określone elementy z pakietu. Notacja kropkowa pozwala na nawigację po strukturze katalogów pakietu. Dzięki niej kod staje się bardziej czytelny i łatwiejszy w utrzymaniu.

 from math_tool.operations import add, multiply 

W powyższym przykładzie, za pomocą notacji kropkowej przechodzimy z folderu pakietu (math_tool) do modułu operations i importujemy dwie funkcje (add i multiply).

Import absolutny a import relatywny

W przypadku importu absolutnego, podawana jest pełna ścieżka od pakietu najwyższego poziomu (pakietu głównego) do wymaganego modułu lub pod-pakietu. Jest to najczęściej stosowany i zalecany sposób importowania modułów oraz pakietów w Pythonie.

 from math_tool.geometry.shapes import parallelogram

Zaczynając od math_tool, przechodzimy do pod-pakietu geometry, następnie do modułu shapes.py i importujemy funkcję parallelogram.

Natomiast import relatywny pozwala na dokonywanie importów w odniesieniu do aktualnej lokalizacji modułu, używając notacji kropkowej do określenia relatywnych ścieżek importu.

Na przykład, w module calculus/integrations.py możesz użyć importu relatywnego, aby zaimportować funkcję z modułu shapes.py znajdującego się w pod-pakiecie geometry.

 
from ..geometry.shapes import rhombus

Dwie kropki („..”) oznaczają dla Pythona:

  • Rozpocznij od folderu pod-pakietu (calculus), w którym znajduje się moduł (integrations.py).
  • Przejdź do folderu nadrzędnego pakietu (math_tool) dla tego pod-pakietu.
  • Znajdź pod-pakiet geometry w folderze nadrzędnym.
  • Wejdź do modułu shapes.py i zaimportuj z niego romb.

Zatem, notacja z kropkami reprezentuje liczbę folderów, o które należy przejść w górę drzewa katalogów z bieżącego folderu modułu.

Import aliasów dla wygody

Możesz nadać alias importowanemu elementowi, aby łatwiej odnosić się do niego w kodzie. Aliasy są szczególnie użyteczne, jeśli nazwy pakietów lub modułów są długie.

Aby przypisać alias, należy użyć słowa kluczowego `as`.

 import math_tool.calculus as cal

Jak udostępnić swój pakiet w Pythonie

Python oferuje narzędzia i platformę do tworzenia oraz dystrybucji pakietów. Udostępnienie pakietu pozwala na dzielenie się kodem z innymi programistami, zachęca do współpracy, upraszcza instalację dla użytkowników i pozwala na wnoszenie wkładu do szerszej społeczności Pythona.

Krok 1: Załóż konto na PyPI

Python Package Index (PyPI) to domyślny rejestr pakietów Pythona. Możesz opublikować swoje pakiety na PyPI, aby inni programiści mogli je łatwo znaleźć i zainstalować.

Zapamiętaj swoją nazwę użytkownika i hasło, ponieważ będą one potrzebne do uwierzytelnienia podczas przesyłania pakietu do PyPI.

Krok 2: Zainstaluj narzędzia do zarządzania pakietami

Te narzędzia ułatwiają konfigurację, budowanie i przesyłanie pakietu dystrybucyjnego za pomocą jednego polecenia.

 pip install build wheel twine

Krok 3: Utwórz plik setup.py

Aby udostępnić swój pakiet, utwórz plik setup.py w głównym folderze twojego projektu. Plik `setup.py` zawiera metadane na temat twojego pakietu, takie jak jego nazwa, wersja, autor, opis, zależności i inne.

Narzędzia do zarządzania pakietami wykorzystają plik setup.py do konfiguracji i zbudowania pakietu.

 
from setuptools import setup, find_packages

setup(
name="<package name>",
version='1.0.0',
author="<Your Name>",
description='A collection of mathematical utility functions',
packages=find_packages(),
install_requires=[
'numpy',
'scipy',
],
)

Krok 4: Zbuduj pakiet

Gdy masz gotowy plik setup.py, możesz go użyć do zbudowania pakietu gotowego do dystrybucji. W terminalu lub wierszu polecenia, przejdź do folderu zawierającego plik setup.py i wykonaj następujące polecenie:

 python setup.py sdist bdist_wheel

To polecenie utworzy folder dist, w którym znajdą się źródłowy pakiet dystrybucyjny (.tar.gz) oraz pakiet dystrybucyjny wheel (.whl). Zobaczysz również foldery `build` i `info`.

Krok 5: Prześlij pakiet do PyPI

Mając gotowy pakiet, możesz przesłać go do PyPI.

Wykonaj następujące polecenie:

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

Odwiedź swoją stronę zarządzania projektami na PyPI, aby zobaczyć swój pakiet.

Teraz inni programiści, którzy uznają Twój pakiet za przydatny, mogą go zainstalować i używać lokalnie.

Jak zainstalować pakiet Pythona

Menedżery pakietów, takie jak `pip`, ułatwiają instalowanie i zarządzanie pakietami Pythona z różnych źródeł, w tym z Python Package Index (PyPI). Aby zainstalować pakiet za pomocą `pip`, otwórz terminal lub wiersz polecenia i użyj następującego polecenia:

 pip install <package_name>

Aby zobaczyć wszystkie dostępne polecenia i opcje `pip`, użyj opcji `–help`.

Pisanie przejrzystych modułów

Pakiety zawierają moduły oraz pod-pakiety, które z kolei również mogą zawierać kolejne moduły. Dobrą praktyką jest modularyzacja kodu, zwłaszcza podczas pracy nad większymi projektami, ponieważ sprzyja to lepszemu uporządkowaniu oraz czytelności kodu. Dlatego też, tak ważne jest, aby podczas programowania w Pythonie, tworzyć moduły w sposób przejrzysty i zrozumiały.