Trong bài viết này, chúng ta sẽ tìm hiểu cách phát triển gói trong Python. Các gói không là gì ngoài một tập hợp các chương trình được thiết kế để thực hiện một [các] nhiệm vụ nhất định. Các gói có hai loại, cụ thể là
- Các gói tích hợp như bộ sưu tập, datetime, sqlite, v.v.
- Các gói bên ngoài như bình, django, tensorflow, v.v.
Tạo một gói
Đầu tiên, chúng ta cần nghĩ ra cách cấu trúc mã của mình để những người khác có thể truy cập các chức năng mã của chúng ta. Trong Python, để tạo một gói, chúng ta cần thêm __init__. py vào thư mục. Ở đây, chúng ta sẽ tạo một gói có tên là test_package
- Hãy viết __init__. py
Python3
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files1
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files2
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files3
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files4
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files5
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files6
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files7
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files8
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files9
pip3 install setuptools wheel0
pip3 install setuptools wheel1
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files8
pip3 install setuptools wheel3
pip3 install setuptools wheel4
- Bây giờ, hãy tạo một thư mục có tên là test_package, và trong đó giữ __init__. tập tin py. Đó là tất cả, gói của chúng tôi đã sẵn sàng. Tất cả gói của chúng tôi đều đếm số lần xuất hiện của một từ trong danh sách. Bây giờ, để sử dụng gói của chúng tôi, hãy tạo một lần chạy. py bên ngoài thư mục test_package. Bên trong đường chạy. py chỉ cần nhập gói vừa tạo và sử dụng hàm đếm_in_list. Chúng ta có thể viết mã như hình dưới đây
Python3
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files1
pip3 install setuptools wheel6
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files3
pip3 install setuptools wheel8
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files5
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files90
pip3 install setuptools wheel0
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files92
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files93
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files95
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files93
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files98
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files99
pip3 install setuptools wheel0
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files01
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files93
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files03
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files04
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files05
- Đó là tất cả. Chúng tôi vừa tạo gói đầu tiên của mình. Cấu trúc thư mục của chúng ta sẽ giống như thế này
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files5
Để kiểm tra, chỉ cần gõ python3 run. py. Và đầu ra của chúng tôi sẽ như sau
Theo cách này, chúng ta có thể tạo nhiều chương trình phức tạp và sử dụng chúng trong các mã khác
Tải lên gói của chúng tôi
Bây giờ, hãy xem cách chúng tôi có thể chuẩn bị gói của mình để triển khai trên PyPI. Chúng tôi cần một số tệp bổ sung trong thư mục gói của mình, như README. MD, GIẤY PHÉP và thiết lập. py. Mã của chúng tôi nên được cấu trúc như dưới đây
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files
Đảm bảo xóa lần chạy đã tạo trước đó. py, nó chỉ dành cho thử nghiệm thủ công. Đối với GIẤY PHÉP, chúng tôi khuyên bạn nên sử dụng GIẤY PHÉP MIT vì nó mang lại sự linh hoạt nhất. Chúng ta có thể đọc về nhiều loại giấy phép trực tuyến
Tiếp theo, tạo README. tập tin md. Về cơ bản, nó sẽ chứa một mô tả đầy đủ về gói. Nếu chúng ta chưa quen với cách viết theo phong cách markdown, chúng tôi khuyên bạn nên đọc bài viết này. Một lần, chúng tôi có README của bạn. md đã sẵn sàng, chúng ta cần viết thiết lập. py. đây là phần quan trọng nhất
Python3
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files3
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files07
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files5
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files09
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files10____411
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files12
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files14
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files15
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files16______417
pip3 install setuptools wheel0
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files19
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files5
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files21
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files16
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files23____90
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files25
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files16____528____90
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files10
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files16____613____90
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files15
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files16____618
pip3 install setuptools wheel0
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files10
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files16______713____90
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files92
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files16
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files17
_______416____417____90
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files21
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files16______824____90
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files26
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files16______828
pip3 install setuptools wheel0
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files00
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files16
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files03______90
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files05
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files16______008
pip3 install setuptools wheel0
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files10
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files16______013____90
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files15
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
_______416____018____90
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files20
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files03
Trong đoạn mã trên, bạn cần thay đổi
- tác giả với tên của bạn
- author_email bằng email của bạn
- url với URL GitHub của gói
Gói của chúng tôi đã sẵn sàng
Đăng ký gói của chúng tôi với PyPI
Bây giờ chúng tôi đã phát triển gói python của mình, chúng tôi cần đăng ký gói đó trên PyPI
1. Tải lên GitHub
Tạo một kho lưu trữ GitHub mới và đẩy tất cả mã của chúng tôi vào đó. Nếu bạn chưa biết cách đẩy mã lên repo GitHub, bạn có thể xem qua bài viết này. Ngoài ra, đừng quên cập nhật URL của chúng tôi trong phần thiết lập. py với URL repo GitHub mới được tạo. Repo của chúng tôi nên được truy cập công khai
2. Tạo một tài khoản trong PyPI
Chúng tôi sẽ xuất bản gói trong PyPI, chúng tôi cần một tài khoản. Để làm điều đó, chỉ cần truy cập PyPI và tạo tài khoản của bạn
3. Tạo bản phân phối
Lưu trữ phân phối là cần thiết để lưu trữ nó dưới dạng gói. Để tạo các gói này, chúng tôi cần cài đặt hai gói bổ sung
pip3 install setuptools wheel
Bây giờ chúng tôi đã cài đặt chúng, hãy chạy lệnh bên dưới để tạo tệp lưu trữ
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files9
Nó sẽ tạo các thư mục build, dist, test_package. trứng-thông tin. Bây giờ cấu trúc thư mục của bạn sẽ giống như thế này
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files0
4. Triển khai
Để tải lên PyPI, chúng tôi cần cài đặt gói sợi xe
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files1
Bây giờ, hãy tải lên gói có phiên bản phù hợp được xác định trong phần thiết lập. tập tin py. Để làm như vậy, hãy chạy lệnh dưới đây
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files2
Đó là tất cả về việc phát triển và triển khai các gói trong python
Sử dụng gói của chúng tôi
Khi gói được phát triển, chúng ta sẽ có thể sử dụng nó phải không? . Tạo một thư mục hoàn toàn mới và tạo một môi trường ảo bên trong nó. Để như vậy, chỉ cần gõ
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files1
Bây giờ, hãy cài đặt gói mới được triển khai của bạn vào môi trường ảo. Bạn cần sử dụng pip để có thể cài đặt nó
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files1
Bây giờ, hãy xem cách chúng ta có thể sử dụng gói này trong mã của mình. ý tưởng thật đơn giản. Đây là sau khi tất cả một gói, phải không?
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files2
Bây giờ, chúng tôi có chức năng của chúng tôi. Hãy thử sử dụng nó
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files0
Đó là tất cả. Nếu chúng ta đặt tất cả lại với nhau,
Python3
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files1
pip3 install setuptools wheel6
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files3
pip3 install setuptools wheel8
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files5
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files04
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files28
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files93
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files95
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files94
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files93
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files17
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files46
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files36
package-folder ├── LICENSE ├── README.md ├── setup.py └── test_package └── __init__.py 1 directory, 4 files48