Name: python-trame-vtk Version: 2.11.16 Release: 1%{?dist} Summary: VTK web rendering bindings for trame License: BSD-3-Clause URL: https://github.com/Kitware/trame-vtk Source: %{pypi_source trame_vtk} BuildArch: noarch BuildRequires: python3-devel BuildRequires: python3-trame-client %global _description %{expand: trame-vtk integrates VTK's web rendering pipeline into trame applications. It bridges Python-side VTK rendering objects with the JavaScript-side viewer widgets that ship in trame-client, enabling remote (server-side) and client-side rendering of 3D scenes.} %description %_description %package -n python3-trame-vtk Summary: %{summary} Requires: python3-trame-client # Owns the shared trame/ namespace stubs excluded from %%files below. Requires: python3-trame %description -n python3-trame-vtk %_description %prep %autosetup -p1 -n trame_vtk-%{version} %generate_buildrequires %pyproject_buildrequires %build %pyproject_wheel %install %pyproject_install %pyproject_save_files trame trame_vtk # The trame namespace dirs (trame/, trame/ui/, trame/modules/, trame/widgets/) are # shared by several trame distributions, and every wheel ships its own copy of the # pkgutil marker __init__.py. The .py files are byte-identical so rpm tolerates the # duplicates -- but their .pyc embeds the SOURCE MTIME, which differs per build, so # the bytecode collides at install time: # file .../trame/ui/__pycache__/__init__.cpython-314.pyc conflicts between # attempted installs of python3-trame-... and python3-trame-client-... # Since Python 3.3 these work as PEP 420 implicit namespace packages with no marker # at all, so drop it everywhere. Verified: with all four removed, trame.ui becomes a # _NamespacePath and trame.ui.vuetify3 / trame.widgets.vuetify3 / trame.modules.www # still resolve across packages. The grep guard makes sure a real __init__.py with # actual code is never deleted. for _d in "" /ui /modules /widgets; do _f=%{buildroot}%{python3_sitelib}/trame$_d/__init__.py [ -f "$_f" ] || continue grep -qx '__path__ = __import__("pkgutil").extend_path(__path__, __name__)' "$_f" \ || { echo "ERROR: trame$_d/__init__.py is not a namespace marker" >&2; exit 1; } rm -f "$_f" %{buildroot}%{python3_sitelib}/trame$_d/__pycache__/__init__.*.pyc done # Drop the removed paths from the generated file list (it comes from the wheel RECORD). sed -i -E '\#/trame(/(ui|modules|widgets))?/__init__\.py$#d; \#/trame(/(ui|modules|widgets))?/__pycache__/__init__\..*\.pyc$#d' %{pyproject_files} %check %_pyproject_check_import_allow_no_modules -t %files -n python3-trame-vtk -f %{pyproject_files} %license LICENSE # The trame/ namespace is shared by python3-trame, -trame-vtk and -trame-vuetify: # every wheel ships its own copy of the four namespace __init__.py stubs, and RPM # byte-compiles each copy separately, so the .pyc contents differ and dnf refuses # the transaction with "file ... conflicts between attempted installs". Installing # any two of the three was impossible -- which in turn made 3dslicer-srep # uninstallable, because python3-pyvista Recommends all three. # Let python3-trame own the namespace stubs (it is the package the other two # already depend on transitively) and exclude them here. Directories may be # co-owned; only the regular files conflict. %exclude %{python3_sitelib}/trame/__init__.py %exclude %{python3_sitelib}/trame/__pycache__/__init__.* %exclude %{python3_sitelib}/trame/modules/__init__.py %exclude %{python3_sitelib}/trame/modules/__pycache__/__init__.* %exclude %{python3_sitelib}/trame/tools/__init__.py %exclude %{python3_sitelib}/trame/tools/__pycache__/__init__.* %exclude %{python3_sitelib}/trame/widgets/__init__.py %exclude %{python3_sitelib}/trame/widgets/__pycache__/__init__.* %doc README.rst %changelog * Mon Aug 24 2026 Morgan Hough - 2.11.16-1 - Update to 2.11.16. Retains the PEP 420 namespace handling from the previous release: the pkgutil markers under trame/ are still removed in %install so the .pyc files cannot collide between trame packages at install time. * Fri Aug 22 2026 Morgan Hough - 2.11.13-3 - Drop the pkgutil namespace markers for trame/{,ui,modules,widgets} and rely on PEP 420 implicit namespace packages. Every trame wheel ships its own identical copy; rpm tolerates the duplicate .py (byte-identical) but the .pyc embeds the source mtime, which differs per build, so installing two trame packages together failed with __pycache__/__init__.cpython-314.pyc file conflicts. * Fri Jul 31 2026 Morgan Hough - 2.11.13-2 - Stop claiming the shared trame/ namespace stubs. All three trame packages (-trame, -trame-vtk, -trame-vuetify) shipped their own copy of the four namespace __init__.py files, and RPM byte-compiles each copy separately, so the .pyc contents differ and dnf aborts with "file ... conflicts between attempted installs". Installing any two of the three was impossible, which also made 3dslicer-srep uninstallable since python3-pyvista Recommends all three. Let python3-trame own the stubs, %%exclude them here, and Require it. Directories may be co-owned; only the regular files conflicted. * Sat Jul 18 2026 Morgan Hough - 2.11.13-1 - Update to 2.11.13 * Thu Jun 26 2026 Morgan Hough - 2.11.12-2 - Rebuild against Python 3.15 (rawhide). Release bump so the py3.15 build strictly supersedes the lingering same-NVR py3.14 RPM that was still winning in the COPR buildroot repo. * Sun Jun 14 2026 Morgan Hough - 2.11.12-1 - Update to 2.11.12 (current upstream; freshness sweep 2026-06-14) * Thu May 28 2026 Morgan Hough - 2.11.8-1 - Initial package for the trame-slicer dependency chain.