Python Hatch vs setuptools

Đối với các gói Python không có phần mở rộng nhị phân và các bản dựng khá đơn giản, có thể sử dụng hệ thống bản dựng hiện đại thay vì các công cụ thiết lập cổ điển nhưng dài dòng và

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
1. Cái bạn chọn không thực sự quan trọng lắm; . PyPA's Flit là một lựa chọn tuyệt vời. Trong tương lai, scikit-build và meson có thể hỗ trợ loại cấu hình này, cho phép các gói mở rộng nhị phân cũng được hưởng lợi. Các công cụ PEP 621 này hiện bao gồm Hatch, PDM, Flit, Trampolim, Whey và Setuptools. Thơ cuối cùng sẽ nhận được sự ủng hộ trong 2. 0

Hầu hết các tệp nhị phân không được hỗ trợ trong các công cụ PEP 621 hiện có, mặc dù sắp có hỗ trợ tốt hơn

tập tin cổ điển

Các hệ thống này không sử dụng hoặc yêu cầu

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
1,
[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
3 hoặc
[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
4. Đó là những công cụ thiết lập. Tất nhiên, trừ khi bạn đang sử dụng công cụ thiết lập, công cụ này vẫn sử dụng
[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
4. Bạn có thể chuyển đổi các tệp cũ bằng cách sử dụng
[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
6 hoặc bằng ini2toml

Lựa chọn phụ trợ

Các chương trình phụ trợ xử lý siêu dữ liệu theo cùng một cách, do đó, lựa chọn tùy thuộc vào cách bạn chỉ định tệp nào đi vào SDist và các tính năng bổ sung, chẳng hạn như lấy phiên bản từ VCS. Nếu bạn không có tùy chọn hiện tại, ấp nở là một lựa chọn tuyệt vời, cân bằng giữa tốc độ, khả năng cấu hình và khả năng mở rộng

pyproject. toml. xây dựng hệ thống

Các gói phải có tệp

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
7 chọn phần phụ trợ

Hatching Flit PDM Setuptools

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"

[build-system]
requires = ["pdm-pep517"]
build-backend = "pdm.pep517.api"

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
0

pyproject. toml. dự định

Siêu dữ liệu được chỉ định ở định dạng dựa trên tiêu chuẩn

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
1

Bạn có thể đọc thêm về từng trường và tất cả các trường được phép trong phần đóng gói. con trăn. org, hoặc Whey. Lưu ý rằng “Trang chủ” là đặc biệt và thay thế cài đặt url cũ

cấu trúc gói

Tất cả các gói phải có một thư mục

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
8, với mã gói nằm bên trong thư mục đó, chẳng hạn như
[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
9. Điều này có vẻ rắc rối hơn; . Tuy nhiên, đây là một cách làm không tốt và nó gây ra một số lỗi phổ biến, chẳng hạn như chạy
[build-system]
requires = ["pdm-pep517"]
build-backend = "pdm.pep517.api"
2 và nhận phiên bản cục bộ thay vì phiên bản đã cài đặt - điều này rõ ràng có xu hướng bị hỏng nếu bạn xây dựng các phần của thư viện hoặc nếu bạn truy cập siêu dữ liệu gói

Đáng buồn là điều này không phải là một phần của siêu dữ liệu tiêu chuẩn trong

[build-system]
requires = ["pdm-pep517"]
build-backend = "pdm.pep517.api"
3, vì vậy nó phụ thuộc vào việc bạn sử dụng chương trình phụ trợ nào. Các công cụ Hatchling, Flit, PDM và setup sử dụng tính năng phát hiện tự động, trong khi Trampolim và váng sữa thì không, yêu cầu cài đặt
[build-system]
requires = ["pdm-pep517"]
build-backend = "pdm.pep517.api"
4

Nếu bạn không khớp tên gói và tên nhập [bạn nên chọn tên này trừ những trường hợp rất đặc biệt], bạn có thể sẽ cần cấu hình bổ sung tại đây

lập phiên bản

Bạn có thể chỉ định phiên bản theo cách thủ công [như minh họa trong ví dụ], nhưng các chương trình phụ trợ thường cung cấp một số tính năng tự động để giúp bạn tránh điều này. Flit sẽ lấy nội dung này từ một tệp nếu bạn yêu cầu. Hatchling và PDM có thể được hướng dẫn tìm trong tệp hoặc sử dụng git

Bạn sẽ luôn cần chỉ định rằng phiên bản sẽ được cung cấp động với

Sau đó, bạn sẽ định cấu hình chương trình phụ trợ của mình để tính toán phiên bản

Hatchling phiên bản năng động

Bạn có thể nói với hatchling để lấy phiên bản từ VCS. Thêm

[build-system]
requires = ["pdm-pep517"]
build-backend = "pdm.pep517.api"
5 vào
[build-system]
requires = ["pdm-pep517"]
build-backend = "pdm.pep517.api"
6 của bạn, sau đó thêm cấu hình sau

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
1

Hoặc bạn có thể yêu cầu nó tìm nó trong một tệp [xem tài liệu về regex tùy ý]

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
2

[thay thế

[build-system]
requires = ["pdm-pep517"]
build-backend = "pdm.pep517.api"
7 bằng đường dẫn gói]

Bạn cũng nên thêm hai tệp này

[build-system]
requires = ["pdm-pep517"]
build-backend = "pdm.pep517.api"
8

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
5

[build-system]
requires = ["pdm-pep517"]
build-backend = "pdm.pep517.api"
9 [hoặc thêm dòng này nếu bạn đang sử dụng tệp này]

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
7

Điều này sẽ cho phép kho lưu trữ git [bao gồm cả kho lưu trữ được tạo từ GitHub] cũng hỗ trợ lập phiên bản

Bao gồm/loại trừ các tệp trong SDist

Đây là công cụ cụ thể

  • Theo mặc định, Hatchling sử dụng tệp bỏ qua VCS của bạn, vì vậy hãy đảm bảo tệp đó chính xác [dù sao đó cũng là một ý tưởng hay]
  • Flit yêu cầu bao gồm/loại trừ thủ công trong nhiều trường hợp, chẳng hạn như sử dụng thư mục làm việc bẩn
  • .
  • Setuptools vẫn sử dụng
    [build-system]
    requires = ["flit_core>=3.3"]
    build-backend = "flit_core.buildapi"
    
    4
Cảnh báo cho Flit

Flit sẽ không sử dụng VCS [như git] để điền vào SDist nếu bạn sử dụng công cụ tiêu chuẩn, ngay cả khi Flit có thể làm điều đó bằng công cụ của chính nó. Vì vậy, hãy chắc chắn rằng bạn liệt kê các quy tắc bao gồm/loại trừ rõ ràng và kiểm tra nội dung

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
9

Nên sử dụng các tính năng bổ sung thay thế hoặc ngoài việc tạo các tệp yêu cầu. Các tính năng bổ sung này a] tương tác chính xác với các yêu cầu cài đặt và các công cụ tích hợp khác, b] có sẵn trực tiếp khi cài đặt qua PyPI và c] được cho phép trong

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
01,
[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
02,
[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
7 và hầu hết các nơi khác yêu cầu được thông qua

Dưới đây là một ví dụ về một tính năng bổ sung đơn giản

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
0

Tự phụ thuộc có thể được sử dụng bằng cách sử dụng tên của gói, chẳng hạn như

[build-system]
requires = ["flit_core>=3.3"]
build-backend = "flit_core.buildapi"
04, nhưng điều này yêu cầu Pip 21. 2 hoặc mới hơn. Chúng tôi khuyên bạn nên cung cấp ít nhất ________ 105, ________ 106 và _____ 107

Công cụ thiết lập có bị phản đối không?

công cụ thiết lập trong Python . 12]. has been deprecated [and up for removal as of Python 3.12].

Tôi nên sử dụng trình quản lý gói Python nào?

Pip là nơi bắt đầu lý tưởng . Nó đi kèm với Python, dễ hiểu và có rất nhiều tài nguyên liên quan. Tuy nhiên, nếu bạn đang làm việc trên bất kỳ thứ gì khác ngoài dự án cá nhân, bạn có thể sẽ cần tạo môi trường ảo.

Công cụ thiết lập có được bao gồm trong Python không?

các công cụ thiết lập không phải là một phần của cơ sở mã vanilla python , do đó không phải là mô-đun vanilla. con trăn. trình cài đặt org hoặc mac homebrew sẽ cài đặt nó cho bạn, nhưng nếu ai đó tự biên dịch python hoặc cài đặt nó trên một số bản phân phối linux thì người đó có thể không nhận được và sẽ phải tự cài đặt nó.

Công cụ thiết lập Python được sử dụng để làm gì?

Setuptools là một tập hợp các cải tiến cho Python distutils cho phép các nhà phát triển xây dựng và phân phối các gói Python dễ dàng hơn, đặc biệt là các gói phụ thuộc vào các gói khác. Packages built and distributed using setuptools look to the user like ordinary Python packages based on the distutils .

Chủ Đề