Skip to content Skip to sidebar Skip to footer

Python: Import Every Module From A Folder?

What would be the best (read: cleanest) way to tell Python to import all modules from some folder? I want to allow people to put their 'mods' (modules) in a folder in my app which

Solution 1:

If transforming the folder itself in a module, through the use of a __init__.py file and using from <foldername> import * suits you, you can iterate over the folder contents with "os.listdir" or "glob.glob", and import each file ending in ".py" with the __import__ built-in function:

import os
for name in os.listdir("plugins"):
    if name.endswith(".py"):
          #strip the extension
         module = name[:-3]
         # set the module name in the current global name space:
         globals()[module] = __import__(os.path.join("plugins", name)

The benefit of this approach is: it allows you to dynamically pass the module names to __import__ - while the ìmport statement needs the module names to be hardcoded, and it allows you to check other things about the files - maybe size, or if they import certain required modules, before importing them.


Solution 2:

Create a file named

 __init__.py

inside the folder and import the folder name like this:

>>> from <folder_name> import * #Try to avoid importing everything when you can
>>> from <folder_name> import module1,module2,module3 #And so on

Solution 3:

You might want to try that project: https://gitlab.com/aurelien-lourot/importdir

With this module, you only need to write two lines to import all plugins from your directory and you don't need an extra __init__.py (or any other other extra file):

import importdir
importdir.do("plugins/", globals())

Post a Comment for "Python: Import Every Module From A Folder?"