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)”รันในเทอร์มินัลของคุณ:
# Create a virtual environment in the .venv folderpython3 -m venv .venv
# Activate it — you must do this every new terminal sessionsource .venv/bin/activate # macOS / Linux# .venv\Scripts\activate.bat # Windows CMD# .venv\Scripts\Activate.ps1 # Windows PowerShell
# Confirm which python is activewhich python # should point to .venv/bin/python
# Deactivatedeactivateเมื่อ 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) เป็นตัวแทนของ pip และ venv รวมกัน เขียนด้วย Rust เร็วกว่า pip 10–100 เท่า จัดการ virtual environment ให้อัตโนมัติ และติดตั้งตัว interpreter ได้ด้วย จึงเป็นตัวเลือกแรกสำหรับโปรเจกต์ใหม่ อ่าน layer 1 และ 2 เพื่อเข้าใจว่ามันทำอะไรให้ แล้วใช้งานจริงที่ layer 3
# Install uv (once, globally)curl -LsSf https://astral.sh/uv/install.sh | sh
# Create a new project (generates pyproject.toml + .venv)uv init my-projectcd my-project
# Add a dependency (updates pyproject.toml + uv.lock)uv add fastapi
# Add a dev dependencyuv add --dev pytest ruff mypy
# Sync environment from pyproject.toml (like npm ci)uv sync
# Run a command inside the venv without activatinguv run python main.pyuv run pytest
# uv manages interpreters as well — no pyenv neededuv python install 3.14uv python pin 3.14 # writes .python-version
# Refresh the lock file without installing (like npm install --package-lock-only)uv lockชั้นที่ 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 | ใช่ | ใช่ |
| ติดตั้ง interpreter | ไม่ได้ | ไม่ได้ | ได้ (uv python install) |
| ความสมบูรณ์ | เสถียรมาก | เสถียร (2.x) | เสถียร ใช้กันแพร่หลาย |
| คำแนะนำ | legacy projects | projects ที่ใช้ poetry อยู่แล้ว | projects ใหม่ |
Playground note: Package managers แก้ไข filesystem และ network — ต้องใช้ terminal รันคำสั่งข้างต้นในไดเรกทอรี project ของคุณ