โปรดทราบว่าฉันไม่ได้อัปเดตคำตอบนี้อีกต่อไป ฉันมี Python 3 Q & A ที่ยาวขึ้นในเว็บไซต์ส่วนตัวของฉันที่http://python-notes.curiousefficiency.org/en/latest/python3/questions_and_answers.html
คำตอบก่อนหน้า:
(อัปเดตสถานะกันยายน 2555)
เรา (เช่นผู้พัฒนาหลัก Python) คาดการณ์เมื่อ Python 3.0 ถูกปล่อยออกมาซึ่งใช้เวลาประมาณ 5 ปีสำหรับ 3.x ในการเป็นตัวเลือก "เริ่มต้น" สำหรับโครงการใหม่ในซีรีย์ 2.x การคาดการณ์นั้นเป็นเหตุให้ระยะเวลาการบำรุงรักษาตามแผนสำหรับการเปิดตัว 2.7 นั้นยาวนาน
Python 3.0 รีลีสดั้งเดิมนั้นกลับกลายเป็นว่ามีปัญหาร้ายแรงเกี่ยวกับประสิทธิภาพของ IO ที่ไม่ดีซึ่งทำให้มันใช้ไม่ได้อย่างมีประสิทธิภาพสำหรับการใช้งานส่วนใหญ่ดังนั้นจึงเหมาะสมกว่าที่จะเริ่มต้นไทม์ไลน์จากการเปิดตัว Python 3.1 ในปลายเดือนมิถุนายน 2009 ปัญหาประสิทธิภาพการทำงานของ IO ยังเป็นสาเหตุที่ทำให้ไม่มีการเปิดตัวการบำรุงรักษา 3.0.z: ไม่มีเหตุผลที่ดีที่ใคร ๆ ก็อยากจะติดกับ 3.0 มากกว่าการอัพเกรดเป็น 3.1)
ในช่วงเวลาของการเขียน (กันยายน 2555) นั่นหมายความว่าขณะนี้เราอยู่ในช่วงเปลี่ยนผ่าน 3 ปีและการคาดการณ์ดังกล่าวยังคงเป็นไปอย่างต่อเนื่อง
ในขณะที่ผู้คนที่พิมพ์รหัส Python 3 มักถูกกัดโดยการเปลี่ยนแปลงทางไวยากรณ์เช่นprint
กลายเป็นฟังก์ชั่น แต่จริงๆแล้วก็ไม่ได้ยุ่งยากสำหรับการย้ายพอร์ตไลบรารีเพราะ2to3
เครื่องมือแปลงอัตโนมัติจัดการมันได้อย่างมีความสุข
ปัญหาที่ใหญ่ที่สุดในการปฏิบัติจริง ๆ แล้วเป็นความหมาย: Python 3 ไม่ยอมให้คุณเล่นเร็วและหลวมด้วยการเข้ารหัสข้อความแบบที่ Python 2 ทำ นี่เป็นทั้งประโยชน์ที่ยอดเยี่ยมที่สุดของ Python 2 แต่ยังเป็นอุปสรรคต่อการย้ายพอร์ตมากที่สุด: คุณต้องแก้ไขปัญหาการจัดการ Unicode ของคุณเพื่อให้พอร์ตทำงานได้อย่างถูกต้อง (ในขณะที่ 2.x รหัสจำนวนมากนั้น อินพุตที่ไม่ใช่ ASCII ให้ความประทับใจในการทำงานโดยเฉพาะในสภาพแวดล้อมที่ไม่มีข้อมูล ASCII ที่ไม่ใช่เรื่องแปลก)
แม้แต่ไลบรารีมาตรฐานใน Python 3.0 และ 3.1 ยังมีปัญหาการจัดการ Unicode ทำให้การย้ายไลบรารีจำนวนมากเป็นเรื่องยาก (โดยเฉพาะที่เกี่ยวข้องกับเว็บเซอร์วิส)
3.2 แก้ไขปัญหาเหล่านั้นได้มากโดยให้เป้าหมายที่ดีขึ้นสำหรับห้องสมุดและกรอบงานเช่น Django 3.2 ยังได้นำเวอร์ชันการทำงานแรกของwsgiref
(มาตรฐานหลักที่ใช้สำหรับการสื่อสารระหว่างเว็บเซิร์ฟเวอร์และเว็บแอปพลิเคชันที่เขียนด้วย Python) สำหรับ 3.x ซึ่งเป็นข้อกำหนดเบื้องต้นที่จำเป็นสำหรับการนำไปใช้ในพื้นที่เว็บ
การอ้างอิงที่สำคัญเช่น NumPy และ SciPy ในขณะนี้ได้รับการ ported การติดตั้งและการจัดการการพึ่งพาเครื่องมือชอบzc.buildout
, pip
และvirtualenv
ที่มีอยู่สำหรับ 3.x, พีระมิด 1.3 ปล่อยสนับสนุนหลาม 3.2 ที่จะเกิดขึ้น Django 1.5 เปิดตัวรวมถึงการทดลองหลาม 3 การสนับสนุนและ 12.0 การเปิดตัวของ เฟรมเวิร์กเครือข่าย Twisted ตัดการสนับสนุน Python 2.5 เพื่อปูทางสำหรับการสร้างเวอร์ชันที่รองรับ Python 3
นอกเหนือจากความคืบหน้าเกี่ยวกับไลบรารีและกรอบการทำงานร่วมกันของ Python 3 การใช้งานล่าม PyPy ที่รวบรวม JIT ซึ่งเป็นที่นิยมนั้นกำลังทำงานอย่างแข็งขันบนการสนับสนุน Python 3
เครื่องมือสำหรับการจัดการกระบวนการโยกย้ายได้ปรับปรุงอย่างชัดเจน นอกเหนือจาก2to3
เครื่องมือที่ให้ไว้เป็นส่วนหนึ่งของ CPython (ซึ่งขณะนี้ถือว่าเหมาะสมที่สุดสำหรับการแปลงครั้งเดียวของแอปพลิเคชันซึ่งไม่ต้องการการสนับสนุนสำหรับซีรีย์ 2.x) นอกจากนี้ยังมีpython-modernize
ซึ่งใช้2to3
โครงสร้างพื้นฐานเพื่อกำหนดเป้าหมาย ชุดย่อยทั่วไป (ใหญ่) ของ Python 2 และ Python 3 เครื่องมือนี้สร้างรหัสฐานเดียวที่จะทำงานบนทั้ง Python 2.6+ และ Python 3.2+ ด้วยความช่วยเหลือของsix
ไลบรารีความเข้ากันได้ ธ 3.3 ปล่อยยังช่วยขจัดสาเหตุหนึ่งที่สำคัญของ "เสียง" เมื่อมีการย้ายการใช้งานที่มีอยู่ Unicode ตระหนักถึง: งูหลาม 3.3 อีกครั้งสนับสนุนคำนำหน้า 'U' สำหรับตัวอักษรของสตริง (มันไม่จริงทำอะไรในหลาม 3 - มันเพิ่งถูกเรียกคืนเพื่อหลีกเลี่ยงไม่ได้ตั้งใจทำให้การโยกย้ายไปยังหลาม 3 ยากสำหรับผู้ใช้ที่มีความโดดเด่นอยู่แล้วได้อย่างถูกต้องข้อความและตัวอักษรไบนารีของพวกเขาในหลาม 2)
ดังนั้นเราจึงค่อนข้างมีความสุขกับความคืบหน้าของสิ่งต่าง ๆ - ยังมีเวลาอีกเกือบ 2 ปีที่จะอยู่ในกรอบเวลาเดิมของเรา
เนื่องจากโครงการจำนวนมากไม่ได้ดูแลจัดการข้อมูลเมตาของแพ็กเกจ Python อย่างถูกต้องและบางโครงการที่มีผู้ดูแลระบบที่ใช้งานน้อยได้ถูกแยกเพื่อเพิ่มการสนับสนุน Python 3 สแกนเนอร์ PyPI อัตโนมัติล้วนๆยังคงให้มุมมองเชิงลบมากเกินไป สนับสนุน.
ทางเลือกที่ต้องการสำหรับการรับข้อมูลเกี่ยวกับระดับการรองรับ Python 3 บน PyPI คือhttp://py3ksupport.appspot.com/
รายการนี้จัดทำโดย Brett Cannon (นักพัฒนาหลัก Python เป็นเวลานาน) เป็นการส่วนตัวสำหรับบัญชี metadata โครงการที่ไม่ถูกต้องการสนับสนุน Python 3 ซึ่งอยู่ในเครื่องมือควบคุมแหล่งที่มา แต่ยังไม่มีในรุ่นอย่างเป็นทางการและโครงการที่มีการปรับปรุงล่าสุด หรือทางเลือกที่รองรับ Python 3 ในหลายกรณีไลบรารีที่ยังไม่พร้อมใช้งานบน Python 3 ขาดการพึ่งพาคีย์และ / หรือการขาด Python 3 ในโครงการอื่น ๆ ลดความต้องการของผู้ใช้ (เช่นเมื่อกรอบ Django หลักพร้อมใช้งานบน Python 3 เครื่องมือที่เกี่ยวข้องเช่น South และ django-celery มีแนวโน้มที่จะเพิ่มการสนับสนุน Python 3 และความพร้อมของ Python 3 ที่รองรับทั้ง Pyramid และ Django ทำให้มีโอกาสมากขึ้นที่การสนับสนุน Python 3 จะถูกนำไปใช้ในเครื่องมืออื่น ๆ เช่น gevent)
ไซต์ที่http://getpython3.com/มีลิงก์ที่ยอดเยี่ยมไปยังหนังสือและแหล่งข้อมูลอื่น ๆ สำหรับ Python 3 ระบุถึงห้องสมุดหลักและกรอบการทำงานที่สนับสนุน Python 3 แล้วและให้ข้อมูลบางอย่างเกี่ยวกับวิธีที่นักพัฒนาสามารถขอความช่วยเหลือทางการเงินจาก PSF ในการย้ายโปรเจ็กต์หลักไปยัง Python 3
แหล่งข้อมูลที่ดีอีกอย่างคือหน้าวิกิชุมชนเกี่ยวกับปัจจัยที่ควรพิจารณาเมื่อเลือกเวอร์ชัน Python สำหรับโครงการใหม่: http://wiki.python.org/moin/Python2orPython3