Với cấu trúc gói sau
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── setup.py
Nội dung của setup.py
from setuptools import setup
setup()
Nội dung của setup.cfg
[metadata]
name = my_package
version = 0.1
[options]
packages = find:
Tôi có thể xây dựng bánh xe hoặc phân phối nguồn cho my_package
như thế này
pip wheel --no-deps -w dist .
# generates file ./dist/my_package-0.1-py3-none-any.whl
python setup.py sdist
# generates file ./dist/my_package-0.1.tar.gz
Nhưng theo người duy trì setuptools , một cấu hình xây dựng khai báo là lý tưởng và sử dụng một bản dựng bắt buộc sẽ là một mùi mã. Vì vậy, chúng tôi thay thế setup.py
bằng pyproject.toml
:
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── pyproject.toml
Nội dung của pyproject.toml
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]
Và bạn vẫn có thể xây dựng một bánh xe giống như trước đây, nó hoạt động. Nhưng sdist không hoạt động:
python: can't open file 'setup.py': [Errno 2] No such file or directory
Vì vậy, làm thế nào bạn thực sự nên xây dựng tệp .tar.gz bằng setuptools ? Công cụ hướng tới người dùng để tạo sdist là gì? Tôi không muốn thay đổi phụ trợ xây dựng. Có vẻ như tất cả các công cụ đóng gói khác đều viết các điểm vào bản dựng riêng của chúng, nhưng tôi nghĩ rằng toàn bộ điểm xác định hệ thống xây dựng khai báo trong siêu dữ liệu là để bạn không phải thực hiện với hệ thống xây dựng, tìm hiểu từng cách công cụ đóng gói khác nhau dự kiến sẽ được gọi hoặc phải vào trình thông dịch và gọi API Python bằng tay. Nhưng PEP cho các yêu cầu hệ thống xây dựng đã hơn 2 năm tuổi. Tôi có thiếu một cái gì đó rõ ràng ở đây?
Làm thế nào để xây dựng một phân phối nguồn mà không sử dụng setup.py
tập tin?
pep517.build
đó chỉ có ý nghĩa như một thử nghiệm, một cái nạng tạm thời khi có các công cụ sản xuất như flit, thơ, nở, và có lẽ nhiều hơn nữa?