Cây nguồn
futurize --stage1 mypackage/**/*.py7 bao gồm các tập lệnh có tên là
futurize --stage1 mypackage/**/*.py8 và
futurize --stage1 mypackage/**/*.py9 để 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/**/*.py7. Chúng dựa trên
from __future__ import absolute_import from __future__ import division from __future__ import print_function1 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_function2,
from __future__ import absolute_import from __future__ import division from __future__ import print_function3 và
from __future__ import absolute_import from __future__ import division from __future__ import print_function4
futurize --stage1 mypackage/**/*.py8 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_function6 và
futurize --stage1 mypackage/**/*.py7
Để chuyển đổi từ mã Python 3 sang Py2/3, hãy sử dụng tập lệnh
futurize --stage1 mypackage/**/*.py9 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_function6 và
futurize --stage1 mypackage/**/*.py7 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/**/*.py8 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_function6 và
futurize --stage1 mypackage/**/*.py7 để kích hoạt lại khả năng tương thích với Python 2
Ví dụ: chạy
futurize --stage1 mypackage/**/*.py8 biến mã Python 2 này
futurize --stage1 mypackage/**/*.py9
vào mã này chạy trên cả Py2 và Py3
futurize --stage1 mypackage/**/*.py0
Để viết ra tất cả các thay đổi đối với tệp Python của bạn mà
futurize --stage1 mypackage/**/*.py8 gợi ý, hãy sử dụng cờ
futurize --stage1 mypackage/**/*.py27
Đố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/**/*.py7. 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/**/*.py4
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_function6 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_function6 đượ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/**/*.py91 được chuyển đến
futurize --stage1 mypackage/**/*.py8, trong trường hợp đó, tất cả chúng đều được thêm vào
Khai báo
futurize --stage1 mypackage/**/*.py93 không được thêm vào trừ khi cờ
futurize --stage1 mypackage/**/*.py94 được chuyển cho
futurize --stage1 mypackage/**/*.py8
Những thay đổi bao gồm
futurize --stage1 mypackage/**/*.py2
Nhập khẩu tương đối ngầm cố định, e. g
futurize --stage1 mypackage/**/*.py9
Giai đoạn 1 không thêm bất kỳ lần nhập nào từ gói
futurize --stage1 mypackage/**/*.py7. Đầ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/**/*.py97 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/**/*.py98 là
futurize --stage1 mypackage/**/*.py9
Các bộ sửa lỗi sau từ
from __future__ import absolute_import from __future__ import division from __future__ import print_function1 không được áp dụng
from __future__ import absolute_import from __future__ import division from __future__ import print_function1
Trình sửa lỗi
futurize --stage1 mypackage/**/*.py90 trong
futurize --stage1 mypackage/**/*.py91 được áp dụng thay vì
futurize --stage1 mypackage/**/*.py92. 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/**/*.py93 ở đầu mỗi mô-đun có liên quan
from __future__ import absolute_import from __future__ import division from __future__ import print_function6
Trình sửa lỗi
futurize --stage1 mypackage/**/*.py94 trong
futurize --stage1 mypackage/**/*.py91 được áp dụng thay vì
futurize --stage1 mypackage/**/*.py96 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/**/*.py97 nào thành
futurize --stage1 mypackage/**/*.py98, 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/**/*.py99 nào thành
from __future__ import absolute_import from __future__ import division from __future__ import print_function10, điều này sẽ phá vỡ khả năng tương thích với Py2
futurize --stage1 mypackage/**/*.py96 được áp dụng trong giai đoạn 2
futurize --stage1 mypackage/**/*.py00
Trình sửa lỗi
from __future__ import absolute_import from __future__ import division from __future__ import print_function12 trong
futurize --stage1 mypackage/**/*.py91 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_function14 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_function15
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_function16 không trở thành
from __future__ import absolute_import from __future__ import division from __future__ import print_function17
futurize --stage1 mypackage/**/*.py01
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_function18 chỉ dành cho Python 3 đối với các trường hợp ngoại lệ
futurize --stage1 mypackage/**/*.py02
Điều này chuyển đổi
from __future__ import absolute_import from __future__ import division from __future__ import print_function19] thành
from __future__ import absolute_import from __future__ import division from __future__ import print_function60
futurize --stage1 mypackage/**/*.py03
Đ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/**/*.py04
Giai đoạn này thêm một phụ thuộc vào gói
futurize --stage1 mypackage/**/*.py7. 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/**/*.py7
Ví dụ
futurize --stage1 mypackage/**/*.py05
sẽ được chuyển đổi bởi Giai đoạn 2 sang mã này
futurize --stage1 mypackage/**/*.py06
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/**/*.py07
Ví dụ
futurize --stage1 mypackage/**/*.py08
trở thành
futurize --stage1 mypackage/**/*.py09
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/**/*.py40
không áp dụng
futurize --stage1 mypackage/**/*.py41
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_function63 hoặc
from __future__ import absolute_import from __future__ import division from __future__ import print_function64 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_function65 và
from __future__ import absolute_import from __future__ import division from __future__ import print_function66 từ
futurize --stage1 mypackage/**/*.py7. Ví dụ
futurize --stage1 mypackage/**/*.py42
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/**/*.py94
futurize --stage1 mypackage/**/*.py43
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_function69 sẽ có nghĩa là văn bản [Python 3
from __future__ import absolute_import from __future__ import division from __future__ import print_function66 hoặc Python 2
futurize --stage1 mypackage/**/*.py001]
sau chuyển đổi
Sau khi chạy
futurize --stage1 mypackage/**/*.py8, 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/**/*.py7. Ví dụ: bạn có thể thêm trình trang trí
futurize --stage1 mypackage/**/*.py004 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/**/*.py005. 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/**/*.py8
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
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
011Tạ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ặcfuturize --stage1 mypackage/**/*.py
014]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]