Skip to content
25 changes: 25 additions & 0 deletions src/transformers/utils/import_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2270,3 +2270,28 @@ def define_import_structure(module_path: str) -> IMPORT_STRUCTURE_T:
"""
import_structure = create_import_structure_from_path(module_path)
return spread_import_structure(import_structure)


def clear_import_cache():
"""
Clear cached Transformers modules to allow reloading modified code.

This is useful when actively developing/modifying Transformers code.
"""
# Get all transformers modules
transformers_modules = [mod_name for mod_name in sys.modules if mod_name.startswith("transformers.")]

# Remove them from sys.modules
for mod_name in transformers_modules:
module = sys.modules[mod_name]
# Clear _LazyModule caches if applicable
if isinstance(module, _LazyModule):
module._objects = {} # Clear cached objects
del sys.modules[mod_name]

# Force reload main transformers module
if "transformers" in sys.modules:
main_module = sys.modules["transformers"]
if isinstance(main_module, _LazyModule):
main_module._objects = {} # Clear cached objects
importlib.reload(main_module)
30 changes: 30 additions & 0 deletions tests/utils/test_import_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import sys

from transformers.utils.import_utils import clear_import_cache

def test_clear_import_cache():
# Import some transformers modules
from transformers import AutoModel, AutoTokenizer

# Get initial module count
initial_modules = {
name: mod for name, mod in sys.modules.items()
if name.startswith('transformers.')
}

# Verify we have some modules loaded
assert len(initial_modules) > 0

# Clear cache
clear_import_cache()

# Check modules were removed
remaining_modules = {
name: mod for name, mod in sys.modules.items()
if name.startswith('transformers.')
}
assert len(remaining_modules) < len(initial_modules)

# Verify we can reimport
from transformers import AutoModel, AutoTokenizer
assert 'transformers.models.auto.modeling_auto' in sys.modules