ข้ามไปยังเนื้อหา

Modules & Packages

ระบบโมดูลของ Python มีแนวคิดเหมือนกับ ESM ทุกประการ: ทุกไฟล์ .py คือหนึ่งโมดูล คุณ import จากไฟล์อื่นหรือจาก package ที่ติดตั้งไว้ และตัวจัดการ package (pip) ดูแล dependency จากภายนอก syntax นั้นสะอาดกว่า — ไม่มีคีย์เวิร์ด export ไม่มีการแยกแยะระหว่าง default กับ named export

TypeScript
// TypeScript (ESM)
import * as fs from "fs";
import { join, dirname } from "path";
import axios from "axios"; // default export from npm
// Named import with alias
import { readFileSync as readFile } from "fs";
console.log(join("src", "main.ts"));
Python
# Python
import os # import whole module
from os.path import join, dirname # import specific names
import math as m # import with alias
from math import sqrt, pi # import names directly
print(join("src", "main.py"))
print(m.floor(3.7))
print(sqrt(16))

ใน Python:

  • module คือไฟล์ .py ไฟล์เดียว
  • package คือไดเรกทอรีที่มีไฟล์ __init__.py (Python 3.3+ ยังรองรับ “namespace packages” ที่ไม่มีไฟล์นี้ด้วย)
TypeScript
// TypeScript project structure
// src/
// utils/
// index.ts ← barrel export
// string.ts
// number.ts
// main.ts
// main.ts
import { formatDate } from "./utils";
import { capitalize } from "./utils/string";
Python
# Python package structure
# src/
# utils/
# __init__.py ← marks it as a package
# string_utils.py
# number_utils.py
# main.py
# main.py
from utils import format_date # from __init__.py
from utils.string_utils import capitalize

pip คือตัวติดตั้ง package มาตรฐาน สิ่งที่เทียบเท่า package.json ในระบบนิเวศ Python คือ requirements.txt (แบบง่าย) หรือ pyproject.toml (แบบสมัยใหม่)

npm (Node.js)
# npm / Node.js workflow
# package.json declares dependencies
npm install # install all deps
npm install express # add a package
npm install -D jest # add dev dependency
# import in code
import express from "express";
pip (Python)
# pip / Python workflow
# requirements.txt declares dependencies
pip install -r requirements.txt # install all
pip install fastapi # add a package
pip install pytest --dev # dev dependency
# requirements.txt
# fastapi==0.110.0
# uvicorn==0.27.0
# pytest==7.4.0
# Modern: use pyproject.toml + pip install -e .

Python มาพร้อม standard library ที่อุดมสมบูรณ์ หลายอย่างที่คุณต้องพึ่ง npm นั้น Python มีให้ในตัวอยู่แล้ว:

Python stdlibสิ่งที่เทียบเท่าใน npm
jsonJSON.parse / JSON.stringify
os, pathlibpath, fs
datetimedate-fns, dayjs
reรูปแบบ regexp
collectionsโครงสร้างข้อมูลของ lodash
itertoolsตัวช่วยวนซ้ำของ lodash
http.serverexpress (พื้นฐานมาก)
unittestjest (พื้นฐาน)
import os
import math
from collections import Counter
# os — path manipulation
path = os.path.join("src", "utils", "main.py")
print(f"Path: {path}")
# math — built-in math functions
print(f"sqrt(144) = {math.sqrt(144)}")
print(f"pi = {math.pi:.4f}")
print(f"ceil(2.3) = {math.ceil(2.3)}")
# collections.Counter — frequency counting
words = ["apple", "banana", "apple", "cherry", "banana", "apple"]
freq = Counter(words)
print(f"Word counts: {dict(freq)}")
print(f"Most common: {freq.most_common(2)}")
อะไรคือสิ่งที่เทียบเท่า npm ใน Python?
ใน Python ไฟล์ใดทำให้ไดเรกทอรีกลายเป็น package?
รูปแบบ import ใดนำเฉพาะ `sqrt` เข้ามาใน namespace ปัจจุบัน?