Cách sử dụng Python3to2

Cây nguồn

futurize --stage1 mypackage/**/*.py
7 bao gồm các tập lệnh có tên là
futurize --stage1 mypackage/**/*.py
8 và
futurize --stage1 mypackage/**/*.py
9 để hỗ trợ tạo mã Python 2 hoặc mã Python 3 tương thích với cả hai nền tảng [Py2/3] bằng cách sử dụng mô-đun
futurize --stage1 mypackage/**/*.py
7. Chúng dựa trên
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
1 và sử dụng các bộ sửa lỗi từ
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
2,
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
3 và
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
4

futurize --stage1 mypackage/**/*.py
8 chuyển mã Python 2 qua tất cả các trình sửa lỗi thích hợp để biến nó thành mã Python 3 hợp lệ, sau đó thêm nhập khẩu gói
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
6 và
futurize --stage1 mypackage/**/*.py
7

Để chuyển đổi từ mã Python 3 sang Py2/3, hãy sử dụng tập lệnh

futurize --stage1 mypackage/**/*.py
9 thay thế. Điều này chuyển đổi các cấu trúc chỉ dành cho Py3 [e. g. cú pháp siêu dữ liệu mới] và thêm nhập khẩu
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
6 và
futurize --stage1 mypackage/**/*.py
7 vào đầu mỗi mô-đun

Trong cả hai trường hợp, kết quả phải là mã kiểu Py3 tương đối rõ ràng, hầu như không thay đổi trên cả Python 2 và Python 3

futurize --stage1 mypackage/**/*.py
8. Py2 đến Py2/3

Tập lệnh

futurize --stage1 mypackage/**/*.py
8 chuyển mã Python 2 qua tất cả các trình sửa lỗi thích hợp để biến nó thành mã Python 3 hợp lệ, sau đó thêm nhập khẩu gói
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
6 và
futurize --stage1 mypackage/**/*.py
7 để kích hoạt lại khả năng tương thích với Python 2

Ví dụ: chạy

futurize --stage1 mypackage/**/*.py
8 biến mã Python 2 này

futurize --stage1 mypackage/**/*.py
9

vào mã này chạy trên cả Py2 và Py3

futurize --stage1 mypackage/**/*.py
0

Để viết ra tất cả các thay đổi đối với tệp Python của bạn mà

futurize --stage1 mypackage/**/*.py
8 gợi ý, hãy sử dụng cờ
futurize --stage1 mypackage/**/*.py
27

Đối với các dự án phức tạp, tốt nhất nên chia quá trình chuyển đổi thành hai giai đoạn. Giai đoạn 1 dành cho các thay đổi “an toàn” giúp hiện đại hóa mã nhưng không phá vỡ Python 2. 7 hoặc giới thiệu một phụ thuộc vào gói

futurize --stage1 mypackage/**/*.py
7. Giai đoạn 2 là để hoàn thành quá trình

Giai đoạn 1. sửa lỗi “an toàn”

Chạy giai đoạn đầu tiên của quá trình chuyển đổi với

futurize --stage1 mypackage/**/*.py
4

hoặc, nếu bạn đang sử dụng zsh, đệ quy

futurize --stage1 mypackage/**/*.py

Điều này áp dụng các bản sửa lỗi hiện đại hóa mã Python 2 mà không làm thay đổi tác dụng của mã. Nếu may mắn, điều này sẽ không đưa bất kỳ lỗi nào vào mã, hoặc ít nhất sẽ không đáng kể để sửa. Những thay đổi là những thay đổi mang lại mã Python cập nhật mà không vi phạm khả năng tương thích Py2. Mã kết quả sẽ là Python 2 hiện đại. Mã tương thích 7 cộng với nhập khẩu

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
6 từ bộ sau

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

Chỉ những lần nhập

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
6 được coi là cần thiết sẽ được thêm vào trừ khi tùy chọn dòng lệnh
futurize --stage1 mypackage/**/*.py
91 được chuyển đến
futurize --stage1 mypackage/**/*.py
8, trong trường hợp đó, tất cả chúng đều được thêm vào

Khai báo

futurize --stage1 mypackage/**/*.py
93 không được thêm vào trừ khi cờ
futurize --stage1 mypackage/**/*.py
94 được chuyển cho
futurize --stage1 mypackage/**/*.py
8

Những thay đổi bao gồm

futurize --stage1 mypackage/**/*.py
2

Nhập khẩu tương đối ngầm cố định, e. g

futurize --stage1 mypackage/**/*.py
9

Giai đoạn 1 không thêm bất kỳ lần nhập nào từ gói

futurize --stage1 mypackage/**/*.py
7. Đầu ra của giai đoạn 1 có thể sẽ [chưa] chạy trên Python 3

Mục tiêu của giai đoạn này là tạo ra hầu hết

futurize --stage1 mypackage/**/*.py
97 cho toàn bộ quá trình chuyển, nhưng không gây ra bất kỳ lỗi nào. Nó không gây tranh cãi và an toàn khi áp dụng cho mọi gói Python 2. Các bản vá tiếp theo giới thiệu khả năng tương thích với Python 3 sau đó sẽ ngắn hơn và dễ xem lại hơn

Bộ sửa chữa hoàn chỉnh được áp dụng bởi

futurize --stage1 mypackage/**/*.py
98 là

futurize --stage1 mypackage/**/*.py
9

Các bộ sửa lỗi sau từ

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
1 không được áp dụng

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
1

Trình sửa lỗi

futurize --stage1 mypackage/**/*.py
90 trong
futurize --stage1 mypackage/**/*.py
91 được áp dụng thay vì
futurize --stage1 mypackage/**/*.py
92. Trình sửa lỗi mới vừa làm rõ ràng các thao tác nhập tương đối tiềm ẩn vừa thêm phần khai báo
futurize --stage1 mypackage/**/*.py
93 ở đầu mỗi mô-đun có liên quan

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
6

Trình sửa lỗi

futurize --stage1 mypackage/**/*.py
94 trong
futurize --stage1 mypackage/**/*.py
91 được áp dụng thay vì
futurize --stage1 mypackage/**/*.py
96 trong giai đoạn 1. Trình sửa lỗi mới thay đổi bất kỳ lệnh gọi
futurize --stage1 mypackage/**/*.py
97 nào thành
futurize --stage1 mypackage/**/*.py
98, tương thích với Py2/3, nhưng không thay đổi bất kỳ tên phương thức
futurize --stage1 mypackage/**/*.py
99 nào thành
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
10, điều này sẽ phá vỡ khả năng tương thích với Py2

futurize --stage1 mypackage/**/*.py
96 được áp dụng trong giai đoạn 2

futurize --stage1 mypackage/**/*.py
00

Trình sửa lỗi

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
12 trong
futurize --stage1 mypackage/**/*.py
91 thay đổi mã để sử dụng chức năng in và cũng thêm
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
14 vào đầu mô-đun bằng cách sử dụng
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
15

Ngoài ra, nó tránh thêm một bộ dấu ngoặc đơn bổ sung nếu chúng đã tồn tại. Vì vậy,

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
16 không trở thành
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
17

futurize --stage1 mypackage/**/*.py
01

Trình sửa lỗi này dịch mã để sử dụng phương thức

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
18 chỉ dành cho Python 3 đối với các trường hợp ngoại lệ

futurize --stage1 mypackage/**/*.py
02

Điều này chuyển đổi

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
19] thành
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
60

futurize --stage1 mypackage/**/*.py
03

Điều này thực hiện thay đổi thẩm mỹ. Điều này không được áp dụng theo mặc định vì nó không phục vụ để cải thiện khả năng tương thích Python 2/3. [Trong một số trường hợp, nó cũng có thể làm giảm khả năng đọc. xem vấn đề #58. ]

giai đoạn 2. Mã kiểu Py3 với hàm bao cho Py2

Chạy giai đoạn 2 của quá trình chuyển đổi với

futurize --stage1 mypackage/**/*.py
04

Giai đoạn này thêm một phụ thuộc vào gói

futurize --stage1 mypackage/**/*.py
7. Mục tiêu của giai đoạn 2 là thực hiện các thay đổi gần như an toàn hơn nữa đối với mã Python 2 để sử dụng mã kiểu Python 3 mà sau đó vẫn chạy trên Python 2 với sự trợ giúp của các nội trang và tiện ích phù hợp trong
futurize --stage1 mypackage/**/*.py
7

Ví dụ

futurize --stage1 mypackage/**/*.py
05

sẽ được chuyển đổi bởi Giai đoạn 2 sang mã này

futurize --stage1 mypackage/**/*.py
06

Giai đoạn 2 cũng đổi tên nhập thư viện tiêu chuẩn thành tên Py3 của chúng và thêm hai dòng này

futurize --stage1 mypackage/**/*.py
07

Ví dụ

futurize --stage1 mypackage/**/*.py
08

trở thành

futurize --stage1 mypackage/**/*.py
09

Danh sách đầy đủ các trình sửa lỗi được áp dụng trong Giai đoạn 2 là

futurize --stage1 mypackage/**/*.py
40

không áp dụng

futurize --stage1 mypackage/**/*.py
41

Tách văn bản khỏi byte

Sau khi áp dụng giai đoạn 2, bước được đề xuất là quyết định xem chuỗi Python 2 nào của bạn đại diện cho văn bản và chuỗi nào đại diện cho dữ liệu nhị phân và thêm tiền tố vào tất cả các chuỗi ký tự bằng

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
63 hoặc
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
64 tương ứng. Hơn nữa, để đảm bảo rằng các loại này hoạt động tương tự trên Python 2 cũng như trên Python 3, hãy bọc các chuỗi byte hoặc văn bản trong các loại
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
65 và
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
66 từ
futurize --stage1 mypackage/**/*.py
7. Ví dụ

futurize --stage1 mypackage/**/*.py
42

Khi đó, bất kỳ chuỗi ký tự không được tô điểm nào sẽ đại diện cho các chuỗi nền tảng gốc [chuỗi byte trên Py2, chuỗi unicode trên Py3]

Một cách khác là chuyển cờ

futurize --stage1 mypackage/**/*.py
94

futurize --stage1 mypackage/**/*.py
43

Sau khi chạy cái này, tất cả các chuỗi ký tự không được đánh dấu rõ ràng là

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
69 sẽ có nghĩa là văn bản [Python 3
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
66 hoặc Python 2
futurize --stage1 mypackage/**/*.py
001]

sau chuyển đổi

Sau khi chạy

futurize --stage1 mypackage/**/*.py
8, trước tiên chúng tôi khuyên bạn nên chạy thử nghiệm của mình trên Python 3 và thực hiện các thay đổi mã khác cho đến khi chúng vượt qua Python 3

Bước tiếp theo sẽ là chỉnh sửa mã theo cách thủ công để kích hoạt lại khả năng tương thích với Python 2 với sự trợ giúp của gói

futurize --stage1 mypackage/**/*.py
7. Ví dụ: bạn có thể thêm trình trang trí
futurize --stage1 mypackage/**/*.py
004 vào bất kỳ lớp nào xác định các phương thức tùy chỉnh của
futurize --stage1 mypackage/**/*.py
005. Xem để biết thêm thông tin

futurize --stage1 mypackage/**/*.py
8 hướng dẫn bắt đầu nhanh

Cách chuyển đổi mã Py2 thành mã Py2/3 bằng cách sử dụng

futurize --stage1 mypackage/**/*.py
8

Bước 0. thành lập

Bước 0 mục tiêu. thiết lập và xem các bài kiểm tra vượt qua Python 2 và thất bại trên Python 3

  1. Sao chép gói từ github/bitbucket. Tùy chọn đổi tên repo của bạn thành

    futurize --stage1 mypackage/**/*.py
    
    008. ví dụ.
    futurize --stage1 mypackage/**/*.py
    
    009,
    futurize --stage1 mypackage/**/*.py
    
    010,
    futurize --stage1 mypackage/**/*.py
    
    011

  2. Tạo và kích hoạt môi trường conda Python 2 hoặc virtualenv. Cài đặt gói với

    futurize --stage1 mypackage/**/*.py
    
    012 và chạy bộ thử nghiệm của nó trên Py2. 7 [e. g.
    futurize --stage1 mypackage/**/*.py
    
    013 hoặc
    futurize --stage1 mypackage/**/*.py
    
    014]

  3. tùy chọn. nếu có tệp

    futurize --stage1 mypackage/**/*.py
    
    015, hãy thêm Python phiên bản 3. 6 và xóa mọi phiên bản = 3. 3]
mở Dấu nhắc Lệnh
gõ py -2. x để khởi chạy Python 2. x
gõ py -3. x để khởi chạy Python 3. x

Làm cách nào để chuyển đổi Python 2 sang Python 3?

Chúng tôi có thể chuyển đổi tập lệnh Python2 thành tập lệnh Python3 bằng cách sử dụng mô-đun 2to3 . Nó thay đổi cú pháp Python2 thành cú pháp Python3. Chúng tôi có thể thay đổi tất cả các tệp trong một thư mục cụ thể từ python2 thành python3.

Sự khác biệt giữa Python 2 và Python 3 là gì?

Hỗ trợ Unicode . Ngược lại, Python 3 lưu trữ các chuỗi dưới dạng Unicode theo mặc định, linh hoạt hơn các chuỗi ASCII .

2to3 là ​​gì?

2to3 là ​​ một chương trình Python đọc Python 2. x mã nguồn và áp dụng một loạt các 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ã.

Chủ Đề