Index: python-emmet-core/tests/test_electronic_structure.py
===================================================================
--- python-emmet-core.orig/tests/test_electronic_structure.py	2023-02-21 18:07:59.186938784 +0100
+++ python-emmet-core/tests/test_electronic_structure.py	2023-02-21 18:07:59.182938751 +0100
@@ -1,5 +1,8 @@
 import pytest
-from maggma.stores import JSONStore
+try:
+    from maggma.stores import JSONStore
+except ModuleNotFoundError:
+    JSONStore = None
 from monty.serialization import loadfn
 from pymatgen.electronic_structure.bandstructure import BandStructureSymmLine
 from pymatgen.electronic_structure.dos import CompleteDos
@@ -34,7 +37,7 @@
     return dos
 
 def test_from_bsdos_1(bandstructure, dos, structure):
-
+    pytest.importorskip("seekpath") # pymatgen/symmetry/kpath.py needs SeeK-path Hinuma et al. (2015)
     es_doc = ElectronicStructureDoc.from_bsdos(
         material_id="mp-13",
         dos={"mp-1671247": dos},
@@ -74,6 +77,7 @@
     )
 
 
+@pytest.mark.skipif(JSONStore is None, reason="maggma is not available")
 def test_from_bsdos_2(bandstructure_fs, dos_fs):
 
     dos_fs.connect()
Index: python-emmet-core/tests/mobility/test_migrationgraph.py
===================================================================
--- python-emmet-core.orig/tests/mobility/test_migrationgraph.py	2023-02-21 18:07:59.186938784 +0100
+++ python-emmet-core/tests/mobility/test_migrationgraph.py	2023-02-21 18:07:59.182938751 +0100
@@ -4,8 +4,11 @@
 from monty.serialization import loadfn
 from pymatgen.analysis.structure_matcher import StructureMatcher
 from pymatgen.entries.computed_entries import ComputedEntry
-from emmet.core.mobility.migrationgraph import MigrationGraphDoc
-
+try:
+    from emmet.core.mobility.migrationgraph import MigrationGraphDoc
+except (ModuleNotFoundError,ImportError):
+    pytest.skip(reason="Install pymatgen-analysis-diffusion to use MigrationGraphDoc",
+                allow_module_level=True)
 
 @pytest.fixture(scope="session")
 def get_entries(test_dir):
Index: python-emmet-core/tests/test_robocrys.py
===================================================================
--- python-emmet-core.orig/tests/test_robocrys.py	2023-02-21 18:07:59.186938784 +0100
+++ python-emmet-core/tests/test_robocrys.py	2023-02-21 18:07:59.182938751 +0100
@@ -3,6 +3,7 @@
 from pymatgen.core import Structure
 from pymatgen.util.testing import PymatgenTest
 
+pytest.importorskip("robocrys")
 from emmet.core.robocrys import RobocrystallogapherDoc
 
 test_structures = {
@@ -31,8 +32,11 @@
 @pytest.mark.parametrize("structure", test_structures.values())
 def test_robocrys(structure: Structure):
     """Very simple test to make sure this actually works"""
-    print(f"Should work : {structure.composition}")
-    doc = RobocrystallogapherDoc.from_structure(
-        structure=structure, material_id=33, deprecated=False
-    )
-    assert doc is not None
+    try:
+        print(f"Should work : {structure.composition}")
+        doc = RobocrystallogapherDoc.from_structure(
+            structure=structure, material_id=33, deprecated=False
+        )
+        assert doc is not None
+    except (ModuleNotFoundError,ImportError):
+        pytest.xfail("requires robocrys")
Index: python-emmet-core/tests/molecules/test_redox.py
===================================================================
--- python-emmet-core.orig/tests/molecules/test_redox.py	2023-02-21 12:09:10.288027639 +0100
+++ python-emmet-core/tests/molecules/test_redox.py	2023-02-21 18:10:14.892067605 +0100
@@ -37,6 +37,7 @@
 
 @pytest.fixture(scope="session")
 def ie_task(test_dir):
+    pytest.importorskip("custodian")
     task = loadfn((test_dir / "redox_doc" / "ie_task.json").as_posix())
     task_doc = TaskDocument(**task)
     return task_doc
