Modules and Packages in Python
🟡 Intermediate
📖 Definition
- Module: A single Python source file (
.py) containing functions, classes, and variables that can be re-used across other files. - Package: A directory containing multiple related Python module files and an
__init__.pyfile (optional in modern Python 3.3+, but standard best practice).
🇮🇳 Hindi
Large programs ko simple aur clean rakhne ke liye code ko multiple .py files mein divide kiya jata hai. Code import karne ke liye import module_name ya from module import function ka use hota hai. File ko directly run kar rahe hain ya import karke use kar rahe hain—yeh check karne ke liye if __name__ == "__main__": idiom ka use hota hai.
🚩 Marathi
Code la alag .py files madhye organize karnyasathi Modules vaparatat. Import karnyasathi import keyword vaparatat.
📝 1. Import Statements & Aliasing
# 1. Importing complete module
import math
print(math.sqrt(16)) # 4.0
# 2. Importing specific functions with aliasing
from math import pi as PI_VAL, pow as power
print(PI_VAL) # 3.141592653589793
# 3. Importing custom module from package directory
from my_package.utils import format_currency
📝 2. The if __name__ == "__main__": Idiom
When Python runs a .py file:
- If the file is executed directly from terminal, Python sets the hidden
__name__variable to"__main__". - If the file is imported as a module into another script, Python sets
__name__to the file’s actual module name (e.g."utils").
💡 Why It Matters: Wrapping execution code inside
if __name__ == "__main__":prevents testing code from executing automatically whenever another script imports your file!
def add(a, b):
return a + b
# Runs ONLY when executed directly, NOT when imported!
if __name__ == "__main__":
print("Testing add function:", add(10, 5))
📝 3. Essential Standard Library Modules
Python comes with a rich Standard Library (“Batteries Included”):
math: Trigonometry, logarithms, roots, constants (pi,e).random: Random numbers (randint,choice,shuffle).sys: System arguments (sys.argv), exit (sys.exit()), Python path.os: Operating system files, directory creation, environment variables.time/datetime: Time tracking and performance benchmarking.
💡 Complete Example: Custom Module & Package Architecture
File 1: calculator.py
# Module: calculator.py
import math
def add(a, b):
return a + b
def square_root(x):
if x < 0:
raise ValueError("Cannot calculate square root of negative number.")
return math.sqrt(x)
# Executable entry point check
if __name__ == "__main__":
print("=== RUNNING CALCULATOR DIRECT MODULE TESTS ===")
print("Add Test :", add(10, 20))
print("Square Root Test:", square_root(25))
File 2: main_app.py
# Main Application Script
import calculator as calc
print("=== MAIN APPLICATION LAUNCH ===")
val1 = 15
val2 = 25
sum_result = calc.add(val1, val2)
sqrt_result = calc.square_root(sum_result)
print(f"Sum of {val1} + {val2} = {sum_result}")
print(f"Square Root of {sum_result} = {sqrt_result:.2f}")
👀 Output
Running python3 main_app.py:
=== MAIN APPLICATION LAUNCH ===
Sum of 15 + 25 = 40
Square Root of 40 = 6.32
(Notice how the === RUNNING CALCULATOR DIRECT MODULE TESTS === block from calculator.py did NOT execute because of if __name__ == "__main__":!)
⚠️ Common Mistakes
- Circular Imports: Module A imports Module B, and Module B imports Module A simultaneously, resulting in
ImportError: cannot import name. - Naming custom Python files the exact same name as standard library modules (e.g., naming your test file
math.pyorrandom.py), which shadows the built-in library!
🛡️ Safety / Important Notes
Avoid using from module import * because it pollutes your current namespace with unknown variable names and increases the risk of accidental variable shadowing bugs.
🌍 Real-World Usage
All professional software architectures organize code into separate domain packages (models/, views/, controllers/, services/, utils/).
🧪 Try It Yourself
- Use Python’s built-in
randommodule to pick a random item from a list["Apple", "Banana", "Cherry"]usingrandom.choice(). - Use
math.pito calculate the area of a circle with radius 7.
🎯 Mini Challenge
Create a custom module file string_utils.py containing a function reverse_and_capitalize(text). Import and use it in a separate app.py file.
🔗 Related Topics
🧭 Navigation
| ← Python Home | ← Previous: Advanced Functions | Next: File Handling → |