8

告诉 Python 从某个文件夹导入所有模块的最佳(阅读:最干净)方法是什么?

我想允许人们将他们的“mods”(模块)放在我的应用程序的一个文件夹中,我的代码应该在每次启动时检查并导入放置在那里的任何模块。

我也不希望在导入的东西中添加额外的范围(不是“myfolder.mymodule.something”,而是“something”)

4

3 回答 3

6

如果在模块中转换文件夹本身,通过使用__init__.py文件和使用from <foldername> import *适合您,您可以使用“os.listdir”或“glob.glob”迭代文件夹内容,并导入以“.py”结尾的每个文件使用__import__内置功能:

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__-而ìmport语句需要对模块名称进行硬编码,并且它允许您检查有关文件的其他内容-可能是大小,或者它们是否导入某些需要的模块,在导入它们之前。

于 2012-04-06T13:57:55.867 回答
2

创建一个名为

 __init__.py

在文件夹内并像这样导入文件夹名称:

>>> from <folder_name> import * #Try to avoid importing everything when you can
>>> from <folder_name> import module1,module2,module3 #And so on
于 2012-04-06T12:31:34.477 回答
0

您可能想尝试该项目:https ://gitlab.com/aurelien-lourot/importdir

使用这个模块,你只需要写两行来从你的目录中导入所有插件,你不需要额外的__init__.py(或任何其他额外的文件):

import importdir
importdir.do("plugins/", globals())
于 2014-11-19T00:01:46.193 回答