user975135
user975135

Reputation:

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 my code should check on each startup and import any module put there.

I also don't want an extra scope added to the imported stuff (not "myfolder.mymodule.something", but "something")

Upvotes: 8

Views: 16462

Answers (3)

Aurélien
Aurélien

Reputation: 1852

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())

Upvotes: 0

jsbueno
jsbueno

Reputation: 110208

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.

Upvotes: 7

luke14free
luke14free

Reputation: 2539

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

Upvotes: 2

Related Questions