ข้ามไปยังเนื้อหา
Software & DevOps

Python 3.15 ออกแล้ว เพิ่ม lazy import ใช้ UTF-8 เป็นค่าเริ่มต้น และอัปเกรด JIT ให้เร็วขึ้น

Python 3.15 ออก 9 ต.ค. 2026 เพิ่ม lazy import, frozendict และตัวโปรไฟล์ Tachyon ใช้ UTF-8 เป็นค่าเริ่มต้น JIT เร็วขึ้น 7–12% ส่วน Python 3.10 หมดซัพพอร์ตแล้ว

โดย กองบรรณาธิการ THAI DATA อ่าน 5 นาที

แชร์FacebookXLINELinkedIn
โลโก้ Python 3.15 รูปหัวใจสีม่วงมีตัวเลข 3.15 งูสีฟ้าและสีเหลือง พร้อมคำว่า lazy imports, frozendict และ Tachyon profiler รอบกรอบ
ภาพ: Python Software Foundation (โลโก้โดย Georgi Ker และ Marie Nordin)

สรุปประเด็นสำคัญ

  • ทีมพัฒนา Python ออก Python 3.15.0 เมื่อ 9 ตุลาคม 2026 รวม 5,643 commits จากผู้ร่วมพัฒนา 1,012 คน และจะได้แพตช์แก้บั๊กราวทุก 2 เดือนเป็นเวลา 2 ปี กับแพตช์ความปลอดภัยถึงราว ตุลาคม 2031
  • ฟีเจอร์หลักคือ lazy import (PEP 810) ที่เลื่อนการโหลดโมดูลไปจนกว่าจะใช้จริง ชนิดข้อมูลใหม่ frozendict (PEP 814) และ sentinel (PEP 661) และตัวโปรไฟล์แบบสุ่มตัวอย่าง Tachyon ที่เก็บได้สูงสุด 1,000,000 ครั้งต่อวินาที
  • Python 3.15 ใช้ UTF-8 เป็น encoding เริ่มต้น (PEP 686) ไม่ว่าระบบจะตั้ง locale เป็นอะไร โค้ดที่เปิดไฟล์โดยไม่ระบุ encoding บน Windows ภาษาไทยอาจอ่านไฟล์เก่าผิด ปิดได้ด้วย PYTHONUTF8=0
  • ตัวคอมไพล์ JIT แบบทดลองเร็วขึ้นเฉลี่ย 7–8% บน x86-64 Linux และ 11–12% บน AArch64 macOS ตามชุดทดสอบ pyperformance
  • Python 3.10 หมดระยะซัพพอร์ตเมื่อ 1 ตุลาคม 2026 โดย 3.10.22 เป็นแพตช์ความปลอดภัยรุ่นสุดท้าย

ทีมพัฒนา Python ออก Python 3.15.0 เมื่อวันที่ 9 ตุลาคม 2026 รุ่นนี้เพิ่ม lazy import ที่ช่วยให้โปรแกรมเริ่มทำงานเร็วขึ้น เปลี่ยน encoding เริ่มต้นเป็น UTF-8 ทุกระบบ และอัปเกรดตัวคอมไพล์ JIT แบบทดลองให้เร็วขึ้น ขณะเดียวกัน Python 3.10 เพิ่งหมดระยะซัพพอร์ตไปเมื่อ 1 ตุลาคม 2026

หน้าประกาศบน python.org ระบุว่า Python 3.15 รวม 5,643 commits จากผู้ร่วมพัฒนา 1,012 คน ก่อนออกรุ่นจริงมี release candidate รอบที่ 3 เมื่อ 2 ตุลาคม ตามตาราง PEP 790 รุ่นนี้จะได้แพตช์แก้บั๊กราวทุก 2 เดือนเป็นเวลา 2 ปี และได้แพตช์ความปลอดภัยแบบซอร์สโค้ดจนถึงราวตุลาคม 2031

ภาพหน้าจอหน้าประกาศ Python 3.15.0 บน python.org ระบุ 5,643 commits จากผู้ร่วมพัฒนา 1,012 คน และรายการฟีเจอร์หลัก เช่น PEP 686 UTF-8, PEP 810 lazy imports, PEP 814 frozendict และ JIT ที่เร็วขึ้น
หน้าประกาศ Python 3.15.0 บน python.org ลงวันที่ 9 ตุลาคม 2026 พร้อมรายการฟีเจอร์หลัก ภาพ: Python Software Foundation (ภาพหน้าจอ)

ฟีเจอร์หลักของ Python 3.15

ฟีเจอร์ ทำอะไร
PEP 810 lazy import คีย์เวิร์ด lazy เลื่อนการโหลดโมดูลจนกว่าจะใช้จริง
PEP 686 UTF-8 เป็นค่าเริ่มต้น open() ที่ไม่ระบุ encoding ใช้ UTF-8 ทุกระบบ
PEP 814 frozendict dict แบบแก้ไขไม่ได้ ใช้เป็นคีย์หรือใน set ได้ถ้าข้อมูลข้างในแฮชได้
PEP 661 sentinel ชนิดข้อมูลสำหรับสร้างค่าพิเศษที่ไม่ซ้ำกับค่าอื่น
PEP 798 ใช้การ unpack ใน comprehension ได้
PEP 799 Tachyon ตัวโปรไฟล์แบบสุ่มตัวอย่างในแพ็กเกจ profiling ใหม่
PEP 831 เปิด frame pointer เป็นค่าเริ่มต้น ช่วยเครื่องมือดูประสิทธิภาพระดับระบบ
PEP 803, 820, 793 Stable ABI สำหรับ Python แบบ free-threaded

ไบนารีทางการบน Windows 64 บิตเปลี่ยนไปใช้ tail-calling interpreter และไบนารีบน macOS ติดตั้งส่วนรองรับ free-threading มาให้เป็นค่าเริ่มต้น

lazy import ใน Python 3.15 ช่วยเรื่องอะไร

เอกสาร What's New อธิบายว่าแอปพลิเคชัน Python ขนาดใหญ่มักเริ่มทำงานช้า เพราะทุก import ต้องหาไฟล์ อ่าน คอมไพล์ และรันโค้ดระดับบนสุดของโมดูล แม้บางโมดูลจะไม่ได้ใช้ในรอบนั้นเลย ที่ผ่านมานักพัฒนาแก้ด้วยการย้าย import เข้าไปในฟังก์ชัน ซึ่งทำให้โค้ดอ่านยาก

Python 3.15 เพิ่ม soft keyword ชื่อ lazy ใช้ได้ทั้ง import และ from … import โมดูลจะถูกโหลดจริงเมื่อเรียกใช้ชื่อนั้นครั้งแรก

lazy import json
lazy from pathlib import Path

print("Starting up...")             # json และ pathlib ยังไม่ถูกโหลดเต็ม
data = json.loads('{"key": "value"}')  # json ถูกโหลดตรงนี้

ถ้าโหลดโมดูลไม่สำเร็จ ข้อผิดพลาดจะเกิดตอนใช้งานครั้งแรก และ traceback จะแสดงทั้งจุดที่เรียกใช้และบรรทัด import เดิม ผู้ดูแลระบบยังเปิดให้ทุก import เป็นแบบ lazy โดยไม่ต้องแก้ซอร์สโค้ดได้ด้วยตัวเลือก -X lazy_imports=all หรือตัวแปรสภาพแวดล้อม PYTHON_LAZY_IMPORTS

ภาพหน้าจอเอกสาร What's new in Python 3.15 ส่วน PEP 810 Explicit lazy imports พร้อมตัวอย่างโค้ด lazy import json และ lazy from pathlib import Path
ส่วนอธิบาย Explicit lazy imports (PEP 810) ในเอกสาร What's new in Python 3.15 ภาพ: Python Software Foundation (ภาพหน้าจอ)

UTF-8 เป็นค่าเริ่มต้นใน Python 3.15: จุดที่ระบบภาษาไทยต้องระวัง

ตั้งแต่ Python 3.15 คำสั่งอ่านเขียนไฟล์ที่ไม่ระบุ encoding เช่น open('data.txt') จะใช้ UTF-8 เสมอ ไม่ขึ้นกับ locale ของเครื่อง เดิม encoding เริ่มต้นขึ้นกับ locale ซึ่ง Windows ที่ใช้ภาษาไทยมักใช้โค้ดเพจ windows-874 (Microsoft ระบุว่าเป็น Thai (Windows)) โปรแกรมเก่าที่อ่านไฟล์ข้อความหรือ CSV ภาษาไทยที่บันทึกแบบนี้โดยไม่ระบุ encoding จึงอาจได้ข้อความเพี้ยนหรือเกิด UnicodeDecodeError หลังอัปเกรด

เอกสารของ Python แนะนำให้ระบุ encoding ทุกครั้งเพื่อให้โค้ดทำงานเหมือนกันทุกรุ่น ใช้ encoding='locale' เมื่อต้องการ encoding ตามเครื่องจริง หาจุดที่ใช้ค่าเริ่มต้นด้วย -X warn_default_encoding หรือตัวแปร PYTHONWARNDEFAULTENCODING และถ้าจำเป็นต้องย้อนพฤติกรรมเดิมชั่วคราว ให้ปิด UTF-8 mode ด้วย PYTHONUTF8=0 หรือ -X utf8=0

JIT, Tachyon และสิ่งที่ถูกถอดออก

  • JIT เร็วขึ้น ชุดทดสอบ pyperformance ให้ค่าเฉลี่ยเรขาคณิตเร็วขึ้น 7–8% เหนือ interpreter มาตรฐานบน x86-64 Linux และ 11–12% เหนือ tail-calling interpreter บน AArch64 macOS แต่ผลรายตัวยังกว้างตั้งแต่ช้าลงราว 15% ไปจนถึงเร็วขึ้นกว่า 100% JIT ยังเป็นฟีเจอร์ทดลอง และใช้ LLVM 21 ตอนคอมไพล์ CPython เท่านั้น ผู้ใช้ทั่วไปไม่ต้องติดตั้ง LLVM
  • Tachyon ตัวโปรไฟล์ใหม่ใน profiling.sampling เกาะกับโปรเซส Python ที่รันอยู่ได้โดยไม่ต้องแก้โค้ดหรือรีสตาร์ต สุ่มเก็บ stack ได้สูงสุด 1,000,000 ครั้งต่อวินาที เหมาะกับการหาคอขวดบนระบบจริง ส่วนโมดูล profile เดิมถูกประกาศเลิกใช้และจะถูกถอดใน Python 3.17
  • ถอดของเก่าออก เช่น คลาส CGIHTTPRequestHandler และตัวเลือก --cgi ของ python -m http.server โมดูล sre_compile, sre_constants, sre_parse และฟังก์ชัน glob.glob0()/glob.glob1() ที่ประกาศเลิกใช้มาตั้งแต่ 3.13
  • ข้อควรระวังบน macOS 27 หน้าประกาศเตือนว่าแอป GUI ที่ใช้ tkinter เช่น IDLE อาจค้างเมื่อเปิดหน้าต่างโต้ตอบบน macOS 27.0 ซึ่งกระทบ Python ทุกรุ่น ไม่ใช่เฉพาะ 3.15

ทำไมเรื่องนี้สำคัญ: Python 3.10 หมดซัพพอร์ตแล้ว

Python ออกรุ่นใหม่ปีละครั้ง และแต่ละรุ่นได้รับการสนับสนุนราว 5 ปี เมื่อ Python 3.15 ออก หน้าสถานะรุ่นของ Python Developer's Guide ระบุว่า 3.10 เข้าสู่สถานะ end-of-life ตั้งแต่ 1 ตุลาคม 2026 และ PEP 619 ระบุว่า 3.10.22 เป็นแพตช์ความปลอดภัยรุ่นสุดท้าย ระบบที่ยังรัน 3.10 จะไม่ได้รับการแก้ช่องโหว่ใหม่จากทีม Python อีก

รุ่น ออกรุ่นแรก สิ้นสุดการสนับสนุน สถานะ ณ 12 ต.ค. 2026
Python 3.10 4 ต.ค. 2021 1 ต.ค. 2026 หมดซัพพอร์ต
Python 3.11 24 ต.ค. 2022 ต.ค. 2027 แพตช์ความปลอดภัยเท่านั้น
Python 3.12 2 ต.ค. 2023 ต.ค. 2028 แพตช์ความปลอดภัยเท่านั้น
Python 3.13 7 ต.ค. 2024 ต.ค. 2029 แพตช์ความปลอดภัยเท่านั้น
Python 3.14 7 ต.ค. 2025 ต.ค. 2030 แก้บั๊ก
Python 3.15 9 ต.ค. 2026 ต.ค. 2031 แก้บั๊ก
แผนภาพไทม์ไลน์ระยะการสนับสนุนของ Python: 3.10 สิ้นสุด 1 ต.ค. 2026, 3.11 ต.ค. 2027, 3.12 ต.ค. 2028, 3.13 ต.ค. 2029, 3.14 ต.ค. 2030 และ Python 3.15 ที่ออก 9 ต.ค. 2026 ได้รับการสนับสนุนถึง ต.ค. 2031
ระยะเวลาการสนับสนุนของ Python 3.10 ถึง 3.15 ภาพ: THAI DATA (ข้อมูล: Python Developer's Guide)

รุ่นที่จะหมดซัพพอร์ตเป็นลำดับถัดไปคือ Python 3.11 ในเดือนตุลาคม 2027 ส่วนรุ่นถัดจาก Python 3.15 (ตาราง PEP 826) มีกำหนดออกวันที่ 6 ตุลาคม 2027 ตามหน้าสถานะรุ่นเดียวกัน

สิ่งที่องค์กรไทยควรทำ

  • สำรวจระบบที่ยังใช้ Python 3.10 หรือเก่ากว่า ทั้งบนเซิร์ฟเวอร์ คอนเทนเนอร์ ฟังก์ชันบนคลาวด์ และงานตั้งเวลา แล้ววางแผนย้ายไปรุ่นที่ยังได้รับการสนับสนุน โดยตรวจก่อนว่าไลบรารีที่ใช้รองรับรุ่นปลายทาง ไม่จำเป็นต้องข้ามไป Python 3.15 ทันที
  • ทดสอบเรื่อง encoding ก่อนอัปเกรด รันชุดทดสอบด้วย -X warn_default_encoding เพื่อหาโค้ดที่เปิดไฟล์โดยไม่ระบุ encoding โดยเฉพาะงานนำเข้า CSV หรือไฟล์ข้อความภาษาไทยจากระบบเก่า
  • ลอง lazy import กับแอปที่เริ่มช้า เช่น CLI หรือ serverless function ที่ import ไลบรารีหนัก วัดเวลาเริ่มต้นก่อนและหลังใช้ -X lazy_imports=all ในสภาพแวดล้อมทดสอบ
  • อย่าเปิด JIT บนระบบจริงทันที ผลเฉลี่ยดีขึ้น แต่บางงานช้าลง ให้วัดกับงานจริงของตัวเองก่อน
  • ติดตามข่าวภาษาโปรแกรมและเครื่องมือพัฒนาอื่น ๆ เช่น Java 27 ได้ที่หมวดซอฟต์แวร์

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

Python 3.15 ออกเมื่อไร และได้รับการสนับสนุนถึงเมื่อไร?

Python 3.15.0 ออกเมื่อวันที่ 9 ตุลาคม 2026 ตาม PEP 790 จะได้รุ่นแก้บั๊กราวทุก 2 เดือนเป็นเวลา 2 ปี จากนั้นได้เฉพาะแพตช์ความปลอดภัยแบบซอร์สโค้ดจนถึงราวตุลาคม 2031 หรือ 5 ปีหลังออกรุ่นแรก

lazy import ใน Python 3.15 คืออะไร?

lazy import คือคีย์เวิร์ดใหม่ lazy ที่ใส่หน้า import เช่น lazy import json แล้ว Python จะยังไม่โหลดโมดูลจนกว่าจะเรียกใช้ชื่อนั้นครั้งแรก ช่วยให้โปรแกรมที่ import โมดูลจำนวนมากเริ่มทำงานเร็วขึ้น และเปิดให้ทุก import เป็นแบบ lazy ได้ด้วย -X lazy_imports=all หรือตัวแปร PYTHON_LAZY_IMPORTS

การเปลี่ยนเป็น UTF-8 ใน Python 3.15 กระทบโค้ดเดิมอย่างไร?

ใน Python 3.15 คำสั่งอย่าง open() ที่ไม่ระบุ encoding จะใช้ UTF-8 เสมอ แทน encoding ตาม locale ของเครื่อง โค้ดที่อ่านไฟล์ข้อความภาษาไทยแบบเก่าบน Windows โดยไม่ระบุ encoding อาจอ่านผิดหรือเกิดข้อผิดพลาด ควรระบุ encoding ให้ชัด หรือปิดชั่วคราวด้วย PYTHONUTF8=0 หรือ -X utf8=0

องค์กรควรอัปเกรดเป็น Python 3.15 ทันทีหรือไม่?

ยังไม่จำเป็นสำหรับระบบที่ใช้งานจริง ควรรอให้ไลบรารีหลักรองรับ Python 3.15 และทดสอบเรื่อง UTF-8 กับฟังก์ชันที่ถูกถอดออกก่อน แต่ระบบที่ยังใช้ Python 3.10 ควรย้ายโดยเร็ว เพราะ 3.10 หมดซัพพอร์ตเมื่อ 1 ตุลาคม 2026 แล้ว และไม่มีแพตช์ความปลอดภัยอีก

แหล่งอ้างอิง

  1. Python Release Python 3.15.0 — Python Software Foundation
  2. What's new in Python 3.15 — Python Software Foundation
  3. PEP 790 – Python 3.15 Release Schedule — Python Software Foundation
  4. Status of Python versions — Python Developer's Guide
  5. PEP 619 – Python 3.10 Release Schedule — Python Software Foundation

บุคคล องค์กร และสถานที่ในข่าวนี้

เลือกชื่อเพื่ออ่านข่าวทั้งหมดที่กล่าวถึง ตัวเลขคือจำนวนข่าว

องค์กรและบริษัท
Microsoft36
ผลิตภัณฑ์และเทคโนโลยี
Python7Windows22Linux16
แชร์FacebookXLINELinkedIn

พบข้อมูลคลาดเคลื่อน? แจ้งกองบรรณาธิการ