Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-torch for openSUSE:Factory checked in at 2026-09-09 16:21:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-torch (Old) and /work/SRC/openSUSE:Factory/.python-torch.new.1265 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-torch" Wed Sep 9 16:21:29 2026 rev:12 rq:1376574 version:2.13.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-torch/python-torch.changes 2026-07-28 18:02:54.527027155 +0200 +++ /work/SRC/openSUSE:Factory/.python-torch.new.1265/python-torch.changes 2026-09-09 16:23:27.901818547 +0200 @@ -1,0 +2,56 @@ +Sun Aug 30 21:23:49 UTC 2026 - Martin Pluskal <[email protected]> + +- Update to version 2.13.0: + * FlexAttention on Apple Silicon (MPS) and a deterministic + backward path on CUDA + * CuTeDSL "Native DSL" Inductor backend alongside Triton + [prototype] + * nn.LinearCrossEntropyLoss fuses prediction and loss, cutting + peak memory for large-vocabulary LM training + * torchcomms distributed backend; FSDP2 can overlap + reduce-scatter with all-gather on a dedicated process group + * Armv9-A torch.compile targeting; ROCm AOTriton 0.12b + * Stop building CPython 3.13t (free-threaded) binaries - + manylinux dropped 3.13t upstream +- Raise cmake floor 3.5 -> 3.27, matching this release's + cmake_minimum_required. +- Re-derive the License expression against the code actually + compiled into the shipped binaries, not third_party/ as a + whole; adds Apache-2.0 WITH LLVM-exception for the LLVM-derived + c10 sources, which upstream now declares too. See the + Legal-Review-Notice comment in the spec. +- Force mode 0644 and strip CRLF on the third_party license texts + 2.13.0 started vendoring into dist-info/licenses: two ship + executable and miniz's has CRLF, so rpmlint reads them as + scripts. +- Keep xnnpack-aarch64-fix.patch: the neonsme2 stubs still fall + off the end of non-void functions without XNN_ENABLE_KLEIDIAI in + 2.13.0. Latent here (those files are not compiled), so the patch + is retained rather than dropped. +- Drop obsolete Group: tags and %defattr; express the devel + BuildRequires as pkgconfig() where an unambiguous .pc exists + (opencv-devel only ships opencv4.pc). +- Strip the vestigial "#!/usr/bin/env python3" from the imported + library modules in %prep rather than rewriting the interpreter in + %install: clears 108 non-executable-script errors, and the sed no + longer runs after %fdupes, where it replaced every inode and undid + the hardlinks (8 files-duplicate). +- Switch torchrun from update-alternatives to libalternatives. The + %post/%postun scriptlets were missing outright, so /usr/bin/torchrun + pointed at an /etc/alternatives entry nothing ever created. +- Requires: add filelock, setuptools, networkx, Jinja2 and fsspec + (upstream's install_requires); drop six (no importer left) and + protobuf (wanted only by torch.utils.tensorboard, which hard-imports + tensorboard - not in Factory). numpy stays, it is compiled into + torch._C here. +- Add python-torch-rpmlintrc for the two findings that are not + defects: the deliberately empty torch/_thread_safe_fork.py, and the + numpy Requires above. +- Encode upstream's declared runtime floors: fsspec >= 0.8.5, + networkx >= 2.5.1, setuptools >= 77.0.3, sympy >= 1.13.3 and + typing_extensions >= 4.10.0. +- Double the % in the spec comments that mention %{_libdir} + (macro-in-comment), and drop the hardcoded /usr from the vulkan + CXXFLAGS. + +------------------------------------------------------------------- Old: ---- pytorch-v2.12.0.tar.gz New: ---- python-torch-rpmlintrc pytorch-v2.13.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-torch.spec ++++++ --- /var/tmp/diff_new_pack.pO6wkx/_old 2026-09-09 16:23:39.836317329 +0200 +++ /var/tmp/diff_new_pack.pO6wkx/_new 2026-09-09 16:23:39.837317371 +0200 @@ -18,31 +18,30 @@ %define srcname pytorch %define pname torch - %global flavor @BUILD_FLAVOR@%{nil} - %if "%{flavor}" == "standard" %bcond_with cuda %endif - %if "%{flavor}" == "cuda-10-2" -%bcond_without cuda %define cudaver 10-2 +%bcond_without cuda %endif - -%bcond_with mpi %if "%{flavor}" == "openmpi4" -%bcond_without mpi -%bcond_without openmpi4 %global mpi_flavor openmpi %define mpi_ext 4 +%bcond_without mpi +%bcond_without openmpi4 %endif - %if "%{flavor}" == "vulkan" -%bcond_without vulkan %global pkg_suffix -vulkan +%bcond_without vulkan %endif - +%if 0%{?suse_version} > 1500 +%bcond_without libalternatives +%else +%bcond_with libalternatives +%endif +%bcond_with mpi %if %{with mpi} %global pkg_suffix %{?mpi_flavor:-%{mpi_flavor}%{?mpi_ext}} %define pkg_prefix %{_libdir}/mpi/gcc/%{mpi_flavor}%{?mpi_ext} @@ -50,35 +49,39 @@ %define pkg_libdir %{pkg_prefix}/%{_lib}/ %define pkg_incdir %{pkg_prefix}/include/ %define pkg_datadir %{pkg_prefix}/share/ -%define pkg_sysconfdir %{pkg_prefix}/etc/ -%define pkg_skeldir %{pkg_prefix}/etc/skel/ +%define pkg_sysconfdir %{pkg_prefix}%{_sysconfdir}/ +%define pkg_skeldir %{pkg_prefix}%{_sysconfdir}/skel/ %define package_name %{pname}%{?pkg_suffix} %endif - %{?sle15_python_module_pythons} Name: python-torch%{?pkg_suffix} -Version: 2.12.0 +Version: 2.13.0 Release: 0 Summary: Deep learning framework aka pytorch/Caffe2 -License: Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND MIT AND Zlib AND BSL-1.0 -Group: Development/Languages/Python +# Legal-Review-Notice: licences re-derived for 2.13.0 against the code that is +# actually compiled into the shipped binaries, not against third_party/ as a whole. +# - Apache-2.0 WITH LLVM-exception: LLVM-derived sources in c10 (SmallVector.{h,cpp}, +# FunctionRef.h, llvmMathExtras.h, sparse_bitset.h) link into libc10/libtorch_cpu; +# upstream started declaring it too in 2.13.0 (PEP 639 pyproject license expression). +# - Zlib: aten/src/ATen/native/cpu/avx_mathfun.h (the only zlib-licensed code that is +# built; third_party/fbgemm/external/asmjit is also zlib but USE_FBGEMM=OFF). +# - No copyleft is linked: third_party/ittapi is BSD-3-Clause OR GPL-2.0-only and we +# take the BSD branch; third_party/valgrind-headers carries valgrind's explicit +# BSD-style exception for valgrind.h/callgrind.h; the only GPL text in the tree is a +# test fixture under the unused (USE_KINETO=OFF) kineto/dynolog/cpr tree. +License: Apache-2.0 AND Apache-2.0 WITH LLVM-exception AND BSD-2-Clause AND BSD-3-Clause AND BSL-1.0 AND MIT AND Zlib URL: https://pytorch.org Source0: pytorch-v%{version}.tar.gz Source1: releases.html - +Source2: python-torch-rpmlintrc Patch1: skip-third-party-check.patch Patch3: pytorch-patch-onednn.patch Patch4: disable-py312-intrinsics.patch +# Still not upstream in 2.13.0: XNNPACK's neonsme2 stubs fall off the end of +# non-void functions when built without XNN_ENABLE_KLEIDIAI. Not currently +# compiled here, so it is latent rather than an FTBFS - keep it anyway. Patch5: xnnpack-aarch64-fix.patch - -# A python call to cmake fails with a return code of 1 on this arch, disable it for now. -# and 32-bit arm is not supported -ExcludeArch: %ix86 %{arm} - BuildRequires: %{python_module Gloo} -%ifarch x86_64 -BuildRequires: %{python_module PeachPy} -%endif BuildRequires: %{python_module PyYAML} BuildRequires: %{python_module devel} BuildRequires: %{python_module hypothesis} @@ -92,44 +95,78 @@ BuildRequires: %{python_module setuptools} BuildRequires: %{python_module typing_extensions} BuildRequires: %{python_module typing} -BuildRequires: cmake >= 3.5 -BuildRequires: eigen3-devel +BuildRequires: cmake >= 3.27 BuildRequires: fdupes -%if 0%{?suse_version} >= 1600 -BuildRequires: gcc-c++ -%else -BuildRequires: gcc12 -BuildRequires: gcc12-c++ -%endif BuildRequires: git -BuildRequires: glog-devel -BuildRequires: gtest BuildRequires: leveldb-devel BuildRequires: libnuma-devel BuildRequires: libopenblas_pthreads-devel -BuildRequires: libuv-devel BuildRequires: lmdb-devel BuildRequires: ninja BuildRequires: nlohmann_json-devel -%ifarch x86_64 aarch64 ppc64le riscv64 -BuildRequires: onednn-devel -%endif BuildRequires: openblas-devel BuildRequires: opencl-cpp-headers BuildRequires: opencl-headers -BuildRequires: opencv-devel BuildRequires: openssl-devel +BuildRequires: pkgconfig BuildRequires: protobuf-c -BuildRequires: protobuf-devel BuildRequires: python-rpm-macros BuildRequires: snappy-devel +BuildRequires: pkgconfig(eigen3) +BuildRequires: pkgconfig(gtest) +BuildRequires: pkgconfig(gtest_main) +BuildRequires: pkgconfig(libglog) +BuildRequires: pkgconfig(libuv) +# opencv-devel only ships opencv4.pc; plain pkgconfig(opencv) is unresolvable +BuildRequires: pkgconfig(opencv4) +BuildRequires: pkgconfig(protobuf) +BuildRequires: pkgconfig(protobuf-lite) +Requires: libtorch%{?pkg_suffix} = %{version} +Requires: python-Jinja2 +Requires: python-filelock +Requires: python-fsspec >= 0.8.5 +Requires: python-networkx >= 2.5.1 +# Not in upstream's install_requires - upstream keeps numpy optional so the PyPI +# wheel stays slim, but we build against numpy-devel (numpy support is compiled +# into torch._C) and 29 shipped modules import it at module scope. python-six +# (no importer left in 2.13.0) and python-protobuf (only torch.utils.tensorboard +# wants it, and that hard-imports tensorboard, which Factory does not have) were +# caffe2-era leftovers and are gone. +Requires: python-numpy +Requires: python-setuptools >= 77.0.3 +Requires: python-sympy >= 1.13.3 +Requires: python-typing_extensions >= 4.10.0 +Provides: python-caffe2%{?pkg_suffix} = %{version} +Provides: python-pytorch%{?pkg_suffix} = %{version} +# A python call to cmake fails with a return code of 1 on this arch, disable it for now. +# and 32-bit arm is not supported +ExcludeArch: %{ix86} %{arm} +%if %{with libalternatives} +BuildRequires: alts +Requires: alts +%else +Requires(post): update-alternatives +Requires(postun): update-alternatives +%endif +%ifarch x86_64 +BuildRequires: %{python_module PeachPy} +%endif +%if 0%{?suse_version} >= 1600 +BuildRequires: gcc-c++ +%else +BuildRequires: gcc12 +BuildRequires: gcc12-c++ +%endif +%ifarch x86_64 aarch64 ppc64le riscv64 +BuildRequires: onednn-devel +%endif %if %{with cuda} -BuildRequires: cuda-compiler-%cudaver -BuildRequires: cuda-cudart-dev-%cudaver -BuildRequires: cuda-libraries-dev-%cudaver -BuildRequires: cuda-misc-headers-%cudaver -BuildRequires: cuda-nsight-%cudaver -BuildRequires: cuda-toolkit-%cudaver +BuildRequires: cuda-compiler-%{cudaver} +BuildRequires: cuda-cudart-dev-%{cudaver} +BuildRequires: cuda-libraries-dev-%{cudaver} +BuildRequires: cuda-misc-headers-%{cudaver} +BuildRequires: cuda-nsight-%{cudaver} +BuildRequires: cuda-toolkit-%{cudaver} BuildRequires: libcudnn7-devel BuildRequires: libnccl-devel %endif @@ -140,26 +177,15 @@ %if %{with vulkan} BuildRequires: VulkanMemoryAllocator-devel BuildRequires: shaderc -BuildRequires: vulkan-devel +BuildRequires: pkgconfig(vulkan) Conflicts: %{python_module torch} %endif %ifarch riscv64 BuildRequires: mold %endif -Requires: libtorch%{?pkg_suffix} = %{version} -Requires: python-numpy -Requires: python-protobuf -Requires: python-six -Requires: python-sympy -Requires: python-typing_extensions - -Provides: python-caffe2%{?pkg_suffix} = %version -Provides: python-pytorch%{?pkg_suffix} = %version - -%if "%flavor" == "" +%if "%{flavor}" == "" ExclusiveArch: do_not_build %endif - %python_subpackages %description @@ -173,7 +199,6 @@ %package devel Summary: Headers for C/C++, cmake build description and libraries needed for development -Group: Development/Languages/Python Requires: python-torch = %{version} %if %{with openmpi4} Conflicts: %{python_module torch-devel} @@ -189,12 +214,11 @@ %package converters Summary: Converters for onnx and caffe2 -Group: Development/Languages/Python -BuildArch: noarch Requires: python3-click Requires: python3-onnx Requires: python3-pip Requires: python3-pname +BuildArch: noarch %if %{with openmpi4} Conflicts: %{python_module torch-converters} %endif @@ -207,7 +231,6 @@ %package -n libtorch%{?pkg_suffix} Summary: Library which used by %{name} -Group: Development/Libraries/Python %if %{with openmpi4} Conflicts: libtorch %endif @@ -221,6 +244,16 @@ %prep %autosetup -p1 -n %{srcname}-v%{version} +# 64 library modules carry a vestigial python shebang (56 "#!/usr/bin/env +# python3", 4 the typo "env/python3", 4 plain "#!/usr/bin/python3") yet +# install 0644 and are only ever imported - the sole +# console script, torchrun, is generated by pip. Drop the line instead of +# rewriting the interpreter: rpmlint reports the shebang, not the interpreter. +# Here and not in %%install so that the byte-code %%pyproject_install generates +# stays valid and the %%fdupes hardlinks survive. +find torch torchgen functorch -name '*.py' -type f -print0 | + xargs -0 -r sed -i '1{/^#!.*python/d}' + %build cat > buildvars <<EOF export CMAKE_C_FLAGS="%{optflags}" @@ -232,8 +265,8 @@ export BLAS=OpenBLAS export MAX_JOBS=%{?jobs} %if 0%{?suse_version} >= 1600 -export CC=gcc-%gcc_version -export CXX=g++-%gcc_version +export CC=gcc-%{gcc_version} +export CXX=g++-%{gcc_version} %else export CC=gcc-12 export CXX=g++-12 @@ -249,6 +282,9 @@ # Hardware acceleration %if %{with cuda} +# Literal paths on purpose: /usr/local/cuda-* is the CUDA installer's own +# layout, not a path we own, and %%{_prefix}/local is not the same statement. +# spec-cleaner rewrites these - accepted deviation. export USE_SYSTEM_NCCL=ON export NCCL_INCLUDE_DIR="/usr/include/" export USE_CUDA=ON @@ -294,7 +330,7 @@ export CFLAGS="\${CMAKE_C_FLAGS} -fno-lto" export CXXFLAGS="\${CMAKE_CXX_FLAGS} -fno-lto" %if %{with vulkan} -export CXXFLAGS="\${CXXFLAGS} -I /usr/ -Wno-error=return-type" +export CXXFLAGS="\${CXXFLAGS} -I %{_prefix}/ -Wno-error=return-type" %endif %ifarch aarch64 export CFLAGS="\${CFLAGS} -Wno-incompatible-pointer-types" @@ -315,9 +351,16 @@ export BUILD_PYTHON=ON %pyproject_install +# 2.13.0 started vendoring third_party license texts into dist-info/licenses; +# two arrive mode 0755 and miniz's has CRLF, which rpmlint reads as a script. +# Must precede %%fdupes: sed -i replaces the inode, so doing this afterwards +# breaks the hardlinks and reintroduces the duplicate waste fdupes removed. +find %{buildroot} -path '*.dist-info/licenses/*' -type f -exec chmod 0644 {} + +find %{buildroot} -path '*.dist-info/licenses/*' -type f -exec sed -i 's|\r$||' {} + + %python_expand %fdupes %{buildroot}%{$python_sitearch} -# Move libtorch libraries to %{_libdir} for the separate libtorch package +# Move libtorch libraries to %%{_libdir} for the separate libtorch package # Only move core libtorch libraries, not all .so files %python_expand mkdir -p %{buildroot}%{_libdir} %python_expand cp -P %{buildroot}%{$python_sitearch}/torch/lib/libtorch.so* %{buildroot}%{_libdir}/ 2>/dev/null || true @@ -330,7 +373,7 @@ # The shipped CMake package config (Caffe2Targets*.cmake, TorchConfig.cmake) # references these libraries relative to the torch/ install prefix # (${_IMPORT_PREFIX}/lib/lib*.so and find_library(... PATHS ${TORCH_INSTALL_PREFIX}/lib)). -# Recreate them as symlinks to the moved libraries in %{_libdir} so that +# Recreate them as symlinks to the moved libraries in %%{_libdir} so that # find_package(Torch) resolves for downstream C++ consumers. %python_expand ln -sf %{_libdir}/libtorch.so %{buildroot}%{$python_sitearch}/torch/lib/libtorch.so %python_expand ln -sf %{_libdir}/libtorch_cpu.so %{buildroot}%{$python_sitearch}/torch/lib/libtorch_cpu.so @@ -338,10 +381,6 @@ %python_clone -a %{buildroot}%{_bindir}/torchrun -# Fix shebang lines to use /usr/bin/python3 instead of /usr/bin/env python3 -find %{buildroot} -type f -name "*.py" -exec sed -i 's|#!/usr/bin/env python3|#!/usr/bin/python3|g' {} \; -find %{buildroot} -type f -name "*.py" -exec sed -i 's|#!/usr/bin/env/python3|#!/usr/bin/python3|g' {} \; - # Move header files from main package to devel package locations %python_expand mkdir -p %{buildroot}%{$python_sitearch}/torch-devel/csrc/inductor/aoti_runtime %python_expand mkdir -p %{buildroot}%{$python_sitearch}/torch-devel/lib/libshm @@ -350,11 +389,19 @@ %python_expand mv %{buildroot}%{$python_sitearch}/torch/lib/libshm/*.h %{buildroot}%{$python_sitearch}/torch-devel/lib/libshm/ %python_expand rm -rf %{buildroot}%{$python_sitearch}/torch/lib/libshm_windows +%pre +%python_libalternatives_reset_alternative torchrun + +%post +%python_install_alternative torchrun + +%postun +%python_uninstall_alternative torchrun + %post -n libtorch%{?pkg_suffix} -p /sbin/ldconfig %postun -n libtorch%{?pkg_suffix} -p /sbin/ldconfig %files %{python_files} -%defattr(-,root,root) %doc README.md NOTICE %license LICENSE %{python_sitearch}/torch* @@ -369,7 +416,7 @@ %exclude %{python_sitearch}/torch-devel # The real libtorch libraries live in the separate libtorch package; the main # package ships only compatibility symlinks under torch/lib pointing at -# %{_libdir} so the shipped CMake config resolves for downstream consumers. +# %%{_libdir} so the shipped CMake config resolves for downstream consumers. %python_alternative %{_bindir}/torchrun %files %{python_files devel} ++++++ _service ++++++ --- /var/tmp/diff_new_pack.pO6wkx/_old 2026-09-09 16:23:39.903320129 +0200 +++ /var/tmp/diff_new_pack.pO6wkx/_new 2026-09-09 16:23:39.906320255 +0200 @@ -2,7 +2,7 @@ <service name="tar_scm" mode="manual"> <param name="scm">git</param> <param name="url">https://github.com/pytorch/pytorch</param> - <param name="revision">v2.12.0</param> + <param name="revision">v2.13.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="submodules">enable</param> </service> ++++++ python-torch-rpmlintrc ++++++ # torch/_thread_safe_fork.py is empty by design: the OSS tree ships the module # with no body, only Meta's internal build patches fork-safety hooks into it. # It is imported unconditionally by torch/_inductor/compile_worker/*, so it has # to ship - deleting it would be an ImportError on every torch.compile run. addFilter("zero-length .*/torch/_thread_safe_fork\.py") # numpy is deliberately not in upstream's install_requires (upstream keeps the # PyPI wheel slim), but we build against numpy-devel, so numpy support is # compiled into torch._C, and 29 shipped modules import numpy at module scope. # Keeping the Requires is intentional; rationale also sits next to it in the spec. # Anchored to torch's own packages so an unrelated future numpy leftover still shows. addFilter("python3\d+-torch.*python-leftover-require .*numpy") ++++++ pytorch-v2.12.0.tar.gz -> pytorch-v2.13.0.tar.gz ++++++ /work/SRC/openSUSE:Factory/python-torch/pytorch-v2.12.0.tar.gz /work/SRC/openSUSE:Factory/.python-torch.new.1265/pytorch-v2.13.0.tar.gz differ: char 12, line 1
