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

标签 python windows import directory environment-variables

假设我们希望在 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/

相关文章:

c++ - HRESULT:区分自定义代码和系统一

import - Tensorflow 0.8 import/export 输出张量问题

objective-c - 子类化时的前向声明与#import

python - 二进制数据到 Unicode

python - 我们还应该为 ZipFile.open 捕获什么异常

python - pandas - 获取未排序的分层列

c++ - 有人能告诉我为什么复制这样的文件不起作用吗?

linux - 使用 Vagrant 和 Virtual box 创建开发服务器时出错

python - PyPy:导入错误:没有名为请求的模块

Python 顶级 JSON 索引