Moduły i pakiety w Pythonie
Moduły i pakiety pozwalają na organizację kodu, reużywalność i lepszą strukturę projektów.
Co to są moduły?
Moduł to plik Python z rozszerzeniem .py, który zawiera funkcje, klasy i zmienne. Możesz go importować w innych plikach.
Tworzenie własnego modułu:
Stwórz plik math_utils.py:
# math_utils.py
PI = 3.14159
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def multiply(a, b):
return a * b
def divide(a, b):
if b == 0:
raise ValueError("Nie można dzielić przez zero!")
return a / b
def power(base, exponent):
return base ** exponent
class Calculator:
def __init__(self):
self.history = []
def calculate(self, operation, a, b):
if operation == "add":
result = add(a, b)
elif operation == "subtract":
result = subtract(a, b)
elif operation == "multiply":
result = multiply(a, b)
elif operation == "divide":
result = divide(a, b)
else:
raise ValueError("Nieznana operacja")
self.history.append(f"{a} {operation} {b} = {result}")
return result
def get_history(self):
return self.historyImportowanie modułów:
# Import całego modułu
import math_utils
result = math_utils.add(5, 3)
print(result) # 8
# Import konkretnych funkcji
from math_utils import add, subtract, PI
print(add(10, 5)) # 15
print(subtract(10, 5)) # 5
print(PI) # 3.14159
# Import z aliasem
import math_utils as mu
result = mu.multiply(4, 6)
print(result) # 24
# Import wszystkiego (niezalecane)
from math_utils import *
result = power(2, 8)
print(result) # 256Wbudowane moduły Pythona:
Python ma wiele wbudowanych modułów:
# Moduł math - funkcje matematyczne
import math
print(math.sqrt(16)) # 4.0
print(math.ceil(3.7)) # 4
print(math.floor(3.7)) # 3
print(math.pi) # 3.141592653589793
# Moduł random - liczby losowe
import random
print(random.randint(1, 10)) # Losowa liczba od 1 do 10
print(random.choice(['a', 'b', 'c'])) # Losowy element z listy
print(random.random()) # Losowa liczba od 0 do 1
# Moduł datetime - praca z datami
from datetime import datetime, timedelta
now = datetime.now()
print(now) # Aktualna data i czas
tomorrow = now + timedelta(days=1)
print(tomorrow) # Jutro
# Moduł os - operacje systemowe
import os
print(os.getcwd()) # Aktualny katalog
print(os.listdir('.')) # Lista plików w katalogu
print(os.path.exists('test.txt')) # Czy plik istniejeTworzenie pakietów:
Pakiet to katalog zawierający moduły i plik __init__.py.
# Struktura pakietu:
# mypackage/
# __init__.py
# module1.py
# module2.py
# subpackage/
# __init__.py
# module3.py
# __init__.py - może być pusty lub zawierać kod inicjalizacyjny
# __init__.py
from .module1 import function1
from .module2 import Class1
__version__ = "1.0.0"
__author__ = "Twój Name"
# module1.py
def function1():
return "Hello from module1"
# module2.py
class Class1:
def __init__(self):
self.name = "Class1"
def greet(self):
return f"Hello from {self.name}"Importowanie z pakietów:
# Import z pakietu
import mypackage.module1
from mypackage import module2
from mypackage.module1 import function1
# Użycie
result = mypackage.module1.function1()
print(result) # Hello from module1
obj = module2.Class1()
print(obj.greet()) # Hello from Class1
print(function1()) # Hello from module1
# Import z subpakietu
from mypackage.subpackage import module3
from mypackage.subpackage.module3 import some_functionInstalowanie pakietów z PyPI:
Używając pip możesz instalować pakiety z Python Package Index (PyPI):
# W terminalu:
# pip install requests
# pip install numpy
# pip install pandas
# W kodzie:
import requests
# Pobieranie danych z API
response = requests.get('https://api.github.com/users/octocat')
data = response.json()
print(data['login']) # octocat
import numpy as np
# Operacje na tablicach
arr = np.array([1, 2, 3, 4, 5])
print(arr * 2) # [2 4 6 8 10]
print(np.mean(arr)) # 3.0
import pandas as pd
# Praca z danymi
df = pd.DataFrame({
'Name': ['Jan', 'Anna', 'Piotr'],
'Age': [25, 30, 28],
'City': ['Warszawa', 'Kraków', 'Gdańsk']
})
print(df)Wirtualne środowiska:
Wirtualne środowiska pozwalają na izolację zależności projektów:
# Tworzenie wirtualnego środowiska
# python -m venv myenv
# Aktywacja (Windows):
# myenv\Scripts\activate
# Aktywacja (Linux/Mac):
# source myenv/bin/activate
# Instalowanie pakietów w środowisku
# pip install package_name
# Dezaktywacja
# deactivate
# Lista zainstalowanych pakietów
# pip list
# Zapisanie zależności
# pip freeze > requirements.txt
# Instalowanie z pliku requirements.txtDobre praktyki:
- Używaj opisowych nazw modułów i pakietów
- Umieszczaj kod wykonywalny w bloku
if __name__ == "__main__": - Unikaj importowania wszystkiego z
from module import * - Używaj wirtualnych środowisk dla każdego projektu
- Dokumentuj swoje moduły i pakiety
- Używaj
__init__.pydo kontrolowania importów
Przykład z __name__:
# mymodule.py
def my_function():
return "Hello from my_function"
if __name__ == "__main__":
# Ten kod wykona się tylko gdy uruchomimy plik bezpośrednio
print("Uruchamiam moduł bezpośrednio")
print(my_function())
else:
# Ten kod wykona się gdy moduł zostanie zaimportowany
print("Moduł został zaimportowany")
# Gdy uruchomimy: python mymodule.py
# Wyświetli: "Uruchamiam moduł bezpośrednio" i "Hello from my_function"
# Gdy zaimportujemy: import mymodule
# Wyświetli tylko: "Moduł został zaimportowany"Ćwiczenie:
Stwórz własny moduł z funkcjami matematycznymi i zaimportuj go w głównym programie.
Uwaga:
Przykłady z zewnętrznymi bibliotekami (requests, numpy, pandas) nie działają w edytorze online – wymagają instalacji w lokalnym środowisku Python. Niektóre wbudowane moduły (os, datetime) również mogą nie działać w edytorze online.
Brak odpowiedzi