从包中导入所有模块

时间:2014-04-15 18:27:50

标签: python import package

我有一个包含多个模块的Python包。

我能做什么:

通过导入包中的所有模块,可以通过修改包的__init__.py来使用程序包中的所有模块:

#__init__.py
import module1
import module2

然后我只需在我的程序中导入包,并可以通过全名访问所有模块中的类/函数

#My program
import package
a = package.module1.A()

问题:

有没有办法自动将导入添加到__init__.py,所以我不需要手动指定它们?

2 个答案:

答案 0 :(得分:1)

初始文件并不像那样工作......我认为你正在考虑这样的事情..

如果你有文件结构:

my_program.py
/my_package
    __init__.py
    module1.py
    module2.py
<{1>}在__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

答案 1 :(得分:1)

这是另一个可能更接近你想要的答案。

__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