
Python 3.10.22 รุ่นสุดท้ายมาแล้ว เว็บและบอทเก่าต้องวางแผนย้าย พร้อมแพตช์อีกหลายรุ่น
Python 3.10.22 เป็นรุ่นสุดท้ายของสายนี้แล้วครับ ตามประกาศของ Pablo Galindo บน Python Insider วันที่ 1 ตุลาคม 2026 หลังดูแลมาห้าปี ทีม Python จะไม่ออกอัปเดตความปลอดภัยให้สายนี้อีก
เว็บยังเปิดได้ บอทยังตอบได้ งานสรุปยอดยังเดินต่อได้ แต่คนดูแลต้องเริ่มวางแผนย้ายรุ่น บทความนี้สรุปจากข้อมูลประกาศและเอกสารที่ให้มา ผมไม่ได้ทดสอบระบบของคุณ และการที่โปรแกรมยังทำงานก็ยังตอบไม่ได้ว่ารับมือปัญหาความปลอดภัยครั้งถัดไปได้แค่ไหน
เกิดอะไรขึ้น (สรุป 30 วินาที)
รอบนี้ทีม Python ปล่อยรุ่นอัปเดตพร้อมกันหลายสาย สถานะหลังอัปเดตต่างกันครับ อ่านเลขท้ายอย่างเดียวอาจพลาดเรื่องสำคัญ ตารางนี้สรุปตามประกาศ Python Insider
| สายที่ใช้อยู่ | รุ่นที่ออกในรอบนี้ | สิ่งที่คนดูแลต้องรู้ |
|---|---|---|
| 3.10 | 3.10.22 | รุ่นสุดท้าย สิ้นสุดการดูแลจากทีม Python |
| 3.11 | 3.11.17 | แก้ความปลอดภัยเท่านั้น แจกเป็นซอร์สโค้ด |
| 3.12 | 3.12.15 | รุ่นแก้ความปลอดภัย แจกเป็นซอร์สโค้ด |
| 3.13 | 3.13.16 | รุ่นบำรุงรักษาเต็มรูปแบบครั้งสุดท้าย มีตัวติดตั้ง |
| 3.14 | 3.14.8 | รุ่นบำรุงรักษา มีตัวติดตั้ง |
EOL หรือ end of life หมายถึงสิ้นสุดช่วงที่ผู้พัฒนาดูแลรุ่นนั้น สำหรับข่าวนี้ผลชัดๆ คือจะไม่มีแพตช์ความปลอดภัยใหม่จากทีม Python ให้สายเก่าแล้ว ส่วนแพตช์คือการแก้ข้อบกพร่องของโปรแกรม ไม่ได้หมายความว่าเครื่องทุกเครื่องจะหยุดทำงานทันทีที่ประกาศ EOL (หน้ารุ่นสุดท้าย)
Security release คือรุ่นที่ออกเพื่อแก้ปัญหาความปลอดภัย คนดูแลจึงต้องแยกการอัปเดตในสายเดิมออกจากการย้ายไปสายใหม่ การลงรุ่นสุดท้ายของสายเก่าช่วยรับการแก้ไขรอบนี้ แต่ไม่ได้ต่ออายุการดูแลให้สายเก่าครับ (Python Insider)
สายที่ยังอยู่ในช่วงแก้ความปลอดภัยก็มีเส้นตายของตัวเอง สาย 3.11 ดูแลด้านนี้ถึงตุลาคม 2027 และออกอัปเดตตามความจำเป็น ไม่มีรอบตายตัว ดูรายละเอียดได้ในPEP 664 ส่วนสาย 3.12 มีช่วงดูแลความปลอดภัยถึงตุลาคม 2028 ตามประกาศรอบนี้
ทำไมเรื่องนี้เกี่ยวกับคุณ
Python เป็นภาษาเขียนโปรแกรม และเป็นชื่อของตัวโปรแกรมที่ใช้รันงานที่เขียนด้วยภาษานี้ด้วย คุณจึงอาจไม่ได้เขียน Python เอง แต่ฝากงานไว้กับเว็บ บอท หรือสคริปต์ ซึ่งก็คือโปรแกรมสำหรับทำงานตามขั้นตอนที่กำหนดไว้ เครื่องที่รันงานนั้นต่างหากที่ต้องตรวจรุ่น
ลองใช้สถานการณ์สมมติใกล้ตัวครับ ร้านค้าให้บอทตอบสถานะคำสั่งซื้อ โรงเรียนมีงานรวบรวมไฟล์ที่ครูส่งมา หรือฟรีแลนซ์ตั้งงานแปลงข้อมูลไว้ตอนกลางคืน คนใช้เห็นแค่ผลลัพธ์ ส่วนรุ่นของ Python อยู่หลังระบบ การเช็กเฉพาะโน้ตบุ๊กเจ้าของร้านจึงยังไม่บอกว่าเครื่องให้บริการเว็บใช้รุ่นอะไร
ประเด็นเร่งด่วนในข่าวนี้คือระบบที่รับไฟล์ tar หรือ zip จากผู้ใช้ ไฟล์สองแบบนี้รวมไฟล์หลายชิ้นไว้ด้วยกัน และอาจบีบอัดเพื่อลดขนาด การ extraction หรือแตกไฟล์ คือการนำของข้างในออกมาเขียนลงเครื่อง Python มีเครื่องมือมาตรฐานชื่อ tarfile และ zipfile สำหรับงานนี้ และรอบนี้มีการแก้ปัญหาทั้งคู่ (Python Insider)
ทำงานยังไง (เหมือนรถรุ่นที่ผู้ผลิตหยุดทำอะไหล่และเรียกคืน)
นึกถึงรถที่ใช้ส่งของหน้าร้านในไทยครับ ผู้ผลิตหยุดทำอะไหล่และหยุดเรียกคืนเพื่อแก้ข้อบกพร่อง รถยังสตาร์ตติด วิ่งส่งของได้ แต่หากพบปัญหาเบรกใหม่ ก็ไม่มีการแก้ไขจากผู้ผลิตตามมา Python ที่ถึง EOL มีความหมายคล้ายกัน โปรแกรมยังรันได้ แต่การดูแลจากเจ้าของโครงการจบลงแล้ว
การลงรุ่นสุดท้ายจึงเหมือนรับการแก้ไขครั้งสุดท้ายก่อนผู้ผลิตปิดการดูแลรถรุ่นนั้น ส่วนการย้ายสายคือเตรียมเปลี่ยนไปใช้รุ่นที่ยังมีการดูแล ต้องตรวจว่างานเดิมใช้งานได้ก่อนนำมาใช้ส่งของจริง ความเก่าของรถไม่ได้บอกว่าจะเสียวันนี้ แต่คำว่า “ยังวิ่งได้” ก็ไม่ได้รับรองเรื่องเบรกครับ
แต่มีเงื่อนไขที่ทำให้การอัปเดตไม่ง่ายเท่ากันทุกเครื่อง: บางสายไม่มีตัวติดตั้ง Windows และ macOS ให้แล้ว ตามประกาศรอบนี้ คนที่คุ้นกับการดาวน์โหลดแล้วกดติดตั้งต้องตรวจช่องทางที่ตัวเองใช้ก่อน
คำว่า source-only หมายถึงแจกซอร์สโค้ด หรือข้อความคำสั่งต้นฉบับของโปรแกรม ให้ผู้ดูแลนำไปสร้างเป็นโปรแกรมพร้อมใช้เอง ไม่ได้แจกตัวติดตั้งสำเร็จรูปจากทีม Python สำหรับ Windows และ macOS ในรุ่นนั้น วิธีอัปเดตจึงต้องสัมพันธ์กับวิธีที่ติดตั้งไว้ตั้งแต่แรก
รุ่นสุดท้ายของสาย 3.10 เป็น source-only โดยตัวติดตั้งสำเร็จรูปของสายนี้จบที่ 3.10.11 ส่วนสาย 3.11 จบตัวติดตั้งที่ 3.11.9 รุ่นอัปเดตรอบนี้ของสาย 3.12 ก็เป็น source-only เช่นกัน ขณะที่สองสายใหม่ในตารางยังมีตัวติดตั้ง รายละเอียดช่องทางทั้งหมดมาจากPython Insider และดูหน้าดาวน์โหลดสายใหม่ได้ที่Python 3.14.8
แพตช์รอบนี้แก้อะไรที่เกี่ยวกับงานจริง
CVE คือรหัสอ้างอิงช่องโหว่ที่ใช้คุยถึงปัญหาเดียวกันให้ตรงเรื่อง การเห็นรหัสในข่าวไม่ได้ยืนยันว่าระบบของคุณถูกโจมตีแล้ว ต้องดูว่ามีการใช้ส่วนที่ได้รับผลกระทบหรือไม่ รหัสต่อไปนี้อยู่ในรายการแก้ความปลอดภัยของประกาศ
CVE-2026-82049 แก้กรณี hard link ซึ่งอ้างถึงไฟล์เดียวกัน ไปสัมพันธ์กับ symlink ซึ่งชี้ไปยังเส้นทางอื่น ตัวกรองการแตกไฟล์ซึ่งตรวจสิ่งที่จะเขียนลงเครื่องมีปัญหาในกรณีนี้ จึงอาจทำให้ไฟล์นอกปลายทางถูกเปิดเผย และเปลี่ยนสิทธิ์หรือเวลาที่บันทึกว่าไฟล์ถูกแก้ไข ผลกระทบจึงไปไกลกว่าการแตกไฟล์แล้วชื่อผิด (Python Insider)
ฝั่ง zipfile มี CVE-2026-15310 ซึ่งจำกัดปริมาณการคลายข้อมูลต่อการอ่าน เพื่อป้องกันการขอใช้หน่วยความจำแบบไม่จำกัดจากสมาชิกไฟล์บีบอัดขนาดเล็ก การแก้ครอบคลุม bzip2 และ LZMA ซึ่งเป็นวิธีบีบอัดข้อมูล และครอบคลุม Zstandard ในสาย 3.14 ด้วย ขนาดไฟล์ที่ส่งเข้ามาจึงไม่ใช่ตัวบอกทรัพยากรที่จะใช้ตอนแตกไฟล์ทั้งหมด (Python Insider)
อีกกลุ่มเกี่ยวกับการเชื่อมต่อเข้ารหัส TLS ซึ่งช่วยป้องกันข้อมูลระหว่างสื่อสาร CVE-2026-19553 เพิ่มการตรวจค่าที่ส่งให้ ssl.SSLContext.wrap_bio() อันเป็นเครื่องมือเชื่อมต่อเข้ารหัสใน Python ส่วน asyncio ซึ่งช่วยจัดการงานที่รอรับส่งข้อมูลหลายงาน ตรวจชื่อเครื่องปลายทางของ TLS เพิ่มเติม (Python Insider)
พฤติกรรมเมื่อขาดชื่อเครื่องปลายทางต่างกันตามสายครับ ถ้าเปิดการตรวจชื่อไว้ สาย 3.10 ถึง 3.12 ส่ง DeprecationWarning หรือคำเตือนว่าพฤติกรรมเดิมกำลังถูกเลิกใช้ ส่วนสาย 3.13 ขึ้นไปเกิด ValueError หรือข้อผิดพลาดจากค่าที่ไม่ถูกต้อง จุดนี้ควรทดสอบตอนย้ายสาย เพราะสิ่งที่เคยเป็นคำเตือนอาจทำให้งานหยุดได้ (Python Insider)
ข้อมูลที่ยังไม่ชัด และจุดที่แหล่งข่าวพูดไม่ตรงกัน
วันจบการดูแล: บทความเดิมของเรากับประกาศล่าสุดต่างกัน
บทความนับถอยหลังของเราเมื่อ 23 กันยายน ใช้วันที่ 31 ตุลาคม 2026 เป็นวัน EOL แต่ประกาศวันที่ 1 ตุลาคม บอกว่าสายนี้ถึงจุดสิ้นสุดการดูแลแล้ว พร้อมรุ่นสุดท้าย ต้องบอกความต่างนี้ตรงๆ ครับ ไม่ควรอ่านโพสต์เดิมแล้วถือว่ายังมีช่วงรอแพตช์ถัดไป
ให้ยึดประกาศทางการล่าสุดและตารางสถานะรุ่นใน Developer’s Guide สำหรับตัดสินใจเรื่องการดูแล ส่วนPEP 619 เป็นเอกสารกำหนดการของสายเก่า ข้อมูลที่ให้มายังไม่อธิบายเหตุผลของความต่างด้านวันที่ จึงไม่ควรเดาว่าทีมงานเปลี่ยนแผนด้วยเหตุผลอะไร
เสียงเร่งให้อัปเกรด กับข้อจำกัดที่ต้องจัดการ
ฝั่งผู้พัฒนาชัดเจนครับ Pablo Galindo ขอให้ผู้ใช้วางแผนอัปเกรดในประกาศ แต่ข้อมูลชุดนี้ไม่มีคำให้สัมภาษณ์จากเจ้าของธุรกิจหรือผู้ดูแลระบบที่คัดค้าน ผมจึงไม่สร้างเสียงค้านขึ้นมาแทนคนจริง ข้อจำกัดที่ต้องพิจารณาคือความเข้ากันได้ของงานเดิม และช่องทางติดตั้งที่แตกต่างกัน
เราไม่รู้ว่าระบบในไทยยังใช้สายเก่านี้กี่แห่ง และไม่มีข้อมูลพอจะยืนยันว่า Ubuntu หรือ RHEL ยังนำแพตช์กลับมาใส่ในแพ็กเกจ python3.10 ของตัวเองหรือไม่ การนำแพตช์กลับมาใส่เรียกว่า backport เลขสายเดิมจึงยังไม่พอจะตอบเรื่องนโยบายการดูแลของผู้แจกจ่ายแต่ละราย
ถ้าคุณใช้ Python ที่มากับ Linux distro ให้เช็กนโยบายแพตช์ของ distro นั้นเอง ครับ distro คือชุดระบบ Linux ที่ผู้จัดจำหน่ายดูแล อย่าสรุปแทนผู้จัดจำหน่ายว่ายังแพตช์หรือเลิกแพตช์แล้ว ต้องให้คนดูแลระบบตรวจแพ็กเกจที่ติดตั้งและเงื่อนไขการสนับสนุนที่ตรงกับเครื่องจริง
Mac มีปัญหาอีกเรื่องที่แพตช์ Python อย่างเดียวไม่ควรถูกใช้รับรอง
ประกาศ Python เตือนว่า macOS 27.0 อาจทำให้ IDLE ซึ่งเป็นเครื่องมือเขียนและรัน Python หรือแอปที่ใช้ tkinter ซึ่งช่วยสร้างหน้าต่างโปรแกรม ค้างเมื่อคำสั่งในเมนูเปิดกล่องโต้ตอบ อาจเห็นวงกลมหมุนและต้อง Force Quit หรือบังคับปิดโปรแกรม
สาเหตุถูกระบุว่าเกี่ยวกับพฤติกรรมของระบบปฏิบัติการที่เปลี่ยนไป และเชื่อว่ากระทบ Tk รุ่นปัจจุบันทั้งหมด รวมถึง tkinter ใน Python รุ่นปัจจุบันทั้งหมด จึงไม่ควรรับรองว่าลง Python ใหม่แล้วหาย ให้ทดสอบหรือพิจารณาเลื่อนการอัปเดต macOS หากต้องพึ่งแอปเหล่านี้ และติดตามissue #158053 ข้อมูลที่ให้มายังไม่มีวันแก้เสร็จ
แล้วเราควรทำอะไร
เจ้าของร้านและคนใช้ระบบอัตโนมัติในออฟฟิศ
เริ่มจากถามคนที่ดูแลเว็บหรือบอทว่า “Python ที่รันงานจริงเป็นรุ่นอะไร ติดตั้งจากไหน และใครรับผิดชอบอัปเดต” ขอคำตอบที่ผูกกับชื่อระบบด้วยครับ ถ้ามีทั้งเว็บกับงานสรุปรายงาน ให้แยกคำตอบของแต่ละงาน จะได้ไม่เข้าใจว่าตรวจเครื่องเดียวแล้วครบทุกบริการ
ถ้าคำตอบคือสายที่ถึง EOL ให้ขอแผนย้ายพร้อมรายการงานที่จะทดสอบ บอกผู้ดูแลว่าส่วนใดขาดไม่ได้ เช่น การรับคำสั่งซื้อ การตอบลูกค้า หรือการส่งรายงานตอนเช้า ตัวอย่างเหล่านี้เป็นรายการสำหรับเตรียมตรวจงานของคุณ ไม่ใช่ผลทดสอบว่าระบบใดเข้ากันได้แล้ว
ถ้าระบบรับ tar หรือ zip จากผู้ใช้ ให้แจ้งเรื่องนี้แยกออกมาทันที เพราะมีแพตช์ตรงกับงานแตกไฟล์ในประกาศรอบนี้ ขอให้คนดูแลอัปเดตและตรวจการทำงานหลังแก้ อย่าส่งรหัสผ่านหรือข้อมูลลูกค้าลงกลุ่มสนทนาเพื่อให้ช่วยดูรุ่น แค่ส่งคำถามและนัดคนรับผิดชอบก็เริ่มงานได้ครับ
ฟรีแลนซ์และทีม IT โรงเรียน: ตรวจให้ตรงกับงานที่รัน
สำหรับคนที่เข้าถึงเครื่องและใช้คำสั่งได้ เปิดช่องพิมพ์คำสั่งบนเครื่องที่รันงาน แล้วตรวจรุ่นด้วยคำสั่งนี้ ตัวอย่างตรวจเฉพาะไวยากรณ์ Bash ไม่ได้ใช้เป็นหลักฐานว่าเครื่องของคุณรันรุ่นใด
python3 --version
จดผลที่แสดงและชื่อเครื่องไว้ จากนั้นตรวจว่าคำสั่งนี้อ้างถึง Python ตัวเดียวกับที่บริการใช้หรือไม่ เครื่องหนึ่งอาจมีสภาพแวดล้อมแยกสำหรับแต่ละงาน ซึ่งหมายถึงชุดโปรแกรมและเครื่องมือที่งานนั้นเลือกใช้ ถ้าคำสั่งหาโปรแกรมไม่พบ อย่าเพิ่งสรุปว่าไม่มี Python ให้ถามคนติดตั้งว่าบริการเรียกใช้จากตำแหน่งใด
ถ้าเป็นสาย 3.10 ให้วางแผนย้ายไป 3.12, 3.13 หรือ 3.14 โดยทดสอบก่อน เลือกตามสิ่งที่โปรแกรมและส่วนเสริมรองรับ เตรียมสำเนาข้อมูลสำหรับทดลอง ตรวจการเริ่มงาน การอ่านเขียนไฟล์ และผลลัพธ์ที่คนใช้ต้องได้รับ จากนั้นให้เจ้าของงานช่วยยืนยันความถูกต้องก่อนเปลี่ยนเครื่องที่ให้บริการจริง
คนติดตั้งจากซอร์ส และผู้ใช้ตัวติดตั้งสำเร็จรูป
ถ้าใช้สาย 3.11 หรือ 3.12 ที่สร้างจากซอร์ส ให้ผู้รับผิดชอบอัปเดตซอร์สแล้วสร้างโปรแกรมใหม่ตามวิธีของระบบนั้น ส่วนผู้ใช้ตัวติดตั้ง Windows หรือ macOS บนสาย 3.13 ให้อัปเดตเป็น 3.13.16 ผู้ที่อยู่สาย 3.14 ให้อัปเดตเป็น 3.14.8 ตามประกาศ แล้วตรวจบริการที่เรียกใช้งานจริงอีกครั้ง
คนใช้ Mac ที่มีแอปหน้าต่าง Python
ก่อนเปลี่ยน macOS ให้ตรวจว่ามีงานที่ใช้ IDLE หรือ tkinter หรือไม่ ถ้ามี ให้ลองเมนูที่เปิดกล่องเลือกไฟล์หรือกล่องโต้ตอบในสภาพแวดล้อมทดสอบ และพิจารณาเลื่อนการอัปเดตระบบปฏิบัติการหากงานหลักต้องพึ่งแอปนั้น ตามคำเตือนและรายการติดตามปัญหา การวางแผนอัปเดตความปลอดภัย Python กับการตัดสินใจเรื่อง macOS ควรตรวจผลของแต่ละอย่างให้ชัด
ผมมองว่า เรื่องนี้ไม่ใช่การแข่งขันว่าใครลง Python ใหม่เร็วที่สุด แต่คือการรู้ว่าโปรแกรมที่ธุรกิจฝากงานไว้ยังมีใครดูแลความปลอดภัยอยู่ การมีชื่อคนรับผิดชอบ รู้ช่องทางติดตั้ง และทดสอบงานสำคัญได้ ช่วยให้ตัดสินใจอัปเดตได้มากกว่าคำตอบว่า “เมื่อวานยังใช้ได้” ครับ
สำหรับร้านค้า โรงเรียน หรือฟรีแลนซ์ไทย สิ่งที่ทำได้เลยคือทำรายการระบบที่พึ่ง Python แล้วเริ่มจากงานที่รับข้อมูลภายนอกก่อน ต่อไปให้จับตาสถานะการดูแลในตารางรุ่นทางการ และความคืบหน้าปัญหา Mac ในissue #158053 สองเรื่องนี้ช่วยให้แผนย้ายรุ่นกับแผนเปลี่ยนระบบปฏิบัติการมีข้อมูลรองรับ
เว็บ บอท หรืองานอัตโนมัติที่คุณพึ่งอยู่ทุกวัน ตอนนี้คุณบอกชื่อคนที่รับผิดชอบอัปเดต Python ของงานนั้นได้หรือยังครับ?
Recap
- เข้าใจว่าสาย 3.10 จบการดูแลจากทีม Python แล้ว และรุ่นสุดท้ายไม่ได้ต่ออายุการสนับสนุน (ประกาศ)
- ตรวจรุ่นบนเครื่องที่รันงานจริง พร้อมตรวจช่องทางติดตั้งและคนรับผิดชอบ
- ถ้าใช้สายเก่า วางแผนย้ายโดยทดสอบงานสำคัญและเตรียมวิธีกลับระบบเดิม
- ถ้าแตก tar หรือ zip จากผู้ใช้ แจ้งผู้ดูแลให้อัปเดตทันทีตามรายการแพตช์
- แยกวิธีอัปเดตจากซอร์ส ตัวติดตั้งสำเร็จรูป และแพ็กเกจของ Linux distro ให้ถูกระบบ
- ยึดประกาศล่าสุดกับสถานะทางการ แทนการรอถึงวันที่ในโพสต์นับถอยหลังเดิม
- ถ้าใช้ IDLE หรือ tkinter บน Mac ทดสอบก่อนเปลี่ยนระบบปฏิบัติการ และติดตามปัญหาที่แจ้งไว้