งูหลามมีประวัติศาสตร์อันสับสนของเครื่องมือที่สามารถใช้ในการจัดแพคเกจและอธิบายโครงการ: เหล่านี้รวมถึงdistutilsในห้องสมุดมาตรฐานdistribute, distutils2และsetuptools(และอาจจะมากกว่า) ปรากฏว่าdistributeและdistutils2ถูกยกเลิกในความโปรดปรานsetuptoolsซึ่งออกจากสองมาตรฐานการแข่งขัน
เพื่อความเข้าใจของฉันsetuptoolsมีตัวเลือกมากขึ้น (เช่นการประกาศการอ้างอิงการทดสอบและอื่น ๆ ) มากกว่าdistutilsแต่มันไม่รวมอยู่ในไลบรารี่มาตรฐานของไพ ธ อน (ยัง?)
หลามบรรจุภัณฑ์คู่มือการใช้งาน [ 1 ] แนะนำขณะนี้:
ใช้
setuptoolsเพื่อกำหนดโครงการและสร้างการกระจายแหล่งที่มา
และอธิบาย:
แม้ว่าคุณสามารถใช้บริสุทธิ์
distutilsสำหรับโครงการจำนวนมากก็ไม่สนับสนุนการกำหนดอ้างอิงในโครงการอื่น ๆsetuptoolsและจะหายไปสาธารณูปโภคอำนวยความสะดวกหลายอย่างสำหรับประชากรโดยอัตโนมัติเมตาดาต้าแพคเกจได้อย่างถูกต้องที่ให้ไว้โดย เมื่ออยู่นอกไลบรารีมาตรฐาน setuptools ยังมีฟีเจอร์ที่สอดคล้องกันมากขึ้นในเวอร์ชัน Python ที่แตกต่างกันและ (ต่างจากdistutils)setuptoolsจะได้รับการอัปเดตเพื่อสร้างรูปแบบมาตรฐาน“ Metadata 2.0” ที่กำลังจะเกิดขึ้นในทุกเวอร์ชั่นที่รองรับแม้แต่โครงการที่เลือกใช้
distutilsเมื่อ pip ติดตั้งโครงการดังกล่าวโดยตรงจากแหล่งที่มา (แทนที่จะติดตั้งจากไฟล์ล้อที่สร้างไว้ล่วงหน้า) มันจะสร้างโครงการของคุณโดยใช้setuptoolsแทน
อย่างไรก็ตามการดูไฟล์setup.pyของโครงการต่างๆพบว่าสิ่งนี้ดูเหมือนจะไม่ได้มาตรฐานจริง แพ็คเกจจำนวนมากยังคงใช้งานอยู่distutilsและแพ็คเกจที่สนับสนุนsetuptoolsมักจะผสมsetuptoolsกับdistutilsตัวอย่างเช่นโดยการนำเข้าทางเลือก:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
ตามมาด้วยความพยายามที่จะหาวิธีที่จะเขียนติดตั้งที่สามารถติดตั้งโดยทั้งจำทั้งปรับและsetuptools distutilsซึ่งมักจะรวมถึงวิธีการต่าง ๆ ของการตรวจสอบการพึ่งพาข้อผิดพลาดเนื่องจากdistutilsไม่สนับสนุนการอ้างอิงในฟังก์ชันการตั้งค่า
เหตุใดผู้คนจึงยังคงพยายามสนับสนุนdistutilsเป็นพิเศษ- ความจริงที่setuptoolsไม่ได้อยู่ในห้องสมุดมาตรฐานเป็นเหตุผลเดียว? อะไรคือข้อดีของdistutilsและจะมีข้อบกพร่องในการเขียนใด ๆsetup.pysetuptoolsแฟ้มที่สนับสนุนเท่านั้น
setuptoolsเป็นทางเลือกที่ได้รับการปรับปรุงให้ดีขึ้นdistutilsแต่โปรดทราบว่า " ตัวติดตั้งpip ที่แนะนำจะเรียกใช้สคริปต์ setup.py ทั้งหมดด้วยsetuptoolsแม้ว่าสคริปต์นั้นจะนำเข้าเท่านั้นdistutils " ( แหล่งที่มา )
distutilsถูกรวมกลับเข้าไปsetuptoolsแต่มีแอปรุ่นเก่าที่เขียนขึ้นเพื่อใช้งานdistutilsและมีค่าใช้จ่ายที่เกี่ยวข้องกับการโยกย้ายเพื่อแก้ไขมาตรฐาน