Build Backend ดั้งเดิมของ UV เข้าสู่ระยะเสถียร พร้อมสัญญาการสร้างแพ็กเกจ Python แบบไม่ต้องกำหนดค่า

ทีมชุมชน BigGo
Build Backend ดั้งเดิมของ UV เข้าสู่ระยะเสถียร พร้อมสัญญาการสร้างแพ็กเกจ Python แบบไม่ต้องกำหนดค่า

ชุมชนนักพัฒนา Python กำลังเฉลิมฉลองอีกหนึ่งก้าวสำคัญจาก Astral เมื่อ build backend ดั้งเดิมของ UV เข้าสู่ระยะเสถียร เครื่องมือใหม่นี้มีเป้าหมายเพื่อทำให้การสร้างแพ็กเกจ Python ง่ายขึ้นโดยไม่ต้องการการกำหนดค่าใดๆ สำหรับโครงการส่วนใหญ่ ซึ่งถือเป็นอีกหนึ่งก้าวในภารกิจของ UV ที่จะปรับปรุงขั้นตอนการพัฒนา Python ให้เรียบง่าย

ตัวอย่างการกำหนดค่า UV Build Backend:

[build-system]
requires = ["uv_build>=0.7.19,<0.8.0"]
build-backend = "uv_build"

การแก้ไขวิกฤตความซับซ้อนของเครื่องมือ Python

นักพัฒนา Python มักประสบปัญหากับเครื่องมือแพ็กเกจที่หลากหลายและสับสน ระบบนิเวศนี้ประกอบด้วย pip, conda, virtualenv, pipenv, setuptools, hatchling และตัวเลือกอื่นๆ อีกมากมายที่มักจะทับซ้อนกันในด้านฟังก์ชันการทำงาน การแยกส่วนนี้ทำให้เกิดเส้นโค้งการเรียนรู้ที่สูงชันสำหรับผู้เริ่มต้น และความหงุดหงิดสำหรับนักพัฒนาที่มีประสบการณ์ซึ่งต้องนำทางผ่านแนวปฏิบัติที่ดีที่เปลี่ยนแปลงอยู่ตลอดเวลา

Build backend ของ UV แก้ไขความซับซ้อนนี้โดยการให้ค่าเริ่มต้นที่สมเหตุสมผลซึ่งทำงานได้ทันที เครื่องมือนี้ตรวจจับโครงสร้างโครงการมาตรฐานโดยอัตโนมัติและจัดการกับสถานการณ์การแพ็กเกจทั่วไปโดยไม่ต้องการไฟล์กำหนดค่าหรือขั้นตอนการตั้งค่าที่ซับซ้อน แนวทางนี้สะท้อนเครื่องมือที่ประสบความสำเร็จในภาษาอื่นๆ เช่น Cargo ของ Rust ซึ่งให้โซลูชันเดียวที่ครอบคลุมสำหรับการจัดการแพ็กเกจ

โครงสร้างโปรเจกต์เริ่มต้น:

pyproject.toml
src/
└── package_name/
    └── __init__.py

ข้อได้เปรียบด้านประสิทธิภาพและการรวมระบบ

Build backend ใหม่ใช้ประโยชน์จากสถาปัตยกรรมที่ใช้ Rust ของ UV เพื่อมอบการปรับปรุงประสิทธิภาพที่สำคัญเหนือเครื่องมือ Python แบบดั้งเดิม สมาชิกชุมชนรายงานว่าการดำเนินงานของ UV เสร็จสิ้นในหน่วยมิลลิวินาทีเมื่อเทียบกับหลายร้อยมิลลิวินาทีสำหรับคำสั่ง pip ที่เทียบเท่า การเพิ่มความเร็วนี้จะเห็นได้ชัดเจนโดยเฉพาะในสภาพแวดล้อม continuous integration และขั้นตอนการพัฒนาขนาดใหญ่

นอกเหนือจากประสิทธิภาพดิบแล้ว build backend ยังรวมระบบอย่างแน่นแฟ้นกับระบบนิเวศที่มีอยู่ของ UV โครงการที่ใช้ UV build backend สามารถใช้ประโยชน์จากแนวทางแบบรวมของ UV ในการจัดการ dependency, virtual environment และการจัดการเวอร์ชัน Python การรวมระบบนี้ช่วยขจัดความจำเป็นในการประสานงานเครื่องมือหลายตัวและลดโอกาสของปัญหาความเข้ากันได้

การเปรียบเทียบประสิทธิภาพ (เวลาในการเริ่มต้น):

  • UV: ~0.005 วินาที
  • NPM: ~0.082 วินาที
  • Pip: ~0.320 วินาที

ข้อจำกัดปัจจุบันและแผนอนาคต

UV build backend ปัจจุบันรองรับเฉพาะโครงการ Python แบบ pure เท่านั้น หมายความว่านักพัฒนาที่ทำงานกับ C extension หรือความต้องการ build ที่ซับซ้อนต้องใช้โซลูชันทางเลือกเช่น hatchling หรือ setuptools Astral ได้มุ่งเน้นไปที่การทำให้กรณีการใช้งานทั่วไปสมบูรณ์แบบก่อนที่จะขยายไปยังสถานการณ์ที่เฉพาะเจาะจงมากขึ้น

เครื่องมือ astral เป็นสิ่งที่ดีที่สุดที่เกิดขึ้นกับ Python ในหลายปีและทำให้ฉันมีความสุขมาก

กลยุทธ์การสร้างรายได้ของบริษัทมุ่งเน้นไปที่บริการองค์กรเช่น private package registry ในขณะที่เก็บเครื่องมือหลักให้ฟรีและเป็น open source แนวทางนี้ตามรูปแบบที่ประสบความสำเร็จจากบริษัทเช่น Anaconda แม้ว่าสมาชิกชุมชนบางคนจะแสดงความกังวลเกี่ยวกับความยั่งยืนระยะยาวเนื่องจากการลงทุน venture capital ที่สำคัญใน Astral

คุณสมบัติหลักของ Build Backend:

  • ไม่ต้องตั้งค่าใดๆ สำหรับโปรเจกต์มาตรฐาน
  • รองรับเฉพาะ Pure Python เท่านั้น (ไม่รองรับ C extensions)
  • การรวมไฟล์/การยกเว้นไฟล์อัตโนมัติ
  • รองรับ Namespace package
  • รองรับ Type stub package
  • บูรณาการกับระบบนิเวศ UV

การยอมรับของชุมชนและผลกระทบ

ผู้ใช้งานเริ่มแรกรายงานประสบการณ์ที่เปลี่ยนแปลงไปกับชุดเครื่องมือของ UV นักพัฒนาอธิบายว่ารู้สึกเหมือนมีพลังพิเศษเมื่อเปลี่ยนจากเครื่องมือ Python แบบดั้งเดิมไปใช้แนวทางแบบรวมของ UV ความสามารถของเครื่องมือในการจัดการ script dependency โดยอัตโนมัติได้สร้างความประทับใจเป็นพิเศษให้กับผู้ใช้ที่เคยประสบปัญหากับการจัดการ environment

ผลกระทบที่กว้างขึ้นขยายไปเกินกว่าประสิทธิภาพของนักพัฒนาแต่ละคน องค์กรต่างๆ กำลังนำ UV มาใช้สำหรับกระบวนการ build โดยรายงานว่ามี deployment pipeline ที่เร็วขึ้นและค่าใช้จ่ายในการบำรุงรักษาที่ลดลง ความน่าเชื่อถือและพฤติกรรมที่สม่ำเสมอของเครื่องมือในสภาพแวดล้อมต่างๆ ทำให้มันน่าสนใจสำหรับทีมที่จัดการ Python deployment ที่ซับซ้อน

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

อ้างอิง: The uv build backend