harpy
single-cell spatial proteomics analysis that makes you happy
Harpy: single-cell spatial proteomics analysis that makes you happy 
Note: This package is still under very active development.
Installation
Recommended for end-users. Install the latest harpy-analysis
PyPI package with the extra
dependencies in a local Python environment:
uv venv --python=3.12 # set python version
source .venv/bin/activate # activate the virtual environment
uv pip install 'harpy-analysis[extra]' # use uv to pip install dependencies
python -c 'import harpy; print(harpy.__version__)' # check if the package is installed
If you're a developer, read the contribution guide. Checkout the docs for more installation instructions.
Tutorials
Tutorials are available here.
Usage
Learn how Harpy can be integrated into your workflow in different ways.
Contributing
See here for info on how to contribute to Harpy.
References
License
Check the license. Harpy is free for academic usage. For commercial usage, please contact Saeyslab.
Issues
If you encounter any problems, please file an issue along with a detailed description.
Version:
- 0.2.0
Last updated:
- 2025-05-29
First released:
- 2024-12-09
License:
- Academic Non-commercial Softwa...
Python versions supported:
Operating system:
- Information not submitted
Requirements:
- crick
- dask<=2024.11.2,>=2024.4.1
- datasets>=2.16.0
- distributed
- flowsom
- geopandas>=1.0.1
- lazy-loader>=0.4
- leidenalg>=0.9.1
- magicgui
- nptyping
- ome-zarr>=0.9.0
- omegaconf==2.3.0
- pyrootutils
- rasterio>=1.3.2
- scanpy>=1.9.1
- seaborn>=0.12.2
- session-info2
- spatialdata-io>=0.1.6
- spatialdata>=0.2.6
- universal-pathlib
- voronoi-diagram-for-polygons>=0.1.6
- xarray-dataclasses>=1.9.1
- xarray>=2024.10.0
- basicpy>=1.0.0; extra == 'basic'
- jax>=0.4.6; extra == 'basic'
- jaxlib>=0.4.6; extra == 'basic'
- asv; extra == 'benchmark'
- cellpose>=2.2.3; extra == 'cellpose'
- hydra-colorlog>=1.2.0; extra == 'cli'
- hydra-core>=1.2.0; extra == 'cli'
- hydra-submitit-launcher>=1.2.0; extra == 'cli'
- submitit>=1.4.5; extra == 'cli'
- flowsom; extra == 'clustering'
- scikit-learn>=1.3.1; extra == 'clustering'
- asv; extra == 'dev'
- bokeh; extra == 'dev'
- cellpose>=2.2.3; extra == 'dev'
- datasets; extra == 'dev'
- flowsom; extra == 'dev'
- hydra-colorlog>=1.2.0; extra == 'dev'
- hydra-core>=1.2.0; extra == 'dev'
- hydra-submitit-launcher>=1.2.0; extra == 'dev'
- instanseg-torch>=0.0.8; extra == 'dev'
- ipython; extra == 'dev'
- ipywidgets; extra == 'dev'
- joypy; extra == 'dev'
- myst-nb; extra == 'dev'
- napari-spatialdata>=0.2.6; extra == 'dev'
- napari[all]>=0.4.18; extra == 'dev'
- nbconvert; extra == 'dev'
- opencv-python; extra == 'dev'
- pre-commit; extra == 'dev'
- pytest; extra == 'dev'
- pytest-cov; extra == 'dev'
- pytest-qt; extra == 'dev'
- scikit-learn>=1.3.1; extra == 'dev'
- spatialdata-plot<0.2.9; extra == 'dev'
- sphinx-autodoc-typehints; extra == 'dev'
- sphinx-book-theme>=1.0.0; extra == 'dev'
- sphinx-copybutton; extra == 'dev'
- sphinx-design; extra == 'dev'
- sphinx-rtd-theme; extra == 'dev'
- sphinx>=4.5; extra == 'dev'
- sphinxcontrib-bibtex>=1.0.0; extra == 'dev'
- squidpy; extra == 'dev'
- submitit>=1.4.5; extra == 'dev'
- supervenn>=0.5.0; extra == 'dev'
- textalloc; extra == 'dev'
- tox; extra == 'dev'
- tqdm; extra == 'dev'
- twine>=4.0.2; extra == 'dev'
- myst-nb; extra == 'docs'
- sphinx-autodoc-typehints; extra == 'docs'
- sphinx-book-theme>=1.0.0; extra == 'docs'
- sphinx-copybutton; extra == 'docs'
- sphinx-design; extra == 'docs'
- sphinx-rtd-theme; extra == 'docs'
- sphinx>=4.5; extra == 'docs'
- sphinxcontrib-bibtex>=1.0.0; extra == 'docs'
- bokeh; extra == 'extra'
- cellpose>=2.2.3; extra == 'extra'
- flowsom; extra == 'extra'
- hydra-colorlog>=1.2.0; extra == 'extra'
- hydra-core>=1.2.0; extra == 'extra'
- hydra-submitit-launcher>=1.2.0; extra == 'extra'
- instanseg-torch>=0.0.8; extra == 'extra'
- ipython; extra == 'extra'
- ipywidgets; extra == 'extra'
- joypy; extra == 'extra'
- napari-spatialdata>=0.2.6; extra == 'extra'
- napari[all]>=0.4.18; extra == 'extra'
- nbconvert; extra == 'extra'
- opencv-python; extra == 'extra'
- scikit-learn>=1.3.1; extra == 'extra'
- spatialdata-plot<0.2.9; extra == 'extra'
- squidpy; extra == 'extra'
- submitit>=1.4.5; extra == 'extra'
- supervenn>=0.5.0; extra == 'extra'
- textalloc; extra == 'extra'
- tqdm; extra == 'extra'
- instanseg-torch>=0.0.8; extra == 'instanseg'
- napari-spatialdata>=0.2.6; extra == 'napari'
- napari[all]>=0.4.18; extra == 'napari'
- bokeh; extra == 'notebook'
- ipython; extra == 'notebook'
- ipywidgets; extra == 'notebook'
- joypy; extra == 'notebook'
- nbconvert; extra == 'notebook'
- spatialdata-plot<0.2.9; extra == 'notebook'
- supervenn>=0.5.0; extra == 'notebook'
- textalloc; extra == 'notebook'
- tqdm; extra == 'notebook'
- opencv-python; extra == 'opencv'
- cellpose>=2.2.3; extra == 'segmentation'
- instanseg-torch>=0.0.8; extra == 'segmentation'
- datasets; extra == 'test'
- opencv-python; extra == 'test'
- pytest; extra == 'test'
- pytest-cov; extra == 'test'
- pytest-qt; extra == 'test'
- tox; extra == 'test'