7 คะแนน โดย GN⁺ 2024-02-16 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • uv คือเครื่องมือ installer และ resolver สำหรับแพ็กเกจ Python ความเร็วสูงพิเศษที่เขียนด้วย Rust ออกแบบมาเพื่อแทนที่เวิร์กโฟลว์ของ pip และ pip-tools
  • uv เป็นหมุดหมายสู่แนวคิด "Cargo for Python" โดยมุ่งเป็นตัวจัดการโปรเจ็กต์และแพ็กเกจ Python แบบครบวงจรที่รวดเร็ว เชื่อถือได้ และใช้งานง่าย
  • มีแผนรับช่วงการดูแล Rye ซึ่งเป็นเครื่องมือแพ็กเกจจิง Python ที่ Armin Ronacher พัฒนาเชิงทดลอง และขยาย uv ให้เป็นโครงการสืบทอดแบบรวมศูนย์

การโฟกัสด้านประสิทธิภาพแบบสุดโต่ง

  • uv เร็วกว่า pip และ pip-tools 8-10 เท่า เมื่อไม่มีแคช และเร็วกว่า 80-115 เท่า เมื่อมีแคช
  • ใช้แคชโมดูลแบบโกลบอลเพื่อหลีกเลี่ยงการดาวน์โหลดหรือบิลด์ dependencies ซ้ำ และใช้ Copy-on-Write กับฮาร์ดลิงก์บนไฟล์ซิสเต็มที่รองรับเพื่อลดการใช้พื้นที่ดิสก์ให้น้อยที่สุด

ปรับให้รับไปใช้งานได้ง่าย

  • รีลีสแรกของ uv รองรับ API ของ pip และ pip-tools จึงสามารถใช้กับโปรเจ็กต์เดิมได้โดยไม่ต้องเปลี่ยนคอนฟิก
  • uv มาในรูปแบบไบนารีสแตติกไฟล์เดียว และสามารถใช้แทน pip, pip-tools, virtualenv ได้
  • สามารถติดตั้งแยกจากตัว Python ได้โดยไม่ต้องคอยจัดการการติดตั้ง pip ตามแต่ละเวอร์ชันของ Python

"Cargo for Python": uv และ Rye

  • uv เป็นหมุดหมายระหว่างทางสู่ตัวจัดการแพ็กเกจและโปรเจ็กต์ Python แบบรวมศูนย์ที่รวดเร็ว เชื่อถือได้ และใช้งานง่าย
  • uv ตั้งเป้าเป็นไบนารีเดียวที่ครอบคลุมไม่เพียง pip, pip-tools, virtualenv แต่ยังรวมถึง pipx, tox, poetry, pyenv, ruff และอื่น ๆ

API ที่เข้ากันได้

  • ใช้ uv pip install แทน pip install เพื่อติดตั้ง dependencies ของ Python จากบรรทัดคำสั่ง ไฟล์ requirements หรือ pyproject.toml
  • ใช้ uv pip compile แทน pip-compile เพื่อสร้าง requirements.txt ที่ล็อกเวอร์ชันไว้
  • ใช้ uv pip sync แทน pip-sync เพื่อซิงก์ requirements.txt ที่ล็อกไว้กับ virtual environment

โรดแมป

  • หลังจากรีลีสนี้ มีแผนให้ความสำคัญกับการซัพพอร์ตผู้ใช้เป็นอันดับแรก พร้อมโฟกัสที่การปรับปรุงความเข้ากันได้ ประสิทธิภาพ และเสถียรภาพ
  • หลังจากนั้นจะมุ่งขยาย uv ให้เป็นตัวจัดการโปรเจ็กต์และแพ็กเกจ Python แบบสมบูรณ์

คำขอบคุณ

  • ขอขอบคุณทุกคนที่มีส่วนร่วมต่อการพัฒนา uv ไม่ว่าทางตรงหรือทางอ้อม
  • โดยเฉพาะอย่างยิ่ง ขอขอบคุณ Jacob Finkelman และ Matthieu Pizenberg ซึ่ง PubGrub ของทั้งสองถูกใช้ใน uv ในฐานะตัวแก้เวอร์ชันพื้นฐาน

ความเห็นของ GN⁺

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

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

 
kyunghoon 2024-10-29

เร็วมากจริง ๆ เลยนะ;;

 
ajh508 2024-02-17

หวังว่ามันจะขยายต่อไปจนสามารถมาแทนที่ conda ได้

 
GN⁺ 2024-02-16
ความคิดเห็นจาก Hacker News
  • ข้อสงสัยเกี่ยวกับ pip-and-more ที่ได้รับเงินหนุนจาก VC

    • เข้าใจได้ยากว่า pip-and-more ที่ได้รับการสนับสนุนจากเงินร่วมลงทุนจะทำกำไรอย่างไรเมื่อเครื่องพิมพ์เงินฟรีพังลง
  • คำถามเกี่ยวกับการที่ uv ไม่รองรับการสร้าง lockfile แบบไม่ขึ้นกับแพลตฟอร์ม

    • มีความเห็นว่าแนวทางที่ uv ไม่สร้าง lockfile แบบไม่ขึ้นกับแพลตฟอร์มเหมือน Poetry หรือ PDM นั้นผูกติดอยู่กับไฟล์ requirements และจึงไม่สอดคล้องกับเป้าหมายที่จะเป็น "Cargo ของ Python"
  • การประเมินเชิงบวกต่อการรองรับกลยุทธ์การแก้ dependency ทางเลือกของ uv

    • uv ปฏิบัติตามกลยุทธ์การแก้ dependency มาตรฐานของ Python ที่โดยปกติจะให้ความสำคัญกับเวอร์ชันแพ็กเกจล่าสุดที่เข้ากันได้ แต่ก็มีความสามารถให้ทดสอบด้วยเวอร์ชันต่ำสุดที่เข้ากันได้ผ่านตัวเลือก --resolution=lowest
    • ถือว่ายอดเยี่ยมที่ uv มีความสามารถในการสร้างผลลัพธ์การแก้ dependency สำหรับเวอร์ชัน Python ที่ต่างจากเวอร์ชันที่ติดตั้งอยู่ในปัจจุบันผ่านพารามิเตอร์ --python-version
  • ข้อสงสัยต่อความซับซ้อนของระบบแพ็กเกจ Python

    • มีการตั้งคำถามว่าในเมื่อปรัชญาของ Python interpreter มีหลักการว่า "ควรมีวิธีที่ชัดเจนเพียงวิธีเดียว" แล้วเหตุใดเรื่องแพ็กเกจจึงซับซ้อนมาถึงระดับนี้
  • ประเด็นที่น่าสนใจเกี่ยวกับการที่ uv ใช้ pubgrub-rs

    • มีความเห็นว่าน่าสนุกที่ได้เห็นแรงบันดาลใจข้ามภาษาที่ต่อเนื่องกัน เมื่อ uv ใช้ pubgrub-rs ซึ่งเป็นการนำอัลกอริทึมแก้เวอร์ชัน pubgrub ที่เดิมเขียนขึ้นสำหรับภาษา Dart มาเขียนใหม่ด้วย Rust
  • การกล่าวถึงการคาดการณ์เส้นทางของทีม Astral

    • มีการกล่าวว่าตนได้คาดการณ์ไว้เมื่อ 11 วันก่อนว่าทีม Astral จะขยายความสามารถของ ruff เพื่อให้ทำได้ทุกอย่างที่นักพัฒนา Python ต้องการ
  • ประสบการณ์ส่วนตัวเกี่ยวกับความเร็วของ pip

    • มีประสบการณ์ว่า pip โดยทั่วไปทำงานได้เร็ว แต่จะช้าลงเมื่อจำเป็นต้องดาวน์โหลดข้อมูลจำนวนมากหรือคอมไพล์ไลบรารีเนทีฟ ขณะที่ conda นั้นช้ามาก และช้าแม้กระทั่งบนเครื่องแรง
  • มุมมองเชิงสงสัยต่อ Python package manager ตัวใหม่

    • แม้จะมี Python package manager ตัวใหม่ออกมาอีกตัว แต่ถ้ามันแทนที่ pip ได้จริง ก็พร้อมจะย้ายเหมือนที่เคยเปลี่ยนไปใช้ ruff เพื่อความเร็วที่ดีขึ้น เพราะการจัดการแพ็กเกจของ Python ต้องการทางออกถาวร
  • ความสงสัยต่อการตัดสินใจของ uv ที่สร้างไฟล์ requirements.txt เฉพาะแพลตฟอร์ม

    • มีความสงสัยถึงเหตุผลที่ uv เลือกสร้างไฟล์ requirements.txt ที่เฉพาะแพลตฟอร์ม แทนที่จะสร้างไฟล์ poetry.lock และ pdm.lock ที่ไม่ขึ้นกับแพลตฟอร์ม
  • คำยินดีและปฏิกิริยาเชิงบวกต่อผลงานของทีม Astral

    • แม้จะเคยแสดงความกังวลต่อความพยายามจากคนนอกที่จะมา "แก้" ระบบแพ็กเกจของ Python แต่ก็รู้สึกยินดีที่เห็นว่าความเข้ากันได้ถูกให้ความสำคัญเป็นอันดับแรก และประเมินในทางบวกต่อความพยายามของทีม Astral ที่เน้นความเข้ากันได้กับเครื่องมือและมาตรฐานเดิม
  • คำถามเกี่ยวกับปัญหาการคอมไพล์ของแพ็กเกจ pip

    • มีคำถามว่าแพ็กเกจบางตัวใน pip ต้องคอมไพล์โดยพึ่งพา toolchain เต็มรูปแบบ เช่น gcc, g++, gtk, Qt เป็นต้น และมีแผนจะทำให้กระบวนการนี้เกิดข้อผิดพลาดน้อยลงและเป็นมิตรต่อผู้ใช้อย่างไร