spack/var/spack/repos/builtin/packages/py-cellprofiler/package.py
Pariksheet Nanda e66e572656
py-cellprofiler: add 4.2.6 new package (#44824)
* py-cellprofiler: add 4.2.6 new package

* py-mysqlclient: Limit pkg-config patch to @1.4:

Co-authored-by: Wouter Deconinck <wdconinc@gmail.com>

---------

Co-authored-by: Wouter Deconinck <wdconinc@gmail.com>
2024-09-02 14:21:39 -05:00

154 lines
6.0 KiB
Python

# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class PyCellprofiler(PythonPackage):
"""CellProfiler cell image analysis software.
CellProfiler is a free open-source software designed to enable biologists
without training in computer vision or programming to quantitatively
measure phenotypes from thousands of images automatically.
"""
homepage = "https://cellprofiler.org"
pypi = "cellprofiler/CellProfiler-4.2.6.tar.gz"
git = "https://github.com/CellProfiler/CellProfiler.git"
maintainers("omsai")
license("BSD-3-Clause", checked_by="omsai")
version("4.2.6", sha256="37e2a35dccff456afda96a4442dff2d23809c8ee271607a347e386aeb4af2628")
depends_on("python@3.8:", type=("build", "run"))
depends_on("py-setuptools@64:", type="build")
depends_on("py-setuptools-scm@8:", type="build")
depends_on("py-boto3@1.12.28:", type=("build", "run"))
depends_on("py-cellprofiler-core@4.2.6", type=("build", "run"))
depends_on("py-centrosome@1.2.2:", type=("build", "run"))
depends_on("py-docutils@0.15.2:", type=("build", "run"))
# More recent versions of h5py cause:
# AttributeError: module 'h5py' has no attribute 'Dataset
depends_on("py-h5py@3.6:3.7~mpi", type=("build", "run"))
depends_on("py-imageio@2.5:", type=("build", "run"))
depends_on("py-inflect@2.1:6", type=("build", "run"))
depends_on("py-jinja2@2.11.2:", type=("build", "run"))
depends_on("py-joblib@0.13:", type=("build", "run"))
depends_on("py-mahotas@1.4:", type=("build", "run"))
# matplotlib.cm.get_cmap does not exist in 3.9.0 onwards.
depends_on("py-matplotlib@3.1.3:3.8", type=("build", "run"))
depends_on("py-mysqlclient@1.4.6", type=("build", "run"))
depends_on("py-numpy@1.20.1:", type=("build", "run"))
depends_on("py-pillow@7.1:", type=("build", "run"))
depends_on("py-prokaryote@2.4.4:", type=("build", "run"))
depends_on("py-python-bioformats@4.0.7:", type=("build", "run"))
depends_on("py-python-javabridge@4.0.3:", type=("build", "run"))
depends_on("py-pyzmq@22.3:22", type=("build", "run"))
depends_on("py-sentry-sdk@0.18:", type=("build", "run"))
depends_on("py-requests@2.22:", type=("build", "run"))
depends_on("py-scikit-image@0.18.3:", type=("build", "run"))
depends_on("py-scikit-learn@0.20:0", type=("build", "run"))
depends_on("py-scipy", type=("build", "run"))
depends_on("py-six", type=("build", "run"))
depends_on("py-tifffile@:2022.4.21", type=("build", "run"))
depends_on("py-wxpython@4.1.0:4", type=("build", "run"))
depends_on("py-pytest", type=("run", "test"), when="@4.2.6 +tests")
# Run the post-install tests with `spack test run py-cellprofiler`. We
# need the variant to add the pytest executable to the PATH.
variant("tests", default=False, description="Post-install tests.")
# The pypi tests directory is incomplete.
resource(
name="tests-upstream",
destination="",
placement={
"tests/conftest.py": "tests/conftest.py",
"tests/gui": "tests/gui",
"tests/__init__.py": "tests/__init__.py",
"tests/modules": "tests/modules",
"tests/resources": "tests/resources",
"tests/test_cellprofiler.py": "tests/test_cellprofiler.py",
"tests/test_haralick.py": "tests/test_haralick.py",
"tests/test_knime_bridge.py": "tests/test_knime_bridge.py",
"tests/test_main.py": "tests/test_main.py",
"tests/test_nowx.py": "tests/test_nowx.py",
"tests/utilities": "tests/utilities",
},
git=git,
tag="v4.2.6",
sha256="5fb562774044d1dc8cffcddf6072d706f71e6649d566980efaab5b30f52ddfa2",
when="@4.2.6 +tests",
)
dir_tests = "tests"
# Leave 'gui' out of 'import_modules' to avoid the curently broken wxpython
# dependency.
import_modules = [
"cellprofiler",
"cellprofiler.icons",
"cellprofiler.library",
"cellprofiler.library.functions",
"cellprofiler.library.modules",
# "cellprofiler.gui",
# "cellprofiler.gui.html",
# "cellprofiler.gui.help",
# "cellprofiler.gui.module_view",
# "cellprofiler.gui.constants",
# "cellprofiler.gui.figure",
# "cellprofiler.gui.workspace_view",
# "cellprofiler.gui.preferences_view",
# "cellprofiler.gui.utilities",
# "cellprofiler.gui.preferences_dialog",
"cellprofiler.modules",
"cellprofiler.modules.plugins",
"cellprofiler.utilities",
]
@when("+tests")
def patch(self):
"""Install tests from git."""
# Install the tests module. Using a module name like "tests" may
# create a namespace collision with other spack packages in the DAG,
# but the alternative would moving tests into cellprofiler and
# extensively patching the tests to be a submodule of cellprofiler
# instead of a standalone module.
filter_file(r"find_packages\([^)]+\)", "find_packages()", "setup.py")
# Include required test data files.
with open("MANIFEST.in", "a") as h:
h.writelines("graft tests")
# For interactive unittest debugging, run:
#
# spack env create cp
# spack env activate cp
# spack add cellprofiler+tests ^hdf5~mpi
# spack install
# git clone --branch v4.2.6 --depth 1 \
# https://github.com/cellprofiler/cellprofiler
# cd cellprofiler/
# pytest --pdb -k "not TestExportToDatabase" tests/
#
# [...]
# 1412 passed, 16 skipped, 75 deselected
def test_cellprofiler_no_gui(self):
"""Test installed package."""
pytest = which("pytest")
prefix = join_path(python_purelib, self.dir_tests)
pytest(
"-v",
# Don't test against the live MySQL database.
"-k",
"not TestExportToDatabase",
prefix,
)