Lưu ý rằng tôi không còn cập nhật câu trả lời này. Tôi có một câu hỏi và trả lời về Python 3 dài hơn trên trang cá nhân của tôi tại http://python-notes.curiouseffic.org/en/latest/python3/questions_and_answers.html
Câu trả lời trước:
(Cập nhật trạng thái, tháng 9 năm 2012)
Chúng tôi (tức là các nhà phát triển lõi Python) đã dự đoán khi Python 3.0 được phát hành rằng sẽ mất khoảng 5 năm để 3.x trở thành lựa chọn "mặc định" cho các dự án mới trong loạt 2.x. Dự đoán đó là lý do tại sao thời gian bảo trì theo kế hoạch cho phiên bản 2.7 quá dài.
Bản phát hành Python 3.0 ban đầu cũng có một số vấn đề nghiêm trọng với hiệu suất IO kém khiến nó không thể sử dụng được cho hầu hết các mục đích thực tế, do đó, sẽ hợp lý hơn khi bắt đầu dòng thời gian từ việc phát hành Python 3.1 vào cuối tháng 6 năm 2009. (Những Các vấn đề về hiệu suất IO cũng là lý do tại sao không có bản phát hành bảo trì 3.0.z: không có lý do chính đáng để bất cứ ai muốn gắn bó với 3.0 hơn là nâng cấp lên 3.1).
Tại thời điểm viết (tháng 9 năm 2012), điều đó có nghĩa là chúng tôi hiện đang trải qua quá trình chuyển đổi hơn 3 năm và dự đoán đó dường như vẫn đang đi đúng hướng.
Mặc dù những người gõ mã Python 3 thường xuyên bị cắn bởi các thay đổi cú pháp như print
trở thành một hàm, nhưng điều đó thực sự không gây rắc rối cho việc chuyển thư viện vì 2to3
công cụ chuyển đổi tự động xử lý nó khá vui vẻ.
Vấn đề lớn nhất trong thực tế là vấn đề ngữ nghĩa: Python 3 không cho phép bạn chơi nhanh và lỏng lẻo với mã hóa văn bản theo cách Python 2 làm. Đây vừa là lợi ích lớn nhất của nó so với Python 2, nhưng cũng là rào cản lớn nhất đối với việc chuyển cổng: bạn phải khắc phục các sự cố xử lý Unicode để có một cổng hoạt động chính xác (trong khi trong 2.x, rất nhiều mã đó đã âm thầm tạo ra dữ liệu không chính xác với đầu vào không phải ASCII, tạo ấn tượng làm việc, đặc biệt là trong các môi trường nơi dữ liệu không phải ASCII không phổ biến).
Ngay cả thư viện chuẩn trong Python 3.0 và 3.1 vẫn có vấn đề xử lý Unicode, khiến việc chuyển nhiều thư viện trở nên khó khăn (đặc biệt là các thư viện liên quan đến dịch vụ web).
3.2 đã giải quyết rất nhiều vấn đề đó, cung cấp mục tiêu tốt hơn cho các thư viện và khung như Django. 3.2 cũng mang phiên bản làm việc đầu tiên của wsgiref
(tiêu chuẩn chính được sử dụng để liên lạc giữa các máy chủ web và các ứng dụng web được viết bằng Python) cho 3.x, đây là điều kiện tiên quyết cần thiết để áp dụng trong không gian web.
Các phụ thuộc chính như NumPy và SciPy hiện đã được chuyển, các công cụ quản lý cài đặt và phụ thuộc như zc.buildout
, pip
và virtualenv
có sẵn cho 3.x, bản phát hành Pyramid 1.3 hỗ trợ Python 3.2, bản phát hành Django 1.5 sắp tới bao gồm hỗ trợ Python 3 thử nghiệm và bản phát hành 12.0 của khung mạng Twisted đã bỏ hỗ trợ Python 2.5 để mở đường cho việc tạo phiên bản tương thích với Python 3.
Ngoài tiến trình trên các thư viện và khung tương thích Python 3, triển khai trình thông dịch PyPy do JIT biên dịch phổ biến đang tích cực làm việc trên hỗ trợ Python 3.
Các công cụ để quản lý quá trình di chuyển cũng đã được cải thiện rõ rệt. Ngoài 2to3
công cụ được cung cấp như một phần của CPython (hiện được coi là phù hợp nhất cho các chuyển đổi ứng dụng một lần không cần duy trì hỗ trợ cho loạt 2.x), còn có python-modernize
, sử dụng 2to3
cơ sở hạ tầng để nhắm mục tiêu tập hợp con chung (lớn) của Python 2 và Python 3. Công cụ này tạo ra một cơ sở mã duy nhất sẽ chạy trên cả Python 2.6+ và Python 3.2+ với sự trợ giúp của six
thư viện tương thích. Bản phát hành Python 3.3 cũng loại bỏ một nguyên nhân chính gây ra "nhiễu" khi di chuyển các ứng dụng nhận biết Unicode hiện có: Python 3.3 một lần nữa hỗ trợ tiền tố 'u' cho các chuỗi ký tự (thực tế không phải vậybất cứ điều gì trong Python 3 - nó chỉ được khôi phục để tránh việc vô tình chuyển sang Python 3 khó hơn đối với người dùng đã phân biệt chính xác văn bản và chữ nhị phân của họ trong Python 2).
Vì vậy, chúng tôi thực sự khá hài lòng với cách mọi thứ đang tiến triển - vẫn còn gần 2 năm để đi vào khung thời gian ban đầu của chúng tôi và những thay đổi đang diễn ra tốt đẹp trong toàn bộ hệ sinh thái Python.
Do nhiều dự án không quản lý siêu dữ liệu Chỉ số gói Python của họ một cách chính xác và một số dự án có các nhà bảo trì ít hoạt động hơn đã được chia rẽ để thêm hỗ trợ Python 3, máy quét PyPI hoàn toàn tự động vẫn đưa ra cái nhìn quá tiêu cực về trạng thái của thư viện Python 3 ủng hộ.
Một lựa chọn thay thế ưa thích để có được thông tin về mức độ hỗ trợ Python 3 trên PyPI là http://py3ksupport.appspot.com/
Danh sách này được Brett Cannon (một nhà phát triển lõi Python lâu năm) quản lý để tính toán siêu dữ liệu dự án không chính xác, hỗ trợ Python 3 trong các công cụ kiểm soát nguồn nhưng chưa được phát hành chính thức và các dự án có nhiều bản cập nhật hơn hoặc các lựa chọn thay thế hỗ trợ Python 3. Trong nhiều trường hợp, các thư viện chưa có sẵn trên Python 3 bị thiếu phụ thuộc khóa và / hoặc thiếu hỗ trợ Python 3 trong các dự án khác làm giảm nhu cầu của người dùng (ví dụ: khi khung Django lõi có sẵn trên Python 3, các công cụ liên quan như South và django-celery có nhiều khả năng thêm hỗ trợ Python 3 và tính khả dụng của hỗ trợ Python 3 trong cả Pyramid và Django khiến cho nhiều khả năng hỗ trợ Python 3 sẽ được triển khai trong các công cụ khác như gevent).
Trang web tại http://getpython3.com/ bao gồm một số liên kết tuyệt vời đến sách và các tài nguyên khác cho Python 3, xác định một số thư viện và khung chính đã hỗ trợ Python 3 và cũng cung cấp một số thông tin về cách các nhà phát triển có thể tìm kiếm hỗ trợ tài chính từ PSF trong việc chuyển các dự án chính sang Python 3.
Một tài nguyên tốt khác là trang wiki cộng đồng về các yếu tố cần xem xét khi chọn phiên bản Python cho dự án mới: http://wiki.python.org/moin/Python2orPython3