From 33194517cdb975e9ae3cc874f42c90fcf311769c Mon Sep 17 00:00:00 2001 From: Felipe Gomes de Melo Date: Thu, 5 Mar 2026 09:42:15 -0300 Subject: [PATCH 1/5] Clean imports in control_window.py --- python/py_package/utils/viewer/control_window.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/python/py_package/utils/viewer/control_window.py b/python/py_package/utils/viewer/control_window.py index b6c98ecd..b8d9a2ab 100644 --- a/python/py_package/utils/viewer/control_window.py +++ b/python/py_package/utils/viewer/control_window.py @@ -15,15 +15,12 @@ # limitations under the License. # import os -from pathlib import Path -from typing import List import numpy as np -import pkg_resources import sapien from sapien import internal_renderer as R -from transforms3d.quaternions import mat2quat from transforms3d.euler import quat2euler +from transforms3d.quaternions import mat2quat from .camera_control import ArcRotateCameraController, FPSCameraController from .plugin import Plugin, copy_to_clipboard From 4415e5215acc31f091f617ed02acf6f03716fd87 Mon Sep 17 00:00:00 2001 From: Felipe Gomes de Melo Date: Thu, 5 Mar 2026 10:51:44 -0300 Subject: [PATCH 2/5] Remove use of pkg_resources --- python/py_package/__init__.py | 8 +++---- python/py_package/__init__.pyi | 4 +--- python/py_package/_vulkan_tricks.py | 22 ++++++++--------- .../py_package/utils/viewer/render_window.py | 24 +++++++++---------- 4 files changed, 27 insertions(+), 31 deletions(-) diff --git a/python/py_package/__init__.py b/python/py_package/__init__.py index 6b14f396..0ae09df4 100644 --- a/python/py_package/__init__.py +++ b/python/py_package/__init__.py @@ -14,8 +14,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import importlib.resources as resources from warnings import warn -import pkg_resources import os from pathlib import Path import platform @@ -47,12 +47,12 @@ from .wrapper.articulation_builder import ArticulationBuilder from .wrapper.pinocchio_model import PinocchioModel -import pkg_resources - try: render.set_imgui_ini_filename(str(Path.home() / ".sapien" / "imgui.ini")) pysapien.render._internal_set_shader_search_path( - pkg_resources.resource_filename("sapien", "vulkan_shader") + str( + resources.files("sapien") / "vulkan_shader" + ) ) render.set_viewer_shader_dir("default") render.set_camera_shader_dir("default") diff --git a/python/py_package/__init__.pyi b/python/py_package/__init__.pyi index caadffe4..6c974275 100644 --- a/python/py_package/__init__.pyi +++ b/python/py_package/__init__.pyi @@ -2,7 +2,6 @@ from __future__ import annotations from _warnings import warn import os as os from pathlib._local import Path -import pkg_resources as pkg_resources import platform as platform from sapien.pysapien import Component from sapien.pysapien import CudaArray @@ -33,6 +32,5 @@ from . import render from . import utils from . import version from . import wrapper -__all__ = ['ActorBuilder', 'ArticulationBuilder', 'Component', 'CudaArray', 'Device', 'Engine', 'Entity', 'Path', 'PinocchioModel', 'Pose', 'SapienRenderer', 'Scene', 'SceneConfig', 'System', 'Widget', 'asset', 'internal_renderer', 'math', 'os', 'physx', 'pkg_resources', 'platform', 'profile', 'pysapien', 'pysapien_pinocchio', 'render', 'set_log_level', 'simsense', 'utils', 'version', 'warn', 'wrapper'] +__all__ = ['ActorBuilder', 'ArticulationBuilder', 'Component', 'CudaArray', 'Device', 'Engine', 'Entity', 'Path', 'PinocchioModel', 'Pose', 'SapienRenderer', 'Scene', 'SceneConfig', 'System', 'Widget', 'asset', 'internal_renderer', 'math', 'os', 'physx', 'platform', 'profile', 'pysapien', 'pysapien_pinocchio', 'render', 'set_log_level', 'simsense', 'utils', 'version', 'warn', 'wrapper'] __version__: str = '3.0.0.dev20251208+67ae2a67' -__warningregistry__: dict = {'version': 0, ('pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.', UserWarning, 18): True} diff --git a/python/py_package/_vulkan_tricks.py b/python/py_package/_vulkan_tricks.py index d9e2cf16..83c9da0f 100644 --- a/python/py_package/_vulkan_tricks.py +++ b/python/py_package/_vulkan_tricks.py @@ -14,10 +14,10 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import pkg_resources -from warnings import warn -import platform +import importlib.resources as resources import os +import platform +from warnings import warn def _ensure_libvulkan_linux(): @@ -30,8 +30,8 @@ def _ensure_libvulkan_linux(): return # add our vulkan to LD_LIBRARY_PATH - vulkan_library_path = pkg_resources.resource_filename( - "sapien", "vulkan_library/libvulkan.so.1.3.224" + vulkan_library_path = str( + resources.files("sapien") / "vulkan_library/libvulkan.so.1.3.224" ) warn("Failed to find system libvulkan. Fallback to SAPIEN builtin libvulkan.") @@ -51,8 +51,8 @@ def _ensure_libvulkan_mac(): if os.path.isfile(libPath): os.environ["SAPIEN_VULKAN_LIBRARY_PATH"] = libPath return - vulkan_library_path = pkg_resources.resource_filename( - "sapien", "vulkan_library/libvulkan.1.3.290.dylib" + vulkan_library_path = str( + resources.files("sapien") / "vulkan_library/libvulkan.1.3.290.dylib" ) warn("Failed to find system libvulkan. Fallback to SAPIEN builtin libvulkan.") @@ -73,8 +73,8 @@ def _ensure_vulkan_icd(): warn( "Failed to find Vulkan ICD file. This is probably due to an incorrect or partial installation of the NVIDIA driver. SAPIEN will attempt to provide an ICD file anyway but it may not work." ) - os.environ["VK_ICD_FILENAMES"] = pkg_resources.resource_filename( - "sapien", "vulkan_library/nvidia_icd.json" + os.environ["VK_ICD_FILENAMES"] = str( + resources.files("sapien") / "vulkan_library/nvidia_icd.json" ) @@ -96,8 +96,8 @@ def _ensure_egl_icd(): "Failed to find glvnd ICD file. This is probably due to an incorrect or partial installation of the NVIDIA driver. SAPIEN will attempt to provide an ICD file anyway but it may not work." ) - os.environ["__EGL_VENDOR_LIBRARY_FILENAMES"] = pkg_resources.resource_filename( - "sapien", "vulkan_library/10_nvidia.json" + os.environ["__EGL_VENDOR_LIBRARY_FILENAMES"] = str( + resources.files("sapien") / "vulkan_library/10_nvidia.json" ) diff --git a/python/py_package/utils/viewer/render_window.py b/python/py_package/utils/viewer/render_window.py index 634ee47a..2d5e424b 100644 --- a/python/py_package/utils/viewer/render_window.py +++ b/python/py_package/utils/viewer/render_window.py @@ -14,10 +14,10 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import importlib.resources as resources from pathlib import Path import numpy as np -import pkg_resources import sapien from sapien import internal_renderer as R @@ -156,18 +156,16 @@ def _setup_shader_dir(self): self.shader_types = [] try: - all_shader_dir = Path( - pkg_resources.resource_filename("sapien", "vulkan_shader") - ) - - for f in all_shader_dir.iterdir(): - if f.is_dir(): - if any("gbuffer.frag" in x.name for x in f.iterdir()): - self.shader_list.append(f) - self.shader_types.append("rast") - if any("camera.rgen" in x.name for x in f.iterdir()): - self.shader_list.append(f) - self.shader_types.append("rt") + all_shader_dir_ref = resources.files("sapien") / "vulkan_shader" + with resources.as_file(all_shader_dir_ref) as all_shader_dir: + for f in all_shader_dir.iterdir(): + if f.is_dir(): + if any("gbuffer.frag" in x.name for x in f.iterdir()): + self.shader_list.append(f) + self.shader_types.append("rast") + if any("camera.rgen" in x.name for x in f.iterdir()): + self.shader_list.append(f) + self.shader_types.append("rt") except Exception: pass From b5f4e27714abc6225125104415368cf3754e0882 Mon Sep 17 00:00:00 2001 From: Felipe Gomes de Melo Date: Thu, 5 Mar 2026 10:52:18 -0300 Subject: [PATCH 3/5] Add importlib_resources as dependency --- python/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/python/requirements.txt b/python/requirements.txt index c772184b..f6d45ca0 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -6,3 +6,4 @@ networkx pyperclip opencv-python>=4.0 setuptools +importlib_resources From 8d0403d28c84d192c41feb35e27b6fd167d5e613 Mon Sep 17 00:00:00 2001 From: Felipe Gomes de Melo Date: Thu, 5 Mar 2026 11:04:05 -0300 Subject: [PATCH 4/5] Add conditional import statement for python <=3.8 support --- python/py_package/__init__.py | 7 ++++++- python/py_package/_vulkan_tricks.py | 7 ++++++- python/py_package/utils/viewer/render_window.py | 6 +++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/python/py_package/__init__.py b/python/py_package/__init__.py index 0ae09df4..2db413c3 100644 --- a/python/py_package/__init__.py +++ b/python/py_package/__init__.py @@ -14,9 +14,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import importlib.resources as resources from warnings import warn import os +import sys from pathlib import Path import platform from .version import __version__ @@ -47,6 +47,11 @@ from .wrapper.articulation_builder import ArticulationBuilder from .wrapper.pinocchio_model import PinocchioModel +if sys.version_info >= (3, 9): + import importlib.resources as resources +else: + import importlib_resources as resources + try: render.set_imgui_ini_filename(str(Path.home() / ".sapien" / "imgui.ini")) pysapien.render._internal_set_shader_search_path( diff --git a/python/py_package/_vulkan_tricks.py b/python/py_package/_vulkan_tricks.py index 83c9da0f..d5933632 100644 --- a/python/py_package/_vulkan_tricks.py +++ b/python/py_package/_vulkan_tricks.py @@ -14,11 +14,16 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import importlib.resources as resources import os import platform +import sys from warnings import warn +if sys.version_info >= (3, 9): + import importlib.resources as resources +else: + import importlib_resources as resources + def _ensure_libvulkan_linux(): # find and use system vulkan diff --git a/python/py_package/utils/viewer/render_window.py b/python/py_package/utils/viewer/render_window.py index 2d5e424b..cc6f9001 100644 --- a/python/py_package/utils/viewer/render_window.py +++ b/python/py_package/utils/viewer/render_window.py @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import importlib.resources as resources +import sys from pathlib import Path import numpy as np @@ -23,6 +23,10 @@ from .plugin import Plugin +if sys.version_info >= (3, 9): + import importlib.resources as resources +else: + import importlib_resources as resources class RenderOptionsWindow(Plugin): def __init__(self): From 567d7e97f54a776954b8a28118e214231ebc93ff Mon Sep 17 00:00:00 2001 From: Felipe Gomes de Melo Date: Thu, 5 Mar 2026 13:44:56 -0300 Subject: [PATCH 5/5] Simplify render_window importlib usage --- .../py_package/utils/viewer/render_window.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/python/py_package/utils/viewer/render_window.py b/python/py_package/utils/viewer/render_window.py index cc6f9001..090235e9 100644 --- a/python/py_package/utils/viewer/render_window.py +++ b/python/py_package/utils/viewer/render_window.py @@ -160,16 +160,15 @@ def _setup_shader_dir(self): self.shader_types = [] try: - all_shader_dir_ref = resources.files("sapien") / "vulkan_shader" - with resources.as_file(all_shader_dir_ref) as all_shader_dir: - for f in all_shader_dir.iterdir(): - if f.is_dir(): - if any("gbuffer.frag" in x.name for x in f.iterdir()): - self.shader_list.append(f) - self.shader_types.append("rast") - if any("camera.rgen" in x.name for x in f.iterdir()): - self.shader_list.append(f) - self.shader_types.append("rt") + all_shader_dir = Path(str(resources.files("sapien") / "vulkan_shader")) + for f in all_shader_dir.iterdir(): + if f.is_dir(): + if any("gbuffer.frag" in x.name for x in f.iterdir()): + self.shader_list.append(f) + self.shader_types.append("rast") + if any("camera.rgen" in x.name for x in f.iterdir()): + self.shader_list.append(f) + self.shader_types.append("rt") except Exception: pass