งูหลามมีประวัติศาสตร์อันสับสนของเครื่องมือที่สามารถใช้ในการจัดแพคเกจและอธิบายโครงการ: เหล่านี้รวมถึง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
และมีค่าใช้จ่ายที่เกี่ยวข้องกับการโยกย้ายเพื่อแก้ไขมาตรฐาน