如何隐藏Python包命名空间中的内部模块,仅对外暴露指定函数?
解决方案
你只需要修改包根目录下的__init__.py文件即可实现需求,操作步骤如下:
- 首先删除
__init__.py中所有显式导入core、sequences模块的语句(如果存在的话) - 保留你导入
tint函数的语句,示例:from .core import tint - 在
__init__.py中新增__all__变量,明确指定对外暴露的公共API:
# 示例完整的__init__.py内容 __version__ = "你的版本号" from .core import tint __all__ = ["tint"]
- 如果因为特殊逻辑必须在
__init__.py中导入core、sequences模块,导入后主动删除命名空间中的引用即可:
from . import core from . import sequences from .core import tint # 用完后删除模块引用 del core del sequences __all__ = ["tint"]
修改完成后重新安装包,再次执行dir(tinted)就会得到你期望的输出。__all__是Python官方约定的公共API声明方式,除了控制dir的输出之外,也会限制from tinted import *语句的导入范围,符合Python包开发的最佳实践。
内容的提问来源于stack exchange,提问作者MystPi
相关产品推荐
相关产品推荐

