From 1ca9e3b55d89419836453ea6d8ba08aa8c20fbf6 Mon Sep 17 00:00:00 2001 From: Rok Mandeljc Date: Fri, 31 Mar 2023 17:57:35 +0200 Subject: [PATCH] hooks: update scikit-image hooks for compatibility with v0.20.0 Account for introducion of the `lazy_loader` in the main package and in `skimage.data` and `skimage.filters`; collect the `__init__.pyi` files (required by `lazy_loader`), and collect submodules where necessary. Also collect the data files that are now required by `skimage.morphology`. --- news/565.update.1.rst | 4 ++++ .../hooks/stdhooks/hook-skimage.data.py | 19 +++++++++++++++++++ .../hooks/stdhooks/hook-skimage.filters.py | 12 ++++++++---- .../hooks/stdhooks/hook-skimage.morphology.py | 17 +++++++++++++++++ .../hooks/stdhooks/hook-skimage.py | 17 +++++++++++++++++ 5 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 news/565.update.1.rst create mode 100644 src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.data.py create mode 100644 src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.morphology.py create mode 100644 src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.py diff --git a/news/565.update.1.rst b/news/565.update.1.rst new file mode 100644 index 00000000..65ac5533 --- /dev/null +++ b/news/565.update.1.rst @@ -0,0 +1,4 @@ +Update ``scikit-image`` hooks for compatibility with the 0.20.x series; +account for switch to ``lazy_module`` in ``skimage.data`` and +``skimage.filters`` as well as in main package. Collect new data files +that are now required by ``skimage.morphology``. diff --git a/src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.data.py b/src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.data.py new file mode 100644 index 00000000..7afee380 --- /dev/null +++ b/src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.data.py @@ -0,0 +1,19 @@ +# ------------------------------------------------------------------ +# Copyright (c) 2023 PyInstaller Development Team. +# +# This file is distributed under the terms of the GNU General Public +# License (version 2.0 or later). +# +# The full license is available in LICENSE.GPL.txt, distributed with +# this software. +# +# SPDX-License-Identifier: GPL-2.0-or-later +# ------------------------------------------------------------------ + +from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules + +# As of scikit-image 0.20.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules +# due to lazy loading. +if is_module_satisfies('scikit-image >= 0.20.0'): + datas = collect_data_files("skimage.data", includes=["*.pyi"]) + hiddenimports = collect_submodules('skimage.data', filter=lambda name: name != 'skimage.data.tests') diff --git a/src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.filters.py b/src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.filters.py index c3b269dd..2e401337 100644 --- a/src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.filters.py +++ b/src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.filters.py @@ -10,11 +10,15 @@ # SPDX-License-Identifier: GPL-2.0-or-later # ------------------------------------------------------------------ -from PyInstaller.utils.hooks import is_module_satisfies, collect_submodules +from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules -if is_module_satisfies("scikit_image >= 0.19.0"): - # In scikit-image 0.19.0, `skimage.filters` switched to lazy module loading, so we need to collect all submodules. +if is_module_satisfies("scikit-image >= 0.19.0"): + # In scikit-image 0.19.x, `skimage.filters` switched to lazy module loading, so we need to collect all submodules. hiddenimports = collect_submodules('skimage.filters', filter=lambda name: name != 'skimage.filters.tests') -elif is_module_satisfies("scikit_image >= 0.18.0"): + + # In scikit-image 0.20.0, `lazy_loader` is used, so we need to collect `__init__.pyi` file. + if is_module_satisfies("scikit-image >= 0.20.0"): + datas = collect_data_files("skimage.filters", includes=["*.pyi"]) +elif is_module_satisfies("scikit-image >= 0.18.0"): # The following missing module prevents import of skimage.feature with skimage 0.18.x. hiddenimports = ['skimage.filters.rank.core_cy_3d', ] diff --git a/src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.morphology.py b/src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.morphology.py new file mode 100644 index 00000000..68b65fd4 --- /dev/null +++ b/src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.morphology.py @@ -0,0 +1,17 @@ +# ------------------------------------------------------------------ +# Copyright (c) 2023 PyInstaller Development Team. +# +# This file is distributed under the terms of the GNU General Public +# License (version 2.0 or later). +# +# The full license is available in LICENSE.GPL.txt, distributed with +# this software. +# +# SPDX-License-Identifier: GPL-2.0-or-later +# ------------------------------------------------------------------ + +from PyInstaller.utils.hooks import collect_data_files, is_module_satisfies + +# As of scikit-image 0.20.0, we need to collect .npy data files for `skimage.morphology` +if is_module_satisfies('scikit-image >= 0.20'): + datas = collect_data_files("skimage.morphology", includes=["*.npy"]) diff --git a/src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.py b/src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.py new file mode 100644 index 00000000..e2567d06 --- /dev/null +++ b/src/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-skimage.py @@ -0,0 +1,17 @@ +# ------------------------------------------------------------------ +# Copyright (c) 2023 PyInstaller Development Team. +# +# This file is distributed under the terms of the GNU General Public +# License (version 2.0 or later). +# +# The full license is available in LICENSE.GPL.txt, distributed with +# this software. +# +# SPDX-License-Identifier: GPL-2.0-or-later +# ------------------------------------------------------------------ + +from PyInstaller.utils.hooks import collect_data_files, is_module_satisfies + +# As of scikit-image 0.20.0, we need to collect the __init__.pyi file for `lazy_loader`. +if is_module_satisfies('scikit-image >= 0.20.0'): + datas = collect_data_files("skimage", includes=["*.pyi"])