Python - 我们必须在Windows的目录的每一步中都有__init__.py吗?

时间:2014-04-30 10:31:36

标签: python windows import directory environment-variables

假设我们希望在Windows 上使用Python 2.7从GUI 运行命令,方法是输入 Enter 右键单击Python文件并选择Edit with IDLE ,当IDLE弹出IDLE时,按 F5

现在假设我们有一个简单的文件目录,如C:\A\B\C\D,而在folder D内我们想要运行example.py。我们希望以某种方式做到:

  • 通过右键单击打开它,然后选择使用IDLE编辑并按 F5
  • 通过拾取每行代码并在Python GUI上键入她

我们说我们输入命令:

from C.D import example

请注意C and D are foldersfolder Dexample.pyC:\A\B\C;。我们还在PYTHONPATH中设置了环境变量Python,以便folder D可以将example.py视为一个模块,并且其内部使用__init__.py子模块进行操作。

是否有必要文件D之前的每个文件夹中都有file A

如果 file B__init__.py Python可以file C(请记住我们已输入环境变量)转到__init__.py

在目录中的每个文件夹中 aka 的每一步中都必须有{{1}}吗?

1 个答案:

答案 0 :(得分:3)

您只需要将__init__.py添加到必须被视为包的目录中。 PYTHONPATH搜索路径之外的任何文件夹从不一个包,不需要__init__.py

__init__上列出的顶级目录中也不需要PYTHONPATH,因为那不是包。 C不是此处的包,它是模块搜索路径上的文件夹。您无法从C导入;只有D是一个包。

对于您的设置,如果C:A\B\C位于模块搜索路径上,则只能导入 C中的项。 C:A\B\C\module.py可导入为module,如果该目录中有C:A\B\C\D\个文件,则__init__.py可导入{。{1}}。

Python使用搜索路径查找您导入的顶级名称;如果您尝试导入import D,则会逐个尝试搜索路径,每个位置都是硬盘上的一个位置。 foo就是这样一个位置,它会在那个位置看,但该位置的目录名永远不会是搜索空间的一部分。

有关详细信息,请参阅Python tutorial on packages