导入包中的所有模块?

时间:2015-04-24 09:54:07

标签: python python-3.x import

这是我的文件层次结构:

|--main.py
|--package/
   |--__init__.py
   |--a.py
   |--b.py

现在我想做的是这样的事情:

# main.py
from package import *
print(package.a.MyClass)
print(package.b.my_function)

所以基本上我希望它能自动导入package包中的所有内容。 这可能吗? 我宁愿不必手动编写导入,因为我希望它是"将文件拖放到此处并且您已完成"一种制度。

1 个答案:

答案 0 :(得分:2)

我建议使用Python的pkgutil.iter_modules

示例:

import pkgutil


for module_loader, name, ispkg in pkgutil.iter_modules(["/path/to/module"]):
    ...

您对迭代子模块的处理取决于用户。

另一种常用的方法是使用pkg_resources,您也可以查看,我相信setuptools

的一部分

更新:天真的做法是使用__import__os.lsitdir()

import os

def load_modules(pkg):
    for filename in os.listdir(os.path.dirname(pkg.__file__)):
        if filename.endswith(".py"):
            m = __import__("{}.{}".format(pkg.__name__, os.path.splitext(filename)[0]))

NB:这未经过测试,但应该为您提供粗略的想法。