2010-09-23 7 views
9

Tôi đã viết một mô-đun thuần-Python cho Python 3.0/3.1 mà tôi cũng muốn làm cho nó tương thích với 2.x (có lẽ chỉ 2.6/2.7) để cung cấp cho đối tượng rộng nhất có thể.Viết mô-đun cho cả Python 2.x và 3.x

Mô-đun có liên quan đến việc đọc và viết một bộ định dạng tệp có liên quan, do đó, sự khác biệt giữa các phiên bản 2.x và 3.x sẽ nhẹ - ví dụ: io.BytesIO thay vì StringIO.StringIO - nhưng không phải tất cả chúng đều dễ dàng được xử lý thông qua try/except blocks, chẳng hạn như thiết lập metaclasses.

Cách chính xác để xử lý vấn đề này là gì? Hai mã số gần giống hệt nhau phải được giữ đồng bộ hoặc một codebase được phát hiện tính năng? Một codebase đơn, sạch cộng với 2to3 hoặc 3to2?

+0

HOWTO của Python [Chuyển mã Python 2 sang Python 3] (http://docs.python.org/py3k/howto/pyporting.html) đưa ra một số lời khuyên tốt về chủ đề này. –

Trả lời

11

Viết mã hoàn toàn với 2.x, nhắm mục tiêu phiên bản mới nhất trong chuỗi 2.x. Trong trường hợp này, nó có thể sẽ vẫn còn 2,7. Chạy nó qua 2to3 và nếu nó không vượt qua tất cả các thử nghiệm đơn vị của nó, hãy sửa phiên bản 2.x cho đến khi phiên bản 3.x được tạo hoạt động.

Cuối cùng, khi bạn muốn thả hỗ trợ 2.x, bạn có thể lấy phiên bản 3.x được tạo và bắt đầu sửa đổi trực tiếp. Cho đến lúc đó, chỉ chỉ sửa đổi phiên bản 2.x.

Đây là quy trình làm việc được khuyến nghị bởi những người làm việc theo số 2to3. Thật không may, tôi không nhớ chính liên kết đến tài liệu mà tôi đã thu thập tất cả những điều này từ đó.

+0

Và đừng bận tâm với Python 3.0.x đã bị ngừng ngay lập tức khi phát hành 3.1. –

+0

- Nếu bạn quản lý để khai thác liên kết đó, tôi rất muốn nhìn thấy nó. –