python - 为什么在没有 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 有效?
解决方案
从 3.3 版开始,Python 让您隐式定义命名空间包。与常规包相反,这些包不需要包含在单个文件夹和子文件夹中,也不需要__init__.py
文件。
有关详细信息,请参阅PEP 420。
推荐阅读
- javascript - 反应原生:有办法显示来自 json 的特定项目吗?
- javascript - 如何在 react-router 中导航到带有百分比符号的路径?
- node.js - 过滤时出现NodeJS String.replace()问题
- jboss - 我们如何使用 jboss cli 从 jboss mq 中删除特定消息
- sql - 通配符运算符用于排除字符前后的所有数字
- java - 如何使用 QueueChannel 和 ServiceActivator 正确配置 TCP inboundAdapter
- c++ - 运行 Linux 的嵌入式 SoC 上的 REST API + Web 服务器
- java - 如何使用带有 CXF 的 WSS 保护 SOAP Web 服务
- react-native - 如果付款成功,如何导航到另一个页面
- mongodb - 在表达式下匹配聚合中的多个条件