From 53ab95c79224dfedb12b338f7e3c018c95da2eb9 Mon Sep 17 00:00:00 2001 From: milutter Date: Tue, 14 Mar 2023 14:15:41 -0400 Subject: [PATCH 1/3] Ensure that loaded plugins are a shared library --- python/mujoco/__init__.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/python/mujoco/__init__.py b/python/mujoco/__init__.py index 3b2904b9..e94be569 100644 --- a/python/mujoco/__init__.py +++ b/python/mujoco/__init__.py @@ -54,7 +54,15 @@ PLUGIN_HANDLES = [] def _load_all_bundled_plugins(): for directory, _, filenames in os.walk(PLUGINS_DIR): for filename in filenames: - PLUGIN_HANDLES.append(ctypes.CDLL(os.path.join(directory, filename))) + if os.path.splitext(filename)[-1] == ".so": + PLUGIN_HANDLES.append(ctypes.CDLL(os.path.join(directory, filename))) + + elif filename == "__init__.py": + pass + + else: + raise ValueError(f"Trying to load the plugin {os.path.join(directory, filename)}, " + "which is not a shared library.") _load_all_bundled_plugins() From 3cb0121474f314d2617c19f79fa99991dd011c51 Mon Sep 17 00:00:00 2001 From: mlutter Date: Tue, 14 Mar 2023 14:28:31 -0400 Subject: [PATCH 2/3] fix typo --- python/mujoco/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/mujoco/__init__.py b/python/mujoco/__init__.py index e94be569..baf67756 100644 --- a/python/mujoco/__init__.py +++ b/python/mujoco/__init__.py @@ -61,8 +61,8 @@ def _load_all_bundled_plugins(): pass else: - raise ValueError(f"Trying to load the plugin {os.path.join(directory, filename)}, " - "which is not a shared library.") + raise ValueError(f"Trying to load the plugin {os.path.join(directory, filename)} " + "that is not a shared library.") _load_all_bundled_plugins() From 5215992d556a02d7df5ba1b4c43166bc19c1918b Mon Sep 17 00:00:00 2001 From: mlutter Date: Wed, 15 Mar 2023 20:51:47 -0400 Subject: [PATCH 3/3] review comments --- python/mujoco/__init__.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/python/mujoco/__init__.py b/python/mujoco/__init__.py index baf67756..d9e0e5cf 100644 --- a/python/mujoco/__init__.py +++ b/python/mujoco/__init__.py @@ -19,6 +19,7 @@ import ctypes.util import os import platform import subprocess +import warnings _SYSTEM = platform.system() if _SYSTEM == 'Windows': @@ -54,15 +55,13 @@ PLUGIN_HANDLES = [] def _load_all_bundled_plugins(): for directory, _, filenames in os.walk(PLUGINS_DIR): for filename in filenames: - if os.path.splitext(filename)[-1] == ".so": - PLUGIN_HANDLES.append(ctypes.CDLL(os.path.join(directory, filename))) - - elif filename == "__init__.py": - pass - - else: - raise ValueError(f"Trying to load the plugin {os.path.join(directory, filename)} " - "that is not a shared library.") + if os.path.splitext(filename)[-1] in [".dll", ".dylib", ".so"]: + PLUGIN_HANDLES.append(ctypes.CDLL(os.path.join(directory, filename))) + elif filename == "__init__.py": + pass + else: + warnings.warn('Ignoring non-library in plugin directory: ' + f'{os.path.join(directory, filename)}', ImportWarning) _load_all_bundled_plugins()