假设我们希望在Windows 上使用Python 2.7
从GUI >运行命令,方法是输入 Enter 或右键单击Python文件并选择Edit with IDLE ,当IDLE弹出IDLE时,按 F5 。
现在假设我们有一个简单的文件目录,如C:\A\B\C\D
,而在folder D
内我们想要运行example.py
。我们希望以某种方式做到:
我们说我们输入命令:
from C.D import example
请注意C and D are folders
和folder D
内example.py
。C:\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}}吗?
答案 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。