2to3 là một chương trình Python đọc Python 2. x và áp dụng một loạt trình sửa lỗi để biến nó thành Python 3 hợp lệ. mã x. Thư viện tiêu chuẩn chứa một bộ sửa lỗi phong phú sẽ xử lý hầu hết tất cả mã. Tuy nhiên, thư viện hỗ trợ 2to3 là một thư viện linh hoạt và chung chung, vì vậy bạn có thể viết các trình sửa lỗi của riêng mình cho 2to3. cũng có thể được điều chỉnh cho các ứng dụng tùy chỉnh trong đó mã Python cần được chỉnh sửa tự động
Sử dụng 2to3
2to3 thường sẽ được cài đặt với trình thông dịch Python dưới dạng tập lệnh. Nó cũng nằm trong thư mục gốc của Python
Đối số cơ bản của 2to3 là danh sách các tệp hoặc thư mục cần chuyển đổi. Các thư mục được duyệt qua đệ quy cho các nguồn Python
Đây là một mẫu Python 2. tệp nguồn x,
def greet[name]: print "Hello, {0}!".format[name] print "What's your name?" name = raw_input[] greet[name]
Nó có thể được chuyển đổi thành Python 3. xcode qua 2 đến 3 trên dòng lệnh
$ 2to3 example.py
Một sự khác biệt so với tệp nguồn ban đầu được in. 2to3 cũng có thể ghi ngay các sửa đổi cần thiết vào tệp nguồn. [Một bản sao lưu của tệp gốc được thực hiện trừ khi cũng được cung cấp. ] Ghi lại các thay đổi được kích hoạt bằng cờ
$ 2to3 -w example.py
Sau khi chuyển đổi, trông như thế này
def greet[name]: print["Hello, {0}!".format[name]] print["What's your name?"] name = input[] greet[name]
Nhận xét và thụt đầu dòng chính xác được giữ nguyên trong suốt quá trình dịch thuật
Theo mặc định, 2to3 chạy một bộ. Cờ liệt kê tất cả các trình sửa lỗi có sẵn. Có thể cung cấp một bộ sửa lỗi rõ ràng để chạy với. Tương tự như vậy, vô hiệu hóa một cách rõ ràng một trình sửa lỗi. Ví dụ sau chỉ chạy bộ sửa lỗi
$ 2to3 -x apply example.py7 và
$ 2to3 -x apply example.py8
$ 2to3 -f imports -f has_key example.py
Lệnh này chạy mọi trình sửa lỗi ngoại trừ trình sửa lỗi
$ 2to3 -x apply example.py9
$ 2to3 -x apply example.py
Một số trình sửa lỗi rõ ràng, nghĩa là chúng không được chạy theo mặc định và phải được liệt kê trên dòng lệnh để được chạy. Tại đây, ngoài các trình sửa lỗi mặc định, trình sửa lỗi
$ 2to3 -f all -f idioms example.py0 được chạy
$ 2to3 -f all -f idioms example.py
Lưu ý cách chuyển
$ 2to3 -f all -f idioms example.py1 cho phép tất cả các trình sửa lỗi mặc định
Đôi khi 2to3 sẽ tìm thấy một chỗ trong mã nguồn của bạn cần thay đổi, nhưng 2to3 không thể tự động sửa. Trong trường hợp này, 2to3 sẽ in cảnh báo bên dưới diff cho một tệp. Bạn nên giải quyết cảnh báo để tuân thủ 3. mã x
2to3 cũng có thể cấu trúc lại doctests. Để bật chế độ này, hãy sử dụng cờ. Lưu ý rằng chỉ doctests sẽ được cấu trúc lại. Điều này cũng không yêu cầu mô-đun phải là Python hợp lệ. Ví dụ: các ví dụ giống như doctest trong tài liệu reST cũng có thể được cấu trúc lại với tùy chọn này
Tùy chọn cho phép xuất thêm thông tin về quá trình dịch thuật
Vì một số câu lệnh in có thể được phân tích thành lời gọi hàm hoặc câu lệnh, 2to3 không phải lúc nào cũng có thể đọc các tệp chứa hàm in. Khi 2to3 phát hiện sự hiện diện của chỉ thị trình biên dịch
$ 2to3 -f all -f idioms example.py2, nó sẽ sửa đổi ngữ pháp bên trong của nó để diễn giải thành một hàm. Thay đổi này cũng có thể được kích hoạt thủ công với cờ. Sử dụng để chạy các trình sửa lỗi trên mã đã được chuyển đổi câu lệnh in của nó
Tùy chọn hoặc cho phép đặc điểm kỹ thuật của một thư mục thay thế cho các tệp đầu ra đã xử lý được ghi vào. Cờ được yêu cầu khi sử dụng vì các tệp sao lưu không có ý nghĩa khi không ghi đè lên các tệp đầu vào
. versionadded:: 2.7.3 The :option:`-o` option was added.
Cờ hoặc yêu cầu 2to3 luôn ghi các tệp đầu ra ngay cả khi không có thay đổi nào được yêu cầu đối với tệp. Điều này hữu ích nhất khi sao chép toàn bộ cây nguồn Python với bản dịch từ thư mục này sang thư mục khác. Tùy chọn này ngụ ý lá cờ vì nó sẽ không có ý nghĩa gì khác
. versionadded:: 2.7.3 The :option:`-W` flag was added.
Tùy chọn chỉ định một chuỗi để nối vào tất cả các tên tệp đầu ra. Cần có cờ khi chỉ định điều này vì không cần sao lưu khi ghi vào các tên tệp khác nhau. Ví dụ
def greet[name]: print "Hello, {0}!".format[name] print "What's your name?" name = raw_input[] greet[name]0
Sẽ khiến một tệp đã chuyển đổi có tên
$ 2to3 -f all -f idioms example.py3 được ghi
def greet[name]: print "Hello, {0}!".format[name] print "What's your name?" name = raw_input[] greet[name]1
Để dịch toàn bộ dự án từ cây thư mục này sang cây thư mục khác, hãy sử dụng
def greet[name]: print "Hello, {0}!".format[name] print "What's your name?" name = raw_input[] greet[name]2
người sửa lỗi
Mỗi bước chuyển đổi mã được gói gọn trong một trình sửa lỗi. Lệnh
$ 2to3 -f all -f idioms example.py4 liệt kê chúng. Vì, mỗi cái có thể được bật và tắt riêng lẻ. Chúng được mô tả ở đây chi tiết hơn