导入包中的所有模块?

Importing all modules in a package?

这是我的文件层次结构:

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

现在我想做的是这样的:

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

所以基本上我希望它自动导入 package 包中的所有内容。 这可能吗? 我宁愿不必手动编写导入,因为我希望它成为 "drag&drop your files here and you're done" 一种系统。

我建议使用 Python 的 pkgutil.iter_modules

示例:

import pkgutil


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

如何处理迭代子模块由用户决定。

另一种常用的方法是使用 pkg_resources which you can also look into and I believe comes as part of 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]))

注意:这没有经过测试,但应该会给你一个粗略的想法。