从包中导入所有模块
我有一个包含多个模块的Python包。
我能做什么:
通过修改这个包里的__init__.py
文件,我可以在我的程序中使用包里的所有模块,只需要在里面导入所有模块:
#__init__.py
import module1
import module2
然后我只需在我的程序中导入这个包,就可以通过完整的名称访问所有模块里的类和函数。
#My program
import package
a = package.module1.A()
问题:
有没有办法自动将导入语句添加到__init__.py
中,这样我就不需要手动指定它们了?
2 个回答
3
这个初始化文件不是那样工作的……我觉得你可能在想其他的东西……
如果你的文件结构是这样的:
my_program.py
/my_package
__init__.py
module1.py
module2.py
在 __init__.py
文件里,你可以写这一行代码来改变 import *
在 my_package
中的工作方式。
__all__ = ["module1", "module2"]
现在在 my_program.py
里,你可以这样做:
from my_package import *
a = module1.A()
希望这能帮到你!你可以在这里了解更多信息:https://docs.python.org/2/tutorial/modules.html#importing-from-a-package
3
这是另一个可能更接近你想要的答案。
在 __init__.py
文件中,你可以添加一些代码来导入这个包里的所有 Python 文件。
注意,这个方法不适用于包,不太确定怎么做。而且我是在 Windows 系统上使用的。
from os import listdir
from os.path import abspath, dirname, isfile, join
# get location of __init__.py
init_path = abspath(__file__)
# get folder name of __init__.py
init_dir = dirname(init_path)
# get all python files
py_files = [file_name.replace(".py", "") for file_name in listdir(init_dir) \
if isfile(join(init_dir, file_name)) and ".py" in file_name and not ".pyc" in file_name]
# remove this __init__ file from the list
py_files.remove("__init__")
__all__ = py_files