Mga module at package ng Python: import, pip, venv, at library sa simpleng salita
Ang module sa Python ay file na .py, ang package ay folder ng mga module, at ang library ay handang hanay ng mga package na ini-import gamit ang import. Ang mga third-party na library ay ini-install gamit ang pip (o uv) sa virtual environment na venv — hiwalay na folder na may sariling interpreter at mga package ng isang proyekto, para hindi magbanggaan ang mga bersyon ng iba't ibang proyekto.
Ang module sa Python ay ordinaryong file na may code, at ang import ang paraan para kunin mula rito ang mga function at class. Mula sa mga module nabubuo ang mga package, at mula sa mga package ang mga library. Para hindi magkagulo ang mga third-party na library ng iba't ibang proyekto, inilalagay ang mga ito sa virtual environment na venv. Tatalakayin natin ang buong kadena: ano ang nangyayari kapag nag-import, paano nakaayos ang package, paano gumagana ang pip at venv sa Python, at ano ang mga lazy import na lumitaw sa Python 3.15.
Module, package, library: ano ang pagkakaiba
| Konsepto | Ano ito | Halimbawa |
|---|---|---|
| Module | Isang file na .py; ang pangalan ng module ay pangalan ng file na walang extension | categories.py → import categories |
| Package | Folder na may mga module at file na __init__.py | expenses/report.py → from expenses.report import build |
| Library | Handang hanay ng mga module at package para sa isang gawain | requests, pandas, ang standard na pathlib |
| Distribution (package sa PyPI) | Archive na ini-install ng pip | pip install requests |
Madalas paghaluin ang mga salitang "library", "package", at "module" sa usapan — normal lang iyon. Ang mahalaga, sa teknikal na paraan, palaging nilo-load ng import ang module o package, at ang pip ay nag-i-install ng distribution mula sa PyPI, na naglalaman ng mga package.
Paano gumagana ang import sa Python
May ilang anyo ng import, at lahat ay makikita sa totoong code:
import math # buong module, gamit ang math.sqrt
from math import sqrt, pi # mga partikular na pangalan
import datetime as dt # alias
from collections import Counter as C
print(math.sqrt(16), sqrt(9), pi)
print(dt.date.today())
Karaniwan na ang mga alias para sa malalaking library: import numpy as np, import pandas as pd. Huwag gamitin ang from module import *: pinupuno nito ang namespace at tinatago kung saan galing ang pangalan.
Ano ang aktwal na ginagawa ng import
- Hinahanap ang module sa cache na
sys.modules. Kung na-load na ito, ibinabalik lang. - Kung wala, hinahanap ang file sa listahan ng folder na
sys.path: folder ng script na pinapatakbo, standard library, at site-packages ng environment. - Pinapatakbo ang nakitang file mula itaas pababa, buo.
- Inilalagay ang object ng module sa cache at tinatalian ng pangalan.
Dalawang praktikal na konklusyon dito. Halos libre ang ulit na import ng parehong module — hindi na muling tinatakbo ang code. At ang lahat ng code sa antas ng itaas ng module, kasama ang print at mabibigat na kalkulasyon, ay tumatakbo na sa pag-import.
import sys
for p in sys.path:
print(p)
print("math" in sys.modules)
if __name__ == "__main__"
Dahil pinapatakbo ng import ang file, kailangan ng paraan para malaman kung "pinatakbo ako bilang script" o "ini-import ako". Ginagamit para dito ang variable na __name__: kapag pinatakbo ang file, "__main__" ang halaga nito; kapag ini-import, pangalan ng module ang halaga.
# categories.py
def guess(title: str) -> str:
return "pagkain" if "kape" in title.lower() else "iba"
if __name__ == "__main__":
print(guess("Kapehan sa bahay")) # tatakbo lang kapag python categories.py
Para sa package, may alternatibo: ang file na __main__.py sa loob nito at ang pagpapatakbo gamit ang python -m expenses.
Mga standard module ng Python
Dumarating ang Python na "may kasamang baterya": daan-daang built-in na module ang available agad, nang walang pag-install. Ang pinakagamit ay:
| Module | Para saan |
|---|---|
os, sys, pathlib, shutil | Sistema, path, file |
json, csv, pickle | Mga format ng datos |
datetime, time, calendar | Petsa at oras |
math, random, statistics, fractions | Mga numero |
re, string | Pagtatrabaho sa teksto |
collections, itertools, functools | Mga istruktura ng datos at iterator |
logging, argparse, subprocess | Mga log, argumento ng command line, pagpapatakbo ng programa |
asyncio, threading | Asynchronous at thread |
Makikita ang buong listahan ng mga module ng standard library sa sys.stdlib_module_names (Python 3.10+). Para malaman ang laman ng isang module, gamitin ang dir(math) at help(math).
Sariling package: istruktura ng proyekto
Kapag dumami ang mga module, pinagsasama-sama ang mga ito sa package. Karaniwang ayos ang src-layout:
expenses-project/
├── pyproject.toml
└── src/
└── expenses/
├── __init__.py
├── cli.py
├── parsing.py
├── categories.py
└── report.py
Sa loob ng package, nag-iimport ang mga module sa isa't isa sa pamamagitan ng pangalan ng package (from expenses.categories import guess) o kamag-anak (from .categories import guess). Gumagana lang ang relative import sa loob ng package, hindi sa file na direktang pinatakbo bilang script.
pip sa Python: pag-install ng library
Nasa PyPI ang mga third-party na library, at ini-install ang mga ito ng pip, na kasama ng Python. Pinakamaaasahang tawagin ito sa pamamagitan ng interpreter — sa ganitong paraan, siguradong mapupunta ang library sa Python na ginagamit mo sa pagpapatakbo ng code.
python -m pip install requests # mag-install
python -m pip install "pandas>=2.3" # may limitasyon sa bersyon
python -m pip install --upgrade requests
python -m pip uninstall requests # magtanggal
python -m pip list # listahan ng naka-install na package
python -m pip show requests # bersyon at dependency
python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
Sa Windows, madalas gamitin ang launcher na py sa halip na python. Kung hindi mahanap ang pip, ini-install ito ng built-in na module: python -m ensurepip --upgrade.
Mga sikat na library sa Python
Daan-daang libo ang package sa PyPI, pero sa karamihan ng proyekto, iisang maikling listahan ang lumilitaw. Dito dapat magsimula, hindi sa paghahanap ng kakaiba.
| Gawain | Mga library |
|---|---|
| HTTP request at API | requests, httpx |
| Pagsusuri ng datos at talahanayan | pandas, numpy |
| Mga chart | matplotlib |
| Web service | fastapi, django, flask |
| Mga test | pytest |
| Mga larawan | pillow (ina-import bilang PIL) |
Pansinin: hindi laging magkapareho ang pangalan para sa pag-install at pangalan para sa pag-import. Ini-install ang pip install pillow, pero isinusulat ang from PIL import Image; ini-install ang opencv-python, pero ang ina-import ay cv2. Kung bumagsak ang import kaagad pagkatapos mag-install, tingnan sa dokumentasyon ng package kung anong pangalan ang ginagamit sa pag-import.
Pag-install ng library sa Linux
Sa mga bagong bersyon ng Debian at Ubuntu, nagtatapos sa error na externally-managed-environment (PEP 668) ang pip install sa system Python. Proteksiyon ito: pag-aari ng package manager ng OS ang system Python, at hindi dapat ito sirain ng pip. Ang tamang solusyon ay hindi ang --break-system-packages, kundi ang virtual environment.
venv sa Python: virtual environment
Ang virtual environment ay hiwalay na folder na may sariling kopya ng interpreter (o reference dito) at sariling site-packages. Nakikita lang ng proyektong ito ang mga library na naka-install dito. Kaya maaaring gumamit ang isang proyekto ng Django 4, at ang kalapit na proyekto ng Django 5, nang walang alitan.
Built-in sa Python ang module na venv, kaya hindi na ito kailangang i-install nang hiwalay. (Sa Debian/Ubuntu, minsan kailangan ang system package na python3-venv.)
# gumawa ng environment sa folder na .venv
python -m venv .venv
# i-activate: Linux at macOS
source .venv/bin/activate
# i-activate: Windows PowerShell
.venv\Scripts\Activate.ps1
# mula ngayon, ang pip ay nag-i-install sa loob ng .venv
python -m pip install requests
python -c "import sys; print(sys.prefix)"
# lumabas sa environment
deactivate
Pagkatapos i-activate, lalabas ang (.venv) sa simula ng linya ng terminal. Huwag i-commit sa git ang folder ng environment (idagdag ang .venv/ sa .gitignore), at huwag itong ilipat sa ibang makina — sa halip, itago ang listahan ng dependency at muling gawin ang environment. Kung hinaharangan ng PowerShell ang pagpapatakbo ng activation script, payagan ito para sa user: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.
uv at pyproject.toml
Inilalarawan ng mga modernong proyekto ang kanilang dependency sa pyproject.toml. Pinagsasama ng uv, na ginagamit sa kurso, ang paggawa ng environment at pag-install: ang uv add pandas ay nagda-download ng package, isinusulat ito sa pyproject.toml, at tinatandaan ang eksaktong bersyon sa uv.lock. Kapag na-clone ng kasamahan ang proyekto at pinatakbo ang uv sync, makukuha niya ang parehong environment.
[project]
name = "expenses"
version = "0.1.0"
requires-python = ">=3.15"
dependencies = [
"pandas>=2.3",
]
[project.scripts]
expenses = "expenses.cli:main"
Mga lazy import sa Python 3.15 (PEP 810)
Ang pangunahing bagong katangian ng 3.15 sa paksang ito ay ang keyword na lazy. Mabagal i-load ang mabibigat na library: sa sukat ng kurso sa imahe ng python:3.15-slim, humigit-kumulang 415 ms ang karaniwang import pandas, at humigit-kumulang 13 ms ang lazy import pandas. Para sa CLI na utility na pinapatakbo para lang sa --help, napakalaki ng pagkakaiba.
lazy import pandas as pd
lazy from expenses.report import build_report
def main() -> None:
...
df = pd.read_csv(path) # dito talaga nilo-load ang pandas
Sa halip na module, inilalagay sa pangalan ang proxy object (types.LazyImportType), at nagaganap ang totoong import sa unang paggamit ng pangalan. Kung hindi ito nagamit, walang oras na nasasayang.
Mga limitasyon ng lazy import
- Pinapayagan lamang sa antas ng itaas ng module: sa loob ng function, class, o
try/except—SyntaxError. - Ipinagbabawal ang
lazy from x import *. - Lalabas ang
ModuleNotFoundErrorhindi sa pagsisimula, kundi sa unang paggamit. - Nagbabago ang oras ng side effect ng module (pagre-rehistro ng plugin, at iba pa).
Maaaring gawing lazy ang lahat ng import nang sabay gamit ang flag na -X lazy_imports=all o ang variable na PYTHON_LAZY_IMPORTS=all; ang mga eksepsiyon ay itinatakda gamit ang sys.set_lazy_imports_filter(). Para sa code na dapat gumana rin sa mas lumang bersyon, may module variable na __lazy_modules__ = ["pandas"]: gagawing lazy ito ng 3.15, at ang mas lumang bersyon ay magsasagawa lamang ng karaniwang import. Ipinapakita ng python -X importtime -c "import pandas" kung saan napupunta ang oras sa pagsisimula. Pinakanakikinabang dito ang mga programang madalas tumakbo nang maikli; halos walang epekto ito sa matagal nang tumatakbong server.
Karaniwang pagkakamali
ModuleNotFoundError: No module named 'requests'— na-install ang library sa ibang Python, o hindi na-activate ang environment. Tingnan gamit angpython -m pip show requestsgamit ang parehong interpreter.- Pinangalanan ang sariling file na
json.py,random.py, ocsv.py— nasa unahan ngsys.pathang folder ng script at tinatakpan nito ang standard module. Mula Python 3.13, may mungkahing "consider renaming" sa error. Palitan ang pangalan ng file at burahin ang__pycache__. - Circular import: nag-iimport ang
a.pyngb.py, at angb.pynaman ay nga.py. Ilagay ang nakabahaging code sa ikatlong module, o mag-import sa loob ng function. - Pinatakbo ang pip sa loob ng interpreter ng Python (
>>> pip install) —SyntaxErrorang makukuha mo. Ang mga utos ng pip ay pinapatakbo sa terminal.
Buod
Ang module ay file, ang package ay folder ng mga module, at ang library ay handang hanay nito; hinahanap ng import ang module sa cache at sa sys.path, at pinapatakbo ito nang isang beses. Ang mga third-party na library ay i-install gamit ang pip o uv lamang sa virtual environment na venv — sa ganitong paraan, hindi nagbabanggaan ang mga proyekto, at madaling maulit ang environment. Tinalakay ang paksang ito nang praktikal sa kurso ng Python: nagiging package na may mga dependency ang tagasubaybay ng gastos, at mas mabilis ang pagsisimula dahil sa mga lazy import.
Mga madalas itanong
Kailangan bang gumawa ng venv para sa bawat proyekto?
Oo, mainam itong gawi: may kanya-kanyang bersyon ng library ang bawat proyekto, at naiiwasan ng hiwalay na environment ang alitan at hindi nito dinudumihan ang system Python.
Ano ang pagkakaiba ng pip at uv?
Nag-iinstall lang ng package ang pip, samantalang ginagawa rin ng uv ang environment, isinusulat ang dependency sa pyproject.toml, at tinatandaan ang eksaktong bersyon sa lock file; mas mabilis din ito nang malaki.
Paano makita ang listahan ng naka-install na library ng Python?
Patakbuhin ang python -m pip list sa tamang environment; ang pip freeze ay magpapakita ng parehong listahan sa format ng requirements.txt.
Saan nakalagay ang mga naka-install na module?
Sa folder na site-packages ng kasalukuyang environment. Ipinapakita ng attribute na __file__ ang eksaktong path ng module, halimbawa: import requests; print(requests.__file__).
Maaari bang ilipat ang folder ng venv sa ibang computer?
Hindi, nakatali ang environment sa mga path at interpreter ng makina; ang inililipat ay ang listahan ng dependency, at saka gagawin muli ang environment.
Detalyadong tinatalakay ang paksang ito, may praktis, sa kursong “Python 3.15: от новичка до профи”.
Pumunta sa kurso