8000 Switch to standard pep517 sdist generation by zklaus · Pull Request #152098 · pytorch/pytorch · GitHub
[go: up one dir, main page]

Skip to content

Switch to standard pep517 sdist generation #152098

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 7 commits into
base: gh/zklaus/4/base
Choose a base branch
from

Conversation

zklaus
Copy link
Collaborator
@zklaus zklaus commented Apr 24, 2025

Generate source tarball with PEP 517 conform build tools instead of the custom routine in place right now.

Closes #150461.

The current procedure for generating the source tarball consists in creation of a source tree by manual copying and pruning of source files.

This PR replaces that with a call to the standard build tool, which works with the build backend to produce an sdist. For that to work correctly, the build backend also needs to be configured. In the case of Pytorch, the backend currently is (the legacy version of) the setuptools backend, the source dist part of which is mostly configured via the MANIFEST.in file.

Issues

sdist name

According to PEP 517, the name of the source distribution file must coincide with the project name, or more precisely, the source distribution of a project that generates {NAME}-{...}.whl wheels are required to be named {NAME}-{...}.tar.gz. Currently, the source tarball is called pytorch-{...}.tar.gz, but the generated wheels and python package are called torch-{...}.

Symbolic Links

The source tree at the moment contains a small number of symbolic links. This has been seen as problematic largely because of lack of support on Windows, but also because of a problem in setuptools. Particularly unfortunate is a circular symlink in the third party ittapi module, which can not be resolved by replacing it with a copy.

PEP 721 (now integrated in the Source Distribution Format Specification) allows for symbolic links, but only if they don't point outside the destination directory and if they don't contain ../ in their target.

The list of symbolic links currently is as follows:

source target problem solution
.dockerignore .gitignore ✅ ok (individual file)
docs/requirements.txt ../.ci/docker/requirements-docs.txt .. in target swap source and target1
functorch/docs/source/notebooks ../../notebooks/ .. in target swap source and target1
.github/ci_commit_pins/triton.txt ../../.ci/docker/ci_commit_pins/triton.txt ✅ ok (omitted from sdist)
third_party/flatbuffers/docs/source/CONTRIBUTING.md ../../CONTRIBUTING.md .. in target omit from sdist2
third_party/flatbuffers/java/src/test/java/DictionaryLookup ../../../../tests/DictionaryLookup .. in target omit from sdist3
third_party/flatbuffers/java/src/test/java/MyGame ../../../../tests/MyGame .. in target omit from sdist3
third_party/flatbuffers/java/src/test/java/NamespaceA ../../../../tests/namespace_test/NamespaceA .. in target omit from sdist3
third_party/flatbuffers/java/src/test/java/NamespaceC ../../../../tests/namespace_test/NamespaceC .. in target omit from sdist3
third_party/flatbuffers/java/src/test/java/optional_scalars ../../../../tests/optional_scalars .. in target omit from sdist3
third_party/flatbuffers/java/src/test/java/union_vector ../../../../tests/union_vector .. in target omit from sdist3
third_party/flatbuffers/kotlin/benchmark/src/jvmMain/java ../../../../java/src/main/java .. in target omit from sdist3
third_party/ittapi/rust/ittapi-sys/c-library ../../ .. in target omit from sdist4
third_party/ittapi/rust/ittapi-sys/LICENSES ../../LICENSES .. in target omit from sdist4
third_party/opentelemetry-cpp/buildscripts/pre-merge-commit ./pre-commit ✅ ok (individual file)
third_party/opentelemetry-cpp/third_party/prometheus-cpp/cmake/project-import-cmake/sample_client.cc ../../push/tests/integration/sample_client.cc .. in target omit from sdist5
third_party/opentelemetry-cpp/third_party/prometheus-cpp/cmake/project-import-cmake/sample_server.cc ../../pull/tests/integration/sample_server.cc .. in target omit from sdist5
third_party/opentelemetry-cpp/third_party/prometheus-cpp/cmake/project-import-pkgconfig/sample_client.cc ../../push/tests/integration/sample_client.cc .. in target omit from sdist5
third_party/opentelemetry-cpp/third_party/prometheus-cpp/cmake/project-import-pkgconfig/sample_server.cc ../../pull/tests/integration/sample_server.cc .. in target omit from sdist5
third_party/XNNPACK/tools/xngen xngen.py ✅ ok (individual file)

The introduction of symbolic links inside the .ci/docker folder creates a new problem, however, because Docker's COPY command does not allow symlinks in this way. We work around that by using tar ch to dereference the symlinks before handing them over to docker build.

Nccl

Nccl used to be included as a submodule. However, with #146073 (first released in v2.7.0-rc1), the submodule was removed and replaced with a build time checkout procedure in tools/build_pytorch_libs.py, which checks out the required version of nccl from the upstream repository based on a commit pin recorded in .ci/docker/ci_commit_pins/nccl-cu{11,12}.txt.
This means that a crucial third party dependency is missing from the source distribution.
This issue is still under investigation.

Stack from ghstack (oldest at bottom):

Footnotes

  1. These resources can be naturally considered to be part of the docs, so moving the actual files into the place of the current symlinks and replacing them with (unproblematic) symlinks can be said to improve semantics as well. 2

  2. The flatbuffers docs already actually use the original file, not the symlink and in the most recent releases, starting from flatbuffers-25.1.21 the symlink is replaced by the actual file thanks to a documentation overhaul.

  3. These resources are flatbuffers tests for java and kotlin and can be omitted from our sdist. 2 3 4 5 6 7

  4. We don't need to ship the rust bindings for ittapi. 2

  5. These are demonstration examples for how to link to prometheus-cpp using cmake and can be omitted. 2 3 4

[ghstack-poisoned]
Copy link
pytorch-bot bot commented Apr 24, 2025

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/152098

Note: Links to docs will display an error until the docs builds have been completed.

❌ 2 New Failures

As of commit 359f02d with merge base d2f6c6d (image):

NEW FAILURES - The following jobs have failed:

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@pytorch-bot pytorch-bot bot added the release notes: releng release notes category label Apr 24, 2025
zklaus added a commit that referenced this pull request Apr 24, 2025
ghstack-source-id: b9d2257
Pull Request resolved: #152098
@zklaus zklaus marked this pull request as draft April 24, 2025 10:29
[ghstack-poisoned]
zklaus added a commit that referenced this pull request Apr 24, 2025
ghstack-source-id: 7b67212
Pull Request resolved: #152098
@atalman
Copy link
Contributor
atalman commented Apr 28, 2025

Hi @zklaus could you please add pep517 build as additional source code packaging ? Keeping current tar.gz file as is for now.

[ghstack-poisoned]
zklaus added a commit that referenced this pull request Apr 30, 2025
ghstack-source-id: b33c3b6
Pull Request resolved: #152098
[ghstack-poisoned]
zklaus added a commit that referenced this pull request May 1, 2025
ghstack-source-id: a299d4a
Pull Request resolved: #152098
[ghstack-poisoned]
zklaus added a commit that referenced this pull request May 14, 2025
ghstack-source-id: 9256834
Pull Request resolved: #152098
[ghstack-poisoned]
zklaus added a commit that referenced this pull request May 15, 2025
ghstack-source-id: 913b6c3
Pull Request resolved: #152098
[ghstack-poisoned]
zklaus added a commit that referenced this pull request May 16, 2025
ghstack-source-id: c93207d
Pull Request resolved: #152098
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants
0