假设我们希望在 Windows 上使用 Python 2.7
通过键入并点击 来从 GUI 运行命令输入或右键单击Python文件并选择使用IDLE编辑,当IDLE在IDLE中弹出时按F5。
现在假设我们有一个简单的文件目录,例如C:\A\B\C\D
,并且在文件夹D
内我们想要运行示例.py
。我们希望通过某种方式来做到这一点:
- 右键单击打开它,选择使用 IDLE 进行编辑,然后按 F5 或
- 通过拾取每一行代码并在 Python GUI 上输入
假设我们输入命令:
from C.D import example
请记住,C 和 D 是文件夹
,并且在文件夹 D
中我们有 example.py
。我们还在 PYTHONPATH 中设置了环境变量:C:\A\B\C;
,以便 Python
可以将文件夹 D
视为模块并在其内部使用 example.py
子模块进行操作。
是否有必要在文件D之前的每个文件夹中都有一个__init__.py
?
如果文件A
或文件B
不有__init__.py
Python
(记住我们已经输入了环境变量)可以转到文件 C
吗?
目录中每个文件夹中的每一步都必须有一个 __init__.py
吗?
最佳答案
您只需将 __init__.py
添加到必须被视为包的目录中。 PYTHONPATH
搜索路径之外的任何文件夹都不是包,并且不需要有 __init__.py
。
您也不需要在 PYTHONPATH
上列出的顶级目录中使用 __init__
,因为那不是一个包。 C
这里不是一个包,它是模块搜索路径上的一个文件夹。您无法从 C
导入;只有 D
是一个包。
对于您的设置,如果 C:A\B\C
位于模块搜索路径上,则只能搜索 C
中的项目进口的。 C:A\B\C\module.py
可作为 module
导入,并且 C:A\B\C\D\
可导入如果该目录中有 __init__.py
文件,则为 import D
。
Python 使用搜索路径来查找您导入的顶级名称;如果您尝试导入 foo
,则会逐一尝试搜索路径,每个路径都位于硬盘上。 C:\A\B\C
就是这样一个位置,它会在该位置内部查找,但该位置的目录名称永远不是搜索空间的一部分。
请参阅Python tutorial on packages了解更多信息。
关于Python - Windows 目录的每一步都必须有 __init__.py 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23385749/