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

如何在Python timecode包中将modes子模块以Modes名称导出?

解决Python包导入Modes的报错问题

问题原因

你在__init__.py中使用from . import modes as Modes后,若使用者尝试以import timecode.Modes的方式导入会报错——因为Modes是__init__.py中定义的模块别名,并非实际子模块。而你需要的是让Modes作为包含DropFrame、NonDropFrame的命名空间供用户调用。

解决方案

修改timecode/__init__.py文件,以下两种方式任选其一:

方式一:直接将modes模块赋值为Modes并导出

这种方式保留modes模块原有结构,让Modes直接指向原模块:

# timecode/__init__.py
# 导入核心类
from .timecode import Timecode
from .timecoderange import TimecodeRange
# 将modes模块别名为Modes
from . import modes as Modes

# 显式声明可导出的成员
__all__ = ["Timecode", "TimecodeRange", "Modes"]

用户可按预期使用:

from timecode import Timecode, TimecodeRange, Modes
tc = Timecode("01:00:00:00", mode=Modes.NonDropFrame())

方式二:封装为类命名空间(更直观)

如果希望Modes看起来更像统一配置类,可将modes中的类封装到空类中:

# timecode/__init__.py
from .timecode import Timecode
from .timecoderange import TimecodeRange
from .modes import DropFrame, NonDropFrame

# 定义Modes类作为命名空间
class Modes:
    DropFrame = DropFrame
    NonDropFrame = NonDropFrame

__all__ = ["Timecode", "TimecodeRange", "Modes"]

用户调用方式完全一致,这种方式更符合“命名空间”的直观认知,避免用户将Modes误认为模块。

验证步骤

  1. 确保包结构不变:
timecode/
    __init__.py
    timecode.py
    timecoderange.py
    modes.py
  1. 用pip install -e .以开发模式安装包
  2. 在外部环境测试导入和调用,确认无报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:47:14