அடிப்படை

Python தொகுதிகளும் தொகுப்புகளும் (packages): import, pip, venv மற்றும் நூலகங்கள் எளிய சொற்களில்

புதுப்பிக்கப்பட்டது: · Skillaria.Top

Python-இல் தொகுதி (module) என்பது ஒரு .py கோப்பு; தொகுப்பு (package) என்பது தொகுதிகளின் அடைவு; நூலகம் (library) என்பது பல தொகுப்புகளின் தொகுப்பு, அவற்றை import கட்டளையால் இணைக்கிறோம். மூன்றாம் தரப்பு நூலகங்களை pip அல்லது uv மூலம் venv எனப்படும் மெய்நிகர் சூழலில் நிறுவுகிறோம் — அது ஒரு திட்டத்தின் Python-உம் தொகுப்புகளும் அடங்கிய தனி அடைவு; அதனால் வெவ்வேறு திட்டங்களின் பதிப்புகள் ஒன்றோடொன்று மோதாது.

Python-இல் தொகுதி என்பது குறியீடுள்ள சாதாரணக் கோப்பு; import என்பது அதிலிருந்து செயல்பாடுகளையும் வகுப்புகளையும் எடுக்கும் வழி. தொகுதிகளிலிருந்து தொகுப்புகள் கட்டப்படுகின்றன, தொகுப்புகளிலிருந்து நூலகங்கள். வெவ்வேறு திட்டங்களின் மூன்றாம் தரப்பு நூலகங்கள் ஒன்றோடொன்று தலையிடாமல் இருக்க அவற்றை venv எனப்படும் மெய்நிகர் சூழலில் நிறுவுகிறோம். முழுச் சங்கிலியையும் பார்ப்போம்: import-இன்போது என்ன நடக்கிறது, தொகுப்பு எப்படி அமைகிறது, pip மற்றும் venv எப்படி வேலை செய்கின்றன, Python 3.15-இல் வந்த lazy import-கள் என்ன.

தொகுதி, தொகுப்பு, நூலகம்: வேறுபாடு என்ன

கருத்துஅது என்னஎடுத்துக்காட்டு
தொகுதி (module)ஒரு .py கோப்பு; தொகுதியின் பெயர் = நீட்டிப்பு இல்லாத கோப்புப் பெயர்categories.py → import categories
தொகுப்பு (package)தொகுதிகளும் __init__.py கோப்பும் உள்ள அடைவுexpenses/report.py → from expenses.report import build
நூலகம் (library)ஒரு பணிக்கான தயார் தொகுதிகளும் தொகுப்புகளும்requests, pandas, நிலையான pathlib
விநியோகம் (PyPI தொகுப்பு)pip நிறுவும் காப்பகம்pip install requests

உரையாடலில் "நூலகம்", "தொகுப்பு", "தொகுதி" என்ற சொற்களை அடிக்கடி ஒன்றாகக் கலக்குகிறோம் — அது பரவாயில்லை. ஆனால் தொழில்நுட்பரீதியாக import எப்போதும் ஒரு தொகுதியையோ தொகுப்பையோ ஏற்றுகிறது; pip PyPI-இலிருந்து விநியோகத்தை நிறுவுகிறது, அதற்குள் தொகுப்புகள் இருக்கின்றன.

Python import எப்படி வேலை செய்கிறது

இறக்குமதியின் பல வடிவங்கள் உண்டு; அனைத்தும் உண்மையான குறியீட்டில் வரும்:

import math                    # முழுத் தொகுதி, math.sqrt என அணுகல்
from math import sqrt, pi      # தனிப் பெயர்கள்
import datetime as dt          # புனைப்பெயர்
from collections import Counter as C

print(math.sqrt(16), sqrt(9), pi)
print(dt.date.today())

பெரிய நூலகங்களுக்கு புனைப்பெயர்கள் பொதுவானவை: import numpy as np, import pandas as pd. from module import * வடிவத்தைத் தவிர்ப்பது நல்லது: அது பெயர்வெளியை நிரப்பி, பெயர் எங்கிருந்து வந்தது என்பதை மறைக்கும்.

import உண்மையில் என்ன செய்கிறது

  1. sys.modules தற்காலிக சேமிப்பில் தேடும். ஏற்கனவே ஏற்றப்பட்டிருந்தால் அதையே திருப்பும்.
  2. இல்லையென்றால் sys.path பட்டியலிலுள்ள அடைவுகளில் கோப்பைத் தேடும்: இயங்கும் ஸ்கிரிப்டின் அடைவு, நிலையான நூலகம், சூழலின் site-packages.
  3. கண்டறிந்த கோப்பை மேலிருந்து கீழாக முழுமையாக இயக்கும்.
  4. தொகுதிப் பொருளைத் தற்காலிக சேமிப்பில் வைத்து பெயருடன் இணைக்கும்.

இதிலிருந்து இரண்டு நடைமுறை முடிவுகள் வருகின்றன. ஒரே தொகுதியை மீண்டும் import செய்தால் அது கிட்டத்தட்ட இலவசம் — குறியீடு இரண்டாவது முறை இயங்காது. ஆனால் தொகுதியில் உள்ள மேல்நிலைக் குறியீடு முழுவதும், print மற்றும் கனமான கணக்கீடுகள் உட்பட, இறக்குமதியின்போதே இயங்கும்.

import sys
for p in sys.path:
    print(p)
print("math" in sys.modules)

if __name__ == "__main__"

இறக்குமதி கோப்பை இயக்குவதால், "என்னை ஸ்கிரிப்டாக இயக்கினார்கள்" என்பதையும் "என்னை இறக்குமதி செய்தார்கள்" என்பதையும் வேறுபடுத்த வழி வேண்டும். அதற்கு __name__ மாறி: கோப்பு இயக்கப்படும்போது அது "__main__", இறக்குமதியின்போது தொகுதியின் பெயர்.

# categories.py
def guess(title: str) -> str:
    return "உணவு" if "கஃபே" in title.lower() else "மற்றவை"

if __name__ == "__main__":
    print(guess("வீட்டருகே கஃபே"))   # python categories.py என்றால் மட்டுமே இயங்கும்

தொகுப்புக்கு மாற்று வழி உண்டு: உள்ளே __main__.py கோப்பும், python -m expenses என்ற இயக்கமும்.

Python நிலையான தொகுதிகள்

Python "பேட்டரிகளுடன்" வருகிறது: நூற்றுக்கணக்கான உள்ளமைவுத் தொகுதிகள் நிறுவல் இல்லாமலே கிடைக்கின்றன. மிகவும் பயன்படுபவை:

தொகுதிஎதற்கு
os, sys, pathlib, shutilஅமைப்பு, பாதைகள், கோப்புகள்
json, csv, pickleதரவு வடிவங்கள்
datetime, time, calendarதேதியும் நேரமும்
math, random, statistics, fractionsஎண்கள்
re, stringஉரையுடன் வேலை
collections, itertools, functoolsதரவு அமைப்புகளும் iterator-களும்
logging, argparse, subprocessபதிவுகள், கட்டளை வரி வாதங்கள், நிரல்களை இயக்குதல்
asyncio, threadingஒத்திசைவின்மையும் இழைகளும்

நிலையான நூலகத்தின் முழுப் பட்டியல் sys.stdlib_module_names-இல் உள்ளது (Python 3.10+). ஒரு தொகுதியில் என்ன உள்ளது என்று dir(math) மற்றும் help(math) மூலம் பார்க்கலாம்.

சொந்த தொகுப்பு: திட்டத்தின் அமைப்பு

தொகுதிகள் அதிகமானால் அவற்றை ஒரு தொகுப்பாக்குகிறோம். பரவலான அமைப்பு — src-layout:

expenses-project/
├── pyproject.toml
└── src/
    └── expenses/
        ├── __init__.py
        ├── cli.py
        ├── parsing.py
        ├── categories.py
        └── report.py

தொகுப்புக்குள் தொகுதிகள் ஒன்றையொன்று தொகுப்பின் பெயர் வழியாக (from expenses.categories import guess) அல்லது உறவுமுறையில் (from .categories import guess) இறக்குமதி செய்கின்றன. உறவுமுறை இறக்குமதி தொகுப்புக்குள் மட்டுமே வேலை செய்யும்; நேரடியாக ஸ்கிரிப்டாக இயக்கப்பட்ட கோப்பில் அல்ல.

Python-இல் pip: நூலகங்களை நிறுவுதல்

மூன்றாம் தரப்பு நூலகங்கள் PyPI அடைவில் உள்ளன; அவற்றை Python-உடன் வரும் pip கருவி நிறுவுகிறது. python கட்டளையின் மூலம் pip-ஐ அழைப்பதே நம்பகமானது — அப்போது நூலகம் நீங்கள் குறியீட்டை இயக்கும் அதே Python-இல் சேரும்.

python -m pip install requests          # நிறுவு
python -m pip install "pandas>=2.3"     # பதிப்பு வரம்புடன்
python -m pip install --upgrade requests
python -m pip uninstall requests        # நீக்கு
python -m pip list                      # நிறுவிய தொகுப்புகளின் பட்டியல்
python -m pip show requests             # பதிப்பும் சார்புகளும்
python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt

Windows-இல் python-க்குப் பதிலாக பெரும்பாலும் py துவக்கி பயன்படுகிறது. pip கிடைக்கவில்லையென்றால், அதை உள்ளமைவுத் தொகுதி நிறுவும்: python -m ensurepip --upgrade.

பிரபலமான Python நூலகங்கள்

PyPI-இல் நூறாயிரக்கணக்கான தொகுப்புகள் உள்ளன, ஆனால் பெரும்பாலான திட்டங்களில் ஒரே குறுகிய பட்டியல்தான் வருகிறது. அதிலிருந்து தொடங்குங்கள், அரிதானவற்றைத் தேடுவதை விட.

பணிநூலகங்கள்
HTTP கோரிக்கைகளும் API-களும்requests, httpx
தரவுப் பகுப்பாய்வும் அட்டவணைகளும்pandas, numpy
வரைபடங்கள்matplotlib
இணையச் சேவைகள்fastapi, django, flask
சோதனைகள்pytest
படங்கள்pillow (PIL என இறக்குமதி ஆகிறது)

கவனியுங்கள்: நிறுவும் பெயரும் இறக்குமதிப் பெயரும் எப்போதும் ஒன்றல்ல. pip install pillow என நிறுவி, from PIL import Image என்று எழுதுகிறோம்; opencv-python நிறுவி, cv2 என இறக்குமதி செய்கிறோம். நிறுவிய உடனே import தோல்வியடைந்தால், தொகுப்பின் ஆவணத்தில் அது எந்தப் பெயரில் இறக்குமதி ஆகிறது என்று பாருங்கள்.

Linux-இல் நூலகங்களை நிறுவுதல்

புதிய Debian மற்றும் Ubuntu-இல் கணினி Python-இல் pip install externally-managed-environment பிழையுடன் முடியும் (PEP 668). இது ஒரு பாதுகாப்பு: கணினி Python OS-இன் தொகுப்பு மேலாளருக்குச் சொந்தமானது, pip அதை உடைக்கக்கூடாது. சரியான தீர்வு --break-system-packages அல்ல, மெய்நிகர் சூழல்.

Python venv: மெய்நிகர் சூழல்

மெய்நிகர் சூழல் என்பது தனி அடைவு: அதற்கென ஒரு Python நகல் (அதற்கான குறிப்பு), சொந்த site-packages. அதில் நிறுவிய நூலகங்கள் அந்த திட்டத்திற்கு மட்டுமே தெரியும். அதனால் ஒரு திட்டத்திற்கு Django 4 இருக்கலாம், அருகிலுள்ள திட்டத்திற்கு Django 5 — அவை மோதாது.

venv தொகுதி Python-உடனேயே வருகிறது; தனியாக நிறுவ வேண்டியதில்லை (Debian/Ubuntu-இல் சில நேரங்களில் python3-venv கணினித் தொகுப்பு தேவை).

# .venv அடைவில் சூழலை உருவாக்கு
python -m venv .venv

# செயல்படுத்து: Linux மற்றும் macOS
source .venv/bin/activate
# செயல்படுத்து: Windows PowerShell
.venv\Scripts\Activate.ps1

# இப்போது pip தொகுப்புகளை .venv-க்குள் நிறுவும்
python -m pip install requests
python -c "import sys; print(sys.prefix)"

# சூழலிலிருந்து வெளியேறு
deactivate

செயல்படுத்திய பின் terminal வரியின் தொடக்கத்தில் (.venv) தோன்றும். சூழலின் அடைவை git-இல் சேர்க்க மாட்டோம் (.gitignore-இல் .venv/ சேர்க்கவும்), கணினிகளுக்கிடையே நகர்த்தவும் மாட்டோம் — அதற்கு பதிலாக சார்புப் பட்டியலைச் சேமித்து சூழலை மீண்டும் உருவாக்குகிறோம். PowerShell செயல்படுத்தும் ஸ்கிரிப்டை தடுத்தால், பயனருக்கு அனுமதி கொடுங்கள்: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.

uv மற்றும் pyproject.toml

இன்றைய திட்டங்கள் சார்புகளை pyproject.toml-இல் விவரிக்கின்றன. பாடநெறியில் பயன்படும் uv மேலாளர் சூழல் உருவாக்கலையும் நிறுவலையும் ஒன்றாக்குகிறது: uv add pandas தொகுப்பைப் பதிவிறக்கி, pyproject.toml-இல் பதிவு செய்து, சரியான பதிப்புகளை uv.lock-இல் பூட்டுகிறது. சக ஊழியர் திட்டத்தை clone செய்து uv sync இயக்கினால் அதே சூழல் கிடைக்கும்.

[project]
name = "expenses"
version = "0.1.0"
requires-python = ">=3.15"
dependencies = [
    "pandas>=2.3",
]

[project.scripts]
expenses = "expenses.cli:main"

Python 3.15-இல் lazy import-கள் (PEP 810)

இந்தத் தலைப்பில் 3.15-இன் முக்கியப் புதுமை — lazy என்ற முக்கியச் சொல். கனமான நூலகங்கள் ஏற்ற நீண்ட நேரம் எடுக்கும்: python:3.15-slim படிமத்தில் பாடநெறியின் அளவீட்டில் சாதாரண import pandas சுமார் 415 மி.வி. எடுத்தது, lazy import pandas — சுமார் 13 மி.வி. --help-க்காக ஓடும் CLI கருவிக்கு வேறுபாடு பெரியது.

lazy import pandas as pd
lazy from expenses.report import build_report

def main() -> None:
    ...
    df = pd.read_csv(path)   # pandas உண்மையில் ஏற்றப்படும் இடம் இதுதான்

தொகுதிக்குப் பதிலாக பெயரில் ஒரு ப்ராக்ஸி பொருள் (types.LazyImportType) வைக்கப்படுகிறது; உண்மையான இறக்குமதி பெயரை முதல் முறை தொடும்போது நடக்கும். அந்த நிலை வராவிட்டால் நேரம் சிறிதும் செலவாவதில்லை.

lazy import-இன் வரம்புகள்

  • தொகுதியின் மேல்நிலையில் மட்டுமே அனுமதி: செயல்பாடு, வகுப்பு அல்லது try/except-க்குள் — SyntaxError.
  • lazy from x import * தடை செய்யப்பட்டுள்ளது.
  • ModuleNotFoundError தொடக்கத்தில் அல்ல, முதல் பயன்பாட்டின்போது வெளிப்படும்.
  • தொகுதியின் பக்க விளைவுகள் (செருகுநிரல்களைப் பதிவு செய்தல் போன்றவை) காலத்தில் பின்தள்ளப்படுகின்றன.

எல்லா இறக்குமதிகளையும் ஒரே நேரத்தில் lazy ஆக்க -X lazy_imports=all கொடி அல்லது PYTHON_LAZY_IMPORTS=all சூழல் மாறி; விதிவிலக்குகளை sys.set_lazy_imports_filter() மூலம் குறிப்பிடலாம். பழைய பதிப்புகளிலும் வேலை செய்ய வேண்டிய குறியீட்டுக்கு தொகுதியில் __lazy_modules__ = ["pandas"] என்ற மாறி உண்டு: 3.15 பட்டியலிட்ட இறக்குமதிகளை lazy ஆக்கும், பழைய பதிப்புகள் சாதாரண import-ஐ இயக்கும். தொடக்கத்தில் நேரம் எங்கே செலவாகிறது என்பதை python -X importtime -c "import pandas" காட்டும். அடிக்கடி குறுகிய முறை ஓடும் நிரல்களுக்கே பலன் அதிகம்; நீண்ட நேரம் இயங்கும் சேவைக்கு lazy கிட்டத்தட்ட எதுவும் தராது.

பொதுவான தவறுகள்

  • ModuleNotFoundError: No module named 'requests' — நூலகம் வேறு Python-இல் நிறுவப்பட்டது அல்லது சூழல் செயல்படுத்தப்படவில்லை. அதே இடைமுகத்தில் python -m pip show requests மூலம் சரிபாருங்கள்.
  • சொந்தக் கோப்பிற்கு json.py, random.py அல்லது csv.py என்று பெயரிடுவது — ஸ்கிரிப்ட் அடைவு sys.path-இல் முதலில் வருவதால் அது நிலையான தொகுதியை மறைக்கும். Python 3.13+ பிழையில் "consider renaming" என்று சொல்லும். கோப்பை மறுபெயரிட்டு __pycache__-ஐ நீக்குங்கள்.
  • சுழல் இறக்குமதி: a.py b.py-ஐ இறக்குமதி செய்கிறது, அது மீண்டும் a.py-ஐ. பொதுவானதை மூன்றாவது தொகுதிக்கு மாற்றுங்கள் அல்லது செயல்பாட்டுக்குள் இறக்குமதி செய்யுங்கள்.
  • pip-ஐ Python அமர்வுக்குள் இயக்குவது (>>> pip install) — SyntaxError. pip கட்டளைகள் terminal-இல் இயங்கும்.

சுருக்கம்

தொகுதி ஒரு கோப்பு, தொகுப்பு தொகுதிகளின் அடைவு, நூலகம் அவற்றின் தயார் தொகுப்பு; import தொகுதியை தற்காலிக சேமிப்பிலும் sys.path-இலும் தேடி ஒருமுறை மட்டும் இயக்குகிறது. மூன்றாம் தரப்பு நூலகங்களை pip அல்லது uv மூலம் venv மெய்நிகர் சூழலில் மட்டுமே நிறுவுங்கள் — அப்போது திட்டங்கள் ஒன்றையொன்று தொந்தரவு செய்யாது, சூழலை எளிதாக மீண்டும் உருவாக்கலாம். Python பாடநெறியில் இந்தத் தலைப்பு நடைமுறையில் விளக்கப்பட்டுள்ளது: செலவு கண்காணிப்பான் சார்புகளுடன் கூடிய தொகுப்பாக மாறுகிறது, lazy import-களால் விரைவான தொடக்கத்துடன்.

அடிக்கடி கேட்கப்படும் கேள்விகள்

ஒவ்வொரு திட்டத்துக்கும் venv உருவாக்க வேண்டுமா?

ஆம், அது நல்ல பழக்கம்: ஒவ்வொரு திட்டத்துக்கும் நூலகங்களின் தனிப் பதிப்புகள் இருக்கும்; தனிச் சூழல் மோதல்களைத் தடுத்து கணினி Python-ஐ அசுத்தப்படுத்தாது.

pip-க்கும் uv-க்கும் என்ன வேறுபாடு?

pip தொகுப்புகளை மட்டும் நிறுவும்; uv சூழலை உருவாக்கி, சார்புகளை pyproject.toml-இல் பதிவு செய்து, சரியான பதிப்புகளை lock கோப்பில் பூட்டுகிறது; அத்துடன் குறிப்பிடத்தக்க வேகமானது.

நிறுவிய Python நூலகங்களின் பட்டியலை எப்படிப் பார்ப்பது?

தேவையான சூழலில் <code>python -m pip list</code> இயக்குங்கள்; <code>pip freeze</code> அதே பட்டியலை requirements.txt வடிவத்தில் தரும்.

நிறுவிய தொகுதிகள் எங்கே சேமிக்கப்படுகின்றன?

தற்போதைய சூழலின் site-packages அடைவில்; ஒரு தொகுதியின் சரியான பாதை <code>__file__</code> பண்புக்கூறில் தெரியும், உதாரணமாக <code>import requests; print(requests.__file__)</code>.

venv அடைவை வேறு கணினிக்கு நகர்த்தலாமா?

இல்லை, சூழல் அந்தக் கணினியின் பாதைகளுடனும் Python-உடனும் பிணைக்கப்பட்டுள்ளது; சார்புப் பட்டியலை நகர்த்தி சூழலை புதிதாக உருவாக்குங்கள்.

இந்தத் தலைப்பை வீடியோவில் கற்றுக்கொள்ளுங்கள்

“Python 3.15: от новичка до профи” பாடநெறியில் இந்தத் தலைப்பு பயிற்சியுடன் விரிவாக விளக்கப்பட்டுள்ளது.

பாடநெறிக்குச் செல்