Hướng dẫn how do i turn my python code into a package? - làm cách nào để chuyển mã python của tôi thành một gói?

Hướng dẫn mã hóa, những điều cơ bản của Python

Một hướng dẫn với một mẫu sẵn sàng để chạy, mô tả cách chuyển đổi một dự án Python thành một gói có sẵn trong Chỉ số gói Python.

Ảnh của Claudio Schwarz trên unplash

Có thể xảy ra 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. Do đó, bạn có thể chuyển đổi mã được tổ chức tốt trước đó thành một gói.

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

Một gói nên được ghi lại tốt, để làm cho nó có thể khai thác bởi những người khác. Vì lý do này, mọi lớp hoặc phương pháp nên được ghi lại, thông qua các tài liệu, như được giải thích trong bài viết rất thú vị này.well documented, in order to make it exploitable by others. For this reason, every class or method should be documented, through docstrings, as explained in this very interesting article.

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 một gói, có sẵn trong Chỉ số 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 thành một thư mục gọi 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 gọi là
def p2_diff(a,b):
return a-b
2, thực hiện 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 được tạo bởi hàm:

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

Hàm

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

  • def p2_diff(a,b):
    return a-b
    4 - Số đầu tiên được tổng hợp
  • 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, cụ thể 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 gọi là
def p2_diff(a,b):
return a-b
7, thực hiện một hàm 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 sẽ 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 tập lệnh như sau:

from package1.p1 import p1_sum

Tạo tập tin đóng gói

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

  • Readme.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ủ gói, trong trang web của Gói chỉ mục 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 chỉ thị để nói với Build và PIP những gì được yêu cầu để xây dựng dự án.
  • from package1.p1 import p1_sum
    1 - Tệp cấu hình được setuptools 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 được khai thác khác.

README.md

Tệp readme.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 tệp readme.md rất cơ bản 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

Điều nào hiển thị 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 miễn phí và mở phổ biến nhất bao gồm:free and open licenses types include:

  • Giấy phép miền công cộng, cấp tất cả các quyền, which grant all rights
  • Giấy phép cho phép, trong đó cấp quyền sử dụng, bao gồm các quyền đối với Relicense. Danh mục này bao gồm giấy phép MIT và Apache, which grant use rights, including rights to relicense. This category includes MIT and Apache licenses
  • 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., such as GPL, which grants use rights, but forbids proprietisation.

pyproject.toml

Như đã nói, tệp này chứa các chỉ thị để xây dựng gói. Đoạn mã sau đây cho thấy một ví dụ rất cơ bản về tệp pyproject.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 khai thác bởi gói (nghĩa là các thư viện được nhập trong các tập lệnh đơn).

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

from package1.p1 import p1_sum
3.

setup.cfg

Đoạn mã sau đây hiển thị một ví dụ cơ bản của 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 =
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à các công cụ 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 liên quan đến phiên bản Python (≥3.6 trong ví dụ trên) và các phụ thuộc (được xác định bởi 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ể kiểm tra trang này.

Tạo phân phối

Bây giờ tôi có thể tạo ra 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 nó:

pip install build

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

python -m build

Hoạt động này có thể yêu cầu một số 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 lên gói trong kho lưu trữ PIP thử nghiệm

Gói đã sẵn sàng để được triển khai trong kho 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, không phải là kho lưu trữ chính thức, mà chỉ là một 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 được 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 nhìn thấy nó nữa.

Bây giờ, tôi đã sẵn sàng để tải lên gói trong 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 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 tên người dùng và mật khẩu. Sử dụng tên người 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
1AS và mã thông báo của bạn làm mật khẩu.

Sau khi hoàn tất quy trình, URL xuất hiện, chỉ định nơi gói của bạn được cài đặt.

Cài đặt gói được triển khai

Trước khi cài đặt gói được 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 được 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 một tập lệnh Python mới khai thác gói mới được triển khai:

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

Triể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 gốc, sẽ là tên chính thức của gói của tôi!

Tôi phải đăng ký trang web chỉ số gói Python 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 hoàn thành thủ tục, gói đã sẵn sàng để được mọi người trên thế giới cài đặt :)my credentials and press enter. Once the procedure is completed, the package is ready to be installed by everyone in the world :)

Bản tóm tắt

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

Quy trình này khá đơn giả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 phân phối.

Bạn có thể theo dõi tôi trong trang web mới của tôi: Mẹo & Thủ thuật cho Khoa học dữ liệu.

Những bài viết liên quan

Người giới thiệu

Làm thế nào để bạn tạo gói của riêng bạn trong Python?

Trong bài viết này, chúng tôi đã trải qua các bước sau đây để tạo gói Python:..
Làm các yếu tố gói cần thiết và quan tâm đến các tên ..
Viết mã gói ..
Tạo một tài khoản Pypi ..
Xuất bản gói trên PYPI ..
Cài đặt, nhập và chạy gói PIP ..

Làm cách nào để tạo gói Python đầu tiên của tôi?

Bước 1: Chọn API của bạn.Bước thực sự đầu tiên để biến mã của bạn thành một gói, là quyết định cách người dùng nên sử dụng nó - và làm cho nó có thể nhập.....
Bước 2: Tài liệu.....
Bước 3: Giấy phép.....
Bước 4: Sắp xếp lại cho bao bì.....
Bước 5: Đăng ký PYPI.....
Bước 6: Xây dựng và triển khai !.