Python தொகுதிகளும் தொகுப்புகளும் (packages): import, pip, venv மற்றும் நூலகங்கள் எளிய சொற்களில்
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 உண்மையில் என்ன செய்கிறது
sys.modulesதற்காலிக சேமிப்பில் தேடும். ஏற்கனவே ஏற்றப்பட்டிருந்தால் அதையே திருப்பும்.- இல்லையென்றால்
sys.pathபட்டியலிலுள்ள அடைவுகளில் கோப்பைத் தேடும்: இயங்கும் ஸ்கிரிப்டின் அடைவு, நிலையான நூலகம், சூழலின் site-packages. - கண்டறிந்த கோப்பை மேலிருந்து கீழாக முழுமையாக இயக்கும்.
- தொகுதிப் பொருளைத் தற்காலிக சேமிப்பில் வைத்து பெயருடன் இணைக்கும்.
இதிலிருந்து இரண்டு நடைமுறை முடிவுகள் வருகின்றன. ஒரே தொகுதியை மீண்டும் 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.pyb.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: от новичка до профи” பாடநெறியில் இந்தத் தலைப்பு பயிற்சியுடன் விரிவாக விளக்கப்பட்டுள்ளது.
பாடநெறிக்குச் செல்