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

Python私有包相对导入重导出后无法按模块路径导入类的问题

问题原因

你当前在package/__init__.py中执行的from .src.core import types,只是把package.src.core.types模块对象导入到了package包的命名空间里,但这并没有在文件系统中创建package/types.py或package/types/子模块目录。Python的模块导入默认基于文件结构查找,所以from package.types import Foo会尝试寻找不存在的package.types子模块,最终触发ModuleNotFoundError。

解决方法

以下几种方案都无需将包发布到公共/私有索引,适配你当前的git submodules部署方式:

方案1:手动注册模块别名(无需修改包结构)

在package/__init__.py中添加模块注册表修改逻辑,让Python将package.types指向已有的package.src.core.types模块:

import sys
from .src.core import types
from .src.core import interfaces

# 注册模块别名,让package.types指向src.core下的对应模块
sys.modules['package.types'] = types
sys.modules['package.interfaces'] = interfaces

修改后即可直接使用from package.types import Foo的导入方式。

方案2:添加顶层子模块文件(符合Python模块规范)

在package目录下新建两个文件:types.py和interfaces.py,分别写入以下内容:
package/types.py:

# 从核心模块导出所有内容
from .src.core.types import *

package/interfaces.py:

from .src.core.interfaces import *

这种方式通过创建真实的顶层子模块文件,完全符合Python的模块查找逻辑,from package.types import Foo会直接读取package/types.py,进而导入核心模块的内容。

方案3:保留现有导入方式(无需修改代码)

如果不想调整包结构或修改__init__.py,继续使用当前可行的导入方式即可:

from package import types

def foo(param: types.Foo):
    ...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:07:45