2008-12-22 45 views
5

Tôi có một dự án nhỏ mà tôi muốn thử chuyển sang Python 3 - làm thế nào để tôi thực hiện việc này?Quy trình làm việc của Python 3?

Tôi đã thực hiện mã chạy mà không có cảnh báo bằng cách sử dụng python2.6 -3 (chủ yếu là xóa .has_key() cuộc gọi), nhưng tôi không chắc chắn cách tốt nhất để sử dụng công cụ 2to3.

Sử dụng công cụ 2to3 để chuyển đổi mã nguồn này thành cú pháp 3.0. Không tự chỉnh sửa đầu ra!

Chạy 2to3 something.py tạo ra một điểm khác biệt, điều này không hữu ích cho chính nó. Sử dụng --write cờ ghi đè something.py và tạo ra một bản sao lưu .. Nó có vẻ như tôi phải làm ..

2to3 something.py 
python3.0 something.py 
mv something.py.bak something.py 
vim something.py 
# repeat 

đồi khế, đồi là một chút tròn một cơn - lý tưởng tôi có thể làm một cái gì đó giống như ..

mv something.py py2.6_something.py # once 

2to3 py2.6_something.py --write-file something.py 
vim py2.6_something.py 
# repeat 

Trả lời

5

Aha, bạn có thể đường ống đầu ra 2to3 để lệnh patch, có thể viết các tập tin được sửa đổi vào một tập tin mới:

mv something.py py2.6_something.py 
2to3 py2.6_something.py | patch -o something.py 
+1

sử dụng cp thay vì mv để nó hoạt động. – nosklo

+0

@nosklo: no. bản vá lần đọc đầu ra diff bởi 2to3 – Yktula

0

2.x nên codebase lại developme tích cực nt, vì vậy 2to3 thực sự nên được chạy trong một nhánh hoặc thư mục tạm thời. Tôi không chắc chắn lý do tại sao bạn muốn có các phiên bản 2.x và 3.x nằm trong cùng một thư mục. distutils có một kịch bản build_2to3 sẽ chạy 2to3 trên bản cài đặt 3.0.

+0

Vì vậy, tôi có thể nhanh chóng/dễ dàng chỉnh sửa phiên bản 2.x, chạy 2to3, chạy thử nghiệm trên 3.x (và lặp lại). Nếu tôi có chi nhánh cho 3.x, làm cách nào để nhanh chóng thực hiện các thay đổi đối với chi nhánh 2.x và tạo lại mã 2to3'd? – dbr

+0

Nói chung, bạn sẽ thực hiện tất cả các thay đổi của mình trên nhánh 2.x và chỉ cần sử dụng 2to3 khi bạn phân phối hoặc cố gắng chuyển thư viện của mình. –

+0

Tôi đã đặt câu hỏi rõ ràng hơn một chút. Tôi đã tạo ra nhánh py3 để chứa các thay đổi mà tôi đã thực hiện đối với mã py2.6, vì vậy nó sẽ 2to3 mà không có lỗi – dbr

Các vấn đề liên quan