NA-MIC Project WeeksMany Slicer extension developers have to deal with the problem of external python dependencies: how to specify them, how and when to install them, and how to validate that the required things are installed. Everyone addresses the problem in a different way, often re-inventing the wheel and also often generating new great ideas. I’d like to collect all the best practices and turn them into a framework that is built into core slicer for extension developers to more easily grab and use. Something like “stick your dependencies in here and the use slicer.util.check_python_dependences and slicer.util.install_python_dependencies. If that turns out to be a bad idea for whatever reason, at least I can collect all the best practices and put them into the extension development documentation.
2026-01-26
I’ve broken down the problem of external Python dependency into three components:
The table below includes all 94 extensions that are currently in the Slicer extension index and that have some external python dependencies to deal with, and my best quick guess as to how they approach each of the problems above. Here is a legend to interpret the terms I’ve put in the table:
slicer.util.pip_install.pip_install but some script or shell process that carries out installation).| Extension | Checking | Triggering | Installing |
|---|---|---|---|
| ShapeVariationAnalyzer | simple | user | isolated |
| SlicerVolBrain | simple | user | user |
| PerkTutor | simple | top level | simple |
| Q3DCExtension | simple | top level | simple |
| QuantitativeReporting | simple | top level | simple |
| SegmentationReview | simple | top level | simple |
| Slicer-ABLTemporalBoneSegmentation | simple | top level | simple |
| Slicer-ASLtoolkit | simple | top level | simple |
| Slicer-MusculoskeletalAnalysis | simple | processing | simple |
| Slicer-PET-MUST-segmenter | simple | top level | simple |
| Slicer-TITAN | simple | processing | simple |
| SlicerANTsPy | simple | top level | simple |
| SlicerAnatomyCarve | simple | top level | simple |
| SlicerArduinoController | simple | top level | simple |
| SlicerAuto3dgm | simple | top level | simple |
| SlicerAutomatedDentalTools | version | processing | simple |
| SlicerAutoscoperM | simple | processing | simple |
| SlicerBigImage | simple | processing | simple |
| SlicerBiomech | simple | processing | simple |
| SlicerBreastUltrasoundAnalysis | simple | top level | simple |
| SlicerBreast_DCEMRI_FTV | simple | top level | simple |
| SlicerCADSWholeBodyCTSeg | simple | processing | simple |
| SlicerCBCTToothSegmentation | simple | processing | simple |
| SlicerCineTrack | simple | processing | simple |
| SlicerColoc-Z-Stats | simple | processing | simple |
| SlicerConnectToSupervisely | simple | processing | simple |
| SlicerDBSCoalignment | simple | processing | simple |
| SlicerDICOMwebBrowser | simple | top level | simple |
| SlicerDMRI | simple | processing | simple |
| SlicerDebuggingTools | simple | processing | simple |
| SlicerDensityLungSegmentation | simple | processing | simple |
| SlicerDentalModelSeg | version | processing | isolated, blocking-prevention |
| SlicerFreeSurfer | simple | top level | simple |
| SlicerHDBrainExtraction | simple | processing | simple |
| SlicerHeadCTDeid | simple | processing | simple |
| SlicerHeart | simple | processing | simple |
| SlicerIDCBrowser | simple | top level | display |
| SlicerIVIMFit | simple | processing | simple |
| SlicerImageAugmenter | simple | button | simple |
| SlicerJupyter | simple | processing | simple |
| SlicerKonfAI | version | top level | blocking-prevention |
| SlicerLungCTAnalyzer | simple | processing | simple |
| SlicerMEMOS | simple | processing | simple |
| SlicerMHubRunner | simple | top level | simple |
| SlicerMONAIAuto3DSeg | version | processing | blocking-prevention |
| SlicerMONAIViz | simple | processing | simple |
| SlicerMOOSE | simple | button | simple |
| SlicerMassVision | simple | top level | simple |
| SlicerModalityConverter | simple | button | simple |
| SlicerMorph | simple | top level | simple |
| SlicerMorphoDepot | simple | top level | simple |
| SlicerMultiverSeg | simple | processing | simple |
| SlicerMuscleMap | simple | processing | simple |
| SlicerNNInteractive | simple | top level | display, blocking-prevention |
| SlicerNNUnet | version | processing | simple |
| SlicerNetstim | simple | processing | simple |
| SlicerNeuro | simple | processing | display |
| SlicerNeuroStrip | simple | top level | simple |
| SlicerNeuropacs | version | processing | simple |
| SlicerOpenLIFU | simple | processing | display |
| SlicerOrbitSurgerySim | simple | top level | display |
| SlicerPhotogrammetry | simple | top level | simple |
| SlicerPipelines | simple | top level | simple |
| SlicerPolycysticKidneySeg | simple | button | simple |
| SlicerPyTorch | simple | button | simple |
| SlicerPythonTestRunner | simple | processing | simple |
| SlicerRVXLiverSegmentation | simple | top level | simple |
| SlicerRadiomics | simple | top level | simple |
| SlicerSPECTRecon | version | top level | display |
| SlicerSandbox | simple | processing | simple |
| SlicerSegmentHumanBody | simple | top level | simple |
| SlicerSegmentWithSAM | simple | top level | simple |
| SlicerSkeletalRepresentation | simple | top level | simple |
| SlicerSoundControl | simple | top level | simple |
| SlicerStereotaxia | simple | processing | simple |
| SlicerSurfaceLearner | simple | top level | simple |
| SlicerThemes | simple | button | simple |
| SlicerTissueSegmentation | simple | top level | simple |
| SlicerTomoSAM | simple | processing | simple |
| SlicerTorchIO | simple | processing | simple |
| SlicerTotalSegmentator | simple | processing | simple |
| SlicerTractParcellation | simple | button | simple |
| SlicerTrame | simple | top level | simple |
| SlicerUltrasound | simple | top level | simple |
| SlicerUniGradICON | simple | top level | simple |
| Slicerflywheelcaseiterator | simple | top level | simple |
| TCIABrowser | simple | top level | simple |
| TOMAAT-Slicer | simple | top level | simple |
| aigt | simple | top level | simple |
| opendose3d | simple | top level | display |
| slicer_flywheel_connect | simple | top level | simple |
2026-01-26
In the table above, the green cells are the items I think are worth revisiting and learning from for this project.
Other things I found while looking through these that I’d like to consider:
slicer.util.restart to restart after installslicer.util.showStatusMessageslicer.util.displayPythonShellslicer.util.tryWithErrorDisplayBusyCursor context managerFurther points that I’d like to follow up on:
No response