Add skip_import to PythonPackage and use it in py-nilearn (#32664)
* Add skip_import to PythonPackage and use it in py-nilearn * Fix dependencies
This commit is contained in:
parent
2c7c749986
commit
d4c13b0f8f
3 changed files with 58 additions and 36 deletions
|
@ -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,
|
"test", as these likely won't end up in the installation directory,
|
||||||
or may require test dependencies like pytest to be installed.
|
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
|
Import tests can be run during the installation using ``spack install
|
||||||
--test=root`` or at any time after the installation using
|
--test=root`` or at any time after the installation using
|
||||||
``spack test run``.
|
``spack test run``.
|
||||||
|
|
|
@ -138,12 +138,28 @@ def import_modules(self):
|
||||||
path.replace(root + os.sep, "", 1).replace(".py", "").replace("/", ".")
|
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))
|
tty.debug("Detected the following modules: {0}".format(modules))
|
||||||
|
|
||||||
return 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
|
@property
|
||||||
def build_directory(self):
|
def build_directory(self):
|
||||||
"""The root directory of the Python package.
|
"""The root directory of the Python package.
|
||||||
|
|
|
@ -11,7 +11,10 @@ class PyNilearn(PythonPackage):
|
||||||
|
|
||||||
homepage = "https://nilearn.github.io/"
|
homepage = "https://nilearn.github.io/"
|
||||||
pypi = "nilearn/nilearn-0.7.1.tar.gz"
|
pypi = "nilearn/nilearn-0.7.1.tar.gz"
|
||||||
|
git = "https://github.com/nilearn/nilearn"
|
||||||
|
|
||||||
|
version("0.9.2", sha256="8da8d3835d92cd7b8a6cc92455a489d7e7f5994cf64fc71bce653e362773b9e4")
|
||||||
|
version("0.9.0", sha256="f9c8e30adef51489910aec7724b5699de178427d3ae63873dad9b23dd321fe76")
|
||||||
version("0.8.1", sha256="a0489940855130f35bbc4cac0750479a6f82025215ea7b1d778faca064219298")
|
version("0.8.1", sha256="a0489940855130f35bbc4cac0750479a6f82025215ea7b1d778faca064219298")
|
||||||
version("0.8.0", sha256="f2d3dc81005f829f3a183efa6c90d698ea6818c06264d2e3f03e805c4340febb")
|
version("0.8.0", sha256="f2d3dc81005f829f3a183efa6c90d698ea6818c06264d2e3f03e805c4340febb")
|
||||||
version("0.7.1", sha256="8b1409a5e1f0f6d1a1f02555c2f11115a2364f45f1e57bcb5fb3c9ea11f346fa")
|
version("0.7.1", sha256="8b1409a5e1f0f6d1a1f02555c2f11115a2364f45f1e57bcb5fb3c9ea11f346fa")
|
||||||
|
@ -25,13 +28,22 @@ class PyNilearn(PythonPackage):
|
||||||
|
|
||||||
variant("plotting", default=False, description="Enable plotting functionalities")
|
variant("plotting", default=False, description="Enable plotting functionalities")
|
||||||
|
|
||||||
|
depends_on("py-joblib@0.15:", when="@0.9.1:", type=("build", "run"))
|
||||||
|
depends_on("py-joblib@0.12:", when="@0.7:", type=("build", "run"))
|
||||||
|
depends_on("py-joblib@0.11:", when="@0.6:", type=("build", "run"))
|
||||||
|
depends_on("py-lxml", when="@0.9.1:", type=("build", "run"))
|
||||||
|
depends_on("py-nibabel@3:", when="@0.9.1:", type=("build", "run"))
|
||||||
|
depends_on("py-nibabel@2.5:", when="@0.8:", type=("build", "run"))
|
||||||
|
depends_on("py-nibabel@2.0.2:", type=("build", "run"))
|
||||||
|
depends_on("py-numpy@1.18:", when="@0.9.1:", type=("build", "run"))
|
||||||
depends_on("py-numpy@1.16:", when="@0.8:", type=("build", "run"))
|
depends_on("py-numpy@1.16:", when="@0.8:", type=("build", "run"))
|
||||||
depends_on("py-numpy@1.11:", when="@0.5:", type=("build", "run"))
|
depends_on("py-numpy@1.11:", when="@0.5:", type=("build", "run"))
|
||||||
depends_on("py-numpy@1.6.1:", type=("build", "run"))
|
depends_on("py-numpy@1.6.1:", type=("build", "run"))
|
||||||
depends_on("py-scipy@1.2:", when="@0.8:", type=("build", "run"))
|
depends_on("py-pandas@1:", when="@0.9.1:", type=("build", "run"))
|
||||||
depends_on("py-scipy@0.19:", when="@0.6:", type=("build", "run"))
|
depends_on("py-pandas@0.24.0:", when="@0.8:", type=("build", "run"))
|
||||||
depends_on("py-scipy@0.17:", when="@0.5:", type=("build", "run"))
|
depends_on("py-pandas@0.18.0:", when="@0.7:", type=("build", "run"))
|
||||||
depends_on("py-scipy@0.14:", type=("build", "run"))
|
depends_on("py-requests@2:", when="@0.7:", type=("build", "run"))
|
||||||
|
depends_on("py-scikit-learn@0.22:", when="@0.9.1:", type=("build", "run"))
|
||||||
depends_on("py-scikit-learn@0.21:", when="@0.8:", type=("build", "run"))
|
depends_on("py-scikit-learn@0.21:", when="@0.8:", type=("build", "run"))
|
||||||
depends_on("py-scikit-learn@0.19:", when="@0.7:", type=("build", "run"))
|
depends_on("py-scikit-learn@0.19:", when="@0.7:", type=("build", "run"))
|
||||||
# sklearn.linear_model.base was deprecated in py-scikit.learn@0.24
|
# sklearn.linear_model.base was deprecated in py-scikit.learn@0.24
|
||||||
|
@ -39,43 +51,24 @@ class PyNilearn(PythonPackage):
|
||||||
# older py-nilearn versions use import sklearn.external.joblib which was
|
# older py-nilearn versions use import sklearn.external.joblib which was
|
||||||
# deprecated in py-scikit-learn@0.23:
|
# deprecated in py-scikit-learn@0.23:
|
||||||
depends_on("py-scikit-learn@0.15:0.22", when="@:0.5", type=("build", "run"))
|
depends_on("py-scikit-learn@0.15:0.22", when="@:0.5", type=("build", "run"))
|
||||||
depends_on("py-joblib@0.12:", when="@0.7:", type=("build", "run"))
|
depends_on("py-scipy@1.5:", when="@0.9.1:", type=("build", "run"))
|
||||||
depends_on("py-joblib@0.11:", when="@0.6:", type=("build", "run"))
|
depends_on("py-scipy@1.2:", when="@0.8:", type=("build", "run"))
|
||||||
depends_on("py-nibabel@2.5:", when="@0.8:", type=("build", "run"))
|
depends_on("py-scipy@0.19:", when="@0.6:", type=("build", "run"))
|
||||||
depends_on("py-nibabel@2.0.2:", type=("build", "run"))
|
depends_on("py-scipy@0.17:", when="@0.5:", type=("build", "run"))
|
||||||
depends_on("py-pandas@0.24.0:", when="@0.8:", type=("build", "run"))
|
depends_on("py-scipy@0.14:", type=("build", "run"))
|
||||||
depends_on("py-pandas@0.18.0:", when="@0.7:", type=("build", "run"))
|
|
||||||
depends_on("py-requests@2:", when="@0.7:", type=("build", "run"))
|
|
||||||
|
|
||||||
depends_on("py-matplotlib@2.0:", when="@0.6: +plotting", type=("build", "run"))
|
depends_on("py-matplotlib@3:", when="@0.9.1: +plotting", type=("build", "run"))
|
||||||
|
depends_on("py-matplotlib@2:", when="@0.6: +plotting", type=("build", "run"))
|
||||||
# older py-nilearn versions use matplotlib.cm.revcmap which was deprecated
|
# older py-nilearn versions use matplotlib.cm.revcmap which was deprecated
|
||||||
# in py-matplotlib@3.4:
|
# in py-matplotlib@3.4:
|
||||||
depends_on("py-matplotlib@1.1.1:3.3", when="@:0.6 +plotting", type=("build", "run"))
|
depends_on("py-matplotlib@1.5.1:3.3", when="@:0.5 +plotting", type=("build", "run"))
|
||||||
|
depends_on("py-matplotlib@1.1.1:3.3", when="0.4.2 +plotting", type=("build", "run"))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def import_modules(self):
|
def skip_modules(self):
|
||||||
modules = [
|
modules = []
|
||||||
"nilearn",
|
|
||||||
"nilearn.connectome",
|
|
||||||
"nilearn.datasets",
|
|
||||||
"nilearn.decoding",
|
|
||||||
"nilearn.decomposition",
|
|
||||||
"nilearn.image",
|
|
||||||
"nilearn.input_data",
|
|
||||||
"nilearn.masking",
|
|
||||||
"nilearn.mass_univariate",
|
|
||||||
"nilearn.regions",
|
|
||||||
"nilearn.signal",
|
|
||||||
"nilearn.surface",
|
|
||||||
]
|
|
||||||
|
|
||||||
if self.spec.satisfies("@0.6:"):
|
if self.spec.satisfies("~plotting"):
|
||||||
modules.append("nilearn.externals")
|
|
||||||
|
|
||||||
if self.spec.satisfies("@0.7:"):
|
|
||||||
modules.append("nilearn.glm")
|
|
||||||
|
|
||||||
if "+plotting" in self.spec:
|
|
||||||
modules.append("nilearn.plotting")
|
modules.append("nilearn.plotting")
|
||||||
if self.spec.satisfies("@0.7:"):
|
if self.spec.satisfies("@0.7:"):
|
||||||
modules.append("nilearn.reporting")
|
modules.append("nilearn.reporting")
|
||||||
|
|
Loading…
Reference in a new issue