You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入pkg.__init__替代import pkg的文档化行为与差异探究

单模块转包的导入陷阱:distributed vs distributed.__init__

需要明确的是,本文并非建议直接导入pkg.__init__,而是为了梳理将单模块发行版转换为包时的潜在陷阱——当前类型规范无法为单模块发行版捆绑静态类型信息。

项目结构转换对比

原单模块结构:

project/
  distributed.py

转换为包结构后:

project/
  distributed/
    __init__.py

第三方用户的导入方式

部分第三方用户可能会执行以下导入操作:

import distributed.__init__
# 和/或
import distributed.__init__ as distributed

已知导入行为差异

  • distributed和distributed.__init__均会出现在sys.modules中。
  • distributed.__init__会运行两次,Python会为每次运行创建不同的模块对象,因此sys.modules["distributed"] is not sys.modules["distributed.__init__"],且distributed.__init__内直接定义的多数对象在两个模块版本间身份不相等。

待补充的差异与参考

现寻求distributed与distributed.__init__的其他行为差异(如可用__dunder__名称差异、相对导入行为差异),以及相关官方参考或CPython源码中的对应说明。

注:不讨论包类型信息的替代方案,如分发单个.pyi存根或发布至typeshed,此类方案已了解。

内容的提问来源于stack exchange,提问作者dROOOze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 02:52:11