【问题标题】:Importing all modules in a package?导入包中的所有模块?
【发布时间】:2015-04-24 09:54:06
【问题描述】:

这是我的文件层次结构:

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

现在我想做的是这样的:

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

所以基本上我希望它自动导入 package 包中的所有内容。 这可能吗? 我宁愿不必手动编写导入,因为我希望它是“将文件拖放到这里就完成了”的系统。

【问题讨论】:

    标签: python python-3.x import


    【解决方案1】:

    我推荐使用 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]))
    

    注意:这未经测试,但应该给您一个粗略的想法。

    【讨论】:

    • 如果我只需要这样做,我将如何从这里导入它们?在 for 循环中使用__import__(name)?
    • 是的。不过可能需要做更多的工作 :) 有很多方法可以解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2011-03-30
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2011-03-22
    相关资源
    最近更新 更多