告诉Python从某个文件夹导入所有模块的最佳(读取:最简洁)方法是什么?
我想让人们把他们的“mods”(模块)放在我的应用程序的一个文件夹中,我的代码应该在每次启动时检查并导入放在那里的任何模块。
我也不希望在导入的东西中添加额外的范围(不是“myfolder.mymodule.something”,而是“某事”)
答案 0 :(得分:5)
如果在模块中转换文件夹本身,通过使用__init__.py
文件并使用from <foldername> import *
适合您,则可以迭代文件夹内容
使用“os.listdir”或“glob.glob”,并使用__import__
内置函数导入以“.py”结尾的每个文件:
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)
这种方法的好处是:它允许您动态地将模块名称传递给__import__
- 而“onmport语句需要对模块名称进行硬编码,并且它允许您检查有关文件的其他内容 - 可能是大小,或者如果它们导入某些必需的模块,则在导入它们之前。
答案 1 :(得分:1)
创建名为
的文件 __init__.py
在文件夹中并导入文件夹名称,如下所示:
>>> from <folder_name> import * #Try to avoid importing everything when you can
>>> from <folder_name> import module1,module2,module3 #And so on
答案 2 :(得分:0)
您可能想尝试该项目:https://gitlab.com/aurelien-lourot/importdir
使用此模块,您只需要编写两行来从目录中导入所有插件,而您不需要额外的__init__.py
(或任何其他其他额外文件):
import importdir
importdir.do("plugins/", globals())