Modules & Packages
Checking access...
Modules and packages let you organize code across multiple files and reuse third-party libraries.
Modules
A module is any .py file. Create math_utils.py:
def add(a, b): return a + b
def multiply(a, b): return a * b
PI = 3.14159Import and use it:
# Different import stylesimport math_utilsprint(math_utils.add(5, 3)) # 8
from math_utils import multiplyprint(multiply(4, 5)) # 20
from math_utils import PIprint(PI) # 3.14159
from math_utils import add as additionprint(addition(1, 2)) # 3Module Search Path
Python looks for modules in sys.path:
import sysprint(sys.path)# ['', '/usr/lib/python3.12', '/usr/local/lib/python3.12/site-packages', ...]The if __name__ Guard
def add(a, b): return a + bdef sub(a, b): return a - b
# This code runs ONLY when executed directly, not when importedif __name__ == "__main__": # Test the module print(add(5, 3)) # 8 print(sub(10, 4)) # 6# main.py — just imports, no test outputimport calculatorprint(calculator.add(1, 2)) # 3 (test code doesn't run)Packages
A package is a directory with __init__.py:
project/├── main.py└── shapes/ ├── __init__.py ├── circle.py └── rectangle.py# shapes/__init__.py — package initialization (can be empty)from .circle import area as circle_areafrom .rectangle import area as rect_area
# shapes/circle.pydef area(radius): return 3.14159 * radius ** 2
# shapes/rectangle.pydef area(width, height): return width * heightfrom shapes import circle_area, rect_areaprint(circle_area(5))print(rect_area(4, 6))Using pip
The Python package installer:
# Install a packagepip install requests
# Install specific versionpip install requests==2.31.0
# Install from requirements filepip install -r requirements.txt
# List installed packagespip list
# Uninstallpip uninstall requestsRequirements File
requests==2.31.0flask>=3.0numpypytestVirtual Environments
Isolate project dependencies:
# Createpython -m venv venv
# Activate (Linux/macOS)source venv/bin/activate
# Activate (Windows)venv\Scripts\activate
# Deactivatedeactivate# Best practice: create venv, activate, then installpython -m venv venvsource venv/bin/activatepip install requests flaskpip freeze > requirements.txtCommon Built-in Modules
import os # Operating system interfaceimport sys # System-specific parametersimport math # Mathematical functionsimport random # Random number generationimport datetime # Date and time handlingimport json # JSON encoding/decodingimport re # Regular expressionsimport pathlib # Object-oriented file pathsimport csv # CSV file reading/writingRelative vs Absolute Imports
# Absolute imports (preferred)from shapes.circle import area
# Relative imports (inside packages only)from .circle import area # sibling modulefrom ..utils import config # parent packageCommon Pitfalls
# Circular imports — avoid!# a.py imports b.py, b.py imports a.py
# Name shadowing — don't name modules same as builtins# Don't create math.py, json.py, etc.
# Import order convention:# 1. Standard library# 2. Third-party# 3. Local modulesimport osimport sys
import requestsimport flask
from myapp import configKey Takeaways
- Every
.pyfile is a module; every directory with__init__.pyis a package if __name__ == "__main__"prevents test code from running on import- Use
pipto install third-party packages,requirements.txtto track them - Virtual environments isolate project dependencies
- Packages support
__init__.pyfor initialization and__all__for export control - Avoid circular imports and name collisions with built-in modules