导入包中的所有模块?
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]))
注意:这没有经过测试,但应该会给你一个粗略的想法。
这是我的文件层次结构:
|--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]))
注意:这没有经过测试,但应该会给你一个粗略的想法。