From b5bcd164ee2ff6ce68d370a3dcc99f2661f2c23d Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Fri, 20 Dec 2024 14:14:06 +0100 Subject: [PATCH] Fix and add test --- spacy/__init__.py | 9 ++++++--- spacy/tests/test_misc.py | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/spacy/__init__.py b/spacy/__init__.py index 95dea2668..39032b331 100644 --- a/spacy/__init__.py +++ b/spacy/__init__.py @@ -95,11 +95,14 @@ def blank( config = util.dot_to_dict(config) return LangClass.from_config(config, vocab=vocab, meta=meta) + def __getattr__(name): + if name == "cli": + import importlib + + return importlib.import_module("." + name, __name__) if name == "info": from .cli.info import info + return info - if name == "cli": - from . import cli - return cli raise AttributeError(f"module {__name__!r} has no attribute {name!r}") diff --git a/spacy/tests/test_misc.py b/spacy/tests/test_misc.py index d2a41ff0f..eec444c18 100644 --- a/spacy/tests/test_misc.py +++ b/spacy/tests/test_misc.py @@ -495,3 +495,27 @@ def test_find_available_port(): with pytest.warns(UserWarning, match="already in use"): found_port = find_available_port(port, host, auto_select=True) assert found_port == port + 1, "Didn't find next port" + + +def test_lazy_load_cli(): + import subprocess + import sys + from textwrap import dedent + + subprocess.run( + [ + sys.executable, + "-c", + dedent( + """\ + import sys + import spacy + assert "spacy" in sys.modules + assert "spacy.cli" not in sys.modules + spacy.cli + assert "spacy.cli" in sys.modules + """ + ), + ], + check=True, + )