0Pricing
Python Academy · บทเรียน

การสร้างด้วย build

สร้าง wheels และ sdists

การสร้างด้วย build เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

ความหมายของการสร้างแพ็กเกจ

ต้องแปลงโค้ดต้นฉบับของคุณให้เป็นไฟล์สำหรับแจกจ่ายที่ pip ติดตั้งได้ เครื่องมือสมัยใหม่สำหรับงานนี้คือ build ซึ่งเรียกใช้ด้วย python -m build

เครื่องมือนี้สร้างไฟล์สองประเภท ได้แก่ แพ็กเกจซอร์สโค้ดและแพ็กเกจไบนารี

แพ็กเกจซอร์สโค้ดเทียบกับแพ็กเกจไบนารี

ไฟล์สำหรับแจกจ่ายมีสองประเภท:

  • แพ็กเกจซอร์สโค้ด (.tar.gz) คลังซอร์สโค้ด ซึ่ง pip จะสร้างระหว่างติดตั้ง
  • แพ็กเกจไบนารี (.whl) คลังที่สร้างไว้ล่วงหน้า ซึ่ง pip เพียงแตกไฟล์

แพ็กเกจไบนารีติดตั้งได้เร็วกว่าและเป็นตัวเลือกที่แนะนำ ส่วนแพ็กเกจซอร์สโค้ดเป็นทางเลือกสำรองและเป็นแหล่งซอร์สโค้ดหลัก

การติดตั้งเครื่องมือสร้างแพ็กเกจ

ติดตั้งเพียงครั้งเดียวด้วย pip install build เครื่องมือนี้เป็นส่วนหน้าขนาดเล็ก โดยอ่าน pyproject.toml ตั้งค่าสภาพแวดล้อมแยก และเรียกใช้แบ็กเอนด์สำหรับสร้างแพ็กเกจเพื่อสร้างไฟล์สำหรับแจกจ่าย

คุณไม่ต้องเรียกใช้แบ็กเอนด์โดยตรง เพราะ build เป็นผู้ประสานงานให้

การเรียกใช้การสร้างแพ็กเกจ

จากรากของโครงการ ให้เรียกใช้ python -m build โดยค่าเริ่มต้นคำสั่งนี้จะสร้างทั้งแพ็กเกจซอร์สโค้ดและแพ็กเกจไบนารี แล้ววางไว้ในไดเรกทอรี dist/ ที่สร้างขึ้นใหม่

ใช้ --wheel หรือ --sdist หากต้องการสร้างเพียงประเภทเดียว

args = []
targets = []
if '--sdist' in args:
    targets.append('sdist')
if '--wheel' in args:
    targets.append('wheel')
if not targets:
    targets = ['sdist', 'wheel']
print('Will build:', targets)

ชื่อไฟล์แพ็กเกจไบนารี

ชื่อแพ็กเกจไบนารีจะเข้ารหัสข้อมูลเมตาไว้ด้วย: mytool-0.1.0-py3-none-any.whl หมายถึงชื่อ mytool, รุ่น 0.1.0, Python 3, ไม่กำหนดข้อกำหนด ABI และใช้ได้กับทุกแพลตฟอร์ม แพ็กเกจที่เป็น Python ล้วนจะได้รับค่า py3-none-any

name = 'mytool'
version = '0.1.0'
wheel = name + '-' + version + '-py3-none-any.whl'
print(wheel)
print('Parts:', wheel[:-4].split('-'))

การแยกสภาพแวดล้อมสำหรับสร้างแพ็กเกจ

โดยค่าเริ่มต้น build จะสร้างสภาพแวดล้อมเสมือนใหม่ ติดตั้ง requires จาก [build-system] แล้วสร้างแพ็กเกจในสภาพแวดล้อมนั้น วิธีนี้รับประกันว่าการสร้างแพ็กเกจจะไม่พึ่งพาแพ็กเกจที่บังเอิญมีอยู่ในสภาพแวดล้อมของคุณเท่านั้น

การตรวจสอบไดเรกทอรี dist

หลังการสร้างแพ็กเกจ dist/ จะมีไฟล์สำหรับแจกจ่ายของคุณอยู่ การแสดงรายการในไดเรกทอรีนี้ช่วยยืนยันว่าได้สร้างอะไรไว้บ้างก่อนอัปโหลด นี่เป็นเพียงการแสดงรายการไดเรกทอรีทั่วไป

dist = ['mytool-0.1.0.tar.gz', 'mytool-0.1.0-py3-none-any.whl']
for f in dist:
    kind = 'sdist' if f.endswith('.tar.gz') else 'wheel'
    print(kind.ljust(6), f)

การตรวจสอบแพ็กเกจไบนารี

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

การสร้างแพ็กเกจแบบสะอาด

ไฟล์เก่าที่ค้างอยู่ใน build/ หรือ dist/ อาจทำให้ได้ผลลัพธ์ที่สับสน ลบไดเรกทอรีเหล่านี้ก่อนสร้างแพ็กเกจสำหรับเผยแพร่ เพื่อให้คุณเผยแพร่ตรงกับสิ่งที่ซอร์สโค้ดปัจจุบันสร้างได้อย่างแน่นอน

stale_dirs = ['build', 'dist', 'mytool.egg-info']
for d in stale_dirs:
    print('Remove before clean build:', d)

การสร้างแพ็กเกจที่ทำซ้ำได้

ซอร์สโค้ดเดียวกันควรสร้างไฟล์สำหรับแจกจ่ายแบบเดียวกันได้เสมอ ตรึงรุ่นของแบ็กเอนด์สำหรับสร้างแพ็กเกจไว้ใน [build-system] requires และหลีกเลี่ยงการดึงค่าจากสภาพแวดล้อมที่กำลังทำงานอยู่ การทำซ้ำได้หมายความว่าเพื่อนร่วมทีม หรือเซิร์ฟเวอร์ผสานรวมต่อเนื่อง จะได้รับผลลัพธ์เหมือนกันทุกประการ

เมื่อทำร่วมกับการสร้างแพ็กเกจแบบสะอาด วิธีนี้จะขจัดความประหลาดใจประเภททำงานได้เฉพาะในเครื่องของฉัน

การสร้างแพ็กเกจในระบบผสานรวมต่อเนื่อง

โครงการส่วนใหญ่สร้างแพ็กเกจบนเซิร์ฟเวอร์ผสานรวมต่อเนื่องแทนที่จะทำบนแล็ปท็อป งานผสานรวมต่อเนื่องจะดึงโค้ดออกมา เรียกใช้ python -m build และจัดเก็บไฟล์สำหรับแจกจ่าย วิธีนี้รับประกันว่าการเผยแพร่แต่ละครั้งมาจากสถานะที่รู้แน่ชัดและสะอาด

คำสั่งเดียวกับที่คุณเรียกใช้ในเครื่องจะเป็นคำสั่งที่ทำงานในระบบผสานรวมต่อเนื่อง

ตรวจสอบอย่างรวดเร็ว

ทดสอบความรู้เกี่ยวกับการสร้างแพ็กเกจ

สรุปทบทวน

คุณได้เรียนรู้การสร้างไฟล์สำหรับแจกจ่ายแล้ว:

  • pip install build แล้วเรียกใช้ python -m build
  • สร้างแพ็กเกจซอร์สโค้ด (.tar.gz) และแพ็กเกจไบนารี (.whl) ไว้ใน dist/
  • การสร้างแพ็กเกจเกิดขึ้นในสภาพแวดล้อมแยก โดยใช้ข้อกำหนด [build-system]
  • ตรวจสอบแพ็กเกจไบนารีและสร้างแพ็กเกจแบบสะอาดก่อนเผยแพร่

คำถามที่พบบ่อย

บทเรียน “การสร้างด้วย build” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสร้างด้วย build” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสร้างด้วย build”

สร้าง wheels และ sdists คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การสร้างด้วย build” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. โครงสร้างโครงการและ pyproject.toml
  2. การสร้างด้วย build
  3. การกำหนดรุ่นและข้อมูลเมทาดาทา
  4. การเผยแพร่ด้วย twine
← กลับไปที่ Python Academy