Cách đóng gói tập lệnh python

Gói là một thùng chứa các chức năng khác nhau để thực hiện các tác vụ cụ thể. Ví dụ: gói math bao gồm hàm sqrt() để thực hiện căn bậc hai của một số

Khi làm việc trên các dự án lớn, chúng ta phải xử lý một lượng lớn mã và việc viết mọi thứ cùng nhau trong cùng một tệp sẽ khiến mã của chúng ta trông lộn xộn. Thay vào đó, chúng ta có thể tách mã của mình thành nhiều tệp bằng cách giữ mã có liên quan với nhau trong các gói

Bây giờ, chúng ta có thể sử dụng gói bất cứ khi nào chúng ta cần trong các dự án của mình. Bằng cách này, chúng tôi cũng có thể sử dụng lại mã của mình


Cấu trúc mô hình gói trong lập trình Python

Giả sử chúng ta đang phát triển một trò chơi. Một tổ chức có thể có của các gói và mô-đun có thể như trong hình bên dưới

Cách đóng gói tập lệnh python
Cấu trúc mô hình gói trò chơi

Ghi chú. Một thư mục phải chứa một tệp có tên __init__.py để Python coi nó là một gói. Tệp này có thể để trống nhưng chúng tôi thường đặt mã khởi tạo cho gói đó trong tệp này


Nhập mô-đun từ một gói

Trong Python, chúng ta có thể nhập các mô-đun từ các gói bằng cách sử dụng dấu chấm (. ) nhà điều hành

Ví dụ: nếu chúng ta muốn nhập mô-đun start trong ví dụ trên, thì có thể thực hiện như sau

import Game.Level.start

Bây giờ, nếu mô-đun này chứa một hàm có tên là

Game.Level.start.select_difficulty(2)
0, chúng ta phải sử dụng tên đầy đủ để tham chiếu nó

Game.Level.start.select_difficulty(2)

Nhập không có tiền tố gói

Nếu cấu trúc này có vẻ dài dòng, chúng ta có thể nhập mô-đun mà không cần tiền tố gói như sau

from Game.Level import start

Bây giờ chúng ta có thể gọi hàm đơn giản như sau

start.select_difficulty(2)

Chỉ nhập chức năng bắt buộc

Một cách khác để chỉ nhập chức năng được yêu cầu (hoặc lớp hoặc biến) từ một mô-đun trong một gói sẽ như sau

from Game.Level.start import select_difficulty

Bây giờ chúng ta có thể gọi trực tiếp chức năng này

select_difficulty(2)

Mặc dù dễ dàng hơn nhưng phương pháp này không được khuyến khích. Sử dụng không gian tên đầy đủ để tránh nhầm lẫn và ngăn hai tên định danh giống nhau va chạm

Trong khi nhập các gói, Python tìm trong danh sách các thư mục được xác định trong

Game.Level.start.select_difficulty(2)
1, tương tự như đối với

Hướng dẫn với mẫu sẵn sàng chạy, mô tả cách chuyển đổi Dự án Python thành Gói có sẵn trong Chỉ mục gói Python

Ảnh của Claudio Schwarz trên Bapt

Có thể xảy ra trường hợp khi bạn tạo một dự án Python mới, bạn phải sử dụng lại một số mã trước đó đã được tổ chức tốt. Vì vậy, bạn có thể chuyển mã được tổ chức tốt trước đó thành một gói

Gói Python là một thư viện triển khai thứ gì đó, không chỉ bạn có thể khai thác trong các dự án tiếp theo mà còn bởi cả cộng đồng

Một gói phải được ghi chép đầy đủ để những người khác có thể khai thác nó. Vì lý do này, mọi lớp hoặc phương thức phải được ghi lại, thông qua các chuỗi tài liệu, như được giải thích trong

Trong hướng dẫn này, tôi mô tả cách chuyển đổi một dự án Python đơn giản thành Gói, có sẵn trong Chỉ mục gói Python

Mẫu cho dự án có thể được tải xuống từ kho lưu trữ này

Tổ chức các tập tin nguồn

Bắt đầu từ thư mục gốc (

from numpy.random import seed
from numpy.random import rand
def p1_sum(a, s = 1):
seed(s)
b = rand(1)
return a + b
5 ), đại diện cho tên của gói, các tệp nguồn phải được đặt trong thư mục có tên là
from numpy.random import seed
from numpy.random import rand
def p1_sum(a, s = 1):
seed(s)
b = rand(1)
return a + b
6

package_template/
└── src/
└── package1/
| ├── __init__.py
| └── p1.py
└── package1/
├── __init__.py
└── p2.py

Thư mục

from numpy.random import seed
from numpy.random import rand
def p1_sum(a, s = 1):
seed(s)
b = rand(1)
return a + b
6 có thể chứa một hoặc nhiều thư mục con, mỗi thư mục đại diện cho một gói. Trong mẫu trên, có hai gói,
from numpy.random import seed
from numpy.random import rand
def p1_sum(a, s = 1):
seed(s)
b = rand(1)
return a + b
8 và
from numpy.random import seed
from numpy.random import rand
def p1_sum(a, s = 1):
seed(s)
b = rand(1)
return a + b
9. Mỗi gói phải chứa một tệp trống, được gọi là
def p2_diff(a,b):
return a-b
0, chỉ đơn giản nói với Python rằng thư mục chứa các tập lệnh có thể được đưa vào các tập lệnh khác. Ngoài ra, mỗi thư mục phải chứa tất cả các tệp Python cần thiết

Trong ví dụ được xem xét,

from numpy.random import seed
from numpy.random import rand
def p1_sum(a, s = 1):
seed(s)
b = rand(1)
return a + b
8 chứa một tệp, có tên là
def p2_diff(a,b):
return a-b
2, thực hiện một hàm giả, tính toán tổng giữa một số được truyền dưới dạng đối số và một số ngẫu nhiên do hàm tạo ra

________số 8_______

Hàm

def p2_diff(a,b):
return a-b
3 nhận đầu vào là các tham số sau

  • def p2_diff(a,b):
    return a-b
    4 — số đầu tiên được tính tổng
  • def p2_diff(a,b):
    return a-b
    5 — hạt giống được sử dụng để tạo số ngẫu nhiên

Gói thứ hai, tên là

from numpy.random import seed
from numpy.random import rand
def p1_sum(a, s = 1):
seed(s)
b = rand(1)
return a + b
9 chứa một tệp có tên là
def p2_diff(a,b):
return a-b
7, thực hiện một chức năng tương tự, được gọi là
def p2_diff(a,b):
return a-b
8, trả về sự khác biệt giữa hai số được truyền dưới dạng tham số

def p2_diff(a,b):
return a-b

Khi bạn cài đặt toàn bộ gói, bạn sẽ có thể đưa hàm

def p2_diff(a,b):
return a-b
3 vào một tập lệnh như sau

from package1.p1 import p1_sum
Tạo tệp đóng gói

Bây giờ, tôi có thể thêm vào dự án của mình các tệp cần thiết để chuyển đổi nó thành thư viện. Trong thư mục gốc, tôi nên thêm ít nhất các tệp sau

  • ĐỌC. md - tệp cơ bản cho tài liệu. Nội dung của tệp này sẽ được hiển thị trong trang chủ của gói, bên dưới Trang web chỉ mục gói Python
  • GIẤY PHÉP - giấy phép theo đó gói được phát hành
  • from package1.p1 import p1_sum
    0 — một tệp cấu hình chứa các lệnh để báo cho build và pip biết những gì cần thiết để xây dựng dự án
  • from package1.p1 import p1_sum
    1 — tệp cấu hình được sử dụng để xây dựng gói. Tệp này chứa thông tin liên quan đến tác giả, phiên bản gói, cũng như các phụ thuộc gói bị khai thác khác

ĐỌC. md

ĐỌC. md chứa tài liệu cơ bản cho gói, được viết bằng ngôn ngữ đánh dấu. Nó có thể được xây dựng nhanh chóng thông qua công cụ trực tuyến rất hữu ích này

Một README rất cơ bản. tệp md có thể là tệp sau

# package_template
A Template to build a PIP package
## Authors- [@alod83](https://www.github.com/alod83)## InstallationInstall my-project with pip```bash
pip install package_template
```
## Requirements* numpy

kết xuất như sau

Ví dụ README (Hình ảnh của Tác giả)

GIẤY PHÉP

Nhiều giấy phép tồn tại để phát hành phần mềm. Các loại giấy phép mở và miễn phí phổ biến nhất bao gồm

  • giấy phép miền công cộng, cấp tất cả các quyền
  • giấy phép cho phép, cấp quyền sử dụng, bao gồm cả quyền cấp phép lại. Danh mục này bao gồm giấy phép MIT và Apache
  • giấy phép bảo vệ, chẳng hạn như GPL, cấp quyền sử dụng, nhưng cấm sở hữu

pyproject. toml

Như đã nói, tệp này chứa các lệnh để xây dựng gói. Đoạn mã sau đây cho thấy một ví dụ rất cơ bản về pyproject. tập tin toml

[build-system]requires = [
"setuptools",
"wheel"
]
build-backend = "setuptools.build_meta"

Biến

from package1.p1 import p1_sum
2 chỉ định các thư viện cần thiết để xây dựng gói. Điều này KHÔNG bao gồm thư viện được gói khai thác (i. e. các thư viện được nhập trong các tập lệnh đơn)

Ví dụ trước xác định rằng cơ chế được sử dụng để xây dựng gói là

from package1.p1 import p1_sum
3

cài đặt. cfg

Đoạn mã sau hiển thị một ví dụ cơ bản về tệp

from package1.p1 import p1_sum
1

[metadata]name = package_template_YOUR-USERNAME-HERE
version = 0.0.1
author = Name Surname
author_email = [email protected]
description = A package template
long_description = file: README.md
long_description_content_type = text/markdown
url = https://github.com/alod83/package_template
project_urls =
Bug Tracker = https://github.com/alod83/package_template/issues
classifiers =
Programming Language :: Python :: 3
License :: OSI Approved :: MIT License
Operating System :: OS Independent
[options]
package_dir =
= src
packages = find:
python_requires = >=3.6
install_requires =
numpy

Phần

from package1.p1 import p1_sum
5 chứa một số thông tin cơ bản, liên quan đến tên của gói, tác giả, phiên bản và những nội dung tương tự khác. Để phát hành phiên bản mới của gói, số phiên bản trong phần này có thể được thay đổi

Phần tùy chọn chứa thông tin về phiên bản Python (≥3. 6 trong ví dụ trên) và các thành phần phụ thuộc (được xác định bằng từ khóa

from package1.p1 import p1_sum
6

Để biết thêm chi tiết, liên quan đến tệp

from package1.p1 import p1_sum
1, bạn có thể xem trang này

Tạo phân phối

Bây giờ tôi có thể tạo bản phân phối. Tôi phải cài đặt gói

from package1.p1 import p1_sum
8, nếu tôi chưa cài đặt gói này

pip install build

Sau khi cài đặt, tôi vào thư mục gốc của gói và chạy lệnh sau

python -m build

Thao tác này có thể cần một chút thời gian. Sau khi hoàn thành, một thư mục mới xuất hiện trong thư mục gốc cục bộ của tôi, được gọi là

from package1.p1 import p1_sum
9, chứa hai tệp chính

package_template-YOUR-USERNAME-HERE-0.0.1.tar.gzpackage_template_YOUR_USERNAME_HERE-0.0.1-py3-none-any.whl
Tải gói lên kho lưu trữ PIP thử nghiệm

Gói đã sẵn sàng để được triển khai trong kho lưu trữ PIP chính thức. Tuy nhiên, trước khi triển khai nó, tôi thực sự khuyên bạn nên kiểm tra nó, trong kho lưu trữ PIP thử nghiệm, đây không phải là kho lưu trữ chính thức mà chỉ là kho lưu trữ thử nghiệm

Đầu tiên, tôi phải tạo một tài khoản mới trong Kho lưu trữ thử nghiệm, theo liên kết này. Sau khi tạo và kích hoạt tài khoản mới, tôi có thể đăng nhập vào hồ sơ của bạn và tạo mã thông báo. Tôi phải lưu mã thông báo này ở nơi khác, vì bạn sẽ không thấy nó nữa

Bây giờ, tôi đã sẵn sàng tải gói lên Kho lưu trữ thử nghiệm. Tôi cài đặt gói

# package_template
A Template to build a PIP package
## Authors- [@alod83](https://www.github.com/alod83)## InstallationInstall my-project with pip```bash
pip install package_template
```
## Requirements* numpy
0, sẽ được sử dụng để tải lên

from numpy.random import seed
from numpy.random import rand
def p1_sum(a, s = 1):
seed(s)
b = rand(1)
return a + b
0

Sau đó, tôi nhập thư mục gốc của thư mục gói của mình và tôi chạy lệnh này

from numpy.random import seed
from numpy.random import rand
def p1_sum(a, s = 1):
seed(s)
b = rand(1)
return a + b
1

Lệnh này sẽ nhắc nhập tên người dùng và mật khẩu. Sử dụng

# package_template
A Template to build a PIP package
## Authors- [@alod83](https://www.github.com/alod83)## InstallationInstall my-project with pip```bash
pip install package_template
```
## Requirements* numpy
1làm tên người dùng và mã thông báo của bạn làm mật khẩu

Khi quy trình hoàn tất, một URL sẽ xuất hiện, chỉ định nơi gói của bạn được cài đặt

Cài đặt gói đã triển khai

Trước khi cài đặt gói triển khai mới, tôi thực sự khuyên bạn nên tạo một env ảo. Bạn có thể làm theo hướng dẫn nhanh này để xây dựng một env ảo mới

Gói đã triển khai có thể được cài đặt thông qua lệnh sau

from numpy.random import seed
from numpy.random import rand
def p1_sum(a, s = 1):
seed(s)
b = rand(1)
return a + b
2

Bây giờ bạn có thể tạo tập lệnh Python mới để khai thác gói đã triển khai mới

from numpy.random import seed
from numpy.random import rand
def p1_sum(a, s = 1):
seed(s)
b = rand(1)
return a + b
3Triển khai cuối cùng

Sau khi kiểm tra tính chính xác của gói, tôi có thể tải nó lên kho lưu trữ Chỉ mục gói Python

Tôi phải chọn một tên ban đầu, đây sẽ là tên chính thức của gói hàng của tôi

Tôi phải đăng ký trang web Python Package Index chính thức. Sau đó, tôi chạy lệnh sau, từ thư mục gốc của gói của tôi

from numpy.random import seed
from numpy.random import rand
def p1_sum(a, s = 1):
seed(s)
b = rand(1)
return a + b
4

Tôi nhập thông tin đăng nhập của mình và nhấn enter. Sau khi thủ tục hoàn tất, gói đã sẵn sàng để mọi người trên thế giới cài đặt. )

Tóm lược

Trong hướng dẫn này, tôi đã minh họa cách chuyển đổi dự án Python thành gói Python có sẵn cho tất cả cộng đồng Python trong Chỉ mục gói Python

Thủ tục khá đơn giản. chỉ cần tổ chức thư mục dự án thành một cấu trúc nhất định và chạy một số lệnh Python đơn giản để xây dựng bản phân phối là đủ

Làm cách nào để biến tập lệnh Python thành gói?

Để chuyển đổi mô-đun Python thành gói Python .
Chọn một. tập tin py
Chọn tái cấu trúc. Chuyển đổi sang Gói Python
Kiểm tra dự án. gói có tên là mô-đun đã chuyển đổi được tạo; . tệp py chứa tất cả mã từ. tập tin py

Làm cách nào để đóng gói mã Python dưới dạng thư viện?

Cách tạo thư viện Python .
Bước 1. Tạo một thư mục mà bạn muốn đặt thư viện của mình. .
Bước 2. Tạo một môi trường ảo cho thư mục của bạn. .
Bước 3. Tạo cấu trúc thư mục. .
Bước 4. Tạo nội dung cho thư viện của bạn. .
Bước 5. Xây dựng thư viện của bạn

Làm cách nào để đóng gói mã Python để triển khai?

Để triển khai, bạn cần tải cấu phần phần mềm này lên máy sản xuất của mình. Để cài đặt nó, chỉ cần chạy dpkg -i my-package. deb . Virtualenv của bạn sẽ được đặt tại /usr/share/python/ và bất kỳ tệp tập lệnh nào được xác định trong thiết lập của bạn. py sẽ có sẵn trong thư mục bin đi kèm.

Làm cách nào chúng ta có thể tạo một gói bằng Python?

Python - Gói .
Tạo một thư mục mới có tên D. \Ứng dụng của tôi
Bên trong MyApp , tạo một thư mục con với tên 'mypackage'
Tạo một __init__ trống. py trong thư mục mypackage
Sử dụng trình chỉnh sửa nhận biết Python như IDLE, tạo mô-đun chào. py và chức năng. py với đoạn mã sau