Using `exec()` is generally regarded as bad practice (http://stackoverflow.com/questions/1933451/why-should-exec-and-eval-be-avoided). Since you are trying to import a module, you can do the same by using the `importlib` package. Python 2: https://docs.python.org/2/library/importlib.html Python 3: https://docs.python.org/3/library/importlib.html#module-importlib Using it should clean up the rest of the code as well. You might also be interested in this discussion for more possibilities regarding imports: http://stackoverflow.com/questions/1057431/loading-all-modules-in-a-folder-in-python Edit 1: So I gave this a shot and came up with this: import os import sys import pkgutil from importlib import import_module import inspect import base # I don't want to import foo, bar, or whatever other file is in pkg/ all_my_base_classes = {} pkg_dir = os.path.dirname(__file__) for (module_loader, name, ispkg) in pkgutil.iter_modules([pkg_dir]): module = import_module("." + name, __package__) for name, classObject in inspect.getmembers(module, inspect.isclass): if name.startswith('_'): continue if issubclass(classObject, base._MyBase): all_my_base_classes[name] = classObject I'm still not sure if it isn't easier to use the `__all__` method mentioned in the SO article, but that might depend on how you are planning to use that `all_my_base_classes` variable.