Trong bài này, mình sẽ hướng dẫn các bạn đóng gói code Python. Bạn đã dành hàng tuần để hoàn thiện code của mình. Bạn đã thử nghiệm nó và gửi nó cho tester để đảm bảo chất lượng. Bạn đã đăng tất cả mã nguồn lên máy chủ Git cá nhân của mình và bạn đã nhận được các báo cáo lỗi hữu ích từ một số người dùng đầu tiên. Và bây giờ bạn đã sẵn sàng cung cấp code Python của mình cho thế giới.
Và đó là khi bạn nhận ra. Bạn không biết làm thế nào để cung cấp sản phẩm. Cung cấp code đến người cần là một việc lớn. Đó là toàn bộ một nhánh của phát triển phần mềm, đó là chữ “D” trong CI/CD, nhưng nhiều người lại quên mất. Bạn có thể dùng Autotools và Cmake, nhưng một số ngôn ngữ khác có các phương pháp riêng để giúp bạn cung cấp code của mình cho người dùng. Đối với Python, một cách phổ biến để cung cấp code cho người dùng là sử dụng setuptools.
Cài đặt setuptools
Cách dễ nhất để cài đặt và cập nhật setuptools là sử dụng pip:
sudo python -m pip install --upgrade setuptools
Tạo thư viện ví dụ
Tạo một thư viện Python đơn giản có tên MyHellolib cho một số code ví dụ cần đóng gói. Thư viện này nhận một chuỗi và sau đó in chuỗi bằng chữ in hoa.
Đó là hai dòng code, nhưng cấu trúc dự án rất quan trọng, vì vậy trước tiên hãy tạo cây thư mục:
mkdir -p myhellolib.git/myhellolib
Để xác nhận rằng dự án này là một thư viện có thể nhập (một “module” Python), hãy tạo tệp trống __init__.py trong thư mục code, cùng với tệp chứa code:
touch myhellolib.git/myhellolib/__init__.py touch myhellolib.git/myhellolib/myhellolib.py
Trong tệp myhellolib.py, hãy nhập code Python đơn giản sau:
def greeter(s): print(s.upper())
Vậy là xong phần thư viện.
Kiểm tra thư viện
Trước khi đóng gói nó, hãy kiểm tra thư viện của bạn. Tạo tệp myhellolib.git/test.py và nhập codenày:
import myhellolib.myhellolib as hello hello.greeter("Hello Opensource.com.")
Chạy tập lệnh:
$ cd myhellolib.git $ python ./test.py HELLO OPENSOURCE.COM
Nó hoạt động, vì vậy bây giờ bạn có thể đóng gói nó.
Setuptools
Để đóng gói một dự án với setuptools, bạn phải tạo một tệp .toml xác định setuptools làm hệ thống xây dựng. Đặt đoạn này vào tệp có tên myhellolib.toml trong thư mục dự án của bạn:
[build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta"
Tiếp theo, tạo một tệp có tên setup.py, chứa thông tin về dự án của bạn:
from setuptools import setup setup( name='myhellolib', version='0.0.1', packages=['myhellolib'], install_requires=[ 'requests', 'importlib; python_version == "3.8"', ], )
Đó là tất cả những gì mà setuptools yêu cầu. Dự án của bạn đã sẵn sàng để đóng gói rồi đó.
Đóng gói code
Để tạo gói Python của bạn, bạn cần một builder. Một công cụ phổ biến là i, bạn có thể cài đặt công cụ này bằng pip:
python -m pip install build --user
Xây dựng dự án của bạn:
python -m build
Sau một vài phút, quá trình xây dựng hoàn tất và có một thư mục mới trong thư mục dự án của bạn có tên là dist. Thư mục này chứa tệp .tar.gz và .whl.
Đây là gói Python đầu tiên của bạn:
$ tar --list --file dist/myhellolib-0.0.1.tar.gz myhellolib-0.0.1/ myhellolib-0.0.1/PKG-INFO myhellolib-0.0.1/myhellolib/ myhellolib-0.0.1/myhellolib/__init__.py myhellolib-0.0.1/myhellolib/myhellolib.py myhellolib-0.0.1/myhellolib.egg-info/ myhellolib-0.0.1/myhellolib.egg-info/PKG-INFO myhellolib-0.0.1/myhellolib.egg-info/SOURCES.txt myhellolib-0.0.1/myhellolib.egg-info/dependency_links.txt myhellolib-0.0.1/myhellolib.egg-info/requires.txt myhellolib-0.0.1/myhellolib.egg-info/top_level.txt myhellolib-0.0.1/setup.cfg myhellolib-0.0.1/setup.py $ unzip -l dist/myhellolib-0.0.1-py3-none-any.whl Archive: dist/myhellolib-0.0.1-py3-none-any.whl Name ---- myhellolib/__init__.py myhellolib/myhellolib.py myhellolib-0.0.1.dist-info/METADATA myhellolib-0.0.1.dist-info/WHEEL myhellolib-0.0.1.dist-info/top_level.txt myhellolib-0.0.1.dist-info/RECORD ------- 6 files
Upload code đã đóng gói
Bây giờ bạn đã biết cách đóng gói code Python của mình dễ dàng như thế nào, bạn có thể tự động hóa quy trình bằng cách sử dụng Git hook, GitLab webhooks, Jenkins hoặc một công cụ tự động hóa tương tự. Bạn thậm chí có thể tải dự án của mình lên PyPi, kho lưu trữ phổ biến cho các mô-đun Python. Sau khi nó ở trên PyPi, người dùng có thể cài đặt nó bằng cách sử dụng pip, giống như cách bạn đã cài đặt setuptools và build.
Đây không phải là điều đầu tiên bạn nghĩ đến khi phát triển một ứng dụng hoặc thư viện, nhưng đóng gói code là một khía cạnh quan trọng của lập trình. Và mình nghĩ setuptools là cách đơn giản nhất để đóng gói code Python của bạn.