Làm cách nào để thay đổi python3 thành python3 6? ✅ Đã Test
Kinh Nghiệm Hướng dẫn Làm cách nào để thay đổi python3 thành python3 6? 2022
Hoàng Thị Bích Ngọc đang tìm kiếm từ khóa Làm cách nào để thay đổi python3 thành python3 6? được Update vào lúc : 2022-12-26 11:35:03 . Với phương châm chia sẻ Kinh Nghiệm về trong nội dung bài viết một cách Chi Tiết 2022. Nếu sau khi tham khảo tài liệu vẫn ko hiểu thì hoàn toàn có thể lại Comment ở cuối bài để Mình lý giải và hướng dẫn lại nha.Bản tăng cấp Python lớn ở đầu cuối — lên phiên bản 3 — đã đến vào tháng 12. 2008, nearly 12 years ago. Tuy nhiên, rất hoàn toàn có thể bạn vẫn đang thao tác trên mã thử nghiệm hoặc sản phẩm Python 2. If so, then you may be seeing the below deprecation message as a reminder to update the Python version you’re working with
“KHÔNG DÙNG. Python 2. 7 sẽ kết thúc vòng đời vào ngày một tháng 1 năm 2022. Vui lòng tăng cấp Python của bạn thành Python 2. 7 sẽ không được duy trì sau ngày đó. Phiên bản tương lai của pip sẽ bỏ tương hỗ cho Python 2. 7. ”
Nội dung chính Show- Sự thay đổi chính. Python 2 vs. Python 3Cài đặt Python 3quá trình chuyển1. quy đổi tự động2. Thay đổi thủ công3. Xác thực thời gian chạy và sửa lỗiPython 3 Ported Mã và trạng tháiCác vấn đề về thời gian chạy chungĐọc thêmHow to link python3 to python3 6?How to install python3 6?Is python 3. 6 still supported?
Please take this seriously and plan accordingly. Python update lên 3. x không tương thích ngược. Những gì bạn viết với Python 2. x hoàn toàn có thể không hoạt động và sinh hoạt giải trí thông thường khi sử dụng 3. x.
Hãy chắc như đinh cũng đọc bản in đẹp. Theo trang web dành riêng cho ngôn từ lập trình, ngày phát hành tăng cấp Python ở đầu cuối vẫn là TBD. “Là người ở đầu cuối trong 2 người. sê-ri x, 2. 7 sẽ nhận được tương hỗ sửa lỗi cho tới năm 2022. Hỗ trợ chính thức ngừng vào ngày một tháng 1 năm 2022, nhưng bản phát hành ở đầu cuối sẽ ra mắt sau ngày đó. ” [1]
Vì vậy, Python 2 sẽ chuyển sang chính sách không được tương hỗ vào thời điểm ở thời điểm cuối năm nay. If you haven’t yet done so, now is a good time to migrate the current Python 2 code to Python 3 syntax and stick to Python 3 going forward
Why don’t teams just jump start on this migration? One of the major hurdles is that the majority of working code simply breaks (read more why-was-python-3-made-incompatible-with-python-2), either because of the direct language syntax or issues with third party APIs. Let’s be fair here. few of us would bother with migration if the new Python updates were backwards compatible. Instead, version 2 will go unsupported, forcing many — including us here Couchbase — to prioritize migration. Even if the team crosses the bug fix support deadline, it’s ok (because your code is still working). As a team, we decided it’s better to migrate as close to this date as possible so that we are on the same page with other Python community members and learn alongside them.
This document is a collection of tips and tricks we learned while upgrading to Python 3 along with common problems we encountered during the Couchbase test infra migration process. As you’ll see we manually update python by command line after kick-starting with an automated process. Your approach may be different. Regardless, start as soon as you can. Updating python from version 2 to version 3 is important
Couchbase is an open source Enterprise-class MultiCloud to Edge NoSQL Database. The Couchbase functional testing framework, TestRunner has been developed in Python 2. The TestRunner git repository can be found https. //github. com/couchbase/testrunner . Our goal now is to completely switch to Python 3 runtime instead of co-running with both Python 3 and Python 2.
As part of the Python upgrade process, we have identified the major changes needed to successfully port to version 3. Some of the problems you’ll read about we identified during the porting process. Our aim in sharing our learnings is to help you with your own migration. You can pick the latest Python 3. x version (it depends on the pre-release, stable, security-fixes version on a specific platform, 3. 7 or 3. 6), which we are referring to as Python 3 throughout this blog. See more details on the release Python releases tải về and Python 3 documentation.
Cheat Sheet
Sự thay đổi chính. Python 2 vs. Python 3
To get an idea on the key changes, here is the summary list of code changes needed from Python 2 to Python 3
Python 2Python 3 Text utf-8 . str
‘‘Text is unicode . str
u”Binary is same as Text. bytes/str
Example.
file. read(6) == ‘GIF89a’Binary data is represented as b prefix. bytes
b”
Use decode() to get the string, encode() to get bytes. Examples.
file. read(6) == b’GIF89a’
b’hello’. decode() → ‘hello’
‘hello’. encode() → b’hello’
str(b’hello’) → “b’hello’ “ Print statement
Example. print ‘ ‘Print function
Example. print(‘ ‘)Integer division
Example. 5/2=2Floor Division. Use 2 slashes
Example. 5//2 = 2 and 5/2=2. 5Float division
Example. 5/2. 0 = 2. 5 or 5. 0/2 = 2. 5Float Division. Use single slash
Example. 5/2 = 2. 5Long type is different from int
long There is no long type. It is same as intxrange()range()Iteration functions had iter prefix. iterxxx()
Example. iteritems()Dropped iter prefix. xxxx()
Example. items()Lists are directly loaded (all elements loaded into memory when list is used)
Example. for i in [] Lists are lazy loaded (when an element is accessed, then only loaded into memory)
Example. for i in list([]) Dictionaries can be compared by default or against 2 dict.
Example. sorted(dict) Dictionaries can’t be compared directly. sorted() should have key.
Example. đã sắp xếp(expected_result,key=(lambda x. x[xô. name][‘name’]))For general dict/list comparison, you can use below.
from deepdiff import DeepDiff
diffs = DeepDiff(actual_result[‘results’], expected_result[ ‘results’ ], ignore_order= True ) if diffs.
self. khẳng địnhTrue( Sai , khác)
Bytes and strings as values.
diffs = DeepDiff(set(actual_indexes), set(indexes_names), ignore_order= True , ignore_string_type_changes= True )
- . khách hàngurllib. yêu cầu, urllib. lỗi, urllib. phân tích cú phápsgmllib3k
Ví dụ.
urllib. phân tích cú pháp. mã url ()
string.ascii_lowercase
string.ascii_uppercase
Xem những cam kết py3 của testrunner để biết những thay đổi
Cài đặt Python 3
Để thiết lập Python 3 từ đầu, hãy chạy những lệnh phía dưới trên sever mới có những nền tảng chính được tương hỗ.
Sau này trong thời gian chạy, hãy sử dụng lệnh python 3 hoặc python trong python 3 virtual env. Sử dụng pip3 hoặc pip3. x (pip3. 6 ví dụ điển hình) để setup những gói nhờ vào phiên bản Python 3 đã setup.
hệ điều hành Mac
(Ví dụ. Máy tính xách tay của bạn)
CentOS( Nút ví dụ. Nô lệ của Jenkins)
Ubuntu Slave sử dụng để xác minh thời gian chạy Python 3Windows Thiết lập trực tiếp (pip3 được setup tự động).(https. //wsvincent. com/install-python3-mac/)
con trăn1
brew setup python3
Thiết lập môi trường tự nhiên thiên nhiên ảo
Vỏ bọc1
2
3
4
5
6
7
8
$ pip3 setup virtualenv
$ mkdir ~/môi trường tự nhiên thiên nhiên
$ virtualenv -p python3 ~/environments
$ nguồn ~/môi trường tự nhiên thiên nhiên/bin/activate
(môi trường tự nhiên thiên nhiên) jmunta-mac:~ jagadeshmunta
$ trăn -V
Trăn 3. 7. 3
(môi trường tự nhiên thiên nhiên) jmunta-mac:~ jagadeshmunta
Cài đặt những thư viện thiết yếu
Vỏ bọc1
2
3
4
5
6
7
8
9
$ pip3 setup couchbase
$ pip3 setup sgmllib3k
$ pip3 setup paramiko
$ pip3 setup httplib2
$ pip3 setup pyyaml
$ pip3 setup Geohash
$ pip3 setup python-geohash
$ pip3 setup deepdiff
$ pip3 setup pyes
Hiện tại, sửa đổi phía dưới là bắt buộc đối với ứng dụng khách Python 3 phổ biến, nếu không, bạn sẽ gặp lỗi
Vỏ bọc1
2
3
$ vi /usr/lib64/python3.6//ứng dụng khách . py.py
đoạn đến đoạn. mã hóa() trong tương tự . the below:
1078 chunk = f'len(chunk):Xrn'. mã hóa('ascii') + chunk.encode()
Thiết lập trực tiếp và môi trường tự nhiên thiên nhiên ảoVỏ bọc
1
2
3
4
5
6
7
8
9
10
11
12
13
# yum -y setup https. // centos7. hiệp hội ius. org/ius-phát hành. vòng/phút
# list yum có sẵn > /tmp/available_pkgs. txt
# con mèo /tmp/available_pkgs. txt. egrep python3
# yum -y setup python36u
#trăn3. 6 --phiên bản
# yum -y setup python36u-pip
# yum -y setup python36u-devel
#trăn3. 6 -V
# mkdir ~/môi trường tự nhiên thiên nhiên
# cd ~/môi trường tự nhiên thiên nhiên/
#trăn3. 6 -m venv my_env
# nguồn ~/môi trường tự nhiên thiên nhiên/my_env/bin/kích hoạt
#trăn -V
Cài đặt những thư viện thiết yếu
Vỏ bọc1
2
3
4
5
6
7
8
9
10
#píp3. 6 yêu cầu setup
#píp3. 6 setup sgmllib3k
#píp3. 6 setup tham số
#píp3. 6 setup httplib2
#píp3. 6 setup pyyaml
#píp3. 6 setup pytz
#píp3. 6 setup Geohash
#píp3. 6 install python-geohash
#píp3. 6 setup deepdiff
#píp3. 6 setup pyes
Thực hiện setup Couchbase CSDK và Python SDK trên nô lệ mới
Vỏ bọc1
2
3
4
5
# yum -y setup wget git
# quên . //gói. đế đi văng. com/releases/couchbase-release/couchbase-release-1. 0-6-x86_64. vòng/phút
# rpm -iv couchbase-release-1. 0-6-x86_64. vòng/phút
# yum setup libcouchbase-devel libcouchbase2-bin gcc gcc-C++
#píp3. 6 setup couchbase
Hiện tại, sửa đổi phía dưới là bắt buộc đối với ứng dụng khách Python 3 phổ biến, nếu không, bạn sẽ gặp lỗi
Vỏ bọc1
2
3
$ vi /usr/lib64/python3.6//ứng dụng khách . py.py
đoạn đến đoạn. mã hóa() trong tương tự . the below:
1078 chunk = f'len(chunk):Xrn'. mã hóa('ascii') + chunk.encode()
Thiết lập trực tiếpVỏ bọc
1
# apt setup python3-pip
Cài đặt những thư viện thiết yếu
Vỏ bọc1
2
3
4
5
6
7
8
9
# pip3 setup sgmllib3k
# pip3 setup tham số
# pip3 setup httplib2
# pip3 setup pyyaml
# pip3 setup pytz (LƯU Ý. được sử dụng bởi những bài kiểm tra xdcr)
# pip3 setup Geohash
# pip3 setup python-geohash
# pip3 setup deepdiff
# pip3 setup pyes
Cài đặt setup CSDK và Python SDK. (Tham khảo. https. // tài liệu. đế đi văng. com/c-sdk/2. 10/khởi đầu sử dụng-sdk. html )
Vỏ bọc1
2
3
4
5
6
7
8
# quên -O- . //gói. đế đi văng. com/ubuntu/couchbase. Chìa khóa. sudo apt-key thêm -
# con mèo/etc/apt/nguồn. list. d/couchbase. list
deb [ arch=amd64 ] ://gói. đế đi văng. com/bản phát hành/couchbase-server/enterprise/deb/ bionic bionic/main
deb [ arch=amd64 ] ://gói. đế đi văng. com/bản phát hành/couchbase-server/community/deb/ bionic bionic/main
deb . //gói. đế đi văng. com/ubuntu bionic bionic/main
# update apt-get
# apt-get install libcouchbase-dev libcouchbase2-bin build-essential
# pip3 setup couchbase
Hiện tại, sửa đổi phía dưới là bắt buộc đối với ứng dụng khách Python 3 phổ biến, nếu không, bạn sẽ gặp lỗi
Vỏ bọc1
2
3
$ vi /usr/lib64/python3.6//ứng dụng khách . py.py
đoạn đến đoạn. mã hóa() trong tương tự . the below:
1078 chunk = f'len(chunk):Xrn'. mã hóa('ascii') + chunk.encode()
Tải xuống và setup. https. //www. con trăn. org/ftp/trăn/3. 7. 4/trăn-3. 7. 4. exePowerShell
1
2
3
4
C. PythonPython37- . >python.exe -VPython 3 . 7 . 4
D. py3portingtestrunner> . set PATH=C:PythonPython37- . ;C:PythonPython37-Scripts;%PATH%
D. py3portingtestrunner>pip3 -V
pip 19 . 0 . 3 từ c. pythonpython37- . libsite-packagespip (python 3. 7 )
Cài đặt những thư viện thiết yếu
PowerShell1
2
3
4
5
6
7
8
9
pip3 setup libcouchbase
pip3 setup sgmllib3k
pip3 setup paramiko
pip3 setup httplib2
pip3 setup pyyaml
pip3 setup Geohash
pip3 setup python-geohash
pip3 setup deepdiff
pip3 setup pyes
quá trình chuyển
Ở Lever cao, quá trình chuyển là một quy trình gồm ba bước. 1) Chuyển đổi tự động 2) Thay đổi thủ công 3) Xác thực và sửa lỗi trong thời gian chạy
Lúc đầu, sao chép kho tàng trữ gốc và có những thay đổi quy đổi tự động cơ bản. Kiểm tra những thay đổi dưới dạng kho tàng trữ mới cho tới lúc hoàn tất quy đổi hoàn toàn. Bằng cách này, những chu kỳ luân hồi hồi quy hiện tại hoàn toàn có thể ra mắt liên tục
1. quy đổi tự động
Có một công cụ tự động được gọi là công cụ 2to3 tool do nhóm Python 3 đáp ứng để trợ giúp .
Bạn hoàn toàn có thể khởi đầu với một thư mục duy nhất trong không khí thao tác được nhân bản cục bộ để kiểm tra lại. Sau đó, việc quy đổi hoàn toàn có thể được thực hiện hoàn toàn trên toàn bộ mã để quá trình quy đổi cơ bản được thực hiện
Dưới đây là một số trong những lệnh quy đổi 2to3 mẫu trên MacOS. Trong lệnh ở đầu cuối, lưu ý rằng tất cả những thành ngữ đã được áp dụng. Bằng cách này, lần quy đổi đầu tiên hoàn toàn có thể xử lý những thay đổi chính
Vỏ bọc1
2
3
4
5
6
(myenv) jmunta-mac:myscripts jagadeshmunta$ 2to3 . -o mới -n . -w .
hq-mac. testrunner jagadeshmunta$ cd lib . ; mv lib/couchbase_helper .. /couchbase_helper
hq-mac. testrunner jagadeshmunta$ 2to3 - . f all -f buffer -f idioms -f set_literal -f ws_comma -n -o ~/p3testrunner_3 -w . . tee ~/2to3_3. txt
hq-mac. người chạy thử nghiệm jagadeshmunta$ thời gian 2to3 . -f all -f buffer -f idioms -f set_literal -f ws_comma -n -w . . tee ~/2to3_4. txt
$ 2 ăn 3 -f tất cả -f buffer -f idioms -f set_literal -f ws_comma -n -o ~/p3testrunner_helper -w .. /couchbase_helper . tee ~/2to3_helper. txt
cp -R ~/p3testrunner_helper/* .
2. Thay đổi thủ công
Chuyển đổi tự động không thực hiện chuyển hoàn hảo nhất. Các sự cố phổ biến dưới đây hoàn toàn có thể gặp phải trong quá trình quy đổi so với những thay đổi cú pháp phổ biến được thực hiện bởi công cụ 2to3 quy đổi tự động.
Chạy lớp kiểm tra và xem có lỗi nào không và sửa một cách thích hợp, quyết định chuyển từ byte sang str hoặc str sang byte hoặc một số trong những vấn đề sắp xếp/so sánh trong đó người ta phải sửa tên khóa trong hàm được sắp xếp. Đây là quy trình lặp đi lặp lại cho tới lúc tất cả thời gian chạy mã được xác thực
Khi một mẫu chung chắc như đinh rõ ràng, thì bạn hoàn toàn có thể thực hiện grep và sed để thay thế trên nhiều tệp lớp. Nếu bạn không chắc như đinh về mã khác cho tới lúc chạy, thì hãy hoãn lại cho tới lúc lớp kiểm tra đó được thực thi.
Có thể có vấn đề với những thư viện/mô-đun của bên thứ ba hoàn toàn có thể đã thay đổi, những vấn đề đó cần phải tìm kiếm trên web và sử dụng một cách thích hợp
Đảm bảo tất cả đường dẫn mã được bao trùm bằng phương pháp chạy trên tất cả những nền tảng và thông số được tương hỗ
3. Xác thực thời gian chạy và sửa lỗi
Khi quá trình quy đổi hoàn tất, hãy thực hiện nhiều thời gian chạy mã vì Python là ngôn từ động. Mặt khác, những thay đổi hoàn toàn có thể phá vỡ mọi thứ nếu bạn chỉ kiểm tra/thay đổi mã tĩnh trực quan. Bạn hoàn toàn có thể khởi đầu với những bài kiểm tra độ đúng chuẩn cơ bản, bài kiểm tra đồng ý và sau đó chọn những bài kiểm tra đầy đủ từ một mô-đun kiểm tra duy nhất
Khi bạn cảm thấy thoải mái, hãy lần lượt thực hiện với tất cả những mô-đun khác. Tiếp tục kiểm tra những thay đổi đối với kho tàng trữ mới. Ngoài ra, bạn cần đảm bảo không còn hồi quy với những thay đổi được chuyển từ kho tàng trữ mới này bằng phương pháp chạy kiểm tra độ đúng chuẩn trên những bản dựng mới hơn. Ngoài ra, quá trình xác thực phải gồm có tất cả những nền tảng được tương hỗ với Python 3
Python 3 Ported Mã và trạng thái
Dưới đây là nơi tìm kho tàng trữ mới cho mã chuyển Python 3 cho tới lúc nó được hợp nhất vào kho tàng trữ chính. Kế hoạch là thực hiện một chu kỳ luân hồi chuyển hoặc thực hiện trung gian những thay đổi từ repo chính và thực hiện hợp nhất thủ công với điều này
https. //github. com/couchbaselabs/testrunner-py3/
(Chi nhánh. sư phụ)
Nhiều thay đổi phổ biến đã được thực hiện nhưng chưa hoàn thành xong vì hoàn toàn có thể có một số trong những vấn đề về thời gian chạy khác. Các bản sửa lỗi chung cũng hoàn toàn có thể được hồi quy về những bản sửa lỗi trước đó do những giả định về quy đổi loại giá trị đầu vào. Vẫn còn một số trong những mã được chuyển nữa cần phải xác thực bằng Python 3 và nỗ lực vẫn đang được tiến hành
Bây giờ, hãy để tôi chỉ cho bạn những sự cố thường gặp xảy ra trong quá trình xác thực thời gian chạy. Bạn hoàn toàn có thể sử dụng điều này làm tài liệu tham khảo khi gặp sự cố để xem bạn có gặp sự cố tương tự không. Bạn hoàn toàn có thể áp dụng giải pháp tương tự và xem nó có hiệu suất cao với bạn không. Và nếu bạn có bất kỳ ý tưởng mới nào, bạn hoàn toàn có thể đưa chúng vào phần nhận xét.
Các vấn đề về thời gian chạy chung
1. Các vấn đề)
- Bạn hoàn toàn có thể gặp một số trong những TypeErrors phía dưới trong thời gian chạy như str thay vì byte và byte thay vì strLỗi #1. LoạiLỗi. can’t concat str to bytesLỗi #2. LoạiLỗi. phải là str, không phải byte
- con trăn
1
2
3
4
5
6
7
Tệp "lib/mc_bin_client. py", dòng 53, in __init__
tin nhắn nếu msg. siêu thư += ". " + str(tin nhắn)
TypeError. phải là str, không bytes
Tệp "lib/mc_bin_client. py", dòng 141, in _recvMsg
phản hồi += tài liệu
TypeError. phải là str, không bytes
- con trăn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Tệp "lib/remote/remote_util. py", dòng 3038, in log_command_output
if "Cảnh báo" trong dòng vàvà . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . và . "hugepages" in line:
TypeError. a byte-như đối tượng object is required, not 'str'
Tệp "lib/task/task. py", dòng 1167, in run_high_throughput_mode
tăng Ngoại lệ(rv["err"])
Ngoại lệ. a byte-như đối tượng object is required, not 'str'
Tệp "lib/mc_bin_client. py", dòng 936, in _set_vbucket
bản thân. vbucketId = ((( . zlib.crc32(phím)) . >> 16) & 0x7fff) & (self.vbucket_count - 1)
TypeError. a byte-như đối tượng object is required, not 'str'
Tệp "lib/mc_bin_client. py", dòng 148, in _recvMsg
ma thuật = struct. giải nén(">B", response[0:1])[0]
TypeError. a byte-như đối tượng object is required, not 'str'
Tệp "lib/remote/remote_util. py", dòng 4560, in check_cmd
if out and command_output in out[0]:
TypeError. a byte-như đối tượng object is required, not 'str'
- con trăn
1
2
3
4
5
6
7
Tệp "lib/mc_bin_client. py", dòng 126, in _sendMsg
bản thân. s. gửi(tin nhắn + tiêu đề phụ + key + val + extended_meta_data)
TypeError. hoàn toàn có thể ' t concat str to bytes
Tệp "/usr/lib64/python3. 6/urllib/phân tích cú pháp. py", dòng 120, in _coerce_args
raise TypeError("Không thể trộn đối số str và không phải str")
TypeError. Không thể trộn str và không-str arguments
Xem nhiều chủng loại biến trong câu lệnh và sử dụng xxx. encode() để lấy byte hoặc xxx. decode() để lấy chuỗi hoặc sử dụng tiền tố b hoặc sử dụng str(). Đôi khi, đầu vào hoàn toàn có thể không xác định và trong trường hợp này, hãy sử dụng try x. mã hóa() ngoại trừ AttributeError. vượt qua
2. Các vấn đề)
TypeError. root – LỖI – ——-> setup không thành công. một đối tượng in như byte là bắt buộc, không phải là 'str'
Các giải pháp).Trong trường hợp này, hãy thêm b làm tiền tố cho chuỗi được so sánh hoặc thay đổi loại byte thành loại chuỗi. Ví dụ. lib/từ xa/remote_util. py
con trăn1
2
if o[0] != b"".
o = o[0].tách(b" ")
Bao quanh bằng try-ngoại trừ để kiểm tra đúng chuẩn dòng gây ra lỗi (nói ở trên TypeError. )
con trăn1
2
3
4
5
6
7
8
9
10
11
nhập truy ngược
thử.
..
ngoại trừ Ngoại lệ như e.
log. thông tin("". định dạng(e))
truy ngược. print_exc()
exc_type, exc_obj, exc_tb = sys.exc_info()
tên = os. đường dẫn. tách(exc_tb. tb_frame. f_code. co_filename)[1]
in(exc_type, fname, exc_tb.tb_lineno)
Đầu ra mẫu sau khi truy nguyên. print_exec() để xem dấu vết ngăn xếp đầy đủ tương tự như java
Khắc phục bằng những thay đổi đối với lib/remote/remote_util. py như dưới đây
con trăn1
2
3
4
5
6
3079 for line in output:
3080 try:
3081 line=line.giải thuật()
3082 except AttributeError:
3083 pass
3. Các vấn đề)con trăn1
2
3
Tệp "lib/membase/api/rest_client. py", dòng 4178, in multiscan_count_for_gsi_index_with_rest
nội dung = nội dung. tách("[]")[0]
TypeError. a byte-như đối tượng object is required, not 'str'
Các giải pháp)con trăn
1
nội dung = nội dung. tách(b'[]')[0].giải thuật()
4. Các vấn đề)
AttributeError suite_setUp() hoặc suite_tearDown() bị thiếu đối với một số trong những bộ thử nghiệm
con trăn1
Lỗi thuộc tính. loại đối tượng 'XDCRAdvFilterTests' có no attribute 'suite_setUp'
Các giải pháp)Thêm những phương thức suite_setUp() và suite_tearDown() giả.
Vỏ bọc1
2
3
4
5
6
7
8
11a12,18
>
> def suite_setUp(self):
> in("*** XDCRAdvFilterTests. suite_Setup() ***")
>
> def suite_tearDown(self):
> print("*** XDCRAdvFilterTests . suite_tearDown() ***")
>
5. Các vấn đề)con trăn
1
2
3
Tệp ". /người kiểm tra. py", dòng 416, in main
kết quả. lỗi = [(tên . , e.thông báo)]
Lỗi thuộc tính. 'AttributeError' đối tượng có không còn attribute 'message'
Các giải pháp)con trăn
1
kết quả. lỗi = [(tên, str(e))]
6. Các vấn đề)
Lỗi thuộc tính. Đối tượng ‘Transport’ không còn thuộc tính ‘_Thread__stop’
con trăn1
2
3
4
5
6
7
8
9
10
Tệp ". /người kiểm tra. py", dòng 529, in main
t. _Thread__stop()
Lỗi thuộc tính. 'Vận chuyển' đối tượng có không còn attribute '_Thread__stop'
Tệp "pytests/view/viewquerytests. py", dòng 45, in stop
bản thân. _Thread__stop()
Lỗi thuộc tính. 'StoppableThread' đối tượng có không attribute '_Thread__stop'
bản thân. _stop()
TypeError. 'Sự kiện' đối tượng là không phải callable
Các giải pháp)There is no direct stopping of a non-daemonic thread. Nhưng sử dụng cú pháp khôn ngoan t. _dừng lại(). Đề xuất là sử dụng tính năng tắt máy duyên dáng bằng phương pháp sử dụng cờ chung và kiểm tra run() của luồng để ngắt
(https. // stackoverflow. com/questions/27102881/python-threading-self-stop-sự kiện-object-is-not-callable)
7. Các vấn đề)hết hạn kiểm tra. Hạn sử dụng. không tìm thấy test_expired_keys. mô-đun 'chuỗi' không còn thuộc tính 'dịch'
Các giải pháp)Viết lại bằng những phương thức tĩnh str. Không có cách cũ để lấy tất cả những ký tự, vì vậy chúng tôi đã sử dụng mã trước đó và sử dụng tổng số
vi lib/membase/api/tap. py
con trăn1
2
3
4
5
6
7
8
def buildGoodSet(goodChars=string.hoàn toàn có thể in được, badChar=' . ):
143 """Tạo bảng dịch biến tất cả những ký tự không thành GoodChars
144 đến badChar"""
145 allChars = 'x00x01x02x03x04x05x06x07x08tnx0bx0crx0ex0fx10x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1f !"#$%&'()*+,-./0123 456789:;[email protected][\]^_`abcdefghijklmnopqrstuvwxyz~x7fx80x81x82x83x84x85x86x87x88x89x8ax8bx8cx8dx8ex8fx90x91x92x9 3x94x95x96x97x98x99x9ax9bx9cx9dx9ex9fxa0xa1xa2xa3xa4xa5xa6xa7xa8xa9xaaxabxacxadxaexafxb0xb1xb2xb3xb4xb5xb6xb7xb8xb9xbax bbxbcxbdxbexbfxc0xc1xc2xc3xc4xc5xc6xc7xc8xc9xcaxcbxccxcdxcexcfxd0xd1xd2xd3xd4xd5xd6xd7xd8xd9xdaxdbxdcxddxdexdfxe0xe1xe2 xe3xe4xe5xe6xe7xe8xe9xeaxebxecxedxeexefxf0xf1xf2xf3xf4xf5xf6xf7xf8xf9xfaxfbxfcxfdxfexff'
146 ký tự xấu = str.maketrans(allChars, allChars, goodChars)
147 badchars1=str.dịch(allChars,badchars)
148 rv = str.maketrans(badchars1, badChars * len(badchars1))
149 return rv
8. Các vấn đề)
TabLỗi. inconsistent use of tabs and spaces in indentation
con trăn1
2
3
4
Tệp "pytests/security/audittest. py", dòng 396
shell = RemoteMachineShellConnection(self. chính chủ)
^
Lỗi tab. không nhất quán việc sử dụng của tab và spaces in indentation
Các giải pháp)
Tìm kiếm ký tự tab và thay thế bằng ký tự khoảng chừng trắng.
Đối với sự cố trên, hãy xóa những ký tự tab
Vỏ bọc1
sed -i 's/t/ /g' pytests/security/audittest.py
9. Các vấn đề)con trăn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Tệp "lib/couchbase_helper/documentgenerator. py", dòng 83, in __next__
giá trị = arg[hạt % len(arg)]
TypeError. list chỉ số phải là số nguyênor slices, not float
Tệp "lib/membase/helper/bucket_helper. py", dòng 517, in load_some_data
key = ["key_%s_%d" % (testuuid, i) for i in range(number_of_buckets)]
TypeError. 'float' đối tượng không thể là interpreted as an integer
File "lib/membase/helper/bucket_helper. py", dòng 372, in verify_data
kiểm tra. assertEqual(giá trị, khóa, msg='values dont match')
Lỗi xác định. b'key_d918f450-5858-4430-a016-230e1f45bcf9_0' . = 'key_d918f450-5858-4430-a016-230e1f45bcf9_0' . giá trị không khớp
Tệp "pytests/setgettests. py", dòng 90, in set_get_test
bản thân. kiểm tra. không thành công("giá trị không khớp với khóa 0". định dạng(khóa))
Lỗi xác định. value mismatch for key 9fcbd36f-e34d-477b-9fc5-0a5d067dff4b
File "pytests/security/auditmain. py", dòng 320, in returnFieldsDef
if (isinstance((particulars['mandatory_fields'][items. mã hóa('utf-8')]), dict)):
KeyError. b'bucket_name'
Tệp "lib/task/task. py", dòng 2370, in _check_ddoc_revision
new_rev_id = chính mình. _parse_revision(meta['])
Lỗi phím. 'rev'
Các giải pháp)Case sensitiveness issue. Đã sửa lỗi bằng phương pháp thay đổi từ khóa x_couchbase_meta thành X_Couchbase_Meta
10. Các vấn đề)
- Lỗi #1. LoạiLỗi. 'Lỗi #2. LoạiLỗi. 'cmp' là một đối số từ khóa không hợp lệ cho hiệu suất cao này
1
2
3
File "pytests/tuqquery/tuq_dml. py", dòng 455, in test_insert_with_select
expected_result = đã sắp xếp([bucket.tên. 'tên'. doc['name'] for doc in values[:num_docs]])
TypeError. ' không được tương hỗ giữa instances of 'dict' and 'dict'
Các giải pháp)con trăn1
expected_result = sắp xếp(expected_result,key=(lambda x: x[xô. tên]['tên']))
11. Các vấn đề)con trăn
1
2
3
Tệp "pytests/tuqquery/tuq_2i_index. py", dòng 1057, in test_simple_array_index
bản thân. assertTrue(đã sắp xếp(actual_result_within['results']) == sorted(expected_result['results']))
TypeError. ' không được tương hỗ giữa instances of 'dict' and 'dict'
Các giải pháp)1
2
3
- self.assertTrue(sắp xếp(actual_result_within['results']) == sorted(expected_result['results']))
+ self.assertTrue(sắp xếp(actual_result_within . ['results'], key=(lambda x: x['name'])) ==
+ sorted(expected_result['results'], key=(lambda x: x['name'])))
12. Các vấn đề)con trăn
1
2
3
4
5
6
7
Tệp "pytests/tuqquery/tuq. py", line 1221, in _verify_results
bản thân. không đạt("Kết quả không đúng chuẩn. Số thực tế %s. Expected num. %S. n" % (len(actual_result), len(expected_result)))
Lỗi xác định. Kết quả là không đúng chuẩn. Actual num 0. Dự kiến num. 72.
Tệp "lib/task/task. py", dòng 3638, in filter_emitted_rows
reverse=descending_set)
TypeError. 'cmp' là và không hợp lệ keyword argument for this function
Các giải pháp)con trăn1
expected_rows = đã sắp xếp(chính mình.emitted_rows, key=(lambda x. (x['key'],x['id'])),reverse=descending_set)
13. Problem(s)con trăn
1
2
3
Tệp "lib/tasks/task. py", dòng 3675, in listcomp>
expected_rows = [row for row in expected_rows if row['key'] >= start_key and row['key'] end_key]
TypeError. '>=' not supported between instances of 'int' and 'NoneType'
Các giải pháp)Ở đây, nó sẽ trả về int vì python 3 không tự động so sánh như trong python 2
14. Các vấn đề)con trăn
1
hasattr(mục, ' iteritems’) doesn’t return true
Các giải pháp)con trăn1
2
3
4
5
6
7
8
@@ -754,7 +755,7 @@ class MemcachedClient(object):
# Nếu đây là lệnh, hãy quy đổi nó thành trình tạo cặp
bộ sưu tập = bản thân. collection_name(bộ sưu tập)
- if hasattr(items, 'iteritems'):
+ if hasattr(items, 'items'):
items = iter(items.items())
if hasattr(item, 'items'):
15. Các vấn đề)con trăn
1
2
3
Tệp "lib/crc32. py", line 78, in crc32_ hash
crc = (crc >> 8) ^ crc32tab[int((crc ^ ord(ch)) & 0xff)]
TypeError. ord() expected string of length 1, but int found
Các giải pháp)Converted the key to string so that ch is string instead of int with binary key. xem tập tin
con trăn1
2
3
4
thử.
phím = phím. giải thuật()
except
AttributeError. pass
16. Problem(s)
LoạiLỗi. ‘FileNotFoundError’ object is not sub-scriptable
Các giải pháp)Đã thay đổi trong Python 3 vì FileNotFoundError không thể tập lệnh phụ và thay vào đó, hãy sử dụng thuộc tính errno, e. sai lầm
con trăn1
2
3
4
5
File "lib/remote/remote_util. py", dòng 1714, in create_directory
if e[0] == 2.
TypeError. 'FileNotFoundError' object is not subscriptable
- if e[0] == 2.
+ if e. errno == 2.
17. Các vấn đề)con trăn
1
2
3
4
5
6
Traceback (most recent call last).
File "lib/couchbase_helper/tuq_helper. py", dòng 521, in run_query_and_verify_result
bản thân. _verify_results(sorted_actual_result, sorted_expected_result)
File "lib/couchbase_helper/tuq_helper. py", dòng 114, in _verify_results
raise Exception(msg)
Ngoại lệ. The number of rows match but the results mismatch, please check
Các giải pháp)The nested dictionary/list comparison was not working because of the earlier sorted function to sort completely is now not available. Use deepdiff module and DeepDiff class to do the comparison
18. Các vấn đề)
Lỗi thuộc tính. module ‘string’ has no attribute ‘replace’
1
2
3
Tệp "scripts/populateIni. py", line 52, in main
tài liệu[i] = string.replace(data[i], 'dynamic', servers[0])
AttributeError. module 'string' has no attribute 'replace'
Các giải pháp)Sử dụng biến str trực tiếp để thay thế như hình phía dưới để khắc phục sự cố
con trăn1
tài liệu[i]. replace( 'dynamic', servers[0])
19. Các vấn đề)con trăn
1
TypeError. '>' không được tương hỗ giữa instances of 'int' and 'str'
Các giải pháp)Use str or int function appropriately
con trăn1
2
if where_clause.
+ where_clause = where_clause.thay thế('if t > "', 'if str(t) > "') # to fix the type error between int, str comparison
20. Các vấn đề)
TênLỗi. name ‘cmp’ is not defined
Các giải pháp)Sử dụng mô-đun deepdiff và lớp DeepDiff để so sánh đối tượng
21. Problem(s)con trăn
1
2
3
Tệp "lib/couchbase_helper/tuq_helper. py", line 782, in verify_indexes_ redistributed
if cmp(items_count_before_rebalance, items_count_after_rebalance) . = 0.
Lỗi Tên. name 'cmp' is not defined
Các giải pháp)con trăn1
2
3
4
5
Sử dụng deepdiff mô-đun và DeepDiff class to do object comparison.
- if cmp(index_state_before_rebalance, index_state_after_rebalance) != 0.
+ if DeepDiff(index_state_before_rebalance, index_sFile "lib/couchbase_helper/documentgenerator.py", line 19, in has_ next
trả về chính mình. itr chính mình. end
TypeError. ' không được tương hỗ giữa instances of 'int' and 'str'
Chuyển đổi str thành int như phía dưới cho việc cố lỗi loại ở trên
con trăn1
return int(self. itr) int(self. end)
—-
Hiện tại, đó là tất cả trong list những sự cố cần theo dõi khi bạn tăng cấp Python phiên bản 2 lên Python phiên bản 3. Chúng tôi sẽ đăng nhiều bài học kinh nghiệm tay nghề hơn trong những bài đăng trên blog trong tương lai. Trong khi chờ đón, chúc như mong ước di cư
Đọc thêm
Các tài liệu tham khảo sau đây đã giúp chúng tôi. Bạn cũng hoàn toàn có thể đọc thêm tại những link tham khảo phía dưới để biết thêm rõ ràng và cải tổ mã của bạn khi chuyển sang Python 3
https. //www. python. org/dev/peps/pep-0373/https. //wiki. python. org/moin/Python2orPython3https. //www. đỉnh cao. com/python/python-3-is-it-worth-the-switchhttps. //weknowinc. com/blog/running-multiple-python-versions-mac-osxhttps. // tài liệu. python. org/3/howto/pyporting. htmlhttps. //wsvincent. com/install-python3-mac/. //python3porting. com/pdfs/SupportingPython3-screen-1. 0-latest. pdfhttps. //riptutorial. com/Download/python-language. pdfhttps. //docs. couchbase. com/python-sdk/2. 5/start-using-sdk. htmlhttps. //docs. couchbase. com/c-sdk/2. 10/start-using-sdk. htmlhttps. //pypi. org/project/deepdiff/https. //buildmedia. readthedocs. org/truyền thông/pdf/portingguide/latest/portingguide. pdfhttp. //ptgmedia. pearsoncmg. com/imprint_downloads/informit/promotions/python/python2python3. pdfHope you had a good time reading
Disclaimer. Please view this as a quick reference for your Python 3 upgrade, rather than a complete guide to resolving porting issues. Our intent here is to help you some level and give you a jump start on the porting process. Please feel không lấy phí to share if you learned something new that can help us. Your positive feedback is appreciated