29 คะแนน โดย GN⁺ 2025-10-30 | 7 ความคิดเห็น | แชร์ทาง WhatsApp
  • uv ทำให้การติดตั้ง Python และการจัดการสภาพแวดล้อมเสมือนง่ายขึ้นอย่างมาก และช่วยแก้ปัญหาความซับซ้อนของการตั้งค่าสภาพแวดล้อมในระบบนิเวศ Python
  • เขียนด้วย Rust จึงมีทั้งความเร็วและความเสถียร พร้อมจัดการการติดตั้งเวอร์ชัน Python การจัดการแพ็กเกจ และการแก้ dependency ได้ด้วยคำสั่งเดียว
  • สามารถตรวจจับ pyproject.toml อัตโนมัติเพื่อจัดเตรียมสภาพแวดล้อมของโปรเจ็กต์ และใช้ uv sync เพื่อทำซ้ำสภาพแวดล้อมการพัฒนาที่เหมือนกันทุกประการระหว่างทีมได้
  • ผ่านคำสั่งอย่าง uv run, uv add, uvx จึงสามารถรันได้โดยไม่ต้อง activate virtual environment, เพิ่มแพ็กเกจและรันแบบครั้งเดียวได้
  • ด้วยการทำให้การติดตั้งและการรัน Python มีความสม่ำเสมอ uv จึงถูกมองว่าเป็นจุดเปลี่ยนที่ช่วยยกระดับประสิทธิภาพการทำงานของนักพัฒนาและการทำงานร่วมกันอย่างมาก

ภาพรวมของ uv

  • uv เป็นเครื่องมือจัดการ Python แบบโอเพนซอร์สฟรีที่พัฒนาโดย Astral โดยมีเป้าหมายเพื่อทำให้กระบวนการตั้งค่าสภาพแวดล้อมที่ซับซ้อนง่ายขึ้น
    • Astral คือทีมที่สร้างเครื่องมือพัฒนา Python อย่าง Ruff
    • uv รองรับการติดตั้งเวอร์ชัน Python, การติดตั้งแพ็กเกจ, การจัดการ virtual environment, การแก้ dependency และในด้านความเร็วนั้นเหนือกว่าเครื่องมือเดิมอย่างชัดเจน
  • พัฒนาด้วย Rust ทำให้มีประสิทธิภาพสูงมาก และทำงานได้บนแทบทุกแพลตฟอร์ม เช่น macOS, Linux, Windows

การติดตั้งและการใช้งานพื้นฐาน

  • การติดตั้งง่ายมาก และสามารถรันได้ด้วยคำสั่ง curl หรือ PowerShell เพียงบรรทัดเดียว
  • สามารถลองใช้ได้อย่างปลอดภัยเพราะจะไม่ไปเปลี่ยนแปลงการติดตั้ง Python เดิมที่มีอยู่
โฆษณา

การจัดการสภาพแวดล้อมของโปรเจ็กต์

  • uv จะจัดการ virtual environment ให้โดยอัตโนมัติสำหรับแต่ละโปรเจ็กต์ Python และตั้งค่าสภาพแวดล้อมโดยอิงจากไฟล์ pyproject.toml
    • ใน pyproject.toml จะกำหนดเวอร์ชัน Python, รายการ dependency, ชื่อและเวอร์ชันของโปรเจ็กต์ เป็นต้น
    • ตัวอย่าง:
      [project]  
      name = "my_project"  
      version = "1.0.0"  
      requires-python = ">=3.9,<3.13"  
      dependencies = ["astropy>=5.0.0", "pandas>=1.0.0,<2.0"]  
      
    • วิธีนี้ให้การนิยามสภาพแวดล้อมที่ชัดเจนและเป็นมาตรฐานมากกว่า pip

การสร้างโปรเจ็กต์ใหม่

  • สามารถสร้างโปรเจ็กต์ใหม่ได้ง่ายด้วยคำสั่ง uv init
    • จะสร้างไฟล์ที่จำเป็นอย่าง pyproject.toml, README.md โดยอัตโนมัติ
    • รองรับรูปแบบการเริ่มต้นที่หลากหลายผ่านออปชันอย่าง --bare, --package
    • ตรวจสอบออปชันเพิ่มเติมได้ด้วย uv init --help
โฆษณา

การซิงก์โปรเจ็กต์เดิม

  • หากโปรเจ็กต์มี pyproject.toml อยู่แล้ว ก็สามารถใช้งานได้ทันทีด้วยคำสั่ง uv sync
    • ติดตั้งเวอร์ชัน Python ให้อัตโนมัติ
    • สร้าง virtual environment ในไดเรกทอรี .venv
    • สร้าง uv.lock ที่บันทึกข้อมูลเวอร์ชันที่แน่นอนของทุกแพ็กเกจ
  • หากใช้คำสั่ง uv run ก็สามารถรันสคริปต์ Python ได้โดยไม่ต้อง activate สภาพแวดล้อม
    • ตัวอย่าง: uv run myscript.py, uv run jupyter lab

การจัดการ dependency และเวอร์ชัน Python

  • ใช้คำสั่ง uv add numpy>=2.0 เพื่อเพิ่มและจัดการ dependency โดยอัตโนมัติได้
    • ไม่จำเป็นต้องแก้ไข pyproject.toml ด้วยตนเอง
  • ใช้คำสั่ง uv python pin 3.12.9 เพื่อตรึงเวอร์ชัน Python ที่ต้องการได้ ซึ่งช่วยรับประกันความสามารถในการทำซ้ำของสภาพแวดล้อม
โฆษณา

uvx: การรันแบบครั้งเดียวที่รวดเร็ว

  • uvx คือคำสั่งที่ช่วยให้รันเครื่องมือได้ทันทีโดยไม่ต้องตั้งค่าสภาพแวดล้อมแยกต่างหาก
    • ตัวอย่าง: uvx ruff, uvx jupyter lab, uvx --with pandas,pyarrow ipython
    • ด้วยระบบแคชจึงสามารถรันซ้ำได้อย่างรวดเร็วมาก และเหมาะกับงานทดลอง
  • ทำให้นักพัฒนาสามารถจัดเตรียมสภาพแวดล้อมชั่วคราวสำหรับการรันได้อย่างง่ายดายโดยไม่ต้องผูกติดกับ virtual environment

ถ้ายังไม่พอจะโน้มน้าวคุณ: บันทึกส่วนตัว

  • ระหว่างการพัฒนา The Astrosky Ecosystem มีการนำ uv มาใช้เพื่อทำให้สภาพแวดล้อม Python เป็นมาตรฐานเดียวกันบนหลายระบบปฏิบัติการ
    • ช่วยให้ทั้งนักพัฒนาและเซิร์ฟเวอร์ทุกตัวใช้การติดตั้ง Python และเวอร์ชัน dependency ที่เหมือนกันทุกประการ
    • uv ยังใช้จัดการสภาพแวดล้อม Python ใน GitHub Actions และบนเซิร์ฟเวอร์โปรดักชันด้วย
  • ด้วย uv ปัญหาความไม่ตรงกันของสภาพแวดล้อมติดตั้งและทดสอบหายไป และการทำงานร่วมกันระหว่างนักพัฒนาก็ง่ายขึ้น

บทสรุป

  • uv ช่วยแก้ความซับซ้อนของการติดตั้งและจัดการ Python ได้อย่างถึงราก และทำให้นักพัฒนาทำงานร่วมกันได้อย่างเสถียรบนสภาพแวดล้อมเดียวกัน
  • ด้วยความเร็วสูงและความเสถียรจากการพัฒนาด้วย Rust ทำให้ uv ได้รับการประเมินว่าเป็น “นวัตกรรมที่ยิ่งใหญ่ที่สุดที่เกิดขึ้นกับระบบนิเวศ Python ในรอบ 10 ปี”

7 ความคิดเห็น

 
kkksss 2025-11-06

ผมเคยคิดว่า pdm คล้ายกับ uv มากเหมือนกัน แต่ดูเหมือนจะไม่ค่อยมีการพูดถึง pdm เท่าไรนะ

 
yuntae 2025-10-30

โพสต์เกี่ยวกับ uv ตอนนี้ดูเหมือนว่าเนื้อหาจะไม่ค่อยเปลี่ยนไปมากแล้ว

 
pmc7777 2025-10-30

Maven กับ Gradle ด้วย..

 
GN⁺ 2025-10-30
ความเห็นจาก Hacker News
  • เมื่อก่อนเคยได้ยินว่าชุดเครื่องมือของ Python ดีพออยู่แล้ว แต่ตอนนี้พอเห็นนักพัฒนา Python ได้ลองใช้ ecosystem ที่อิง lockfile แบบ npm, cargo หรือ bundler แล้วค่อยตระหนักถึงข้อดีของมัน ก็รู้สึกสะใจอยู่ไม่น้อย
    npm เองก็มีปัญหา แต่เรื่อง การติดตั้งที่สม่ำเสมอและไฟล์ล็อก เป็นแนวคิดที่ยอดเยี่ยมจริงๆ

    • ไม่มีอะไรน่ากลัวไปกว่าการต้องรันโปรเจกต์ Python ของคนอื่นอีกแล้ว
      น่าประหลาดใจที่การจัดการสภาพแวดล้อมไม่สะดวกอยู่แบบนี้มานานมาก
    • สงสัยว่าทำไมถึงใช้เวลานานขนาดนี้
      ไม่แน่ใจว่าเหตุที่ความพยายามจำนวนมากล้มเหลวเป็นเพราะ ความยากของการจัดการแพ็กเกจ อย่างเดียว หรือเพราะต้องมีเงินทุน VC ด้วย
    • ที่ผ่านมาก็ใช้ pip freeze > requirements.txt กับ pip install -r requirements.txt มาตลอด
      ถ้าไม่ใช้ช่วงเวอร์ชัน requirements.txt ก็ทำหน้าที่เป็น lockfile ได้โดยพฤตินัย
      เลยรู้สึกว่ากระแส ‘official lockfile’ ช่วงนี้อาจจะถูกพูดเกินจริงไปหน่อย
    • npm เองก็เคยไม่มี lockfile อยู่ช่วงหนึ่ง
      มองว่า npm พัฒนาขึ้นมากเพราะการมาของ yarn
    • ทำเว็บมาตั้งแต่ปี 1998 และคิดว่า PNPM ดีกว่า npm มาก
      เร็วกว่า มีประสิทธิภาพกว่า และกำหนดผลลัพธ์ได้แน่นอนกว่า
      ดูรายละเอียดได้ที่ pnpm.io/motivation
  • ใช้ UV scripts เพื่อ แจกจ่าย MCP client/server เป็นไฟล์เดียว ได้
    บทความที่เกี่ยวข้อง: MCP server in a file

  • สคริปต์ส่วนใหญ่เป็นไฟล์เดียวอยู่แล้ว แค่เพิ่มโค้ดด้านล่างไว้บนสุด ชีวิตก็ง่ายขึ้นมาก
    #!/usr/bin/env -S uv run --script
    แบบนี้สคริปต์จะทำงานเหมือน executable แบบอิสระ และ uv จะติดตั้งโมดูลที่จำเป็นให้อัตโนมัติ

    • ถ้ามองด้านความปลอดภัย วิธีนี้มี ความเสี่ยง อยู่บ้าง
      เพราะคนเขียนสคริปต์อาจซ่อน dependency อันตรายไว้ได้
      ถ้ามีฟังก์ชัน whitelist ก็น่าจะดี
    • ณ วันที่รัน สามารถใช้ max release date flag เพื่อตรึงเวอร์ชันได้โดยไม่ต้องมี lockfile
      แต่บางแพ็กเกจตรวจจับวันที่ออกรีลีสไม่ได้ (เช่น yaml)
    • ถ้าจะรันก็ยังต้องติดตั้ง uv ก่อน จึงไม่ใช่ standalone แบบสมบูรณ์
    • ต้องรองรับ /usr/bin/env -S และชื่อ dependency ต้องใช้เป็น ชื่อแพ็กเกจที่ใช้แจกจ่าย ตามที่ใช้ในคำสั่ง uv pip install
      นี่เป็นมาตรฐาน PEP 723 และ pipx ก็รองรับด้วย
    • ต้องใช้อินเทอร์เน็ต และอาจติดตั้งคนละเวอร์ชันได้ตามสถานะของ repository
  • ก่อนใช้ uv ไม่ได้สนใจ Rust เท่าไร แต่เพราะ uv เลยเริ่มย้าย โค้ดที่ไวต่อประสิทธิภาพ ไปเขียนด้วย Rust
    อยากให้ conda หายไปเลย ใน ML cluster ขนาดของ conda environment ใหญ่มากและ reproducibility ก็ไม่ดี

    • มีคนแนะนำ pixi ที่เขียนด้วย Rust เป็นทางเลือกของ conda และมันใช้ PyPI solver ของ uv ซ้ำด้วย
    • conda ถ้าตรึง dependency แล้วก็ reproducible อยู่ แต่ build ช้า
    • ถ้าเป็น ML cluster ก็น่าจะ containerize อยู่แล้ว เลยคิดว่าไม่จำเป็นต้องมี conda
    • สงสัยว่า uv จัดการ dependency ของ CUDA ยังไง
    • แนวทางโอเพนซอร์สสำหรับการจัดการ dependency ของ ML ขนาดใหญ่ ดูได้ที่ Metaflow docs และ Fast Bakery blog
  • เมื่อก่อนพอใจกับชุด pyenv + venv + pip + pipx อยู่แล้ว แต่ uv นั้น

    • แก้ dependency ได้เร็วมาก
    • ใช้งานสะดวกขึ้นมากด้วย uv run, uv add เป็นต้น
    • รวมหลายเครื่องมือไว้ในตัวเดียว
    • ทำให้การติดตั้ง Python ง่ายขึ้น
  • แทนที่จะ activate environment การใส่ uv นำหน้าคำสั่งสะดวกกว่ามาก
    การจัดการเวอร์ชัน Python ก็ง่ายขึ้น และให้ความรู้สึกแบบ batteries-included ในระดับต่อโปรเจกต์
    ยังไม่รู้ว่าระยะยาวจะเสถียรแค่ไหน แต่ตอนนี้ใช้เป็นค่าเริ่มต้นสำหรับโปรเจกต์ใหม่แล้ว

    • การ activate environment ก็แค่ปรับ PATH กับ prompt เท่านั้น
      บางคนไม่ชอบที่ uv ตรวจจับ environment ให้อัตโนมัติ
      ไม่ค่อยเห็นคุณค่าของการจัดการเวอร์ชัน Python เท่าไร แต่การสร้าง environment ใหม่ด้วย uv เร็วกว่ามาก
    • การใส่ uv ทำให้รันคำสั่งแบบ stateless ได้ จึงสะดวกเวลาทำงานร่วมกัน
    • ใช้คู่กับ mise เพื่อทำ auto-activation ได้ แต่ prefix uv ก็ยังมีประโยชน์อยู่
    • ปรัชญาของ uv คือ venv เป็นของใช้แล้วทิ้ง ถ้ามีปัญหาก็ลบ .venv ได้เลย
    • จริงๆ แล้วการตั้งค่าสภาพแวดล้อมแบบนี้มันควรเป็นปัญหาประเภท “แค่ต้องใช้งานได้”
  • บล็อกโพสต์นี้ตรงกับประสบการณ์ของฉันแทบทั้งหมด
    แรงเสียดทานลดลงและเรียบง่ายขึ้น
    อยากให้ชุมชน Python รับ uv เป็นเครื่องมือมาตรฐาน

  • เครื่องมือที่เขียนด้วย Rust เปลี่ยน ความเร็วของ feedback loop ไปอย่างสิ้นเชิง
    แต่ก็สงสัยว่า Astral จะทำรายได้ยังไง เพราะรับเงินลงทุนมาแล้วแต่ยังไม่มีสินค้าแบบเสียเงิน

    • โมเดลรายได้ของ Astral คือการขาย ซอฟต์แวร์ระดับองค์กรที่ผสานกับเครื่องมือโอเพนซอร์ส
      เช่น package registry ภายในองค์กร
      บทสัมภาษณ์ที่เกี่ยวข้อง: สัมภาษณ์ Charlie Marsh
    • สินค้าที่มีโอกาสพัฒนาเป็นบริการแบบเสียเงินได้คือ Pyx
    • Conda ก็หาเงินได้จากการให้สิทธิ์เข้าถึง “แพ็กเกจที่เสริมความปลอดภัย” เท่านั้น
      ถ้ามีนักพัฒนา Python 10 ล้านคน ก็คิดว่า uv ก็ สร้างรายได้ได้เพียงพอ เหมือนกัน
  • ส่วนตัวคิดว่า type annotations และ การเอา GIL ออก สำคัญกว่า uv
    uv ยังอยู่ช่วงต้นและก็ยังมีจุดที่ไม่สะดวก สุดท้ายมันก็เป็นแค่อีก package manager ตัวหนึ่ง

    • เหตุผลส่วนหนึ่งที่คนชม uv จริงๆ แล้วเป็นผลจาก pip และ venv ที่ดีขึ้นเพราะมี PEP ที่เป็นมาตรฐาน แล้ว
      resolver ตัวใหม่ของ pip และการเพิ่มขึ้นของ การแจกจ่ายแบบ wheel มีบทบาทมาก
      บทความที่เกี่ยวข้อง: Wheels are faster for pure Python
    • ในระดับภาษา การเอา GIL ออกคงเป็นการเปลี่ยนแปลงที่ใหญ่กว่า แต่ในทางปฏิบัติยังมี กรณีใช้งานที่ได้ประโยชน์จริง ไม่มากนัก
    • type hints เป็นฟีเจอร์เก่าที่มีมาตั้งแต่ปี 2015 แล้ว
    • uv ไม่ใช่แค่ package manager ธรรมดา แต่มีคุณค่าอย่างมากในด้าน การทำให้ deployment ง่ายขึ้น
      ที่เขียนด้วย Rust ก็ชวนสนใจด้วย เพราะมีโครงสร้างรองรับภาษาอื่นได้แบบ LLVM
      จากมุมมอง end-user แล้ว uv ดีกว่ามาก และถ้าฝั่งผู้ดูแลรักษาไม่สะดวกก็ควรส่ง feedback
    • type annotations ดีต่อการทำเอกสาร แต่ประโยชน์เชิงปฏิบัติไม่ได้สูงนัก
      ถ้ามี strict mode ก็อาจช่วยเรื่องประสิทธิภาพได้ แต่ก็ขัดกับปรัชญาของภาษา
      ถึงอย่างนั้น ถ้า conda หายไปก็ยินดีจะย้ายมาใช้ uv
  • ฉันไม่ชอบ uv

    • มันพยายามทำหลายอย่างเกินไป: อยากแทนที่ทั้ง pip, pyenv, virtualenv, ไปจนถึง ruff ในคราวเดียว
    • ต้องใช้ uv pip เลยไม่ใช่การแทนที่แบบสมบูรณ์
    • ความเข้ากันได้กับ Docker ก็ไม่ค่อยดี
    • มี environment variables ใหม่เยอะ ทำให้ ความซับซ้อนเพิ่มขึ้น
    • ไม่คิดว่า pyenv, virtualenv, pip ที่แยกกันอยู่เป็นเรื่องแปลก
      แต่ pip กับ venv เองก็พังบ่อยและดีบักยากกว่า
    • จริงๆ แล้ว pip, pyenv, virtualenv มักถูกใช้ด้วยกันอยู่เสมอ จึงมีเหตุผลที่ เครื่องมือแบบรวมศูนย์ จะเกิดขึ้น
      uv ไม่ได้แทนที่ ruff
      และแทบไม่ต้องไปยุ่งกับ environment variables เลย
    • uv pip ไม่ได้เรียกใช้ pip แต่ให้ interface ที่เข้ากันได้
      ในทางปฏิบัติ uv คือสิ่งที่มาแทน pip
      เลยสงสัยว่าปัญหาเรื่องความเข้ากันได้กับ Docker ที่ว่าเป็นเรื่องอะไรโดยเฉพาะ
    • ถ้าจัดการด้วย uv add, uv sync, uv run จะ ใช้งานตามหลักสรีรศาสตร์ได้ดีกว่า และเร็วกว่า
      ดูเอกสารเพิ่มเติมได้ที่ แนวคิดเรื่อง dependencies ของ uv
    • จากประสบการณ์ของฉัน uv ทำหน้าที่หลายอย่างได้ดี เลยอยากรู้ว่าเจอปัญหาอะไรบ้างโดยเฉพาะ
 
aer0700 2025-11-01

uv เร็วก็ดีอยู่หรอก แต่ก็แอบคิดเหมือนกันว่าถ้าไปในทางปรับปรุง pip แทนจะเป็นอย่างไรนะ

 
ztaka 2025-11-02

ผมใช้อยู่เยอะทั้งในสาย ML และ Web และก็หวังว่า uv จะกลายเป็นเทคโนโลยีที่ธรรมดาจนน่าเบื่อได้ไว ๆ ครับ 555

 
doolayer 2025-10-30

พอเห็นรีโปที่มีแค่ requirements แต่ไม่มี pyproject.toml เดี๋ยวนี้ก็ดูเชยไปแล้วนะ 555;