โต๊ะทำงานโทนมิ้นต์สว่าง นากมิ้นต์ตัวเล็กใส่เอี๊ยมยีนส์สีเขียวน้ำทะเลกำลังเลื่อนหมุดบนปฏิทินตั้งโต๊ะไปอีกหนึ่งสัปดาห์ ข้างๆ มีกล่องพัสดุที่ยังติดเทปไม่ปิด

Python 3.15 เลื่อนตัวจริงไป 9 ต.ค. เจอบั๊กท้ายรอบ ทำไมรออีกสัปดาห์จึงเป็นข่าวดี

น้องกายEngineering

Python เลื่อนตัวจริงไป 9 ตุลาคม 2026 หลังพบปัญหา lazy imports ท้ายรอบ ตามประกาศของ Hugo van Kemenade บน Python Insider วันที่ 2 ตุลาคม ครับ ระบบนำเข้าส่วนประกอบเมื่อจำเป็นตัวนี้ต้องทดสอบการแก้บั๊กเพิ่ม จึงมีรุ่นทดสอบก่อนตัวจริงออกมาอีกรอบ

ผมไม่ได้ทดสอบรุ่นนี้เองครับ บทความนี้อิงประกาศและเอกสารทางการ ผู้ใช้แอปรอการรองรับได้ ส่วนคนพัฒนาควรใช้ช่วงนี้ตรวจงานจริง

เกิดอะไรขึ้น (สรุป 30 วินาที)

รุ่นที่ออกมาคือ Python 3.15.0rc3 โดย RC ย่อจาก release candidate หมายถึงรุ่นที่เตรียมเป็นตัวจริง แต่ยังเปิดให้ตรวจหาปัญหาก่อนเผยแพร่ทั่วไป การมีคำนี้ท้ายชื่อจึงบอกสถานะการทดสอบ อ่านชื่อและดูรายการดาวน์โหลดได้ที่หน้ารุ่น 3.15.0rc3 ครับ

Hugo เรียกรอบนี้ว่า RC รอบที่สามที่มาแบบเหนือความคาดหมาย สาเหตุคือพบ release blocker หรือบั๊กที่ต้องแก้ก่อนปล่อยรุ่นจริงในส่วน lazy imports ช่วงท้าย การแก้เหล่านี้จะรวมอยู่ในตัวจริงและต้องมีเวลาทดสอบเพิ่มเติม ทีมจึงเลื่อนการปล่อยที่วางไว้ในสัปดาห์นั้นไปสัปดาห์ถัดไป ตามPython Insider

หลัง rc2 มีการแก้บั๊ก ปรับการสร้างโปรแกรม และแก้เอกสารรวมประมาณ 156 รายการ ตัวเลขนี้บอกปริมาณการเปลี่ยนแปลงรวม ไม่ได้หมายความว่าพบบั๊กร้ายแรงทั้งหมดเท่านั้นครับ งานมาจากผู้ร่วมพัฒนา 82 คน ตามประกาศเดียวกัน จึงต้องแยกจำนวนงานออกจากระดับความรุนแรงของปัญหา

ทีมระบุว่า rc3 เป็น RC สุดท้ายที่วางแผนไว้ และช่วงก่อนตัวจริงจะรับเฉพาะการแก้บั๊กที่ชัดเจนซึ่งผ่านการตรวจทานแล้ว กำหนดถัดไปคือ 3.15.0 final วันที่ 9 ตุลาคม 2026 ตามประกาศทางการ คำว่า final คือรุ่นเผยแพร่จริง ส่วนคำว่า “กำหนด” ยังต้องเก็บไว้ ไม่ควรเขียนให้กลายเป็นคำรับประกันครับ

ทำไมเรื่องนี้เกี่ยวกับคุณ

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

สำหรับนักพัฒนา การเลื่อนครั้งนี้ทำให้ต้องปรับแผนตรวจระบบที่อิงวันเดิม ถ้าจะใช้ lazy imports ควรตรวจเส้นทางการทำงานที่เรียกส่วนประกอบครั้งแรกให้ครบ ไม่พอแค่เปิดโปรแกรมแล้วไม่มีข้อความผิดพลาด เพราะฟีเจอร์นี้เปลี่ยนจังหวะการนำเข้าส่วนประกอบ ตามแนวคิดในPEP 810 ซึ่งเป็นเอกสารข้อเสนอการเปลี่ยนแปลงของ Python

ทำงานยังไง (เหมือนคอนโดเลื่อนส่งมอบเพื่อแก้ตำหนิรอบสุดท้าย)

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

RC เหมือนห้องที่เตรียมส่งมอบและเปิดให้ตรวจ ส่วน release blocker คือข้อบกพร่องที่ยังยอมส่งมอบไม่ได้ การออก rc3 จึงเทียบได้กับการนำห้องหลังแก้ตำหนิมาตรวจซ้ำ การตัดสินใจครั้งนี้แสดงว่าทีมยอมขยับกำหนดเมื่อการแก้ยังต้องทดสอบ ตามเหตุผลที่Python Insider ระบุไว้ ไม่ได้แปลว่าการตรวจจะรับรองว่าไม่มีข้อบกพร่องเหลือเลย

กลับมาที่ตัวโปรแกรมครับ import คือการนำส่วนประกอบของโปรแกรมเข้ามาใช้ ส่วน explicit lazy imports คือการระบุให้เลื่อนการนำเข้าส่วนประกอบไปจนถึงจังหวะที่ต้องใช้งาน แนวคิดนี้มุ่งช่วยให้โปรแกรมเริ่มทำงานเร็วขึ้น โดยไม่ต้องทำงานนำเข้าทั้งหมดตั้งแต่เปิด ตามPEP 810

จุดที่ต้องเข้าใจคือการนำเข้าส่วนประกอบอาจมีงานอื่นเกิดตามมาด้วย เช่น โค้ดตั้งค่าเริ่มต้นที่ทำงานตอนนำเข้า เรียกว่า import-time side effects หรือผลที่เกิดขึ้นระหว่างการนำเข้า ในตัวอย่างสมมติ โปรแกรมอาจคาดว่าค่าบางอย่างถูกเตรียมพร้อมก่อนผู้ใช้กดทำรายงาน หากจังหวะนำเข้าเปลี่ยน นักพัฒนาก็ต้องตรวจความคาดหวังนี้ใหม่

แต่การเลื่อนตัวจริงไม่ได้แปลว่าคนดูแลไลบรารีต้องหยุดเตรียมทุกอย่างครับ ทีม Python กลับชวนให้เผยแพร่แพ็กเกจสำหรับรุ่นใหม่ได้แล้ว พร้อมระบุว่าจะไม่มีการเปลี่ยน ABI ต่อจากจุดนี้ในสาย 3.15 ตามประกาศ rc3 นี่คือจุดที่ข่าวดูเหมือนถอยหลังด้านกำหนด แต่ยังเดินหน้าด้านการเตรียมความพร้อมได้

ABI หรือ Application Binary Interface คือข้อตกลงระดับโปรแกรมที่คอมไพล์แล้ว ว่าส่วนประกอบจะเชื่อมต่อกันอย่างไร ส่วน wheel คือแพ็กเกจ Python ที่เตรียมไว้สำหรับติดตั้ง โดยเฉพาะแพ็กเกจที่มีส่วนต้องคอมไพล์ คนใช้ไม่จำเป็นต้องสร้างทุกอย่างจากต้นฉบับเองครับ คำสองคำนี้เกี่ยวข้องกันเวลาผู้ดูแลแพ็กเกจเตรียมไฟล์ให้ทำงานกับ Python รุ่นเป้าหมาย

ประกาศระบุว่า wheel ที่สร้างกับ RC ของ 3.15 จะทำงานกับรุ่น 3.15 ในอนาคตได้ และชวนผู้ดูแลเผยแพร่บน PyPI ซึ่งเป็นแหล่งแจกจ่ายแพ็กเกจ Python ตามPython Insider ขอบเขตคำรับรองนี้อยู่ที่ความเข้ากันได้ของ wheel ตามรุ่นที่ระบุ ไม่ได้หมายความว่าโค้ดของทุกไลบรารีผ่านการทดสอบแล้ว หรือผู้ใช้ทั่วไปควรนำ RC ไปใช้ทำงานจริงทันที

ของใหม่มีมากกว่าฟีเจอร์ที่ทำให้ต้องเลื่อน

อ่านภาพรวมการเปลี่ยนแปลงได้ที่What’s New in Python 3.15 ครับ

ด้านความเร็ว มีการปรับ JIT แบบทดลอง ซึ่งเป็นวิธีสร้างโค้ดเครื่องระหว่างโปรแกรมทำงาน ผลที่ประกาศสำหรับ x86-64 Linux ดีขึ้น 7–8% โดยเทียบกับตัวแปลคำสั่งมาตรฐาน ตามPython Insider ตัวเลขนี้เป็นค่าเฉลี่ยเรขาคณิตของผลทดสอบ จึงไม่ใช่คำรับรองว่าแต่ละแอปจะเร็วขึ้นในอัตราเดียวกัน

ข้อมูลที่ยังไม่ชัด และจุดที่แหล่งข่าวพูดไม่ตรงกัน

บั๊ก lazy imports ตัวไหนเป็นตัวขวางการปล่อย ยังตอบไม่ได้ เพราะประกาศ rc3 ไม่ได้แจกแจงรายการตัวขวางเหล่านั้น การอธิบายผลจากจังหวะนำเข้าในบทความนี้เป็นความรู้ทั่วไปและแนวทางทดสอบ ไม่ใช่คำยืนยันว่าบั๊กจริงเกิดจากตัวอย่างที่ยกมา ผมจึงจะไม่เดาชื่อปัญหาหรือฟันธงว่าโค้ดรูปแบบไหนเสียแน่นอน

วันที่ 9 ตุลาคมจะเลื่อนอีกไหม ยังไม่ทราบ ข้อมูลทางการให้สถานะว่าเป็นกำหนดปล่อยครั้งถัดไป และ rc3 เป็น RC สุดท้ายที่วางแผนไว้ ตามPython Insider สองข้อความนี้บอกแผนปัจจุบัน ไม่ได้ตัดความเป็นไปได้ของการเปลี่ยนแผนหากต้องตรวจปัญหาเพิ่มเติม

เวลาปล่อยตามนาฬิกาไทยยังไม่ทราบ จึงไม่มีชั่วโมงให้ตั้งนาฬิกานับถอยหลังครับ ทีมที่วางงานตามวันเผยแพร่ควรตรวจว่ารุ่น final ออกแล้วจริงก่อนเริ่มขั้นตอนเปลี่ยนระบบ อย่าใช้การข้ามเที่ยงคืนของไทยเป็นหลักฐานว่ารุ่นพร้อมดาวน์โหลด

เรื่องวันเดิมต้องอัปเดตตรงๆ ครับ บทความ rc2 ของเรา เคยบอกวันเปิดให้ใช้ทั่วไปเป็น 1 ตุลาคมตามPEP 790 ซึ่งเป็นตารางกำหนดการของรุ่น ตอนนี้ประกาศใหม่ ระบุ 9 ตุลาคมแล้ว ความต่างนี้คือกำหนดที่เปลี่ยนไป ไม่ควรเก็บวันเก่าไว้จนผู้อ่านเข้าใจว่ามีสองวันปล่อยที่ใช้พร้อมกัน

เสียงฝั่งที่สนับสนุนให้เตรียมตัวมาจากทีม Python โดยตรงครับ ทีมชวนผู้ดูแลไลบรารีเผยแพร่ wheel เพื่อรองรับรุ่นใหม่ แต่เสียงที่เตือนให้ชะลอการใช้จริงก็มาจากทีมเดียวกัน ซึ่งระบุว่า RC ยังไม่เหมาะกับระบบใช้งานจริง ตามประกาศ rc3 ทั้งสองท่าทีเข้ากันได้ เพราะการเตรียมแพ็กเกจกับการย้ายงานของผู้ใช้มีเงื่อนไขต่างกัน

อีกประเด็นที่ต้องแยกออกมาคือ macOS 27.0 มีคำเตือนเรื่อง IDLE ซึ่งเป็นเครื่องมือเขียนและรัน Python และ tkinter ซึ่งใช้ทำหน้าต่างโปรแกรม เมนูและกล่องโต้ตอบอาจค้างจากพฤติกรรมของระบบปฏิบัติการที่เปลี่ยนไป ตามคำเตือนในประกาศ และติดตามได้ที่issue #158053 ซึ่งเป็นรายการติดตามปัญหา

คำเตือนนี้ครอบคลุม Python รุ่นปัจจุบันทั้งหมดตามPython Insider จึงไม่ควรสรุปว่าเป็นเฉพาะ rc3 หรือว่ารอตัวจริงแล้วจะหายแน่นอนครับ หากคุณต้องใช้หน้าต่างเหล่านี้ทำงาน ควรแยกการตรวจเรื่องระบบปฏิบัติการออกจากการตรวจการนำเข้าส่วนประกอบ เพื่อไม่ให้วินิจฉัยคนละปัญหาปนกัน

แล้วเราควรทำอะไร

คนใช้แอปและเครื่องมือทำงานทั่วไป

ไม่มีอะไรเร่งด่วนที่คุณต้องทำเพราะข่าวนี้ครับ ให้ใช้เครื่องมือเดิมตามปกติ รอ final และรอผู้ดูแลเครื่องมือประกาศรองรับ อย่านำ rc3 มาแทนส่วนที่ใช้ทำงานจริง เพราะสถานะทางการยังเป็นรุ่นทดลอง หากโปรแกรมมาพร้อม Python อยู่แล้ว ให้ตรวจคำแนะนำจากคนดูแลโปรแกรมก่อนเปลี่ยนส่วนประกอบด้วยตัวเอง

นักพัฒนาแอปและระบบหลังบ้าน

ควรทดสอบบน rc3 ตอนนี้ในสภาพแวดล้อมแยกจากงานจริงครับ เริ่มจากตรวจว่าติดตั้งส่วนประกอบที่แอปต้องใช้ได้หรือไม่ จากนั้นรันงานหลักที่ผู้ใช้ทำจริง และตรวจผลลัพธ์ ถ้าแอปใช้ lazy imports ให้อ่านPEP 810 ประกอบ หรือทบทวนบทความอธิบาย lazy imports ของเรา ก่อนเลือกกรณีทดสอบ

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

ผู้ดูแลไลบรารีและแพ็กเกจ

เตรียมสร้างและอัปโหลด wheel สำหรับ 3.15 บน PyPI ได้ตามคำเชิญของทีม Python ครับ เหตุผลคือไม่มีการเปลี่ยน ABI ต่อจากจุดนี้ และ wheel ที่สร้างกับ RC ใช้กับรุ่น 3.15 ต่อไปได้ อย่าข้ามการตรวจติดตั้งเพียงเพราะมีคำรับรองเรื่องความเข้ากันได้ระดับนี้

หลังสร้างไฟล์แล้ว ลองติดตั้งในสภาพแวดล้อมสะอาดและเรียกฟังก์ชันหลักของไลบรารี ตรวจด้วยว่ารายการไฟล์ที่เผยแพร่ตรงกับระบบที่คุณตั้งใจรองรับ หากมีกรณีที่ยังไม่ผ่าน ให้ระบุขอบเขตในคำแนะนำของแพ็กเกจ การบอกสิ่งที่รองรับอย่างชัดเจนช่วยให้ทีมแอปตัดสินใจได้ดีกว่าข้อความสั้นๆ ว่า “รองรับรุ่นใหม่แล้ว”

ทีม IT และคนดูแลระบบตรวจอัตโนมัติ

เพิ่มงานทดสอบ 3.15 ใน CI หรือระบบที่ตรวจโค้ดอัตโนมัติทุกครั้งที่มีการเปลี่ยนแปลง โดยให้ล้มเหลวได้โดยไม่หยุดงานหลักไปจนถึงวันที่ 9 ตุลาคม เป้าหมายคือเก็บสัญญาณปัญหาระหว่างรอ final ไม่ใช่ซ่อนผลที่ล้มเหลวครับ เมื่อถึงกำหนดให้ตรวจประกาศปล่อยรุ่น อีกครั้งก่อนตัดสินใจปรับเงื่อนไขงานนี้

คนใช้ Mac ที่พึ่ง IDLE หรือ tkinter

ถ้าต้องใช้งานบน macOS 27.0 ให้ระวังเมนูและกล่องโต้ตอบค้างตามissue #158053 ครับ ก่อนเปลี่ยนสภาพแวดล้อมที่ใช้ทำงาน ลองขั้นตอนที่คุณต้องใช้จริงในพื้นที่ทดสอบและติดตามสถานะปัญหานี้ หากพบอาการ อย่าเพิ่งสรุปว่ามาจาก lazy imports เพราะคำเตือนทางการระบุความเกี่ยวข้องกับพฤติกรรมของระบบปฏิบัติการ

ผมมองว่า การรอครั้งนี้เป็นสัญญาณที่ดีของการตรวจคุณภาพครับ เพราะทีมระบุว่าพบสิ่งที่ต้องแก้และยอมให้เวลาทดสอบเพิ่ม ไม่ใช่การแข่งให้ปล่อยทันปฏิทิน แต่คือการตรวจว่าการแก้พร้อมส่งต่อให้คนใช้งานหรือยัง ความเห็นนี้ไม่ได้รับรองว่าตัวจริงจะไม่มีบั๊ก มันให้คุณค่ากับการหยุดตรวจเมื่อมีเหตุผลชัดเจน

สำหรับคนไทยที่ต้องพึ่งเครื่องมือเหล่านี้ทำงาน สิ่งที่คุ้มกว่าการรีบเปลี่ยนรุ่นคือส่งกรณีใช้งานจริงให้คนดูแลตรวจ และเตรียมแผนเปลี่ยนเมื่อเครื่องมือรองรับแล้ว จับตาต่อสองเรื่องครับ: รุ่น final ออกตามกำหนดใหม่หรือไม่ และแพ็กเกจสำคัญของคุณติดตั้งพร้อมทำงานได้ครบหรือยัง โดยเฉพาะคนใช้ Mac ให้รวมการตรวจหน้าต่างที่จำเป็นไว้ด้วย

ถ้าคุณต้องเลือกงานเพียงอย่างเดียวมาทดสอบก่อนย้ายไป Python รุ่นใหม่ คุณจะเลือกขั้นตอนไหนในเครื่องมือที่ใช้ทุกวัน และเพราะอะไรครับ?

Recap

  • อัปเดตกำหนดตัวจริงเป็น 9 ตุลาคม 2026 และตรวจอีกครั้งว่าปล่อยแล้วจริง
  • เข้าใจว่า rc3 เพิ่มมาเพื่อทดสอบการแก้ตัวขวางการปล่อยใน lazy imports
  • ผู้ใช้แอปรอตัวจริงและการรองรับจากเครื่องมือ ไม่ใช้ RC กับงานจริง
  • นักพัฒนาตรวจการใช้ส่วนประกอบครั้งแรกและผลที่เกิดระหว่างการนำเข้า
  • ผู้ดูแลไลบรารีเตรียม wheel สำหรับ 3.15 พร้อมตรวจการติดตั้งและการทำงาน
  • ทีม CI เพิ่มงาน 3.15 ที่ล้มเหลวได้จนถึงกำหนดใหม่ และมีคนอ่านผล
  • ผู้ใช้ macOS 27.0 ที่พึ่ง IDLE/tkinter ติดตามปัญหาเมนูและกล่องโต้ตอบค้าง
  • จำว่ารายละเอียดบั๊กตัวขวาง โอกาสเลื่อนอีก และเวลาปล่อยในไทยยังไม่ทราบ