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

Python-我们必须在Windows中目录的每一步中都有一个_init__u; py.py吗?,python,windows,import,directory,environment-variables,Python,Windows,Import,Directory,Environment Variables,假设我们希望在Windows上使用Python2.7运行命令,通过键入命令并点击Enter键从GUI运行,或者在Python文件上单击鼠标右键并选择Edit with IDLE,当IDLE在IDLE中弹出时,按F5 现在假设我们有一个简单的文件目录,比如C:\a\B\C\D,在文件夹D中,我们想要运行example.py。我们希望通过某种方式做到这一点,即: 通过右键单击打开它,然后选择“使用空闲编辑”,然后按F5或 通过提取每一行代码并在Python GUI上键入她 假设我们键入以下命令:

假设我们希望在Windows上使用
Python2.7
运行命令,通过键入命令并点击Enter键从GUI运行,或者在Python文件上单击鼠标右键并选择Edit with IDLE,当IDLE在IDLE中弹出时,按F5

现在假设我们有一个简单的文件目录,比如
C:\a\B\C\D
,在
文件夹D
中,我们想要运行
example.py
。我们希望通过某种方式做到这一点,即:

  • 通过右键单击打开它,然后选择“使用空闲编辑”,然后按F5或
  • 通过提取每一行代码并在Python GUI上键入她
假设我们键入以下命令:

from C.D import example
请记住,
C和D是文件夹
,在
文件夹D
中我们有
example.py
。我们还设置了环境变量:
C:\A\B\C,以便
Python
可以将
文件夹D
视为一个模块,并在其中使用
example.py
子模块进行操作

是否有必要在文件D之前的每个文件夹中都有一个
\uuuu init\uuuuuuuuuuuuuuupy

如果
文件A
文件B
是否没有
\uuu init\uuuuuuuuuuuupy
可以
Python
(记住我们已经输入了环境变量)转到
文件C


必须在目录中的每个文件夹中的每一步都有一个
\uuuu init\uuuuuuuuuuuuuuuuupy

您只需要将
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu init.py
添加到必须视为包的目录中。
PYTHONPATH
搜索路径之外的任何文件夹都不是包,不需要有
\uuuu init\uuuu.py

您也不需要在
PYTHONPATH
上列出的顶级目录中使用
\uuuu init\uuuu
,因为这不是一个包<代码>C
在这里不是一个包,它是模块搜索路径上的一个文件夹。不能从
C
导入;只有
D
是一个包

对于您的设置,如果模块搜索路径上有
C:A\B\C
,则只能导入
C
中的项目
C:A\B\C\module.py
可作为
module
导入,如果该目录中有
\uu init\uuuu.py
文件,则
C:A\B\C\D\
可导入

Python使用搜索路径查找您导入的顶级名称;如果尝试导入
foo
,将逐个尝试搜索路径,每个路径都位于硬盘上的一个位置
C:\A\B\C
就是这样一个位置,它将在该位置内查找,但该位置的目录名永远不会是搜索空间的一部分


有关详细信息,请参阅。

您只需将
\uuuu init\uuuuuuupy
添加到必须视为包的目录中。
PYTHONPATH
搜索路径之外的任何文件夹都不是包,不需要有
\uuuu init\uuuu.py

您也不需要在
PYTHONPATH
上列出的顶级目录中使用
\uuuu init\uuuu
,因为这不是一个包<代码>C在这里不是一个包,它是模块搜索路径上的一个文件夹。不能从
C
导入;只有
D
是一个包

对于您的设置,如果模块搜索路径上有
C:A\B\C
,则只能导入
C
中的项目
C:A\B\C\module.py
可作为
module
导入,如果该目录中有
\uu init\uuuu.py
文件,则
C:A\B\C\D\
可导入

Python使用搜索路径查找您导入的顶级名称;如果尝试导入
foo
,将逐个尝试搜索路径,每个路径都位于硬盘上的一个位置
C:\A\B\C
就是这样一个位置,它将在该位置内查找,但该位置的目录名永远不会是搜索空间的一部分


有关更多信息,请参阅。

Python的包行为在不同操作系统之间没有差异;不管这是不是Windows。我强调我们使用Windows是因为我在特定操作系统中测试代码行的方式,即在GUI上选择每一行并键入她,或者在空闲窗口中按F5。Python的包行为在不同的操作系统之间没有差异;这与Windows无关。我强调我们使用Windows是因为我在特定操作系统中测试代码行的方式,即在GUI上选择每行并键入代码,或者在空闲状态下按F5。如果C有
\uu init\uuuuuuuuuuuuuy.py
,为什么我不能导入它?@exoticbirdmerchant:因为它不在python中路径您需要将
C:\A\B
添加到路径中,而不是
C:\A\B\C
。既然一个文件夹位于PYTHONPATH搜索路径之外,我们该如何处理呢?我的意思是,一个目录就像一个链,为了让python进入文件夹C,它必须从B传递,它们共存。是吗?@ExoticBirdsMerchant:当您导入
C
时,Python会查找
C:\A\B\C\C
,因为这是查找顶级模块和包的地方之一。@ExoticBirdsMerchant:Python不会将搜索路径目录视为链。它只是硬盘上的一个位置。为什么我不能导入C,如果它有一个
\uuu init\uuuu.py
?@ExoticBirdsMerchant:因为它不在python路径中;您需要将
C:\A\B
添加到路径中,而不是
C:\A\B\C
。既然一个文件夹位于PYTHONPATH搜索路径之外,我们该如何处理呢?我的意思是,一个目录就像一个链,为了让python进入文件夹C,它必须从B传递,它们共存。是吗?@ExoticBirdsMerchant:当您导入
C
时,Python会查找
C:\A\B\C\C
,因为这是查找顶级模块和包的地方之一。@ExoticBirdsMerchant:Python不会将搜索路径目录视为