Sử dụng gói Python 2 trong Python 3

Bạn đang bắt đầu làm việc trên một dự án mới và một trong những phần phụ thuộc của bạn vẫn không hỗ trợ Python 3 — argh

Dưới đây là hướng dẫn nhanh về cách giải quyết vấn đề đó, từng bước một

Gói ví dụ của chúng tôi là thư viện máy khách cho Qualys [một sản phẩm bảo mật]

Bước 0. Kiểm tra xem không ai khác đã giải quyết vấn đề này

Trước khi bạn rẽ nhánh dự án, hãy kiểm tra xem có ai khác đã gặp sự cố này trước đây không, có sự cố nào trong GitHub không?

Bước 1. nĩa nó

Khi bạn bắt đầu, bạn sẽ cần rẽ nhánh dự án ban đầu. Thông thường, ở cuối chi tiết gói trên PyPi, bạn có thể thấy các phiên bản Python được hỗ trợ. Mọi người thường bỏ qua thông tin này đối với các gói chỉ dành cho Python 2

Chuyển đến dự án GitHub và tạo ngã ba của bạn, tải xuống và sao chép gói. Tạo một nhánh ngay trước khi bạn bắt đầu thay đổi

Bước 2. Báo cáo in

Điều đầu tiên bạn thường gặp phải trước khi bắt đầu lo lắng về việc nhập chỉ là các câu lệnh in đơn giản. Câu lệnh in không có dấu ngoặc đơn là rào cản Python 3 “không thân thiện” phổ biến nhất mà tôi gặp phải. Chúng tôi sẽ sử dụng gói Python-Modernize trong Bước 3, nhưng điều này sẽ không bắt được các tệp README, tài liệu và ví dụ về mã

fgrep -r “print ” .

Ok, chúng tôi có 18 lần xuất hiện trong gói của mình, bao gồm một số lần trong. /. git/ [mà chúng tôi bỏ qua. Đi vào trình chỉnh sửa yêu thích của bạn và sửa tất cả những thứ đó

Sau đó kiểm tra lô đó trong một cam kết duy nhất git commit -a -m “print to python 3”

Bước 3. bài kiểm tra

Cách “tốt nhất” để kiểm tra khả năng tương thích của Python 2 và 3 là thông qua kiểm tra hoàn chỉnh và dịch vụ CI như Circle, Snap hoặc Travis

Nhưng đoán xem. Gói của bạn không có bất kỳ bài kiểm tra nào. D'oh. Bạn có 2 lựa chọn — 1] viết bài kiểm tra, trở thành một công dân tốt 2] thực hiện một số phân tích tĩnh

Phân tích tĩnh

Cài đặt python Hiện đại hóa với pip install modernize và chạy nó ở chế độ thông tin trước python-modernize qualysapi, đọc qua đầu ra và hiểu chung về những gì nó muốn thay đổi. Nhìn ổn chứ?

python-modernize -wn qualysapi sau đó cam kết những thay đổi đó trong một lần đăng ký khác

Thêm bài kiểm tra

Thử nghiệm cơ bản nhất là tôi có thể nhập mô-đun/gói/mô-đun con không? . Nhìn vào dự án Tox để chạy thử nghiệm trên nhiều môi trường

Kiểm tra thứ hai bạn muốn xem là liệu dự án này có thực hiện bất kỳ xử lý chuỗi nào không. Có nhiều hơn những gì tôi có thể trình bày chi tiết trong bài đăng trên blog này về các chuỗi Python 3, nhưng hãy xem sáu dự án giải quyết vấn đề “nó có phải là một chuỗi không” và cả việc sử dụng các phương thức chuyển đổi byte và unicode

Thứ ba là sẽ yêu cầu một số kinh nghiệm với gói. Bạn không thể viết bài kiểm tra đơn vị từ cơ sở mã hiện có khi bạn không biết liệu nó có hoạt động hay không. Tập trung vào thử nghiệm tích hợp và làm việc lạc hậu. Hãy thử viết một tập lệnh đơn giản sử dụng gói như dự định. Sau đó, xây dựng một số thử nghiệm xung quanh các tình huống đó

Bước 4. Cập nhật thiết lập. py

Kiểm tra thiết lập. py để xem cần thực hiện những thay đổi nào để nói với cả thế giới rằng gói này hỗ trợ Python 3

Ok, một số thú cưng của tôi xuất hiện ở đây

  1. Nó nói giấy phép BSD và Apache 2?. Nhưng trong các tệp mã có ghi Apache 2 và trong thư mục không có tệp GIẤY PHÉP. Điều này thực sự phổ biến và bạn gặp sự cố vì về cơ bản, nó không được cấp phép hợp lệ trên cả hai. Tôi sẽ giả sử thiết lập. py là một lỗi sao chép + dán và cập nhật nó ở đây, sau đó thêm tệp GIẤY PHÉP
  2. Markdown không hiển thị trong pypi [theo ảnh chụp màn hình]. Bạn có thể sống với điều này hoặc thay đổi nó thành tệp RST. Hãy nhớ rằng đây không phải là dự án của bạn, vì vậy hãy tử tế
  3. Nó không nói nó hỗ trợ phiên bản Python nào. Vì vậy, hãy thêm điều đó nữa
  4. Sử dụng Python-Modernize có nghĩa là gói có thời gian chạy phụ thuộc vào gói sáu. Thêm phần này vào install_requires

Xem trường install_requires ở phía dưới?

Bước 5. Cài đặt nó vào dự án ban đầu của bạn

Ok, bây giờ quay lại từ đầu- chúng tôi đang làm việc trên một dự án và gặp khó khăn với gói này? . Trước tiên hãy đảm bảo rằng bạn đẩy các thay đổi của mình lên github [git push origin python3]. Pip cho phép bạn không chỉ cài đặt trực tiếp từ PyPi mà còn từ kho lưu trữ Git. Bạn cũng có thể chỉ định nhánh sau URL bằng biểu tượng @. Egg= được sử dụng để nói với Pip tên gói

-e git+https. //github. com/tonybaloney/qualysapi@python3#egg=qualysapi

Đây là nơi bạn có thể tiếp tục chạy thử nghiệm tích hợp vững chắc với phiên bản mới

Bước 6. Tăng yêu cầu kéo

Bây giờ, quay lại GitHub, bạn sẽ muốn chia sẻ công việc của mình với tác giả và cộng đồng Python rộng lớn hơn

  1. Hãy tử tế
  2. Giả sử bạn muốn sử dụng gói này với Python 3
  3. Cảm ơn họ vì đã làm việc chăm chỉ để hoàn thành gói hàng
  4. Giải thích những gì bạn đã làm

Đây là ví dụ của tôi https. //github. com/paragbaxi/qualysapi/pull/21

Đợi nó được hợp nhất và sau đó hy vọng bạn sẽ thấy bản cập nhật trên PyPi

Bước 7. 3 tháng sau?

Vì vậy, tác giả gói đã không hợp nhất mã của bạn. Không sao, nó xảy ra. Thường là do mọi người soạn thảo các gói như một phần công việc của họ và thay đổi công việc. Quay lại thiết lập. py và đặt tên mới cho gói [không thay đổi trường packages] như qualysapi-py3. Đẩy nó tới PyPi và sau đó cập nhật yêu cầu kéo bằng một thông báo cho biết tên của gói mới. Bằng cách đó, khi người tiếp theo tìm kiếm hỗ trợ Python 3, họ sẽ thấy bài đăng của bạn

Python 3 có thể sử dụng thư viện Python 2 không?

Python phiên bản 3 không tương thích ngược với Python 2 . Nhiều nhà phát triển gần đây đang tạo các thư viện mà bạn chỉ có thể sử dụng với Python 3. Nhiều thư viện cũ hơn được tạo cho Python 2 không tương thích với chuyển tiếp.

Làm cách nào để sử dụng Python 2 đến 3?

Chuyển đổi giữa môi trường Python 2 và Python 3 .
Tạo môi trường Python 2 có tên py2, cài đặt Python 2. 7. .
Tạo một môi trường mới có tên py3, cài đặt Python 3. 5. .
Kích hoạt và sử dụng môi trường Python 2. .
Vô hiệu hóa môi trường Python 2. .
Kích hoạt và sử dụng môi trường Python 3

Bạn có thể trộn Python 2 và 3 không?

Không "trộn lẫn" . Khi các gói và mô-đun khác nhau có sẵn trong Python 3, hãy sử dụng chuyển đổi 2to3 để tạo Python 3. Bạn sẽ tìm thấy một số vấn đề nhỏ. Sửa Python 2 của bạn để gói của bạn hoạt động trong Python 2 và cũng hoạt động sau khi chuyển đổi.

Là Python 2. 0 và 3. 0 chương trình tương thích với nhau?

Python 2 lưu trữ các chuỗi theo ASCII; . Python 2 có cú pháp phức tạp hơn Python 3. Nhiều thư viện Python 2 không tương thích về phía trước; . Python đã ngừng hỗ trợ Python 2 vào tháng 1 năm 2020;

Chủ Đề