Module is a Python source code file, i.e. a file with .py extension.
Package is a directory which contains
__init__.py
file and can contain python modules and other packages.
Let's use the following directory structure as an example:
food_store/
__init__.py
product/
__init__.py
fruit/
__init__.py
apple.py
banana.py
drink/
__init__.py
juice.py
milk.py
beer.py
cashier/
__ini__.py
receipt.py
calculator.py
Let's consider that banana.py file contains:
def get_available_brands():
return ["chiquita"]
class Banana:
def __init__(self, brand="chiquita"):
if brand not in get_available_brands():
raise ValueError(f"Unknown brand: {brand}")
self._brand = brand
Let's say that we need access Banana
class from banana.py file inside receipt.py. We can achive this by importing at the beginning of receipt.py:
from food_store.product.fruit.banana import Banana
# then it's used like this
my_banana = Banana()
If we need to access multiple classes or functions from banana.py file:
from food_store.product.fruit import banana
# then it's used like this
brands = banana.get_available_brands()
my_banana = banana.Banana()
A comprehensive introduction to modules and packages can be found here.