在init文件中导入python模块

时间:2017-06-14 12:22:50

标签: python init python-module

我在这样的结构中有python脚本:

Folder:
    -main.py
    SubFolder:
        -file1.py
        -file2.py
        -filen.py
        -__init__.py

file1有一个模块可以调用它" module1()"和变量"变量1"。

file2有" module2()"和"变量2"等

到目前为止,它完美无缺,我用这种方式:

在main中:

from subFolder import file1, file2
file1.module1()
file2.module2(file1.variable1)

file1.variable1

但是由于subFolder中有很多文件,我想让它更干净,更优雅。 我尝试在 init .py文件中写这个

from file1 import module1
from file2 import module2
etc

然后是主要的:

 import subFolder as sf
 sf.module1()
 sf.module2(sf.variable1)  <--

似乎对模块正常工作,但不适用于变量(由箭头指示)。 我该怎么办?难道我做错了什么? 提前致谢

1 个答案:

答案 0 :(得分:0)

您需要明确导入它,但由于您提到package“SubFolder”中有很多模块,我建议您使用dunder __all__ 所以你可以输入:

from subFolder import *

它会导入您在__all__内的__init__.py中指定的所有内容。

有关详细信息和示例,请参阅@ alec-thomas here的回答。

<强>优点:

  • 无需明确指定每个模块,函数或变量。
  • 一次导入可为您提供所需的一切。

<强>缺点:

  • 每次添加,重命名或删除子模块中的内容时,您都必须记住更新__all__
  • 随着时间的推移,如果你有很多子模块,就不清楚究竟会导入什么。