Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python

Cách Viết, Đóng gói và Phân phối một Thư viện trong Python

by
Difficulty:IntermediateLength:MediumLanguages:

Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article)

Python là một ngôn ngữ lập trình tuyệt vời, nhưng việc đóng gói là một trong những điểm yếu nhất của nó. Nó là một thực tế được nhiều người biết đến trong cộng đồng. Việc cài đặt, import, sử dụng và tạo các gói đã được cải thiện rất nhiều trong nhiều năm qua, nhưng nó vẫn chưa bằng với những ngôn ngữ mới như Go và Rust những ngôn ngữ đã học hỏi rất nhiều từ những bất cập của Python và các ngôn ngữ lâu đời khác.

Trong bài hướng dẫn này, bạn sẽ học mọi thứ cần biết liên quan đến viết, đóng gói và phân phối các gói của riêng bạn.

Cách viết một Thư viện Python

Thư viện Python là bộ liên kết các mô đun Python được tổ chức dưới dạng một gói Python. Nói chung, điều đó có nghĩa là tất cả các mô-đun nằm trong cùng một thư mục và rằng thư mục này nằm trên đường dẫn tìm kiếm Python.

Hãy viết nhanh một gói Python 3 nho nhỏ và làm rõ tất cả những khái niệm này.

Pathology Package

Python 3 có một đối tượng Path tuyệt vời, là một cải tiến lớn so với mô-đun os.path vụng về của Python 2. Nhưng nó thiếu một khả năng quan trọng - tìm kiếm đường dẫn của script hiện tại. Điều này là rất quan trọng khi bạn muốn xác định vị trí của các tập tin truy cập liên quan đến script hiện tại.

Trong nhiều trường hợp, script có thể được cài đặt ở bất kỳ vị trí nào, vì vậy bạn không thể sử dụng các đường dẫn tuyệt đối, và thư mục hiện hành có thể được thiết lập thành bất kỳ giá trị nào, vì vậy bạn không thể sử dụng một đường dẫn tương đối. Nếu bạn muốn truy cập vào một tập tin trong một thư mục con hoặc thư mục cha, bạn phải có khả năng tìm ra thư mục của script hiện tại.

Đây là cách bạn làm điều đó trong Python:

Để truy cập vào một tập tin có tên là 'file.txt' trong một thư mục con 'data' trong thư mục hiện tại của script, bạn có thể sử dụng code sau: print(open(str(script_dir/'data/file.txt').read())

Với pathology package, bạn có một phương thức script_dir được tích hợp sẵn, và bạn sử dụng nó như sau:

Vâng, nó có chút xíu thôi. Pathology package rất đơn giản. Nó dẫn xuất lớp Path của riêng nó từ Path của pathlib và thêm một hàm tĩnh script_dir() luôn trả về đường dẫn của script đang gọi.

Dưới đây là phần cài đặt:

Do việc cài đặt đa nền tảng của pathlib.Path, bạn có thể dẫn xuất trực tiếp từ nó và phải dẫn xuất từ một lớp con cụ thể (PosixPath hoặc WindowsPath). Sự phân giải thư mục script sử dụng mô-đun inspect để tìm script gọi và sau đó thuộc tính tên tập tin của nó.

Thử nghiệm Pathology Package

Bất cứ khi nào bạn viết ra một cái gì đó quan trọng, bạn nên kiểm thử nó. Mô-đun pathology cũng không ngoại lệ. Dưới đây là các bài kiểm tra sử dụng framework unit test tiêu chuẩn:

Đường dẫn Python

Các gói Python phải được cài đặt ở đâu đó trên đường dẫn tìm kiếm của Python để được import bởi các mô-đun của Python. Đường dẫn tìm kiếm của Python là một danh sách các thư mục và luôn có sẵn trong sys.path. Dưới đây là sys.path hiện tại của tôi:

Lưu ý dòng trống đầu tiên của đầu ra đại diện cho thư mục hiện tại, vì vậy bạn có thể import các mô-đun từ thư mục hiện hành, bất kể nó là gì. Bạn có thể trực tiếp thêm hoặc xóa bớt các thư mục trong sys.path.

Bạn cũng có thể định nghĩa một biến môi trường PYTHONPATH, và có một vài cách khác để kiểm soát nó. site-packages tiêu chuẩn được bao gồm mặc định, và đây là nơi các gói mà bạn cài đặt bằng cách sử dụng pip go.

Cách Đóng gói một Thư viện Python

Bây giờ chúng ta có code và các bài kiểm tra, hãy đóng gói tất cả nó thành một thư viện thích hợp. Python cung cấp một cách dễ dàng thông qua mô-đun setup. Bạn tạo một tập tin có tên là setup.py trong thư mục gốc của gói. Sau đó, để tạo một phân phối nguồn (source distribution), bạn chạy lệnh: python setup.py sdist

Để tạo ra một phân phối nhị phân (binary distribution) gọi là wheel, bạn chạy lệnh: python setup.py bdist_wheel

Đây là tập tin setup.py của pathology package:

Nó bao gồm rất nhiều metadata bên cạnh phần tử 'packages' sử dụng hàm find_packages() được import từ setuptools để tìm ra các gói phụ.

Hãy xây dựng một phân phối nguồn:

Cảnh báo là do tôi đã sử dụng tập tin README.md không tiêu chuẩn. Không sao, chúng ta có thể bỏ qua nó. Kết quả là một tập tin tar-gzipped nằm trong thư mục dist:

Và đây là một phân phối nhị phân:

Pathology package chỉ có chứa các mô-đun Python thuần tuý, vì vậy một gói tổng quát có thể được xây dựng. Nếu gói của bạn có các phần mở rộng C, bạn sẽ phải xây dựng một wheel riêng cho mỗi nền tảng:

Để tìm hiểu sâu hơn về chủ đề đóng gói thư viện Python, hãy tham khảo bài viết Cách Viết các Gói Python của riêng bạn.

Cách Phân phối một gói Python

Python có một kho lưu trữ gói trung tâm được gọi là PyPI (Python Packages Index). Khi bạn cài đặt một gói Python bằng pip, nó sẽ tải gói từ PyPI (trừ khi bạn chỉ định một kho chứa khác). Để phân phối pathology package của chúng ta, chúng ta cần phải tải nó lên PyPI và cung cấp thêm một số matadata mà PyPI yêu cầu. Các bước là:

  • Tạo một tài khoản trên PyPI (chỉ một lần).
  • Đăng ký gói của bạn.
  • Tải gói của bạn lên.

Tạo một Tài khoản

Bạn có thể tạo một tài khoản trên trang web PyPI. Sau đó tạo một tập tin .pypirc trong thư mục home của bạn:

Để thử, bạn có thể thêm một máy chủ chỉ mục "pypitest" vào tập tin .pypirc của bạn:

Đăng ký Gói của bạn

Nếu đây là lần xuất bản đầu tiên của gói, bạn cần phải đăng ký nó với PyPI. Sử dụng lệnh register của setup.py. Nó sẽ hỏi mật khẩu của bạn. Lưu ý rằng tôi trỏ nó đến kho thử nghiệm ở đây:

Tải Gói của bạn lên

Bây giờ thì gói đã được đăng ký, chúng ta có thể tải nó lên. Tôi khuyên bạn nên sử dụng twine, là lựa chọn an toàn hơn. Cài đặt nó như bình thường bằng lệnh pip install twine. Sau đó, tải gói của bạn lên bằng twine và cung cấp mật khẩu của bạn (chỉnh lại lệnh ở bên dưới):

Để tìm hiểu sâu hơn về chủ đề phân phối gói, hãy tham khảo Cách Chia sẻ Gói Python của bạn.

Tóm tắt

Trong hướng dẫn này, chúng ta đã tìm hiểu quy trình đầy đủ trong việc viết một thư viện Python, đóng gói nó và phân phối nó thông qua PyPI. Tại thời điểm này, bạn sẽ có tất cả các công cụ để viết và chia sẻ thư viện của bạn với thế giới.

Ngoài ra, đừng ngại xem thử những gì chúng tôi đang có để bán và để nghiên cứu trên market và vui lòng hỏi bất kỳ câu hỏi nào và cung cấp phản hồi có giá trị của bạn bằng cách sử dụng phần bình luận bên dưới.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.