首页 > 解决方案 > 为什么在没有 init 的情况下使用顶级目录的导入在 Python 中工作?

问题描述

在此处输入图像描述

我在这里克隆了项目:https ://github.com/open-switch/opx-tools并将其加载到 PyCharm 中进行一些调试。我不明白的是原行说from opx_tools.opx_config_utils import *。我使用此导入在实际交换机上运行 OpenSwitch,它工作得很好,但我不明白为什么。

opx_tools 是顶级目录的名称,其中没有__init__文件,顶级目录中也没有名为 opx_config_utils 的文件。opx_config_utils 存在,但它在 lib 目录中。在我的 PyCharm 实例中,在导入中将 opx_tools 更改为 lib 修复了导入并允许我搜索声明等。

我的 PyCharm 环境和“生产”环境有什么区别?为什么 opx_tools 有效?

标签: pythonimport

解决方案


从 3.3 版开始,Python 让您隐式定义命名空间包。与常规包相反,这些包不需要包含在单个文件夹和子文件夹中,也不需要__init__.py文件。

有关详细信息,请参阅PEP 420


推荐阅读