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”
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. pyKiể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
- 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
- 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ế
- 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
- 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ạnOk, 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éoBâ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
- Hãy tử tế
- Giả sử bạn muốn sử dụng gói này với Python 3
- Cảm ơn họ vì đã làm việc chăm chỉ để hoàn thành gói hàng
- 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