Ứng dụng của bạn đã sẵn sàng để đạt được khả năng tương thích hoàn toàn với Python 3, nhưng vấn đề về các thành phần phụ thuộc của ứng dụng vẫn còn
Không có gì lạ khi các dự án tích lũy các phụ thuộc không còn được duy trì và do đó thiếu hỗ trợ Python 3
Trong một số trường hợp, tất cả những gì bạn cần làm là cập nhật phần phụ thuộc lên phiên bản mới hơn; . Đó là vì một số gói có thể đã bỏ Python 2
Dù sao đi nữa, tại thời điểm này, tốt nhất bạn nên tập trung vào những chiến thắng dễ dàng
Hầu hết các gói của bạn có thể đã tương thích hoặc chỉ yêu cầu cập nhật lên phiên bản mới hơn. Theo nguyên tắc chung, chúng tôi khuyên bạn nên cập nhật lên bản phát hành mới nhất của từng thành phần phụ thuộc để đảm bảo an toàn
Kiểm tra từng phụ thuộc một có thể tốn thời gian trong các dự án lớn hơn. Bạn có thể tạo điều kiện thuận lợi cho quy trình bằng cách chạy “caniusepython3” trên “yêu cầu của bạn. txt” [tạo một tài khoản với “pip freeze > các yêu cầu. txt” nếu bạn không có]
Công cụ này còn lâu mới chính xác, nhưng nó đủ tốt để đạt được mục tiêu chính của chúng ta ở đây. đánh giá xem còn bao nhiêu công việc trước khi bạn có thể thực hiện chuyển đổi cuối cùng sang Python 3
Các nhánh tương thích với Python 3Không có gì lạ khi biết rằng một gói đã bị các tác giả ban đầu của nó bỏ rơi hoàn toàn. Tuy nhiên, bạn vẫn nên duyệt qua trình theo dõi vấn đề về kho lưu trữ GitHub hoặc chỉ mục PyPI của gói, vì những người khác có thể đã gặp phải vấn đề tương tự như bạn và đã tạo một nhánh rẽ tương thích với Python 3
Nếu bạn không thể xác định gói thay thế Python 3 đang hoạt động, hãy hoãn nâng cấp hoặc thay thế gói đó sang giai đoạn sau. Bạn có cá lớn hơn để chiên
Xử lý backportMột số tính năng được thêm vào Python 3 đã được nhập lại dưới dạng các gói có thể cài đặt riêng biệt. Các ví dụ phổ biến về điều này bao gồm “sub process32” và “funcools32. ”
Các backport này có xu hướng không tương thích với Python 3 và sẽ không thành công nếu bạn cố gắng cài đặt chúng. Bạn có thể sử dụng điểm đánh dấu môi trường để đảm bảo điều đó không xảy ra
Chúng ta 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
Cài đặt
Mô-đun này không được tích hợp sẵn với Python. Để cài đặt loại này, lệnh dưới đây trong thiết bị đầu cuối
pip install 2to3
cú pháp
2to3 [file or folder] -w
Nếu chúng tôi muốn thay đổi tất cả các tệp trong thư mục hiện đang mở và tất cả các tệp trong thư mục con từ Python2 thành Python3, hãy nhập lệnh bên dưới
2to3.-w
Nếu chúng ta muốn thay đổi một tệp cụ thể trong thư mục hiện tại từ Python2 sang Python3 thì hãy nhập lệnh sau
2to3 gfg.py -w
Ví dụ. Hãy xem xét một tệp Python2 đơn giản
Để chuyển đổi tệp này từ Python2 sang Python3, hãy mở terminal trong thư mục chứa tệp và nhập lệnh bên dưới
Tôi có một dự án ML lớn bằng mã python 2 và tôi mới bắt đầu sử dụng PyCharm làm IDE. Tôi hiện đang sử dụng WinPython 3. 4 và tốt nhất là tôi muốn làm mọi thứ trong python 3 thay vì tiếp tục sử dụng phiên bản cũ 2. Khi tôi nhân bản dự án từ git, một cửa sổ bật lên trong pycharm xuất hiện, đó là một thứ gì đó dọc theo dòng chuyển đổi mã thành 3 từ 2 nhưng tôi không thực sự nghĩ về nó và đã thoát khỏi nó. Làm cách nào để chuyển đổi nó?
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
$ 2to3 example.py
1 là một thư viện chung và linh hoạt, vì vậy bạn có thể viết các trình sửa lỗi của riêng mình cho 2to3Không dùng nữa kể từ phiên bản 3. 11, sẽ bị xóa trong phiên bản 3. 13. Mô-đun
$ 2to3 example.py
1 được đánh dấu là đang chờ ngừng sử dụng trong Python 3. 9 [tăng $ 2to3 example.py
3 khi nhập] và hoàn toàn không dùng nữa trong Python 3. 11 [nâng cao $ 2to3 example.py
4]. Công cụ $ 2to3 example.py
5 là một phần của điều đó. Nó sẽ bị xóa trong Python 3. 13. 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
$ 2to3 example.py
6 của thư mục gốc PythonCác đố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,
$ 2to3 example.py
72to3 [file or folder] -w1
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 cung cấp
$ 2to3 example.py
8. ] Ghi lại các thay đổi được kích hoạt với cờ $ 2to3 example.py
92to3 [file or folder] -w5
Sau khi chuyển đổi,
$ 2to3 example.py
7 trông như thế này2to3 [file or folder] -w7
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ộ trình sửa lỗi được xác định trước . Cờ
2to3 [file or folder] -w51 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
2to3 [file or folder] -w52. Tương tự như vậy,
2to3 [file or folder] -w53 vô hiệu hóa một cách rõ ràng trình sửa lỗi. Ví dụ sau chỉ chạy bộ sửa lỗi
2to3 [file or folder] -w54 và
2to3 [file or folder] -w55.
2to3.-w3
Lệnh này chạy mọi trình sửa lỗi ngoại trừ trình sửa lỗi
2to3 [file or folder] -w56
2to3.-w5
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 [file or folder] -w57 được chạy
2to3.-w7
Lưu ý cách chuyển
2to3 [file or folder] -w58 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ờ
2to3 [file or folder] -w59. 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
2to3 [file or folder] -w70 cho phép xuất ra nhiều thông tin hơn 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 [file or folder] -w71, nó sẽ sửa đổi ngữ pháp bên trong của nó để diễn giải
2to3 [file or folder] -w72 như một hàm. Thay đổi này cũng có thể được kích hoạt thủ công với cờ
2to3 [file or folder] -w73. Sử dụng
2to3 [file or folder] -w73 để 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ó. Ngoài ra,
2to3 [file or folder] -w75 có thể được sử dụng để biến
2to3 [file or folder] -w76 thành một hàm
Tùy chọn
2to3 [file or folder] -w77 hoặc
2to3 [file or folder] -w78 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ờ
$ 2to3 example.py
8 là bắt buộc khi sử dụng cờ này 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àoMới trong phiên bản 3. 2. 3. Tùy chọn
2to3 [file or folder] -w77 đã được thêm vào.
Cờ
2to3.-w31 hoặc
2to3.-w32 yêu cầu 2to3 luôn ghi tệp đầu ra ngay cả khi không cần thay đổi tệp. Điều này hữu ích nhất với
2to3 [file or folder] -w77 để toàn bộ cây nguồn Python được sao chép 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ụ ý cờ
$ 2to3 example.py
9 vì nó sẽ không có ý nghĩa gì khácMới trong phiên bản 3. 2. 3. Cờ
2to3.-w31 đã được thêm vào.
Tùy chọn
2to3.-w36 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ờ
$ 2to3 example.py
8 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ụ$ 2to3 example.py
8Sẽ khiến một tệp đã chuyển đổi có tên
2to3.-w38 được ghi
Mới trong phiên bản 3. 2. 3. Tùy chọn
2to3.-w36 đã được thêm vào.
Để 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
$ 2to3 example.py
1Fixers¶
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.-w50 liệt kê chúng. Như đã nêu ở trên , 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. áp dụng ¶
Loại bỏ việc sử dụng
2to3.-w51. Ví dụ:
2to3.-w52 được chuyển đổi thành
2to3.-w53khẳng định ¶
Thay thế tên phương thức
2to3.-w54 không dùng nữa bằng tên chính xác
Từ
Đến
2to3.-w55
2to3.-w56
2to3.-w57
2to3.-w56
2to3.-w59
2to3.-w70
2to3.-w71
2to3.-w70
2to3.-w73
2to3.-w74
2to3.-w75
2to3.-w74
2to3.-w77
2to3.-w78
2to3.-w79
$ 2to3 example.py
80$ 2to3 example.py
81$ 2to3 example.py
82$ 2to3 example.py
83$ 2to3 example.py
82$ 2to3 example.py
85$ 2to3 example.py
86$ 2to3 example.py
87$ 2to3 example.py
86chuỗi cơ sở ¶Chuyển đổi
$ 2to3 example.py
89 thành $ 2to3 example.py
10bộ đệm ¶Chuyển đổi
$ 2to3 example.py
11 thành $ 2to3 example.py
12. Trình sửa lỗi này là tùy chọn vì API $ 2to3 example.py
12 tương tự nhưng không hoàn toàn giống với API của $ 2to3 example.py
11dict ¶Sửa các phương pháp lặp lại từ điển.
$ 2to3 example.py
15 được chuyển đổi thành $ 2to3 example.py
16, $ 2to3 example.py
17 thành $ 2to3 example.py
18 và $ 2to3 example.py
19 thành $ 2to3 example.py
20. Tương tự, $ 2to3 example.py
21, $ 2to3 example.py
22 và $ 2to3 example.py
23 lần lượt được chuyển đổi thành $ 2to3 example.py
16, $ 2to3 example.py
18 và $ 2to3 example.py
20. Nó cũng kết thúc các cách sử dụng hiện có của $ 2to3 example.py
16, $ 2to3 example.py
18 và $ 2to3 example.py
20 trong lệnh gọi tới $ 2to3 example.py
00ngoại trừ ¶Chuyển đổi
$ 2to3 example.py
01 thành $ 2to3 example.py
02exec ¶Chuyển đổi câu lệnh
$ 2to3 example.py
03 thành hàm 2to3 [file or folder] -w76execfile ¶
Loại bỏ việc sử dụng
$ 2to3 example.py
05. Đối số của $ 2to3 example.py
05 được gói gọn trong các lệnh gọi tới $ 2to3 example.py
07, $ 2to3 example.py
08 và 2to3 [file or folder] -w76thoát chức ¶
Thay đổi nhiệm vụ của
$ 2to3 example.py
10 để sử dụng mô-đun $ 2to3 example.py
11bộ lọc ¶Kết thúc việc sử dụng
$ 2to3 example.py
12 trong cuộc gọi $ 2to3 example.py
00funcattrs ¶Sửa các thuộc tính chức năng đã được đổi tên. Ví dụ:
$ 2to3 example.py
14 được chuyển đổi thành $ 2to3 example.py
15tương lai ¶Loại bỏ câu lệnh
$ 2to3 example.py
16getcwdu ¶Đổi tên
$ 2to3 example.py
17 thành $ 2to3 example.py
18has_key ¶Thay đổi
$ 2to3 example.py
19 thành $ 2to3 example.py
20thành ngữ ¶Trình sửa lỗi tùy chọn này thực hiện một số phép biến đổi làm cho mã Python trở nên đặc ngữ hơn. Loại so sánh như
$ 2to3 example.py
21 và $ 2to3 example.py
22 được chuyển đổi thành $ 2to3 example.py
23. $ 2to3 example.py
24 trở thành $ 2to3 example.py
25. Trình sửa lỗi này cũng cố gắng sử dụng $ 2to3 example.py
26 ở những nơi thích hợp. Ví dụ, khối này$ 2to3 example.py
2được đổi thành
$ 2to3 example.py
0nhập ¶Phát hiện nhập khẩu anh chị em và chuyển đổi chúng thành nhập khẩu tương đối
nhập ¶Xử lý đổi tên mô-đun trong thư viện chuẩn
imports2 ¶Xử lý đổi tên các mô-đun khác trong thư viện chuẩn. Nó tách biệt với trình sửa lỗi
2to3 [file or folder] -w54 chỉ vì những hạn chế kỹ thuậtđầu vào ¶
Chuyển đổi
$ 2to3 example.py
28 thành $ 2to3 example.py
29thực tập sinh ¶Chuyển đổi
$ 2to3 example.py
30 thành $ 2to3 example.py
31trường hợp ¶Sửa các loại trùng lặp trong đối số thứ hai của
$ 2to3 example.py
32. Ví dụ: $ 2to3 example.py
33 được chuyển đổi thành $ 2to3 example.py
34 và $ 2to3 example.py
35 được chuyển đổi thành $ 2to3 example.py
36itertools_imports ¶Xóa nhập khẩu của
$ 2to3 example.py
37, $ 2to3 example.py
38 và $ 2to3 example.py
39. Nhập khẩu của $ 2to3 example.py
40 cũng được đổi thành $ 2to3 example.py
41công cụ iter ¶Thay đổi cách sử dụng của
$ 2to3 example.py
37, $ 2to3 example.py
38 và $ 2to3 example.py
39 thành tương đương được tích hợp sẵn của chúng. $ 2to3 example.py
40 được đổi thành $ 2to3 example.py
41dài ¶Đổi tên
$ 2to3 example.py
47 thành $ 2to3 example.py
48bản đồ ¶Kết thúc cuộc gọi
$ 2to3 example.py
49 trong cuộc gọi $ 2to3 example.py
00. Nó cũng thay đổi $ 2to3 example.py
51 thành $ 2to3 example.py
52. Sử dụng $ 2to3 example.py
53 sẽ vô hiệu hóa trình sửa lỗi nàysiêu lớp ¶Chuyển đổi cú pháp siêu dữ liệu cũ [
$ 2to3 example.py
54 trong nội dung lớp] thành mới [$ 2to3 example.py
55]methodattrs ¶Sửa tên thuộc tính phương pháp cũ. Ví dụ:
$ 2to3 example.py
56 được chuyển đổi thành $ 2to3 example.py
57ne ¶Chuyển đổi cú pháp không bằng cũ,
$ 2to3 example.py
58, thành $ 2to3 example.py
59tiếp theo ¶Chuyển đổi việc sử dụng các phương thức
$ 2to3 example.py
60 của iterator thành hàm $ 2to3 example.py
60. Nó cũng đổi tên các phương thức $ 2to3 example.py
60 thành $ 2to3 example.py
63khác không ¶Đổi tên định nghĩa của các phương thức được gọi là
$ 2to3 example.py
64 thành $ 2to3 example.py
65chữ số ¶Chuyển đổi các ký tự bát phân thành cú pháp mới
toán tử ¶Chuyển đổi các cuộc gọi đến các chức năng khác nhau trong mô-đun
$ 2to3 example.py
66 sang các cuộc gọi chức năng khác nhưng tương đương. Khi cần, các câu lệnh $ 2to3 example.py
67 thích hợp được thêm vào, e. g. $ 2to3 example.py
68. Các ánh xạ sau đây được thực hiệnTừ
Đến
$ 2to3 example.py
69$ 2to3 example.py
70$ 2to3 example.py
71$ 2to3 example.py
72$ 2to3 example.py
73$ 2to3 example.py
74$ 2to3 example.py
75$ 2to3 example.py
76$ 2to3 example.py
77$ 2to3 example.py
78$ 2to3 example.py
79$ 2to3 example.py
80$ 2to3 example.py
81$ 2to3 example.py
82dấu ngoặc ¶Thêm dấu ngoặc đơn bổ sung khi chúng được yêu cầu trong phần hiểu danh sách. Ví dụ:
$ 2to3 example.py
83 trở thành $ 2to3 example.py
84in ¶Chuyển đổi câu lệnh
$ 2to3 example.py
85 thành hàm 2to3 [file or folder] -w72tăng ¶
Chuyển đổi
$ 2to3 example.py
87 thành $ 2to3 example.py
88 và $ 2to3 example.py
89 thành $ 2to3 example.py
90. Nếu $ 2to3 example.py
91 là một bộ, bản dịch sẽ không chính xác vì việc thay thế các bộ cho các ngoại lệ đã bị loại bỏ trong 3. 0