Clarifications needed re packaging flow from the perspective of a build backend
Maintainer thường phản hồi trong vòng 2 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Tài liệu
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- python
- Lĩnh vực
- documentation
Hướng nghiên cứu
Bắt đầu bằng việc xem xét các tham chiếu của issue đến pyproject.toml, PKG-INFO, wheel METADATA và PEP 725. So sánh các câu hỏi được nêu về sdist và wheel với các đặc tả packaging liên quan, sau đó xác định phần văn bản nào trong tài liệu hoặc đặc tả cần được làm rõ và tóm tắt các điểm chưa được giải quyết cho các maintainer.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Issue Description
I'm writing a build backend which aims to deliver these key features relevant to the discussion (among others):
- Sdists will only contain static metadata;
- The code for sdist-building and wheel-building is separable, such that, when an sdist is downloaded and installed automatically (e.g. by Pip), only the wheel-building code is needed as a build dependency;
- There is no legacy support - sdists contain a
PKG-INFOspecifying a core metadata version of 2.2 or higher (most likely 2.4) and apyproject.toml.
There are several confusing points I've encountered in the description of pyproject.toml and of the core metadata format, and how they are used in source trees (pyproject.toml only), sdists (both) and wheels (core metadata only). My goal here is to verify that I can accomplish my goals while remaining standards compliant.
The main conceptual problem I'm having is that pyproject.toml and core metadata are described as canonical metadata formats, yet a non-legacy sdist is expected to contain both. I have many questions as a result.
First, regarding sdist creation: my understanding is that in this process, the build backend:
- MUST faithfully represent static metadata (if any) from the source tree's
pyproject.tomlin thePKG-INFO; - MAY compute values for dynamic metadata and include these in the
PKG-INFOas well.
The question is, what happens to the version of pyproject.toml that ends up in the sdist?
It seems to me that it cannot in general be an exact copy of the source tree's pyproject.toml, because if I compute dynamic metadata then there is a conflict - the field is marked dynamic in pyproject.toml but provided statically in PKG-INFO.
Am I at liberty to create an entirely new pyproject.toml, as long as it follows the spec? For example, can I remove the [project] table (since in general this table isn't required to be present, and I've already fully "compiled" its information into PKG-INFO)? Can I change the [build-system] table, such that a different build backend will be used to create the wheel? (One implementation idea I had was to incorporate an in-tree, wheel-specific backend into the sdist.) Should [project] at least be edited to reflect the dynamic metadata values that were calculated (e.g. add the computed values as static keys, and remove the corresponding names from project.dynamic)?
Then, regarding wheel building. Regarding core metadata, it says that "Fields defined in the following specification should be considered valid, complete and not subject to change."
Does that imply that the wheel's METADATA MUST be a copy of the sdist's PKG-INFO?
Doesn't that prevent computing metadata values at wheel creation time? (Not applicable to me, but still worth raising the question.)
Doesn't that in turn imply that non-legacy sdists need to have all the dynamic metadata values computed, and they can't be deferred to wheel-building? (I think this is intentional, so that e.g. installers can figure out basic information about the package without building it. But as of 24.3.1, Pip still does the build first anyway, even when PKG-INFO declares the latest metadata version.)
Doesn't that cause a problem for PEP 725 – Specifying external dependencies in pyproject.toml, since they propose to give semantics to Requires-External metadata whereby the wheel's version could differ? (In particular: the wheel-building process could use a tool like cibuildwheel to vendor a compiled shared C library whose source is not included in the sdist; by my reading of the PEP, the intent is that PKG-INFO would describe the library as an external requirement, but METADATA would not.)
Also: when building the wheel, is it required to look at pyproject.toml at all, or to validate it? My understanding is that the only mandatory purpose pyproject.toml actually serves at this point in the process is to tell an installer what build backend to use (and what its statically-known dependencies are); the backend itself is free to use other files for configuration (i.e. the config isn't required to be in [tool], and other tools simply won't be invoked at this point), and the [project] metadata is either redundant with PKG-INFO or erroneous.
Bonus round:
Given that PEP 725 isn't accepted yet, is there any circumstance in which it would make sense for a modern build backend to output Requires-External or Supported-Platform values in core metadata? I can't think of any.
Code of Conduct
- I am aware that participants in this repository must follow the PSF Code of Conduct.
- Ngôn ngữ chính
- Python
- Star
- 1.7k
- Fork
- 1.7k
- Merge trung bình
- 8 ngày 3 giờ
- Pull request đã merge (30 ngày)
- 5
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của pypa/packaging.python.org
-
Note greediness of PEP 723 reference parserCó thể đã có người làm @jw9829 đã nhận 9 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
pypa/packaging.python.org#1960 · 4 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Document that sparse identifiers with whitespace are valid if quotedCó thể đã có người làm @Herrtian đã nhận 149 ngày trước. Đang mởcomponent: specifications good first issue type: enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
pypa/packaging.python.org#1226 · 3 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 2 ngày
-
`test` vs. `tests`Có thể làm lại được Pull request cho issue này đã bị đóng mà không được merge. Đang mởcomponent: guides component: tutorials type: enhancement type: task
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 64/100
pypa/packaging.python.org#1165 · 5 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
type: task
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
pypa/packaging.python.org#792 · 2 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Add pip.conf heads-up to PyPI.org migration guideCó thể đã có người làm @harshitethic đã nhận 37 ngày trước. Đang mởgood first issue help wanted type: bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
pypa/packaging.python.org#463 · 5 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
Tất cả issue của pypa/packaging.python.org
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
Maintainer thường phản hồi trong vòng 1 ngày
-
area:docs
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
RailtownAI/railtracks#1633 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
review-panel severity:low
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
kristovatlas/coin-accounting#152 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
documentation :blue_book:
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
PennyLaneAI/pennylane#10280 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
`pipx reinstall` prints a Python traceback when the reinstall failsCó thể đã có người làm @ParamTanna đã nhận hôm nay. Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày