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

Virtual Envs, pip, uv และ Poetry

การจัดการ package คือจุดที่ประวัติศาสตร์ tooling ของ Python ปรากฏชัดเจนที่สุด Node มี model เดียว: npm ติดตั้งลงใน node_modules, package.json ประกาศ dependencies และ package-lock.json lock versions ที่แน่นอน Python มีสามชั้นที่คุณต้องเข้าใจ: ตัว interpreter เอง, ชั้น isolation (venv) และจากนั้น package manager ด้านบน

รันในเทอร์มินัลของคุณ:

Terminal window
# สร้าง virtual environment ในโฟลเดอร์ .venv
python3 -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 ของคุณ

TypeScript
# npm classic workflow
npm install express # เพิ่มใน package.json + node_modules
npm install -D jest # dev dependency
npm install # ติดตั้งจาก package.json
npm ci # clean install จาก lock file (CI)
# package.json excerpt:
# {
# "dependencies": { "express": "^4.18.2" },
# "devDependencies": { "jest": "^29.0.0" }
# }
Python
# pip classic workflow
pip install requests # ติดตั้งลงใน active venv
pip install pytest --upgrade # ติดตั้ง/upgrade dev dep
pip 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.2

requirements.txt เป็นวิธีที่เก่าแก่ที่สุด ใช้งานได้ แต่ไม่มีการแยกแยะระหว่าง direct และ transitive dependencies การแทนที่สมัยใหม่คือ pyproject.toml

uv (โดย Astral ทีมเดียวกับ ruff) คือ replacement ที่เขียนด้วย Rust สำหรับ pip และ venv รวมกัน เร็วกว่า pip 10–100 เท่าและจัดการ virtual environments อัตโนมัติ

Terminal window
# ติดตั้ง uv (ครั้งเดียว แบบ global)
curl -LsSf https://astral.sh/uv/install.sh | sh
# สร้าง project ใหม่ (สร้าง pyproject.toml + .venv)
uv init my-project
cd my-project
# เพิ่ม dependency (อัพเดต pyproject.toml + uv.lock)
uv add fastapi
# เพิ่ม dev dependency
uv add --dev pytest ruff mypy
# Sync environment จาก pyproject.toml (เหมือน npm ci)
uv sync
# รัน command ภายใน venv โดยไม่ต้อง activate
uv run python main.py
uv run pytest

Poetry คือ tool ตัวแรกที่รวม project metadata, dependency resolution และการจัดการ virtual environment ไว้ใน CLI เดียวที่ใช้งานลื่นมือ ทุกวันนี้ยังมีโปรเจกต์เดิมจำนวนมากใช้อยู่

TypeScript
# npm-like workflow
npm init # scaffold package.json
npm install express # เพิ่ม runtime dep
npm install -D jest # เพิ่ม dev dep
npm run start # รัน script
npm run test # รัน tests
cat package-lock.json # lock file ที่แน่นอน
Python
# Poetry — npm-like workflow สำหรับ Python
poetry new my-project # scaffold pyproject.toml + src/
poetry add fastapi # เพิ่ม runtime dep
poetry add --group dev pytest # เพิ่ม dev dep
poetry run python main.py # รัน script
poetry run pytest # รัน tests
cat poetry.lock # lock file ที่แน่นอน
pip + venvpoetryuv
ความเร็วช้ากลางเร็วมาก
Lock filerequirements.txt (manual)poetry.lockuv.lock
pyproject.tomlบางส่วนเต็มรูปแบบเต็มรูปแบบ
Auto-manage venvmanualใช่ใช่
ความสมบูรณ์เสถียรมากเสถียรใหม่กว่า (2024+)
คำแนะนำlegacy projectsprojects ที่ใช้ poetry อยู่แล้วprojects ใหม่

Playground note: Package managers แก้ไข filesystem และ network — ต้องใช้ terminal รันคำสั่งข้างต้นในไดเรกทอรี project ของคุณ

อะไรคือคู่เทียบ Python ของการ isolate node_modules ต่อ project ของ npm?
คำสั่งใดสร้าง virtual environment ในไดเรกทอรี .venv?
อะไรคือคู่เทียบ uv ของ "npm ci" — ติดตั้งจาก lockfile อย่างแม่นยำ?
ไฟล์สมัยใหม่ตัวใดแทนที่ requirements.txt เป็น dependency manifest ของ project?