Virtual Envs, pip, uv และ Poetry
npm/package.json → pip/venv/pyproject.toml
หัวข้อที่มีชื่อว่า “npm/package.json → pip/venv/pyproject.toml”การจัดการ package คือจุดที่ประวัติศาสตร์ tooling ของ Python ปรากฏชัดเจนที่สุด Node มี model เดียว: npm ติดตั้งลงใน node_modules, package.json ประกาศ dependencies และ package-lock.json lock versions ที่แน่นอน Python มีสามชั้นที่คุณต้องเข้าใจ: ตัว interpreter เอง, ชั้น isolation (venv) และจากนั้น package manager ด้านบน
ชั้นที่ 1: Virtual Environments (venv)
หัวข้อที่มีชื่อว่า “ชั้นที่ 1: Virtual Environments (venv)”รันในเทอร์มินัลของคุณ:
# สร้าง virtual environment ในโฟลเดอร์ .venvpython3 -m venv .venv
# เปิดใช้งาน — ต้องทำทุกครั้งที่เปิด terminal ใหม่source .venv/bin/activate # macOS / Linux# .venv\Scripts\activate.bat # Windows CMD# .venv\Scripts\Activate.ps1 # Windows PowerShell
# ยืนยัน python ไหนที่ active อยู่which python # ควรชี้ไปที่ .venv/bin/python
# ปิดใช้งานdeactivateเมื่อ activate แล้ว pip install X จะติดตั้งลงใน .venv เท่านั้น เพิ่ม .venv/ ลงใน .gitignore ของคุณ
ชั้นที่ 2: pip + requirements.txt (แบบเก่า)
หัวข้อที่มีชื่อว่า “ชั้นที่ 2: pip + requirements.txt (แบบเก่า)”# npm classic workflownpm install express # เพิ่มใน package.json + node_modulesnpm install -D jest # dev dependencynpm install # ติดตั้งจาก package.jsonnpm ci # clean install จาก lock file (CI)
# package.json excerpt:# {# "dependencies": { "express": "^4.18.2" },# "devDependencies": { "jest": "^29.0.0" }# }# pip classic workflowpip install requests # ติดตั้งลงใน active venvpip install pytest --upgrade # ติดตั้ง/upgrade dev deppip freeze > requirements.txt # snapshot versions ทั้งหมดที่ติดตั้งpip install -r requirements.txt # reproduce จาก snapshot
# requirements.txt excerpt:# requests==2.31.0# certifi==2024.2.2# charset-normalizer==3.3.2requirements.txt เป็นวิธีที่เก่าแก่ที่สุด ใช้งานได้ แต่ไม่มีการแยกแยะระหว่าง direct และ transitive dependencies การแทนที่สมัยใหม่คือ pyproject.toml
ชั้นที่ 3: uv — tool สมัยใหม่ที่รวดเร็ว
หัวข้อที่มีชื่อว่า “ชั้นที่ 3: uv — tool สมัยใหม่ที่รวดเร็ว”uv (โดย Astral ทีมเดียวกับ ruff) คือ replacement ที่เขียนด้วย Rust สำหรับ pip และ venv รวมกัน เร็วกว่า pip 10–100 เท่าและจัดการ virtual environments อัตโนมัติ
# ติดตั้ง uv (ครั้งเดียว แบบ global)curl -LsSf https://astral.sh/uv/install.sh | sh
# สร้าง project ใหม่ (สร้าง pyproject.toml + .venv)uv init my-projectcd my-project
# เพิ่ม dependency (อัพเดต pyproject.toml + uv.lock)uv add fastapi
# เพิ่ม dev dependencyuv add --dev pytest ruff mypy
# Sync environment จาก pyproject.toml (เหมือน npm ci)uv sync
# รัน command ภายใน venv โดยไม่ต้อง activateuv run python main.pyuv run pytestชั้นที่ 4: Poetry — ประสบการณ์แบบ npm
หัวข้อที่มีชื่อว่า “ชั้นที่ 4: Poetry — ประสบการณ์แบบ npm”Poetry คือ tool ตัวแรกที่รวม project metadata, dependency resolution และการจัดการ virtual environment ไว้ใน CLI เดียวที่ใช้งานลื่นมือ ทุกวันนี้ยังมีโปรเจกต์เดิมจำนวนมากใช้อยู่
# npm-like workflownpm init # scaffold package.jsonnpm install express # เพิ่ม runtime depnpm install -D jest # เพิ่ม dev depnpm run start # รัน scriptnpm run test # รัน testscat package-lock.json # lock file ที่แน่นอน# Poetry — npm-like workflow สำหรับ Pythonpoetry new my-project # scaffold pyproject.toml + src/poetry add fastapi # เพิ่ม runtime deppoetry add --group dev pytest # เพิ่ม dev deppoetry run python main.py # รัน scriptpoetry run pytest # รัน testscat poetry.lock # lock file ที่แน่นอนเปรียบเทียบ options ต่างๆ
หัวข้อที่มีชื่อว่า “เปรียบเทียบ options ต่างๆ”| pip + venv | poetry | uv | |
|---|---|---|---|
| ความเร็ว | ช้า | กลาง | เร็วมาก |
| Lock file | requirements.txt (manual) | poetry.lock | uv.lock |
| pyproject.toml | บางส่วน | เต็มรูปแบบ | เต็มรูปแบบ |
| Auto-manage venv | manual | ใช่ | ใช่ |
| ความสมบูรณ์ | เสถียรมาก | เสถียร | ใหม่กว่า (2024+) |
| คำแนะนำ | legacy projects | projects ที่ใช้ poetry อยู่แล้ว | projects ใหม่ |
Playground note: Package managers แก้ไข filesystem และ network — ต้องใช้ terminal รันคำสั่งข้างต้นในไดเรกทอรี project ของคุณ