మాడ్యూల్స్, ప్యాకేజీలు & వర్చువల్ ఎన్విరాన్‌మెంట్స్

🌐 Modern Python 3.12+ 📖 Chapter 19 of 25 📁 Phase 04: ఫంక్షన్స్, మాడ్యూల్స్ & ఫైల్ I/O 🗓️ 2026 Edition
📌 Covered in this chapter: import సిస్టమ్ · కస్టమ్ మాడ్యూల్స్ సృష్టి · __name__ == '__main__' గార్డ్రైల్ · pip ప్యాకేజీ మేనేజర్ · venv వర్చువల్ ఎన్విరాన్‌మెంట్స్ సెటప్ · CPython Import System (sys.modules, sys.path) · __pycache__ Bytecode Caching · Custom Modules · if __name__ == '__main__' Guardrail · __init__.py Package Hierarchy · pip & requirements.txt · venv Virtual Environments · Package Dependency Security Auditor Project
మీరు ఒక పూర్తి స్థాయి వెబ్ అప్లికేషన్, ఆర్టిఫిషియల్ ఇంటెలిజెన్స్ మోడల్ లేదా డేటాబేస్ ఇంజిన్‌ను నిర్మిస్తున్నప్పుడు — వేల లైన్ల కోడ్‌ను ఒకే ఒక్క main.py ఫైల్‌లో కుక్కడం ఆత్మహత్యతో సమానం. ఒక పెద్ద సాఫ్ట్‌వేర్ ఆర్కిటెక్చర్‌లో డేటాబేస్ కనెక్షన్లు ఒకచోట, బిజినెస్ లాజిక్ ఒకచోట, యూజర్ ఇంటర్‌ఫేస్ మరొకచోట విడివిడిగా అమర్చబడాలి.

కోడ్‌ను ఈ విధంగా అందమైన గదులుగా విభజించే కళాత్మక నిర్మాణమే మాడ్యూల్స్ (Modules) & ప్యాకేజీలు (Packages)! ఒక ఫైల్‌లోని ఫంక్షన్లను మరొక ఫైల్‌లోకి ఆహ్వానించే import సిస్టమ్ తెరవెనుక CPython లో ఎలా పనిచేస్తుంది? ప్రతి ప్రొఫెషనల్ పైథాన్ డెవలపర్ ఫైల్ చివర రాసే మంత్రం if __name__ == '__main__': రహస్యం ఏమిటి? ప్రాజెక్టుల మధ్య లైబ్రరీ వెర్షన్లు కొట్టుకోకుండా కాపాడే venv (Virtual Environments) మరియు pip ప్యాకేజీ మేనేజర్‌ను ప్రొడక్షన్‌లో ఎలా మాస్టర్ చేయాలి? ఈ అధ్యాయంలో మనం ఈ అంశాలన్నింటినీ సమగ్రంగా చర్చిస్తూ, సాఫ్ట్‌వేర్ ప్యాకేజీలలోని సెక్యూరిటీ లోపాలను ఆడిట్ చేసే రియల్-వరల్డ్ డిపెండెన్సీ ఆడిటర్ ప్రాజెక్ట్‌ను నిర్మిద్దాం!

1 మాడ్యూల్ అంటే ఏమిటి? (What is a Python Module?)

పైథాన్‌లో మాడ్యూల్ (Module) అనేది పైథాన్ కోడ్ (ఫంక్షన్లు, క్లాస్‌లు, వేరియబుల్స్) కలిగిన ఏదైనా ఒక సాధారణ .py ఫైల్!

ఉదాహరణకు, మీరు calculator.py అనే ఫైల్‌ను సృష్టిస్తే, అది తక్షణమే ఒక మాడ్యూల్ అవుతుంది. దానిలోని ఫంక్షన్లను వేరే ఫైల్ నుండి import calculator అని రాసి నిశ్చింతగా ఉపయోగించుకోవచ్చు.

2 CPython import సిస్టమ్ అంతర్గత పనితీరు

మీరు import math అని రాసినప్పుడు తెరవెనుక CPython క్రింది ఖచ్చితమైన 3-దశల ఆర్కిటెక్చర్‌ను అమలు చేస్తుంది:

[CPython Module Import Sequence]
1. sys.modules Cache Check ─────▶ ఇప్పటికే మెమరీలో లోడ్ అయ్యి ఉందా?
                                             │ YES ──▶ Return cached module instantly! ⚡
                                             ▼ NO
2. sys.path Directory Search ───▶ ఫైల్ ఎక్కడ ఉందో వెతుకుతుంది:
                                                • [1] ప్రస్తుత వర్కింగ్ డైరెక్టరీ (Current Script Dir)
                                                • [2] PYTHONPATH ఎన్విరాన్‌మెంట్ వేరియబుల్
                                                • [3] పైథాన్ స్టాండర్డ్ లైబ్రరీ (Standard Library)
                                                • [4] థర్డ్ పార్టీ ప్యాకేజీలు (site-packages)
                                             ▼
3. Compilation & Execution ─────▶ కోడ్‌ను బైట్‌కోడ్‌గా కంపైల్ చేసి __pycache__ లో .pyc ఫైల్‌గా రాస్తుంది. మాడ్యూల్ ఆబ్జెక్ట్‌ను ఎగ్జిక్యూట్ చేసి sys.modules లో భద్రపరుస్తుంది!

3 Import సింటాక్స్ వైవిధ్యాలు (Variants & Best Practices)

పైథాన్‌లో మాడ్యూల్స్ ఇంపోర్ట్ చేయడానికి నాలుగు ప్రధాన పద్ధతులు ఉన్నాయి:

4 కస్టమ్ మాడ్యూల్స్ సృష్టి & లోకల్ ఇంపోర్ట్స్

ఒక కస్టమ్ మాడ్యూల్ ఎలా తయారు చేయాలో చూద్దాం. మీ ప్రాజెక్ట్ ఫోల్డర్‌లో string_utils.py అనే ఫైల్‌ను సృష్టించి అందులో ఫంక్షన్స్ రాసి, ప్రధాన అప్లికేషన్‌లో ఎలా ఇంపోర్ట్ చేయాలో క్రింది కోడ్‌లో చూడండి:

string_utils_and_usage.py
# =====================================================================
# కస్టమ్ మాడ్యూల్ ఫంక్షన్ల డెమో: string_utils లాజిక్
# =====================================================================

def to_url_slug(title: str) -> str:
    """ఒక ఆర్టికల్ శీర్షికను SEO-ఫ్రెండ్లీ URL స్లగ్‌గా మారుస్తుంది."""
    clean = "".join([c.lower() if c.isalnum() or c == " " else "" for c in title])
    return "-".join(clean.split())

def mask_sensitive_aadhaar(aadhaar_num: str) -> str:
    """ఆధార్ నంబర్‌లోని మొదటి 8 అంకెలను మాస్క్ చేస్తుంది (xxxx-xxxx-1234)."""
    digits = aadhaar_num.replace("-", "").replace(" ", "")
    if len(digits) != 12:
        return "తప్పుడు ఆధార్ నంబర్!"
    return f"XXXX-XXXX-{digits[-4:]}"

# ప్రధాన స్క్రిప్ట్‌లో దీనిని వాడుకోవడం:
blog_title = "Python 3 టుటోరియల్స్ ఇన్ తెలుగు 2026!"
user_aadhaar = "1234-5678-9012"

print("SEO స్లగ్    :", to_url_slug(blog_title))
print("మాస్క్డ్ ఆధార్ :", mask_sensitive_aadhaar(user_aadhaar))

5 The Infamous if __name__ == '__main__': గార్డ్‌రైల్

పైథాన్ ప్రోగ్రామర్లు ప్రతి ఫైల్ చివర రాసే if __name__ == '__main__': వెనుక ఉన్న లోతైన రహస్యం ఏమిటో తెలుసా?

పైథాన్ ఒక ఫైల్‌ను రన్ చేస్తున్నప్పుడు, దానికి స్వయంచాలకంగా __name__ అనే ప్రత్యేకమైన వేరియబుల్‌ను కేటాయిస్తుంది:

గార్డ్‌రైల్ ప్రయోజనం: మీరు రాసిన మాడ్యూల్‌లో టెస్ట్ కోడ్ ఉందనుకోండి. ఆ ఫైల్‌ను వేరేవాళ్ళు ఇంపోర్ట్ చేసుకున్నప్పుడు ఆ టెస్ట్ కోడ్ రన్ కాకుండా కేవలం ఫైల్‌ను నేరుగా రన్ చేసినప్పుడు మాత్రమే ఎగ్జిక్యూట్ అవ్వడానికి ఈ గార్డ్‌రైల్ రక్షణ కల్పిస్తుంది!

6 ప్యాకేజీలు అంటే ఏమిటి? (Packages & __init__.py)

మాడ్యూల్ అనేది ఒక సింగిల్ ఫైల్ అయితే, ప్యాకేజీ (Package) అనేది అనేక మాడ్యూల్స్‌ను కలిగి ఉండే ఒక డైరెక్టరీ (ఫోల్డర్)!

ఒక ఫోల్డర్‌ను పైథాన్ అధికారిక ప్యాకేజీగా గుర్తించాలంటే అందులో సాంప్రదాయకంగా __init__.py అనే ప్రత్యేక ఫైల్ ఉండాలి.

my_ecommerce_app/
│── main.py
└── store/ # Package Directory
    ├── __init__.py # ప్యాకేజీ మార్కర్ & ఇనిషియలైజర్
    ├── products.py # Module 1
    ├── orders.py # Module 2
    └── billing.py # Module 3

పైథాన్ 3.3+ నుండి __init__.py లేకపోయినా Namespace Packages సపోర్ట్ ఉన్నప్పటికీ, ప్యాకేజీ ఎక్స్‌పోర్ట్‌లను (__all__) నియంత్రించడానికి మరియు ప్రారంభ లాజిక్ రన్ చేయడానికి __init__.py ఉంచడం నేటికీ బెస్ట్ ప్రాక్టీస్.

7 కోడ్ డెమో 1: మాడ్యూల్ ఇంట్రోస్పెక్షన్ & sys.modules

CPython లోడ్ చేసిన మాడ్యూల్స్ మరియు వాటి ఫైల్ పాత్‌లను ప్రోగ్రామాటిక్‌గా ఎలా పరిశీలించవచ్చో చూడండి:

01_module_system_introspection.py
# =====================================================================
# చాప్టర్ 19 డెమో 1: sys మాడ్యూల్ ఇంట్రోస్పెక్షన్ & sys.path సెర్చ్ ఆర్డర్
# =====================================================================
import sys
import math

print("=== 1. ప్రస్తుత స్క్రిప్ట్ __name__ వేరియబుల్ ===")
print(f"__name__ విలువ : {__name__} (నేరుగా రన్ అయినందున '__main__' గా ఉంది)")

print("\n=== 2. sys.modules లో math మాడ్యూల్ ఉనికి ===")
print(f"math క్యాష్ అయిందా? : {'math' in sys.modules}")
print(f"math మాడ్యూల్ రిఫరెన్స్: {sys.modules['math']}")

print("\n=== 3. CPython సెర్చ్ పాత్స్ (sys.path Top 3) ===")
for idx, p in enumerate(sys.path[:3], start=1):
    print(f"  {idx}. {p}")

8 pip — పైథాన్ అఫీషియల్ ప్యాకేజీ మేనేజర్ & PyPI

ప్రపంచవ్యాప్తంగా డెవలపర్లు తయారు చేసిన లక్షలాది ఓపెన్ సోర్స్ లైబ్రరీలు PyPI (Python Package Index - pypi.org) లో అందుబాటులో ఉంటాయి. వాటిని మన సిస్టమ్‌లో ఇన్‌స్టాల్ చేసుకోవడానికి ఉపయోగపడే టూలే pip (Pip Installs Packages).

# ప్రధాన pip కమాండ్లు:
pip install requests # ఒక ప్యాకేజీని ఇన్‌స్టాల్ చేయడం
pip install fastapi==0.110.0 # నిర్దిష్టమైన వెర్షన్‌ను ఇన్‌స్టాల్ చేయడం
pip list # ఇన్‌స్టాల్ అయిన ప్యాకేజీల లిస్ట్ చూడటం
pip freeze > requirements.txt # ప్రాజెక్ట్ డిపెండెన్సీలను ఫైల్‌లో భద్రపరచడం
pip install -r requirements.txt # కొత్త సర్వర్‌లో అన్ని లైబ్రరీలను ఒకే కమాండ్‌తో ఇన్‌స్టాల్ చేయడం!

9 వర్చువల్ ఎన్విరాన్‌మెంట్స్ (venv) ఎందుకు తప్పనిసరి?

మీ కంప్యూటర్‌లో రెండు వేర్వేరు ప్రాజెక్టులు ఉన్నాయనుకోండి:

మీరు గ్లోబల్ పైథాన్‌లో Django 5.0 ఇన్‌స్టాల్ చేస్తే, పాత Project A క్రాష్ అవుతుంది! ఈ ఘర్షణలను నివారించడానికి ప్రతి ప్రాజెక్ట్‌కు ఒక ప్రత్యేకమైన, ఒంటరి (Isolated) వాతావరణాన్ని సృష్టించే సాధనమే వర్చువల్ ఎన్విరాన్‌మెంట్ (venv).

10 venv లైఫ్‌సైకిల్ కమాండ్స్ (Windows & Linux)

పైథాన్ స్టాండర్డ్ లైబ్రరీలోనే venv అంతర్నిర్మితంగా లభిస్తుంది:

దశ / ఆపరేషన్ Windows కమాండ్ (PowerShell) Linux / macOS (Bash)
1. Create Virtual Env python -m venv .venv python3 -m venv .venv
2. Activate Environment .venv\Scripts\Activate.ps1 source .venv/bin/activate
3. Deactivate deactivate deactivate

11 ఆధునిక పైథాన్ టూలింగ్ (Poetry, UV, Pipenv)

ఆధునిక క్లౌడ్ నేటివ్ డెవలప్‌మెంట్‌లో సాధారణ pip కాకుండా వేగవంతమైన ప్యాకేజీ మేనేజర్లు ప్రాచుర్యం పొందాయి:

12 కామన్ బిగినర్స్ మిస్టేక్స్ & మాడ్యూల్ షాడోయింగ్ ట్రాప్

13 రియల్-వరల్డ్ ప్రాజెక్ట్: "Package Dependency Security & Vulnerability Auditor"

ఈ పంతొమ్మిదవ అధ్యాయంలో నేర్చుకున్న అన్ని అంశాలను (మాడ్యూల్స్, ప్యాకేజీలు, __name__ గార్డ్‌రైల్, sys.path, requirements.txt పార్సింగ్) సమగ్రంగా అనుసంధానిస్తూ — సాఫ్ట్‌వేర్ డిపెండెన్సీలలో కాలం చెల్లిన లేదా ప్రమాదకరమైన లైబ్రరీలను గుర్తించే పూర్తి స్థాయి Enterprise Package Security Auditor Engine ను నిర్మిద్దాం!

02_package_security_auditor.py
# =====================================================================
# చాప్టర్ 19 మినీ ప్రాజెక్ట్: Package Security & Dependency Audit Engine
# కాన్సెప్ట్స్: Custom Modules Architecture, __name__ == '__main__' Guard,
#             requirements.txt Parsing, Vulnerability Advisory Matching
# =====================================================================

# తెలిసిన సెక్యూరిటీ వల్నరబిలిటీస్ గ్లోబల్ డేటాబేస్ (CVE Advisory Mock)
KNOWN_VULNERABLE_PACKAGES = {
    "requests": {"vulnerable_below": "2.31.0", "cve": "CVE-2023-32681", "risk": "CRITICAL"},
    "flask": {"vulnerable_below": "2.2.5", "cve": "CVE-2023-30861", "risk": "HIGH"},
    "urllib3": {"vulnerable_below": "1.26.17", "cve": "CVE-2023-43804", "risk": "MEDIUM"},
    "django": {"vulnerable_below": "4.2.4", "cve": "CVE-2023-36053", "risk": "CRITICAL"}
}

def parse_requirements_manifest(manifest_content: str) -> list[tuple[str, str]]:
    """requirements.txt టెక్స్ట్ ఫైల్‌ను పార్స్ చేసి (ప్యాకేజీ, వెర్షన్) టుపుల్స్‌గా అందిస్తుంది."""
    parsed_packages = []
    lines = manifest_content.strip().split("\n")

    for line in lines:
        line = line.strip()
        if not line or line.startswith("#"):
            continue
        if "==" in line:
            pkg, ver = line.split("==")
            parsed_packages.append((pkg.strip().lower(), ver.strip()))
        elif ">=" in line:
            pkg, ver = line.split(">=")
            parsed_packages.append((pkg.strip().lower(), ver.strip()))

    return parsed_packages

def audit_project_dependencies(dependencies: list[tuple[str, str]]) -> dict:
    """డిపెండెన్సీలను సెక్యూరిటీ డేటాబేస్‌తో పోల్చి సమగ్ర నివేదికను ఇస్తుంది."""
    findings = []
    clean_count = 0

    for pkg_name, installed_ver in dependencies:
        if pkg_name in KNOWN_VULNERABLE_PACKAGES:
            advisory = KNOWN_VULNERABLE_PACKAGES[pkg_name]
            # సాధారణ వెర్షన్ కంపారిజన్
            if installed_ver < advisory["vulnerable_below"]:
                findings.append({
                    "package": pkg_name,
                    "installed": installed_ver,
                    "safe_version": advisory["vulnerable_below"],
                    "cve": advisory["cve"],
                    "risk": advisory["risk"]
                })
            else:
                clean_count += 1
        else:
            clean_count += 1

    return {
        "total_audited": len(dependencies),
        "clean_packages": clean_count,
        "vulnerable_packages": findings
    }

def print_security_audit_report(report: dict):
    """అందమైన సెక్యూరిటీ ఆడిట్ రిపోర్ట్ కన్సోల్ ప్రింటింగ్."""
    print("\n" + "=" * 74)
    print(f"{'🛡️ మన సాఫ్ట్‌వేర్ — పైథాన్ ప్యాకేజీ సెక్యూరిటీ ఆడిట్ రిపోర్ట్ 2026':^74}")
    print("=" * 74)
    print(f"మొత్తం ఆడిట్ చేసిన లైబ్రరీలు : {report['total_audited']}")
    print(f"సురక్షితమైన ప్యాకేజీలు       : {report['clean_packages']}")
    print(f"గుర్తించిన సెక్యూరిటీ లోపాలు : {len(report['vulnerable_packages'])}")
    print("-" * 74)

    if not report["vulnerable_packages"]:
        print("  🎉 అభినందనలు! ఎటువంటి సెక్యూరిటీ లోపాలు కనుగొనబడలేదు. అన్నీ సురక్షితం!")
    else:
        print(f"{'ప్యాకేజీ':<14} {'ఇన్‌స్టాల్ వెర్షన్':<18} {'సేఫ్ వెర్షన్':<16} {'CVE ఐడీ':<16} {'తీవ్రత':^10}")
        print("-" * 74)
        for issue in report["vulnerable_packages"]:
            risk_badge = "🔴 CRITICAL" if issue["risk"] == "CRITICAL" else "🟡 " + issue["risk"]
            print(f"{issue['package']:<14} {issue['installed']:<18} {issue['safe_version']:<16} {issue['cve']:<16} {risk_badge}")

    print("=" * 74)
    print(f"{'👉 తక్షణ చర్య: pip install --upgrade [package] ద్వారా సురక్షిత వెర్షన్‌కు మారండి!':^74}")
    print("=" * 74 + "\n")

# ఆడిట్ డెమో ఎగ్జిక్యూషన్
sample_requirements_file = """
# ప్రొడక్షన్ మైక్రోసర్వీస్ డిపెండెన్సీలు
fastapi==0.110.0
requests==2.28.1
urllib3==1.26.15
pydantic==2.6.4
flask==2.1.2
uvicorn==0.28.0
"""

if __name__ == "__main__":
    dependencies_list = parse_requirements_manifest(sample_requirements_file)
    audit_results = audit_project_dependencies(dependencies_list)
    print_security_audit_report(audit_results)

★ ఈ అధ్యాయంపై ప్రాక్టీస్ క్విజ్ (Knowledge Check)

1. if __name__ == '__main__': గార్డ్‌రైల్ యొక్క అసలైన ప్రయోజనం ఏమిటి?
సమాధానం: ఒక పైథాన్ స్క్రిప్ట్‌ను టెర్మినల్ నుండి నేరుగా రన్ చేసినప్పుడు మాత్రమే ఆ బ్లాక్ లోపలి కోడ్ ఎగ్జిక్యూట్ అయ్యేలా చూస్తుంది. వేరే ఫైల్ నుండి ఆ మాడ్యూల్‌ను ఇంపోర్ట్ చేసుకున్నప్పుడు ఆ టెస్ట్ కోడ్ లేదా స్క్రిప్ట్ రన్ కాకుండా నివారిస్తుంది.
2. CPython ఒక మాడ్యూల్‌ను వెతకడానికి sys.path లో ఏ క్రమాన్ని పాటిస్తుంది?
సమాధానం: 1. ప్రస్తుత వర్కింగ్ డైరెక్టరీ (Current Script Directory). 2. PYTHONPATH ఎన్విరాన్‌మెంట్ వేరియబుల్. 3. పైథాన్ స్టాండర్డ్ లైబ్రరీ డైరెక్టరీ. 4. థర్డ్ పార్టీ ప్యాకేజీలు ఉన్న site-packages డైరెక్టరీ.
3. మీ ఫైల్‌కు math.py అని పేరు పెట్టడం ఎందుకు ప్రమాదకరం?
సమాధానం: sys.path లో ప్రస్తుత డైరెక్టరీ మొదటి స్థానంలో ఉంటుంది. అందువల్ల import math అన్నప్పుడు పైథాన్ స్టాండర్డ్ లైబ్రరీకి బదులుగా మీ లోకల్ ఫైల్‌నే ఇంపోర్ట్ చేసుకుంటుంది (Module Shadowing). ఫలితంగా math.sqrt() వంటి ఒరిజినల్ ఫంక్షన్లు పనిచేయక ఎర్రర్ వస్తుంది.
4. వర్చువల్ ఎన్విరాన్‌మెంట్ (venv) వాడకపోతే వచ్చే నష్టం ఏమిటి?
సమాధానం: అన్ని లైబ్రరీలు గ్లోబల్ పైథాన్‌లో ఇన్‌స్టాల్ అవుతాయి. వేర్వేరు ప్రాజెక్టులకు వేర్వేరు వెర్షన్లు అవసరమైనప్పుడు డిపెండెన్సీ కాన్‌ఫ్లిక్ట్‌లు (Dependency Conflicts) ఏర్పడి ఒక ప్రాజెక్ట్ నడవడానికి మరొక ప్రాజెక్ట్ క్రాష్ అయ్యే ప్రమాదం ఉంది.
5. requirements.txt ఫైల్ ఎలా తయారు చేయాలి మరియు ఎలా ఇన్‌స్టాల్ చేయాలి?
సమాధానం: pip freeze > requirements.txt కమాండ్ ద్వారా ప్రస్తుత ఎన్విరాన్‌మెంట్‌లోని అన్ని ప్యాకేజీలు మరియు వాటి వెర్షన్లను ఫైల్‌లో సేవ్ చేయవచ్చు. కొత్త కంప్యూటర్‌లో pip install -r requirements.txt ద్వారా వాటన్నింటినీ ఒకేసారి ఇన్‌స్టాల్ చేయవచ్చు.
← మునుపటి అధ్యాయం: 18. ల్యాంబ్డా & రికర్షన్ తర్వాతి అధ్యాయం: 20. ఫైల్ హ్యాండ్లింగ్ & JSON →

ఈ Package Security Auditor Engine ని లైవ్‌గా మన కంపైలర్‌లో రన్ చేయండి!

ఎటువంటి లోకల్ సెటప్ లేకుండా, బ్రౌజర్‌లోనే Modern Python 3 కంపైలర్‌లో ఈ కోడ్‌ను ఎగ్జిక్యూట్ చేసి అవుట్‌పుట్ తనిఖీ చేయండి.