summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/docs/build_systems/pythonpackage.rst13
-rw-r--r--lib/spack/spack/build_systems/python.py18
2 files changed, 30 insertions, 1 deletions
diff --git a/lib/spack/docs/build_systems/pythonpackage.rst b/lib/spack/docs/build_systems/pythonpackage.rst
index 13b59cc96e..53d0f09167 100644
--- a/lib/spack/docs/build_systems/pythonpackage.rst
+++ b/lib/spack/docs/build_systems/pythonpackage.rst
@@ -582,6 +582,19 @@ libraries. Make sure not to add modules/packages containing the word
"test", as these likely won't end up in the installation directory,
or may require test dependencies like pytest to be installed.
+Instead of defining the ``import_modules`` explicity, only the subset
+of module names to be skipped can be defined by using ``skip_modules``.
+If a defined module has submodules, they are skipped as well, e.g.,
+in case the ``plotting`` modules should be excluded from the
+automatically detected ``import_modules`` ``['nilearn', 'nilearn.surface',
+'nilearn.plotting', 'nilearn.plotting.data']`` set:
+
+.. code-block:: python
+
+ skip_modules = ['nilearn.plotting']
+
+This will set ``import_modules`` to ``['nilearn', 'nilearn.surface']``
+
Import tests can be run during the installation using ``spack install
--test=root`` or at any time after the installation using
``spack test run``.
diff --git a/lib/spack/spack/build_systems/python.py b/lib/spack/spack/build_systems/python.py
index 5cd60d774e..085feec5fe 100644
--- a/lib/spack/spack/build_systems/python.py
+++ b/lib/spack/spack/build_systems/python.py
@@ -138,13 +138,29 @@ class PythonPackage(PackageBase):
path.replace(root + os.sep, "", 1).replace(".py", "").replace("/", ".")
)
- modules = [mod for mod in modules if re.match("[a-zA-Z0-9._]+$", mod)]
+ modules = [
+ mod
+ for mod in modules
+ if re.match("[a-zA-Z0-9._]+$", mod) and not any(map(mod.startswith, self.skip_modules))
+ ]
tty.debug("Detected the following modules: {0}".format(modules))
return modules
@property
+ def skip_modules(self):
+ """Names of modules that should be skipped when running tests.
+
+ These are a subset of import_modules. If a module has submodules,
+ they are skipped as well (meaning a.b is skipped if a is contained).
+
+ Returns:
+ list: list of strings of module names
+ """
+ return []
+
+ @property
def build_directory(self):
"""The root directory of the Python package.